From fdc373d639075b0b888f185df8b8f66fa79bf67c Mon Sep 17 00:00:00 2001 From: Matthew Avery Date: Thu, 29 Dec 2016 16:01:10 -0500 Subject: [PATCH 001/169] deps: fix compile bug in v8/lookup.h Fixed a small error that manifests when --debug is specified. This seems to have been introduced during the backport #9422. Ref: https://github.com/nodejs/node/pull/9422 PR-URL: https://github.com/nodejs/node/pull/10525 Reviewed-By: ofrobots - Ali Ijaz Sheikh Reviewed-By: mhdawson - Michael Dawson --- deps/v8/include/v8-version.h | 2 +- deps/v8/src/lookup.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index fb83ab5c6ca287..35984a97ad2e8a 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 89 +#define V8_PATCH_LEVEL 90 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/src/lookup.h b/deps/v8/src/lookup.h index 3fbd9b41002f92..961303c64f18cc 100644 --- a/deps/v8/src/lookup.h +++ b/deps/v8/src/lookup.h @@ -179,7 +179,7 @@ class LookupIterator final BASE_EMBEDDED { Handle GetReceiver() const { return receiver_; } Handle GetStoreTarget() const { - DCHECK(receiver->IsJSObject()); + DCHECK(receiver_->IsJSObject()); if (receiver_->IsJSGlobalProxy()) { Map* map = JSGlobalProxy::cast(*receiver_)->map(); if (map->has_hidden_prototype()) { From f77fcf893fae9ed232d33b7dceb239b2a8141155 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Sun, 8 Jan 2017 21:11:24 +0100 Subject: [PATCH 002/169] deps: cherry-pick baba152 from V8 upstream Original commit message: fix stepping out of across throwing. R=jgruber@chromium.org BUG=v8:5559 Review-Url: https://codereview.chromium.org/2445233004 Cr-Commit-Position: refs/heads/master@{#40549} PR-URL: https://github.com/nodejs/node/pull/10689 Fixes: https://github.com/nodejs/node/issues/9175 Reviewed-By: James M Snell Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Michael Dawson --- deps/v8/include/v8-version.h | 2 +- deps/v8/src/debug/debug.cc | 2 +- deps/v8/test/mjsunit/regress/regress-5559.js | 38 ++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 deps/v8/test/mjsunit/regress/regress-5559.js diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 35984a97ad2e8a..79f057037b4dc7 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 90 +#define V8_PATCH_LEVEL 91 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) diff --git a/deps/v8/src/debug/debug.cc b/deps/v8/src/debug/debug.cc index cb2d8648aabe68..02a109400c030d 100644 --- a/deps/v8/src/debug/debug.cc +++ b/deps/v8/src/debug/debug.cc @@ -962,7 +962,7 @@ void Debug::PrepareStepOnThrow() { it.Advance(); } - if (last_step_action() == StepNext) { + if (last_step_action() == StepNext || last_step_action() == StepOut) { while (!it.done()) { Address current_fp = it.frame()->UnpaddedFP(); if (current_fp >= thread_local_.target_fp_) break; diff --git a/deps/v8/test/mjsunit/regress/regress-5559.js b/deps/v8/test/mjsunit/regress/regress-5559.js new file mode 100644 index 00000000000000..c6f32575f55b9b --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-5559.js @@ -0,0 +1,38 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --expose-debug-as debug + +Debug = debug.Debug + +var exception = null; +var break_count = 0; + +function listener(event, exec_state, event_data, data) { + if (event != Debug.DebugEvent.Break) return; + try { + print(event_data.sourceLineText()); + assertTrue( + event_data.sourceLineText().indexOf(`Break ${break_count++}.`) > 0); + exec_state.prepareStep(Debug.StepAction.StepOut); + } catch (e) { + exception = e; + } +}; + +function thrower() { + try { + debugger; // Break 0. + throw 'error'; + } catch (err) { + } +} + + +Debug.setListener(listener); +thrower(); +Debug.setListener(null); // Break 1. + +assertNull(exception); +assertEquals(2, break_count); From 8ea4487ca7fa2d58a634c18711d3f0697ebc71ec Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Sat, 12 Nov 2016 16:49:40 -0500 Subject: [PATCH 003/169] process: add `process.memoryUsage.external` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/9587 Reviewed-By: Ben Noordhuis Reviewed-By: Matteo Collina Reviewed-By: Michaël Zasso Reviewed-By: Johan Bergström Reviewed-By: Colin Ihrig Reviewed-By: Roman Reiss Reviewed-By: Anna Henningsen --- doc/api/process.md | 6 +++++- src/env.h | 1 + src/node.cc | 4 ++++ test/parallel/test-memory-usage.js | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/api/process.md b/doc/api/process.md index 7b6ed03edfc79e..05c83dceb7fb94 100644 --- a/doc/api/process.md +++ b/doc/api/process.md @@ -1165,6 +1165,7 @@ added: v0.1.16 * `rss` {Integer} * `heapTotal` {Integer} * `heapUsed` {Integer} + * `external` {Integer} The `process.memoryUsage()` method returns an object describing the memory usage of the Node.js process measured in bytes. @@ -1181,11 +1182,14 @@ Will generate: { rss: 4935680, heapTotal: 1826816, - heapUsed: 650472 + heapUsed: 650472, + external: 49879 } ``` `heapTotal` and `heapUsed` refer to V8's memory usage. +`external` refers to the memory usage of C++ objects bound to JavaScript +objects managed by V8. ## process.nextTick(callback[, ...args]) +Allows configuration of `tty.ReadStream` so that it operates as a raw device. + +When in raw mode, input is always available character-by-character, not +including modifiers. Additionally, all special processing of characters by the +terminal is disabled, including echoing input characters. +Note that `CTRL`+`C` will no longer cause a `SIGINT` when in this mode. + * `mode` {boolean} If `true`, configures the `tty.ReadStream` to operate as a raw device. If `false`, configures the `tty.ReadStream` to operate in its default mode. The `readStream.isRaw` property will be set to the resulting From a56b22e881c5097efcf59d3a8356db7e14210535 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Wed, 7 Dec 2016 13:08:27 -0800 Subject: [PATCH 007/169] test: fix flaky test-net-socket-timeout The setTimeout() call is unneeded. If the socket never times out, then the test will never finish. Because timers can be unreliable on machines under load, using setTimeout() here effectively creates a race condition. PR-URL: https://github.com/nodejs/node/pull/10172 Reviewed-By: Michael Dawson Reviewed-By: Colin Ihrig Reviewed-By: Santiago Gimeno --- test/parallel/test-net-socket-timeout.js | 29 ++++++++++++------------ 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/test/parallel/test-net-socket-timeout.js b/test/parallel/test-net-socket-timeout.js index 54f5ce301cc52e..61ea54debeaa61 100644 --- a/test/parallel/test-net-socket-timeout.js +++ b/test/parallel/test-net-socket-timeout.js @@ -1,14 +1,17 @@ 'use strict'; -var common = require('../common'); -var net = require('net'); -var assert = require('assert'); +const common = require('../common'); +const net = require('net'); +const assert = require('assert'); // Verify that invalid delays throw -var noop = function() {}; -var s = new net.Socket(); -var nonNumericDelays = ['100', true, false, undefined, null, '', {}, noop, []]; -var badRangeDelays = [-0.001, -1, -Infinity, Infinity, NaN]; -var validDelays = [0, 0.001, 1, 1e6]; +const noop = function() {}; +const s = new net.Socket(); +const nonNumericDelays = [ + '100', true, false, undefined, null, '', {}, noop, [] +]; +const badRangeDelays = [-0.001, -1, -Infinity, Infinity, NaN]; +const validDelays = [0, 0.001, 1, 1e6]; + for (let i = 0; i < nonNumericDelays.length; i++) { assert.throws(function() { @@ -28,15 +31,11 @@ for (let i = 0; i < validDelays.length; i++) { }); } -var server = net.Server(); +const server = net.Server(); server.listen(0, common.mustCall(function() { - var socket = net.createConnection(this.address().port); - socket.setTimeout(100, common.mustCall(function() { + const socket = net.createConnection(this.address().port); + socket.setTimeout(1, common.mustCall(function() { socket.destroy(); server.close(); - clearTimeout(timer); })); - var timer = setTimeout(function() { - process.exit(1); - }, common.platformTimeout(200)); })); From b5f747187dfac9ac201af4ade6743dcc7f5dded5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Karl=20B=C3=B6hlmark?= Date: Tue, 1 Nov 2016 16:59:31 +0100 Subject: [PATCH 008/169] http: remove stale timeout listeners In order to prevent a memory leak when using keep alive, ensure that the timeout listener for the request is removed when the response has ended. PR-URL: https://github.com/nodejs/node/pull/9440 Reviewed-By: Evan Lucas Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig --- lib/_http_client.js | 8 +++- ...st-http-client-timeout-option-listeners.js | 44 +++++++++++++++++++ 2 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-http-client-timeout-option-listeners.js diff --git a/lib/_http_client.js b/lib/_http_client.js index 423445d6a6f091..4ca03eae6796ac 100644 --- a/lib/_http_client.js +++ b/lib/_http_client.js @@ -563,7 +563,13 @@ function tickOnSocket(req, socket) { socket.on('close', socketCloseListener); if (req.timeout) { - socket.once('timeout', () => req.emit('timeout')); + const emitRequestTimeout = () => req.emit('timeout'); + socket.once('timeout', emitRequestTimeout); + req.once('response', (res) => { + res.once('end', () => { + socket.removeListener('timeout', emitRequestTimeout); + }); + }); } req.emit('socket', socket); } diff --git a/test/parallel/test-http-client-timeout-option-listeners.js b/test/parallel/test-http-client-timeout-option-listeners.js new file mode 100644 index 00000000000000..3ac6cd4616b496 --- /dev/null +++ b/test/parallel/test-http-client-timeout-option-listeners.js @@ -0,0 +1,44 @@ +'use strict'; +const common = require('../common'); +const http = require('http'); +const assert = require('assert'); + +const agent = new http.Agent({ keepAlive: true }); + +const server = http.createServer((req, res) => { + res.end(''); +}); + +const options = { + agent, + method: 'GET', + port: undefined, + host: common.localhostIPv4, + path: '/', + timeout: common.platformTimeout(100) +}; + +server.listen(0, options.host, common.mustCall(() => { + options.port = server.address().port; + doRequest(common.mustCall((numListeners) => { + assert.strictEqual(numListeners, 1); + doRequest(common.mustCall((numListeners) => { + assert.strictEqual(numListeners, 1); + server.close(); + agent.destroy(); + })); + })); +})); + +function doRequest(cb) { + http.request(options, common.mustCall((response) => { + const sockets = agent.sockets[`${options.host}:${options.port}:`]; + assert.strictEqual(sockets.length, 1); + const socket = sockets[0]; + const numListeners = socket.listeners('timeout').length; + response.resume(); + response.once('end', common.mustCall(() => { + process.nextTick(cb, numListeners); + })); + })).end(); +} From 717b4b4e8ade9357cb37490f9fcf64b9d08d5382 Mon Sep 17 00:00:00 2001 From: joyeecheung Date: Thu, 1 Dec 2016 10:44:55 -0600 Subject: [PATCH 009/169] test: increase test coverage of BufferList Add tests for edges cases of BufferList: - test operations when the length is 0 - test operations when the list only has one element PR-URL: https://github.com/nodejs/node/pull/10171 Reviewed-By: Colin Ihrig Reviewed-By: Anna Henningsen --- test/parallel/test-stream-buffer-list.js | 27 ++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 test/parallel/test-stream-buffer-list.js diff --git a/test/parallel/test-stream-buffer-list.js b/test/parallel/test-stream-buffer-list.js new file mode 100644 index 00000000000000..ddbff452de4be9 --- /dev/null +++ b/test/parallel/test-stream-buffer-list.js @@ -0,0 +1,27 @@ +// Flags: --expose_internals +'use strict'; +require('../common'); +const assert = require('assert'); +const BufferList = require('internal/streams/BufferList'); + +// Test empty buffer list. +const emptyList = new BufferList(); + +emptyList.shift(); +assert.deepStrictEqual(emptyList, new BufferList()); + +assert.strictEqual(emptyList.join(','), ''); + +assert.deepStrictEqual(emptyList.concat(0), Buffer.alloc(0)); + +// Test buffer list with one element. +const list = new BufferList(); +list.push('foo'); + +assert.strictEqual(list.concat(1), 'foo'); + +assert.strictEqual(list.join(','), 'foo'); + +const shifted = list.shift(); +assert.strictEqual(shifted, 'foo'); +assert.deepStrictEqual(list, new BufferList()); From 8e7f150a8ef67fab9247f559cd8a5688aef19243 Mon Sep 17 00:00:00 2001 From: davidmarkclements Date: Thu, 1 Dec 2016 14:12:17 -0600 Subject: [PATCH 010/169] test: refactor test-http-unix-socket Use `common.mustCall()` and `common.fail()` where appropriate. Change `assert.equal` to `assert.strictEqual` to ensure specificity. Change var declarations to const to take advantage of ES6 immutable bindings. PR-URL: https://github.com/nodejs/node/pull/10072 Reviewed-By: Matteo Collina Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Santiago Gimeno --- test/parallel/test-http-unix-socket.js | 29 +++++++++++++------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/test/parallel/test-http-unix-socket.js b/test/parallel/test-http-unix-socket.js index 69c887b53bdbb1..d2b99bde95a234 100644 --- a/test/parallel/test-http-unix-socket.js +++ b/test/parallel/test-http-unix-socket.js @@ -1,9 +1,9 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var http = require('http'); +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); -var server = http.createServer(function(req, res) { +const server = http.createServer(function(req, res) { res.writeHead(200, { 'Content-Type': 'text/plain', 'Connection': 'close' @@ -23,8 +23,8 @@ server.listen(common.PIPE, common.mustCall(function() { }; var req = http.get(options, common.mustCall(function(res) { - assert.equal(res.statusCode, 200); - assert.equal(res.headers['content-type'], 'text/plain'); + assert.strictEqual(res.statusCode, 200); + assert.strictEqual(res.headers['content-type'], 'text/plain'); res.body = ''; res.setEncoding('utf8'); @@ -34,19 +34,18 @@ server.listen(common.PIPE, common.mustCall(function() { }); res.on('end', common.mustCall(function() { - assert.equal(res.body, 'hello world\n'); - server.close(function(error) { - assert.equal(error, undefined); - server.close(function(error) { - assert.equal(error && error.message, 'Not running'); - }); - }); + assert.strictEqual(res.body, 'hello world\n'); + server.close(common.mustCall(function(error) { + assert.strictEqual(error, undefined); + server.close(common.mustCall(function(error) { + assert.strictEqual(error && error.message, 'Not running'); + })); + })); })); })); req.on('error', function(e) { - console.log(e.stack); - process.exit(1); + common.fail(e.stack); }); req.end(); From 56a512f7be8bbdd0a3f4211d5e46eba488df12bf Mon Sep 17 00:00:00 2001 From: Matt Phillips Date: Thu, 1 Dec 2016 11:32:45 -0600 Subject: [PATCH 011/169] test: check for error on invalid signal Asserts that an error should be thrown when an invalid signal is passed to process.kill(). PR-URL: https://github.com/nodejs/node/pull/10026 Reviewed-By: Ben Noordhuis Reviewed-By: Jeremiah Senkpiel Reviewed-By: Colin Ihrig --- test/parallel/test-process-kill-pid.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/parallel/test-process-kill-pid.js b/test/parallel/test-process-kill-pid.js index 5c11be2903c4a7..ee0554c32083f6 100644 --- a/test/parallel/test-process-kill-pid.js +++ b/test/parallel/test-process-kill-pid.js @@ -24,6 +24,10 @@ assert.throws(function() { process.kill(+'not a number'); }, TypeError); assert.throws(function() { process.kill(1 / 0); }, TypeError); assert.throws(function() { process.kill(-1 / 0); }, TypeError); +// Test that kill throws an error for invalid signal + +assert.throws(function() { process.kill(1, 'test'); }, Error); + // Test kill argument processing in valid cases. // // Monkey patch _kill so that we don't actually send any signals, particularly From 016290870890d0db00c91ce401f34e8d0308c289 Mon Sep 17 00:00:00 2001 From: Daniel Bevenius Date: Sat, 3 Dec 2016 07:56:01 +0100 Subject: [PATCH 012/169] tools: add macosx-firwall script to avoid popups Currently, there are a number of popups that get displayed when running the tests asking to accept incoming network connections. Rules can be added manually to the socket firewall on Mac OS X but getting this right might not be obvious and quite a lot of time can be wasted trying to get the rules right. This script hopes to simplify things a little so that it can be re-run when needed. The script should be runnable from both the projects root directory and from the tools directory, for example: $ sudo ./tools/macosx-firewall.sh Fixes: https://github.com/nodejs/node/issues/8911 PR-URL: https://github.com/nodejs/node/pull/10114 Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell Reviewed-By: Gibson Fahnestock Reviewed-By: Colin Ihrig --- BUILDING.md | 9 ++++++++ tools/macosx-firewall.sh | 48 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+) create mode 100755 tools/macosx-firewall.sh diff --git a/BUILDING.md b/BUILDING.md index 5051da343353b3..b1060744f75d24 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -24,6 +24,15 @@ On OS X, you will also need: this under the menu `Xcode -> Preferences -> Downloads` * This step will install `gcc` and the related toolchain containing `make` +* You may want to setup [firewall rules](tools/macosx-firewall.sh) to avoid +popups asking to accept incoming network connections when running tests: + +```console +$ sudo ./tools/macosx-firewall.sh +``` +Running this script will add rules for the executable `node` in the out +directory and the symbolic `node` link in the projects root directory. + On FreeBSD and OpenBSD, you may also need: * libexecinfo diff --git a/tools/macosx-firewall.sh b/tools/macosx-firewall.sh new file mode 100755 index 00000000000000..c1de916e3c87ea --- /dev/null +++ b/tools/macosx-firewall.sh @@ -0,0 +1,48 @@ +#!/bin/bash +# Script that adds rules to Mac OS X Socket Firewall to avoid +# popups asking to accept incoming network connections when +# running tests. +SFW="/usr/libexec/ApplicationFirewall/socketfilterfw" +TOOLSDIR="`dirname \"$0\"`" +TOOLSDIR="`( cd \"$TOOLSDIR\" && pwd) `" +ROOTDIR="`( cd \"$TOOLSDIR/..\" && pwd) `" +OUTDIR="$TOOLSDIR/../out" +# Using cd and pwd here so that the path used for socketfilterfw does not +# contain a '..', which seems to cause the rules to be incorrectly added +# and they are not removed when this script is re-run. Instead the new +# rules are simply appended. By using pwd we can get the full path +# without '..' and things work as expected. +OUTDIR="`( cd \"$OUTDIR\" && pwd) `" +NODE_RELEASE="$OUTDIR/Release/node" +NODE_DEBUG="$OUTDIR/Debug/node" +NODE_LINK="$ROOTDIR/node" +CCTEST_RELEASE="$OUTDIR/Release/cctest" +CCTEST_DEBUG="$OUTDIR/Debug/cctest" + +if [ -f $SFW ]; +then + # Duplicating these commands on purpose as the symbolic link node might be + # linked to either out/Debug/node or out/Release/node depending on the + # BUILDTYPE. + $SFW --remove "$NODE_DEBUG" + $SFW --remove "$NODE_DEBUG" + $SFW --remove "$NODE_RELEASE" + $SFW --remove "$NODE_RELEASE" + $SFW --remove "$NODE_LINK" + $SFW --remove "$CCTEST_DEBUG" + $SFW --remove "$CCTEST_RELEASE" + + $SFW --add "$NODE_DEBUG" + $SFW --add "$NODE_RELEASE" + $SFW --add "$NODE_LINK" + $SFW --add "$CCTEST_DEBUG" + $SFW --add "$CCTEST_RELEASE" + + $SFW --unblock "$NODE_DEBUG" + $SFW --unblock "$NODE_RELEASE" + $SFW --unblock "$NODE_LINK" + $SFW --unblock "$CCTEST_DEBUG" + $SFW --unblock "$CCTEST_RELEASE" +else + echo "SocketFirewall not found in location: $SFW" +fi From 5b6317b10f4a824120edf9c8e392777306b91b93 Mon Sep 17 00:00:00 2001 From: Jonathan Darling Date: Thu, 1 Dec 2016 10:47:46 -0600 Subject: [PATCH 013/169] doc: add note to parallelize make Adds a note to the BUILDING doc to encourage parallelizing make. When I first built node I didn't know this trick and thought that the build was just stuck in an infinite loop after waiting for 10 minutes. Refs: https://github.com/nodejs/node/issues/8286 Refs: https://github.com/nodejs/node/pull/9881 PR-URL: https://github.com/nodejs/node/pull/9961 Reviewed-By: Jeremiah Senkpiel Reviewed-By: James M Snell Reviewed-By: Gibson Fahnestock Reviewed-By: Ben Noordhuis Reviewed-By: Stephen Belanger --- BUILDING.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/BUILDING.md b/BUILDING.md index b1060744f75d24..b1962d53c2caf4 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -40,9 +40,17 @@ To build Node.js: ```console $ ./configure -$ make +$ make -j4 ``` +Running `make` with the `-j4` flag will cause it to run 4 compilation jobs +concurrently which may significantly reduce build time. The number after `-j` +can be changed to best suit the number of processor cores on your machine. If +you run into problems running `make` with concurrency, try running it without +the `-j4` flag. See the +[GNU Make Documentation](https://www.gnu.org/software/make/manual/html_node/Parallel.html) +for more information. + Note that the above requires that `python` resolve to Python 2.6 or 2.7 and not a newer version. To run the tests: From 718b5902bc3fa5a54fa8c8492f7224cbcec3532b Mon Sep 17 00:00:00 2001 From: Jonathan Darling Date: Tue, 6 Dec 2016 13:08:56 -0600 Subject: [PATCH 014/169] doc: standardizing on make -j4 Standardizes docs to use -j4 instead of -j8 as it appears to be the most inclusive recommendation based on discussion in https://github.com/nodejs/node/pull/9961. PR-URL: https://github.com/nodejs/node/pull/9961 Reviewed-By: Jeremiah Senkpiel Reviewed-By: James M Snell Reviewed-By: Gibson Fahnestock Reviewed-By: Ben Noordhuis Reviewed-By: Stephen Belanger --- .github/PULL_REQUEST_TEMPLATE.md | 2 +- CONTRIBUTING.md | 4 ++-- doc/guides/building-node-with-ninja.md | 2 +- doc/onboarding-extras.md | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6bf44097890794..7b004801207054 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -9,7 +9,7 @@ Contributors guide: https://github.com/nodejs/node/blob/master/CONTRIBUTING.md ##### Checklist -- [ ] `make -j8 test` (UNIX), or `vcbuild test nosign` (Windows) passes +- [ ] `make -j4 test` (UNIX), or `vcbuild test nosign` (Windows) passes - [ ] tests and/or benchmarks are included - [ ] documentation is changed or added - [ ] commit message follows commit guidelines diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c9d09436c8cb0a..eb00977e92104f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -161,7 +161,7 @@ to see how they should be structured can also help. To run the tests on Unix / OS X: ```text -$ ./configure && make -j8 test +$ ./configure && make -j4 test ``` Windows: @@ -194,7 +194,7 @@ You can run tests directly with node: $ ./node ./test/parallel/test-stream2-transform.js ``` -Remember to recompile with `make -j8` in between test runs if you change +Remember to recompile with `make -j4` in between test runs if you change core modules. ### Step 6: Push diff --git a/doc/guides/building-node-with-ninja.md b/doc/guides/building-node-with-ninja.md index 027c267e2b243d..29b32c3d7277de 100644 --- a/doc/guides/building-node-with-ninja.md +++ b/doc/guides/building-node-with-ninja.md @@ -16,7 +16,7 @@ ninja: Entering directory `out/Release` The bottom line will change while building, showing the progress as `[finished/total]` build steps. This is useful output that `make` does not produce and is one of the benefits of using Ninja. -Also, Ninja will likely compile much faster than even `make -j8` (or `-j`). +Also, Ninja will likely compile much faster than even `make -j4` (or `-j`). ## Considerations diff --git a/doc/onboarding-extras.md b/doc/onboarding-extras.md index 5393084cf45195..a952bae866cd95 100644 --- a/doc/onboarding-extras.md +++ b/doc/onboarding-extras.md @@ -70,7 +70,7 @@ Please use these when possible / appropriate * major vs. everything else: run last versions tests against this version, if they pass, **probably** minor or patch * A breaking change helper ([full source](https://gist.github.com/chrisdickinson/ba532fa0e4e243fb7b44)): ```sh - git checkout $(git show -s --pretty='%T' $(git show-ref -d $(git describe --abbrev=0) | tail -n1 | awk '{print $1}')) -- test; make -j8 test + git checkout $(git show -s --pretty='%T' $(git show-ref -d $(git describe --abbrev=0) | tail -n1 | awk '{print $1}')) -- test; make -j4 test ``` From 5ddd508304876455d28c0035fc9c33d611e99418 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Thu, 8 Dec 2016 10:27:05 +0100 Subject: [PATCH 015/169] lib,test: use consistent operator linebreak style We have a tacit rule that for multiline statements, the operator should be placed before the linebreak. This commit commit fixes the few violations of this rule in the code base. This allows us to enable the corresponding ESLint rule. PR-URL: https://github.com/nodejs/node/pull/10178 Reviewed-By: Ben Noordhuis Reviewed-By: Roman Reiss Reviewed-By: Colin Ihrig Reviewed-By: Jeremiah Senkpiel Reviewed-By: Michael Dawson Reviewed-By: Rich Trott Reviewed-By: Teddy Katz Reviewed-By: Sakthipriyan Vairamani --- lib/timers.js | 4 +- test/parallel/test-preload.js | 52 +++++++++++----------- test/parallel/test-repl-domain.js | 4 +- test/parallel/test-tls-client-mindhsize.js | 4 +- 4 files changed, 32 insertions(+), 32 deletions(-) diff --git a/lib/timers.js b/lib/timers.js index 56af3a92d6bfe2..a55e265f29ffe9 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -473,8 +473,8 @@ function unrefdHandle() { // Make sure we clean up if the callback is no longer a function // even if the timer is an interval. - if (!this.owner._repeat - || typeof this.owner._onTimeout !== 'function') { + if (!this.owner._repeat || + typeof this.owner._onTimeout !== 'function') { this.owner.close(); } } diff --git a/test/parallel/test-preload.js b/test/parallel/test-preload.js index f849bc3dda3243..4ee564f0520cc5 100644 --- a/test/parallel/test-preload.js +++ b/test/parallel/test-preload.js @@ -32,27 +32,27 @@ const fixtureD = fixture('define-global.js'); const fixtureThrows = fixture('throws_error4.js'); // test preloading a single module works -childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureA]) + ' ' - + fixtureB, +childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureA]) + ' ' + + fixtureB, function(err, stdout, stderr) { if (err) throw err; assert.strictEqual(stdout, 'A\nB\n'); }); // test preloading multiple modules works -childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureA, fixtureB]) + ' ' - + fixtureC, +childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureA, fixtureB]) + ' ' + + fixtureC, function(err, stdout, stderr) { if (err) throw err; assert.strictEqual(stdout, 'A\nB\nC\n'); }); // test that preloading a throwing module aborts -childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureA, fixtureThrows]) + ' ' - + fixtureB, +childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureA, fixtureThrows]) + ' ' + + fixtureB, function(err, stdout, stderr) { if (err) { assert.strictEqual(stdout, 'A\n'); @@ -62,9 +62,9 @@ childProcess.exec(nodeBinary + ' ' }); // test that preload can be used with --eval -childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureA]) - + '-e "console.log(\'hello\');"', +childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureA]) + + '-e "console.log(\'hello\');"', function(err, stdout, stderr) { if (err) throw err; assert.strictEqual(stdout, 'A\nhello\n'); @@ -108,19 +108,19 @@ replProc.on('close', function(code) { // test that preload placement at other points in the cmdline // also test that duplicated preload only gets loaded once -childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureA]) - + '-e "console.log(\'hello\');" ' - + preloadOption([fixtureA, fixtureB]), +childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureA]) + + '-e "console.log(\'hello\');" ' + + preloadOption([fixtureA, fixtureB]), function(err, stdout, stderr) { if (err) throw err; assert.strictEqual(stdout, 'A\nB\nhello\n'); }); // test that preload works with -i -const interactive = childProcess.exec(nodeBinary + ' ' - + preloadOption([fixtureD]) - + '-i', +const interactive = childProcess.exec(nodeBinary + ' ' + + preloadOption([fixtureD]) + + '-i', common.mustCall(function(err, stdout, stderr) { assert.ifError(err); assert.strictEqual(stdout, "> 'test'\n> "); @@ -129,9 +129,9 @@ const interactive = childProcess.exec(nodeBinary + ' ' interactive.stdin.write('a\n'); interactive.stdin.write('process.exit()\n'); -childProcess.exec(nodeBinary + ' ' - + '--require ' + fixture('cluster-preload.js') + ' ' - + fixture('cluster-preload-test.js'), +childProcess.exec(nodeBinary + ' ' + + '--require ' + fixture('cluster-preload.js') + ' ' + + fixture('cluster-preload-test.js'), function(err, stdout, stderr) { if (err) throw err; assert.ok(/worker terminated with code 43/.test(stdout)); @@ -139,10 +139,10 @@ childProcess.exec(nodeBinary + ' ' // https://github.com/nodejs/node/issues/1691 process.chdir(common.fixturesDir); -childProcess.exec(nodeBinary + ' ' - + '--expose_debug_as=v8debug ' - + '--require ' + fixture('cluster-preload.js') + ' ' - + 'cluster-preload-test.js', +childProcess.exec(nodeBinary + ' ' + + '--expose_debug_as=v8debug ' + + '--require ' + fixture('cluster-preload.js') + ' ' + + 'cluster-preload-test.js', function(err, stdout, stderr) { if (err) throw err; assert.ok(/worker terminated with code 43/.test(stdout)); diff --git a/test/parallel/test-repl-domain.js b/test/parallel/test-repl-domain.js index 9f66f306395d29..3cc88b75f72428 100644 --- a/test/parallel/test-repl-domain.js +++ b/test/parallel/test-repl-domain.js @@ -18,6 +18,6 @@ putIn.write = function(data) { }; putIn.run([ - 'require("domain").create().on("error", function() { console.log("OK") })' - + '.run(function() { throw new Error("threw") })' + 'require("domain").create().on("error", function() { console.log("OK") })' + + '.run(function() { throw new Error("threw") })' ]); diff --git a/test/parallel/test-tls-client-mindhsize.js b/test/parallel/test-tls-client-mindhsize.js index 9956c971ffbbf3..1d812a72093ba9 100644 --- a/test/parallel/test-tls-client-mindhsize.js +++ b/test/parallel/test-tls-client-mindhsize.js @@ -53,8 +53,8 @@ function test(size, err, next) { if (err) { client.on('error', function(e) { nerror++; - assert.strictEqual(e.message, 'DH parameter size 1024 is less' - + ' than 2048'); + assert.strictEqual(e.message, 'DH parameter size 1024 is less' + + ' than 2048'); server.close(); }); } From e8effa434e826fbe20b315317056675d943b287a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Thu, 8 Dec 2016 10:30:45 +0100 Subject: [PATCH 016/169] tools: enforce consistent operator linebreak style Adds the `operator-linebreak` rule to our ESLint config. PR-URL: https://github.com/nodejs/node/pull/10178 Reviewed-By: Ben Noordhuis Reviewed-By: Roman Reiss Reviewed-By: Colin Ihrig Reviewed-By: Jeremiah Senkpiel Reviewed-By: Michael Dawson Reviewed-By: Rich Trott Reviewed-By: Teddy Katz Reviewed-By: Sakthipriyan Vairamani --- .eslintrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc b/.eslintrc index e966348f5f063b..9e8e6ffa7a3181 100644 --- a/.eslintrc +++ b/.eslintrc @@ -92,6 +92,7 @@ rules: no-multiple-empty-lines: [2, {max: 2, maxEOF: 0, maxBOF: 0}] no-tabs: 2 no-trailing-spaces: 2 + operator-linebreak: [2, after, {overrides: {'?': ignore, ':': ignore}}] quotes: [2, single, avoid-escape] semi: 2 semi-spacing: 2 From a75883ec7c7e4d0137258bbf47a4376a9ecbd732 Mon Sep 17 00:00:00 2001 From: "Italo A. Casas" Date: Wed, 30 Nov 2016 20:48:58 -0500 Subject: [PATCH 017/169] test: stream readableListening internal state PR-URL: https://github.com/nodejs/node/pull/9864 Refs: https://github.com/nodejs/node/issues/8683 Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig --- .../test-stream-readableListening-state.js | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 test/parallel/test-stream-readableListening-state.js diff --git a/test/parallel/test-stream-readableListening-state.js b/test/parallel/test-stream-readableListening-state.js new file mode 100644 index 00000000000000..5e3071faf370e5 --- /dev/null +++ b/test/parallel/test-stream-readableListening-state.js @@ -0,0 +1,34 @@ +'use strict'; + +const common = require('../common'); +const assert = require('assert'); +const stream = require('stream'); + +const r = new stream.Readable({ + read: () => {} +}); + +// readableListening state should start in `false`. +assert.strictEqual(r._readableState.readableListening, false); + +r.on('readable', common.mustCall(() => { + // Inside the readable event this state should be true. + assert.strictEqual(r._readableState.readableListening, true); +})); + +r.push(Buffer.from('Testing readableListening state')); + +const r2 = new stream.Readable({ + read: () => {} +}); + +// readableListening state should start in `false`. +assert.strictEqual(r2._readableState.readableListening, false); + +r2.on('data', common.mustCall((chunk) => { + // readableListening should be false because we don't have + // a `readable` listener + assert.strictEqual(r2._readableState.readableListening, false); +})); + +r2.push(Buffer.from('Testing readableListening state')); From 951ddb3d53cd58164c225713e602af374854bcef Mon Sep 17 00:00:00 2001 From: James Tenenbaum Date: Thu, 1 Dec 2016 10:07:28 -0700 Subject: [PATCH 018/169] test: improving crypto fips - using strictEqual instead equal - cast `response` to Number() PR-URL: https://github.com/nodejs/node/pull/10002 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Italo A. Casas --- test/parallel/test-crypto-fips.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-crypto-fips.js b/test/parallel/test-crypto-fips.js index 55b542ca9ead83..24b1af70b70329 100644 --- a/test/parallel/test-crypto-fips.js +++ b/test/parallel/test-crypto-fips.js @@ -53,7 +53,7 @@ function testHelper(stream, args, expectedOutput, cmd, env) { assert.notEqual(-1, response.indexOf(expectedOutput)); } else { // Normal path where we expect either FIPS enabled or disabled. - assert.equal(expectedOutput, response); + assert.strictEqual(expectedOutput, Number(response)); } childOk(child); } From 9988f0202558cc3282f4e5e87ad9d31db3cbf90f Mon Sep 17 00:00:00 2001 From: pallxk Date: Tue, 6 Dec 2016 13:34:25 +0800 Subject: [PATCH 019/169] doc: fix typo in code example of 'path' module PR-URL: https://github.com/nodejs/node/pull/10136 Reviewed-By: Brian White Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- doc/api/path.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc/api/path.md b/doc/api/path.md index a9c72c2e2e78a6..df65616b6c4e94 100644 --- a/doc/api/path.md +++ b/doc/api/path.md @@ -24,7 +24,7 @@ On POSIX: ```js path.basename('C:\\temp\\myfile.html'); -// Returns: 'C:\temp\myfile.html' +// Returns: 'C:\\temp\\myfile.html' ``` On Windows: From e53262cda94e324fba55a6537ddb91da1098183c Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Sat, 3 Dec 2016 07:36:19 +0200 Subject: [PATCH 020/169] doc: modernize child_process example code 1. equal => strictEqual. 2. let => const for the variable that is not reassigned. 3. fix spaces. 4. stringify erroneous raw buffer outputs. 5. fix a typo. PR-URL: https://github.com/nodejs/node/pull/10102 Reviewed-By: Sam Roberts Reviewed-By: Sakthipriyan Vairamani --- doc/api/child_process.md | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/doc/api/child_process.md b/doc/api/child_process.md index fdffa0fc5a95ca..02f6a057e72585 100644 --- a/doc/api/child_process.md +++ b/doc/api/child_process.md @@ -91,11 +91,11 @@ const spawn = require('child_process').spawn; const bat = spawn('cmd.exe', ['/c', 'my.bat']); bat.stdout.on('data', (data) => { - console.log(data); + console.log(data.toString()); }); bat.stderr.on('data', (data) => { - console.log(data); + console.log(data.toString()); }); bat.on('exit', (code) => { @@ -113,7 +113,7 @@ exec('my.bat', (err, stdout, stderr) => { }); // Script with spaces in the filename: -const bat = spawn('"my script.cmd"', ['a', 'b'], { shell:true }); +const bat = spawn('"my script.cmd"', ['a', 'b'], { shell: true }); // or: exec('"my script.cmd" a b', (err, stdout, stderr) => { // ... @@ -383,7 +383,7 @@ ps.on('close', (code) => { }); grep.stdout.on('data', (data) => { - console.log(`${data}`); + console.log(data.toString()); }); grep.stderr.on('data', (data) => { @@ -467,8 +467,8 @@ const out = fs.openSync('./out.log', 'a'); const err = fs.openSync('./out.log', 'a'); const child = spawn('prg', [], { - detached: true, - stdio: [ 'ignore', out, err ] + detached: true, + stdio: [ 'ignore', out, err ] }); child.unref(); @@ -850,7 +850,7 @@ as in this example: 'use strict'; const spawn = require('child_process').spawn; -let child = spawn('sh', ['-c', +const child = spawn('sh', ['-c', `node -e "setInterval(() => { console.log(process.pid, 'is alive') }, 500);"` @@ -1097,21 +1097,21 @@ const fs = require('fs'); const child_process = require('child_process'); const child = child_process.spawn('ls', { - stdio: [ - 0, // Use parents stdin for child - 'pipe', // Pipe child's stdout to parent - fs.openSync('err.out', 'w') // Direct child's stderr to a file - ] + stdio: [ + 0, // Use parent's stdin for child + 'pipe', // Pipe child's stdout to parent + fs.openSync('err.out', 'w') // Direct child's stderr to a file + ] }); -assert.equal(child.stdio[0], null); -assert.equal(child.stdio[0], child.stdin); +assert.strictEqual(child.stdio[0], null); +assert.strictEqual(child.stdio[0], child.stdin); assert(child.stdout); -assert.equal(child.stdio[1], child.stdout); +assert.strictEqual(child.stdio[1], child.stdout); -assert.equal(child.stdio[2], null); -assert.equal(child.stdio[2], child.stderr); +assert.strictEqual(child.stdio[2], null); +assert.strictEqual(child.stdio[2], child.stderr); ``` ### child.stdout From c65dfa9b1221a2d21a393f06f0fa33ceb2e6faa7 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Wed, 7 Dec 2016 11:20:27 -0500 Subject: [PATCH 021/169] test: add ES6 and strictEqual to test-fs-truncate - use const and let for variables - replace assert.equal with assert.strictEqual PR-URL: https://github.com/nodejs/node/pull/10167 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Italo A. Casas --- test/parallel/test-fs-truncate.js | 42 +++++++++++++++---------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/test/parallel/test-fs-truncate.js b/test/parallel/test-fs-truncate.js index 442038eeb50a51..1ba0db7f012fe4 100644 --- a/test/parallel/test-fs-truncate.js +++ b/test/parallel/test-fs-truncate.js @@ -1,43 +1,43 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var path = require('path'); -var fs = require('fs'); -var tmp = common.tmpDir; -var filename = path.resolve(tmp, 'truncate-file.txt'); -var data = Buffer.alloc(1024 * 16, 'x'); +const common = require('../common'); +const assert = require('assert'); +const path = require('path'); +const fs = require('fs'); +const tmp = common.tmpDir; +const filename = path.resolve(tmp, 'truncate-file.txt'); +const data = Buffer.alloc(1024 * 16, 'x'); common.refreshTmpDir(); -var stat; +let stat; // truncateSync fs.writeFileSync(filename, data); stat = fs.statSync(filename); -assert.equal(stat.size, 1024 * 16); +assert.strictEqual(stat.size, 1024 * 16); fs.truncateSync(filename, 1024); stat = fs.statSync(filename); -assert.equal(stat.size, 1024); +assert.strictEqual(stat.size, 1024); fs.truncateSync(filename); stat = fs.statSync(filename); -assert.equal(stat.size, 0); +assert.strictEqual(stat.size, 0); // ftruncateSync fs.writeFileSync(filename, data); -var fd = fs.openSync(filename, 'r+'); +const fd = fs.openSync(filename, 'r+'); stat = fs.statSync(filename); -assert.equal(stat.size, 1024 * 16); +assert.strictEqual(stat.size, 1024 * 16); fs.ftruncateSync(fd, 1024); stat = fs.statSync(filename); -assert.equal(stat.size, 1024); +assert.strictEqual(stat.size, 1024); fs.ftruncateSync(fd); stat = fs.statSync(filename); -assert.equal(stat.size, 0); +assert.strictEqual(stat.size, 0); fs.closeSync(fd); @@ -54,19 +54,19 @@ function testTruncate(cb) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 1024 * 16); + assert.strictEqual(stat.size, 1024 * 16); fs.truncate(filename, 1024, function(er) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 1024); + assert.strictEqual(stat.size, 1024); fs.truncate(filename, function(er) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 0); + assert.strictEqual(stat.size, 0); cb(); }); }); @@ -82,7 +82,7 @@ function testFtruncate(cb) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 1024 * 16); + assert.strictEqual(stat.size, 1024 * 16); fs.open(filename, 'w', function(er, fd) { if (er) return cb(er); @@ -90,13 +90,13 @@ function testFtruncate(cb) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 1024); + assert.strictEqual(stat.size, 1024); fs.ftruncate(fd, function(er) { if (er) return cb(er); fs.stat(filename, function(er, stat) { if (er) return cb(er); - assert.equal(stat.size, 0); + assert.strictEqual(stat.size, 0); fs.close(fd, cb); }); }); From b2b2774325489e500342ebc7f694fbbcb9be8f18 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 8 Dec 2016 22:26:28 -0800 Subject: [PATCH 022/169] test: refactor test-handle-wrap-close-abort * use common.mustCall() to confirm number of uncaught exceptions * var -> const * specify duration of 1ms for setTimeout() and setInterval() PR-URL: https://github.com/nodejs/node/pull/10188 Reviewed-By: Santiago Gimeno Reviewed-By: Colin Ihrig Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-handle-wrap-close-abort.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-handle-wrap-close-abort.js b/test/parallel/test-handle-wrap-close-abort.js index 8572668f666864..5355e65df60821 100644 --- a/test/parallel/test-handle-wrap-close-abort.js +++ b/test/parallel/test-handle-wrap-close-abort.js @@ -1,16 +1,16 @@ 'use strict'; -require('../common'); +const common = require('../common'); -process.on('uncaughtException', function() { }); +process.on('uncaughtException', common.mustCall(function() {}, 2)); setTimeout(function() { process.nextTick(function() { - var c = setInterval(function() { + const c = setInterval(function() { clearInterval(c); throw new Error('setInterval'); - }); + }, 1); }); setTimeout(function() { throw new Error('setTimeout'); - }); + }, 1); }); From 89db5fcc23515bcf773838fb99e58133756192e6 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Fri, 18 Nov 2016 11:37:32 -0800 Subject: [PATCH 023/169] tls: fix/annotate connect arg comments PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- lib/_tls_wrap.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index e01c143ae16bc0..c3ed32ada52c46 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -975,6 +975,11 @@ function normalizeConnectArgs(listArgs) { var options = args[0]; var cb = args[1]; + // If args[0] was options, then normalize dealt with it. + // If args[0] is port, or args[0], args[1] is host,port, we need to + // find the options and merge them in, normalize's options has only + // the host/port/path args that it knows about, not the tls options. + // This means that options.host overrides a host arg. if (listArgs[1] !== null && typeof listArgs[1] === 'object') { options = util._extend(options, listArgs[1]); } else if (listArgs[2] !== null && typeof listArgs[2] === 'object') { @@ -984,7 +989,7 @@ function normalizeConnectArgs(listArgs) { return (cb) ? [options, cb] : [options]; } -exports.connect = function(/* [port, host], options, cb */) { +exports.connect = function(/* [port,] [host,] [options,] [cb] */) { const argsLen = arguments.length; var args = new Array(argsLen); for (var i = 0; i < argsLen; i++) From d50e8d8af9d6a7779ff1fb296d1d1f67ce121d7d Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Mon, 21 Nov 2016 13:50:02 -0800 Subject: [PATCH 024/169] tls: document and test option-less createServer Either the options or the listener argument to tls.createServer() was optional, but not both. This makes no sense, so align the argument checking and documentation with net.createServer(), which accepts the same option sequence, and which tls.createServer() is modelled on. PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- doc/api/tls.md | 2 +- lib/_tls_wrap.js | 17 +++++++++-------- test/parallel/test-tls-no-cert-required.js | 19 +++++++++++++++++-- 3 files changed, 27 insertions(+), 11 deletions(-) diff --git a/doc/api/tls.md b/doc/api/tls.md index 488337a0764e4c..eeeb07069dcbbe 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -948,7 +948,7 @@ publicly trusted list of CAs as given in . -## tls.createServer(options[, secureConnectionListener]) +## tls.createServer([options][, secureConnectionListener]) diff --git a/lib/_tls_wrap.js b/lib/_tls_wrap.js index c3ed32ada52c46..cf40618aa32b3d 100644 --- a/lib/_tls_wrap.js +++ b/lib/_tls_wrap.js @@ -745,18 +745,19 @@ TLSSocket.prototype.getProtocol = function() { // "PATH_LENGTH_EXCEEDED", "INVALID_PURPOSE" "CERT_UNTRUSTED", // "CERT_REJECTED" // -function Server(/* [options], listener */) { - var options, listener; +function Server(options, listener) { + if (!(this instanceof Server)) + return new Server(options, listener); - if (arguments[0] !== null && typeof arguments[0] === 'object') { - options = arguments[0]; - listener = arguments[1]; - } else if (typeof arguments[0] === 'function') { + if (typeof options === 'function') { + listener = options; options = {}; - listener = arguments[0]; + } else if (options == null || typeof options === 'object') { + options = options || {}; + } else { + throw new TypeError('options must be an object'); } - if (!(this instanceof Server)) return new Server(options, listener); this._contexts = []; diff --git a/test/parallel/test-tls-no-cert-required.js b/test/parallel/test-tls-no-cert-required.js index de723e73e8a335..8d907d9f8a4e06 100644 --- a/test/parallel/test-tls-no-cert-required.js +++ b/test/parallel/test-tls-no-cert-required.js @@ -1,4 +1,5 @@ 'use strict'; +var assert = require('assert'); var common = require('../common'); if (!common.hasCrypto) { @@ -10,6 +11,20 @@ var tls = require('tls'); // Omitting the cert or pfx option to tls.createServer() should not throw. // AECDH-NULL-SHA is a no-authentication/no-encryption cipher and hence // doesn't need a certificate. -tls.createServer({ ciphers: 'AECDH-NULL-SHA' }).listen(0, function() { +tls.createServer({ ciphers: 'AECDH-NULL-SHA' }) + .listen(0, common.mustCall(close)); + +tls.createServer(assert.fail) + .listen(0, common.mustCall(close)); + +tls.createServer({}) + .listen(0, common.mustCall(close)); + +assert.throws(() => tls.createServer('this is not valid'), TypeError); + +tls.createServer() + .listen(0, common.mustCall(close)); + +function close() { this.close(); -}); +} From 6b8d4cab41f6b9edfd2a42b2da4f0b28cf080323 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Tue, 22 Nov 2016 13:00:59 -0800 Subject: [PATCH 025/169] test: tls key/cert ordering not necessary PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- test/parallel/test-tls-multi-key.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-tls-multi-key.js b/test/parallel/test-tls-multi-key.js index e73ee2e25e6931..e29f5ee522829e 100644 --- a/test/parallel/test-tls-multi-key.js +++ b/test/parallel/test-tls-multi-key.js @@ -11,8 +11,8 @@ var fs = require('fs'); var options = { key: [ + fs.readFileSync(common.fixturesDir + '/keys/ec-key.pem'), fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), - fs.readFileSync(common.fixturesDir + '/keys/ec-key.pem') ], cert: [ fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem'), From 95a0a67ff3dc77db137330898ffb93a16503f2f8 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Tue, 22 Nov 2016 13:23:06 -0800 Subject: [PATCH 026/169] tls: do not refer to secureOptions as flags Its confusing to have multiple names for the same thing, use secureOptions consistently. PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- lib/_tls_common.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/_tls_common.js b/lib/_tls_common.js index 6e98c1ee4d66d2..9cb70453860484 100644 --- a/lib/_tls_common.js +++ b/lib/_tls_common.js @@ -12,9 +12,9 @@ var crypto = null; const binding = process.binding('crypto'); const NativeSecureContext = binding.SecureContext; -function SecureContext(secureProtocol, flags, context) { +function SecureContext(secureProtocol, secureOptions, context) { if (!(this instanceof SecureContext)) { - return new SecureContext(secureProtocol, flags, context); + return new SecureContext(secureProtocol, secureOptions, context); } if (context) { @@ -29,7 +29,7 @@ function SecureContext(secureProtocol, flags, context) { } } - if (flags) this.context.setOptions(flags); + if (secureOptions) this.context.setOptions(secureOptions); } exports.SecureContext = SecureContext; From b662de63014260f3f45bbccb7f0281b3ed21551e Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Wed, 23 Nov 2016 14:14:34 -0800 Subject: [PATCH 027/169] doc: rework tls for accuracy and clarity Document all TLSSocket options: - All the secure context options are valid options to a secureContext - isServer modifies the default value of requestCert Describe all tls.connect() variants: - tls.connect(path) was undocumented - tls.connect(port) was underdocumented, and its relationship to tls.connect(options) was obscure Socket passed to tls.connect is user managed: - Replace https://github.com/nodejs/node/pull/8996 Add documentation to: - describe and add tests for the pfx and key variants, and describe how and when passphrase is used. - describe tls cert and ca options - describe buffer forms of tls crl option - describe tls cipher option and defaults - fix link to Crypto Constants - describe that honorCipherOrder sets SSL_OP_CIPHER_SERVER_PREFERENCE. - describe tls ecdhCurve/dhparam options - describe tls secureProtocol option - describe tls secureOptions - describe tls sessionIdContext De-deduplicate secure context docs: The secure context options were documented 4 times, making it difficult to understand where the options come from, where they are supported, and under what conditions they are used. The multiple copies were inconsistent and contradictory in their descriptions of the options, and also inconsistent in whether the options would be documented at all. Cut through this gordian knot by linking all APIs that use the secureContext options to the single source of truth about the options. PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- doc/api/crypto.md | 33 +-- doc/api/tls.md | 361 +++++++++++---------------- test/fixtures/raw-key.pem | 15 ++ test/parallel/test-tls-passphrase.js | 190 ++++++++++++-- 4 files changed, 346 insertions(+), 253 deletions(-) create mode 100644 test/fixtures/raw-key.pem diff --git a/doc/api/crypto.md b/doc/api/crypto.md index 9410b29965d1f5..0db2d8377cbe36 100644 --- a/doc/api/crypto.md +++ b/doc/api/crypto.md @@ -1072,26 +1072,15 @@ deprecated: v0.11.13 > Stability: 0 - Deprecated: Use [`tls.createSecureContext()`][] instead. -The `crypto.createCredentials()` method is a deprecated alias for creating -and returning a `tls.SecureContext` object. The `crypto.createCredentials()` -method should not be used. +- `details` {Object} Identical to [`tls.createSecureContext()`][]. -The optional `details` argument is a hash object with keys: +The `crypto.createCredentials()` method is a deprecated function for creating +and returning a `tls.SecureContext`. It should not be used. Replace it with +[`tls.createSecureContext()`][] which has the exact same arguments and return +value. -* `pfx` : {String|Buffer} - PFX or PKCS12 encoded private - key, certificate and CA certificates -* `key` : {String} - PEM encoded private key -* `passphrase` : {String} - passphrase for the private key or PFX -* `cert` : {String} - PEM encoded certificate -* `ca` : {String|Array} - Either a string or array of strings of PEM encoded CA - certificates to trust. -* `crl` : {String|Array} - Either a string or array of strings of PEM encoded CRLs - (Certificate Revocation List) -* `ciphers`: {String} using the [OpenSSL cipher list format][] describing the - cipher algorithms to use or exclude. - -If no 'ca' details are given, Node.js will use Mozilla's default -[publicly trusted list of CAs][]. +Returns a `tls.SecureContext`, as-if [`tls.createSecureContext()`][] had been +called. ### crypto.createDecipher(algorithm, password) -* `options` {Object} - * `host` {string} Host the client should connect to. - * `port` {number} Port the client should connect to. - * `socket` {net.Socket} Establish secure connection on a given socket rather - than creating a new socket. If this option is specified, `host` and `port` - are ignored. - * `path` {string} Creates unix socket connection to path. If this option is - specified, `host` and `port` are ignored. - * `pfx` {string|Buffer} A string or `Buffer` containing the private key, - certificate, and CA certs of the client in PFX or PKCS12 format. - * `key` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of - strings, or array of `Buffer`s containing the private key of the client in - PEM format. - * `passphrase` {string} A string containing the passphrase for the private key - or pfx. - * `cert` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of - strings, or array of `Buffer`s containing the certificate key of the client - in PEM format. - * `ca` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of strings, - or array of `Buffer`s of trusted certificates in PEM format. If this is - omitted several well known "root" CAs (like VeriSign) will be used. These - are used to authorize connections. - * `ciphers` {string} A string describing the ciphers to use or exclude, - separated by `:`. Uses the same default cipher suite as - [`tls.createServer()`][]. - * `rejectUnauthorized` {boolean} If `true`, the server certificate is verified - against the list of supplied CAs. An `'error'` event is emitted if - verification fails; `err.code` contains the OpenSSL error code. Defaults to - `true`. - * `NPNProtocols` {string[]|Buffer[]} An array of strings or `Buffer`s - containing supported NPN protocols. `Buffer`s should have the format - `[len][name][len][name]...` e.g. `0x05hello0x05world`, where the first - byte is the length of the next protocol name. Passing an array is usually - much simpler, e.g. `['hello', 'world']`. - * `ALPNProtocols`: {string[]|Buffer[]} An array of strings or `Buffer`s - containing the supported ALPN protocols. `Buffer`s should have the format - `[len][name][len][name]...` e.g. `0x05hello0x05world`, where the first byte - is the length of the next protocol name. Passing an array is usually much - simpler: `['hello', 'world']`.) - * `servername`: {string} Server name for the SNI (Server Name Indication) TLS - extension. - * `checkServerIdentity(servername, cert)` {Function} A callback function - to be used when checking the server's hostname against the certificate. - This should throw an error if verification fails. The method should return - `undefined` if the `servername` and `cert` are verified. - * `secureProtocol` {string} The SSL method to use, e.g. `SSLv3_method` to - force SSL version 3. The possible values depend on the version of OpenSSL - installed in the environment and are defined in the constant - [SSL_METHODS][]. - * `secureContext` {object} An optional TLS context object as returned by from - `tls.createSecureContext( ... )`. It can be used for caching client - certificates, keys, and CA certificates. - * `session` {Buffer} A `Buffer` instance, containing TLS session. - * `minDHSize` {number} Minimum size of the DH parameter in bits to accept a - TLS connection. When a server offers a DH parameter with a size less - than `minDHSize`, the TLS connection is destroyed and an error is thrown. - Defaults to `1024`. -* `callback` {Function} +* `port` {number} Default value for `options.port`. +* `host` {string} Optional default value for `options.host`. +* `options` {Object} See [`tls.connect()`][]. +* `callback` {Function} See [`tls.connect()`][]. -Creates a new client connection to the given `options.port` and `options.host` -If `options.host` is omitted, it defaults to `localhost`. +Same as [`tls.connect()`][] except that `port` and `host` can be provided +as arguments instead of options. -The `callback` function, if specified, will be added as a listener for the -[`'secureConnect'`][] event. +*Note*: A port or host option, if specified, will take precedence over any port +or host argument. -`tls.connect()` returns a [`tls.TLSSocket`][] object. +## tls.connect(path[, options][, callback]) + -## tls.connect(port[, host][, options][, callback]) +* `path` {string} Default value for `options.path`. +* `options` {Object} See [`tls.connect()`][]. +* `callback` {Function} See [`tls.connect()`][]. + +Same as [`tls.connect()`][] except that `path` can be provided +as an argument instead of an option. + +*Note*: A path option, if specified, will take precedence over the path +argument. + +## tls.connect(options[, callback]) -* `port` {number} -* `host` {string} * `options` {Object} - * `host` {string} Host the client should connect to. + * `host` {string} Host the client should connect to, defaults to 'localhost'. * `port` {number} Port the client should connect to. - * `socket` {net.Socket} Establish secure connection on a given socket rather - than creating a new socket. If this option is specified, `host` and `port` - are ignored. * `path` {string} Creates unix socket connection to path. If this option is specified, `host` and `port` are ignored. - * `pfx` {string|Buffer} A string or `Buffer` containing the private key, - certificate, and CA certs of the client in PFX or PKCS12 format. - * `key` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of - strings, or array of `Buffer`s containing the private key of the client in - PEM format. - * `passphrase` {string} A string containing the passphrase for the private key - or pfx. - * `cert` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of - strings, or array of `Buffer`s containing the certificate key of the client - in PEM format. - * `ca` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of strings, - or array of `Buffer`s of trusted certificates in PEM format. If this is - omitted several well known "root" CAs (like VeriSign) will be used. These - are used to authorize connections. - * `ciphers` {string} A string describing the ciphers to use or exclude, - separated by `:`. Uses the same default cipher suite as - [`tls.createServer()`][]. + * `socket` {net.Socket} Establish secure connection on a given socket rather + than creating a new socket. If this option is specified, `path`, `host` and + `port` are ignored. Usually, a socket is already connected when passed to + `tls.connect()`, but it can be connected later. Note that + connection/disconnection/destruction of `socket` is the user's + responsibility, calling `tls.connect()` will not cause `net.connect()` to be + called. * `rejectUnauthorized` {boolean} If `true`, the server certificate is verified against the list of supplied CAs. An `'error'` event is emitted if verification fails; `err.code` contains the OpenSSL error code. Defaults to @@ -833,24 +806,21 @@ added: v0.11.3 to be used when checking the server's hostname against the certificate. This should throw an error if verification fails. The method should return `undefined` if the `servername` and `cert` are verified. - * `secureProtocol` {string} The SSL method to use, e.g. `SSLv3_method` to - force SSL version 3. The possible values depend on the version of OpenSSL - installed in the environment and are defined in the constant - [SSL_METHODS][]. - * `secureContext` {object} An optional TLS context object as returned by from - `tls.createSecureContext( ... )`. It can be used for caching client - certificates, keys, and CA certificates. * `session` {Buffer} A `Buffer` instance, containing TLS session. * `minDHSize` {number} Minimum size of the DH parameter in bits to accept a TLS connection. When a server offers a DH parameter with a size less than `minDHSize`, the TLS connection is destroyed and an error is thrown. Defaults to `1024`. + * `secureContext`: Optional TLS context object created with + [`tls.createSecureContext()`][]. If a `secureContext` is _not_ provided, one + will be created by passing the entire `options` object to + `tls.createSecureContext()`. *Note*: In effect, all + [`tls.createSecureContext()`][] options can be provided, but they will be + _completely ignored_ unless the `secureContext` option is missing. + * ...: Optional [`tls.createSecureContext()`][] options can be provided, see + the `secureContext` option for more information. * `callback` {Function} -Creates a new client connection to the given `port` and `host` or -`options.port` and `options.host`. (If `host` is omitted, it defaults to -`localhost`.) - The `callback` function, if specified, will be added as a listener for the [`'secureConnect'`][] event. @@ -918,31 +888,72 @@ added: v0.11.13 --> * `options` {Object} - * `pfx` {string|Buffer} A string or `Buffer` holding the PFX or PKCS12 encoded - private key, certificate, and CA certificates. - * `key` {string|string[]|Buffer|Object[]} The private key of the server in - PEM format. To support multiple keys using different algorithms, an array - can be provided either as an array of key strings or as an array of objects - in the format `{pem: key, passphrase: passphrase}`. This option is - *required* for ciphers that make use of private keys. - * `passphrase` {string} A string containing the passphrase for the private key - or pfx. - * `cert` {string} A string containing the PEM encoded certificate - * `ca`{string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of strings, - or array of `Buffer`s of trusted certificates in PEM format. If omitted, - several well known "root" CAs (like VeriSign) will be used. These are used - to authorize connections. - * `crl` {string|string[]} Either a string or array of strings of PEM encoded - CRLs (Certificate Revocation List). - * `ciphers` {string} A string describing the ciphers to use or exclude. - Consult - - for details on the format. - * `honorCipherOrder` {boolean} If `true`, when a cipher is being selected, - the server's preferences will be used instead of the client preferences. + * `pfx` {string|Buffer} Optional PFX or PKCS12 encoded private key and + certificate chain. `pfx` is an alternative to providing `key` and `cert` + individually. PFX is usually encrypted, if it is, `passphrase` will be used + to decrypt it. + * `key` {string|string[]|Buffer|Buffer[]|Object[]} Optional private keys in + PEM format. Single keys will be decrypted with `passphrase` if necessary. + Multiple keys, probably using different algorithms, can be provided either + as an array of unencrypted key strings or buffers, or an array of objects in + the form `{pem: , passphrase: }`. The object form can + only occur in an array, and it _must_ include a passphrase, even if key is + not encrypted. + * `passphrase` {string} Optional shared passphrase used for a single private + key and/or a PFX. + * `cert` {string|string[]|Buffer|Buffer[]} Optional cert chains in PEM format. + One cert chain should be provided per private key. Each cert chain should + consist of the PEM formatted certificate for a provided private `key`, + followed by the PEM formatted intermediate certificates (if any), in order, + and not including the root CA (the root CA must be pre-known to the peer, + see `ca`). When providing multiple cert chains, they do not have to be in + the same order as their private keys in `key`. If the intermediate + certificates are not provided, the peer will not be able to validate the + certificate, and the handshake will fail. + * `ca`{string|string[]|Buffer|Buffer[]} Optional CA certificates to trust. + Default is the well-known CAs from Mozilla. When connecting to peers that + use certificates issued privately, or self-signed, the private root CA or + self-signed certificate must be provided to verify the peer. + * `crl` {string|string[]|Buffer|Buffer[]} Optional PEM formatted + CRLs (Certificate Revocation Lists). + * `ciphers` {string} Optional cipher suite specification, replacing the + default. For more information, see [modifying the default cipher suite][]. + * `honorCipherOrder` {boolean} Attempt to use the server's cipher suite + preferences instead of the client's. When `true`, causes + `SSL_OP_CIPHER_SERVER_PREFERENCE` to be set in `secureOptions`, see + [OpenSSL Options][] for more information. + *Note*: [`tls.createServer()`][] sets the default value to `true`, other + APIs that create secure contexts leave it unset. + * `ecdhCurve` {string} A string describing a named curve to use for ECDH key + agreement or `false` to disable ECDH. Defaults to `prime256v1` (NIST P-256). + Use [`crypto.getCurves()`][] to obtain a list of available curve names. On + recent releases, `openssl ecparam -list_curves` will also display the name + and description of each available elliptic curve. + * `dhparam` {string|Buffer} Diffie Hellman parameters, required for + [Perfect Forward Secrecy][]. Use `openssl dhparam` to create the parameters. + The key length must be greater than or equal to 1024 bits, otherwise an + error will be thrown. It is strongly recommended to use 2048 bits or larger + for stronger security. If omitted or invalid, the parameters are silently + discarded and DHE ciphers will not be available. + * `secureProtocol` {string} Optional SSL method to use, default is + `"SSLv23_method"`. The possible values are listed as [SSL_METHODS][], use + the function names as strings. For example, `"SSLv3_method"` to force SSL + version 3. + * `secureOptions` {number} Optionally affect the OpenSSL protocol behaviour, + which is not usually necessary. This should be used carefully if at all! + Value is a numeric bitmask of the `SSL_OP_*` options from + [OpenSSL Options][]. + * `sessionIdContext` {string} Optional opaque identifier used by servers to + ensure session state is not shared between applications. Unused by clients. + *Note*: [`tls.createServer()`][] uses a 128 bit truncated SHA1 hash value + generated from `process.argv`, other APIs that create secure contexts + have no default value. The `tls.createSecureContext()` method creates a credentials object. +A key is *required* for ciphers that make use of certificates. Either `key` or +`pfx` can be used to provide it. + If the 'ca' option is not given, then Node.js will use the default publicly trusted list of CAs as given in . @@ -954,45 +965,10 @@ added: v0.3.2 --> * `options` {Object} - * `pfx` {string|Buffer} A string or `Buffer` containing the private key, - certificate and CA certs of the server in PFX or PKCS12 format. (Mutually - exclusive with the `key`, `cert`, and `ca` options.) - * `key` {string|string[]|Buffer|Object[]} The private key of the server in - PEM format. To support multiple keys using different algorithms an array can - be provided either as a plain array of key strings or an array of objects - in the format `{pem: key, passphrase: passphrase}`. This option is - *required* for ciphers that make use of private keys. - * `passphrase` {string} A string containing the passphrase for the private - key or pfx. - * `cert` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of - strings, or array of `Buffer`s containing the certificate key of the server - in PEM format. (Required) - * `ca` {string|string[]|Buffer|Buffer[]} A string, `Buffer`, array of strings, - or array of `Buffer`s of trusted certificates in PEM format. If this is - omitted several well known "root" CAs (like VeriSign) will be used. These - are used to authorize connections. - * `crl` {string|string[]} Either a string or array of strings of PEM encoded - CRLs (Certificate Revocation List). - * `ciphers` {string} A string describing the ciphers to use or exclude, - separated by `:`. - * `ecdhCurve` {string} A string describing a named curve to use for ECDH key - agreement or `false` to disable ECDH. Defaults to `prime256v1` (NIST P-256). - Use [`crypto.getCurves()`][] to obtain a list of available curve names. On - recent releases, `openssl ecparam -list_curves` will also display the name - and description of each available elliptic curve. - * `dhparam` {string|Buffer} A string or `Buffer` containing Diffie Hellman - parameters, required for [Perfect Forward Secrecy][]. Use - `openssl dhparam` to create the parameters. The key length must be greater - than or equal to 1024 bits, otherwise an error will be thrown. It is - strongly recommended to use 2048 bits or larger for stronger security. If - omitted or invalid, the parameters are silently discarded and DHE ciphers - will not be available. * `handshakeTimeout` {number} Abort the connection if the SSL/TLS handshake does not finish in the specified number of milliseconds. Defaults to `120` seconds. A `'clientError'` is emitted on the `tls.Server` object whenever a handshake times out. - * `honorCipherOrder` {boolean} When choosing a cipher, use the server's - preferences instead of the client preferences. Defaults to `true`. * `requestCert` {boolean} If `true` the server will request a certificate from clients that connect and attempt to verify that certificate. Defaults to `false`. @@ -1019,58 +995,13 @@ added: v0.3.2 a 16-byte HMAC key, and a 16-byte AES key. This can be used to accept TLS session tickets on multiple instances of the TLS server. *Note* that this is automatically shared between `cluster` module workers. - * `sessionIdContext` {string} A string containing an opaque identifier for - session resumption. If `requestCert` is `true`, the default is a 128 bit - truncated SHA1 hash value generated from the command-line. Otherwise, a - default is not provided. - * `secureProtocol` {string} The SSL method to use, e.g. `SSLv3_method` to - force SSL version 3. The possible values depend on the version of OpenSSL - installed in the environment and are defined in the constant - [SSL_METHODS][]. + * ...: Any [`tls.createSecureContext()`][] options can be provided. For + servers, the identity options (`pfx` or `key`/`cert`) are usually required. * `secureConnectionListener` {Function} Creates a new [tls.Server][]. The `secureConnectionListener`, if provided, is automatically set as a listener for the [`'secureConnection'`][] event. -For the `ciphers` option, the default cipher suite is: - -```text -ECDHE-RSA-AES128-GCM-SHA256: -ECDHE-ECDSA-AES128-GCM-SHA256: -ECDHE-RSA-AES256-GCM-SHA384: -ECDHE-ECDSA-AES256-GCM-SHA384: -DHE-RSA-AES128-GCM-SHA256: -ECDHE-RSA-AES128-SHA256: -DHE-RSA-AES128-SHA256: -ECDHE-RSA-AES256-SHA384: -DHE-RSA-AES256-SHA384: -ECDHE-RSA-AES256-SHA256: -DHE-RSA-AES256-SHA256: -HIGH: -!aNULL: -!eNULL: -!EXPORT: -!DES: -!RC4: -!MD5: -!PSK: -!SRP: -!CAMELLIA -``` - -The default cipher suite prefers GCM ciphers for [Chrome's 'modern -cryptography' setting] and also prefers ECDHE and DHE ciphers for Perfect -Forward Secrecy, while offering *some* backward compatibility. - -128 bit AES is preferred over 192 and 256 bit AES in light of [specific -attacks affecting larger AES key sizes]. - -Old clients that rely on insecure and deprecated RC4 or DES-based ciphers -(like Internet Explorer 6) cannot complete the handshaking process with -the default configuration. If these clients _must_ be supported, the -[TLS recommendations] may offer a compatible cipher suite. For more details -on the format, see the [OpenSSL cipher list format documentation]. - The following illustrates a simple echo server: ```js @@ -1254,6 +1185,8 @@ where `secure_socket` has the same API as `pair.cleartext`. [OpenSSL cipher list format documentation]: https://www.openssl.org/docs/man1.0.2/apps/ciphers.html#CIPHER-LIST-FORMAT [Chrome's 'modern cryptography' setting]: https://www.chromium.org/Home/chromium-security/education/tls#TOC-Cipher-Suites +[OpenSSL Options]: crypto.html#crypto_openssl_options +[modifying the default cipher suite]: #tls_modifying_the_default_tls_cipher_suite [specific attacks affecting larger AES key sizes]: https://www.schneier.com/blog/archives/2009/07/another_new_aes.html [`crypto.getCurves()`]: crypto.html#crypto_crypto_getcurves [`tls.createServer()`]: #tls_tls_createserver_options_secureconnectionlistener diff --git a/test/fixtures/raw-key.pem b/test/fixtures/raw-key.pem new file mode 100644 index 00000000000000..3e27f9f8870ad0 --- /dev/null +++ b/test/fixtures/raw-key.pem @@ -0,0 +1,15 @@ +-----BEGIN RSA PRIVATE KEY----- +MIICXAIBAAKBgQChmQeFwsaomtQbw9Nm55Dn6KSR9bkY8PDroQUeTNa90BlIbhGs +KYm4l7bERaasFgOrkcQpk45fdDVYPjKxraZiGXXKjSIDYeDAIC/+CkwQKrejgCPm +Js4gV4g+npvwi1gVr2NAg7fkJOyEW2TDp4dsAD8qtG8Aml0C1hJXwFYmBwIDAQAB +AoGAVgZpAsQVjVwe3kj5GSbc9Rfbw/fTeXuKRWWKm/67soA9dVli/wt9zU62dPW/ +LIzrl0IZ8ygh+p6aZ0d1JTEUCPx7e0KocCmNg77i5AG0eK5i/KKjTWB4UGRDylfD +dnBXQc814bK+VB0mrcp46U/7tLGYkV2Kz/LiNpmxKwITS4ECQQDPoA6WIU87Eulq +OuVmJnFIQ2IR3SycVisO7TUq2MItq2U4BwsA3aQ4ehpP/uJdAfJEfwi2omRV5pGb +806pWkfPAkEAxz+igHS8tR11aLck71dD4BRBY7XZCUg6G4zmYYWsqj0yvM6c4Yn0 +HRcrZqFvV/xuMFphWEmMBhrqLvgy66yUSQJBALkei4LeRid0sDswMhMHGaAFvG4T +FtB5n8CaTPpb854GoKP42521ANP+QnGq36dvsdPStDEqz20rvA4hPLSQs08CQCV8 +eWxFikNg+XfsDQzilCiSZwMFcYHnjtckGSv75FJbFTKkhKuCMuVOOKIkeThKi8iZ +GHttyuRTKAASPjJM09ECQBrhlKJwYKuUDMp3qkLBgrXYqbFxZtkS2GeFMUfLcRlx +oMrTFEczz9lZ0huTuQYPeAAOY0Gd84mL0kQqTRTzNLs= +-----END RSA PRIVATE KEY----- diff --git a/test/parallel/test-tls-passphrase.js b/test/parallel/test-tls-passphrase.js index 8999f470187f78..319c3511dce7ee 100644 --- a/test/parallel/test-tls-passphrase.js +++ b/test/parallel/test-tls-passphrase.js @@ -1,21 +1,27 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); if (!common.hasCrypto) { common.skip('missing crypto'); return; } -var tls = require('tls'); +const tls = require('tls'); -var fs = require('fs'); -var path = require('path'); +const fs = require('fs'); +const path = require('path'); -var key = fs.readFileSync(path.join(common.fixturesDir, 'pass-key.pem')); -var cert = fs.readFileSync(path.join(common.fixturesDir, 'pass-cert.pem')); +const passKey = fs.readFileSync(path.join(common.fixturesDir, 'pass-key.pem')); +const rawKey = fs.readFileSync(path.join(common.fixturesDir, 'raw-key.pem')); +const cert = fs.readFileSync(path.join(common.fixturesDir, 'pass-cert.pem')); -var server = tls.Server({ - key: key, +assert(Buffer.isBuffer(passKey)); +assert(Buffer.isBuffer(cert)); +assert.strictEqual(typeof passKey.toString(), 'string'); +assert.strictEqual(typeof cert.toString(), 'string'); + +const server = tls.Server({ + key: passKey, passphrase: 'passphrase', cert: cert, ca: [cert], @@ -26,24 +32,174 @@ var server = tls.Server({ }); server.listen(0, common.mustCall(function() { - var c = tls.connect({ + // Buffer + tls.connect({ port: this.address().port, - key: key, + key: passKey, passphrase: 'passphrase', cert: cert, rejectUnauthorized: false }, common.mustCall(function() {})); - c.on('end', function() { - server.close(); - }); -})); + + tls.connect({ + port: this.address().port, + key: rawKey, + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: rawKey, + passphrase: 'passphrase', // Ignored. + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + // Buffer[] + /* XXX(sam) Should work, but its unimplemented ATM. + tls.connect({ + port: this.address().port, + key: [passKey], + passphrase: 'passphrase', + cert: [cert], + rejectUnauthorized: false + }, common.mustCall(function() {})); + */ + + tls.connect({ + port: this.address().port, + key: [rawKey], + cert: [cert], + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [rawKey], + passphrase: 'passphrase', // Ignored. + cert: [cert], + rejectUnauthorized: false + }, common.mustCall(function() {})); + + // string + tls.connect({ + port: this.address().port, + key: passKey.toString(), + passphrase: 'passphrase', + cert: cert.toString(), + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: rawKey.toString(), + cert: cert.toString(), + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: rawKey.toString(), + passphrase: 'passphrase', // Ignored. + cert: cert.toString(), + rejectUnauthorized: false + }, common.mustCall(function() {})); + + // String[] + /* XXX(sam) Should work, but its unimplemented ATM. + tls.connect({ + port: this.address().port, + key: [passKey.toString()], + passphrase: 'passphrase', + cert: [cert.toString()], + rejectUnauthorized: false + }, common.mustCall(function() {})); + */ + + tls.connect({ + port: this.address().port, + key: [rawKey.toString()], + cert: [cert.toString()], + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [rawKey.toString()], + passphrase: 'passphrase', // Ignored. + cert: [cert.toString()], + rejectUnauthorized: false + }, common.mustCall(function() {})); + + // Object[] + tls.connect({ + port: this.address().port, + key: [{pem: passKey, passphrase: 'passphrase'}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: passKey.toString(), passphrase: 'passphrase'}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: rawKey, passphrase: 'passphrase'}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: rawKey.toString(), passphrase: 'passphrase'}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + /* XXX(sam) Should work, but unimplemented ATM + tls.connect({ + port: this.address().port, + key: [{pem: rawKey}], + passphrase: 'passphrase', + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: rawKey.toString()}], + passphrase: 'passphrase', + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: rawKey}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + + tls.connect({ + port: this.address().port, + key: [{pem: rawKey.toString()}], + cert: cert, + rejectUnauthorized: false + }, common.mustCall(function() {})); + */ +})).unref(); assert.throws(function() { tls.connect({ port: server.address().port, - key: key, + key: passKey, passphrase: 'invalid', cert: cert, rejectUnauthorized: false }); -}); +}, /bad decrypt/); From 3f17c180be901a7855a5f33522b666a8b909d4ca Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Fri, 9 Dec 2016 11:08:51 -0800 Subject: [PATCH 028/169] test: var to const in tls-no-cert-required PR-URL: https://github.com/nodejs/node/pull/9800 Reviewed-By: Roman Reiss Reviewed-By: Michael Dawson --- test/parallel/test-tls-no-cert-required.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-tls-no-cert-required.js b/test/parallel/test-tls-no-cert-required.js index 8d907d9f8a4e06..3c7cf4462fcd07 100644 --- a/test/parallel/test-tls-no-cert-required.js +++ b/test/parallel/test-tls-no-cert-required.js @@ -1,12 +1,12 @@ 'use strict'; -var assert = require('assert'); -var common = require('../common'); +const assert = require('assert'); +const common = require('../common'); if (!common.hasCrypto) { common.skip('missing crypto'); return; } -var tls = require('tls'); +const tls = require('tls'); // Omitting the cert or pfx option to tls.createServer() should not throw. // AECDH-NULL-SHA is a no-authentication/no-encryption cipher and hence From 13983d474a3bd095cd4446310cb47999a8b38e03 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Mon, 20 Jun 2016 07:29:54 -0700 Subject: [PATCH 029/169] deps: cherry-pick d800a65 from V8 upstream Original commit message: Filter out stale left-trimmed handles BUG=chromium:620553 LOG=N R=jochen@chromium.org Review-Url: https://codereview.chromium.org/2078403002 Cr-Commit-Position: refs/heads/master@{#37108} PR-URL: https://github.com/nodejs/node/pull/10666 Reviewed-By: James M Snell Reviewed-By: Fedor Indutny Reviewed-By: Ali Ijaz Sheikh --- deps/v8/src/heap/heap.cc | 30 ------------------- deps/v8/src/heap/heap.h | 3 -- deps/v8/src/heap/mark-compact.cc | 28 ++++++++++++++++- .../v8/test/mjsunit/regress/regress-620553.js | 17 +++++++++++ 4 files changed, 44 insertions(+), 34 deletions(-) create mode 100644 deps/v8/test/mjsunit/regress/regress-620553.js diff --git a/deps/v8/src/heap/heap.cc b/deps/v8/src/heap/heap.cc index 2b5ff9cd1aeaac..3e8e14493955b6 100644 --- a/deps/v8/src/heap/heap.cc +++ b/deps/v8/src/heap/heap.cc @@ -3166,10 +3166,6 @@ FixedArrayBase* Heap::LeftTrimFixedArray(FixedArrayBase* object, DCHECK(!lo_space()->Contains(object)); DCHECK(object->map() != fixed_cow_array_map()); - // Ensure that the no handle-scope has more than one pointer to the same - // backing-store. - SLOW_DCHECK(CountHandlesForObject(object) <= 1); - STATIC_ASSERT(FixedArrayBase::kMapOffset == 0); STATIC_ASSERT(FixedArrayBase::kLengthOffset == kPointerSize); STATIC_ASSERT(FixedArrayBase::kHeaderSize == 2 * kPointerSize); @@ -5671,32 +5667,6 @@ void Heap::PrintHandles() { #endif -#ifdef ENABLE_SLOW_DCHECKS - -class CountHandleVisitor : public ObjectVisitor { - public: - explicit CountHandleVisitor(Object* object) : object_(object) {} - - void VisitPointers(Object** start, Object** end) override { - for (Object** p = start; p < end; p++) { - if (object_ == reinterpret_cast(*p)) count_++; - } - } - - int count() { return count_; } - - private: - Object* object_; - int count_ = 0; -}; - -int Heap::CountHandlesForObject(Object* object) { - CountHandleVisitor v(object); - isolate_->handle_scope_implementer()->Iterate(&v); - return v.count(); -} -#endif - class CheckHandleCountVisitor : public ObjectVisitor { public: CheckHandleCountVisitor() : handle_count_(0) {} diff --git a/deps/v8/src/heap/heap.h b/deps/v8/src/heap/heap.h index bbe1f05e4f2659..2d2029912cd717 100644 --- a/deps/v8/src/heap/heap.h +++ b/deps/v8/src/heap/heap.h @@ -1394,9 +1394,6 @@ class Heap { void ReportHeapStatistics(const char* title); void ReportCodeStatistics(const char* title); #endif -#ifdef ENABLE_SLOW_DCHECKS - int CountHandlesForObject(Object* object); -#endif private: class PretenuringScope; diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index 9abcd1a4b334a6..e3c56b04ee275d 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -1374,8 +1374,34 @@ class RootMarkingVisitor : public ObjectVisitor { void MarkObjectByPointer(Object** p) { if (!(*p)->IsHeapObject()) return; - // Replace flat cons strings in place. HeapObject* object = HeapObject::cast(*p); + + // We cannot avoid stale handles to left-trimmed objects, but can only make + // sure all handles still needed are updated. Filter out any stale pointers + // and clear the slot to allow post processing of handles (needed because + // the sweeper might actually free the underlying page). + if (object->IsFiller()) { +#ifdef DEBUG + // We need to find a FixedArrayBase map after walking the fillers. + Heap* heap = collector_->heap(); + HeapObject* current = object; + while (current->IsFiller()) { + Address next = reinterpret_cast
(current); + if (current->map() == heap->one_pointer_filler_map()) { + next += kPointerSize; + } else if (current->map() == heap->two_pointer_filler_map()) { + next += 2 * kPointerSize; + } else { + next += current->Size(); + } + current = reinterpret_cast(next); + } + DCHECK(current->IsFixedArrayBase()); +#endif // DEBUG + *p = nullptr; + return; + } + MarkBit mark_bit = Marking::MarkBitFrom(object); if (Marking::IsBlackOrGrey(mark_bit)) return; diff --git a/deps/v8/test/mjsunit/regress/regress-620553.js b/deps/v8/test/mjsunit/regress/regress-620553.js new file mode 100644 index 00000000000000..461b9bb189e559 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-620553.js @@ -0,0 +1,17 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --expose-gc + +var o0 = []; +var o1 = []; +var cnt = 0; +o1.__defineGetter__(0, function() { + if (cnt++ > 2) return; + o0.shift(); + gc(); + o0.push(0); + o0.concat(o1); +}); +o1[0]; From 87839ca0368fd8474a395671fe7044a7790a46ba Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Wed, 22 Jun 2016 05:21:16 -0700 Subject: [PATCH 030/169] deps: cherry-pick 7a88ff3 from V8 upstream Original commit message: Filter out stale left-trimmed handles for scavenges The missing part from https://codereview.chromium.org/2078403002/ R=jochen@chromium.org BUG=chromium:621869 LOG=N Review-Url: https://codereview.chromium.org/2077353004 Cr-Commit-Position: refs/heads/master@{#37184} PR-URL: https://github.com/nodejs/node/pull/10666 Reviewed-By: James M Snell Reviewed-By: Fedor Indutny Reviewed-By: Ali Ijaz Sheikh --- deps/v8/src/heap/heap-inl.h | 25 ++++++++++++++++++ deps/v8/src/heap/heap.h | 6 +++++ deps/v8/src/heap/mark-compact.cc | 26 +------------------ deps/v8/src/heap/scavenger.cc | 3 +++ deps/v8/src/objects-inl.h | 3 +-- deps/v8/src/objects.h | 2 +- .../v8/test/mjsunit/regress/regress-621869.js | 18 +++++++++++++ 7 files changed, 55 insertions(+), 28 deletions(-) create mode 100644 deps/v8/test/mjsunit/regress/regress-621869.js diff --git a/deps/v8/src/heap/heap-inl.h b/deps/v8/src/heap/heap-inl.h index e31d3d6859b463..3d2e059fae8939 100644 --- a/deps/v8/src/heap/heap-inl.h +++ b/deps/v8/src/heap/heap-inl.h @@ -449,6 +449,31 @@ void Heap::CopyBlock(Address dst, Address src, int byte_size) { static_cast(byte_size / kPointerSize)); } +bool Heap::PurgeLeftTrimmedObject(Object** object) { + HeapObject* current = reinterpret_cast(*object); + const MapWord map_word = current->map_word(); + if (current->IsFiller() && !map_word.IsForwardingAddress()) { +#ifdef DEBUG + // We need to find a FixedArrayBase map after walking the fillers. + while (current->IsFiller()) { + Address next = reinterpret_cast
(current); + if (current->map() == one_pointer_filler_map()) { + next += kPointerSize; + } else if (current->map() == two_pointer_filler_map()) { + next += 2 * kPointerSize; + } else { + next += current->Size(); + } + current = reinterpret_cast(next); + } + DCHECK(current->IsFixedArrayBase()); +#endif // DEBUG + *object = nullptr; + return true; + } + return false; +} + template AllocationMemento* Heap::FindAllocationMemento(HeapObject* object) { // Check if there is potentially a memento behind the object. If diff --git a/deps/v8/src/heap/heap.h b/deps/v8/src/heap/heap.h index 2d2029912cd717..2ce326a64e8416 100644 --- a/deps/v8/src/heap/heap.h +++ b/deps/v8/src/heap/heap.h @@ -602,6 +602,12 @@ class Heap { // stored on the map to facilitate fast dispatch for {StaticVisitorBase}. static int GetStaticVisitorIdForMap(Map* map); + // We cannot avoid stale handles to left-trimmed objects, but can only make + // sure all handles still needed are updated. Filter out a stale pointer + // and clear the slot to allow post processing of handles (needed because + // the sweeper might actually free the underlying page). + inline bool PurgeLeftTrimmedObject(Object** object); + // Notifies the heap that is ok to start marking or other activities that // should not happen during deserialization. void NotifyDeserializationComplete(); diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index e3c56b04ee275d..31b12f1d1b59b2 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -1376,31 +1376,7 @@ class RootMarkingVisitor : public ObjectVisitor { HeapObject* object = HeapObject::cast(*p); - // We cannot avoid stale handles to left-trimmed objects, but can only make - // sure all handles still needed are updated. Filter out any stale pointers - // and clear the slot to allow post processing of handles (needed because - // the sweeper might actually free the underlying page). - if (object->IsFiller()) { -#ifdef DEBUG - // We need to find a FixedArrayBase map after walking the fillers. - Heap* heap = collector_->heap(); - HeapObject* current = object; - while (current->IsFiller()) { - Address next = reinterpret_cast
(current); - if (current->map() == heap->one_pointer_filler_map()) { - next += kPointerSize; - } else if (current->map() == heap->two_pointer_filler_map()) { - next += 2 * kPointerSize; - } else { - next += current->Size(); - } - current = reinterpret_cast(next); - } - DCHECK(current->IsFixedArrayBase()); -#endif // DEBUG - *p = nullptr; - return; - } + if (collector_->heap()->PurgeLeftTrimmedObject(p)) return; MarkBit mark_bit = Marking::MarkBitFrom(object); if (Marking::IsBlackOrGrey(mark_bit)) return; diff --git a/deps/v8/src/heap/scavenger.cc b/deps/v8/src/heap/scavenger.cc index 3f532ead6265f0..18735bd20179cc 100644 --- a/deps/v8/src/heap/scavenger.cc +++ b/deps/v8/src/heap/scavenger.cc @@ -462,6 +462,9 @@ void ScavengeVisitor::VisitPointers(Object** start, Object** end) { void ScavengeVisitor::ScavengePointer(Object** p) { Object* object = *p; if (!heap_->InNewSpace(object)) return; + + if (heap_->PurgeLeftTrimmedObject(p)) return; + Scavenger::ScavengeObject(reinterpret_cast(p), reinterpret_cast(object)); } diff --git a/deps/v8/src/objects-inl.h b/deps/v8/src/objects-inl.h index b75dd1c969a498..11f4d7498d7558 100644 --- a/deps/v8/src/objects-inl.h +++ b/deps/v8/src/objects-inl.h @@ -1261,8 +1261,7 @@ Map* MapWord::ToMap() { return reinterpret_cast(value_); } - -bool MapWord::IsForwardingAddress() { +bool MapWord::IsForwardingAddress() const { return HAS_SMI_TAG(reinterpret_cast(value_)); } diff --git a/deps/v8/src/objects.h b/deps/v8/src/objects.h index abced2d4bad50c..d1632c9deb2982 100644 --- a/deps/v8/src/objects.h +++ b/deps/v8/src/objects.h @@ -1476,7 +1476,7 @@ class MapWord BASE_EMBEDDED { // True if this map word is a forwarding address for a scavenge // collection. Only valid during a scavenge collection (specifically, // when all map words are heap object pointers, i.e. not during a full GC). - inline bool IsForwardingAddress(); + inline bool IsForwardingAddress() const; // Create a map word from a forwarding address. static inline MapWord FromForwardingAddress(HeapObject* object); diff --git a/deps/v8/test/mjsunit/regress/regress-621869.js b/deps/v8/test/mjsunit/regress/regress-621869.js new file mode 100644 index 00000000000000..db34064457cc30 --- /dev/null +++ b/deps/v8/test/mjsunit/regress/regress-621869.js @@ -0,0 +1,18 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Flags: --expose-gc + +var o0 = []; +var o1 = []; +var cnt = 0; +var only_scavenge = true; +o1.__defineGetter__(0, function() { + if (cnt++ > 2) return; + o0.shift(); + gc(only_scavenge); + o0.push((64)); + o0.concat(o1); +}); +o1[0]; From e71129ebbc115f86f518ff71f3b35b5d88923d81 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Wed, 29 Jun 2016 01:16:07 -0700 Subject: [PATCH 031/169] deps: cherry-pick a715957 from V8 upstream Original commit message: Iterate handles with special left-trim visitor BUG=chromium:620553 LOG=N R=hpayer@chromium.org Review-Url: https://codereview.chromium.org/2102243002 Cr-Commit-Position: refs/heads/master@{#37366} PR-URL: https://github.com/nodejs/node/pull/10666 Reviewed-By: James M Snell Reviewed-By: Fedor Indutny Reviewed-By: Ali Ijaz Sheikh --- deps/v8/src/heap/heap-inl.h | 25 ------------------ deps/v8/src/heap/heap.cc | 45 ++++++++++++++++++++++++++++++++ deps/v8/src/heap/heap.h | 6 ----- deps/v8/src/heap/mark-compact.cc | 2 -- deps/v8/src/heap/scavenger.cc | 2 -- 5 files changed, 45 insertions(+), 35 deletions(-) diff --git a/deps/v8/src/heap/heap-inl.h b/deps/v8/src/heap/heap-inl.h index 3d2e059fae8939..e31d3d6859b463 100644 --- a/deps/v8/src/heap/heap-inl.h +++ b/deps/v8/src/heap/heap-inl.h @@ -449,31 +449,6 @@ void Heap::CopyBlock(Address dst, Address src, int byte_size) { static_cast(byte_size / kPointerSize)); } -bool Heap::PurgeLeftTrimmedObject(Object** object) { - HeapObject* current = reinterpret_cast(*object); - const MapWord map_word = current->map_word(); - if (current->IsFiller() && !map_word.IsForwardingAddress()) { -#ifdef DEBUG - // We need to find a FixedArrayBase map after walking the fillers. - while (current->IsFiller()) { - Address next = reinterpret_cast
(current); - if (current->map() == one_pointer_filler_map()) { - next += kPointerSize; - } else if (current->map() == two_pointer_filler_map()) { - next += 2 * kPointerSize; - } else { - next += current->Size(); - } - current = reinterpret_cast(next); - } - DCHECK(current->IsFixedArrayBase()); -#endif // DEBUG - *object = nullptr; - return true; - } - return false; -} - template AllocationMemento* Heap::FindAllocationMemento(HeapObject* object) { // Check if there is potentially a memento behind the object. If diff --git a/deps/v8/src/heap/heap.cc b/deps/v8/src/heap/heap.cc index 3e8e14493955b6..eae9695caf09af 100644 --- a/deps/v8/src/heap/heap.cc +++ b/deps/v8/src/heap/heap.cc @@ -4800,6 +4800,49 @@ void Heap::IterateSmiRoots(ObjectVisitor* v) { v->Synchronize(VisitorSynchronization::kSmiRootList); } +// We cannot avoid stale handles to left-trimmed objects, but can only make +// sure all handles still needed are updated. Filter out a stale pointer +// and clear the slot to allow post processing of handles (needed because +// the sweeper might actually free the underlying page). +class FixStaleLeftTrimmedHandlesVisitor : public ObjectVisitor { + public: + explicit FixStaleLeftTrimmedHandlesVisitor(Heap* heap) : heap_(heap) { + USE(heap_); + } + + void VisitPointer(Object** p) override { FixHandle(p); } + + void VisitPointers(Object** start, Object** end) override { + for (Object** p = start; p < end; p++) FixHandle(p); + } + + private: + inline void FixHandle(Object** p) { + HeapObject* current = reinterpret_cast(*p); + if (!current->IsHeapObject()) return; + const MapWord map_word = current->map_word(); + if (!map_word.IsForwardingAddress() && current->IsFiller()) { +#ifdef DEBUG + // We need to find a FixedArrayBase map after walking the fillers. + while (current->IsFiller()) { + Address next = reinterpret_cast
(current); + if (current->map() == heap_->one_pointer_filler_map()) { + next += kPointerSize; + } else if (current->map() == heap_->two_pointer_filler_map()) { + next += 2 * kPointerSize; + } else { + next += current->Size(); + } + current = reinterpret_cast(next); + } + DCHECK(current->IsFixedArrayBase()); +#endif // DEBUG + *p = nullptr; + } + } + + Heap* heap_; +}; void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { v->VisitPointers(&roots_[0], &roots_[kStrongRootListLength]); @@ -4820,6 +4863,8 @@ void Heap::IterateStrongRoots(ObjectVisitor* v, VisitMode mode) { v->Synchronize(VisitorSynchronization::kCompilationCache); // Iterate over local handles in handle scopes. + FixStaleLeftTrimmedHandlesVisitor left_trim_visitor(this); + isolate_->handle_scope_implementer()->Iterate(&left_trim_visitor); isolate_->handle_scope_implementer()->Iterate(v); isolate_->IterateDeferredHandles(v); v->Synchronize(VisitorSynchronization::kHandleScope); diff --git a/deps/v8/src/heap/heap.h b/deps/v8/src/heap/heap.h index 2ce326a64e8416..2d2029912cd717 100644 --- a/deps/v8/src/heap/heap.h +++ b/deps/v8/src/heap/heap.h @@ -602,12 +602,6 @@ class Heap { // stored on the map to facilitate fast dispatch for {StaticVisitorBase}. static int GetStaticVisitorIdForMap(Map* map); - // We cannot avoid stale handles to left-trimmed objects, but can only make - // sure all handles still needed are updated. Filter out a stale pointer - // and clear the slot to allow post processing of handles (needed because - // the sweeper might actually free the underlying page). - inline bool PurgeLeftTrimmedObject(Object** object); - // Notifies the heap that is ok to start marking or other activities that // should not happen during deserialization. void NotifyDeserializationComplete(); diff --git a/deps/v8/src/heap/mark-compact.cc b/deps/v8/src/heap/mark-compact.cc index 31b12f1d1b59b2..16f93f13316bad 100644 --- a/deps/v8/src/heap/mark-compact.cc +++ b/deps/v8/src/heap/mark-compact.cc @@ -1376,8 +1376,6 @@ class RootMarkingVisitor : public ObjectVisitor { HeapObject* object = HeapObject::cast(*p); - if (collector_->heap()->PurgeLeftTrimmedObject(p)) return; - MarkBit mark_bit = Marking::MarkBitFrom(object); if (Marking::IsBlackOrGrey(mark_bit)) return; diff --git a/deps/v8/src/heap/scavenger.cc b/deps/v8/src/heap/scavenger.cc index 18735bd20179cc..dce53554474a57 100644 --- a/deps/v8/src/heap/scavenger.cc +++ b/deps/v8/src/heap/scavenger.cc @@ -463,8 +463,6 @@ void ScavengeVisitor::ScavengePointer(Object** p) { Object* object = *p; if (!heap_->InNewSpace(object)) return; - if (heap_->PurgeLeftTrimmedObject(p)) return; - Scavenger::ScavengeObject(reinterpret_cast(p), reinterpret_cast(object)); } From 4197b9b0413816a8c5992affcb0b848d7c24e6db Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Thu, 19 Jan 2017 12:18:36 -0500 Subject: [PATCH 032/169] deps: update patch level in V8 PR-URL: https://github.com/nodejs/node/pull/10666 Reviewed-By: James M Snell Reviewed-By: Fedor Indutny Reviewed-By: Ali Ijaz Sheikh --- deps/v8/include/v8-version.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/deps/v8/include/v8-version.h b/deps/v8/include/v8-version.h index 79f057037b4dc7..489e86cf157c76 100644 --- a/deps/v8/include/v8-version.h +++ b/deps/v8/include/v8-version.h @@ -11,7 +11,7 @@ #define V8_MAJOR_VERSION 5 #define V8_MINOR_VERSION 1 #define V8_BUILD_NUMBER 281 -#define V8_PATCH_LEVEL 91 +#define V8_PATCH_LEVEL 92 // Use 1 for candidates and 0 otherwise. // (Boolean macro values are not supported by all preprocessors.) From 0ee665c4edfa920cd842fbeea978410779d53757 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 19 Oct 2016 16:53:39 -0700 Subject: [PATCH 033/169] deps: Intl: ICU 58 bump: configure/LICENSE/docs * bump to ICU 58.1 - update URL / hash * does not attempt to reduce size - yet * patch to work around http://bugs.icu-project.org/trac/ticket/12822 ( compile issue on Windows) * Fix ICU shrinker to delete old license.html file (update to https://github.com/nodejs/node/pull/8674 ) Fixes: https://github.com/nodejs/node/issues/7844 PR-URL: https://github.com/nodejs/node/pull/9234 Reviewed-By: James M Snell --- LICENSE | 93 +- configure | 4 +- tools/icu/README.md | 15 +- tools/icu/patches/58/source/i18n/digitlst.cpp | 1095 +++++++++++++++++ tools/icu/shrink-icu-src.py | 17 +- 5 files changed, 1162 insertions(+), 62 deletions(-) create mode 100644 tools/icu/patches/58/source/i18n/digitlst.cpp diff --git a/LICENSE b/LICENSE index 254d5484323b93..4ffd4869b2360a 100644 --- a/LICENSE +++ b/LICENSE @@ -98,12 +98,53 @@ The externally maintained libraries used by Node.js are: - ICU, located at deps/icu-small, is licensed as follows: """ - ICU License - ICU 1.8.1 and later + COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + + Copyright © 1991-2016 Unicode, Inc. All rights reserved. + Distributed under the Terms of Use in http://www.unicode.org/copyright.html + + Permission is hereby granted, free of charge, to any person obtaining + a copy of the Unicode data files and any associated documentation + (the "Data Files") or Unicode 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. + + --------------------- + + Third-Party Software Licenses + + This section contains third-party software notices and/or additional + terms for licensed third-party software components included within ICU + libraries. + + 1. ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1995-2016 International Business Machines Corporation and others - All rights reserved. Permission is hereby granted, free of charge, to any person obtaining @@ -134,54 +175,6 @@ The externally maintained libraries used by Node.js are: All trademarks and registered trademarks mentioned herein are the property of their respective owners. - --------------------- - - Third-Party Software Licenses - - This section contains third-party software notices and/or additional - terms for licensed third-party software components included within ICU - libraries. - - 1. Unicode Data Files and Software - - COPYRIGHT AND PERMISSION NOTICE - - Copyright © 1991-2016 Unicode, Inc. All rights reserved. - Distributed under the Terms of Use in - http://www.unicode.org/copyright.html. - - Permission is hereby granted, free of charge, to any person obtaining - a copy of the Unicode data files and any associated documentation - (the "Data Files") or Unicode 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 - (a) this copyright and permission notice appear with all copies - of the Data Files or Software, - (b) this copyright and permission notice appear in associated - documentation, and - (c) there is clear notice in each modified Data File or in the Software - as well as in the documentation associated with the Data File(s) or - Software that the data or software has been modified. - - 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. - 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under diff --git a/configure b/configure index 6a50e5e8e1b6e2..fd66a2b78400b6 100755 --- a/configure +++ b/configure @@ -987,8 +987,8 @@ def glob_to_var(dir_base, dir_sub, patch_dir): def configure_intl(o): icus = [ { - 'url': 'https://ssl.icu-project.org/files/icu4c/57.1/icu4c-57_1-src.zip', - 'md5': 'f797503ecaebf1d38920013dc7893066', + 'url': 'https://ssl.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.zip', + 'md5': 'd6476b355f66a11fbe12db1d61d90d69', }, ] def icu_download(path): diff --git a/tools/icu/README.md b/tools/icu/README.md index 2e53563cddf0f7..ed540c672599ed 100644 --- a/tools/icu/README.md +++ b/tools/icu/README.md @@ -8,11 +8,12 @@ ```shell ./configure \ --with-intl=small-icu \ - --with-icu-source=http://download.icu-project.org/files/icu4c/56.1/icu4c-56_1-src.zip + --with-icu-source=http://download.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.tgz make ``` -(the equivalent `vcbuild.bat` commands should work also.) +(The equivalent `vcbuild.bat` commands should work also. Note that we use the `.tgz` and not the `.zip` here, +that is because of line endings.) - (note- may need to make changes in `icu-generic.gyp` or `tools/icu/patches` for version specific stuff) @@ -58,6 +59,14 @@ new Intl.DateTimeFormat('es',{month:'long'}).format(new Date(9E8)); - You are ready to check in the updated `deps/small-icu`. This is a big commit, so make this a separate commit from other changes. +- Now, rebuild the Node license. + +```shell +# clean up - remove deps/icu +make clean +tools/license-builder.sh +``` + - Now, fix the default URL for the `full-icu` build in `/configure`, in the `configure_intl()` function. It should match the ICU URL used in the first step. When this is done, the following should build with full ICU. @@ -70,7 +79,7 @@ make make test-ci ``` -- commit the change to `configure`. +- commit the change to `configure` along with the updated `LICENSE` file. ----- diff --git a/tools/icu/patches/58/source/i18n/digitlst.cpp b/tools/icu/patches/58/source/i18n/digitlst.cpp new file mode 100644 index 00000000000000..9711a6cc22880b --- /dev/null +++ b/tools/icu/patches/58/source/i18n/digitlst.cpp @@ -0,0 +1,1095 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +********************************************************************** +* Copyright (C) 1997-2015, International Business Machines +* Corporation and others. All Rights Reserved. +********************************************************************** +* +* File DIGITLST.CPP +* +* Modification History: +* +* Date Name Description +* 03/21/97 clhuang Converted from java. +* 03/21/97 clhuang Implemented with new APIs. +* 03/27/97 helena Updated to pass the simple test after code review. +* 03/31/97 aliu Moved isLONG_MIN to here, and fixed it. +* 04/15/97 aliu Changed MAX_COUNT to DBL_DIG. Changed Digit to char. +* Reworked representation by replacing fDecimalAt +* with fExponent. +* 04/16/97 aliu Rewrote set() and getDouble() to use sprintf/atof +* to do digit conversion. +* 09/09/97 aliu Modified for exponential notation support. +* 08/02/98 stephen Added nearest/even rounding +* Fixed bug in fitsIntoLong +****************************************************************************** +*/ + +#if defined(__CYGWIN__) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + +#include "digitlst.h" + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/putil.h" +#include "charstr.h" +#include "cmemory.h" +#include "cstring.h" +#include "mutex.h" +#include "putilimp.h" +#include "uassert.h" +#include "digitinterval.h" +#include "ucln_in.h" +#include "umutex.h" +#include +#include +#include +#include +#include + +#if !defined(U_USE_STRTOD_L) +# if U_PLATFORM_USES_ONLY_WIN32_API +# define U_USE_STRTOD_L 1 +# elif defined(U_HAVE_STRTOD_L) +# define U_USE_STRTOD_L U_HAVE_STRTOD_L +# else +# define U_USE_STRTOD_L 0 +# endif +#endif + +// Patch for http://bugs.icu-project.org/trac/ticket/12822 +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API || U_PLATFORM == U_PF_CYGWIN +# include +# else +# include +# endif +#endif + +// *************************************************************************** +// class DigitList +// A wrapper onto decNumber. +// Used to be standalone. +// *************************************************************************** + +/** + * This is the zero digit. The base for the digits returned by getDigit() + * Note that it is the platform invariant digit, and is not Unicode. + */ +#define kZero '0' + + +/* Only for 32 bit numbers. Ignore the negative sign. */ +//static const char LONG_MIN_REP[] = "2147483648"; +//static const char I64_MIN_REP[] = "9223372036854775808"; + + +U_NAMESPACE_BEGIN + +// ------------------------------------- +// default constructor + +DigitList::DigitList() +{ + uprv_decContextDefault(&fContext, DEC_INIT_BASE); + fContext.traps = 0; + uprv_decContextSetRounding(&fContext, DEC_ROUND_HALF_EVEN); + fContext.digits = fStorage.getCapacity(); + + fDecNumber = fStorage.getAlias(); + uprv_decNumberZero(fDecNumber); + + internalSetDouble(0.0); +} + +// ------------------------------------- + +DigitList::~DigitList() +{ +} + +// ------------------------------------- +// copy constructor + +DigitList::DigitList(const DigitList &other) +{ + fDecNumber = fStorage.getAlias(); + *this = other; +} + + +// ------------------------------------- +// assignment operator + +DigitList& +DigitList::operator=(const DigitList& other) +{ + if (this != &other) + { + uprv_memcpy(&fContext, &other.fContext, sizeof(decContext)); + + if (other.fStorage.getCapacity() > fStorage.getCapacity()) { + fDecNumber = fStorage.resize(other.fStorage.getCapacity()); + } + // Always reset the fContext.digits, even if fDecNumber was not reallocated, + // because above we copied fContext from other.fContext. + fContext.digits = fStorage.getCapacity(); + uprv_decNumberCopy(fDecNumber, other.fDecNumber); + + { + // fDouble is lazily created and cached. + // Avoid potential races with that happening with other.fDouble + // while we are doing the assignment. + Mutex mutex; + + if(other.fHave==kDouble) { + fUnion.fDouble = other.fUnion.fDouble; + } + fHave = other.fHave; + } + } + return *this; +} + +// ------------------------------------- +// operator == (does not exactly match the old DigitList function) + +UBool +DigitList::operator==(const DigitList& that) const +{ + if (this == &that) { + return TRUE; + } + decNumber n; // Has space for only a none digit value. + decContext c; + uprv_decContextDefault(&c, DEC_INIT_BASE); + c.digits = 1; + c.traps = 0; + + uprv_decNumberCompare(&n, this->fDecNumber, that.fDecNumber, &c); + UBool result = decNumberIsZero(&n); + return result; +} + +// ------------------------------------- +// comparison function. Returns +// Not Comparable : -2 +// < : -1 +// == : 0 +// > : +1 +int32_t DigitList::compare(const DigitList &other) { + decNumber result; + int32_t savedDigits = fContext.digits; + fContext.digits = 1; + uprv_decNumberCompare(&result, this->fDecNumber, other.fDecNumber, &fContext); + fContext.digits = savedDigits; + if (decNumberIsZero(&result)) { + return 0; + } else if (decNumberIsSpecial(&result)) { + return -2; + } else if (result.bits & DECNEG) { + return -1; + } else { + return 1; + } +} + + +// ------------------------------------- +// Reduce - remove trailing zero digits. +void +DigitList::reduce() { + uprv_decNumberReduce(fDecNumber, fDecNumber, &fContext); +} + + +// ------------------------------------- +// trim - remove trailing fraction zero digits. +void +DigitList::trim() { + uprv_decNumberTrim(fDecNumber); +} + +// ------------------------------------- +// Resets the digit list; sets all the digits to zero. + +void +DigitList::clear() +{ + uprv_decNumberZero(fDecNumber); + uprv_decContextSetRounding(&fContext, DEC_ROUND_HALF_EVEN); + internalSetDouble(0.0); +} + + +/** + * Formats a int64_t number into a base 10 string representation, and NULL terminates it. + * @param number The number to format + * @param outputStr The string to output to. Must be at least MAX_DIGITS+2 in length (21), + * to hold the longest int64_t value. + * @return the number of digits written, not including the sign. + */ +static int32_t +formatBase10(int64_t number, char *outputStr) { + // The number is output backwards, starting with the LSD. + // Fill the buffer from the far end. After the number is complete, + // slide the string contents to the front. + + const int32_t MAX_IDX = MAX_DIGITS+2; + int32_t destIdx = MAX_IDX; + outputStr[--destIdx] = 0; + + int64_t n = number; + if (number < 0) { // Negative numbers are slightly larger than a postive + outputStr[--destIdx] = (char)(-(n % 10) + kZero); + n /= -10; + } + do { + outputStr[--destIdx] = (char)(n % 10 + kZero); + n /= 10; + } while (n > 0); + + if (number < 0) { + outputStr[--destIdx] = '-'; + } + + // Slide the number to the start of the output str + U_ASSERT(destIdx >= 0); + int32_t length = MAX_IDX - destIdx; + uprv_memmove(outputStr, outputStr+MAX_IDX-length, length); + + return length; +} + + +// ------------------------------------- +// +// setRoundingMode() +// For most modes, the meaning and names are the same between the decNumber library +// (which DigitList follows) and the ICU Formatting Rounding Mode values. +// The flag constants are different, however. +// +// Note that ICU's kRoundingUnnecessary is not implemented directly by DigitList. +// This mode, inherited from Java, means that numbers that would not format exactly +// will return an error when formatting is attempted. + +void +DigitList::setRoundingMode(DecimalFormat::ERoundingMode m) { + enum rounding r; + + switch (m) { + case DecimalFormat::kRoundCeiling: r = DEC_ROUND_CEILING; break; + case DecimalFormat::kRoundFloor: r = DEC_ROUND_FLOOR; break; + case DecimalFormat::kRoundDown: r = DEC_ROUND_DOWN; break; + case DecimalFormat::kRoundUp: r = DEC_ROUND_UP; break; + case DecimalFormat::kRoundHalfEven: r = DEC_ROUND_HALF_EVEN; break; + case DecimalFormat::kRoundHalfDown: r = DEC_ROUND_HALF_DOWN; break; + case DecimalFormat::kRoundHalfUp: r = DEC_ROUND_HALF_UP; break; + case DecimalFormat::kRoundUnnecessary: r = DEC_ROUND_HALF_EVEN; break; + default: + // TODO: how to report the problem? + // Leave existing mode unchanged. + r = uprv_decContextGetRounding(&fContext); + } + uprv_decContextSetRounding(&fContext, r); + +} + + +// ------------------------------------- + +void +DigitList::setPositive(UBool s) { + if (s) { + fDecNumber->bits &= ~DECNEG; + } else { + fDecNumber->bits |= DECNEG; + } + internalClear(); +} +// ------------------------------------- + +void +DigitList::setDecimalAt(int32_t d) { + U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN + U_ASSERT(d-1>-999999999); + U_ASSERT(d-1< 999999999); + int32_t adjustedDigits = fDecNumber->digits; + if (decNumberIsZero(fDecNumber)) { + // Account for difference in how zero is represented between DigitList & decNumber. + adjustedDigits = 0; + } + fDecNumber->exponent = d - adjustedDigits; + internalClear(); +} + +int32_t +DigitList::getDecimalAt() { + U_ASSERT((fDecNumber->bits & DECSPECIAL) == 0); // Not Infinity or NaN + if (decNumberIsZero(fDecNumber) || ((fDecNumber->bits & DECSPECIAL) != 0)) { + return fDecNumber->exponent; // Exponent should be zero for these cases. + } + return fDecNumber->exponent + fDecNumber->digits; +} + +void +DigitList::setCount(int32_t c) { + U_ASSERT(c <= fContext.digits); + if (c == 0) { + // For a value of zero, DigitList sets all fields to zero, while + // decNumber keeps one digit (with that digit being a zero) + c = 1; + fDecNumber->lsu[0] = 0; + } + fDecNumber->digits = c; + internalClear(); +} + +int32_t +DigitList::getCount() const { + if (decNumberIsZero(fDecNumber) && fDecNumber->exponent==0) { + // The extra test for exponent==0 is needed because parsing sometimes appends + // zero digits. It's bogus, decimalFormatter parsing needs to be cleaned up. + return 0; + } else { + return fDecNumber->digits; + } +} + +void +DigitList::setDigit(int32_t i, char v) { + int32_t count = fDecNumber->digits; + U_ASSERT(i='0' && v<='9'); + v &= 0x0f; + fDecNumber->lsu[count-i-1] = v; + internalClear(); +} + +char +DigitList::getDigit(int32_t i) { + int32_t count = fDecNumber->digits; + U_ASSERT(ilsu[count-i-1] + '0'; +} + +// copied from DigitList::getDigit() +uint8_t +DigitList::getDigitValue(int32_t i) { + int32_t count = fDecNumber->digits; + U_ASSERT(ilsu[count-i-1]; +} + +// ------------------------------------- +// Appends the digit to the digit list if it's not out of scope. +// Ignores the digit, otherwise. +// +// This function is horribly inefficient to implement with decNumber because +// the digits are stored least significant first, which requires moving all +// existing digits down one to make space for the new one to be appended. +// +void +DigitList::append(char digit) +{ + U_ASSERT(digit>='0' && digit<='9'); + // Ignore digits which exceed the precision we can represent + // And don't fix for larger precision. Fix callers instead. + if (decNumberIsZero(fDecNumber)) { + // Zero needs to be special cased because of the difference in the way + // that the old DigitList and decNumber represent it. + // digit cout was zero for digitList, is one for decNumber + fDecNumber->lsu[0] = digit & 0x0f; + fDecNumber->digits = 1; + fDecNumber->exponent--; // To match the old digit list implementation. + } else { + int32_t nDigits = fDecNumber->digits; + if (nDigits < fContext.digits) { + int i; + for (i=nDigits; i>0; i--) { + fDecNumber->lsu[i] = fDecNumber->lsu[i-1]; + } + fDecNumber->lsu[0] = digit & 0x0f; + fDecNumber->digits++; + // DigitList emulation - appending doesn't change the magnitude of existing + // digits. With decNumber's decimal being after the + // least signficant digit, we need to adjust the exponent. + fDecNumber->exponent--; + } + } + internalClear(); +} + +// ------------------------------------- + +/** + * Currently, getDouble() depends on strtod() to do its conversion. + * + * WARNING!! + * This is an extremely costly function. ~1/2 of the conversion time + * can be linked to this function. + */ +double +DigitList::getDouble() const +{ + { + Mutex mutex; + if (fHave == kDouble) { + return fUnion.fDouble; + } + } + + double tDouble = 0.0; + if (isZero()) { + tDouble = 0.0; + if (decNumberIsNegative(fDecNumber)) { + tDouble /= -1; + } + } else if (isInfinite()) { + if (std::numeric_limits::has_infinity) { + tDouble = std::numeric_limits::infinity(); + } else { + tDouble = std::numeric_limits::max(); + } + if (!isPositive()) { + tDouble = -tDouble; //this was incorrectly "-fDouble" originally. + } + } else { + MaybeStackArray s; + // Note: 14 is a magic constant from the decNumber library documentation, + // the max number of extra characters beyond the number of digits + // needed to represent the number in string form. Add a few more + // for the additional digits we retain. + + // Round down to appx. double precision, if the number is longer than that. + // Copy the number first, so that we don't modify the original. + if (getCount() > MAX_DBL_DIGITS + 3) { + DigitList numToConvert(*this); + numToConvert.reduce(); // Removes any trailing zeros, so that digit count is good. + numToConvert.round(MAX_DBL_DIGITS+3); + uprv_decNumberToString(numToConvert.fDecNumber, s.getAlias()); + // TODO: how many extra digits should be included for an accurate conversion? + } else { + uprv_decNumberToString(this->fDecNumber, s.getAlias()); + } + U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18); + + char *end = NULL; + tDouble = decimalStrToDouble(s.getAlias(), &end); + } + { + Mutex mutex; + DigitList *nonConstThis = const_cast(this); + nonConstThis->internalSetDouble(tDouble); + } + return tDouble; +} + +#if U_USE_STRTOD_L && U_PLATFORM_USES_ONLY_WIN32_API +# define locale_t _locale_t +# define freelocale _free_locale +# define strtod_l _strtod_l +#endif + +#if U_USE_STRTOD_L +static locale_t gCLocale = (locale_t)0; +#endif +static icu::UInitOnce gCLocaleInitOnce = U_INITONCE_INITIALIZER; + +U_CDECL_BEGIN +// Cleanup callback func +static UBool U_CALLCONV digitList_cleanup(void) +{ +#if U_USE_STRTOD_L + if (gCLocale != (locale_t)0) { + freelocale(gCLocale); + } +#endif + return TRUE; +} +// C Locale initialization func +static void U_CALLCONV initCLocale(void) { + ucln_i18n_registerCleanup(UCLN_I18N_DIGITLIST, digitList_cleanup); +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API + gCLocale = _create_locale(LC_ALL, "C"); +# else + gCLocale = newlocale(LC_ALL_MASK, "C", (locale_t)0); +# endif +#endif +} +U_CDECL_END + +double +DigitList::decimalStrToDouble(char *decstr, char **end) { + umtx_initOnce(gCLocaleInitOnce, &initCLocale); +#if U_USE_STRTOD_L + return strtod_l(decstr, end, gCLocale); +#else + char *decimalPt = strchr(decstr, '.'); + if (decimalPt) { + // We need to know the decimal separator character that will be used with strtod(). + // Depends on the C runtime global locale. + // Most commonly is '.' + char rep[MAX_DIGITS]; + sprintf(rep, "%+1.1f", 1.0); + *decimalPt = rep[2]; + } + return uprv_strtod(decstr, end); +#endif +} + +// ------------------------------------- + +/** + * convert this number to an int32_t. Round if there is a fractional part. + * Return zero if the number cannot be represented. + */ +int32_t DigitList::getLong() /*const*/ +{ + int32_t result = 0; + if (getUpperExponent() > 10) { + // Overflow, absolute value too big. + return result; + } + if (fDecNumber->exponent != 0) { + // Force to an integer, with zero exponent, rounding if necessary. + // (decNumberToInt32 will only work if the exponent is exactly zero.) + DigitList copy(*this); + DigitList zero; + uprv_decNumberQuantize(copy.fDecNumber, copy.fDecNumber, zero.fDecNumber, &fContext); + result = uprv_decNumberToInt32(copy.fDecNumber, &fContext); + } else { + result = uprv_decNumberToInt32(fDecNumber, &fContext); + } + return result; +} + + +/** + * convert this number to an int64_t. Truncate if there is a fractional part. + * Return zero if the number cannot be represented. + */ +int64_t DigitList::getInt64() /*const*/ { + // TODO: fast conversion if fHave == fDouble + + // Truncate if non-integer. + // Return 0 if out of range. + // Range of in64_t is -9223372036854775808 to 9223372036854775807 (19 digits) + // + if (getUpperExponent() > 19) { + // Overflow, absolute value too big. + return 0; + } + + // The number of integer digits may differ from the number of digits stored + // in the decimal number. + // for 12.345 numIntDigits = 2, number->digits = 5 + // for 12E4 numIntDigits = 6, number->digits = 2 + // The conversion ignores the fraction digits in the first case, + // and fakes up extra zero digits in the second. + // TODO: It would be faster to store a table of powers of ten to multiply by + // instead of looping over zero digits, multiplying each time. + + int32_t numIntDigits = getUpperExponent(); + uint64_t value = 0; + for (int32_t i = 0; i < numIntDigits; i++) { + // Loop is iterating over digits starting with the most significant. + // Numbers are stored with the least significant digit at index zero. + int32_t digitIndex = fDecNumber->digits - i - 1; + int32_t v = (digitIndex >= 0) ? fDecNumber->lsu[digitIndex] : 0; + value = value * (uint64_t)10 + (uint64_t)v; + } + + if (decNumberIsNegative(fDecNumber)) { + value = ~value; + value += 1; + } + int64_t svalue = (int64_t)value; + + // Check overflow. It's convenient that the MSD is 9 only on overflow, the amount of + // overflow can't wrap too far. The test will also fail -0, but + // that does no harm; the right answer is 0. + if (numIntDigits == 19) { + if (( decNumberIsNegative(fDecNumber) && svalue>0) || + (!decNumberIsNegative(fDecNumber) && svalue<0)) { + svalue = 0; + } + } + + return svalue; +} + + +/** + * Return a string form of this number. + * Format is as defined by the decNumber library, for interchange of + * decimal numbers. + */ +void DigitList::getDecimal(CharString &str, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + + // A decimal number in string form can, worst case, be 14 characters longer + // than the number of digits. So says the decNumber library doc. + int32_t maxLength = fDecNumber->digits + 14; + int32_t capacity = 0; + char *buffer = str.clear().getAppendBuffer(maxLength, 0, capacity, status); + if (U_FAILURE(status)) { + return; // Memory allocation error on growing the string. + } + U_ASSERT(capacity >= maxLength); + uprv_decNumberToString(this->fDecNumber, buffer); + U_ASSERT((int32_t)uprv_strlen(buffer) <= maxLength); + str.append(buffer, -1, status); +} + +/** + * Return true if this is an integer value that can be held + * by an int32_t type. + */ +UBool +DigitList::fitsIntoLong(UBool ignoreNegativeZero) /*const*/ +{ + if (decNumberIsSpecial(this->fDecNumber)) { + // NaN or Infinity. Does not fit in int32. + return FALSE; + } + uprv_decNumberTrim(this->fDecNumber); + if (fDecNumber->exponent < 0) { + // Number contains fraction digits. + return FALSE; + } + if (decNumberIsZero(this->fDecNumber) && !ignoreNegativeZero && + (fDecNumber->bits & DECNEG) != 0) { + // Negative Zero, not ingored. Cannot represent as a long. + return FALSE; + } + if (getUpperExponent() < 10) { + // The number is 9 or fewer digits. + // The max and min int32 are 10 digts, so this number fits. + // This is the common case. + return TRUE; + } + + // TODO: Should cache these constants; construction is relatively costly. + // But not of huge consequence; they're only needed for 10 digit ints. + UErrorCode status = U_ZERO_ERROR; + DigitList min32; min32.set("-2147483648", status); + if (this->compare(min32) < 0) { + return FALSE; + } + DigitList max32; max32.set("2147483647", status); + if (this->compare(max32) > 0) { + return FALSE; + } + if (U_FAILURE(status)) { + return FALSE; + } + return true; +} + + + +/** + * Return true if the number represented by this object can fit into + * a long. + */ +UBool +DigitList::fitsIntoInt64(UBool ignoreNegativeZero) /*const*/ +{ + if (decNumberIsSpecial(this->fDecNumber)) { + // NaN or Infinity. Does not fit in int32. + return FALSE; + } + uprv_decNumberTrim(this->fDecNumber); + if (fDecNumber->exponent < 0) { + // Number contains fraction digits. + return FALSE; + } + if (decNumberIsZero(this->fDecNumber) && !ignoreNegativeZero && + (fDecNumber->bits & DECNEG) != 0) { + // Negative Zero, not ingored. Cannot represent as a long. + return FALSE; + } + if (getUpperExponent() < 19) { + // The number is 18 or fewer digits. + // The max and min int64 are 19 digts, so this number fits. + // This is the common case. + return TRUE; + } + + // TODO: Should cache these constants; construction is relatively costly. + // But not of huge consequence; they're only needed for 19 digit ints. + UErrorCode status = U_ZERO_ERROR; + DigitList min64; min64.set("-9223372036854775808", status); + if (this->compare(min64) < 0) { + return FALSE; + } + DigitList max64; max64.set("9223372036854775807", status); + if (this->compare(max64) > 0) { + return FALSE; + } + if (U_FAILURE(status)) { + return FALSE; + } + return true; +} + + +// ------------------------------------- + +void +DigitList::set(int32_t source) +{ + set((int64_t)source); + internalSetDouble(source); +} + +// ------------------------------------- +/** + * Set an int64, via decnumber + */ +void +DigitList::set(int64_t source) +{ + char str[MAX_DIGITS+2]; // Leave room for sign and trailing nul. + formatBase10(source, str); + U_ASSERT(uprv_strlen(str) < sizeof(str)); + + uprv_decNumberFromString(fDecNumber, str, &fContext); + internalSetDouble(static_cast(source)); +} + +// ------------------------------------- +/** + * Set the DigitList from a decimal number string. + * + * The incoming string _must_ be nul terminated, even though it is arriving + * as a StringPiece because that is what the decNumber library wants. + * We can get away with this for an internal function; it would not + * be acceptable for a public API. + */ +void +DigitList::set(StringPiece source, UErrorCode &status, uint32_t /*fastpathBits*/) { + if (U_FAILURE(status)) { + return; + } + +#if 0 + if(fastpathBits==(kFastpathOk|kNoDecimal)) { + int32_t size = source.size(); + const char *data = source.data(); + int64_t r = 0; + int64_t m = 1; + // fast parse + while(size>0) { + char ch = data[--size]; + if(ch=='+') { + break; + } else if(ch=='-') { + r = -r; + break; + } else { + int64_t d = ch-'0'; + //printf("CH[%d]=%c, %d, *=%d\n", size,ch, (int)d, (int)m); + r+=(d)*m; + m *= 10; + } + } + //printf("R=%d\n", r); + set(r); + } else +#endif + { + // Figure out a max number of digits to use during the conversion, and + // resize the number up if necessary. + int32_t numDigits = source.length(); + if (numDigits > fContext.digits) { + // fContext.digits == fStorage.getCapacity() + decNumber *t = fStorage.resize(numDigits, fStorage.getCapacity()); + if (t == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fDecNumber = t; + fContext.digits = numDigits; + } + + fContext.status = 0; + uprv_decNumberFromString(fDecNumber, source.data(), &fContext); + if ((fContext.status & DEC_Conversion_syntax) != 0) { + status = U_DECIMAL_NUMBER_SYNTAX_ERROR; + } + } + internalClear(); +} + +/** + * Set the digit list to a representation of the given double value. + * This method supports both fixed-point and exponential notation. + * @param source Value to be converted. + */ +void +DigitList::set(double source) +{ + // for now, simple implementation; later, do proper IEEE stuff + char rep[MAX_DIGITS + 8]; // Extra space for '+', '.', e+NNN, and '\0' (actually +8 is enough) + + // Generate a representation of the form /[+-][0-9].[0-9]+e[+-][0-9]+/ + // Can also generate /[+-]nan/ or /[+-]inf/ + // TODO: Use something other than sprintf() here, since it's behavior is somewhat platform specific. + // That is why infinity is special cased here. + if (uprv_isInfinite(source)) { + if (uprv_isNegativeInfinity(source)) { + uprv_strcpy(rep,"-inf"); // Handle negative infinity + } else { + uprv_strcpy(rep,"inf"); + } + } else { + sprintf(rep, "%+1.*e", MAX_DBL_DIGITS - 1, source); + } + U_ASSERT(uprv_strlen(rep) < sizeof(rep)); + + // uprv_decNumberFromString() will parse the string expecting '.' as a + // decimal separator, however sprintf() can use ',' in certain locales. + // Overwrite a ',' with '.' here before proceeding. + char *decimalSeparator = strchr(rep, ','); + if (decimalSeparator != NULL) { + *decimalSeparator = '.'; + } + + // Create a decNumber from the string. + uprv_decNumberFromString(fDecNumber, rep, &fContext); + uprv_decNumberTrim(fDecNumber); + internalSetDouble(source); +} + +// ------------------------------------- + +/* + * Multiply + * The number will be expanded if need be to retain full precision. + * In practice, for formatting, multiply is by 10, 100 or 1000, so more digits + * will not be required for this use. + */ +void +DigitList::mult(const DigitList &other, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + fContext.status = 0; + int32_t requiredDigits = this->digits() + other.digits(); + if (requiredDigits > fContext.digits) { + reduce(); // Remove any trailing zeros + int32_t requiredDigits = this->digits() + other.digits(); + ensureCapacity(requiredDigits, status); + } + uprv_decNumberMultiply(fDecNumber, fDecNumber, other.fDecNumber, &fContext); + internalClear(); +} + +// ------------------------------------- + +/* + * Divide + * The number will _not_ be expanded for inexact results. + * TODO: probably should expand some, for rounding increments that + * could add a few digits, e.g. .25, but not expand arbitrarily. + */ +void +DigitList::div(const DigitList &other, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + uprv_decNumberDivide(fDecNumber, fDecNumber, other.fDecNumber, &fContext); + internalClear(); +} + +// ------------------------------------- + +/* + * ensureCapacity. Grow the digit storage for the number if it's less than the requested + * amount. Never reduce it. Available size is kept in fContext.digits. + */ +void +DigitList::ensureCapacity(int32_t requestedCapacity, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + if (requestedCapacity <= 0) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + if (requestedCapacity > DEC_MAX_DIGITS) { + // Don't report an error for requesting too much. + // Arithemetic Results will be rounded to what can be supported. + // At 999,999,999 max digits, exceeding the limit is not too likely! + requestedCapacity = DEC_MAX_DIGITS; + } + if (requestedCapacity > fContext.digits) { + decNumber *newBuffer = fStorage.resize(requestedCapacity, fStorage.getCapacity()); + if (newBuffer == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + fContext.digits = requestedCapacity; + fDecNumber = newBuffer; + } +} + +// ------------------------------------- + +/** + * Round the representation to the given number of digits. + * @param maximumDigits The maximum number of digits to be shown. + * Upon return, count will be less than or equal to maximumDigits. + */ +void +DigitList::round(int32_t maximumDigits) +{ + reduce(); + if (maximumDigits >= fDecNumber->digits) { + return; + } + int32_t savedDigits = fContext.digits; + fContext.digits = maximumDigits; + uprv_decNumberPlus(fDecNumber, fDecNumber, &fContext); + fContext.digits = savedDigits; + uprv_decNumberTrim(fDecNumber); + reduce(); + internalClear(); +} + + +void +DigitList::roundFixedPoint(int32_t maximumFractionDigits) { + reduce(); // Remove trailing zeros. + if (fDecNumber->exponent >= -maximumFractionDigits) { + return; + } + decNumber scale; // Dummy decimal number, but with the desired number of + uprv_decNumberZero(&scale); // fraction digits. + scale.exponent = -maximumFractionDigits; + scale.lsu[0] = 1; + + uprv_decNumberQuantize(fDecNumber, fDecNumber, &scale, &fContext); + reduce(); + internalClear(); +} + +// ------------------------------------- + +void +DigitList::toIntegralValue() { + uprv_decNumberToIntegralValue(fDecNumber, fDecNumber, &fContext); +} + + +// ------------------------------------- +UBool +DigitList::isZero() const +{ + return decNumberIsZero(fDecNumber); +} + +// ------------------------------------- +int32_t +DigitList::getUpperExponent() const { + return fDecNumber->digits + fDecNumber->exponent; +} + +DigitInterval & +DigitList::getSmallestInterval(DigitInterval &result) const { + result.setLeastSignificantInclusive(fDecNumber->exponent); + result.setMostSignificantExclusive(getUpperExponent()); + return result; +} + +uint8_t +DigitList::getDigitByExponent(int32_t exponent) const { + int32_t idx = exponent - fDecNumber->exponent; + if (idx < 0 || idx >= fDecNumber->digits) { + return 0; + } + return fDecNumber->lsu[idx]; +} + +void +DigitList::appendDigitsTo(CharString &str, UErrorCode &status) const { + str.append((const char *) fDecNumber->lsu, fDecNumber->digits, status); +} + +void +DigitList::roundAtExponent(int32_t exponent, int32_t maxSigDigits) { + reduce(); + if (maxSigDigits < fDecNumber->digits) { + int32_t minExponent = getUpperExponent() - maxSigDigits; + if (exponent < minExponent) { + exponent = minExponent; + } + } + if (exponent <= fDecNumber->exponent) { + return; + } + int32_t digits = getUpperExponent() - exponent; + if (digits > 0) { + round(digits); + } else { + roundFixedPoint(-exponent); + } +} + +void +DigitList::quantize(const DigitList &quantity, UErrorCode &status) { + if (U_FAILURE(status)) { + return; + } + div(quantity, status); + roundAtExponent(0); + mult(quantity, status); + reduce(); +} + +int32_t +DigitList::getScientificExponent( + int32_t minIntDigitCount, int32_t exponentMultiplier) const { + // The exponent for zero is always zero. + if (isZero()) { + return 0; + } + int32_t intDigitCount = getUpperExponent(); + int32_t exponent; + if (intDigitCount >= minIntDigitCount) { + int32_t maxAdjustment = intDigitCount - minIntDigitCount; + exponent = (maxAdjustment / exponentMultiplier) * exponentMultiplier; + } else { + int32_t minAdjustment = minIntDigitCount - intDigitCount; + exponent = ((minAdjustment + exponentMultiplier - 1) / exponentMultiplier) * -exponentMultiplier; + } + return exponent; +} + +int32_t +DigitList::toScientific( + int32_t minIntDigitCount, int32_t exponentMultiplier) { + int32_t exponent = getScientificExponent( + minIntDigitCount, exponentMultiplier); + shiftDecimalRight(-exponent); + return exponent; +} + +void +DigitList::shiftDecimalRight(int32_t n) { + fDecNumber->exponent += n; + internalClear(); +} + +U_NAMESPACE_END +#endif // #if !UCONFIG_NO_FORMATTING + +//eof diff --git a/tools/icu/shrink-icu-src.py b/tools/icu/shrink-icu-src.py index d0c82d87468dc0..406c5c317f51e4 100644 --- a/tools/icu/shrink-icu-src.py +++ b/tools/icu/shrink-icu-src.py @@ -48,18 +48,17 @@ def icu_ignore(dir, files): ign = ign + files # except... ign.remove('source') - ign.remove('license.html') - ign.remove('LICENSE') + if 'LICENSE' in ign: + ign.remove('LICENSE') + # license.html will be removed (it's obviated by LICENSE) + elif 'license.html' in ign: + ign.remove('license.html') elif subdir == 'source': - ign = ign + ['layout','samples','test','extra','config','layoutex','allinone'] + ign = ign + ['layout','samples','test','extra','config','layoutex','allinone','data'] ign = ign + ['runConfigureICU','install-sh','mkinstalldirs','configure'] elif subdir == 'source/tools': ign = ign + ['tzcode','ctestfw','gensprep','gennorm2','gendict','icuswap', 'genbrk','gencfu','gencolusb','genren','memcheck','makeconv','gencnval','icuinfo','gentest'] - elif subdir == 'source/data': - ign = ign + ['unidata','curr','zone','unit','lang','region','misc','sprep'] - # else: - # print '!%s! [%s]' % (subdir, files) ign = ign + ['.DS_Store', 'Makefile', 'Makefile.in'] for file in files: @@ -103,6 +102,10 @@ def icu_info(icu_full_path): shutil.copytree(options.icusrc, options.icusmall, ignore=icu_ignore) print '%s --> %s' % (src_datafile, dst_datafile) +# now, make the data dir (since we ignored it) +os.mkdir(os.path.join(os.path.join(options.icusmall, "source", "data"))) +os.mkdir(os.path.join(os.path.join(options.icusmall, "source", "data", "in"))) + # OK, now copy the data file shutil.copy(src_datafile, dst_datafile) From ad807ad29b371919a3f0b977199ea4d4255b5ecd Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Wed, 19 Oct 2016 17:24:31 -0700 Subject: [PATCH 034/169] deps: Intl: ICU 58 bump - small icu (BIG COMMIT) This commit contains the ICU 58.1 delta. It is especially large because of the ICU license change, and, because the line endings were off previously. * bump to ICU 58.1 - check in small ICU source * from 58.1 final http://site.icu-project.org/download/58 Fixes: https://github.com/nodejs/node/issues/7844 PR-URL: https://github.com/nodejs/node/pull/9234 Reviewed-By: James M Snell --- deps/icu-small/LICENSE | 94 +- deps/icu-small/README-SMALL-ICU.txt | 4 +- deps/icu-small/license.html | 18 - deps/icu-small/source/common/appendable.cpp | 2 + deps/icu-small/source/common/bmpset.cpp | 2 + deps/icu-small/source/common/bmpset.h | 2 + deps/icu-small/source/common/brkeng.cpp | 2 + deps/icu-small/source/common/brkeng.h | 2 + deps/icu-small/source/common/brkiter.cpp | 4 + deps/icu-small/source/common/bytestream.cpp | 2 + deps/icu-small/source/common/bytestrie.cpp | 2 + .../source/common/bytestriebuilder.cpp | 10 +- .../source/common/bytestrieiterator.cpp | 10 +- deps/icu-small/source/common/caniter.cpp | 2 + deps/icu-small/source/common/chariter.cpp | 2 + deps/icu-small/source/common/charstr.cpp | 4 +- deps/icu-small/source/common/charstr.h | 8 +- deps/icu-small/source/common/cmemory.c | 2 + deps/icu-small/source/common/cmemory.h | 12 +- deps/icu-small/source/common/common.rc | 2 + deps/icu-small/source/common/cpputils.h | 20 +- deps/icu-small/source/common/cstr.cpp | 24 +- deps/icu-small/source/common/cstr.h | 9 +- deps/icu-small/source/common/cstring.c | 2 + deps/icu-small/source/common/cstring.h | 2 + deps/icu-small/source/common/cwchar.c | 2 + deps/icu-small/source/common/cwchar.h | 2 + deps/icu-small/source/common/dictbe.cpp | 6 +- deps/icu-small/source/common/dictbe.h | 2 + .../source/common/dictionarydata.cpp | 2 + deps/icu-small/source/common/dictionarydata.h | 2 + deps/icu-small/source/common/dtintrv.cpp | 2 + deps/icu-small/source/common/errorcode.cpp | 2 + deps/icu-small/source/common/filteredbrk.cpp | 48 +- .../source/common/filterednormalizer2.cpp | 2 + deps/icu-small/source/common/hash.h | 2 + deps/icu-small/source/common/icudataver.c | 2 + deps/icu-small/source/common/icuplug.cpp | 2 + deps/icu-small/source/common/icuplugimp.h | 2 + .../icu-small/source/common/listformatter.cpp | 2 + .../source/common/loadednormalizer2impl.cpp | 2 + deps/icu-small/source/common/localsvc.h | 2 + deps/icu-small/source/common/locavailable.cpp | 2 + deps/icu-small/source/common/locbased.cpp | 2 + deps/icu-small/source/common/locbased.h | 2 + deps/icu-small/source/common/locdispnames.cpp | 4 +- deps/icu-small/source/common/locdspnm.cpp | 117 +- deps/icu-small/source/common/locid.cpp | 81 +- deps/icu-small/source/common/loclikely.cpp | 5 +- deps/icu-small/source/common/locmap.c | 64 +- deps/icu-small/source/common/locmap.h | 2 + deps/icu-small/source/common/locresdata.cpp | 2 + deps/icu-small/source/common/locutil.cpp | 2 + deps/icu-small/source/common/locutil.h | 2 + deps/icu-small/source/common/messageimpl.h | 2 + .../source/common/messagepattern.cpp | 4 +- deps/icu-small/source/common/msvcres.h | 2 + deps/icu-small/source/common/mutex.h | 2 + deps/icu-small/source/common/norm2_nfc_data.h | 1114 +-- deps/icu-small/source/common/norm2allmodes.h | 2 + deps/icu-small/source/common/normalizer2.cpp | 2 + .../source/common/normalizer2impl.cpp | 2 + .../icu-small/source/common/normalizer2impl.h | 2 + deps/icu-small/source/common/normlzr.cpp | 2 + deps/icu-small/source/common/parsepos.cpp | 2 + deps/icu-small/source/common/patternprops.cpp | 2 + deps/icu-small/source/common/patternprops.h | 2 + deps/icu-small/source/common/pluralmap.cpp | 2 + deps/icu-small/source/common/pluralmap.h | 2 + deps/icu-small/source/common/propname.cpp | 2 + deps/icu-small/source/common/propname.h | 2 + deps/icu-small/source/common/propname_data.h | 1768 ++--- deps/icu-small/source/common/propsvec.c | 12 +- deps/icu-small/source/common/propsvec.h | 2 + deps/icu-small/source/common/punycode.cpp | 2 + deps/icu-small/source/common/punycode.h | 2 + deps/icu-small/source/common/putil.cpp | 83 +- deps/icu-small/source/common/putilimp.h | 14 +- deps/icu-small/source/common/rbbi.cpp | 17 +- deps/icu-small/source/common/rbbicst.pl | 4 + deps/icu-small/source/common/rbbidata.cpp | 2 + deps/icu-small/source/common/rbbidata.h | 2 + deps/icu-small/source/common/rbbinode.cpp | 59 +- deps/icu-small/source/common/rbbinode.h | 6 +- deps/icu-small/source/common/rbbirb.cpp | 2 + deps/icu-small/source/common/rbbirb.h | 2 + deps/icu-small/source/common/rbbirpt.h | 2 + deps/icu-small/source/common/rbbiscan.cpp | 26 +- deps/icu-small/source/common/rbbiscan.h | 2 + deps/icu-small/source/common/rbbisetb.cpp | 4 +- deps/icu-small/source/common/rbbisetb.h | 2 + deps/icu-small/source/common/rbbistbl.cpp | 25 +- deps/icu-small/source/common/rbbitblb.cpp | 8 +- deps/icu-small/source/common/rbbitblb.h | 2 + deps/icu-small/source/common/resbund.cpp | 2 + deps/icu-small/source/common/resbund_cnv.cpp | 2 + deps/icu-small/source/common/resource.cpp | 46 +- deps/icu-small/source/common/resource.h | 257 +- deps/icu-small/source/common/ruleiter.cpp | 2 + deps/icu-small/source/common/ruleiter.h | 2 + deps/icu-small/source/common/schriter.cpp | 2 + deps/icu-small/source/common/serv.cpp | 2 + deps/icu-small/source/common/serv.h | 2 + deps/icu-small/source/common/servlk.cpp | 2 + deps/icu-small/source/common/servlkf.cpp | 2 + deps/icu-small/source/common/servloc.h | 2 + deps/icu-small/source/common/servls.cpp | 2 + deps/icu-small/source/common/servnotf.cpp | 2 + deps/icu-small/source/common/servnotf.h | 2 + deps/icu-small/source/common/servrbf.cpp | 2 + deps/icu-small/source/common/servslkf.cpp | 2 + deps/icu-small/source/common/sharedobject.cpp | 2 + deps/icu-small/source/common/sharedobject.h | 2 + .../source/common/simpleformatter.cpp | 2 + deps/icu-small/source/common/sprpimpl.h | 2 + deps/icu-small/source/common/stringpiece.cpp | 2 + .../source/common/stringtriebuilder.cpp | 2 + deps/icu-small/source/common/uarrsort.c | 12 +- deps/icu-small/source/common/uarrsort.h | 2 + deps/icu-small/source/common/uassert.h | 2 + deps/icu-small/source/common/ubidi.c | 6 +- deps/icu-small/source/common/ubidi_props.c | 2 + deps/icu-small/source/common/ubidi_props.h | 2 + .../source/common/ubidi_props_data.h | 1114 +-- deps/icu-small/source/common/ubidiimp.h | 2 + deps/icu-small/source/common/ubidiln.c | 2 + deps/icu-small/source/common/ubiditransform.c | 528 ++ deps/icu-small/source/common/ubidiwrt.c | 2 + deps/icu-small/source/common/ubrk.cpp | 2 + deps/icu-small/source/common/ubrkimpl.h | 2 + deps/icu-small/source/common/ucase.cpp | 26 +- deps/icu-small/source/common/ucase.h | 5 +- .../source/common/ucase_props_data.h | 1313 ++-- deps/icu-small/source/common/ucasemap.cpp | 291 +- .../common/ucasemap_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/ucat.c | 2 + deps/icu-small/source/common/uchar.c | 12 +- .../source/common/uchar_props_data.h | 5991 +++++++++-------- deps/icu-small/source/common/ucharstrie.cpp | 2 + .../source/common/ucharstriebuilder.cpp | 4 +- .../source/common/ucharstrieiterator.cpp | 2 + deps/icu-small/source/common/uchriter.cpp | 2 + deps/icu-small/source/common/ucln.h | 2 + deps/icu-small/source/common/ucln_cmn.cpp | 2 + deps/icu-small/source/common/ucln_cmn.h | 2 + deps/icu-small/source/common/ucln_imp.h | 2 + deps/icu-small/source/common/ucmndata.c | 2 + deps/icu-small/source/common/ucmndata.h | 2 + deps/icu-small/source/common/ucnv.c | 6 +- deps/icu-small/source/common/ucnv2022.cpp | 65 +- deps/icu-small/source/common/ucnv_bld.cpp | 2 + deps/icu-small/source/common/ucnv_bld.h | 2 + deps/icu-small/source/common/ucnv_cb.c | 2 + deps/icu-small/source/common/ucnv_cnv.c | 2 + deps/icu-small/source/common/ucnv_cnv.h | 2 + deps/icu-small/source/common/ucnv_ct.c | 2 + deps/icu-small/source/common/ucnv_err.c | 2 + deps/icu-small/source/common/ucnv_ext.cpp | 4 +- deps/icu-small/source/common/ucnv_ext.h | 2 + deps/icu-small/source/common/ucnv_imp.h | 2 + deps/icu-small/source/common/ucnv_io.cpp | 37 +- deps/icu-small/source/common/ucnv_io.h | 10 +- deps/icu-small/source/common/ucnv_lmb.c | 2 + deps/icu-small/source/common/ucnv_set.c | 2 + deps/icu-small/source/common/ucnv_u16.c | 22 +- deps/icu-small/source/common/ucnv_u32.c | 17 +- deps/icu-small/source/common/ucnv_u7.c | 7 +- deps/icu-small/source/common/ucnv_u8.c | 7 +- deps/icu-small/source/common/ucnvbocu.cpp | 10 +- deps/icu-small/source/common/ucnvdisp.c | 2 + deps/icu-small/source/common/ucnvhz.c | 2 + deps/icu-small/source/common/ucnvisci.c | 2 + deps/icu-small/source/common/ucnvlat1.c | 2 + deps/icu-small/source/common/ucnvmbcs.cpp | 53 +- deps/icu-small/source/common/ucnvmbcs.h | 2 + deps/icu-small/source/common/ucnvscsu.c | 2 + deps/icu-small/source/common/ucnvsel.cpp | 2 + deps/icu-small/source/common/ucol_data.h | 2 + deps/icu-small/source/common/ucol_swp.cpp | 2 + deps/icu-small/source/common/ucol_swp.h | 2 + deps/icu-small/source/common/ucurr.cpp | 11 +- deps/icu-small/source/common/ucurrimp.h | 2 + deps/icu-small/source/common/udata.cpp | 61 +- deps/icu-small/source/common/udatamem.c | 2 + deps/icu-small/source/common/udatamem.h | 2 + deps/icu-small/source/common/udataswp.c | 6 +- deps/icu-small/source/common/udataswp.h | 16 + deps/icu-small/source/common/uelement.h | 2 + deps/icu-small/source/common/uenum.c | 2 + deps/icu-small/source/common/uenumimp.h | 2 + deps/icu-small/source/common/uhash.c | 2 + deps/icu-small/source/common/uhash.h | 6 +- deps/icu-small/source/common/uhash_us.cpp | 2 + deps/icu-small/source/common/uidna.cpp | 14 +- deps/icu-small/source/common/uinit.cpp | 2 + deps/icu-small/source/common/uinvchar.c | 2 + deps/icu-small/source/common/uinvchar.h | 2 + deps/icu-small/source/common/uiter.cpp | 2 + deps/icu-small/source/common/ulist.c | 67 +- deps/icu-small/source/common/ulist.h | 6 +- .../source/common/ulistformatter.cpp | 2 + deps/icu-small/source/common/uloc.cpp | 105 +- deps/icu-small/source/common/uloc_keytype.cpp | 7 +- deps/icu-small/source/common/uloc_tag.c | 102 +- deps/icu-small/source/common/ulocimp.h | 2 + deps/icu-small/source/common/umapfile.c | 2 + deps/icu-small/source/common/umapfile.h | 2 + deps/icu-small/source/common/umath.c | 2 + deps/icu-small/source/common/umutex.cpp | 21 +- deps/icu-small/source/common/umutex.h | 20 +- deps/icu-small/source/common/unames.cpp | 2 + .../source/common/unicode/appendable.h | 2 + .../icu-small/source/common/unicode/brkiter.h | 7 + .../source/common/unicode/bytestream.h | 2 + .../source/common/unicode/bytestrie.h | 5 +- .../source/common/unicode/bytestriebuilder.h | 6 +- .../icu-small/source/common/unicode/caniter.h | 2 + .../source/common/unicode/chariter.h | 2 + deps/icu-small/source/common/unicode/dbbi.h | 2 + .../icu-small/source/common/unicode/docmain.h | 4 +- .../icu-small/source/common/unicode/dtintrv.h | 2 + .../icu-small/source/common/unicode/enumset.h | 2 + .../source/common/unicode/errorcode.h | 2 + .../source/common/unicode/filteredbrk.h | 22 +- .../source/common/unicode/icudataver.h | 2 + .../icu-small/source/common/unicode/icuplug.h | 14 +- deps/icu-small/source/common/unicode/idna.h | 10 +- .../source/common/unicode/listformatter.h | 2 + .../source/common/unicode/localpointer.h | 47 +- .../source/common/unicode/locdspnm.h | 2 + deps/icu-small/source/common/unicode/locid.h | 2 + .../source/common/unicode/messagepattern.h | 2 + .../source/common/unicode/normalizer2.h | 2 + .../icu-small/source/common/unicode/normlzr.h | 8 +- .../source/common/unicode/parseerr.h | 2 + .../source/common/unicode/parsepos.h | 2 + .../source/common/unicode/platform.h | 8 + deps/icu-small/source/common/unicode/ptypes.h | 2 + deps/icu-small/source/common/unicode/putil.h | 2 + deps/icu-small/source/common/unicode/rbbi.h | 74 +- deps/icu-small/source/common/unicode/rep.h | 2 + .../icu-small/source/common/unicode/resbund.h | 2 + .../source/common/unicode/schriter.h | 2 + .../source/common/unicode/simpleformatter.h | 2 + .../source/common/unicode/std_string.h | 2 + .../icu-small/source/common/unicode/strenum.h | 2 + .../source/common/unicode/stringpiece.h | 8 +- .../source/common/unicode/stringtriebuilder.h | 14 +- .../source/common/unicode/symtable.h | 2 + deps/icu-small/source/common/unicode/ubidi.h | 28 +- .../source/common/unicode/ubiditransform.h | 321 + deps/icu-small/source/common/unicode/ubrk.h | 31 +- .../source/common/unicode/ucasemap.h | 2 + deps/icu-small/source/common/unicode/ucat.h | 2 + deps/icu-small/source/common/unicode/uchar.h | 261 +- .../source/common/unicode/ucharstrie.h | 2 + .../source/common/unicode/ucharstriebuilder.h | 2 + .../source/common/unicode/uchriter.h | 2 + deps/icu-small/source/common/unicode/uclean.h | 2 + deps/icu-small/source/common/unicode/ucnv.h | 9 +- .../icu-small/source/common/unicode/ucnv_cb.h | 2 + .../source/common/unicode/ucnv_err.h | 2 + .../icu-small/source/common/unicode/ucnvsel.h | 2 + .../icu-small/source/common/unicode/uconfig.h | 2 + deps/icu-small/source/common/unicode/ucurr.h | 6 +- deps/icu-small/source/common/unicode/udata.h | 9 +- .../source/common/unicode/udisplaycontext.h | 36 +- deps/icu-small/source/common/unicode/uenum.h | 2 + deps/icu-small/source/common/unicode/uidna.h | 2 + deps/icu-small/source/common/unicode/uiter.h | 2 + .../source/common/unicode/uldnames.h | 2 + .../source/common/unicode/ulistformatter.h | 2 + deps/icu-small/source/common/unicode/uloc.h | 12 +- .../source/common/unicode/umachine.h | 25 + deps/icu-small/source/common/unicode/umisc.h | 2 + .../icu-small/source/common/unicode/unifilt.h | 2 + .../source/common/unicode/unifunct.h | 2 + .../source/common/unicode/unimatch.h | 2 + deps/icu-small/source/common/unicode/uniset.h | 4 +- deps/icu-small/source/common/unicode/unistr.h | 26 +- deps/icu-small/source/common/unicode/unorm.h | 8 +- deps/icu-small/source/common/unicode/unorm2.h | 2 + .../icu-small/source/common/unicode/uobject.h | 2 + .../icu-small/source/common/unicode/urename.h | 20 +- deps/icu-small/source/common/unicode/urep.h | 2 + deps/icu-small/source/common/unicode/ures.h | 8 +- .../icu-small/source/common/unicode/uscript.h | 52 +- deps/icu-small/source/common/unicode/uset.h | 6 +- .../source/common/unicode/usetiter.h | 2 + deps/icu-small/source/common/unicode/ushape.h | 2 + deps/icu-small/source/common/unicode/usprep.h | 2 + .../icu-small/source/common/unicode/ustring.h | 2 + .../source/common/unicode/ustringtrie.h | 2 + deps/icu-small/source/common/unicode/utext.h | 2 + deps/icu-small/source/common/unicode/utf.h | 2 + deps/icu-small/source/common/unicode/utf16.h | 2 + deps/icu-small/source/common/unicode/utf32.h | 2 + deps/icu-small/source/common/unicode/utf8.h | 2 + .../icu-small/source/common/unicode/utf_old.h | 2 + deps/icu-small/source/common/unicode/utrace.h | 20 + deps/icu-small/source/common/unicode/utypes.h | 168 +- .../icu-small/source/common/unicode/uvernum.h | 23 +- .../source/common/unicode/uversion.h | 2 + deps/icu-small/source/common/unifiedcache.cpp | 2 + deps/icu-small/source/common/unifiedcache.h | 4 +- deps/icu-small/source/common/unifilt.cpp | 2 + deps/icu-small/source/common/unifunct.cpp | 2 + deps/icu-small/source/common/uniset.cpp | 10 +- .../source/common/uniset_closure.cpp | 2 + deps/icu-small/source/common/uniset_props.cpp | 2 + deps/icu-small/source/common/unisetspan.cpp | 2 + deps/icu-small/source/common/unisetspan.h | 2 + deps/icu-small/source/common/unistr.cpp | 143 +- deps/icu-small/source/common/unistr_case.cpp | 2 + .../source/common/unistr_case_locale.cpp | 2 + deps/icu-small/source/common/unistr_cnv.cpp | 2 + deps/icu-small/source/common/unistr_props.cpp | 2 + .../common/unistr_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/unistrappender.h | 2 + deps/icu-small/source/common/unorm.cpp | 2 + deps/icu-small/source/common/unormcmp.cpp | 2 + deps/icu-small/source/common/unormimp.h | 2 + deps/icu-small/source/common/uobject.cpp | 2 + deps/icu-small/source/common/uposixdefs.h | 2 + deps/icu-small/source/common/uprops.cpp | 2 + deps/icu-small/source/common/uprops.h | 11 +- deps/icu-small/source/common/ures_cnv.c | 2 + deps/icu-small/source/common/uresbund.cpp | 82 +- deps/icu-small/source/common/uresdata.cpp | 347 +- deps/icu-small/source/common/uresdata.h | 32 +- deps/icu-small/source/common/uresimp.h | 12 +- deps/icu-small/source/common/ureslocs.h | 2 + deps/icu-small/source/common/usc_impl.c | 2 + deps/icu-small/source/common/usc_impl.h | 2 + deps/icu-small/source/common/uscript.c | 2 + .../icu-small/source/common/uscript_props.cpp | 26 +- deps/icu-small/source/common/uset.cpp | 2 + deps/icu-small/source/common/uset_imp.h | 2 + deps/icu-small/source/common/uset_props.cpp | 2 + deps/icu-small/source/common/usetiter.cpp | 2 + deps/icu-small/source/common/ushape.cpp | 22 +- deps/icu-small/source/common/usprep.cpp | 2 + deps/icu-small/source/common/ustack.cpp | 2 + deps/icu-small/source/common/ustr_cnv.cpp | 2 + deps/icu-small/source/common/ustr_cnv.h | 2 + deps/icu-small/source/common/ustr_imp.h | 40 + .../source/common/ustr_titlecase_brkiter.cpp | 2 + deps/icu-small/source/common/ustr_wcs.cpp | 16 +- deps/icu-small/source/common/ustrcase.cpp | 699 +- .../source/common/ustrcase_locale.cpp | 2 + deps/icu-small/source/common/ustrenum.cpp | 2 + deps/icu-small/source/common/ustrenum.h | 2 + deps/icu-small/source/common/ustrfmt.c | 2 + deps/icu-small/source/common/ustrfmt.h | 2 + deps/icu-small/source/common/ustring.cpp | 8 +- deps/icu-small/source/common/ustrtrns.cpp | 2 + deps/icu-small/source/common/utext.cpp | 2 + deps/icu-small/source/common/utf_impl.c | 2 + deps/icu-small/source/common/util.cpp | 2 + deps/icu-small/source/common/util.h | 2 + deps/icu-small/source/common/util_props.cpp | 2 + deps/icu-small/source/common/utrace.c | 2 + deps/icu-small/source/common/utracimp.h | 2 + deps/icu-small/source/common/utrie.cpp | 6 +- deps/icu-small/source/common/utrie.h | 2 + deps/icu-small/source/common/utrie2.cpp | 2 + deps/icu-small/source/common/utrie2.h | 2 + .../source/common/utrie2_builder.cpp | 12 +- deps/icu-small/source/common/utrie2_impl.h | 2 + deps/icu-small/source/common/uts46.cpp | 30 +- deps/icu-small/source/common/utypeinfo.h | 2 + deps/icu-small/source/common/utypes.c | 2 + deps/icu-small/source/common/uvector.cpp | 2 + deps/icu-small/source/common/uvector.h | 2 + deps/icu-small/source/common/uvectr32.cpp | 2 + deps/icu-small/source/common/uvectr32.h | 2 + deps/icu-small/source/common/uvectr64.cpp | 2 + deps/icu-small/source/common/uvectr64.h | 2 + deps/icu-small/source/common/wintz.c | 2 + deps/icu-small/source/common/wintz.h | 2 + deps/icu-small/source/data/in/icudt57l.dat | Bin 1933056 -> 0 bytes deps/icu-small/source/data/in/icudt58l.dat | Bin 0 -> 2680800 bytes .../source/i18n/affixpatternparser.cpp | 8 +- .../source/i18n/affixpatternparser.h | 2 + deps/icu-small/source/i18n/alphaindex.cpp | 2 + deps/icu-small/source/i18n/anytrans.cpp | 2 + deps/icu-small/source/i18n/anytrans.h | 2 + deps/icu-small/source/i18n/astro.cpp | 2 + deps/icu-small/source/i18n/astro.h | 2 + deps/icu-small/source/i18n/basictz.cpp | 2 + deps/icu-small/source/i18n/bocsu.cpp | 2 + deps/icu-small/source/i18n/bocsu.h | 2 + deps/icu-small/source/i18n/brktrans.cpp | 2 + deps/icu-small/source/i18n/brktrans.h | 2 + deps/icu-small/source/i18n/buddhcal.cpp | 2 + deps/icu-small/source/i18n/buddhcal.h | 2 + deps/icu-small/source/i18n/calendar.cpp | 33 +- deps/icu-small/source/i18n/casetrn.cpp | 2 + deps/icu-small/source/i18n/casetrn.h | 2 + deps/icu-small/source/i18n/cecal.cpp | 2 + deps/icu-small/source/i18n/cecal.h | 2 + deps/icu-small/source/i18n/chnsecal.cpp | 2 + deps/icu-small/source/i18n/chnsecal.h | 2 + deps/icu-small/source/i18n/choicfmt.cpp | 2 + deps/icu-small/source/i18n/coleitr.cpp | 2 + deps/icu-small/source/i18n/coll.cpp | 2 + deps/icu-small/source/i18n/collation.cpp | 2 + deps/icu-small/source/i18n/collation.h | 2 + .../source/i18n/collationbuilder.cpp | 2 + deps/icu-small/source/i18n/collationbuilder.h | 2 + .../source/i18n/collationcompare.cpp | 2 + deps/icu-small/source/i18n/collationcompare.h | 2 + deps/icu-small/source/i18n/collationdata.cpp | 2 + deps/icu-small/source/i18n/collationdata.h | 2 + .../source/i18n/collationdatabuilder.cpp | 2 + .../source/i18n/collationdatabuilder.h | 2 + .../source/i18n/collationdatareader.cpp | 2 + .../source/i18n/collationdatareader.h | 2 + .../source/i18n/collationdatawriter.cpp | 2 + .../source/i18n/collationdatawriter.h | 2 + .../source/i18n/collationfastlatin.cpp | 2 + .../source/i18n/collationfastlatin.h | 2 + .../source/i18n/collationfastlatinbuilder.cpp | 6 +- .../source/i18n/collationfastlatinbuilder.h | 2 + deps/icu-small/source/i18n/collationfcd.cpp | 106 +- deps/icu-small/source/i18n/collationfcd.h | 2 + .../source/i18n/collationiterator.cpp | 2 + .../icu-small/source/i18n/collationiterator.h | 2 + deps/icu-small/source/i18n/collationkeys.cpp | 2 + deps/icu-small/source/i18n/collationkeys.h | 2 + deps/icu-small/source/i18n/collationroot.cpp | 4 +- deps/icu-small/source/i18n/collationroot.h | 4 +- .../source/i18n/collationrootelements.cpp | 2 + .../source/i18n/collationrootelements.h | 2 + .../source/i18n/collationruleparser.cpp | 4 +- .../source/i18n/collationruleparser.h | 2 + deps/icu-small/source/i18n/collationsets.cpp | 2 + deps/icu-small/source/i18n/collationsets.h | 2 + .../source/i18n/collationsettings.cpp | 2 + .../icu-small/source/i18n/collationsettings.h | 2 + .../source/i18n/collationtailoring.cpp | 2 + .../source/i18n/collationtailoring.h | 2 + .../source/i18n/collationweights.cpp | 2 + deps/icu-small/source/i18n/collationweights.h | 2 + deps/icu-small/source/i18n/collunsafe.h | 2 + .../source/i18n/compactdecimalformat.cpp | 529 +- deps/icu-small/source/i18n/coptccal.cpp | 2 + deps/icu-small/source/i18n/coptccal.h | 2 + deps/icu-small/source/i18n/cpdtrans.cpp | 2 + deps/icu-small/source/i18n/cpdtrans.h | 2 + deps/icu-small/source/i18n/csdetect.cpp | 2 + deps/icu-small/source/i18n/csdetect.h | 2 + deps/icu-small/source/i18n/csmatch.cpp | 2 + deps/icu-small/source/i18n/csmatch.h | 2 + deps/icu-small/source/i18n/csr2022.cpp | 2 + deps/icu-small/source/i18n/csr2022.h | 2 + deps/icu-small/source/i18n/csrecog.cpp | 2 + deps/icu-small/source/i18n/csrecog.h | 2 + deps/icu-small/source/i18n/csrmbcs.cpp | 2 + deps/icu-small/source/i18n/csrmbcs.h | 2 + deps/icu-small/source/i18n/csrsbcs.cpp | 2 + deps/icu-small/source/i18n/csrsbcs.h | 2 + deps/icu-small/source/i18n/csrucode.cpp | 2 + deps/icu-small/source/i18n/csrucode.h | 2 + deps/icu-small/source/i18n/csrutf8.cpp | 2 + deps/icu-small/source/i18n/csrutf8.h | 2 + deps/icu-small/source/i18n/curramt.cpp | 2 + deps/icu-small/source/i18n/currfmt.cpp | 2 + deps/icu-small/source/i18n/currfmt.h | 2 + deps/icu-small/source/i18n/currpinf.cpp | 2 + deps/icu-small/source/i18n/currunit.cpp | 2 + deps/icu-small/source/i18n/dangical.cpp | 2 + deps/icu-small/source/i18n/dangical.h | 2 + deps/icu-small/source/i18n/datefmt.cpp | 4 +- deps/icu-small/source/i18n/dayperiodrules.cpp | 209 +- deps/icu-small/source/i18n/dayperiodrules.h | 4 +- deps/icu-small/source/i18n/dcfmtimp.h | 2 + deps/icu-small/source/i18n/dcfmtsym.cpp | 371 +- deps/icu-small/source/i18n/decContext.c | 2 + deps/icu-small/source/i18n/decContext.h | 2 + deps/icu-small/source/i18n/decNumber.c | 2 + deps/icu-small/source/i18n/decNumber.h | 2 + deps/icu-small/source/i18n/decNumberLocal.h | 2 + deps/icu-small/source/i18n/decfmtst.cpp | 2 + deps/icu-small/source/i18n/decfmtst.h | 2 + .../source/i18n/decimalformatpattern.cpp | 2 + .../source/i18n/decimalformatpattern.h | 6 +- .../source/i18n/decimalformatpatternimpl.h | 2 + deps/icu-small/source/i18n/decimfmt.cpp | 46 +- deps/icu-small/source/i18n/decimfmtimpl.cpp | 12 +- deps/icu-small/source/i18n/decimfmtimpl.h | 4 +- deps/icu-small/source/i18n/digitaffix.cpp | 2 + deps/icu-small/source/i18n/digitaffix.h | 2 + .../source/i18n/digitaffixesandpadding.cpp | 2 + .../source/i18n/digitaffixesandpadding.h | 2 + deps/icu-small/source/i18n/digitformatter.cpp | 2 + deps/icu-small/source/i18n/digitformatter.h | 2 + deps/icu-small/source/i18n/digitgrouping.cpp | 2 + deps/icu-small/source/i18n/digitgrouping.h | 2 + deps/icu-small/source/i18n/digitinterval.cpp | 2 + deps/icu-small/source/i18n/digitinterval.h | 2 + deps/icu-small/source/i18n/digitlst.cpp | 126 +- deps/icu-small/source/i18n/digitlst.h | 7 +- deps/icu-small/source/i18n/dt_impl.h | 92 + deps/icu-small/source/i18n/dtfmtsym.cpp | 1186 ++-- deps/icu-small/source/i18n/dtitv_impl.h | 2 + deps/icu-small/source/i18n/dtitvfmt.cpp | 47 +- deps/icu-small/source/i18n/dtitvinf.cpp | 237 +- deps/icu-small/source/i18n/dtptngen.cpp | 816 +-- deps/icu-small/source/i18n/dtptngen_impl.h | 53 +- deps/icu-small/source/i18n/dtrule.cpp | 2 + deps/icu-small/source/i18n/esctrn.cpp | 2 + deps/icu-small/source/i18n/esctrn.h | 2 + deps/icu-small/source/i18n/ethpccal.cpp | 2 + deps/icu-small/source/i18n/ethpccal.h | 2 + deps/icu-small/source/i18n/fmtable.cpp | 6 +- deps/icu-small/source/i18n/fmtable_cnv.cpp | 2 + deps/icu-small/source/i18n/fmtableimp.h | 2 + deps/icu-small/source/i18n/format.cpp | 2 + deps/icu-small/source/i18n/fphdlimp.cpp | 2 + deps/icu-small/source/i18n/fphdlimp.h | 2 + deps/icu-small/source/i18n/fpositer.cpp | 7 +- deps/icu-small/source/i18n/funcrepl.cpp | 2 + deps/icu-small/source/i18n/funcrepl.h | 2 + deps/icu-small/source/i18n/gender.cpp | 2 + deps/icu-small/source/i18n/gregocal.cpp | 2 + deps/icu-small/source/i18n/gregoimp.cpp | 171 +- deps/icu-small/source/i18n/gregoimp.h | 67 +- deps/icu-small/source/i18n/hebrwcal.cpp | 2 + deps/icu-small/source/i18n/hebrwcal.h | 2 + deps/icu-small/source/i18n/i18n.rc | 2 + .../icu-small/source/i18n/identifier_info.cpp | 310 - deps/icu-small/source/i18n/identifier_info.h | 189 - deps/icu-small/source/i18n/indiancal.cpp | 2 + deps/icu-small/source/i18n/indiancal.h | 2 + deps/icu-small/source/i18n/inputext.cpp | 2 + deps/icu-small/source/i18n/inputext.h | 2 + deps/icu-small/source/i18n/islamcal.cpp | 4 +- deps/icu-small/source/i18n/islamcal.h | 4 +- deps/icu-small/source/i18n/japancal.cpp | 2 + deps/icu-small/source/i18n/japancal.h | 2 + deps/icu-small/source/i18n/measfmt.cpp | 254 +- deps/icu-small/source/i18n/measunit.cpp | 301 +- deps/icu-small/source/i18n/measure.cpp | 2 + deps/icu-small/source/i18n/msgfmt.cpp | 2 + deps/icu-small/source/i18n/msgfmt_impl.h | 2 + deps/icu-small/source/i18n/name2uni.cpp | 2 + deps/icu-small/source/i18n/name2uni.h | 2 + deps/icu-small/source/i18n/nfrlist.h | 2 + deps/icu-small/source/i18n/nfrs.cpp | 2 + deps/icu-small/source/i18n/nfrs.h | 2 + deps/icu-small/source/i18n/nfrule.cpp | 2 + deps/icu-small/source/i18n/nfrule.h | 2 + deps/icu-small/source/i18n/nfsubs.cpp | 2 + deps/icu-small/source/i18n/nfsubs.h | 2 + deps/icu-small/source/i18n/nortrans.cpp | 2 + deps/icu-small/source/i18n/nortrans.h | 2 + deps/icu-small/source/i18n/nultrans.cpp | 2 + deps/icu-small/source/i18n/nultrans.h | 2 + deps/icu-small/source/i18n/numfmt.cpp | 10 +- deps/icu-small/source/i18n/numsys.cpp | 2 + deps/icu-small/source/i18n/numsys_impl.h | 2 + deps/icu-small/source/i18n/olsontz.cpp | 2 + deps/icu-small/source/i18n/olsontz.h | 2 + deps/icu-small/source/i18n/persncal.cpp | 2 + deps/icu-small/source/i18n/persncal.h | 2 + deps/icu-small/source/i18n/pluralaffix.cpp | 2 + deps/icu-small/source/i18n/pluralaffix.h | 2 + deps/icu-small/source/i18n/plurfmt.cpp | 6 +- deps/icu-small/source/i18n/plurrule.cpp | 2 + deps/icu-small/source/i18n/plurrule_impl.h | 2 + deps/icu-small/source/i18n/precision.cpp | 2 + deps/icu-small/source/i18n/precision.h | 2 + deps/icu-small/source/i18n/quant.cpp | 2 + deps/icu-small/source/i18n/quant.h | 2 + .../source/i18n/quantityformatter.cpp | 2 + .../icu-small/source/i18n/quantityformatter.h | 2 + deps/icu-small/source/i18n/rbnf.cpp | 2 + deps/icu-small/source/i18n/rbt.cpp | 2 + deps/icu-small/source/i18n/rbt.h | 2 + deps/icu-small/source/i18n/rbt_data.cpp | 2 + deps/icu-small/source/i18n/rbt_data.h | 2 + deps/icu-small/source/i18n/rbt_pars.cpp | 2 + deps/icu-small/source/i18n/rbt_pars.h | 2 + deps/icu-small/source/i18n/rbt_rule.cpp | 4 +- deps/icu-small/source/i18n/rbt_rule.h | 2 + deps/icu-small/source/i18n/rbt_set.cpp | 2 + deps/icu-small/source/i18n/rbt_set.h | 2 + deps/icu-small/source/i18n/rbtz.cpp | 2 + deps/icu-small/source/i18n/regexcmp.cpp | 8 +- deps/icu-small/source/i18n/regexcmp.h | 2 + deps/icu-small/source/i18n/regexcst.h | 2 + deps/icu-small/source/i18n/regexcst.pl | 2 + deps/icu-small/source/i18n/regeximp.cpp | 2 + deps/icu-small/source/i18n/regeximp.h | 2 + deps/icu-small/source/i18n/regexst.cpp | 2 + deps/icu-small/source/i18n/regexst.h | 2 + deps/icu-small/source/i18n/regextxt.cpp | 2 + deps/icu-small/source/i18n/regextxt.h | 2 + deps/icu-small/source/i18n/region.cpp | 13 +- deps/icu-small/source/i18n/region_impl.h | 2 + deps/icu-small/source/i18n/reldatefmt.cpp | 371 +- deps/icu-small/source/i18n/reldtfmt.cpp | 199 +- deps/icu-small/source/i18n/reldtfmt.h | 9 +- deps/icu-small/source/i18n/rematch.cpp | 2 + deps/icu-small/source/i18n/remtrans.cpp | 2 + deps/icu-small/source/i18n/remtrans.h | 2 + deps/icu-small/source/i18n/repattrn.cpp | 2 + .../source/i18n/rulebasedcollator.cpp | 4 +- .../source/i18n/scientificnumberformatter.cpp | 2 + deps/icu-small/source/i18n/scriptset.cpp | 46 + deps/icu-small/source/i18n/scriptset.h | 8 + deps/icu-small/source/i18n/search.cpp | 2 + deps/icu-small/source/i18n/selfmt.cpp | 2 + deps/icu-small/source/i18n/selfmtimpl.h | 2 + .../source/i18n/sharedbreakiterator.cpp | 2 + .../source/i18n/sharedbreakiterator.h | 2 + deps/icu-small/source/i18n/sharedcalendar.h | 2 + .../source/i18n/shareddateformatsymbols.h | 2 + .../source/i18n/sharednumberformat.h | 2 + .../icu-small/source/i18n/sharedpluralrules.h | 2 + .../source/i18n/significantdigitinterval.h | 2 + deps/icu-small/source/i18n/simpletz.cpp | 2 + .../source/i18n/smallintformatter.cpp | 2 + .../icu-small/source/i18n/smallintformatter.h | 2 + deps/icu-small/source/i18n/smpdtfmt.cpp | 101 +- deps/icu-small/source/i18n/smpdtfst.cpp | 2 + deps/icu-small/source/i18n/smpdtfst.h | 2 + deps/icu-small/source/i18n/sortkey.cpp | 2 + deps/icu-small/source/i18n/standardplural.cpp | 2 + deps/icu-small/source/i18n/standardplural.h | 2 + deps/icu-small/source/i18n/strmatch.cpp | 2 + deps/icu-small/source/i18n/strmatch.h | 2 + deps/icu-small/source/i18n/strrepl.cpp | 2 + deps/icu-small/source/i18n/strrepl.h | 2 + deps/icu-small/source/i18n/stsearch.cpp | 2 + deps/icu-small/source/i18n/taiwncal.cpp | 2 + deps/icu-small/source/i18n/taiwncal.h | 2 + deps/icu-small/source/i18n/timezone.cpp | 6 +- deps/icu-small/source/i18n/titletrn.cpp | 2 + deps/icu-small/source/i18n/titletrn.h | 2 + deps/icu-small/source/i18n/tmunit.cpp | 2 + deps/icu-small/source/i18n/tmutamt.cpp | 2 + deps/icu-small/source/i18n/tmutfmt.cpp | 201 +- deps/icu-small/source/i18n/tolowtrn.cpp | 2 + deps/icu-small/source/i18n/tolowtrn.h | 2 + deps/icu-small/source/i18n/toupptrn.cpp | 2 + deps/icu-small/source/i18n/toupptrn.h | 2 + deps/icu-small/source/i18n/translit.cpp | 2 + deps/icu-small/source/i18n/transreg.cpp | 2 + deps/icu-small/source/i18n/transreg.h | 2 + deps/icu-small/source/i18n/tridpars.cpp | 4 +- deps/icu-small/source/i18n/tridpars.h | 4 +- deps/icu-small/source/i18n/tzfmt.cpp | 2 + deps/icu-small/source/i18n/tzgnames.cpp | 2 + deps/icu-small/source/i18n/tzgnames.h | 2 + deps/icu-small/source/i18n/tznames.cpp | 38 + deps/icu-small/source/i18n/tznames_impl.cpp | 1029 +-- deps/icu-small/source/i18n/tznames_impl.h | 25 +- deps/icu-small/source/i18n/tzrule.cpp | 2 + deps/icu-small/source/i18n/tztrans.cpp | 2 + deps/icu-small/source/i18n/ucal.cpp | 2 + deps/icu-small/source/i18n/ucln_in.cpp | 4 +- deps/icu-small/source/i18n/ucln_in.h | 5 +- deps/icu-small/source/i18n/ucol.cpp | 2 + deps/icu-small/source/i18n/ucol_imp.h | 4 +- deps/icu-small/source/i18n/ucol_res.cpp | 178 +- deps/icu-small/source/i18n/ucol_sit.cpp | 2 + deps/icu-small/source/i18n/ucoleitr.cpp | 6 +- deps/icu-small/source/i18n/ucsdet.cpp | 2 + deps/icu-small/source/i18n/udat.cpp | 2 + .../source/i18n/udateintervalformat.cpp | 2 + deps/icu-small/source/i18n/udatpg.cpp | 2 + deps/icu-small/source/i18n/ufieldpositer.cpp | 2 + .../source/i18n/uitercollationiterator.cpp | 2 + .../source/i18n/uitercollationiterator.h | 2 + deps/icu-small/source/i18n/ulocdata.c | 2 + deps/icu-small/source/i18n/umsg.cpp | 4 +- deps/icu-small/source/i18n/umsg_imp.h | 2 + deps/icu-small/source/i18n/unesctrn.cpp | 4 +- deps/icu-small/source/i18n/unesctrn.h | 2 + deps/icu-small/source/i18n/uni2name.cpp | 2 + deps/icu-small/source/i18n/uni2name.h | 2 + .../source/i18n/unicode/alphaindex.h | 2 + deps/icu-small/source/i18n/unicode/basictz.h | 2 + deps/icu-small/source/i18n/unicode/calendar.h | 2 + deps/icu-small/source/i18n/unicode/choicfmt.h | 2 + deps/icu-small/source/i18n/unicode/coleitr.h | 2 + deps/icu-small/source/i18n/unicode/coll.h | 2 + .../i18n/unicode/compactdecimalformat.h | 7 +- deps/icu-small/source/i18n/unicode/curramt.h | 2 + deps/icu-small/source/i18n/unicode/currpinf.h | 2 + deps/icu-small/source/i18n/unicode/currunit.h | 2 + deps/icu-small/source/i18n/unicode/datefmt.h | 2 + deps/icu-small/source/i18n/unicode/dcfmtsym.h | 2 + deps/icu-small/source/i18n/unicode/decimfmt.h | 14 +- deps/icu-small/source/i18n/unicode/dtfmtsym.h | 40 +- deps/icu-small/source/i18n/unicode/dtitvfmt.h | 2 + deps/icu-small/source/i18n/unicode/dtitvinf.h | 11 +- deps/icu-small/source/i18n/unicode/dtptngen.h | 22 +- deps/icu-small/source/i18n/unicode/dtrule.h | 2 + deps/icu-small/source/i18n/unicode/fieldpos.h | 7 +- deps/icu-small/source/i18n/unicode/fmtable.h | 6 +- deps/icu-small/source/i18n/unicode/format.h | 2 + deps/icu-small/source/i18n/unicode/fpositer.h | 2 + deps/icu-small/source/i18n/unicode/gender.h | 2 + deps/icu-small/source/i18n/unicode/gregocal.h | 2 + deps/icu-small/source/i18n/unicode/measfmt.h | 23 +- deps/icu-small/source/i18n/unicode/measunit.h | 74 +- deps/icu-small/source/i18n/unicode/measure.h | 2 + deps/icu-small/source/i18n/unicode/msgfmt.h | 2 + deps/icu-small/source/i18n/unicode/numfmt.h | 14 +- deps/icu-small/source/i18n/unicode/numsys.h | 2 + deps/icu-small/source/i18n/unicode/plurfmt.h | 2 + deps/icu-small/source/i18n/unicode/plurrule.h | 2 + deps/icu-small/source/i18n/unicode/rbnf.h | 8 + deps/icu-small/source/i18n/unicode/rbtz.h | 2 + deps/icu-small/source/i18n/unicode/regex.h | 2 + deps/icu-small/source/i18n/unicode/region.h | 4 +- .../source/i18n/unicode/reldatefmt.h | 28 +- .../i18n/unicode/scientificnumberformatter.h | 2 + deps/icu-small/source/i18n/unicode/search.h | 2 + deps/icu-small/source/i18n/unicode/selfmt.h | 2 + deps/icu-small/source/i18n/unicode/simpletz.h | 2 + deps/icu-small/source/i18n/unicode/smpdtfmt.h | 10 +- deps/icu-small/source/i18n/unicode/sortkey.h | 2 + deps/icu-small/source/i18n/unicode/stsearch.h | 2 + deps/icu-small/source/i18n/unicode/tblcoll.h | 4 +- deps/icu-small/source/i18n/unicode/timezone.h | 2 + deps/icu-small/source/i18n/unicode/tmunit.h | 8 + deps/icu-small/source/i18n/unicode/tmutamt.h | 2 + deps/icu-small/source/i18n/unicode/tmutfmt.h | 5 + deps/icu-small/source/i18n/unicode/translit.h | 2 + deps/icu-small/source/i18n/unicode/tzfmt.h | 2 + deps/icu-small/source/i18n/unicode/tznames.h | 18 +- deps/icu-small/source/i18n/unicode/tzrule.h | 2 + deps/icu-small/source/i18n/unicode/tztrans.h | 2 + deps/icu-small/source/i18n/unicode/ucal.h | 12 +- deps/icu-small/source/i18n/unicode/ucol.h | 39 +- deps/icu-small/source/i18n/unicode/ucoleitr.h | 2 + deps/icu-small/source/i18n/unicode/ucsdet.h | 2 + deps/icu-small/source/i18n/unicode/udat.h | 24 +- .../source/i18n/unicode/udateintervalformat.h | 2 + deps/icu-small/source/i18n/unicode/udatpg.h | 17 +- .../source/i18n/unicode/ufieldpositer.h | 6 +- .../source/i18n/unicode/uformattable.h | 10 +- deps/icu-small/source/i18n/unicode/ugender.h | 2 + deps/icu-small/source/i18n/unicode/ulocdata.h | 22 +- deps/icu-small/source/i18n/unicode/umsg.h | 2 + deps/icu-small/source/i18n/unicode/unirepl.h | 2 + deps/icu-small/source/i18n/unicode/unum.h | 38 +- deps/icu-small/source/i18n/unicode/unumsys.h | 2 + .../source/i18n/unicode/upluralrules.h | 8 +- deps/icu-small/source/i18n/unicode/uregex.h | 2 + deps/icu-small/source/i18n/unicode/uregion.h | 8 +- .../source/i18n/unicode/ureldatefmt.h | 20 +- deps/icu-small/source/i18n/unicode/usearch.h | 14 +- deps/icu-small/source/i18n/unicode/uspoof.h | 1135 +++- deps/icu-small/source/i18n/unicode/utmscale.h | 2 + deps/icu-small/source/i18n/unicode/utrans.h | 2 + deps/icu-small/source/i18n/unicode/vtzone.h | 2 + deps/icu-small/source/i18n/unum.cpp | 2 + deps/icu-small/source/i18n/unumsys.cpp | 2 + deps/icu-small/source/i18n/upluralrules.cpp | 2 + deps/icu-small/source/i18n/uregex.cpp | 2 + deps/icu-small/source/i18n/uregexc.cpp | 2 + deps/icu-small/source/i18n/uregion.cpp | 2 + deps/icu-small/source/i18n/usearch.cpp | 8 +- deps/icu-small/source/i18n/uspoof.cpp | 538 +- deps/icu-small/source/i18n/uspoof_build.cpp | 6 +- deps/icu-small/source/i18n/uspoof_conf.cpp | 254 +- deps/icu-small/source/i18n/uspoof_conf.h | 14 +- deps/icu-small/source/i18n/uspoof_impl.cpp | 624 +- deps/icu-small/source/i18n/uspoof_impl.h | 215 +- deps/icu-small/source/i18n/uspoof_wsconf.cpp | 435 -- deps/icu-small/source/i18n/uspoof_wsconf.h | 70 - deps/icu-small/source/i18n/usrchimp.h | 2 + .../source/i18n/utf16collationiterator.cpp | 2 + .../source/i18n/utf16collationiterator.h | 2 + .../source/i18n/utf8collationiterator.cpp | 2 + .../source/i18n/utf8collationiterator.h | 2 + deps/icu-small/source/i18n/utmscale.c | 2 + deps/icu-small/source/i18n/utrans.cpp | 2 + deps/icu-small/source/i18n/valueformatter.cpp | 2 + deps/icu-small/source/i18n/valueformatter.h | 2 + deps/icu-small/source/i18n/visibledigits.cpp | 23 +- deps/icu-small/source/i18n/visibledigits.h | 2 + deps/icu-small/source/i18n/vtzone.cpp | 2 + deps/icu-small/source/i18n/vzone.cpp | 2 + deps/icu-small/source/i18n/vzone.h | 2 + deps/icu-small/source/i18n/windtfmt.cpp | 18 +- deps/icu-small/source/i18n/windtfmt.h | 2 + deps/icu-small/source/i18n/winnmfmt.cpp | 22 +- deps/icu-small/source/i18n/winnmfmt.h | 2 + deps/icu-small/source/i18n/wintzimpl.cpp | 2 + deps/icu-small/source/i18n/wintzimpl.h | 2 + deps/icu-small/source/i18n/zonemeta.cpp | 2 + deps/icu-small/source/i18n/zonemeta.h | 2 + deps/icu-small/source/i18n/zrule.cpp | 2 + deps/icu-small/source/i18n/zrule.h | 2 + deps/icu-small/source/i18n/ztrans.cpp | 2 + deps/icu-small/source/i18n/ztrans.h | 2 + deps/icu-small/source/io/io.rc | 2 + deps/icu-small/source/io/locbund.cpp | 2 + deps/icu-small/source/io/locbund.h | 2 + deps/icu-small/source/io/sprintf.c | 4 +- deps/icu-small/source/io/sscanf.c | 4 +- deps/icu-small/source/io/ucln_io.cpp | 4 +- deps/icu-small/source/io/ucln_io.h | 2 + deps/icu-small/source/io/ufile.c | 2 + deps/icu-small/source/io/ufile.h | 2 + deps/icu-small/source/io/ufmt_cmn.c | 2 + deps/icu-small/source/io/ufmt_cmn.h | 2 + deps/icu-small/source/io/unicode/ustdio.h | 2 + deps/icu-small/source/io/unicode/ustream.h | 2 + deps/icu-small/source/io/uprintf.cpp | 2 + deps/icu-small/source/io/uprintf.h | 2 + deps/icu-small/source/io/uprntf_p.c | 2 + deps/icu-small/source/io/uscanf.c | 2 + deps/icu-small/source/io/uscanf.h | 2 + deps/icu-small/source/io/uscanf_p.c | 2 + deps/icu-small/source/io/ustdio.c | 4 +- deps/icu-small/source/io/ustream.cpp | 2 + deps/icu-small/source/stubdata/stubdata.c | 2 + .../source/tools/genccode/genccode.c | 2 + deps/icu-small/source/tools/gencmn/gencmn.c | 2 + deps/icu-small/source/tools/genrb/derb.cpp | 2 + deps/icu-small/source/tools/genrb/errmsg.c | 2 + deps/icu-small/source/tools/genrb/errmsg.h | 2 + deps/icu-small/source/tools/genrb/genrb.cpp | 2 + deps/icu-small/source/tools/genrb/genrb.h | 2 + deps/icu-small/source/tools/genrb/parse.cpp | 2 + deps/icu-small/source/tools/genrb/parse.h | 2 + .../icu-small/source/tools/genrb/prscmnts.cpp | 2 + deps/icu-small/source/tools/genrb/prscmnts.h | 2 + deps/icu-small/source/tools/genrb/rbutil.c | 2 + deps/icu-small/source/tools/genrb/rbutil.h | 2 + deps/icu-small/source/tools/genrb/read.c | 2 + deps/icu-small/source/tools/genrb/read.h | 2 + deps/icu-small/source/tools/genrb/reslist.cpp | 2 + deps/icu-small/source/tools/genrb/reslist.h | 2 + deps/icu-small/source/tools/genrb/rle.c | 2 + deps/icu-small/source/tools/genrb/rle.h | 2 + deps/icu-small/source/tools/genrb/ustr.c | 4 +- deps/icu-small/source/tools/genrb/ustr.h | 2 + deps/icu-small/source/tools/genrb/wrtjava.cpp | 2 + deps/icu-small/source/tools/genrb/wrtxml.cpp | 2 + deps/icu-small/source/tools/icupkg/icupkg.cpp | 2 + .../source/tools/pkgdata/pkgdata.cpp | 2 + .../icu-small/source/tools/pkgdata/pkgtypes.c | 2 + .../icu-small/source/tools/pkgdata/pkgtypes.h | 2 + .../source/tools/toolutil/collationinfo.cpp | 2 + .../source/tools/toolutil/collationinfo.h | 2 + .../source/tools/toolutil/dbgutil.cpp | 2 + .../icu-small/source/tools/toolutil/dbgutil.h | 2 + .../source/tools/toolutil/denseranges.cpp | 2 + .../source/tools/toolutil/denseranges.h | 2 + .../source/tools/toolutil/filestrm.c | 2 + .../source/tools/toolutil/filestrm.h | 2 + .../source/tools/toolutil/filetools.cpp | 26 +- .../source/tools/toolutil/filetools.h | 2 + .../source/tools/toolutil/flagparser.c | 4 +- .../source/tools/toolutil/flagparser.h | 2 + .../source/tools/toolutil/package.cpp | 4 +- .../icu-small/source/tools/toolutil/package.h | 2 + .../source/tools/toolutil/pkg_genc.c | 2 + .../source/tools/toolutil/pkg_genc.h | 2 + .../source/tools/toolutil/pkg_gencmn.c | 2 + .../source/tools/toolutil/pkg_gencmn.h | 2 + .../source/tools/toolutil/pkg_icu.cpp | 2 + .../icu-small/source/tools/toolutil/pkg_icu.h | 2 + .../icu-small/source/tools/toolutil/pkg_imp.h | 2 + .../source/tools/toolutil/pkgitems.cpp | 2 + .../icu-small/source/tools/toolutil/ppucd.cpp | 2 + deps/icu-small/source/tools/toolutil/ppucd.h | 2 + .../source/tools/toolutil/swapimpl.cpp | 4 +- .../source/tools/toolutil/swapimpl.h | 2 + .../source/tools/toolutil/toolutil.cpp | 4 +- .../source/tools/toolutil/toolutil.h | 2 + .../icu-small/source/tools/toolutil/ucbuf.cpp | 2 + deps/icu-small/source/tools/toolutil/ucbuf.h | 2 + .../source/tools/toolutil/ucln_tu.cpp | 2 + deps/icu-small/source/tools/toolutil/ucm.c | 6 +- deps/icu-small/source/tools/toolutil/ucm.h | 2 + .../source/tools/toolutil/ucmstate.c | 2 + .../source/tools/toolutil/udbgutil.cpp | 8 +- .../source/tools/toolutil/udbgutil.h | 2 + .../source/tools/toolutil/unewdata.c | 6 +- .../source/tools/toolutil/unewdata.h | 2 + .../source/tools/toolutil/uoptions.c | 2 + .../source/tools/toolutil/uoptions.h | 2 + deps/icu-small/source/tools/toolutil/uparse.c | 2 + deps/icu-small/source/tools/toolutil/uparse.h | 2 + .../source/tools/toolutil/writesrc.c | 34 +- .../source/tools/toolutil/writesrc.h | 2 + .../source/tools/toolutil/xmlparser.cpp | 2 + .../source/tools/toolutil/xmlparser.h | 2 + 897 files changed, 17113 insertions(+), 12491 deletions(-) delete mode 100644 deps/icu-small/license.html mode change 100644 => 100755 deps/icu-small/source/common/rbbicst.pl create mode 100644 deps/icu-small/source/common/ubiditransform.c create mode 100644 deps/icu-small/source/common/unicode/ubiditransform.h delete mode 100644 deps/icu-small/source/data/in/icudt57l.dat create mode 100644 deps/icu-small/source/data/in/icudt58l.dat create mode 100644 deps/icu-small/source/i18n/dt_impl.h delete mode 100644 deps/icu-small/source/i18n/identifier_info.cpp delete mode 100644 deps/icu-small/source/i18n/identifier_info.h mode change 100644 => 100755 deps/icu-small/source/i18n/regexcst.pl mode change 100644 => 100755 deps/icu-small/source/i18n/unicode/selfmt.h delete mode 100644 deps/icu-small/source/i18n/uspoof_wsconf.cpp delete mode 100644 deps/icu-small/source/i18n/uspoof_wsconf.h diff --git a/deps/icu-small/LICENSE b/deps/icu-small/LICENSE index 81662a05a769c3..90be7cdf052615 100644 --- a/deps/icu-small/LICENSE +++ b/deps/icu-small/LICENSE @@ -1,9 +1,50 @@ -ICU License - ICU 1.8.1 and later +COPYRIGHT AND PERMISSION NOTICE (ICU 58 and later) + +Copyright © 1991-2016 Unicode, Inc. All rights reserved. +Distributed under the Terms of Use in http://www.unicode.org/copyright.html + +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Unicode data files and any associated documentation +(the "Data Files") or Unicode 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. + +--------------------- + +Third-Party Software Licenses + +This section contains third-party software notices and/or additional +terms for licensed third-party software components included within ICU +libraries. + +1. ICU License - ICU 1.8.1 to ICU 57.1 COPYRIGHT AND PERMISSION NOTICE Copyright (c) 1995-2016 International Business Machines Corporation and others - All rights reserved. Permission is hereby granted, free of charge, to any person obtaining @@ -31,58 +72,9 @@ shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. - All trademarks and registered trademarks mentioned herein are the property of their respective owners. ---------------------- - -Third-Party Software Licenses - -This section contains third-party software notices and/or additional -terms for licensed third-party software components included within ICU -libraries. - -1. Unicode Data Files and Software - -COPYRIGHT AND PERMISSION NOTICE - -Copyright © 1991-2016 Unicode, Inc. All rights reserved. -Distributed under the Terms of Use in -http://www.unicode.org/copyright.html. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Unicode data files and any associated documentation -(the "Data Files") or Unicode 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 -(a) this copyright and permission notice appear with all copies -of the Data Files or Software, -(b) this copyright and permission notice appear in associated -documentation, and -(c) there is clear notice in each modified Data File or in the Software -as well as in the documentation associated with the Data File(s) or -Software that the data or software has been modified. - -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. - 2. Chinese/Japanese Word Break Dictionary Data (cjdict.txt) # The Google Chrome software developed by Google is licensed under diff --git a/deps/icu-small/README-SMALL-ICU.txt b/deps/icu-small/README-SMALL-ICU.txt index 3f614659fbf9dd..7b45134f658c39 100644 --- a/deps/icu-small/README-SMALL-ICU.txt +++ b/deps/icu-small/README-SMALL-ICU.txt @@ -1,8 +1,8 @@ Small ICU sources - auto generated by shrink-icu-src.py This directory contains the ICU subset used by --with-intl=small-icu (the default) -It is a strict subset of ICU 57 source files with the following exception(s): -* deps/icu-small/source/data/in/icudt57l.dat : Reduced-size data file +It is a strict subset of ICU 58 source files with the following exception(s): +* deps/icu-small/source/data/in/icudt58l.dat : Reduced-size data file To rebuild this directory, see ../../tools/icu/README.md diff --git a/deps/icu-small/license.html b/deps/icu-small/license.html deleted file mode 100644 index 3430616d661af7..00000000000000 --- a/deps/icu-small/license.html +++ /dev/null @@ -1,18 +0,0 @@ - - - - -ICU License - moved to LICENSE - - - -

- The ICU license is now in plain text format, see LICENSE. -Update links and software appropriately. -

- - Copyright (c) 1995-2016 International Business Machines Corporation and others - - - diff --git a/deps/icu-small/source/common/appendable.cpp b/deps/icu-small/source/common/appendable.cpp index e46d0790181004..1a597b5de52e58 100644 --- a/deps/icu-small/source/common/appendable.cpp +++ b/deps/icu-small/source/common/appendable.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines diff --git a/deps/icu-small/source/common/bmpset.cpp b/deps/icu-small/source/common/bmpset.cpp index 7cd32eb99c9e33..ebcd0d23bf9f59 100644 --- a/deps/icu-small/source/common/bmpset.cpp +++ b/deps/icu-small/source/common/bmpset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/bmpset.h b/deps/icu-small/source/common/bmpset.h index d9e08eaa66fe10..8975cd61d5cc21 100644 --- a/deps/icu-small/source/common/bmpset.h +++ b/deps/icu-small/source/common/bmpset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/brkeng.cpp b/deps/icu-small/source/common/brkeng.cpp index c40bcdb0b581fe..96a7dc9348d810 100644 --- a/deps/icu-small/source/common/brkeng.cpp +++ b/deps/icu-small/source/common/brkeng.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************************ * Copyright (C) 2006-2016, International Business Machines Corporation diff --git a/deps/icu-small/source/common/brkeng.h b/deps/icu-small/source/common/brkeng.h index 932b8db2b5f8c5..73fdb81dffaaaa 100644 --- a/deps/icu-small/source/common/brkeng.h +++ b/deps/icu-small/source/common/brkeng.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ************************************************************************************ * Copyright (C) 2006-2012, International Business Machines Corporation and others. * diff --git a/deps/icu-small/source/common/brkiter.cpp b/deps/icu-small/source/common/brkiter.cpp index a05a0e4c20baa8..b768c20f0bac10 100644 --- a/deps/icu-small/source/common/brkiter.cpp +++ b/deps/icu-small/source/common/brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and @@ -418,6 +420,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) break; case UBRK_SENTENCE: result = BreakIterator::buildInstance(loc, "sentence", kind, status); +#if !UCONFIG_NO_FILTERED_BREAK_ITERATION { char ssKeyValue[kKeyValueLenMax] = {0}; UErrorCode kvStatus = U_ZERO_ERROR; @@ -430,6 +433,7 @@ BreakIterator::makeInstance(const Locale& loc, int32_t kind, UErrorCode& status) } } } +#endif break; case UBRK_TITLE: result = BreakIterator::buildInstance(loc, "title", kind, status); diff --git a/deps/icu-small/source/common/bytestream.cpp b/deps/icu-small/source/common/bytestream.cpp index ebd4148e02f2d1..5a5c2e4410e936 100644 --- a/deps/icu-small/source/common/bytestream.cpp +++ b/deps/icu-small/source/common/bytestream.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2011, International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/bytestrie.cpp b/deps/icu-small/source/common/bytestrie.cpp index 8a1ab4c62bbc17..093cd8ddb12106 100644 --- a/deps/icu-small/source/common/bytestrie.cpp +++ b/deps/icu-small/source/common/bytestrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/bytestriebuilder.cpp b/deps/icu-small/source/common/bytestriebuilder.cpp index f252e2d41fe5d7..913d85a21217be 100644 --- a/deps/icu-small/source/common/bytestriebuilder.cpp +++ b/deps/icu-small/source/common/bytestriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -35,7 +37,7 @@ class BytesTrieElement : public UMemory { public: // Use compiler's default constructor, initializes nothing. - void setTo(const StringPiece &s, int32_t val, CharString &strings, UErrorCode &errorCode); + void setTo(StringPiece s, int32_t val, CharString &strings, UErrorCode &errorCode); StringPiece getString(const CharString &strings) const { int32_t offset=stringOffset; @@ -86,7 +88,7 @@ class BytesTrieElement : public UMemory { }; void -BytesTrieElement::setTo(const StringPiece &s, int32_t val, +BytesTrieElement::setTo(StringPiece s, int32_t val, CharString &strings, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; @@ -143,7 +145,7 @@ BytesTrieBuilder::~BytesTrieBuilder() { } BytesTrieBuilder & -BytesTrieBuilder::add(const StringPiece &s, int32_t value, UErrorCode &errorCode) { +BytesTrieBuilder::add(StringPiece s, int32_t value, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return *this; } @@ -165,7 +167,7 @@ BytesTrieBuilder::add(const StringPiece &s, int32_t value, UErrorCode &errorCode return *this; // error instead of dereferencing null } if(elementsLength>0) { - uprv_memcpy(newElements, elements, elementsLength*sizeof(BytesTrieElement)); + uprv_memcpy(newElements, elements, (size_t)elementsLength*sizeof(BytesTrieElement)); } delete[] elements; elements=newElements; diff --git a/deps/icu-small/source/common/bytestrieiterator.cpp b/deps/icu-small/source/common/bytestrieiterator.cpp index e50f07c24fee65..4d04247c4933d0 100644 --- a/deps/icu-small/source/common/bytestrieiterator.cpp +++ b/deps/icu-small/source/common/bytestrieiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -139,7 +141,6 @@ BytesTrie::Iterator::next(UErrorCode &errorCode) { } else { pos_=skipValue(pos, node); } - sp_.set(str_->data(), str_->length()); return TRUE; } if(maxLength_>0 && str_->length()==maxLength_) { @@ -167,10 +168,14 @@ BytesTrie::Iterator::next(UErrorCode &errorCode) { } } +StringPiece +BytesTrie::Iterator::getString() const { + return str_ == NULL ? StringPiece() : str_->toStringPiece(); +} + UBool BytesTrie::Iterator::truncateAndStop() { pos_=NULL; - sp_.set(str_->data(), str_->length()); value_=-1; // no real value for str return TRUE; } @@ -199,7 +204,6 @@ BytesTrie::Iterator::branchNext(const uint8_t *pos, int32_t length, UErrorCode & str_->append((char)trieByte, errorCode); if(isFinal) { pos_=NULL; - sp_.set(str_->data(), str_->length()); value_=value; return NULL; } else { diff --git a/deps/icu-small/source/common/caniter.cpp b/deps/icu-small/source/common/caniter.cpp index ac1206df129501..c3af281b82f420 100644 --- a/deps/icu-small/source/common/caniter.cpp +++ b/deps/icu-small/source/common/caniter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 1996-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/chariter.cpp b/deps/icu-small/source/common/chariter.cpp index 2d923ea0a6b5a8..625ac49eaccdb9 100644 --- a/deps/icu-small/source/common/chariter.cpp +++ b/deps/icu-small/source/common/chariter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/charstr.cpp b/deps/icu-small/source/common/charstr.cpp index 1b27c683de2f18..c792181378ec0b 100644 --- a/deps/icu-small/source/common/charstr.cpp +++ b/deps/icu-small/source/common/charstr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines @@ -144,7 +146,7 @@ UBool CharString::ensureCapacity(int32_t capacity, return TRUE; } -CharString &CharString::appendPathPart(const StringPiece &s, UErrorCode &errorCode) { +CharString &CharString::appendPathPart(StringPiece s, UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return *this; } diff --git a/deps/icu-small/source/common/charstr.h b/deps/icu-small/source/common/charstr.h index d2e20c4813ce1d..9758c5c542b3f0 100644 --- a/deps/icu-small/source/common/charstr.h +++ b/deps/icu-small/source/common/charstr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2015, International Business Machines @@ -39,7 +41,7 @@ template class U_COMMON_API MaybeStackArray; class U_COMMON_API CharString : public UMemory { public: CharString() : len(0) { buffer[0]=0; } - CharString(const StringPiece &s, UErrorCode &errorCode) : len(0) { + CharString(StringPiece s, UErrorCode &errorCode) : len(0) { buffer[0]=0; append(s, errorCode); } @@ -76,7 +78,7 @@ class U_COMMON_API CharString : public UMemory { CharString &truncate(int32_t newLength); CharString &append(char c, UErrorCode &errorCode); - CharString &append(const StringPiece &s, UErrorCode &errorCode) { + CharString &append(StringPiece s, UErrorCode &errorCode) { return append(s.data(), s.length(), errorCode); } CharString &append(const CharString &s, UErrorCode &errorCode) { @@ -115,7 +117,7 @@ class U_COMMON_API CharString : public UMemory { * First appends a U_FILE_SEP_CHAR if necessary. * Does nothing if s is empty. */ - CharString &appendPathPart(const StringPiece &s, UErrorCode &errorCode); + CharString &appendPathPart(StringPiece s, UErrorCode &errorCode); /** * Appends a U_FILE_SEP_CHAR if this string is not empty diff --git a/deps/icu-small/source/common/cmemory.c b/deps/icu-small/source/common/cmemory.c index 2b624accc187db..0054e3de8b2466 100644 --- a/deps/icu-small/source/common/cmemory.c +++ b/deps/icu-small/source/common/cmemory.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/cmemory.h b/deps/icu-small/source/common/cmemory.h index 8c62868855a12b..d2e48e5f305fd9 100644 --- a/deps/icu-small/source/common/cmemory.h +++ b/deps/icu-small/source/common/cmemory.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -281,7 +283,7 @@ inline T *LocalMemory::allocateInsteadAndCopy(int32_t newCapacity, int32_t le if(length>newCapacity) { length=newCapacity; } - uprv_memcpy(p, LocalPointerBase::ptr, length*sizeof(T)); + uprv_memcpy(p, LocalPointerBase::ptr, (size_t)length*sizeof(T)); } uprv_free(LocalPointerBase::ptr); LocalPointerBase::ptr=p; @@ -428,7 +430,7 @@ inline T *MaybeStackArray::resize(int32_t newCapacity, int32_t if(length>newCapacity) { length=newCapacity; } - uprv_memcpy(p, ptr, length*sizeof(T)); + uprv_memcpy(p, ptr, (size_t)length*sizeof(T)); } releaseArray(); ptr=p; @@ -459,7 +461,7 @@ inline T *MaybeStackArray::orphanOrClone(int32_t length, int32 if(p==NULL) { return NULL; } - uprv_memcpy(p, ptr, length*sizeof(T)); + uprv_memcpy(p, ptr, (size_t)length*sizeof(T)); } resultCapacity=length; ptr=stackArray; @@ -607,7 +609,7 @@ inline H *MaybeStackHeaderAndArray::resize(int32_t newCapac length=newCapacity; } } - uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T)); + uprv_memcpy(p, ptr, sizeof(H)+(size_t)length*sizeof(T)); releaseMemory(); ptr=p; capacity=newCapacity; @@ -638,7 +640,7 @@ inline H *MaybeStackHeaderAndArray::orphanOrClone(int32_t l if(p==NULL) { return NULL; } - uprv_memcpy(p, ptr, sizeof(H)+length*sizeof(T)); + uprv_memcpy(p, ptr, sizeof(H)+(size_t)length*sizeof(T)); } resultCapacity=length; ptr=&stackHeader; diff --git a/deps/icu-small/source/common/common.rc b/deps/icu-small/source/common/common.rc index b6e405a93aec80..5c723a27c52820 100644 --- a/deps/icu-small/source/common/common.rc +++ b/deps/icu-small/source/common/common.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/cpputils.h b/deps/icu-small/source/common/cpputils.h index b2e0cbc8d61cc7..57af69a7129483 100644 --- a/deps/icu-small/source/common/cpputils.h +++ b/deps/icu-small/source/common/cpputils.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -24,45 +26,45 @@ static inline void uprv_arrayCopy(const double* src, double* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const double* src, int32_t srcStart, double* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int8_t* src, int8_t* dst, int32_t count) - { uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } + { uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int8_t* src, int32_t srcStart, int8_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int16_t* src, int16_t* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int16_t* src, int32_t srcStart, int16_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int32_t* src, int32_t* dst, int32_t count) -{ uprv_memcpy(dst, src, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst, src, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const int32_t* src, int32_t srcStart, int32_t* dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } static inline void uprv_arrayCopy(const UChar *src, int32_t srcStart, UChar *dst, int32_t dstStart, int32_t count) -{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)(count * sizeof(*src))); } +{ uprv_memcpy(dst+dstStart, src+srcStart, (size_t)count * sizeof(*src)); } /** * Copy an array of UnicodeString OBJECTS (not pointers). diff --git a/deps/icu-small/source/common/cstr.cpp b/deps/icu-small/source/common/cstr.cpp index c30719361eacc5..356367e0bcaea3 100644 --- a/deps/icu-small/source/common/cstr.cpp +++ b/deps/icu-small/source/common/cstr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015-2016, International Business Machines @@ -6,22 +8,40 @@ * file name: charstr.cpp */ #include "unicode/utypes.h" +#include "unicode/putil.h" #include "unicode/unistr.h" -#include "charstr.h" #include "cstr.h" +#include "charstr.h" +#include "uinvchar.h" + U_NAMESPACE_BEGIN CStr::CStr(const UnicodeString &in) { UErrorCode status = U_ZERO_ERROR; - int32_t length = in.extract(0, in.length(), NULL, (uint32_t)0); +#if !UCONFIG_NO_CONVERSION || U_CHARSET_IS_UTF8 + int32_t length = in.extract(0, in.length(), static_cast(NULL), static_cast(0)); int32_t resultCapacity = 0; char *buf = s.getAppendBuffer(length, length, resultCapacity, status); if (U_SUCCESS(status)) { in.extract(0, in.length(), buf, resultCapacity); s.append(buf, length, status); } +#else + // No conversion available. Convert any invariant characters; substitute '?' for the rest. + // Note: can't just call u_UCharsToChars() or CharString.appendInvariantChars() on the + // whole string because they require that the entire input be invariant. + char buf[2]; + for (int i=0; ifirst()); + // Don't suppress a break opportunity at the beginning of text. + return fDelegate->first(); } int32_t @@ -415,7 +418,9 @@ SimpleFilteredSentenceBreakIterator::previous(void) { } UBool SimpleFilteredSentenceBreakIterator::isBoundary(int32_t offset) { - if(!fDelegate->isBoundary(offset)) return false; // no break to suppress + if (!fDelegate->isBoundary(offset)) return false; // no break to suppress + + if (fData->fBackwardsTrie.isNull()) return true; // no data = no suppressions UErrorCode status = U_ZERO_ERROR; resetState(status); @@ -476,13 +481,42 @@ SimpleFilteredBreakIteratorBuilder::SimpleFilteredBreakIteratorBuilder(const Loc : fSet(status) { if(U_SUCCESS(status)) { - LocalUResourceBundlePointer b(ures_open(U_ICUDATA_BRKITR, fromLocale.getBaseName(), &status)); - LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", NULL, &status)); - LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", NULL, &status)); - if(U_FAILURE(status)) return; // leaves the builder empty, if you try to use it. + UErrorCode subStatus = U_ZERO_ERROR; + LocalUResourceBundlePointer b(ures_open(U_ICUDATA_BRKITR, fromLocale.getBaseName(), &subStatus)); + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open BUNDLE %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } + LocalUResourceBundlePointer exceptions(ures_getByKeyWithFallback(b.getAlias(), "exceptions", NULL, &subStatus)); + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open EXCEPTIONS %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } + LocalUResourceBundlePointer breaks(ures_getByKeyWithFallback(exceptions.getAlias(), "SentenceBreak", NULL, &subStatus)); + +#if FB_DEBUG + { + UErrorCode subsub = subStatus; + fprintf(stderr, "open SentenceBreak %s => %s, %s\n", fromLocale.getBaseName(), ures_getLocale(breaks.getAlias(), &subsub), u_errorName(subStatus)); + } +#endif + + if (U_FAILURE(subStatus) || (subStatus == U_USING_DEFAULT_WARNING) ) { + status = subStatus; // copy the failing status +#if FB_DEBUG + fprintf(stderr, "open %s : %s, %s\n", fromLocale.getBaseName(), "[exit]", u_errorName(status)); +#endif + return; // leaves the builder empty, if you try to use it. + } LocalUResourceBundlePointer strs; - UErrorCode subStatus = status; + subStatus = status; // Pick up inherited warning status now do { strs.adoptInstead(ures_getNextResource(breaks.getAlias(), strs.orphan(), &subStatus)); if(strs.isValid() && U_SUCCESS(subStatus)) { diff --git a/deps/icu-small/source/common/filterednormalizer2.cpp b/deps/icu-small/source/common/filterednormalizer2.cpp index 44ed9c13a0265e..fb6e831af7a4c5 100644 --- a/deps/icu-small/source/common/filterednormalizer2.cpp +++ b/deps/icu-small/source/common/filterednormalizer2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/hash.h b/deps/icu-small/source/common/hash.h index d308a57c3d3024..a03fcae9548ab1 100644 --- a/deps/icu-small/source/common/hash.h +++ b/deps/icu-small/source/common/hash.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2014, International Business Machines diff --git a/deps/icu-small/source/common/icudataver.c b/deps/icu-small/source/common/icudataver.c index 227af0453e83e2..367e58f59b6910 100644 --- a/deps/icu-small/source/common/icudataver.c +++ b/deps/icu-small/source/common/icudataver.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/icuplug.cpp b/deps/icu-small/source/common/icuplug.cpp index 477a348b5acc4f..a0ec46b1f99bea 100644 --- a/deps/icu-small/source/common/icuplug.cpp +++ b/deps/icu-small/source/common/icuplug.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/icuplugimp.h b/deps/icu-small/source/common/icuplugimp.h index 0b5afb1ecd8a42..895b35357b0e4c 100644 --- a/deps/icu-small/source/common/icuplugimp.h +++ b/deps/icu-small/source/common/icuplugimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/listformatter.cpp b/deps/icu-small/source/common/listformatter.cpp index a02549eba9f3cd..9225c22f163eb7 100644 --- a/deps/icu-small/source/common/listformatter.cpp +++ b/deps/icu-small/source/common/listformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/loadednormalizer2impl.cpp b/deps/icu-small/source/common/loadednormalizer2impl.cpp index 42fafdce9e1abe..b3b7b5d6212496 100644 --- a/deps/icu-small/source/common/loadednormalizer2impl.cpp +++ b/deps/icu-small/source/common/loadednormalizer2impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/common/localsvc.h b/deps/icu-small/source/common/localsvc.h index e8bc5a693c1526..4c0686d4495ed9 100644 --- a/deps/icu-small/source/common/localsvc.h +++ b/deps/icu-small/source/common/localsvc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2006 International Business Machines Corporation * diff --git a/deps/icu-small/source/common/locavailable.cpp b/deps/icu-small/source/common/locavailable.cpp index 10782837f2ddd4..3a92c3c3eb65a3 100644 --- a/deps/icu-small/source/common/locavailable.cpp +++ b/deps/icu-small/source/common/locavailable.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/locbased.cpp b/deps/icu-small/source/common/locbased.cpp index ba289621f9a997..f2f56adda170f0 100644 --- a/deps/icu-small/source/common/locbased.cpp +++ b/deps/icu-small/source/common/locbased.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/common/locbased.h b/deps/icu-small/source/common/locbased.h index f740026b05623e..453d5a8a30299b 100644 --- a/deps/icu-small/source/common/locbased.h +++ b/deps/icu-small/source/common/locbased.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/common/locdispnames.cpp b/deps/icu-small/source/common/locdispnames.cpp index 6d6a06e680eaec..bb10b8946b3327 100644 --- a/deps/icu-small/source/common/locdispnames.cpp +++ b/deps/icu-small/source/common/locdispnames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -852,7 +854,7 @@ uloc_getDisplayKeywordValue( const char* locale, /* now copy the dispName over if not NULL */ if(dispName != NULL){ if(dispNameLen <= destCapacity){ - uprv_memcpy(dest, dispName, dispNameLen * U_SIZEOF_UCHAR); + u_memcpy(dest, dispName, dispNameLen); return u_terminateUChars(dest, destCapacity, dispNameLen, status); }else{ *status = U_BUFFER_OVERFLOW_ERROR; diff --git a/deps/icu-small/source/common/locdspnm.cpp b/deps/icu-small/source/common/locdspnm.cpp index 7bd4ecead48d9b..a17478ce6d8a61 100644 --- a/deps/icu-small/source/common/locdspnm.cpp +++ b/deps/icu-small/source/common/locdspnm.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines Corporation and @@ -278,7 +280,11 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames { SimpleFormatter format; SimpleFormatter keyTypeFormat; UDisplayContext capitalizationContext; +#if !UCONFIG_NO_BREAK_ITERATION BreakIterator* capitalizationBrkIter; +#else + UObject* capitalizationBrkIter; +#endif static UMutex capitalizationBrkIterLock; UnicodeString formatOpenParen; UnicodeString formatReplaceOpenParen; @@ -341,6 +347,8 @@ class LocaleDisplayNamesImpl : public LocaleDisplayNames { UnicodeString& keyValueDisplayName(const char* key, const char* value, UnicodeString& result, UBool skipAdjust) const; void initialize(void); + + struct CapitalizationContextSink; }; UMutex LocaleDisplayNamesImpl::capitalizationBrkIterLock = U_MUTEX_INITIALIZER; @@ -386,6 +394,54 @@ LocaleDisplayNamesImpl::LocaleDisplayNamesImpl(const Locale& locale, initialize(); } +struct LocaleDisplayNamesImpl::CapitalizationContextSink : public ResourceSink { + UBool hasCapitalizationUsage; + LocaleDisplayNamesImpl& parent; + + CapitalizationContextSink(LocaleDisplayNamesImpl& _parent) + : hasCapitalizationUsage(FALSE), parent(_parent) {} + virtual ~CapitalizationContextSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable contexts = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; contexts.getKeyAndValue(i, key, value); ++i) { + + CapContextUsage usageEnum; + if (uprv_strcmp(key, "key") == 0) { + usageEnum = kCapContextUsageKey; + } else if (uprv_strcmp(key, "keyValue") == 0) { + usageEnum = kCapContextUsageKeyValue; + } else if (uprv_strcmp(key, "languages") == 0) { + usageEnum = kCapContextUsageLanguage; + } else if (uprv_strcmp(key, "script") == 0) { + usageEnum = kCapContextUsageScript; + } else if (uprv_strcmp(key, "territory") == 0) { + usageEnum = kCapContextUsageTerritory; + } else if (uprv_strcmp(key, "variant") == 0) { + usageEnum = kCapContextUsageVariant; + } else { + continue; + } + + int32_t len = 0; + const int32_t* intVector = value.getIntVector(len, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (len < 2) { continue; } + + int32_t titlecaseInt = (parent.capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU) ? intVector[0] : intVector[1]; + if (titlecaseInt == 0) { continue; } + + parent.fCapitalization[usageEnum] = TRUE; + hasCapitalizationUsage = TRUE; + } + } +}; + +// Virtual destructors must be defined out of line. +LocaleDisplayNamesImpl::CapitalizationContextSink::~CapitalizationContextSink() {} + void LocaleDisplayNamesImpl::initialize(void) { LocaleDisplayNamesImpl *nonConstThis = (LocaleDisplayNamesImpl *)this; @@ -428,58 +484,21 @@ LocaleDisplayNamesImpl::initialize(void) { uprv_memset(fCapitalization, 0, sizeof(fCapitalization)); #if !UCONFIG_NO_BREAK_ITERATION - // The following is basically copied from DateFormatSymbols::initializeData - typedef struct { - const char * usageName; - LocaleDisplayNamesImpl::CapContextUsage usageEnum; - } ContextUsageNameToEnum; - const ContextUsageNameToEnum contextUsageTypeMap[] = { - // Entries must be sorted by usageTypeName; entry with NULL name terminates list. - { "key", kCapContextUsageKey }, - { "keyValue", kCapContextUsageKeyValue }, - { "languages", kCapContextUsageLanguage }, - { "script", kCapContextUsageScript }, - { "territory", kCapContextUsageTerritory }, - { "variant", kCapContextUsageVariant }, - { NULL, (CapContextUsage)0 }, - }; // Only get the context data if we need it! This is a const object so we know now... // Also check whether we will need a break iterator (depends on the data) UBool needBrkIter = FALSE; if (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_STANDALONE) { - int32_t len = 0; - UResourceBundle *localeBundle = ures_open(NULL, locale.getName(), &status); - if (U_SUCCESS(status)) { - UResourceBundle *contextTransforms = ures_getByKeyWithFallback(localeBundle, "contextTransforms", NULL, &status); - if (U_SUCCESS(status)) { - UResourceBundle *contextTransformUsage; - while ( (contextTransformUsage = ures_getNextResource(contextTransforms, NULL, &status)) != NULL ) { - const int32_t * intVector = ures_getIntVector(contextTransformUsage, &len, &status); - if (U_SUCCESS(status) && intVector != NULL && len >= 2) { - const char* usageKey = ures_getKey(contextTransformUsage); - if (usageKey != NULL) { - const ContextUsageNameToEnum * typeMapPtr = contextUsageTypeMap; - int32_t compResult = 0; - // linear search; list is short and we cannot be sure that bsearch is available - while ( typeMapPtr->usageName != NULL && (compResult = uprv_strcmp(usageKey, typeMapPtr->usageName)) > 0 ) { - ++typeMapPtr; - } - if (typeMapPtr->usageName != NULL && compResult == 0) { - int32_t titlecaseInt = (capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_UI_LIST_OR_MENU)? intVector[0]: intVector[1]; - if (titlecaseInt != 0) { - fCapitalization[typeMapPtr->usageEnum] = TRUE;; - needBrkIter = TRUE; - } - } - } - } - status = U_ZERO_ERROR; - ures_close(contextTransformUsage); - } - ures_close(contextTransforms); - } - ures_close(localeBundle); + LocalUResourceBundlePointer resource(ures_open(NULL, locale.getName(), &status)); + if (U_FAILURE(status)) { return; } + CapitalizationContextSink sink(*this); + ures_getAllItemsWithFallback(resource.getAlias(), "contextTransforms", sink, status); + if (status == U_MISSING_RESOURCE_ERROR) { + // Silently ignore. Not every locale has contextTransforms. + status = U_ZERO_ERROR; + } else if (U_FAILURE(status)) { + return; } + needBrkIter = sink.hasCapitalizationUsage; } // Get a sentence break iterator if we will need it if (needBrkIter || capitalizationContext == UDISPCTX_CAPITALIZATION_FOR_BEGINNING_OF_SENTENCE) { @@ -494,8 +513,10 @@ LocaleDisplayNamesImpl::initialize(void) { } LocaleDisplayNamesImpl::~LocaleDisplayNamesImpl() { +#if !UCONFIG_NO_BREAK_ITERATION delete capitalizationBrkIter; - } +#endif +} const Locale& LocaleDisplayNamesImpl::getLocale() const { diff --git a/deps/icu-small/source/common/locid.cpp b/deps/icu-small/source/common/locid.cpp index d6ca74dfafeb64..d2781db95bdd8c 100644 --- a/deps/icu-small/source/common/locid.cpp +++ b/deps/icu-small/source/common/locid.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -42,6 +44,7 @@ #include "uhash.h" #include "ucln_cmn.h" #include "ustr_imp.h" +#include "charstr.h" U_CDECL_BEGIN static UBool U_CALLCONV locale_cleanup(void); @@ -57,6 +60,12 @@ static UMutex gDefaultLocaleMutex = U_MUTEX_INITIALIZER; static UHashtable *gDefaultLocalesHashT = NULL; static Locale *gDefaultLocale = NULL; +/** + * \def ULOC_STRING_LIMIT + * strings beyond this value crash in CharString + */ +#define ULOC_STRING_LIMIT 357913941 + U_NAMESPACE_END typedef enum ELocalePos { @@ -283,13 +292,12 @@ Locale::Locale( const char * newLanguage, } else { - MaybeStackArray togo; + UErrorCode status = U_ZERO_ERROR; int32_t size = 0; int32_t lsize = 0; int32_t csize = 0; int32_t vsize = 0; int32_t ksize = 0; - char *p; // Calculate the size of the resulting string. @@ -297,13 +305,23 @@ Locale::Locale( const char * newLanguage, if ( newLanguage != NULL ) { lsize = (int32_t)uprv_strlen(newLanguage); + if ( lsize < 0 || lsize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } size = lsize; } + CharString togo(newLanguage, lsize, status); // start with newLanguage + // _Country if ( newCountry != NULL ) { csize = (int32_t)uprv_strlen(newCountry); + if ( csize < 0 || csize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } size += csize; } @@ -318,6 +336,10 @@ Locale::Locale( const char * newLanguage, // remove trailing _'s vsize = (int32_t)uprv_strlen(newVariant); + if ( vsize < 0 || vsize > ULOC_STRING_LIMIT ) { // int32 wrap + setToBogus(); + return; + } while( (vsize>1) && (newVariant[vsize-1] == SEP_CHAR) ) { vsize--; @@ -342,70 +364,56 @@ Locale::Locale( const char * newLanguage, if ( newKeywords != NULL) { ksize = (int32_t)uprv_strlen(newKeywords); + if ( ksize < 0 || ksize > ULOC_STRING_LIMIT ) { + setToBogus(); + return; + } size += ksize + 1; } - // NOW we have the full locale string.. - - /*if the whole string is longer than our internal limit, we need - to go to the heap for temporary buffers*/ - if (size >= togo.getCapacity()) - { - // If togo_heap could not be created, initialize with default settings. - if (togo.resize(size+1) == NULL) { - init(NULL, FALSE); - } - } - - togo[0] = 0; - // Now, copy it back. - p = togo.getAlias(); - if ( lsize != 0 ) - { - uprv_strcpy(p, newLanguage); - p += lsize; - } + + // newLanguage is already copied if ( ( vsize != 0 ) || (csize != 0) ) // at least: __v { // ^ - *p++ = SEP_CHAR; + togo.append(SEP_CHAR, status); } if ( csize != 0 ) { - uprv_strcpy(p, newCountry); - p += csize; + togo.append(newCountry, status); } if ( vsize != 0) { - *p++ = SEP_CHAR; // at least: __v - - uprv_strncpy(p, newVariant, vsize); // Must use strncpy because - p += vsize; // of trimming (above). - *p = 0; // terminate + togo.append(SEP_CHAR, status) + .append(newVariant, vsize, status); } if ( ksize != 0) { if (uprv_strchr(newKeywords, '=')) { - *p++ = '@'; /* keyword parsing */ + togo.append('@', status); /* keyword parsing */ } else { - *p++ = '_'; /* Variant parsing with a script */ + togo.append('_', status); /* Variant parsing with a script */ if ( vsize == 0) { - *p++ = '_'; /* No country found */ + togo.append('_', status); /* No country found */ } } - uprv_strcpy(p, newKeywords); - p += ksize; + togo.append(newKeywords, status); } + if (U_FAILURE(status)) { + // Something went wrong with appending, etc. + setToBogus(); + return; + } // Parse it, because for example 'language' might really be a complete // string. - init(togo.getAlias(), FALSE); + init(togo.data(), FALSE); } } @@ -662,6 +670,7 @@ Locale::setToBogus() { *script = 0; *country = 0; fIsBogus = TRUE; + variantBegin = 0; } const Locale& U_EXPORT2 diff --git a/deps/icu-small/source/common/loclikely.cpp b/deps/icu-small/source/common/loclikely.cpp index 09b53298841ef9..9dcfc90cbd151c 100644 --- a/deps/icu-small/source/common/loclikely.cpp +++ b/deps/icu-small/source/common/loclikely.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -1330,6 +1332,8 @@ Locale::isRightToLeft() const { return uloc_isRightToLeft(getBaseName()); } +U_NAMESPACE_END + // The following must at least allow for rg key value (6) plus terminator (1). #define ULOC_RG_BUFLEN 8 @@ -1379,4 +1383,3 @@ ulocimp_getRegionForSupplementalData(const char *localeID, UBool inferRegion, return u_terminateChars(region, regionCapacity, rgLen, status); } -U_NAMESPACE_END diff --git a/deps/icu-small/source/common/locmap.c b/deps/icu-small/source/common/locmap.c index f545a04d487962..0d0aac42e15c19 100644 --- a/deps/icu-small/source/common/locmap.c +++ b/deps/icu-small/source/common/locmap.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1996-2016, International Business Machines @@ -213,11 +215,8 @@ ILCID_POSIX_ELEMENT_ARRAY(0x045c, chr,chr_US) ILCID_POSIX_SUBTABLE(ckb) { {0x92, "ckb"}, - {0x92, "ku"}, {0x7c92, "ckb_Arab"}, - {0x7c92, "ku_Arab"}, - {0x0492, "ckb_Arab_IQ"}, - {0x0492, "ku_Arab_IQ"} + {0x0492, "ckb_Arab_IQ"} }; /* Declared as cs_CZ to get around compiler errors on z/OS, which defines cs as a function */ @@ -1019,33 +1018,40 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr const char *pPosixID = NULL; #ifdef USE_WINDOWS_LOCALE_API - int32_t tmpLen = 0; - char locName[157]; /* ULOC_FULLNAME_CAPACITY */ - - tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName)); - if (tmpLen > 1) { - /* Windows locale name may contain sorting variant, such as "es-ES_tradnl". - In such case, we need special mapping data found in the hardcoded table - in this source file. */ - char *p = uprv_strchr(locName, '_'); - if (p) { - /* Keep the base locale, without variant */ - *p = 0; - tmpLen = uprv_strlen(locName); - } else { - /* No hardcoded table lookup necessary */ - bLookup = FALSE; - } - /* Change the tag separator from '-' to '_' */ - p = locName; - while (*p) { - if (*p == '-') { - *p = '_'; + // Note: Windows primary lang ID 0x92 in LCID is used for Central Kurdish and + // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for + // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot + // use the Windows API to resolve locale ID for this specific case. + if (hostid & 0x3FF != 0x92) { + int32_t tmpLen = 0; + char locName[157]; /* ULOC_FULLNAME_CAPACITY */ + + tmpLen = GetLocaleInfoA(hostid, LOCALE_SNAME, (LPSTR)locName, UPRV_LENGTHOF(locName)); + if (tmpLen > 1) { + /* Windows locale name may contain sorting variant, such as "es-ES_tradnl". + In such case, we need special mapping data found in the hardcoded table + in this source file. */ + char *p = uprv_strchr(locName, '_'); + if (p) { + /* Keep the base locale, without variant */ + *p = 0; + tmpLen = uprv_strlen(locName); + } + else { + /* No hardcoded table lookup necessary */ + bLookup = FALSE; + } + /* Change the tag separator from '-' to '_' */ + p = locName; + while (*p) { + if (*p == '-') { + *p = '_'; + } + p++; } - p++; + FIX_LANGUAGE_ID_TAG(locName, tmpLen); + pPosixID = locName; } - FIX_LANGUAGE_ID_TAG(locName, tmpLen); - pPosixID = locName; } #endif if (bLookup) { diff --git a/deps/icu-small/source/common/locmap.h b/deps/icu-small/source/common/locmap.h index 4345e216bd7136..a9b892ee426fc4 100644 --- a/deps/icu-small/source/common/locmap.h +++ b/deps/icu-small/source/common/locmap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/locresdata.cpp b/deps/icu-small/source/common/locresdata.cpp index 15cbc38471cac2..9ede0cac20bfce 100644 --- a/deps/icu-small/source/common/locresdata.cpp +++ b/deps/icu-small/source/common/locresdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/locutil.cpp b/deps/icu-small/source/common/locutil.cpp index 0b73d9d3e740b5..2f704953a2d0ca 100644 --- a/deps/icu-small/source/common/locutil.cpp +++ b/deps/icu-small/source/common/locutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2002-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/locutil.h b/deps/icu-small/source/common/locutil.h index cf64e343d06649..64f7dcc2c052f7 100644 --- a/deps/icu-small/source/common/locutil.h +++ b/deps/icu-small/source/common/locutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2002-2005, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/messageimpl.h b/deps/icu-small/source/common/messageimpl.h index 9af400cd27ddf2..980f777e8df7b4 100644 --- a/deps/icu-small/source/common/messageimpl.h +++ b/deps/icu-small/source/common/messageimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/messagepattern.cpp b/deps/icu-small/source/common/messagepattern.cpp index 7265b81eda1741..ddd2287e4cabd9 100644 --- a/deps/icu-small/source/common/messagepattern.cpp +++ b/deps/icu-small/source/common/messagepattern.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines @@ -114,7 +116,7 @@ MessagePatternList::copyFrom( errorCode=U_MEMORY_ALLOCATION_ERROR; return; } - uprv_memcpy(a.getAlias(), other.a.getAlias(), length*sizeof(T)); + uprv_memcpy(a.getAlias(), other.a.getAlias(), (size_t)length*sizeof(T)); } } diff --git a/deps/icu-small/source/common/msvcres.h b/deps/icu-small/source/common/msvcres.h index 4d087a2ac95a77..0514ee440ef554 100644 --- a/deps/icu-small/source/common/msvcres.h +++ b/deps/icu-small/source/common/msvcres.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //{{NO_DEPENDENCIES}} // Copyright (c) 2003-2010 International Business Machines // Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/common/mutex.h b/deps/icu-small/source/common/mutex.h index cd2fcb16e48f95..78de718751f9f2 100644 --- a/deps/icu-small/source/common/mutex.h +++ b/deps/icu-small/source/common/mutex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/norm2_nfc_data.h b/deps/icu-small/source/common/norm2_nfc_data.h index 9925afa3413761..4ddba0f8ba64c4 100644 --- a/deps/icu-small/source/common/norm2_nfc_data.h +++ b/deps/icu-small/source/common/norm2_nfc_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. @@ -10,524 +12,534 @@ #ifdef INCLUDED_FROM_NORMALIZER2_CPP static const UVersionInfo norm2_nfc_data_formatVersion={2,0,0,0}; -static const UVersionInfo norm2_nfc_data_dataVersion={8,0,0,0}; +static const UVersionInfo norm2_nfc_data_dataVersion={9,0,0,0}; static const int32_t norm2_nfc_data_indexes[Normalizer2Impl::IX_COUNT]={ -0x40,0x49c0,0x8614,0x8714,0x8714,0x8714,0x8714,0x8714,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0 +0x40,0x4bb8,0x880c,0x890c,0x890c,0x890c,0x890c,0x890c,0xc0,0x300,0x56e,0x14e7,0x1e2a,0xfe00,0x941,0 }; -static const uint16_t norm2_nfc_data_trieIndex[9400]={ -0x28d,0x295,0x29d,0x2a5,0x2b3,0x2bb,0x2c3,0x2cb,0x2d3,0x2db,0x2e3,0x2eb,0x2f3,0x2fb,0x301,0x309, -0x311,0x319,0x2ac,0x2b4,0x31e,0x326,0x2ac,0x2b4,0x32e,0x336,0x33e,0x346,0x34e,0x356,0x35e,0x366, -0x36e,0x376,0x37e,0x386,0x38e,0x396,0x39e,0x3a6,0x2ac,0x2b4,0x2ac,0x2b4,0x3ad,0x3b5,0x3bd,0x3c5, -0x3c9,0x3d1,0x3d7,0x3df,0x2ac,0x2b4,0x3e7,0x3ef,0x3f3,0x3fb,0x403,0x40b,0x2ac,0x2b4,0x409,0x411, -0x416,0x41d,0x421,0x2ac,0x2ac,0x2ac,0x2ac,0x429,0x2ac,0x431,0x439,0x2ac,0x2ac,0x441,0x449,0x2ac, -0x2ac,0x451,0x459,0x2ac,0x2ac,0x461,0x469,0x2ac,0x2ac,0x441,0x470,0x2ac,0x478,0x47e,0x486,0x2ac, -0x2ac,0x2ac,0x48d,0x2ac,0x2ac,0x493,0x49b,0x2ac,0x2ac,0x47e,0x4a2,0x2ac,0x2ac,0x2ac,0x4a8,0x2ac, -0x2ac,0x4b0,0x4b7,0x2ac,0x2ac,0x4ba,0x4c1,0x2ac,0x4c4,0x4cb,0x4d3,0x4db,0x4e3,0x4eb,0x4f2,0x2ac, -0x2ac,0x4f9,0x2ac,0x2ac,0x500,0x2ac,0x2ac,0x2ac,0x8ea,0x2ac,0x2ac,0x8f2,0x2ac,0x8f8,0x900,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x504,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x50c,0x50c,0x2ac,0x2ac,0x2ac,0x2ac,0x512,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x51a,0x2ac,0x2ac,0x2ac,0x51d,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x524,0x2ac,0x2ac,0x52c,0x2ac,0x534,0x2ac,0x2ac,0x53c,0x541,0x549,0x54f,0x2ac,0x555,0x2ac,0x55c, -0x2ac,0x561,0x2ac,0x2ac,0x2ac,0x2ac,0x567,0x56f,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x577,0x57c, -0x584,0x58c,0x594,0x59c,0x5a4,0x5ac,0x5b4,0x5bc,0x5c4,0x5cc,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc, -0x604,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x608,0x610,0x2ac,0x617,0x2ac,0x2ac,0x61b,0x622,0x627,0x2ac, -0x62f,0x637,0x63f,0x647,0x64f,0x657,0x2ac,0x65f,0x2ac,0x665,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x668,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x670,0x2ac,0x2ac,0x2ac,0x675,0x2ac,0x2ac,0x2ac,0x67d, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x685,0x68c,0x694,0x69c,0x6a4,0x6ac,0x6b4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x6bc,0x6c4,0x2ac,0x2ac,0x6cc,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x6d3,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x6da,0x6e2,0x2ac,0x6e8,0x6ec,0x2ac,0x2ac,0x562,0x6f4,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x6f8,0x700,0x703,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x469, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908, -0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x908,0x90f,0x2ac,0x2ac, -0x917,0x91e,0x28d,0x925,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d, -0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d,0x28d, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x70b,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743, -0x74b,0x753,0x75b,0x763,0x76b,0x773,0x77b,0x2ac,0x782,0x78a,0x792,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x79a,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0xab4,0xab4,0xacc,0xb0c,0xb4c,0xb8c,0xbcc,0xc04,0xc44,0xab0,0xc78,0xab0,0xcb8,0xcf8,0xd38,0xd78, -0xdb8,0xdf8,0xe38,0xe78,0xab0,0xab0,0xeb4,0xef4,0xf24,0xf5c,0xab0,0xf9c,0xfcc,0x100c,0xab0,0x1024, -0x880,0x8b0,0x8ee,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x928,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x944,0x188,0x188,0x97a,0x188,0x188,0x9b4,0x188,0x188, +static const uint16_t norm2_nfc_data_trieIndex[9652]={ +0x2a8,0x2b0,0x2b8,0x2c0,0x2ce,0x2d6,0x2de,0x2e6,0x2ee,0x2f6,0x2fe,0x306,0x30e,0x316,0x31c,0x324, +0x32c,0x334,0x2c7,0x2cf,0x339,0x341,0x2c7,0x2cf,0x349,0x351,0x359,0x361,0x369,0x371,0x379,0x381, +0x389,0x391,0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x2c7,0x2cf,0x2c7,0x2cf,0x3c8,0x3d0,0x3d8,0x3e0, +0x3e4,0x3ec,0x3f2,0x3fa,0x2c7,0x2cf,0x402,0x40a,0x40e,0x416,0x41e,0x426,0x2c7,0x2cf,0x424,0x42c, +0x431,0x438,0x43c,0x2c7,0x2c7,0x2c7,0x443,0x44b,0x2c7,0x453,0x45b,0x2c7,0x2c7,0x463,0x46b,0x2c7, +0x2c7,0x473,0x47b,0x2c7,0x2c7,0x483,0x48b,0x2c7,0x2c7,0x463,0x492,0x2c7,0x49a,0x4a0,0x4a8,0x2c7, +0x2c7,0x2c7,0x4af,0x2c7,0x2c7,0x4b5,0x4bd,0x2c7,0x2c7,0x4a0,0x4c4,0x2c7,0x2c7,0x2c7,0x4ca,0x2c7, +0x2c7,0x4d2,0x4d9,0x2c7,0x2c7,0x4dc,0x4e3,0x2c7,0x4e6,0x4ed,0x4f5,0x4fd,0x505,0x50d,0x514,0x2c7, +0x2c7,0x51b,0x2c7,0x2c7,0x522,0x2c7,0x2c7,0x2c7,0x929,0x2c7,0x2c7,0x931,0x2c7,0x937,0x93f,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x526,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x52e,0x52e,0x2c7,0x2c7,0x2c7,0x2c7,0x534,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x53c,0x2c7,0x2c7,0x2c7,0x53f,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x546,0x2c7,0x2c7,0x54e,0x2c7,0x556,0x2c7,0x2c7,0x55e,0x563,0x56b,0x571,0x2c7,0x577,0x2c7,0x57e, +0x2c7,0x583,0x2c7,0x2c7,0x2c7,0x2c7,0x589,0x591,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x599,0x59e, +0x5a6,0x5ae,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x5e6,0x5ee,0x5f6,0x5fe,0x606,0x60e,0x616,0x61e, +0x626,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x62a,0x632,0x2c7,0x639,0x2c7,0x2c7,0x63d,0x644,0x649,0x2c7, +0x651,0x659,0x661,0x669,0x671,0x679,0x2c7,0x681,0x2c7,0x687,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x68a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x692,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x69f, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x6a7,0x6ae,0x6b6,0x6be,0x6c6,0x6ce,0x6d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x6de,0x6e6,0x2c7,0x2c7,0x6ee,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x6f5,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x6fc,0x704,0x2c7,0x70a,0x70e,0x2c7,0x2c7,0x584,0x716,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x71a,0x722,0x725,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x48b, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947, +0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x947,0x94e,0x2c7,0x2c7, +0x956,0x95d,0x2a8,0x964,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, +0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8,0x2a8, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x72d,0x735,0x73d,0x745,0x74d,0x755,0x75d,0x765, +0x76d,0x775,0x77d,0x785,0x78d,0x795,0x79d,0x2c7,0x7a4,0x7ac,0x7b4,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x7bc,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0xb20,0xb20,0xb38,0xb78,0xbb8,0xbf8,0xc38,0xc70,0xcb0,0xb1c,0xce4,0xb1c,0xd24,0xd64,0xda4,0xde4, +0xe24,0xe64,0xea4,0xee4,0xb1c,0xb1c,0xf20,0xf60,0xf90,0xfc8,0xb1c,0x1008,0x1038,0x1078,0xb1c,0x1090, +0x880,0x8b0,0x8ee,0x928,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x951,0x188,0x188, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x96d,0x188,0x188,0x9a3,0x188,0x9e3,0xa1d,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x9f4, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x79e, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7a6,0x2ac,0x2ac,0x2ac,0x7a9,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x7b0,0x7b4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7bc,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x6d3,0x675,0x7be,0x7c6,0x2ac,0x2ac,0x7ce,0x7d5,0x2ac,0x562,0x2ac,0x2ac,0x7dd,0x2ac,0x2ac,0x7e0, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x7e6,0x2ac,0x441,0x7ed,0x7f4,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x7fa,0x802,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x807,0x80f,0x2ac,0x2ac,0x675, -0x2ac,0x2ac,0x2ac,0x812,0x2ac,0x2ac,0x2ac,0x818,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x81c, -0x2ac,0x822,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x828,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x830,0x838,0x840,0x846,0x84e,0x2ac,0x2ac,0x2ac,0x856,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x85a,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x862,0x86a,0x872,0x87a,0x882,0x88a,0x892,0x89a,0x8a2,0x8aa,0x8b2,0x8ba, -0x8c2,0x8ca,0x8d2,0x8da,0x8e2,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac, -0x2ac,0x2ac,0x2ac,0x2ac,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -2,4,6,0,0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4, -0xae,0xba,0xc0,0xd2,0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0, -0,0,0,0,0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218, -0x222,0x22e,0x234,0x246,0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x2f4,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947, -0x57a,0x57f,0x2fa,0x584,0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962, -0x599,0x5a4,0x5ad,0,0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977, -0x5c8,0x5cd,0x300,0x5d2,0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992, -0x5e7,0x5f2,0x5fb,0,0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616, -0x9aa,0x9ad,0x9b0,0x9b3,0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628, -0x9ce,0x9d1,0x9d4,0x9d7,0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb, -0x9fe,0xa01,0,0,0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0, -0xa1f,0xa22,0xa25,0xa28,0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d, -0xa40,0xa43,0xa46,0xa49,0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0, -0xa5b,0xa5e,0xa61,0xa64,0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c, -0xa7f,0xa82,0,0,0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a, -0xa9d,0xaa0,0xaa3,0xaa6,0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x665,0x672,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x67f,0x68c,0,0,0, -0,0,0,0x308,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xabe,0xac1,0xac4,0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5, -0xafa,0,0xaff,0xb04,0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e, -0xb25,0xb2a,0xb2e,0xb31,0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49, -0xb4d,0xb50,0xb53,0xb56,0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a, -0xb7d,0xb80,0xb83,0xb86,0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa, -0,0,0xbad,0xbb0,0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9, -0xbbe,0xbc3,0x6b7,0x6bc,0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x30a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6, -0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc, -0xffdc,0xffdc,0xffe8,0xfed8,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca, -0xfeca,0xffdc,0xffdc,0xffdc,0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01, -0xfe01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc, -0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6, -0xffe8,0xffdc,0xffdc,0xffe6,0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0, -0,0,0,0,0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8, -0xbdd,0xbe0,0xbe3,0,0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322, -0,0x32c,0,0,0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0, -0,0x350,0xbf4,0xbf7,0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372, -0,0x37e,0,0,0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0, -0,0x3aa,0x6cb,0x6d4,0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a, -0,0,0,0,0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc, -0x3ce,0xc26,0x3d6,0,0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2, -0,0,0,0x3e4,0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8, -0x3fa,0xc29,0x402,0,0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e, -0,0,0,0x410,0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35, -0,0,0,0,0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44, -0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c, -0x41a,0x41c,0xc5f,0xc62,0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80, -0x41e,0x420,0xc83,0xc86,0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0, -0xca7,0xcaa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6, -0xffe6,0xffde,0xffe4,0xffe6,0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14, -0xff15,0xff16,0,0xff17,0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xa5d, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c0, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7c8,0x2c7,0x2c7,0x2c7,0x7cb,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x7d2,0x7d6,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x7de,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x6f5,0x697,0x7e0,0x7e8,0x2c7,0x2c7,0x7f0,0x7f7,0x2c7,0x584,0x2c7,0x2c7,0x7ff,0x2c7,0x2c7,0x802, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x808,0x2c7,0x463,0x80f,0x816,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x81e,0x2c7,0x2c7,0x822,0x82a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x82f,0x837,0x2c7,0x2c7,0x697, +0x2c7,0x2c7,0x2c7,0x83a,0x2c7,0x2c7,0x2c7,0x840,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x697,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x844,0x2c7,0x84a,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x850,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x858,0x860,0x868, +0x86e,0x876,0x2c7,0x2c7,0x2c7,0x87e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x886,0x88e,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x892,0x2c7,0x2c7,0x2c7,0x899,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x8a1,0x8a9,0x8b1, +0x8b9,0x8c1,0x8c9,0x8d1,0x8d9,0x8e1,0x8e9,0x8f1,0x8f9,0x901,0x909,0x911,0x919,0x921,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7, +0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2c7,0x2a7,0x2a7,0x2a7, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,2,4,6,0, +0,8,0x28,0x2e,0x38,0x44,0x66,0x68,0x76,0x84,0xa2,0xa4,0xae,0xba,0xc0,0xd2, +0xf2,0,0xf6,0x106,0x114,0x122,0x148,0x14c,0x158,0x15c,0x16e,0,0,0,0,0, +0,0x17a,0x19a,0x1a0,0x1aa,0x1b6,0x1d8,0x1da,0x1e8,0x1f8,0x214,0x218,0x222,0x22e,0x234,0x246, +0x266,0,0x26a,0x27a,0x288,0x298,0x2be,0x2c2,0x2d0,0x2d4,0x2e8,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x2f4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x941,0x944,0x56f,0x947,0x57a,0x57f,0x2fa,0x584, +0x94a,0x94d,0x589,0x950,0x953,0x956,0x959,0x594,0,0x95c,0x95f,0x962,0x599,0x5a4,0x5ad,0, +0x2fe,0x965,0x968,0x96b,0x5b2,0x96e,0,0,0x971,0x974,0x5bd,0x977,0x5c8,0x5cd,0x300,0x5d2, +0x97a,0x97d,0x5d7,0x980,0x983,0x986,0x989,0x5e2,0,0x98c,0x98f,0x992,0x5e7,0x5f2,0x5fb,0, +0x304,0x995,0x998,0x99b,0x600,0x99e,0,0x9a1,0x9a4,0x9a7,0x60b,0x616,0x9aa,0x9ad,0x9b0,0x9b3, +0x9b6,0x9b9,0x9bc,0x9bf,0x9c2,0x9c5,0x9c8,0x9cb,0,0,0x621,0x628,0x9ce,0x9d1,0x9d4,0x9d7, +0x9da,0x9dd,0x9e0,0x9e3,0x9e6,0x9e9,0x9ec,0x9ef,0x9f2,0x9f5,0x9f8,0x9fb,0x9fe,0xa01,0,0, +0xa04,0xa07,0xa0a,0xa0d,0xa10,0xa13,0xa16,0xa19,0xa1c,0,0,0,0xa1f,0xa22,0xa25,0xa28, +0,0xa2b,0xa2e,0xa31,0xa34,0xa37,0xa3a,0,0,0,0,0xa3d,0xa40,0xa43,0xa46,0xa49, +0xa4c,0,0,0,0x62f,0x636,0xa4f,0xa52,0xa55,0xa58,0,0,0xa5b,0xa5e,0xa61,0xa64, +0xa67,0xa6a,0x63d,0x642,0xa6d,0xa70,0xa73,0xa76,0x647,0x64c,0xa79,0xa7c,0xa7f,0xa82,0,0, +0x651,0x656,0x65b,0x660,0xa85,0xa88,0xa8b,0xa8e,0xa91,0xa94,0xa97,0xa9a,0xa9d,0xaa0,0xaa3,0xaa6, +0xaa9,0xaac,0xaaf,0xab2,0xab5,0xab8,0xabb,0x306,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x665,0x672,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x67f,0x68c,0,0,0,0,0,0,0x308, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xabe,0xac1,0xac4, +0xac7,0xaca,0xacd,0xad0,0xad3,0xad7,0xadc,0xae1,0xae6,0xaeb,0xaf0,0xaf5,0xafa,0,0xaff,0xb04, +0xb09,0xb0e,0xb12,0xb15,0,0,0xb18,0xb1b,0xb1e,0xb21,0x699,0x69e,0xb25,0xb2a,0xb2e,0xb31, +0xb34,0,0,0,0xb37,0xb3a,0,0,0xb3d,0xb40,0xb44,0xb49,0xb4d,0xb50,0xb53,0xb56, +0xb59,0xb5c,0xb5f,0xb62,0xb65,0xb68,0xb6b,0xb6e,0xb71,0xb74,0xb77,0xb7a,0xb7d,0xb80,0xb83,0xb86, +0xb89,0xb8c,0xb8f,0xb92,0xb95,0xb98,0xb9b,0xb9e,0xba1,0xba4,0xba7,0xbaa,0,0,0xbad,0xbb0, +0,0,0,0,0,0,0x6a3,0x6a8,0x6ad,0x6b2,0xbb4,0xbb9,0xbbe,0xbc3,0x6b7,0x6bc, +0xbc8,0xbcd,0xbd1,0xbd4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x30a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xffe6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6,0xfee6, +0xfee6,0xffe6,0xffe6,0xfee6,0xffe6,0xfee6,0xffe6,0xfee6,0xfee6,0xffe8,0xffdc,0xffdc,0xffdc,0xffdc,0xffe8,0xfed8, +0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffca,0xffca,0xfedc,0xfedc,0xfedc,0xfedc,0xfeca,0xfeca,0xffdc,0xffdc,0xffdc, +0xffdc,0xfedc,0xfedc,0xffdc,0xfedc,0xfedc,0xffdc,0xffdc,0xff01,0xff01,0xff01,0xff01,0xfe01,0xffdc,0xffdc,0xffdc, +0xffdc,0xffe6,0xffe6,0xffe6,0x14e8,0x14eb,0xfee6,0x14ee,0x14f1,0xfef0,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, +0xffe6,0xffdc,0xffdc,0,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe8,0xffdc,0xffdc,0xffe6, +0xffe9,0xffea,0xffea,0xffe9,0xffea,0xffea,0xffe9,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0x14f4,0,0,0,0,0,0,0, +0,0,0x14f6,0,0,0,0,0,0,0xbd7,0xbda,0x14f8,0xbdd,0xbe0,0xbe3,0, +0xbe6,0,0xbe9,0xbec,0xbf0,0x30c,0,0,0,0x31a,0,0x322,0,0x32c,0,0, +0,0,0,0x33a,0,0x342,0,0,0,0x344,0,0,0,0x350,0xbf4,0xbf7, +0x6c1,0xbfa,0x6c6,0xbfd,0xc01,0x35a,0,0,0,0x36a,0,0x372,0,0x37e,0,0, +0,0,0,0x38e,0,0x396,0,0,0,0x39a,0,0,0,0x3aa,0x6cb,0x6d4, +0xc05,0xc08,0x6dd,0,0,0,0x3b6,0xc0b,0xc0e,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc11,0xc14,0,0xc17,0,0,0x3ba,0xc1a,0,0,0,0, +0xc1d,0xc20,0xc23,0,0x3bc,0,0,0x3c0,0,0x3c2,0x3c8,0x3cc,0x3ce,0xc26,0x3d6,0, +0,0,0x3d8,0,0,0,0,0x3da,0,0,0,0x3e2,0,0,0,0x3e4, +0,0x3e6,0,0,0x3e8,0,0,0x3ec,0,0x3ee,0x3f4,0x3f8,0x3fa,0xc29,0x402,0, +0,0,0x404,0,0,0,0,0x406,0,0,0,0x40e,0,0,0,0x410, +0,0x412,0,0,0xc2c,0xc2f,0,0xc32,0,0,0x414,0xc35,0,0,0,0, +0xc38,0xc3b,0xc3e,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x416,0x418,0xc41,0xc44,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xc47,0xc4a,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xc4d,0xc50,0xc53,0xc56,0,0,0xc59,0xc5c,0x41a,0x41c,0xc5f,0xc62, +0xc65,0xc68,0xc6b,0xc6e,0,0,0xc71,0xc74,0xc77,0xc7a,0xc7d,0xc80,0x41e,0x420,0xc83,0xc86, +0xc89,0xc8c,0xc8f,0xc92,0xc95,0xc98,0xc9b,0xc9e,0xca1,0xca4,0,0,0xca7,0xcaa,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffde,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffde,0xffe4,0xffe6, +0xff0a,0xff0b,0xff0c,0xff0d,0xff0e,0xff0f,0xff10,0xff11,0xff12,0xff13,0xff13,0xff14,0xff15,0xff16,0,0xff17, +0,0xff18,0xff19,0,0xffe6,0xffdc,0,0xff12,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0,0,0,0,0, +0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6,0xfee6,0xfedc,0xffdc,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff23,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2,0,0x430,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0xffe6, +0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff24,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc, +0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6, +0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff1e,0xff1f,0xff20,0, -0,0,0,0,0,0,0xcad,0xcb0,0xcb3,0xcb6,0xcb9,0x422,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x428,0,0x42a,0xff1b,0xff1c,0xff1d,0xff1e,0xff1f,0xff20,0xff21,0xff22,0xfee6, -0xfee6,0xfedc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff23,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xcbc,0x42c,0xcbf,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x42e,0xcc2, -0,0x430,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc, -0xffe6,0,0,0xffe6,0xffe6,0,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xff24,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6, -0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffe6,0xffdc,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6, -0xffdc,0xffe6,0xffdc,0xffe6,0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffdc, +0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6, +0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0x432,0xcc5,0,0,0,0,0,0,0x434,0xcc8,0,0x436, +0xccb,0,0,0,0,0,0,0,0xfe07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6, +0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503,0x1506,0x1509,0x150c,0x150f,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff07,0,0xfe00,0,0,0,0,0, +0,0,0,0x438,0,0,0,0xcce,0xcd1,0xff09,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0x1512,0x1515,0,0x1518,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x151b, +0,0,0x151e,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0,0,0,0,0x1521,0x1524,0x1527,0,0,0x152a,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x43c, +0xcd4,0,0,0xcd7,0xcda,0xff09,0,0,0,0,0,0,0,0,0xfe00,0xfe00, +0,0,0,0,0x152d,0x1530,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x442,0,0xcdd,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xfe00,0, +0,0,0,0,0,0,0x444,0x448,0,0,0xce0,0xce3,0xce6,0xff09,0,0, +0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0,0x44a,0,0xce9,0,0,0,0,0xff09,0,0,0,0,0,0, +0,0xff54,0xfe5b,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xff07,0,0,0x44c,0xcec,0,0xfe00,0,0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6, +0,0xff09,0,0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0, +0,0,0,0,0,0,0x454,0x458,0,0,0xcfa,0xcfd,0xd00,0xff09,0,0, +0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0,0xfe09,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0, +0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xff67,0xff67,0xff09,0,0,0,0,0,0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xff76,0xff76,0,0,0,0,0,0, +0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xffdc,0,0xffdc,0,0xffd8,0,0, +0,0,0,0,0,0,0,0x1533,0,0,0,0,0,0,0,0, +0,0x1536,0,0,0,0,0x1539,0,0,0,0,0x153c,0,0,0,0, +0x153f,0,0,0,0,0,0,0,0,0,0,0,0,0x1542,0,0, +0,0,0,0,0,0xff81,0xff82,0x1546,0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82, +0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6,0xff09,0,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0,0x1557,0,0,0,0,0,0,0,0, +0,0x155a,0,0,0,0,0x155d,0,0,0,0,0x1560,0,0,0,0, +0x1563,0,0,0,0,0,0,0,0,0,0,0,0,0x1566,0,0, +0,0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x460,0xd0e,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0, +0,0,0,0xff07,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0xffe6,0,0, +0,0,0,0,0,0,0,0,0,0xffe4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffde,0xffe6,0xffdc,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, -0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc, -0,0,0,0,0,0,0,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6, -0xffe6,0xffdc,0xffdc,0xffdc,0xff1b,0xff1c,0xff1d,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0x432,0xcc5,0,0, -0,0,0,0,0x434,0xcc8,0,0x436,0xccb,0,0,0,0,0,0,0, -0xfe07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0,0,0,0x14fa,0x14fd,0x1500,0x1503, -0x1506,0x1509,0x150c,0x150f,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff07,0,0xfe00,0,0,0,0,0,0,0,0,0x438,0,0,0,0xcce, -0xcd1,0xff09,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0x1512,0x1515,0,0x1518,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x151b,0,0,0x151e,0,0,0,0,0, -0xff07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0x1521,0x1524,0x1527, -0,0,0x152a,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff07,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x43c,0xcd4,0,0,0xcd7,0xcda,0xff09,0,0, -0,0,0,0,0,0,0xfe00,0xfe00,0,0,0,0,0x152d,0x1530,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x442,0,0xcdd,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0,0x444,0x448, -0,0,0xce0,0xce3,0xce6,0xff09,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0,0x44a,0,0xce9,0,0,0, -0,0xff09,0,0,0,0,0,0,0,0xff54,0xfe5b,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0,0,0x44c,0xcec,0,0xfe00,0, -0,0,0x44e,0xcef,0xcf2,0,0x6e2,0xcf6,0,0xff09,0,0,0,0,0,0, -0,0xfe00,0xfe00,0,0,0,0,0,0,0,0,0,0,0,0x454,0x458, -0,0,0xcfa,0xcfd,0xd00,0xff09,0,0,0,0,0,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0,0xfe09,0,0,0,0,0xfe00, -0,0,0,0,0,0,0,0,0,0x45a,0xd03,0,0x6e7,0xd07,0xd0b,0xfe00, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff67,0xff67,0xff09,0,0,0,0,0, -0,0,0,0,0xff6b,0xff6b,0xff6b,0xff6b,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xff76,0xff76,0,0,0,0,0,0,0,0,0,0,0xff7a,0xff7a,0xff7a,0xff7a, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffdc,0xffdc,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xffdc,0,0xffdc,0,0xffd8,0,0,0,0,0,0,0,0,0,0x1533, -0,0,0,0,0,0,0,0,0,0x1536,0,0,0,0,0x1539,0, -0,0,0,0x153c,0,0,0,0,0x153f,0,0,0,0,0,0,0, -0,0,0,0,0,0x1542,0,0,0,0,0,0,0,0xff81,0xff82,0x1546, -0xff84,0x154a,0x154d,0,0x1550,0,0xff82,0xff82,0xff82,0xff82,0,0,0xff82,0x1554,0xffe6,0xffe6, -0xff09,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0x1557, -0,0,0,0,0,0,0,0,0,0x155a,0,0,0,0,0x155d,0, -0,0,0,0x1560,0,0,0,0,0x1563,0,0,0,0,0,0,0, -0,0,0,0,0,0x1566,0,0,0,0,0,0,0,0,0xffdc,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x460,0xd0e,0,0,0,0,0, -0,0,0xfe00,0,0,0,0,0,0,0,0,0xff07,0,0xff09,0xff09,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffdc,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc, +0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0,0,0,0,0,0,0x462,0xd11,0x464, +0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0,0,0x46c,0xd20,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, -0,0,0,0,0,0xffe6,0,0,0,0,0,0,0,0,0,0, -0,0xffe4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffde,0xffe6,0xffdc, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xffe6,0xffdc,0,0,0,0,0,0,0, +0xff07,0xfe00,0,0,0,0,0x46e,0xd23,0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f, 0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0xffdc, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0,0, -0,0,0,0,0,0x462,0xd11,0x464,0xd14,0x466,0xd17,0x468,0xd1a,0x46a,0xd1d,0, -0,0x46c,0xd20,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xff07,0xfe00,0,0,0,0,0x46e,0xd23, -0x470,0xd26,0x472,0x474,0xd29,0xd2c,0x476,0xd2f,0xff09,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, +0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xff09,0xff09,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff07,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0xff09,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xff07,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xffe6,0xffe6,0xffe6,0,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, +0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0, +0,0xffdc,0,0,0,0,0,0,0xffe6,0,0,0,0xffe6,0xffe6,0,0, +0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6, +0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0xffe6,0xffe9,0xffdc,0xffe6,0xffdc,0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47, +0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63,0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82, +0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f,0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7, +0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2,0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1, +0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01,0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19, +0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38,0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59, +0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f,0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88, +0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5,0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd, +0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd,0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5, +0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d,0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25, +0xf28,0xf2b,0,0xf2e,0,0,0,0,0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47, +0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f,0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97, +0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad,0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5, +0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8,0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f, +0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037,0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058, +0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f,0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c, +0x109f,0x10a2,0,0,0,0,0,0,0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766, +0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6,0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0, +0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0,0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802, +0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842,0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7, +0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105,0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0, +0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0,0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b, +0,0x89a,0,0x1150,0,0x1155,0,0x115a,0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd, +0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d,0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576, +0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0,0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f, +0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9,0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213, +0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d,0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287, +0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1,0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da, +0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478,0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb, +0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e,0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320, +0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333,0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b, +0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab,0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c, +0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0,0xfdc1,0xfdc1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6, +0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0,0,0xffe6,0,0,0,0xff01,0xff01,0xffe6, +0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x15b7,0,0,0,0x15b9,0x15bc, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x484,0,0x486,0,0x488,0,0,0,0,0,0x1379,0x137c, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x137f,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0,0x48e,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x490,0x138b,0,0,0,0x492,0x138e,0,0x494, +0x1391,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x496,0x1394,0x498,0x1397,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x49a,0,0,0,0,0x139a,0,0x49c,0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0, +0,0x4a2,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x13a6,0x4a4,0x13a9,0,0x4a6,0x4a8,0,0,0,0,0,0, +0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac,0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4, +0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc,0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0, +0,0,0,0,0,0x4c2,0x4c4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x4c6,0,0,0,0,0,0x4c8,0x4ca,0,0x4cc, +0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0,0x4d2,0x4d4,0,0,0,0,0,0, +0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee,0,0,0,0,0,0,0x13f1,0x13f4, +0x13f7,0x13fa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x15bf,0x15c1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x15c3,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0, +0,0,0,0,0,0,0xffda,0xffe4,0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4d6,0, +0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc,0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4, +0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec,0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424, +0x4f4,0x1427,0,0,0,0,0,0x4f6,0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439, +0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1448,0,0,0, +0,0xfe08,0xfe08,0,0,0x50a,0x144b,0,0,0,0,0,0,0,0x50c,0, +0,0,0,0x50e,0x144e,0x510,0x1451,0x512,0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a, +0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522,0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475, +0x52a,0x1478,0,0,0,0,0,0x52c,0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a, +0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x540,0x542,0x544,0x546,0,0x1499,0,0,0x149c, +0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xffe6,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xffe6,0xffdc,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff09, +0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0xff09,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xff07,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0, -0xff01,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0,0xff01,0xff01, -0xff01,0xff01,0xff01,0xff01,0xff01,0,0,0,0,0xffdc,0,0,0,0,0,0, -0xffe6,0,0,0,0xffe6,0xffe6,0,0,0,0,0,0,0xffe6,0xffe6,0xffdc,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffe6,0xffe6,0xffea,0xffd6,0xffdc,0xffca,0xffe6,0xffe6,0xffe6, 0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0xffe9,0xffdc,0xffe6,0xffdc, -0xd32,0xd35,0xd38,0xd3b,0xd3e,0xd41,0xd44,0xd47,0xd4b,0xd50,0xd54,0xd57,0xd5a,0xd5d,0xd60,0xd63, -0xd66,0xd69,0xd6c,0xd6f,0xd73,0xd78,0xd7d,0xd82,0xd86,0xd89,0xd8c,0xd8f,0xd93,0xd98,0xd9c,0xd9f, -0xda2,0xda5,0xda8,0xdab,0xdae,0xdb1,0xdb4,0xdb7,0xdba,0xdbd,0xdc0,0xdc3,0xdc6,0xdc9,0xdcd,0xdd2, -0xdd6,0xdd9,0xddc,0xddf,0xde2,0xde5,0x6ec,0x6f1,0xde9,0xdee,0xdf2,0xdf5,0xdf8,0xdfb,0xdfe,0xe01, -0xe04,0xe07,0xe0a,0xe0d,0xe10,0xe13,0xe16,0xe19,0xe1c,0xe1f,0xe22,0xe25,0xe29,0xe2e,0xe33,0xe38, -0xe3d,0xe42,0xe47,0xe4c,0xe50,0xe53,0xe56,0xe59,0xe5c,0xe5f,0x6f6,0x6fb,0xe63,0xe68,0xe6c,0xe6f, -0xe72,0xe75,0x700,0x705,0xe79,0xe7e,0xe83,0xe88,0xe8d,0xe92,0xe96,0xe99,0xe9c,0xe9f,0xea2,0xea5, -0xea8,0xeab,0xeae,0xeb1,0xeb4,0xeb7,0xeba,0xebd,0xec1,0xec6,0xecb,0xed0,0xed4,0xed7,0xeda,0xedd, -0xee0,0xee3,0xee6,0xee9,0xeec,0xeef,0xef2,0xef5,0xef8,0xefb,0xefe,0xf01,0xf04,0xf07,0xf0a,0xf0d, -0xf10,0xf13,0xf16,0xf19,0xf1c,0xf1f,0xf22,0xf25,0xf28,0xf2b,0,0xf2e,0,0,0,0, -0x70a,0x711,0xf31,0xf34,0xf38,0xf3d,0xf42,0xf47,0xf4c,0xf51,0xf56,0xf5b,0xf60,0xf65,0xf6a,0xf6f, -0xf74,0xf79,0xf7e,0xf83,0xf88,0xf8d,0xf92,0xf97,0x718,0x71d,0xf9b,0xf9e,0xfa1,0xfa4,0xfa8,0xfad, -0xfb2,0xfb7,0xfbc,0xfc1,0xfc6,0xfcb,0xfd0,0xfd5,0xfd9,0xfdc,0xfdf,0xfe2,0x722,0x727,0xfe5,0xfe8, -0xfec,0xff1,0xff6,0xffb,0x1000,0x1005,0x100a,0x100f,0x1014,0x1019,0x101e,0x1023,0x1028,0x102d,0x1032,0x1037, -0x103c,0x1041,0x1046,0x104b,0x104f,0x1052,0x1055,0x1058,0x105c,0x1061,0x1066,0x106b,0x1070,0x1075,0x107a,0x107f, -0x1084,0x1089,0x108d,0x1090,0x1093,0x1096,0x1099,0x109c,0x109f,0x10a2,0,0,0,0,0,0, -0x72c,0x737,0x743,0x74a,0x751,0x758,0x75f,0x766,0x76c,0x777,0x783,0x78a,0x791,0x798,0x79f,0x7a6, -0x7ac,0x7b3,0x10a6,0x10ab,0x10b0,0x10b5,0,0,0x7ba,0x7c1,0x10ba,0x10bf,0x10c4,0x10c9,0,0, -0x7c8,0x7d3,0x7df,0x7e6,0x7ed,0x7f4,0x7fb,0x802,0x808,0x813,0x81f,0x826,0x82d,0x834,0x83b,0x842, -0x848,0x851,0x10ce,0x10d3,0x10d8,0x10dd,0x10e2,0x10e7,0x85a,0x863,0x10ec,0x10f1,0x10f6,0x10fb,0x1100,0x1105, -0x86c,0x873,0x110a,0x110f,0x1114,0x1119,0,0,0x87a,0x881,0x111e,0x1123,0x1128,0x112d,0,0, -0x888,0x891,0x1132,0x1137,0x113c,0x1141,0x1146,0x114b,0,0x89a,0,0x1150,0,0x1155,0,0x115a, -0x8a3,0x8ae,0x8ba,0x8c1,0x8c8,0x8cf,0x8d6,0x8dd,0x8e3,0x8ee,0x8fa,0x901,0x908,0x90f,0x916,0x91d, -0x923,0x156a,0x115e,0x156e,0x928,0x1572,0x1161,0x1576,0x1164,0x157a,0x1167,0x157e,0x92d,0x1582,0,0, -0x116b,0x1170,0x1177,0x117f,0x1187,0x118f,0x1197,0x119f,0x11a5,0x11aa,0x11b1,0x11b9,0x11c1,0x11c9,0x11d1,0x11d9, -0x11df,0x11e4,0x11eb,0x11f3,0x11fb,0x1203,0x120b,0x1213,0x1219,0x121e,0x1225,0x122d,0x1235,0x123d,0x1245,0x124d, -0x1253,0x1258,0x125f,0x1267,0x126f,0x1277,0x127f,0x1287,0x128d,0x1292,0x1299,0x12a1,0x12a9,0x12b1,0x12b9,0x12c1, -0x12c6,0x12c9,0x12cd,0x12d1,0x12d5,0,0x932,0x12da,0x12de,0x12e1,0x12e4,0x1586,0x12e7,0,0x1589,0x478, -0,0x12ea,0x12ee,0x12f2,0x12f6,0,0x937,0x12fb,0x12ff,0x158c,0x1302,0x1590,0x1305,0x1308,0x130b,0x130e, -0x1311,0x1314,0x1318,0x1595,0,0,0x131c,0x1320,0x1324,0x1327,0x132a,0x159a,0,0x132d,0x1330,0x1333, -0x1336,0x1339,0x133d,0x159f,0x1341,0x1344,0x1347,0x134b,0x134f,0x1352,0x1355,0x15a4,0x1358,0x135b,0x15a8,0x15ab, -0,0,0x135f,0x1363,0x1367,0,0x93c,0x136c,0x1370,0x15ae,0x1373,0x15b2,0x1376,0x15b5,0x47e,0, -0xfdc1,0xfdc1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0xff01,0xff01,0xffe6,0xffe6,0xffe6,0xffe6,0xff01,0xff01,0xff01,0xffe6,0xffe6,0,0,0, -0,0xffe6,0,0,0,0xff01,0xff01,0xffe6,0xffdc,0xffe6,0xff01,0xff01,0xffdc,0xffdc,0xffdc,0xffdc, -0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x15b7,0,0,0,0x15b9,0x15bc,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x484,0,0x486,0, -0x488,0,0,0,0,0,0x1379,0x137c,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x137f,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x1382,0x1385,0x1388,0x48a,0,0x48c,0, -0x48e,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x490, -0x138b,0,0,0,0x492,0x138e,0,0x494,0x1391,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x496, -0x1394,0x498,0x1397,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x49a,0,0,0,0,0x139a,0,0x49c, -0x139d,0x49e,0,0x13a0,0x4a0,0x13a3,0,0,0,0x4a2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x13a6,0x4a4,0x13a9,0, -0x4a6,0x4a8,0,0,0,0,0,0,0,0x13ac,0x13af,0x13b2,0x13b5,0x13b8,0x4aa,0x4ac, -0x13bb,0x13be,0x4ae,0x4b0,0x13c1,0x13c4,0x4b2,0x4b4,0x4b6,0x4b8,0,0,0x13c7,0x13ca,0x4ba,0x4bc, -0x13cd,0x13d0,0x4be,0x4c0,0x13d3,0x13d6,0,0,0,0,0,0,0,0x4c2,0x4c4,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x4c6,0, -0,0,0,0,0x4c8,0x4ca,0,0x4cc,0x13d9,0x13dc,0x13df,0x13e2,0,0,0x4ce,0x4d0, -0x4d2,0x4d4,0,0,0,0,0,0,0,0,0,0,0x13e5,0x13e8,0x13eb,0x13ee, -0,0,0,0,0,0,0x13f1,0x13f4,0x13f7,0x13fa,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x15bf,0x15c1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x15c3,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, 0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xffdc,0xffdc,0xffdc,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0, +0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xff09,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0xffda,0xffe4, -0xffe8,0xffde,0xffe0,0xffe0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x4d6,0,0,0,0,0x4d8,0x13fd,0x4da,0x1400,0x4dc, -0x1403,0x4de,0x1406,0x4e0,0x1409,0x4e2,0x140c,0x4e4,0x140f,0x4e6,0x1412,0x4e8,0x1415,0x4ea,0x1418,0x4ec, -0x141b,0x4ee,0x141e,0,0x4f0,0x1421,0x4f2,0x1424,0x4f4,0x1427,0,0,0,0,0,0x4f6, -0x142a,0x142d,0x4fa,0x1430,0x1433,0x4fe,0x1436,0x1439,0x502,0x143c,0x143f,0x506,0x1442,0x1445,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1448,0,0,0,0,0xfe08,0xfe08,0,0,0x50a,0x144b,0, -0,0,0,0,0,0,0x50c,0,0,0,0,0x50e,0x144e,0x510,0x1451,0x512, -0x1454,0x514,0x1457,0x516,0x145a,0x518,0x145d,0x51a,0x1460,0x51c,0x1463,0x51e,0x1466,0x520,0x1469,0x522, -0x146c,0x524,0x146f,0,0x526,0x1472,0x528,0x1475,0x52a,0x1478,0,0,0,0,0,0x52c, -0x147b,0x147e,0x530,0x1481,0x1484,0x534,0x1487,0x148a,0x538,0x148d,0x1490,0x53c,0x1493,0x1496,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x540, -0x542,0x544,0x546,0,0x1499,0,0,0x149c,0x149f,0x14a2,0x14a5,0,0,0x548,0x14a8,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6, -0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0, +0,0,0,0,0,0,0,0,0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6, +0xffe6,0,0,0,0,0,0xffe6,0xffe6,0,0xffe6,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0,0, +0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc,0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da, +0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea,0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa, +0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a,0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a, +0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a,0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a, +0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a,0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a, +0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a,0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a, +0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688,0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698, +0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8,0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8, +0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8,0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8, +0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8,0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8, +0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706,0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714, +0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724,0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734, +0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742,0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752, +0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762,0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684, +0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780,0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790, +0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0,0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0, +0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0,0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0, +0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0,0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6, +0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0,0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8, +0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808,0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818, +0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828,0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838, +0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848,0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856, +0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864,0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872, +0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f,0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d, +0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b,0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822, +0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3,0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd, +0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9,0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7, +0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1,0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed, +0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5,0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff, +0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e,0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x191f,0xff1a,0x1922, +0,0,0,0,0,0,0,0,0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938, +0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0,0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0, +0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971,0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0, +0xffdc,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0,0, +0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xffdc,0,0xffe6,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0,0,0, -0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xffe6,0xff01,0xffdc,0,0,0,0,0xff09,0,0,0,0,0,0xffe6,0xffdc,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xffe6,0,0xffe6,0xffe6,0xffdc,0,0,0xffe6,0xffe6,0,0,0,0,0,0xffe6,0xffe6, -0,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xff09,0,0,0,0,0,0,0,0,0,0x15c6,0x15c8,0x15ca,0x15cc, -0x15ce,0x15d0,0x15d2,0x15d4,0x15d4,0x15d6,0x15d8,0x15da,0x15dc,0x15de,0x15e0,0x15e2,0x15e4,0x15e6,0x15e8,0x15ea, -0x15ec,0x15ee,0x15f0,0x15f2,0x15f4,0x15f6,0x15f8,0x15fa,0x15fc,0x15fe,0x1600,0x1602,0x1604,0x1606,0x1608,0x160a, -0x160c,0x160e,0x1610,0x1612,0x1614,0x1616,0x1618,0x161a,0x161c,0x161e,0x1620,0x1622,0x1624,0x1626,0x1628,0x162a, -0x162c,0x162e,0x1630,0x1632,0x1634,0x1636,0x1638,0x163a,0x163c,0x163e,0x1640,0x1642,0x1644,0x1646,0x1648,0x164a, -0x164c,0x164e,0x1650,0x1652,0x1654,0x1656,0x1658,0x165a,0x165c,0x165e,0x1660,0x1662,0x1664,0x1666,0x1668,0x166a, -0x166c,0x166e,0x1670,0x1672,0x1674,0x1676,0x1678,0x167a,0x15ec,0x167c,0x167e,0x1680,0x1682,0x1684,0x1686,0x1688, -0x168a,0x168c,0x168e,0x1690,0x1692,0x1694,0x1696,0x1698,0x169a,0x169c,0x169e,0x16a0,0x16a2,0x16a4,0x16a6,0x16a8, -0x16aa,0x16ac,0x16ae,0x16b0,0x16b2,0x16b4,0x16b6,0x16b8,0x16ba,0x16bc,0x16be,0x16c0,0x16c2,0x16c4,0x16c6,0x16c8, -0x16ca,0x16cc,0x16ce,0x16d0,0x16d2,0x16d4,0x16d6,0x16d8,0x16da,0x16dc,0x16de,0x16e0,0x16e2,0x16e4,0x16e6,0x16e8, -0x16ea,0x16ec,0x16ee,0x16f0,0x16f2,0x16f4,0x16f6,0x16f8,0x16fa,0x16fc,0x16fe,0x1700,0x1702,0x16a0,0x1704,0x1706, -0x1708,0x170a,0x170c,0x170e,0x1710,0x1712,0x1680,0x1714,0x1716,0x1718,0x171a,0x171c,0x171e,0x1720,0x1722,0x1724, -0x1726,0x1728,0x172a,0x172c,0x172e,0x1730,0x1732,0x1734,0x1736,0x1738,0x173a,0x15ec,0x173c,0x173e,0x1740,0x1742, -0x1744,0x1746,0x1748,0x174a,0x174c,0x174e,0x1750,0x1752,0x1754,0x1756,0x1758,0x175a,0x175c,0x175e,0x1760,0x1762, -0x1764,0x1766,0x1768,0x176a,0x176c,0x176e,0x1770,0x1684,0x1772,0x1774,0x1776,0x1778,0x177a,0x177c,0x177e,0x1780, -0x1782,0x1784,0x1786,0x1788,0x178a,0x178c,0x178e,0x1790,0x1792,0x1794,0x1796,0x1798,0x179a,0x179c,0x179e,0x17a0, -0x17a2,0x17a4,0x17a6,0x17a8,0x17aa,0x17ac,0x17ae,0x17b0,0x17b2,0x17b4,0x17b6,0x17b8,0x17ba,0x17bc,0x17be,0x17c0, -0x17c2,0x17c4,0x17c6,0x17c8,0x17ca,0x17cc,0x17ce,0x17d0,0x17d2,0x17d4,0,0,0x17d6,0,0x17d8,0, -0,0x17da,0x17dc,0x17de,0x17e0,0x17e2,0x17e4,0x17e6,0x17e8,0x17ea,0x17ec,0,0x17ee,0,0x17f0,0, -0,0x17f2,0x17f4,0,0,0,0x17f6,0x17f8,0x17fa,0x17fc,0x17fe,0x1800,0x1802,0x1804,0x1806,0x1808, -0x180a,0x180c,0x180e,0x1810,0x1812,0x1814,0x1816,0x1818,0x181a,0x181c,0x181e,0x1820,0x1822,0x1824,0x1826,0x1828, -0x182a,0x182c,0x182e,0x1830,0x1832,0x1834,0x1836,0x1838,0x183a,0x183c,0x183e,0x1840,0x1842,0x1844,0x1846,0x1848, -0x184a,0x184c,0x184e,0x16ee,0x1850,0x1852,0x1854,0x1856,0x1858,0x185a,0x185a,0x185c,0x185e,0x1860,0x1862,0x1864, -0x1866,0x1868,0x186a,0x17f2,0x186c,0x186e,0x1870,0x1872,0x1874,0x1877,0,0,0x1879,0x187b,0x187d,0x187f, -0x1881,0x1883,0x1885,0x1887,0x180e,0x1889,0x188b,0x188d,0x17d6,0x188f,0x1891,0x1893,0x1895,0x1897,0x1899,0x189b, -0x189d,0x189f,0x18a1,0x18a3,0x18a5,0x1820,0x18a7,0x1822,0x18a9,0x18ab,0x18ad,0x18af,0x18b1,0x17d8,0x1616,0x18b3, -0x18b5,0x18b7,0x16a2,0x1750,0x18b9,0x18bb,0x1830,0x18bd,0x1832,0x18bf,0x18c1,0x18c3,0x17dc,0x18c5,0x18c7,0x18c9, -0x18cb,0x18cd,0x17de,0x18cf,0x18d1,0x18d3,0x18d5,0x18d7,0x18d9,0x184e,0x18db,0x18dd,0x16ee,0x18df,0x1856,0x18e1, -0x18e3,0x18e5,0x18e7,0x18e9,0x1860,0x18eb,0x17f0,0x18ed,0x1862,0x167c,0x18ef,0x1864,0x18f1,0x1868,0x18f3,0x18f5, -0x18f7,0x18f9,0x18fb,0x186c,0x17e8,0x18fd,0x186e,0x18ff,0x1870,0x1901,0x15d4,0x1903,0x1906,0x1909,0x190c,0x190e, -0x1910,0x1912,0x1915,0x1918,0x191b,0x191d,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x191f,0xff1a,0x1922,0,0,0,0,0,0,0,0, -0,0,0x1925,0x1928,0x192c,0x1931,0x1935,0x1938,0x193b,0x193e,0x1941,0x1944,0x1947,0x194a,0x194d,0, -0x1950,0x1953,0x1956,0x1959,0x195c,0,0x195f,0,0x1962,0x1965,0,0x1968,0x196b,0,0x196e,0x1971, -0x1974,0x1977,0x197a,0x197d,0x1980,0x1983,0x1986,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffdc, -0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffe6,0xffe6,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xffdc,0,0,0xffdc,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xffdc,0,0xffe6, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xffe6,0xff01,0xffdc,0,0,0,0,0xff09, -0,0,0,0,0,0xffe6,0xffdc,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x54a,0x14ab,0x54d,0x14b0,0,0,0,0,0,0,0,0,0x550,0,0, -0,0,0,0x14b5,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xff09,0xfe07,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x54a,0x14ab,0x54d,0x14b0,0,0,0, +0,0,0,0,0,0x550,0,0,0,0,0,0x14b5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xff09,0xfe07,0,0,0,0,0, +0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09, +0xff09,0,0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0, +0,0,0,0,0,0,0xff07,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xff09,0xff07,0, +0,0,0,0,0,0,0,0,0,0xff07,0xff09,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x559,0,0,0,0x14c4,0x14c9,0xff09,0,0,0,0,0,0, +0,0,0,0xfe00,0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xff09,0,0,0,0xff07,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0,0,0x14ba,0x14bf,0,0x553,0x556,0xff09,0xff09,0,0,0,0,0,0,0, -0,0,0,0,0xff09,0,0,0,0,0,0,0,0,0,0xff07,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xff09,0xff07,0,0,0,0,0,0,0,0,0, -0,0xff07,0xff09,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x559,0,0,0,0x14c4, -0x14c9,0xff09,0,0,0,0,0,0,0,0,0,0xfe00,0,0,0,0, -0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0, -0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xfe00,0,0,0,0,0,0,0, 0,0x55f,0xfe00,0x14ce,0x14d3,0xfe00,0x14d8,0,0,0,0xff09,0xff07,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -552,59 +564,65 @@ static const uint16_t norm2_nfc_data_trieIndex[9400]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0, +0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6, +0xffe6,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0,0xffe6,0xffe6,0,0xffe6,0xffe6, +0xffe6,0xffe6,0xffe6,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0xffdc,0, -0,0,0,0,0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16, -0x1a18,0x1a1a,0x1804,0x1a1c,0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35, -0x1a37,0x1a39,0x1a3b,0x187b,0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a, -0x1887,0x1a50,0x1a52,0x1688,0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65, -0x1a67,0x1a6a,0x1a6c,0x1a6e,0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b, -0x1a84,0x1a86,0x1a88,0x1a8a,0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e, -0x1aa0,0x1aa2,0x1aa5,0x1aa7,0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1, -0x1ac3,0x1ac5,0x1ac7,0x1ac7,0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf, -0x181a,0x1ae1,0x1ae3,0x1ae5,0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff, -0x1b01,0x1b03,0x1b06,0x1b08,0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c, -0x1b1f,0x1b22,0x1b24,0x1b26,0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d, -0x18a3,0x1b3d,0x1b3f,0x1820,0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53, -0x1b55,0x1b58,0x1b5a,0x1b5c,0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75, -0x1824,0x1b77,0x1b79,0x1b7c,0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92, -0x1616,0x18b3,0x1b94,0x1b96,0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c, -0x1bae,0x1bb0,0x1bb2,0x1bb4,0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc, -0x1bcf,0x1bd2,0x1bd5,0x1bd7,0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed, -0x1bef,0x1bf1,0x1bf3,0x18bb,0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c, -0x1c0e,0x1c10,0x1c12,0x1c14,0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f, -0x1c32,0x1c34,0x1c36,0x1c38,0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d, -0x1686,0x1c50,0x1c53,0x1c55,0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70, -0x18d3,0x1910,0x1c72,0x1c74,0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88, -0x1c8a,0x184a,0x1c8c,0x1c8e,0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8, -0x1caa,0x1cac,0x1cae,0x1cb0,0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc, -0x1ccf,0x1cd1,0x1856,0x1cd3,0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef, -0x1cf2,0x1cf5,0x1cf8,0x1b16,0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11, -0x16aa,0x1d14,0x1d16,0x1d18,0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31, -0x1d33,0x1d35,0x1d37,0x1d39,0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53, -0x1d55,0x1d57,0x1d59,0x18e5,0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72, -0x1d74,0x1d76,0x1d78,0x1d7a,0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91, -0x1d93,0x1d96,0x1d99,0x1d9b,0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5, -0x1db7,0x1db9,0x1dbb,0x1dbd,0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8, -0x1ddb,0x1ddd,0x1ddf,0x1de1,0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8, -0x1dfa,0x1dfc,0x1901,0x1dff,0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b, -0x1e1d,0x1e1f,0x1e21,0x1e23,0x1e25,0x1e27,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0, -0,0,0,0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, -0xff00,0xff00,0xff00,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, +0,0,0,0,0,0,0,0,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xffe6,0xff07,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1a09,0x1a0b,0x1a0d,0x1a0f,0x1a12,0x1802,0x1a14,0x1a16,0x1a18,0x1a1a,0x1804,0x1a1c, +0x1a1e,0x1a20,0x1806,0x1a23,0x1a25,0x1a27,0x1a29,0x1a2c,0x1a2e,0x1a30,0x1a32,0x1a35,0x1a37,0x1a39,0x1a3b,0x187b, +0x1a3d,0x1a40,0x1a42,0x1a44,0x1a46,0x1a48,0x1a4a,0x1a4c,0x1a4e,0x1885,0x1808,0x180a,0x1887,0x1a50,0x1a52,0x1688, +0x1a54,0x180c,0x1a56,0x1a58,0x1a5a,0x1a5c,0x1a5c,0x1a5c,0x1a5e,0x1a61,0x1a63,0x1a65,0x1a67,0x1a6a,0x1a6c,0x1a6e, +0x1a70,0x1a72,0x1a74,0x1a76,0x1a78,0x1a7a,0x1a7c,0x1a7e,0x1a80,0x1a82,0x1a82,0x188b,0x1a84,0x1a86,0x1a88,0x1a8a, +0x1810,0x1a8c,0x1a8e,0x1a90,0x17ba,0x1a92,0x1a94,0x1a96,0x1a98,0x1a9a,0x1a9c,0x1a9e,0x1aa0,0x1aa2,0x1aa5,0x1aa7, +0x1aa9,0x1aab,0x1aad,0x1aaf,0x1ab1,0x1ab4,0x1ab7,0x1ab9,0x1abb,0x1abd,0x1abf,0x1ac1,0x1ac3,0x1ac5,0x1ac7,0x1ac7, +0x1ac9,0x1acc,0x1ace,0x1680,0x1ad0,0x1ad2,0x1ad5,0x1ad7,0x1ad9,0x1adb,0x1add,0x1adf,0x181a,0x1ae1,0x1ae3,0x1ae5, +0x1ae8,0x1aea,0x1aed,0x1aef,0x1af1,0x1af3,0x1af5,0x1af7,0x1af9,0x1afb,0x1afd,0x1aff,0x1b01,0x1b03,0x1b06,0x1b08, +0x1b0a,0x1b0c,0x1614,0x1b0e,0x1b11,0x1b13,0x1b13,0x1b16,0x1b18,0x1b18,0x1b1a,0x1b1c,0x1b1f,0x1b22,0x1b24,0x1b26, +0x1b28,0x1b2a,0x1b2c,0x1b2e,0x1b30,0x1b32,0x1b34,0x181c,0x1b36,0x1b39,0x1b3b,0x1b3d,0x18a3,0x1b3d,0x1b3f,0x1820, +0x1b41,0x1b43,0x1b45,0x1b47,0x1822,0x15de,0x1b49,0x1b4b,0x1b4d,0x1b4f,0x1b51,0x1b53,0x1b55,0x1b58,0x1b5a,0x1b5c, +0x1b5e,0x1b60,0x1b62,0x1b65,0x1b67,0x1b69,0x1b6b,0x1b6d,0x1b6f,0x1b71,0x1b73,0x1b75,0x1824,0x1b77,0x1b79,0x1b7c, +0x1b7e,0x1b80,0x1b82,0x1828,0x1b84,0x1b86,0x1b88,0x1b8a,0x1b8c,0x1b8e,0x1b90,0x1b92,0x1616,0x18b3,0x1b94,0x1b96, +0x1b98,0x1b9a,0x1b9d,0x1b9f,0x1ba1,0x1ba3,0x182a,0x1ba5,0x1ba8,0x1baa,0x1bac,0x190c,0x1bae,0x1bb0,0x1bb2,0x1bb4, +0x1bb6,0x1bb9,0x1bbb,0x1bbd,0x1bbf,0x1bc2,0x1bc4,0x1bc6,0x1bc8,0x16a2,0x1bca,0x1bcc,0x1bcf,0x1bd2,0x1bd5,0x1bd7, +0x1bda,0x1bdc,0x1bde,0x1be0,0x1be2,0x182c,0x1750,0x1be4,0x1be6,0x1be8,0x1bea,0x1bed,0x1bef,0x1bf1,0x1bf3,0x18bb, +0x1bf5,0x1bf7,0x1bfa,0x1bfc,0x1bfe,0x1c01,0x1c04,0x1c06,0x18bd,0x1c08,0x1c0a,0x1c0c,0x1c0e,0x1c10,0x1c12,0x1c14, +0x1c17,0x1c19,0x1c1c,0x1c1e,0x1c21,0x18c1,0x1c23,0x1c25,0x1c28,0x1c2a,0x1c2c,0x1c2f,0x1c32,0x1c34,0x1c36,0x1c38, +0x1c3a,0x1c3a,0x1c3c,0x1c3e,0x18c5,0x1c40,0x1c42,0x1c44,0x1c46,0x1c48,0x1c4b,0x1c4d,0x1686,0x1c50,0x1c53,0x1c55, +0x1c58,0x1c5b,0x1c5e,0x1c60,0x18d1,0x1c62,0x1c65,0x1c68,0x1c6b,0x1c6e,0x1c70,0x1c70,0x18d3,0x1910,0x1c72,0x1c74, +0x1c76,0x1c78,0x1c7b,0x163a,0x18d7,0x1c7d,0x1c7f,0x1842,0x1c82,0x1c85,0x17e6,0x1c88,0x1c8a,0x184a,0x1c8c,0x1c8e, +0x1c90,0x1c93,0x1c93,0x1c96,0x1c98,0x1c9a,0x1c9d,0x1c9f,0x1ca1,0x1ca3,0x1ca6,0x1ca8,0x1caa,0x1cac,0x1cae,0x1cb0, +0x1cb3,0x1cb5,0x1cb7,0x1cb9,0x1cbb,0x1cbd,0x1cbf,0x1cc2,0x1cc5,0x1cc7,0x1cca,0x1ccc,0x1ccf,0x1cd1,0x1856,0x1cd3, +0x1cd6,0x1cd9,0x1cdb,0x1cde,0x1ce0,0x1ce3,0x1ce5,0x1ce7,0x1ce9,0x1ceb,0x1ced,0x1cef,0x1cf2,0x1cf5,0x1cf8,0x1b16, +0x1cfb,0x1cfd,0x1cff,0x1d01,0x1d03,0x1d05,0x1d07,0x1d09,0x1d0b,0x1d0d,0x1d0f,0x1d11,0x16aa,0x1d14,0x1d16,0x1d18, +0x1d1a,0x1d1c,0x1d1e,0x185c,0x1d20,0x1d22,0x1d24,0x1d26,0x1d28,0x1d2b,0x1d2e,0x1d31,0x1d33,0x1d35,0x1d37,0x1d39, +0x1d3c,0x1d3e,0x1d41,0x1d43,0x1d45,0x1d48,0x1d4b,0x1d4d,0x1630,0x1d4f,0x1d51,0x1d53,0x1d55,0x1d57,0x1d59,0x18e5, +0x1d5b,0x1d5d,0x1d5f,0x1d61,0x1d63,0x1d65,0x1d67,0x1d69,0x1d6b,0x1d6d,0x1d70,0x1d72,0x1d74,0x1d76,0x1d78,0x1d7a, +0x1d7d,0x1d80,0x1d82,0x1d84,0x18ef,0x18f1,0x1d86,0x1d88,0x1d8b,0x1d8d,0x1d8f,0x1d91,0x1d93,0x1d96,0x1d99,0x1d9b, +0x1d9d,0x1d9f,0x1da2,0x18f3,0x1da4,0x1da7,0x1daa,0x1dac,0x1dae,0x1db0,0x1db3,0x1db5,0x1db7,0x1db9,0x1dbb,0x1dbd, +0x1dbf,0x1dc1,0x1dc4,0x1dc6,0x1dc8,0x1dca,0x1dcd,0x1dcf,0x1dd1,0x1dd3,0x1dd5,0x1dd8,0x1ddb,0x1ddd,0x1ddf,0x1de1, +0x1de4,0x1de6,0x18ff,0x18ff,0x1de9,0x1deb,0x1dee,0x1df0,0x1df2,0x1df4,0x1df6,0x1df8,0x1dfa,0x1dfc,0x1901,0x1dff, +0x1e01,0x1e03,0x1e05,0x1e07,0x1e09,0x1e0c,0x1e0e,0x1e11,0x1e14,0x1e17,0x1e19,0x1e1b,0x1e1d,0x1e1f,0x1e21,0x1e23, +0x1e25,0x1e27,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, +0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0,0,0,0,0,0, +0,0,0,0,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00, +0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0xff00,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x56e,0x56e,0x56e,0x56e, 0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e, +0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0x56e,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0,0x1e29,0x1e29,0,0x1e29, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x1e29,0,0x1e29,0, -0x1e29,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x1e29,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0, 0,0,0x1e29,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x1e29,0,0,0,0,0x1e29,0,0,0,0x1e29,0,0x1e29,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0x1e27,0,0,0,0,0 +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x1e27,0, +0,0,0,0 }; static const uint16_t norm2_nfc_data_extraData[7722]={ @@ -1094,7 +1112,7 @@ static const uint16_t norm2_nfc_data_extraData[7722]={ }; static const uint8_t norm2_nfc_data_smallFCD[256]={ -0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0x87,0x66,0x66,0x46,0x64,0x44,0x66,0x5b, +0xc0,0xef,3,0x7f,0xdf,0x70,0xcf,0x87,0xc7,0x66,0x66,0x46,0x64,0x44,0x66,0x5b, 0x12,0,0,4,0,0,0,0x43,0x20,2,0x29,0xae,0xc2,0xc0,0xff,0xff, 0xc0,0x72,0xbf,0,0,0,0,0,0,0,0x40,0,0x80,0x88,0,0, 0xfe,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -1114,16 +1132,16 @@ static const uint8_t norm2_nfc_data_smallFCD[256]={ static const UTrie2 norm2_nfc_data_trie={ norm2_nfc_data_trieIndex, - norm2_nfc_data_trieIndex+2612, + norm2_nfc_data_trieIndex+2720, NULL, - 2612, - 6788, + 2720, + 6932, 0x188, - 0xab0, + 0xb1c, 0x0, 0x0, 0x30000, - 0x24b4, + 0x25b0, NULL, 0, FALSE, FALSE, 0, NULL }; diff --git a/deps/icu-small/source/common/norm2allmodes.h b/deps/icu-small/source/common/norm2allmodes.h index 64c84a217c348a..943e83d56704c6 100644 --- a/deps/icu-small/source/common/norm2allmodes.h +++ b/deps/icu-small/source/common/norm2allmodes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/common/normalizer2.cpp b/deps/icu-small/source/common/normalizer2.cpp index af80e98edb89d2..34f1cf063d50bc 100644 --- a/deps/icu-small/source/common/normalizer2.cpp +++ b/deps/icu-small/source/common/normalizer2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/normalizer2impl.cpp b/deps/icu-small/source/common/normalizer2impl.cpp index 84b67b9df02771..906c03a689bc16 100644 --- a/deps/icu-small/source/common/normalizer2impl.cpp +++ b/deps/icu-small/source/common/normalizer2impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/normalizer2impl.h b/deps/icu-small/source/common/normalizer2impl.h index eb026dbecda12a..a6bf967979f48a 100644 --- a/deps/icu-small/source/common/normalizer2impl.h +++ b/deps/icu-small/source/common/normalizer2impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/normlzr.cpp b/deps/icu-small/source/common/normlzr.cpp index 7c4c54ce368e5e..3cf7446f174a4f 100644 --- a/deps/icu-small/source/common/normlzr.cpp +++ b/deps/icu-small/source/common/normlzr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************* * COPYRIGHT: diff --git a/deps/icu-small/source/common/parsepos.cpp b/deps/icu-small/source/common/parsepos.cpp index 26f882051292b8..af6ac6c1f7d1b7 100644 --- a/deps/icu-small/source/common/parsepos.cpp +++ b/deps/icu-small/source/common/parsepos.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2003-2003, International Business Machines diff --git a/deps/icu-small/source/common/patternprops.cpp b/deps/icu-small/source/common/patternprops.cpp index b2c524998667e3..30c3f683914816 100644 --- a/deps/icu-small/source/common/patternprops.cpp +++ b/deps/icu-small/source/common/patternprops.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/patternprops.h b/deps/icu-small/source/common/patternprops.h index 0ceab510a1c071..f309c2dbadb083 100644 --- a/deps/icu-small/source/common/patternprops.h +++ b/deps/icu-small/source/common/patternprops.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/pluralmap.cpp b/deps/icu-small/source/common/pluralmap.cpp index 61c36e4a7f4a3a..d3e892124ea24c 100644 --- a/deps/icu-small/source/common/pluralmap.cpp +++ b/deps/icu-small/source/common/pluralmap.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/deps/icu-small/source/common/pluralmap.h b/deps/icu-small/source/common/pluralmap.h index 63ccf8d31d14f9..76e95c5826003a 100644 --- a/deps/icu-small/source/common/pluralmap.h +++ b/deps/icu-small/source/common/pluralmap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/propname.cpp b/deps/icu-small/source/common/propname.cpp index b638547ff6f801..4107869ee1e0d4 100644 --- a/deps/icu-small/source/common/propname.cpp +++ b/deps/icu-small/source/common/propname.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines diff --git a/deps/icu-small/source/common/propname.h b/deps/icu-small/source/common/propname.h index c20ae45490d9b5..c93d3d75032503 100644 --- a/deps/icu-small/source/common/propname.h +++ b/deps/icu-small/source/common/propname.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines diff --git a/deps/icu-small/source/common/propname_data.h b/deps/icu-small/source/common/propname_data.h index 3acc640b19a9a6..4863b26dc7ec12 100644 --- a/deps/icu-small/source/common/propname_data.h +++ b/deps/icu-small/source/common/propname_data.h @@ -1,104 +1,108 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: propname_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: propname_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/pnamesbuilder.cpp + #ifdef INCLUDED_FROM_PROPNAME_CPP U_NAMESPACE_BEGIN -const int32_t PropNameData::indexes[8]={0x20,0x12d0,0x446f,0x8a58,0x8a58,0x8a58,0x2f,0}; +const int32_t PropNameData::indexes[8]={0x20,0x135c,0x468d,0x8e95,0x8e95,0x8e95,0x2f,0}; -const int32_t PropNameData::valueMaps[1196]={ +const int32_t PropNameData::valueMaps[1231]={ 6,0,0x3d,0,0xd5,0x356,0xd5,0x36c,0xd5,0x381,0xd5,0x397,0xd5,0x3a2,0xd5,0x3c3, 0xd5,0x3d3,0xd5,0x3e2,0xd5,0x3f0,0xd5,0x414,0xd5,0x42b,0xd5,0x443,0xd5,0x45a,0xd5,0x469, 0xd5,0x478,0xd5,0x489,0xd5,0x497,0xd5,0x4a9,0xd5,0x4c3,0xd5,0x4de,0xd5,0x4f3,0xd5,0x510, 0xd5,0x521,0xd5,0x52c,0xd5,0x54b,0xd5,0x561,0xd5,0x572,0xd5,0x582,0xd5,0x59d,0xd5,0x5b6, -0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x62b,0xd5,0x642,0xd5,0x656, -0xd5,0x66c,0xd5,0x680,0xd5,0x696,0xd5,0x6b0,0xd5,0x6c8,0xd5,0x6e4,0xd5,0x6ec,0xd5,0x6f4, -0xd5,0x6fc,0xd5,0x704,0xd5,0x70d,0xd5,0x71a,0xd5,0x72d,0xd5,0x74a,0xd5,0x767,0xd5,0x784, -0xd5,0x7a2,0xd5,0x7c0,0xd5,0x7e4,0xd5,0x7f1,0xd5,0x818,0xd5,0x837,0xd5,0x1000,0x1016,0x860, -0x14f,0xa80,0x16a,0x292f,0xdb,0x294e,0x275,0x2a8c,0x28b,0x2ae6,0x295,0x2d43,0x2b7,0x3458,0x311,0x34c8, -0x31b,0x3756,0x347,0x3794,0x34f,0x40ea,0x3fa,0x4168,0x404,0x418d,0x40a,0x41a7,0x410,0x41c8,0x417,0x41e2, -0xdb,0x4207,0xdb,0x422d,0x41e,0x42b3,0x42f,0x432c,0x442,0x43c9,0x457,0x2000,0x2001,0x4400,0x45e,0x3000, -0x3001,0x448c,0,0x4000,0x400e,0x449e,0,0x44a7,0,0x44c1,0,0x44d2,0,0x44e3,0,0x44f9, -0,0x4502,0,0x451f,0,0x453d,0,0x455b,0,0x4579,0,0x458f,0,0x45a3,0,0x45b9, -0,0x7000,0x7001,0x45d2,0,0x6f5,0x12,0,1,0x12,0x20,0x713,0x49,0,1,7, +0xd5,0x5c7,0xd5,0x5e1,0xd5,0x5f4,0xd5,0x604,0xd5,0x61e,0xd5,0x637,0xd5,0x64e,0xd5,0x662, +0xd5,0x678,0xd5,0x68c,0xd5,0x6a2,0xd5,0x6bc,0xd5,0x6d4,0xd5,0x6f0,0xd5,0x6f8,0xd5,0x700, +0xd5,0x708,0xd5,0x710,0xd5,0x719,0xd5,0x726,0xd5,0x739,0xd5,0x756,0xd5,0x773,0xd5,0x790, +0xd5,0x7ae,0xd5,0x7cc,0xd5,0x7f0,0xd5,0x7fd,0xd5,0x824,0xd5,0x843,0xd5,0x1000,0x1016,0x86c, +0x14f,0xa8c,0x16a,0x2a61,0xdb,0x2a80,0x280,0x2bbe,0x296,0x2c18,0x2a0,0x2e75,0x2c2,0x35d7,0x31f,0x3647, +0x329,0x38f8,0x358,0x3936,0x360,0x42e5,0x413,0x4363,0x41d,0x4388,0x423,0x43a2,0x429,0x43c3,0x430,0x43dd, +0xdb,0x4402,0xdb,0x4428,0x437,0x44d2,0x44d,0x454b,0x460,0x45e8,0x47a,0x2000,0x2001,0x461f,0x481,0x3000, +0x3001,0x46ab,0,0x4000,0x400e,0x46bd,0,0x46c6,0,0x46e0,0,0x46f1,0,0x4702,0,0x4718, +0,0x4721,0,0x473e,0,0x475c,0,0x477a,0,0x4798,0,0x47ae,0,0x47c2,0,0x47d8, +0,0x7000,0x7001,0x47f1,0,0x702,0x12,0,1,0x12,0x20,0x720,0x49,0,1,7, 8,9,0xa,0xb,0xc,0xd,0xe,0xf,0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17, 0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,0x20,0x21,0x22,0x23,0x24,0x54,0x5b,0x67, 0x6b,0x76,0x7a,0x81,0x82,0x84,0x85,0xc8,0xca,0xd6,0xd8,0xda,0xdc,0xde,0xe0,0xe2, 0xe4,0xe6,0xe8,0xe9,0xea,0xf0,0x2e,0x40,0x4c,0x56,0x67,0x72,0x7f,0x8c,0x99,0xa6, 0xb3,0xc0,0xcd,0xda,0xe7,0xf4,0x101,0x10e,0x11b,0x128,0x135,0x142,0x14f,0x15c,0x169,0x176, 0x183,0x190,0x19d,0x1aa,0x1b7,0x1c4,0x1d1,0x1de,0x1eb,0x1fa,0x209,0x218,0x227,0x236,0x245,0x254, -0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x8a5, -1,0,0x17,0x86f,0x880,0x891,0x8a5,0x8bc,0x8d4,0x8e6,0x8fb,0x912,0x927,0x937,0x949,0x966, -0x982,0x994,0x9b1,0x9cd,0x9e9,0x9fe,0xa13,0xa2d,0xa48,0xa63,0xa47,1,0,0x107,0xa8b,0xa98, -0xaab,0xad3,0xaf1,0xb0f,0xb27,0xb52,0xb7c,0xb94,0xba7,0xbba,0xbc9,0xbd8,0xbe7,0xbf6,0xc0d,0xc1e, -0xc31,0xc44,0xc51,0xc5e,0xc6d,0xc7e,0xc93,0xca4,0xcaf,0xcb8,0xcc9,0xcda,0xced,0xcff,0xd12,0xd25, -0xd64,0xd71,0xd7e,0xd8b,0xda0,0xdd0,0xdea,0xe0b,0xe36,0xe59,0xeb7,0xede,0xef9,0xf08,0xf2f,0xf57, -0xf7a,0xf9d,0xfc7,0xfe0,0xfff,0x1022,0x1046,0x1059,0x1073,0x109d,0x10b5,0x10dd,0x1106,0x1119,0x112c,0x113f, -0x1166,0x1175,0x1195,0x11c3,0x11e1,0x120f,0x122b,0x1246,0x125f,0x1278,0x1299,0x12c9,0x12e8,0x130a,0x133e,0x136b, -0x13b0,0x13d1,0x13fb,0x141c,0x1445,0x1458,0x148b,0x14a2,0x14b1,0x14c2,0x14ed,0x1504,0x1535,0x1563,0x15a6,0x15b1, -0x15ea,0x15fb,0x160c,0x1619,0x162c,0x1666,0x168a,0x16ae,0x16e8,0x1720,0x174b,0x1763,0x178f,0x17bb,0x17c8,0x17d7, -0x17f4,0x1816,0x1844,0x1864,0x188b,0x18b2,0x18d1,0x18e4,0x18f5,0x1906,0x192b,0x1950,0x1977,0x19ab,0x19d8,0x19f6, -0x1a09,0x1a22,0x1a5b,0x1a6a,0x1a8a,0x1aac,0x1ace,0x1ae5,0x1afc,0x1b29,0x1b42,0x1b5b,0x1b8c,0x1bb6,0x1bd1,0x1be4, -0x1c03,0x1c0c,0x1c1f,0x1c3d,0x1c5b,0x1c6e,0x1c85,0x1c9a,0x1ccf,0x1cf3,0x1d08,0x1d17,0x1d2a,0x1d4e,0x1d57,0x1d7b, -0x1d92,0x1da5,0x1db4,0x1dbf,0x1de0,0x1df8,0x1e07,0x1e16,0x1e25,0x1e3c,0x1e51,0x1e66,0x1e9f,0x1eb2,0x1ece,0x1ed9, -0x1ee6,0x1f14,0x1f38,0x1f5b,0x1f6e,0x1f90,0x1fa3,0x1fbe,0x1fe1,0x2004,0x2029,0x203a,0x2069,0x2096,0x20ad,0x20c8, -0x20d7,0x2102,0x213a,0x2174,0x21a2,0x21b3,0x21c0,0x21e4,0x21f3,0x220f,0x2229,0x2246,0x227e,0x2293,0x22c0,0x22df, -0x230d,0x232d,0x2361,0x2370,0x239a,0x23bd,0x23e8,0x23f3,0x2404,0x241f,0x2443,0x2450,0x2465,0x248c,0x24b7,0x24ee, -0x2501,0x2512,0x2542,0x2553,0x2562,0x2577,0x2595,0x25a8,0x25bb,0x25d2,0x25ef,0x25fa,0x2603,0x2625,0x263a,0x265f, -0x2676,0x269f,0x26ba,0x26cf,0x26e8,0x2709,0x273e,0x274f,0x2780,0x27a4,0x27b5,0x27ce,0x27d9,0x2806,0x2828,0x2856, -0x2889,0x2898,0x28a9,0x28c6,0x2908,0x1afc,1,0,0x12,0x2965,0x2975,0x2988,0x2998,0x29a8,0x29b7,0x29c7, -0x29d9,0x29ec,0x29fe,0x2a0e,0x2a1e,0x2a2d,0x2a3c,0x2a4c,0x2a59,0x2a68,0x2a7c,0x1bba,1,0,6,0x2aa1, -0x2aac,0x2ab9,0x2ac6,0x2ad3,0x2ade,0x1bfe,1,0,0x1e,0x2afb,0x2b0a,0x2b1f,0x2b34,0x2b49,0x2b5d,0x2b6e, -0x2b82,0x2b95,0x2ba6,0x2bbf,0x2bd1,0x2be2,0x2bf6,0x2c09,0x2c21,0x2c33,0x2c3e,0x2c4e,0x2c5c,0x2c71,0x2c86,0x2c9c, -0x2cb6,0x2ccc,0x2cdc,0x2cf0,0x2d04,0x2d15,0x2d2d,0x1e29,1,0,0x56,0x2d55,0x2d78,0x2d81,0x2d8e,0x2d99, -0x2da2,0x2dad,0x2db6,0x2dcf,0x2dd4,0x2ddd,0x2dfa,0x2e03,0x2e10,0x2e19,0x2e3d,0x2e44,0x2e4d,0x2e60,0x2e6b,0x2e74, -0x2e7f,0x2e98,0x2ea1,0x2eb0,0x2ebb,0x2ec4,0x2ecf,0x2ed8,0x2edf,0x2ee8,0x2ef3,0x2efc,0x2f15,0x2f1e,0x2f2b,0x2f36, -0x2f47,0x2f52,0x2f67,0x2f7e,0x2f87,0x2f90,0x2fa9,0x2fb4,0x2fbd,0x2fc6,0x2fdd,0x2ffa,0x3005,0x3016,0x3021,0x3028, -0x3035,0x3042,0x306f,0x3084,0x308d,0x30a8,0x30cb,0x30ec,0x310d,0x3132,0x3159,0x317a,0x319d,0x31be,0x31e5,0x3206, -0x322b,0x324a,0x3269,0x3288,0x32a5,0x32c6,0x32e7,0x330a,0x332f,0x334e,0x336d,0x338e,0x33b5,0x33da,0x33f9,0x341a, -0x343d,0x20dd,1,0,6,0x3469,0x3478,0x3488,0x3498,0x34a8,0x34b9,0x213b,1,0,0x28,0x34d7, -0x34e3,0x34f1,0x3500,0x350f,0x351f,0x3530,0x3544,0x3559,0x356f,0x3582,0x3596,0x35a6,0x35af,0x35ba,0x35ca,0x35e6, -0x35f8,0x3606,0x3615,0x3621,0x3636,0x364a,0x365d,0x366b,0x367f,0x368d,0x3697,0x36a9,0x36b5,0x36c3,0x36d3,0x36da, -0x36e1,0x36e8,0x36ef,0x36f6,0x370c,0x372d,0x373f,0x237d,1,0,4,0x3767,0x3772,0x377e,0x3788,0x23a3, -1,0,0xa7,0x379f,0x37ac,0x37c1,0x37ce,0x37dd,0x37eb,0x37fa,0x3809,0x381b,0x382a,0x3838,0x3849,0x3858, -0x3867,0x3874,0x3880,0x388f,0x389e,0x38a8,0x38b5,0x38c2,0x38d1,0x38df,0x38ee,0x38fa,0x3904,0x3910,0x3920,0x3930, -0x393e,0x394a,0x395b,0x3967,0x3973,0x3981,0x398e,0x399a,0x39a7,0xca4,0x39b4,0x39c2,0x39dc,0x39e5,0x39f3,0x3a01, -0x3a0d,0x3a1c,0x3a2a,0x3a38,0x3a44,0x3a53,0x3a61,0x3a6f,0x3a7c,0x3a8b,0x3aa6,0x3ab5,0x3ac6,0x3ad7,0x3aea,0x3afc, -0x3b0b,0x3b1d,0x3b2c,0x3b38,0x3b43,0x1db4,0x3b50,0x3b5b,0x3b66,0x3b71,0x3b7c,0x3b97,0x3ba2,0x3bad,0x3bb8,0x3bcb, -0x3bdf,0x3bea,0x3bf9,0x3c08,0x3c13,0x3c1e,0x3c2b,0x3c3a,0x3c48,0x3c53,0x3c6e,0x3c78,0x3c89,0x3c9a,0x3ca9,0x3cba, -0x3cc5,0x3cd0,0x3cdb,0x3ce6,0x3cf1,0x3cfc,0x3d07,0x3d11,0x3d1c,0x3d2c,0x3d37,0x3d45,0x3d52,0x3d5d,0x3d6c,0x3d79, -0x3d86,0x3d95,0x3da2,0x3db3,0x3dc5,0x3dd5,0x3de0,0x3df3,0x3e0a,0x3e18,0x3e25,0x3e30,0x3e3d,0x3e4e,0x3e6a,0x3e80, -0x3e8b,0x3ea8,0x3eb8,0x3ec7,0x3ed2,0x3edd,0x1ece,0x3ee9,0x3ef4,0x3f0c,0x3f1c,0x3f2b,0x3f39,0x3f47,0x3f52,0x3f5d, -0x3f71,0x3f88,0x3fa0,0x3fb0,0x3fc0,0x3fd0,0x3fe2,0x3fed,0x3ff8,0x4002,0x400d,0x401b,0x402e,0x403a,0x4045,0x4050, -0x406c,0x4079,0x4087,0x40a0,0x27ce,0x40af,0x25ef,0x40bc,0x40ca,0x40dc,0x2c00,1,0,6,0x4104,0x4117, -0x4127,0x4135,0x4146,0x4156,0x2c5c,0x12,0,1,0x4180,0x4186,0x2c69,0x12,0,1,0x4180,0x4186, -0x2c76,1,0,3,0x4180,0x4186,0x41bf,0x2c8c,1,0,3,0x4180,0x4186,0x41bf,0x2ca2,1, -0,0xd,0x4249,0x4253,0x425f,0x4266,0x4271,0x4276,0x427d,0x4284,0x428d,0x4292,0x4297,0x42a7,0x373f,0x2d10, -1,0,0xf,0x4249,0x42c6,0x42d0,0x42da,0x42e5,0x3615,0x42ef,0x42fb,0x4303,0x430a,0x4314,0x425f,0x4266, -0x4276,0x431e,0x2d97,1,0,0x11,0x4249,0x433b,0x42da,0x4347,0x4354,0x4362,0x3615,0x436d,0x425f,0x437e, -0x4276,0x438d,0x439b,0x373f,0x372d,0x43a7,0x43b8,0x2e6f,1,0,3,0x43e7,0x43ef,0x43f7,0x2e88,0x36, -1,2,4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200,0x400,0x800,0xe00, -0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000,0x800000,0x1000000,0x2000000, -0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2afb,0x2b0a,0x2b1f,0x2b34,0x442e,0x2b49,0x2b5d,0x4424,0x2b6e,0x2b82, -0x2b95,0x443f,0x2ba6,0x2bbf,0x2bd1,0x4456,0x2be2,0x2bf6,0x2c09,0x447f,0x2c21,0x2c33,0x2c3e,0x2c4e,0x441b,0x2c5c, -0x2c71,0x2c86,0x2c9c,0x2cb6,0x2ccc,0x2cdc,0x2cf0,0x2d04,0x4475,0x2d15,0x2d2d,0x4460 +0x263,0x27d,0x291,0x2a5,0x2c0,0x2cf,0x2d8,0x2e8,0x2f0,0x2f9,0x308,0x311,0x321,0x332,0x343,0x8b2, +1,0,0x17,0x87b,0x88c,0x89d,0x8b1,0x8c8,0x8e0,0x8f2,0x907,0x91e,0x933,0x943,0x955,0x972, +0x98e,0x9a0,0x9bd,0x9d9,0x9f5,0xa0a,0xa1f,0xa39,0xa54,0xa6f,0xa54,1,0,0x112,0xa97,0xaa4, +0xab7,0xadf,0xafd,0xb1b,0xb33,0xb5e,0xb88,0xba0,0xbb3,0xbc6,0xbd5,0xbe4,0xbf3,0xc02,0xc19,0xc2a, +0xc3d,0xc50,0xc5d,0xc6a,0xc79,0xc8a,0xc9f,0xcb0,0xcbb,0xcc4,0xcd5,0xce6,0xcf9,0xd0b,0xd1e,0xd31, +0xd70,0xd7d,0xd8a,0xd97,0xdac,0xddc,0xdf6,0xe17,0xe42,0xe65,0xec3,0xeea,0xf05,0xf14,0xf3b,0xf63, +0xf86,0xfa9,0xfd3,0xfec,0x100b,0x102e,0x1052,0x1065,0x107f,0x10a9,0x10c1,0x10e9,0x1112,0x1125,0x1138,0x114b, +0x1172,0x1181,0x11a1,0x11cf,0x11ed,0x121b,0x1237,0x1252,0x126b,0x1284,0x12a5,0x12d5,0x12f4,0x1316,0x134a,0x1377, +0x13bc,0x13dd,0x1407,0x1428,0x1451,0x1464,0x1497,0x14ae,0x14bd,0x14ce,0x14f9,0x1510,0x1541,0x156f,0x15b2,0x15bd, +0x15f6,0x1607,0x1618,0x1625,0x1638,0x1672,0x1696,0x16ba,0x16f4,0x172c,0x1757,0x176f,0x179b,0x17c7,0x17d4,0x17e3, +0x1800,0x1822,0x1850,0x1870,0x1897,0x18be,0x18dd,0x18f0,0x1901,0x1912,0x1937,0x195c,0x1983,0x19b7,0x19e4,0x1a02, +0x1a15,0x1a2e,0x1a67,0x1a76,0x1a96,0x1ab8,0x1ada,0x1af1,0x1b08,0x1b35,0x1b4e,0x1b67,0x1b98,0x1bc2,0x1bdd,0x1bf0, +0x1c0f,0x1c18,0x1c2b,0x1c49,0x1c67,0x1c7a,0x1c91,0x1ca6,0x1cdb,0x1cff,0x1d14,0x1d23,0x1d36,0x1d5a,0x1d63,0x1d87, +0x1d9e,0x1db1,0x1dc0,0x1dcb,0x1dec,0x1e04,0x1e13,0x1e22,0x1e31,0x1e48,0x1e5d,0x1e72,0x1eab,0x1ebe,0x1eda,0x1ee5, +0x1ef2,0x1f20,0x1f44,0x1f67,0x1f7a,0x1f9c,0x1faf,0x1fca,0x1fed,0x2010,0x2035,0x2046,0x2075,0x20a2,0x20b9,0x20d4, +0x20e3,0x210e,0x2146,0x2180,0x21ae,0x21bf,0x21cc,0x21f0,0x21ff,0x221b,0x2235,0x2252,0x228a,0x229f,0x22cc,0x22eb, +0x2319,0x2339,0x236d,0x237c,0x23a6,0x23c9,0x23f4,0x23ff,0x2410,0x242b,0x244f,0x245c,0x2471,0x2498,0x24c3,0x24fa, +0x250d,0x251e,0x254e,0x255f,0x256e,0x2583,0x25a1,0x25b4,0x25c7,0x25de,0x25fb,0x2606,0x260f,0x2631,0x2646,0x266b, +0x2682,0x26ab,0x26c6,0x26db,0x26f4,0x2715,0x274a,0x275b,0x278c,0x27b0,0x27c1,0x27da,0x27e5,0x2812,0x2834,0x2862, +0x2895,0x28a4,0x28b5,0x28d2,0x2914,0x293b,0x2948,0x295d,0x2981,0x29a7,0x29e0,0x29f1,0x2a15,0x2a20,0x2a2d,0x2a3c, +0x1b91,1,0,0x12,0x2a97,0x2aa7,0x2aba,0x2aca,0x2ada,0x2ae9,0x2af9,0x2b0b,0x2b1e,0x2b30,0x2b40,0x2b50, +0x2b5f,0x2b6e,0x2b7e,0x2b8b,0x2b9a,0x2bae,0x1c4f,1,0,6,0x2bd3,0x2bde,0x2beb,0x2bf8,0x2c05,0x2c10, +0x1c93,1,0,0x1e,0x2c2d,0x2c3c,0x2c51,0x2c66,0x2c7b,0x2c8f,0x2ca0,0x2cb4,0x2cc7,0x2cd8,0x2cf1,0x2d03, +0x2d14,0x2d28,0x2d3b,0x2d53,0x2d65,0x2d70,0x2d80,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36, +0x2e47,0x2e5f,0x1ebe,1,0,0x59,0x2e87,0x2eaa,0x2eb3,0x2ec0,0x2ecb,0x2ed4,0x2edf,0x2ee8,0x2f01,0x2f06, +0x2f0f,0x2f2c,0x2f35,0x2f42,0x2f4b,0x2f6f,0x2f76,0x2f7f,0x2f92,0x2f9d,0x2fa6,0x2fb1,0x2fca,0x2fd3,0x2fe2,0x2fed, +0x2ff6,0x3001,0x300a,0x3011,0x301a,0x3025,0x302e,0x3047,0x3050,0x305d,0x3068,0x3079,0x3084,0x3099,0x30b0,0x30b9, +0x30c2,0x30db,0x30e6,0x30ef,0x30f8,0x310f,0x312c,0x3137,0x3148,0x3153,0x315a,0x3167,0x3174,0x31a1,0x31b6,0x31bf, +0x31da,0x31fd,0x321e,0x323f,0x3264,0x328b,0x32ac,0x32cf,0x32f0,0x3317,0x3338,0x335d,0x337c,0x339b,0x33ba,0x33d7, +0x33f8,0x3419,0x343c,0x3461,0x3480,0x349f,0x34c0,0x34e7,0x350c,0x352b,0x354c,0x356f,0x358a,0x35a3,0x35be,0x2191, +1,0,6,0x35e8,0x35f7,0x3607,0x3617,0x3627,0x3638,0x21ef,1,0,0x2b,0x3656,0x3662,0x3670, +0x367f,0x368e,0x369e,0x36af,0x36c3,0x36d8,0x36ee,0x3701,0x3715,0x3725,0x372e,0x3739,0x3749,0x3765,0x3777,0x3785, +0x3794,0x37a0,0x37b5,0x37c9,0x37dc,0x37ea,0x37fe,0x380c,0x3816,0x3828,0x3834,0x3842,0x3852,0x3859,0x3860,0x3867, +0x386e,0x3875,0x388b,0x38ac,0x38be,0x38d5,0x38e0,0x38ef,0x2448,1,0,4,0x3909,0x3914,0x3920,0x392a, +0x246e,1,0,0xaf,0x3941,0x394e,0x3963,0x3970,0x397f,0x398d,0x399c,0x39ab,0x39bd,0x39cc,0x39da,0x39eb, +0x39fa,0x3a09,0x3a16,0x3a22,0x3a31,0x3a40,0x3a4a,0x3a57,0x3a64,0x3a73,0x3a81,0x3a90,0x3a9c,0x3aa6,0x3ab2,0x3ac2, +0x3ad2,0x3ae0,0x3aec,0x3afd,0x3b09,0x3b15,0x3b23,0x3b30,0x3b3c,0x3b49,0xcb0,0x3b56,0x3b64,0x3b7e,0x3b87,0x3b95, +0x3ba3,0x3baf,0x3bbe,0x3bcc,0x3bda,0x3be6,0x3bf5,0x3c03,0x3c11,0x3c1e,0x3c2d,0x3c48,0x3c57,0x3c68,0x3c79,0x3c8c, +0x3c9e,0x3cad,0x3cbf,0x3cce,0x3cda,0x3ce5,0x1dc0,0x3cf2,0x3cfd,0x3d08,0x3d13,0x3d1e,0x3d39,0x3d44,0x3d4f,0x3d5a, +0x3d6d,0x3d81,0x3d8c,0x3d9b,0x3daa,0x3db5,0x3dc0,0x3dcd,0x3ddc,0x3dea,0x3df5,0x3e10,0x3e1a,0x3e2b,0x3e3c,0x3e4b, +0x3e5c,0x3e67,0x3e72,0x3e7d,0x3e88,0x3e93,0x3e9e,0x3ea9,0x3eb3,0x3ebe,0x3ece,0x3ed9,0x3ee7,0x3ef4,0x3eff,0x3f0e, +0x3f1b,0x3f28,0x3f37,0x3f44,0x3f55,0x3f67,0x3f77,0x3f82,0x3f95,0x3fac,0x3fba,0x3fc7,0x3fd2,0x3fdf,0x3ff0,0x400c, +0x4022,0x402d,0x404a,0x405a,0x4069,0x4074,0x407f,0x1eda,0x408b,0x4096,0x40ae,0x40be,0x40cd,0x40db,0x40e9,0x40f4, +0x40ff,0x4113,0x412a,0x4142,0x4152,0x4162,0x4172,0x4184,0x418f,0x419a,0x41a4,0x41af,0x41bd,0x41d0,0x41dc,0x41e9, +0x41f4,0x4210,0x421d,0x422b,0x4244,0x27da,0x4253,0x25fb,0x4260,0x426e,0x4280,0x428e,0x429a,0x42aa,0x2a15,0x42b8, +0x42c4,0x42cf,0x42da,0x2d1f,1,0,6,0x42ff,0x4312,0x4322,0x4330,0x4341,0x4351,0x2d7b,0x12,0, +1,0x437b,0x4381,0x2d88,0x12,0,1,0x437b,0x4381,0x2d95,1,0,3,0x437b,0x4381,0x43ba, +0x2dab,1,0,3,0x437b,0x4381,0x43ba,0x2dc1,1,0,0x12,0x4444,0x444e,0x445a,0x4461,0x446c, +0x4471,0x4478,0x447f,0x4488,0x448d,0x4492,0x44a2,0x38be,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x2e6a,1,0, +0xf,0x4444,0x44e5,0x44ef,0x44f9,0x4504,0x3794,0x450e,0x451a,0x4522,0x4529,0x4533,0x445a,0x4461,0x4471,0x453d, +0x2ef1,1,0,0x16,0x4444,0x455a,0x44f9,0x4566,0x4573,0x4581,0x3794,0x458c,0x445a,0x459d,0x4471,0x45ac, +0x45ba,0x38be,0x38ac,0x45c6,0x45d7,0x38d5,0x44ae,0x38e0,0x44be,0x38ef,0x3001,1,0,3,0x4606,0x460e, +0x4616,0x301a,0x36,1,2,4,8,0xe,0x10,0x20,0x3e,0x40,0x80,0x100,0x1c0,0x200, +0x400,0x800,0xe00,0x1000,0x2000,0x4000,0x7000,0x8000,0x10000,0x20000,0x40000,0x78001,0x80000,0x100000,0x200000,0x400000, +0x800000,0x1000000,0x2000000,0x4000000,0x8000000,0xf000000,0x10000000,0x20000000,0x30f80000,0x2c2d,0x2c3c,0x2c51,0x2c66,0x464d,0x2c7b,0x2c8f, +0x4643,0x2ca0,0x2cb4,0x2cc7,0x465e,0x2cd8,0x2cf1,0x2d03,0x4675,0x2d14,0x2d28,0x2d3b,0x469e,0x2d53,0x2d65,0x2d70, +0x2d80,0x463a,0x2d8e,0x2da3,0x2db8,0x2dce,0x2de8,0x2dfe,0x2e0e,0x2e22,0x2e36,0x4694,0x2e47,0x2e5f,0x467f }; -const uint8_t PropNameData::bytesTries[12703]={ -0,0x15,0x6d,0xc3,0x16,0x73,0xc1,0xea,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1, +const uint8_t PropNameData::bytesTries[13105]={ +0,0x15,0x6d,0xc3,0x23,0x73,0xc1,0xf7,0x76,0x5f,0x76,0x68,0x77,0x90,0x78,1, 0x64,0x50,0x69,0x10,0x64,1,0x63,0x30,0x73,0x62,0x13,0x74,0x61,0x72,0x74,0x63, 0x60,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x61,0x13,0x69,0x67,0x69,0x74,0x81, 1,0x61,0x24,0x73,0x69,0x1e,0x72,0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c, 0x65,0x63,0x74,0x6f,0x72,0x69,3,0x62,0xc3,0x14,0x68,0x32,0x6f,0x42,0x73,0x13, 0x70,0x61,0x63,0x65,0x5f,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x5f,0x16, -0x72,0x64,0x62,0x72,0x65,0x61,0x6b,0xc3,0x14,0x73,0xa2,0x49,0x74,0xa4,0x2e,0x75, +0x72,0x64,0x62,0x72,0x65,0x61,0x6b,0xc3,0x14,0x73,0xa2,0x49,0x74,0xa4,0x3b,0x75, 3,0x63,0xd9,0x40,0xc,0x69,0x52,0x6e,0x58,0x70,0x12,0x70,0x65,0x72,0x5c,0x13, 0x63,0x61,0x73,0x65,0x5c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xc, 0x12,0x64,0x65,0x6f,0x5b,0x10,0x69,1,0x63,0x3e,0x66,0x1b,0x69,0x65,0x64,0x69, @@ -114,781 +118,807 @@ const uint8_t PropNameData::bytesTries[12703]={ 0x70,0x69,0x6e,0x67,0xd9,0x40,8,0x10,0x63,0xd9,0x40,7,0x62,0xc3,0x13,0x63, 0x34,0x64,0x57,0x65,0x6e,0x66,0x10,0x63,0xd9,0x40,6,0xc2,0xa,2,0x66,0xd9, 0x40,6,0x72,0x28,0x78,0xd9,0x70,0,0x12,0x69,0x70,0x74,0xc2,0xa,0x19,0x65, -0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xd9,0x70,0,1,0x67,0x50,0x6e, -1,0x73,0x3a,0x74,0x18,0x65,0x6e,0x63,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,0x13, -0x14,0x69,0x74,0x69,0x76,0x65,0x65,1,0x6d,0x2e,0x73,0x13,0x74,0x61,0x72,0x74, -0x73,0x19,0x65,0x6e,0x74,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x73,3,0x63,0x66, -0x65,0x72,0x69,0x98,0x72,0x19,0x61,0x69,0x6c,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63, -0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73, -0x73,0xc3,0x11,0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e, -0x69,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59, -0x1d,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9, -0x40,0xa,0x6d,0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64, -0x69,0x63,0x61,0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74, -0xc3,9,0x75,0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61, -0x63,0x74,0x65,0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d, -0x65,0x72,0x69,0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0, -0x12,0x79,0x70,0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98, -0x64,0xa2,0x53,0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd, -0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72, -0x74,0x6d,1,0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63, -0x68,0x65,0x63,0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71, -1,0x63,0xc3,0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe, -0x13,0x6e,0x65,0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17, -0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b, -0xd8,0x40,5,1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68, -0x61,0x72,0x51,1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73, -0x2c,0x74,0x30,0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1, -0x73,0x38,0x77,0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79, -0x6e,0x74,0x61,0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f, -0x6e,0x6d,0x61,0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0, -0xfd,0x69,0xa2,0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98, -0x69,0xa2,0x56,0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63, -0x61,0x73,0x65,0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11, -0x69,0x63,0x1f,0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74, -0x69,0x6f,0x6e,0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63, -0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69, -0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61, -0x6b,0xc3,8,1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f, -0x6d,0x6d,0x65,0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1, -0x62,0x52,0x74,0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70, -0x65,0x72,0x61,0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61, -0x72,0x79,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74, -0x69,0x6e,0x75,0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63, -0x43,2,0x67,0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a, -0x69,0x11,0x6e,0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72, -0x6f,0x75,0x70,0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86, -0x67,0xa2,0x4a,0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65, -0x6e,0x3d,0x1f,0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74, -0x79,0x70,0x65,0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10, -0x74,0xc3,0xb,0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74, -0x69,0x6f,0x6e,0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2, -0x44,0x65,0xa2,0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e, -0x6b,0x39,0x11,0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65, -0x48,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72, -0x65,0x61,0x6b,0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65, -0x35,0x11,0x78,0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c, -0x6e,0x65,0x72,0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13, -0x6d,0x61,0x73,0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0, -0x64,0xa4,0xbd,0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e, -0x64,0x65,0x72,0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69, -0x64,0x74,0x68,0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72, -0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66, -0x69,0x65,0x72,0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c, -0x4e,0x73,0x1a,0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10, -0x65,0xd9,0x40,0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20, -0x14,0x62,0x65,0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69, -0x3e,0x6c,0xa2,0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15, -0x11,0x64,0x69,2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62, -0x72,0x61,0x63,0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15, -0x24,1,0x6c,0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73, -0xc3,0,0x26,0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67, -0x67,0x6c,0x79,0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3, -1,0x6f,0x11,0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1, -6,0x68,0x7c,0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36, -0x6c,0x87,0x74,0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18, -0x61,0x6e,0x67,0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e, -0x74,0x98,0x75,0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61, -0x73,0x65,1,0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c, -0x64,0x65,0x64,0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c, -0x66,0x6b,0x63,0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69, -0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61, -0x2e,0x63,0xa2,0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64, -0x83,0x66,0x3a,0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65, -0x15,0x6f,0x6c,0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61, -0x62,0x6c,0x65,0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62, -0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2, -3,0x61,0x30,0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2, -0x63,0x3a,0x66,0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d, -0x6f,0x6d,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3, -0x15,0x61,0x75,0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63, -0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72, -0x69,0x74,0x69,0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65, -0x73,0x23,0x20,0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72, -0x75,0x65,0x23,0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24, -0x72,0x33,0x13,0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61, -0x79,0x23,0xa2,0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e, -3,0x6b,0x2f,0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72, -0x65,0x6f,0x72,0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e, -0x61,0x76,0x6f,0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3, -0xe0,0x61,0x5c,0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,0x26, -0x73,0xa3,0xf0,0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3, -0xf0,0xa2,0xe6,3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,0x74, -0x62,0x7c,0x74,0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,0x6c, -0x6f,0x77,0xa2,0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,0x65, -0xa2,0xd6,0x14,0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,0xd8, -0xa2,0xca,0x10,0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,0x72, -0x13,0x69,0x67,0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,2, -0x65,0x2c,0x6c,0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,0x6c, -0x30,0x72,0x13,0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,0x11, -0x63,0x63,4,0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10, -0x31,0xa3,0x5b,9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47, -0x30,0x30,0x31,0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37, -0xa3,0x6b,0x36,0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a, -2,0x30,0xa3,0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36, -0x55,0x37,0x57,0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34, -0x51,6,0x33,8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f, -0x32,0x61,0x10,0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75, -0x62,0x6c,0x65,1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62, -0x6f,0x76,0x65,0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48, -0x77,1,0x68,0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33, -0x22,1,0x69,0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74, -0x74,0x6f,0x6c,0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65, -0x72,0x72,0x69,0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d, -0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74, -0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53, -0x70,2,0x61,0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69, -0x6f,0x6e,0x61,0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d, -0x14,0x6f,0x72,0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73, -0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f, -0x28,0x73,0x10,0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61, -0x72,0x6b,0x43,1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72, -0x61,0x6c,0x35,0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72, -2,0x65,0x37,0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68, -0x74,0x20,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65, -0x39,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61, -0x74,0x65,0x49,3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65, -0x61,0x6e,2,0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74, -0x6f,0x72,0x29,0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61, -0x74,0x6f,0x72,0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73, -0x74,0x72,0x6f,0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62, -0x84,0x63,1,0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61, -0x72,0x61,0x74,0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69, -0x63,1,0x6c,0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74, -0x65,0x72,0x3b,0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e, -0x65,0x75,0x74,0x72,0x61,0x6c,0x45,0,0x15,0x6d,0xc7,0x44,0x73,0xc3,0x75,0x76, -0x9c,0x76,0x92,0x77,0xa2,0x8b,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17, -0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74, -0x1e,0x68,0x65,0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, -0xa3,0x74,0x16,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x61,0x36,0x65, -0x7a,0x73,0xa2,0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e, -0x69,0x61,0x74,0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2, -0x6c,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64, -0x3c,0x72,0x19,0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14, -0x69,0x63,0x65,0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3, -0xaf,0x18,0x61,0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b, -0x74,0xa6,0x2b,0x75,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64, -0x63,0x61,0x6e,0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69, -0x6e,0x61,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78, -0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74, -0xa3,0xad,0x15,0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,7,0x6f,0xc1,0x5b,0x6f, -0x54,0x70,0x68,0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b, -0x17,0x6f,0x74,0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f, -0x6d,0x70,0x65,0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c, -0x73,0xa3,0x56,0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65, -0x72,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d, -0x74,0x6f,0x6e,0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6, -0x15,0x64,0x61,0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16, -0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d, -0x9e,0x70,0xa2,0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64, -0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1, -0x61,0x4e,0x73,0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75, -0x62,0x73,0x63,0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73, -0x1b,0x61,0x74,0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1, -0x6c,0x40,0x75,1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, -0xa3,0x8e,0x15,0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70, -0x72,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3, -0x6d,0x62,0xa3,0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d, -0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61, -0x70,0x68,0x73,0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62, -0xa3,0x68,0x63,0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63, -0x61,0x6c,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e, -0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,0x84,0x69,0xa2, -0x5b,0x6d,0x16,0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16, -0x61,0x72,0x69,0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61, -0x73,0x68,0x74,0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac, -1,0x61,0x52,0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d, -0x61,0x74,0x63,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76, -0x12,0x69,0x61,0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e, -0x13,0x68,0x61,0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75, -0x6d,0x62,0x65,0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,4,0x61, -0x68,0x65,0xa2,0x74,0x68,0xa2,0x77,0x69,0xa2,0x7f,0x72,0x1c,0x61,0x6e,0x73,0x70, -0x6f,0x72,0x74,0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62, -0x6f,0x6c,0x73,0xa3,0xcf,3,0x67,0x34,0x69,0x5a,0x6b,0xa2,0x46,0x6d,0x11,0x69, -0x6c,0x49,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62, -0x13,0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16, -0x75,0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c, -0x73,0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65, -0x74,0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x13,0x6c,0x75,0x67,0x75,0x4b,0x10,0x61, -1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66,0x3c,0x72,0x13, -0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14,0x69,0x6e,0x61, -0x67,0x68,0xa3,0x90,0x6d,0x84,0x6e,0xa6,0x1a,0x6f,0xa6,0x4e,0x70,0xa8,2,0x72, -1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10,0x69,0xa2,0xc0, -0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3, -0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,6,0x6f,0x76,0x6f,0x6c,0x72,0xa2,0x51, -0x75,0xa2,0x52,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65,0x78,0x74,2, -0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb6, -0x62,0xa3,0xee,1,0x64,0x32,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61,0x6e,0x6b,0x10, -0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19,0x6f,0x6e,0x65, -0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74,0x65,0x72,0x73, -0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2,0x5c,0x18,0x61, -0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61,0x6e,0x69,0xa5, -3,0x61,0xa2,0x9b,0x65,0xa4,0x1f,0x69,1,0x61,0xa2,0x8f,0x73,0x10,0x63,5, -0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61, -0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66,0x65,0x46,0x6d, -0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61,0xa3,0x66,0x62, -0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d,0x3a,0x73,0x6c, -0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61,0x74,0x1f,0x68, -0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1, -0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8e,0x12,0x61, -0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68, -0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f,0xa3,0xd8,3, -0x68,0xa2,0x4f,0x6c,0xa2,0x65,0x6e,0xa2,0x6a,0x74,0x10,0x68,2,0x61,0x3a,0x65, -0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x16,0x6c,0x70,0x68, -0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,1,0x61, -0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0x7f,0x11,0x6c,0x70,0x1f, -0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, -0xa3,0x5d,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67,0xa2,0xaa,0x14,0x74,0x69,0x6c, -0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xe9,0x15,0x61,0x79,0x61,0x6c, -0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0xea, -0x12,0x61,0x69,0x63,0xa3,0xc6,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74, -0x69,0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68, -0x73,0xa3,0xd7,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69, -0x6d,0x61,0x79,0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e, -0x73,0x69,0x6f,0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75, -0x69,0xa3,0xeb,5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72, -0x66,0x6f,0x72,0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b, -0x21,0x61,0x3a,0x62,0x21,0x65,0x16,0x77,0x74,0x61,0x69,0x6c,0x75,0x65,0xa3,0x8b, -0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x43,0x70,0x36,0x72, -0x6a,0x73,0x14,0x6d,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x18,0x74,0x69,0x63,0x61,0x6c, -0x63,0x68,0x61,0x72,0x1f,0x61,0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e, -0x69,0x74,0x69,0x6f,0x6e,0x85,1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74, -0x61,0x6c,0x64,0x69,0x6e,0x67,0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47, -0x63,0xa2,0x66,0x67,0xa2,0x66,0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70, -0x36,0x73,0x56,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1, -0x6d,0x2e,0x73,0x12,0x69,0x61,0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f, -0x75,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54, -0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17, -0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63, -0xa3,0x58,0x13,0x68,0x69,0x6b,0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d, -0x65,5,0x72,0x35,0x72,0x44,0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63, -0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73, -0x65,0xa2,0x4e,0x13,0x61,0x72,0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72, -0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61, -0x79,0x69,0x6e,0x67,0x63,0x61,0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a, -0x75,0x15,0x63,0x69,0x6e,0x68,0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d, -0x6f,0x6e,0x67,0xa3,0xf3,0x15,0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61, -0x8e,0x6f,1,0x65,0x74,0x6e,0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72, -1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73, -0xa2,0x72,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15, -0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f, -0x73,0xa2,0xa6,0x13,0x64,0x69,0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96, -0x67,0xc3,0x8a,0x6a,0xc1,0x81,0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,0x54, -0x65,0xa2,0x61,0x69,0xa2,0x78,0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,0x69, -0x61,0x6e,0xa3,0xa9,0x12,0x69,0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69, -0x6e,1,0x31,0x82,0x65,0x11,0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,0x94, -0x64,0xa3,0x95,0x65,0xa2,0xe7,0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,0x29, -0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,0x69, -0x6f,0x6e,0x61,0x6c,0x6d,0x24,0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d, -0x65,0x6e,0x74,0x25,1,0x70,0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65, -0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d, -0x2e,0x6e,0x34,0x73,0x10,0x75,0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61, -0x72,1,0x61,0xa3,0xe8,0x62,1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62, -0x61,0x72,0x79,0xa3,0x75,0x17,0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76, -0x1a,0x77,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61, -1,0x6d,0x32,0x76,0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12, -0x65,0x78,0x74,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,0x61, -0x3c,0x6d,0x4c,0x6f,0x64,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16, -0x72,0x6f,0x73,0x68,0x74,0x68,0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,0x79, -0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x38, -0x6e,0x40,0x74,0x9c,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69, -0xa3,0xc1,3,0x61,0x34,0x62,0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12, -0x73,0x75,0x70,0xa2,0xcb,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11, -0x75,0x6e,0xa3,0x42,0x11,0x78,0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c, -0x73,0x97,0x14,0x61,0x6b,0x61,0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f, -0x6f,0x6e,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73, -0xa3,0x6b,0x11,0x78,0x74,0xa3,0x6b,0x67,0xa2,0x84,0x68,0xa4,0x24,0x69,3,0x64, -0x4a,0x6d,0x8e,0x6e,0xa2,0x44,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e, -0x73,0x69,0x6f,0x6e,0x73,0x2b,1,0x63,0x99,0x65,0x1c,0x6f,0x67,0x72,0x61,0x70, -0x68,0x69,0x63,0x64,0x65,0x73,0x63,0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63, -0x68,0x61,0x72,0x61,0x63,0x74,0x65,0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61, -0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63, -0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14, -0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd,0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69, -0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65, -0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x6b,0x72,0xa2,0x6f,0x75,1,0x6a,0x30,0x72,0x14, -0x6d,0x75,0x6b,0x68,0x69,0x43,0x14,0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c, -0x6f,1,0x6d,0x4e,0x72,0x13,0x67,0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2, -0x87,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x87,0x1a,0x65,0x74,0x72,0x69, -0x63,0x73,0x68,0x61,0x70,0x65,0x73,0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65, -0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e,0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74, -0x75,0x61,0x74,0x69,0x6f,0x6e,0x71,0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63, -0xa3,0x88,0x13,0x74,0x68,0x69,0x63,0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b, -0x30,1,0x61,0x38,0x65,0x11,0x78,0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f, -0x17,0x6e,0x64,0x63,0x6f,0x70,0x74,0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3, -0xe4,2,0x61,0xa2,0x48,0x65,0xa2,0xcf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67, -0x61,0x6e,0x61,0x9d,0x10,0x68,1,0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67, -0x61,0x74,0x65,0x73,0xa3,0x4b,1,0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f, -0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73, -0x65,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32, -0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e,0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70, -0x77,0x14,0x69,0x64,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69, -0x64,0x74,0x68,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c, -0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,1, -0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f,0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63, -0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f, -0x6f,0x6d,0x70,0x61,0x74,0x69,0x62,0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f, -0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c,0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64, -1,0x61,0xa3,0xb4,0x62,0xa3,0xb9,0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9, -0x62,0xa6,0x20,0x63,0xa6,0xe8,0x64,0xac,0x5f,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e, -0x96,0x74,0x15,0x68,0x69,0x6f,0x70,0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75, -0x70,0xa2,0x86,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74, -0xa2,0x85,1,0x61,0xa3,0xc8,0x65,0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61, -0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63,0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f, -0x73,0x65,0x64,2,0x61,0x5a,0x63,0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61, -0x70,0x68,0x69,0x63,0x73,0x75,0x70,0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73, -0x11,0x75,0x70,0xa3,0xc3,0x13,0x72,0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c, -0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3,0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74, -0x74,0x65,0x72,0x73,0x61,0x6e,0x64,0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61, -0x36,0x67,0x62,0x6c,0x14,0x62,0x61,0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79, -0x64,0x1f,0x79,0x6e,0x61,0x73,0x74,0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f, -0x72,0x6d,0xa5,1,0x10,0x79,0x1f,0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72, -0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xc2,6,0x6e,0xc0,0xe5,0x6e,0x3e,0x72, -0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14,0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61, -0x92,0x63,0x13,0x69,0x65,0x6e,0x74,1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f, -0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65,0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d, -0x62,0x65,0x72,0x73,0xa3,0x7f,0x13,0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c, -0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69, -0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2, -0x61,0x32,0x6d,0xa2,0x71,0x72,0x12,0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38, -3,0x65,0x4a,0x6d,0x66,0x70,0xa2,0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70, -0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65, -0x14,0x6e,0x64,0x65,0x64,0x61,0xa3,0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65, -0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74, -0x69,0x63,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e, -0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1, -0x61,0xa3,0x51,0x62,0xa3,0x55,0x14,0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69, -0x69,0x23,0x65,0x98,0x68,0xa2,0x47,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62, -0x65,0x74,0x69,0x63,0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74, -0x61,0x74,0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d, -0x69,0x63,0x61,0x6c,0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0, -0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77,0x11,0x6f, -0x6d,0xa3,0xfd,6,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58,0x79,0x1b, -0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b,0x18,0x61, -0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78,0x16,0x64, -0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0,0x12,0x65, -0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61,1,0x68, -0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72,0x6e,0x73, -0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3,0x64,0x14, -0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x42,0x65,0xa2,0x4b,0x6c,0x1a,0x6f,0x63, -0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3,0x6c,0x34,0x6d,0x40,0x73, -0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x93,0x11, -0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16,0x70,0x6c,0x65,0x6d,0x65, -0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76,0x61,0x68,0xa3,0xdd,0x15, -0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61,0x6c,0x69,0x41,5,0x6f, -0xc1,0x46,0x6f,0xa2,0x4f,0x75,0xa4,0xa,0x79,1,0x70,0x90,0x72,0x14,0x69,0x6c, -0x6c,0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c, -0x65,0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74, -2,0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x65,0x13,0x6e,0x64,0x65,0x64,1,0x61,0xa3, -0x9e,0x62,0xa3,0xa0,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79,0x6c,0x6c,0x61,0x62,0x61, -0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70,0xa2,0xa0,0x75,0x17,0x6e, -0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e,0x75,0x6d,0x65,0x72,0x61, -0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70,0x15,0x61,0x74,0x6a,0x61, -0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2,0x64,0x46,0x68,0x9e,0x6d, -0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77, -0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c,0x6d,0x61,0x72,0x6b,0x73, -0x2e,2,0x65,0x40,0x66,0xa6,0x1b,0x73,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65, -0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe0,0x17,0x61, -0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f,0x6e,0x1f,0x69,0x6e,0x64, -0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,0x1b, -0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65,0x73,0x83,0x12,0x74,0x69, -0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73, -0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62, -0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa2,0x98,0x16,0x6e,0x75, -0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74, -0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xda,0x68,0xa4,4,0x6a,0x10, -0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2,0x91,0x73,0xa2,0xa3,0x75, -0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68, -0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,4,0x61,0xa3, -0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,0xa5,0,0x14,0x6f,0x6d, -0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62,0x44,0x64,0x17,0x65,0x6f, -0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75,0x70,0xa3,0x5f,0x14,0x69, -0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18,0x64,0x65,0x6f,0x67,0x72, -0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11,0x78,0x74,4,0x61,0xa3, -0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65,0xa5,0,0x19,0x61,0x64, -0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e, -0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c,0x73,0x9a,0x1d,0x61,0x6e, -0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x9b,0x14,0x72,0x6f, -0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75,0x1d,0x63,0x61,0x73,0x69, -0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3,0xde,0x1d,0x61,0x64,0x69, -0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x63,0x12,0x69,0x61,0x6e, -0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65,0x65,0x60,0x12,0x73,0x75, -0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xff,1,0x6b,0x26, -0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e,0x69,0x7e,0x6f,0xa2,0x5d, -0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1,0x73,0x50,0x76,0x16,0x61, -0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74,0xa2,0xb3,0x14,0x65,0x6e, -0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3,0x5a,1,0x61,0x30,0x6e, -0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c, -0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70,0xa3,0x83,0x11,0x78,0x74, -0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x77,0x13,0x6d,0x69, -0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xab,8,0x6d,0x5f,0x6d, -0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69,0x64,0x65,0x43,0x11,0x65, -0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62,0x37,0x6f,1,0x62,0x28, -0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10,0x72,0x34,0x12,0x72,0x6f, -0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d,0x70,0x3e,0x11,0x65,0x72, -0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1,0x72,0x3b,0x75,0x12,0x61, -0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63,0x61,0x6c,0x41,0x63,0x58, -0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f,0x30,0x14,0x6c,0x61,0x74, -0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c,0x2f,2,0x61,0x36,0x69, -0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10,0x6e,0x22,0x15,0x6f,0x6e, -0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27,0x11,0x6e,0x63,0x27,2, -0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74,0x69,0x6f,0x6e,0x2d,0x10, -0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4,0x61,0x3a,0x66,0x4c,0x68, -0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22,0x17,0x6d,0x62,0x69,0x67, -0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x27, -0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25,0x20,1,0x61,0x30,0x65, -0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72,0x6f,0x77,0x29,0xd,0x6e, -0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49,0x7a,2,0x6c,0x3b,0x70, -0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75,0x16,0x72,0x72,0x6f,0x67, -0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69,0x15,0x6e,0x67,0x6d,0x61, -0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x39,0x63,0x53, -0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61,0x73,0x65,0x6c,0x65,0x74, -0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65,0x72,0x63,0x61,0x73,0x65, -0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73,0x69,0x67,0x6e,0x65,0x64, -0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66,0x5b,0x69,0x59,0x6f,0x4f, -0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0x43,0x61,0x2c, -0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65, -0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33,0x6c,0x35,0x6f,0x36,0x1b, -0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x2d,1,0x70,0x7c, -0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70,0x4c,0x73,0x14,0x79,0x6d, -0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b,0x14,0x75,0x6d,0x62,0x65, -0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x1c,0x65, -0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,0x66,0x9e,0x66, -0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60,0x63,0x31,0x65,0x2f,0x6e, -0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x30,0x73,0x14,0x79,0x6d, -0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29,0x17,0x74,0x68,0x73,0x79, -0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72,0x6d,0x61,0x74,0x41,0x1d, -0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x5b,0x10, -0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, -0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74,0x27,0x75,0x23,0x2a,0x1c, -0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x65,0x28, -0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75,0x6d,0x62,0x65,0x72,0x35, -0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3b,0x63,0x44,0x64, -0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b, -0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75,0x1b,0x72,0x72,0x65,0x6e, -0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12,0x74,0x72,0x6c,0x3f,0x42, -0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f,0x1f,0x65,0x63,0x74,0x6f, -0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x4d,0x63,0x3f,0x66, -0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, -0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69,0x74,0x33,0x1c,0x73,0x68, -0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x47,0x1a,0x63,0x69,0x6d, -0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12,0x6d,0xc1,0xec,0x73,0xa1, -0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73,0x7a,1,0x61,0x2c,0x68, -0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74,0x22,0x74,0x38,0x77,0x4c, -0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18,0x72,0x61,0x69,0x67,0x68, -0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b,0x61,0x66,0x6d,0x61,0x2e, -0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11,0x68,0x65,0x65,1,0x65, -0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67,1,0x61,0x4e,0x65,1, -0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62,0x75,0x74,0x61,0x74,0x13, -0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11,0x61,0x77,0x79,1,0x65, -0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10,0x68,0x7a,1,0x62,0x34, -0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14,0x61,0x72,0x72,0x65,0x65, -0x7d,0x6d,0x6c,0x6e,0xa4,0x18,0x70,0xa4,0x35,0x71,0xa4,0x35,0x72,1,0x65,0x38, -0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68,0x93,1,0x68,0x5f,0x76, -0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61,0x2e,0x65,0xa2,0xeb,0x69, -0x10,0x6d,0x53,0x17,0x6e,0x69,0x63,0x68,0x61,0x65,0x61,0x6e,0,0x12,0x6e,0x76, -0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42,0x7a,0x13,0x61,0x79,0x69, -0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65,0x6b,0x68,0xa3,0x4c,0x11, -0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a,0x77,0x13,0x65,0x6e,0x74, -0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e,0x74,0x10,0x68,0xa3,0x4f, -0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77,0xa3,0x52,0x12,0x6f,0x64, -0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a,0x72,0x12,0x65,0x73,0x68, -0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3,0x47,0x10,0x65,0xa3,0x48, -0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68,0x40,0x6b,0x5e,0x6c,0x66, -0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c,0xa1,1,0x65,0x32,0x75, -0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68,0xa3,0x41,0x12,0x61,0x70, -0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44,0x61,0x34,0x62,0x4a,0x64, -0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79,0x11,0x69,0x6e,0x97,0x12, -0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,1,0x61,0x30,0x68,0x14,0x61,0x6d, -0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x11,0x65,0x6d,0x51,2,0x6f, -0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f,0x10,0x6e,0x55,0x1a,0x6f, -0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21,0x10,0x6e,0x57,0x10,0x65, -0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66,0x7b,0x66,0x42,0x67,0x7a, -0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12,0x61,0x64,0x68,0x4f,2, -0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65,0x6d,0x6b,0x61,0x74,0x68, -0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10,0x68,0x33,0x10,0x61,1, -0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65,0x3e,1,0x68,0x28,0x74, -0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1,0x68,0x3b,0x6d,0x1a,0x7a, -0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d,2,0x61,0x3a,0x68,0x44, -0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b,1,0x66,0x47,0x70,0x10, -0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2c,0x62,0x4c,0x64,0x86,0x65,0x31,1, -0x69,0x38,0x6c,1,0x61,0x28,0x65,0x10,0x66,0x27,0x11,0x70,0x68,0x25,0x10,0x6e, -0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61,0x73,0x6b,0x69,0x79, -0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29,0x74,0x10,0x68,0x2b, -0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68,0x2f,7,0x6e,0x2e, -0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a,0x6f,0x69,0x6e,0x69, -0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67, -0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e,0x74,0x2b,0x63,0x23, -0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f,0x69,0x6e,0x69,0x6e, -0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x25,0x19, -0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0,0x13,0x6e,0xc0,0xcd, -0x73,0x46,0x73,0x42,0x75,0x72,0x77,0x7e,0x78,0x96,0x7a,0x10,0x77,0x58,0x14,0x73, -0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67,0x53,0x70,0x28,0x75,0x30,0x79,0x57, -0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x53,0x15, -0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a,0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f, -0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e,0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50, -0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c, -0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f, -0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72,0x69,0x63,0x47,0x15,0x78,0x74,0x6c, -0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x45,0x10,0x70, -0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x49, -1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69, -0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63, -0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68, -0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65,0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74, -0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d,4,0x32,0x5f,0x33,0x61,0x65,0x34, -0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e,0x3b,0x19,0x62,0x72,0x65,0x77,0x6c, -0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28,0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65, -0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d,0x3e,1,0x66,0x3e,0x73,0x11,0x65, -0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62,0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e, -0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c,0x63,0x74,0x65,0x76,0x67,1,0x66, -0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64,0x43,0x61,0x40,0x62,0x70,0x63,0xa2, -0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11,0x75,0x65,0x39,2,0x69,0x23,0x6c, -0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x24,0x17,0x70,0x68,0x61, -0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27,0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72, -0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c, -0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1,0x65,0x2a,0x6f,0x11,0x74,0x68,0x27, -0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51,0x6d,0x33,0x6f,0x28,0x70,0x69,0x72, -0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74,0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74, -0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74,0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a, -0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x6b,1, -0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f,0x6e,0x74,0x65,0x78,0x74,0x51,0x18, -0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b, -0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61,0x38,0x75,0x18,0x6e,0x63,0x74,0x75, -0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65,0x6e,0x74,0x68,0x65,0x73,0x69,0x73, -0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72,0x65,0x74,0x75,0x72,0x6e,0x35,0x10, -0x78,0x36,0x18,0x63,0x6c,0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,1,0x64,0x42, -0x6e,1,0x6f,0x32,0x75,0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65, -0x21,1,0x65,0x2e,0x69,0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d, -0x61,0x6c,0x23,0,0x18,0x6e,0xc3,0x79,0x74,0xc1,0x2f,0x77,0x5d,0x77,0x80,0x78, -0xa2,0x44,0x79,0xa2,0x4e,0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a, -0x7a,0xa3,0x67,0x11,0x78,0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x30,0x6d,0x34, -0x73,0x11,0x79,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1, -0x61,0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67, -0x63,0x69,0x74,0x69,0xa3,0x92,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11, -0x65,0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xb5,0x76, -1,0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3, -0x63,5,0x67,0x36,0x67,0x68,0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10, -0x68,0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74, -0x61,0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61, -1,0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x56,0x66, -0x11,0x6e,0x67,0x99,6,0x6c,0x1c,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74, -0xa3,0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10, -0x67,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99,0x10,0x69,0xa3,0x99, -1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12,0x6c,0x6f,0x67,0x75, -2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f,0x10,0x65,0x89,0x12, -0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3,0x62,0x10,0x75,0x68, -0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f,0x77,0x6e,0xa3,0x67, -0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0,0xef,0x71,0xa2,0xc1, -0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c,0x75,0xa2,0x58,0x79, -1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c,0x6a,0xa3,0x60,0x6e, -0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69,0x6e,0x61,0x67,0x72, -0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91,0x68,0x62,0x12,0x61, -0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3,0xa6,0x17,0x6e,0x77, -0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,0x11,0x72,0x61,0xa2,0x98,0x16,0x73,0x6f, -0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71,0x14,0x61,0x6e,0x65, -0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61,0x2a,0x72,0x10,0x64, -0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64,0x61,0xa3,0x97,0x12, -0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72,0xa2,0x6f,0x15,0x61, -0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3,0x7e,0x14,0x72,0x69, -0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85,0x11,0x6e,0x77,0xa3, -0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e,0x6a,0x48,0x6f,0x4e, -0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13,0x6a,0x61,0x6e,0x67, -0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d,0x6e,0xa2,0x83,0x6f, -0xa2,0xbc,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b,0x61,0x6c,0x74,0x65, -0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72,0x64,0xa3,0x5c,0x11, -0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61,0x3e,0x6c,0x4e,0x6e, -0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b,0x10,0x67,0xa2,0x5a, -0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3,0x7b,0x76,0xa3,0x7c, -0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63,0xa2,0xa5,0x14,0x69, -0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3, -0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3,0x90,0x11,0x72,0x6d, -0xa3,0x59,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x6a,0x73,0x11,0x68,0x75,0xa3, -0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74,0x61,0x65,0x61,0x6e, -0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x16,0x77,0x74,0x61,0x69,0x6c,0x75,0x65,0x97, -1,0x67,0x2e,0x6f,0xa2,0x57,0x10,0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67, -0x3e,0x6c,0x50,0x72,0xa2,0x7a,0x73,0x11,0x6d,0x61,0x84,0x12,0x6e,0x79,0x61,0x85, -1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10,0x6d,0x5b,1,0x63,0xa2,0x55,0x64, -5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,0x14,0x75,0x72,0x6b,0x69,0x63,0xa3,0x58, -0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69,0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3, -0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x85,0x68, -0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68,0x61,0x72,0x61,0x62,0x69,0x61,0x6e, -0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69,0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61, -0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3,0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d, -2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f,0x11,0x79,0x61,0x5f,0x10,0x68,0xa3, -0x58,0x68,0xc2,0x9c,0x6b,0xc1,0xcf,0x6b,0xa2,0xdc,0x6c,0xa4,0x5d,0x6d,8,0x6f, -0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86,0x79,1,0x61,0x28,0x6d,0x10,0x72, -0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64,0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3, -0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14,0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10, -0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65,0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2, -0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x34,0x65,0xa0,0x69,0xa2,0x83,0x6c,0x11, -0x79,0x6d,0x55,3,0x68,0x32,0x6c,0x48,0x6e,0x54,0x79,0x10,0x61,0xa3,0x55,1, -0x61,0x26,0x6a,0xa3,0xa0,0x13,0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61, -0x6c,0x61,0x6d,0x55,1,0x64,0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61, -0x6e,0xa3,0x79,0xa2,0x54,0x12,0x61,0x69,0x63,0xa3,0x54,2,0x65,0x72,0x6e,0x84, -0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69,0x63,1,0x63,0x3c, -0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x56,0x15,0x75, -0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d,0x61,0x79,0x65,0x6b, -0xa3,0x73,0x10,0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3, -0x8c,0x11,0x61,0x6f,0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70,0x36,0x74,0x11,0x68, -0x69,0xa3,0x78,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3,0x8a,0x61,0x2e,0x68, -0x98,0x6e,0x11,0x64,0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e,0x48,0x74,0x56,0x79, -0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3,0x78,0x10,0x69,0xa3, -0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61,0x6b,0x61,0x6e,0x61, -0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61,0x8d,3,0x61,0x3c, -0x6d,0x4e,0x6f,0x5a,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0x91,0x10,0x72, -0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,1,0x65,0x24,0x72,0x4f,0x10,0x72, -0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61,0x5c,0x65,0x90,0x69, -0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2,0x6c,0x11,0x61,0x6e, -0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2,0x6e,0x42,0x6f,0x46, -0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53,0x10,0x6e,0x53,0x10, -0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52,0x11,0x68,0x61,0xa3, -0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10,0x62,0x80,0x10,0x75, -0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,0x61,0x72,1,0x61,0xa3,0x53,0x62, -0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x60,0x69,0xa2,0x79,0x6a,2,0x61,0x30,0x70, -0x44,0x75,0x11,0x72,0x63,0xa3,0x94,0x11,0x76,0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73, -0x65,0xa3,0x4e,0x11,0x61,0x6e,0xa3,0x69,6,0x6c,0x1a,0x6c,0x34,0x6d,0x3a,0x72, -0x40,0x75,0x11,0x6e,0x67,0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x11,0x6e,0x67,0xa3, -0x4b,0x11,0x6b,0x74,0x8d,0x61,0x3a,0x65,0x86,0x69,0x11,0x72,0x61,0x48,0x13,0x67, -0x61,0x6e,0x61,0x49,1,0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3, -0xa2,0x42,5,0x73,0xc,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f, -0x77,0x67,0x28,0x69,0x43,0x6f,0x77,0x44,0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46, -0x11,0x65,0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70, -0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64, -0x66,0x68,0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70, -0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61, -0x76,0x69,0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23, -0x64,0xc0,0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f, -0x8e,0x72,0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b, -0x68,0x69,0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f, -1,0x6b,0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90, -0x15,0x6f,0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b, -1,0x61,0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89, -0x12,0x74,0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,0x75,0x11,0x70,0x6c,0xa2, -0x87,0x13,0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15, -0x6e,0x61,0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,0x11,0x72,0x74, -0x33,2,0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63, -0x37,0x10,0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69, -0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,0x11, -0x62,0x61,0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa2,0xf9, -0x63,6,0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2, -0x69,0x2a,0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69, -0x6f,0x74,0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d, -0x6f,0x6e,0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3, -0x65,0x61,0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e, -0x50,0x72,0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e, -0x69,0x61,0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64, -0x69,0x61,0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69, -0xa2,0x68,0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f, -0x6b,0x65,0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,5, -0x6e,0x43,0x6e,0x44,0x72,0x6c,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13, -0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x61,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68, -0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x9c,1,0x61,0x3e,0x6d, -2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69,0x61,0x6e,0x27,0x10,0x62, -0x24,0x11,0x69,0x63,0x25,0x66,0x30,0x67,0x36,0x68,0x11,0x6f,0x6d,0xa3,0xa1,0x11, -0x61,0x6b,0xa3,0x93,0x11,0x68,0x62,0xa3,0x9f,5,0x6f,0x36,0x6f,0x4e,0x72,0x5e, -0x75,1,0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13, -0x6e,0x65,0x73,0x65,0x8f,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f,0x2b,0x10, -0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11,0x6d,0x69, -0xa3,0x41,0x61,0x2e,0x65,0x82,0x6c,0x11,0x69,0x73,0xa1,3,0x6c,0x3a,0x6d,0x48, -0x73,0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e, -0x65,0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86, -0x13,0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29, -3,0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a, -0x61,0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17, -0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c, -0x65,0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21, -0x6f,0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a, -0x72,0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79, -0x22,0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65, -0x73,0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73, -0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e, -0x3a,0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10, -0x6f,0x21,9,0x72,0x31,0x72,0x34,0x73,0x5c,0x74,0x31,0x76,0x33,0x78,0x10,0x78, -0x21,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64, -0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d,0x35,0x70,0x18,0x61,0x63,0x69,0x6e, -0x67,0x6d,0x61,0x72,0x6b,0x35,0x63,0x44,0x65,0x5c,0x6c,0x6a,0x6f,0x78,0x70,1, -0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,2,0x6e,0x23,0x6f,0x24,0x72, -0x25,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x23,0x10,0x78,0x26,0x13,0x74,0x65,0x6e,0x64, -0x27,0x28,1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21, -9,0x6e,0x4a,0x6e,0x34,0x6f,0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10, -0x75,0x2a,0x14,0x6d,0x65,0x72,0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65, -0x72,0x21,0x14,0x65,0x74,0x74,0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31, -0x74,0x32,0x12,0x65,0x72,0x6d,0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65, -0x3d,0x2e,0x10,0x70,0x2f,0x10,0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63, -0x52,0x65,0x64,0x66,0x72,0x6c,2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65, -0x72,0x29,0x10,0x74,0x22,0x12,0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24, -0x12,0x6f,0x73,0x65,0x25,0x10,0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f, -0x26,0x13,0x72,0x6d,0x61,0x74,0x27,0xd,0x6c,0x76,0x6f,0x36,0x6f,0x30,0x72,0x38, -0x73,0x60,0x78,0x10,0x78,0x21,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x24,0x69, -0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f, -0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c,0x65,0x71,0x75,0x6f,0x74, -0x65,0x3f,0x6c,0x50,0x6d,0x56,0x6e,2,0x65,0x36,0x6c,0x39,0x75,0x2c,0x14,0x6d, -0x65,0x72,0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39,1,0x65,0x23,0x66, -0x35,3,0x62,0x37,0x69,0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e, -0x11,0x75,0x6d,0x2a,0x12,0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29, -0x65,0x3d,0x65,0x40,0x66,0x5e,0x68,0x6c,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b, -0x61,0x6e,0x61,0x27,0x10,0x78,0x2e,0x13,0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75, -0x6d,0x6c,0x65,0x74,0x2f,0x10,0x6f,0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x65, -0x24,0x6c,0x3d,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x3d,0x61, -0x46,0x63,0x52,0x64,1,0x6f,0x24,0x71,0x41,0x18,0x75,0x62,0x6c,0x65,0x71,0x75, -0x6f,0x74,0x65,0x41,0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72,0x31,2, -0x63,0x32,0x6e,0x3c,0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c,0x6f,0x73, -0x65,0x25,0x20,0x12,0x6f,0x6e,0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8,0x73,0x4c, -0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20,0,0x70, -0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c,0x6f,0xff, -8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c,0xff,0xf, -0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d,0x61,0x72, -0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3,0,0x16, -0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0,0,0, -0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0,0x16,0x70, -0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61, -0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c,0x70,0x65, -0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61,0x73,0x73, -0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe,0x30,0xf8, -0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80,0,0, -0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8,0,0, -0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69,0x76,0x61, -0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0,0,0x64, -0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0,0x1f,0x72, -0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9, -0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75,0x13,0x6d, -0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67, -0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6,0x80,1, -3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,8, -0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62,0x65,0x72, -0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x80,0, -0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xf9, -0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79,0x6d,0xa4, -0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15,0x64,0x69, -0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0xff,4, -0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74,0x16,0x68, -0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5,0xc0,1, -0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61,0x6c,0x70, -0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0,0,0x10, -0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, -0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f,0x28,0x74, -0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74, -0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74,0x65,0x72, -0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73,0x65,0x70, -0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96,0x65,0x1b, -0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80,0xe6,0x80, -1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b,0x72,0x72, -0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0,0,0x22, -0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e,1,0x6e, -0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f,0x72,0x70, -0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0,0x19,0x62, -0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63,0xd9,0x80, -0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74,0x75, -0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c,0x65,0x74, -0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74,0xa7,0, -0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xe9,0, -0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7,0 +0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xd9,0x70,0,1,0x67,0x6a,0x6e, +1,0x73,0x54,0x74,0x13,0x65,0x6e,0x63,0x65,1,0x62,0x34,0x74,0x16,0x65,0x72, +0x6d,0x69,0x6e,0x61,0x6c,0x67,0x13,0x72,0x65,0x61,0x6b,0xc3,0x13,0x14,0x69,0x74, +0x69,0x76,0x65,0x65,1,0x6d,0x2e,0x73,0x13,0x74,0x61,0x72,0x74,0x73,0x19,0x65, +0x6e,0x74,0x73,0x74,0x61,0x72,0x74,0x65,0x72,0x73,3,0x63,0x66,0x65,0x72,0x69, +0x98,0x72,0x19,0x61,0x69,0x6c,0x63,0x61,0x6e,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c, +0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,0x11, +0xd8,0x40,0xa,0x11,0x63,0x63,0xc3,0x11,0x11,0x72,0x6d,0x58,0x1e,0x69,0x6e,0x61, +0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,0x1d,0x74,0x6c, +0x65,0x63,0x61,0x73,0x65,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,0xa,0x6d, +0x42,0x6e,0x48,0x70,0xa2,0xda,0x71,0xa4,9,0x72,0x15,0x61,0x64,0x69,0x63,0x61, +0x6c,0x55,0x12,0x61,0x74,0x68,0x4f,6,0x6f,0x39,0x6f,0x32,0x74,0xc3,9,0x75, +0x54,0x76,0xd9,0x30,0,0x12,0x6e,0x63,0x68,0x1f,0x61,0x72,0x61,0x63,0x74,0x65, +0x72,0x63,0x6f,0x64,0x65,0x70,0x6f,0x69,0x6e,0x74,0x51,0x14,0x6d,0x65,0x72,0x69, +0x63,1,0x74,0x32,0x76,0x13,0x61,0x6c,0x75,0x65,0xd9,0x30,0,0x12,0x79,0x70, +0x65,0xc3,9,0x61,0xa2,0x77,0x63,0xa2,0x82,0x66,2,0x63,0x98,0x64,0xa2,0x53, +0x6b,1,0x63,0x56,0x64,1,0x69,0x42,0x71,1,0x63,0xc3,0xd,0x75,0x17,0x69, +0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xd,0x13,0x6e,0x65,0x72,0x74,0x6d,1, +0x69,0x42,0x71,1,0x63,0xc3,0xf,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63, +0x6b,0xc3,0xf,0x13,0x6e,0x65,0x72,0x74,0x71,1,0x69,0x42,0x71,1,0x63,0xc3, +0xe,0x75,0x17,0x69,0x63,0x6b,0x63,0x68,0x65,0x63,0x6b,0xc3,0xe,0x13,0x6e,0x65, +0x72,0x74,0x6f,1,0x69,0x42,0x71,1,0x63,0xc3,0xc,0x75,0x17,0x69,0x63,0x6b, +0x63,0x68,0x65,0x63,0x6b,0xc3,0xc,0x13,0x6e,0x65,0x72,0x74,0x6b,0xd8,0x40,5, +1,0x31,0xd9,0x40,0xb,0x6d,0x10,0x65,0xd9,0x40,5,0x12,0x68,0x61,0x72,0x51, +1,0x61,0x2c,0x72,0x12,0x69,0x6e,0x74,0x7f,0x10,0x74,2,0x73,0x2c,0x74,0x30, +0x77,0x10,0x73,0x77,0x11,0x79,0x6e,0x75,0x12,0x65,0x72,0x6e,1,0x73,0x38,0x77, +0x18,0x68,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x77,0x14,0x79,0x6e,0x74,0x61, +0x78,0x75,1,0x6d,0x3c,0x75,0x1a,0x6f,0x74,0x61,0x74,0x69,0x6f,0x6e,0x6d,0x61, +0x72,0x6b,0x53,0x12,0x61,0x72,0x6b,0x53,0x66,0xc1,0xb9,0x69,0xc0,0xfd,0x69,0xa2, +0x6f,0x6a,0xa2,0xca,0x6c,4,0x62,0xc3,8,0x63,0x8c,0x65,0x98,0x69,0xa2,0x56, +0x6f,2,0x65,0x4b,0x67,0x4c,0x77,0x11,0x65,0x72,0x4c,0x13,0x63,0x61,0x73,0x65, +0x4c,0x16,0x6d,0x61,0x70,0x70,0x69,0x6e,0x67,0xd9,0x40,4,0x11,0x69,0x63,0x1f, +0x61,0x6c,0x6f,0x72,0x64,0x65,0x72,0x65,0x78,0x63,0x65,0x70,0x74,0x69,0x6f,0x6e, +0x4b,0xd8,0x40,4,0x11,0x63,0x63,0xc3,0x10,0x18,0x61,0x64,0x63,0x61,0x6e,0x6f, +0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69,0x6e,0x67,0x63, +0x6c,0x61,0x73,0x73,0xc3,0x10,0x16,0x6e,0x65,0x62,0x72,0x65,0x61,0x6b,0xc3,8, +1,0x64,0x44,0x73,1,0x63,0xd9,0x40,3,0x6f,0x16,0x63,0x6f,0x6d,0x6d,0x65, +0x6e,0x74,0xd9,0x40,3,2,0x63,0x80,0x65,0x90,0x73,0x40,1,0x62,0x52,0x74, +0x46,1,0x61,0x40,0x72,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f,0x70,0x65,0x72,0x61, +0x74,0x6f,0x72,0x47,0x11,0x72,0x74,0x41,0x44,0x1c,0x69,0x6e,0x61,0x72,0x79,0x6f, +0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x45,0x3e,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75, +0x65,0x3f,0x10,0x6f,0x42,0x16,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x43,2,0x67, +0xc3,6,0x6f,0x26,0x74,0xc3,7,0x11,0x69,0x6e,1,0x63,0x4a,0x69,0x11,0x6e, +0x67,1,0x67,0x2e,0x74,0x12,0x79,0x70,0x65,0xc3,7,0x13,0x72,0x6f,0x75,0x70, +0xc3,6,0x48,0x15,0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x49,0x66,0x86,0x67,0xa2,0x4a, +0x68,3,0x61,0x36,0x65,0x58,0x73,0x68,0x79,0x13,0x70,0x68,0x65,0x6e,0x3d,0x1f, +0x6e,0x67,0x75,0x6c,0x73,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x74,0x79,0x70,0x65, +0xc3,0xb,0x10,0x78,0x3a,0x14,0x64,0x69,0x67,0x69,0x74,0x3b,0x10,0x74,0xc3,0xb, +0x16,0x75,0x6c,0x6c,0x63,0x6f,0x6d,0x70,0x1f,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e, +0x65,0x78,0x63,0x6c,0x75,0x73,0x69,0x6f,0x6e,0x33,2,0x63,0xa2,0x44,0x65,0xa2, +0x4b,0x72,3,0x61,0x34,0x62,0x84,0x65,0x8a,0x6c,0x12,0x69,0x6e,0x6b,0x39,0x11, +0x70,0x68,0x7c,0x12,0x65,0x6d,0x65,3,0x62,0x5e,0x63,0x30,0x65,0x48,0x6c,0x12, +0x69,0x6e,0x6b,0x39,0x1a,0x6c,0x75,0x73,0x74,0x65,0x72,0x62,0x72,0x65,0x61,0x6b, +0xc3,0x12,0x14,0x78,0x74,0x65,0x6e,0x64,0x37,0x12,0x61,0x73,0x65,0x35,0x11,0x78, +0x74,0x37,0xc2,5,1,0x62,0xc3,0x12,0x6d,0xd9,0x20,0,0x1c,0x6e,0x65,0x72, +0x61,0x6c,0x63,0x61,0x74,0x65,0x67,0x6f,0x72,0x79,0xc2,5,0x13,0x6d,0x61,0x73, +0x6b,0xd9,0x20,0,0x61,0xa2,0x50,0x62,0xa2,0x7e,0x63,0xa2,0xf0,0x64,0xa4,0xbd, +0x65,2,0x61,0x3a,0x6d,0x58,0x78,0x10,0x74,0x30,0x14,0x65,0x6e,0x64,0x65,0x72, +0x31,0xc2,4,0x1b,0x73,0x74,0x61,0x73,0x69,0x61,0x6e,0x77,0x69,0x64,0x74,0x68, +0xc3,4,0x12,0x6f,0x6a,0x69,0x92,1,0x6d,0x3c,0x70,0x1a,0x72,0x65,0x73,0x65, +0x6e,0x74,0x61,0x74,0x69,0x6f,0x6e,0x95,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72, +0x96,0x13,0x62,0x61,0x73,0x65,0x99,3,0x67,0x44,0x68,0x4a,0x6c,0x4e,0x73,0x1a, +0x63,0x69,0x69,0x68,0x65,0x78,0x64,0x69,0x67,0x69,0x74,0x23,0x10,0x65,0xd9,0x40, +0,0x11,0x65,0x78,0x23,1,0x6e,0x38,0x70,0x11,0x68,0x61,0x20,0x14,0x62,0x65, +0x74,0x69,0x63,0x21,0x11,0x75,0x6d,0x79,4,0x63,0xc3,0,0x69,0x3e,0x6c,0xa2, +0x57,0x6d,0xa2,0x64,0x70,1,0x62,0xd9,0x40,0xd,0x74,0xc3,0x15,0x11,0x64,0x69, +2,0x63,0x54,0x6d,0x74,0x70,0x1b,0x61,0x69,0x72,0x65,0x64,0x62,0x72,0x61,0x63, +0x6b,0x65,0x74,0xd8,0x40,0xd,0x13,0x74,0x79,0x70,0x65,0xc3,0x15,0x24,1,0x6c, +0x30,0x6f,0x14,0x6e,0x74,0x72,0x6f,0x6c,0x25,0x12,0x61,0x73,0x73,0xc3,0,0x26, +0x14,0x69,0x72,0x72,0x6f,0x72,1,0x65,0x38,0x69,0x16,0x6e,0x67,0x67,0x6c,0x79, +0x70,0x68,0xd9,0x40,1,0x10,0x64,0x27,2,0x61,0x32,0x6b,0xc3,1,0x6f,0x11, +0x63,0x6b,0xc3,1,0x11,0x6e,0x6b,0x7b,0x10,0x67,0xd9,0x40,1,6,0x68,0x7c, +0x68,0x54,0x69,0x85,0x6f,0xa2,0x6f,0x77,4,0x63,0x30,0x6b,0x36,0x6c,0x87,0x74, +0x8b,0x75,0x89,1,0x66,0x8d,0x6d,0x8f,0x11,0x63,0x66,0x91,0x18,0x61,0x6e,0x67, +0x65,0x73,0x77,0x68,0x65,0x6e,4,0x63,0x44,0x6c,0x6c,0x6e,0x7e,0x74,0x98,0x75, +0x18,0x70,0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x89,0x12,0x61,0x73,0x65,1, +0x66,0x30,0x6d,0x14,0x61,0x70,0x70,0x65,0x64,0x8f,0x14,0x6f,0x6c,0x64,0x65,0x64, +0x8d,0x18,0x6f,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x64,0x87,0x1c,0x66,0x6b,0x63, +0x63,0x61,0x73,0x65,0x66,0x6f,0x6c,0x64,0x65,0x64,0x91,0x18,0x69,0x74,0x6c,0x65, +0x63,0x61,0x73,0x65,0x64,0x8b,0x13,0x6d,0x70,0x65,0x78,0x33,0x61,0x2e,0x63,0xa2, +0x48,0x66,0xd9,0x40,2,1,0x6e,0x72,0x73,0x10,0x65,3,0x64,0x83,0x66,0x3a, +0x69,0x4a,0x73,0x17,0x65,0x6e,0x73,0x69,0x74,0x69,0x76,0x65,0x65,0x15,0x6f,0x6c, +0x64,0x69,0x6e,0x67,0xd9,0x40,2,0x17,0x67,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65, +0x85,0x13,0x6f,0x6e,0x69,0x63,0x1f,0x61,0x6c,0x63,0x6f,0x6d,0x62,0x69,0x6e,0x69, +0x6e,0x67,0x63,0x6c,0x61,0x73,0x73,0xc3,2,0x10,0x63,0xc3,2,3,0x61,0x30, +0x65,0x34,0x69,0xa2,0x41,0x74,0xc3,3,0x11,0x73,0x68,0x29,2,0x63,0x3a,0x66, +0x58,0x70,0x2c,0x16,0x72,0x65,0x63,0x61,0x74,0x65,0x64,0x2d,0x1d,0x6f,0x6d,0x70, +0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x74,0x79,0x70,0x65,0xc3,3,0x15,0x61,0x75, +0x6c,0x74,0x69,0x67,0x1f,0x6e,0x6f,0x72,0x61,0x62,0x6c,0x65,0x63,0x6f,0x64,0x65, +0x70,0x6f,0x69,0x6e,0x74,0x2b,0x2a,0x10,0x61,0x2e,0x15,0x63,0x72,0x69,0x74,0x69, +0x63,0x2f,3,0x66,0x34,0x6e,0x3e,0x74,0x42,0x79,0x22,0x11,0x65,0x73,0x23,0x20, +0x13,0x61,0x6c,0x73,0x65,0x21,0x20,0x10,0x6f,0x21,0x22,0x12,0x72,0x75,0x65,0x23, +0xa,0x6b,0x5b,0x6f,0x23,0x6f,0x3c,0x72,0x4c,0x76,1,0x69,0x24,0x72,0x33,0x13, +0x72,0x61,0x6d,0x61,0x33,0x10,0x76,0x22,0x14,0x65,0x72,0x6c,0x61,0x79,0x23,0xa2, +0xe2,0x13,0x69,0x67,0x68,0x74,0xa3,0xe2,0x6b,0x58,0x6c,0x74,0x6e,3,0x6b,0x2f, +0x6f,0x30,0x72,0x21,0x75,0x12,0x6b,0x74,0x61,0x2f,0x19,0x74,0x72,0x65,0x6f,0x72, +0x64,0x65,0x72,0x65,0x64,0x21,1,0x61,0x24,0x76,0x31,0x18,0x6e,0x61,0x76,0x6f, +0x69,0x63,0x69,0x6e,0x67,0x31,0xa2,0xe0,0x12,0x65,0x66,0x74,0xa3,0xe0,0x61,0x5c, +0x62,0xa2,0x77,0x63,0xa2,0x96,0x64,0xa4,0xa,0x69,1,0x6f,0x26,0x73,0xa3,0xf0, +0x1a,0x74,0x61,0x73,0x75,0x62,0x73,0x63,0x72,0x69,0x70,0x74,0xa3,0xf0,0xa2,0xe6, +3,0x62,0xa0,0x6c,0xa3,0xe4,0x72,0xa3,0xe8,0x74,2,0x61,0x74,0x62,0x7c,0x74, +0x14,0x61,0x63,0x68,0x65,0x64,1,0x61,0x3e,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa2, +0xca,0x13,0x6c,0x65,0x66,0x74,0xa3,0xc8,0x13,0x62,0x6f,0x76,0x65,0xa2,0xd6,0x14, +0x72,0x69,0x67,0x68,0x74,0xa3,0xd8,0xa2,0xd6,0x10,0x72,0xa3,0xd8,0xa2,0xca,0x10, +0x6c,0xa3,0xc8,0x12,0x6f,0x76,0x65,0xa2,0xe6,1,0x6c,0x30,0x72,0x13,0x69,0x67, +0x68,0x74,0xa3,0xe8,0x12,0x65,0x66,0x74,0xa3,0xe4,0xa2,0xdc,2,0x65,0x2c,0x6c, +0xa3,0xda,0x72,0xa3,0xde,0x12,0x6c,0x6f,0x77,0xa2,0xdc,1,0x6c,0x30,0x72,0x13, +0x69,0x67,0x68,0x74,0xa3,0xde,0x12,0x65,0x66,0x74,0xa3,0xda,0x11,0x63,0x63,4, +0x31,0x3c,0x32,0xa2,0x42,0x33,0xa2,0x56,0x38,0xa2,0x64,0x39,0x10,0x31,0xa3,0x5b, +9,0x35,0xa,0x35,0x3f,0x36,0x41,0x37,0x43,0x38,0x45,0x39,0x47,0x30,0x30,0x31, +0x3c,0x32,0x42,0x33,0x4e,0x34,0x3d,0x34,1,0x33,0xa3,0x67,0x37,0xa3,0x6b,0x36, +0x10,0x38,0xa3,0x76,0x38,1,0x32,0xa3,0x7a,0x39,0xa3,0x81,0x3a,2,0x30,0xa3, +0x82,0x32,0xa3,0x84,0x33,0xa3,0x85,9,0x35,0xa,0x35,0x53,0x36,0x55,0x37,0x57, +0x38,0x59,0x39,0x5b,0x30,0x49,0x31,0x4b,0x32,0x4d,0x33,0x4f,0x34,0x51,6,0x33, +8,0x33,0x63,0x34,0x65,0x35,0x67,0x36,0x69,0x30,0x5d,0x31,0x5f,0x32,0x61,0x10, +0x34,0xa3,0x54,2,0x61,0xa3,0xea,0x62,0xa3,0xe9,0x6f,0x13,0x75,0x62,0x6c,0x65, +1,0x61,0x30,0x62,0x13,0x65,0x6c,0x6f,0x77,0xa3,0xe9,0x13,0x62,0x6f,0x76,0x65, +0xa3,0xea,0xb,0x6e,0xc0,0xca,0x72,0x5f,0x72,0x46,0x73,0xa2,0x48,0x77,1,0x68, +0x24,0x73,0x33,0x17,0x69,0x74,0x65,0x73,0x70,0x61,0x63,0x65,0x33,0x22,1,0x69, +0x30,0x6c,2,0x65,0x3d,0x69,0x4b,0x6f,0x3f,0x18,0x67,0x68,0x74,0x74,0x6f,0x6c, +0x65,0x66,0x74,0x22,2,0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69, +0x64,0x65,0x3f,0x17,0x6d,0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x3d,0x15,0x73,0x6f, +0x6c,0x61,0x74,0x65,0x4b,0x30,0x1e,0x65,0x67,0x6d,0x65,0x6e,0x74,0x73,0x65,0x70, +0x61,0x72,0x61,0x74,0x6f,0x72,0x31,0x6e,0xa2,0x41,0x6f,0xa2,0x53,0x70,2,0x61, +0x66,0x64,0x86,0x6f,0x1b,0x70,0x64,0x69,0x72,0x65,0x63,0x74,0x69,0x6f,0x6e,0x61, +0x6c,1,0x66,0x32,0x69,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x4d,0x14,0x6f,0x72, +0x6d,0x61,0x74,0x41,0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61, +0x72,0x61,0x74,0x6f,0x72,0x2f,1,0x66,0x41,0x69,0x4d,1,0x6f,0x28,0x73,0x10, +0x6d,0x43,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x43, +1,0x6e,0x35,0x74,0x19,0x68,0x65,0x72,0x6e,0x65,0x75,0x74,0x72,0x61,0x6c,0x35, +0x65,0x88,0x65,0x98,0x66,0xa2,0x6a,0x6c,0x20,1,0x65,0x30,0x72,2,0x65,0x37, +0x69,0x49,0x6f,0x39,0x18,0x66,0x74,0x74,0x6f,0x72,0x69,0x67,0x68,0x74,0x20,2, +0x65,0x38,0x69,0x48,0x6f,0x16,0x76,0x65,0x72,0x72,0x69,0x64,0x65,0x39,0x17,0x6d, +0x62,0x65,0x64,0x64,0x69,0x6e,0x67,0x37,0x15,0x73,0x6f,0x6c,0x61,0x74,0x65,0x49, +3,0x6e,0x25,0x73,0x27,0x74,0x29,0x75,0x15,0x72,0x6f,0x70,0x65,0x61,0x6e,2, +0x6e,0x3c,0x73,0x46,0x74,0x18,0x65,0x72,0x6d,0x69,0x6e,0x61,0x74,0x6f,0x72,0x29, +0x14,0x75,0x6d,0x62,0x65,0x72,0x25,0x17,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72, +0x27,1,0x69,0x28,0x73,0x10,0x69,0x47,0x1f,0x72,0x73,0x74,0x73,0x74,0x72,0x6f, +0x6e,0x67,0x69,0x73,0x6f,0x6c,0x61,0x74,0x65,0x47,0x61,0x4e,0x62,0x84,0x63,1, +0x6f,0x24,0x73,0x2d,0x1c,0x6d,0x6d,0x6f,0x6e,0x73,0x65,0x70,0x61,0x72,0x61,0x74, +0x6f,0x72,0x2d,2,0x6c,0x3b,0x6e,0x2b,0x72,0x13,0x61,0x62,0x69,0x63,1,0x6c, +0x30,0x6e,0x14,0x75,0x6d,0x62,0x65,0x72,0x2b,0x14,0x65,0x74,0x74,0x65,0x72,0x3b, +0x2e,1,0x6e,0x45,0x6f,0x1c,0x75,0x6e,0x64,0x61,0x72,0x79,0x6e,0x65,0x75,0x74, +0x72,0x61,0x6c,0x45,0,0x15,0x6d,0xc7,0x81,0x73,0xc3,0x8b,0x76,0x9c,0x76,0x92, +0x77,0xa2,0x8b,0x79,0x10,0x69,2,0x6a,0x3c,0x72,0x68,0x73,0x17,0x79,0x6c,0x6c, +0x61,0x62,0x6c,0x65,0x73,0xa3,0x48,0x12,0x69,0x6e,0x67,0xa2,0x74,0x1e,0x68,0x65, +0x78,0x61,0x67,0x72,0x61,0x6d,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x74,0x16, +0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0xa3,0x49,2,0x61,0x36,0x65,0x7a,0x73,0xa2, +0x6c,0x12,0x73,0x75,0x70,0xa3,0x7d,1,0x69,0xa3,0x9f,0x72,0x1e,0x69,0x61,0x74, +0x69,0x6f,0x6e,0x73,0x65,0x6c,0x65,0x63,0x74,0x6f,0x72,0x73,0xa2,0x6c,0x19,0x73, +0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x7d,1,0x64,0x3c,0x72,0x19, +0x74,0x69,0x63,0x61,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x91,0x14,0x69,0x63,0x65, +0x78,0x74,0xa2,0xaf,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0xaf,0x18,0x61, +0x72,0x61,0x6e,0x67,0x63,0x69,0x74,0x69,0xa3,0xfc,0x73,0xa2,0x4b,0x74,0xa6,0x2b, +0x75,2,0x63,0x82,0x67,0x92,0x6e,0x1f,0x69,0x66,0x69,0x65,0x64,0x63,0x61,0x6e, +0x61,0x64,0x69,0x61,0x6e,0x61,0x62,0x6f,0x1f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c, +0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73,0x62,0x17,0x65,0x78,0x74,0x65,0x6e, +0x64,0x65,0x64,0xa3,0xad,0x11,0x61,0x73,0x62,0x12,0x65,0x78,0x74,0xa3,0xad,0x15, +0x61,0x72,0x69,0x74,0x69,0x63,0xa3,0x78,7,0x6f,0xc1,0x5b,0x6f,0x54,0x70,0x68, +0x75,0xa2,0x43,0x79,1,0x6c,0x2c,0x72,0x12,0x69,0x61,0x63,0x3b,0x17,0x6f,0x74, +0x69,0x6e,0x61,0x67,0x72,0x69,0xa3,0x8f,0x18,0x72,0x61,0x73,0x6f,0x6d,0x70,0x65, +0x6e,0x67,0xa3,0xda,1,0x61,0x32,0x65,0x14,0x63,0x69,0x61,0x6c,0x73,0xa3,0x56, +0x12,0x63,0x69,0x6e,0x1f,0x67,0x6d,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x6c,0x65, +0x74,0x74,0x65,0x72,0x73,0x2d,2,0x6e,0x48,0x70,0x76,0x74,0x1d,0x74,0x6f,0x6e, +0x73,0x69,0x67,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa5,6,0x15,0x64,0x61, +0x6e,0x65,0x73,0x65,0xa2,0x9b,0x12,0x73,0x75,0x70,0xa2,0xdb,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa3,0xdb,4,0x61,0xa2,0xa8,0x65,0x5c,0x6d,0x9e,0x70,0xa2, +0x4b,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f,0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63, +0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa5,5,0x10,0x72,1,0x61,0x4e,0x73, +0x12,0x63,0x72,0x69,0x1f,0x70,0x74,0x73,0x61,0x6e,0x64,0x73,0x75,0x62,0x73,0x63, +0x72,0x69,0x70,0x74,0x73,0x73,0x14,0x6e,0x64,0x73,0x75,0x62,0x73,0x1b,0x61,0x74, +0x68,0x6f,0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,1,0x6c,0x40,0x75, +1,0x61,0x6e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x15, +0x65,0x6d,0x65,0x6e,0x74,0x61,1,0x6c,0x50,0x72,0x1e,0x79,0x70,0x72,0x69,0x76, +0x61,0x74,0x65,0x75,0x73,0x65,0x61,0x72,0x65,0x61,1,0x61,0xa3,0x6d,0x62,0xa3, +0x6e,3,0x61,0x5c,0x6d,0x78,0x70,0xa2,0x41,0x73,0x13,0x79,0x6d,0x62,0x6f,0x1f, +0x6c,0x73,0x61,0x6e,0x64,0x70,0x69,0x63,0x74,0x6f,0x67,0x72,0x61,0x70,0x68,0x73, +0xa5,5,0x14,0x72,0x72,0x6f,0x77,0x73,2,0x61,0xa3,0x67,0x62,0xa3,0x68,0x63, +0xa3,0xfa,0x13,0x61,0x74,0x68,0x65,0x1f,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x6f, +0x70,0x65,0x72,0x61,0x74,0x6f,0x72,0x73,0xa3,0x6a,0x19,0x75,0x6e,0x63,0x74,0x75, +0x61,0x74,0x69,0x6f,0x6e,0xa3,0x8e,0x61,0x5a,0x68,0x84,0x69,0xa2,0x5b,0x6d,0x16, +0x61,0x6c,0x6c,0x66,0x6f,0x72,0x6d,1,0x73,0xa3,0x54,0x76,0x16,0x61,0x72,0x69, +0x61,0x6e,0x74,0x73,0xa3,0x54,1,0x6d,0x36,0x75,0x16,0x72,0x61,0x73,0x68,0x74, +0x72,0x61,0xa3,0xa1,0x15,0x61,0x72,0x69,0x74,0x61,0x6e,0xa3,0xac,1,0x61,0x52, +0x6f,0x13,0x72,0x74,0x68,0x61,0x1f,0x6e,0x64,0x66,0x6f,0x72,0x6d,0x61,0x74,0x63, +0x6f,0x6e,0x74,0x72,0x6f,0x6c,0x73,0xa3,0xf7,1,0x72,0x2e,0x76,0x12,0x69,0x61, +0x6e,0xa3,0x79,0x12,0x61,0x64,0x61,0xa3,0xd9,1,0x64,0x50,0x6e,0x13,0x68,0x61, +0x6c,0x61,0x50,0x1d,0x61,0x72,0x63,0x68,0x61,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65, +0x72,0x73,0xa3,0xf9,0x13,0x64,0x68,0x61,0x6d,0xa3,0xf8,4,0x61,0x68,0x65,0xa2, +0x8a,0x68,0xa2,0x8d,0x69,0xa2,0x95,0x72,0x1c,0x61,0x6e,0x73,0x70,0x6f,0x72,0x74, +0x61,0x6e,0x64,0x6d,0x61,0x70,0xa2,0xcf,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0xa3,0xcf,4,0x67,0x58,0x69,0x7e,0x6b,0xa2,0x58,0x6d,0xa2,0x5a,0x6e,0x12,0x67, +0x75,0x74,0xa4,0x10,0x19,0x63,0x6f,0x6d,0x70,0x6f,0x6e,0x65,0x6e,0x74,0x73,0xa5, +0x11,2,0x61,0x2a,0x62,0x32,0x73,0xa3,0x60,0x12,0x6c,0x6f,0x67,0xa3,0x62,0x13, +0x61,0x6e,0x77,0x61,0xa3,0x65,3,0x6c,0x52,0x74,0x56,0x76,0x5e,0x78,0x16,0x75, +0x61,0x6e,0x6a,0x69,0x6e,0x67,0xa2,0x7c,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0xa3,0x7c,0x10,0x65,0xa3,0x70,0x12,0x68,0x61,0x6d,0xa3,0xae,0x12,0x69,0x65,0x74, +0xa3,0xb7,0x11,0x72,0x69,0xa3,0xdc,0x11,0x69,0x6c,0x49,0x13,0x6c,0x75,0x67,0x75, +0x4b,0x10,0x61,1,0x61,0x24,0x69,0x53,0x11,0x6e,0x61,0x3d,2,0x62,0x34,0x66, +0x3c,0x72,0x13,0x68,0x75,0x74,0x61,0xa3,0xfb,0x13,0x65,0x74,0x61,0x6e,0x57,0x14, +0x69,0x6e,0x61,0x67,0x68,0xa3,0x90,0x6d,0x84,0x6e,0xa6,0x34,0x6f,0xa6,0x6d,0x70, +0xa8,0x29,0x72,1,0x65,0x5c,0x75,1,0x6d,0x2a,0x6e,0x11,0x69,0x63,0x67,0x10, +0x69,0xa2,0xc0,0x1d,0x6e,0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,0xa3,0xc0,0x13,0x6a,0x61,0x6e,0x67,0xa3,0xa3,6,0x6f,0x86,0x6f,0x6c, +0x72,0xa2,0x61,0x75,0xa2,0x62,0x79,0x14,0x61,0x6e,0x6d,0x61,0x72,0x58,0x12,0x65, +0x78,0x74,2,0x61,0xa3,0xb6,0x62,0xa3,0xee,0x65,0x13,0x6e,0x64,0x65,0x64,1, +0x61,0xa3,0xb6,0x62,0xa3,0xee,1,0x64,0x52,0x6e,0x15,0x67,0x6f,0x6c,0x69,0x61, +0x6e,0x6a,0x12,0x73,0x75,0x70,0xa4,0xd,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74, +0xa5,0xd,0x10,0x69,0xa2,0xec,0x13,0x66,0x69,0x65,0x72,1,0x6c,0x3c,0x74,0x19, +0x6f,0x6e,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0xa3,0x8a,0x15,0x65,0x74,0x74, +0x65,0x72,0x73,0x2d,0x10,0x6f,0xa3,0xed,1,0x6c,0x44,0x73,0x11,0x69,0x63,0xa2, +0x5c,0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5c,0x13,0x74,0x61, +0x6e,0x69,0xa5,3,0x61,0xa2,0x9b,0x65,0xa4,0x29,0x69,1,0x61,0xa2,0x8f,0x73, +0x10,0x63,5,0x70,0x18,0x70,0xa2,0x71,0x73,0x36,0x74,0x17,0x65,0x63,0x68,0x6e, +0x69,0x63,0x61,0x6c,0x81,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x8f,0x61,0xa2,0x66, +0x65,0x46,0x6d,0x19,0x61,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,1,0x61, +0xa3,0x66,0x62,0xa3,0x69,0x17,0x6c,0x6c,0x61,0x6e,0x65,0x6f,0x75,0x73,2,0x6d, +0x3a,0x73,0x6c,0x74,0x17,0x65,0x63,0x68,0x6e,0x69,0x63,0x61,0x6c,0x81,0x11,0x61, +0x74,0x1f,0x68,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,1,0x61,0xa3,0x66,0x62,0xa3,0x69,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73, +0x8e,0x12,0x61,0x6e,0x64,1,0x61,0x3c,0x70,0x19,0x69,0x63,0x74,0x6f,0x67,0x72, +0x61,0x70,0x68,0x73,0xa3,0xcd,0x14,0x72,0x72,0x6f,0x77,0x73,0xa3,0x73,0x10,0x6f, +0xa3,0xd8,4,0x68,0xa2,0x52,0x6c,0xa2,0x68,0x6e,0xa2,0x6d,0x72,0xa2,0x7d,0x74, +0x10,0x68,2,0x61,0x3a,0x65,0x4a,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72, +0x73,0x7f,0x16,0x6c,0x70,0x68,0x61,0x6e,0x75,0x6d,0xa3,0x5d,0x16,0x6d,0x61,0x74, +0x69,0x63,0x61,0x6c,1,0x61,0x36,0x6f,0x17,0x70,0x65,0x72,0x61,0x74,0x6f,0x72, +0x73,0x7f,0x11,0x6c,0x70,0x1f,0x68,0x61,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x73, +0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5d,1,0x61,0x3e,0x6a,0x12,0x6f,0x6e,0x67, +0xa2,0xaa,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3,0xaa,0x13,0x6a,0x61,0x6e,0x69,0xa3, +0xe9,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x4f,1,0x64,0x34,0x69,0x15,0x63,0x68, +0x61,0x65,0x61,0x6e,0xa3,0xea,0x12,0x61,0x69,0x63,0xa3,0xc6,0x13,0x63,0x68,0x65, +0x6e,0xa5,0xc,2,0x65,0x66,0x6e,0x98,0x72,0x14,0x6f,0x69,0x74,0x69,0x63,1, +0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xd7, +0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0xd6,0x17,0x74,0x65,0x69,0x6d,0x61,0x79, +0x65,0x6b,0xa2,0xb8,0x12,0x65,0x78,0x74,0xa2,0xd5,0x16,0x65,0x6e,0x73,0x69,0x6f, +0x6e,0x73,0xa3,0xd5,0x18,0x64,0x65,0x6b,0x69,0x6b,0x61,0x6b,0x75,0x69,0xa3,0xeb, +5,0x6b,0x1b,0x6b,0x3c,0x6f,0x40,0x75,0x18,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72, +0x6d,0x73,0x7b,0x10,0x6f,0xa3,0x92,0x14,0x62,0x6c,0x6f,0x63,0x6b,0x21,0x61,0x44, +0x62,0x21,0x65,0x10,0x77,1,0x61,0xa5,0xe,0x74,0x14,0x61,0x69,0x6c,0x75,0x65, +0xa3,0x8b,0x16,0x62,0x61,0x74,0x61,0x65,0x61,0x6e,0xa3,0xef,5,0x70,0x4b,0x70, +0x46,0x72,0x7a,0x73,1,0x61,0x30,0x6d,0x13,0x61,0x6e,0x79,0x61,0xa3,0x7a,0x11, +0x67,0x65,0xa5,0xf,0x18,0x74,0x69,0x63,0x61,0x6c,0x63,0x68,0x61,0x72,0x1f,0x61, +0x63,0x74,0x65,0x72,0x72,0x65,0x63,0x6f,0x67,0x6e,0x69,0x74,0x69,0x6f,0x6e,0x85, +1,0x69,0x46,0x6e,0x1e,0x61,0x6d,0x65,0x6e,0x74,0x61,0x6c,0x64,0x69,0x6e,0x67, +0x62,0x61,0x74,0x73,0xa3,0xf2,0x11,0x79,0x61,0x47,0x63,0xa2,0x66,0x67,0xa2,0x66, +0x6c,1,0x63,0xa2,0x57,0x64,5,0x70,0x2d,0x70,0x36,0x73,0x56,0x74,0x14,0x75, +0x72,0x6b,0x69,0x63,0xa3,0xbf,0x11,0x65,0x72,1,0x6d,0x2e,0x73,0x12,0x69,0x61, +0x6e,0xa3,0x8c,0x11,0x69,0x63,0xa3,0xf1,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61, +0x62,0x69,0x61,0x6e,0xa3,0xbb,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68, +0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0xf0,0x17,0x75,0x6e,0x67,0x61,0x72,0x69, +0x61,0x6e,0xa5,4,0x14,0x74,0x61,0x6c,0x69,0x63,0xa3,0x58,0x13,0x68,0x69,0x6b, +0x69,0xa3,0x9d,0x10,0x72,0x85,0x12,0x68,0x61,0x6d,0x65,5,0x72,0x35,0x72,0x44, +0x73,0x64,0x75,1,0x61,0xa3,0x4e,0x6e,0x17,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x71,0x17,0x69,0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xa2,0x4e,0x13,0x61,0x72, +0x65,0x61,0xa3,0x4e,0x1b,0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76, +0x69,0xa3,0xf6,0x61,0x40,0x68,0x82,0x6c,0x19,0x61,0x79,0x69,0x6e,0x67,0x63,0x61, +0x72,0x64,0x73,0xa3,0xcc,2,0x68,0x38,0x6c,0x4a,0x75,0x15,0x63,0x69,0x6e,0x68, +0x61,0x75,0xa3,0xf5,0x17,0x61,0x77,0x68,0x68,0x6d,0x6f,0x6e,0x67,0xa3,0xf3,0x15, +0x6d,0x79,0x72,0x65,0x6e,0x65,0xa3,0xf4,1,0x61,0x8e,0x6f,1,0x65,0x74,0x6e, +0x16,0x65,0x74,0x69,0x63,0x65,0x78,0x74,0xa2,0x72,1,0x65,0x2c,0x73,0x11,0x75, +0x70,0xa3,0x8d,0x15,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa2,0x72,0x19,0x73,0x75,0x70, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x8d,0x15,0x6e,0x69,0x63,0x69,0x61,0x6e, +0xa3,0x97,1,0x67,0x3e,0x69,0x13,0x73,0x74,0x6f,0x73,0xa2,0xa6,0x13,0x64,0x69, +0x73,0x63,0xa3,0xa6,0x12,0x73,0x70,0x61,0xa3,0x96,0x67,0xc3,0xb9,0x6a,0xc1,0x81, +0x6a,0xa2,0xc5,0x6b,0xa2,0xde,0x6c,4,0x61,0x54,0x65,0xa2,0x61,0x69,0xa2,0x78, +0x6f,0xa2,0xa7,0x79,1,0x63,0x2e,0x64,0x12,0x69,0x61,0x6e,0xa3,0xa9,0x12,0x69, +0x61,0x6e,0xa3,0xa7,1,0x6f,0x55,0x74,0x11,0x69,0x6e,1,0x31,0x82,0x65,0x11, +0x78,0x74,4,0x61,0x5c,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95,0x65,0xa2,0xe7, +0x13,0x6e,0x64,0x65,0x64,4,0x61,0x36,0x62,0x29,0x63,0xa3,0x94,0x64,0xa3,0x95, +0x65,0xa3,0xe7,0x26,0x18,0x64,0x64,0x69,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x6d,0x24, +0x12,0x73,0x75,0x70,0x24,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x25,1,0x70, +0x42,0x74,0x1d,0x74,0x65,0x72,0x6c,0x69,0x6b,0x65,0x73,0x79,0x6d,0x62,0x6f,0x6c, +0x73,0x79,0x12,0x63,0x68,0x61,0xa3,0x9c,2,0x6d,0x2e,0x6e,0x34,0x73,0x10,0x75, +0xa3,0xb0,0x11,0x62,0x75,0xa3,0x6f,0x12,0x65,0x61,0x72,1,0x61,0xa3,0xe8,0x62, +1,0x69,0x38,0x73,0x17,0x79,0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x75,0x17, +0x64,0x65,0x6f,0x67,0x72,0x61,0x6d,0x73,0xa3,0x76,0x1a,0x77,0x73,0x75,0x72,0x72, +0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4d,0x10,0x61,1,0x6d,0x32,0x76,0x14,0x61, +0x6e,0x65,0x73,0x65,0xa3,0xb5,0x10,0x6f,0x5c,0x12,0x65,0x78,0x74,1,0x61,0xa3, +0xb4,0x62,0xa3,0xb9,1,0x61,0x80,0x68,3,0x61,0x3c,0x6d,0x4c,0x6f,0x64,0x75, +0x15,0x64,0x61,0x77,0x61,0x64,0x69,0xa3,0xe6,0x16,0x72,0x6f,0x73,0x68,0x74,0x68, +0x69,0xa3,0x89,0x11,0x65,0x72,0x68,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3, +0x71,0x12,0x6a,0x6b,0x69,0xa3,0xe5,3,0x69,0x38,0x6e,0x40,0x74,0x9c,0x79,0x13, +0x61,0x68,0x6c,0x69,0xa3,0xa2,0x12,0x74,0x68,0x69,0xa3,0xc1,3,0x61,0x34,0x62, +0x50,0x67,0x56,0x6e,0x12,0x61,0x64,0x61,0x4d,0x12,0x73,0x75,0x70,0xa2,0xcb,0x16, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xcb,0x11,0x75,0x6e,0xa3,0x42,0x11,0x78, +0x69,0x96,0x17,0x72,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x97,0x14,0x61,0x6b,0x61, +0x6e,0x61,0x9e,1,0x65,0x4c,0x70,0x10,0x68,0x1f,0x6f,0x6e,0x65,0x74,0x69,0x63, +0x65,0x78,0x74,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73,0xa3,0x6b,0x11,0x78,0x74,0xa3, +0x6b,0x67,0xa2,0xa3,0x68,0xa4,0x53,0x69,3,0x64,0x4c,0x6d,0xa2,0x55,0x6e,0xa2, +0x62,0x70,0x13,0x61,0x65,0x78,0x74,0x2a,0x16,0x65,0x6e,0x73,0x69,0x6f,0x6e,0x73, +0x2b,1,0x63,0x99,0x65,0x17,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,1,0x64, +0x56,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa4,0xb,0x1d,0x61,0x6e,0x64,0x70, +0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa5,0xb,0x13,0x65,0x73,0x63, +0x72,0x1f,0x69,0x70,0x74,0x69,0x6f,0x6e,0x63,0x68,0x61,0x72,0x61,0x63,0x74,0x65, +0x72,0x73,0x99,0x1c,0x70,0x65,0x72,0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69, +0x63,0xa3,0xba,1,0x64,0x62,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e, +0x61,0x6c,0x70,0x61,1,0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0xbd, +0x13,0x6c,0x61,0x76,0x69,0xa3,0xbe,0x1c,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72, +0x66,0x6f,0x72,0x6d,0x73,0xa3,0xb2,4,0x65,0x58,0x6c,0xa2,0x63,0x6f,0xa2,0x7b, +0x72,0xa2,0x7f,0x75,1,0x6a,0x30,0x72,0x14,0x6d,0x75,0x6b,0x68,0x69,0x43,0x14, +0x61,0x72,0x61,0x74,0x69,0x45,1,0x6e,0x8c,0x6f,1,0x6d,0x4e,0x72,0x13,0x67, +0x69,0x61,0x6e,0x5a,0x12,0x73,0x75,0x70,0xa2,0x87,0x16,0x70,0x6c,0x65,0x6d,0x65, +0x6e,0x74,0xa3,0x87,0x1a,0x65,0x74,0x72,0x69,0x63,0x73,0x68,0x61,0x70,0x65,0x73, +0x8c,0x12,0x65,0x78,0x74,0xa2,0xe3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xe3,0x1e, +0x65,0x72,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x71, +0x17,0x61,0x67,0x6f,0x6c,0x69,0x74,0x69,0x63,0xa2,0x88,0x12,0x73,0x75,0x70,0xa4, +0xa,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa5,0xa,0x13,0x74,0x68,0x69,0x63, +0xa3,0x59,1,0x61,0x5c,0x65,0x11,0x65,0x6b,0x30,1,0x61,0x38,0x65,0x11,0x78, +0x74,0x6e,0x14,0x65,0x6e,0x64,0x65,0x64,0x6f,0x17,0x6e,0x64,0x63,0x6f,0x70,0x74, +0x69,0x63,0x31,0x13,0x6e,0x74,0x68,0x61,0xa3,0xe4,2,0x61,0xa2,0x48,0x65,0xa2, +0xcf,0x69,1,0x67,0x30,0x72,0x14,0x61,0x67,0x61,0x6e,0x61,0x9d,0x10,0x68,1, +0x70,0x3a,0x73,0x18,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4b,1, +0x72,0x3c,0x75,0x19,0x73,0x75,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x73,0xa3,0x4c, +0x11,0x69,0x76,0x1f,0x61,0x74,0x65,0x75,0x73,0x65,0x73,0x75,0x72,0x72,0x6f,0x67, +0x61,0x74,0x65,0x73,0xa3,0x4c,2,0x6c,0x32,0x6e,0x9a,0x74,0x12,0x72,0x61,0x6e, +0xa5,2,0x10,0x66,2,0x61,0x58,0x6d,0x70,0x77,0x14,0x69,0x64,0x74,0x68,0x61, +0x1f,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x77,0x69,0x64,0x74,0x68,0x66,0x6f,0x72,0x6d, +0x73,0xa3,0x57,0x1a,0x6e,0x64,0x66,0x75,0x6c,0x6c,0x66,0x6f,0x72,0x6d,0x73,0xa3, +0x57,0x13,0x61,0x72,0x6b,0x73,0xa3,0x52,1,0x67,0x2e,0x75,0x12,0x6e,0x6f,0x6f, +0xa3,0x63,0x11,0x75,0x6c,0xa2,0x4a,2,0x63,0x3c,0x6a,0x5e,0x73,0x17,0x79,0x6c, +0x6c,0x61,0x62,0x6c,0x65,0x73,0xa3,0x4a,0x1f,0x6f,0x6d,0x70,0x61,0x74,0x69,0x62, +0x69,0x6c,0x69,0x74,0x79,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x12,0x61,0x6d,0x6f,0x5c, +0x17,0x65,0x78,0x74,0x65,0x6e,0x64,0x65,0x64,1,0x61,0xa3,0xb4,0x62,0xa3,0xb9, +0x13,0x62,0x72,0x65,0x77,0x37,0x61,0xa2,0xe9,0x62,0xa6,0x29,0x63,0xa6,0xfe,0x64, +0xac,0x7b,0x65,5,0x6d,0xa2,0x6d,0x86,0x6e,0x96,0x74,0x15,0x68,0x69,0x6f,0x70, +0x69,0x63,0x5e,1,0x65,0x40,0x73,0x11,0x75,0x70,0xa2,0x86,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa3,0x86,0x11,0x78,0x74,0xa2,0x85,1,0x61,0xa3,0xc8,0x65, +0x13,0x6e,0x64,0x65,0x64,0xa2,0x85,0x10,0x61,0xa3,0xc8,0x16,0x6f,0x74,0x69,0x63, +0x6f,0x6e,0x73,0xa3,0xce,0x15,0x63,0x6c,0x6f,0x73,0x65,0x64,2,0x61,0x5a,0x63, +0x9e,0x69,0x1c,0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x73,0x75,0x70, +0xa2,0xc4,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc4,0x16,0x6c,0x70,0x68, +0x61,0x6e,0x75,0x6d,0x86,1,0x65,0x2c,0x73,0x11,0x75,0x70,0xa3,0xc3,0x13,0x72, +0x69,0x63,0x73,0x86,0x18,0x75,0x70,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xc3, +0x11,0x6a,0x6b,0xa2,0x44,0x1f,0x6c,0x65,0x74,0x74,0x65,0x72,0x73,0x61,0x6e,0x64, +0x6d,0x6f,0x6e,0x74,0x68,0x73,0xa3,0x44,0x61,0x36,0x67,0x62,0x6c,0x14,0x62,0x61, +0x73,0x61,0x6e,0xa3,0xe2,0x13,0x72,0x6c,0x79,0x64,0x1f,0x79,0x6e,0x61,0x73,0x74, +0x69,0x63,0x63,0x75,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa5,1,0x10,0x79,0x1f, +0x70,0x74,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73, +0xa3,0xc2,7,0x6e,0xc0,0xe5,0x6e,0x3e,0x72,0xa2,0x5d,0x73,0xa2,0xd8,0x76,0x14, +0x65,0x73,0x74,0x61,0x6e,0xa3,0xbc,1,0x61,0x92,0x63,0x13,0x69,0x65,0x6e,0x74, +1,0x67,0x34,0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xa5,0x13,0x72,0x65, +0x65,0x6b,1,0x6d,0x34,0x6e,0x15,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x7f,0x13, +0x75,0x73,0x69,0x63,0xa2,0x7e,0x19,0x61,0x6c,0x6e,0x6f,0x74,0x61,0x74,0x69,0x6f, +0x6e,0xa3,0x7e,0x10,0x74,0x1f,0x6f,0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f, +0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0xfe,2,0x61,0x32,0x6d,0xa2,0x71,0x72,0x12, +0x6f,0x77,0x73,0x7d,0x12,0x62,0x69,0x63,0x38,3,0x65,0x4a,0x6d,0x66,0x70,0xa2, +0x43,0x73,0x11,0x75,0x70,0xa2,0x80,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3, +0x80,0x11,0x78,0x74,1,0x61,0xa3,0xd2,0x65,0x14,0x6e,0x64,0x65,0x64,0x61,0xa3, +0xd2,0x12,0x61,0x74,0x68,0xa2,0xd3,0x18,0x65,0x6d,0x61,0x74,0x69,0x63,0x61,0x6c, +0x61,0x1f,0x6c,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x73,0x79,0x6d,0x62,0x6f, +0x6c,0x73,0xa3,0xd3,1,0x66,0x42,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74, +0x69,0x6f,0x6e,0x66,0x6f,0x72,0x6d,0x73,1,0x61,0xa3,0x51,0x62,0xa3,0x55,0x14, +0x65,0x6e,0x69,0x61,0x6e,0x35,0x12,0x63,0x69,0x69,0x23,0x64,0x9e,0x65,0xa2,0x42, +0x68,0xa2,0x4d,0x6c,1,0x63,0x62,0x70,0x17,0x68,0x61,0x62,0x65,0x74,0x69,0x63, +0x70,1,0x66,0xa3,0x50,0x72,0x1e,0x65,0x73,0x65,0x6e,0x74,0x61,0x74,0x69,0x6f, +0x6e,0x66,0x6f,0x72,0x6d,0x73,0xa3,0x50,0x16,0x68,0x65,0x6d,0x69,0x63,0x61,0x6c, +0xa2,0xd0,0x16,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0xd0,0x12,0x6c,0x61,0x6d, +0xa5,7,0x1a,0x67,0x65,0x61,0x6e,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa3,0x77, +0x11,0x6f,0x6d,0xa3,0xfd,7,0x6f,0x71,0x6f,0x64,0x72,0xa2,0x41,0x75,0xa2,0x58, +0x79,0x1b,0x7a,0x61,0x6e,0x74,0x69,0x6e,0x65,0x6d,0x75,0x73,0x69,0x63,0xa2,0x5b, +0x18,0x61,0x6c,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0xa3,0x5b,1,0x70,0x34,0x78, +0x16,0x64,0x72,0x61,0x77,0x69,0x6e,0x67,0x89,0x14,0x6f,0x6d,0x6f,0x66,0x6f,0xa0, +0x12,0x65,0x78,0x74,0xa2,0x43,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0x43,0x10,0x61, +1,0x68,0x40,0x69,0x12,0x6c,0x6c,0x65,0x92,0x17,0x70,0x61,0x74,0x74,0x65,0x72, +0x6e,0x73,0x93,0x11,0x6d,0x69,0xa3,0xc9,1,0x67,0x2c,0x68,0x11,0x69,0x64,0xa3, +0x64,0x14,0x69,0x6e,0x65,0x73,0x65,0xa3,0x81,0x61,0x48,0x65,0xa2,0x4e,0x68,0xa2, +0x52,0x6c,0x1a,0x6f,0x63,0x6b,0x65,0x6c,0x65,0x6d,0x65,0x6e,0x74,0x73,0x8b,3, +0x6c,0x34,0x6d,0x40,0x73,0x66,0x74,0x11,0x61,0x6b,0xa3,0xc7,0x14,0x69,0x6e,0x65, +0x73,0x65,0xa3,0x93,0x11,0x75,0x6d,0xa2,0xb1,0x12,0x73,0x75,0x70,0xa2,0xca,0x16, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0xca,1,0x69,0x30,0x73,0x13,0x61,0x76, +0x61,0x68,0xa3,0xdd,0x15,0x63,0x6c,0x61,0x74,0x69,0x6e,0x23,0x14,0x6e,0x67,0x61, +0x6c,0x69,0x41,0x16,0x61,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa5,8,5,0x6f,0xc1, +0x4c,0x6f,0xa2,0x55,0x75,0xa4,0x10,0x79,1,0x70,0x9c,0x72,0x14,0x69,0x6c,0x6c, +0x69,0x63,0x32,1,0x65,0x4c,0x73,0x11,0x75,0x70,0xa2,0x61,0x16,0x70,0x6c,0x65, +0x6d,0x65,0x6e,0x74,0xa2,0x61,0x12,0x61,0x72,0x79,0xa3,0x61,0x11,0x78,0x74,3, +0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x65,0x13,0x6e,0x64,0x65,0x64,2, +0x61,0xa3,0x9e,0x62,0xa3,0xa0,0x63,0xa5,9,0x1c,0x72,0x69,0x6f,0x74,0x73,0x79, +0x6c,0x6c,0x61,0x62,0x61,0x72,0x79,0xa3,0x7b,3,0x6d,0x5a,0x6e,0xa2,0x95,0x70, +0xa2,0xa0,0x75,0x17,0x6e,0x74,0x69,0x6e,0x67,0x72,0x6f,0x64,0xa2,0x9a,0x17,0x6e, +0x75,0x6d,0x65,0x72,0x61,0x6c,0x73,0xa3,0x9a,2,0x62,0x3a,0x6d,0xa2,0x5f,0x70, +0x15,0x61,0x74,0x6a,0x61,0x6d,0x6f,0xa3,0x41,0x14,0x69,0x6e,0x69,0x6e,0x67,2, +0x64,0x46,0x68,0x9e,0x6d,0x1d,0x61,0x72,0x6b,0x73,0x66,0x6f,0x72,0x73,0x79,0x6d, +0x62,0x6f,0x6c,0x73,0x77,0x1e,0x69,0x61,0x63,0x72,0x69,0x74,0x69,0x63,0x61,0x6c, +0x6d,0x61,0x72,0x6b,0x73,0x2e,2,0x65,0x40,0x66,0xa6,0x1b,0x73,0x18,0x75,0x70, +0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x83,0x16,0x78,0x74,0x65,0x6e,0x64,0x65, +0x64,0xa3,0xe0,0x17,0x61,0x6c,0x66,0x6d,0x61,0x72,0x6b,0x73,0xa3,0x52,0x11,0x6f, +0x6e,0x1f,0x69,0x6e,0x64,0x69,0x63,0x6e,0x75,0x6d,0x62,0x65,0x72,0x66,0x6f,0x72, +0x6d,0x73,0xa3,0xb2,0x1b,0x74,0x72,0x6f,0x6c,0x70,0x69,0x63,0x74,0x75,0x72,0x65, +0x73,0x83,0x12,0x74,0x69,0x63,0xa2,0x84,0x1b,0x65,0x70,0x61,0x63,0x74,0x6e,0x75, +0x6d,0x62,0x65,0x72,0x73,0xa3,0xdf,1,0x6e,0x3e,0x72,0x1b,0x72,0x65,0x6e,0x63, +0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x75,0x15,0x65,0x69,0x66,0x6f,0x72,0x6d, +0xa2,0x98,0x16,0x6e,0x75,0x6d,0x62,0x65,0x72,0x73,0xa2,0x99,0x1d,0x61,0x6e,0x64, +0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xa3,0x99,0x61,0xa2,0xda, +0x68,0xa4,4,0x6a,0x10,0x6b,0xa2,0x47,4,0x63,0x8e,0x65,0xa2,0x81,0x72,0xa2, +0x91,0x73,0xa2,0xa3,0x75,0x1f,0x6e,0x69,0x66,0x69,0x65,0x64,0x69,0x64,0x65,0x6f, +0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x47,0x18,0x65,0x78,0x74,0x65,0x6e,0x73,0x69, +0x6f,0x6e,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65, +0xa5,0,0x14,0x6f,0x6d,0x70,0x61,0x74,0xa2,0x45,1,0x66,0x96,0x69,1,0x62, +0x44,0x64,0x17,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x12,0x73,0x75, +0x70,0xa3,0x5f,0x14,0x69,0x6c,0x69,0x74,0x79,0xa2,0x45,1,0x66,0x54,0x69,0x18, +0x64,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x73,0xa2,0x4f,0x19,0x73,0x75,0x70,0x70, +0x6c,0x65,0x6d,0x65,0x6e,0x74,0xa3,0x5f,0x13,0x6f,0x72,0x6d,0x73,0xa3,0x53,0x11, +0x78,0x74,4,0x61,0xa3,0x46,0x62,0xa3,0x5e,0x63,0xa3,0xc5,0x64,0xa3,0xd1,0x65, +0xa5,0,0x19,0x61,0x64,0x69,0x63,0x61,0x6c,0x73,0x73,0x75,0x70,0x94,0x16,0x70, +0x6c,0x65,0x6d,0x65,0x6e,0x74,0x95,1,0x74,0x50,0x79,0x14,0x6d,0x62,0x6f,0x6c, +0x73,0x9a,0x1d,0x61,0x6e,0x64,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x9b,0x14,0x72,0x6f,0x6b,0x65,0x73,0xa3,0x82,2,0x6e,0x48,0x72,0x64,0x75, +0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61,0x6e,0xa3, +0xde,0x1d,0x61,0x64,0x69,0x61,0x6e,0x73,0x79,0x6c,0x6c,0x61,0x62,0x69,0x63,0x73, +0x63,0x12,0x69,0x61,0x6e,0xa3,0xa8,1,0x61,0x50,0x65,0x14,0x72,0x6f,0x6b,0x65, +0x65,0x60,0x12,0x73,0x75,0x70,0xa2,0xff,0x16,0x70,0x6c,0x65,0x6d,0x65,0x6e,0x74, +0xa3,0xff,1,0x6b,0x26,0x6d,0xa3,0xa4,0x11,0x6d,0x61,0xa3,0xd4,3,0x65,0x3e, +0x69,0x7e,0x6f,0xa2,0x5d,0x75,0x15,0x70,0x6c,0x6f,0x79,0x61,0x6e,0xa3,0xe1,1, +0x73,0x50,0x76,0x16,0x61,0x6e,0x61,0x67,0x61,0x72,0x69,0x3e,0x12,0x65,0x78,0x74, +0xa2,0xb3,0x14,0x65,0x6e,0x64,0x65,0x64,0xa3,0xb3,0x13,0x65,0x72,0x65,0x74,0xa3, +0x5a,1,0x61,0x30,0x6e,0x14,0x67,0x62,0x61,0x74,0x73,0x91,0x18,0x63,0x72,0x69, +0x74,0x69,0x63,0x61,0x6c,0x73,0x2e,2,0x65,0x30,0x66,0x36,0x73,0x11,0x75,0x70, +0xa3,0x83,0x11,0x78,0x74,0xa3,0xe0,0x18,0x6f,0x72,0x73,0x79,0x6d,0x62,0x6f,0x6c, +0x73,0x77,0x13,0x6d,0x69,0x6e,0x6f,0xa2,0xab,0x14,0x74,0x69,0x6c,0x65,0x73,0xa3, +0xab,8,0x6d,0x5f,0x6d,0x3a,0x6e,0x48,0x73,0x7a,0x76,0xa2,0x4b,0x77,0x12,0x69, +0x64,0x65,0x43,0x11,0x65,0x64,0x32,0x12,0x69,0x61,0x6c,0x33,2,0x61,0x40,0x62, +0x37,0x6f,1,0x62,0x28,0x6e,0x10,0x65,0x21,0x13,0x72,0x65,0x61,0x6b,0x37,0x10, +0x72,0x34,0x12,0x72,0x6f,0x77,0x35,2,0x6d,0x38,0x71,0x46,0x75,1,0x62,0x3d, +0x70,0x3e,0x11,0x65,0x72,0x3f,1,0x61,0x24,0x6c,0x39,0x11,0x6c,0x6c,0x39,1, +0x72,0x3b,0x75,0x12,0x61,0x72,0x65,0x3b,0x12,0x65,0x72,0x74,0x40,0x13,0x69,0x63, +0x61,0x6c,0x41,0x63,0x58,0x65,0x92,0x66,0x96,0x69,1,0x6e,0x36,0x73,0x10,0x6f, +0x30,0x14,0x6c,0x61,0x74,0x65,0x64,0x31,0x11,0x69,0x74,0x2e,0x12,0x69,0x61,0x6c, +0x2f,2,0x61,0x36,0x69,0x48,0x6f,0x10,0x6d,0x24,0x12,0x70,0x61,0x74,0x25,0x10, +0x6e,0x22,0x15,0x6f,0x6e,0x69,0x63,0x61,0x6c,0x23,0x13,0x72,0x63,0x6c,0x65,0x27, +0x11,0x6e,0x63,0x27,2,0x69,0x3a,0x6f,0x44,0x72,0x10,0x61,0x2c,0x14,0x63,0x74, +0x69,0x6f,0x6e,0x2d,0x10,0x6e,0x28,0x11,0x61,0x6c,0x29,0x11,0x6e,0x74,0x2b,4, +0x61,0x3a,0x66,0x4c,0x68,0x5e,0x6e,0x70,0x77,0x2a,0x12,0x69,0x64,0x65,0x2b,0x22, +0x17,0x6d,0x62,0x69,0x67,0x75,0x6f,0x75,0x73,0x23,0x26,0x17,0x75,0x6c,0x6c,0x77, +0x69,0x64,0x74,0x68,0x27,0x24,0x17,0x61,0x6c,0x66,0x77,0x69,0x64,0x74,0x68,0x25, +0x20,1,0x61,0x30,0x65,0x14,0x75,0x74,0x72,0x61,0x6c,0x21,0x28,0x13,0x72,0x72, +0x6f,0x77,0x29,0xd,0x6e,0xc0,0xfb,0x73,0x6d,0x73,0x3a,0x74,0x98,0x75,0xa2,0x49, +0x7a,2,0x6c,0x3b,0x70,0x3d,0x73,0x39,5,0x6f,0x28,0x6f,0x57,0x70,0x34,0x75, +0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0x45,0x11,0x61,0x63,1,0x65,0x32,0x69, +0x15,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x31,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74, +0x6f,0x72,0x39,0x63,0x53,0x6b,0x55,0x6d,0x51,0x1d,0x69,0x74,0x6c,0x65,0x63,0x61, +0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x27,1,0x6e,0x40,0x70,0x1c,0x70,0x65, +0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x17,0x61,0x73,0x73, +0x69,0x67,0x6e,0x65,0x64,0x21,0x6e,0x8a,0x6f,0xa2,0x47,0x70,8,0x66,0x14,0x66, +0x5b,0x69,0x59,0x6f,0x4f,0x72,0x24,0x73,0x49,0x17,0x69,0x76,0x61,0x74,0x65,0x75, +0x73,0x65,0x43,0x61,0x2c,0x63,0x4d,0x64,0x47,0x65,0x4b,0x1f,0x72,0x61,0x67,0x72, +0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0x3d,2,0x64,0x33, +0x6c,0x35,0x6f,0x36,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72, +0x6b,0x2d,1,0x70,0x7c,0x74,0x12,0x68,0x65,0x72,3,0x6c,0x38,0x6e,0x42,0x70, +0x4c,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x57,0x14,0x65,0x74,0x74,0x65,0x72,0x2b, +0x14,0x75,0x6d,0x62,0x65,0x72,0x37,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69, +0x6f,0x6e,0x4f,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x49,0x66,0x9e,0x66,0x88,0x69,0xa2,0x4b,0x6c,0xa2,0x5c,0x6d,4,0x61,0x60, +0x63,0x31,0x65,0x2f,0x6e,0x2d,0x6f,0x15,0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c, +0x30,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c,0x55,0x14,0x65,0x74,0x74,0x65,0x72,0x29, +0x17,0x74,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x51,1,0x69,0x2e,0x6f,0x13,0x72, +0x6d,0x61,0x74,0x41,0x1d,0x6e,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74, +0x69,0x6f,0x6e,0x5b,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63, +0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x59,6,0x6d,0x18,0x6d,0x29,0x6f,0x28,0x74, +0x27,0x75,0x23,0x2a,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74, +0x65,0x72,0x25,0x65,0x28,0x69,0x3c,0x6c,0x25,0x19,0x74,0x74,0x65,0x72,0x6e,0x75, +0x6d,0x62,0x65,0x72,0x35,0x1a,0x6e,0x65,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f, +0x72,0x3b,0x63,0x44,0x64,0xa2,0x60,0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e, +0x67,0x6d,0x61,0x72,0x6b,0x2f,6,0x6e,0x39,0x6e,0x46,0x6f,0x4e,0x73,0x45,0x75, +0x1b,0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0x53,0x20,0x12, +0x74,0x72,0x6c,0x3f,0x42,0x10,0x6e,1,0x6e,0x2c,0x74,0x12,0x72,0x6f,0x6c,0x3f, +0x1f,0x65,0x63,0x74,0x6f,0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0x4d,0x63,0x3f,0x66,0x41,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63,0x74, +0x75,0x61,0x74,0x69,0x6f,0x6e,0x4b,2,0x61,0x30,0x65,0x4a,0x69,0x12,0x67,0x69, +0x74,0x33,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, +0x47,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0x33,0,0x12, +0x6d,0xc1,0xec,0x73,0xa1,0x73,0x4e,0x74,0xa2,0x56,0x77,0xa2,0x72,0x79,0xa2,0x73, +0x7a,1,0x61,0x2c,0x68,0x12,0x61,0x69,0x6e,0x8b,0x11,0x69,0x6e,0x85,5,0x74, +0x22,0x74,0x38,0x77,0x4c,0x79,0x16,0x72,0x69,0x61,0x63,0x77,0x61,0x77,0x6f,0x18, +0x72,0x61,0x69,0x67,0x68,0x74,0x77,0x61,0x77,0xa3,0x55,0x15,0x61,0x73,0x68,0x6b, +0x61,0x66,0x6d,0x61,0x2e,0x65,0x38,0x68,0x11,0x69,0x6e,0x6b,0x10,0x64,0x62,0x11, +0x68,0x65,0x65,1,0x65,0x2e,0x6d,0x13,0x6b,0x61,0x74,0x68,0x69,0x10,0x6e,0x67, +1,0x61,0x4e,0x65,1,0x68,0x28,0x74,0x10,0x68,0x77,0x16,0x6d,0x61,0x72,0x62, +0x75,0x74,0x61,0x74,0x13,0x67,0x6f,0x61,0x6c,0x3d,1,0x68,0x71,0x77,0x73,0x11, +0x61,0x77,0x79,1,0x65,0x32,0x75,0x11,0x64,0x68,0x80,0x11,0x68,0x65,0x83,0x10, +0x68,0x7a,1,0x62,0x34,0x77,0x16,0x69,0x74,0x68,0x74,0x61,0x69,0x6c,0x7f,0x14, +0x61,0x72,0x72,0x65,0x65,0x7d,0x6d,0x6c,0x6e,0xa4,0x18,0x70,0xa4,0x35,0x71,0xa4, +0x35,0x72,1,0x65,0x38,0x6f,0x18,0x68,0x69,0x6e,0x67,0x79,0x61,0x79,0x65,0x68, +0x93,1,0x68,0x5f,0x76,0x16,0x65,0x72,0x73,0x65,0x64,0x70,0x65,0x61,2,0x61, +0x2e,0x65,0xa2,0xeb,0x69,0x10,0x6d,0x53,0x17,0x6e,0x69,0x63,0x68,0x61,0x65,0x61, +0x6e,0,0x12,0x6e,0x76,0x73,0x51,0x73,0x3e,0x74,0x5c,0x77,0xa0,0x79,0xa2,0x42, +0x7a,0x13,0x61,0x79,0x69,0x6e,0xa3,0x54,0x10,0x61,1,0x64,0x2e,0x6d,0x12,0x65, +0x6b,0x68,0xa3,0x4c,0x11,0x68,0x65,0xa3,0x4b,3,0x61,0x38,0x65,0x3c,0x68,0x4a, +0x77,0x13,0x65,0x6e,0x74,0x79,0xa3,0x51,0x10,0x77,0xa3,0x4d,1,0x6e,0xa3,0x4e, +0x74,0x10,0x68,0xa3,0x4f,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x50,0x11,0x61,0x77, +0xa3,0x52,0x12,0x6f,0x64,0x68,0xa3,0x53,0x6e,0x3a,0x6f,0x40,0x70,0x46,0x71,0x4a, +0x72,0x12,0x65,0x73,0x68,0xa3,0x4a,0x11,0x75,0x6e,0xa3,0x46,0x11,0x6e,0x65,0xa3, +0x47,0x10,0x65,0xa3,0x48,0x12,0x6f,0x70,0x68,0xa3,0x49,0x67,0x33,0x67,0x38,0x68, +0x40,0x6b,0x5e,0x6c,0x66,0x6d,0x11,0x65,0x6d,0xa3,0x45,0x13,0x69,0x6d,0x65,0x6c, +0xa1,1,0x65,0x32,0x75,0x14,0x6e,0x64,0x72,0x65,0x64,0xa3,0x42,0x11,0x74,0x68, +0xa3,0x41,0x12,0x61,0x70,0x68,0xa3,0x43,0x14,0x61,0x6d,0x65,0x64,0x68,0xa3,0x44, +0x61,0x34,0x62,0x4a,0x64,0x50,0x66,0x12,0x69,0x76,0x65,0x9f,1,0x6c,0x2a,0x79, +0x11,0x69,0x6e,0x97,0x12,0x65,0x70,0x68,0x95,0x12,0x65,0x74,0x68,0x99,1,0x61, +0x30,0x68,0x14,0x61,0x6d,0x65,0x64,0x68,0x9d,0x13,0x6c,0x65,0x74,0x68,0x9b,0x11, +0x65,0x6d,0x51,2,0x6f,0x2c,0x75,0x50,0x79,0x10,0x61,0x91,1,0x6a,0x28,0x6f, +0x10,0x6e,0x55,0x1a,0x6f,0x69,0x6e,0x69,0x6e,0x67,0x67,0x72,0x6f,0x75,0x70,0x21, +0x10,0x6e,0x57,0x10,0x65,0x59,0x10,0x61,1,0x66,0x5b,0x70,0x10,0x68,0x5d,0x66, +0x7b,0x66,0x42,0x67,0x7a,0x68,0x8a,0x6b,0xa2,0x56,0x6c,0x11,0x61,0x6d,0x4c,0x12, +0x61,0x64,0x68,0x4f,2,0x61,0x3e,0x65,0x4a,0x69,0x19,0x6e,0x61,0x6c,0x73,0x65, +0x6d,0x6b,0x61,0x74,0x68,0x35,0x15,0x72,0x73,0x69,0x79,0x65,0x68,0x8f,0x86,0x10, +0x68,0x33,0x10,0x61,1,0x66,0x37,0x6d,0x11,0x61,0x6c,0x39,1,0x61,0x40,0x65, +0x3e,1,0x68,0x28,0x74,0x10,0x68,0x45,0x40,0x13,0x67,0x6f,0x61,0x6c,0x43,1, +0x68,0x3b,0x6d,0x1a,0x7a,0x61,0x6f,0x6e,0x68,0x65,0x68,0x67,0x6f,0x61,0x6c,0x3d, +2,0x61,0x3a,0x68,0x44,0x6e,0x17,0x6f,0x74,0x74,0x65,0x64,0x68,0x65,0x68,0x4b, +1,0x66,0x47,0x70,0x10,0x68,0x49,0x12,0x61,0x70,0x68,0x89,0x61,0x2e,0x62,0x8a, +0x64,0xa2,0x51,0x65,0x31,2,0x66,0x3c,0x69,0x70,0x6c,1,0x61,0x28,0x65,0x10, +0x66,0x27,0x11,0x70,0x68,0x25,0x14,0x72,0x69,0x63,0x61,0x6e,2,0x66,0x30,0x6e, +0x36,0x71,0x11,0x61,0x66,0xa3,0x58,0x11,0x65,0x68,0xa3,0x56,0x12,0x6f,0x6f,0x6e, +0xa3,0x57,0x10,0x6e,0x23,1,0x65,0x4a,0x75,0x10,0x72,0x1f,0x75,0x73,0x68,0x61, +0x73,0x6b,0x69,0x79,0x65,0x68,0x62,0x61,0x72,0x72,0x65,0x65,0x8d,1,0x68,0x29, +0x74,0x10,0x68,0x2b,0x11,0x61,0x6c,0x2c,0x16,0x61,0x74,0x68,0x72,0x69,0x73,0x68, +0x2f,7,0x6e,0x2e,0x6e,0x2c,0x72,0x3e,0x74,0x56,0x75,0x21,0x18,0x6f,0x6e,0x6a, +0x6f,0x69,0x6e,0x69,0x6e,0x67,0x21,0x28,0x1a,0x69,0x67,0x68,0x74,0x6a,0x6f,0x69, +0x6e,0x69,0x6e,0x67,0x29,0x2a,0x19,0x72,0x61,0x6e,0x73,0x70,0x61,0x72,0x65,0x6e, +0x74,0x2b,0x63,0x23,0x64,0x40,0x6a,0x56,0x6c,0x26,0x19,0x65,0x66,0x74,0x6a,0x6f, +0x69,0x6e,0x69,0x6e,0x67,0x27,0x24,0x19,0x75,0x61,0x6c,0x6a,0x6f,0x69,0x6e,0x69, +0x6e,0x67,0x25,0x19,0x6f,0x69,0x6e,0x63,0x61,0x75,0x73,0x69,0x6e,0x67,0x23,0, +0x13,0x6e,0xc0,0xd0,0x73,0x49,0x73,0x48,0x75,0x78,0x77,0x84,0x78,0x9c,0x7a,0x10, +0x77,0x58,1,0x6a,0x75,0x73,0x13,0x70,0x61,0x63,0x65,0x59,4,0x61,0x51,0x67, +0x53,0x70,0x28,0x75,0x30,0x79,0x57,0x54,0x12,0x61,0x63,0x65,0x55,0x16,0x72,0x72, +0x6f,0x67,0x61,0x74,0x65,0x53,0x15,0x6e,0x6b,0x6e,0x6f,0x77,0x6e,0x21,1,0x6a, +0x5d,0x6f,0x17,0x72,0x64,0x6a,0x6f,0x69,0x6e,0x65,0x72,0x5d,0x10,0x78,0x21,0x6e, +0x60,0x6f,0xa2,0x41,0x70,0xa2,0x50,0x71,0xa2,0x6e,0x72,1,0x65,0x24,0x69,0x6f, +0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72, +0x6f,4,0x65,0x3e,0x6c,0x5b,0x6f,0x46,0x73,0x45,0x75,0x46,0x14,0x6d,0x65,0x72, +0x69,0x63,0x47,0x15,0x78,0x74,0x6c,0x69,0x6e,0x65,0x5b,0x17,0x6e,0x73,0x74,0x61, +0x72,0x74,0x65,0x72,0x45,0x10,0x70,0x48,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74, +0x75,0x61,0x74,0x69,0x6f,0x6e,0x49,1,0x6f,0x3e,0x72,0x4c,0x1a,0x65,0x66,0x69, +0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4d,0x4a,0x1b,0x73,0x74,0x66,0x69,0x78, +0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x4b,0x10,0x75,0x4e,0x16,0x6f,0x74,0x61,0x74, +0x69,0x6f,0x6e,0x4f,0x68,0x7b,0x68,0x50,0x69,0x86,0x6a,0xa2,0x61,0x6c,0xa2,0x65, +0x6d,0x1c,0x61,0x6e,0x64,0x61,0x74,0x6f,0x72,0x79,0x62,0x72,0x65,0x61,0x6b,0x2d, +4,0x32,0x5f,0x33,0x61,0x65,0x34,0x6c,0x6d,0x79,0x3a,0x13,0x70,0x68,0x65,0x6e, +0x3b,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72,0x6d,2,0x64,0x28, +0x6e,0x3c,0x73,0x41,0x3c,0x18,0x65,0x6f,0x67,0x72,0x61,0x70,0x68,0x69,0x63,0x3d, +0x3e,1,0x66,0x3e,0x73,0x11,0x65,0x70,1,0x61,0x22,0x65,0x14,0x72,0x61,0x62, +0x6c,0x65,0x3f,0x18,0x69,0x78,0x6e,0x75,0x6d,0x65,0x72,0x69,0x63,0x41,2,0x6c, +0x63,0x74,0x65,0x76,0x67,1,0x66,0x43,0x69,0x15,0x6e,0x65,0x66,0x65,0x65,0x64, +0x43,0x61,0x40,0x62,0x70,0x63,0xa2,0x55,0x65,0xa2,0xdb,0x67,0x10,0x6c,0x38,0x11, +0x75,0x65,0x39,2,0x69,0x23,0x6c,0x34,0x6d,0x16,0x62,0x69,0x67,0x75,0x6f,0x75, +0x73,0x23,0x24,0x17,0x70,0x68,0x61,0x62,0x65,0x74,0x69,0x63,0x25,4,0x32,0x27, +0x61,0x29,0x62,0x2b,0x6b,0x2d,0x72,0x12,0x65,0x61,0x6b,2,0x61,0x36,0x62,0x3e, +0x73,0x15,0x79,0x6d,0x62,0x6f,0x6c,0x73,0x57,0x13,0x66,0x74,0x65,0x72,0x29,1, +0x65,0x2a,0x6f,0x11,0x74,0x68,0x27,0x13,0x66,0x6f,0x72,0x65,0x2b,7,0x6d,0x51, +0x6d,0x33,0x6f,0x28,0x70,0x69,0x72,0x35,1,0x6d,0x76,0x6e,1,0x64,0x3c,0x74, +0x1a,0x69,0x6e,0x67,0x65,0x6e,0x74,0x62,0x72,0x65,0x61,0x6b,0x2f,0x15,0x69,0x74, +0x69,0x6f,0x6e,0x61,0x1f,0x6c,0x6a,0x61,0x70,0x61,0x6e,0x65,0x73,0x65,0x73,0x74, +0x61,0x72,0x74,0x65,0x72,0x6b,1,0x62,0x3a,0x70,0x19,0x6c,0x65,0x78,0x63,0x6f, +0x6e,0x74,0x65,0x78,0x74,0x51,0x18,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b, +0x33,0x61,0x6a,0x62,0x2f,0x6a,0x6b,0x6c,0x30,0x13,0x6f,0x73,0x65,0x70,1,0x61, +0x38,0x75,0x18,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0x31,0x18,0x72,0x65, +0x6e,0x74,0x68,0x65,0x73,0x69,0x73,0x69,0x1b,0x72,0x72,0x69,0x61,0x67,0x65,0x72, +0x65,0x74,0x75,0x72,0x6e,0x35,2,0x62,0x3e,0x6d,0x46,0x78,0x36,0x18,0x63,0x6c, +0x61,0x6d,0x61,0x74,0x69,0x6f,0x6e,0x37,0x70,0x12,0x61,0x73,0x65,0x71,0x72,0x16, +0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x73,1,0x64,0x42,0x6e,1,0x6f,0x32,0x75, +0x26,0x14,0x6d,0x65,0x72,0x69,0x63,0x27,0x11,0x6e,0x65,0x21,1,0x65,0x2e,0x69, +0x24,0x12,0x67,0x69,0x74,0x25,0x22,0x14,0x63,0x69,0x6d,0x61,0x6c,0x23,0,0x18, +0x6e,0xc3,0x95,0x74,0xc1,0x38,0x77,0x61,0x77,0x88,0x78,0xa2,0x48,0x79,0xa2,0x52, +0x7a,5,0x78,0x13,0x78,0x30,0x79,0x36,0x7a,0x11,0x7a,0x7a,0xa3,0x67,0x11,0x78, +0x78,0xa3,0x66,0x11,0x79,0x79,0x21,0x69,0x38,0x6d,0x3c,0x73,0x10,0x79,1,0x65, +0xa3,0xae,0x6d,0xa3,0x81,0x11,0x6e,0x68,0x23,0x11,0x74,0x68,0xa3,0x80,1,0x61, +0x2c,0x6f,0x11,0x6c,0x65,0xa3,0x9b,0x11,0x72,0x61,0xa2,0x92,0x15,0x6e,0x67,0x63, +0x69,0x74,0x69,0xa3,0x92,1,0x70,0x2c,0x73,0x11,0x75,0x78,0xa3,0x65,0x11,0x65, +0x6f,0x9b,0x10,0x69,0x72,0x11,0x69,0x69,0x73,0x74,0x4a,0x75,0xa2,0xba,0x76,1, +0x61,0x2c,0x69,0x11,0x73,0x70,0xa3,0x64,0x10,0x69,0xa2,0x63,0x10,0x69,0xa3,0x63, +5,0x67,0x36,0x67,0x68,0x68,0x6c,0x69,2,0x62,0x3a,0x66,0x4a,0x72,0x10,0x68, +0xa2,0x9e,0x12,0x75,0x74,0x61,0xa3,0x9e,1,0x65,0x24,0x74,0x6f,0x12,0x74,0x61, +0x6e,0x6f,0x14,0x69,0x6e,0x61,0x67,0x68,0x99,0x11,0x6c,0x67,0x75,0x10,0x61,1, +0x61,0x24,0x69,0x6d,0x6a,0x11,0x6e,0x61,0x6b,0x61,0x30,0x65,0xa2,0x5b,0x66,0x11, +0x6e,0x67,0x99,6,0x6c,0x21,0x6c,0x32,0x6d,0x38,0x6e,0x44,0x76,0x10,0x74,0xa3, +0x7f,1,0x65,0x89,0x75,0x97,1,0x69,0x24,0x6c,0x67,0x10,0x6c,0x67,0x10,0x67, +0xa2,0x9a,0x11,0x75,0x74,0xa3,0x9a,0x67,0x36,0x69,0x52,0x6b,0x10,0x72,0xa2,0x99, +0x10,0x69,0xa3,0x99,1,0x61,0x30,0x62,0x7a,0x13,0x61,0x6e,0x77,0x61,0x7b,0x12, +0x6c,0x6f,0x67,0x75,2,0x6c,0x32,0x74,0x34,0x76,0x12,0x69,0x65,0x74,0xa3,0x7f, +0x10,0x65,0x89,0x12,0x68,0x61,0x6d,0xa3,0x6a,1,0x6c,0x2a,0x6e,0x10,0x67,0xa3, +0x62,0x10,0x75,0x68,0x11,0x67,0x75,0x69,1,0x67,0x32,0x6e,0x14,0x6b,0x6e,0x6f, +0x77,0x6e,0xa3,0x67,0x11,0x61,0x72,0x8a,0x13,0x69,0x74,0x69,0x63,0x8b,0x71,0xc0, +0xef,0x71,0xa2,0xc1,0x72,0xa2,0xc6,0x73,6,0x69,0x6d,0x69,0x72,0x6f,0xa2,0x4c, +0x75,0xa2,0x58,0x79,1,0x6c,0x46,0x72,4,0x63,0x65,0x65,0xa3,0x5f,0x69,0x2c, +0x6a,0xa3,0x60,0x6e,0xa3,0x61,0x11,0x61,0x63,0x65,0x10,0x6f,0x94,0x16,0x74,0x69, +0x6e,0x61,0x67,0x72,0x69,0x95,2,0x64,0x3c,0x67,0x4c,0x6e,1,0x64,0xa3,0x91, +0x68,0x62,0x12,0x61,0x6c,0x61,0x63,0x10,0x64,0xa2,0xa6,0x12,0x68,0x61,0x6d,0xa3, +0xa6,0x17,0x6e,0x77,0x72,0x69,0x74,0x69,0x6e,0x67,0xa3,0x70,0x11,0x72,0x61,0xa2, +0x98,0x16,0x73,0x6f,0x6d,0x70,0x65,0x6e,0x67,0xa3,0x98,0x11,0x6e,0x64,0xa2,0x71, +0x14,0x61,0x6e,0x65,0x73,0x65,0xa3,0x71,0x61,0x5c,0x67,0xa2,0x43,0x68,1,0x61, +0x2a,0x72,0x10,0x64,0xa3,0x97,2,0x72,0x28,0x76,0x30,0x77,0x87,0x12,0x61,0x64, +0x61,0xa3,0x97,0x12,0x69,0x61,0x6e,0x87,2,0x6d,0x40,0x72,0x58,0x75,0x10,0x72, +0xa2,0x6f,0x15,0x61,0x73,0x68,0x74,0x72,0x61,0xa3,0x6f,1,0x61,0x26,0x72,0xa3, +0x7e,0x14,0x72,0x69,0x74,0x61,0x6e,0xa3,0x7e,1,0x61,0xa3,0x5e,0x62,0xa3,0x85, +0x11,0x6e,0x77,0xa3,0x70,0x11,0x61,0x61,1,0x63,0x2f,0x69,0x23,3,0x65,0x3e, +0x6a,0x48,0x6f,0x4e,0x75,0x10,0x6e,1,0x69,0x24,0x72,0x61,0x10,0x63,0x61,0x13, +0x6a,0x61,0x6e,0x67,0xa3,0x6e,0x11,0x6e,0x67,0xa3,0x6e,0x11,0x72,0x6f,0xa3,0x5d, +0x6e,0xa2,0x83,0x6f,0xa2,0xc1,0x70,5,0x6c,0x1e,0x6c,0x44,0x72,0x4a,0x73,0x1b, +0x61,0x6c,0x74,0x65,0x72,0x70,0x61,0x68,0x6c,0x61,0x76,0x69,0xa3,0x7b,0x11,0x72, +0x64,0xa3,0x5c,0x11,0x74,0x69,0xa3,0x7d,0x61,0x7c,0x65,0xa2,0x54,0x68,3,0x61, +0x3e,0x6c,0x4e,0x6e,0x5e,0x6f,0x16,0x65,0x6e,0x69,0x63,0x69,0x61,0x6e,0xa3,0x5b, +0x10,0x67,0xa2,0x5a,0x12,0x73,0x70,0x61,0xa3,0x5a,2,0x69,0xa3,0x7a,0x70,0xa3, +0x7b,0x76,0xa3,0x7c,0x10,0x78,0xa3,0x5b,2,0x68,0x3e,0x6c,0x50,0x75,0x10,0x63, +0xa2,0xa5,0x14,0x69,0x6e,0x68,0x61,0x75,0xa3,0xa5,0x17,0x61,0x77,0x68,0x68,0x6d, +0x6f,0x6e,0x67,0xa3,0x4b,0x10,0x6d,0xa2,0x90,0x14,0x79,0x72,0x65,0x6e,0x65,0xa3, +0x90,0x11,0x72,0x6d,0xa3,0x59,4,0x61,0x38,0x62,0x56,0x65,0x5c,0x6b,0x74,0x73, +0x11,0x68,0x75,0xa3,0x96,1,0x62,0x2a,0x72,0x10,0x62,0xa3,0x8e,0x15,0x61,0x74, +0x61,0x65,0x61,0x6e,0xa3,0x8f,0x11,0x61,0x74,0xa3,0x8f,0x10,0x77,1,0x61,0xa3, +0xaa,0x74,0x14,0x61,0x69,0x6c,0x75,0x65,0x97,1,0x67,0x2e,0x6f,0xa2,0x57,0x10, +0x6f,0xa3,0x57,0x10,0x62,0xa3,0x84,3,0x67,0x5a,0x6c,0x6c,0x72,0xa2,0x88,0x73, +2,0x61,0x36,0x67,0x3c,0x6d,0x10,0x61,0x84,0x12,0x6e,0x79,0x61,0x85,0x11,0x67, +0x65,0xa3,0xab,0x10,0x65,0xa3,0xab,1,0x61,0x2a,0x68,0x11,0x61,0x6d,0x5b,0x10, +0x6d,0x5b,1,0x63,0xa2,0x55,0x64,5,0x70,0x2c,0x70,0x36,0x73,0x54,0x74,0x14, +0x75,0x72,0x6b,0x69,0x63,0xa3,0x58,0x11,0x65,0x72,1,0x6d,0x2c,0x73,0x12,0x69, +0x61,0x6e,0x9b,0x11,0x69,0x63,0xa3,0x59,0x1a,0x6f,0x75,0x74,0x68,0x61,0x72,0x61, +0x62,0x69,0x61,0x6e,0xa3,0x85,0x68,0x42,0x69,0x54,0x6e,0x1a,0x6f,0x72,0x74,0x68, +0x61,0x72,0x61,0x62,0x69,0x61,0x6e,0xa3,0x8e,0x17,0x75,0x6e,0x67,0x61,0x72,0x69, +0x61,0x6e,0xa3,0x4c,0x14,0x74,0x61,0x6c,0x69,0x63,0x5d,1,0x68,0x26,0x6b,0xa3, +0x6d,0x12,0x69,0x6b,0x69,0xa3,0x6d,2,0x69,0x2c,0x6b,0x30,0x79,0x10,0x61,0x5f, +0x11,0x79,0x61,0x5f,0x10,0x68,0xa3,0x58,0x68,0xc2,0xb3,0x6b,0xc1,0xdc,0x6b,0xa2, +0xe9,0x6c,0xa4,0x6a,0x6d,8,0x6f,0x46,0x6f,0x48,0x72,0x74,0x74,0x80,0x75,0x86, +0x79,1,0x61,0x28,0x6d,0x10,0x72,0x59,0x13,0x6e,0x6d,0x61,0x72,0x59,2,0x64, +0x2e,0x6e,0x32,0x6f,0x10,0x6e,0xa3,0x72,0x10,0x69,0xa3,0xa3,0x10,0x67,0x56,0x14, +0x6f,0x6c,0x69,0x61,0x6e,0x57,0x10,0x6f,0xa2,0x95,0x10,0x6f,0xa3,0x95,0x11,0x65, +0x69,0xa3,0x73,0x11,0x6c,0x74,0xa2,0xa4,0x12,0x61,0x6e,0x69,0xa3,0xa4,0x61,0x36, +0x65,0xa2,0x4c,0x69,0xa2,0x8f,0x6c,0x11,0x79,0x6d,0x55,4,0x68,0x36,0x6c,0x4c, +0x6e,0x58,0x72,0x82,0x79,0x10,0x61,0xa3,0x55,1,0x61,0x26,0x6a,0xa3,0xa0,0x13, +0x6a,0x61,0x6e,0x69,0xa3,0xa0,0x15,0x61,0x79,0x61,0x6c,0x61,0x6d,0x55,1,0x64, +0x38,0x69,0xa2,0x79,0x15,0x63,0x68,0x61,0x65,0x61,0x6e,0xa3,0x79,0xa2,0x54,0x12, +0x61,0x69,0x63,0xa3,0x54,0x10,0x63,0xa2,0xa9,0x12,0x68,0x65,0x6e,0xa3,0xa9,2, +0x65,0x72,0x6e,0x84,0x72,1,0x63,0xa3,0x8d,0x6f,0xa2,0x56,0x13,0x69,0x74,0x69, +0x63,1,0x63,0x3c,0x68,0x19,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73, +0xa3,0x56,0x15,0x75,0x72,0x73,0x69,0x76,0x65,0xa3,0x8d,0x17,0x74,0x65,0x69,0x6d, +0x61,0x79,0x65,0x6b,0xa3,0x73,0x10,0x64,0xa2,0x8c,0x17,0x65,0x6b,0x69,0x6b,0x61, +0x6b,0x75,0x69,0xa3,0x8c,0x11,0x61,0x6f,0xa3,0x5c,5,0x6f,0x14,0x6f,0x30,0x70, +0x36,0x74,0x11,0x68,0x69,0xa3,0x78,0x11,0x72,0x65,0xa3,0x77,0x11,0x65,0x6c,0xa3, +0x8a,0x61,0x2e,0x68,0x98,0x6e,0x11,0x64,0x61,0x4b,4,0x69,0x3c,0x6c,0x44,0x6e, +0x48,0x74,0x56,0x79,0x13,0x61,0x68,0x6c,0x69,0xa3,0x4f,0x12,0x74,0x68,0x69,0xa3, +0x78,0x10,0x69,0xa3,0x4f,1,0x61,0x4d,0x6e,0x12,0x61,0x64,0x61,0x4b,0x14,0x61, +0x6b,0x61,0x6e,0x61,0x4c,0x19,0x6f,0x72,0x68,0x69,0x72,0x61,0x67,0x61,0x6e,0x61, +0x8d,3,0x61,0x3c,0x6d,0x4e,0x6f,0x5a,0x75,0x15,0x64,0x61,0x77,0x61,0x64,0x69, +0xa3,0x91,0x10,0x72,0x92,0x15,0x6f,0x73,0x68,0x74,0x68,0x69,0x93,1,0x65,0x24, +0x72,0x4f,0x10,0x72,0x4f,0x10,0x6a,0xa2,0x9d,0x11,0x6b,0x69,0xa3,0x9d,4,0x61, +0x5c,0x65,0x90,0x69,0xa0,0x6f,0xa2,0x5d,0x79,1,0x63,0x34,0x64,0x10,0x69,0xa2, +0x6c,0x11,0x61,0x6e,0xa3,0x6c,0x10,0x69,0xa2,0x6b,0x11,0x61,0x6e,0xa3,0x6b,2, +0x6e,0x42,0x6f,0x46,0x74,3,0x66,0xa3,0x50,0x67,0xa3,0x51,0x69,0x24,0x6e,0x53, +0x10,0x6e,0x53,0x10,0x61,0xa3,0x6a,0x50,0x10,0x6f,0x51,0x11,0x70,0x63,0xa2,0x52, +0x11,0x68,0x61,0xa3,0x52,2,0x6d,0x2e,0x6e,0x36,0x73,0x10,0x75,0xa3,0x83,0x10, +0x62,0x80,0x10,0x75,0x81,2,0x61,0xa3,0x53,0x62,0x83,0x65,0x11,0x61,0x72,1, +0x61,0xa3,0x53,0x62,0x83,0x11,0x6d,0x61,0xa3,0x8b,0x68,0x6e,0x69,0xa2,0x83,0x6a, +2,0x61,0x30,0x70,0x52,0x75,0x11,0x72,0x63,0xa3,0x94,1,0x6d,0x38,0x76,0x10, +0x61,0xa2,0x4e,0x13,0x6e,0x65,0x73,0x65,0xa3,0x4e,0x10,0x6f,0xa3,0xad,0x11,0x61, +0x6e,0xa3,0x69,6,0x6c,0x1a,0x6c,0x34,0x6d,0x3a,0x72,0x40,0x75,0x11,0x6e,0x67, +0xa3,0x4c,0x11,0x75,0x77,0xa3,0x9c,0x11,0x6e,0x67,0xa3,0x4b,0x11,0x6b,0x74,0x8d, +0x61,0x3a,0x65,0x8c,0x69,0x11,0x72,0x61,0x48,0x13,0x67,0x61,0x6e,0x61,0x49,1, +0x6e,0x34,0x74,0x10,0x72,0xa2,0xa2,0x11,0x61,0x6e,0xa3,0xa2,0x42,6,0x6f,0xe, +0x6f,0x77,0x73,0xa3,0x49,0x74,0xa3,0x4a,0x75,0x12,0x6e,0x6f,0x6f,0x77,0x62,0xa3, +0xac,0x67,0x24,0x69,0x43,0x44,0x11,0x75,0x6c,0x45,0x11,0x62,0x72,0x46,0x11,0x65, +0x77,0x47,2,0x6d,0x2e,0x6e,0x4a,0x74,0x11,0x61,0x6c,0x5d,0x1c,0x70,0x65,0x72, +0x69,0x61,0x6c,0x61,0x72,0x61,0x6d,0x61,0x69,0x63,0xa3,0x74,2,0x64,0x66,0x68, +0x6a,0x73,0x1b,0x63,0x72,0x69,0x70,0x74,0x69,0x6f,0x6e,0x61,0x6c,0x70,0x61,1, +0x68,0x32,0x72,0x14,0x74,0x68,0x69,0x61,0x6e,0xa3,0x7d,0x13,0x6c,0x61,0x76,0x69, +0xa3,0x7a,0x10,0x73,0xa3,0x4d,0x15,0x65,0x72,0x69,0x74,0x65,0x64,0x23,0x64,0xc0, +0xc7,0x64,0xa2,0x60,0x65,0xa2,0x88,0x67,4,0x65,0x62,0x6c,0x7a,0x6f,0x8e,0x72, +0x9a,0x75,1,0x6a,0x38,0x72,1,0x6d,0x24,0x75,0x41,0x13,0x75,0x6b,0x68,0x69, +0x41,1,0x61,0x24,0x72,0x3f,0x13,0x72,0x61,0x74,0x69,0x3f,0x10,0x6f,1,0x6b, +0xa3,0x48,0x72,0x38,0x13,0x67,0x69,0x61,0x6e,0x39,0x11,0x61,0x67,0x90,0x15,0x6f, +0x6c,0x69,0x74,0x69,0x63,0x91,0x11,0x74,0x68,0x3a,0x11,0x69,0x63,0x3b,1,0x61, +0x32,0x65,1,0x65,0x24,0x6b,0x3d,0x10,0x6b,0x3d,0x10,0x6e,0xa2,0x89,0x12,0x74, +0x68,0x61,0xa3,0x89,2,0x65,0x3e,0x73,0x64,0x75,0x11,0x70,0x6c,0xa2,0x87,0x13, +0x6f,0x79,0x61,0x6e,0xa3,0x87,1,0x73,0x38,0x76,0x10,0x61,0x34,0x15,0x6e,0x61, +0x67,0x61,0x72,0x69,0x35,0x13,0x65,0x72,0x65,0x74,0x33,0x11,0x72,0x74,0x33,2, +0x67,0x3a,0x6c,0x72,0x74,0x11,0x68,0x69,0x36,0x13,0x6f,0x70,0x69,0x63,0x37,0x10, +0x79,2,0x64,0xa3,0x45,0x68,0xa3,0x46,0x70,0xa2,0x47,0x1e,0x74,0x69,0x61,0x6e, +0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3,0x47,0x11,0x62,0x61, +0xa2,0x88,0x12,0x73,0x61,0x6e,0xa3,0x88,0x61,0xa2,0xa2,0x62,0xa4,7,0x63,6, +0x6f,0x3d,0x6f,0x5a,0x70,0x76,0x75,0x7a,0x79,1,0x70,0x3e,0x72,2,0x69,0x2a, +0x6c,0x31,0x73,0xa3,0x44,0x13,0x6c,0x6c,0x69,0x63,0x31,0x13,0x72,0x69,0x6f,0x74, +0x7f,1,0x6d,0x30,0x70,0x10,0x74,0x2e,0x11,0x69,0x63,0x2f,0x12,0x6d,0x6f,0x6e, +0x21,0x11,0x72,0x74,0x7f,0x16,0x6e,0x65,0x69,0x66,0x6f,0x72,0x6d,0xa3,0x65,0x61, +0x32,0x68,0xa2,0x41,0x69,0x11,0x72,0x74,0xa3,0x43,3,0x6b,0x4c,0x6e,0x50,0x72, +0x76,0x75,0x1d,0x63,0x61,0x73,0x69,0x61,0x6e,0x61,0x6c,0x62,0x61,0x6e,0x69,0x61, +0x6e,0xa3,0x9f,0x10,0x6d,0xa3,0x76,1,0x61,0x24,0x73,0x71,0x1d,0x64,0x69,0x61, +0x6e,0x61,0x62,0x6f,0x72,0x69,0x67,0x69,0x6e,0x61,0x6c,0x71,0x10,0x69,0xa2,0x68, +0x11,0x61,0x6e,0xa3,0x68,1,0x61,0x34,0x65,0x10,0x72,0x2c,0x13,0x6f,0x6b,0x65, +0x65,0x2d,1,0x6b,0x26,0x6d,0xa3,0x42,0x11,0x6d,0x61,0xa3,0x76,6,0x68,0x4a, +0x68,0x48,0x6e,0x4e,0x72,0x76,0x76,1,0x65,0x2a,0x73,0x10,0x74,0xa3,0x75,0x13, +0x73,0x74,0x61,0x6e,0xa3,0x75,0x11,0x6f,0x6d,0xa3,0xa1,0x11,0x61,0x74,0x1f,0x6f, +0x6c,0x69,0x61,0x6e,0x68,0x69,0x65,0x72,0x6f,0x67,0x6c,0x79,0x70,0x68,0x73,0xa3, +0x9c,1,0x61,0x3e,0x6d,2,0x65,0x2a,0x69,0xa3,0x74,0x6e,0x27,0x13,0x6e,0x69, +0x61,0x6e,0x27,0x10,0x62,0x24,0x11,0x69,0x63,0x25,0x64,0x30,0x66,0x44,0x67,0x11, +0x68,0x62,0xa3,0x9f,0x10,0x6c,1,0x61,0x26,0x6d,0xa3,0xa7,0x10,0x6d,0xa3,0xa7, +0x11,0x61,0x6b,0xa3,0x93,6,0x6c,0x3c,0x6c,0x52,0x6f,0x56,0x72,0x66,0x75,1, +0x67,0x30,0x68,1,0x64,0x79,0x69,0x10,0x64,0x79,0x10,0x69,0x8e,0x13,0x6e,0x65, +0x73,0x65,0x8f,0x11,0x69,0x73,0xa1,0x11,0x70,0x6f,0x2a,0x13,0x6d,0x6f,0x66,0x6f, +0x2b,0x10,0x61,1,0x68,0x2e,0x69,0x7c,0x12,0x6c,0x6c,0x65,0x7d,0xa2,0x41,0x11, +0x6d,0x69,0xa3,0x41,0x61,0x48,0x65,0x9c,0x68,1,0x61,0x2a,0x6b,0x10,0x73,0xa3, +0xa8,0x15,0x69,0x6b,0x73,0x75,0x6b,0x69,0xa3,0xa8,3,0x6c,0x3a,0x6d,0x48,0x73, +0x54,0x74,1,0x61,0x24,0x6b,0x9f,0x10,0x6b,0x9f,0x10,0x69,0x9c,0x13,0x6e,0x65, +0x73,0x65,0x9d,0x10,0x75,0xa2,0x82,0x10,0x6d,0xa3,0x82,0x10,0x73,0xa2,0x86,0x13, +0x61,0x76,0x61,0x68,0xa3,0x86,0x11,0x6e,0x67,0x28,0x12,0x61,0x6c,0x69,0x29,3, +0x6c,0x42,0x6e,0x90,0x74,0xa2,0x46,0x76,0x24,0x17,0x6f,0x77,0x65,0x6c,0x6a,0x61, +0x6d,0x6f,0x25,0x22,1,0x65,0x54,0x76,0x28,1,0x73,0x38,0x74,0x2a,0x17,0x73, +0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65,0x2b,0x16,0x79,0x6c,0x6c,0x61,0x62,0x6c,0x65, +0x29,0x18,0x61,0x64,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x23,1,0x61,0x21,0x6f, +0x1a,0x74,0x61,0x70,0x70,0x6c,0x69,0x63,0x61,0x62,0x6c,0x65,0x21,0x26,0x1a,0x72, +0x61,0x69,0x6c,0x69,0x6e,0x67,0x6a,0x61,0x6d,0x6f,0x27,1,0x6e,0x2c,0x79,0x22, +0x11,0x65,0x73,0x23,0x20,0x10,0x6f,0x21,1,0x6e,0x2c,0x79,0x22,0x11,0x65,0x73, +0x23,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a,0x79,0x22,0x11,0x65,0x73,0x23, +0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f,0x21,2,0x6d,0x30,0x6e,0x3a, +0x79,0x22,0x11,0x65,0x73,0x23,0x24,0x13,0x61,0x79,0x62,0x65,0x25,0x20,0x10,0x6f, +0x21,0xb,0x72,0x39,0x76,0xc,0x76,0x33,0x78,0x2a,0x7a,0x11,0x77,0x6a,0x43,0x10, +0x78,0x21,0x72,0x28,0x73,0x50,0x74,0x31,1,0x65,0x24,0x69,0x39,0x1e,0x67,0x69, +0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64,0x69,0x63,0x61,0x74,0x6f,0x72,0x39,1,0x6d, +0x35,0x70,0x18,0x61,0x63,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0x35,0x6c,0x1f,0x6c, +0x3c,0x6f,0x4a,0x70,1,0x70,0x37,0x72,0x14,0x65,0x70,0x65,0x6e,0x64,0x37,0x28, +1,0x66,0x2b,0x76,0x2c,0x10,0x74,0x2f,0x13,0x74,0x68,0x65,0x72,0x21,0x63,0x4c, +0x65,0x64,0x67,1,0x61,0x3a,0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a, +0x77,0x6a,0x41,0x10,0x7a,0x41,2,0x6e,0x23,0x6f,0x24,0x72,0x25,0x14,0x6e,0x74, +0x72,0x6f,0x6c,0x23,2,0x62,0x34,0x6d,0x4e,0x78,0x26,0x13,0x74,0x65,0x6e,0x64, +0x27,0x3a,1,0x61,0x24,0x67,0x3d,0x11,0x73,0x65,0x3a,0x12,0x67,0x61,0x7a,0x3d, +0x3e,0x16,0x6f,0x64,0x69,0x66,0x69,0x65,0x72,0x3f,9,0x6e,0x4a,0x6e,0x34,0x6f, +0x44,0x73,0x60,0x75,0x94,0x78,0x10,0x78,0x21,0x10,0x75,0x2a,0x14,0x6d,0x65,0x72, +0x69,0x63,0x2b,1,0x6c,0x2c,0x74,0x12,0x68,0x65,0x72,0x21,0x14,0x65,0x74,0x74, +0x65,0x72,0x2d,3,0x63,0x36,0x65,0x46,0x70,0x31,0x74,0x32,0x12,0x65,0x72,0x6d, +0x33,0x3c,0x16,0x6f,0x6e,0x74,0x69,0x6e,0x75,0x65,0x3d,0x2e,0x10,0x70,0x2f,0x10, +0x70,0x34,0x12,0x70,0x65,0x72,0x35,0x61,0x46,0x63,0x52,0x65,0x64,0x66,0x72,0x6c, +2,0x65,0x2d,0x66,0x3b,0x6f,0x28,0x12,0x77,0x65,0x72,0x29,0x10,0x74,0x22,0x12, +0x65,0x72,0x6d,0x23,1,0x6c,0x24,0x72,0x37,0x24,0x12,0x6f,0x73,0x65,0x25,0x10, +0x78,0x38,0x13,0x74,0x65,0x6e,0x64,0x39,0x10,0x6f,0x26,0x13,0x72,0x6d,0x61,0x74, +0x27,0xf,0x6c,0x7c,0x72,0x34,0x72,0x32,0x73,0x5a,0x78,0x76,0x7a,0x11,0x77,0x6a, +0x4b,1,0x65,0x24,0x69,0x3b,0x1e,0x67,0x69,0x6f,0x6e,0x61,0x6c,0x69,0x6e,0x64, +0x69,0x63,0x61,0x74,0x6f,0x72,0x3b,1,0x69,0x24,0x71,0x3f,0x18,0x6e,0x67,0x6c, +0x65,0x71,0x75,0x6f,0x74,0x65,0x3f,0x10,0x78,0x21,0x6c,0x36,0x6d,0x3c,0x6e,0x76, +0x6f,0x13,0x74,0x68,0x65,0x72,0x21,1,0x65,0x23,0x66,0x35,3,0x62,0x37,0x69, +0x28,0x6c,0x29,0x6e,0x2b,0x10,0x64,1,0x6c,0x34,0x6e,0x11,0x75,0x6d,0x2a,0x12, +0x6c,0x65,0x74,0x37,0x14,0x65,0x74,0x74,0x65,0x72,0x29,2,0x65,0x36,0x6c,0x39, +0x75,0x2c,0x14,0x6d,0x65,0x72,0x69,0x63,0x2d,0x14,0x77,0x6c,0x69,0x6e,0x65,0x39, +0x66,0x3f,0x66,0x40,0x67,0x4e,0x68,0x70,0x6b,0x10,0x61,0x26,0x15,0x74,0x61,0x6b, +0x61,0x6e,0x61,0x27,0x10,0x6f,0x24,0x13,0x72,0x6d,0x61,0x74,0x25,1,0x61,0x3a, +0x6c,0x19,0x75,0x65,0x61,0x66,0x74,0x65,0x72,0x7a,0x77,0x6a,0x49,0x10,0x7a,0x49, +1,0x65,0x24,0x6c,0x3d,0x19,0x62,0x72,0x65,0x77,0x6c,0x65,0x74,0x74,0x65,0x72, +0x3d,0x61,0x86,0x63,0x92,0x64,0x94,0x65,2,0x62,0x44,0x6d,0x5e,0x78,0x2e,0x13, +0x74,0x65,0x6e,0x64,0x32,0x15,0x6e,0x75,0x6d,0x6c,0x65,0x74,0x2f,0x42,1,0x61, +0x24,0x67,0x45,0x11,0x73,0x65,0x42,0x12,0x67,0x61,0x7a,0x45,0x46,0x16,0x6f,0x64, +0x69,0x66,0x69,0x65,0x72,0x47,0x15,0x6c,0x65,0x74,0x74,0x65,0x72,0x23,0x10,0x72, +0x31,1,0x6f,0x24,0x71,0x41,0x18,0x75,0x62,0x6c,0x65,0x71,0x75,0x6f,0x74,0x65, +0x41,2,0x63,0x32,0x6e,0x3c,0x6f,0x22,0x12,0x70,0x65,0x6e,0x23,0x24,0x13,0x6c, +0x6f,0x73,0x65,0x25,0x20,0x12,0x6f,0x6e,0x65,0x21,0xd,0x6e,0xc1,0x86,0x73,0xa8, +0x73,0x4c,0x74,0xa2,0x76,0x75,0xa2,0x83,0x7a,0xd8,0x70,0,2,0x6c,0xd9,0x20, +0,0x70,0xd9,0x40,0,0x73,0xc3,0,0xfe,0xf,0,0,0,7,0x6f,0x3c, +0x6f,0xff,8,0,0,0,0x70,0x3a,0x75,0x6e,0x79,0x13,0x6d,0x62,0x6f,0x6c, +0xff,0xf,0,0,0,0x11,0x61,0x63,1,0x65,0x34,0x69,0x15,0x6e,0x67,0x6d, +0x61,0x72,0x6b,0xa5,0,0x18,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xc3, +0,0x16,0x72,0x72,0x6f,0x67,0x61,0x74,0x65,0xe1,0,0,0x63,0xff,2,0, +0,0,0x65,0x38,0x6b,0xff,4,0,0,0,0x6d,0xff,1,0,0,0, +0x16,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x70,0,0x1d,0x69,0x74,0x6c,0x65, +0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x31,1,0x6e,0x40,0x70,0x1c, +0x70,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65,0x74,0x74,0x65,0x72,0x25,0x17,0x61, +0x73,0x73,0x69,0x67,0x6e,0x65,0x64,0x23,0x6e,0xa2,0x69,0x6f,0xa2,0x89,0x70,0xfe, +0x30,0xf8,0,0,9,0x69,0x33,0x69,0xff,0x10,0,0,0,0x6f,0xfd,0x80, +0,0,0x72,0x54,0x73,0xf9,0,0,0x75,0x12,0x6e,0x63,0x74,0xfe,0x30,0xf8, +0,0,0x15,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x30,0xf8,0,0,0x17,0x69, +0x76,0x61,0x74,0x65,0x75,0x73,0x65,0xdd,0,0,0x61,0x48,0x63,0xfd,0x40,0, +0,0x64,0xe9,0,0,0x65,0xfd,0x20,0,0,0x66,0xff,0x20,0,0,0, +0x1f,0x72,0x61,0x67,0x72,0x61,0x70,0x68,0x73,0x65,0x70,0x61,0x72,0x61,0x74,0x6f, +0x72,0xd9,0x40,0,0xbe,0,3,0x64,0xa7,0,0x6c,0xab,0,0x6f,0x30,0x75, +0x13,0x6d,0x62,0x65,0x72,0xbf,0,0xb2,0,0x1b,0x6e,0x73,0x70,0x61,0x63,0x69, +0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa1,1,0x70,0x92,0x74,0x12,0x68,0x65,0x72,0xe6, +0x80,1,3,0x6c,0x40,0x6e,0x4a,0x70,0x56,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c, +0xff,8,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x61,0x14,0x75,0x6d,0x62, +0x65,0x72,0xb3,0,0x19,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd, +0x80,0,0,0x1c,0x65,0x6e,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f, +0x6e,0xf9,0,0,0x66,0xc0,0xc4,0x66,0xa2,0x47,0x69,0xa2,0x64,0x6c,0xa2,0x79, +0x6d,0xa4,0xc0,4,0x61,0x6c,0x63,0xa5,0,0x65,0xa3,0x80,0x6e,0xa1,0x6f,0x15, +0x64,0x69,0x66,0x69,0x65,0x72,1,0x6c,0x38,0x73,0x14,0x79,0x6d,0x62,0x6f,0x6c, +0xff,4,0,0,0,0x14,0x65,0x74,0x74,0x65,0x72,0x41,1,0x72,0x3c,0x74, +0x16,0x68,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,1,0,0,0,0x10,0x6b,0xa5, +0xc0,1,0x69,0x32,0x6f,0x13,0x72,0x6d,0x61,0x74,0xdb,0,0,0x1d,0x6e,0x61, +0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xff,0x20,0,0, +0,0x10,0x6e,0x1f,0x69,0x74,0x69,0x61,0x6c,0x70,0x75,0x6e,0x63,0x74,0x75,0x61, +0x74,0x69,0x6f,0x6e,0xff,0x10,0,0,0,0x9c,7,0x6d,0x18,0x6d,0x41,0x6f, +0x28,0x74,0x31,0x75,0x25,0x60,0x1c,0x77,0x65,0x72,0x63,0x61,0x73,0x65,0x6c,0x65, +0x74,0x74,0x65,0x72,0x29,0x63,0x3d,0x65,0x28,0x69,0x42,0x6c,0x29,0x13,0x74,0x74, +0x65,0x72,0x9c,0x15,0x6e,0x75,0x6d,0x62,0x65,0x72,0xab,0,0x1a,0x6e,0x65,0x73, +0x65,0x70,0x61,0x72,0x61,0x74,0x6f,0x72,0xd9,0x20,0,0x63,0x46,0x64,0xa2,0x96, +0x65,0x1b,0x6e,0x63,0x6c,0x6f,0x73,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa3,0x80, +0xe6,0x80,1,7,0x6e,0x57,0x6e,0x52,0x6f,0x5e,0x73,0xe1,0,0,0x75,0x1b, +0x72,0x72,0x65,0x6e,0x63,0x79,0x73,0x79,0x6d,0x62,0x6f,0x6c,0xff,2,0,0, +0,0x22,0x12,0x74,0x72,0x6c,0xd9,0x80,0,0xdc,0,0,1,0x6d,0x62,0x6e, +1,0x6e,0x30,0x74,0x12,0x72,0x6f,0x6c,0xd9,0x80,0,0x1f,0x65,0x63,0x74,0x6f, +0x72,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x40,0,0, +0x19,0x62,0x69,0x6e,0x69,0x6e,0x67,0x6d,0x61,0x72,0x6b,0xa5,0xc0,0x61,0x58,0x63, +0xd9,0x80,0,0x66,0xdb,0,0,0x6c,0x1d,0x6f,0x73,0x65,0x70,0x75,0x6e,0x63, +0x74,0x75,0x61,0x74,0x69,0x6f,0x6e,0xfd,0x20,0,0,0x18,0x73,0x65,0x64,0x6c, +0x65,0x74,0x74,0x65,0x72,0x3d,2,0x61,0x32,0x65,0x50,0x69,0x12,0x67,0x69,0x74, +0xa7,0,0x1c,0x73,0x68,0x70,0x75,0x6e,0x63,0x74,0x75,0x61,0x74,0x69,0x6f,0x6e, +0xe9,0,0,0x1a,0x63,0x69,0x6d,0x61,0x6c,0x6e,0x75,0x6d,0x62,0x65,0x72,0xa7, +0 }; -const char PropNameData::nameGroups[17897]={ +const char PropNameData::nameGroups[18440]={ 2,'A','l','p','h','a',0,'A','l','p','h','a','b','e','t','i','c',0, 4,'N',0,'N','o',0,'F',0,'F','a','l','s','e',0,4,'Y',0,'Y','e','s',0,'T',0,'T','r','u','e',0, 2,'N','R',0,'N','o','t','_','R','e','o','r','d','e','r','e','d',0, @@ -954,8 +984,9 @@ const char PropNameData::nameGroups[17897]={ 2,'X','I','D','C',0,'X','I','D','_','C','o','n','t','i','n','u','e',0, 2,'X','I','D','S',0,'X','I','D','_','S','t','a','r','t',0, 2,'S','e','n','s','i','t','i','v','e',0,'C','a','s','e','_','S','e','n','s','i','t','i','v','e',0, -2,'S','T','e','r','m',0,'S','T','e','r','m',0,2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e','c', -'t','o','r',0,2,'n','f','d','i','n','e','r','t',0,'N','F','D','_','I','n','e','r','t',0, +2,'S','T','e','r','m',0,'S','e','n','t','e','n','c','e','_','T','e','r','m','i','n','a','l',0, +2,'V','S',0,'V','a','r','i','a','t','i','o','n','_','S','e','l','e','c','t','o','r',0, +2,'n','f','d','i','n','e','r','t',0,'N','F','D','_','I','n','e','r','t',0, 2,'n','f','k','d','i','n','e','r','t',0,'N','F','K','D','_','I','n','e','r','t',0, 2,'n','f','c','i','n','e','r','t',0,'N','F','C','_','I','n','e','r','t',0, 2,'n','f','k','c','i','n','e','r','t',0,'N','F','K','C','_','I','n','e','r','t',0, @@ -1297,6 +1328,17 @@ const char PropNameData::nameGroups[17897]={ 's',0,'S','u','p','p','l','e','m','e','n','t','a','l','_','S','y','m','b','o','l','s','_','A','n','d','_','P','i','c','t','o', 'g','r','a','p','h','s',0,2,'S','u','t','t','o','n','_','S','i','g','n','W','r','i','t','i','n','g',0, 'S','u','t','t','o','n','_','S','i','g','n','W','r','i','t','i','n','g',0, +2,'A','d','l','a','m',0,'A','d','l','a','m',0,2,'B','h','a','i','k','s','u','k','i',0, +'B','h','a','i','k','s','u','k','i',0,2,'C','y','r','i','l','l','i','c','_','E','x','t','_','C',0, +'C','y','r','i','l','l','i','c','_','E','x','t','e','n','d','e','d','_','C',0, +2,'G','l','a','g','o','l','i','t','i','c','_','S','u','p',0,'G','l','a','g','o','l','i','t','i','c','_','S','u','p','p','l', +'e','m','e','n','t',0,2,'I','d','e','o','g','r','a','p','h','i','c','_','S','y','m','b','o','l','s',0, +'I','d','e','o','g','r','a','p','h','i','c','_','S','y','m','b','o','l','s','_','A','n','d','_','P','u','n','c','t','u','a','t', +'i','o','n',0,2,'M','a','r','c','h','e','n',0,'M','a','r','c','h','e','n',0, +2,'M','o','n','g','o','l','i','a','n','_','S','u','p',0,'M','o','n','g','o','l','i','a','n','_','S','u','p','p','l','e','m', +'e','n','t',0,2,'N','e','w','a',0,'N','e','w','a',0,2,'O','s','a','g','e',0,'O','s','a','g','e',0, +2,'T','a','n','g','u','t',0,'T','a','n','g','u','t',0,2,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t', +'s',0,'T','a','n','g','u','t','_','C','o','m','p','o','n','e','n','t','s',0, 2,'c','c','c',0,'C','a','n','o','n','i','c','a','l','_','C','o','m','b','i','n','i','n','g','_','C','l','a','s','s',0, 2,'d','t',0,'D','e','c','o','m','p','o','s','i','t','i','o','n','_','T','y','p','e',0, 3,'N','o','n','e',0,'N','o','n','e',0,'n','o','n','e',0, @@ -1415,6 +1457,9 @@ const char PropNameData::nameGroups[17897]={ 2,'M','a','n','i','c','h','a','e','a','n','_','Y','o','d','h',0,'M','a','n','i','c','h','a','e','a','n','_','Y','o','d','h', 0,2,'M','a','n','i','c','h','a','e','a','n','_','Z','a','y','i','n',0,'M','a','n','i','c','h','a','e','a','n','_','Z','a', 'y','i','n',0,2,'S','t','r','a','i','g','h','t','_','W','a','w',0,'S','t','r','a','i','g','h','t','_','W','a','w',0, +2,'A','f','r','i','c','a','n','_','F','e','h',0,'A','f','r','i','c','a','n','_','F','e','h',0, +2,'A','f','r','i','c','a','n','_','N','o','o','n',0,'A','f','r','i','c','a','n','_','N','o','o','n',0, +2,'A','f','r','i','c','a','n','_','Q','a','f',0,'A','f','r','i','c','a','n','_','Q','a','f',0, 2,'j','t',0,'J','o','i','n','i','n','g','_','T','y','p','e',0, 2,'U',0,'N','o','n','_','J','o','i','n','i','n','g',0,2,'C',0,'J','o','i','n','_','C','a','u','s','i','n','g',0, 2,'D',0,'D','u','a','l','_','J','o','i','n','i','n','g',0, @@ -1449,7 +1494,8 @@ const char PropNameData::nameGroups[17897]={ 's','i','s',0,2,'C','J',0,'C','o','n','d','i','t','i','o','n','a','l','_','J','a','p','a','n','e','s','e','_','S','t','a', 'r','t','e','r',0,2,'H','L',0,'H','e','b','r','e','w','_','L','e','t','t','e','r',0, 2,'R','I',0,'R','e','g','i','o','n','a','l','_','I','n','d','i','c','a','t','o','r',0, -2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0, +2,'E','B',0,'E','_','B','a','s','e',0,2,'E','M',0,'E','_','M','o','d','i','f','i','e','r',0, +2,'Z','W','J',0,'Z','W','J',0,2,'n','t',0,'N','u','m','e','r','i','c','_','T','y','p','e',0, 2,'N','o','n','e',0,'N','o','n','e',0,2,'D','e',0,'D','e','c','i','m','a','l',0, 2,'D','i',0,'D','i','g','i','t',0,2,'N','u',0,'N','u','m','e','r','i','c',0, 2,'s','c',0,'S','c','r','i','p','t',0,2,'Z','y','y','y',0,'C','o','m','m','o','n',0, @@ -1543,15 +1589,19 @@ const char PropNameData::nameGroups[17897]={ 2,'A','f','a','k',0,'A','f','a','k',0,2,'J','u','r','c',0,'J','u','r','c',0, 2,'M','r','o','o',0,'M','r','o',0,2,'N','s','h','u',0,'N','s','h','u',0, 2,'S','h','r','d',0,'S','h','a','r','a','d','a',0,2,'S','o','r','a',0,'S','o','r','a','_','S','o','m','p','e','n','g', -0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g',0, +0,2,'T','a','k','r',0,'T','a','k','r','i',0,2,'T','a','n','g',0,'T','a','n','g','u','t',0, 2,'W','o','l','e',0,'W','o','l','e',0,2,'H','l','u','w',0,'A','n','a','t','o','l','i','a','n','_','H','i','e','r','o', 'g','l','y','p','h','s',0,2,'K','h','o','j',0,'K','h','o','j','k','i',0, 2,'T','i','r','h',0,'T','i','r','h','u','t','a',0,2,'A','g','h','b',0,'C','a','u','c','a','s','i','a','n','_','A','l', 'b','a','n','i','a','n',0,2,'M','a','h','j',0,'M','a','h','a','j','a','n','i',0, 2,'H','a','t','r',0,'H','a','t','r','a','n',0,2,'M','u','l','t',0,'M','u','l','t','a','n','i',0, 2,'P','a','u','c',0,'P','a','u','_','C','i','n','_','H','a','u',0, -2,'S','i','d','d',0,'S','i','d','d','h','a','m',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b', -'l','e','_','T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0, +2,'S','i','d','d',0,'S','i','d','d','h','a','m',0,2,'A','d','l','m',0,'A','d','l','a','m',0, +2,'B','h','k','s',0,'B','h','a','i','k','s','u','k','i',0, +2,'M','a','r','c',0,'M','a','r','c','h','e','n',0,2,'O','s','g','e',0,'O','s','a','g','e',0, +2,'H','a','n','b',0,'H','a','n','b',0,2,'J','a','m','o',0,'J','a','m','o',0, +2,'Z','s','y','e',0,'Z','s','y','e',0,2,'h','s','t',0,'H','a','n','g','u','l','_','S','y','l','l','a','b','l','e','_', +'T','y','p','e',0,2,'N','A',0,'N','o','t','_','A','p','p','l','i','c','a','b','l','e',0, 2,'L',0,'L','e','a','d','i','n','g','_','J','a','m','o',0, 2,'V',0,'V','o','w','e','l','_','J','a','m','o',0,2,'T',0,'T','r','a','i','l','i','n','g','_','J','a','m','o',0, 2,'L','V',0,'L','V','_','S','y','l','l','a','b','l','e',0, @@ -1568,7 +1618,9 @@ const char PropNameData::nameGroups[17897]={ 2,'E','X',0,'E','x','t','e','n','d',0,2,'L',0,'L',0, 2,'L','F',0,'L','F',0,2,'L','V',0,'L','V',0,2,'L','V','T',0,'L','V','T',0, 2,'T',0,'T',0,2,'V',0,'V',0,2,'S','M',0,'S','p','a','c','i','n','g','M','a','r','k',0, -2,'P','P',0,'P','r','e','p','e','n','d',0,2,'S','B',0,'S','e','n','t','e','n','c','e','_','B','r','e','a','k',0, +2,'P','P',0,'P','r','e','p','e','n','d',0,2,'E','B','G',0,'E','_','B','a','s','e','_','G','A','Z',0, +2,'G','A','Z',0,'G','l','u','e','_','A','f','t','e','r','_','Z','w','j',0, +2,'S','B',0,'S','e','n','t','e','n','c','e','_','B','r','e','a','k',0, 2,'A','T',0,'A','T','e','r','m',0,2,'C','L',0,'C','l','o','s','e',0, 2,'F','O',0,'F','o','r','m','a','t',0,2,'L','O',0,'L','o','w','e','r',0, 2,'L','E',0,'O','L','e','t','t','e','r',0,2,'S','E',0,'S','e','p',0, diff --git a/deps/icu-small/source/common/propsvec.c b/deps/icu-small/source/common/propsvec.c index f91a155cf8da0d..ed4d89954b872f 100644 --- a/deps/icu-small/source/common/propsvec.c +++ b/deps/icu-small/source/common/propsvec.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -218,7 +220,7 @@ upvec_setValue(UPropsVectors *pv, *pErrorCode=U_MEMORY_ALLOCATION_ERROR; return; } - uprv_memcpy(newVectors, pv->v, rows*columns*4); + uprv_memcpy(newVectors, pv->v, (size_t)rows*columns*4); firstRow=newVectors+(firstRow-pv->v); lastRow=newVectors+(lastRow-pv->v); uprv_free(pv->v); @@ -240,7 +242,7 @@ upvec_setValue(UPropsVectors *pv, if(splitFirstRow) { /* copy all affected rows up one and move the lastRow pointer */ count = (int32_t)((lastRow-firstRow)+columns); - uprv_memmove(firstRow+columns, firstRow, count*4); + uprv_memmove(firstRow+columns, firstRow, (size_t)count*4); lastRow+=columns; /* split the range and move the firstRow pointer */ @@ -251,7 +253,7 @@ upvec_setValue(UPropsVectors *pv, /* split the last row */ if(splitLastRow) { /* copy the last row data */ - uprv_memcpy(lastRow+columns, lastRow, columns*4); + uprv_memcpy(lastRow+columns, lastRow, (size_t)columns*4); /* split the range and move the firstRow pointer */ lastRow[1]=lastRow[columns]=(uint32_t)limit; @@ -415,7 +417,7 @@ upvec_compact(UPropsVectors *pv, UPVecCompactHandler *handler, void *context, UE /* add a new values vector if it is different from the current one */ if(count<0 || 0!=uprv_memcmp(row+2, pv->v+count, valueColumns*4)) { count+=valueColumns; - uprv_memmove(pv->v+count, row+2, valueColumns*4); + uprv_memmove(pv->v+count, row+2, (size_t)valueColumns*4); } if(startd_name; if (uprv_strcmp(dirName, SKIP1) != 0 && uprv_strcmp(dirName, SKIP2) != 0) { /* Create a newpath with the new entry to test each entry in the directory. */ - char newpath[MAX_PATH_SIZE]; - uprv_strcpy(newpath, curpath); - uprv_strcat(newpath, dirName); + CharString newpath(curpath, status); + newpath.append(dirName, -1, status); + if (U_FAILURE(status)) { + return NULL; + } - if ((subDirp = opendir(newpath)) != NULL) { + if ((subDirp = opendir(newpath.data())) != NULL) { /* If this new path is a directory, make a recursive call with the newpath. */ closedir(subDirp); - uprv_strcat(newpath, "/"); - result = searchForTZFile(newpath, tzInfo); + newpath.append('/', status); + if (U_FAILURE(status)) { + return NULL; + } + result = searchForTZFile(newpath.data(), tzInfo); /* Have to get out here. Otherwise, we'd keep looking and return the first match in the top-level directory @@ -955,11 +976,19 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { if (result != NULL) break; } else if (uprv_strcmp(TZFILE_SKIP, dirName) != 0 && uprv_strcmp(TZFILE_SKIP2, dirName) != 0) { - if(compareBinaryFiles(TZDEFAULT, newpath, tzInfo)) { - const char* zoneid = newpath + (sizeof(TZZONEINFO)) - 1; + if(compareBinaryFiles(TZDEFAULT, newpath.data(), tzInfo)) { + int32_t amountToSkip = sizeof(TZZONEINFO) - 1; + if (amountToSkip > newpath.length()) { + amountToSkip = newpath.length(); + } + const char* zoneid = newpath.data() + amountToSkip; skipZoneIDPrefix(&zoneid); - uprv_strcpy(SEARCH_TZFILE_RESULT, zoneid); - result = SEARCH_TZFILE_RESULT; + gSearchTZFileResult->clear(); + gSearchTZFileResult->append(zoneid, -1, status); + if (U_FAILURE(status)) { + return NULL; + } + result = gSearchTZFileResult->data(); /* Get out after the first one found. */ break; } @@ -970,6 +999,15 @@ static char* searchForTZFile(const char* path, DefaultTZInfo* tzInfo) { return result; } #endif + +U_CAPI void U_EXPORT2 +uprv_tzname_clear_cache() +{ +#if defined(CHECK_LOCALTIME_LINK) && !defined(DEBUG_SKIP_LOCALTIME_LINK) + gTimeZoneBufferPtr = NULL; +#endif +} + U_CAPI const char* U_EXPORT2 uprv_tzname(int n) { @@ -1019,7 +1057,7 @@ uprv_tzname(int n) because the tzfile contents is underspecified. This isn't guaranteed to work because it may not be a symlink. */ - int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)); + int32_t ret = (int32_t)readlink(TZDEFAULT, gTimeZoneBuffer, sizeof(gTimeZoneBuffer)-1); if (0 < ret) { int32_t tzZoneInfoLen = uprv_strlen(TZZONEINFO); gTimeZoneBuffer[ret] = 0; @@ -1139,6 +1177,11 @@ static UBool U_CALLCONV putil_cleanup(void) gTimeZoneFilesDirectory = NULL; gTimeZoneFilesInitOnce.reset(); +#ifdef SEARCH_TZFILE + delete gSearchTZFileResult; + gSearchTZFileResult = NULL; +#endif + #if U_POSIX_LOCALE || U_PLATFORM_USES_ONLY_WIN32_API if (gCorrectedPOSIXLocale) { uprv_free(gCorrectedPOSIXLocale); diff --git a/deps/icu-small/source/common/putilimp.h b/deps/icu-small/source/common/putilimp.h index b52a91c7ac0262..cb783508255dd6 100644 --- a/deps/icu-small/source/common/putilimp.h +++ b/deps/icu-small/source/common/putilimp.h @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1997-2015, International Business Machines +* Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -148,7 +150,7 @@ typedef size_t uintptr_t; #ifdef U_HAVE_MMAP /* Use the predefined value. */ -#elif U_PLATFORM_HAS_WIN32_API +#elif U_PLATFORM_USES_ONLY_WIN32_API # define U_HAVE_MMAP 0 #else # define U_HAVE_MMAP 1 @@ -171,7 +173,7 @@ typedef size_t uintptr_t; */ #ifdef U_HAVE_DIRENT_H /* Use the predefined value. */ -#elif U_PLATFORM_HAS_WIN32_API +#elif U_PLATFORM_USES_ONLY_WIN32_API # define U_HAVE_DIRENT_H 0 #else # define U_HAVE_DIRENT_H 1 @@ -478,6 +480,12 @@ U_INTERNAL int32_t U_EXPORT2 uprv_timezone(void); */ U_INTERNAL const char* U_EXPORT2 uprv_tzname(int n); +/** + * Reset the global tzname cache. + * @internal + */ +U_INTERNAL void uprv_tzname_clear_cache(); + /** * Get UTC (GMT) time measured in milliseconds since 0:00 on 1/1/1970. * This function is affected by 'faketime' and should be the bottleneck for all user-visible ICU time functions. diff --git a/deps/icu-small/source/common/rbbi.cpp b/deps/icu-small/source/common/rbbi.cpp index 8b6f7c0cc6a9eb..daba40b741406d 100644 --- a/deps/icu-small/source/common/rbbi.cpp +++ b/deps/icu-small/source/common/rbbi.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2016 International Business Machines Corporation @@ -72,21 +74,6 @@ RuleBasedBreakIterator::RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode } } -/** - * Same as above but does not adopt memory - */ -RuleBasedBreakIterator::RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt, UErrorCode &status) -{ - init(); - fData = new RBBIDataWrapper(data, RBBIDataWrapper::kDontAdopt, status); // status checked in constructor - if (U_FAILURE(status)) {return;} - if(fData == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } -} - - // // Construct from precompiled binary rules (tables). This constructor is public API, // taking the rules as a (const uint8_t *) to match the type produced by getBinaryRules(). diff --git a/deps/icu-small/source/common/rbbicst.pl b/deps/icu-small/source/common/rbbicst.pl old mode 100644 new mode 100755 index 82f770615372b8..839b9501dda953 --- a/deps/icu-small/source/common/rbbicst.pl +++ b/deps/icu-small/source/common/rbbicst.pl @@ -1,4 +1,8 @@ #************************************************************************** +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html#License +#************************************************************************** +#************************************************************************** # Copyright (C) 2002-2016 International Business Machines Corporation # and others. All rights reserved. #************************************************************************** diff --git a/deps/icu-small/source/common/rbbidata.cpp b/deps/icu-small/source/common/rbbidata.cpp index 3f151b42bbf496..afa87eb6a83f6b 100644 --- a/deps/icu-small/source/common/rbbidata.cpp +++ b/deps/icu-small/source/common/rbbidata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2014 International Business Machines Corporation * diff --git a/deps/icu-small/source/common/rbbidata.h b/deps/icu-small/source/common/rbbidata.h index 3e53c44ad5b7ae..0d6cde2d942284 100644 --- a/deps/icu-small/source/common/rbbidata.h +++ b/deps/icu-small/source/common/rbbidata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/rbbinode.cpp b/deps/icu-small/source/common/rbbinode.cpp index 221f8f2661a72e..d0949a3f7f045a 100644 --- a/deps/icu-small/source/common/rbbinode.cpp +++ b/deps/icu-small/source/common/rbbinode.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2002-2016 International Business Machines Corporation * @@ -23,6 +25,8 @@ #include "unicode/uniset.h" #include "unicode/uchar.h" #include "unicode/parsepos.h" + +#include "cstr.h" #include "uvector.h" #include "rbbirb.h" @@ -165,8 +169,6 @@ RBBINode *RBBINode::cloneTree() { } } } - n->fRuleRoot = this->fRuleRoot; - n->fChainIn = this->fChainIn; return n; } @@ -192,8 +194,12 @@ RBBINode *RBBINode::cloneTree() { //------------------------------------------------------------------------- RBBINode *RBBINode::flattenVariables() { if (fType == varRef) { - RBBINode *retNode = fLeftChild->cloneTree(); - delete this; + RBBINode *retNode = fLeftChild->cloneTree(); + if (retNode != NULL) { + retNode->fRuleRoot = this->fRuleRoot; + retNode->fChainIn = this->fChainIn; + } + delete this; // TODO: undefined behavior. Fix. return retNode; } @@ -284,7 +290,7 @@ static int32_t serial(const RBBINode *node) { } -void RBBINode::printNode() { +void RBBINode::printNode(const RBBINode *node) { static const char * const nodeTypeNames[] = { "setRef", "uset", @@ -304,15 +310,16 @@ void RBBINode::printNode() { "opLParen" }; - if (this==NULL) { - RBBIDebugPrintf("%10p", (void *)this); + if (node==NULL) { + RBBIDebugPrintf("%10p", (void *)node); } else { RBBIDebugPrintf("%10p %5d %12s %c%c %5d %5d %5d %6d %d ", - (void *)this, fSerialNum, nodeTypeNames[fType], fRuleRoot?'R':' ', fChainIn?'C':' ', - serial(fLeftChild), serial(fRightChild), serial(fParent), - fFirstPos, fVal); - if (fType == varRef) { - RBBI_DEBUG_printUnicodeString(fText); + (void *)node, node->fSerialNum, nodeTypeNames[node->fType], + node->fRuleRoot?'R':' ', node->fChainIn?'C':' ', + serial(node->fLeftChild), serial(node->fRightChild), serial(node->fParent), + node->fFirstPos, node->fVal); + if (node->fType == varRef) { + RBBI_DEBUG_printUnicodeString(node->fText); } } RBBIDebugPrintf("\n"); @@ -321,16 +328,8 @@ void RBBINode::printNode() { #ifdef RBBI_DEBUG -U_CFUNC void RBBI_DEBUG_printUnicodeString(const UnicodeString &s, int minWidth) -{ - int i; - for (i=0; iprintNode(); - if (this != NULL) { + printNode(node); + if (node != NULL) { // Only dump the definition under a variable reference if asked to. // Unconditinally dump children of all other node types. - if (fType != varRef) { - if (fLeftChild != NULL) { - fLeftChild->printTree(FALSE); + if (node->fType != varRef) { + if (node->fLeftChild != NULL) { + printTree(node->fLeftChild, FALSE); } - if (fRightChild != NULL) { - fRightChild->printTree(FALSE); + if (node->fRightChild != NULL) { + printTree(node->fRightChild, FALSE); } } } diff --git a/deps/icu-small/source/common/rbbinode.h b/deps/icu-small/source/common/rbbinode.h index 4960e38f69cf41..ac26ceefaf449f 100644 --- a/deps/icu-small/source/common/rbbinode.h +++ b/deps/icu-small/source/common/rbbinode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2001-2016, International Business Machines Corporation and @@ -100,8 +102,8 @@ class RBBINode : public UMemory { #ifdef RBBI_DEBUG static void printNodeHeader(); - void printNode(); - void printTree(UBool withHeading); + static void printNode(const RBBINode *n); + static void printTree(const RBBINode *n, UBool withHeading); #endif private: diff --git a/deps/icu-small/source/common/rbbirb.cpp b/deps/icu-small/source/common/rbbirb.cpp index c2dce683172e52..475fdd7f8369e7 100644 --- a/deps/icu-small/source/common/rbbirb.cpp +++ b/deps/icu-small/source/common/rbbirb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbirb.cpp // diff --git a/deps/icu-small/source/common/rbbirb.h b/deps/icu-small/source/common/rbbirb.h index b454b609fd993d..1a9d3023254139 100644 --- a/deps/icu-small/source/common/rbbirb.h +++ b/deps/icu-small/source/common/rbbirb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbirb.h // diff --git a/deps/icu-small/source/common/rbbirpt.h b/deps/icu-small/source/common/rbbirpt.h index f628c938154022..542a396df089b7 100644 --- a/deps/icu-small/source/common/rbbirpt.h +++ b/deps/icu-small/source/common/rbbirpt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------------------------------- // // Generated Header File. Do not edit by hand. diff --git a/deps/icu-small/source/common/rbbiscan.cpp b/deps/icu-small/source/common/rbbiscan.cpp index e19a6479c31748..57432509454057 100644 --- a/deps/icu-small/source/common/rbbiscan.cpp +++ b/deps/icu-small/source/common/rbbiscan.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbiscan.cpp // @@ -1103,6 +1105,17 @@ void RBBIRuleScanner::parse() { } + if (U_FAILURE(*fRB->fStatus)) { + return; + } + + // If there are no forward rules set an error. + // + if (fRB->fForwardTree == NULL) { + error(U_BRK_RULE_SYNTAX); + return; + } + // // If there were NO user specified reverse rules, set up the equivalent of ".*;" // @@ -1126,16 +1139,15 @@ void RBBIRuleScanner::parse() { // #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "symbols")) {fSymbolTable->rbbiSymtablePrint();} - if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree")) - { + if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ptree")) { RBBIDebugPrintf("Completed Forward Rules Parse Tree...\n"); - fRB->fForwardTree->printTree(TRUE); + RBBINode::printTree(fRB->fForwardTree, TRUE); RBBIDebugPrintf("\nCompleted Reverse Rules Parse Tree...\n"); - fRB->fReverseTree->printTree(TRUE); + RBBINode::printTree(fRB->fReverseTree, TRUE); RBBIDebugPrintf("\nCompleted Safe Point Forward Rules Parse Tree...\n"); - fRB->fSafeFwdTree->printTree(TRUE); + RBBINode::printTree(fRB->fSafeFwdTree, TRUE); RBBIDebugPrintf("\nCompleted Safe Point Reverse Rules Parse Tree...\n"); - fRB->fSafeRevTree->printTree(TRUE); + RBBINode::printTree(fRB->fSafeRevTree, TRUE); } #endif } @@ -1150,7 +1162,7 @@ void RBBIRuleScanner::parse() { void RBBIRuleScanner::printNodeStack(const char *title) { int i; RBBIDebugPrintf("%s. Dumping node stack...\n", title); - for (i=fNodeStackPtr; i>0; i--) {fNodeStack[i]->printTree(TRUE);} + for (i=fNodeStackPtr; i>0; i--) {RBBINode::printTree(fNodeStack[i], TRUE);} } #endif diff --git a/deps/icu-small/source/common/rbbiscan.h b/deps/icu-small/source/common/rbbiscan.h index ede5aaa35e4049..6be2f9668ff6cf 100644 --- a/deps/icu-small/source/common/rbbiscan.h +++ b/deps/icu-small/source/common/rbbiscan.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbiscan.h // diff --git a/deps/icu-small/source/common/rbbisetb.cpp b/deps/icu-small/source/common/rbbisetb.cpp index a419289bc752ea..22ec28c1350638 100644 --- a/deps/icu-small/source/common/rbbisetb.cpp +++ b/deps/icu-small/source/common/rbbisetb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.cpp // @@ -546,7 +548,7 @@ void RBBISetBuilder::printSets() { RBBI_DEBUG_printUnicodeString(usetNode->fText); RBBIDebugPrintf("\n"); if (usetNode->fLeftChild != NULL) { - usetNode->fLeftChild->printTree(TRUE); + RBBINode::printTree(usetNode->fLeftChild, TRUE); } } RBBIDebugPrintf("\n"); diff --git a/deps/icu-small/source/common/rbbisetb.h b/deps/icu-small/source/common/rbbisetb.h index c8bc1df7786c49..89bfb9865cda15 100644 --- a/deps/icu-small/source/common/rbbisetb.h +++ b/deps/icu-small/source/common/rbbisetb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbisetb.h /* diff --git a/deps/icu-small/source/common/rbbistbl.cpp b/deps/icu-small/source/common/rbbistbl.cpp index c35efc7eb90ce0..f48485868c81e0 100644 --- a/deps/icu-small/source/common/rbbistbl.cpp +++ b/deps/icu-small/source/common/rbbistbl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: rbbistbl.cpp Implementation of the ICU RBBISymbolTable class // @@ -17,10 +19,10 @@ #include "unicode/uchar.h" #include "unicode/parsepos.h" -#include "umutex.h" - -#include "rbbirb.h" +#include "cstr.h" #include "rbbinode.h" +#include "rbbirb.h" +#include "umutex.h" // @@ -226,9 +228,9 @@ RBBISymbolTableEntry::~RBBISymbolTableEntry() { // #ifdef RBBI_DEBUG void RBBISymbolTable::rbbiSymtablePrint() const { - RBBIDebugPrintf("Variable Definitions\n" - "Name Node Val String Val\n" - "----------------------------------------------------------------------\n"); + RBBIDebugPrintf("Variable Definitions Symbol Table\n" + "Name Node serial String Val\n" + "-------------------------------------------------------------------\n"); int32_t pos = UHASH_FIRST; const UHashElement *e = NULL; @@ -239,10 +241,8 @@ void RBBISymbolTable::rbbiSymtablePrint() const { } RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; - RBBI_DEBUG_printUnicodeString(s->key, 15); - RBBIDebugPrintf(" %8p ", (void *)s->val); - RBBI_DEBUG_printUnicodeString(s->val->fLeftChild->fText); - RBBIDebugPrintf("\n"); + RBBIDebugPrintf("%-19s %8p %7d ", CStr(s->key)(), (void *)s->val, s->val->fSerialNum); + RBBIDebugPrintf(" %s\n", CStr(s->val->fLeftChild->fText)()); } RBBIDebugPrintf("\nParsed Variable Definitions\n"); @@ -253,8 +253,9 @@ void RBBISymbolTable::rbbiSymtablePrint() const { break; } RBBISymbolTableEntry *s = (RBBISymbolTableEntry *)e->value.pointer; - RBBI_DEBUG_printUnicodeString(s->key); - s->val->fLeftChild->printTree(TRUE); + RBBIDebugPrintf("%s\n", CStr(s->key)()); + RBBINode::printTree(s->val, TRUE); + RBBINode::printTree(s->val->fLeftChild, FALSE); RBBIDebugPrintf("\n"); } } diff --git a/deps/icu-small/source/common/rbbitblb.cpp b/deps/icu-small/source/common/rbbitblb.cpp index c2057e167a3d28..c765e610526552 100644 --- a/deps/icu-small/source/common/rbbitblb.cpp +++ b/deps/icu-small/source/common/rbbitblb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -79,7 +81,7 @@ void RBBITableBuilder::build() { #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "ftree")) { RBBIDebugPuts("\nParse tree after flattening variable references."); - fTree->printTree(TRUE); + RBBINode::printTree(fTree, TRUE); } #endif @@ -137,7 +139,7 @@ void RBBITableBuilder::build() { #ifdef RBBI_DEBUG if (fRB->fDebugEnv && uprv_strstr(fRB->fDebugEnv, "stree")) { RBBIDebugPuts("\nParse tree after flattening Unicode Set references."); - fTree->printTree(TRUE); + RBBINode::printTree(fTree, TRUE); } #endif @@ -1058,7 +1060,7 @@ void RBBITableBuilder::printPosSets(RBBINode *n) { } printf("\n"); RBBINode::printNodeHeader(); - n->printNode(); + RBBINode::printNode(n); RBBIDebugPrintf(" Nullable: %s\n", n->fNullable?"TRUE":"FALSE"); RBBIDebugPrintf(" firstpos: "); diff --git a/deps/icu-small/source/common/rbbitblb.h b/deps/icu-small/source/common/rbbitblb.h index 9e65bd93d01a22..d71a0245874b5d 100644 --- a/deps/icu-small/source/common/rbbitblb.h +++ b/deps/icu-small/source/common/rbbitblb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // rbbitblb.h // diff --git a/deps/icu-small/source/common/resbund.cpp b/deps/icu-small/source/common/resbund.cpp index 8d91184da53066..2976791761f88f 100644 --- a/deps/icu-small/source/common/resbund.cpp +++ b/deps/icu-small/source/common/resbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2013, International Business Machines diff --git a/deps/icu-small/source/common/resbund_cnv.cpp b/deps/icu-small/source/common/resbund_cnv.cpp index ecb2e8ab5f07f0..80a4daa3b7f627 100644 --- a/deps/icu-small/source/common/resbund_cnv.cpp +++ b/deps/icu-small/source/common/resbund_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/resource.cpp b/deps/icu-small/source/common/resource.cpp index 7a4c4181bf834c..62b3aa46a5c083 100644 --- a/deps/icu-small/source/common/resource.cpp +++ b/deps/icu-small/source/common/resource.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2015, International Business Machines +* Copyright (C) 2015-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * resource.cpp @@ -11,50 +13,10 @@ #include "resource.h" -#include "unicode/utypes.h" -#include "unicode/uobject.h" -#include "unicode/ures.h" - U_NAMESPACE_BEGIN ResourceValue::~ResourceValue() {} - -ResourceArraySink::~ResourceArraySink() {} - -void ResourceArraySink::put( - int32_t /*index*/, const ResourceValue & /*value*/, UErrorCode & /*errorCode*/) {} - -ResourceArraySink *ResourceArraySink::getOrCreateArraySink( - int32_t /*index*/, int32_t /*size*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -ResourceTableSink *ResourceArraySink::getOrCreateTableSink( - int32_t /*index*/, int32_t /*initialSize*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -void ResourceArraySink::leave(UErrorCode & /*errorCode*/) {} - - -ResourceTableSink::~ResourceTableSink() {} - -void ResourceTableSink::put( - const char * /*key*/, const ResourceValue & /*value*/, UErrorCode & /*errorCode*/) {} - -void ResourceTableSink::putNoFallback(const char * /*key*/, UErrorCode & /*errorCode*/) {} - -ResourceArraySink *ResourceTableSink::getOrCreateArraySink( - const char * /*key*/, int32_t /*size*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -ResourceTableSink *ResourceTableSink::getOrCreateTableSink( - const char * /*key*/, int32_t /*initialSize*/, UErrorCode & /*errorCode*/) { - return NULL; -} - -void ResourceTableSink::leave(UErrorCode & /*errorCode*/) {} +ResourceSink::~ResourceSink() {} U_NAMESPACE_END diff --git a/deps/icu-small/source/common/resource.h b/deps/icu-small/source/common/resource.h index 042e298b798242..43c3309b5e9917 100644 --- a/deps/icu-small/source/common/resource.h +++ b/deps/icu-small/source/common/resource.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2015, International Business Machines +* Copyright (C) 2015-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * resource.h @@ -27,13 +29,80 @@ #include "unicode/unistr.h" #include "unicode/ures.h" +struct ResourceData; + U_NAMESPACE_BEGIN -class ResourceTableSink; +class ResourceValue; // Note: In C++, we use const char * pointers for keys, // rather than an abstraction like Java UResource.Key. +/** + * Interface for iterating over a resource bundle array resource. + */ +class U_COMMON_API ResourceArray { +public: + /** Constructs an empty array object. */ + ResourceArray() : items16(NULL), items32(NULL), length(0) {} + + /** Only for implementation use. @internal */ + ResourceArray(const uint16_t *i16, const uint32_t *i32, int32_t len) : + items16(i16), items32(i32), length(len) {} + + /** + * @return The number of items in the array resource. + */ + int32_t getSize() const { return length; } + /** + * @param i Array item index. + * @param value Output-only, receives the value of the i'th item. + * @return TRUE if i is non-negative and less than getSize(). + */ + UBool getValue(int32_t i, ResourceValue &value) const; + + /** Only for implementation use. @internal */ + uint32_t internalGetResource(const ResourceData *pResData, int32_t i) const; + +private: + const uint16_t *items16; + const uint32_t *items32; + int32_t length; +}; + +/** + * Interface for iterating over a resource bundle table resource. + */ +class U_COMMON_API ResourceTable { +public: + /** Constructs an empty table object. */ + ResourceTable() : keys16(NULL), keys32(NULL), items16(NULL), items32(NULL), length(0) {} + + /** Only for implementation use. @internal */ + ResourceTable(const uint16_t *k16, const int32_t *k32, + const uint16_t *i16, const uint32_t *i32, int32_t len) : + keys16(k16), keys32(k32), items16(i16), items32(i32), length(len) {} + + /** + * @return The number of items in the array resource. + */ + int32_t getSize() const { return length; } + /** + * @param i Array item index. + * @param key Output-only, receives the key of the i'th item. + * @param value Output-only, receives the value of the i'th item. + * @return TRUE if i is non-negative and less than getSize(). + */ + UBool getKeyAndValue(int32_t i, const char *&key, ResourceValue &value) const; + +private: + const uint16_t *keys16; + const int32_t *keys32; + const uint16_t *items16; + const uint32_t *items32; + int32_t length; +}; + /** * Represents a resource bundle item's value. * Avoids object creations as much as possible. @@ -100,147 +169,109 @@ class U_COMMON_API ResourceValue : public UObject { */ virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const = 0; -protected: - ResourceValue() {} - -private: - ResourceValue(const ResourceValue &); // no copy constructor - ResourceValue &operator=(const ResourceValue &); // no assignment operator -}; + /** + * Sets U_RESOURCE_TYPE_MISMATCH if this is not an array resource + */ + virtual ResourceArray getArray(UErrorCode &errorCode) const = 0; -/** - * Sink for ICU resource array contents. - * The base class does nothing. - * - * Nested arrays and tables are stored as nested sinks, - * never put() as ResourceValue items. - */ -class U_COMMON_API ResourceArraySink : public UObject { -public: - ResourceArraySink() {} - virtual ~ResourceArraySink(); + /** + * Sets U_RESOURCE_TYPE_MISMATCH if this is not a table resource + */ + virtual ResourceTable getTable(UErrorCode &errorCode) const = 0; /** - * Adds a value from a resource array. + * Is this a no-fallback/no-inheritance marker string? + * Such a marker is used for + * CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205} + * when enumerating tables with fallback from the specific resource bundle to root. * - * @param index of the resource array item - * @param value resource value + * @return TRUE if this is a no-inheritance marker string */ - virtual void put(int32_t index, const ResourceValue &value, UErrorCode &errorCode); + virtual UBool isNoInheritanceMarker() const = 0; /** - * Returns a nested resource array at the array index as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested arrays are not supported. - * The default implementation always returns NULL. + * Sets the dest strings from the string values in this array resource. * - * This sink (not the caller) owns the nested sink. + * @return the number of strings in this array resource. + * If greater than capacity, then an overflow error is set. * - * @param index of the resource array item - * @param size number of array items - * @return nested-array sink, or NULL + * Sets U_RESOURCE_TYPE_MISMATCH if this is not an array resource + * or if any of the array items is not a string */ - virtual ResourceArraySink *getOrCreateArraySink( - int32_t index, int32_t size, UErrorCode &errorCode); + virtual int32_t getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const = 0; /** - * Returns a nested resource table at the array index as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested tables are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. + * Same as + *
+     * if (getType() == URES_STRING) {
+     *     return new String[] { getString(); }
+     * } else {
+     *     return getStringArray();
+     * }
+     * 
* - * @param index of the resource array item - * @param initialSize size hint for creating the sink if necessary - * @return nested-table sink, or NULL + * Sets U_RESOURCE_TYPE_MISMATCH if this is + * neither a string resource nor an array resource containing strings + * @see getString() + * @see getStringArray() */ - virtual ResourceTableSink *getOrCreateTableSink( - int32_t index, int32_t initialSize, UErrorCode &errorCode); + virtual int32_t getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const = 0; /** - * "Leaves" the array. - * Indicates that all of the resources and sub-resources of the current array - * have been enumerated. + * Same as + *
+     * if (getType() == URES_STRING) {
+     *     return getString();
+     * } else {
+     *     return getStringArray()[0];
+     * }
+     * 
+ * + * Sets U_RESOURCE_TYPE_MISMATCH if this is + * neither a string resource nor an array resource containing strings + * @see getString() + * @see getStringArray() */ - virtual void leave(UErrorCode &errorCode); + virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const = 0; + +protected: + ResourceValue() {} private: - ResourceArraySink(const ResourceArraySink &); // no copy constructor - ResourceArraySink &operator=(const ResourceArraySink &); // no assignment operator + ResourceValue(const ResourceValue &); // no copy constructor + ResourceValue &operator=(const ResourceValue &); // no assignment operator }; /** - * Sink for ICU resource table contents. - * The base class does nothing. - * - * Nested arrays and tables are stored as nested sinks, - * never put() as ResourceValue items. + * Sink for ICU resource bundle contents. */ -class U_COMMON_API ResourceTableSink : public UObject { +class U_COMMON_API ResourceSink : public UObject { public: - ResourceTableSink() {} - virtual ~ResourceTableSink(); - - /** - * Adds a key-value pair from a resource table. - * - * @param key resource key string - * @param value resource value - */ - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode); + ResourceSink() {} + virtual ~ResourceSink(); /** - * Adds a no-fallback/no-inheritance marker for this key. - * Used for CLDR no-fallback data values of (three empty-set symbols)=={2205, 2205, 2205} - * when enumerating tables with fallback from the specific resource bundle to root. - * - * The default implementation does nothing. - * - * @param key to be removed - */ - virtual void putNoFallback(const char *key, UErrorCode &errorCode); - - /** - * Returns a nested resource array for the key as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested arrays are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. + * Called once for each bundle (child-parent-...-root). + * The value is normally an array or table resource, + * and implementations of this method normally iterate over the + * tree of resource items stored there. * - * @param key resource key string - * @param size number of array items - * @return nested-array sink, or NULL - */ - virtual ResourceArraySink *getOrCreateArraySink( - const char *key, int32_t size, UErrorCode &errorCode); - - /** - * Returns a nested resource table for the key as another sink. - * Creates the sink if none exists for the key. - * Returns NULL if nested tables are not supported. - * The default implementation always returns NULL. - * - * This sink (not the caller) owns the nested sink. - * - * @param key resource key string - * @param initialSize size hint for creating the sink if necessary - * @return nested-table sink, or NULL - */ - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t initialSize, UErrorCode &errorCode); - - /** - * "Leaves" the table. - * Indicates that all of the resources and sub-resources of the current table - * have been enumerated. + * @param key The key string of the enumeration-start resource. + * Empty if the enumeration starts at the top level of the bundle. + * @param value Call getArray() or getTable() as appropriate. + * Then reuse for output values from Array and Table getters. + * @param noFallback true if the bundle has no parent; + * that is, its top-level table has the nofallback attribute, + * or it is the root bundle of a locale tree. */ - virtual void leave(UErrorCode &errorCode); + virtual void put(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &errorCode) = 0; private: - ResourceTableSink(const ResourceTableSink &); // no copy constructor - ResourceTableSink &operator=(const ResourceTableSink &); // no assignment operator + ResourceSink(const ResourceSink &); // no copy constructor + ResourceSink &operator=(const ResourceSink &); // no assignment operator }; U_NAMESPACE_END diff --git a/deps/icu-small/source/common/ruleiter.cpp b/deps/icu-small/source/common/ruleiter.cpp index 667795efabcf39..6e27b4dd8c609e 100644 --- a/deps/icu-small/source/common/ruleiter.cpp +++ b/deps/icu-small/source/common/ruleiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2011, International Business Machines diff --git a/deps/icu-small/source/common/ruleiter.h b/deps/icu-small/source/common/ruleiter.h index 2fad54f01c9b8d..b0b8e5435f49c6 100644 --- a/deps/icu-small/source/common/ruleiter.h +++ b/deps/icu-small/source/common/ruleiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2011, International Business Machines diff --git a/deps/icu-small/source/common/schriter.cpp b/deps/icu-small/source/common/schriter.cpp index 17ce400186969a..cc413666f1a838 100644 --- a/deps/icu-small/source/common/schriter.cpp +++ b/deps/icu-small/source/common/schriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1998-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/serv.cpp b/deps/icu-small/source/common/serv.cpp index b0add499832407..9f05c1943ae1b6 100644 --- a/deps/icu-small/source/common/serv.cpp +++ b/deps/icu-small/source/common/serv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation. diff --git a/deps/icu-small/source/common/serv.h b/deps/icu-small/source/common/serv.h index 602c3d3b1342f1..c82c6d1dd8197f 100644 --- a/deps/icu-small/source/common/serv.h +++ b/deps/icu-small/source/common/serv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2011, International Business Machines Corporation. * diff --git a/deps/icu-small/source/common/servlk.cpp b/deps/icu-small/source/common/servlk.cpp index 5636091fd962dc..cdd4e3f7f0c1ab 100644 --- a/deps/icu-small/source/common/servlk.cpp +++ b/deps/icu-small/source/common/servlk.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servlkf.cpp b/deps/icu-small/source/common/servlkf.cpp index b03d29befbae41..d8617cee489f21 100644 --- a/deps/icu-small/source/common/servlkf.cpp +++ b/deps/icu-small/source/common/servlkf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servloc.h b/deps/icu-small/source/common/servloc.h index ade941cc34a906..5a2b669d7f9d90 100644 --- a/deps/icu-small/source/common/servloc.h +++ b/deps/icu-small/source/common/servloc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2011, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servls.cpp b/deps/icu-small/source/common/servls.cpp index cc53ab5e92d8ae..10f3b88aa7ba4f 100644 --- a/deps/icu-small/source/common/servls.cpp +++ b/deps/icu-small/source/common/servls.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servnotf.cpp b/deps/icu-small/source/common/servnotf.cpp index 33e7f177be871b..3d94c8690dcbf0 100644 --- a/deps/icu-small/source/common/servnotf.cpp +++ b/deps/icu-small/source/common/servnotf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2012, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servnotf.h b/deps/icu-small/source/common/servnotf.h index c8959f0c16d724..72ae93e6277000 100644 --- a/deps/icu-small/source/common/servnotf.h +++ b/deps/icu-small/source/common/servnotf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servrbf.cpp b/deps/icu-small/source/common/servrbf.cpp index 274016e94172c6..f67ed026ee76e2 100644 --- a/deps/icu-small/source/common/servrbf.cpp +++ b/deps/icu-small/source/common/servrbf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/servslkf.cpp b/deps/icu-small/source/common/servslkf.cpp index 0ee66b4cfe3c76..c01a2ad4c1c153 100644 --- a/deps/icu-small/source/common/servslkf.cpp +++ b/deps/icu-small/source/common/servslkf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /** ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/common/sharedobject.cpp b/deps/icu-small/source/common/sharedobject.cpp index bffd8a3fc8801f..8e5095e129255a 100644 --- a/deps/icu-small/source/common/sharedobject.cpp +++ b/deps/icu-small/source/common/sharedobject.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/common/sharedobject.h b/deps/icu-small/source/common/sharedobject.h index 7d3433b6b61059..6e205b14ba9798 100644 --- a/deps/icu-small/source/common/sharedobject.h +++ b/deps/icu-small/source/common/sharedobject.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015-2016, International Business Machines diff --git a/deps/icu-small/source/common/simpleformatter.cpp b/deps/icu-small/source/common/simpleformatter.cpp index 6dfa5b94ab4c80..eaeb60de143367 100644 --- a/deps/icu-small/source/common/simpleformatter.cpp +++ b/deps/icu-small/source/common/simpleformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/common/sprpimpl.h b/deps/icu-small/source/common/sprpimpl.h index 62973d39aeda6e..56c2f86eeff74f 100644 --- a/deps/icu-small/source/common/sprpimpl.h +++ b/deps/icu-small/source/common/sprpimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/stringpiece.cpp b/deps/icu-small/source/common/stringpiece.cpp index 0fb2b3e54cbff9..b032b474f65616 100644 --- a/deps/icu-small/source/common/stringpiece.cpp +++ b/deps/icu-small/source/common/stringpiece.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/stringtriebuilder.cpp b/deps/icu-small/source/common/stringtriebuilder.cpp index 109fcdc5f8a255..075d7c4324b0e5 100644 --- a/deps/icu-small/source/common/stringtriebuilder.cpp +++ b/deps/icu-small/source/common/stringtriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/common/uarrsort.c b/deps/icu-small/source/common/uarrsort.c index 22c769729e0036..bb1b5bdd785feb 100644 --- a/deps/icu-small/source/common/uarrsort.c +++ b/deps/icu-small/source/common/uarrsort.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -120,7 +122,7 @@ doInsertionSort(char *array, int32_t length, int32_t itemSize, if(insertionPointlength*sizeof(UBiDiLevel)); + uprv_memcpy(saveLevels, levels, (size_t)pBiDi->length*sizeof(UBiDiLevel)); saveTrailingWSStart=pBiDi->trailingWSStart; saveLength=pBiDi->length; saveDirection=pBiDi->direction; @@ -2512,7 +2514,7 @@ setParaRunsOnly(UBiDi *pBiDi, const UChar *text, int32_t length, if(saveLength>pBiDi->levelsSize) { saveLength=pBiDi->levelsSize; } - uprv_memcpy(pBiDi->levels, saveLevels, saveLength*sizeof(UBiDiLevel)); + uprv_memcpy(pBiDi->levels, saveLevels, (size_t)saveLength*sizeof(UBiDiLevel)); pBiDi->trailingWSStart=saveTrailingWSStart; if(pBiDi->runCount>1) { pBiDi->direction=UBIDI_MIXED; diff --git a/deps/icu-small/source/common/ubidi_props.c b/deps/icu-small/source/common/ubidi_props.c index 5c08885556095d..cba13ad6ea98b4 100644 --- a/deps/icu-small/source/common/ubidi_props.c +++ b/deps/icu-small/source/common/ubidi_props.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ubidi_props.h b/deps/icu-small/source/common/ubidi_props.h index 0533ed3b94ba63..4312230bc09b63 100644 --- a/deps/icu-small/source/common/ubidi_props.h +++ b/deps/icu-small/source/common/ubidi_props.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ubidi_props_data.h b/deps/icu-small/source/common/ubidi_props_data.h index 2650a6651b23b0..685d2b1e844c61 100644 --- a/deps/icu-small/source/common/ubidi_props_data.h +++ b/deps/icu-small/source/common/ubidi_props_data.h @@ -1,484 +1,495 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: ubidi_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: ubidi_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/bidipropsbuilder.cpp + #ifdef INCLUDED_FROM_UBIDI_PROPS_C -static const UVersionInfo ubidi_props_dataVersion={8,0,0,0}; +static const UVersionInfo ubidi_props_dataVersion={9,0,0,0}; -static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5ae8,0x5778,0x1a,0x620,0x8b8,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5502b6}; +static const int32_t ubidi_props_indexes[UBIDI_IX_TOP]={0x10,0x5df0,0x5a78,0x1a,0x620,0x8c0,0x10ac0,0x10af0,0,0,0,0,0,0,0,0x5802b6}; -static const uint16_t ubidi_props_trieIndex[11188]={ -0x34f,0x357,0x35f,0x367,0x37f,0x387,0x38f,0x397,0x36f,0x377,0x36f,0x377,0x36f,0x377,0x36f,0x377, -0x36f,0x377,0x36f,0x377,0x39d,0x3a5,0x3ad,0x3b5,0x3bd,0x3c5,0x3c1,0x3c9,0x3d1,0x3d9,0x3d4,0x3dc, -0x36f,0x377,0x36f,0x377,0x3e4,0x3ec,0x36f,0x377,0x36f,0x377,0x36f,0x377,0x3f2,0x3fa,0x402,0x40a, -0x412,0x41a,0x422,0x42a,0x430,0x438,0x440,0x448,0x450,0x458,0x45e,0x466,0x46e,0x476,0x47e,0x486, -0x492,0x48e,0x49a,0x404,0x404,0x4aa,0x46e,0x4a2,0x4b2,0x4b4,0x4bc,0x4c4,0x4cc,0x4cd,0x4d5,0x4dd, -0x4e5,0x4cd,0x4ed,0x4f2,0x4e5,0x4cd,0x4fa,0x502,0x4cc,0x507,0x50f,0x4c4,0x514,0x36f,0x51c,0x520, -0x528,0x529,0x531,0x539,0x4cc,0x541,0x549,0x4c4,0x4cc,0x36f,0x4d5,0x4c4,0x36f,0x36f,0x54f,0x36f, -0x36f,0x555,0x55d,0x36f,0x36f,0x561,0x569,0x36f,0x56d,0x574,0x36f,0x57c,0x584,0x58b,0x513,0x36f, -0x36f,0x593,0x59b,0x5a3,0x5ab,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x5b3,0x36f,0x5bb,0x36f,0x36f,0x36f, -0x5c3,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x5cb,0x36f,0x36f,0x36f,0x5d3,0x5d3,0x4d9,0x4d9,0x36f,0x5d9,0x5e1,0x5bb, -0x5f7,0x5e9,0x5e9,0x5ff,0x606,0x5ef,0x36f,0x36f,0x36f,0x60e,0x616,0x36f,0x36f,0x36f,0x618,0x620, -0x628,0x36f,0x62f,0x637,0x36f,0x63f,0x36f,0x36f,0x647,0x64a,0x514,0x652,0x3e6,0x65a,0x36f,0x661, -0x36f,0x666,0x36f,0x36f,0x36f,0x36f,0x66c,0x674,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x3bd,0x67c, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x684,0x68c,0x690, -0x6a8,0x6ae,0x698,0x6a0,0x6b6,0x6be,0x6c2,0x58e,0x6ca,0x6d2,0x6da,0x36f,0x6e2,0x620,0x620,0x620, -0x6f2,0x6fa,0x702,0x70a,0x70f,0x717,0x71f,0x6ea,0x727,0x72f,0x36f,0x735,0x73c,0x620,0x620,0x742, -0x620,0x53f,0x746,0x620,0x74e,0x36f,0x36f,0x61d,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0x620,0x620,0x620,0x756,0x620,0x620,0x620,0x620,0x620,0x75c,0x620,0x620,0x764,0x76c, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x620,0x620,0x77c,0x783,0x78b,0x774, -0x79b,0x7a3,0x7ab,0x7b2,0x7ba,0x7c2,0x7c9,0x793,0x620,0x620,0x620,0x7d1,0x7d7,0x7dd,0x7e5,0x7ea, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x7f1,0x36f,0x36f,0x36f,0x7f9,0x36f,0x36f,0x36f,0x3bd, -0x801,0x809,0x540,0x36f,0x80c,0x620,0x620,0x623,0x620,0x620,0x620,0x620,0x620,0x620,0x813,0x819, -0x829,0x821,0x36f,0x36f,0x831,0x5c3,0x36f,0x396,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x7f8, -0x3a4,0x36f,0x839,0x841,0x36f,0x849,0x7ea,0x36f,0x36f,0x36f,0x36f,0x851,0x36f,0x36f,0x618,0x395, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x620,0x620, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x839,0x620,0x53f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x858,0x36f,0x36f,0x85d,0x529,0x36f,0x36f,0x56f,0x620,0x617,0x36f,0x36f,0x865,0x36f,0x36f,0x36f, -0x86d,0x874,0x5e9,0x87c,0x36f,0x36f,0x527,0x884,0x36f,0x88b,0x892,0x36f,0x4b2,0x897,0x36f,0x4cb, -0x36f,0x89f,0x8a7,0x4cd,0x36f,0x8ab,0x4cc,0x8b3,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x8ba, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x8ce,0x8c2,0x8c6,0x46e,0x46e,0x46e,0x46e,0x46e, -0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8d6,0x46e,0x46e,0x46e,0x46e,0x8de,0x8e2, -0x8ea,0x8f2,0x8f6,0x8fe,0x46e,0x46e,0x46e,0x902,0x90a,0x35f,0x912,0x91a,0x36f,0x36f,0x36f,0x922, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0xdbc,0xdbc,0xdfc,0xe3c,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xe74,0xeb4,0xef4,0xf04,0xf44,0xf50, -0xdbc,0xdbc,0xf90,0xdbc,0xdbc,0xdbc,0xfc8,0x1008,0x1048,0x1088,0x10c0,0x1100,0x1140,0x1178,0x11b8,0x11f8, -0xa40,0xa80,0xac0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xafa,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb37,0x1a0,0x1a0,0xb6c,0xbac,0x1a0,0xbec,0xc2c,0xc6c, +static const uint16_t ubidi_props_trieIndex[11572]={ +0x36a,0x372,0x37a,0x382,0x39a,0x3a2,0x3aa,0x3b2,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x38a,0x392, +0x38a,0x392,0x38a,0x392,0x3b8,0x3c0,0x3c8,0x3d0,0x3d8,0x3e0,0x3dc,0x3e4,0x3ec,0x3f4,0x3ef,0x3f7, +0x38a,0x392,0x38a,0x392,0x3ff,0x407,0x38a,0x392,0x38a,0x392,0x38a,0x392,0x40d,0x415,0x41d,0x425, +0x42d,0x435,0x43d,0x445,0x44b,0x453,0x45b,0x463,0x46b,0x473,0x479,0x481,0x489,0x491,0x499,0x4a1, +0x4ad,0x4a9,0x4b5,0x41f,0x41f,0x4c5,0x4cd,0x4bd,0x4d5,0x4d7,0x4df,0x4e7,0x4ef,0x4f0,0x4f8,0x500, +0x508,0x4f0,0x510,0x515,0x508,0x4f0,0x51d,0x525,0x4ef,0x52a,0x532,0x4e7,0x537,0x38a,0x53f,0x543, +0x54b,0x54c,0x554,0x55c,0x4ef,0x564,0x56c,0x4e7,0x4ef,0x38a,0x4f8,0x4e7,0x38a,0x38a,0x572,0x38a, +0x38a,0x578,0x580,0x38a,0x38a,0x584,0x58c,0x38a,0x590,0x597,0x38a,0x59f,0x5a7,0x5ae,0x536,0x38a, +0x38a,0x5b6,0x5be,0x5c6,0x5ce,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x5d6,0x38a,0x5de,0x38a,0x38a,0x38a, +0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x5ee,0x38a,0x38a,0x38a,0x5f6,0x5f6,0x4fc,0x4fc,0x38a,0x5fc,0x604,0x5de, +0x61a,0x60c,0x60c,0x622,0x629,0x612,0x38a,0x38a,0x38a,0x631,0x639,0x38a,0x38a,0x38a,0x63b,0x643, +0x64b,0x38a,0x652,0x65a,0x38a,0x662,0x38a,0x38a,0x66a,0x66d,0x537,0x675,0x401,0x67d,0x38a,0x684, +0x38a,0x689,0x38a,0x38a,0x38a,0x38a,0x68f,0x697,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0x69f, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x6a7,0x6af,0x6b3, +0x6cb,0x6d1,0x6bb,0x6c3,0x6d9,0x6e1,0x6e5,0x5b1,0x6ed,0x6f5,0x6fd,0x38a,0x705,0x643,0x643,0x643, +0x715,0x71d,0x725,0x72d,0x732,0x73a,0x742,0x70d,0x74a,0x752,0x38a,0x758,0x75f,0x643,0x643,0x765, +0x643,0x562,0x76a,0x643,0x772,0x38a,0x38a,0x640,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x77a,0x643,0x643,0x643,0x643,0x643,0x780,0x643,0x643,0x788,0x790, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643,0x643,0x7a0,0x7a7,0x7af,0x798, +0x7bf,0x7c7,0x7cf,0x7d6,0x7de,0x7e6,0x7ed,0x7b7,0x643,0x643,0x643,0x7f5,0x7fb,0x801,0x809,0x80e, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x815,0x38a,0x38a,0x38a,0x81d,0x38a,0x38a,0x38a,0x3d8, +0x825,0x82d,0x834,0x38a,0x83c,0x643,0x643,0x646,0x643,0x643,0x643,0x643,0x643,0x643,0x843,0x849, +0x859,0x851,0x38a,0x38a,0x861,0x5e6,0x38a,0x3b1,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x81c, +0x3bf,0x38a,0x838,0x869,0x38a,0x871,0x80e,0x38a,0x38a,0x38a,0x38a,0x879,0x38a,0x38a,0x63b,0x3b0, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x838,0x643,0x562,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x880,0x38a,0x38a,0x885,0x54c,0x38a,0x38a,0x592,0x643,0x63a,0x38a,0x38a,0x88d,0x38a,0x38a,0x38a, +0x895,0x89c,0x60c,0x8a4,0x38a,0x38a,0x8ab,0x8b3,0x38a,0x8ba,0x8c1,0x38a,0x4d5,0x8c6,0x38a,0x4ee, +0x38a,0x8ce,0x8d6,0x4f0,0x38a,0x8da,0x4ef,0x8e2,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8e9, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x8fd,0x8f1,0x8f5,0x489,0x489,0x489,0x489,0x489, +0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0x905,0x489,0x489,0x489,0x489,0x90d,0x911, +0x919,0x921,0x925,0x92d,0x489,0x489,0x489,0x931,0x939,0x37a,0x941,0x949,0x38a,0x38a,0x38a,0x951, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xe28,0xe28,0xe68,0xea8,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xee0,0xf20,0xf60,0xf70,0xfb0,0xfbc, +0xe28,0xe28,0xffc,0xe28,0xe28,0xe28,0x1034,0x1074,0x10b4,0x10f4,0x112c,0x116c,0x11ac,0x11e4,0x1224,0x1264, +0xa40,0xa80,0xac0,0xafa,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb23,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xb60,0x1a0,0x1a0,0xb95,0xbd5,0xc15,0xc55,0xc95,0xcd5, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, -0xcec,0xcfc,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0xd55,0xd65,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, 0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0, -0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xcac, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x92a,0x36f,0x620,0x620,0x932,0x5c3,0x36f,0x4c5, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x93a,0x36f,0x36f,0x36f,0x941,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x949,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x951,0x955,0x404,0x404,0x404,0x404,0x965,0x95d,0x404,0x96d,0x404,0x404,0x975,0x97b,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x983,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x4cc,0x98b,0x992,0x999,0x3e6,0x99c,0x36f,0x36f,0x4b2,0x9a4,0x36f,0x9aa,0x3e6,0x9af,0x5d5,0x36f, -0x36f,0x9b7,0x36f,0x36f,0x36f,0x36f,0x7f9,0x9bf,0x3e6,0x4cd,0x528,0x9c6,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x9cc,0x9d4,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x9d8,0x9e0,0x36f, -0x36f,0x9e8,0x528,0x36f,0x36f,0x9f0,0x36f,0x36f,0x5b3,0x9f8,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x9fc,0x36f,0xa02,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xa08,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x4e6,0xa10,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xa17,0xa1f,0xa25,0x36f,0x36f,0x620,0x620,0xa2d,0x36f, -0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x743,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0xa2f,0x36f,0xa36,0x36f,0xa32,0x36f,0xa39,0x36f,0xa41,0xa45,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x3bd,0xa4d,0x3bd,0xa54, -0xa5b,0xa63,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x404,0x404,0x404,0x404, -0x404,0x404,0xa6b,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404, -0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x46e,0x46e,0x46e,0x46e, -0x46e,0x46e,0x46e,0xa73,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x404,0x620,0xa7b,0x620,0x620, -0x623,0xa80,0xa84,0x813,0xa8c,0x36f,0x36f,0xa92,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0x620,0x620,0x620,0x620,0x620,0x80c,0x620,0xa9a,0x620,0x620,0x620,0x620,0x620,0x620, -0x620,0x620,0xa9e,0xaa6,0x620,0x620,0x620,0x623,0x620,0x620,0xa9d,0x36f,0xa7b,0x620,0xaae,0x620, -0xab6,0x815,0x36f,0x36f,0xac6,0x36f,0x36f,0x36f,0xacb,0x36f,0x5c3,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xabe,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f, -0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0x36f,0xabe,0xadb,0xad3,0xad3,0xad3, -0xadc,0xadc,0xadc,0xadc,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0x3bd,0xae4,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc, -0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0xadc,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4, -4,4,0xa,0xa,0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2, -2,2,2,2,2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12, -0x12,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4, -4,4,0xa,0xa,0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2, -0xa,0,0xa,0xa,0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, -0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0x1a0,0xd15, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x959,0x38a,0x643,0x643,0x961,0x5e6,0x38a,0x4e8, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x969,0x38a,0x38a,0x38a,0x970,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x978,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x980,0x984,0x41f,0x41f,0x41f,0x41f,0x994,0x98c,0x41f,0x99c,0x41f,0x41f,0x9a4,0x9aa,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x9b2,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x4ef,0x8ad,0x9ba,0x9c1,0x401,0x9c4,0x38a,0x38a,0x4d5,0x9cc,0x38a,0x9d2,0x401,0x9d7,0x5f8,0x38a, +0x38a,0x9df,0x38a,0x38a,0x38a,0x38a,0x81d,0x9e7,0x401,0x4f0,0x54b,0x9ee,0x38a,0x38a,0x38a,0x38a, +0x38a,0x8ad,0x9f6,0x38a,0x38a,0x9fa,0xa02,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa06,0xa0e,0x38a, +0x38a,0xa16,0x54b,0x832,0x38a,0xa1e,0x38a,0x38a,0x5d6,0xa26,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa2a,0x38a,0x38a,0xa32,0xa38, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa3e,0x38a,0xa44,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa4a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x509,0xa52,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0xa59,0xa61,0xa67,0x38a,0x38a,0x643,0x643,0xa6f,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x767, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0xa71,0x38a,0xa78,0x38a,0xa74, +0x38a,0xa7b,0x38a,0xa83,0xa87,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x3d8,0xa8f,0x3d8,0xa96,0xa9d,0xaa5,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0xaad,0xab5,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0xabd,0x41f,0xac5,0xac5,0xacc, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x489,0x489,0x489,0x489,0x489,0x489,0x489,0xad4,0x41f,0x41f,0x41f, +0x41f,0x41f,0x41f,0x41f,0x41f,0x643,0xadc,0x643,0x643,0x646,0xae1,0xae5,0x843,0xaed,0x38a,0x38a, +0xaf3,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643, +0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x643,0x768,0xafb,0x643,0x643,0x643, +0x646,0x643,0x643,0x830,0x38a,0xadc,0x643,0xb03,0x643,0xb0b,0x845,0x38a,0x38a,0xb1b,0xb23,0xb2b, +0x38a,0x844,0x38a,0x5e6,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0xb13,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a,0x38a, +0x38a,0x38a,0x38a,0x38a,0xb13,0xb3b,0xb33,0xb33,0xb33,0xb3c,0xb3c,0xb3c,0xb3c,0x3d8,0x3d8,0x3d8, +0x3d8,0x3d8,0x3d8,0x3d8,0xb44,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0xb3c, +0xb3c,0xb3c,0xb3c,0xb3c,0xb3c,0x369,0x369,0x369,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,8,7,8,9,7,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,7,7,7,8,9,0xa,0xa,4,4,4,0xa,0xa, +0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, +2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x510a,0xa,0xd20a,0xa,0xa,0xa,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x510a,0xa,0xd20a,0xa,0x12,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x12,0x12,0x12,0x12,0x12,7,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,6,0xa,4,4,4,4,0xa,0xa, +0xa,0xa,0,0x900a,0xa,0xb2,0xa,0xa,4,4,2,2,0xa,0,0xa,0xa, +0xa,2,0,0x900a,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0,0,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xa,0xa,0,0,0,0,0,0, -0,0,0xa,0,0,0,0,0,0xa,0xa,0,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0, +0,0,0,0,0xa,0xa,0,0xa,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xa,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0,0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0, +0,0xa,0xa,4,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1, +0xb1,0xb1,1,0xb1,1,0xb1,0xb1,1,0xb1,0xb1,1,0xb1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,5,5,5,5,5,5,0xa,0xa, -0xd,4,4,0xd,6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xd,0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d, -0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x8d,0x4d,0x4d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5, -5,5,4,5,5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x8d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d, -0x4d,0x4d,0x8d,0x8d,0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d, -2,2,2,2,2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad, -0x8d,0xb1,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d, -0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d, +1,1,1,1,5,5,5,5,5,5,0xa,0xa,0xd,4,4,0xd, +6,0xd,0xa,0xa,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, +0x8ad,0xd,0xd,0xd,0x4d,0xd,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x2d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xd,0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d, -0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xb1,0xb1,0xb1,0xb1,5,5,5,5,5,5,5,5,5,5,4,5, +5,0xd,0x4d,0x4d,0xb1,0x8d,0x8d,0x8d,0xd,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0x8d, +0xd,0x8d,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,5,0xa,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xd,0xd,0xb1,0xb1,0xa,0xb1,0xb1,0xb1,0xb1,0x8d,0x8d,2,2,2,2, +2,2,2,2,2,2,0x4d,0x4d,0x4d,0xd,0xd,0x4d,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xad,0x8d,0xb1,0x4d,0x4d, +0x4d,0x8d,0x8d,0x8d,0x8d,0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x4d,0x8d,0x4d,0x4d,0x8d,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd, +0xd,0x8d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d,0x8d, +0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d, +0x8d,0x4d,0x4d,0x4d,0x4d,0x8d,0x4d,0x8d,0x8d,0x4d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d, +0x4d,0x4d,0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1, -1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,1,1,1,1,1,1,1,1,1,1,0x41,0x41, 0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, -0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa, -0xa,0xa,0x21,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, -1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1, -0xb1,0xb1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81, -0x41,0x81,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1, -1,0xb1,0xb1,0xb1,1,1,1,1,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,0xa,0xa,0xa,0xa,0x21,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,0xb1, +0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1,1,0xb1, +0xb1,0xb1,0xb1,0xb1,0x81,0x41,0x41,0x41,0x41,0x41,0x81,0x81,0x41,0x81,0x41,0x41, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x81,0x41,1,1,1,0xb1,0xb1,0xb1, +1,1,1,1,0xb1,0xb1,5,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d, -0x4d,0x4d,0x8d,0x8d,0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x4d,0x8d,0x8d, +0x8d,0xd,0x8d,0x4d,0x4d,0x8d,0x8d,0x4d,0x4d,0xd,0x4d,0x4d,0x4d,0x8d,0x4d,0x4d, +0x4d,0x4d,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, 0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,0,0,0,0,0,0,0,4,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, 0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,4, -0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0xb1, -0xb1,0xb1,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0xb1,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, +0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,4,0xa,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xa0, +0,0,0,0,0,0,0xa0,0,0,0,0,0,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0xa0,0,0,0,0,0,0,0xa0,0,0,0,0,0, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,4,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,4, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0, +0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0xb1,0,0xb1,0,0xb1,0x310a,0xf20a,0x310a,0xf20a,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, -0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0,0,0, +0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,9,0,0,0, +0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0,0,0,0,0,0,0xa,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4, -0,0xb1,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0,0,0,0,0,0,0,9,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,4,0,0xb1,0,0, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0x4a,0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0,0,0,0,0,0,0,0,0,0,0,0x40, +0x40,0xb1,0x40,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x4a, +0xa,0xa,0x2a,0xb1,0xb1,0xb1,0x12,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, +0,0,0,0,0,0,0,0,0,0xb1,0xb1,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, -0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0, -0,0xb1,0xb1,0xb1,0,0,0,0,0xa,0,0,0,0xa,0xa,0,0, +0x40,0x40,0x40,0x40,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1, +0,0,0,0,0xa,0,0,0,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1, -0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0, -0xb1,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0, -0,0xb1,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0, -0,0,0,0,0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, +0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0,0,0,0xb1,0,0xb1, +0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1,0,0,0,0,0,0, +0xb1,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0, -0xa,0xa,0xa,0xa,6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9, -0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, -2,0,0,0,2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0, -9,9,9,9,9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -9,7,0x8ab,0x8ae,0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa, -0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2, -2,2,3,3,0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,4,4,4,4,4,4, +0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0xa,0xa,0,0xa,0xa,0xa,0xa, +6,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,0xb2,0xb2,0xb2,0xb2, +0xb2,0x12,0x814,0x815,0x813,0x816,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,2,0,0,0, +2,2,2,2,2,2,3,3,0xa,0x310a,0xf20a,0,9,9,9,9, +9,9,9,9,9,9,9,0xb2,0x412,0x432,0x8a0,0x8a1,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,9,7,0x8ab,0x8ae, +0x8b0,0x8ac,0x8af,6,4,4,4,4,4,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,3,3, +0xa,0x310a,0xf20a,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0xa,0,0xa,0xa, -0xa,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa, -0,0xa,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,0xa,0xa,0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0, -0,0,0xa,0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a, -0x100a,0x100a,0x900a,0x900a,0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa, -0x700a,0x700a,0x700a,0xb00a,0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa, -0xa,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa, -0xa,0xa,0xa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa, -0xa,0x100a,0xa,0x100a,0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa, -0xa,0xa,0xa,0xa,0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a, -0xa,0xa,0x900a,0x100a,0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a, -0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa, -0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xa, +4,4,4,4,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0xa,0,0xa,0xa,0xa,0,0,0, +0,0,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0,0xa,0,0xa,0,0, +0,0,4,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa, +0,0,0,0,0x100a,0xa,0xa,0xa,0xa,0,0,0,0,0,0xa,0xa, +0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x900a,0x900a,0x900a,0x100a,0x900a,0x900a,0x100a,0x100a,0x900a,0x900a, +0x900a,0x900a,0x900a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0x700a,0x700a,0x700a,0xb00a, +0xb00a,0xb00a,0xa,0xa,0xa,0x100a,3,4,0xa,0x900a,0x100a,0xa,0xa,0xa,0x100a,0x100a, +0x100a,0x100a,0xa,0x100a,0x100a,0x100a,0x100a,0xa,0x100a,0xa,0x100a,0xa,0xa,0xa,0xa,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0xa,0x100a, +0x300a,0xf00a,0x100a,0x100a,0x100a,0x100a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0x100a,0x100a,0xa,0x100a,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x100a,0xa,0xa,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa, +0x900a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x300a,0xf00a,0xa,0xa,0x900a,0x100a, +0x900a,0x900a,0x100a,0x900a,0x100a,0x100a,0x100a,0x100a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a, +0x100a,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x300a,0xf00a,0x300a,0xf00a,0x900a,0xa,0xa,0x300a,0xf00a,0xa,0xa,0xa,0xa,0x300a,0xf00a, +0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x310a,0xf20a,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0x100a,0x100a,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0x310a,0xf20a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, @@ -530,6 +541,9 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0x300a,0xf00a,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0x300a,0xf00a,0xa,0xa,0x300a,0xf00a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -541,8 +555,6 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xa, 0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, @@ -559,74 +571,74 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0, 0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40,0x40, 0x40,0x40,0x60,0,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0,0,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0, -0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1, -0xb1,0,0,0xb1,0xb1,0,0,0,0,0,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0, -0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0xb1,0,0, -0xb1,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0,0,0,0,0,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,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0xb1, +0xb1,0xb1,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0,0,0xb1,0xb1,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0,0,0, +0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0xb1,0xb1,0xb1,0,0,0xb1, +0xb1,0,0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0, +0,0,0,0,0,0,0,0,0,0xb1,0,0,0xb1,0,0,0, +0,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,1,1,1,1,1,1,1,1,1,3,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0,0,0,0,0,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,0xb1,1,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa, -0xa,0x310a,0xf20a,0x310a,0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0, -0xa,4,4,0xa,0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xd,0xd,0xd,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +0x12,0x12,0x12,0x12,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xd,0xa,0xd,0xd,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,6,0xa,6,0,0xa,6,0xa,0xa,0xa,0x310a,0xf20a,0x310a, +0xf20a,0x310a,0xf20a,4,0xa,0xa,3,3,0x300a,0xf00a,0xa,0,0xa,4,4,0xa, +0,0,0,0,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, 0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa, -0x310a,0xf20a,0xa,3,6,3,6,6,2,2,2,2,2,2,2,2, -2,2,6,0xa,0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x510a,0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0, +0xd,0xd,0xd,0xb2,0,0xa,0xa,4,4,4,0xa,0xa,0x310a,0xf20a,0xa,3, +6,3,6,6,2,2,2,2,2,2,2,2,2,2,6,0xa, +0x500a,0xa,0xd00a,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x510a, +0xa,0xd20a,0xa,0x310a,0xf20a,0xa,0x310a,0xf20a,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,0xa,0xa,0xa,4,4,0, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0xaa,0xaa,0xaa,0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0, +0,0,0,0,4,4,0xa,0xa,0xa,4,4,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0xaa,0xaa,0xaa, +0xa,0xa,0x12,0x12,0,0xa,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0,0,0,0,0xb1,2,2,2,2,2,2,2, +0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0,0,0,0,0xb1,2,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0xa, +1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1,1,1,1,0xb1, +0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41,0x41,0x41,0x41,0x81, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1,1,0x61,0x81,0x81, +0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41,0x41,0x81,0x41,0x41, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,0xa,1,0xb1,0xb1,0xb1,1,0xb1,0xb1,1,1,1,1,1, -0xb1,0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,1, -1,1,1,0xb1,0x41,0x81,1,1,0x81,0xb1,0xb1,1,1,1,1,0x41, -0x41,0x41,0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x81,1,0x81,1,0x81,0x81,1, -1,0x61,0x81,0x81,0x81,0x81,0x81,0x41,0x41,0x41,0x41,0x61,0x41,0x41,0x41,0x41, -0x41,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41, -0x81,0x41,0x81,0x81,0x41,0x81,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5, +1,1,1,1,1,1,1,1,1,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0x41,0x81,0x41,0x81,0x81,0x81,0x41,0x41,0x41,0x81,0x41,0x41,0x81,0x41,0x81,0x81, +0x41,0x81,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,0x81,0x81,0x81,0x81,0x41,0x41,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,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,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, +5,5,5,5,5,5,5,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -637,76 +649,90 @@ static const uint16_t ubidi_props_trieIndex[11188]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0xb1,0,0,0,0,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, 0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0xb1, -0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0xb1,0xb1,0,0xb1, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1, -0,0,0,0,0,0,0,0,0,0,0,0xb1,0,0xb1,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0,0,0,0,0,0,0,0, -0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0xb1,0,0xb1,0,0,0,0,0,0,0,0, +0,0,0,0xb1,0,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xb2,0xb2,0xb2,0xb2,0,0,0,0,0,0,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xa0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0xb2, -0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0, -0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1, -0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0xa,0xa,0xb1,0xb1,0xb1,0xa,0,0,0,0,0,0, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0, +0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0,0, +0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a,0,0, +0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xb1,0xb1, +0xb1,0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0, -0,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +0,0,0,0,0,0x100a,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x100a, +0,0,0,0,0,0,0,0,0,0,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0, -0,0,0,0,0,0xb1,0,0,0,0,0,0,0,0,0,0, -0xb1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,0xb1,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,1,1,1,1,1,1,1,1,1,0xd,0xd,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xd,0xd, -0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -2,2,2,2,2,2,2,2,2,2,2,0xa,0xa,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0xb1,0,0, +0,0,0,0,0,0,0,0,0xb1,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0,0xb1,0xb1,0,0xb1,0xb1,0xb1,0xb1,0xb1,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0xa,0xa,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa, +0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41,0x41, +0x41,0x41,0x41,0x41,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd,0xd, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, 0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, -0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x12,0x12,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,2,2,2,2,2,2,2,2,2,2,2,0xa, 0xa,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0xb2,0xb2,0xb2,0xb2, +0,0,0,0,0,0,0xa,0xa,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x12,0x12,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0,0,0,0,0,0,0,0,0xa,0,0,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0,0,0,0xa,0xa,0xa,0xa, +0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0xa,0,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2, 0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0xb2,0x12,0xb2,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, @@ -721,7 +747,7 @@ static const uint32_t ubidi_props_mirrors[26]={ 0x16022fb,0x18022fc,0x1a022fd,0x1c022fe,0x8029b8,0x4029f5,0xa02ade,0xe02ae3,0xc02ae4,0x1002ae5 }; -static const uint8_t ubidi_props_jgArray[664]={ +static const uint8_t ubidi_props_jgArray[672]={ 0x2d,0,3,3,0x2c,3,0x2d,3,4,0x2a,4,4,0xd,0xd,0xd,6, 6,0x1f,0x1f,0x23,0x23,0x21,0x21,0x28,0x28,1,1,0xb,0xb,0x37,0x37,0x37, 0,9,0x1d,0x13,0x16,0x18,0x1a,0x10,0x2c,0x2d,0x2d,0,0,0,0,0, @@ -763,7 +789,7 @@ static const uint8_t ubidi_props_jgArray[664]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 4,4,0xd,0x28,9,0x1d,0x16,0x18,0x2d,0x2d,0x1f,0x2c,0x39,0,6,0x21, -0xb,0x55,0x1f,1,0x13,0,0,0 +0xb,0x55,0x1f,1,0x13,0,4,4,4,0x1f,0x2d,0x56,0x58,0x57,0,0 }; static const uint8_t ubidi_props_jgArray2[48]={ @@ -780,16 +806,16 @@ static const UBiDiProps ubidi_props_singleton={ ubidi_props_jgArray2, { ubidi_props_trieIndex, - ubidi_props_trieIndex+3388, + ubidi_props_trieIndex+3496, NULL, - 3388, - 7800, + 3496, + 8076, 0x1a0, - 0xdbc, + 0xe28, 0x0, 0x0, 0x110000, - 0x2bb0, + 0x2d30, NULL, 0, FALSE, FALSE, 0, NULL }, { 2,2,0,0 } diff --git a/deps/icu-small/source/common/ubidiimp.h b/deps/icu-small/source/common/ubidiimp.h index 9a23dc03a81275..a62d8b259ece03 100644 --- a/deps/icu-small/source/common/ubidiimp.h +++ b/deps/icu-small/source/common/ubidiimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubidiln.c b/deps/icu-small/source/common/ubidiln.c index f03defe625b2e0..688ca4c31ed3a3 100644 --- a/deps/icu-small/source/common/ubidiln.c +++ b/deps/icu-small/source/common/ubidiln.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubiditransform.c b/deps/icu-small/source/common/ubiditransform.c new file mode 100644 index 00000000000000..15e3c7cc941d16 --- /dev/null +++ b/deps/icu-small/source/common/ubiditransform.c @@ -0,0 +1,528 @@ +/* +****************************************************************************** +* +* Copyright (C) 2016 and later: Unicode, Inc. and others. +* License & terms of use: http://www.unicode.org/copyright.html +* +****************************************************************************** +* file name: ubiditransform.c +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2016jul24 +* created by: Lina Kemmel +* +*/ + +#include "cmemory.h" +#include "unicode/ubidi.h" +#include "unicode/ustring.h" +#include "unicode/ushape.h" +#include "unicode/utf16.h" +#include "ustr_imp.h" +#include "unicode/ubiditransform.h" + +/* Some convenience defines */ +#define LTR UBIDI_LTR +#define RTL UBIDI_RTL +#define LOGICAL UBIDI_LOGICAL +#define VISUAL UBIDI_VISUAL +#define SHAPE_LOGICAL U_SHAPE_TEXT_DIRECTION_LOGICAL +#define SHAPE_VISUAL U_SHAPE_TEXT_DIRECTION_VISUAL_LTR + +#define CHECK_LEN(STR, LEN, ERROR) { \ + if (LEN == 0) return 0; \ + if (LEN < -1) { *(ERROR) = U_ILLEGAL_ARGUMENT_ERROR; return 0; } \ + if (LEN == -1) LEN = u_strlen(STR); \ + } + +#define MAX_ACTIONS 7 + +/** + * Typedef for a pointer to a function, which performs some operation (such as + * reordering, setting "inverse" mode, character mirroring, etc.). Return value + * indicates whether the text was changed in the course of this operation or + * not. + */ +typedef UBool (*UBiDiAction)(UBiDiTransform *, UErrorCode *); + +/** + * Structure that holds a predefined reordering scheme, including the following + * information: + *
    + *
  • an input base direction,
  • + *
  • an input order,
  • + *
  • an output base direction,
  • + *
  • an output order,
  • + *
  • a digit shaping direction,
  • + *
  • a letter shaping direction,
  • + *
  • a base direction that should be applied when the reordering engine is + * invoked (which can not always be derived from the caller-defined + * options),
  • + *
  • an array of pointers to functions that accomplish the bidi layout + * transformation.
  • + *
+ */ +typedef struct { + UBiDiLevel inLevel; /* input level */ + UBiDiOrder inOrder; /* input order */ + UBiDiLevel outLevel; /* output level */ + UBiDiOrder outOrder; /* output order */ + uint32_t digitsDir; /* digit shaping direction */ + uint32_t lettersDir; /* letter shaping direction */ + UBiDiLevel baseLevel; /* paragraph level to be used with setPara */ + const UBiDiAction actions[MAX_ACTIONS]; /* array of pointers to functions carrying out the transformation */ +} ReorderingScheme; + +struct UBiDiTransform { + UBiDi *pBidi; /* pointer to a UBiDi object */ + const ReorderingScheme *pActiveScheme; /* effective reordering scheme */ + UChar *src; /* input text */ + UChar *dest; /* output text */ + uint32_t srcLength; /* input text length - not really needed as we are zero-terminated and can u_strlen */ + uint32_t srcSize; /* input text capacity excluding the trailing zero */ + uint32_t destSize; /* output text capacity */ + uint32_t *pDestLength; /* number of UChars written to dest */ + uint32_t reorderingOptions; /* reordering options - currently only suppot DO_MIRRORING */ + uint32_t digits; /* digit option for ArabicShaping */ + uint32_t letters; /* letter option for ArabicShaping */ +}; + +U_DRAFT UBiDiTransform* U_EXPORT2 +ubiditransform_open(UErrorCode *pErrorCode) +{ + UBiDiTransform *pBiDiTransform = NULL; + if (U_SUCCESS(*pErrorCode)) { + pBiDiTransform = (UBiDiTransform*) uprv_calloc(1, sizeof(UBiDiTransform)); + if (pBiDiTransform == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + } + } + return pBiDiTransform; +} + +U_DRAFT void U_EXPORT2 +ubiditransform_close(UBiDiTransform *pBiDiTransform) +{ + if (pBiDiTransform != NULL) { + if (pBiDiTransform->pBidi != NULL) { + ubidi_close(pBiDiTransform->pBidi); + } + if (pBiDiTransform->src != NULL) { + uprv_free(pBiDiTransform->src); + } + uprv_free(pBiDiTransform); + } +} + +/** + * Performs Bidi resolution of text. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_resolve(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setPara(pTransform->pBidi, pTransform->src, pTransform->srcLength, + pTransform->pActiveScheme->baseLevel, NULL, pErrorCode); + return FALSE; +} + +/** + * Performs basic reordering of text (Logical -> Visual LTR). + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_reorder(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_writeReordered(pTransform->pBidi, pTransform->dest, pTransform->destSize, + pTransform->reorderingOptions, pErrorCode); + + *pTransform->pDestLength = pTransform->srcLength; + pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; + return TRUE; +} + +/** + * Sets "inverse" mode on the UBiDi object. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_setInverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setInverse(pTransform->pBidi, TRUE); + ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_INVERSE_LIKE_DIRECT); + return FALSE; +} + +/** + * Sets "runs only" reordering mode indicating a Logical LTR <-> Logical RTL + * transformation. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_setRunsOnly(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_setReorderingMode(pTransform->pBidi, UBIDI_REORDER_RUNS_ONLY); + return FALSE; +} + +/** + * Performs string reverse. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_reverse(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + ubidi_writeReverse(pTransform->src, pTransform->srcLength, + pTransform->dest, pTransform->destSize, + UBIDI_REORDER_DEFAULT, pErrorCode); + *pTransform->pDestLength = pTransform->srcLength; + return TRUE; +} + +/** + * Applies a new value to the text that serves as input at the current + * processing step. This value is identical to the original one when we begin + * the processing, but usually changes as the transformation progresses. + * + * @param pTransform A pointer to the UBiDiTransform structure. + * @param newSrc A pointer whose value is to be used as input text. + * @param newLength A length of the new text in UChars. + * @param newSize A new source capacity in UChars. + * @param pErrorCode Pointer to the error code value. + */ +static void +updateSrc(UBiDiTransform *pTransform, const UChar *newSrc, uint32_t newLength, + uint32_t newSize, UErrorCode *pErrorCode) +{ + if (newSize < newLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return; + } + if (newSize > pTransform->srcSize) { + newSize += 50; // allocate slightly more than needed right now + if (pTransform->src != NULL) { + uprv_free(pTransform->src); + pTransform->src = NULL; + } + pTransform->src = (UChar *)uprv_malloc(newSize * sizeof(UChar)); + if (pTransform->src == NULL) { + *pErrorCode = U_MEMORY_ALLOCATION_ERROR; + //pTransform->srcLength = pTransform->srcSize = 0; + return; + } + pTransform->srcSize = newSize; + } + u_strncpy(pTransform->src, newSrc, newLength); + pTransform->srcLength = u_terminateUChars(pTransform->src, + pTransform->srcSize, newLength, pErrorCode); +} + +/** + * Calls a lower level shaping function. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param options Shaping options. + * @param pErrorCode Pointer to the error code value. + */ +static void +doShape(UBiDiTransform *pTransform, uint32_t options, UErrorCode *pErrorCode) +{ + *pTransform->pDestLength = u_shapeArabic(pTransform->src, + pTransform->srcLength, pTransform->dest, pTransform->destSize, + options, pErrorCode); +} + +/** + * Performs digit and letter shaping. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_shapeArabic(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + if ((pTransform->letters | pTransform->digits) == 0) { + return FALSE; + } + if (pTransform->pActiveScheme->lettersDir == pTransform->pActiveScheme->digitsDir) { + doShape(pTransform, pTransform->letters | pTransform->digits | pTransform->pActiveScheme->lettersDir, + pErrorCode); + } else { + doShape(pTransform, pTransform->digits | pTransform->pActiveScheme->digitsDir, pErrorCode); + if (U_SUCCESS(*pErrorCode)) { + updateSrc(pTransform, pTransform->dest, *pTransform->pDestLength, + *pTransform->pDestLength, pErrorCode); + doShape(pTransform, pTransform->letters | pTransform->pActiveScheme->lettersDir, + pErrorCode); + } + } + return TRUE; +} + +/** + * Performs character mirroring. + * + * @param pTransform Pointer to the UBiDiTransform structure. + * @param pErrorCode Pointer to the error code value. + * + * @return Whether or not this function modifies the text. Besides the return + * value, the caller should also check U_SUCCESS(*pErrorCode). + */ +static UBool +action_mirror(UBiDiTransform *pTransform, UErrorCode *pErrorCode) +{ + UChar32 c; + uint32_t i = 0, j = 0; + if (0 == (pTransform->reorderingOptions & UBIDI_DO_MIRRORING)) { + return FALSE; + } + if (pTransform->destSize < pTransform->srcLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + return FALSE; + } + do { + UBool isOdd = ubidi_getLevelAt(pTransform->pBidi, i) & 1; + U16_NEXT(pTransform->src, i, pTransform->srcLength, c); + U16_APPEND_UNSAFE(pTransform->dest, j, isOdd ? u_charMirror(c) : c); + } while (i < pTransform->srcLength); + + *pTransform->pDestLength = pTransform->srcLength; + pTransform->reorderingOptions = UBIDI_REORDER_DEFAULT; + return TRUE; +} + +/** + * All possible reordering schemes. + * + */ +static const ReorderingScheme Schemes[] = +{ + /* 0: Logical LTR => Visual LTR */ + {LTR, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_reorder, NULL}}, + /* 1: Logical RTL => Visual LTR */ + {RTL, LOGICAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 2: Logical LTR => Visual RTL */ + {LTR, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_reorder, action_reverse, NULL}}, + /* 3: Logical RTL => Visual RTL */ + {RTL, LOGICAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_resolve, action_reorder, action_shapeArabic, action_reverse, NULL}}, + /* 4: Visual LTR => Logical RTL */ + {LTR, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, + /* 5: Visual RTL => Logical RTL */ + {RTL, VISUAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_VISUAL, RTL, + {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_reorder, NULL}}, + /* 6: Visual LTR => Logical LTR */ + {LTR, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 7: Visual RTL => Logical LTR */ + {RTL, VISUAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_reverse, action_setInverse, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 8: Logical LTR => Logical RTL */ + {LTR, LOGICAL, RTL, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_shapeArabic, action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, NULL}}, + /* 9: Logical RTL => Logical LTR */ + {RTL, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, RTL, + {action_resolve, action_mirror, action_setRunsOnly, action_resolve, action_reorder, action_shapeArabic, NULL}}, + /* 10: Visual LTR => Visual RTL */ + {LTR, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_shapeArabic, action_setInverse, action_resolve, action_mirror, action_reverse, NULL}}, + /* 11: Visual RTL => Visual LTR */ + {RTL, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_reverse, action_shapeArabic, action_setInverse, action_resolve, action_mirror, NULL}}, + /* 12: Logical LTR => Logical LTR */ + {LTR, LOGICAL, LTR, LOGICAL, SHAPE_LOGICAL, SHAPE_LOGICAL, LTR, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 13: Logical RTL => Logical RTL */ + {RTL, LOGICAL, RTL, LOGICAL, SHAPE_VISUAL, SHAPE_LOGICAL, RTL, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 14: Visual LTR => Visual LTR */ + {LTR, VISUAL, LTR, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_resolve, action_mirror, action_shapeArabic, NULL}}, + /* 15: Visual RTL => Visual RTL */ + {RTL, VISUAL, RTL, VISUAL, SHAPE_LOGICAL, SHAPE_VISUAL, LTR, + {action_reverse, action_resolve, action_mirror, action_shapeArabic, action_reverse, NULL}} +}; + +static const uint32_t nSchemes = sizeof(Schemes) / sizeof(*Schemes); + +/** + * When the direction option is UBIDI_DEFAULT_LTR or + * UBIDI_DEFAULT_RTL, resolve the base direction according to that + * of the first strong bidi character. + */ +static void +resolveBaseDirection(const UChar *text, uint32_t length, + UBiDiLevel *pInLevel, UBiDiLevel *pOutLevel) +{ + switch (*pInLevel) { + case UBIDI_DEFAULT_LTR: + case UBIDI_DEFAULT_RTL: { + UBiDiLevel level = ubidi_getBaseDirection(text, length); + *pInLevel = level != UBIDI_NEUTRAL ? level + : *pInLevel == UBIDI_DEFAULT_RTL ? RTL : LTR; + break; + } + default: + *pInLevel &= 1; + break; + } + switch (*pOutLevel) { + case UBIDI_DEFAULT_LTR: + case UBIDI_DEFAULT_RTL: + *pOutLevel = *pInLevel; + break; + default: + *pOutLevel &= 1; + break; + } +} + +/** + * Finds a valid ReorderingScheme matching the + * caller-defined scheme. + * + * @return A valid ReorderingScheme object or NULL + */ +static const ReorderingScheme* +findMatchingScheme(UBiDiLevel inLevel, UBiDiLevel outLevel, + UBiDiOrder inOrder, UBiDiOrder outOrder) +{ + uint32_t i; + for (i = 0; i < nSchemes; i++) { + const ReorderingScheme *pScheme = Schemes + i; + if (inLevel == pScheme->inLevel && outLevel == pScheme->outLevel + && inOrder == pScheme->inOrder && outOrder == pScheme->outOrder) { + return pScheme; + } + } + return NULL; +} + +U_DRAFT uint32_t U_EXPORT2 +ubiditransform_transform(UBiDiTransform *pBiDiTransform, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destSize, + UBiDiLevel inParaLevel, UBiDiOrder inOrder, + UBiDiLevel outParaLevel, UBiDiOrder outOrder, + UBiDiMirroring doMirroring, uint32_t shapingOptions, + UErrorCode *pErrorCode) +{ + uint32_t destLength = 0; + UBool textChanged = FALSE; + const UBiDiTransform *pOrigTransform = pBiDiTransform; + const UBiDiAction *action = NULL; + + if (U_FAILURE(*pErrorCode)) { + return 0; + } + if (src == NULL || dest == NULL) { + *pErrorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + CHECK_LEN(src, srcLength, pErrorCode); + CHECK_LEN(dest, destSize, pErrorCode); + + if (pBiDiTransform == NULL) { + pBiDiTransform = ubiditransform_open(pErrorCode); + if (U_FAILURE(*pErrorCode)) { + return 0; + } + } + /* Current limitation: in multiple paragraphs will be resolved according + to the 1st paragraph */ + resolveBaseDirection(src, srcLength, &inParaLevel, &outParaLevel); + + pBiDiTransform->pActiveScheme = findMatchingScheme(inParaLevel, outParaLevel, + inOrder, outOrder); + if (pBiDiTransform->pActiveScheme == NULL) { + goto cleanup; + } + pBiDiTransform->reorderingOptions = doMirroring ? UBIDI_DO_MIRRORING + : UBIDI_REORDER_DEFAULT; + + /* Ignore TEXT_DIRECTION_* flags, as we apply our own depending on the text + scheme at the time shaping is invoked. */ + shapingOptions &= ~U_SHAPE_TEXT_DIRECTION_MASK; + pBiDiTransform->digits = shapingOptions & ~U_SHAPE_LETTERS_MASK; + pBiDiTransform->letters = shapingOptions & ~U_SHAPE_DIGITS_MASK; + + updateSrc(pBiDiTransform, src, srcLength, destSize > srcLength ? destSize : srcLength, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + goto cleanup; + } + if (pBiDiTransform->pBidi == NULL) { + pBiDiTransform->pBidi = ubidi_openSized(0, 0, pErrorCode); + if (U_FAILURE(*pErrorCode)) { + goto cleanup; + } + } + pBiDiTransform->dest = dest; + pBiDiTransform->destSize = destSize; + pBiDiTransform->pDestLength = &destLength; + + /* Checking for U_SUCCESS() within the loop to bail out on first failure. */ + for (action = pBiDiTransform->pActiveScheme->actions; *action && U_SUCCESS(*pErrorCode); action++) { + if ((*action)(pBiDiTransform, pErrorCode)) { + if (action + 1) { + updateSrc(pBiDiTransform, pBiDiTransform->dest, *pBiDiTransform->pDestLength, + *pBiDiTransform->pDestLength, pErrorCode); + } + textChanged = TRUE; + } + } + ubidi_setInverse(pBiDiTransform->pBidi, FALSE); + + if (!textChanged && U_SUCCESS(*pErrorCode)) { + /* Text was not changed - just copy src to dest */ + if (destSize < srcLength) { + *pErrorCode = U_BUFFER_OVERFLOW_ERROR; + } else { + u_strncpy(dest, src, srcLength); + destLength = srcLength; + } + } +cleanup: + if (pOrigTransform != pBiDiTransform) { + ubiditransform_close(pBiDiTransform); + } else { + pBiDiTransform->dest = NULL; + pBiDiTransform->pDestLength = NULL; + pBiDiTransform->srcLength = 0; + pBiDiTransform->destSize = 0; + } + return U_FAILURE(*pErrorCode) ? 0 : destLength; +} diff --git a/deps/icu-small/source/common/ubidiwrt.c b/deps/icu-small/source/common/ubidiwrt.c index 2c6495967ca9c2..1d0c36a5d2815b 100644 --- a/deps/icu-small/source/common/ubidiwrt.c +++ b/deps/icu-small/source/common/ubidiwrt.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ubrk.cpp b/deps/icu-small/source/common/ubrk.cpp index 161c0ac4d32aad..b02c966b107d7f 100644 --- a/deps/icu-small/source/common/ubrk.cpp +++ b/deps/icu-small/source/common/ubrk.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/common/ubrkimpl.h b/deps/icu-small/source/common/ubrkimpl.h index e4909712566461..36ca6688593b6c 100644 --- a/deps/icu-small/source/common/ubrkimpl.h +++ b/deps/icu-small/source/common/ubrkimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2006, International Business Machines diff --git a/deps/icu-small/source/common/ucase.cpp b/deps/icu-small/source/common/ucase.cpp index 343d79feeccf36..5c9354e73b7da0 100644 --- a/deps/icu-small/source/common/ucase.cpp +++ b/deps/icu-small/source/common/ucase.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -619,6 +621,18 @@ ucase_getCaseLocale(const char *locale, int32_t *locCache) { result=UCASE_LOC_LITHUANIAN; } } + } else if(is_e(c)) { + /* el or ell? */ + c=*locale++; + if(is_l(c)) { + c=*locale++; + if(is_l(c)) { + c=*locale; + } + if(is_sep(c)) { + result=UCASE_LOC_GREEK; + } + } } else if(is_n(c)) { /* nl or nld? */ c=*locale++; @@ -801,8 +815,9 @@ U_CAPI int32_t U_EXPORT2 ucase_toFullLower(const UCaseProps *csp, UChar32 c, UCaseContextIterator *iter, void *context, const UChar **pString, - const char *locale, int32_t *locCache) -{ + const char *locale, int32_t *locCache) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { @@ -947,6 +962,8 @@ toUpperOrTitle(const UCaseProps *csp, UChar32 c, const UChar **pString, const char *locale, int32_t *locCache, UBool upperNotTitle) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { @@ -1155,8 +1172,9 @@ ucase_fold(const UCaseProps *csp, UChar32 c, uint32_t options) { U_CAPI int32_t U_EXPORT2 ucase_toFullFolding(const UCaseProps *csp, UChar32 c, const UChar **pString, - uint32_t options) -{ + uint32_t options) { + // The sign of the result has meaning, input must be non-negative so that it can be returned as is. + U_ASSERT(c >= 0); UChar32 result=c; uint16_t props=UTRIE2_GET16(&csp->trie, c); if(!PROPS_HAS_EXCEPTION(props)) { diff --git a/deps/icu-small/source/common/ucase.h b/deps/icu-small/source/common/ucase.h index 8f24769de388a8..29ea71a533d8c5 100644 --- a/deps/icu-small/source/common/ucase.h +++ b/deps/icu-small/source/common/ucase.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -62,6 +64,7 @@ enum { UCASE_LOC_ROOT, UCASE_LOC_TURKISH, UCASE_LOC_LITHUANIAN, + UCASE_LOC_GREEK, UCASE_LOC_DUTCH }; @@ -156,7 +159,7 @@ U_NAMESPACE_END U_CAPI int32_t U_EXPORT2 ucase_getType(const UCaseProps *csp, UChar32 c); -/** @return same as ucase_getType(), or <0 if c is case-ignorable */ +/** @return like ucase_getType() but also sets UCASE_IGNORABLE if c is case-ignorable */ U_CAPI int32_t U_EXPORT2 ucase_getTypeOrIgnorable(const UCaseProps *csp, UChar32 c); diff --git a/deps/icu-small/source/common/ucase_props_data.h b/deps/icu-small/source/common/ucase_props_data.h index 5b3a3ff9878a24..aa51bac691c9da 100644 --- a/deps/icu-small/source/common/ucase_props_data.h +++ b/deps/icu-small/source/common/ucase_props_data.h @@ -1,153 +1,155 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: ucase_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: ucase_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/casepropsbuilder.cpp + #ifdef INCLUDED_FROM_UCASE_CPP -static const UVersionInfo ucase_props_dataVersion={8,0,0,0}; +static const UVersionInfo ucase_props_dataVersion={9,0,0,0}; -static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x67ea,0x5658,0x737,0x172,0,0,0,0,0,0,0,0,0,0,3}; +static const int32_t ucase_props_indexes[UCASE_IX_TOP]={0x10,0x6c6c,0x5a10,0x79c,0x172,0,0,0,0,0,0,0,0,0,0,3}; -static const uint16_t ucase_props_trieIndex[11044]={ -0x316,0x31e,0x326,0x32e,0x33c,0x344,0x34c,0x354,0x35c,0x364,0x36b,0x373,0x37b,0x383,0x38b,0x393, -0x399,0x3a1,0x3a9,0x3b1,0x3b9,0x3c1,0x3c9,0x3d1,0x3d9,0x3e1,0x3e9,0x3f1,0x3f9,0x401,0x409,0x411, -0x419,0x421,0x425,0x42d,0x435,0x43d,0x445,0x44d,0x449,0x451,0x456,0x45e,0x465,0x46d,0x475,0x47d, -0x485,0x48d,0x495,0x49d,0x335,0x33d,0x4a2,0x4aa,0x4af,0x4b7,0x4bf,0x4c7,0x4c6,0x4ce,0x4d3,0x4db, -0x4e2,0x4e9,0x4ed,0x335,0x335,0x316,0x335,0x4f5,0x4fd,0x4ff,0x507,0x50f,0x513,0x514,0x51c,0x524, -0x52c,0x514,0x534,0x539,0x52c,0x514,0x541,0x524,0x513,0x545,0x54d,0x524,0x552,0x335,0x55a,0x335, -0x48c,0x4c8,0x562,0x524,0x513,0x545,0x569,0x524,0x513,0x335,0x51c,0x524,0x335,0x335,0x56f,0x335, -0x335,0x575,0x57c,0x335,0x335,0x580,0x588,0x335,0x58c,0x593,0x335,0x59a,0x5a2,0x5a9,0x5b1,0x335, -0x335,0x5b6,0x5be,0x5c6,0x5ce,0x5d6,0x5de,0x47b,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x5e2,0x335,0x335,0x5f2,0x5fa,0x5ea, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x602,0x602,0x520,0x520,0x335,0x608,0x610,0x335, -0x618,0x335,0x620,0x335,0x335,0x626,0x335,0x335,0x335,0x62e,0x335,0x335,0x335,0x335,0x335,0x335, -0x635,0x335,0x63c,0x644,0x335,0x64c,0x335,0x335,0x654,0x657,0x65f,0x665,0x66d,0x675,0x335,0x67c, -0x335,0x681,0x335,0x687,0x335,0x335,0x68f,0x697,0x69f,0x6a4,0x6a7,0x6af,0x6bf,0x6b7,0x6cf,0x6c7, -0x35c,0x6d7,0x35c,0x6df,0x6e2,0x35c,0x6ea,0x35c,0x6f2,0x6fa,0x702,0x70a,0x712,0x71a,0x722,0x72a, -0x732,0x739,0x335,0x741,0x749,0x335,0x751,0x759,0x761,0x769,0x771,0x779,0x781,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x784,0x78a,0x790,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x798,0x79d,0x7a1,0x7a9,0x35c,0x35c,0x35c,0x7b1,0x7b9,0x7c1,0x335,0x7c6,0x335,0x335,0x335,0x7ce, -0x335,0x61d,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x512,0x7d6,0x335,0x335,0x7dd,0x335,0x335,0x7e5,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x7ed,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x687,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x7f3,0x335,0x35c,0x7fb,0x803,0x335,0x335,0x80b,0x813,0x81b,0x35c,0x820,0x828,0x82e,0x335,0x834, -0x83c,0x52b,0x335,0x335,0x335,0x335,0x843,0x84b,0x335,0x852,0x859,0x335,0x4fd,0x85e,0x866,0x52b, -0x335,0x86c,0x874,0x878,0x335,0x880,0x888,0x890,0x335,0x896,0x89a,0x8a2,0x8b2,0x8aa,0x335,0x8ba, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x8c2,0x335,0x335,0x335,0x335,0x8ca,0x66d,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x8cf,0x8d7,0x8db,0x335,0x335,0x335,0x335,0x318,0x31e,0x8e3,0x8eb,0x8f2,0x4c8,0x335,0x335,0x8fa, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0xcd8,0xcd8,0xcf0,0xd30,0xd70,0xdac,0xdec,0xe2c,0xe64,0xea4,0xee4,0xf24,0xf64,0xfa4,0xfe4,0x1024, -0x1064,0x1094,0x10d4,0x1114,0x1124,0x1158,0x1194,0x11d4,0x1214,0x1254,0xcd4,0x1288,0x12bc,0x12fc,0x1318,0x134c, +static const uint16_t ucase_props_trieIndex[11520]={ +0x327,0x32f,0x337,0x33f,0x34d,0x355,0x35d,0x365,0x36d,0x375,0x37c,0x384,0x38c,0x394,0x39c,0x3a4, +0x3aa,0x3b2,0x3ba,0x3c2,0x3ca,0x3d2,0x3da,0x3e2,0x3ea,0x3f2,0x3fa,0x402,0x40a,0x412,0x41a,0x422, +0x42a,0x432,0x43a,0x442,0x44a,0x452,0x45a,0x462,0x45e,0x466,0x46b,0x473,0x47a,0x482,0x48a,0x492, +0x49a,0x4a2,0x4aa,0x4b2,0x346,0x34e,0x4b7,0x4bf,0x4c4,0x4cc,0x4d4,0x4dc,0x4db,0x4e3,0x4e8,0x4f0, +0x4f7,0x4fe,0x502,0x346,0x346,0x327,0x512,0x50a,0x51a,0x51c,0x524,0x52c,0x530,0x531,0x539,0x541, +0x549,0x531,0x551,0x556,0x549,0x531,0x55e,0x541,0x530,0x562,0x56a,0x541,0x56f,0x346,0x577,0x346, +0x4a1,0x4dd,0x57f,0x541,0x530,0x562,0x586,0x541,0x530,0x346,0x539,0x541,0x346,0x346,0x58c,0x346, +0x346,0x592,0x599,0x346,0x346,0x59d,0x5a5,0x346,0x5a9,0x5b0,0x346,0x5b7,0x5bf,0x5c6,0x5ce,0x346, +0x346,0x5d3,0x5db,0x5e3,0x5eb,0x5f3,0x5fb,0x490,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x5ff,0x346,0x346,0x60f,0x617,0x607, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x61f,0x61f,0x53d,0x53d,0x346,0x625,0x62d,0x346, +0x635,0x346,0x63d,0x346,0x548,0x643,0x346,0x346,0x346,0x64b,0x346,0x346,0x346,0x346,0x346,0x346, +0x652,0x346,0x659,0x661,0x346,0x669,0x346,0x346,0x671,0x674,0x67c,0x682,0x68a,0x692,0x346,0x699, +0x346,0x69e,0x346,0x6a4,0x6ac,0x346,0x6b0,0x6b8,0x6c0,0x6c5,0x6c8,0x6d0,0x6e0,0x6d8,0x6f0,0x6e8, +0x36d,0x6f8,0x36d,0x700,0x703,0x36d,0x70b,0x36d,0x713,0x71b,0x723,0x72b,0x733,0x73b,0x743,0x74b, +0x753,0x75a,0x346,0x762,0x76a,0x346,0x772,0x77a,0x782,0x78a,0x792,0x79a,0x7a2,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x7a5,0x7ab,0x7b1,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x7b9,0x7be,0x7c2,0x7ca,0x36d,0x36d,0x36d,0x7d2,0x7da,0x7e2,0x346,0x7e7,0x346,0x346,0x346,0x7ef, +0x346,0x63a,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x52f,0x7f7,0x346,0x346,0x7fe,0x346,0x346,0x806,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x80e,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x6a4,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x814,0x346,0x81c,0x821,0x829,0x346,0x346,0x831,0x839,0x841,0x36d,0x846,0x84e,0x854,0x346,0x85a, +0x862,0x548,0x346,0x346,0x346,0x346,0x869,0x871,0x346,0x878,0x87f,0x346,0x51a,0x884,0x88c,0x548, +0x346,0x892,0x89a,0x89e,0x346,0x8a6,0x8ae,0x8b6,0x346,0x8bc,0x8c0,0x8c8,0x8d8,0x8d0,0x346,0x8e0, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x8e8,0x346,0x346,0x346,0x346,0x8f0,0x68a,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x8f5,0x8fd,0x901,0x346,0x346,0x346,0x346,0x329,0x32f,0x909,0x911,0x918,0x4dd,0x346,0x346,0x920, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0xd1c,0xd1c,0xd34,0xd74,0xdb4,0xdf0,0xe30,0xe70,0xea8,0xee8,0xf28,0xf68,0xfa8,0xfe8,0x1028,0x1068, +0x10a8,0x10e8,0x1128,0x1168,0x1178,0x11ac,0x11e8,0x1228,0x1268,0x12a8,0xd18,0x12dc,0x1310,0x1350,0x136c,0x13a0, 0x9e1,0xa11,0xa51,0xa8c,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xab5,0x188,0x188, -0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xaf2,0x188,0x188,0xb27,0xb66,0x188,0xba0,0xbd7,0x188, +0x188,0x188,0x188,0x188,0x188,0x188,0x188,0xaf5,0x188,0x188,0xb2a,0xb69,0xba9,0xbe3,0xc1a,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, @@ -172,432 +174,445 @@ static const uint16_t ucase_props_trieIndex[11044]={ 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, 0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188,0x188, -0xc17,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x621,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x902,0x335,0x335,0x335,0x905,0x335,0x335,0x335, -0x335,0x90d,0x913,0x917,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x91f,0x923,0x335,0x335,0x335,0x335,0x335,0x92b,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x933,0x937,0x93f,0x943,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x513,0x948,0x94f,0x951,0x66d,0x959,0x335,0x335,0x961,0x968,0x335,0x954,0x66d,0x96e,0x976, -0x335,0x335,0x97b,0x335,0x335,0x335,0x335,0x318,0x983,0x66d,0x514,0x98b,0x992,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x998,0x9a0,0x335,0x335,0x335,0x335,0x335,0x335,0x9a4,0x9ac, -0x335,0x335,0x9b4,0x48c,0x335,0x335,0x9bc,0x335,0x335,0x9c2,0x9ca,0x335,0x335,0x335,0x335,0x335, -0x335,0x41d,0x9d2,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x9da,0x335,0x9e0,0x654, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x9e6,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x9ee,0x654,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x9f6,0x9fe,0xa04,0x335,0x335,0x335,0x335,0xa0c,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0xa14,0xa1c,0xa21,0xa27,0xa2f,0xa37,0xa3f,0xa18,0xa47, -0xa4f,0xa57,0xa5e,0xa19,0xa14,0xa1c,0xa17,0xa27,0xa1a,0xa15,0xa66,0xa18,0xa6e,0xa76,0xa7e,0xa85, -0xa71,0xa79,0xa81,0xa88,0xa74,0xa90,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x813,0xa98,0x813,0xa9f,0xaa6,0xaae,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0xab2,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0xa10,0xaba,0xaba,0xac0,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x963,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x513,0x813,0x813,0x813,0x335,0x335,0x335,0x335,0x813, -0x813,0x813,0x813,0x813,0x813,0x813,0x9ea,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x335, -0x335,0x335,0x335,0x335,0x335,0x335,0x335,0x315,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, -0,0,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,4,0,0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x1a,0xba,0xfa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x17a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0x1f9,0xf029,0x299,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x319,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xc5a,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x63e,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x928,0x346,0x346,0x346,0x92b,0x346,0x346,0x346, +0x346,0x933,0x939,0x93d,0x346,0x346,0x941,0x945,0x94b,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x953,0x957,0x346,0x346,0x346,0x346,0x346,0x95f,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x967,0x96b,0x973,0x977,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x530,0x97c,0x983,0x985,0x68a,0x98d,0x346,0x346,0x995,0x99c,0x346,0x988,0x68a,0x9a2,0x9aa, +0x346,0x346,0x9af,0x346,0x346,0x346,0x346,0x329,0x9b7,0x68a,0x531,0x9bf,0x9c6,0x346,0x346,0x346, +0x346,0x346,0x97c,0x9ce,0x346,0x346,0x9d2,0x9da,0x346,0x346,0x346,0x346,0x346,0x346,0x9de,0x9e6, +0x346,0x346,0x9ee,0x4a1,0x346,0x346,0x9f6,0x346,0x346,0x9fc,0xa04,0x346,0x346,0x346,0x346,0x346, +0x346,0xa0c,0xa14,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa1c,0x346,0x346, +0x8f0,0xa24,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa2a,0x346,0xa30,0x671, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0xa36,0x346,0x346,0x4a1,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa3e,0x671,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0xa46,0xa4e,0xa54,0x346,0x346,0x346,0x346,0xa5c,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xa64,0xa6c,0xa71,0xa77,0xa7f,0xa87, +0xa8f,0xa68,0xa97,0xa9f,0xaa7,0xaae,0xa69,0xa64,0xa6c,0xa67,0xa77,0xa6a,0xa65,0xab6,0xa68,0xabe, +0xac6,0xace,0xad5,0xac1,0xac9,0xad1,0xad8,0xac4,0xae0,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x839,0xae8,0x839,0xaef,0xaf6,0xafe,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xb06,0xb0e,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0xb12,0x346,0xb1a,0xb22,0xb29,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0xa60,0xb31,0xb31,0xb37,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x997,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x530,0x839,0x839,0x839,0x346,0x346, +0x346,0x346,0x839,0x839,0x839,0x839,0x839,0x839,0x839,0xa3a,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346, +0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x346,0x326,0x326,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,4,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,0,0,0,0,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x1a,0xba,0xfa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x17a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0x1f9,0xf029,0x299,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x319, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,1,0,0,4,0,4, -0,0,0,0,4,0x399,0,4,4,0,1,0,0,0,0,0, -0x100a,0x100a,0x100a,0x100a,0x100a,0x3fa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x47a,0x4ba,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x4f9, -0xf009,0xf009,0xf009,0xf009,0xf009,0x639,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x3c89, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,1,0, +0,4,0,4,0,0,0,0,4,0x399,0,4,4,0,1,0, +0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x3fa,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x47a,0x4ba,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x4f9,0xf009,0xf009,0xf009,0xf009,0xf009,0x639,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0x3c89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6ba,0xff89,0x8a,0xff89, +0x8a,0xff89,0x6fa,0xffa9,0x73a,0x7f9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x899,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6ba,0xff89,0x8a,0xff89,0x8a,0xff89,0x6fa,0xffa9, -0x73a,0x7f9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0x8a,0xff89,0x899,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc38a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x999, +0x6189,0x690a,0x8a,0xff89,0x8a,0xff89,0x670a,0x8a,0xff89,0x668a,0x668a,0x8a,0xff89,1,0x278a,0x650a, +0x658a,0x8a,0xff89,0x668a,0x678a,0x3089,0x698a,0x688a,0x8a,0xff89,0x5189,1,0x698a,0x6a8a,0x4109,0x6b0a, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6d0a,1,1,0x8a,0xff89,0x6d0a,0x8a, +0xff89,0x6c8a,0x6c8a,0x8a,0xff89,0x8a,0xff89,0x6d8a,0x8a,0xff89,1,0,0x8a,0xff89,1,0x1c09, +0,0,0,0,0x9fa,0xa5b,0xad9,0xb3a,0xb9b,0xc19,0xc7a,0xcdb,0xd59,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xd889,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0xc38a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x999,0x6189,0x690a,0x8a,0xff89, -0x8a,0xff89,0x670a,0x8a,0xff89,0x668a,0x668a,0x8a,0xff89,1,0x278a,0x650a,0x658a,0x8a,0xff89,0x668a, -0x678a,0x3089,0x698a,0x688a,0x8a,0xff89,0x5189,1,0x698a,0x6a8a,0x4109,0x6b0a,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6d0a,1,1,0x8a,0xff89,0x6d0a,0x8a,0xff89,0x6c8a,0x6c8a,0x8a, -0xff89,0x8a,0xff89,0x6d8a,0x8a,0xff89,1,0,0x8a,0xff89,1,0x1c09,0,0,0,0, -0x9fa,0xa5b,0xad9,0xb3a,0xb9b,0xc19,0xc7a,0xcdb,0xd59,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xd889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xdb9,0xeba,0xf1b,0xf99, -0x8a,0xff89,0xcf8a,0xe40a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0xdb9,0xeba,0xf1b,0xf99,0x8a,0xff89,0xcf8a,0xe40a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0xbf0a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,1,1,1,1,0xffa,0x8a, -0xff89,0xae8a,0x103a,0x1079,0x10b9,0x8a,0xff89,0x9e8a,0x228a,0x238a,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x10f9,0x1139,0x1179,0x9709,0x9909,1,0x9989,0x9989,1,0x9b09,1,0x9a89, -0x11b9,1,1,1,0x9989,0x11f9,1,0x9889,1,0x1239,0x1279,1,0x97a9,0x9689,1,0x12b9, -0x12f9,1,1,0x9689,1,0x1339,0x9589,1,1,0x9509,1,1,1,1,1,1, -1,0x1379,1,1,0x9309,1,1,0x9309,1,1,1,0x13b9,0x9309,0xdd89,0x9389,0x9389, -0xdc89,1,1,1,1,1,0x9289,1,0,1,1,1,1,1,1,1, -1,0x13f9,0x1439,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,5,5,0x25,5,5,5,5,5,5,4,4,4, -0xc,4,0xc,4,5,5,4,4,4,4,4,4,4,4,4,4, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xbf0a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,1,1, +1,1,0xffa,0x8a,0xff89,0xae8a,0x103a,0x1079,0x10b9,0x8a,0xff89,0x9e8a,0x228a,0x238a,0x8a,0xff89, +0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x10f9,0x1139,0x1179,0x9709,0x9909,1,0x9989,0x9989, +1,0x9b09,1,0x9a89,0x11b9,1,1,1,0x9989,0x11f9,1,0x9889,1,0x1239,0x1279,1, +0x97a9,0x9689,0x12b9,0x12f9,0x1339,1,1,0x9689,1,0x1379,0x9589,1,1,0x9509,1,1, +1,1,1,1,1,0x13b9,1,1,0x9309,1,1,0x9309,1,1,1,0x13f9, +0x9309,0xdd89,0x9389,0x9389,0xdc89,1,1,1,1,1,0x9289,1,0,1,1,1, +1,1,1,1,1,0x1439,0x1479,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,5,0x25,5,5,5,5,5, +5,4,4,4,0xc,4,0xc,4,5,5,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,5,5,5,5,5,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,5,5,5,5,5,4,4,4, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,0x4c,0x4c,0x44,0x44,0x44,0x44,0x44,0x147c,0x4c,0x44,0x4c,0x44, -0x4c,0x44,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64, +4,4,4,4,4,4,4,4,0x4c,0x4c,0x44,0x44,0x44,0x44,0x44,0x14bc, +0x4c,0x44,0x4c,0x44,0x4c,0x44,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x64,0x64,0x64, 0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x64,0x64,0x64,0x64,0x6c,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x44,0x149d,0x44,0x64,0x64,0x64,0x44,0x44, -0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x44, -0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89,4,4,0x8a,0xff89,0,0,5,0x4109, -0x4109,0x4109,0,0x3a0a,0,0,0,0,4,4,0x130a,4,0x128a,0x128a,0x128a,0, -0x200a,0,0x1f8a,0x1f8a,0x1539,0x100a,0x16da,0x100a,0x100a,0x175a,0x100a,0x100a,0x17da,0x187a,0x191a,0x100a, -0x199a,0x100a,0x100a,0x100a,0x1a1a,0x1a9a,0,0x1b1a,0x100a,0x100a,0x1b9a,0x100a,0x100a,0x1c1a,0x100a,0x100a, -0xed09,0xed89,0xed89,0xed89,0x1c99,0xf009,0x1e39,0xf009,0xf009,0x1eb9,0xf009,0xf009,0x1f39,0x1fd9,0x2079,0xf009, -0x20f9,0xf009,0xf009,0xf009,0x2179,0x21f9,0x2279,0x22d9,0xf009,0xf009,0x2359,0xf009,0xf009,0x23d9,0xf009,0xf009, -0xe009,0xe089,0xe089,0x40a,0x2459,0x24b9,2,2,2,0x2559,0x25b9,0xfc09,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x2619,0x2679,0x389,0xc629,0x26da,0x2779,0,0x8a,0xff89,0xfc8a,0x8a,0xff89, -1,0xbf0a,0xbf0a,0xbf0a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a, -0x280a,0x280a,0x280a,0x280a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd829,0xd809,0xd829,0xd809,0xd809,0xd809, -0xd809,0xd809,0xd809,0xd809,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x6c,0x64,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x4c,0x44,0x44,0x14dd,0x44,0x64, +0x64,0x64,0x44,0x44,0x44,0x64,0x64,4,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x44, +0x64,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89,4,4,0x8a,0xff89, +0,0,5,0x4109,0x4109,0x4109,0,0x3a0a,0,0,0,0,4,4,0x130a,4, +0x128a,0x128a,0x128a,0,0x200a,0,0x1f8a,0x1f8a,0x1579,0x100a,0x171a,0x100a,0x100a,0x179a,0x100a,0x100a, +0x181a,0x18ba,0x195a,0x100a,0x19da,0x100a,0x100a,0x100a,0x1a5a,0x1ada,0,0x1b5a,0x100a,0x100a,0x1bda,0x100a, +0x100a,0x1c5a,0x100a,0x100a,0xed09,0xed89,0xed89,0xed89,0x1cd9,0xf009,0x1e79,0xf009,0xf009,0x1ef9,0xf009,0xf009, +0x1f79,0x2019,0x20b9,0xf009,0x2139,0xf009,0xf009,0xf009,0x21b9,0x2239,0x22b9,0x2319,0xf009,0xf009,0x2399,0xf009, +0xf009,0x2419,0xf009,0xf009,0xe009,0xe089,0xe089,0x40a,0x2499,0x24f9,2,2,2,0x2599,0x25f9,0xfc09, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,0x44,0x44,0x44,0x44,4,4,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x2659,0x26b9,0x389,0xc629,0x271a,0x27b9,0,0x8a, +0xff89,0xfc8a,0x8a,0xff89,1,0xbf0a,0xbf0a,0xbf0a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a, +0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x280a,0x100a,0x100a,0x281a,0x100a,0x289a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x291a,0x100a,0x100a,0x299a,0x2a1a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x2aba,0x100a,0x100a,0x100a,0x100a,0x100a,0xf009,0xf009,0x2b39,0xf009,0x2bb9,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0x2c39,0xf009,0xf009,0x2cb9,0x2d39,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0x2dd9,0xf009,0xf009,0xf009,0xf009,0xf009,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd829,0xd809, +0xd829,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0xd809,0x8a,0xff89,0x2e5a,0x2ed9,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,0x44,0x44,0x44,0x44, +4,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x78a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0x8a,0xff89,0xf889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x78a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xf889,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, -0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0, -0,4,0,0,0,0,0,0,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x180a,0x180a,0x180a,0,0,4,0,0,0,0,0,0,0,0xe809,0xe809,0xe809, 0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, -0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0x27d9,0,0,0,0, -0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x44,0x64,0x64, -0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x44, -0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, -0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64,0,0,0,0, +0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0x2f59, +0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x64,0x44, +0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64, +0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x64,0x64,0x64,0x64,0,0x64,0,0x64,0x64,0,0x44,0x64,0,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x64,0x64,0x64,0,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0, -0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0, -4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44, +0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0x64, -0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44, -0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64,0x44,4,4,0x44, -0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0, +0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,0,0x44,0x44,0x44,0x44,0x64, +0x44,4,4,0x44,0x44,0,0x64,0x44,0x44,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0x44,0x44, -0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44,0x44,0x44,0x64,0x44, -0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0, +0x44,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x44,0x64,0x64,0x44,0x64,0x44, +0x44,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x64,0x44,0x44,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, -4,4,4,4,4,4,4,4,4,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,4,4,4,4,4,4,4,4,4,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44, -4,4,0,0,0,0,4,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, -0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,4,0x44,0x44,0x44, -0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,0x64, -0,0,0,0,0,0,0,0x64,0x44,0x44,0x64,0x44,0x44,0x64,0x44,0x44, -0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x44, -0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,0,0x64,0,0,0,0,4,4,4, -4,4,4,4,4,0,0,0,0,0x64,0,0,0,0x44,0x64,0x44, -0x44,4,4,4,0,0,0,0,0,0,0,0,0,0,4,4, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,0, -0,4,4,4,4,0,0,0,0,0,0,0,0,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x64,0x44,4,4,0,0,0,0,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44,0x44,0x44,4,0x44,0x44,0x44, +4,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0x64,0x64,0x64,0,0,0,0,0x44,0x44,4,0x64,0x44,0x44,0x64,0x44, +0x44,0x64,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x44,0x64,0x44, +0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,4,4,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,0,0,0,0,4,4,0,0,4,4,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,0x64,0,0,0, +0,4,4,4,4,4,4,4,4,0,0,0,0,0x64,0,0, +0,0x44,0x64,0x44,0x44,4,4,4,0,0,0,0,0,0,0,0, +0,0,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,0,0,4,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,4,4,0,4,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x64,0,0,0,0,4,4,4,4,0,0,0,0,0,0,0, 0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,0,4,0,4,4,4,4,0,0,0,0,0,0,0, -0,0x64,0,0,0,0,0,0,0,0,4,0,0,0,0,0, +0,0,0,0,0,4,4,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,4,4, -4,0,4,4,4,0x64,0,0,0,0,0,0,0,0x64,0x64,0, -0,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, -4,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,4,4, -4,0,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0x64,0, -0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64,4,4,4,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,0,0,4,4,4,4,0x64,0x64,0,4,4,0,0,0, -0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64,4,4,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x64,0x64,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x64,0,0x64,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0x64,0x64,4,0x64,4,4,4, -4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44,0x64,0,0x44,0x44, -0,0,0,0,0,4,4,4,4,4,4,4,4,4,4,4, -0,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0, +0,0,0,0,0,4,4,0,0,0,0,4,4,0,0,4, +4,0x64,0,0,0,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,4,4,0,4, +4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,4,0,4,4,4,4,4,0x64, -0,0x64,0x64,0,0,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x64,0,0,4,0,4,4,4,4,0,0,0, +0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,4,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,0,0,0,0,4,4,4,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,4,4,4,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,0,0,4,4,0, -0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,0,0,0x28da,0x291a,0x295a,0x299a,0x29da,0x2a1a,0x2a5a,0x2a9a, -0x2ada,0x2b1a,0x2b5a,0x2b9a,0x2bda,0x2c1a,0x2c5a,0x2c9a,0x2cda,0x2d1a,0x2d5a,0x2d9a,0x2dda,0x2e1a,0x2e5a,0x2e9a, -0x2eda,0x2f1a,0x2f5a,0x2f9a,0x2fda,0x301a,0x305a,0x309a,0x30da,0x311a,0x315a,0x319a,0x31da,0x321a,0,0x325a, -0,0,0,0,0,0x329a,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0x44,0x44,0x44,0x4ada,0x4b3a,0x4b9a,0x4bfa,0x4c5a,0x4cba,0x4d1a,0x4d7a, -0x4dda,0x4e3a,0x4e9a,0x4efa,0x4f5a,0x4fba,0x501a,0x507a,0x50da,0x513a,0x519a,0x51fa,0x525a,0x52ba,0,0, -0x5319,0x5379,0x53d9,0x5439,0x5499,0x54f9,0,0,0x32da,0x333a,0x339a,0x33fa,0x345a,0x34ba,0x351a,0x357a, -0x35da,0x363a,0x369a,0x36fa,0x375a,0x37ba,0x381a,0x387a,0x38da,0x393a,0x399a,0x39fa,0x3a5a,0x3aba,0x3b1a,0x3b7a, -0x3bda,0x3c3a,0x3c9a,0x3cfa,0x3d5a,0x3dba,0x3e1a,0x3e7a,0x3eda,0x3f3a,0x3f9a,0x3ffa,0x405a,0x40ba,0x411a,0x417a, -0x41da,0x423a,0x429a,0x42fa,0x435a,0x43ba,0x441a,0x447a,0x44da,0x453a,0x459a,0x45fa,0x465a,0x46ba,0x471a,0x477a, -0x47da,0x483a,0x489a,0x48fa,0x495a,0x49ba,0x4a1a,0x4a7a,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,4,0x64,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,4,4,4,0,4,4,4,0x64,0,0,0,0,0,0, +0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,4,0, +0,0,0,0,4,0x64,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,0,0,0,0,0, +0,0,4,4,4,0,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,4,4,4,4, +0x64,0x64,0x64,0,0,0,0,0,0,0,4,4,0x64,0x64,0x64,0x64, +4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,4,4,4,4,0x64,0x64,0,4, +4,0,0,0,0,0,0,0,0,0,4,0,0x64,0x64,0x64,0x64, +4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,4,4,4,4,4,4,4,0,0, -0,0,0,0,0,0,4,0,0,4,4,4,4,4,4,4, -4,4,0x64,4,0,0,0,4,0,0,0,0,0,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,0, +0,0,0,0,0,0x64,0,0x64,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4, +0x64,4,4,4,4,4,0x64,0x64,0x64,0x64,4,0,0x64,4,0x44,0x44, +0x64,0,0x44,0x44,0,0,0,0,0,4,4,4,4,4,4,4, +4,4,4,4,0,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,0,0,0,0,0,0,0,0,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,4,0,4,4, +4,4,4,0x64,0,0x64,0x64,0,0,4,4,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,4,4,0,0,0,0,4, -4,0,0,0,0,0,0,0,0,0,4,0,0,0,0,0, -0,0x64,0x44,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x44,0x64,0,0,4, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,0,4,4,4,4,4,4,4,0, -0x64,0,4,0,0,4,4,4,4,4,4,4,4,0,0,0, -0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0x64, +0,0,0,0,4,4,0,0,0,0,4,4,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, +0,4,4,0,0,0,0,0,0,0x64,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,0,0,0x305a,0x309a,0x30da,0x311a, +0x315a,0x319a,0x31da,0x321a,0x325a,0x329a,0x32da,0x331a,0x335a,0x339a,0x33da,0x341a,0x345a,0x349a,0x34da,0x351a, +0x355a,0x359a,0x35da,0x361a,0x365a,0x369a,0x36da,0x371a,0x375a,0x379a,0x37da,0x381a,0x385a,0x389a,0x38da,0x391a, +0x395a,0x399a,0,0x39da,0,0,0,0,0,0x3a1a,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x525a,0x52ba,0x531a,0x537a, +0x53da,0x543a,0x549a,0x54fa,0x555a,0x55ba,0x561a,0x567a,0x56da,0x573a,0x579a,0x57fa,0x585a,0x58ba,0x591a,0x597a, +0x59da,0x5a3a,0,0,0x5a99,0x5af9,0x5b59,0x5bb9,0x5c19,0x5c79,0,0,0x3a5a,0x3aba,0x3b1a,0x3b7a, +0x3bda,0x3c3a,0x3c9a,0x3cfa,0x3d5a,0x3dba,0x3e1a,0x3e7a,0x3eda,0x3f3a,0x3f9a,0x3ffa,0x405a,0x40ba,0x411a,0x417a, +0x41da,0x423a,0x429a,0x42fa,0x435a,0x43ba,0x441a,0x447a,0x44da,0x453a,0x459a,0x45fa,0x465a,0x46ba,0x471a,0x477a, +0x47da,0x483a,0x489a,0x48fa,0x495a,0x49ba,0x4a1a,0x4a7a,0x4ada,0x4b3a,0x4b9a,0x4bfa,0x4c5a,0x4cba,0x4d1a,0x4d7a, +0x4dda,0x4e3a,0x4e9a,0x4efa,0x4f5a,0x4fba,0x501a,0x507a,0x50da,0x513a,0x519a,0x51fa,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, +0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,4,4,4,4,4, +4,4,0,0,0,0,0,0,0,0,4,0,0,4,4,4, +4,4,4,4,4,4,0x64,4,0,0,0,4,0,0,0,0, +0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,4,0, -4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,4,4,4,4,4,0,4,0,0,0,0,0,4,0, -0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,0, +0,0,0,4,4,0,0,0,0,0,0,0,0,0,4,0, +0,0,0,0,0,0x64,0x44,0x64,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44, -0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,4,4,4,4,0,0,4,4,0x60,0x64, -4,4,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x64,0,4,4,0,0,0,4,0,4, -4,4,0x60,0x60,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,4,4,4,4,4,4,0,0,4,0x64,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,4,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0, -0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0,0x64,0x64, -0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0,0,0,0,0, -0x44,0,0,0,0x44,0x44,0,0,0,0,0,0,1,1,1,1, +0x64,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,0,4,4,4,4, +4,4,4,0,0x64,0,4,0,0,4,4,4,4,4,4,4, +4,0,0,0,0,0,0,4,4,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0,0,0x64,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44, +0x44,0x64,4,0,4,4,4,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x64,0,4,4,4,4,4,0,4,0,0,0, +0,0,4,0,0x60,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0, +4,4,0x60,0x64,4,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,0,4,4,0,0, +0,4,0,4,4,4,0x60,0x60,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,0,0,4,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,4,0,0, +0x5cd9,0x5d39,0x5d99,0x5df9,0x5e59,0x5ef9,0x5f99,0x5ff9,0x6059,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x44,0x44,0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0x64,0x64,0x64,0x64, +0x44,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0,0,0,0,0x64,0,0, +0,0,0,0,0x44,0,0,0,0x44,0x44,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x25,5, -5,5,5,5,5,5,5,1,1,1,1,1,1,1,1,1, -1,1,1,1,5,0x5559,1,1,1,0x5599,1,1,5,5,5,5, -0x25,5,5,5,0x25,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,1,1,1,1, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0x25,5,5,5,5,5,5,5,5,1,1,1,1,1, +1,1,1,1,1,1,1,1,5,0x60b9,1,1,1,0x60f9,1,1, +5,5,5,5,0x25,5,5,5,0x25,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,0x21,1,1,1,1,5,5,5,5,5,0x44,0x44,0x44,0x44, +1,1,1,1,1,1,0x21,1,1,1,1,5,5,5,5,5, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0,0,0,0,0,0,0x64,0x64,0x44,0x64,0x44,0x44,0x64,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64,0x64,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x55da,0x5659,0x8a,0xff89, +0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x44,0x64,0x64,0x44,0x64, +0x44,0x44,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x44,0x44,0x64,0x64,0x64, +0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x56d9,0x57d9, -0x58d9,0x59d9,0x5ad9,0x5bd9,1,1,0x5c3a,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0,0, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x5cd9,0x409,0x5dd9,0x409,0x5f39,0x409,0x6099,0x409, -0,0xfc0a,0,0xfc0a,0,0xfc0a,0,0xfc0a,0x409,0x409,0x409,0x409,0x409,0x409,0x409,0x409, -0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x2509,0x2509,0x2b09,0x2b09,0x2b09,0x2b09,0x3209,0x3209, -0x4009,0x4009,0x3809,0x3809,0x3f09,0x3f09,0,0,0x61f9,0x62d9,0x63b9,0x6499,0x6579,0x6659,0x6739,0x6819, -0x68fb,0x69db,0x6abb,0x6b9b,0x6c7b,0x6d5b,0x6e3b,0x6f1b,0x6ff9,0x70d9,0x71b9,0x7299,0x7379,0x7459,0x7539,0x7619, -0x76fb,0x77db,0x78bb,0x799b,0x7a7b,0x7b5b,0x7c3b,0x7d1b,0x7df9,0x7ed9,0x7fb9,0x8099,0x8179,0x8259,0x8339,0x8419, -0x84fb,0x85db,0x86bb,0x879b,0x887b,0x895b,0x8a3b,0x8b1b,0x409,0x409,0x8bf9,0x8cf9,0x8dd9,0,0x8ed9,0x8fd9, -0xfc0a,0xfc0a,0xdb0a,0xdb0a,0x913b,4,0x9219,4,4,4,0x92b9,0x93b9,0x9499,0,0x9599,0x9699, -0xd50a,0xd50a,0xd50a,0xd50a,0x97fb,4,4,4,0x409,0x409,0x98d9,0x9a39,0,0,0x9bd9,0x9cd9, -0xfc0a,0xfc0a,0xce0a,0xce0a,0,4,4,4,0x409,0x409,0x9e39,0x9f99,0xa139,0x389,0xa239,0xa339, -0xfc0a,0xfc0a,0xc80a,0xc80a,0xfc8a,4,4,4,0,0,0xa499,0xa599,0xa679,0,0xa779,0xa879, -0xc00a,0xc00a,0xc10a,0xc10a,0xa9db,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,0,0,0,0,0,0,0,0, -4,4,0,0,0,0,0,0,4,0,0,4,0,0,4,4, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,4,4,4,4,4,0,4,4,4,4,4,4, -4,4,4,4,0,0x25,0,0,0,0,0,0,0,0,0,0, -0,0,0,5,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x44, -0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44,0x64,0x44,0x64,0x64, -0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,2,0,0,0,0,2,0,0,1,2, -2,2,1,1,2,2,2,1,0,2,0,0,0,2,2,2, -2,2,0,0,0,0,0,0,2,0,0xaaba,0,2,0,0xab3a,0xabba, -2,2,0,1,2,2,0xe0a,2,1,0,0,0,0,1,0,0, -1,1,2,2,0,0,0,0,0,2,1,1,0x21,0x21,0,0, -0,0,0xf209,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, -0x80a,0x80a,0x80a,0x80a,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809, -0xf809,0xf809,0xf809,0xf809,0,0,0,0x8a,0xff89,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a, -0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309, -0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, +0x613a,0x61b9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x6239,0x6339,0x6439,0x6539,0x6639,0x6739,1,1,0x679a,1,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xffa9,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0,0,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0,0,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0,0,0x6839,0x409,0x6939,0x409, +0x6a99,0x409,0x6bf9,0x409,0,0xfc0a,0,0xfc0a,0,0xfc0a,0,0xfc0a,0x409,0x409,0x409,0x409, +0x409,0x409,0x409,0x409,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0xfc0a,0x2509,0x2509,0x2b09,0x2b09, +0x2b09,0x2b09,0x3209,0x3209,0x4009,0x4009,0x3809,0x3809,0x3f09,0x3f09,0,0,0x6d59,0x6e39,0x6f19,0x6ff9, +0x70d9,0x71b9,0x7299,0x7379,0x745b,0x753b,0x761b,0x76fb,0x77db,0x78bb,0x799b,0x7a7b,0x7b59,0x7c39,0x7d19,0x7df9, +0x7ed9,0x7fb9,0x8099,0x8179,0x825b,0x833b,0x841b,0x84fb,0x85db,0x86bb,0x879b,0x887b,0x8959,0x8a39,0x8b19,0x8bf9, +0x8cd9,0x8db9,0x8e99,0x8f79,0x905b,0x913b,0x921b,0x92fb,0x93db,0x94bb,0x959b,0x967b,0x409,0x409,0x9759,0x9859, +0x9939,0,0x9a39,0x9b39,0xfc0a,0xfc0a,0xdb0a,0xdb0a,0x9c9b,4,0x9d79,4,4,4,0x9e19,0x9f19, +0x9ff9,0,0xa0f9,0xa1f9,0xd50a,0xd50a,0xd50a,0xd50a,0xa35b,4,4,4,0x409,0x409,0xa439,0xa599, +0,0,0xa739,0xa839,0xfc0a,0xfc0a,0xce0a,0xce0a,0,4,4,4,0x409,0x409,0xa999,0xaaf9, +0xac99,0x389,0xad99,0xae99,0xfc0a,0xfc0a,0xc80a,0xc80a,0xfc8a,4,4,4,0,0,0xaff9,0xb0f9, +0xb1d9,0,0xb2d9,0xb3d9,0xc00a,0xc00a,0xc10a,0xc10a,0xb53b,4,4,0,0,0,0,0, +0,0,0,0,0,0,0,4,4,4,4,4,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,0,4,0,0,4, +0,0,4,4,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,4,4,4,4,0,4,4, +4,4,4,4,4,4,4,4,0,0x25,0,0,0,0,0,0, +0,0,0,0,0,0,0,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x64,0x64,0x44,0x44,0x44,0x44, +0x64,0x64,0x64,0x44,0x44,4,4,4,4,0x44,4,4,4,0x64,0x64,0x44, +0x64,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,2, +0,0,1,2,2,2,1,1,2,2,2,1,0,2,0,0, +0,2,2,2,2,2,0,0,0,0,0,0,2,0,0xb61a,0, +2,0,0xb69a,0xb71a,2,2,0,1,2,2,0xe0a,2,1,0,0,0, +0,1,0,0,1,1,2,2,0,0,0,0,0,2,1,1, +0x21,0x21,0,0,0,0,0xf209,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a, +0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0x80a,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809, +0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0xf809,0,0,0,0x8a,0xff89,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a, +0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xd0a,0xf309,0xf309,0xf309,0xf309, +0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0xf309,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, 0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a, -0x180a,0x180a,0x180a,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, +0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0x180a,0,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, 0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809, -0xe809,0xe809,0xe809,0,0x8a,0xff89,0xac3a,0xac7a,0xacba,0xacf9,0xad39,0x8a,0xff89,0x8a,0xff89,0x8a, -0xff89,0xad7a,0xadba,0xadfa,0xae3a,1,0x8a,0xff89,1,0x8a,0xff89,1,1,1,1,1, -0x25,5,0xae7a,0xaeba,0x8a,0xff89,0x8a,0xff89,1,0,0,0,0,0,0,0x8a, -0xff89,0x8a,0xff89,0x44,0x44,0x44,0x8a,0xff89,0,0,0,0,0,0,0,0, -0,0,0,0,0xaef9,0xaf39,0xaf79,0xafb9,0xaff9,0xb039,0xb079,0xb0b9,0xb0f9,0xb139,0xb179,0xb1b9, -0xb1f9,0xb239,0xb279,0xb2b9,0xb2f9,0xb339,0xb379,0xb3b9,0xb3f9,0xb439,0xb479,0xb4b9,0xb4f9,0xb539,0xb579,0xb5b9, -0xb5f9,0xb639,0xb679,0xb6b9,0xb6f9,0xb739,0xb779,0xb7b9,0xb7f9,0xb839,0,0xb879,0,0,0,0, -0,0xb8b9,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0xe809,0,0x8a,0xff89,0xb79a,0xb7da,0xb81a,0xb859,0xb899,0x8a, +0xff89,0x8a,0xff89,0x8a,0xff89,0xb8da,0xb91a,0xb95a,0xb99a,1,0x8a,0xff89,1,0x8a,0xff89,1, +1,1,1,1,0x25,5,0xb9da,0xba1a,0x8a,0xff89,0x8a,0xff89,1,0,0,0, +0,0,0,0x8a,0xff89,0x8a,0xff89,0x44,0x44,0x44,0x8a,0xff89,0,0,0,0, +0,0,0,0,0,0,0,0,0xba59,0xba99,0xbad9,0xbb19,0xbb59,0xbb99,0xbbd9,0xbc19, +0xbc59,0xbc99,0xbcd9,0xbd19,0xbd59,0xbd99,0xbdd9,0xbe19,0xbe59,0xbe99,0xbed9,0xbf19,0xbf59,0xbf99,0xbfd9,0xc019, +0xc059,0xc099,0xc0d9,0xc119,0xc159,0xc199,0xc1d9,0xc219,0xc259,0xc299,0xc2d9,0xc319,0xc359,0xc399,0,0xc3d9, +0,0,0,0,0,0xc419,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x64,0x44,0x44,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0, -0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4,4,4,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0x64,0x64,4, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0, +0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x60,0x60,0,4,4,4, +4,4,0,0,0,0,0,4,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,4,4,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0,0x44,4,4,4,0, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,4,0x8a,0xff89,0x8a,0xff89, +0,0x64,0x64,4,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc45a,0xc4d9,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,5,5,0x44,0x44,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89, +0x8a,0xff89,0,0x44,4,4,4,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -5,1,1,1,1,1,1,1,1,0x8a,0xff89,0x8a,0xff89,0xb8fa,0x8a,0xff89, -0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,4,4,4,0x8a,0xff89,0xb93a,1,0, +5,5,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x44,0x44,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,4,4,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, 0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, -0x8a,0xff89,0xb97a,0xb9ba,0xb9fa,0xba3a,0,0,0xba7a,0xbaba,0xbafa,0xbb3a,0x8a,0xff89,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,5,1,1,1,1,1,1,1, +1,0x8a,0xff89,0x8a,0xff89,0xc55a,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89, +4,4,4,0x8a,0xff89,0xc59a,1,0,0x8a,0xff89,0x8a,0xff89,1,1,0x8a,0xff89, +0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0x8a,0xff89,0xc5da,0xc61a,0xc65a,0xc69a,0xc6da,0, +0xc71a,0xc75a,0xc79a,0xc7da,0x8a,0xff89,0x8a,0xff89,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,1,0,0,0,0,0, -0,0,4,0,0,0,0x64,0,0,0,0,4,0,0,0,0, +5,5,1,0,0,0,0,0,0,0,4,0,0,0,0x64,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x64,4,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,4, -4,4,4,0x64,0x64,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, -4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0x64,0,0,4,4, -4,4,0,0,4,0,0,0,0x60,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,4,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,4,4,4,4,4,4,0, -0,4,4,0,0,4,4,0,0,0,0,0,0,0,0,0, -0,0,0,4,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,4,4,4,4,0x64,0x64,0x64,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -4,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, +0,0,0,4,4,4,4,4,4,4,4,4,4,4,0,0x60, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x44,0,0x44,0x44,0x64,0,0,0x44,0x44,0,0,0,0,0,0x44,0x44, -0,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0, -0,0,0,4,4,0,0x64,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,0xbb79,1,1,1,1, -1,1,1,4,5,5,5,5,1,1,1,1,1,1,0,0, -0,0,0,0,0,0,0,0,0xbbb9,0xbc19,0xbc79,0xbcd9,0xbd39,0xbd99,0xbdf9,0xbe59, -0xbeb9,0xbf19,0xbf79,0xbfd9,0xc039,0xc099,0xc0f9,0xc159,0xcdb9,0xce19,0xce79,0xced9,0xcf39,0xcf99,0xcff9,0xd059, -0xd0b9,0xd119,0xd179,0xd1d9,0xd239,0xd299,0xd2f9,0xd359,0xd3b9,0xd419,0xd479,0xd4d9,0xd539,0xd599,0xd5f9,0xd659, -0xd6b9,0xd719,0xd779,0xd7d9,0xd839,0xd899,0xd8f9,0xd959,0xc1b9,0xc219,0xc279,0xc2d9,0xc339,0xc399,0xc3f9,0xc459, -0xc4b9,0xc519,0xc579,0xc5d9,0xc639,0xc699,0xc6f9,0xc759,0xc7b9,0xc819,0xc879,0xc8d9,0xc939,0xc999,0xc9f9,0xca59, -0xcab9,0xcb19,0xcb79,0xcbd9,0xcc39,0xcc99,0xccf9,0xcd59,0,0,0,0,0,4,0,0, -4,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xd9b9,0xdab9,0xdbb9,0xdcb9,0xde19,0xdf79,0xe0b9,0, -0,0,0,0,0,0,0,0,0,0,0,0xe1f9,0xe2f9,0xe3f9,0xe4f9,0xe5f9, -0,0,0,0,0,0,0x64,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,0,0,0,4, -0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44, -0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0x44,0x44,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,4,0, -0,4,0,0,0,0,0,0,0,0,0,0,0,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, -0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0,0,0,4,0,4,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, +0,0,0,0x64,0,0,4,4,4,4,0,0,4,0,0,0, +0x60,0,0,0,0,0,0,0,0,0,0,0,0,0,0,4, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,4,4,4,4,4,4,0,0,4,4,0,0,4,4,0, 0,0,0,0,0,0,0,0,0,0,0,4,0,0,0,0, +0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,4,0,0,0,0,0,0,0, +0,0,0,0,4,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0,0x44,0x44,0x64,0,0,0x44, +0x44,0,0,0,0,0,0x44,0x44,0,0x44,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,4,4,4,0,0,0,0,0x64,0,0,0,0,0,0,0, +0,0,0,0,0,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,4,4,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0, -0,0,0,0,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0xc819,1,1,1,1,1,1,1,4,5,5,5,5, +1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0, +0xc859,0xc8b9,0xc919,0xc979,0xc9d9,0xca39,0xca99,0xcaf9,0xcb59,0xcbb9,0xcc19,0xcc79,0xccd9,0xcd39,0xcd99,0xcdf9, +0xda59,0xdab9,0xdb19,0xdb79,0xdbd9,0xdc39,0xdc99,0xdcf9,0xdd59,0xddb9,0xde19,0xde79,0xded9,0xdf39,0xdf99,0xdff9, +0xe059,0xe0b9,0xe119,0xe179,0xe1d9,0xe239,0xe299,0xe2f9,0xe359,0xe3b9,0xe419,0xe479,0xe4d9,0xe539,0xe599,0xe5f9, +0xce59,0xceb9,0xcf19,0xcf79,0xcfd9,0xd039,0xd099,0xd0f9,0xd159,0xd1b9,0xd219,0xd279,0xd2d9,0xd339,0xd399,0xd3f9, +0xd459,0xd4b9,0xd519,0xd579,0xd5d9,0xd639,0xd699,0xd6f9,0xd759,0xd7b9,0xd819,0xd879,0xd8d9,0xd939,0xd999,0xd9f9, +0,0,0,0,0,4,0,0,4,0,0,0,0,0x64,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0xe659,0xe759,0xe859,0xe959,0xeab9,0xec19,0xed59,0,0,0,0,0,0,0,0,0, +0,0,0,0xee99,0xef99,0xf099,0xf199,0xf299,0,0,0,0,0,0,0x64,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,4,0,0,0,4,0,0,0,0,0,0,0,0, +0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0x64,0x64,0x64,0x64, +0x64,0x64,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,4,0,0,4,0,0,0,0,0,0, +0,0,0,0,0,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0, +0,0,4,0,4,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,4,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,4,4,4,0,0,0,0, +0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0x140a,0x140a,0x140a,0x140a, 0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, -0x140a,0x140a,0x140a,0x140a,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, -0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a, +0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0x140a,0,0,0,0,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09, +0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0xec09,0,0,0,0,0,4,4,4, 0,4,4,0,0,0,0,0,4,0x64,4,0x44,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0x44,0x64,0x64,0,0,0,0,0x64,0,0,0,0, @@ -622,29 +637,36 @@ static const uint16_t ucase_props_trieIndex[11044]={ 4,4,4,4,4,4,4,0,0x60,0,0,0,0,0,0,0, 0,0,0x64,4,4,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,4,4,4,0,0, -4,0x60,0x64,4,0,0,0,0,0,0,0,0,0,0,0,4, +4,0x60,0x64,4,0,0,0,0,0,0,4,0,0,0,0,4, 4,4,4,4,4,0x64,0x64,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,4,0,0,0, 0,0,0,0,0,0,0,0,0,0x60,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x44,0x44, 0x44,0x44,0x44,0x44,0x44,0,0,0,0x44,0x44,0x44,0x44,0x44,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x64,4,4,0,0x64,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,4,0,4,0,0,0,0,4, -4,0,0x64,0x64,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, +4,0,4,0,0,0,0,4,4,0,0x64,0x64,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,4,4,4,4,0,0,0,0,0,0,4,4,0,0x64, -0x64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,4,4,0,0, +0,0,0,0,0,0,0,0,0,0,4,4,4,4,0,0, +0,0,0,0,4,4,0,0x64,0x64,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,4,4,4,4,4,4,4,4,0,0,4,0,0x64, -0,0,0,0,0,0,0,0,0,0,0,4,0,4,0,0, -4,4,4,4,4,4,0x60,0x64,0,0,0,0,0,0,0,0, +0,0,0,0,4,4,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,4,4,4,4,4, +4,4,4,0,0,4,0,0x64,0,0,0,0,0,0,0,0, +0,0,0,4,0,4,0,0,4,4,4,4,4,4,0x60,0x64, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,4,4,4, +0,0,4,4,4,4,0,4,4,4,4,0x64,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,4,4,4,0,0,4,4,4,4,0,4, -4,4,4,0x64,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a,0x100a, +0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, 0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009, -0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0xf009,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +4,4,4,4,4,4,4,0,4,4,4,4,4,4,0,0x64, +4,4,4,4,4,4,4,4,0,0,4,4,4,4,4,4, +4,0,4,4,0,4,4,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x64,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0,0,0,0,0,0,0,0, @@ -699,15 +721,24 @@ static const uint16_t ucase_props_trieIndex[11044]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,4,4,4,4,4,0,4,4,4,4,4,4,4, 4,4,4,4,4,4,4,4,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0, +0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0x44, +0x44,0,0,0x44,0x44,0x44,0x44,0x44,0x44,0x44,0,0x44,0x44,0,0x44,0x44, +0x44,0x44,0x44,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x64,0x64,0x64,0x64,0x64,0x64,0x64,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0 +0,0,0,0,0,0,0,0,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a, +0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0x110a,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09, +0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09, +0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0xef09,0x44,0x44,0x44,0x44,0x44,0x44,0x64,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -static const uint16_t ucase_props_exceptions[1847]={ +static const uint16_t ucase_props_exceptions[1948]={ 0xc041,0x69,2,0x130,0x131,0x4001,0x6a,0x41,0x6b,1,0x212a,0x41,0x73,1,0x17f,0x5044, 0x49,2,0x130,0x131,0x44,0x4b,1,0x212a,0x44,0x53,1,0x17f,6,0x3bc,0x39c,0x41, 0xe5,1,0x212b,0x4001,0xec,0x4001,0xed,0xc0,1,0x2220,0x73,0x73,0x53,0x53,0x53,0x73, @@ -717,113 +748,119 @@ static const uint16_t ucase_props_exceptions[1847]={ 0xc,0x1c7,0x1c8,9,0x1cc,0x1cb,0xd,0x1cc,0x1ca,0x1cb,0xc,0x1ca,0x1cb,0x80,0x2220,0x6a, 0x30c,0x4a,0x30c,0x4a,0x30c,9,0x1f3,0x1f2,0xd,0x1f3,0x1f1,0x1f2,0xc,0x1f1,0x1f2,1, 0x2c65,1,0x2c66,4,0x2c7e,4,0x2c7f,4,0x2c6f,4,0x2c6d,4,0x2c70,4,0xa7ab,4, -0xa7ac,4,0xa78d,4,0xa7aa,4,0x2c62,4,0xa7ad,4,0x2c6e,4,0x2c64,4,0xa7b1,0x1004, -0xa7b2,4,0xa7b0,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399, -0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5,0x41,0x3b8, -2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc,1,0xb5, -0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6,1,0x3d5, -0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301, -0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4,0x44,0x399, -2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1,0x3d6,0x44, -0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5,0x44,0x3a9, -1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6,0x3c0,0x3a0, -6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395,0x80,0x2220, -0x565,0x582,0x535,0x552,0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,0x2d04, -1,0x2d05,1,0x2d06,1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,0x2d0c, -1,0x2d0d,1,0x2d0e,1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,0x2d14, -1,0x2d15,1,0x2d16,1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,0x2d1c, -1,0x2d1d,1,0x2d1e,1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,0x2d24, -1,0x2d25,1,0x2d27,1,0x2d2d,3,0xab70,0x13a0,3,0xab71,0x13a1,3,0xab72,0x13a2,3, -0xab73,0x13a3,3,0xab74,0x13a4,3,0xab75,0x13a5,3,0xab76,0x13a6,3,0xab77,0x13a7,3,0xab78, -0x13a8,3,0xab79,0x13a9,3,0xab7a,0x13aa,3,0xab7b,0x13ab,3,0xab7c,0x13ac,3,0xab7d,0x13ad, -3,0xab7e,0x13ae,3,0xab7f,0x13af,3,0xab80,0x13b0,3,0xab81,0x13b1,3,0xab82,0x13b2,3, -0xab83,0x13b3,3,0xab84,0x13b4,3,0xab85,0x13b5,3,0xab86,0x13b6,3,0xab87,0x13b7,3,0xab88, -0x13b8,3,0xab89,0x13b9,3,0xab8a,0x13ba,3,0xab8b,0x13bb,3,0xab8c,0x13bc,3,0xab8d,0x13bd, -3,0xab8e,0x13be,3,0xab8f,0x13bf,3,0xab90,0x13c0,3,0xab91,0x13c1,3,0xab92,0x13c2,3, -0xab93,0x13c3,3,0xab94,0x13c4,3,0xab95,0x13c5,3,0xab96,0x13c6,3,0xab97,0x13c7,3,0xab98, -0x13c8,3,0xab99,0x13c9,3,0xab9a,0x13ca,3,0xab9b,0x13cb,3,0xab9c,0x13cc,3,0xab9d,0x13cd, -3,0xab9e,0x13ce,3,0xab9f,0x13cf,3,0xaba0,0x13d0,3,0xaba1,0x13d1,3,0xaba2,0x13d2,3, -0xaba3,0x13d3,3,0xaba4,0x13d4,3,0xaba5,0x13d5,3,0xaba6,0x13d6,3,0xaba7,0x13d7,3,0xaba8, -0x13d8,3,0xaba9,0x13d9,3,0xabaa,0x13da,3,0xabab,0x13db,3,0xabac,0x13dc,3,0xabad,0x13dd, -3,0xabae,0x13de,3,0xabaf,0x13df,3,0xabb0,0x13e0,3,0xabb1,0x13e1,3,0xabb2,0x13e2,3, -0xabb3,0x13e3,3,0xabb4,0x13e4,3,0xabb5,0x13e5,3,0xabb6,0x13e6,3,0xabb7,0x13e7,3,0xabb8, -0x13e8,3,0xabb9,0x13e9,3,0xabba,0x13ea,3,0xabbb,0x13eb,3,0xabbc,0x13ec,3,0xabbd,0x13ed, -3,0xabbe,0x13ee,3,0xabbf,0x13ef,3,0x13f8,0x13f0,3,0x13f9,0x13f1,3,0x13fa,0x13f2,3, -0x13fb,0x13f3,3,0x13fc,0x13f4,3,0x13fd,0x13f5,6,0x13f0,0x13f0,6,0x13f1,0x13f1,6,0x13f2, -0x13f2,6,0x13f3,0x13f3,6,0x13f4,0x13f4,6,0x13f5,0x13f5,4,0xa77d,4,0x2c63,0x41,0x1e61, -1,0x1e9b,0x44,0x1e60,1,0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,0x2220, -0x74,0x308,0x54,0x308,0x54,0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220, -0x79,0x30a,0x59,0x30a,0x59,0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61, -0x1e60,0x81,0xdf,0x20,0x73,0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,0x3330, -0x3c5,0x313,0x300,0x3a5,0x313,0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,0x313, -0x301,0x3a5,0x313,0x301,0x80,0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x84, -0x1f88,0x220,0x1f00,0x3b9,0x1f08,0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,0x220, -0x1f02,0x3b9,0x1f0a,0x399,0x84,0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,0x3b9, -0x1f0c,0x399,0x84,0x1f8d,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,0x399, -0x84,0x1f8f,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,0x1f81, -0x220,0x1f01,0x3b9,0x1f09,0x399,0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,0x1f03, -0x3b9,0x1f0b,0x399,0x81,0x1f84,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,0x1f0d, -0x399,0x81,0x1f86,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x84, -0x1f98,0x220,0x1f20,0x3b9,0x1f28,0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,0x220, -0x1f22,0x3b9,0x1f2a,0x399,0x84,0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,0x3b9, -0x1f2c,0x399,0x84,0x1f9d,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,0x399, -0x84,0x1f9f,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,0x1f91, -0x220,0x1f21,0x3b9,0x1f29,0x399,0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,0x1f23, -0x3b9,0x1f2b,0x399,0x81,0x1f94,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,0x1f2d, -0x399,0x81,0x1f96,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x84, -0x1fa8,0x220,0x1f60,0x3b9,0x1f68,0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,0x220, -0x1f62,0x3b9,0x1f6a,0x399,0x84,0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,0x3b9, -0x1f6c,0x399,0x84,0x1fad,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,0x399, -0x84,0x1faf,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,0x1fa1, -0x220,0x1f61,0x3b9,0x1f69,0x399,0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,0x1f63, -0x3b9,0x1f6b,0x399,0x81,0x1fa4,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,0x1f6d, -0x399,0x81,0x1fa6,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x80, -0x2220,0x1f70,0x3b9,0x1fba,0x399,0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,0x2220, -0x3ac,0x3b9,0x386,0x399,0x386,0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,0x3330, -0x3b1,0x342,0x3b9,0x391,0x342,0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,0x399, -0x46,0x3b9,0x399,1,0x345,0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,0x220, -0x3b7,0x3b9,0x397,0x399,0x80,0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,0x342, -0x397,0x342,0x397,0x342,0x80,0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0x81, -0x1fc3,0x220,0x3b7,0x3b9,0x397,0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308, -0x300,0xc0,1,0x3330,0x3b9,0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,0x2220, -0x3b9,0x342,0x399,0x342,0x399,0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308, -0x342,0x80,0x3330,0x3c5,0x308,0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,0x3c5, -0x308,0x301,0x3a5,0x308,0x301,0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1, -0x313,0x80,0x2220,0x3c5,0x342,0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,0x308, -0x342,0x3a5,0x308,0x342,0x80,0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,0x3c9, -0x3b9,0x3a9,0x399,0x80,0x2220,0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,0x3a9, -0x342,0x3a9,0x342,0x80,0x3330,0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,0x1ff3, -0x220,0x3c9,0x3b9,0x3a9,0x399,0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,1, -0xc5,1,0x26b,1,0x1d7d,1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,1, -0x250,1,0x252,1,0x23f,1,0x240,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4, -0x10a4,4,0x10a5,4,0x10a6,4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4, -0x10ac,4,0x10ad,4,0x10ae,4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4, -0x10b4,4,0x10b5,4,0x10b6,4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4, -0x10bc,4,0x10bd,4,0x10be,4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4, -0x10c4,4,0x10c5,4,0x10c7,4,0x10cd,1,0x1d79,1,0x265,1,0x266,1,0x25c,1, -0x261,1,0x26c,1,0x29e,1,0x287,1,0x29d,1,0xab53,4,0xa7b3,6,0x13a0,0x13a0, -6,0x13a1,0x13a1,6,0x13a2,0x13a2,6,0x13a3,0x13a3,6,0x13a4,0x13a4,6,0x13a5,0x13a5,6, -0x13a6,0x13a6,6,0x13a7,0x13a7,6,0x13a8,0x13a8,6,0x13a9,0x13a9,6,0x13aa,0x13aa,6,0x13ab, -0x13ab,6,0x13ac,0x13ac,6,0x13ad,0x13ad,6,0x13ae,0x13ae,6,0x13af,0x13af,6,0x13b0,0x13b0, -6,0x13b1,0x13b1,6,0x13b2,0x13b2,6,0x13b3,0x13b3,6,0x13b4,0x13b4,6,0x13b5,0x13b5,6, -0x13b6,0x13b6,6,0x13b7,0x13b7,6,0x13b8,0x13b8,6,0x13b9,0x13b9,6,0x13ba,0x13ba,6,0x13bb, -0x13bb,6,0x13bc,0x13bc,6,0x13bd,0x13bd,6,0x13be,0x13be,6,0x13bf,0x13bf,6,0x13c0,0x13c0, -6,0x13c1,0x13c1,6,0x13c2,0x13c2,6,0x13c3,0x13c3,6,0x13c4,0x13c4,6,0x13c5,0x13c5,6, -0x13c6,0x13c6,6,0x13c7,0x13c7,6,0x13c8,0x13c8,6,0x13c9,0x13c9,6,0x13ca,0x13ca,6,0x13cb, -0x13cb,6,0x13cc,0x13cc,6,0x13cd,0x13cd,6,0x13ce,0x13ce,6,0x13cf,0x13cf,6,0x13d0,0x13d0, -6,0x13d1,0x13d1,6,0x13d2,0x13d2,6,0x13d3,0x13d3,6,0x13d4,0x13d4,6,0x13d5,0x13d5,6, -0x13d6,0x13d6,6,0x13d7,0x13d7,6,0x13d8,0x13d8,6,0x13d9,0x13d9,6,0x13da,0x13da,6,0x13db, -0x13db,6,0x13dc,0x13dc,6,0x13dd,0x13dd,6,0x13de,0x13de,6,0x13df,0x13df,6,0x13e0,0x13e0, -6,0x13e1,0x13e1,6,0x13e2,0x13e2,6,0x13e3,0x13e3,6,0x13e4,0x13e4,6,0x13e5,0x13e5,6, -0x13e6,0x13e6,6,0x13e7,0x13e7,6,0x13e8,0x13e8,6,0x13e9,0x13e9,6,0x13ea,0x13ea,6,0x13eb, -0x13eb,6,0x13ec,0x13ec,6,0x13ed,0x13ed,6,0x13ee,0x13ee,6,0x13ef,0x13ef,0x80,0x2220,0x66, -0x66,0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49,0x46,0x69,0x80,0x2220,0x66, -0x6c,0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46,0x46,0x49,0x46,0x66,0x69, -0x80,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c,0xc0,1,0x2220,0x73,0x74, -0x53,0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb05,0x80, -0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565,0x544,0x535,0x544,0x565,0x80, -0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576,0x54e,0x546,0x54e,0x576,0x80, -0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d +0xa7ac,4,0xa78d,4,0xa7aa,4,0xa7ae,4,0x2c62,4,0xa7ad,4,0x2c6e,4,0x2c64,4, +0xa7b1,0x1004,0xa7b2,4,0xa7b0,0x6000,0x3046,0x3b9,0x399,1,0x1fbe,0xc0,1,0x3330,0x3b9,0x308, +0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x1fd3,0x41,0x3b2,1,0x3d0,0x41,0x3b5,1,0x3f5, +0x41,0x3b8,2,0x3d1,0x3f4,0x41,0x3b9,2,0x345,0x1fbe,0x41,0x3ba,1,0x3f0,0x41,0x3bc, +1,0xb5,0x41,0x3c0,1,0x3d6,0x41,0x3c1,1,0x3f1,0x4041,0x3c3,1,0x3c2,0x41,0x3c6, +1,0x3d5,0x41,0x3c9,1,0x2126,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301,0x3a5, +0x308,0x301,0x1fe3,0x44,0x392,1,0x3d0,0x44,0x395,1,0x3f5,0x44,0x398,2,0x3d1,0x3f4, +0x44,0x399,2,0x345,0x1fbe,0x44,0x39a,1,0x3f0,0x44,0x39c,1,0xb5,0x44,0x3a0,1, +0x3d6,0x44,0x3a1,1,0x3f1,6,0x3c3,0x3a3,0x44,0x3a3,1,0x3c2,0x44,0x3a6,1,0x3d5, +0x44,0x3a9,1,0x2126,6,0x3b2,0x392,0x46,0x3b8,0x398,1,0x3f4,6,0x3c6,0x3a6,6, +0x3c0,0x3a0,6,0x3ba,0x39a,6,0x3c1,0x3a1,0x41,0x3b8,2,0x398,0x3d1,6,0x3b5,0x395, +0x41,0x432,1,0x1c80,0x41,0x434,1,0x1c81,0x41,0x43e,1,0x1c82,0x41,0x441,1,0x1c83, +0x41,0x442,2,0x1c84,0x1c85,0x41,0x44a,1,0x1c86,0x44,0x412,1,0x1c80,0x44,0x414,1, +0x1c81,0x44,0x41e,1,0x1c82,0x44,0x421,1,0x1c83,0x44,0x422,2,0x1c84,0x1c85,0x44,0x42a, +1,0x1c86,0x41,0x463,1,0x1c87,0x44,0x462,1,0x1c87,0x80,0x2220,0x565,0x582,0x535,0x552, +0x535,0x582,1,0x2d00,1,0x2d01,1,0x2d02,1,0x2d03,1,0x2d04,1,0x2d05,1,0x2d06, +1,0x2d07,1,0x2d08,1,0x2d09,1,0x2d0a,1,0x2d0b,1,0x2d0c,1,0x2d0d,1,0x2d0e, +1,0x2d0f,1,0x2d10,1,0x2d11,1,0x2d12,1,0x2d13,1,0x2d14,1,0x2d15,1,0x2d16, +1,0x2d17,1,0x2d18,1,0x2d19,1,0x2d1a,1,0x2d1b,1,0x2d1c,1,0x2d1d,1,0x2d1e, +1,0x2d1f,1,0x2d20,1,0x2d21,1,0x2d22,1,0x2d23,1,0x2d24,1,0x2d25,1,0x2d27, +1,0x2d2d,3,0xab70,0x13a0,3,0xab71,0x13a1,3,0xab72,0x13a2,3,0xab73,0x13a3,3,0xab74, +0x13a4,3,0xab75,0x13a5,3,0xab76,0x13a6,3,0xab77,0x13a7,3,0xab78,0x13a8,3,0xab79,0x13a9, +3,0xab7a,0x13aa,3,0xab7b,0x13ab,3,0xab7c,0x13ac,3,0xab7d,0x13ad,3,0xab7e,0x13ae,3, +0xab7f,0x13af,3,0xab80,0x13b0,3,0xab81,0x13b1,3,0xab82,0x13b2,3,0xab83,0x13b3,3,0xab84, +0x13b4,3,0xab85,0x13b5,3,0xab86,0x13b6,3,0xab87,0x13b7,3,0xab88,0x13b8,3,0xab89,0x13b9, +3,0xab8a,0x13ba,3,0xab8b,0x13bb,3,0xab8c,0x13bc,3,0xab8d,0x13bd,3,0xab8e,0x13be,3, +0xab8f,0x13bf,3,0xab90,0x13c0,3,0xab91,0x13c1,3,0xab92,0x13c2,3,0xab93,0x13c3,3,0xab94, +0x13c4,3,0xab95,0x13c5,3,0xab96,0x13c6,3,0xab97,0x13c7,3,0xab98,0x13c8,3,0xab99,0x13c9, +3,0xab9a,0x13ca,3,0xab9b,0x13cb,3,0xab9c,0x13cc,3,0xab9d,0x13cd,3,0xab9e,0x13ce,3, +0xab9f,0x13cf,3,0xaba0,0x13d0,3,0xaba1,0x13d1,3,0xaba2,0x13d2,3,0xaba3,0x13d3,3,0xaba4, +0x13d4,3,0xaba5,0x13d5,3,0xaba6,0x13d6,3,0xaba7,0x13d7,3,0xaba8,0x13d8,3,0xaba9,0x13d9, +3,0xabaa,0x13da,3,0xabab,0x13db,3,0xabac,0x13dc,3,0xabad,0x13dd,3,0xabae,0x13de,3, +0xabaf,0x13df,3,0xabb0,0x13e0,3,0xabb1,0x13e1,3,0xabb2,0x13e2,3,0xabb3,0x13e3,3,0xabb4, +0x13e4,3,0xabb5,0x13e5,3,0xabb6,0x13e6,3,0xabb7,0x13e7,3,0xabb8,0x13e8,3,0xabb9,0x13e9, +3,0xabba,0x13ea,3,0xabbb,0x13eb,3,0xabbc,0x13ec,3,0xabbd,0x13ed,3,0xabbe,0x13ee,3, +0xabbf,0x13ef,3,0x13f8,0x13f0,3,0x13f9,0x13f1,3,0x13fa,0x13f2,3,0x13fb,0x13f3,3,0x13fc, +0x13f4,3,0x13fd,0x13f5,6,0x13f0,0x13f0,6,0x13f1,0x13f1,6,0x13f2,0x13f2,6,0x13f3,0x13f3, +6,0x13f4,0x13f4,6,0x13f5,0x13f5,6,0x432,0x412,6,0x434,0x414,6,0x43e,0x41e,6, +0x441,0x421,0x46,0x442,0x422,1,0x1c85,0x46,0x442,0x422,1,0x1c84,6,0x44a,0x42a,6, +0x463,0x462,6,0xa64b,0xa64a,4,0xa77d,4,0x2c63,0x41,0x1e61,1,0x1e9b,0x44,0x1e60,1, +0x1e9b,0x80,0x2220,0x68,0x331,0x48,0x331,0x48,0x331,0x80,0x2220,0x74,0x308,0x54,0x308,0x54, +0x308,0x80,0x2220,0x77,0x30a,0x57,0x30a,0x57,0x30a,0x80,0x2220,0x79,0x30a,0x59,0x30a,0x59, +0x30a,0x80,0x2220,0x61,0x2be,0x41,0x2be,0x41,0x2be,6,0x1e61,0x1e60,0x81,0xdf,0x20,0x73, +0x73,0x80,0x2220,0x3c5,0x313,0x3a5,0x313,0x3a5,0x313,0x80,0x3330,0x3c5,0x313,0x300,0x3a5,0x313, +0x300,0x3a5,0x313,0x300,0x80,0x3330,0x3c5,0x313,0x301,0x3a5,0x313,0x301,0x3a5,0x313,0x301,0x80, +0x3330,0x3c5,0x313,0x342,0x3a5,0x313,0x342,0x3a5,0x313,0x342,0x84,0x1f88,0x220,0x1f00,0x3b9,0x1f08, +0x399,0x84,0x1f89,0x220,0x1f01,0x3b9,0x1f09,0x399,0x84,0x1f8a,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x84, +0x1f8b,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x84,0x1f8c,0x220,0x1f04,0x3b9,0x1f0c,0x399,0x84,0x1f8d,0x220, +0x1f05,0x3b9,0x1f0d,0x399,0x84,0x1f8e,0x220,0x1f06,0x3b9,0x1f0e,0x399,0x84,0x1f8f,0x220,0x1f07,0x3b9, +0x1f0f,0x399,0x81,0x1f80,0x220,0x1f00,0x3b9,0x1f08,0x399,0x81,0x1f81,0x220,0x1f01,0x3b9,0x1f09,0x399, +0x81,0x1f82,0x220,0x1f02,0x3b9,0x1f0a,0x399,0x81,0x1f83,0x220,0x1f03,0x3b9,0x1f0b,0x399,0x81,0x1f84, +0x220,0x1f04,0x3b9,0x1f0c,0x399,0x81,0x1f85,0x220,0x1f05,0x3b9,0x1f0d,0x399,0x81,0x1f86,0x220,0x1f06, +0x3b9,0x1f0e,0x399,0x81,0x1f87,0x220,0x1f07,0x3b9,0x1f0f,0x399,0x84,0x1f98,0x220,0x1f20,0x3b9,0x1f28, +0x399,0x84,0x1f99,0x220,0x1f21,0x3b9,0x1f29,0x399,0x84,0x1f9a,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x84, +0x1f9b,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x84,0x1f9c,0x220,0x1f24,0x3b9,0x1f2c,0x399,0x84,0x1f9d,0x220, +0x1f25,0x3b9,0x1f2d,0x399,0x84,0x1f9e,0x220,0x1f26,0x3b9,0x1f2e,0x399,0x84,0x1f9f,0x220,0x1f27,0x3b9, +0x1f2f,0x399,0x81,0x1f90,0x220,0x1f20,0x3b9,0x1f28,0x399,0x81,0x1f91,0x220,0x1f21,0x3b9,0x1f29,0x399, +0x81,0x1f92,0x220,0x1f22,0x3b9,0x1f2a,0x399,0x81,0x1f93,0x220,0x1f23,0x3b9,0x1f2b,0x399,0x81,0x1f94, +0x220,0x1f24,0x3b9,0x1f2c,0x399,0x81,0x1f95,0x220,0x1f25,0x3b9,0x1f2d,0x399,0x81,0x1f96,0x220,0x1f26, +0x3b9,0x1f2e,0x399,0x81,0x1f97,0x220,0x1f27,0x3b9,0x1f2f,0x399,0x84,0x1fa8,0x220,0x1f60,0x3b9,0x1f68, +0x399,0x84,0x1fa9,0x220,0x1f61,0x3b9,0x1f69,0x399,0x84,0x1faa,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x84, +0x1fab,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x84,0x1fac,0x220,0x1f64,0x3b9,0x1f6c,0x399,0x84,0x1fad,0x220, +0x1f65,0x3b9,0x1f6d,0x399,0x84,0x1fae,0x220,0x1f66,0x3b9,0x1f6e,0x399,0x84,0x1faf,0x220,0x1f67,0x3b9, +0x1f6f,0x399,0x81,0x1fa0,0x220,0x1f60,0x3b9,0x1f68,0x399,0x81,0x1fa1,0x220,0x1f61,0x3b9,0x1f69,0x399, +0x81,0x1fa2,0x220,0x1f62,0x3b9,0x1f6a,0x399,0x81,0x1fa3,0x220,0x1f63,0x3b9,0x1f6b,0x399,0x81,0x1fa4, +0x220,0x1f64,0x3b9,0x1f6c,0x399,0x81,0x1fa5,0x220,0x1f65,0x3b9,0x1f6d,0x399,0x81,0x1fa6,0x220,0x1f66, +0x3b9,0x1f6e,0x399,0x81,0x1fa7,0x220,0x1f67,0x3b9,0x1f6f,0x399,0x80,0x2220,0x1f70,0x3b9,0x1fba,0x399, +0x1fba,0x345,0x84,0x1fbc,0x220,0x3b1,0x3b9,0x391,0x399,0x80,0x2220,0x3ac,0x3b9,0x386,0x399,0x386, +0x345,0x80,0x2220,0x3b1,0x342,0x391,0x342,0x391,0x342,0x80,0x3330,0x3b1,0x342,0x3b9,0x391,0x342, +0x399,0x391,0x342,0x345,0x81,0x1fb3,0x220,0x3b1,0x3b9,0x391,0x399,0x46,0x3b9,0x399,1,0x345, +0x80,0x2220,0x1f74,0x3b9,0x1fca,0x399,0x1fca,0x345,0x84,0x1fcc,0x220,0x3b7,0x3b9,0x397,0x399,0x80, +0x2220,0x3ae,0x3b9,0x389,0x399,0x389,0x345,0x80,0x2220,0x3b7,0x342,0x397,0x342,0x397,0x342,0x80, +0x3330,0x3b7,0x342,0x3b9,0x397,0x342,0x399,0x397,0x342,0x345,0x81,0x1fc3,0x220,0x3b7,0x3b9,0x397, +0x399,0x80,0x3330,0x3b9,0x308,0x300,0x399,0x308,0x300,0x399,0x308,0x300,0xc0,1,0x3330,0x3b9, +0x308,0x301,0x399,0x308,0x301,0x399,0x308,0x301,0x390,0x80,0x2220,0x3b9,0x342,0x399,0x342,0x399, +0x342,0x80,0x3330,0x3b9,0x308,0x342,0x399,0x308,0x342,0x399,0x308,0x342,0x80,0x3330,0x3c5,0x308, +0x300,0x3a5,0x308,0x300,0x3a5,0x308,0x300,0xc0,1,0x3330,0x3c5,0x308,0x301,0x3a5,0x308,0x301, +0x3a5,0x308,0x301,0x3b0,0x80,0x2220,0x3c1,0x313,0x3a1,0x313,0x3a1,0x313,0x80,0x2220,0x3c5,0x342, +0x3a5,0x342,0x3a5,0x342,0x80,0x3330,0x3c5,0x308,0x342,0x3a5,0x308,0x342,0x3a5,0x308,0x342,0x80, +0x2220,0x1f7c,0x3b9,0x1ffa,0x399,0x1ffa,0x345,0x84,0x1ffc,0x220,0x3c9,0x3b9,0x3a9,0x399,0x80,0x2220, +0x3ce,0x3b9,0x38f,0x399,0x38f,0x345,0x80,0x2220,0x3c9,0x342,0x3a9,0x342,0x3a9,0x342,0x80,0x3330, +0x3c9,0x342,0x3b9,0x3a9,0x342,0x399,0x3a9,0x342,0x345,0x81,0x1ff3,0x220,0x3c9,0x3b9,0x3a9,0x399, +0x41,0x3c9,1,0x3a9,0x41,0x6b,1,0x4b,0x41,0xe5,1,0xc5,1,0x26b,1,0x1d7d, +1,0x27d,4,0x23a,4,0x23e,1,0x251,1,0x271,1,0x250,1,0x252,1,0x23f, +1,0x240,4,0x10a0,4,0x10a1,4,0x10a2,4,0x10a3,4,0x10a4,4,0x10a5,4,0x10a6, +4,0x10a7,4,0x10a8,4,0x10a9,4,0x10aa,4,0x10ab,4,0x10ac,4,0x10ad,4,0x10ae, +4,0x10af,4,0x10b0,4,0x10b1,4,0x10b2,4,0x10b3,4,0x10b4,4,0x10b5,4,0x10b6, +4,0x10b7,4,0x10b8,4,0x10b9,4,0x10ba,4,0x10bb,4,0x10bc,4,0x10bd,4,0x10be, +4,0x10bf,4,0x10c0,4,0x10c1,4,0x10c2,4,0x10c3,4,0x10c4,4,0x10c5,4,0x10c7, +4,0x10cd,0x41,0xa64b,1,0x1c88,0x44,0xa64a,1,0x1c88,1,0x1d79,1,0x265,1,0x266, +1,0x25c,1,0x261,1,0x26c,1,0x26a,1,0x29e,1,0x287,1,0x29d,1,0xab53, +4,0xa7b3,6,0x13a0,0x13a0,6,0x13a1,0x13a1,6,0x13a2,0x13a2,6,0x13a3,0x13a3,6,0x13a4, +0x13a4,6,0x13a5,0x13a5,6,0x13a6,0x13a6,6,0x13a7,0x13a7,6,0x13a8,0x13a8,6,0x13a9,0x13a9, +6,0x13aa,0x13aa,6,0x13ab,0x13ab,6,0x13ac,0x13ac,6,0x13ad,0x13ad,6,0x13ae,0x13ae,6, +0x13af,0x13af,6,0x13b0,0x13b0,6,0x13b1,0x13b1,6,0x13b2,0x13b2,6,0x13b3,0x13b3,6,0x13b4, +0x13b4,6,0x13b5,0x13b5,6,0x13b6,0x13b6,6,0x13b7,0x13b7,6,0x13b8,0x13b8,6,0x13b9,0x13b9, +6,0x13ba,0x13ba,6,0x13bb,0x13bb,6,0x13bc,0x13bc,6,0x13bd,0x13bd,6,0x13be,0x13be,6, +0x13bf,0x13bf,6,0x13c0,0x13c0,6,0x13c1,0x13c1,6,0x13c2,0x13c2,6,0x13c3,0x13c3,6,0x13c4, +0x13c4,6,0x13c5,0x13c5,6,0x13c6,0x13c6,6,0x13c7,0x13c7,6,0x13c8,0x13c8,6,0x13c9,0x13c9, +6,0x13ca,0x13ca,6,0x13cb,0x13cb,6,0x13cc,0x13cc,6,0x13cd,0x13cd,6,0x13ce,0x13ce,6, +0x13cf,0x13cf,6,0x13d0,0x13d0,6,0x13d1,0x13d1,6,0x13d2,0x13d2,6,0x13d3,0x13d3,6,0x13d4, +0x13d4,6,0x13d5,0x13d5,6,0x13d6,0x13d6,6,0x13d7,0x13d7,6,0x13d8,0x13d8,6,0x13d9,0x13d9, +6,0x13da,0x13da,6,0x13db,0x13db,6,0x13dc,0x13dc,6,0x13dd,0x13dd,6,0x13de,0x13de,6, +0x13df,0x13df,6,0x13e0,0x13e0,6,0x13e1,0x13e1,6,0x13e2,0x13e2,6,0x13e3,0x13e3,6,0x13e4, +0x13e4,6,0x13e5,0x13e5,6,0x13e6,0x13e6,6,0x13e7,0x13e7,6,0x13e8,0x13e8,6,0x13e9,0x13e9, +6,0x13ea,0x13ea,6,0x13eb,0x13eb,6,0x13ec,0x13ec,6,0x13ed,0x13ed,6,0x13ee,0x13ee,6, +0x13ef,0x13ef,0x80,0x2220,0x66,0x66,0x46,0x46,0x46,0x66,0x80,0x2220,0x66,0x69,0x46,0x49, +0x46,0x69,0x80,0x2220,0x66,0x6c,0x46,0x4c,0x46,0x6c,0x80,0x3330,0x66,0x66,0x69,0x46, +0x46,0x49,0x46,0x66,0x69,0x80,0x3330,0x66,0x66,0x6c,0x46,0x46,0x4c,0x46,0x66,0x6c, +0xc0,1,0x2220,0x73,0x74,0x53,0x54,0x53,0x74,0xfb06,0xc0,1,0x2220,0x73,0x74,0x53, +0x54,0x53,0x74,0xfb05,0x80,0x2220,0x574,0x576,0x544,0x546,0x544,0x576,0x80,0x2220,0x574,0x565, +0x544,0x535,0x544,0x565,0x80,0x2220,0x574,0x56b,0x544,0x53b,0x544,0x56b,0x80,0x2220,0x57e,0x576, +0x54e,0x546,0x54e,0x576,0x80,0x2220,0x574,0x56d,0x544,0x53d,0x544,0x56d }; static const uint16_t ucase_props_unfold[370]={ @@ -860,16 +897,16 @@ static const UCaseProps ucase_props_singleton={ ucase_props_unfold, { ucase_props_trieIndex, - ucase_props_trieIndex+3160, + ucase_props_trieIndex+3228, NULL, - 3160, - 7884, + 3228, + 8292, 0x188, - 0xcd4, + 0xd18, 0x0, 0x0, 0xe0800, - 0x2b20, + 0x2cfc, NULL, 0, FALSE, FALSE, 0, NULL }, { 3,0,0,0 } diff --git a/deps/icu-small/source/common/ucasemap.cpp b/deps/icu-small/source/common/ucasemap.cpp index f3ab31fa76610b..c0d56c28731d1f 100644 --- a/deps/icu-small/source/common/ucasemap.cpp +++ b/deps/icu-small/source/common/ucasemap.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -122,58 +124,103 @@ static inline int32_t appendResult(uint8_t *dest, int32_t destIndex, int32_t destCapacity, int32_t result, const UChar *s) { UChar32 c; - int32_t length, destLength; + int32_t length; UErrorCode errorCode; /* decode the result */ if(result<0) { /* (not) original code point */ c=~result; - length=-1; + length=U8_LENGTH(c); } else if(result<=UCASE_MAX_STRING_LENGTH) { c=U_SENTINEL; length=result; } else { c=result; - length=-1; + length=U8_LENGTH(c); + } + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } if(destIndex=0) { /* code point */ UBool isError=FALSE; U8_APPEND(dest, destIndex, destCapacity, c, isError); if(isError) { /* overflow, nothing written */ - destIndex+=U8_LENGTH(c); + destIndex+=length; } } else { /* string */ + int32_t destLength; errorCode=U_ZERO_ERROR; u_strToUTF8( (char *)(dest+destIndex), destCapacity-destIndex, &destLength, s, length, &errorCode); + if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { + return -1; + } + if(destLength>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } destIndex+=destLength; /* we might have an overflow, but we know the actual length */ } } else { /* preflight */ - if(length<0) { - destIndex+=U8_LENGTH(c); + if(c>=0) { + destIndex+=length; } else { + int32_t destLength; errorCode=U_ZERO_ERROR; u_strToUTF8( NULL, 0, &destLength, s, length, &errorCode); + if(U_FAILURE(errorCode) && errorCode != U_BUFFER_OVERFLOW_ERROR) { + return -1; + } + if(destLength>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } destIndex+=destLength; } } return destIndex; } +static inline int32_t +appendUChar(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar c) { + int32_t length=U8_LENGTH(c); + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + int32_t limit=destIndex+length; + if(limit0) { + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow + } + if((destIndex+length)<=destCapacity) { + uprv_memcpy(dest+destIndex, s, length); + } + destIndex+=length; + } + return destIndex; +} + static UChar32 U_CALLCONV utf8_caseContextIterator(void *context, int8_t dir) { UCaseContext *csc=(UCaseContext *)context; @@ -231,9 +278,11 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, U8_NEXT(src, srcIndex, srcLimit, c); csc->cpLimit=srcIndex; if(c<0) { - int32_t i=csc->cpStart; - while(destIndexcpStart, srcIndex-csc->cpStart); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } continue; } @@ -243,6 +292,10 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, dest[destIndex++]=(uint8_t)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -261,7 +314,7 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, UErrorCode *pErrorCode) { const UChar *s; UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex, length; + int32_t prev, titleStart, titleLimit, idx, destIndex; UBool isFirstIndex; if(U_FAILURE(*pErrorCode)) { @@ -327,30 +380,36 @@ ucasemap_internalUTF8ToTitle(const UCaseMap *csm, break; /* cased letter at [titleStart..titleLimit[ */ } } - length=titleStart-prev; - if(length>0) { - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+prev, length); - } - destIndex+=length; + destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } } if(titleStartcsp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache); - destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(c>=0) { + csc.cpStart=titleStart; + csc.cpLimit=titleLimit; + c=ucase_toFullTitle(csm->csp, c, utf8_caseContextIterator, &csc, &s, csm->locale, &locCache); + destIndex=appendResult(dest, destIndex, destCapacity, c, s); + } else { + // Malformed UTF-8. + destIndex=appendString(dest, destIndex, destCapacity, src+titleStart, titleLimit-titleStart); + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } /* Special case Dutch IJ titlecasing */ - if ( titleStart+1 < idx && - ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH && - ( src[titleStart] == 0x0049 || src[titleStart] == 0x0069 ) && - ( src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A )) { - c=0x004A; - destIndex=appendResult(dest, destIndex, destCapacity, c, s); - titleLimit++; + if (titleStart+1 < idx && + ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && + (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); + titleLimit++; } /* lowercase [titleLimit..index[ */ if(titleLimitcsp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // c is case-ignorable + nextState |= (state & AFTER_CASED); + } else if (type != UCASE_NONE) { + // c is cased + nextState |= AFTER_CASED; + } + uint32_t data = getLetterData(c); + if (data > 0) { + uint32_t upper = data & UPPER_MASK; + // Add a dialytika to this iota or ypsilon vowel + // if we removed a tonos from the previous vowel, + // and that previous vowel did not also have (or gain) a dialytika. + // Adding one only to the final vowel in a longer sequence + // (which does not occur in normal writing) would require lookahead. + // Set the same flag as for preserving an existing dialytika. + if ((data & HAS_VOWEL) != 0 && (state & AFTER_VOWEL_WITH_ACCENT) != 0 && + (upper == 0x399 || upper == 0x3A5)) { + data |= HAS_DIALYTIKA; + } + int32_t numYpogegrammeni = 0; // Map each one to a trailing, spacing, capital iota. + if ((data & HAS_YPOGEGRAMMENI) != 0) { + numYpogegrammeni = 1; + } + // Skip combining diacritics after this Greek letter. + int32_t nextNextIndex = nextIndex; + while (nextIndex < srcLength) { + UChar32 c2; + U8_NEXT(src, nextNextIndex, srcLength, c2); + uint32_t diacriticData = getDiacriticData(c2); + if (diacriticData != 0) { + data |= diacriticData; + if ((diacriticData & HAS_YPOGEGRAMMENI) != 0) { + ++numYpogegrammeni; + } + nextIndex = nextNextIndex; + } else { + break; // not a Greek diacritic + } + } + if ((data & HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA) == HAS_VOWEL_AND_ACCENT) { + nextState |= AFTER_VOWEL_WITH_ACCENT; + } + // Map according to Greek rules. + UBool addTonos = FALSE; + if (upper == 0x397 && + (data & HAS_ACCENT) != 0 && + numYpogegrammeni == 0 && + (state & AFTER_CASED) == 0 && + !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + // Keep disjunctive "or" with (only) a tonos. + // We use the same "word boundary" conditions as for the Final_Sigma test. + if (i == nextIndex) { + upper = 0x389; // Preserve the precomposed form. + } else { + addTonos = TRUE; + } + } else if ((data & HAS_DIALYTIKA) != 0) { + // Preserve a vowel with dialytika in precomposed form if it exists. + if (upper == 0x399) { + upper = 0x3AA; + data &= ~HAS_EITHER_DIALYTIKA; + } else if (upper == 0x3A5) { + upper = 0x3AB; + data &= ~HAS_EITHER_DIALYTIKA; + } + } + destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); + if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); + --numYpogegrammeni; + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } else if(c>=0) { + const UChar *s; + UChar32 c2 = 0; + c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); + if((destIndexdestCapacity) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + return destIndex; +} + +} // namespace GreekUpper +U_NAMESPACE_END + static int32_t U_CALLCONV ucasemap_internalUTF8ToLower(const UCaseMap *csm, uint8_t *dest, int32_t destCapacity, @@ -406,6 +618,10 @@ ucasemap_internalUTF8ToUpper(const UCaseMap *csm, uint8_t *dest, int32_t destCapacity, const uint8_t *src, int32_t srcLength, UErrorCode *pErrorCode) { + int32_t locCache = csm->locCache; + if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { + return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + } UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; @@ -434,8 +650,11 @@ utf8_foldCase(const UCaseProps *csp, start=srcIndex; U8_NEXT(src, srcIndex, srcLength, c); if(c<0) { - while(destIndex>2)-0xbf; int32_t exp=(ntv&3)+1; @@ -458,6 +460,12 @@ u_getNumericValue(UChar32 c) { } return numValue; + } else if(ntv>2); + return (double)numerator/denominator; } else { /* reserved */ return U_NO_NUMERIC_VALUE; diff --git a/deps/icu-small/source/common/uchar_props_data.h b/deps/icu-small/source/common/uchar_props_data.h index f898e3f0a567f8..79ba55eb75d570 100644 --- a/deps/icu-small/source/common/uchar_props_data.h +++ b/deps/icu-small/source/common/uchar_props_data.h @@ -1,153 +1,155 @@ -/* - * Copyright (C) 1999-2016, International Business Machines - * Corporation and others. All Rights Reserved. - * - * file name: uchar_props_data.h - * - * machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp - */ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +// +// Copyright (C) 1999-2016, International Business Machines +// Corporation and others. All Rights Reserved. +// +// file name: uchar_props_data.h +// +// machine-generated by: icu/tools/unicode/c/genprops/corepropsbuilder.cpp + #ifdef INCLUDED_FROM_UCHAR_C -static const UVersionInfo dataVersion={8,0,0,0}; +static const UVersionInfo dataVersion={9,0,0,0}; -static const uint16_t propsTrie_index[19820]={ -0x41e,0x426,0x42e,0x436,0x44e,0x456,0x45e,0x466,0x46e,0x476,0x47c,0x484,0x48c,0x494,0x49c,0x4a4, -0x4aa,0x4b2,0x4ba,0x4c2,0x4c5,0x4cd,0x4d5,0x4dd,0x4e5,0x4ed,0x4e9,0x4f1,0x4f9,0x501,0x506,0x50e, -0x516,0x51e,0x522,0x52a,0x532,0x53a,0x542,0x54a,0x546,0x54e,0x553,0x55b,0x561,0x569,0x571,0x579, -0x581,0x589,0x591,0x599,0x59e,0x5a6,0x5a9,0x5b1,0x5b9,0x5c1,0x5c7,0x5cf,0x5ce,0x5d6,0x5de,0x5e6, -0x5f6,0x5ee,0x5fe,0x43e,0x43e,0x60e,0x43e,0x606,0x61e,0x620,0x628,0x616,0x638,0x63e,0x646,0x630, -0x656,0x65c,0x664,0x64e,0x674,0x67a,0x682,0x66c,0x692,0x698,0x6a0,0x68a,0x6b0,0x6b8,0x6c0,0x6a8, -0x6d0,0x6d6,0x6de,0x6c8,0x6ee,0x6f4,0x6fc,0x6e6,0x6ee,0x70b,0x713,0x704,0x723,0x72a,0x732,0x71b, -0x5ca,0x73a,0x742,0x43e,0x74a,0x752,0x75a,0x43e,0x762,0x76a,0x772,0x777,0x77f,0x786,0x78e,0x43e, -0x589,0x796,0x79e,0x7a6,0x7ae,0x516,0x7be,0x7b6,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x7c4,0x589,0x7cc,0x7c2,0x7d4,0x589,0x7d0,0x589,0x7da,0x7e2,0x7ea,0x516,0x516,0x7f2, -0x7fa,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x7ff,0x807,0x589,0x589,0x80f,0x817,0x81f,0x827,0x82f,0x589,0x837,0x83f,0x847, -0x857,0x589,0x85f,0x861,0x589,0x84f,0x589,0x869,0x87d,0x871,0x879,0x885,0x589,0x88d,0x893,0x89b, -0x8a3,0x589,0x8b3,0x8bb,0x8c3,0x8ab,0x43e,0x43e,0x8d3,0x8d6,0x8de,0x8cb,0x8ee,0x8e6,0x589,0x8f5, -0x589,0x904,0x8fd,0x90c,0x43e,0x43e,0x914,0x91c,0x4be,0x924,0x927,0x92d,0x934,0x927,0x4e5,0x93c, -0x46e,0x46e,0x46e,0x46e,0x944,0x46e,0x46e,0x46e,0x954,0x95c,0x964,0x96c,0x974,0x978,0x980,0x94c, -0x998,0x9a0,0x988,0x990,0x9a8,0x9b0,0x9b8,0x9c0,0x9d8,0x9c8,0x9d0,0x9e0,0x9e8,0x9f7,0x9fc,0x9ef, -0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa0c,0xa14,0x89b,0xa17,0xa1f,0xa26,0xa2b,0xa33, -0x89b,0xa38,0xa37,0xa48,0xa4b,0x89b,0x89b,0xa40,0x89b,0x89b,0x89b,0x89b,0x89b,0xa5a,0xa62,0xa52, -0x89b,0x89b,0x89b,0xa67,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xa6d,0xa75,0x89b,0xa7d,0xa84, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xa04,0xa04,0xa04,0xa04,0xa8c,0xa04,0xa93,0xa9a, -0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0xa04,0x89b,0xaa2,0xaa9,0xaad,0xab3,0xab9,0xac1,0xac6, -0x516,0xad6,0xace,0xade,0x46e,0x46e,0x46e,0xae6,0x4be,0xaee,0x589,0xaf4,0xb04,0xafc,0xafc,0x4e5, -0xb0c,0xb14,0xb1c,0x43e,0xb24,0x89b,0x89b,0xb2b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xb33,0xb39, -0xb49,0xb41,0x5ca,0x589,0xb51,0x7fa,0x589,0xb59,0xb61,0xb66,0x589,0x589,0xb6b,0x575,0x89b,0xb72, -0xb7a,0xb82,0xb88,0x89b,0xb82,0xb90,0x89b,0xb7a,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b, -0xb98,0x589,0x589,0x589,0xba0,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xba6,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbab,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x869,0x89b,0x89b, -0xbb3,0x589,0xbb6,0x589,0xbbe,0xbc4,0xbcc,0xbd4,0xbd9,0x589,0x589,0xbdd,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbe4,0x589,0xbeb,0xbf1,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xbf9,0x589,0x589,0x589,0xc01,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0xc03,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc0a,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0xc11,0x589,0x589,0x589,0xc18,0xc20,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc25,0x589,0x589,0xc2d,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc31,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc34,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc37,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0xc3d,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc45,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xc4a,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0xc4f,0x589,0x589,0x589,0xc54,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0xc5c,0xc63,0xc67,0x589,0x589,0x589,0xc6e,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x869,0x43e, -0xc7c,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc74,0x89b,0xc84,0x90c,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0xc89,0xc91,0x46e,0xca1,0xc99,0x589,0x589,0xca9,0xcb1,0xcc1,0x46e,0xcc6,0xcce,0xcd4,0x43e,0xcb9, -0xcdc,0xce4,0x589,0xcec,0xcfc,0xcff,0xcf4,0xd07,0x5de,0xd0f,0xd16,0xd1e,0x61e,0xd2e,0xd26,0xd36, -0x589,0xd3e,0xd46,0xd4e,0x589,0xd56,0xd5e,0xd66,0xd6e,0xd76,0xd7a,0xd82,0x4be,0x4be,0x589,0xd8a, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xd92,0xd99,0x860, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0x589,0x589,0x589,0xdb1,0x589,0xc6f,0xdb8,0xdbd, -0x589,0x589,0x589,0xdc5,0x589,0x589,0xdc9,0x43e,0xde1,0xdd1,0xdd9,0x589,0x589,0xde9,0xdf1,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xdf6,0xdfe,0x589,0xe02,0x589,0xe08,0xe0c, -0xe14,0xe1c,0xe23,0xe2b,0x589,0x589,0x589,0xe31,0xe49,0x42e,0xe51,0xe59,0xe5e,0x87d,0xe39,0xe41, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0x10f8,0x10f8,0x1138,0x1178,0x11b8,0x11f0,0x1230,0x1270,0x12a8,0x12e8,0x1314,0x1354,0x1394,0x13a4,0x13e4,0x1418, -0x1458,0x1488,0x14c8,0x1508,0x1518,0x154c,0x1584,0x15c4,0x1604,0x1644,0x1678,0x16a4,0x16e4,0x171c,0x1738,0x1778, -0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xbdd,0xa40,0xa40,0xa40,0xa40,0xc1d,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xc5d,0xc7d,0xa40,0xa40,0xcbd,0xcfd,0xa40,0xd3d,0xd7d,0xdbd, -0xdfd,0xe34,0x1db,0x1db,0xe58,0xe8c,0x1db,0xeb4,0x1db,0x1db,0x1db,0x1db,0xee1,0x1db,0x1db,0x1db, -0x1db,0x1db,0x1db,0x1db,0xef5,0x1db,0xf2d,0xf6d,0x1db,0xf78,0xa40,0xa40,0xa40,0xa40,0xa40,0xfb8, +static const uint16_t propsTrie_index[20780]={ +0x44e,0x456,0x45e,0x466,0x47e,0x486,0x48e,0x496,0x49e,0x4a6,0x4ac,0x4b4,0x4bc,0x4c4,0x4cc,0x4d4, +0x4da,0x4e2,0x4ea,0x4f2,0x4f5,0x4fd,0x505,0x50d,0x515,0x51d,0x519,0x521,0x529,0x531,0x536,0x53e, +0x546,0x54e,0x552,0x55a,0x562,0x56a,0x572,0x57a,0x576,0x57e,0x583,0x58b,0x591,0x599,0x5a1,0x5a9, +0x5b1,0x5b9,0x5c1,0x5c9,0x5ce,0x5d6,0x5d9,0x5e1,0x5e9,0x5f1,0x5f7,0x5ff,0x5fe,0x606,0x60e,0x616, +0x626,0x61e,0x62e,0x46e,0x46e,0x63e,0x646,0x636,0x656,0x658,0x660,0x64e,0x670,0x676,0x67e,0x668, +0x68e,0x694,0x69c,0x686,0x6ac,0x6b2,0x6ba,0x6a4,0x6ca,0x6d0,0x6d8,0x6c2,0x6e8,0x6f0,0x6f8,0x6e0, +0x708,0x70e,0x716,0x700,0x726,0x72c,0x734,0x71e,0x744,0x749,0x751,0x73c,0x761,0x768,0x770,0x759, +0x5fa,0x778,0x780,0x46e,0x788,0x790,0x798,0x46e,0x7a0,0x7a8,0x7b0,0x7b5,0x7bd,0x7c4,0x7cc,0x46e, +0x5b9,0x7d4,0x7dc,0x7e4,0x7ec,0x546,0x7fc,0x7f4,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x802,0x5b9,0x80a,0x800,0x812,0x5b9,0x80e,0x5b9,0x818,0x820,0x828,0x546,0x546,0x830, +0x838,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x83d,0x845,0x5b9,0x5b9,0x84d,0x855,0x85d,0x865,0x86d,0x5b9,0x875,0x87d,0x885, +0x895,0x5b9,0x89d,0x89f,0x8a7,0x88d,0x5b9,0x8aa,0x8be,0x8b2,0x8ba,0x8c6,0x5b9,0x8ce,0x8d4,0x8dc, +0x8e4,0x5b9,0x8f4,0x8fc,0x904,0x8ec,0x46e,0x46e,0x914,0x917,0x91f,0x90c,0x92f,0x927,0x5b9,0x936, +0x5b9,0x945,0x93e,0x94d,0x955,0x46e,0x95d,0x965,0x4ee,0x96d,0x970,0x976,0x97d,0x970,0x515,0x985, +0x49e,0x49e,0x49e,0x49e,0x98d,0x49e,0x49e,0x49e,0x99d,0x9a5,0x9ad,0x9b5,0x9bd,0x9c1,0x9c9,0x995, +0x9e1,0x9e9,0x9d1,0x9d9,0x9f1,0x9f9,0xa01,0xa09,0xa21,0xa11,0xa19,0xa29,0xa31,0xa40,0xa45,0xa38, +0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa55,0xa5d,0x8dc,0xa60,0xa68,0xa6f,0xa74,0xa7c, +0x8dc,0xa82,0xa81,0xa92,0xa95,0x8dc,0x8dc,0xa8a,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xaa4,0xaac,0xa9c, +0x8dc,0x8dc,0x8dc,0xab1,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xab7,0xabf,0x8dc,0xac7,0xace, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xa4d,0xa4d,0xa4d,0xa4d,0xad6,0xa4d,0xadd,0xae4, +0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0xa4d,0x8dc,0xaec,0xaf3,0xaf7,0xafd,0xb03,0xb0b,0xb10, +0x546,0xb20,0xb18,0xb28,0x49e,0x49e,0x49e,0xb30,0x4ee,0xb38,0x5b9,0xb3e,0xb4e,0xb46,0xb46,0x515, +0xb56,0xb5e,0xb66,0x46e,0xb6e,0x8dc,0x8dc,0xb75,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0xb7d,0xb83, +0xb93,0xb8b,0x5fa,0x5b9,0xb9b,0x838,0x5b9,0xba3,0xbab,0xbb0,0x5b9,0x5b9,0xbb5,0x5a5,0x8dc,0xbbc, +0xbc4,0xbcc,0xbd2,0x8dc,0xbcc,0xbda,0x8dc,0xbc4,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc, +0xbe2,0x5b9,0x5b9,0x5b9,0xbea,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xbf0,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xbf5,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8aa,0x8dc,0x8dc, +0xbfd,0x5b9,0xc00,0x5b9,0xc08,0xc0e,0xc16,0xc1e,0xc23,0x5b9,0x5b9,0xc27,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc2e,0x5b9,0xc35,0xc3b,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc43,0x5b9,0x5b9,0x5b9,0xc4b,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc4d,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc54,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0xc5b,0x5b9,0x5b9,0x5b9,0xc62,0xc6a,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc6f,0x5b9,0x5b9,0xc77,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc7b,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc7e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc81,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0xc87,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xc8f,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xc94,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc99,0x5b9,0x5b9,0x5b9,0xc9e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0xca6,0xcad,0xcb1,0x5b9,0x5b9,0x5b9,0xcb8,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8aa,0x46e, +0xcc6,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xcbe,0x8dc,0xcce,0x94d,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0xcd3,0xcdb,0x49e,0xceb,0xce3,0x5b9,0x5b9,0xcf3,0xcfb,0xd0b,0x49e,0xd10,0xd18,0xd1e,0x46e,0xd03, +0xd26,0xd2e,0x5b9,0xd36,0xd46,0xd49,0xd3e,0xd51,0x60e,0xd59,0xd60,0xd68,0x656,0xd78,0xd70,0xd80, +0x5b9,0xd88,0xd90,0xd98,0x5b9,0xda0,0xda8,0xdb0,0xdb8,0xdc0,0xdc4,0xdcc,0x4ee,0x4ee,0x5b9,0xdd4, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xddc,0xde3,0x89e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0x5b9,0x5b9,0x5b9,0xdfb,0x5b9,0xcb9,0xe02,0xe07, +0x5b9,0x5b9,0x5b9,0xe0f,0x5b9,0x5b9,0x8a9,0x46e,0xe25,0xe15,0xe1d,0x5b9,0x5b9,0xe2d,0xe35,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xe3a,0xe42,0x5b9,0xe46,0x5b9,0xe4c,0xe50, +0xe58,0xe60,0xe67,0xe6f,0x5b9,0x5b9,0x5b9,0xe75,0xe8d,0x45e,0xe95,0xe9d,0xea2,0x8be,0xe7d,0xe85, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb,0xdeb, +0x11b8,0x11b8,0x11f8,0x1238,0x1278,0x12b0,0x12f0,0x1330,0x1368,0x13a8,0x13d4,0x1414,0x1454,0x1464,0x14a4,0x14d8, +0x1518,0x1548,0x1588,0x15c8,0x15d8,0x160c,0x1644,0x1684,0x16c4,0x1704,0x1738,0x1764,0x17a4,0x17dc,0x17f8,0x1838, +0xa80,0xac0,0xb00,0xb3b,0xb7b,0xa40,0xbbb,0xa40,0xbdd,0xa40,0xa40,0xa40,0xa40,0xc1d,0x1db,0x1db, +0xc5d,0xc9d,0xa40,0xa40,0xa40,0xa40,0xcdd,0xcfd,0xa40,0xa40,0xd3d,0xd7d,0xdbd,0xdfd,0xe3d,0xe7d, +0xebd,0xef4,0x1db,0x1db,0xf18,0xf4c,0x1db,0xf74,0x1db,0x1db,0x1db,0x1db,0xfa1,0x1db,0x1db,0x1db, +0x1db,0x1db,0x1db,0x1db,0xfb5,0x1db,0xfed,0x102d,0x1db,0x1038,0xa40,0xa40,0xa40,0xa40,0xa40,0x1078, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, @@ -170,112 +172,124 @@ static const uint16_t propsTrie_index[19820]={ 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xff8,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0x10b8,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1038, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x10f8, 0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700, -0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x1038, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xe66,0xe6d,0xe75,0x43e,0x589,0x589,0x589,0x575,0xe85,0xe7d,0xe9c,0xe8d,0xe94,0xea4,0xb20,0xeac, -0x43e,0x43e,0x43e,0x43e,0xd1e,0x589,0xeb4,0xebc,0x589,0xec4,0xecc,0xed0,0xed8,0x589,0xee0,0x43e, -0x516,0x520,0xee8,0x589,0xeec,0xef4,0x43e,0x43e,0x589,0x865,0x589,0xefc,0x43e,0x43e,0x43e,0x43e, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xb04,0x869,0xe08,0x43e,0x43e,0x43e,0x43e, -0xf0c,0xf04,0xf0f,0xf17,0x87d,0xf1f,0x43e,0xf27,0xf2f,0xf37,0x43e,0x43e,0x589,0xf47,0xf4f,0xf3f, -0xf5f,0xf66,0xf57,0xf6e,0xf76,0x43e,0xf86,0xf7e,0x589,0xf89,0xf91,0xf99,0xfa1,0xfa9,0x43e,0x43e, -0x589,0x589,0xfb1,0x43e,0x516,0xfb9,0x4be,0xfc1,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0xfc9,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0xfd9,0x5bf,0xfe1,0xfd1,0x8ee,0xfe9,0xff1,0xff7,0x100f,0xfff,0x1007,0x1013,0x8ee,0x1023,0x101b,0x102b, -0x103b,0x1033,0x43e,0x43e,0x1042,0x104a,0x5e1,0x1052,0x1062,0x67a,0x106a,0x105a,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x589,0x1072,0x107a,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x1082,0x108a,0x43e, -0x589,0x1092,0x109a,0x43e,0x589,0x10a2,0xef4,0x43e,0x10b2,0x10aa,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x516,0x4be,0x10ba,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x589,0x10c2,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xdc9,0x43e,0x43e,0x43e,0x10d2,0x10da,0x10e2,0x10ca,0x589, -0x589,0x589,0x589,0x589,0x589,0x10ea,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10f2,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10f4, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x10c2,0x87d, -0x10fc,0x43e,0x43e,0xdfe,0x1104,0x589,0x1114,0x111c,0x1124,0x110c,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x112c,0x1131,0x1139,0x43e,0x43e,0x43e,0x1141,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x1149,0x114e,0x1156,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0xb33,0x89b,0x115e,0x89b,0x1165,0x116d,0x1173,0x89b,0x1179,0x89b,0x89b,0x1181, -0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0xa34,0x1189,0x43e,0x43e,0x43e,0x43e,0x1199,0x11a0,0x11a5, -0x11ab,0x11b3,0x11bb,0x11c3,0x119d,0x11cb,0x11d3,0x11db,0x11e0,0x11b2,0x1199,0x11a0,0x119c,0x11ab,0x11e8,0x119a, -0x11eb,0x119d,0x11f3,0x11fb,0x1203,0x120a,0x11f6,0x11fe,0x1206,0x120d,0x11f9,0x1215,0x1191,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x4e5,0x1225,0x4e5, -0x122c,0x1233,0x121d,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x123b,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x1249,0x1251,0x1259, -0x1261,0x1269,0x1271,0x43e,0x1241,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x1279,0x89b, -0x89b,0xb2b,0x127e,0x1282,0xb33,0x128a,0x128f,0x89b,0x1279,0x1293,0x43e,0x43e,0x129a,0x12a2,0x1293,0x12a8, -0x43e,0x43e,0x43e,0x43e,0x43e,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x12b0,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0x89b,0xb24,0x89b,0x12b8,0x89b,0x89b,0x89b,0x89b,0x89b, -0x89b,0x89b,0x89b,0x1177,0x12bd,0x89b,0x89b,0x89b,0xb2b,0x89b,0x89b,0x12c5,0x43e,0x1279,0x89b,0x12cd, -0x89b,0x12d5,0xb35,0x43e,0x43e,0x12dd,0x43e,0x43e,0x43e,0x12e2,0x43e,0xea4,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x12ea,0x589,0x589, -0x12f1,0x589,0x589,0x589,0x12f9,0x589,0x1301,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xc15,0x589,0x589, -0x1309,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1311,0x1319,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0xc54,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1320,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1327,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x132e,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xb04,0x43e,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x60e,0x589,0x589,0x589,0x589,0x589,0x589,0xeec,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x1141,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x589,0x589,0x589,0x589,0x1332,0x589,0x589,0x589, -0x589,0x589,0x589,0x589,0x589,0x589,0x589,0x589,0xeec,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x1342,0x133a,0x133a,0x133a,0x43e,0x43e,0x43e,0x43e, -0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x4e5,0x134a,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9, -0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0xda9,0x1352,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x700,0x10f8, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0xeaa,0xeb1,0xeb9,0x46e,0x5b9,0x5b9,0x5b9,0x5a5,0xec9,0xec1,0xee0,0xed1,0xed8,0xee8,0xb6a,0xef0, +0x46e,0x46e,0x46e,0x46e,0xd68,0x5b9,0xef8,0xf00,0x5b9,0xf08,0xf10,0xf14,0xf1c,0x5b9,0xf24,0x46e, +0x546,0x550,0xf2c,0x5b9,0xf30,0xf38,0xf48,0xf40,0x5b9,0xf50,0x5b9,0xf57,0x46e,0x46e,0x46e,0x46e, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xb4e,0x8aa,0xe4c,0x46e,0x46e,0x46e,0x46e, +0xf67,0xf5f,0xf6a,0xf72,0x8be,0xf7a,0x46e,0xf82,0xf8a,0xf92,0x46e,0x46e,0x5b9,0xfa2,0xfaa,0xf9a, +0xfba,0xfc1,0xfb2,0xfc9,0xfd1,0x46e,0xfe1,0xfd9,0x5b9,0xfe4,0xfec,0xff4,0xffc,0x1004,0x46e,0x46e, +0x5b9,0x5b9,0x100c,0x46e,0x546,0x1014,0x4ee,0x101c,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x1024,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x1034,0x5ef,0x103c,0x102c,0x92f,0x1044,0x104c,0x1052,0x106a,0x105a,0x1062,0x106e,0x92f,0x107e,0x1076,0x1086, +0x1096,0x108e,0x46e,0x46e,0x109d,0x10a5,0x611,0x10ad,0x10bd,0x6b2,0x10c5,0x10b5,0x46e,0x46e,0x46e,0x46e, +0x5b9,0x10cd,0x10d5,0x46e,0x5b9,0x10dd,0x10e5,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x10ed,0x10f5,0x46e, +0x5b9,0x10fd,0x1105,0x110d,0x5b9,0x111d,0x1115,0x46e,0x112d,0x1125,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x546,0x4ee,0x1135,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x5b9,0x113d,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1153,0x1158,0x1145,0x114d,0x1168, +0x1160,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x8a9,0x46e,0x46e,0x46e,0x1178,0x1180,0x1188,0x1170,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1190,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1198,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x119a, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x113d,0x8be, +0x11a2,0x46e,0x46e,0xe42,0x11aa,0x5b9,0x11ba,0x11c2,0x11ca,0x11b2,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x11d2,0x11d7,0x11df,0x46e,0x46e,0x11e7,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x11ef,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x11f7,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x11ff,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x1207,0x120c,0x1214,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0xb7d,0x8dc,0x121c,0x8dc,0x1223,0x122b,0x1231,0x8dc,0x1237,0x8dc,0x8dc,0x123f, +0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0xa7e,0x1247,0x46e,0x46e,0x46e,0x46e,0x1257,0x125e,0x1263, +0x1269,0x1271,0x1279,0x1281,0x125b,0x1289,0x1291,0x1299,0x129e,0x1270,0x1257,0x125e,0x125a,0x1269,0x12a6,0x1258, +0x12a9,0x125b,0x12b1,0x12b9,0x12c1,0x12c8,0x12b4,0x12bc,0x12c4,0x12cb,0x12b7,0x12d3,0x124f,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x515,0x12e3,0x515, +0x12ea,0x12f1,0x12db,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x12f8,0x1300,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x1308,0x46e,0x546,0x1318,0x1310,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1328,0x1330,0x1338, +0x1340,0x1348,0x1350,0x46e,0x1320,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x1358,0x8dc, +0x8dc,0xb75,0x135d,0x1361,0xb7d,0x1369,0x136e,0x8dc,0x1358,0x8dc,0x1236,0x46e,0x1376,0x137e,0x1382,0x138a, +0x46e,0x46e,0x46e,0x46e,0x46e,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x1392,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc,0x8dc, +0x8dc,0x8dc,0x8dc,0xa7f,0x139a,0x8dc,0x8dc,0x8dc,0xb75,0x8dc,0x8dc,0x13a2,0x46e,0x1358,0x8dc,0x13aa, +0x8dc,0x13b2,0xb7f,0x46e,0x46e,0x13ba,0x13c2,0x13ca,0x46e,0xb7e,0x46e,0xee8,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x13d2,0x5b9,0x5b9, +0x13d9,0x5b9,0x5b9,0x5b9,0x13e1,0x5b9,0x13e9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xc5f,0x5b9,0x5b9, +0x13f1,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x13f9,0x1401,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0xc9e,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x1408,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x140f,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x1416,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xb4e,0x46e,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x141a,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xf30,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x11ff,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x5b9,0x5b9,0x5b9,0x5b9,0x1422,0x5b9,0x5b9,0x5b9, +0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0x5b9,0xf30,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x1432,0x142a,0x142a,0x142a,0x46e,0x46e,0x46e,0x46e, +0x515,0x515,0x515,0x515,0x515,0x515,0x515,0x143a,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e, +0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0x46e,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3, +0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0xdf3,0x1442,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, 0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xc,0x17,0x17,0x17,0x19,0x17,0x17,0x17, 0x14,0x15,0x17,0x18,0x17,0x13,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, @@ -397,11 +411,13 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, 6,6,4,6,6,6,6,6,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,6,6,6,0,0,0x17,0,0,0,0,6,6,6,6,6, +5,6,6,6,0,0,0x17,0,6,6,0x10,6,6,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, 6,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0,0,0,0,5,5,6,6,0x17,0x17,0x49,0x89, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,5,5, +5,5,5,5,5,5,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, +6,6,6,6,6,6,6,6,5,5,6,6,0x17,0x17,0x49,0x89, 0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,4,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,6,6,6,8,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -455,448 +471,451 @@ static const uint16_t propsTrie_index[19820]={ 6,0,6,6,6,6,0,0,0,0,0,0,0,6,6,0, 5,5,5,0,0,0,0,0,5,5,6,6,0,0,0x49,0x89, 0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,5,5,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,6,8,8,0,5,5,5, +0,0,0,0,0,0,0,0,5,6,8,8,0,5,5,5, 5,5,5,5,5,0,5,5,5,0,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,0,5,5,5,5,5,5, 5,5,5,5,0,5,5,5,5,5,0,0,6,5,8,6, 8,8,8,8,8,0,6,8,8,0,8,8,6,6,0,0, 0,0,0,0,0,8,8,0,0,0,0,0,0,0,5,0, 5,5,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0,0,0,0x1b,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,5,8,8,8,6,6,6, -6,0,8,8,8,0,8,8,8,6,5,0,0,0,0,0, -0,0,0,8,0,0,0,0,0,0,0,5,0,0,0,0, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,8,8, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,8,8, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,0,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, -5,5,5,5,0,5,0,0,5,5,5,5,5,5,5,0, -0,0,6,0,0,0,0,8,8,8,6,6,6,0,6,0, -8,8,8,8,8,8,8,8,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,6,5,5,6,6,6,6, -6,6,6,0,0,0,0,0x19,5,5,5,5,5,5,4,6, -6,6,6,6,6,6,6,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0,0,0,0,0,5,5,0,5,0,0,5, -5,0,5,0,0,5,0,0,0,0,0,0,5,5,5,5, -0,5,5,5,5,5,5,5,0,5,5,5,0,5,0,5, -0,0,5,5,0,5,5,5,5,6,5,5,6,6,6,6, -6,6,0,6,6,5,0,0,5,5,5,5,5,0,4,0, -6,6,6,6,6,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,5,5,5,5,5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b, -6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b,0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6, -0x1b,6,0x14,0x15,0x14,0x15,8,8,5,5,5,5,5,5,5,5, -0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,0,0,0,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,8,6,6,6,6, -6,0x17,6,6,5,5,5,5,5,6,6,6,6,6,6,6, -6,6,6,6,0,6,6,6,6,6,6,6,6,6,6,6, +0x7cb,0x1e4b,0x784b,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,5,5,5,5,5,5, +0,6,8,8,0,5,5,5,5,5,5,5,5,0,5,5, +5,0,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,5,8,8,8,6,6,6,6,0,8,8,8,0,8,8, +8,6,5,0x1b,0,0,0,0,5,5,5,8,0xcc0b,0xca0b,0xcb4b,0xc90b, +0x364b,0xc94b,0x350b,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0,0,8,8,0x17,0,0,0,0,0,0,0, +0,0,0,0,0,0,8,8,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,0,0,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,0,5,0,0, +5,5,5,5,5,5,5,0,0,0,6,0,0,0,0,8, +8,8,6,6,6,0,6,0,8,8,8,8,8,8,8,8, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,6,5,5,6,6,6,6,6,6,6,0,0,0,0,0x19, +5,5,5,5,5,5,4,6,6,6,6,6,6,6,6,0x17, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0,0,0,0, +0,5,5,0,5,0,0,5,5,0,5,0,0,5,0,0, +0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, +0,5,5,5,0,5,0,5,0,0,5,5,0,5,5,5, +5,6,5,5,6,6,6,6,6,6,0,6,6,5,0,0, +5,5,5,5,5,0,4,0,6,6,6,6,6,6,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,5,5,5,5, +5,0x1b,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x1b,0x17,0x1b,0x1b,0x1b,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x344b,0x3c4b,0x444b,0x4c4b,0x544b,0x5c4b, +0x644b,0x6c4b,0x744b,0x2c4b,0x1b,6,0x1b,6,0x1b,6,0x14,0x15,0x14,0x15,8,8, +5,5,5,5,5,5,5,5,0,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,0,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,8,6,6,6,6,6,0x17,6,6,5,5,5,5, +5,6,6,6,6,6,6,6,6,6,6,6,0,6,6,6, 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b, -0x1b,0x17,0x17,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,8,8,6,6,6,6,8,6,6,6,6,6,6, -8,6,6,8,8,6,6,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5,5,5,8,8, -6,6,5,5,5,5,6,6,6,5,8,8,8,5,5,8, -8,8,8,8,8,8,5,5,5,6,6,6,6,5,5,5, -5,5,5,5,5,5,5,5,5,5,6,8,8,6,6,8, -8,8,8,8,8,6,5,8,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,8,8,8,6,0x1b,0x1b,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x17,4,5,5,5,1,1,1,1,1,1,0,1, -0,0,0,0,0,1,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,0,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,6,6,6,6,6,6,6,6,6,6,6,6,0,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b, +0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,0x17,0x17,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,6, +6,8,6,6,6,6,6,6,8,6,6,8,8,6,6,5, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17, +5,5,5,5,5,5,8,8,6,6,5,5,5,5,6,6, +6,5,8,8,8,5,5,8,8,8,8,8,8,8,5,5, +5,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5, +5,5,6,8,8,6,6,8,8,8,8,8,8,6,5,8, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,8,8,8,6,0x1b,0x1b, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0x17,4,5,5,5, +1,1,1,1,1,1,0,1,0,0,0,0,0,1,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,0, 5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,0,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b, -0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0,0,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,0,0,0x13,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x17,0x17,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0xc,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0x14,0x15,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,0x17,0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,5,6,6, -6,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -6,0x17,0x17,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,0,5,5,5,0,6,6, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,0,5,5,5,5,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,5,5,5,5,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,8,6,6,6,6,6,6,6,8,8,8,8,8,8, -8,8,6,8,8,6,6,6,6,6,6,6,6,6,6,6, -0x17,0x17,0x17,4,0x17,0x17,0x17,0x19,5,6,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x54b,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,6,5,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17, -0x17,0x17,0x13,0x17,0x17,0x17,0x17,6,6,6,0x10,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,4, +5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,6, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b, +0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x788b,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,0,0,2,2,2,2,2,2,0,0, +0x13,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0xc,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x14, +0x15,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0x17, +0x17,0x17,0x98a,0x9ca,0xa0a,5,5,5,5,5,5,5,5,0,0,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, -0,0,0,0,6,6,6,8,8,8,8,6,6,8,8,8, -0,0,0,0,8,8,6,8,8,8,8,8,8,6,6,6, -0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,5,5,5,5,5,0,0,0,0,0,0,0, +5,0,5,5,5,5,6,6,6,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,6,6,6,0x17,0x17,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,6,6,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,5,5,5,0,6,6,0,0,0,0,0,0,0,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,8,6,6,6,6,6, +6,6,8,8,8,8,8,8,8,8,6,8,8,6,6,6, +6,6,6,6,6,6,6,6,0x17,0x17,0x17,4,0x17,0x17,0x17,0x19, +5,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,0x54b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,6,5,0, 0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x17,0x17,6, +6,6,0x10,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,5,4,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,0,0,0,0,5,5,5,5, +5,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,0,0,0,0,0,0,0,6,6,6,8,8,8,8,6, +6,8,8,8,0,0,0,0,8,8,6,8,8,8,8,8, +8,6,6,6,0,0,0,0,0x1b,0,0,0,0x17,0x17,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x30b,0,0,0,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,6,6,8,8,6,0,0,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,7,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,8,6,8,6,6,6,6,6,6,6,0,6,8,6,8, -8,6,6,6,6,6,6,6,6,8,8,8,8,8,8,6, -6,6,6,6,6,6,6,6,6,0,0,6,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0x17,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,6,6,6,6, -8,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,6,8,6,6, -6,6,6,8,6,8,8,8,8,8,6,8,8,5,5,5, -5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6,6,6,8,8, -6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,5,5,5,5,5,5,6,6,8,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,6,8,6,6,8,8, -8,6,8,6,6,6,8,8,0,0,0,0,0,0,0,0, -0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, -0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, -5,5,5,5,8,8,8,8,8,8,8,8,6,6,6,6, -6,6,6,6,8,8,6,6,0,0,0,0x17,0x17,0x17,0x17,0x17, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,4,4,4,4,4,4,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -6,6,6,0x17,6,6,6,6,6,6,6,6,6,6,6,6, -6,8,6,6,6,6,6,6,6,5,5,5,5,6,5,5, -5,5,8,8,6,5,5,0,6,6,0,0,0,0,0,0, -2,2,2,2,2,2,2,2,2,2,2,2,4,4,4,4, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,6,6,8,8,6,0,0,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0,0, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,8,6,8,6,6,6,6,6,6,6,0, +6,8,6,8,8,6,6,6,6,6,6,6,6,8,8,8, +8,8,8,6,6,6,6,6,6,6,6,6,6,0,0,6, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +0x17,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6, +6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +6,6,6,6,8,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,8,6,6,6,6,6,8,6,8,8,8,8,8,6,8, +8,5,5,5,5,5,5,5,0,0,0,0,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0x17,0x17,5,8,6,6, +6,6,8,8,6,6,8,6,6,6,5,5,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,5,6,6,8,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,8, +6,6,8,8,8,6,8,6,6,6,8,8,0,0,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,5,5,5,5,5,5,8,8,8,8,8,8,8,8, +6,6,6,6,6,6,6,6,8,8,6,6,0,0,0,0x17, +0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,4,4,4,4, +4,4,0x17,0x17,2,2,2,2,2,2,2,2,2,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0, +0,0,0,0,6,6,6,0x17,6,6,6,6,6,6,6,6, +6,6,6,6,6,8,6,6,6,6,6,6,6,5,5,5, +5,6,5,5,5,5,8,8,6,5,5,0,6,6,0,0, +0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, 4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, -4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,2, -2,2,2,2,2,2,2,2,2,2,2,2,4,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,4,4,4,4,4, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,0,0,0,0,0,0,6,6,6,6, -1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,2,2,2,2,2,2,2,2,1,2, -2,2,2,2,2,2,2,2,1,1,1,1,1,0x1a,0x1a,0x1a, -0,0,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,0,0,1,1,1,1,1,1,0,0, -2,2,2,2,2,2,2,2,0,1,0,1,0,1,0,1, -2,2,2,2,2,2,2,2,1,1,1,1,1,1,1,1, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,0,0, -2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, -2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3, -2,2,2,2,2,0,2,2,1,1,1,1,3,0x1a,2,0x1a, -0x1a,0x1a,2,2,2,0,2,2,1,1,1,1,3,0x1a,0x1a,0x1a, -2,2,2,2,0,0,2,2,1,1,1,1,0,0x1a,0x1a,0x1a, -0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xc, -0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, -0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,4, -0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10,0x10,0x10,0x10,0x10, -0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c,0x1c,0x1d,0x14,0x1c, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10,0x10,0x10,0x10,0xc, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x16, -0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18,0x18,0x14,0x15,0, -4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, +4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4, +4,4,4,2,2,2,2,2,2,2,2,2,2,2,2,2, +4,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,4, +4,4,4,4,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,0,0,0,0,0,6, +6,6,6,6,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,2,2,2,2,2,2, +2,2,1,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,0x1a,0x1a,0x1a,0,0,2,2,2,0,2,2,1,1,1,1, +3,0x1a,0x1a,0,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, +1,1,0,0,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, +1,1,0,0,2,2,2,2,2,2,2,2,0,1,0,1, +0,1,0,1,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,0,0,2,2,2,2,2,2,2,2,3,3,3,3, +3,3,3,3,2,2,2,2,2,2,2,2,3,3,3,3, +3,3,3,3,2,2,2,2,2,0,2,2,1,1,1,1, +3,0x1a,2,0x1a,0x1a,0x1a,2,2,2,0,2,2,1,1,1,1, +3,0x1a,0x1a,0x1a,2,2,2,2,0,0,2,2,1,1,1,1, +0,0x1a,0x1a,0x1a,0x16,0x17,0x17,0x17,0x18,0x14,0x15,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x18,0x17,0x16,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0xc,0x10,0x10,0x10,0x10,0x10,0,0x10,0x10,0x10,0x10,0x10,0x10, +0x10,0x10,0x10,0x10,0x2cb,4,0,0,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18, +0x18,0x14,0x15,4,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0xc,0x10, +0x10,0x10,0x10,0x10,0x13,0x13,0x13,0x13,0x13,0x13,0x17,0x17,0x1c,0x1d,0x14,0x1c, +0x1c,0x1d,0x14,0x1c,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0xd,0xe,0x10,0x10, +0x10,0x10,0x10,0xc,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x1c,0x1d,0x17, +0x17,0x17,0x17,0x16,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x18,0x18, +0x18,0x14,0x15,0,4,4,4,4,4,4,4,4,4,4,4,4, +4,0,0,0,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, 0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19, -0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0x19,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7, -7,6,7,7,7,6,6,6,6,6,6,6,6,6,6,6, -6,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1,1,1,0x1b,2, -1,1,1,1,2,5,5,5,5,2,0x1b,0x1b,2,2,1,1, -0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18,0x1b,0x1b,2,0x1b, -0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb,0x3dcb,0x45cb,0x4dcb,0x58b, -0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1,1,1,2,2, -1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1,1,1,0x1b,0x1b, -0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, -0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a,0x11ca,0x1e4a,0x980a,0x784a, -0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b,0,0,0,0, -0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x19,0x19,0x19,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, +6,7,7,7,7,6,7,7,7,6,6,6,6,6,6,6, +6,6,6,6,6,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x1b,0x1b,0x1b,0x1b,1,0x1b,1,0x1b,1,0x1b,1,1, +1,1,0x1b,2,1,1,1,1,2,5,5,5,5,2,0x1b,0x1b, +2,2,1,1,0x18,0x18,0x18,0x18,0x18,1,2,2,2,2,0x1b,0x18, +0x1b,0x1b,2,0x1b,0x358b,0x360b,0x364b,0x348b,0x388b,0x350b,0x390b,0x3d0b,0x410b,0x354b,0x454b,0x35cb, +0x3dcb,0x45cb,0x4dcb,0x58b,0x1b,0x1b,1,0x1b,0x1b,0x1b,0x1b,1,0x1b,0x1b,2,1, +1,1,2,2,1,1,1,2,0x1b,1,0x1b,0x1b,0x18,1,1,1, +1,1,0x1b,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a, +0x11ca,0x1e4a,0x980a,0x784a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x7ca,0x80a,0x84a, +0x11ca,0x1e4a,0x980a,0x784a,0x784a,0x984a,0x788a,1,2,0x6ca,0x11ca,0x988a,0x78ca,0x54b,0x1b,0x1b, +0,0,0,0,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18, -0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18, -0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x18,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, +0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b, -0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb, -0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b, -0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b, -0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x2cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b, +0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb, +0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x80b,0x84b,0x88b,0x8cb,0x90b,0x94b,0x98b,0x9cb,0xa0b,0xa4b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15, -0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b, -0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b, -0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, -0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, +0x14,0x15,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb, +0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18, +0x18,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x14, +0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14, +0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x14,0x15,0x14,0x15,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x14,0x15,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18, -0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18, -0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x18,0x1b,0x1b,0x18,0x18,0x18,0x18,0x18,0x18,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, +0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,2,1,1,1,2,2,1, -2,1,2,1,2,1,1,1,1,2,1,2,2,1,2,2, -2,2,2,2,4,4,1,1,1,2,1,2,2,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,1,2,1,2,6,6,6,1,2,0,0,0,0, -0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17,2,2,2,2,2,2,0,2, -0,0,0,0,0,2,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,4, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, -5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,2,1,1,1,2,2,1,2,1,2,1,2,1,1,1, +1,2,1,2,2,1,2,2,2,2,2,2,4,4,1,1, +1,2,1,2,2,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,1,2,1,2,6, +6,6,1,2,0,0,0,0,0,0x17,0x17,0x17,0x17,0x344b,0x17,0x17, +2,2,2,2,2,2,0,2,0,0,0,0,0,2,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,0,0,0,4,0x17,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,6,5,5,5,5,5,5,5,0, 5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, -0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17,0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17, -0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x17,0x17,0x17,0x17,0x17,4, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17, -0x13,0x17,0x14,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0x17,0x17,0x1c,0x1d,0x1c,0x1d,0x17,0x17, +0x17,0x1c,0x1d,0x17,0x1c,0x1d,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x13, +0x17,0x17,0x13,0x17,0x1c,0x1d,0x17,0x17,0x1c,0x1d,0x14,0x15,0x14,0x15,0x14,0x15, +0x14,0x15,0x17,0x17,0x17,0x17,0x17,4,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x13,0x13,0x17,0x17,0x17,0x17,0x13,0x17,0x14,0x17,0x17,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, 0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0x1b,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6, -6,6,8,8,0x13,4,4,4,4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4, -5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17,0x1b,4,5,0x54a,0x14,0x15,0x14,0x15, -0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15, -0x13,0x14,0x15,0x15,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,6,6,0x1a, -0x1a,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x17, -4,4,4,5,0,0,0,0,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0x1b,0x1b,0x58b,0x5cb, -0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x58a,0x5ca,0x60a, +0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,6,6,6,6,8,8,0x13,4,4,4, +4,4,0x1b,0x1b,0x7ca,0xa4a,0xcca,4,5,0x17,0x1b,0x1b,0xc,0x17,0x17,0x17, +0x1b,4,5,0x54a,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x1b,0x1b, +0x14,0x15,0x14,0x15,0x14,0x15,0x14,0x15,0x13,0x14,0x15,0x15,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,6,6,0x1a,0x1a,4,4,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x17,4,4,4,5,0,0,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,0,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, -0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b, -0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b,0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb,0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb, -5,5,5,5,5,0x685,5,5,5,5,5,5,5,5,5,5, +0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1b,0xa8b,0xacb,0xb0b,0xb4b,0xb8b,0xbcb,0xc0b, +0xc4b,0xc8b,0xccb,0xd0b,0xd4b,0xd8b,0xdcb,0xe0b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0xe4b,0xe8b,0xecb,0xf0b,0xf4b,0xf8b,0xfcb, +0x100b,0x104b,0x108b,0x10cb,0x110b,0x114b,0x118b,0x11cb,5,5,5,5,5,0x685,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x705,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0x585,5,5,0x705, -5,5,5,0x7885,5,0x605,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x785,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x5c5,5,5,5,5,5,5,5,0x685,5,0x645,5, +5,0x705,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,0x585,5,5,0x705,5,5,5,0x7885,5,0x605,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7985, -0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x7845, -5,5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5, +5,5,5,5,0x685,5,0x645,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x685,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x1e45,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x7985,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x7985,0x7c5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x7a85,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0x5c5,5,0x745, -5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x7c5,5,0x7845,0xa45,0xcc5,5,5,5,5,5,5, -0xf45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x605,0x605,0x605,0x605,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5,5,5, +0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x685,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x7985,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5, -5,0x585,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x585,5, +5,5,5,5,5,5,5,5,5,5,0x7a85,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x785,0xa45, -5,5,5,5,5,5,5,5,5,5,5,5,0x585,0x5c5,0x605,5, -0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0x5c5,5,0x745,5,0x6c5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x7c5,5,0x7845, +0xa45,0xcc5,5,5,5,5,5,5,0xf45,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x605,0x605,0x605, +0x605,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x645, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0x745,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0x705,5,5,5,5,5,5,5,5,5, +5,0x585,5,5,5,5,5,5,5,0x585,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x785,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0x585,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x1e45,5,5,5,5,5,5,5,0x645,5,5,5,5,5, +5,5,5,5,5,5,0x785,0xa45,5,5,5,5,5,5,5,5, +5,5,5,5,0x585,0x5c5,0x605,5,0x5c5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x7885,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,0x5c5, +5,5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x745,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x705,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0x5c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x7845,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x785,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x6c5,5,5,5,5,5,0x1e45,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0x1e45,5,5,5,5,5, +5,5,0x645,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x7885,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x545,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +5,5,0x5c5,5,5,5,5,0x5c5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0x5c5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x7845,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,4,5,5,5,5,5,5,5,5,5,5, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5,5,5, +0x1e45,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x6c5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -4,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5, +5,5,5,5,5,5,0x545,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,4,5,5, +5,5,5,5,5,5,5,5,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,4,0x17,0x17,0x17,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109, +0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, +1,2,1,2,1,2,1,2,4,4,6,6,1,2,1,2, +1,2,1,2,1,2,1,2,1,2,5,6,7,7,7,0x17, +6,6,6,6,6,6,6,6,6,6,0x17,4,5,5,5,5, +5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17, +0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, +0x1a,0x1a,0x1a,4,4,4,4,4,4,4,4,4,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,2,1,2,1,2,1,2,1,2,1,2, +0,0,0,5,4,4,2,5,5,5,5,5,0x1a,0x1a,1,2, +1,2,1,2,1,2,1,2,1,2,1,2,2,2,1,2, 1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2, -4,4,6,6,1,2,1,2,1,2,1,2,1,2,1,2, -1,2,5,6,7,7,7,0x17,6,6,6,6,6,6,6,6, -6,6,0x17,4,5,5,5,5,5,5,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca, -0x70a,0x74a,0x78a,0x54a,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0, -0,0,0,0,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,0x1a,4,4,4,4,4, -4,4,4,4,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,5,4,4,2,5, -5,5,5,5,0x1a,0x1a,1,2,1,2,1,2,1,2,1,2, +4,2,2,2,2,2,2,2,2,1,2,1,2,1,1,2, +1,2,1,2,1,2,1,2,4,0x1a,0x1a,1,2,1,2,5, 1,2,1,2,2,2,1,2,1,2,1,2,1,2,1,2, -1,2,1,2,1,2,1,2,4,2,2,2,2,2,2,2, -2,1,2,1,2,1,1,2,1,2,1,2,1,2,1,2, -4,0x1a,0x1a,1,2,1,2,5,1,2,1,2,2,2,1,2, -1,2,1,2,1,2,1,2,1,2,1,1,1,1,0,0, -1,1,1,1,1,2,1,2,0,0,0,0,0,0,0,0, -5,5,6,5,5,5,6,5,5,5,5,6,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,8,8,6,6,8,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b,0x19,0x1b,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -8,8,8,8,6,0,0,0,0,0,0,0,0,0,0x17,0x17, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -8,8,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -8,8,8,8,8,8,8,8,8,8,8,8,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5, -5,5,5,5,0x17,0x17,0x17,5,0x17,5,0,0,5,5,5,5, -5,5,6,6,6,6,6,6,6,6,0x17,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, -6,6,6,6,6,6,6,6,6,6,8,8,0,0,0,0, -0,0,0,0,0,0,0,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,8,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0,4,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,6,8,8,6,6, -6,6,8,8,6,8,8,8,5,5,5,5,5,6,4,5, -5,5,5,5,5,5,5,5,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,5,5,5,5,5,0,5,5,5,5,5,5,5,5, -5,6,6,6,6,6,6,8,8,6,6,8,8,6,6,0, -0,0,0,0,0,0,0,0,5,5,5,6,5,5,5,5, -5,5,5,5,6,8,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,4,5,5,5,5,5,5,0x1b, -0x1b,0x1b,5,8,6,8,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,6,5,6,6,6,5,5,6, -6,5,5,5,5,5,6,6,5,6,5,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,5,5,4,0x17,0x17,5,5,5,5,5,5,5,5, -5,5,5,8,6,6,8,8,0x17,0x17,5,4,4,8,6,0, -0,0,0,0,0,0,0,0,0,5,5,5,5,5,5,0, +1,2,1,1,1,1,1,0,1,1,1,1,1,2,1,2, +0,0,0,0,0,0,0,0,5,5,6,5,5,5,6,5, +5,5,5,6,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,8,8,6,6,8, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x34cb,0x344b,0x3ccb,0x37cb,0x35cb,0x3fcb,0x1b,0x1b, +0x19,0x1b,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x17,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,8,8,8,8,6,6,0,0, +0,0,0,0,0,0,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,8,8,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,8,8,8,8,8,8,8,8, +8,8,8,8,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,5,5,5,5,5,5,0x17,0x17,0x17,5, +0x17,5,0,0,5,5,5,5,5,5,6,6,6,6,6,6, +6,6,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6, +6,6,8,8,0,0,0,0,0,0,0,0,0,0,0,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +8,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,4, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,6,8,8,6,6,6,6,8,8,6,8,8,8, +5,5,5,5,5,6,4,5,5,5,5,5,5,5,5,5, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,5,5,5,5,5,0, +5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,8, +8,6,6,8,8,6,6,0,0,0,0,0,0,0,0,0, +5,5,5,6,5,5,5,5,5,5,5,5,6,8,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0x17,0x17,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +4,5,5,5,5,5,5,0x1b,0x1b,0x1b,5,8,6,8,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,5,6,6,6,5,5,6,6,5,5,5,5,5,6,6, +5,6,5,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,5,5,4,0x17,0x17, +5,5,5,5,5,5,5,5,5,5,5,8,6,6,8,8, +0x17,0x17,5,4,4,8,6,0,0,0,0,0,0,0,0,0, 0,5,5,5,5,5,5,0,0,5,5,5,5,5,5,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,0, -5,5,5,5,5,5,5,0,2,2,2,2,2,2,2,2, +0,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,0,5,5,5,5,5,5,5,0, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,0x1a,4,4,4,4,2,2,2,2,2,2,0,0, -0,0,0,0,0,0,0,0,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,5,5,5,8,8,6,8,8, -6,8,8,0x17,8,6,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,0,0,0,0,5, +2,2,2,2,2,2,2,2,2,2,2,0x1a,4,4,4,4, +2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +5,5,5,8,8,6,8,8,6,8,8,0x17,8,6,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, +5,5,5,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0x12,0x12,0x12,0x12, 0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12, -0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, +0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x12,0x11,0x11,0x11,0x11, 0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11, -0x11,0x11,0x11,0x11,5,5,5,5,5,5,5,5,5,5,5,0x605, -5,5,5,5,5,5,5,0x7c5,5,5,5,5,0x5c5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x6c5,5,0x6c5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0x7c5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,0x18,5,5, +0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,0x11,5,5,5,5, +5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,0x7c5, +5,5,5,5,0x5c5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x6c5,5,0x6c5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,0x7c5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0x18,5,5, 5,5,5,5,5,5,5,5,5,5,5,0,5,5,5,5, 5,0,5,0,5,5,0,5,5,0,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -945,7 +964,7 @@ static const uint16_t propsTrie_index[19820]={ 0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b, 0x900b,0x980b,0xa00b,0xa80b,0x7ca,0x7ca,0x7ca,0x7ca,0x7ca,0xcca,0x11ca,0x11ca,0x11ca,0x11ca,0x1e4a,0x880a, 0x980a,0x980a,0x980a,0x980a,0x980a,0x784a,0x984a,0x68a,0x11ca,0x344b,0x344b,0x388b,0x3ccb,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x54b,0x34cb,0x1b,0x1b,0x1b,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0x34ca,0x344a,0x58a,0x68a,0x11ca,0x980a,0x984a,0x988a,0x68a,0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x984a,0x68a, 0x7ca,0x11ca,0x1e4a,0x980a,0x784a,0x788a,0x988a,0x7ca,0x58a,0x58a,0x58a,0x5ca,0x5ca,0x5ca,0x5ca,0x68a, @@ -970,259 +989,300 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, 0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0x17, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,5,5,0,0,0,5,0,0,5, -5,5,5,5,5,5,0,0,5,0,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0x17,0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,0,0,0,0,2,2,2,2,2,2,2,2, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,0x1b,0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0, -0,0,0,0x58b,0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0x17,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -5,5,0,0,0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0x58b,0x7cb,0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5, +5,5,0,5,5,0,0,0,5,0,0,5,5,5,5,5, +5,5,0,0,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0x17, +0x58b,0x5cb,0x60b,0x7cb,0xa4b,0x1e4b,0x784b,0x788b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x1b, +0x1b,0x58b,0x5cb,0x60b,0x64b,0x68b,0x7cb,0xa4b,0,0,0,0,0,0,0,0x58b, +0x5cb,0x60b,0x64b,0x64b,0x68b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,5,0,0, +0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,0x58b,0x7cb, +0xa4b,0x1e4b,0x5cb,0x60b,0,0,0,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b,0x788b,0x808b,0x888b,0x908b, +0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb,0xb0cb,0xb8cb,0x36cb,0x354b, +0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b, +0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b, +0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb,0x7cb,0xa4b,0x1e4b,0x784b, +0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,5,6,6,6,0,6,6,0, +0,0,0,0,6,6,6,6,5,5,5,5,0,5,5,5, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,6,6,6,0, +0,0,0,6,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0x17,0xa04b,0xa84b,0xb04b,0xb84b, -0x788b,0x808b,0x888b,0x908b,0x988b,0xa08b,0xa88b,0xb08b,0xb88b,0x78cb,0x80cb,0x88cb,0x90cb,0x98cb,0xa0cb,0xa8cb, -0xb0cb,0xb8cb,0x36cb,0x354b,0x34cb,0x348b,0x46cb,0x344b,0x4ecb,0x388b,0x3ccb,0x454b,5,5,5,5, +5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,0,0,0,0x5ecb,0x344b,5,5,0x58b,0x5cb,0x60b,0x64b, -0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0,0,0x1e4b,0x800b, -0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x784b,0x804b,0x884b,0x904b,0x984b,0x30b,0x34b,0x38b,0x3cb, -0x7cb,0xa4b,0x1e4b,0x784b,0,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,5,6,6,6, -0,6,6,0,0,0,0,0,6,6,6,6,5,5,5,5, -0,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, -6,6,6,0,0,0,0,6,5,5,5,5,5,5,5,5, +5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0,0,0,0,0x58b, +0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,0x1b,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x58b,0x11cb,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0x58b,0x7cb,0xa4b,5,5,5,5,5,6,6,0, -0,0,0,0x58b,0x68b,0x7cb,0xa4b,0x1e4b,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -0x1b,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b, -0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, -0x7cb,0xa4b,0x1e4b,0x784b,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,0,0,0,0,0,0,0x17,0x17,0x17, -0x17,0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b, -0x64b,0x7cb,0xa4b,0x1e4b,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0, -0,0,0,0,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0,0,0,0,0,0,0,0x58b,0x68b, -0x7cb,0x11cb,0x1e4b,0x784b,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b, -0x34cb,0x348b,0x388b,0,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,6,8,6,8,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0,0,0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb, -0xa4b,0xccb,0xf4b,0x11cb,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,8,8,8,6,6,6,6,8,8,6,6,0x17, -0x17,0x10,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0,0,5,5,5,5, -5,5,5,6,6,6,6,6,8,6,6,6,6,6,6,6, -6,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17, -0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,5, +5,5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6, -0x17,0x17,5,0,0,0,0,0,0,0,0,0,8,5,5,5, -5,0x17,0x17,0x17,0x17,0x17,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, -8,8,6,6,6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b, -0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b, -0x784b,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,8,8, -6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0,0,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, -5,0,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,0,5,5,5,5,5,5,5,5,5, -5,0x17,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,6,6,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,8,8,0,0,6,6, -6,6,6,6,6,0,0,0,6,6,6,6,6,0,0,0, -0,0,0,0,0,0,0,0,6,6,8,8,0,5,5,5, -5,5,5,5,5,0,0,5,5,0,0,5,5,5,5,5, -5,5,5,5,5,5,5,5,6,8,8,8,8,0,0,8, -8,0,0,8,8,8,0,0,5,0,0,0,0,0,0,8, -0,0,0,0,0,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,8,6,8,8,8,8,6,6,8,6,6,5,5,0x17,5, -0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,8,8,8,6,6,6,6,0,0, -8,8,8,8,6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, -5,5,5,5,6,6,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,8,8,8,6,6,6,6,6, -6,6,6,8,8,6,8,6,6,0x17,0x17,0x17,5,0,0,0, -0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,6,8,6,8,8,6,6,6,6,6,6,8,6, -0,0,0,0,0,0,0,0,8,8,6,6,6,6,8,6, -6,6,6,6,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x7cb,0xa4b,0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,0,0,0,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, -0x249,0x289,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0, -0,0,0,0,0,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b,0x784b, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a, -0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0,0x17,0x17,0x17,0x17,0x17,0,0,0, -0,0,0,0,0,0,0,0,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a, -0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a, -0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a, -0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a, -0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a,0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a, -0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a,0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a, -0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca,5,5,5,5,0,0,0,0, +5,5,0,0,0,0,0,0,0,0x17,0x17,0x17,0x17,0,0,0, +0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x7cb,0xa4b,0x1e4b, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,0,0,0,0,0,0,0,0x58b,0x68b,0x7cb,0x11cb,0x1e4b,0x784b, +0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb, +0x194b,0x1bcb,0x1e4b,0x800b,0x880b,0x900b,0x980b,0xa00b,0xa80b,0xb00b,0xb80b,0x344b,0x34cb,0x348b,0x388b,0, +0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +8,6,8,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0,0, +0,0,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +8,8,8,6,6,6,6,8,8,6,6,0x17,0x17,0x10,0x17,0x17, +0x17,0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0,0,5,5,5,5,5,5,5,6, +6,6,6,6,8,6,6,6,6,6,6,6,6,0,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x17,0x17,0x17,0x17,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,6,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,6,0x17,0x17,5,0, +0,0,0,0,0,0,0,0,8,5,5,5,5,0x17,0x17,0x17, +0x17,0x17,6,6,6,0x17,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,5,0x17,5,0x17,0x17,0x17,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,8,8,8,6,6, +6,6,6,6,6,6,6,8,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b, +0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0x1e4b,0x784b,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,8,8,6,8,6,6, +0x17,0x17,0x17,0x17,0x17,0x17,6,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,0,5,0,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,0,5,5,5,5,5,5,5,5,5,5,0x17,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,8,8,0,0,6,6,6,6,6,6, +6,0,0,0,6,6,6,6,6,0,0,0,0,0,0,0, +0,0,0,0,6,6,8,8,0,5,5,5,5,5,5,5, +5,0,0,5,5,0,0,5,5,5,5,5,5,5,5,5, +5,5,5,5,6,8,8,8,8,0,0,8,8,0,0,8, +8,8,0,0,5,0,0,0,0,0,0,8,0,0,0,0, +0,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,8,8,8,6,6,6,6, +6,6,6,6,8,8,6,6,6,8,6,5,5,5,5,0x17, +0x17,0x17,0x17,0x17,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x17, +0,0x17,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,8,6,8, +8,8,8,6,6,8,6,6,5,5,0x17,5,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,8,8,8,6,6,6,6,0,0,8,8,8,8, +6,6,8,6,6,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,5,5,5,5, +6,6,0,0,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,8,8,8,6,6,6,6,6,6,6,6,8, +8,6,8,6,6,0x17,0x17,0x17,5,0,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, +0,0,0,0,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17,0x17, +0x17,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,6, +8,6,8,8,6,6,6,6,6,6,8,6,0,0,0,0, +0,0,0,0,8,8,6,6,6,6,8,6,6,6,6,6, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, +0x17,0x17,0x17,0x1b,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,0,0, -6,6,6,6,6,0x17,0,0,0,0,0,0,0,0,0,0, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,6,6,6,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x7cb,0xa4b, +0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0, +0,0,0,5,5,5,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,5,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0, +0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x58b,0x5cb, +0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb, +0x1e4b,0,0,0,0x17,0x17,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,0,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,8, +6,6,6,6,6,6,6,0,6,6,6,6,6,6,8,6, +6,6,6,6,6,6,6,6,0,8,6,6,6,6,6,6, +6,8,6,6,8,6,6,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, +0,0,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x34ca,0x354a,0x34ca,0x34ca,0x344a,0x348a,0x388a,0xf4a,0x11ca,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0, +0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0,0,0,0, +0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x64a, +0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca, +0x60a,0x64a,0x68a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x6ca,0x70a,0x74a,0x78a,0x58a,0x5ca,0x60a,0x60a, +0x64a,0x68a,0xc08a,0xc18a,0x58a,0x5ca,0x60a,0x60a,0x64a,0x68a,0x60a,0x60a,0x64a,0x64a,0x64a,0x64a, +0x6ca,0x70a,0x70a,0x70a,0x74a,0x74a,0x78a,0x78a,0x78a,0x78a,0x5ca,0x60a,0x64a,0x68a,0x6ca,0x58a, +0x5ca,0x60a,0x64a,0x64a,0x68a,0x68a,0x5ca,0x60a,0x58a,0x5ca,0x348a,0x388a,0x454a,0x348a,0x388a,0x35ca, +5,5,5,5,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0,0,0,0x17,0x17,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,0,0,6,6,6,6,6,0x17,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,0x17, +0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b,4,4,4,4,0x17,0x1b,0,0, +0,0,0,0,0,0,0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b,0x7a0b,0x7a8b,0,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -6,6,6,6,6,6,6,0x17,0x17,0x17,0x17,0x17,0x1b,0x1b,0x1b,0x1b, -4,4,4,4,0x17,0x1b,0,0,0,0,0,0,0,0,0,0, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0x7cb,0x1e4b,0x788b,0x790b,0x798b, -0x7a0b,0x7a8b,0,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,0,0,0,0,0,5,5,5, -5,5,5,5,5,0,0,0,0,0,0,0,0,0,0,0, -5,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, +0,0,0,0,0,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -8,8,8,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,6,6,6,6,4,4,4,4,4,4,4,4,4, -4,4,4,4,5,5,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,0, -0,0,0,0,5,5,5,5,5,5,5,5,5,5,5,5, -5,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, -5,5,0,0,0x1b,6,6,0x17,0x10,0x10,0x10,0x10,0,0,0,0, +8,8,8,8,8,8,8,8,8,8,8,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,6,6,6,6,4, +4,4,4,4,4,4,4,4,4,4,4,4,4,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, -0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,8,8,6,6,6,0x1b,0x1b, -0x1b,8,8,8,8,8,8,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,6, -6,6,6,6,6,6,6,0x1b,0x1b,6,6,6,6,6,6,6, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,6,6,6,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,0,0,0,0,0,5,5,5,5, +5,5,5,5,5,5,5,5,5,0,0,0,0,0,0,0, +5,5,5,5,5,5,5,5,5,5,0,0,0x1b,6,6,0x17, +0x10,0x10,0x10,0x10,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb, -0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289, -0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189, -0x1c9,0x209,0x249,0x289,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,8,8,6,6,6,0x1b,0x1b,0x1b,8,8,8,8,8,8,0x10, +0x10,0x10,0x10,0x10,0x10,0x10,0x10,6,6,6,6,6,6,6,6,0x1b, +0x1b,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,6, +6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1b,0x1b,6,6, +6,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x58b,0x5cb,0x60b,0x64b, +0x68b,0x6cb,0x70b,0x74b,0x78b,0x7cb,0xa4b,0xccb,0xf4b,0x11cb,0x144b,0x16cb,0x194b,0x1bcb,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x249,0x289,0x49,0x89, +0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209, +0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, +2,0,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +1,0,1,1,0,0,1,0,0,1,1,0,0,1,1,1, +1,0,1,1,1,1,1,1,1,1,2,2,2,2,0,2, +0,2,2,2,2,2,2,2,0,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,2,2,2,2,2,2,2,0,2,2,2,2,2,2, +1,1,1,1,2,2,2,2,1,1,0,1,1,1,1,0, +0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1, +1,0,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,1,1,0,1, +1,1,1,0,1,1,1,1,1,0,1,0,0,0,1,1, +1,1,1,1,1,0,2,2,2,2,2,2,2,2,2,2, 2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,1,0,1,1,0,0,1,0, -0,1,1,0,0,1,1,1,1,0,1,1,1,1,1,1, -1,1,2,2,2,2,0,2,0,2,2,2,2,2,2,2, -0,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -1,1,0,1,1,1,1,0,0,1,1,1,1,1,1,1, -1,0,1,1,1,1,1,1,1,0,2,2,2,2,2,2, +1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,1,1,0,1,1,1,1,0,1,1,1,1, -1,0,1,0,0,0,1,1,1,1,1,1,1,0,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, +2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,2,2,2,2,2,2,0,0,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,0x18,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,0x18, +2,2,2,2,2,2,1,1,1,1,1,1,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0x18, +2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, +2,2,2,2,2,0x18,2,2,2,2,2,2,1,1,1,1, +1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,0x18, +2,2,2,2,2,2,1,2,0,0,0x49,0x89,0xc9,0x109,0x149,0x189, +0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,0x1b,0x1b,0x1b,0x1b,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6, +6,6,6,6,6,6,6,0,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,0,0,6,6,6,6,6, +6,6,0,6,6,0,6,6,6,6,6,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b, +6,6,6,6,6,6,6,0,0,0,0,0,0,0,0,0, +2,2,2,2,6,6,6,6,6,6,6,0,0,0,0,0, +0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0,0,0,0,0x17,0x17, 1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2, -2,2,0,0,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,0x18,2,2, 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,0x18,2,2,2,2,2,2,1,1, -1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,1,1,1,0x18,2,2,2,2,2,2,2,2, -2,2,2,2,2,2,2,2,2,2,2,2,2,0x18,2,2, -2,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1, -1,1,1,1,2,2,2,0x18,2,2,2,2,2,2,1,2, -0,0,0x49,0x89,0xc9,0x109,0x149,0x189,0x1c9,0x209,0x249,0x289,0x49,0x89,0xc9,0x109, -0x149,0x189,0x1c9,0x209,0,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,6,6,6,6,6,6,6,6,6,6,6,6, -6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b,0x1b,6, -6,6,6,6,6,6,6,6,6,6,6,6,6,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,6,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -6,0x1b,0x1b,0x17,0x17,0x17,0x17,0x17,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,6,6,6,6,6,5,5,5,5, -5,0,0,0x58b,0x5cb,0x60b,0x64b,0x68b,0x6cb,0x70b,0x74b,0x78b,6,6,6,6, -6,6,6,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x18,0x18,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,5,5,5,5,0,5,5,5,5,5,5,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -5,5,5,5,0,5,5,0,5,0,0,5,0,5,5,5, -5,5,5,5,5,5,5,0,5,5,5,5,0,5,0,5, -0,0,0,0,0,0,5,0,0,0,0,5,0,5,0,5, -0,5,5,5,0,5,5,0,5,0,0,5,0,5,0,5, -0,5,0,5,0,5,5,0,5,0,0,5,5,5,5,0, -5,5,5,5,5,5,5,0,5,5,5,5,0,5,5,5, -5,0,5,0,5,5,5,5,5,5,5,5,5,5,0,5, -5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0,0,0,0,0,5,5,5,0,5,5,5,5,5,0,5, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x18,0x18,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +5,5,5,5,0,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b, -0x48b,0x4cb,0x50b,0x54b,0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b, +0,5,5,0,5,0,0,5,0,5,5,5,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,0,5,0,0,0,0, +0,0,5,0,0,0,0,5,0,5,0,5,0,5,5,5, +0,5,5,0,5,0,0,5,0,5,0,5,0,5,0,5, +0,5,5,0,5,0,0,5,5,5,5,0,5,5,5,5, +5,5,5,0,5,5,5,5,0,5,5,5,5,0,5,0, +5,5,5,5,5,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0,5,5,5,0,5,5,5,5,5,0,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,0,0,0,0, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0x1b,0x1b, +0x1b,0x1b,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x2cb,0x2cb,0x30b,0x34b,0x38b,0x3cb,0x40b,0x44b,0x48b,0x4cb,0x50b,0x54b, +0x54b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0, 0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a, -0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0,0,0,0,0,0,0,0x1b,0x1b,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, 0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,5,0x705,5,5,5,5,5,5, +0x1b,0x1b,0x1b,0x1a,0x1a,0x1a,0x1a,0x1a,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0,0,0,0,0,0,0,0,0x1b,0,0,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0,0,0,0,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, +0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0,5,0x705,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x645,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, @@ -1241,6 +1301,8 @@ static const uint16_t propsTrie_index[19820]={ 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,0x605,5,5,5,5,5,5,5,5, 5,5,5,5,5,0x645,5,5,5,5,5,5,5,5,5,5, +5,5,5,5,5,5,5,5,5,5,5,5,5,0,0,0, +0,0,0,0,0,0,0,0,5,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x785,5,5,5,5,5,5,5, 5,5,5,5,5,5,5,5,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, 0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10,0x10, @@ -1255,2141 +1317,2228 @@ static const uint16_t propsTrie_index[19820]={ static const UTrie2 propsTrie={ propsTrie_index, - propsTrie_index+4216, + propsTrie_index+4408, NULL, - 4216, - 15604, + 4408, + 16372, 0xa40, - 0x10f8, + 0x11b8, 0x0, 0x0, 0x110000, - 0x4d68, + 0x5128, NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint16_t propsVectorsTrie_index[27452]={ -0x488,0x490,0x498,0x4a0,0x4b8,0x4c0,0x4c8,0x4d0,0x4d8,0x4e0,0x4e8,0x4f0,0x4f8,0x500,0x508,0x510, -0x517,0x51f,0x527,0x52f,0x532,0x53a,0x542,0x54a,0x552,0x55a,0x562,0x56a,0x572,0x57a,0x582,0x58a, -0x592,0x59a,0x5a1,0x5a9,0x5b1,0x5b9,0x5c1,0x5c9,0x5d1,0x5d9,0x5de,0x5e6,0x5ed,0x5f5,0x5fd,0x605, -0x60d,0x615,0x61d,0x625,0x62c,0x634,0x63c,0x644,0x64c,0x654,0x65c,0x664,0x66c,0x674,0x67c,0x684, -0x180c,0xce8,0xdd3,0x4a8,0x4a8,0xe52,0xe58,0xe60,0x10fc,0x1114,0x1104,0x110c,0x71c,0x722,0x72a,0x732, -0x73a,0x740,0x748,0x750,0x758,0x75e,0x766,0x76e,0x776,0x77c,0x784,0x78c,0x794,0x79c,0x7a4,0x7ab, -0x7b3,0x7b9,0x7c1,0x7c9,0x7d1,0x7d7,0x7df,0x7e7,0x7ef,0x7f5,0x7fd,0x805,0x80d,0x814,0x81c,0x824, -0x82c,0x830,0x838,0x83f,0x847,0x84f,0x857,0x85f,0x141c,0x1424,0x867,0x86f,0x877,0x87f,0x887,0x88e, -0x1482,0x1472,0x147a,0x174f,0x1757,0x1124,0x896,0x111c,0x1366,0x1366,0x1368,0x1138,0x1139,0x112c,0x112e,0x1130, -0x148a,0x148c,0x89e,0x148c,0x8a6,0x8ab,0x8b3,0x1491,0x8b9,0x148c,0x8bf,0x8c7,0xbc1,0x1499,0x1499,0x8cf, -0x14a9,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa,0x14aa, -0x14aa,0x14aa,0x14aa,0x14a1,0x8d7,0x14b2,0x14b2,0x8df,0xad6,0xade,0xae6,0xaee,0x14c2,0x14ba,0x8e7,0x8ef, -0x8f7,0x14ca,0x14d2,0x8ff,0x14ca,0x907,0x1814,0xcf0,0xaf6,0xafe,0xb06,0xb0b,0x16c5,0xbf4,0xbfb,0x162d, -0xb91,0x181c,0xcf8,0xd00,0xd08,0xd10,0xf10,0xf10,0x1715,0x171a,0xc2c,0xc34,0x178b,0x1793,0x18b5,0xddb, -0x179b,0xc7c,0xc84,0x17a3,0x4a8,0x4a8,0xef0,0xd18,0x164d,0x1635,0x1645,0x163d,0x16dd,0x16d5,0x169d,0xba1, -0x1141,0x1141,0x1141,0x1141,0x1144,0x1141,0x1141,0x114c,0x90f,0x1154,0x913,0x91b,0x1154,0x923,0x92b,0x933, -0x1164,0x115c,0x116c,0x93b,0x943,0x94b,0x953,0x95b,0x1174,0x117c,0x1184,0x118c,0x963,0x1194,0x119b,0x11a3, -0x11ab,0x11b3,0x11bb,0x11c3,0x11cb,0x11d2,0x11da,0x11e2,0x11ea,0x11f2,0x11f5,0x11f7,0x14da,0x15c0,0x15c6,0x96b, -0x11ff,0x973,0x97b,0x1319,0x131e,0x1321,0x1329,0x1207,0x1331,0x1331,0x1217,0x120f,0x121f,0x1227,0x122f,0x1237, -0x123f,0x1247,0x124f,0x1257,0x15ce,0x1625,0x175f,0x189d,0x1267,0x126e,0x1276,0x127e,0x125f,0x1286,0x15d6,0x15dd, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x15e5,0x15e8,0x15e5,0x15e5,0x15f0,0x15f7,0x15f9,0x1600, -0x1608,0x160c,0x160c,0x160f,0x160c,0x160c,0x1615,0x160c,0x1655,0x170d,0x1767,0xb13,0xb19,0xb1f,0xb27,0xb2c, -0x16b5,0xbd1,0xbd5,0x1722,0x16a5,0x16a5,0x16a5,0xba9,0x16ad,0xbc9,0x16f5,0xc1c,0xbb1,0xbb9,0xbb9,0x17ab, -0x16e5,0x176f,0xc0b,0xc0c,0x983,0x14ea,0x14ea,0x98b,0x14f2,0x14f2,0x14f2,0x14f2,0x14f2,0x14f2,0x993,0x68c, -0x134e,0x1370,0x99b,0x1378,0x9a3,0x1380,0x1388,0x1390,0x9ab,0x9b0,0x1398,0x139f,0x9b5,0x9bd,0x1705,0xb99, -0x9c5,0x13f6,0x13fd,0x13a7,0x1405,0x140c,0x13af,0x9cd,0x13c8,0x13c8,0x13ca,0x13b7,0x13bf,0x13bf,0x13c0,0x1414, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa, -0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x10b3,0x165d,0x165d, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2, -0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d2,0x13d9,0x10bb,0x10c1, -0x1502,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508, -0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508,0x1508, -0x1508,0x1508,0x1508,0x1508,0x9d5,0x1510,0x9dd,0x1824,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7,0x17b7, -0x17b3,0xc8c,0x17c7,0x17bf,0x17c9,0x182c,0x182c,0xd20,0x16bd,0x172a,0x177f,0x1783,0x1777,0xc3c,0xc42,0xc45, -0x16ed,0xc14,0x1732,0xc4d,0x17d1,0x17d4,0xc94,0xd28,0x17e4,0x17dc,0xc9c,0xd30,0x1834,0x1838,0xd38,0xfb6, -0x17ec,0xca4,0xcac,0x1840,0x1850,0x1848,0xd40,0xeb3,0xde3,0xdeb,0x19e9,0xf6e,0x1a8e,0x1a8e,0x1858,0xd48, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465, -0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467, -0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469, -0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464, -0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466, -0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468, -0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a, -0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x146a,0x1464,0x1465,0x1466,0x1467,0x1468,0x1469,0x9e5,0xd50,0xd53, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c, -0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c,0x143c, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339, -0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x1339,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1,0x13e1, -0x13e6,0x13ee,0x161d,0x10c9,0x16fd,0x16fd,0x10cd,0x10d4,0x9ed,0x9f5,0x9fd,0x12a6,0x12ad,0x12b5,0xa05,0x12bd, -0x12ee,0x12ee,0x1296,0x129e,0x12c5,0x12e5,0x12e6,0x12f6,0x12cd,0x128e,0xa0d,0x12d5,0xa15,0x12dd,0xa1d,0xa21, -0xc24,0x12fe,0xa29,0xa31,0x1306,0x130c,0x1311,0xa39,0xa49,0x1356,0x135e,0x1341,0x1346,0xa51,0xa59,0xa41, -0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c, -0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x142c,0x1434,0x1434,0x1434,0x1434, -0x12a0,0x12a0,0x12e0,0x1320,0x1360,0x13a0,0x13e0,0x1420,0x145c,0x149c,0x14c8,0x1508,0x1548,0x1588,0x15c8,0x1608, -0x1648,0x1684,0x16c4,0x1704,0x1744,0x1778,0x17b4,0x17f4,0x1834,0x1874,0x18b0,0x18f0,0x1930,0x1970,0x19b0,0x19f0, -0xa80,0xac0,0xb00,0xe48,0xb40,0xa40,0xb80,0xa40,0xe68,0xa40,0xa40,0xa40,0xa40,0xbc0,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xdcd,0xbfd,0xa40,0xa40,0xc3d,0xc7d,0xa40,0xe0d,0xd8d,0xcbd, -0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e, -0x115e,0x115e,0x115e,0x115e,0xea8,0x119e,0xfde,0x101e,0x11de,0xee8,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf5e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, -0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf9e, +static const uint16_t propsVectorsTrie_index[28540]={ +0x4bb,0x4c3,0x4cb,0x4d3,0x4eb,0x4f3,0x4fb,0x503,0x50b,0x513,0x51b,0x523,0x52b,0x533,0x53b,0x543, +0x54a,0x552,0x55a,0x562,0x565,0x56d,0x575,0x57d,0x585,0x58d,0x595,0x59d,0x5a5,0x5ad,0x5b5,0x5bd, +0x5c5,0x5cd,0x5d4,0x5dc,0x5e4,0x5ec,0x5f4,0x5fc,0x604,0x60c,0x611,0x619,0x620,0x628,0x630,0x638, +0x640,0x648,0x650,0x658,0x65f,0x667,0x66f,0x677,0x67f,0x687,0x68f,0x697,0x69f,0x6a7,0x6af,0x6b7, +0x18ce,0xd31,0xe19,0x4db,0x4db,0xe89,0xe91,0x1a56,0x11bd,0x11d5,0x11c5,0x11cd,0x75c,0x762,0x76a,0x772, +0x77a,0x780,0x788,0x790,0x798,0x79e,0x7a6,0x7ae,0x7b6,0x7bc,0x7c4,0x7cc,0x7d4,0x7dc,0x7e4,0x7eb, +0x7f3,0x7f9,0x801,0x809,0x811,0x817,0x81f,0x827,0x82f,0x835,0x83d,0x845,0x84d,0x854,0x85c,0x864, +0x86c,0x870,0x878,0x87f,0x887,0x88f,0x897,0x89f,0x14dd,0x14e5,0x8a7,0x8af,0x8b7,0x8bf,0x8c7,0x8ce, +0x1543,0x1533,0x153b,0x1811,0x1819,0x11e5,0x8d6,0x11dd,0x1427,0x1427,0x1429,0x11f9,0x11fa,0x11ed,0x11ef,0x11f1, +0x154b,0x154d,0x8de,0x154d,0x8e6,0x8eb,0x8f3,0x1552,0x8f9,0x154d,0x8ff,0x907,0xc09,0x155a,0x155a,0x90f, +0x156a,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b,0x156b, +0x156b,0x156b,0x156b,0x1562,0x917,0x1573,0x1573,0x91f,0xb16,0xb1e,0xb26,0xb2e,0x1583,0x157b,0x927,0x92f, +0x937,0x158d,0x1595,0x93f,0x158b,0x947,0x18d6,0xd39,0xb36,0xb3e,0xb46,0xb4b,0x1787,0xc3c,0xc43,0x16ef, +0xbd9,0x18de,0xd41,0xd49,0xd51,0xd59,0xf41,0xf41,0x17d7,0x17dc,0xc75,0xc7d,0x184d,0x1855,0x197f,0xe21, +0x185d,0xcc5,0xccd,0x1865,0x6bf,0x4db,0xf21,0xd61,0x170f,0x16f7,0x1707,0x16ff,0x179f,0x1797,0x175f,0xbe9, +0x1202,0x1202,0x1202,0x1202,0x1205,0x1202,0x1202,0x120d,0x94f,0x1215,0x953,0x95b,0x1215,0x963,0x96b,0x973, +0x1225,0x121d,0x122d,0x97b,0x983,0x98b,0x993,0x99b,0x1235,0x123d,0x1245,0x124d,0x9a3,0x1255,0x125c,0x1264, +0x126c,0x1274,0x127c,0x1284,0x128c,0x1293,0x129b,0x12a3,0x12ab,0x12b3,0x12b6,0x12b8,0x159d,0x1682,0x1688,0x9ab, +0x12c0,0x9b3,0x9bb,0x13da,0x13df,0x13e2,0x13ea,0x12c8,0x13f2,0x13f2,0x12d8,0x12d0,0x12e0,0x12e8,0x12f0,0x12f8, +0x1300,0x1308,0x1310,0x1318,0x1690,0x16e7,0x1821,0x195f,0x1328,0x132f,0x1337,0x133f,0x1320,0x1347,0x1698,0x169f, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x16a7,0x16aa,0x16a7,0x16a7,0x16b2,0x16b9,0x16bb,0x16c2, +0x16ca,0x16ce,0x16ce,0x16d1,0x16ce,0x16ce,0x16d7,0x16ce,0x1717,0x17cf,0x1829,0xb53,0xb59,0xb5f,0xb67,0xb6c, +0x1777,0xc19,0xc1d,0x17e4,0x1767,0x1767,0x1767,0xbf1,0x176f,0xc11,0x17b7,0xc65,0xbf9,0xc01,0xc01,0x186d, +0x17a7,0x1831,0xc53,0xc55,0x9c3,0x15ad,0x15ad,0x9cb,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x15b5,0x9d3,0x6c3, +0x140f,0x1431,0x9db,0x1439,0x9e3,0x1441,0x1449,0x1451,0x9eb,0x9f0,0x1459,0x1460,0x9f5,0x9fd,0x17c7,0xbe1, +0xa05,0x14b7,0x14be,0x1468,0x14c6,0x14cd,0x1470,0xa0d,0x1489,0x1489,0x148b,0x1478,0x1480,0x1480,0x1481,0x14d5, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd, +0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x1174,0x171f,0x171f, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493, +0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x1493,0x149a,0x117c,0x1182, +0x15c5,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, +0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb,0x15cb, +0x15cb,0x15cb,0x15cb,0x15cb,0xa15,0x15d3,0xa1d,0x18e6,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879,0x1879, +0x1875,0xcd5,0x1889,0x1881,0x188b,0x18ee,0x18ee,0xd69,0x177f,0x17ec,0x1841,0x1845,0x1839,0xc85,0xc8b,0xc8e, +0x17af,0xc5d,0x17f4,0xc96,0x1893,0x1896,0xcdd,0xd71,0x18a6,0x189e,0xce5,0xd79,0x18f6,0x18fa,0xd81,0xfe7, +0x18ae,0xced,0xcf5,0x1902,0x1912,0x190a,0xd89,0xee4,0xe29,0xe31,0x1ac9,0xf9f,0x1b6e,0x1b6e,0x191a,0xd91, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526, +0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528, +0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a, +0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525, +0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527, +0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529, +0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b, +0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0x152b,0x1525,0x1526,0x1527,0x1528,0x1529,0x152a,0xa25,0xd99,0xd9c, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa, +0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x13fa,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2,0x14a2, +0x14a7,0x14af,0x16df,0x118a,0x17bf,0x17bf,0x118e,0x1195,0xa2d,0xa35,0xa3d,0x1367,0x136e,0x1376,0xa45,0x137e, +0x13af,0x13af,0x1357,0x135f,0x1386,0x13a6,0x13a7,0x13b7,0x138e,0x134f,0xa4d,0x1396,0xa55,0x139e,0xa5d,0xa61, +0xc6d,0x13bf,0xa69,0xa71,0x13c7,0x13cd,0x13d2,0xa79,0xa89,0x1417,0x141f,0x1402,0x1407,0xa91,0xa99,0xa81, +0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed, +0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14ed,0x14f5,0x14f5,0x14f5,0x14f5, +0x136c,0x136c,0x13ac,0x13ec,0x142c,0x146c,0x14ac,0x14ec,0x1528,0x1568,0x1594,0x15d4,0x1614,0x1654,0x1694,0x16d4, +0x1714,0x1750,0x1790,0x17d0,0x1810,0x1844,0x1880,0x18c0,0x1900,0x1940,0x197c,0x19bc,0x19fc,0x1a3c,0x1a7c,0x1abc, +0xa80,0xac0,0xb00,0xe4d,0xb40,0xa40,0xb80,0xa40,0xe73,0xa40,0xa40,0xa40,0xa40,0xbc0,0x12a9,0x12a9, +0xeb3,0xef3,0xa40,0xa40,0xa40,0xa40,0xdd2,0xc00,0xa40,0xa40,0xc40,0xc80,0xcc0,0xe12,0xd92,0xd02, +0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9,0x11e9, +0x11e9,0x11e9,0x11e9,0x11e9,0xf33,0x1229,0x1069,0x10a9,0x1269,0xf73,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfe9, +0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9, +0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0xfa9,0x1029, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, 0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, -0xd3d,0xd4d,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, -0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcfd, -0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de, -0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x10de,0x105e, -0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e, -0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x111e,0x109e, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0xb34,0xb3b,0xb43,0xb4b,0x1665,0x1665,0x1665,0xb53,0xb5b,0xb5e,0x1695,0x168d,0xb89,0xcb4,0xcb8,0xcbc, -0x4a8,0x4a8,0x4a8,0x4a8,0xcc4,0x17f4,0xccc,0xf08,0x1518,0xa61,0xa67,0xfc6,0xb66,0x16cd,0xc03,0x4a8, -0x152d,0x1520,0x1525,0x166d,0xb6e,0x694,0x4a8,0x4a8,0x19d1,0xf25,0x19c1,0x69c,0x4a8,0x4a8,0x4a8,0x4a8, -0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0x19f1,0xf76,0xf7e,0xf86,0x4a8,0x4a8,0x4a8,0x4a8, -0xb76,0xb79,0xd5b,0x1a39,0xfbe,0x6a4,0x4a8,0x1057,0xc55,0xcd4,0x4a8,0x4a8,0x198d,0xebb,0xec3,0x1a79, -0xbdd,0xbe4,0xbec,0x1860,0x1a19,0x4a8,0x19f9,0xf96,0x1868,0xd63,0xd6b,0xd73,0xfe6,0x6ac,0x4a8,0x4a8, -0x1870,0x1870,0x6b4,0x4a8,0x1aa6,0x106f,0x1a9e,0x1077,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0xd7b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x18bd,0x18bf,0xdf3,0xdfa,0x1880,0x1878,0xd83,0xee8,0x1985,0xea3,0xeab,0xf8e,0x199d,0x19a1,0xee0,0x1006, -0xf59,0xf5e,0x6bc,0x4a8,0x105f,0x1067,0x19e1,0xf66,0xf3b,0xf41,0xf49,0xf51,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x1a61,0x1a59,0x102d,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a49,0xfee,0xff6,0xffe, -0x1a11,0x1a09,0xfa6,0x4a8,0x19a9,0xef8,0x6c4,0x4a8,0x103d,0x1045,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, -0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173f,0xc5d,0xc64,0xc64,0xc64, -0x1747,0x1747,0x1747,0xc6c,0x1a96,0x1a96,0x1a96,0x1a96,0x1a96,0x1a96,0x6cc,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888, -0x1888,0x1888,0x188a,0x1888,0x1892,0x1888,0x1888,0x1888,0x1888,0x1888,0x1888,0x1895,0x1888,0x1888,0x1888,0x1888, -0x1888,0x6d4,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7,0x18c7, -0x18c7,0xe02,0xfae,0x6dc,0x4a8,0x4a8,0x6e0,0xf00,0x1a31,0x1a29,0xfce,0xfd6,0x6e8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1995,0x1995,0xecb,0xed0,0xed8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x19c9,0x19c9,0x19c9, -0xf18,0xf1d,0x6f0,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1535,0x1535,0x1535, -0x1535,0x1535,0x1535,0x1535,0xa6f,0x1545,0xa77,0x1546,0x153d,0x154e,0x1554,0x155c,0xa7f,0x1685,0x1685,0x6f8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1675,0x1675,0xb81,0xc74,0x4a8,0x4a8,0x4a8,0x4a8,0x158d,0x1594,0xa87, -0x1597,0xa8f,0xa97,0xa9f,0x1591,0xaa7,0xaaf,0xab7,0x1596,0x159e,0x158d,0x1594,0x1590,0x1597,0x159f,0x158e, -0x1595,0x1591,0xabe,0x1564,0x156c,0x1573,0x157a,0x1567,0x156f,0x1576,0x157d,0xac6,0x1585,0x1abe,0x1abe,0x1abe, -0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1abe,0x1aae,0x1ab1,0x1aae, -0x1ab8,0x1097,0x700,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x100e,0x1a51,0x1014, -0x1a51,0x101c,0x1021,0x1025,0x1025,0x107f,0x1086,0x1086,0x1086,0x108e,0x1086,0x108f,0x1086,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x704,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x704,0xace,0x15a7,0x15a7, -0x15a8,0x70c,0x70c,0x70c,0x70c,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x714,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c, -0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x70c,0x17fc,0xcdc,0x1804, -0x1804,0xce0,0xe13,0xe1b,0xe23,0xd8b,0xd91,0x18a5,0xd99,0xda1,0xda8,0xda8,0xdaf,0xdb7,0xdbe,0xdc6, -0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0x18ee,0x18f6,0x18ee,0x18fc,0x1904,0x18cf,0x190c,0x1914,0x18ee,0x191c,0x1924, -0x192b,0x1933,0x18d7,0x18ee,0x1935,0x18df,0x18e6,0x193d,0xe2b,0x19b9,0xe32,0x19b1,0x1945,0x194d,0x1955,0x195d, -0x1a21,0x1965,0x196d,0xe3a,0xe42,0x1975,0x1975,0x1975,0xe4a,0x19d9,0x19d9,0xf2d,0xf33,0xe0a,0xe0b,0xe0b, -0xe0b,0xe0b,0xe0b,0xe0b,0xe0b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a01,0x1a01,0x1a01, -0x1a01,0x1a01,0x1a01,0xf9e,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0xe68,0xe70,0xe78, -0xe80,0xe88,0xe90,0xe97,0xe9b,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a71,0x1a69,0x1035, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a41,0xfde, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81, -0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a81,0x1a86,0x1a81,0x1a81,0x1a81,0x104d,0x104f,0x4a8,0x4a8,0x4a8,0x4a8, -0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x4a8,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x10dc,0x109f, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x10a7,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x15b8,0x15b8, -0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x15b8,0x10e4,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x10ab,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f, -0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x109f,0x10ab,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x10ec,0x197d,0x197d,0x197d,0x197d,0x197d,0x197d,0x10f4,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1444,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x144c,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454, -0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x1454,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c, -0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x145c,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0, -0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x15b0,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad, -0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x18ad,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6, -0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x1ac6,0x487,0x487, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x255,0x25e,0x258,0x258,0x25b,0x252,0x252, -0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, -0x786,0x780,0x765,0x75c,0x753,0x750,0x747,0x762,0x74d,0x759,0x75c,0x777,0x76e,0x75f,0x783,0x756, -0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x744,0x76b,0x768,0x771,0x771,0x771,0x780, -0x747,0x792,0x792,0x792,0x792,0x792,0x792,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c, -0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x78c,0x74d,0x753,0x759,0x77d,0x741, -0x77a,0x78f,0x78f,0x78f,0x78f,0x78f,0x78f,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789, -0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x789,0x74d,0x774,0x74a,0x771,0x252, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x261,0x261,0x261,0x261,0x261,0x270,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, -0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, -0x264,0x5df,0x79b,0x79e,0x5e5,0x79e,0x798,0x5dc,0x5d3,0x26a,0x5f1,0x26d,0x7a1,0x5ca,0x5e8,0x795, -0x5e2,0x5ee,0x5d0,0x5d0,0x5d6,0x267,0x5dc,0x5d9,0x5d3,0x5d0,0x5f1,0x26d,0x5cd,0x5cd,0x5cd,0x5df, -0x276,0x276,0x276,0x276,0x276,0x276,0x5fa,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276,0x276, -0x5fa,0x276,0x276,0x276,0x276,0x276,0x276,0x5eb,0x5fa,0x276,0x276,0x276,0x276,0x276,0x5fa,0x5f4, -0x5f7,0x5f7,0x273,0x273,0x273,0x273,0x5f4,0x273,0x5f7,0x5f7,0x5f7,0x273,0x5f7,0x5f7,0x273,0x273, -0x5f4,0x273,0x5f7,0x5f7,0x273,0x273,0x273,0x5eb,0x5f4,0x5f7,0x5f7,0x273,0x5f7,0x273,0x5f4,0x273, -0x282,0x600,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279, -0x27f,0x5fd,0x282,0x600,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x5fd,0x609,0x603,0x282,0x279,0x282,0x279,0x5fd,0x282,0x279,0x282,0x279,0x282,0x279,0x609, -0x603,0x606,0x5fd,0x282,0x600,0x282,0x279,0x282,0x600,0x60c,0x606,0x5fd,0x282,0x600,0x282,0x279, -0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x606,0x5fd,0x282,0x279,0x282,0x600,0x282,0x279,0x282,0x279, -0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x279,0x282,0x282,0x279,0x282,0x279,0x282,0x279,0x27c, -0x285,0x291,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x291,0x291,0x291,0x285,0x285,0x291,0x291, -0x291,0x291,0x285,0x291,0x291,0x285,0x291,0x291,0x291,0x285,0x285,0x285,0x291,0x291,0x285,0x291, -0x294,0x288,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x291,0x285,0x285,0x291,0x285,0x291,0x294, -0x288,0x291,0x291,0x291,0x285,0x291,0x285,0x291,0x291,0x285,0x285,0x28e,0x291,0x285,0x285,0x285, -0x28e,0x28e,0x28e,0x28e,0x297,0x297,0x28b,0x297,0x297,0x28b,0x297,0x297,0x28b,0x294,0x60f,0x294, -0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x294,0x60f,0x285,0x294,0x288, -0x294,0x288,0x294,0x288,0x291,0x285,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288, -0x288,0x297,0x297,0x28b,0x294,0x288,0x969,0x969,0x96c,0x966,0x294,0x288,0x294,0x288,0x294,0x288, -0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288,0x294,0x288, -0x294,0x288,0x294,0x288,0x96c,0x966,0x96c,0x966,0x969,0x963,0x96c,0x966,0xb25,0xc27,0x969,0x963, -0x969,0x963,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966,0x96c,0x966, -0xc27,0xc27,0xc27,0xd1d,0xd1d,0xd1d,0xd20,0xd20,0xd1d,0xd20,0xd20,0xd1d,0xd1d,0xd20,0xe61,0xe64, -0xe64,0xe64,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0xe64,0xe61,0x29a,0x612,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x612,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29d,0x29a,0x29a,0x29a, -0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a,0x29a, -0x29a,0x96f,0x96f,0x96f,0x96f,0x96f,0xc2a,0xc2a,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5, -0x2b5,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2ac,0x2a9,0x2a9,0x2a0,0x2a0,0x618,0x2a0,0x2ac,0x61b, -0x2af,0x61b,0x61b,0x61b,0x2af,0x61b,0x2ac,0x2ac,0x61e,0x2b2,0x2a0,0x2a0,0x2a0,0x2a0,0x2a0,0x2a6, -0x615,0x615,0x615,0x615,0x2a3,0x615,0x2a0,0xa9e,0x2b5,0x2b5,0x2b5,0x2b5,0x2b5,0x2a0,0x2a0,0x2a0, -0x2a0,0x2a0,0x978,0x978,0x975,0x972,0x975,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d, -0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0xc2d,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621, -0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x621,0x624,0x624,0x8d0,0x624,0x624,0x8d3,0xaa1,0xaa1, -0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xaa1,0xbe2,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, -0xe2e,0xe2e,0xe2e,0xe2e,0xe31,0xcf6,0xcf6,0xcf6,0x627,0x627,0xaa4,0xc24,0xc24,0xc24,0xc24,0xc24, -0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xc24,0xf0f,0xf0c,0xf0f,0xf0c,0x2c1,0x2ca,0xf0f,0xf0c, -6,6,0x2d0,0xe67,0xe67,0xe67,0x2b8,0x1452,6,6,6,6,0x2cd,0x2bb,0x2df,0x2be, -0x2df,0x2df,0x2df,6,0x2df,6,0x2df,0x2df,0x2d6,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d, -0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,0x62d,6,0x62d,0x62d,0x62d,0x62d,0x62d, -0x62d,0x62d,0x2df,0x2df,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a, -0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x62a,0x2d3,0x62a,0x62a,0x62a,0x62a,0x62a, -0x62a,0x62a,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0xf0f,0x2e2,0x2e2,0x2e5,0x2df,0x2df,0x2e2,0x2d9,0x97b, -0xb2e,0xb2b,0x2dc,0x97b,0x2dc,0x97b,0x2dc,0x97b,0x2dc,0x97b,0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4, -0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4,0x2c7,0x2c4,0x2e2,0x2e2,0x2d9,0x2d3,0xadd,0xada,0xb28,0xc33, -0xc30,0xc36,0xc33,0xc30,0xd23,0xd26,0xd26,0xd26,0x98a,0x639,0x2f4,0x2f7,0x2f4,0x2f4,0x2f4,0x2f7, -0x2f4,0x2f4,0x2f4,0x2f4,0x2f7,0x98a,0x2f7,0x2f4,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636, -0x636,0x639,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636, -0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x636,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630, -0x630,0x633,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630,0x630, -0x630,0x630,0x630,0x630,0x984,0x633,0x2ee,0x2f1,0x2ee,0x2ee,0x2ee,0x2f1,0x2ee,0x2ee,0x2ee,0x2ee, -0x2f1,0x984,0x2f1,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f7,0x2f1,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2eb,0x8dc,0x2e8,0x8c1,0x8c1,0x10b9,0x97e,0x97e,0xb34,0xb31, -0x987,0x981,0x987,0x981,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2ee, -0x2f4,0x2ee,0x2f4,0x2ee,0x2f4,0x2f7,0x2f1,0x2f4,0x2ee,0xb34,0xb31,0x2f4,0x2ee,0xb34,0xb31,0x2f4, -0x2ee,0xb34,0xb31,0xe6a,0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1, -0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0x2f4,0x2ee,0x2f7,0x2f1, -0x98a,0x984,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0x2f7,0x2f1,0xd2c,0xd29,0x2f7,0x2f1,0xe6d,0xe6a, -0xe6d,0xe6a,0xe6d,0xe6a,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0,0xba3,0xba0, -0xba3,0xba0,0xba3,0xba0,0xe9a,0xe97,0xe9a,0xe97,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a, -0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0xf8d,0xf8a,0x10f5,0x10f2,0x12d5,0x12d2,0x148b,0x1488,0x148b,0x1488, -0x148b,0x1488,0x148b,0x1488,9,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306, -0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,0x306,9, -9,0x309,0x2fa,0x2fa,0x2fa,0x2fd,0x2fa,0x2fa,9,0x300,0x300,0x300,0x300,0x300,0x300,0x300, -0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300, -0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x300,0x303,9,0x849,0x98d,9, -9,0x1455,0x1455,0x1371,0xc,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd, -0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0xd2f,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd,0x8fd, -0x8fd,0x8fd,0x8fd,0x8fd,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0x30c,0xe70,0x30c, -0x30c,0x30c,0x318,0x30c,0x30f,0x30c,0x30c,0x31b,0x900,0xd32,0xd35,0xd32,0xc,0xc,0xc,0xc, -0xc,0xc,0xc,0xc,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, -0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0xc, -0xc,0xc,0xc,0xc,0x31e,0x31e,0x31e,0x315,0x312,0xc,0xc,0xc,0xc,0xc,0xc,0xc, -0xc,0xc,0xc,0xc,0xc39,0xc39,0xc39,0xc39,0x1374,0x1458,0xf18,0xf18,0xf18,0xf15,0xf15,0xd3e, -0x84f,0xc48,0xc45,0xc45,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xf12,0xf12,0xf12,0xf12,0xf12,0x84c, -0x144c,0xf,0xd3b,0x852,0x1290,0x339,0x33c,0x33c,0x33c,0x33c,0x33c,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0xf1b, -0xf1b,0xf1b,0xf1b,0xf1b,0x855,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x8c7, -0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0x8c7,0xad4,0xad4,0xad4,0xc3c,0xc42,0xc3f,0xd38,0xd38,0xd38, -0xd38,0xd38,0xd38,0x128d,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x333,0x330, -0x32d,0x32a,0xb37,0xb37,0x8c4,0x339,0x339,0x345,0x339,0x33f,0x33f,0x33f,0x33f,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339, -0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x993,0x993,0x339,0x339,0x339,0x339,0x339,0x993, -0x33c,0x339,0x33c,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x339,0x993, -0x339,0x339,0x339,0x33c,0x348,0x339,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x321,0x32a,0x327, -0x327,0x324,0x324,0x324,0x324,0x342,0x342,0x324,0x324,0x32a,0x327,0x327,0x327,0x324,0xc4b,0xc4b, -0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x336,0x993,0x993,0x993,0x990,0x990,0xc4b, -0x9ab,0x9ab,0x9ab,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a5,0x9a2,0x9a5,0x9a2,0x12,0x996, -0x9a8,0x999,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8, -0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0x9a8,0xc4e,0xc4e,0xc4e, -0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f,0x99f, -0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x99c,0x12,0x12,0xc4e,0xc4e,0xc4e, -0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4, -0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xda4,0xfa2,0xfa2, -0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2,0xfa2, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1, -0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9b1,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae,0x9ae, -0x9ae,0xb3a,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15,0x15, -0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb2,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5, -0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xeb5,0xea9,0xea9,0xea9,0xea9,0xea9, -0xea9,0xea9,0xea9,0xea9,0xeb8,0xeb8,0xeac,0xeac,0xeaf,0xebe,0xebb,0x10e,0x10e,0x10e,0x10e,0x10e, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xab0,0xab0,0xab3,0xab3,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0xab0,0x72,0x72,0x72,0x72, -0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xce7,0xd2,0xd2,0xd2,0xd2,0xd2,0xd2, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1518,0x1518,0x1518,0x1518,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1515, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x1fe,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2,0x15d2, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0xd42,0xd52,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40, +0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xa40,0xcc2, +0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169, +0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x1169,0x10e9, +0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9, +0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x11a9,0x1129, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0xb74,0xb7b,0xb83,0xb8b,0x1727,0x1727,0x1727,0xb93,0xb9b,0xb9e,0x1757,0x174f,0xbd1,0xcfd,0xd01,0xd05, +0x4db,0x4db,0x4db,0x4db,0xd0d,0x18b6,0xd15,0xf39,0x15db,0xaa1,0xaa7,0xff7,0xba6,0x178f,0xc4b,0x4db, +0x15f0,0x15e3,0x15e8,0x172f,0xbae,0xbb6,0x1142,0x1148,0x1ab1,0xf56,0x1aa1,0x6cb,0x4db,0x4db,0x4db,0x4db, +0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0x1ad1,0xfa7,0xfaf,0xfb7,0x4db,0x4db,0x4db,0x4db, +0xbbe,0xbc1,0xda4,0x1b19,0xfef,0x6d3,0x4db,0x1088,0xc9e,0xd1d,0x4db,0x4db,0x1a66,0xeec,0xef4,0x1b59, +0xc25,0xc2c,0xc34,0x1922,0x1af9,0x4db,0x1ad9,0xfc7,0x192a,0xdac,0xdb4,0xdbc,0x1017,0x6db,0x4db,0x4db, +0x1932,0x1932,0x6e3,0x4db,0x1b86,0x10a0,0x1b7e,0x10a8,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0xdc4,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1987,0x1989,0xe39,0xe40,0x1942,0x193a,0xdcc,0xf19,0x1a5e,0xed4,0xedc,0xfbf,0x1a76,0x1a7a,0xf11,0x1037, +0xf8a,0xf8f,0x6eb,0x4db,0x1090,0x1098,0x1ac1,0xf97,0xf6c,0xf72,0xf7a,0xf82,0x4db,0x4db,0x4db,0x4db, +0x1bc6,0x1bbe,0x1132,0x113a,0x1b41,0x1b39,0x105e,0x4db,0x4db,0x4db,0x4db,0x4db,0x1b29,0x101f,0x1027,0x102f, +0x1af1,0x1ae9,0xfd7,0x112a,0x1a82,0xf29,0x6f3,0x4db,0x106e,0x1076,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc, +0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x17fc,0x1801,0xca6,0xcad,0xcad,0xcad, +0x1809,0x1809,0x1809,0xcb5,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x1b76,0x6fb,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a, +0x194a,0x194a,0x194c,0x194a,0x1954,0x194a,0x194a,0x194a,0x194a,0x194a,0x194a,0x1957,0x194a,0x194a,0x194a,0x194a, +0x194a,0x703,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991,0x1991, +0x1991,0xe48,0xfdf,0x70b,0x4db,0x4db,0x70f,0xf31,0x1b11,0x1b09,0xfff,0x1007,0x717,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x1a6e,0x1a6e,0xefc,0xf01,0xf09,0x4db,0x4db,0x1114, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x1aa9,0x1aa9,0x1aa9,0xf49,0xf4e,0x71f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0x15f8,0xaaf,0x1608,0xab7,0x1609,0x1600,0x1611,0x1617,0x161f,0xabf, +0x1747,0x1747,0x727,0x4db,0x4db,0x4db,0x4db,0x4db,0x1737,0x1737,0xbc9,0xcbd,0x4db,0x4db,0x4db,0x4db, +0x1650,0x1657,0xac7,0x165a,0xacf,0xad7,0xadf,0x1654,0xae7,0xaef,0xaf7,0x1659,0x1661,0x1650,0x1657,0x1653, +0x165a,0x1662,0x1651,0x1658,0x1654,0xafe,0x1627,0x162f,0x1636,0x163d,0x162a,0x1632,0x1639,0x1640,0xb06,0x1648, +0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e,0x1b9e, +0x1b8e,0x1b91,0x1b8e,0x1b98,0x10e0,0x72f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x110c,0x737,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x73b,0x103f,0x1b31,0x1045,0x1b31,0x104d,0x1052,0x1056,0x1056,0x10b0,0x10b8,0x10c0,0x10c8,0x10d0,0x10c8, +0x10d8,0x10c8,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743,0x743, +0x743,0x744,0xb0e,0x166a,0x166a,0x166a,0x74c,0x74c,0x74c,0x74c,0x173f,0x173f,0x173f,0x173f,0x173f,0x173f, +0x173f,0x754,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c,0x74c, +0x74c,0x74c,0x18be,0xd25,0x18c6,0x18c6,0xd29,0xe59,0xe61,0xe69,0xdd4,0xdda,0x196f,0xde2,0x1967,0xdea, +0xdee,0xdf5,0xdfd,0xe04,0xe0c,0xe11,0xe11,0xe11,0xe11,0xe11,0x19c0,0x19c8,0x19c0,0x19ce,0x19d6,0x19a1, +0x19de,0x19e6,0x19c0,0x19ee,0x19f6,0x19fd,0x1a05,0x19a9,0x19c0,0x1a08,0x19b1,0x19b8,0x1a10,0x1a16,0x1a92,0x1a99, +0x1a8a,0x1a1e,0x1a26,0x1a2e,0x1a36,0x1b01,0x1a3e,0x1a46,0xe71,0xe79,0x1999,0x1999,0x1999,0xe81,0x1ab9,0x1ab9, +0xf5e,0xf64,0xe50,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0xe51,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0x1ae1,0xfcf,0x4db,0x1bb6,0x1bae,0x10e8,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0xe99,0xea1,0xea9,0xeb1,0xeb9,0xec1,0xec8,0xecc,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x1b51,0x1b49,0x1066,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1b21,0x100f,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x10f0,0x10f5,0x10fd, +0x1104,0x111c,0x1122,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61,0x1b61, +0x1b61,0x1b66,0x1b61,0x1b61,0x1b61,0x107e,0x1080,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1150,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6, +0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1bd6,0x1158,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db,0x4db, +0x4db,0x4db,0x4db,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x119d,0x1160,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1168,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a, +0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x167a,0x11a5,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160, +0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x1160,0x116c,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x11ad,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x1a4e,0x11b5,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1505,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x150d,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515, +0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x1515,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d, +0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x151d,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672, +0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1672,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977, +0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1977,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6, +0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1ba6,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce, +0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x1bce,0x4ba,0x4ba,0x4ba,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x276,0x27f,0x279,0x279,0x27c,0x273,0x273,0x273,0x273,0x273,0x273, +0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x273,0x7a1,0x79b,0x780,0x777, +0x76e,0x76b,0x762,0x77d,0x768,0x774,0x777,0x792,0x789,0x77a,0x79e,0x771,0x75f,0x75f,0x75f,0x75f, +0x75f,0x75f,0x75f,0x75f,0x75f,0x75f,0x786,0x783,0x78c,0x78c,0x78c,0x79b,0x762,0x7ad,0x7ad,0x7ad, +0x7ad,0x7ad,0x7ad,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7, +0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x7a7,0x768,0x76e,0x774,0x798,0x75c,0x795,0x7aa,0x7aa,0x7aa, +0x7aa,0x7aa,0x7aa,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, +0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x768,0x78f,0x765,0x78c,0x273,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a,0x17a, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0, +0,0,0,0,0,0,0,0,0,0,0,0,0x282,0x282,0x282,0x282, +0x282,0x291,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282, +0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x282,0x285,0x5fa,0x7b6,0x7b9, +0x600,0x7b9,0x7b3,0x5f7,0x5ee,0x28b,0x60c,0x28e,0x7bc,0x5e5,0x603,0x7b0,0x5fd,0x609,0x5eb,0x5eb, +0x5f1,0x288,0x5f7,0x5f4,0x5ee,0x5eb,0x60c,0x28e,0x5e8,0x5e8,0x5e8,0x5fa,0x297,0x297,0x297,0x297, +0x297,0x297,0x615,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x297,0x615,0x297,0x297,0x297, +0x297,0x297,0x297,0x606,0x615,0x297,0x297,0x297,0x297,0x297,0x615,0x60f,0x612,0x612,0x294,0x294, +0x294,0x294,0x60f,0x294,0x612,0x612,0x612,0x294,0x612,0x612,0x294,0x294,0x60f,0x294,0x612,0x612, +0x294,0x294,0x294,0x606,0x60f,0x612,0x612,0x294,0x612,0x294,0x60f,0x294,0x2a3,0x61b,0x2a3,0x29a, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a0,0x618,0x2a3,0x61b, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x618,0x624,0x61e, +0x2a3,0x29a,0x2a3,0x29a,0x618,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x624,0x61e,0x621,0x618,0x2a3, +0x61b,0x2a3,0x29a,0x2a3,0x61b,0x627,0x621,0x618,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x621,0x618, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x621,0x618,0x2a3,0x29a,0x2a3,0x61b,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a, +0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x2a3,0x29a,0x2a3,0x29a,0x2a3,0x29a,0x29d,0x2a6,0x2b2,0x2b2,0x2a6, +0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2b2,0x2b2,0x2b2,0x2b2,0x2a6,0x2b2, +0x2b2,0x2a6,0x2b2,0x2b2,0x2b2,0x2a6,0x2a6,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2a6, +0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2b2,0x2a6,0x2a6,0x2b2,0x2a6,0x2b2,0x2b5,0x2a9,0x2b2,0x2b2,0x2b2, +0x2a6,0x2b2,0x2a6,0x2b2,0x2b2,0x2a6,0x2a6,0x2af,0x2b2,0x2a6,0x2a6,0x2a6,0x2af,0x2af,0x2af,0x2af, +0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b8,0x2b8,0x2ac,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5, +0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2b5,0x62a,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x2b2,0x2a6,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2a9,0x2b8,0x2b8,0x2ac, +0x2b5,0x2a9,0x990,0x990,0x993,0x98d,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9,0x2b5,0x2a9, +0x993,0x98d,0x993,0x98d,0x990,0x98a,0x993,0x98d,0xb4f,0xc51,0x990,0x98a,0x990,0x98a,0x993,0x98d, +0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0x993,0x98d,0xc51,0xc51,0xc51,0xd4a, +0xd4a,0xd4a,0xd4d,0xd4d,0xd4a,0xd4d,0xd4d,0xd4a,0xd4a,0xd4d,0xe8e,0xe91,0xe91,0xe91,0xe91,0xe8e, +0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0xe91,0xe8e,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x62d,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2be,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb, +0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x2bb,0x996,0x996,0x996, +0x996,0x996,0xc54,0xc54,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2cd,0x2cd,0x2cd, +0x2cd,0x2cd,0x2cd,0x2cd,0x2ca,0x2ca,0x2c1,0x2c1,0x633,0x2c1,0x2cd,0x636,0x2d0,0x636,0x636,0x636, +0x2d0,0x636,0x2cd,0x2cd,0x639,0x2d3,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x2c7,0x630,0x630,0x630,0x630, +0x2c4,0x630,0x2c1,0xac8,0x2d6,0x2d6,0x2d6,0x2d6,0x2d6,0x2c1,0x2c1,0x2c1,0x2c1,0x2c1,0x99f,0x99f, +0x99c,0x999,0x99c,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57,0xc57, +0xc57,0xc57,0xc57,0xc57,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c,0x63c, +0x63c,0x63c,0x63c,0x63c,0x63f,0x63f,0x8f4,0x63f,0x63f,0x8f7,0xacb,0xacb,0xacb,0xacb,0xacb,0xacb, +0xacb,0xacb,0xacb,0xc09,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xd1a,0xe55,0xe55,0xe55,0xe55, +0xe58,0xd1d,0xd1d,0xd1d,0x642,0x642,0xace,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e,0xc4e, +0xc4e,0xc4e,0xc4e,0xc4e,0xf3c,0xf39,0xf3c,0xf39,0x2e2,0x2eb,0xf3c,0xf39,9,9,0x2f1,0xe94, +0xe94,0xe94,0x2d9,0x1491,9,9,9,9,0x2ee,0x2dc,0x300,0x2df,0x300,0x300,0x300,9, +0x300,9,0x300,0x300,0x2f7,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x648, +0x648,0x648,0x648,0x648,0x648,0x648,9,0x648,0x648,0x648,0x648,0x648,0x648,0x648,0x300,0x300, +0x2f7,0x2f7,0x2f7,0x2f7,0x2f7,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x645, +0x645,0x645,0x645,0x645,0x645,0x645,0x2f4,0x645,0x645,0x645,0x645,0x645,0x645,0x645,0x2f7,0x2f7, +0x2f7,0x2f7,0x2f7,0xf3c,0x303,0x303,0x306,0x300,0x300,0x303,0x2fa,0x9a2,0xb58,0xb55,0x2fd,0x9a2, +0x2fd,0x9a2,0x2fd,0x9a2,0x2fd,0x9a2,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5,0x2e8,0x2e5, +0x2e8,0x2e5,0x2e8,0x2e5,0x303,0x303,0x2fa,0x2f4,0xb07,0xb04,0xb52,0xc5d,0xc5a,0xc60,0xc5d,0xc5a, +0xd50,0xd53,0xd53,0xd53,0x9b1,0x654,0x312,0x315,0x312,0x312,0x312,0x315,0x312,0x312,0x312,0x312, +0x315,0x9b1,0x315,0x312,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x654,0x651,0x651, +0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651,0x651, +0x651,0x651,0x651,0x651,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64e,0x64b,0x64b, +0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b,0x64b, +0x9ab,0x64e,0x30c,0x30f,0x30c,0x30c,0x30c,0x30f,0x30c,0x30c,0x30c,0x30c,0x30f,0x9ab,0x30f,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x309,0x900,0x903,0x8e5,0x8e5,0x10e6,0x9a5,0x9a5,0xb5e,0xb5b,0x9ae,0x9a8,0x9ae,0x9a8, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c,0x312,0x30c, +0x312,0x315,0x30f,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0x312,0x30c,0xb5e,0xb5b,0xe97, +0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f, +0x312,0x30c,0x315,0x30f,0x315,0x30f,0x315,0x30f,0x312,0x30c,0x315,0x30f,0x9b1,0x9ab,0x315,0x30f, +0x315,0x30f,0x315,0x30f,0x315,0x30f,0xd59,0xd56,0x315,0x30f,0xe9a,0xe97,0xe9a,0xe97,0xe9a,0xe97, +0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7,0xbca,0xbc7, +0xec7,0xec4,0xec7,0xec4,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7,0xfba,0xfb7, +0xfba,0xfb7,0xfba,0xfb7,0x111f,0x111c,0x12f9,0x12f6,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7,0x14ca,0x14c7, +0xc,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324, +0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0x324,0xc,0xc,0x327,0x318,0x318, +0x318,0x31b,0x318,0x318,0xc,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, +0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e, +0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x31e,0x321,0xc,0x86a,0x9b4,0xc,0xc,0x1494,0x1494,0x13ad, +0xf,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +0x924,0x924,0xd5c,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924,0x924, +0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0x32a,0xe9d,0x32a,0x32a,0x32a,0x336,0x32a, +0x32d,0x32a,0x32a,0x339,0x927,0xd5f,0xd62,0xd5f,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c, +0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0x33c,0xf,0xf,0xf,0xf,0xf, +0x33c,0x33c,0x33c,0x333,0x330,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf,0xf, +0xc63,0xc63,0xc63,0xc63,0x13b0,0x1497,0xf45,0xf45,0xf45,0xf42,0xf42,0xd6b,0x870,0xc72,0xc6f,0xc6f, +0xc66,0xc66,0xc66,0xc66,0xc66,0xc66,0xf3f,0xf3f,0xf3f,0xf3f,0xf3f,0x86d,0x148b,0x12,0xd68,0x873, +0x12c0,0x357,0x35a,0x35a,0x35a,0x35a,0x35a,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0xf48,0xf48,0xf48,0xf48,0xf48, +0x876,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb, +0x8eb,0x8eb,0x8eb,0xafe,0xafe,0xafe,0xc66,0xc6c,0xc69,0xd65,0xd65,0xd65,0xd65,0xd65,0xd65,0x12bd, +0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x906,0x351,0x34e,0x34b,0x348,0xb61,0xb61, +0x8e8,0x357,0x357,0x363,0x357,0x35d,0x35d,0x35d,0x35d,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357, +0x357,0x357,0x357,0x357,0x9ba,0x9ba,0x357,0x357,0x357,0x357,0x357,0x9ba,0x35a,0x357,0x35a,0x357, +0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x357,0x9ba,0x357,0x357,0x357,0x35a, +0x366,0x357,0x342,0x342,0x342,0x342,0x342,0x342,0x342,0x33f,0x348,0x345,0x345,0x342,0x342,0x342, +0x342,0x360,0x360,0x342,0x342,0x348,0x345,0x345,0x345,0x342,0xc75,0xc75,0x354,0x354,0x354,0x354, +0x354,0x354,0x354,0x354,0x354,0x354,0x9ba,0x9ba,0x9ba,0x9b7,0x9b7,0xc75,0x9d2,0x9d2,0x9d2,0x9cc, +0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9c9,0x9cc,0x9c9,0x15,0x9bd,0x9cf,0x9c0,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf, +0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0x9cf,0xc78,0xc78,0xc78,0x9c6,0x9c6,0x9c6,0x9c6, +0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c6,0x9c3,0x9c3,0x9c3,0x9c3, +0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x15,0x15,0xc78,0xc78,0xc78,0xdcb,0xdcb,0xdcb,0xdcb, +0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb, +0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc, +0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0xfcc,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8,0x9d8, +0x9d8,0x9d8,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0x9d5,0xb64,0x18,0x18, +0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0xedf,0xedf,0xedf,0xedf, +0xedf,0xedf,0xedf,0xedf,0xedf,0xedf,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2, +0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xee2,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6,0xed6, +0xee5,0xee5,0xed9,0xed9,0xedc,0xeeb,0xee8,0x111,0x111,0x111,0x111,0x111,0x17d3,0x17d3,0x17d3,0x17d3, +0x17d3,0x17d3,0x17d3,0x17d3,0x17d3,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xada,0xada,0xadd,0xadd, +0xada,0xada,0xada,0xada,0xada,0xada,0xada,0xada,0x75,0x75,0x75,0x75,0x1551,0x1551,0x1551,0x1551, +0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x1cb,0x154e,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1fe,0x1fe,0x1fe,0x1fe, +0x1fe,0x1fe,0x1fe,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0x160b,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x20a,0x20a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x20a,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0x17d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1e0,0x1e0,0x1e0,0x1e0, +0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0x1e0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1467,0x1467,0x1467,0x1467, +0x1467,0x1467,0x1467,0x1467,0x1467,0x1467,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x173d,0x173d,0x173d,0x173d, +0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x186,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x15f6,0x15f6,0x15f6,0x15f6, +0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x1f8,0x1f8,0x1f8,0x1f8,0x15fc,0x15fc,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x1548,0x1548,0x1548,0x1548, +0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x16aa,0x16aa,0x16aa,0x16aa, +0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0xdc2,0xdc2,0xdbf,0xdbf, +0xdbf,0xdc2,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0xde,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x234,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0x17d6,0x17d6,0x240,0x17d6, +0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x240,0x240,0x240,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x16fb,0x16fb,0x16fb,0x16fb,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225,0x225, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x183, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x15bd,0x1f8,0x1f8,0x1f8,0x1f8,0x15c3,0x15c3, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x1662,0x1662,0x1662,0x1662,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d,0x20d, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0xd9b,0xd9b,0xd98,0xd98,0xd98,0xd9b,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb,0xdb, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x234,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0,0,0,0,0x8fa,0x8fa, +0,0,0,0,0,0,0,0,0,0,0x921,0x921,3,3,3,3, 3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3, -0x145e,0x360,0x36f,0x36f,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x18,0x18,0x375, -0x375,0x18,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x375, -0x375,0x18,0x375,0x375,0x375,0x375,0x375,0x375,0x375,0x18,0x375,0x18,0x18,0x18,0x375,0x375, -0x375,0x375,0x18,0x18,0x363,0xc54,0x360,0x36f,0x36f,0x360,0x360,0x360,0x360,0x18,0x18,0x36f, -0x36f,0x18,0x18,0x372,0x372,0x366,0xd44,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x18,0x360, -0x18,0x18,0x18,0x18,0x378,0x378,0x18,0x378,0x375,0x375,0x360,0x360,0x18,0x18,0x8e5,0x8e5, -0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x8e5,0x375,0x375,0x36c,0x36c,0x369,0x369,0x369,0x369, -0x369,0x36c,0x369,0x10c8,0x18,0x18,0x18,0x18,0x1b,0xc57,0x37b,0xc5a,0x1b,0x387,0x387,0x387, -0x387,0x387,0x387,0x1b,0x1b,0x1b,0x1b,0x387,0x387,0x1b,0x1b,0x387,0x387,0x387,0x387,0x387, -0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x387,0x1b,0x387,0x387,0x387,0x387,0x387,0x387, -0x387,0x1b,0x387,0x38a,0x1b,0x387,0x38a,0x1b,0x387,0x387,0x1b,0x1b,0x37e,0x1b,0x384,0x384, -0x384,0x37b,0x37b,0x1b,0x1b,0x1b,0x1b,0x37b,0x37b,0x1b,0x1b,0x37b,0x37b,0x381,0x1b,0x1b, -0x1b,0xf24,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x38a,0x38a,0x38a,0x387,0x1b,0x38a,0x1b, -0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8,0x8e8, -0x37b,0x37b,0x387,0x387,0x387,0xf24,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b, -0x1e,0x38d,0x38d,0x396,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0xc63,0x399,0x1e,0x399, -0x399,0x399,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x399, -0x399,0x1e,0x399,0x399,0x399,0x399,0x399,0x399,0x399,0x1e,0x399,0x399,0x1e,0x399,0x399,0x399, -0x399,0x399,0x1e,0x1e,0x390,0x399,0x396,0x396,0x396,0x38d,0x38d,0x38d,0x38d,0x38d,0x1e,0x38d, -0x38d,0x396,0x1e,0x396,0x396,0x393,0x1e,0x1e,0x399,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x399,0xc63,0xc5d,0xc5d,0x1e,0x1e,0x8eb,0x8eb, -0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x8eb,0x1377,0xc60,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, -0x1e,0x166b,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x21,0x39c,0x3ab,0x3ab,0x21,0x3b1,0x3b1,0x3b1, -0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x21,0x3b1,0x3b1,0x21,0x21,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, -0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1,0x3b1, -0x3b1,0x21,0x3b1,0x3b1,0x21,0xc66,0x3b1,0x3b1,0x3b1,0x3b1,0x21,0x21,0x39f,0x3b1,0x39c,0x39c, -0x3ab,0x39c,0x39c,0x39c,0xf27,0x21,0x21,0x3ab,0x3ae,0x21,0x21,0x3ae,0x3ae,0x3a2,0x21,0x21, -0x21,0x21,0x21,0x21,0x21,0x21,0x39c,0x39c,0x21,0x21,0x21,0x21,0x3b4,0x3b4,0x21,0x3b1, -0x3b1,0x3b1,0xf27,0xf27,0x21,0x21,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8,0x3a8, -0x3a5,0xc66,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21, -0x24,0x24,0x3b7,0x3c3,0x24,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3, -0x3c3,0x24,0x3c3,0x3c3,0x3c6,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3,0x24,0x3c3,0x24,0x3c3,0x3c3, -0x24,0x24,0x24,0x3c3,0x3c3,0x24,0x24,0x24,0x3c3,0x3c3,0x8f4,0x24,0x24,0x24,0x3c3,0x3c3, -0x3c3,0x3c3,0x3c3,0x3c3,0x3c3,0x8f4,0xd47,0x3c3,0x3c3,0x3c3,0x24,0x24,0x24,0x24,0x3b7,0x3bd, -0x3b7,0x3bd,0x3bd,0x24,0x24,0x24,0x3bd,0x3bd,0x3bd,0x24,0x3c0,0x3c0,0x3c0,0x3ba,0x24,0x24, -0xf2a,0x24,0x24,0x24,0x24,0x24,0x24,0x3b7,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, -0x24,0x24,0xe5e,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8f1,0x8ee,0x8ee,0x8ee,0xc69, -0xc69,0xc69,0xc69,0xc69,0xc69,0xc6c,0xc69,0x24,0x24,0x24,0x24,0x24,0x1461,0x3d5,0x3d5,0x3d5, -0x27,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x3d8,0x3d8, -0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x1464,0x3d8,0x3d8,0x3d8,0x3d8,0x3d8,0x27,0x27, -0x27,0xf33,0x3c9,0x3c9,0x3c9,0x3d5,0x3d5,0x3d5,0x3d5,0x27,0x3c9,0x3c9,0x3cc,0x27,0x3c9,0x3c9, -0x3c9,0x3cf,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x3c9,0x3c9,0x27,0xf33,0xf33,0x166e,0x27, -0x27,0x27,0x27,0x27,0x3d8,0x3d8,0xf2d,0xf2d,0x27,0x27,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2,0x3d2, -0x3d2,0x3d2,0x3d2,0x3d2,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0xf30,0xf30,0xf30,0xf30, -0xf30,0xf30,0xf30,0xf30,0x2a,0x1467,0x3e4,0x3e4,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea, -0x2a,0x3ea,0x3ea,0x3ea,0x3ea,0x3ea,0x2a,0x2a,0xc6f,0xc72,0x3e4,0x3db,0x3e7,0x3e4,0x3db,0x3e4, -0x3e4,0x2a,0x3db,0x3e7,0x3e7,0x2a,0x3e7,0x3e7,0x3db,0x3de,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a, -0x2a,0x3db,0x3db,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3ea,0x2a,0x3ea,0x3ea,0xe76,0xe76, -0x2a,0x2a,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x2a,0xe79,0xe79,0x2a, -0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2d,0x146a,0x3f6,0x3f6, -0x2d,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x2d,0x3fc,0x3fc,0x3fc,0x2d,0x3fc,0x3fc, -0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x129f,0x3fc,0x3fc, -0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x3fc,0x129f,0x2d, -0x2d,0xf3f,0x3ed,0x3f6,0x3f6,0x3ed,0x3ed,0x3ed,0xf36,0x2d,0x3f6,0x3f6,0x3f6,0x2d,0x3f9,0x3f9, -0x3f9,0x3f0,0x129f,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x3ed,0x2d,0x2d,0x2d,0x2d, -0x2d,0x2d,0x2d,0x1671,0x3fc,0x3fc,0xf36,0xf36,0x2d,0x2d,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3,0x3f3, -0x3f3,0x3f3,0x3f3,0x3f3,0xf39,0xf39,0xf39,0xf39,0xf39,0xf39,0x2d,0x2d,0x2d,0xf3c,0xf3f,0xf3f, -0xf3f,0xf3f,0xf3f,0xf3f,0x30,0x30,0x9bd,0x9bd,0x30,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x30,0x30,0x9c3,0x9c3, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3, -0x9c3,0x9c3,0x30,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x9c3,0x30,0x30, -0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x9c3,0x30,0x30,0x30,0x9b7,0x30,0x30,0x30,0x30,0x9b4, -0x9bd,0x9bd,0x9b4,0x9b4,0x9b4,0x30,0x9b4,0x30,0x9bd,0x9bd,0x9c0,0x9bd,0x9c0,0x9c0,0x9c0,0x9b4, -0x30,0x30,0x30,0x30,0x30,0x30,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d,0x146d, -0x30,0x30,0x9bd,0x9bd,0x9ba,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x30, -0x33,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417, -0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417,0x417, -0x417,0x402,0x417,0x414,0x402,0x402,0x402,0x402,0x402,0x402,0x408,0x33,0x33,0x33,0x33,0x3ff, -0x41d,0x41d,0x41d,0x41d,0x41d,0x417,0x41a,0x405,0x405,0x405,0x405,0x405,0x405,0x402,0x405,0x40b, -0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x411,0x40e,0x40e,0x33,0x33,0x33,0x33, -0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, -0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x36,0x42c,0x42c,0x36, -0x42c,0x36,0x36,0x42c,0x42c,0x36,0x42c,0x36,0x36,0x42c,0x36,0x36,0x36,0x36,0x36,0x36, -0x42c,0x42c,0x42c,0x42c,0x36,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x42c,0x36,0x42c,0x42c,0x42c, -0x36,0x42c,0x36,0x42c,0x36,0x36,0x42c,0x42c,0x36,0x42c,0x42c,0x42c,0x42c,0x420,0x42c,0x429, -0x420,0x420,0x420,0x420,0x420,0x420,0x36,0x420,0x420,0x42c,0x36,0x36,0x435,0x435,0x435,0x435, -0x435,0x36,0x432,0x36,0x423,0x423,0x423,0x423,0x423,0x420,0x36,0x36,0x426,0x426,0x426,0x426, -0x426,0x426,0x426,0x426,0x426,0x426,0x36,0x36,0x42f,0x42f,0x137a,0x137a,0x36,0x36,0x36,0x36, +3,3,3,3,3,3,3,3,3,3,3,3,3,3,0x921,0x921, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, +0x149d,0x37e,0x38d,0x38d,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x1b,0x393, +0x393,0x1b,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x393, +0x393,0x1b,0x393,0x393,0x393,0x393,0x393,0x393,0x393,0x1b,0x393,0x1b,0x1b,0x1b,0x393,0x393, +0x393,0x393,0x1b,0x1b,0x381,0xc7e,0x37e,0x38d,0x38d,0x37e,0x37e,0x37e,0x37e,0x1b,0x1b,0x38d, +0x38d,0x1b,0x1b,0x390,0x390,0x384,0xd71,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x1b,0x37e, +0x1b,0x1b,0x1b,0x1b,0x396,0x396,0x1b,0x396,0x393,0x393,0x37e,0x37e,0x1b,0x1b,0x90c,0x90c, +0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x90c,0x393,0x393,0x38a,0x38a,0x387,0x387,0x387,0x387, +0x387,0x38a,0x387,0x10f5,0x1b,0x1b,0x1b,0x1b,0x1e,0xc81,0x399,0xc84,0x1e,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x1e,0x1e,0x1e,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x1e,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5,0x3a5, +0x3a5,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a8,0x1e,0x3a5,0x3a5,0x1e,0x1e,0x39c,0x1e,0x3a2,0x3a2, +0x3a2,0x399,0x399,0x1e,0x1e,0x1e,0x1e,0x399,0x399,0x1e,0x1e,0x399,0x399,0x39f,0x1e,0x1e, +0x1e,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x3a8,0x3a8,0x3a8,0x3a5,0x1e,0x3a8,0x1e, +0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f,0x90f, +0x399,0x399,0x3a5,0x3a5,0x3a5,0xf51,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e,0x1e, +0x21,0x3ab,0x3ab,0x3b4,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0xc8d,0x3b7,0x21,0x3b7, +0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7, +0x3b7,0x21,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x21,0x3b7,0x3b7,0x3b7, +0x3b7,0x3b7,0x21,0x21,0x3ae,0x3b7,0x3b4,0x3b4,0x3b4,0x3ab,0x3ab,0x3ab,0x3ab,0x3ab,0x21,0x3ab, +0x3ab,0x3b4,0x21,0x3b4,0x3b4,0x3b1,0x21,0x21,0x3b7,0x21,0x21,0x21,0x21,0x21,0x21,0x21, +0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x21,0x3b7,0xc8d,0xc87,0xc87,0x21,0x21,0x912,0x912, +0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x912,0x13b3,0xc8a,0x21,0x21,0x21,0x21,0x21,0x21, +0x21,0x16b9,0x21,0x21,0x21,0x21,0x21,0x21,0x24,0x3ba,0x3c9,0x3c9,0x24,0x3cf,0x3cf,0x3cf, +0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x24,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, +0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf,0x3cf, +0x3cf,0x24,0x3cf,0x3cf,0x24,0xc90,0x3cf,0x3cf,0x3cf,0x3cf,0x24,0x24,0x3bd,0x3cf,0x3ba,0x3ba, +0x3c9,0x3ba,0x3ba,0x3ba,0xf54,0x24,0x24,0x3c9,0x3cc,0x24,0x24,0x3cc,0x3cc,0x3c0,0x24,0x24, +0x24,0x24,0x24,0x24,0x24,0x24,0x3ba,0x3ba,0x24,0x24,0x24,0x24,0x3d2,0x3d2,0x24,0x3cf, +0x3cf,0x3cf,0xf54,0xf54,0x24,0x24,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6,0x3c6, +0x3c3,0xc90,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x12cc,0x24,0x24,0x24,0x24,0x24,0x24,0x24,0x24, +0x27,0x27,0x3d5,0x3e1,0x27,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1, +0x3e1,0x27,0x3e1,0x3e1,0x3e4,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x3e1,0x27,0x3e1,0x3e1, +0x27,0x27,0x27,0x3e1,0x3e1,0x27,0x27,0x27,0x3e1,0x3e1,0x91b,0x27,0x27,0x27,0x3e1,0x3e1, +0x3e1,0x3e1,0x3e1,0x3e1,0x3e1,0x91b,0xd74,0x3e1,0x3e1,0x3e1,0x27,0x27,0x27,0x27,0x3d5,0x3db, +0x3d5,0x3db,0x3db,0x27,0x27,0x27,0x3db,0x3db,0x3db,0x27,0x3de,0x3de,0x3de,0x3d8,0x27,0x27, +0xf57,0x27,0x27,0x27,0x27,0x27,0x27,0x3d5,0x27,0x27,0x27,0x27,0x27,0x27,0x27,0x27, +0x27,0x27,0xe8b,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x918,0x915,0x915,0x915,0xc93, +0xc93,0xc93,0xc93,0xc93,0xc93,0xc96,0xc93,0x27,0x27,0x27,0x27,0x27,0x14a0,0x3f3,0x3f3,0x3f3, +0x2a,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x3f6,0x3f6, +0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x14a3,0x3f6,0x3f6,0x3f6,0x3f6,0x3f6,0x2a,0x2a, +0x2a,0xf60,0x3e7,0x3e7,0x3e7,0x3f3,0x3f3,0x3f3,0x3f3,0x2a,0x3e7,0x3e7,0x3ea,0x2a,0x3e7,0x3e7, +0x3e7,0x3ed,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x3e7,0x3e7,0x2a,0xf60,0xf60,0x16bc,0x2a, +0x2a,0x2a,0x2a,0x2a,0x3f6,0x3f6,0xf5a,0xf5a,0x2a,0x2a,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0,0x3f0, +0x3f0,0x3f0,0x3f0,0x3f0,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0x2a,0xf5d,0xf5d,0xf5d,0xf5d, +0xf5d,0xf5d,0xf5d,0xf5d,0x1779,0x14a6,0x402,0x402,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x408,0x2d,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x408,0x408,0x408,0x408,0x408,0x2d,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408,0x408, +0x2d,0x408,0x408,0x408,0x408,0x408,0x2d,0x2d,0xc99,0xc9c,0x402,0x3f9,0x405,0x402,0x3f9,0x402, +0x402,0x2d,0x3f9,0x405,0x405,0x2d,0x405,0x405,0x3f9,0x3fc,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d, +0x2d,0x3f9,0x3f9,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x408,0x2d,0x408,0x408,0xea3,0xea3, +0x2d,0x2d,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x3ff,0x2d,0xea6,0xea6,0x2d, +0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x2d,0x30,0x14a9,0x414,0x414, +0x30,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x30,0x41a,0x41a,0x41a,0x30,0x41a,0x41a, +0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x41a,0x41a, +0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x41a,0x12cf,0x30, +0x30,0xf6c,0x40b,0x414,0x414,0x40b,0x40b,0x40b,0xf63,0x30,0x414,0x414,0x414,0x30,0x417,0x417, +0x417,0x40e,0x12d2,0x177c,0x30,0x30,0x30,0x30,0x177f,0x177f,0x177f,0x40b,0x177c,0x177c,0x177c,0x177c, +0x177c,0x177c,0x177c,0x16bf,0x41a,0x41a,0xf63,0xf63,0x30,0x30,0x411,0x411,0x411,0x411,0x411,0x411, +0x411,0x411,0x411,0x411,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0x177c,0x177c,0x177c,0xf69,0xf6c,0xf6c, +0xf6c,0xf6c,0xf6c,0xf6c,0x33,0x33,0x9e4,0x9e4,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9ea,0x9ea, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea, +0x9ea,0x9ea,0x33,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x9ea,0x33,0x33, +0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x9ea,0x33,0x33,0x33,0x9de,0x33,0x33,0x33,0x33,0x9db, +0x9e4,0x9e4,0x9db,0x9db,0x9db,0x33,0x9db,0x33,0x9e4,0x9e4,0x9e7,0x9e4,0x9e7,0x9e7,0x9e7,0x9db, +0x33,0x33,0x33,0x33,0x33,0x33,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac,0x14ac, +0x33,0x33,0x9e4,0x9e4,0x9e1,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33,0x33, +0x36,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, +0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435,0x435, +0x435,0x420,0x435,0x432,0x420,0x420,0x420,0x420,0x420,0x420,0x426,0x36,0x36,0x36,0x36,0x41d, +0x43b,0x43b,0x43b,0x43b,0x43b,0x435,0x438,0x423,0x423,0x423,0x423,0x423,0x423,0x420,0x423,0x429, +0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42f,0x42c,0x42c,0x36,0x36,0x36,0x36, 0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36, -0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x936,0x936,0x936,0x939, -0x936,0x936,0x936,0x936,0x39,0x936,0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x939,0x936, -0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x939,0x936,0x936,0x936,0x936,0x936,0x936,0x936, -0x936,0x936,0x936,0x936,0x936,0x939,0x9d2,0xf4b,0xf4b,0x39,0x39,0x39,0x39,0x903,0x903,0x906, -0x903,0x906,0x906,0x90f,0x906,0x90f,0x903,0x903,0x903,0x903,0x903,0x930,0x903,0x906,0x909,0x909, -0x90c,0x915,0x909,0x909,0x936,0x936,0x936,0x936,0x12a8,0x12a2,0x12a2,0x12a2,0x903,0x903,0x903,0x906, -0x903,0x903,0x9c6,0x903,0x39,0x903,0x903,0x903,0x903,0x906,0x903,0x903,0x903,0x903,0x906,0x903, -0x903,0x903,0x903,0x906,0x903,0x903,0x903,0x903,0x906,0x903,0x9c6,0x9c6,0x9c6,0x903,0x903,0x903, -0x903,0x903,0x903,0x903,0x9c6,0x906,0x9c6,0x9c6,0x9c6,0x39,0x9cf,0x9cf,0x9cc,0x9cc,0x9cc,0x9cc, -0x9cc,0x9cc,0x9c9,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x9cc,0x39,0xf42,0x9cc,0xd4a,0xd4a,0xf45,0xf48, -0xf42,0x10cb,0x10cb,0x10cb,0x10cb,0x12a5,0x12a5,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, +0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x36,0x39,0x44a,0x44a,0x39, +0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x39,0x39,0x39,0x39,0x39,0x39, +0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x44a,0x39,0x44a,0x44a,0x44a, +0x39,0x44a,0x39,0x44a,0x39,0x39,0x44a,0x44a,0x39,0x44a,0x44a,0x44a,0x44a,0x43e,0x44a,0x447, +0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x39,0x43e,0x43e,0x44a,0x39,0x39,0x453,0x453,0x453,0x453, +0x453,0x39,0x450,0x39,0x441,0x441,0x441,0x441,0x441,0x43e,0x39,0x39,0x444,0x444,0x444,0x444, +0x444,0x444,0x444,0x444,0x444,0x444,0x39,0x39,0x44d,0x44d,0x13b6,0x13b6,0x39,0x39,0x39,0x39, 0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39, -0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x3c,0x1380, -0x3c,0x3c,0x3c,0x3c,0x3c,0x1380,0x3c,0x3c,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x3f,0x9fc,0x9fc, -0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x9fc,0x3f,0x9fc,0x9fc, -0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x3f,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x3f,0x3f,0x12ab,0x12ab,0xd53,0xd56,0x9f6,0x9ff,0x9f3, -0x9f3,0x9f3,0x9f3,0x9ff,0x9ff,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f9,0x9f0,0x9f0, -0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x9f0,0x3f,0x3f,0x3f,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0x1677,0x42,0x42,0x1674,0x1674,0x1674,0x1674,0x1674,0x1674,0x42,0x42,0xa14,0xa17,0xa17,0xa17, -0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17, -0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa11,0xa0e,0x45,0x45,0x45,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1a,0xa1a,0xa1a,0xa1d,0xa1d,0xa1d,0x1470,0x1470,0x1470, -0x1470,0x1470,0x1470,0x1470,0x1470,0x48,0x48,0x48,0x48,0x48,0x48,0x48,0xa3e,0xa3e,0xa3e,0xa3e, -0xa3e,0xa3e,0xa20,0xa3e,0xa3e,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa26,0xa23, -0xa35,0xa35,0xa38,0xa41,0xa2f,0xa2c,0xa35,0xa32,0xa41,0xc75,0x4b,0x4b,0xa3b,0xa3b,0xa3b,0xa3b, -0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0xa3b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xc78,0xc78,0xc78,0xc78, -0xc78,0xc78,0xc78,0xc78,0xc78,0xc78,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa4d,0xa4d,0xacb,0xace, -0xa53,0xac8,0xa50,0xa4d,0xa56,0xa65,0xa59,0xa68,0xa68,0xa68,0xa47,0x4e,0xa5c,0xa5c,0xa5c,0xa5c, -0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0xa5c,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa4a,0xf6c,0x4e,0x4e,0x4e,0x4e,0x4e,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x51,0x51,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x51,0x51,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x51,0x45f,0x51,0x45f,0x51,0x45f,0x51,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x51,0x51,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45c,0x45c,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x456,0x45c,0x456,0x456,0x453,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x453,0x453,0x453,0x45c,0x45c,0x45c,0x45c, -0x51,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x51,0x453,0x453,0x453,0x45c,0x45c,0x45c,0x45c, -0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x453,0x453,0x453,0x51,0x51,0x45c,0x45c, -0x45c,0x51,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x459,0x456,0x51,0xb40,0xb43,0xb43,0xb43, -0xf75,0x54,0x144f,0x144f,0x144f,0x144f,0x468,0x468,0x468,0x468,0x468,0x468,0x4b0,0xb55,0x57,0x57, -0x66f,0x4b0,0x4b0,0x4b0,0x4b0,0x4b0,0x4b6,0x4c8,0x4b6,0x4c2,0x4bc,0x672,0x4ad,0x66c,0x66c,0x66c, -0x66c,0x4ad,0x4ad,0x4ad,0x4ad,0x4ad,0x4b3,0x4c5,0x4b3,0x4bf,0x4b9,0x57,0xd62,0xd62,0xd62,0xd62, -0xd62,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x12ae,0x57,0x57,0x57,0x4ce,0x4ce,0x4ce,0x4ce, -0x4ce,0x4ce,0x4ce,0x4cb,0x4d1,0x6e7,0x4ce,0x93f,0x960,0xa77,0xa77,0xa77,0xb58,0xb58,0xd65,0xd65, -0xd65,0xd65,0x10e3,0x10e6,0x10e6,0x12b1,0x1449,0x1473,0x1476,0x1476,0x167a,0x5a,0x5a,0x5a,0x5a,0x5a, -0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x5a,0x4d7,0x4d7,0x4d7,0x4d7, -0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d7,0x4d4,0x4d4,0x4d4,0x4d4,0x4d7,0xa7a,0xa7a, -0xb5b,0xb61,0xb61,0xb5e,0xb5e,0xb5e,0xb5e,0xd68,0xe7c,0xe7c,0xe7c,0xe7c,0x10b6,0x5d,0x5d,0x5d, -0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x507,0x507,0x507,0xa83, -0xe85,0xf7b,0xf7b,0xf7b,0xf7b,0x1215,0x167d,0x167d,0x60,0x60,0x60,0x60,0x699,0x699,0x699,0x699, -0x69c,0x69c,0x69c,0x69c,0x69c,0x69c,0x513,0x513,0x510,0x510,0x510,0x510,0xe8b,0xe8b,0xe8b,0xe88, -0xe88,0xe88,0xe88,0xe88,0x10ec,0x12ba,0x12ba,0x12ba,0x12ba,0x12b4,0x12b4,0x12b4,0x12bd,0x12b7,0x12b7,0x12bd, -0x1479,0x1479,0x1479,0x1479,0x147c,0x147c,0x147c,0x63,0x63,0x63,0x63,0x63,0x53d,0x53d,0x53d,0x53d, -0x53d,0xa8c,0xa8c,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66, -0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x66,0x540,0x540,0x540,0x540, -0x540,0x540,0x540,0x540,0x540,0x540,0x540,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, -0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0x6c,0xaa7,0xaa7,0xaa7,0xaa7,0xaaa,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaaa, -0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x75,0x7c8,0x7c2,0x7c8, -0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2, -0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c2,0x7c2,0x7c2,0x7c8, -0x7c2,0x7c8,0x7c2,0x7c8,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c8,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, -0x7c5,0xc03,0xc03,0x75,0x75,0x8d9,0x8d9,0x8a3,0x8a3,0x7cb,0x7ce,0xc00,0x78,0x78,0x78,0x78, -0x78,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0, -0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x7e0,0x10aa,0x78,0x78, -0x7b,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7b,0x8ac,0x8ac,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af,0x8af, -0x8af,0x8af,0x8af,0x8af,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9, -0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0x135c,0x135c,0x135c,0x7e, -0x7e,0x7e,0x7e,0x7e,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec,0x7ec, -0x7ec,0xd05,0xd05,0x81,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x81,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0x84,0x84,0x84,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, -0xac5,0xac5,0xac5,0xac5,0xac5,0xc0c,0xac5,0xac5,0xac5,0xc0c,0xac5,0x87,0x87,0x87,0x87,0x87, -0x87,0x87,0x87,0x87,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, -0x1149,0x1149,0x1149,0x1149,0x95a,0x95a,0x95a,0x95a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a,0x8a, -0x8a,0x8a,0x8a,0x8a,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be, -0x11be,0x11be,0x11be,0x11be,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x59a,0x8d,0x8d,0x8d,0x8d,0x8d, -0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x588,0x588,0x588,0x588,0x588,0x8d,0x8d,0x8d,0x8d, -0x8d,0xa98,0x58b,0x591,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x597,0x58e,0x591,0x591, -0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x591,0x8d,0x591,0x591,0x591,0x591, -0x591,0x8d,0x591,0x8d,0x591,0x591,0x8d,0x591,0x591,0x8d,0x591,0x591,0x591,0x591,0x591,0x591, -0x591,0x591,0x591,0x594,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x12cf,0x12cf,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac, -0x5a6,0x5ac,0x5ac,0x5a6,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0x5a9,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a6,0x5a9,0x5a6,0x5a6, -0x5a9,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a9,0x5a9,0x5a6, -0x5a9,0x5a9,0x5a9,0x5a9,0x90,0x90,0x5a9,0x5a9,0x5a9,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a6,0x5a6,0x90,0x90,0x90,0x90, -0x90,0x90,0x90,0x90,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0,0xae0, -0xae0,0xae0,0xae0,0xae0,0x5ac,0x5ac,0x8f7,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a3,0x5a3, -0xb9a,0xd1a,0x90,0x90,0x804,0x816,0x813,0x816,0x813,0xc21,0xc21,0xd11,0xd0e,0x807,0x807,0x807, -0x807,0x819,0x819,0x819,0x831,0x834,0x843,0x93,0x837,0x83a,0x846,0x846,0x82e,0x825,0x81f,0x825, -0x81f,0x825,0x81f,0x822,0x822,0x83d,0x83d,0x840,0x83d,0x83d,0x83d,0x93,0x83d,0x82b,0x828,0x822, -0x93,0x93,0x93,0x93,0x5b8,0x5c4,0x5b8,0xb9d,0x5b8,0x96,0x5b8,0x5c4,0x5b8,0x5c4,0x5b8,0x5c4, -0x5b8,0x5c4,0x5b8,0x5c4,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x96,0x96,0x5b5,0x708,0x70b,0x720,0x723,0x702,0x70b,0x70b,0x9c,0x6ea,0x6ed,0x6ed,0x6ed, -0x6ed,0x6ea,0x6ea,0x9c,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0x99,0xa9b,0xa9b,0xa9b, -0x95d,0x6e4,0x5c7,0x5c7,0x9c,0x732,0x711,0x702,0x70b,0x708,0x702,0x714,0x705,0x6ff,0x702,0x720, -0x717,0x70e,0x72f,0x702,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x72c,0x71d,0x71a, -0x720,0x720,0x720,0x732,0x6f3,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x9c,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0, -0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x6f0,0x9c,0x9c,0x6f0,0x6f0, -0x6f0,0x9c,0x9c,0x9c,0xae3,0xae3,0xae3,0xae3,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f,0x9f, -0x9f,0x9f,0x9f,0x9f,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, -0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xa2,0xa2,0xa2,0xa2,0xa2,0x15e1,0x15e1,0x15e1,0x15e1, -0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xa5,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xa8,0xa8,0xf87,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0x1683,0x1683,0x1683,0x1683, -0x1683,0x1683,0x1683,0x1683,0x1683,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8, -0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xab,0xb16,0xb16,0xab,0xab,0xb16,0xab, -0xab,0xb16,0xb16,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb13,0xb13,0xb13,0xb13,0xab,0xb13,0xab,0xb13,0xb13,0xb13,0xb13,0xc99,0xb13,0xb13, -0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb13, -0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xab,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16,0xab,0xb16,0xb16,0xb16,0xb16, -0xb16,0xab,0xb16,0xab,0xab,0xab,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xab,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xd83,0xd83,0xab,0xab, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13,0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xe94,0xe91,0xab,0xab,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xae,0xb1c,0xae,0xae,0xae,0xae,0xae,0xae, -0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae, -0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xae,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac,0xbac, -0xbac,0xbac,0xbac,0xbac,0xbac,0xb1,0xbac,0xbac,0xbac,0xbac,0xba6,0xba6,0xba9,0xb1,0xb1,0xb1, -0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5, -0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbaf,0xbaf,0xbb2,0xc15,0xc15,0xb4, -0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb, -0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbbb,0xbb8,0xbb8,0xb7,0xb7,0xb7,0xb7, -0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xbc1, -0xbc1,0xbc1,0xbc1,0xbc1,0xbc1,0xba,0xbc1,0xbc1,0xbc1,0xba,0xbbe,0xbbe,0xba,0xba,0xba,0xba, -0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab, -0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab,0xcab, -0xcab,0xcab,0xcab,0xcab,0xcab,0x148e,0x148e,0xbd,0xc9c,0xc9c,0xc9c,0xca8,0xca8,0xca8,0xca8,0xc9c, -0xc9c,0xca8,0xca8,0xca8,0xbd,0xbd,0xbd,0xbd,0xca8,0xca8,0xc9c,0xca8,0xca8,0xca8,0xca8,0xca8, -0xca8,0xc9f,0xc9f,0xc9f,0xbd,0xbd,0xbd,0xbd,0xca2,0xbd,0xbd,0xbd,0xcae,0xcae,0xca5,0xca5, -0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xca5,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1, -0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xcb1,0xc0,0xc0,0xcb1,0xcb1,0xcb1,0xcb1, -0xcb1,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0xc3,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491, -0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xc3,0xc3, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x1686,0x1686,0x1686,0x1686, -0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xc6,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xc6,0xcd8,0xcd8,0xcd8,0xcd8, -0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, +0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x39,0x95d,0x95d,0x95d,0x960, +0x95d,0x95d,0x95d,0x95d,0x3c,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d, +0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x960,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d,0x95d, +0x95d,0x95d,0x95d,0x95d,0x95d,0x960,0x9f9,0xf78,0xf78,0x3c,0x3c,0x3c,0x3c,0x92a,0x92a,0x92d, +0x92a,0x92d,0x92d,0x936,0x92d,0x936,0x92a,0x92a,0x92a,0x92a,0x92a,0x957,0x92a,0x92d,0x930,0x930, +0x933,0x93c,0x930,0x930,0x95d,0x95d,0x95d,0x95d,0x12db,0x12d5,0x12d5,0x12d5,0x92a,0x92a,0x92a,0x92d, +0x92a,0x92a,0x9ed,0x92a,0x3c,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a, +0x92a,0x92a,0x92a,0x92d,0x92a,0x92a,0x92a,0x92a,0x92d,0x92a,0x9ed,0x9ed,0x9ed,0x92a,0x92a,0x92a, +0x92a,0x92a,0x92a,0x92a,0x9ed,0x92d,0x9ed,0x9ed,0x9ed,0x3c,0x9f6,0x9f6,0x9f3,0x9f3,0x9f3,0x9f3, +0x9f3,0x9f3,0x9f0,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x9f3,0x3c,0xf6f,0x9f3,0xd77,0xd77,0xf72,0xf75, +0xf6f,0x10f8,0x10f8,0x10f8,0x10f8,0x12d8,0x12d8,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c, +0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x3c,0x459,0x459,0x459,0x459,0x459,0x459,0x3f,0x13bc, +0x3f,0x3f,0x3f,0x3f,0x3f,0x13bc,0x3f,0x3f,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, +0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86, +0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23, +0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0xa23,0x42,0xa23,0xa23, +0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0x42,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0x42,0x42,0x12de,0x12de,0xd80,0xd83,0xa1d,0xa26,0xa1a, +0xa1a,0xa1a,0xa1a,0xa26,0xa26,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa17,0xa17, +0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0xa17,0x42,0x42,0x42,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0x16c5,0x45,0x45,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x16c2,0x45,0x45,0xa3b,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e, +0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa3e,0xa38,0xa35,0x48,0x48,0x48,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa41,0xa41,0xa41,0xa44,0xa44,0xa44,0x14af,0x14af,0x14af, +0x14af,0x14af,0x14af,0x14af,0x14af,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0x4b,0xa65,0xa65,0xa65,0xa65, +0xa65,0xa65,0xa47,0xa65,0xa65,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4a,0xa4d,0xa4a, +0xa5c,0xa5c,0xa5f,0xa68,0xa56,0xa53,0xa5c,0xa59,0xa68,0xc9f,0x4e,0x4e,0xa62,0xa62,0xa62,0xa62, +0xa62,0xa62,0xa62,0xa62,0xa62,0xa62,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xca2,0xca2,0xca2,0xca2, +0xca2,0xca2,0xca2,0xca2,0xca2,0xca2,0x4e,0x4e,0x4e,0x4e,0x4e,0x4e,0xa77,0xa77,0xaf5,0xaf8, +0xa7d,0xaf2,0xa7a,0xa77,0xa80,0xa8f,0xa83,0xa92,0xa92,0xa92,0xa6e,0x51,0xa86,0xa86,0xa86,0xa86, +0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0x51,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa71,0xf99,0x51,0x51,0x51,0x51,0x51,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x54,0x54,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x54,0x54,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x54,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x54,0x54,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x471,0x477,0x471,0x471,0x46e,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, +0x54,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x54,0x46e,0x46e,0x46e,0x477,0x477,0x477,0x477, +0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x46e,0x46e,0x46e,0x54,0x54,0x477,0x477, +0x477,0x54,0x477,0x477,0x47a,0x47a,0x47a,0x47a,0x47a,0x474,0x471,0x54,0xb6a,0xb6d,0xb6d,0xb6d, +0xfa2,0x57,0x148e,0x148e,0x148e,0x148e,0x483,0x483,0x483,0x483,0x483,0x483,0x4ce,0xb7f,0x5a,0x5a, +0x68a,0x4ce,0x4ce,0x4ce,0x4ce,0x4ce,0x4d4,0x4e6,0x4d4,0x4e0,0x4da,0x68d,0x4cb,0x687,0x687,0x687, +0x687,0x4cb,0x4cb,0x4cb,0x4cb,0x4cb,0x4d1,0x4e3,0x4d1,0x4dd,0x4d7,0x5a,0xd8f,0xd8f,0xd8f,0xd8f, +0xd8f,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x12e1,0x5a,0x5a,0x5a,0x4ec,0x4ec,0x4ec,0x4ec, +0x4ec,0x4ec,0x4ec,0x4e9,0x4ef,0x702,0x4ec,0x966,0x987,0xaa1,0xaa1,0xaa1,0xb82,0xb82,0xd92,0xd92, +0xd92,0xd92,0x1110,0x1113,0x1113,0x12e4,0x1488,0x14b2,0x14b5,0x14b5,0x16c8,0x5d,0x5d,0x5d,0x5d,0x5d, +0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x5d,0x4f5,0x4f5,0x4f5,0x4f5, +0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4f2,0x4f2,0x4f2,0x4f2,0x4f5,0xaa4,0xaa4, +0xb85,0xb8b,0xb8b,0xb88,0xb88,0xb88,0xb88,0xd95,0xea9,0xea9,0xea9,0xea9,0x10e3,0x60,0x60,0x60, +0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x60,0x525,0x525,0x525,0xaad, +0xeb2,0xfa8,0xfa8,0xfa8,0xfa8,0x123f,0x16cb,0x16cb,0x63,0x63,0x63,0x63,0x6b4,0x6b4,0x6b4,0x6b4, +0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x6b7,0x531,0x531,0x52e,0x52e,0x52e,0x52e,0xeb8,0xeb8,0xeb8,0xeb5, +0xeb5,0xeb5,0xeb5,0xeb5,0x1119,0x1365,0x1365,0x1365,0x1365,0x12e7,0x12e7,0x12e7,0x1368,0x12ea,0x12ea,0x1368, +0x14b8,0x14b8,0x14b8,0x14b8,0x14bb,0x14bb,0x14bb,0x1782,0x1782,0x1782,0x1782,0x66,0x558,0x558,0x558,0x558, +0x558,0xab6,0xab6,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69, +0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x69,0x55b,0x55b,0x55b,0x55b, +0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x55b,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c, +0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0x6c,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0x6f,0xad1,0xad1,0xad1,0xad1,0xad4,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad4, +0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0x6f,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x72,0x78,0x7e9,0x7e3,0x7e9, +0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3, +0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9, +0x7e3,0x7e9,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e9,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, +0x7e6,0xc2d,0xc2d,0x78,0x78,0x8fd,0x8fd,0x8c7,0x8c7,0x7ec,0x7ef,0xc2a,0x7b,0x7b,0x7b,0x7b, +0x7b,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801, +0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x801,0x10d1,0x7b,0x7b, +0x7e,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x7e,0x8d0,0x8d0,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3,0x8d3, +0x8d3,0x8d3,0x8d3,0x8d3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3, +0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0xae3,0x1374,0x1374,0x1374,0x81, +0x81,0x81,0x81,0x81,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d,0x80d, +0x80d,0xd2f,0xd2f,0x84,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x813,0x813,0x813,0x84,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0x87,0x87,0x87,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xaef,0xaef,0xaef,0xaef,0xaef,0xc36,0xaef,0xaef,0xaef,0xc36,0xaef,0x8a,0x8a,0x8a,0x8a,0x8a, +0x8a,0x8a,0x8a,0x8a,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x981,0x981,0x981,0x981,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d,0x8d, +0x8d,0x8d,0x8d,0x8d,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8, +0x11e8,0x11e8,0x11e8,0x11e8,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x5b5,0x90,0x90,0x90,0x90,0x90, +0x90,0x90,0x90,0x90,0x90,0x90,0x90,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x90,0x90,0x90,0x90, +0x90,0xac2,0x5a6,0x5ac,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5b2,0x5a9,0x5ac,0x5ac, +0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac, +0x5ac,0x90,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x90,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, +0x5ac,0x5ac,0x5ac,0x5af,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x12f3,0x12f3,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7, +0x5c1,0x5c7,0x5c7,0x5c1,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1, +0x5c4,0x5c4,0x5c4,0x5c4,0x93,0x93,0x5c4,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c1,0x5c1,0x93,0x93,0x93,0x93, +0x93,0x93,0x93,0x93,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a,0xb0a, +0xb0a,0xb0a,0xb0a,0xb0a,0x5c7,0x5c7,0x91e,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be, +0xbc1,0xd47,0x93,0x93,0x825,0x837,0x834,0x837,0x834,0xc4b,0xc4b,0xd3b,0xd38,0x828,0x828,0x828, +0x828,0x83a,0x83a,0x83a,0x852,0x855,0x864,0x96,0x858,0x85b,0x867,0x867,0x84f,0x846,0x840,0x846, +0x840,0x846,0x840,0x843,0x843,0x85e,0x85e,0x861,0x85e,0x85e,0x85e,0x96,0x85e,0x84c,0x849,0x843, +0x96,0x96,0x96,0x96,0x5d3,0x5df,0x5d3,0xbc4,0x5d3,0x99,0x5d3,0x5df,0x5d3,0x5df,0x5d3,0x5df, +0x5d3,0x5df,0x5d3,0x5df,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc, +0x5d6,0x99,0x99,0x5d0,0x723,0x726,0x73b,0x73e,0x71d,0x726,0x726,0x9f,0x705,0x708,0x708,0x708, +0x708,0x705,0x705,0x9f,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0x9c,0xac5,0xac5,0xac5, +0x984,0x6ff,0x5e2,0x5e2,0x9f,0x74d,0x72c,0x71d,0x726,0x723,0x71d,0x72f,0x720,0x71a,0x71d,0x73b, +0x732,0x729,0x74a,0x71d,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x747,0x738,0x735, +0x73b,0x73b,0x73b,0x74d,0x70e,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b, +0x70b,0x70b,0x70b,0x9f,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, +0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b,0x70b,0x70b,0x70b,0x70b,0x9f,0x9f,0x70b,0x70b, +0x70b,0x9f,0x9f,0x9f,0xb0d,0xb0d,0xb0d,0xb0d,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2,0xa2, +0xa2,0xa2,0xa2,0xa2,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, +0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xa5,0xa5,0xa5,0xa5,0xa5,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xa8,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xab,0xab,0xfb4,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0x16d1,0x16d1, +0x16d1,0x16d1,0x16d1,0x16d1,0x16d1,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab, +0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xab,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xae,0xb40,0xb40,0xae,0xae,0xb40,0xae, +0xae,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xae,0xb3d,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xcc0,0xb3d,0xb3d, +0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d, +0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40,0xae,0xb40,0xb40,0xb40,0xb40, +0xb40,0xae,0xb40,0xae,0xae,0xae,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xae,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xdaa,0xdaa,0xae,0xae, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xec1,0xebe,0xae,0xae,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb1,0xb46,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1, +0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xb1,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xbd3, +0xbd3,0xbd3,0xbd3,0xbd3,0xbd3,0xb4,0xbd3,0xbd3,0xbd3,0xbd3,0xbcd,0xbcd,0xbd0,0xb4,0xb4,0xb4, +0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xb4,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc, +0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbdc,0xbd6,0xbd6,0xbd9,0xc3f,0xc3f,0xb7, +0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xb7,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2, +0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbe2,0xbdf,0xbdf,0xba,0xba,0xba,0xba, +0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xba,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, +0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbd,0xbe8,0xbe8,0xbe8,0xbd,0xbe5,0xbe5,0xbd,0xbd,0xbd,0xbd, +0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xbd,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, +0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0xcd2, +0xcd2,0xcd2,0xcd2,0xcd2,0xcd2,0x14cd,0x14cd,0xc0,0xcc3,0xcc3,0xcc3,0xccf,0xccf,0xccf,0xccf,0xcc3, +0xcc3,0xccf,0xccf,0xccf,0xc0,0xc0,0xc0,0xc0,0xccf,0xccf,0xcc3,0xccf,0xccf,0xccf,0xccf,0xccf, +0xccf,0xcc6,0xcc6,0xcc6,0xc0,0xc0,0xc0,0xc0,0xcc9,0xc0,0xc0,0xc0,0xcd5,0xcd5,0xccc,0xccc, +0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8, +0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xcd8,0xc3,0xc3,0xcd8,0xcd8,0xcd8,0xcd8, +0xcd8,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0xc3,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0x14d0,0xc6,0xc6, +0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0x16d4,0x16d4,0x16d4,0x16d4, 0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6, -0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xc6,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xc9,0xc9,0xc9,0xc9,0xc9,0xd17,0xd17,0xd17,0xcc, -0xcc,0xcc,0xcc,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xcc,0xcc,0xcc,0xd14, -0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1, -0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xce1, -0xce1,0xce1,0xce1,0xce1,0xce1,0xce1,0xcf,0xcde,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, -0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xd2,0xd2,0xced,0xced,0xced,0xced,0xced,0xced,0xd5,0xd5, -0xced,0xd5,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced, -0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xced,0xd5,0xced,0xced,0xd5,0xd5,0xd5, -0xced,0xd5,0xd5,0xced,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xd8,0xd8,0xd8,0xd8,0xd8, -0xd8,0xd8,0xd8,0xd8,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0x1494, -0x1494,0xde,0xde,0xde,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086, -0x135,0x135,0x135,0x135,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0, -0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xdb0,0xda7,0xda7,0xdad,0xdad,0xda7, -0xe1,0xe1,0xdaa,0xdaa,0x10b3,0x10b3,0x10b3,0x10b3,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4,0xe4, -0xe4,0xe4,0xe4,0xe4,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12,0xc12, -0xc12,0xc12,0xc12,0xc12,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0x1497,0x1497,0x1497,0x1497,0x1497, -0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x1497,0x149a,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, -0x12db,0x10f8,0xea3,0xea3,0xdc2,0xdbf,0xdc2,0xdbf,0xdbf,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0xdb6,0x1101, -0x10fe,0x1101,0x10fe,0x10fb,0x10fb,0x10fb,0x1389,0x1386,0xea,0xea,0xea,0xea,0xea,0xdbc,0xdb9,0xdb9, -0xdb9,0xdb6,0xdbc,0xdb9,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xed,0xed,0xed,0xed, -0xed,0xed,0xed,0xed,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xed,0xdc5,0xdc5,0xdc5,0xdc5, -0xdc5,0xdc5,0xdc5,0xed,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb,0xdcb, -0xdcb,0xdcb,0xdcb,0xdcb,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xf0,0xf0, -0xf0,0xf0,0xf0,0xf0,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xf3,0x138c,0xf3,0xf3,0xf3,0xf3, -0xf3,0x138c,0xf3,0xf3,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xf6,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, -0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1,0xdd1, -0xdd1,0xdd1,0xdd1,0xf6,0xde6,0xdda,0xdda,0xdda,0xf9,0xdda,0xdda,0xf9,0xf9,0xf9,0xf9,0xf9, -0xdda,0xdda,0xdda,0xdda,0xde6,0xde6,0xde6,0xde6,0xf9,0xde6,0xde6,0xde6,0xf9,0xde6,0xde6,0xde6, -0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6,0xde6, -0xde6,0xde6,0xde6,0xde6,0xf9,0xf9,0xf9,0xf9,0xdd7,0xdd7,0xdd7,0xf9,0xf9,0xf9,0xf9,0xddd, -0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xde0,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, -0xde3,0xde3,0xde3,0xde3,0xde3,0xde3,0xde9,0xde9,0xde0,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9,0xf9, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0x1107,0x1107,0xfc,0xfc,0xfc,0xfc, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf8,0xdf8,0xdf8,0xdf5,0xdf5,0xdf8,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xdf2,0xdf2,0xdf2,0xdf2, -0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0x1104,0xfc,0xfc,0xfc,0xdef,0xdef,0xdfe,0xdfe,0xdfe,0xdfe, -0xff,0xff,0xff,0xff,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfb,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x14a3,0x14a9,0x14a6,0x102, -0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, -0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102, -0xe25,0xe25,0xe25,0xe22,0xe22,0xe19,0xe19,0xe22,0xe1f,0xe1f,0xe1f,0xe1f,0x105,0x105,0x105,0x105, -0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1278,0x1275,0x159,0x159,0x159,0x159,0x159,0x159, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0x1398,0x1398,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0xe2b, -0x12e1,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x108,0x12de, -0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8,0xbe8, -0xe52,0xe43,0xe3d,0xe4f,0xe4c,0xe46,0xe46,0xe55,0xe40,0xe49,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b, -0xed6,0xed6,0xec1,0xed6,0xed9,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0x111,0x111,0x111,0x111, -0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xee2,0xee2,0xec7,0xecd,0xee2,0xee2, -0xeca,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec4,0xec4,0xec4,0xec4,0xec4, -0xec4,0xec4,0xec4,0xec4,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0xec7,0x111,0x111,0x111, -0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x12e7,0x12e4,0x139e,0x14b5,0x14b5,0x14b5,0x114,0x114, -0x14b5,0x14b5,0x168f,0x168f,0x168f,0x1689,0x168f,0x1689,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114, -0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x114,0x14b2,0x13a1,0x13a1,0x12e4,0xfe1, -0xfe1,0xfe1,0xfe1,0xfe1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xeee,0xeee,0xef4,0xef4,0x117,0x117,0x117,0x117, -0x117,0x117,0x117,0x117,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd, -0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xef7,0xef7,0xef7,0xef7,0x1110,0x1110, -0x11a,0x11a,0x11a,0xefa,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, -0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x1692,0x11d,0x11d, -0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, -0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d,0x11d, -0xf06,0xf06,0xf06,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x14be,0x120, -0xf03,0xf03,0xf03,0xf03,0x14bb,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, -0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, -0xf09,0xf09,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123,0x123, -0x1008,0x1008,0x1008,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0xff6,0xff6,0xff6,0xff6, -0xff6,0xff6,0xff6,0xff6,0x1005,0x1005,0xffc,0xff9,0x126,0x126,0x126,0x100b,0x100b,0xfff,0xfff,0xfff, -0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x1002,0x126,0x126,0x126,0x1008,0x1008,0x1008, -0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x100e,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011, -0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1023,0x1026,0x1026,0x129,0x129,0x129,0x129, -0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129,0x129, -0x104d,0x104d,0x104d,0x104d,0x1047,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x1053,0x1053, -0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x104a,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, -0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065,0x1065, -0x1065,0x1065,0x106b,0x106e,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f,0x1068, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x107d, -0x107d,0x1074,0x1074,0x107d,0x107d,0x1074,0x1074,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, -0x1080,0x1080,0x1080,0x1074,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1074,0x107d,0x132,0x132, -0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x132,0x132,0x1077,0x1083,0x1083,0x1083, -0x14ca,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, -0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135,0x135, -0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, -0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x108c,0x138,0x138, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f, -0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x13b,0x13b,0x13b, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x1092,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e,0x13e, -0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098, -0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x1098,0x141,0x141,0x141,0x141,0x141,0x1095, -0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x144,0x144,0x144,0x144, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147,0x147, -0x1116,0x1116,0x1116,0x1116,0x111f,0x1116,0x1116,0x1116,0x111f,0x1116,0x1116,0x1116,0x1116,0x1113,0x14a,0x14a, -0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x111c,0x14a, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d,0x14d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113a,0x1125,0x113a,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x150, -0x112e,0x1137,0x1125,0x1137,0x1137,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x1125,0x113a,0x113a,0x113a, -0x113a,0x113a,0x113a,0x1125,0x1125,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x112b,0x150,0x150,0x1128, -0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x150,0x150,0x150,0x150,0x150,0x150, -0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x1134,0x150,0x150,0x150,0x150,0x150,0x150, -0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1131,0x1140,0x1143,0x1143,0x1143,0x1143,0x1131,0x1131,0x150,0x150, -0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151e,0x151b,0x1d1, -0x1284,0x1269,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x126c,0x126c,0x126c,0x126c,0x127e,0x126c,0x126c, -0x126c,0x126c,0x1272,0x1440,0x1446,0x1443,0x143d,0x153,0x1665,0x1665,0x153,0x153,0x153,0x153,0x153,0x153, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x114f,0x114f,0x1152,0x115b,0x1155,0x1155,0x1155,0x115b,0x156,0x156,0x156,0x156,0x156,0x156,0x156,0x156, -0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e, -0x115e,0x115e,0x1164,0x128a,0x1164,0x1164,0x1164,0x1164,0x1161,0x1161,0x1161,0x1164,0x1698,0x169b,0x15c,0x15c, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257, -0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x1257,0x15f,0x15f,0x15f, -0x1179,0x116d,0x116d,0x116d,0x116d,0x116d,0x116d,0x1170,0x117f,0x117f,0x116d,0x116d,0x116d,0x116d,0x162,0x127b, -0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x162,0x162,0x162,0x162,0x116d,0x116d, -0x119d,0x1191,0x119d,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165, -0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x165,0x119a,0x119a,0x11a0,0x1194,0x1197, -0x11b5,0x11b5,0x11b5,0x11af,0x11af,0x11a6,0x11af,0x11af,0x11a6,0x11af,0x11af,0x11b8,0x11b2,0x11a9,0x168,0x168, -0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x11ac,0x168,0x168,0x168,0x168,0x168,0x168, -0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x11be,0x16b,0x16b,0x16b,0x16b,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb, -0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x11bb,0x16b,0x16b,0x16b,0x16b,0x11c7,0x11c7,0x11c7,0x11c7, -0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7,0x11c7, -0x11c7,0x11c7,0x16e,0x11c4,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11c1,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x171,0x171,0x171,0x11d0,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11d3,0x11dc,0x11dc,0x11dc,0x11dc, -0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc,0x11dc, -0x11dc,0x11dc,0x174,0x174,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11d9,0x11e2,0x11e2,0x11e2,0x11e2, -0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x11e2,0x177, -0x177,0x177,0x177,0x177,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11e8,0x11e8,0x11e8,0x11e8, -0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8, -0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x17d,0x1206,0x1206,0x180,0x180, -0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x180,0x141f,0x141f,0x141f,0x141f, -0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1239,0x1239,0x1239,0x1239, -0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x14d6,0x14d6,0x186,0x186,0x186,0x1239,0x1239,0x1239,0x1239, -0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x1239,0x123c, -0x123c,0x123c,0x1212,0x186,0x1356,0x1245,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356,0x1356, -0x1356,0x1245,0x1356,0x1245,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x13b0,0x13b0, -0x186,0x186,0x186,0x186,0x1359,0x1359,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1242,0x1353,0x1242, -0x1242,0x1353,0x1359,0x1248,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1236,0x1236, -0x1236,0x1236,0x1350,0x134a,0x123f,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x186, -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, -0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186,0x186, -0x186,0x186,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0, -0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x12f0,0x1263,0x1365,0x135f,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x125d,0x125d,0x125d,0x125d, -0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1260,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d, -0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x125d,0x1260,0x125d,0x125d,0x1365,0x1365,0x1365,0x1365,0x1365,0x135f, -0x1365,0x1365,0x1365,0x189,0x189,0x189,0x189,0x189,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, -0x125a,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1362,0x1362,0x189,0x189,0x189,0x189,0x189,0x189, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xcff,0xcff,0xc9,0xcff,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xcff,0xcff,0xcff,0xcff, +0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, +0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9, +0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xc9,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xcc,0xcc,0xcc,0xcc,0xcc,0xd44,0xd44,0xd44,0xcf, +0xcf,0xcf,0xcf,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e, +0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xd3e,0xcf,0xcf,0xcf,0xd41, +0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd41,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, +0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd08, +0xd08,0xd08,0xd08,0xd08,0xd08,0xd08,0xd2,0xd05,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, +0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd11, +0xd11,0xd11,0xd11,0xd11,0xd11,0xd11,0xd5,0xd5,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e,0xd0e, +0xd0e,0xd0e,0xd5,0xd5,0xd5,0xd5,0xd5,0xd5,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd8, +0xd14,0xd8,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14, +0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd14,0xd8,0xd14,0xd14,0xd8,0xd8,0xd8, +0xd14,0xd8,0xd8,0xd14,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xdb,0xdb,0xdb,0xdb,0xdb, +0xdb,0xdb,0xdb,0xdb,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0x14d3, +0x14d3,0x1785,0x1785,0xe1,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0,0x10b0, +0x138,0x138,0x138,0x138,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7, +0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdd7,0xdce,0xdce,0xdd4,0xdd4,0xdce, +0xe4,0xe4,0xdd1,0xdd1,0x10e0,0x10e0,0x10e0,0x10e0,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7,0xe7, +0xe7,0xe7,0xe7,0xe7,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c,0xc3c, +0xc3c,0xc3c,0xc3c,0xc3c,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6, +0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d6,0x14d9,0xea,0xea,0xea,0xea,0xea,0x1788, +0x12ff,0x1122,0xed0,0xed0,0xde9,0xde6,0xde9,0xde6,0xde6,0xddd,0xddd,0xddd,0xddd,0xddd,0xddd,0x112b, +0x1128,0x112b,0x1128,0x1125,0x1125,0x1125,0x13c5,0x13c2,0xed,0xed,0xed,0xed,0xed,0xde3,0xde0,0xde0, +0xde0,0xddd,0xde3,0xde0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xf0,0xf0,0xf0,0xf0, +0xf0,0xf0,0xf0,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xf0,0xdec,0xdec,0xdec,0xdec, +0xdec,0xdec,0xdec,0xf0,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2,0xdf2, +0xdf2,0xdf2,0xdf2,0xdf2,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xdef,0xf3,0xf3, +0xf3,0xf3,0xf3,0xf3,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xf6,0x13c8,0xf6,0xf6,0xf6,0xf6, +0xf6,0x13c8,0xf6,0xf6,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xf9,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, +0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8,0xdf8, +0xdf8,0xdf8,0xdf8,0xf9,0xe0d,0xe01,0xe01,0xe01,0xfc,0xe01,0xe01,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe01,0xe01,0xe01,0xe01,0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d,0xfc,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d, +0xe0d,0xe0d,0xe0d,0xe0d,0xfc,0xfc,0xfc,0xfc,0xdfe,0xdfe,0xdfe,0xfc,0xfc,0xfc,0xfc,0xe04, +0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe0a,0xe10,0xe10,0xe07,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc,0xfc, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0x1131,0x1131,0xff,0xff,0xff,0xff, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1f,0xe1f,0xe1f,0xe1c,0xe1c,0xe1f,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xff,0xff,0xff,0xff,0xff,0xff,0xe19,0xe19,0xe19,0xe19, +0xe19,0xe19,0xe19,0xe19,0xe19,0xe19,0x112e,0xff,0xff,0xff,0xe16,0xe16,0xe25,0xe25,0xe25,0xe25, +0x102,0x102,0x102,0x102,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe22,0xe25,0xe25,0xe25, +0xe25,0xe25,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x102,0x14e2,0x14e8,0x14e5,0x1830, +0x178b,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, +0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105,0x105, +0x105,0x105,0x105,0x105,0xe4c,0xe4c,0xe4c,0xe49,0xe49,0xe40,0xe40,0xe49,0xe46,0xe46,0xe46,0xe46, +0x108,0x108,0x108,0x108,0x129c,0x129c,0x129c,0x129c,0x129c,0x129c,0x129f,0x129f,0x12a2,0x129f,0x15c,0x15c, +0x15c,0x15c,0x15c,0x15c,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0x13d4,0x13d4,0x10b,0x10b,0x10b,0x10b, +0x10b,0x10b,0x10b,0xe52,0x1305,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b,0x10b, +0x10b,0x10b,0x10b,0x1302,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, +0xc0f,0xc0f,0xc0f,0xc0f,0xe7f,0xe70,0xe6a,0xe7c,0xe79,0xe73,0xe73,0xe82,0xe6d,0xe76,0x10e,0x10e, +0x10e,0x10e,0x10e,0x10e,0xf03,0xf03,0xeee,0xf03,0xf06,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, +0x114,0x114,0x114,0x114,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xefd,0xf0f,0xf0f, +0xef4,0xefa,0xf0f,0xf0f,0xef7,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef1, +0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4,0xef4, +0xef4,0x114,0x114,0x114,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x130b,0x1308,0x13da,0x14f4, +0x14f4,0x14f4,0x178e,0x117,0x14f4,0x14f4,0x16dd,0x16dd,0x16dd,0x16d7,0x16dd,0x16d7,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117, +0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x117,0x14f1, +0x13dd,0x13dd,0x1308,0x100b,0x100b,0x100b,0x100b,0x100b,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1b,0xf1b,0xf21,0xf21, +0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0x11a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a, +0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf2a,0xf24,0xf24, +0xf24,0xf24,0x113a,0x113a,0x11d,0x11d,0x11d,0xf27,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x16e0,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120,0x120, +0x120,0x120,0x120,0x120,0xf33,0xf33,0xf33,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd,0x14fd, +0x14fd,0x14fd,0x14fd,0x123,0xf30,0xf30,0xf30,0xf30,0x14fa,0x123,0x123,0x123,0x123,0x123,0x123,0x123, +0x123,0x123,0x123,0x123,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0xf36, +0xf36,0xf36,0xf36,0xf36,0xf36,0xf36,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126,0x126, +0x126,0x126,0x126,0x126,0x1032,0x1032,0x1032,0x1032,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f,0x102f, +0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x1020,0x102f,0x102f,0x1026,0x1023,0x129,0x129,0x129,0x1035, +0x1035,0x1029,0x1029,0x1029,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x102c,0x129,0x129, +0x129,0x1032,0x1032,0x1032,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x1038,0x103b,0x103b, +0x103b,0x103b,0x103b,0x103b,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x1050,0x1050, +0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c,0x12c, +0x12c,0x12c,0x12c,0x12c,0x1077,0x1077,0x1077,0x1077,0x1071,0x1791,0x12f,0x12f,0x12f,0x12f,0x12f,0x12f, +0x12f,0x12f,0x107d,0x107d,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x1074,0x12f,0x12f, +0x12f,0x12f,0x12f,0x12f,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x108f,0x108f,0x108f,0x108f,0x108f, +0x108f,0x108f,0x108f,0x108f,0x108f,0x108f,0x1095,0x1098,0x132,0x132,0x132,0x132,0x132,0x132,0x132,0x132, +0x132,0x132,0x132,0x1092,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x109e,0x109e,0x109e, +0x109e,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x10a7,0x10a7,0x109e,0x109e,0x135,0x135,0x135,0x135,0x135, +0x135,0x135,0x135,0x135,0x10aa,0x10aa,0x10aa,0x109e,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x109e,0x10a7,0x135,0x135,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x10a4,0x135,0x135, +0x10a1,0x10ad,0x10ad,0x10ad,0x1509,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, +0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138,0x138, +0x138,0x138,0x138,0x138,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, +0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, +0x10b3,0x10b6,0x13b,0x13b,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, +0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9,0x10b9, +0x10b9,0x13e,0x13e,0x13e,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141,0x141, +0x141,0x141,0x141,0x141,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2, +0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x10c2,0x144,0x144, +0x144,0x144,0x144,0x10bf,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, +0x147,0x147,0x147,0x147,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a,0x14a, +0x14a,0x14a,0x14a,0x14a,0x1140,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140,0x1149,0x1140,0x1140,0x1140, +0x1140,0x113d,0x14d,0x14d,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146,0x1146, +0x1146,0x1146,0x1146,0x14d,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x150,0x150,0x150,0x150,0x150,0x150, +0x150,0x150,0x150,0x150,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1164,0x114f,0x1164,0x114f,0x114f,0x114f,0x114f, +0x114f,0x114f,0x114f,0x153,0x1158,0x1161,0x114f,0x1161,0x1161,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f,0x114f, +0x114f,0x1164,0x1164,0x1164,0x1164,0x1164,0x1164,0x114f,0x114f,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155,0x1155, +0x1155,0x153,0x153,0x1152,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, +0x153,0x153,0x153,0x153,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x115e,0x153,0x153, +0x153,0x153,0x153,0x153,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x115b,0x116a,0x116d,0x116d,0x116d,0x116d, +0x115b,0x115b,0x153,0x153,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557,0x1557, +0x1557,0x1557,0x1554,0x1d1,0x12b1,0x1290,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x12ab,0x1293,0x1293,0x1293, +0x1293,0x12ab,0x1293,0x1293,0x1293,0x1293,0x1299,0x147f,0x1485,0x1482,0x147c,0x156,0x16ad,0x16ad,0x156,0x156, +0x156,0x156,0x156,0x156,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1179,0x1179,0x117c,0x1185,0x117f,0x117f,0x117f,0x1185,0x159,0x159,0x159,0x159, +0x159,0x159,0x159,0x159,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, +0x1188,0x1188,0x1188,0x1188,0x1188,0x12b7,0x118e,0x12ba,0x118e,0x118e,0x118e,0x118e,0x118b,0x118b,0x118b,0x118e, +0x16e6,0x16e9,0x15f,0x15f,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e,0x127e, +0x127e,0x162,0x162,0x162,0x11a3,0x1197,0x1197,0x1197,0x1197,0x1197,0x1197,0x119a,0x11a9,0x11a9,0x1197,0x1197, +0x1197,0x1197,0x165,0x12a5,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x119d,0x165,0x165, +0x165,0x165,0x1197,0x1197,0x11c7,0x11bb,0x11c7,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168, +0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x168,0x11c4, +0x11c4,0x11ca,0x11be,0x11c1,0x11df,0x11df,0x11df,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11d0,0x11d9,0x11d9,0x11e2, +0x11dc,0x11d3,0x16b,0x16b,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x16b,0x16b, +0x16b,0x16b,0x16b,0x16b,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x11e8,0x16e,0x16e,0x16e,0x16e,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, +0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x16e,0x16e,0x16e,0x16e, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1, +0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x11f1,0x171,0x11ee,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb,0x11eb, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x174,0x174,0x174,0x11fa,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd,0x11fd, +0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x1206, +0x1206,0x1206,0x1206,0x1206,0x1206,0x1206,0x177,0x177,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203,0x1203, +0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c,0x120c, +0x120c,0x120c,0x120c,0x17a,0x17a,0x17a,0x17a,0x17a,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, +0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212, +0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x1212,0x180, +0x1230,0x1230,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183,0x183, +0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x1515,0x1515,0x189,0x189,0x189, +0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a,0x125a, +0x125a,0x125a,0x125a,0x125d,0x125d,0x125d,0x123c,0x189,0x135f,0x1266,0x135f,0x135f,0x135f,0x135f,0x135f,0x135f, +0x135f,0x135f,0x135f,0x135f,0x135f,0x1266,0x135f,0x1266,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x13ec,0x13ec,0x189,0x189,0x189,0x189,0x1362,0x1362,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c, +0x135c,0x1263,0x135c,0x1263,0x1263,0x135c,0x1362,0x1269,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f,0x180f, +0x180f,0x180f,0x180f,0x180f,0x180f,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, 0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189, -0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x12f9,0x12f9,0x12f9,0x12f9, -0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f9, -0x12f9,0x12f9,0x12f9,0x12f9,0x12f9,0x12f3,0x12f3,0x12f3,0x18c,0x18c,0x12f6,0x18c,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x12fc,0x1305,0x12ff,0x12ff,0x1305,0x1305,0x1305,0x12ff,0x1305,0x12ff,0x12ff,0x12ff,0x1308,0x1308, -0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x18f,0x1302,0x1302,0x1302,0x1302,0x192,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x192,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x192,0x192,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x130e,0x130e,0x130e,0x130e, -0x130e,0x130e,0x130e,0x192,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x130e,0x192,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x1311,0x1311,0x1311,0x1311, -0x1311,0x1311,0x1314,0x1326,0x1326,0x131a,0x131a,0x131a,0x131a,0x131a,0x195,0x195,0x195,0x195,0x1317,0x1317, -0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x1317,0x131d,0x131d, -0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x195, -0x195,0x195,0x195,0x195,0x195,0x195,0x195,0x14d9,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x136b,0x1368,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, -0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x132c,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x19e,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x14dc,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132f,0x19e,0x132c,0x132c,0x132c, -0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x132c,0x14dc,0x14dc,0x14dc,0x14dc, -0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc,0x14dc, -0x14dc,0x14dc,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e2,0x14e8, -0x14e8,0x14ee,0x14e8,0x14e8,0x14e8,0x14e8,0x1a1,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x1a1,0x14e8,0x14e2,0x14e2, -0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341,0x14f7,0x14f7, -0x14f7,0x14f7,0x14f7,0x14fa,0x14fd,0x14fa,0x14fa,0x14fa,0x16aa,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14fa,0x14f7,0x14f7, -0x14f7,0x14fa,0x14f7,0x14fd,0x14fd,0x1a4,0x1a4,0x1a4,0x14fa,0x14f7,0x14f7,0x14fa,0x1a4,0x1a4,0x1a4,0x1a4, -0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, -0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1a7,0x1a7,0x1a7,0x1a7, -0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x13bf,0x1503,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x13bf, -0x13bf,0x13bf,0x13bf,0x13bf,0x13bf,0x1503,0x1503,0x1503,0x1503,0x1503,0x1503,0x16b0,0x16b0,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, -0x1aa,0x1aa,0x1aa,0x16ad,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9,0x13b9, -0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x13bc,0x1500, -0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x1ad,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5,0x1ad,0x13c5, -0x1ad,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x1ad, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5, -0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x13c5,0x1ad,0x1ad,0x1ad,0x1ad, +0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x189,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, +0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314,0x1314, +0x1314,0x1314,0x1314,0x1314,0x128a,0x137d,0x137a,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287,0x1284, +0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1284,0x1287, +0x1284,0x1284,0x137d,0x137d,0x137d,0x137d,0x137d,0x137a,0x137d,0x137d,0x137d,0x1812,0x18c,0x18c,0x18c,0x18c, +0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x1281,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x13aa,0x13aa,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c,0x18c, +0x18c,0x18c,0x18c,0x18c,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d, +0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x131d,0x1317,0x1317,0x1317, +0x18f,0x18f,0x131a,0x18f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1320,0x1329,0x1323,0x1323,0x1329,0x1329, +0x1329,0x1323,0x1329,0x1323,0x1323,0x1323,0x132c,0x132c,0x192,0x192,0x192,0x192,0x192,0x192,0x192,0x192, +0x1326,0x1326,0x1326,0x1326,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332, +0x1332,0x1332,0x1332,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x195,0x195,0x195,0x195, +0x195,0x195,0x195,0x195,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x195,0x1332,0x1332,0x1332,0x1332, +0x1332,0x1332,0x1332,0x195,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, +0x15b4,0x15b4,0x15b4,0x15b4,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x134a,0x134a,0x133e,0x133e,0x133e, +0x133e,0x133e,0x198,0x198,0x198,0x198,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, +0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, +0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x198,0x1518, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b,0x19b, +0x1383,0x1380,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e,0x19e, +0x19e,0x19e,0x19e,0x19e,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1a1,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x151b,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1386,0x1a1,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350,0x1350, +0x1350,0x1350,0x1350,0x1350,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b, +0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x151b,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1,0x1a1, +0x1a1,0x1a1,0x1a1,0x1a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x1533,0x1533,0x1533,0x1533,0x1533,0x1536, +0x16a4,0x1536,0x1536,0x1536,0x176d,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1536,0x1536,0x1536,0x1536,0x1536,0x1536,0x1533,0x1533,0x1533,0x1536,0x1533,0x16a1, +0x16a1,0x1a4,0x1a4,0x1a4,0x1536,0x1533,0x1533,0x1536,0x181b,0x181b,0x181b,0x1a4,0x1a4,0x1a4,0x1a4,0x1a4, +0x1a4,0x1a4,0x1a4,0x1a4,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7,0x1a7, +0x1a7,0x1a7,0x1a7,0x1a7,0x13f8,0x153c,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8,0x13f8, +0x13f8,0x153c,0x153c,0x153c,0x153c,0x153c,0x153c,0x16f2,0x16f2,0x1aa,0x179d,0x179d,0x179d,0x179d,0x179d,0x179d, +0x179d,0x179d,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa, +0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x1aa,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a,0x179a, +0x179a,0x179a,0x179a,0x179a,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe, +0x1ad,0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x1ad,0x13fe,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe, +0x13fe,0x1ad,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x1ad,0x13fe, +0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, 0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13c2,0x13c2,0x1ad,0x1ad, -0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13c8,0x13c8,0x13c8,0x13c8,0x13c8,0x13d7,0x13c8,0x13cb,0x13cb,0x13c8,0x13c8,0x13c8,0x13ce, -0x13ce,0x1b0,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d4,0x13d1,0x13dd,0x13dd,0x13dd, -0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x158d,0x158d,0x158d,0x158d, -0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x13e9,0x13e9,0x13e9,0x13e9, -0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e6,0x13e0,0x13e0,0x13e6,0x13e6,0x13ef,0x13ef,0x13e9,0x13ec, -0x13ec,0x13e6,0x13e3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x13f2,0x13f2,0x13f2,0x13f2, -0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2, -0x13f2,0x13f2,0x13f2,0x13f2,0x1b6,0x1b6,0x1b6,0x1b6,0x16b3,0x16b3,0x13f2,0x13f2,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x1b6,0x1b6,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x13fe,0x13fb,0x13fb,0x13fb, -0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb, -0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x13fb,0x1b9, -0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x13f8, -0x13f8,0x13f8,0x13f8,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401,0x1401, -0x1413,0x1416,0x1416,0x1416,0x1416,0x1419,0x1419,0x1407,0x140a,0x16b9,0x16b6,0x16b6,0x16b6,0x1509,0x1bc,0x1bc, -0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x1506,0x16bf,0x16c2,0x16bc,0x16c5,0x16c5, -0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x141f,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, -0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x141c,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf,0x1bf, -0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2,0x1c2, -0x1281,0x127e,0x1281,0x126f,0x127e,0x127e,0x127e,0x1284,0x127e,0x1284,0x1287,0x127e,0x1284,0x1284,0x127e,0x127e, -0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1425,0x142e,0x1425,0x142e,0x142e, -0x1425,0x1425,0x1425,0x1425,0x1425,0x1425,0x1431,0x1428,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5,0x1c5, -0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x150f,0x1c8,0x1c8, -0x150c,0x150c,0x150c,0x150c,0x150c,0x1512,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, -0x1668,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f, -0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x165f,0x1ce,0x1ce,0x1ce,0x1ce, -0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, +0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, +0x13fb,0x13fb,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad,0x1ad, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1401,0x1401,0x1401,0x1401,0x1401,0x1410,0x1401,0x1404,0x1404, +0x1401,0x1401,0x1401,0x1407,0x1407,0x1b0,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d,0x140d, +0x140a,0x1416,0x1416,0x1416,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0,0x1b0, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6, +0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x1422,0x141f,0x1419,0x1419,0x141f,0x141f, +0x1428,0x1428,0x1422,0x1425,0x1425,0x141f,0x141c,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3,0x1b3, +0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b, +0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x142b,0x1b6,0x1b6,0x1b6,0x1b6,0x16f5,0x16f5,0x142b,0x142b, +0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x1b6,0x1b6,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1437,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, +0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, +0x1434,0x1434,0x1434,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9,0x1b9, +0x1b9,0x1b9,0x1b9,0x1431,0x1431,0x1431,0x1431,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a,0x143a, +0x143a,0x143a,0x143a,0x143a,0x144c,0x144f,0x1452,0x1452,0x144f,0x1455,0x1455,0x1440,0x1443,0x16fb,0x16f8,0x16f8, +0x16f8,0x1542,0x1bc,0x1bc,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x1446,0x153f,0x1701, +0x1704,0x16fe,0x1707,0x1707,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x145b,0x1bf,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1458,0x1bf,0x1bf, +0x1bf,0x1bf,0x1bf,0x1bf,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x145e,0x1c2,0x1c2,0x1c2,0x1c2, +0x1c2,0x1c2,0x1c2,0x1c2,0x12ae,0x12ab,0x12ae,0x1296,0x12ab,0x12ab,0x12ab,0x12b1,0x12ab,0x12b1,0x12b4,0x12ab, +0x12b1,0x12b1,0x12ab,0x12ab,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1461, +0x146a,0x1461,0x146a,0x146a,0x1461,0x1461,0x1461,0x1461,0x1461,0x1461,0x146d,0x1464,0x1c5,0x1c5,0x1c5,0x1c5, +0x1c5,0x1c5,0x1c5,0x1c5,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548,0x1548, +0x1548,0x1548,0x1c8,0x1c8,0x1545,0x1545,0x1545,0x1545,0x1545,0x154b,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8,0x1c8, +0x1c8,0x1c8,0x1c8,0x1c8,0x16b0,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7,0x16a7, +0x1ce,0x1ce,0x1ce,0x1ce,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, 0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1,0x1d1, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4,0x1d4, -0x1d4,0x1d4,0x1d4,0x1d4,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x1d4,0x1d4, -0x1527,0x1521,0x1524,0x152d,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1d7,0x1d7,0x1d7,0x1d7, -0x1d7,0x1d7,0x1d7,0x1d7,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x1d1,0x1d1,0x1d1,0x1d1,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1d4, +0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1d4,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1d4,0x1d4,0x1560,0x155a,0x155d,0x1566,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1d7,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x1da,0x1da,0x1da, 0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, -0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x16c8,0x1536,0x153c,0x153c, -0x1dd,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1dd,0x1545,0x1545,0x1dd,0x1dd,0x1545, -0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1545,0x1545, -0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1545,0x1545,0x1dd,0x1545,0x1545,0x1545,0x1545,0x1545,0x1dd,0x1dd, -0x1539,0x1545,0x1536,0x153c,0x1536,0x153c,0x153c,0x153c,0x153c,0x1dd,0x1dd,0x153c,0x153c,0x1dd,0x1dd,0x153f, -0x153f,0x1542,0x1dd,0x1dd,0x16cb,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1536,0x1dd,0x1dd,0x1dd,0x1dd, -0x1dd,0x1548,0x1545,0x1545,0x1545,0x1545,0x153c,0x153c,0x1dd,0x1dd,0x1539,0x1539,0x1539,0x1539,0x1539,0x1539, -0x1539,0x1dd,0x1dd,0x1dd,0x1539,0x1539,0x1539,0x1539,0x1539,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd, -0x1dd,0x1dd,0x1dd,0x1dd,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x1e0,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d,0x155d, -0x155d,0x155d,0x155d,0x155d,0x1557,0x1557,0x1557,0x154b,0x154b,0x154b,0x1557,0x1557,0x154b,0x155a,0x154e,0x154b, -0x1560,0x1560,0x1554,0x1560,0x1560,0x1551,0x1e0,0x1e0,0x156f,0x156f,0x156f,0x1563,0x1563,0x1563,0x1563,0x1563, -0x1563,0x1566,0x1569,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, -0x156c,0x156c,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x16ce,0x16ce,0x16ce,0x16ce,0x157b,0x1578,0x1e6,0x1e6, -0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1e9,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, -0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d, -0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x158d,0x1584,0x1587,0x158a,0x158d,0x1ec, -0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x159c,0x159c,0x159c,0x159c,0x159c,0x1590,0x1590,0x1ef, -0x1ef,0x1ef,0x1ef,0x1593,0x1593,0x1593,0x1593,0x1593,0x1599,0x1599,0x1599,0x1599,0x1599,0x1599,0x1596,0x1ef, -0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1f2,0x1f2,0x15a2, -0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x15a2,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x159f,0x1f2, -0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x15a8,0x15ba,0x15ba,0x15ae,0x15b7,0x1f5,0x1f5,0x1f5, -0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1,0x15b1, -0x15b1,0x15b1,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, -0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0, -0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x15c0,0x1f8,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15c6,0x15cf,0x15cc, -0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9,0x15c9, -0x15c9,0x15c9,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x1fb,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, -0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x1fe,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1, -0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15de,0x15de, -0x15de,0x15de,0x15de,0x201,0x201,0x201,0x201,0x201,0x15f9,0x15f9,0x15fc,0x15fc,0x15ff,0x15f0,0x204,0x204, -0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6,0x15f6, -0x15f6,0x15f6,0x204,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x204,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, +0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da,0x1da, +0x170a,0x156f,0x1575,0x16b6,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x1dd,0x157e, +0x157e,0x1dd,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e, +0x157e,0x1dd,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x157e,0x1dd,0x157e,0x157e,0x1dd,0x157e,0x157e,0x157e, +0x157e,0x157e,0x1dd,0x1dd,0x16b3,0x157e,0x156f,0x1575,0x156f,0x1575,0x1575,0x1575,0x1575,0x1dd,0x1dd,0x1575, +0x1575,0x1dd,0x1dd,0x1578,0x1578,0x157b,0x1dd,0x1dd,0x170d,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x156f, +0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1581,0x157e,0x157e,0x157e,0x157e,0x1575,0x1575,0x1dd,0x1dd,0x1572,0x1572, +0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd,0x1572,0x1572,0x1572,0x1572,0x1572,0x1dd,0x1dd,0x1dd, +0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1dd,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596, +0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1e0,0x1596,0x1596,0x1596,0x1596,0x1596, +0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1596,0x1590,0x1590,0x1590,0x1584,0x1584,0x1584,0x1590,0x1590, +0x1584,0x1593,0x1587,0x1584,0x1599,0x1599,0x158d,0x1599,0x1599,0x158a,0x17a0,0x1e0,0x15a8,0x15a8,0x15a8,0x159c, +0x159c,0x159c,0x159c,0x159c,0x159c,0x159f,0x15a2,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x15a5,0x15a5,0x15a5,0x15a5, +0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1e3,0x1710,0x1710,0x1710,0x1710, +0x15b4,0x15b1,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x1e6,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9, +0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x1e9,0x15c6,0x15c6,0x15c6,0x15c6, +0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15c6,0x15bd, +0x15c0,0x15c3,0x15c6,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x1ec,0x15d5,0x15d5,0x15d5,0x15d5, +0x15d5,0x15c9,0x15c9,0x1ef,0x1ef,0x1ef,0x1ef,0x15cc,0x15cc,0x15cc,0x15cc,0x15cc,0x15d2,0x15d2,0x15d2,0x15d2, +0x15d2,0x15d2,0x15cf,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x1ef,0x15de,0x15de,0x15de,0x15de, +0x15de,0x1f2,0x1f2,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15d8,0x15d8,0x15d8,0x15d8, +0x15d8,0x15d8,0x15d8,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x1f2,0x15e1,0x15f3,0x15f3,0x15e7, +0x15f0,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15ea,0x15ea,0x15ea,0x15ea, +0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x15ea,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x1f5,0x15f9,0x15f9,0x15f9,0x15f9, 0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x204,0x204,0x204,0x204,0x204,0x15f9,0x15f9,0x15f9,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611, -0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x1611,0x20a,0x20a,0x20a,0x20a,0x20a,0x20a, -0x20a,0x160e,0x160e,0x160e,0x160e,0x20a,0x20a,0x20a,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x1614,0x1626,0x1626,0x1614,0x1614,0x1614,0x1614,0x210,0x210, -0x1626,0x1626,0x1629,0x1629,0x1614,0x1614,0x1626,0x161a,0x1617,0x161d,0x162f,0x162f,0x1620,0x1620,0x1623,0x1623, -0x1623,0x162f,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7,0x16d7, -0x16d4,0x16d4,0x16d4,0x16d4,0x16d1,0x16d1,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, +0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x1f8,0x1605,0x1605,0x1605,0x1605, +0x1605,0x15ff,0x1608,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1602,0x1602,0x1602,0x1602, +0x1602,0x1602,0x1602,0x1602,0x1602,0x1602,0x1605,0x1605,0x1605,0x1605,0x1605,0x1fb,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e, +0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x160e,0x1fe,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a,0x161a, +0x161a,0x161a,0x1617,0x1617,0x1617,0x1617,0x1617,0x201,0x201,0x201,0x201,0x201,0x1632,0x1632,0x1635,0x1635, +0x1638,0x1629,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x204,0x162f,0x162f,0x162f,0x162f, +0x162f,0x162f,0x162f,0x162f,0x162f,0x162f,0x204,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x1629,0x204,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x204,0x204,0x204,0x204,0x204,0x1632,0x1632,0x1632,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x207,0x207,0x207,0x207,0x207,0x207,0x207,0x164a,0x164a,0x164a,0x164a, +0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x164a,0x20a,0x20a, +0x20a,0x20a,0x20a,0x20a,0x20a,0x1647,0x1647,0x1647,0x1647,0x20a,0x20a,0x20a,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x164d,0x165f,0x165f,0x164d,0x164d, +0x164d,0x164d,0x210,0x210,0x165f,0x165f,0x1662,0x1662,0x164d,0x164d,0x165f,0x1653,0x1650,0x1656,0x1668,0x1668, +0x1659,0x1659,0x165c,0x165c,0x165c,0x1668,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, +0x1719,0x1719,0x1719,0x1719,0x1716,0x1716,0x1716,0x1716,0x1713,0x1713,0x210,0x210,0x210,0x210,0x210,0x210, 0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210, -0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x213,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, -0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x213,0x213,0x213, -0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, +0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x210,0x213,0x166b,0x166b,0x166b, +0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b,0x166b, +0x166b,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x213,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216, +0x216,0x216,0x216,0x216,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, 0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216, -0x216,0x216,0x216,0x216,0x1638,0x1647,0x163e,0x163b,0x164d,0x164d,0x1641,0x164d,0x219,0x219,0x219,0x219, -0x219,0x219,0x219,0x219,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x1644,0x219,0x219, -0x219,0x219,0x219,0x219,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1653,0x1650,0x1650, -0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x1650,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c, -0x21c,0x21c,0x21c,0x1659,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9, -0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x16e9,0x21f,0x21f, -0x21f,0x16da,0x16da,0x16da,0x16e6,0x16e6,0x16da,0x16da,0x16da,0x16da,0x16e6,0x16da,0x16da,0x16da,0x16da,0x16dd, -0x21f,0x21f,0x21f,0x21f,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e3,0x16e0,0x16e0, -0x16ec,0x16ec,0x16ec,0x16e0,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x222,0x222,0x222,0x222,0x222, +0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x216,0x1671,0x1680,0x1677,0x1674,0x1686,0x1686,0x167a,0x1686, +0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x219,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d,0x167d, +0x167d,0x167d,0x219,0x219,0x219,0x219,0x219,0x219,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c,0x168c, +0x168c,0x168c,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x1689,0x21c,0x21c,0x21c,0x21c,0x21c, +0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x21c,0x1692,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, +0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b,0x172b, +0x172b,0x172b,0x21f,0x21f,0x21f,0x171c,0x171c,0x171c,0x1728,0x1728,0x171c,0x171c,0x171c,0x171c,0x1728,0x171c, +0x171c,0x171c,0x171c,0x171f,0x21f,0x21f,0x21f,0x21f,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725, +0x1725,0x1725,0x1722,0x1722,0x172e,0x172e,0x172e,0x1722,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x222, +0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, 0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222, -0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x222,0x1701,0x1701,0x1701,0x1701, -0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x1701,0x228, -0x1701,0x1701,0x228,0x228,0x228,0x228,0x228,0x16fe,0x16fe,0x16fe,0x16fe,0x16fe,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x22b,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x1704,0x22b,0x1704,0x1704,0x1704,0x1704,0x1704, -0x1704,0x1704,0x1704,0x1704,0x1704,0x1707,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x22e, -0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x22e, -0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x170a,0x170a,0x170a,0x170a,0x170a,0x170a,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1713,0x1713,0x1713,0x1713, -0x1713,0x1713,0x1713,0x1713,0x1716,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743,0x1743, +0x1743,0x1743,0x1743,0x228,0x1743,0x1743,0x228,0x228,0x228,0x228,0x228,0x1740,0x1740,0x1740,0x1740,0x1740, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746,0x22b,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x22b,0x1746, +0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1746,0x1749,0x22b,0x22b,0x22b,0x22b,0x22b,0x22b, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x22e,0x174c,0x174c,0x174c,0x174c,0x174c,0x174c, 0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x1713,0x1713,0x1713,0x1713,0x1713,0x231,0x231,0x231, +0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1773,0x1776,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1824,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1824,0x231,0x231,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1824,0x1821,0x181e,0x1824,0x1824,0x1824,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x181e,0x1821,0x1821,0x1821,0x1821,0x1821,0x231,0x231,0x231,0x231, +0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x231, 0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, -0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x171c,0x171c,0x171c,0x171c, -0x1719,0x171c,0x171c,0x171f,0x1722,0x171f,0x171f,0x171c,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234, -0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1719,0x1719,0x1719,0x1719,0x1719,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x1728,0x1728,0x24f,0x24f, -0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x24f,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237, -0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x237,0x8fa,0x8fa,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a,0x10ad,0x10ad,0x10ad,0x10ad, -0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1437,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725,0x1725, -0x1725,0x1725,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d,0x23d, -0x23d,0x23d,0x23d,0x23d,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0x1254, -0x1254,0x1254,0x240,0x240,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0x240,0x240, -0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240,0x240, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0x246,0x246, -0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x1266,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x24c,0x24c, -0x10bf,0x34b,0x34b,0x357,0xc51,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x357,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x34b,0x357,0x357,0x357,0x357,0x351,0x10c2,0x1296, -0x35a,0x8ca,0x8cd,0x34e,0x34e,0x10bf,0x1293,0x1293,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d,0x35d, -0x35a,0x35a,0x34b,0x34b,0x858,0x85b,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2, -0x354,0xf21,0xf1e,0x1299,0x1299,0x1299,0x1299,0x1299,0x145b,0x10c5,0x10c5,0xe73,0xe73,0xd41,0xe73,0xe73, -0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a,0x35d,0x35a,0x35a,0x35a,0x35a,0x35a,0x35a, -0x35a,0x35d,0x35a,0x35a,0x35d,0x35a,0x35a,0x35a,0x35a,0x35a,0x1293,0x1296,0x34e,0x35a,0x357,0x357, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b, -0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0x43b,0xb3d,0xb3d,0xd4d,0xd4d,0x438,0xd50,0x137d,0x137d,0x137d, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e,0x43e, -0x444,0x444,0x444,0x10da,0x10da,0x10da,0x10da,0x10da,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441, -0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441, -0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x441,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7,0x10d7, -0x447,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444,0x444, -0x444,0x444,0x444,0x444,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x44a,0x44a,0x44a,0x44a,0x44d,0x93c,0xf6f,0xf6f,0xf72,0xf6f, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a, -0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0x450,0x44a,0xf72,0xf6f,0xf72,0xf6f,0xf72,0xf6f, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, -0x63c,0x63c,0x63f,0x47a,0x64b,0x648,0x648,0x645,0x4a4,0x4a4,0x462,0x462,0x462,0x462,0x462,0xa6b, -0x64e,0x486,0x666,0x669,0x49b,0x64e,0x489,0x489,0x47a,0x495,0x495,0x63c,0x4a1,0x49e,0x642,0x474, -0x46b,0x46b,0x46e,0x46e,0x46e,0x46e,0x46e,0x471,0x46e,0x46e,0x46e,0x465,0x4aa,0x4aa,0x4a7,0x4a7, -0x65a,0x48f,0x48c,0x657,0x654,0x651,0x663,0x47d,0x660,0x660,0x492,0x495,0x65d,0x65d,0x492,0x495, -0x477,0x47a,0x47a,0x47a,0x498,0x483,0x480,0xb52,0xa71,0xa74,0xa6e,0xa6e,0xa6e,0xa6e,0xb49,0xb49, -0xb49,0xb49,0xb4f,0xc7e,0xc7b,0xd5c,0xd5f,0xb4c,0xd5f,0xd5f,0xd5f,0xd5f,0xd5c,0xd5f,0xd5f,0xb46, -0x4dd,0x4dd,0x4f5,0x678,0x4da,0x675,0x4dd,0x4f2,0x4da,0x678,0x4ec,0x4f5,0x4f5,0x4f5,0x4ec,0x4ec, -0x4f5,0x4f5,0x4f5,0x681,0x4da,0x4f5,0x67b,0x4da,0x4e9,0x4f5,0x4f5,0x4f5,0x4f5,0x4f5,0x4da,0x4da, -0x4e0,0x675,0x67e,0x4da,0x4f5,0x4da,0x684,0x4da,0x4f5,0x4e3,0x4fb,0x687,0x4f5,0x4f5,0x4e6,0x4ec, -0x4f5,0x4f5,0x4f8,0x4f5,0x4ec,0x4ef,0x4ef,0x4ef,0x4ef,0xa80,0xa7d,0xc81,0xd6e,0xb6d,0xb70,0xb70, -0xb6a,0xb67,0xb67,0xb67,0xb67,0xb70,0xb6d,0xb6d,0xb6d,0xb6d,0xb64,0xb67,0xd6b,0xe7f,0xe82,0xf78, -0x10e9,0x10e9,0x10e9,0x68d,0x68a,0x4fe,0x501,0x501,0x501,0x501,0x501,0x68a,0x68d,0x68d,0x68a,0x501, -0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x693,0x50a,0x50a,0x50a,0x50a, -0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x690,0x504,0x504,0x504,0x504,0x504,0x504, -0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x50d,0x516,0x516,0x510,0x510,0x510,0x513,0x50d, -0x510,0x510,0x50d,0x50d,0x50d,0x50d,0x510,0x510,0x696,0x696,0x50d,0x50d,0x510,0x510,0x510,0x510, -0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x513,0x513,0x513,0x510,0x510,0x699,0x510, -0x699,0x510,0x510,0x510,0x510,0x510,0x510,0x510,0x50d,0x510,0x50d,0x50d,0x50d,0x50d,0x50d,0x50d, -0x510,0x510,0x50d,0x696,0x50d,0x50d,0x50d,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86,0xa86, -0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0xb73,0x69f,0x519,0x69f,0x69f, -0x51c,0x519,0x519,0x69f,0x69f,0x51c,0x519,0x69f,0x51c,0x519,0x519,0x69f,0x519,0x69f,0x528,0x525, -0x519,0x69f,0x519,0x519,0x519,0x519,0x69f,0x519,0x519,0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x69f, -0x51c,0x69f,0x51c,0x69f,0x69f,0x69f,0x69f,0x69f,0x6a5,0x51f,0x69f,0x51f,0x51f,0x519,0x519,0x519, -0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x519,0x519,0x69f,0x69f,0x519,0x519,0x519,0x51c,0x519,0x519, -0x51c,0x519,0x519,0x51c,0x69f,0x51c,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x69f,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x6a2,0x69f,0x51c,0x519, -0x69f,0x69f,0x69f,0x69f,0x519,0x519,0x69f,0x69f,0x519,0x51c,0x6a2,0x6a2,0x51c,0x51c,0x519,0x519, -0x51c,0x51c,0x519,0x519,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x51c,0x51c,0x69f,0x69f, -0x51c,0x51c,0x69f,0x69f,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x69f,0x519,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x69f,0x519,0x519, -0x519,0x519,0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x69f,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519, -0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x519,0x519,0x519, -0x519,0x519,0x51c,0x51c,0x51c,0x51c,0x519,0x522,0x519,0x519,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76, -0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0xb76,0x52b,0xa89,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x53a,0x537,0x53a,0x537,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x6a8,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x531,0x531,0x52b,0x52b,0x52b,0x52b,0x534,0x534,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52e,0x7ad,0x7aa,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b, -0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0x52b,0xa89,0xb7c,0xa89,0xa89,0xa89,0x53d,0x53d,0x53d,0x53d, -0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d, -0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x53d,0x6b1,0x6b1,0x6b1,0x6b1, -0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x543,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5, -0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xbe5,0xcf9,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x546,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x549,0x549,0x549,0x549,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6bd,0x6bd,0x6bd,0x6bd, -0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x6bd,0x54c,0x54c,0x6bd,0x6bd, -0x6bd,0x6bd,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0xb7f,0x6c3,0x6c3,0x54f,0x6c0, -0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x6c0,0x552,0x552,0x54f,0x54f,0x555,0x555,0x555,0x555,0x6c3,0x6c3, -0x555,0x555,0x6c6,0x6c3,0x54f,0x54f,0x54f,0x54f,0x6c3,0x6c3,0x555,0x555,0x6c6,0x6c3,0x54f,0x54f, -0x54f,0x54f,0x6c3,0x6c3,0x6c0,0x54f,0x555,0x6c3,0x54f,0x54f,0x6c0,0x6c3,0x6c3,0x6c3,0x555,0x555, -0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x54f,0x6c3,0x6c0, -0x6c3,0x6c0,0x54f,0x555,0x555,0x555,0x555,0x555,0x555,0x54f,0x54f,0x6c0,0xa8f,0xa8f,0xa8f,0xa8f, -0xa8f,0xa8f,0xa8f,0xa8f,0xb82,0xb82,0xb82,0xb85,0xb85,0xb88,0xb88,0xb82,0x561,0x561,0x561,0x561, -0x55e,0x6d5,0x6d5,0x558,0x558,0x6c9,0x558,0x558,0x558,0x558,0x6cf,0x6c9,0x558,0x55e,0x558,0x558, -0xcfc,0xcfc,0xb8b,0xb8b,0xd7a,0xa92,0x55b,0x55b,0x6cc,0x567,0x6cc,0x55b,0x55e,0x558,0x55e,0x55e, -0x558,0x558,0x55e,0x558,0x558,0x558,0x55e,0x558,0x558,0x558,0x55e,0x55e,0x558,0x558,0x558,0x558, -0x558,0x558,0x558,0x558,0x55e,0x561,0x561,0x55b,0x558,0x558,0x558,0x558,0x6d5,0x558,0x6d5,0x558, -0x558,0x558,0x558,0x558,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, -0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x6d8,0x6d5,0x56a,0x6d8, -0x6c9,0x6cf,0x55e,0x6c9,0x6d2,0x6c9,0x6c9,0x558,0x6c9,0x6d5,0x56a,0x6d5,0xa92,0xa92,0xb8e,0xb8e, -0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb91,0xb8e,0xb8e,0xd74,0xd80,0x56d,0x56d,0x56d,0x56d, -0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d,0x56d, -0x570,0x12c9,0x12c9,0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x147f,0x576,0x582,0x576, -0x576,0x12c9,0x570,0x570,0x582,0x582,0x12cc,0x12cc,0x585,0x585,0x570,0x57c,0x570,0x570,0x57c,0x570, -0x57c,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570, -0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x57c,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x6de,0x570,0x570,0x570,0x570,0x570,0x570,0x57c,0x570,0x570,0x57c, -0x570,0x570,0x570,0x570,0x12c9,0x570,0x12c9,0x570,0x570,0x570,0x570,0x12c9,0x12c9,0x12c9,0x570,0x122a, -0x570,0x570,0x570,0x579,0x579,0x579,0x579,0x12c6,0x12c6,0x570,0x573,0x57f,0x57c,0x570,0x570,0x570, -0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0xb97,0xb94,0x6db,0x6db, -0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x570,0x57c,0x570,0x570,0x570,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x12c9,0x570,0x570,0x570,0x570,0x570,0x570,0x570, -0x570,0x570,0x570,0x570,0x570,0x570,0x570,0x12c9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5af,0x5af,0x5af,0x5af, -0x5af,0x5af,0x5af,0x5af,0x5a6,0x5ac,0x59d,0x5a0,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a3,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6, -0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5ac,0x5a6, -0x5a9,0x5af,0x5ac,0x5a6,0x5ac,0x5a6,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf,0x12cf, -0x12cf,0x12cf,0x12cf,0x12cf,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5af,0x5a9,0x5af,0x5ac,0x5a6, -0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5ac,0x5a6,0x5a9,0x5ac,0x5a6,0x5a9, -0x5ac,0x5a6,0x5a9,0x5af,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a6,0x5a9,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a9, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a9,0x5a6,0x5a6,0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a9,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a6,0x5a6,0x5a9,0x5a6,0x5a9,0x5a6, -0x5a6,0x5a6,0x5a6,0x5a6,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9, -0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5a9,0x5af,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af, -0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5af,0x5ac,0x5ac,0x5ac, -0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5ac,0x5b2,0x5b2,0x5b2,0x5b2,0xf84,0xf84,0xf84,0x1482, -0x1482,0x1482,0x1482,0x1482,0x1482,0x1482,0x1680,0x1680,0x80a,0x810,0x810,0x81c,0x81c,0x80d,0x804,0x80d, -0x804,0x80d,0x804,0x80d,0x804,0x80d,0x804,0x80d,0x5c1,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1,0x5bb,0x5c1, -0x5bb,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be,0x5c4,0x5c1,0x5bb,0x5be, -0x5c4,0x5c1,0x5bb,0x5be,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, -0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab, -0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab, -0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4, -0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b7,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4,0x6b4, -0x6b4,0x6b4,0x6b4,0x6b4,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1,0x6b1, -0x6b1,0x6b1,0x6b1,0x6b1,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba, -0x6ba,0x6ba,0x6ba,0x6ba,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1,0x6e1, -0x6e1,0x6e1,0x6e1,0x6e1,0xbeb,0x86d,0x867,0x864,0x86a,0x861,0x6f6,0x6f9,0x6f9,0x6f9,0x6f9,0x6f9, -0x6f9,0x6f9,0x6f9,0x6f9,0x873,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, -0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6, -0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x870,0x870,0x6fc,0x882,0x885,0x88b,0x7b0,0x7bc,0x8a0,0x7b9, -0x879,0x876,0x879,0x876,0x87f,0x87c,0x87f,0x87c,0x879,0x876,0x7b6,0x88b,0x879,0x876,0x879,0x876, -0x879,0x876,0x879,0x876,0x88e,0x897,0x894,0x894,0x702,0x73e,0x73e,0x73e,0x73e,0x73e,0x73e,0x738, -0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738,0x738, -0x738,0x738,0x738,0x705,0x720,0x6ff,0x726,0x729,0x723,0x73b,0x73b,0x73b,0x73b,0x73b,0x73b,0x735, -0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735,0x735, -0x735,0x735,0x735,0x705,0x720,0x6ff,0x720,0xbee,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, -0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4, -0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x7a4,0x124b,0x124b,0x124b,0x124b,0x124b,0x7a7, -0x7b6,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x7b9,0x8d6,0x8d6,0x8d6,0x8d6,0x7bf,0x7bf, -0x891,0x89d,0x89d,0x89d,0x89d,0x89a,0x7b3,0x888,0xab6,0xab6,0xab6,0xbfd,0xc1b,0xc18,0xad1,0x85e, -0x7c5,0x7c2,0x7c5,0x7c8,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c5,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2,0x7c2, -0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c5,0x7c5,0x7c2,0x7c2, -0xc1e,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1, -0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1, -0x7d4,0x7d1,0x7d4,0x7d7,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d4,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1, -0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d4,0x7d4,0x7d1,0x7d1, -0x7d1,0x7d1,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d7,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d1,0x7d7,0x7d1, -0x7d1,0x7d1,0x7d1,0x7d1,0x7d4,0x7d7,0x7d7,0x7d4,0x7d4,0x7d4,0x7d4,0x8a6,0x8a9,0x7da,0x7dd,0xc06, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e6,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3, -0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7e3,0x7ef,0x7ef,0x7ef,0x7ef, -0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef, -0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0x7ef,0xd08,0xd08,0xe34,0x7e9,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0xd02,0xd02,0xd02,0xd02,0x7f2,0x7f2,0x7f2,0x7f2, -0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x8bb,0x8bb,0x8bb,0x8bb, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0xd0b,0xd0b,0xd0b,0xd0b,0x8be,0x8be,0x8be,0x8be,0x8be,0x7f5,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5, -0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0x7f5,0xd0b,0xd0b, -0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, -0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8,0x7f8, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, -0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb, -0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0x7fb,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37, -0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37, -0x10ad,0x10ad,0x10ad,0x10ad,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x801,0x801,0x7fe,0x801,0x7fe,0x801,0x801,0x7fe,0x7fe,0x7fe, -0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x7fe,0x801,0x7fe,0x801,0x7fe,0x801,0x801,0x7fe,0x7fe,0x801, -0x801,0x801,0x7fe,0x7fe,0x7fe,0x7fe,0x143a,0x143a,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2, -0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x8b2,0x124e,0x124e,0x124e,0x124e,0x122d,0x122d,0x122d,0x122d, -0x122d,0x122d,0x122d,0x122d,0xd02,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0xc09,0xc09,0xc09,0xc09,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5, -0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b8,0x8b5,0x8b8,0x8b5,0x8b5, -0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5,0x8b5, -0x8b5,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09,0xc09, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb, -0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0x8bb,0xd0b, -0x936,0x918,0x918,0x918,0x918,0x912,0x918,0x918,0x92a,0x918,0x918,0x915,0x921,0x927,0x927,0x927, -0x927,0x927,0x92a,0x912,0x91e,0x912,0x912,0x912,0x909,0x909,0x912,0x912,0x912,0x912,0x912,0x912, -0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x92d,0x912,0x912,0x912,0x912,0x912,0x912, -0x912,0x912,0x912,0x912,0x915,0x909,0x912,0x909,0x912,0x909,0x924,0x91b,0x924,0x91b,0x933,0x933, -0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, -0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942,0x942, -0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945, -0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945,0x945, -0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, -0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948,0x948, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x94b,0x94b, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x94e,0x94e, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951,0x951, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954, -0x957,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x957,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a, -0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x95a,0x9e7,0x9e7,0xf69,0x9e7,0x9e7,0x9e7,0x9ea,0x9e7, -0xf69,0x9e7,0x9e7,0xf60,0x9e1,0x9d5,0x9d5,0x9d5,0x9d5,0x9e4,0x9d5,0xf4e,0xf4e,0xf4e,0x9d5,0x9d8, -0x9e1,0x9db,0xf54,0xf63,0xf63,0xf4e,0xf4e,0xf69,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, -0xad7,0xad7,0x9ed,0x9ed,0x9de,0x9de,0x9de,0x9de,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e4,0x9e4, -0x9d5,0x9d5,0xf69,0xf69,0xf69,0xf69,0xf4e,0xf4e,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, -0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7, -0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9e7,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0xd59, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0xd59,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc,0x9fc, -0x9fc,0x9fc,0x9fc,0x9fc,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02,0xa02, -0xa02,0xa02,0xa02,0xa02,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa05,0xa0b,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0, -0x10e0,0x10e0,0x10e0,0x10e0,0x10dd,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08, -0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa08,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d, -0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa1d,0xa41,0xa41,0xa41,0xa44,0xa44,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa29,0xa29,0xa3e,0xa20, -0xa20,0xa20,0xa20,0xa20,0xa20,0xa20,0xa3e,0xa3e,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41, -0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa41,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa62,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f, -0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa5f,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1773,0x1773,0x1773,0x1773,0x1773,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821,0x1821, +0x1821,0x1821,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1773,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231,0x231, +0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x175b,0x175e,0x175b,0x175b,0x1758,0x234,0x234,0x234,0x234, +0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x234,0x1755,0x1755,0x1755,0x1755,0x1755, +0x17b2,0x17b2,0x17b2,0x17b2,0x17a9,0x17a9,0x17a9,0x17a3,0x17a6,0x17a6,0x17a6,0x237,0x237,0x237,0x237,0x237, +0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x17af,0x237,0x237,0x237,0x237,0x17ac,0x17ac, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x23a,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd,0x17cd, +0x17cd,0x17cd,0x17cd,0x17ca,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x17b8,0x23a,0x17b8,0x17b8,0x17b8,0x17b8, +0x17b8,0x17b8,0x17ca,0x17bb,0x17cd,0x17d0,0x17d0,0x17c4,0x17c1,0x17c1,0x23a,0x23a,0x23a,0x23a,0x23a,0x23a, +0x23a,0x23a,0x23a,0x23a,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17c7,0x17be,0x17be, +0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x17be,0x23a,0x23a,0x23a, +0x17dc,0x17df,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, +0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, +0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6,0x240,0x240,0x17d6,0x17d6,0x17d6,0x17d6,0x17d6, +0x1827,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, +0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243,0x243, +0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5,0x17e5, +0x246,0x246,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9, +0x246,0x17e2,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x17e2,0x17d9,0x17d9,0x246, +0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x246,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x17e8, +0x17e8,0x17e8,0x17e8,0x17e8,0x17e8,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249, +0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x249,0x1800,0x1800,0x17f1,0x17eb,0x17eb,0x1800,0x17ee,0x1803, +0x1803,0x1803,0x1803,0x1806,0x1806,0x17fa,0x17f7,0x17f4,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd,0x17fd, +0x17fd,0x17fd,0x24c,0x17fa,0x24c,0x17f4,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c, +0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x24c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c, +0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x180c,0x24f,0x24f,0x24f,0x24f, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809, +0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x1809,0x24f,0x24f,0x24f,0x24f, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x252,0x252,0x252, +0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252,0x252, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255,0x255, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x1770,0x1770,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270,0x270, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258, +0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x258,0x921,0x921, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, +0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b,0x25b, +0x10d4,0x10d4,0x10d4,0x10d4,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1275,0x1473,0x1761,0x1761,0x1761, +0x1761,0x1761,0x1761,0x1761,0x1761,0x1761,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e, +0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0x25e,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0x1278,0x1278,0x1278,0x261,0x261,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261,0x261, +0x261,0x261,0x261,0x261,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0x264,0x264,0x264,0x264,0x264, +0x264,0x264,0x264,0x264,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0x267,0x267,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a,0x26a, +0x26a,0x26a,0x26a,0x26a,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x26d,0x26d,0x10ec,0x369,0x369,0x375,0xc7b,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378, +0x378,0x378,0x378,0x378,0x375,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x369,0x375,0x375,0x375, +0x375,0x36f,0x10ef,0x12c6,0x378,0x8ee,0x8f1,0x36c,0x36c,0x10ec,0x12c3,0x12c3,0x37b,0x37b,0x37b,0x37b, +0x37b,0x37b,0x37b,0x37b,0x378,0x378,0x369,0x369,0x879,0x87c,0x909,0x909,0x909,0x909,0x909,0x909, +0x909,0x909,0x909,0x909,0x372,0xf4e,0xf4b,0x12c9,0x12c9,0x12c9,0x12c9,0x12c9,0x149a,0x10f2,0x10f2,0xea0, +0xea0,0xd6e,0xea0,0xea0,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378, +0x378,0x378,0x378,0x378,0x378,0x37b,0x378,0x378,0x37b,0x378,0x378,0x378,0x378,0x378,0x12c3,0x12c6, +0x36c,0x378,0x375,0x375,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456, +0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0x456,0xb67,0xb67,0xd7a,0xd7a,0x87f, +0xd7d,0x13b9,0x13b9,0x13b9,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, +0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459,0x459, +0x459,0x459,0x459,0x459,0x45f,0x45f,0x45f,0x1107,0x1107,0x1107,0x1107,0x1107,0x45c,0x45c,0x45c,0x45c, +0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c, +0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x45c,0x1104,0x1104, +0x1104,0x1104,0x1104,0x1104,0x462,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, +0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f, +0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x45f,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x465,0x465,0x465,0x465,0x468,0x963, +0xf9c,0xf9c,0xf9f,0xf9c,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465, +0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0x46b,0x465,0xf9f,0xf9c, +0xf9f,0xf9c,0xf9f,0xf9c,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, +0x47a,0x47a,0x47a,0x47a,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x477,0x47a,0x47a,0x47a,0x47a, +0x47a,0x47a,0x47a,0x47a,0x657,0x657,0x65a,0x495,0x666,0x663,0x663,0x660,0x4bf,0x4bf,0x47d,0x47d, +0x47d,0x47d,0x47d,0xa95,0x669,0x4a1,0x681,0x684,0x4b6,0x669,0x4a4,0x4a4,0x495,0x4b0,0x4b0,0x657, +0x4bc,0x4b9,0x65d,0x48f,0x486,0x486,0x489,0x489,0x489,0x489,0x489,0x48c,0x489,0x489,0x489,0x480, +0x4c8,0x4c5,0x4c2,0x4c2,0x675,0x4aa,0x4a7,0x672,0x66f,0x66c,0x67e,0x498,0x67b,0x67b,0x4ad,0x4b0, +0x678,0x678,0x4ad,0x4b0,0x492,0x495,0x495,0x495,0x4b3,0x49e,0x49b,0xb7c,0xa9b,0xa9e,0xa98,0xa98, +0xa98,0xa98,0xb73,0xb73,0xb73,0xb73,0xb79,0xca8,0xca5,0xd89,0xd8c,0xb76,0xd8c,0xd8c,0xd8c,0xd8c, +0xd89,0xd8c,0xd8c,0xb70,0x4fb,0x4fb,0x513,0x693,0x4f8,0x690,0x4fb,0x510,0x4f8,0x693,0x50a,0x513, +0x513,0x513,0x50a,0x50a,0x513,0x513,0x513,0x69c,0x4f8,0x513,0x696,0x4f8,0x507,0x513,0x513,0x513, +0x513,0x513,0x4f8,0x4f8,0x4fe,0x690,0x699,0x4f8,0x513,0x4f8,0x69f,0x4f8,0x513,0x501,0x519,0x6a2, +0x513,0x513,0x504,0x50a,0x513,0x513,0x516,0x513,0x50a,0x50d,0x50d,0x50d,0x50d,0xaaa,0xaa7,0xcab, +0xd9b,0xb97,0xb9a,0xb9a,0xb94,0xb91,0xb91,0xb91,0xb91,0xb9a,0xb97,0xb97,0xb97,0xb97,0xb8e,0xb91, +0xd98,0xeac,0xeaf,0xfa5,0x1116,0x1116,0x1116,0x6a8,0x6a5,0x51c,0x51f,0x51f,0x51f,0x51f,0x51f,0x6a5, +0x6a8,0x6a8,0x6a5,0x51f,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae,0x6ae, +0x528,0x528,0x528,0x528,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x6ab,0x522,0x522, +0x522,0x522,0x522,0x522,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x534,0x534,0x52e, +0x52e,0x52e,0x531,0x52b,0x52e,0x52e,0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x6b1,0x6b1,0x52b,0x52b, +0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x531,0x531,0x531, +0x52e,0x52e,0x6b4,0x52e,0x6b4,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52e,0x52b,0x52e,0x52b,0x52b, +0x52b,0x52b,0x52b,0x52b,0x52e,0x52e,0x52b,0x6b1,0x52b,0x52b,0x52b,0xab0,0xab0,0xab0,0xab0,0xab0, +0xab0,0xab0,0xab0,0xab0,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d,0xb9d, +0x6ba,0x537,0x6ba,0x6ba,0x53a,0x537,0x537,0x6ba,0x6ba,0x53a,0x537,0x6ba,0x53a,0x537,0x537,0x6ba, +0x537,0x6ba,0x546,0x543,0x537,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x6ba,0x6ba,0x6ba, +0x6ba,0x537,0x537,0x6ba,0x53a,0x6ba,0x53a,0x6ba,0x6ba,0x6ba,0x6ba,0x6ba,0x6c0,0x53d,0x6ba,0x53d, +0x53d,0x537,0x537,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x537,0x537,0x6ba,0x6ba,0x537,0x537, +0x537,0x53a,0x537,0x537,0x53a,0x537,0x537,0x53a,0x6ba,0x53a,0x537,0x537,0x6ba,0x537,0x537,0x537, +0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, +0x6bd,0x6ba,0x53a,0x537,0x6ba,0x6ba,0x6ba,0x6ba,0x537,0x537,0x6ba,0x6ba,0x537,0x53a,0x6bd,0x6bd, +0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, +0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x6ba,0x6ba,0x53a,0x53a,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x6ba,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x6ba,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537, +0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a, +0x537,0x537,0x537,0x537,0x537,0x537,0x53a,0x53a,0x53a,0x53a,0x537,0x540,0x537,0x537,0xba0,0xba0, +0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0xba0,0x549,0xab3,0x549,0x549, +0x549,0x549,0x549,0x549,0x555,0x552,0x555,0x552,0x549,0x549,0x549,0x549,0x549,0x549,0x6c3,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x7c5,0x7c5,0x549,0x549,0x549,0x549,0x54f,0x54f,0x549,0x549, +0x549,0x549,0x549,0x549,0x54c,0x7cb,0x7c8,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549, +0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0x549,0xab3,0xba6,0xab3,0xab3,0xab3, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558,0x558, +0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x55e,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c, +0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xc0c,0xd20, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x561,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564,0x564, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x564,0x564,0x564,0x564, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8,0x6d8, +0x567,0x567,0x6d8,0x6d8,0x6d8,0x6d8,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9,0xba9, +0x6de,0x6de,0x56a,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x6db,0x56d,0x56d,0x56a,0x56a,0x570,0x570, +0x570,0x570,0x6de,0x6de,0x570,0x570,0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x570,0x570, +0x6e1,0x6de,0x56a,0x56a,0x56a,0x56a,0x6de,0x6de,0x6db,0x56a,0x570,0x6de,0x56a,0x56a,0x6db,0x6de, +0x6de,0x6de,0x570,0x570,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a,0x56a, +0x56a,0x56a,0x6de,0x6db,0x6de,0x6db,0x56a,0x570,0x570,0x570,0x570,0x570,0x570,0x56a,0x56a,0x6db, +0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xab9,0xbac,0xbac,0xbac,0xbaf,0xbaf,0xc24,0xc24,0xbac, +0x57c,0x57c,0x57c,0x57c,0x579,0x6f0,0x6f0,0x573,0x573,0x6e4,0x573,0x573,0x573,0x573,0x6ea,0x6e4, +0x573,0x579,0x573,0x573,0xd29,0xd29,0xbb2,0xbb2,0xda7,0xabc,0x576,0x576,0x6e7,0x57f,0x6e7,0x576, +0x579,0x573,0x579,0x579,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x573,0x573,0x573,0x579,0x579, +0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x579,0x57c,0x57c,0x576,0x573,0x573,0x573,0x573, +0x6f3,0x573,0x6f3,0x573,0x573,0x573,0x573,0x573,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce,0x7ce, +0x7ce,0x7ce,0x7ce,0x7ce,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573,0x573, +0x6f3,0x6f0,0x582,0x6f3,0x6e4,0x6ea,0x579,0x6e4,0x6ed,0x6e4,0x6e4,0x573,0x6e4,0x6f0,0x582,0x6f0, +0xabc,0xabc,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb8,0xbb5,0xbb5,0xda1,0xe5e, +0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585,0x585, +0x585,0x585,0x585,0x585,0x588,0x136e,0x136e,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588, +0x14be,0x58e,0x59a,0x58e,0x58e,0x136e,0x588,0x588,0x59a,0x59a,0x1371,0x1371,0x5a0,0x5a0,0x588,0x594, +0x588,0x588,0x594,0x588,0x594,0x588,0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x594,0x588,0x588, +0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x594, +0x594,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x6f9,0x588,0x588,0x588,0x588,0x588,0x588, +0x594,0x588,0x588,0x594,0x588,0x588,0x588,0x588,0x136e,0x588,0x136e,0x588,0x588,0x588,0x588,0x136e, +0x136e,0x136e,0x588,0x1272,0x588,0x588,0x588,0x591,0x591,0x591,0x591,0x12f0,0x12f0,0x588,0x58b,0x597, +0x59d,0x588,0x588,0x588,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb,0xbbe,0xbbb, +0xbbe,0xbbb,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x6f6,0x588,0x594,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x588,0x588,0x588, +0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x588,0x136e,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5c1,0x5c7,0x5b8,0x5bb,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5be,0x5be,0x5be,0x5be,0x5be,0x5be, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3, +0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x12f3,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c4,0x5ca, +0x5c4,0x5ca,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1,0x5c7,0x5c1, +0x5c4,0x5c7,0x5c1,0x5c4,0x5c7,0x5c1,0x5c4,0x5ca,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c4,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1,0x5c1,0x5c4, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1, +0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c1,0x5c1, +0x5c4,0x5c1,0x5c4,0x5c1,0x5c1,0x5c1,0x5c1,0x5c1,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4, +0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5c4,0x5ca,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7, +0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5ca,0x5ca,0x5ca,0x5ca, +0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca,0x5ca, +0x5ca,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5c7,0x5cd,0x5cd,0x5cd,0x5cd, +0xfb1,0xfb1,0xfb1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x14c1,0x16ce,0x16ce,0x82b,0x831,0x831,0x83d, +0x83d,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x825,0x82e,0x5dc,0x5dc,0x5d6,0x5dc, +0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc, +0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5dc, +0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9, +0x5df,0x5dc,0x5d6,0x5d9,0x5df,0x5dc,0x5d6,0x5d9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9, +0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c9,0x6c6,0x6c6,0x6c6,0x6c6, +0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6, +0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6c6,0x6cf,0x6cf, +0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6d2,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf, +0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cf,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc, +0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6cc,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5, +0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6d5,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc, +0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0x6fc,0xc12,0x891,0x88b,0x888,0x88e,0x885,0x711,0x714, +0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x714,0x897,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711, +0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x711,0x894,0x894,0x717,0x8a6,0x8a9,0x8af, +0x7d1,0x7dd,0x8c4,0x7da,0x89d,0x89a,0x89d,0x89a,0x8a3,0x8a0,0x8a3,0x8a0,0x89d,0x89a,0x7d7,0x8af, +0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x89d,0x89a,0x8b2,0x8bb,0x8b8,0x8b8,0x71d,0x759,0x759,0x759, +0x759,0x759,0x759,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x753, +0x753,0x753,0x753,0x753,0x753,0x753,0x753,0x720,0x73b,0x71a,0x741,0x744,0x73e,0x756,0x756,0x756, +0x756,0x756,0x756,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x750, +0x750,0x750,0x750,0x750,0x750,0x750,0x750,0x720,0x73b,0x71a,0x73b,0xc15,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf, +0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x7bf,0x126c,0x126c, +0x126c,0x126c,0x126c,0x7c2,0x7d7,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x7da,0x8fa,0x8fa, +0x8fa,0x8fa,0x7e0,0x7e0,0x8b5,0x8c1,0x8c1,0x8c1,0x8c1,0x8be,0x7d4,0x8ac,0xae0,0xae0,0xae0,0xc27, +0xc45,0xc42,0xafb,0x882,0x7e6,0x7e3,0x7e6,0x7e9,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e6,0x7e3,0x7e3, +0x7e3,0x7e3,0x7e3,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3,0x7e6,0x7e6,0x7e3, +0x7e6,0x7e6,0x7e3,0x7e3,0xc48,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2, +0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2, +0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f8,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f5,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2,0x7f5,0x7f5,0x7f2, +0x7f5,0x7f5,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2, +0x7f2,0x7f2,0x7f8,0x7f2,0x7f2,0x7f2,0x7f2,0x7f2,0x7f5,0x7f8,0x7f8,0x7f5,0x7f5,0x7f5,0x7f5,0x8ca, +0x8cd,0x7fb,0x7fe,0xc30,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x807,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804,0x804, +0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810, +0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0x810,0xd32,0xd32,0xe61,0x80a, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0xd2c,0xd2c,0xd2c,0xd2c, +0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813,0x813, +0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x816,0x816,0x816,0x816,0x816,0x816,0xd35,0xd35,0xd35,0xd35,0x8e2,0x8e2,0x8e2,0x8e2,0x8e2, +0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, +0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816,0x816, +0x816,0x816,0xd35,0xd35,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, +0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819,0x819, +0x819,0x819,0x819,0x819,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x81c,0x81c,0x81c,0x81c, +0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c, +0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0x81c,0xe64,0xe64, +0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64,0xe64, +0xe64,0xe64,0xe64,0xe64,0x10d4,0x10d4,0x10d4,0x10d4,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, +0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f, +0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x822,0x81f,0x822,0x81f,0x822, +0x822,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x81f,0x822,0x81f,0x822,0x81f,0x822, +0x822,0x81f,0x81f,0x822,0x822,0x822,0x81f,0x81f,0x81f,0x81f,0x1476,0x1476,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6, +0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x8d6,0x12a8,0x12a8,0x12a8,0x12a8, +0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0x1251,0xd2c,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, +0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8dc, +0x8d9,0x8dc,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0x8d9, +0x8d9,0x8d9,0x8d9,0x8d9,0x8d9,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33,0xc33, +0xc33,0xc33,0xc33,0xc33,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df,0x8df, +0x8df,0x8df,0x8df,0xd35,0x95d,0x93f,0x93f,0x93f,0x93f,0x939,0x93f,0x93f,0x951,0x93f,0x93f,0x93c, +0x948,0x94e,0x94e,0x94e,0x94e,0x94e,0x951,0x939,0x945,0x939,0x939,0x939,0x930,0x930,0x939,0x939, +0x939,0x939,0x939,0x939,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x954,0x939,0x939, +0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x939,0x93c,0x930,0x939,0x930,0x939,0x930,0x94b,0x942, +0x94b,0x942,0x95a,0x95a,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, +0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969,0x969, +0x969,0x969,0x969,0x969,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, +0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c,0x96c, +0x96c,0x96c,0x96c,0x96c,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, +0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f,0x96f, +0x96f,0x96f,0x96f,0x96f,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x972,0x972,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x975,0x975,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978,0x978, +0x978,0x978,0x978,0x978,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b,0x97b, +0x97b,0x97b,0x97b,0x97b,0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x97e,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981, +0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0x981,0xa0e,0xa0e,0xf96,0xa0e, +0xa0e,0xa0e,0xa11,0xa0e,0xf96,0xa0e,0xa0e,0xf8d,0xa08,0x9fc,0x9fc,0x9fc,0x9fc,0xa0b,0x9fc,0xf7b, +0xf7b,0xf7b,0x9fc,0x9ff,0xa08,0xa02,0xf81,0xf90,0xf90,0xf7b,0xf7b,0xf96,0xb01,0xb01,0xb01,0xb01, +0xb01,0xb01,0xb01,0xb01,0xb01,0xb01,0xa14,0xa14,0xa05,0xa05,0xa05,0xa05,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0b,0xa0b,0x9fc,0x9fc,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e, +0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa0e,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xd86,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23, +0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa23,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29, +0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa29,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2c,0xa32,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0x110d, +0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110d,0x110a,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f, +0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa2f,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44, +0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa44,0xa68,0xa68,0xa68,0xa6b, +0xa6b,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, +0xa50,0xa50,0xa65,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa47,0xa65,0xa65,0xa68,0xa68,0xa68,0xa68, +0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68, +0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa68,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa74,0xa74,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, 0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, -0xa89,0xa89,0xa89,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95, -0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95, -0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xa95,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7, -0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaa7,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad, -0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xaad,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc, -0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabc,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xac2,0xabf,0xabf, -0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa8c,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89,0xa89, +0xa89,0xa89,0xa89,0xa89,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3, +0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xab3,0xba6, +0xba6,0xba6,0xba6,0xba6,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, 0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf,0xabf, -0xac5,0xac5,0xc0c,0xc0c,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, -0xac5,0xac5,0xac5,0xac5,0xc0c,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5,0xac5, +0xabf,0xabf,0xabf,0xabf,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1,0xad1, +0xad1,0xad1,0xad1,0xad1,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7,0xad7, +0xad7,0xad7,0xad7,0xad7,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, 0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6, -0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0xae6,0x1485, -0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xc96,0xc96,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, -0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec,0xaec, -0xaec,0xaec,0xc93,0xc93,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, +0xae6,0xae6,0xae6,0xae6,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaec,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9, +0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xae9,0xaef,0xaef,0xc36,0xc36, 0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef, -0xaef,0xaef,0xaef,0xaef,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2,0xaf2, -0xaf2,0xaf2,0xaf2,0xaf2,0xb01,0xb01,0xb01,0xb01,0xb01,0xaf8,0xb04,0xb0a,0xb0a,0xb0a,0xafe,0xafe, -0xafe,0xb07,0xafb,0xafb,0xafb,0xafb,0xafb,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xaf5,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb01,0xb01,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xb0a,0xb0a,0xb0a, -0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb0a,0xb0a,0xb0a,0xb0a,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xb01,0xb01,0xb01,0xb01,0xb01, -0xb01,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe, -0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0xafe,0x1683,0x1683, -0xb16,0xb0d,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb0d,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb0d,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb0d,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, +0xc36,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xaef,0xb10,0xb10,0xb10,0xb10, 0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10, -0xb10,0xb10,0xb10,0xb10,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, -0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13, -0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb13,0xb16,0xb16,0xb16,0xb16,0xb19,0xb19,0xb19,0xb19, +0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0xb10,0x14c4,0xb19,0xb19,0xb19,0xb19, +0xb19,0xb19,0xcbd,0xcbd,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16, +0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xb16,0xcba,0xcba, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, +0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, 0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19, -0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb19,0xb1c, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22,0xb22, -0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c, -0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb7c,0xb79,0xb7c,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79, -0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xb79,0xc84,0xc87,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71,0xd71, -0xd71,0xd71,0xd71,0xd71,0xe8b,0xe8b,0xe8b,0xe8b,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e,0xb8e, -0xb8e,0xb8e,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xc8a,0xd77,0xd7d,0xd77,0xd74,0xd77,0xd77, -0xd74,0xd77,0xd74,0xd77,0xd77,0xf7e,0x1218,0x1218,0xd86,0xd86,0xd86,0xd86,0xd86,0xd8c,0xd89,0xe9d, -0xe9d,0xe9d,0xe9d,0x1383,0xf90,0x1383,0x12d8,0x12d8,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4, -0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbc4,0xbf4,0xbf1,0xbf4,0xbf1,0xbf4,0xbf1, -0x10a7,0x10a4,0xf96,0xf93,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7,0xbc7, -0xbc7,0xbc7,0xbc7,0xbc7,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbca,0xbca,0xbca,0xbca,0xbcd,0xbcd,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca,0xbca, -0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbfa,0xbf7,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6, -0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd6,0xbd3,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbd6,0xbd3, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0, -0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd0,0xbd6,0xbd3,0xbd0,0xbd0, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbdf,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbdf,0xbdf,0xbdf,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9,0xbd9, -0xbdc,0xbd9,0xbd9,0xbd9,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f,0xc0f, -0xc0f,0xc0f,0xc0f,0xc0f,0xc8d,0xc90,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd74,0xd7d,0xd7d, -0xd74,0xd74,0xd74,0xd74,0xd77,0xd77,0xe8e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e,0xf7e, -0xf7e,0x10ef,0x1224,0x121b,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, -0xcb4,0xcb4,0xcb4,0xcb4,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcba,0xcba,0xcba,0xcba,0xcba,0xcb7, -0xccc,0xccc,0xccc,0xcc6,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xcc6, -0xccc,0xccc,0xccc,0xccc,0xcc0,0xcc0,0xcc9,0xcc9,0xcc9,0xcc9,0xcbd,0xcbd,0xcbd,0xcbd,0xcbd,0xcc3, -0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd92,0xd8f,0xd92,0xd92,0xd92, -0xd92,0xd92,0xd92,0xd92,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc, -0xccc,0xccc,0xcc6,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc,0xccc, -0xccc,0xcc0,0xcc0,0xcc0,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3, -0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3,0xcc3, -0xcc3,0xcc3,0xcc3,0xcc3,0xccf,0xccf,0xccf,0xccf,0xccf,0xcd2,0xcd2,0xcd2,0xccf,0xccf,0xccf,0xccf, -0xccf,0xccf,0xd95,0xd95,0xd95,0xd95,0xd95,0xd95,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xea0,0xf9c, -0xf9c,0xf99,0xf99,0xf99,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5, -0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5,0xcd5, -0xcd5,0xcd5,0xcd5,0xcd5,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c,0xb1c, +0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb22,0xb2e,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb31,0xb25,0xb25, +0xb25,0xb25,0xb25,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb1f,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb2b,0xb2b,0xb34,0xb34,0xb34,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34,0xb34, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb34,0xb34,0xb34,0xb34,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb2b,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28, +0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0xb28,0x16d1,0x16d1,0xb40,0xb37,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb37,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb37,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a,0xb3a, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40, +0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb40,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d,0xb3d, +0xb3d,0xb3d,0xb3d,0xb3d,0xb40,0xb40,0xb40,0xb40,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43, +0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb43,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49, +0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb49,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c, +0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xb4c,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6, +0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba6,0xba3,0xba6, +0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xba3,0xcae, +0xcb1,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xeb8,0xeb8,0xeb8,0xeb8, +0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xbb5,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4,0xcb4, +0xcb4,0xcb4,0xda4,0xe5b,0xda4,0xda4,0xda4,0xda4,0xda1,0xda4,0xda1,0xda4,0xda4,0xfab,0x1242,0x1242, +0xdad,0xdad,0xdad,0xdad,0xdad,0xdb3,0xdb0,0xeca,0xeca,0xeca,0xeca,0x13bf,0xfbd,0x13bf,0x12fc,0x12fc, +0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb,0xbeb, +0xbeb,0xbeb,0xc1b,0xc18,0xc1b,0xc18,0xc1b,0xc18,0x10ce,0x10cb,0xfc3,0xfc0,0xbee,0xbee,0xbee,0xbee, +0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbee,0xbf1,0xbf1,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf4,0xbf4,0xbf1,0xbf1, +0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf1,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xc21,0xc1e,0xbfd, +0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd,0xbfa,0xbfd, +0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbfd,0xbfa,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7,0xbf7, +0xbf7,0xbf7,0xbf7,0xbf7,0xbfd,0xbfa,0xbf7,0xbf7,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc06,0xc06,0xc06,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00, +0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc00,0xc03,0xc00,0xc00,0xc00,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39, +0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xc39,0xcb7,0xd26,0xda1,0xda1, +0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xe5b,0xe5b,0xda1,0xda1,0xda1,0xda1,0xda4,0xda4,0xebb,0xfab, +0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0xfab,0x126f,0x126f,0x1245,0xcdb,0xcdb,0xcdb,0xcdb, 0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb, -0xcdb,0xcdb,0xcdb,0xcdb,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4,0xce4, -0xce4,0xce4,0xce4,0xce4,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0,0xcf0, -0xcf0,0xcf0,0xcf0,0xcf0,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff,0xcff, -0xcff,0xcff,0xcff,0xcff,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, -0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b,0xd9b, -0xd9b,0xd9b,0xd9b,0xd9b,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e,0xd9e, -0xd9e,0xd9e,0xd9e,0xd9e,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1,0xda1, -0xda1,0xda1,0xda1,0xda1,0xe5b,0xe5b,0xdb3,0xdb3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xea3,0xfa8, -0xfa8,0xfa8,0xfa8,0xfa8,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5,0xfa5, -0xfa5,0xfa5,0xfa5,0xfa5,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf, -0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf,0xdc2,0xdbf, -0xdc2,0xdbf,0xdc2,0xdbf,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce, -0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce,0xdce, -0xdce,0xdce,0xdce,0xdce,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4,0xdd4, -0xdd4,0xdd4,0xdd4,0xdd4,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec, -0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xdec,0xea6,0xea6,0xea6,0xea6,0xfab, -0xfab,0xfab,0xfab,0xfab,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, +0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcdb,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xce1,0xce1,0xce1,0xce1,0xce1,0xcde,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xcf0,0xcf0, +0xcf0,0xcf0,0xce4,0xce4,0xce4,0xce4,0xce4,0xcea,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9, +0xdb9,0xdb9,0xdb9,0xdb9,0xdb6,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xdb9,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xced,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3, +0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xcf3,0xce7,0xce7,0xce7,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea, +0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcea,0xcf6,0xcf6,0xcf6,0xcf6, +0xcf6,0xcf9,0xcf9,0xcf9,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xcf6,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc,0xdbc, +0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0xecd,0x10d7,0x10d7,0xfc6,0xfc6,0xfc6,0xcfc,0xcfc,0xcfc,0xcfc, +0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc, +0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xcfc,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02, +0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd02,0xd0b,0xd0b,0xd0b,0xd0b, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b, +0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd0b,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17, +0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd17,0xd23,0xd23,0xd23,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23, +0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xd23,0xdc2,0xdc2,0xdc2,0xdc2, +0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2, +0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc2,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc5,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8, +0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xdc8,0xe88,0xe88,0xdda,0xdda, +0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xed0,0xfd2,0xfd2,0xfd2,0xfd2,0xfd2,0xfcf,0xfcf,0xfcf,0xfcf, +0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xfcf,0xde9,0xde6,0xde9,0xde6, +0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6, +0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xde9,0xde6,0xdf5,0xdf5,0xdf5,0xdf5, 0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5, -0xdf5,0xdf5,0xdf5,0xdf5,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe,0xdfe, -0xdfe,0xdfe,0xdfe,0xdfe,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, -0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07,0xe07, -0xe07,0xe07,0xe07,0xe01,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04, -0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe04,0xe07, -0xe07,0xe07,0xe07,0xe07,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10,0xe10, -0xe10,0xe10,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0d,0xe0a,0xe13,0xfb7,0xfb1,0xfc0,0xfae, -0xe10,0xe10,0xfae,0xfae,0xe25,0xe25,0xe16,0xe25,0xe25,0xe25,0xe1c,0xe25,0xe25,0xe25,0xe25,0xe16, +0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdf5,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb, +0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xdfb,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13,0xe13, +0xe13,0xe13,0xe13,0xed3,0xed3,0xed3,0xed3,0xfd5,0xfd5,0xfd5,0xfd5,0xfd5,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c, +0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe1c,0xe25,0xe25,0xe25,0xe25, 0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25, -0xe25,0xe25,0xe25,0xe25,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28,0xe28, -0xe28,0xe28,0xe28,0xe28,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a,0xe3a, -0xe3a,0xe3a,0xe3a,0xe3a,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58,0xe58, -0xe58,0xe58,0xe58,0xe58,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3,0x10b3, -0x10b3,0x10b3,0x10b3,0x10b3,0xea0,0xea0,0xea0,0xea0,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99,0xf99, -0xf99,0xf99,0xf99,0xf99,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f, -0xf9f,0xf9f,0xf9f,0xf9f,0xec1,0xec1,0xec1,0xec1,0xed3,0xedc,0xedf,0xedc,0xedf,0xedc,0xedf,0xedc, -0xedf,0xedc,0xedf,0xedc,0xedc,0xedc,0xedf,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc, -0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xedc,0xec4,0xed3,0xec1,0xec1, -0xec1,0xec1,0xec1,0xed6,0xec1,0xed6,0xed3,0xed3,0xee8,0xee5,0xee8,0xee8,0xee8,0xee5,0xee5,0xee8, -0xee5,0xee8,0xee5,0xee8,0xee5,0xfd2,0xfd2,0xfd2,0x110d,0xfc9,0xfd2,0xfc9,0xee5,0xee8,0xee5,0xee5, -0xfc9,0xfc9,0xfc9,0xfc9,0xfcc,0xfcf,0x110d,0x110d,0xeeb,0xeeb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfdb,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1, -0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xef1,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00, -0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00, -0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0xf00,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8, -0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0x14b8,0xf06,0xf06,0xf06,0xf06, -0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06, -0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf06,0xf4e,0xf69,0xf60,0xf5d, -0xf5d,0xf69,0xf69,0xf60,0xf60,0xf5d,0xf5d,0xf5d,0xf5d,0xf5d,0xf69,0xf69,0xf69,0xf4e,0xf4e,0xf4e, -0xf4e,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf69,0xf4e,0xf60, -0xf63,0xf4e,0xf4e,0xf66,0xf66,0xf66,0xf66,0xf66,0xf66,0xf51,0xf69,0xf66,0xf5a,0xf5a,0xf5a,0xf5a, -0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0xf5a,0x10d4,0x10d4,0x10d1,0x10ce,0xf57,0xf57,0xf81,0xf81,0xf81,0xf81, -0x1224,0x1224,0x121b,0x121b,0x1221,0x1218,0x1218,0x1218,0x1218,0x121b,0x12c3,0x1221,0x121b,0x1221,0x1218,0x1221, -0x1224,0x1218,0x1218,0x1218,0x121b,0x121b,0x1218,0x1218,0x121b,0x1218,0x1218,0x121b,0xf9f,0xf9f,0xf9f,0xf9f, -0xf9f,0xf99,0xf99,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0xf9f,0x1491,0x1491,0x1491,0xf9c,0xf99,0xf99,0xf99, -0xf99,0x1233,0x1230,0x1230,0x1230,0x1230,0x1491,0x1491,0x1491,0x1491,0x1491,0x1491,0xfbd,0xfbd,0xfba,0xfb4, -0xfba,0xfb4,0xfba,0xfb4,0xfba,0xfb4,0xfb1,0xfb1,0xfb1,0xfb1,0xfc6,0xfc3,0xfb1,0x110a,0x138f,0x1392, -0x1392,0x138f,0x138f,0x138f,0x138f,0x138f,0x1395,0x1395,0x14ac,0x14a0,0x14a0,0x149d,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfd8,0xfd5,0xfd5,0xfe4,0xfdb,0x12e7,0x12e4,0x168c,0x12e7,0x12e4,0x139e,0x139b, -0x14af,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0x14b5,0x14af,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb, -0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfde,0xfdb,0xfdb,0xfdb, -0xfdb,0xfdb,0xfdb,0xfdb,0xfdb,0xfe4,0xfdb,0xfe4,0xfdb,0xfe4,0xfe4,0xfdb,0xfe7,0xfe7,0xfed,0xff3, -0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3, -0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xff3,0xfed,0xfe7,0xfe7, -0xfe7,0xfe7,0xfed,0xfed,0xfe7,0xfe7,0xff0,0x13a7,0x13a4,0x13a4,0xff3,0xff3,0xfea,0xfea,0xfea,0xfea, -0xfea,0xfea,0xfea,0xfea,0xfea,0xfea,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x13aa,0x1008,0x1008,0x1008,0x1008, -0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008, -0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1008,0x1011,0x1011,0x1011,0x1011, -0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011,0x1011, -0x1011,0x1011,0x1011,0x1011,0x1014,0x1014,0x1014,0x1017,0x1014,0x1014,0x101a,0x101a,0x101d,0x101d,0x101d,0x101d, +0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe25,0xe2e,0xe2e,0xe2e,0xe2e, +0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e, +0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe28,0xe2b,0xe2b,0xe2b,0xe2b, +0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b, +0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2b,0xe2e,0xe2e,0xe2e,0xe2e,0xe2e,0xe37,0xe37,0xe37,0xe37, +0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe37,0xe34,0xe34,0xe34,0xe34,0xe34,0xe34, +0xe34,0xe34,0xe31,0xe3a,0xfe1,0xfdb,0xfea,0xfd8,0xe37,0xe37,0xfd8,0xfd8,0xe4c,0xe4c,0xe3d,0xe4c, +0xe4c,0xe4c,0xe43,0xe4c,0xe4c,0xe4c,0xe4c,0xe3d,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c, +0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4c,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f, +0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe4f,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67, +0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe67,0xe85,0xe85,0xe85,0xe85, +0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0xe85,0x10e0,0x10e0,0x10e0,0x10e0, +0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0x10e0,0xecd,0xecd,0xecd,0xecd, +0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9, +0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xeee,0xeee,0xeee,0xeee, +0xf00,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf0c,0xf09,0xf09,0xf09,0xf0c,0xf09, +0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09,0xf09, +0xf09,0xf09,0xf09,0xf09,0xef1,0xf00,0xeee,0xeee,0xeee,0xeee,0xeee,0xf03,0xeee,0xf03,0xf00,0xf00, +0xf15,0xf12,0xf15,0xf15,0xf15,0xf12,0xf12,0xf15,0xf12,0xf15,0xf12,0xf15,0xf12,0xffc,0xffc,0xffc, +0x1137,0xff3,0xffc,0xff3,0xf12,0xf15,0xf12,0xf12,0xff3,0xff3,0xff3,0xff3,0xff6,0xff9,0x1137,0x1137, +0xf18,0xf18,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x1005,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e,0xf1e, +0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, +0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d,0xf2d, +0xf2d,0xf2d,0xf2d,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7,0x14f7, +0x14f7,0x14f7,0x14f7,0x14f7,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, +0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33,0xf33, +0xf33,0xf33,0xf33,0xf33,0xf7b,0xf96,0xf8d,0xf8a,0xf8a,0xf96,0xf96,0xf8d,0xf8d,0xf8a,0xf8a,0xf8a, +0xf8a,0xf8a,0xf96,0xf96,0xf96,0xf7b,0xf7b,0xf7b,0xf7b,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf96, +0xf96,0xf96,0xf96,0xf96,0xf96,0xf96,0xf7b,0xf8d,0xf90,0xf7b,0xf7b,0xf93,0xf93,0xf93,0xf93,0xf93, +0xf93,0xf7e,0xf96,0xf93,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0xf87,0x1101,0x1101, +0x10fe,0x10fb,0xf84,0xf84,0xfae,0xfae,0xfae,0xfae,0x126f,0x126f,0x1245,0x1245,0x124b,0x1242,0x1242,0x1242, +0x1242,0x1245,0x136b,0x124b,0x1245,0x124b,0x1242,0x124b,0x126f,0x1242,0x1242,0x1242,0x1245,0x1245,0x1242,0x1242, +0x1245,0x1242,0x1242,0x1245,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9,0xfc6,0xfc6,0xfc9,0xfc9,0xfc9,0xfc9,0xfc9, +0xfc9,0x14d0,0x14d0,0x14d0,0x10d7,0xfc6,0xfc6,0xfc6,0xfc6,0x127b,0x1254,0x1254,0x1254,0x1254,0x14d0,0x14d0, +0x14d0,0x14d0,0x14d0,0x14d0,0xfe7,0xfe7,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfe4,0xfde,0xfdb,0xfdb, +0xfdb,0xfdb,0xff0,0xfed,0xfdb,0x1134,0x13cb,0x13ce,0x13ce,0x13cb,0x13cb,0x13cb,0x13cb,0x13cb,0x13d1,0x13d1, +0x14eb,0x14df,0x14df,0x14dc,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x1002,0xfff,0xfff,0x100e, +0x1005,0x130b,0x1308,0x16da,0x130b,0x1308,0x13da,0x13d7,0x14ee,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee,0x14f4,0x14ee, +0x14f4,0x14ee,0x14f4,0x14ee,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005,0x100e,0x1005, +0x100e,0x1005,0x100e,0x1005,0x1008,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x1005,0x100e,0x1005,0x100e, +0x1005,0x100e,0x100e,0x1005,0x1011,0x1011,0x1017,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, 0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d, -0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x101d,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1029,0x1020,0x102f,0x102c,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026, -0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x1026,0x12ed,0x12ea,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x103e,0x10bc,0x1032,0x1032,0x1032,0x1038, -0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x13ad,0x1035,0x1035,0x1038,0x1044,0x1041,0x103b,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b, -0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x1041,0x103b,0x14c4,0x14c1,0x14c4,0x14c1, -0x14c7,0x14c7,0x1695,0x13ad,0x104d,0x104d,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, +0x101d,0x101d,0x101d,0x101d,0x101d,0x1017,0x1011,0x1011,0x1011,0x1011,0x1017,0x1017,0x1011,0x1011,0x101a,0x13e3, +0x13e0,0x13e0,0x101d,0x101d,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x1014,0x13e6,0x13e6, +0x13e6,0x13e6,0x13e6,0x13e6,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, +0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032,0x1032, +0x1032,0x1032,0x1032,0x1032,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b, +0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103b,0x103e,0x103e,0x103e,0x1041, +0x103e,0x103e,0x1044,0x1044,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, +0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047,0x1047, +0x1047,0x1047,0x1047,0x1047,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, +0x1053,0x104a,0x1059,0x1056,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, 0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050,0x1050, -0x1050,0x1050,0x1050,0x1050,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d,0x104d, -0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x1056,0x1056,0x1056,0x1056,0x1056,0x1059,0x1059,0x1059,0x10b0,0x1062, -0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071,0x1071, -0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105c,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f, -0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f,0x105f, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, -0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080,0x1080, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092,0x1092, -0x109b,0x109b,0x109b,0x109b,0x109e,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1,0x10a1, -0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x111f, -0x111f,0x111f,0x111f,0x111f,0x111f,0x111f,0x1116,0x1116,0x1119,0x1119,0x111f,0x1116,0x1116,0x1116,0x1116,0x1116, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122,0x1122, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d,0x113d, -0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, -0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1146,0x114c, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158,0x1158, -0x1167,0x1167,0x1167,0x1176,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c,0x117c, -0x117c,0x117c,0x117c,0x116a,0x1176,0x1176,0x1167,0x1167,0x1167,0x1167,0x1176,0x1176,0x1167,0x1176,0x1176,0x1176, -0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188, -0x118b,0x1188,0x1188,0x1188,0x1188,0x1188,0x1188,0x1182,0x1182,0x1182,0x1188,0x1185,0x14cd,0x14d0,0x14d3,0x14d3, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x118e,0x119a,0x118e,0x118e,0x118e,0x11a3,0x11a3,0x118e,0x118e,0x11a3,0x119a,0x11a3,0x11a3,0x119a,0x118e,0x1191, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a,0x119a, -0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5, -0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5,0x11b5, -0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd, -0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11cd,0x11ca,0x11ca,0x11ca, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6,0x11d6, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, -0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5,0x11e5, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1203,0x1200,0x1200,0x1200,0x1200, -0x11fd,0x11fd,0x11fd,0x11f1,0x11f1,0x11f1,0x11f1,0x11fd,0x11fd,0x11f7,0x11f4,0x11fa,0x11fa,0x11eb,0x1206,0x1206, -0x11ee,0x11ee,0x11fd,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, -0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1203,0x1200,0x1203,0x1200,0x1200,0x1200, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x120f,0x120f,0x120f,0x120c,0x120c,0x120c,0x1209,0x1209,0x1209,0x1209,0x120c,0x1209,0x1209,0x1209,0x120f,0x120c, -0x120f,0x120c,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209, -0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x1209,0x120f,0x120c,0x120c, -0x1209,0x1209,0x1209,0x1209,0x121b,0x121b,0x12c0,0x1218,0x12c0,0x12c0,0x12c0,0x12c0,0x1218,0x121e,0x1224,0x1218, -0x1218,0x1218,0x1218,0x1218,0x121e,0x1221,0x1224,0x1224,0x1221,0x1224,0x1218,0x1221,0x1221,0x1227,0x1224,0x1218, -0x1218,0x1224,0x121b,0x121b,0x1356,0x1356,0x1245,0x1356,0x1356,0x1356,0x1245,0x1356,0x1356,0x1356,0x123f,0x123f, -0x123f,0x123f,0x123f,0x134d,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1242,0x1353,0x1353,0x1353,0x1353, -0x1353,0x1353,0x1353,0x1242,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266,0x1266, -0x1266,0x1266,0x1266,0x1266,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b,0x130b, -0x130b,0x130b,0x130b,0x130b,0x1320,0x1311,0x1320,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323, -0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323,0x1323, -0x1323,0x1323,0x1323,0x1323,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1311,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329, -0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1329,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1332,0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1335,0x1335,0x1335,0x1332,0x1335,0x1332,0x1335, -0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1332,0x1335,0x1332,0x1332,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1332,0x1332,0x1332,0x1332,0x1332,0x1332, -0x1332,0x1332,0x1332,0x1332,0x1332,0x1332,0x14df,0x14df,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14e8, -0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x16a1,0x16a1,0x16a1,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8,0x16a1,0x16a1, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e2,0x14e8,0x14e8,0x14e2,0x14e8,0x14e8,0x14e8,0x14df,0x14df,0x14e8,0x14e8, -0x1335,0x1335,0x1335,0x1338,0x1338,0x14eb,0x1335,0x1335,0x1335,0x1335,0x1338,0x14ee,0x14e8,0x14e8,0x14e8,0x16a1, -0x16a1,0x16a1,0x16a1,0x16a1,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8,0x14e8, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x14e2,0x14e2,0x14e8,0x14eb,0x14e8,0x14e2,0x14e8,0x16a1,0x16a1,0x16a1,0x16a4,0x16a4,0x16a4,0x16a4,0x16a4, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14e8, -0x1335,0x14e8,0x1338,0x1338,0x1335,0x1335,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338,0x1338, -0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1338,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1335,0x1338,0x1335,0x1338,0x1338,0x1338,0x1338, -0x1338,0x1338,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1338,0x1335,0x1335,0x1335,0x1335,0x1338,0x1338,0x1338, -0x1335,0x1338,0x1338,0x1338,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x14eb,0x1335,0x1335,0x1335, -0x1335,0x14e8,0x14e2,0x16a1,0x13b3,0x13b3,0x13b3,0x13b3,0x14df,0x14df,0x14df,0x14df,0x14df,0x14e5,0x14e8,0x16a1, -0x16a1,0x16a1,0x16a1,0x169e,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335,0x1335, -0x1335,0x1335,0x1335,0x1335,0x14e2,0x14e8,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e2,0x14e8,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14e8,0x1335, -0x1335,0x1335,0x1335,0x1335,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, -0x133b,0x133b,0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x13b6,0x133b,0x13b6,0x133b,0x13b6,0x133b,0x13b6, -0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x13b6,0x13b6,0x133b,0x133b,0x133b,0x133b, -0x13b6,0x133b,0x13b6,0x13b6,0x133b,0x133b,0x133b,0x133b,0x13b6,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b,0x133b, -0x133b,0x133b,0x133b,0x133b,0x133b,0x14f4,0x14f4,0x16a7,0x16a7,0x133e,0x133e,0x133e,0x133b,0x133b,0x133b,0x133e, -0x133e,0x133e,0x133e,0x133e,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1341,0x1344,0x1344,0x1344,0x1341,0x1341,0x1341,0x1341,0x1341, -0x1341,0x1341,0x1341,0x1341,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, +0x1050,0x1050,0x1050,0x1050,0x1311,0x130e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x1068,0x10e9,0x105c,0x105c,0x105c,0x1062,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9,0x13e9, +0x105f,0x105f,0x1062,0x106e,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065,0x106b,0x1065, +0x106b,0x1065,0x106b,0x1065,0x1503,0x1500,0x1503,0x1500,0x1506,0x1506,0x16e3,0x13e9,0x1077,0x1077,0x107a,0x107a, +0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a, +0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x107a,0x1077,0x1077,0x1077,0x1077, +0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1077,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1080,0x1080, +0x1080,0x1080,0x1080,0x1083,0x1083,0x1083,0x10dd,0x108c,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b, +0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x109b,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086,0x1086, +0x1086,0x1086,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089, +0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x1089,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa, +0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10aa,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc, +0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10bc,0x10c5,0x10c5,0x10c5,0x10c5,0x10da,0x10c5,0x10c5,0x10c5, +0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5, +0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c5,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8, +0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x10c8,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149, +0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1149,0x1140,0x1140, +0x1143,0x1143,0x1149,0x1140,0x1140,0x1140,0x1140,0x1140,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c, +0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x114c,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167, +0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1167,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1173, +0x1173,0x1173,0x1173,0x1173,0x1173,0x1173,0x1170,0x1176,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182, +0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1182,0x1191,0x1191,0x1191,0x11a0,0x11a6,0x11a6,0x11a6,0x11a6, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6, +0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x11a6,0x1194,0x11a0,0x11a0,0x1191,0x1191, +0x1191,0x1191,0x11a0,0x11a0,0x1191,0x11a0,0x11a0,0x11a0,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2, +0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b5,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11b2,0x11ac, +0x11ac,0x11ac,0x11b2,0x11af,0x150c,0x150f,0x1512,0x1512,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11b8,0x11c4,0x11b8,0x11b8,0x11b8,0x11cd,0x11cd,0x11b8, +0x11b8,0x11cd,0x11c4,0x11cd,0x11cd,0x11c4,0x11b8,0x11bb,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4, +0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11c4,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, +0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df, +0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11df,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, +0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f7, +0x11f7,0x11f7,0x11f7,0x11f7,0x11f7,0x11f4,0x11f4,0x11f4,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200, +0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x1200,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f, +0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x120f,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122a,0x122d,0x122a,0x122a,0x122a,0x122a,0x1227,0x1227,0x1227,0x121b,0x121b,0x121b,0x121b,0x1227, +0x1227,0x1221,0x121e,0x1224,0x1224,0x1215,0x1230,0x1230,0x1218,0x1218,0x1227,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a,0x122a, +0x122a,0x122a,0x122d,0x122a,0x122d,0x122a,0x122a,0x122a,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1239,0x1239,0x1236,0x1236,0x1236,0x1233,0x1233, +0x1233,0x1233,0x1236,0x1233,0x1233,0x1233,0x1239,0x1236,0x1239,0x1236,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233,0x1233, +0x1233,0x1233,0x1233,0x1233,0x1233,0x1239,0x1236,0x1236,0x1233,0x1233,0x1233,0x1233,0x1245,0x1245,0x12ed,0x1242, +0x12ed,0x12ed,0x12ed,0x12ed,0x1242,0x1248,0x126f,0x1242,0x1242,0x1242,0x1242,0x1242,0x1248,0x124b,0x126f,0x126f, +0x124b,0x126f,0x1242,0x124b,0x124b,0x124e,0x126f,0x1242,0x1242,0x126f,0x1245,0x1245,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1257,0x1257,0x1257,0x1257,0x1377,0x1356,0x1260,0x1377,0x1377,0x1377, +0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x1377,0x180f,0x180f,0x180f,0x180f,0x180f,0x135f,0x135f,0x1266,0x135f, +0x135f,0x135f,0x1266,0x135f,0x135f,0x135f,0x1260,0x1260,0x1260,0x1260,0x1260,0x1359,0x135c,0x135c,0x135c,0x135c, +0x135c,0x135c,0x135c,0x1263,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x135c,0x1263,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d, +0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x128d,0x132f,0x132f,0x132f,0x132f, +0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f, +0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x132f,0x1344,0x1335,0x1344,0x1347, 0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347, -0x1347,0x1347,0x1347,0x1347,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e,0x136e, -0x136e,0x136e,0x136e,0x136e,0x13c8,0x13c8,0x13c8,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da,0x13da, -0x13da,0x13da,0x13da,0x13da,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, -0x13f5,0x13f5,0x13f5,0x13f5,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe,0x13fe, -0x13fe,0x13fe,0x13fe,0x13fe,0x1404,0x1404,0x1410,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416, -0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416, -0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1416,0x1410,0x1410,0x1410,0x1404,0x1404,0x1404,0x1404,0x1404,0x1404, -0x1404,0x1404,0x1404,0x1410,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434,0x1434, -0x1434,0x1434,0x1434,0x1434,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e8,0x14e8,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df,0x14df, -0x14e8,0x14e8,0x14e8,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2,0x14e8,0x14e2,0x14e2,0x14e8,0x14e8, -0x14e8,0x14e8,0x14e2,0x14e2,0x14ee,0x14e2,0x14e2,0x14e2,0x14e2,0x14f1,0x14f1,0x14e2,0x14e2,0x14e2,0x14e2,0x14e2, -0x14e2,0x14e2,0x14e2,0x14e2,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518,0x1518, -0x1518,0x1518,0x1518,0x1518,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a, -0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a,0x152a, -0x152a,0x152a,0x152a,0x152a,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530, -0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530,0x1530, -0x1530,0x1530,0x1530,0x1530,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533,0x1533, -0x1533,0x1533,0x1533,0x1533,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572,0x1572, -0x1572,0x1572,0x1572,0x1563,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b, -0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x157b,0x1575, -0x157e,0x157e,0x157e,0x157e,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581,0x1581, -0x1581,0x1581,0x1581,0x1581,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x1593,0x159c,0x159c,0x159c, -0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c,0x159c, -0x159c,0x159c,0x159c,0x159c,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5,0x15a5, -0x15a5,0x15a5,0x15a5,0x15a5,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b4,0x15b4,0x15b4,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15a8,0x15b4, -0x15b4,0x15a8,0x15b4,0x15ab,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7,0x15b7, -0x15b7,0x15b7,0x15b7,0x15b7,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, -0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db,0x15db, -0x15db,0x15d8,0x15d8,0x15d8,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4, -0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15e4,0x15ea,0x15ea,0x15ea,0x15e7,0x15e7,0x15e7, -0x15e4,0x15e4,0x15e4,0x15e4,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ed,0x15ff,0x15ff,0x15f3,0x15f0,0x15f0, -0x15f0,0x15f0,0x15f0,0x15f0,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9,0x15f9, -0x15f9,0x15f9,0x15f9,0x15f9,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605, -0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1605,0x1602,0x1602,0x1602,0x1602,0x1602, -0x1602,0x1602,0x1602,0x1602,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608,0x1608, -0x1608,0x1608,0x1608,0x1608,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c,0x162c, -0x162c,0x162c,0x162c,0x162c,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635,0x1635, -0x1635,0x1635,0x1635,0x1635,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x1638,0x1647,0x1647,0x1638,0x1638,0x1638,0x1638,0x1638,0x1638,0x1647,0x1638,0x164a, -0x164a,0x1638,0x164a,0x1638,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d,0x164d, -0x164d,0x164d,0x164d,0x164d,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, -0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656,0x1656, -0x1656,0x1656,0x1656,0x1656,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c,0x165c, -0x165c,0x165c,0x165c,0x165c,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3,0x16b3, -0x16b3,0x16b3,0x16b3,0x16b3,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16f5,0x16f2,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef, -0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16ef,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8, -0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16f8,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb, -0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb, -0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x16fb,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d, -0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x170d,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710, -0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1710,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x171c,0x171c,0x171c,0x171c,0x1719, -0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x1719,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x1719,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c, -0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x171c,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728, -0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728, -0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0x1728,0,0,0,0 +0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1347,0x1335,0x1335,0x1335,0x1335, +0x1335,0x1335,0x1335,0x1335,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d,0x134d, +0x134d,0x134d,0x134d,0x134d,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353,0x1353, +0x1353,0x1353,0x1353,0x1353,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, +0x1389,0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x138c,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c, +0x138c,0x138c,0x138c,0x1389,0x138c,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389, +0x1389,0x1389,0x1389,0x1389,0x1389,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x1389,0x151e,0x151e, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x1527,0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1764,0x1764,0x1764, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x1764,0x1764,0x138c,0x138c,0x138c,0x138c,0x138c,0x1395,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1527, +0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x1527,0x1527,0x138c,0x138c,0x1392,0x1395,0x1395,0x1698,0x138c,0x1392, +0x138c,0x138c,0x1395,0x1530,0x152d,0x1527,0x1527,0x1764,0x1764,0x1764,0x1764,0x1764,0x1527,0x1527,0x1527,0x1527, +0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1521,0x1521,0x1527,0x1698,0x1527,0x1521,0x1527, +0x1764,0x1764,0x1764,0x1767,0x1767,0x1767,0x1767,0x1767,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1527,0x138c,0x1527,0x1395,0x1395,0x138c,0x138c,0x1395,0x1395, +0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1398,0x1398,0x1398,0x1398,0x1392,0x1392, +0x1392,0x1392,0x1395,0x1392,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c, +0x1395,0x138c,0x138c,0x138c,0x138c,0x1395,0x1395,0x1395,0x138c,0x1395,0x1395,0x1395,0x138c,0x138c,0x138c,0x138f, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x1698,0x138c,0x138c,0x138c,0x138c,0x1527,0x1521,0x1764, +0x13ef,0x13ef,0x13ef,0x13ef,0x151e,0x151e,0x151e,0x151e,0x151e,0x1524,0x1527,0x1764,0x1764,0x1764,0x1764,0x16ec, +0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c,0x138c, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1527,0x152d,0x1530,0x1527,0x1527, +0x1527,0x1527,0x1818,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1527,0x1521,0x1521,0x1521,0x1521, +0x152a,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521,0x1527,0x151e,0x151e,0x151e,0x151e, +0x151e,0x151e,0x1527,0x138c,0x138c,0x138c,0x138c,0x138c,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479, +0x139b,0x1479,0x139b,0x1479,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x1479,0x1479, +0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x1479,0x1479,0x139b,0x139b,0x139b,0x139b,0x1479,0x139b,0x139b,0x139b, +0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x139b,0x169e,0x169e,0x176a,0x176a,0x139e,0x139e,0x139e, +0x139b,0x139b,0x139b,0x139e,0x139e,0x139e,0x139e,0x139e,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, +0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a1,0x13a1,0x13a1,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a4,0x13a4,0x13a4,0x13a1, +0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a1,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7, +0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x13a7,0x1797,0x1797,0x1794,0x16ef,0x13f5,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f2,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5, +0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x13f5,0x1539,0x1401,0x1401,0x1401,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413, +0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x1413,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, +0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e, +0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x142e,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437, +0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x1437,0x143d,0x143d,0x1449,0x144f,0x144f,0x144f,0x144f,0x144f, +0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f, +0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x144f,0x1449,0x1449,0x1449,0x143d,0x143d, +0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x143d,0x1449,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, +0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470, +0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1470,0x1521,0x1521,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1527,0x151e,0x151e,0x151e,0x151e, +0x151e,0x151e,0x151e,0x151e,0x1527,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1527, +0x1521,0x1521,0x1527,0x1527,0x1527,0x1527,0x1521,0x1521,0x1530,0x1521,0x1521,0x1521,0x1521,0x169b,0x169b,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1815,0x1527,0x1521,0x1521,0x1527,0x1521,0x1521,0x1521, +0x1521,0x1521,0x1521,0x1521,0x1521,0x1527,0x1527,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521,0x1521, +0x1527,0x1521,0x1521,0x1521,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551,0x1551, +0x1551,0x1551,0x1551,0x1551,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563,0x1563, +0x1563,0x1563,0x1563,0x1563,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569,0x1569, +0x1569,0x1569,0x1569,0x1569,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c,0x156c, +0x156c,0x156c,0x156c,0x156c,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab,0x15ab, +0x15ab,0x15ab,0x15ab,0x159c,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4, +0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15b4,0x15ae, +0x15b7,0x15b7,0x15b7,0x15b7,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba,0x15ba, +0x15ba,0x15ba,0x15ba,0x15ba,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15cc,0x15d5,0x15d5,0x15d5, +0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5,0x15d5, +0x15d5,0x15d5,0x15d5,0x15d5,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de,0x15de, +0x15de,0x15de,0x15de,0x15de,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x15ed,0x15ed,0x15ed,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15e1,0x15ed, +0x15ed,0x15e1,0x15ed,0x15e4,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0,0x15f0, +0x15f0,0x15f0,0x15f0,0x15f0,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, +0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614,0x1614, +0x1614,0x1611,0x1611,0x1611,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d, +0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x161d,0x1623,0x1623,0x1623,0x1620,0x1620,0x1620, +0x161d,0x161d,0x161d,0x161d,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1626,0x1638,0x1638,0x162c,0x1629,0x1629, +0x1629,0x1629,0x1629,0x1629,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632,0x1632, +0x1632,0x1632,0x1632,0x1632,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e, +0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163e,0x163b,0x163b,0x163b,0x163b,0x163b, +0x163b,0x163b,0x163b,0x163b,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641,0x1641, +0x1641,0x1641,0x1641,0x1641,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665,0x1665, +0x1665,0x1665,0x1665,0x1665,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e,0x166e, +0x166e,0x166e,0x166e,0x166e,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1671,0x1680,0x1680,0x1671,0x1671,0x1671,0x1671,0x1671,0x1671,0x1680,0x1671,0x1683, +0x1683,0x1671,0x1683,0x1671,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686,0x1686, +0x1686,0x1686,0x1686,0x1686,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, +0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f,0x168f, +0x168f,0x168f,0x168f,0x168f,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695,0x1695, +0x1695,0x1695,0x1695,0x1695,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5,0x16f5, +0x16f5,0x16f5,0x16f5,0x16f5,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1737,0x1734,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731, +0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x1731,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a, +0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173a,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, +0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d, +0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x173d,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f, +0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x174f,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752, +0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1752,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758,0x1758,0x1755, +0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1755,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1755,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758, +0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1758,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770, +0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x1770,0x17b5,0x17b5,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, +0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2, +0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b2,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5, +0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x17b5,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1800,0x1800,0x1800, +0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x17eb,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803, +0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x1803,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a, +0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182a,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d, +0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0x182d,0,0,0,0 }; static const UTrie2 propsVectorsTrie={ propsVectorsTrie_index, - propsVectorsTrie_index+4640, + propsVectorsTrie_index+4844, NULL, - 4640, - 22812, + 4844, + 23696, 0xa40, - 0x12a0, + 0x136c, 0x0, 0x0, 0x110000, - 0x6b38, + 0x6f78, NULL, 0, FALSE, FALSE, 0, NULL }; -static const uint32_t propsVectors[5931]={ -0x67,0,0,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67,0,0,0xc67, -0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0,0,0x1267,0, -0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0,0x1767,0,0, -0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67,0,0,0x1f67, -0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0,0,0x2567,0, -0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000,0x2b67,0,0, -0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67,0,0,0x3b67, -0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0,0,0x4367,0, -0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0,0x5067,0,0, -0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767,0,0,0x5867, -0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0,0,0x6067,0x80000, -0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0,0x6f67,0,0, -0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767,0,0,0x7867, -0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0,0,0x7f67,0, -0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0,0x8567,0,0, -0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67,0,0,0x8c67, -0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0,0,0x9267,0, -0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0,0x9867,0,0, -0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167,0,0,0xa367, -0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0,0,0xa867,0, -0,0xa967,0,0,0xaa67,0,0,0xab67,0,0,0xac67,0,0,0xad67,0,0, -0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367,0,0,0xb467, -0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0,0,0xba67,0, -0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0,0xc067,0,0, -0xc167,0,0,0xc267,0,0,0xc367,0,0,0xc467,0,0,0xc667,0,0,0xc767, -0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0,0,0xcc67,0, -0,0xcd67,0,0,0xcf67,0,0,0xd067,0,0,0xd267,0,0,0xd367,0,0, +static const uint32_t propsVectors[6195]={ +0x67,0,0,0x67,0,0xe00000,0x67,0x80000,0x20,0x867,0,0,0xa67,0,0,0xb67, +0,0,0xc67,0,0,0xd67,0,0,0xe67,0,0,0x1067,0,0,0x1167,0, +0,0x1267,0,0,0x1367,0,0,0x1467,0,0,0x1567,0,0,0x1667,0,0, +0x1767,0,0,0x1867,0,0,0x1967,0,0,0x1a67,0,0,0x1b67,0,0,0x1d67, +0,0,0x1f67,0,0,0x2067,0,0,0x2267,0,0,0x2367,0,0,0x2467,0, +0,0x2567,0,0,0x2767,0,0,0x2867,0x80000,0x20,0x2967,0,0,0x2a67,0,0x1600000, +0x2b67,0,0,0x2d67,0,0,0x3067,0x20000000,0,0x3167,0x20000000,0,0x3267,0x20000000,0,0x3a67, +0,0,0x3b67,0,0,0x3c67,0,0,0x3e67,0,0,0x4067,0,0,0x4167,0, +0,0x4367,0,0,0x4467,0,0,0x4867,0,0,0x4967,0,0,0x4a67,0,0, +0x5067,0,0,0x5167,0,0,0x5467,0,0,0x5567,0,0,0x5667,0x80000,0x20,0x5767, +0,0,0x5867,0,0,0x5967,0,0,0x5b67,0,0,0x5c67,0,0,0x5d67,0, +0,0x6067,0x80000,0x20,0x6267,0,0,0x6367,0,0,0x6467,0,0,0x6567,0,0, +0x6f67,0,0,0x7067,0,0,0x7367,0x20000000,0,0x7567,0,0,0x7667,0,0,0x7767, +0,0,0x7867,0,0,0x7a67,0,0,0x7b67,0,0,0x7c67,0,0,0x7e67,0, +0,0x7f67,0,0,0x8167,0,0,0x8267,0,0,0x8367,0,0,0x8467,0,0, +0x8567,0,0,0x8667,0,0,0x8767,0,0,0x8867,0,0,0x8967,0,0,0x8b67, +0,0,0x8c67,0,0,0x8e67,0x20000000,0,0x8f67,0,0,0x9067,0,0,0x9167,0, +0,0x9267,0,0,0x9367,0,0,0x9567,0,0,0x9667,0,0,0x9767,0,0, +0x9867,0,0,0x9967,0,0,0x9a67,0,0,0x9c67,0,0,0x9f67,0,0,0xa167, +0,0,0xa367,0,0,0xa467,0,0,0xa567,0,0,0xa667,0,0,0xa767,0, +0,0xa867,0,0,0xa967,0,0,0xaa67,0,0xe00000,0xab67,0,0xe00000,0xac67,0,0, +0xad67,0,0,0xae67,0,0,0xaf67,0,0,0xb167,0,0,0xb267,0,0,0xb367, +0,0,0xb467,0,0,0xb567,0,0,0xb767,0,0,0xb867,0,0,0xb967,0, +0,0xba67,0,0,0xbc67,0,0,0xbd67,0,0,0xbe67,0,0,0xbf67,0,0, +0xc067,0,0,0xc167,0,0,0xc267,0,0,0xc367,0,0xe00000,0xc467,0,0xe00000,0xc667, +0,0,0xc767,0,0,0xc867,0,0,0xc967,0,0,0xca67,0,0,0xcb67,0, +0,0xcc67,0,0xe00000,0xcf67,0,0xe00000,0xd067,0,0xe00000,0xd267,0,0,0xd367,0,0, 0xd467,0,0,0xd567,0,0,0xd667,0,0,0xd867,0,0,0xd967,0,0,0xda67, 0,0,0xdb67,0,0,0xdc67,0,0,0xdd67,0,0,0xde67,0,0,0xdf67,0, -0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0,0xe467,0,0, +0,0xe067,0,0,0xe167,0,0,0xe267,0,0,0xe367,0,0xe00000,0xe467,0,0, 0xe567,0,0,0xe667,0,0,0xe767,0,0,0xe867,0,0,0xe967,0,0,0xea67, 0,0,0xeb67,0,0,0xec67,0,0,0xed67,0,0,0xee67,0,0,0xef67,0, 0,0xf167,0,0,0xf367,0,0,0xf567,0,0,0xf667,0,0,0xf767,0,0, -0xf867,0,0,0xf967,0,0,0xfa67,0,0,0xfb67,0,0,0xfc67,0,0,0xfd67, +0xf867,0,0,0xf967,0,0,0xfa67,0,0xe00000,0xfb67,0,0,0xfc67,0,0,0xfd67, 0,0,0xfe67,0,0,0x10167,0,0,0x10267,0,0,0x10367,0,0,0x10467,0, -0,0x10567,0,0,0x10667,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0,0xe00000, -0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000,0xb0067, -0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100,0x40000001, -0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008,0x1710000, -0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402,0x11000319, -0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419,0x7c00100, -0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100,0x230400, -0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x201000,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400,0x11000600, -0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800,0x6800010, -0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400,0x200002, -0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400,0x1100080e, -0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x2802400,0x962460,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100, -0x220400,0x11000908,0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000, -0x11000a03,0x7c00100,0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13, -0x4000000,0x200000,0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100, -0x2633800,0x11000c00,0,0x218820,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400, -0x11000c02,0x4000000,0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02, -0x7c00100,0x230402,0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400, -0x962460,0x11000f0a,0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401, -0x11001004,0x2802100,0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004, -0x6800100,0x962540,0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400, -0x962460,0x11001110,0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460, -0x1100120f,0x2802400,0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f, -0x2802400,0x962460,0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100, -0x962541,0x1100131f,0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540, -0x11001423,0x6800100,0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524, -0x2806400,0x962460,0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400, -0x962460,0x11001615,0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460, -0x1100171a,0x2806400,0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900, -0x4000000,0x1600000,0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010, -0x400000,0x11001926,0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000, -0x11001a18,0x2802100,0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18, -0x7c00100,0x1830002,0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d00,0x4000000,0x200000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100, -0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12,0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402, -0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400,0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e, -0x7c00100,0x250401,0x11002800,0x80000,0x918820,0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001, -0x440002,0x11002800,0x4000001,0xc4000b,0x11002800,0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002, -0x11002800,0x24000000,0x810000,0x11002800,0x24000000,0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800, -0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000,0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010, -0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800,0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e, -0x11002900,0x4000000,0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900, -0x4000020,0x141000e,0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000, -0x1600000,0x11002a00,0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002, -0x11002c00,0x4000000,0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00, -0x7c00120,0x230402,0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000, -0x100006,0x11002d00,0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000, -0x11002e00,0x24000020,0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00, -0x24000020,0x200002,0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000, -0x10200000,0x11003000,0x24000000,0x30e00000,0x11003000,0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000, -0x11003200,0x24000000,0x200000,0x11003300,0x4000000,0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600, -0x24000000,0x200000,0x11003600,0x24000000,0x10200000,0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000, -0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700,0x24000000,0x30200000,0x11003700,0x24000000,0x90e00000,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000, -0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000,0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800, -0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x90e00000,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020, -0x200005,0x11005013,0x7c00100,0x2633801,0x11005013,0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000, -0x11005100,0x24000000,0x1410000,0x11005102,0x7000100,0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102, -0x7c00100,0x230409,0x11005201,0x2802400,0x962460,0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100, -0x230407,0x11005502,0x7c00100,0x230408,0x11005502,0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006, -0x11020200,0x4000000,0x10000f,0x11020200,0x4000400,0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200, -0x24000000,0x1400000,0x11020200,0x24000000,0x1500000,0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020, -0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219,0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400, -0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100,0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419, -0x7c00100,0x220401,0x11020519,0x7c00100,0x220400,0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00, -0x130400,0x11020701,0x2802400,0x962460,0x11020701,0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400, -0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100,0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800, -0x24000000,0x200000,0x11022800,0x24000000,0x200002,0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000, -0x1500000,0x11022800,0x24000002,0x100000,0x11022800,0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000, -0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020,0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900, -0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f,0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000, -0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e,0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006, -0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100,0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00, -0x24000020,0x100000,0x11022f00,0x24000020,0x100001,0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000, -0x100003,0x11023300,0x4000100,0x120403,0x11023300,0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000, -0x11023600,0x24000000,0x100000,0x11023600,0x24000020,0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700, -0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000,0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000, -0x200000,0x11024e67,0,0,0x11025600,0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a, -0x11045712,0x7c00100,0x23040a,0x11045712,0x7c80100,0x23040a,0x11045716,0x7c00100,0x230c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700, -0x4000000,0x810011,0x11065700,0x4000000,0xe00011,0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006, -0xe70011,0x11065700,0x4000008,0xe00011,0x11065700,0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011, -0x11065700,0x4000020,0xe00011,0x11065700,0x4000400,0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700, -0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011,0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140, -0xe50411,0x11080100,0x6800000,0x201c00,0x11080100,0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000, -0x11080100,0x24000000,0x1500000,0x11080100,0x24000000,0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100, -0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00,0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010, -0x1071400,0x11080100,0x24000020,0x200000,0x11080100,0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000, -0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010,0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119, -0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400,0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000, -0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12,0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001, -0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400,0x110a3d12, -0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14,0x7c00900, -0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900,0x1230c01, -0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002,0x110a4412, -0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11,0x7c00300, -0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000,0x1410010, -0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10,0x110a5400, -0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400,0x4000002, -0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020,0xe0000c, -0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000,0x11400c0e, -0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f33,0xc000010,0x448000,0x11400f43,0xc000010,0x448000,0x11403d8a,0x4000000, -0xe00000,0x11445784,0x4000004,0x120000a,0x11445784,0x4000008,0x81000a,0x11445784,0x4000008,0x141000a,0x11445784,0x4000010,0x87000a,0x11445784,0xc000010,0x84800a, -0x1144578d,0x3802500,0x126246a,0x1144578d,0x7c00d00,0x2530c0a,0x114a3d84,0x24000000,0x810000,0x114a3d84,0x24000000,0x1410000,0x114a3d84,0x24000008,0x810000,0x114a3d84, -0x24000008,0x1410000,0x114a3d84,0x24000010,0x870000,0x114a3d84,0x2c000010,0x848000,0x114a3d8a,0x4000000,0xe00000,0x114a3d8a,0x24000000,0xe00000,0x114a3d8a,0x24000002, -0x1200000,0x114a3d8a,0x24000002,0x10e00000,0x114a3d8a,0x24000008,0x810000,0x114a3d8a,0x24000008,0x1410000,0x114a3d8d,0x7c00900,0x930c00,0x114a3d8d,0x7c00900,0xe30c00, -0x114a3d8f,0x7c00300,0xe30000,0x114a3e8d,0x7000400,0x1200c02,0x114a3f84,0x4000004,0x1200000,0x114a3f8d,0x7c00d00,0x2530c00,0x114a428f,0x4000000,0xe00000,0x114a428f, -0x4000000,0xe0000f,0x114a448a,0x4000000,0xe00002,0x114a448a,0x4000000,0xe00003,0x114a448a,0x4000000,0x10e00003,0x114a458a,0x4000000,0xe00002,0x114a458a,0x4000000, -0xe0000d,0x11800906,0x2802400,0x962460,0x11800c16,0x2802100,0x962460,0x11800c16,0x2802500,0x962460,0x11800f1c,0x2802400,0x962460,0x11800f28,0x2802400,0x962460, -0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d92,0x2802400,0x962460,0x118a3e8d,0x2802400,0x962460,0x11c00904,0x2802400,0x962460,0x11c00c1a, -0x6800000,0x1329800,0x11c00f57,0x6800000,0x1329800,0x11c0105c,0x6800000,0x1329800,0x11c01160,0x6800000,0x1329800,0x11c01264,0x6800000,0x1329800,0x11c01468,0x4000000, -0x200000,0x11c01468,0x6800000,0x1329800,0x11c01468,0x7c00100,0x230400,0x11c0511a,0x7c00100,0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460, -0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461,0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27, -0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27,0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000, -0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010,0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800, -0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400,0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00, -0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67,0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000, -0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100,0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000, -0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401,0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519, -0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605,0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000, -0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100,0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000, -0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218820,0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22, -0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22,0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500, -0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400,0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540, -0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460,0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27, -0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c,0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000, -0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100,0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000, -0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000,0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b, -0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128,0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000, -0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100,0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400, -0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460,0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417, -0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417,0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100, -0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000,0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x4000000,0x200000, -0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000,0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b, -0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b,0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc4000b,0x30002800,0x24000000, -0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010,0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000, -0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400,0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600, -0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e,0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400, -0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400,0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002, -0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000,0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829, -0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929,0x4000000,0xe00000,0x30402573,0x4000010,0x400000,0x30402573,0x4000010,0xb70000,0x30402573,0xc000010, -0xb48000,0x304a3d8a,0x4000000,0xe00000,0x30800c16,0x2802100,0x962460,0x30c01c6d,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402, -0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000,0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09, -0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00,0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000, -0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000,0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005, -0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405,0x31005d00,0x7c00120,0x250405,0x31006000,0x80000,0x918820,0x31006000,0x180000,0x918820,0x310a5e11, -0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419,0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100, -0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100,0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400, -0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820,0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800, -0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919,0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000, -0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000,0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405, -0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000,0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500, -0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600,0x24000020,0x10200000,0x32003600,0x24000020,0x30200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000, -0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000,0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400, -0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460,0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b, -0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c,0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100, -0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020,0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000, -0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000,0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00, -0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01,0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000, -0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020,0x810000,0x32086900,0x24000020,0x1410000,0x320a3d11,0x7c00100,0x1230400, -0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000,0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11, -0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x3240636f,0xc000010,0x448000,0x324a3d8f,0x4000000,0x10e00000,0x324a3d8f,0x7c00100,0x1230400,0x324a3f8d,0x4000002, -0x1200c00,0x324a538a,0x24000000,0xe00000,0x32820701,0x2802000,0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000, -0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400,0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218820,0x40000c02,0x2802100,0x962460,0x40000c02, -0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02,0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100, -0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100,0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460, -0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400,0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615, -0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417,0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002, -0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000,0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000, -0x40003700,0x24000000,0x30200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400,0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30, -0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30,0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010, -0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100,0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e, -0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400,0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300, -0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531,0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010, -0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000,0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400, -0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460,0x40023300,0x4000000,0x200000,0x40023700,0x24000000,0x30e00000,0x40027d01, -0x12882000,0x962460,0x400a4400,0x4000000,0xe0000d,0x400a4412,0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000, -0x810010,0x400a5300,0x4000000,0x1410010,0x404077a6,0x4000000,0x200000,0x404077a6,0x4000000,0x400000,0x40c0511a,0x4000000,0x200000,0x41000419,0x7c00100,0x220400, -0x41000419,0x7c00100,0x250400,0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13, -0x2802000,0x962460,0x41000b13,0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000, -0x1500000,0x41000f0a,0x7c00100,0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400, -0x41001d0c,0x7c00100,0x23040f,0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800, -0x24000000,0x400000,0x41002919,0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120, -0x220405,0x41003000,0x24000000,0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10e00000,0x41003700,0x24000000,0x30200000, -0x41003700,0x24000000,0x30e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000,0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208, -0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e,0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000, -0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100,0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540, -0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000,0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407, -0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b,0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100, -0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000,0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460, -0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400,0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b, -0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b,0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100, -0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100,0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000, -0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460,0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a, -0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c,0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000, -0x962460,0x41020701,0x2802000,0xc62460,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010, -0x410a9100,0x4000000,0x810010,0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100, -0x4000000,0x1071010,0x410a9100,0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a828a,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01468,0x6800000, -0x1329800,0x50000419,0x7c00100,0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400, -0x50000b13,0x2802500,0x962460,0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00, -0x4000000,0x200000,0x50002c19,0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000, -0x200000,0x50005d00,0x7c00120,0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000, -0x50007300,0x24000000,0x200000,0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257, -0x4000010,0x1071400,0x50009257,0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010, -0xb48000,0x5000933e,0x2802100,0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000, -0x5000933e,0x6800000,0x1329800,0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e, -0x7c00100,0x230401,0x5000933e,0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000, -0x500000,0x5000965a,0x7c00100,0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400, -0x50009865,0x7c00100,0x230400,0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a93,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e, -0x7c00100,0x250400,0x51000c02,0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100, -0x230400,0x51000f0a,0x7c00500,0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460, -0x51001524,0x4000000,0x200000,0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a, -0x7c00100,0x230400,0x51001b27,0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100, -0x1862460,0x51001c1c,0x2802400,0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400, -0x51001c1c,0x6800100,0x1862400,0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619, -0x7c00100,0x220400,0x51002619,0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000, -0x200000,0x51003700,0x24000000,0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400, -0x51006600,0x24000020,0x200000,0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000000,0x30200000,0x51007300, -0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301,0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000, -0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000,0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000, -0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400,0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419, -0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500,0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100, -0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100,0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540, -0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400,0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52, -0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52,0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000, -0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500,0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460, -0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800,0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63, -0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008,0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100, -0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500,0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540, -0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000,0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f, -0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e,0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400, -0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100,0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540, -0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000,0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b, -0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c,0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100aa00,0x4000000, -0x30e00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020,0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000, -0x5140a2a1,0x4000400,0x400000,0x514a828a,0x4000000,0xe00000,0x51802b81,0x2802000,0x962460,0x51c0090a,0x2802400,0x962460,0x51c0a00a,0x2802400,0x962460,0x52000f0a, -0x2802100,0x962460,0x52000f0a,0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100, -0x1862460,0x52001c1c,0x6800100,0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000, -0x52002128,0x7c00100,0x230400,0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52003700, -0x24000000,0x30e00000,0x52006108,0x7c00100,0x220400,0x52006108,0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100, -0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000,0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400, -0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460,0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e, -0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a,0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000, -0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000,0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000, -0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000,0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182, -0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182,0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400, -0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100,0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000, -0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800,0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e, -0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c,0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100, -0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000,0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000, -0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000,0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873, -0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873,0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100, -0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010,0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400, -0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000,0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a, -0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58,0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218820,0x5200c178,0x2802000, -0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400,0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540, -0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401,0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247, -0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00,0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000, -0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000,0x30e00000,0x52023700,0x24000000,0x90e00000,0x52023800,0x24000000,0x30100000,0x52024400,0x4000000,0x100000, -0x52027300,0x24000000,0x100000,0x52027300,0x24000000,0x30100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003,0x5202c300, -0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a4400,0x4000000, -0xe00003,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520ab412,0x7c00100,0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d, -0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000,0x5240af75,0x6800400,0x962540,0x5240af75,0x7c00100,0x230400,0x5240af76, -0x4000400,0x200000,0x5240af76,0x6800100,0x962540,0x5240b294,0x4000000,0x200000,0x5240b294,0x4000000,0x1500000,0x5240b5a4,0x7c00900,0x230400,0x5280af75,0x2802400, -0x962460,0x5280af76,0x2802400,0x962460,0x5280af78,0x2802400,0x962460,0x5280af7a,0x2802400,0x962460,0x52c0b39f,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460, +0,0x10567,0,0xe00000,0x10667,0,0,0x10767,0,0,0x10867,0,0,0x10967,0,0, +0x10a67,0,0,0x10b67,0,0,0x10c67,0,0,0x10d67,0,0,0x10e67,0,0,0x10f67, +0,0,0x11067,0,0,0x11167,0,0,0xa0067,0,0xe00000,0xa4667,0,0xe00000,0xa4767,0, +0xe00000,0xa4f67,0,0xe00000,0xa5e67,0,0xe00000,0xa5f67,0,0xe00000,0xac567,0,0xe00000,0xad167,0,0xe00000, +0xb0067,0,0xe00000,0x11000100,0,0x900020,0x11000100,0x40000001,0x440020,0x11000100,0x40000001,0x643020,0x11000100,0x40000001,0xa5a040,0x11000100, +0x40000001,0x116a8a0,0x11000200,0,0x900020,0x11000200,0x4000001,0xc4000b,0x11000200,0x7c00100,0x220402,0x11000200,0x24000000,0x10200000,0x11000200,0x24000008, +0x1710000,0x11000200,0x40000001,0x1d3b020,0x11000219,0x7c00100,0x220401,0x11000219,0x7c00100,0x250401,0x11000319,0x7c00100,0x220401,0x11000319,0x7c00100,0x220402, +0x11000319,0x7c00100,0x250400,0x11000319,0x7c00100,0x250401,0x11000419,0x7c00100,0x220400,0x11000419,0x7c00100,0x220401,0x11000419,0x7c00100,0x220402,0x11000419, +0x7c00100,0x230400,0x11000419,0x7c00100,0x250400,0x11000419,0x7c00100,0x250401,0x11000419,0x7c00100,0x250402,0x11000519,0x7c00100,0x220400,0x11000519,0x7c00100, +0x230400,0x11000600,0x4000400,0x200000,0x11000600,0x4000400,0x200002,0x11000600,0x4000400,0x201000,0x11000600,0x7c00500,0x220400,0x11000600,0x7c00500,0x230400, +0x11000600,0x7c00500,0x530400,0x11000600,0x7c00d00,0x230400,0x11000619,0x7c00500,0x22040f,0x11000800,0x4000010,0x1001401,0x11000800,0x4000400,0x200001,0x11000800, +0x6800010,0x201001,0x11000800,0x7c00500,0x230401,0x11000807,0x7c00100,0x220400,0x11000807,0x7c00100,0x250400,0x1100080e,0x4000400,0x200000,0x1100080e,0x4000400, +0x200002,0x1100080e,0x7000500,0x220402,0x1100080e,0x7c00100,0x220400,0x1100080e,0x7c00100,0x220401,0x1100080e,0x7c00100,0x220402,0x1100080e,0x7c00100,0x250400, +0x1100080e,0x7c00100,0x250401,0x1100080e,0x7c00120,0x220402,0x1100080e,0x7c00120,0x250402,0x11000908,0x4000000,0x200000,0x11000908,0x7c00100,0x220400,0x11000908, +0x7c00100,0x220401,0x11000908,0x7c00100,0x250400,0x11000908,0x7c00100,0x250401,0x11000a03,0x4000000,0x200000,0x11000a03,0x4000000,0x270000,0x11000a03,0x7c00100, +0x220400,0x11000a03,0x7c00100,0x220402,0x11000a03,0x7c00100,0x250400,0x11000a03,0x7c00500,0x230400,0x11000b13,0x2802500,0x962460,0x11000b13,0x4000000,0x200000, +0x11000b13,0x4000000,0x201000,0x11000b13,0x4000000,0x230400,0x11000b13,0x4000002,0x400000,0x11000b13,0x4000010,0x200000,0x11000b13,0x7c00100,0x2633800,0x11000c00, +0,0x218960,0x11000c02,0x2802100,0x962460,0x11000c02,0x2802400,0x962460,0x11000c02,0x4000000,0x200000,0x11000c02,0x4000000,0x1329400,0x11000c02,0x4000000, +0x1329800,0x11000c02,0x4000000,0x1500000,0x11000c02,0x6800000,0x1329800,0x11000c02,0x7c00100,0x230400,0x11000c02,0x7c00100,0x230401,0x11000c02,0x7c00100,0x230402, +0x11000c02,0x7c00500,0x230400,0x11000c02,0x7d00100,0x230400,0x11000c02,0xc000010,0xb48000,0x11000f0a,0x2802100,0x962460,0x11000f0a,0x2802400,0x962460,0x11000f0a, +0x2806400,0x962460,0x11000f0a,0x4000000,0x200000,0x11000f0a,0x6800100,0x962540,0x11000f0a,0x7c00100,0x230400,0x11000f0a,0x7c00100,0x230401,0x11001004,0x2802100, +0x962460,0x11001004,0x2802400,0x962460,0x11001004,0x2806400,0x962460,0x11001004,0x4000000,0x200000,0x11001004,0x4000000,0x1500000,0x11001004,0x6800100,0x962540, +0x11001004,0x6800100,0x962541,0x11001004,0x7c00100,0x230400,0x11001004,0x7c00100,0x230401,0x11001110,0x2802100,0x962460,0x11001110,0x2802400,0x962460,0x11001110, +0x2806400,0x962460,0x11001110,0x6800100,0x962540,0x11001110,0x7c00100,0x230400,0x11001110,0x7c00100,0x230401,0x1100120f,0x2802100,0x962460,0x1100120f,0x2802400, +0x962460,0x1100120f,0x2806400,0x962460,0x1100120f,0x6800100,0x962540,0x1100120f,0x7c00100,0x230400,0x1100131f,0x2802100,0x962460,0x1100131f,0x2802400,0x962460, +0x1100131f,0x2806400,0x962460,0x1100131f,0x4000000,0x200000,0x1100131f,0x6800000,0x1329800,0x1100131f,0x6800100,0x962540,0x1100131f,0x6800100,0x962541,0x1100131f, +0x7c00100,0x230400,0x1100131f,0x7c00100,0x230401,0x11001423,0x2802100,0x962460,0x11001423,0x2806400,0x962460,0x11001423,0x6800100,0x962540,0x11001423,0x6800100, +0x962541,0x11001423,0x7c00100,0x230400,0x11001423,0x7c00100,0x230401,0x11001524,0x2802100,0x962460,0x11001524,0x2802100,0x962461,0x11001524,0x2806400,0x962460, +0x11001524,0x6800000,0x1329800,0x11001524,0x6800100,0x962540,0x11001524,0x7c00100,0x230400,0x11001615,0x2802100,0x962460,0x11001615,0x2806400,0x962460,0x11001615, +0x6800000,0x1329800,0x11001615,0x6800100,0x962540,0x11001615,0x6800100,0x962541,0x11001615,0x7c00100,0x230400,0x1100171a,0x2802100,0x962460,0x1100171a,0x2806400, +0x962460,0x1100171a,0x6800000,0x1329800,0x1100171a,0x6800100,0x962540,0x1100171a,0x6800100,0x962541,0x1100171a,0x7c00100,0x230400,0x11001900,0x4000000,0x1600000, +0x11001926,0x2802100,0x1862460,0x11001926,0x2802400,0x1862460,0x11001926,0x2806100,0x1862460,0x11001926,0x4000000,0x200000,0x11001926,0x4000010,0x400000,0x11001926, +0x6800000,0x1329800,0x11001926,0x7800100,0x1830142,0x11001926,0x7c00100,0x1830000,0x11001926,0x7c00900,0x1830000,0x11001926,0x7e00100,0x1830000,0x11001a18,0x2802100, +0x1862460,0x11001a18,0x2802400,0x1862460,0x11001a18,0x6800000,0x1329800,0x11001a18,0x7800100,0x1830142,0x11001a18,0x7c00100,0x1830000,0x11001a18,0x7c00100,0x1830002, +0x11001a18,0x7c00900,0x1830000,0x11001a18,0x7e00100,0x1830000,0x11001d0c,0x7c00100,0x230400,0x11001d0c,0x7c00100,0x250400,0x11001e12,0x7c00100,0x2230500,0x11001e12, +0x7c00100,0x2330520,0x11001e12,0x7c80100,0x2330520,0x11002619,0x7c00100,0x220401,0x11002619,0x7c00100,0x220402,0x11002619,0x7c00100,0x250401,0x1100270e,0x4000400, +0x200001,0x1100270e,0x4000400,0x200002,0x1100270e,0x4000400,0x500001,0x1100270e,0x7c00100,0x220401,0x1100270e,0x7c00100,0x250401,0x11002800,0x80000,0x918820, +0x11002800,0x80000,0x1c18020,0x11002800,0x180000,0x918820,0x11002800,0x4000001,0x440001,0x11002800,0x4000001,0x440002,0x11002800,0x4000001,0xc4000b,0x11002800, +0x6800000,0x201c00,0x11002800,0x6800020,0x201c00,0x11002800,0x24000000,0x200000,0x11002800,0x24000000,0x200002,0x11002800,0x24000000,0x810000,0x11002800,0x24000000, +0x1410000,0x11002800,0x24000000,0x1500000,0x11002800,0x24000000,0x1500002,0x11002800,0x24000002,0x400000,0x11002800,0x24000006,0xc0000b,0x11002800,0x24000008,0x1410000, +0x11002800,0x24000008,0x1710000,0x11002800,0x24000020,0x1001400,0x11002800,0x24000020,0x1500002,0x11002800,0x2c000010,0x1248000,0x11002800,0x2c000010,0x11248002,0x11002800, +0x40000001,0x63b020,0x11002800,0x40080000,0x918820,0x11002801,0x80000,0x2a65620,0x11002801,0x82000,0x962460,0x11002900,0x4000000,0x20000e,0x11002900,0x4000000, +0x20000f,0x11002900,0x4000020,0x20000e,0x11002900,0x4000020,0x20000f,0x11002900,0x4000020,0x81000e,0x11002900,0x4000020,0x81000f,0x11002900,0x4000020,0x141000e, +0x11002900,0x4000020,0x141000f,0x11002900,0x4000022,0x20000e,0x11002900,0x4000022,0x20000f,0x11002a00,0x4000000,0x1500000,0x11002a00,0x4000000,0x1600000,0x11002a00, +0x4000000,0x1600002,0x11002b01,0x2000,0x962460,0x11002b01,0x2802020,0x962460,0x11002c00,0x4000000,0x200000,0x11002c00,0x4000000,0x200002,0x11002c00,0x4000000, +0x20000f,0x11002c00,0x4000020,0x200000,0x11002c00,0x7c00000,0x200000,0x11002c00,0x7c00020,0x200000,0x11002c00,0x7c00120,0x220405,0x11002c00,0x7c00120,0x230402, +0x11002c00,0x7c00120,0x250402,0x11002c00,0x7c00120,0x250405,0x11002c19,0x7c00100,0x250400,0x11002c19,0x7c00100,0x250401,0x11002d00,0x4000000,0x100006,0x11002d00, +0x4000000,0x200006,0x11002d19,0x7c00100,0x220402,0x11002d19,0x7c00100,0x230400,0x11002d19,0x7c00100,0x250402,0x11002e00,0x24000000,0x200000,0x11002e00,0x24000020, +0x200000,0x11002e00,0x24000020,0x200001,0x11002e00,0x24000020,0x10200000,0x11002f00,0x24000020,0x200000,0x11002f00,0x24000020,0x200001,0x11002f00,0x24000020,0x200002, +0x11002f00,0x24000020,0xf00000,0x11002f00,0x24000020,0x1600000,0x11002f00,0x24000022,0x1600000,0x11003000,0x24000000,0x200000,0x11003000,0x24000000,0x10200000,0x11003000, +0x24000020,0x200000,0x11003000,0x24000020,0x810000,0x11003000,0x24000020,0x1410000,0x11003100,0x24000000,0x200000,0x11003200,0x24000000,0x200000,0x11003300,0x4000000, +0x100003,0x11003400,0x24000000,0x100000,0x11003400,0x24000000,0x200000,0x11003500,0x24000000,0x200000,0x11003600,0x24000000,0x200000,0x11003600,0x24000000,0x10200000, +0x11003600,0x24000020,0x200000,0x11003700,0x24000000,0x200000,0x11003700,0x24000000,0xe00000,0x11003700,0x24000000,0x10200000,0x11003700,0x24000000,0x10e00000,0x11003700, +0x24000000,0x928045a0,0x11003700,0x24000020,0x200000,0x11003800,0x4000000,0x100000,0x11003800,0x24000000,0x200000,0x11003800,0x24000000,0xb00000,0x11003800,0x24000000, +0xe00000,0x11003800,0x24000000,0x1710000,0x11003800,0x24000000,0x10200000,0x11003800,0x24000000,0x10b00000,0x11003800,0x24000000,0x10e00000,0x11003800,0x24000000,0x10e05200, +0x11003800,0x24000000,0x928045a0,0x11005003,0x7c00100,0x220402,0x11005013,0x2802500,0x962460,0x11005013,0x4000020,0x200005,0x11005013,0x7c00100,0x2633801,0x11005013, +0x7c00100,0x2633802,0x11005013,0x7c00100,0x2633805,0x11005019,0x7c00100,0x220402,0x11005100,0x24000000,0x810000,0x11005100,0x24000000,0x1410000,0x11005102,0x7000100, +0x230408,0x11005102,0x7c00100,0x230404,0x11005102,0x7c00100,0x230407,0x11005102,0x7c00100,0x230408,0x11005102,0x7c00100,0x230409,0x11005201,0x2802400,0x962460, +0x11005500,0x80000,0x1e18820,0x11005502,0x7000100,0x230408,0x11005502,0x7c00100,0x230404,0x11005502,0x7c00100,0x230407,0x11005502,0x7c00100,0x230408,0x11005502, +0x7c00100,0x230409,0x11005667,0x1000,0,0x11020200,0x80004,0x418820,0x11020200,0x4000000,0x100006,0x11020200,0x4000000,0x10000f,0x11020200,0x4000400, +0x100002,0x11020200,0x4000400,0x500002,0x11020200,0x6800c00,0x101000,0x11020200,0x24000000,0x100000,0x11020200,0x24000000,0x1400000,0x11020200,0x24000000,0x1500000, +0x11020200,0x24000000,0x1600000,0x11020200,0x24000000,0x10200000,0x11020200,0x24000020,0x100000,0x11020200,0x24000020,0x1600000,0x11020219,0x7c00100,0x12040f,0x11020219, +0x7c00100,0x220400,0x11020219,0x7c00100,0x220401,0x11020219,0x7c00100,0x250400,0x11020319,0x7c00100,0x220400,0x11020319,0x7c00100,0x220401,0x11020319,0x7c00100, +0x220402,0x11020319,0x7c00100,0x250400,0x11020319,0x7c00100,0x250402,0x11020319,0x7d00100,0x220402,0x11020419,0x7c00100,0x220401,0x11020519,0x7c00100,0x220400, +0x11020600,0x4000400,0x100002,0x11020600,0x4000400,0x200000,0x11020600,0x7c00500,0x130400,0x11020600,0x7c00d00,0x130400,0x11020701,0x2802400,0x962460,0x11020701, +0x2802400,0x962461,0x11020701,0x2802400,0xc62460,0x1102080e,0x7c00100,0x220400,0x1102080e,0x7c00100,0x250400,0x11020908,0x7c00100,0x220400,0x11020908,0x7c00100, +0x220401,0x11020908,0x7c00100,0x250400,0x11020908,0x7c00100,0x250401,0x11022800,0x24000000,0x100000,0x11022800,0x24000000,0x200000,0x11022800,0x24000000,0x200002, +0x11022800,0x24000000,0x401000,0x11022800,0x24000000,0xf00002,0x11022800,0x24000000,0xf0ac02,0x11022800,0x24000000,0x1500000,0x11022800,0x24000002,0x100000,0x11022800, +0x24000002,0x370000,0x11022800,0x24000002,0x470000,0x11022800,0x24000006,0x400000,0x11022800,0x24000008,0x1710000,0x11022800,0x24000008,0x1712c00,0x11022800,0x24000020, +0x100000,0x11022800,0x24000020,0x1500000,0x11022800,0x24000020,0x1500002,0x11022900,0x4000000,0x10000e,0x11022900,0x4000000,0x10000f,0x11022919,0x7c00100,0x12040f, +0x11022c00,0x4000000,0x100002,0x11022c00,0x4000000,0x1500002,0x11022c00,0x4000000,0x1600002,0x11022c00,0x4000000,0x1010000f,0x11022c00,0x7c00120,0x120405,0x11022c0e, +0x7c00100,0x250401,0x11022c19,0x7c00100,0x150401,0x11022d00,0x4000000,0x100006,0x11022d00,0x4000000,0x200006,0x11022d19,0x7c00100,0x120402,0x11022d19,0x7c00100, +0x150402,0x11022e00,0x24000000,0x200000,0x11022e00,0x24000020,0x100000,0x11022e00,0x24000020,0x10100000,0x11022f00,0x24000020,0x100000,0x11022f00,0x24000020,0x100001, +0x11022f00,0x24000020,0x100002,0x11023000,0x24000000,0x100000,0x11023300,0x4000000,0x100002,0x11023300,0x4000000,0x100003,0x11023300,0x4000100,0x120403,0x11023300, +0x4000100,0x150403,0x11023300,0x4000100,0x10150403,0x11023400,0x24000000,0x100000,0x11023500,0x24000000,0x100000,0x11023600,0x24000000,0x100000,0x11023600,0x24000020, +0x100000,0x11023600,0x24000020,0x10100000,0x11023700,0x24000000,0x100000,0x11023700,0x24000000,0xe00000,0x11023700,0x24000000,0x10100000,0x11023700,0x24000000,0x10e00000, +0x11023700,0x24000020,0x100000,0x11023700,0x24000020,0x10100000,0x11023800,0x4000000,0x100000,0x11023800,0x24000000,0x200000,0x11024e67,0,0,0x11025600, +0x4000000,0x100000,0x11042a00,0x4000000,0x1600000,0x11045700,0x4000000,0x20000a,0x11045700,0x4000020,0x20000a,0x11045712,0x7c00100,0xe3040a,0x11045712,0x7c80100, +0xe3040a,0x11045716,0x7c00100,0xe30c0a,0x11045716,0x7c00100,0x2530c0a,0x11063d00,0x4000001,0x440011,0x11065700,0x4000000,0x810011,0x11065700,0x4000000,0xe00011, +0x11065700,0x4000000,0x1410011,0x11065700,0x4000000,0x1500011,0x11065700,0x4000000,0x1600011,0x11065700,0x4000006,0xe70011,0x11065700,0x4000008,0xe00011,0x11065700, +0x4000008,0xe02c11,0x11065700,0x4000010,0x871411,0x11065700,0x4000010,0x1201411,0x11065700,0x4000010,0x1271011,0x11065700,0x4000020,0xe00011,0x11065700,0x4000400, +0xe00011,0x11065700,0x4000420,0xe00011,0x11065700,0x6800000,0xe01c11,0x11065700,0x6800040,0xe00011,0x11065700,0xc000010,0x80ac11,0x11065700,0xc000010,0xb48011, +0x11065719,0x7c00100,0xe20411,0x11065719,0x7c00100,0xe50411,0x11065719,0x7c00140,0xe20411,0x11065719,0x7c00140,0xe50411,0x11080100,0x6800000,0x201c00,0x11080100, +0x68000c0,0x11329800,0x11080100,0x24000000,0x200000,0x11080100,0x24000000,0x810000,0x11080100,0x24000000,0x1410000,0x11080100,0x24000000,0x1500000,0x11080100,0x24000000, +0x1600000,0x11080100,0x24000000,0x1b00000,0x11080100,0x24000000,0x2410000,0x11080100,0x24000000,0x10200000,0x11080100,0x24000006,0xd70000,0x11080100,0x24000008,0x1713c00, +0x11080100,0x24000008,0x1714000,0x11080100,0x24000010,0x1001400,0x11080100,0x24000010,0x1071000,0x11080100,0x24000010,0x1071400,0x11080100,0x24000020,0x200000,0x11080100, +0x24000020,0x400000,0x11080100,0x24000020,0x1600000,0x11080100,0x24000400,0x200000,0x11080100,0x24000420,0x200000,0x11080100,0x2c000010,0xb48000,0x11080100,0x2c000010, +0x100ac00,0x11080100,0x44000001,0x1a40000,0x11080119,0x7c00100,0x220400,0x11080119,0x7c00100,0x250400,0x11080119,0x7c001c0,0x220400,0x11080119,0x7c001c0,0x250400, +0x11080200,0x4000400,0x200002,0x11080200,0x24000000,0x200000,0x11080200,0x24000000,0x1500000,0x11080200,0x24000000,0x1600000,0x11080200,0x24000020,0x200000,0x110a1e12, +0x7c00100,0x2130480,0x110a1e12,0x7c80100,0x2130480,0x110a3000,0x24000000,0x30e00000,0x110a3000,0x24100000,0x810001,0x110a3000,0x24100000,0x1410001,0x110a3700,0x24000000, +0x30200000,0x110a3d00,0x4000000,0xe00000,0x110a3d00,0x4000000,0xe00002,0x110a3d00,0x24000000,0xe00000,0x110a3d11,0x7c00300,0xe30000,0x110a3d11,0x7c00900,0x1230400, +0x110a3d12,0x2802400,0x962460,0x110a3e14,0x7c00100,0xe30000,0x110a3e14,0x7c00100,0xe30001,0x110a3e14,0x7c00100,0x2530000,0x110a3e14,0x7c00900,0x1230000,0x110a3e14, +0x7c00900,0x1230001,0x110a3f16,0x7c00100,0xe30c00,0x110a3f16,0x7c00100,0xe30c01,0x110a3f16,0x7c00100,0x2530c00,0x110a3f16,0x7c00900,0x1230c00,0x110a3f16,0x7c00900, +0x1230c01,0x110a4005,0x7c00100,0xe30400,0x110a4112,0x7c00100,0xe30402,0x110a4112,0x7c80100,0xe30402,0x110a4400,0x4000000,0xe00000,0x110a4412,0x4000000,0xe00002, +0x110a4412,0x4000000,0xe00003,0x110a4416,0x4000000,0xe00c03,0x110a4500,0x4000000,0xe0000d,0x110a4516,0x4000000,0xe00c0d,0x110a4711,0x7c40300,0xe30000,0x110a4f11, +0x7c00300,0xe30001,0x110a4f11,0x7c40300,0xe30000,0x110a5300,0x4000000,0x810010,0x110a5300,0x4000000,0xe00002,0x110a5300,0x4000000,0xe00010,0x110a5300,0x4000000, +0x1410010,0x110a5300,0x4000002,0xe70010,0x110a5300,0x4000008,0x810010,0x110a5300,0x4000008,0x1410010,0x110a5300,0x6800000,0xe01c02,0x110a5300,0x6800000,0xe01c10, +0x110a5400,0x4000000,0x81000c,0x110a5400,0x4000000,0xe0000c,0x110a5400,0x4000000,0x141000c,0x110a5400,0x4000000,0x150000c,0x110a5400,0x4000000,0x160000c,0x110a5400, +0x4000002,0xe7000c,0x110a5400,0x4000010,0x87140c,0x110a5400,0x4000010,0xe7000c,0x110a5400,0x4000010,0x120140c,0x110a5400,0x4000010,0x127100c,0x110a5400,0x4000020, +0xe0000c,0x110a5400,0x4000026,0xe7000c,0x110a5400,0xc000010,0x80ac0c,0x110a5400,0xc000010,0xb4800c,0x11400a0c,0xc000010,0x1049400,0x11400c0e,0x4000010,0xb00000, +0x11400c0e,0x4000010,0x1071400,0x11400c0e,0xc000010,0xb48000,0x11400c11,0x7c00900,0x230400,0x11400f34,0xc000010,0x448000,0x11400f44,0xc000010,0x448000,0x11401d70, +0x4000000,0x200000,0x11403d92,0x4000000,0xe00000,0x11445787,0x4000004,0x120000a,0x11445787,0x4000008,0x81000a,0x11445787,0x4000008,0x141000a,0x11445787,0x4000010, +0x87000a,0x11445787,0xc000010,0x84800a,0x11445790,0x3802500,0x126246a,0x11445790,0x7c00d00,0x2530c0a,0x114a3d87,0x24000000,0x810000,0x114a3d87,0x24000000,0x1410000, +0x114a3d87,0x24000008,0x810000,0x114a3d87,0x24000008,0x1410000,0x114a3d87,0x24000010,0x870000,0x114a3d87,0x2c000010,0x848000,0x114a3d8d,0x4000000,0xe00000,0x114a3d8d, +0x24000000,0xe00000,0x114a3d8d,0x24000002,0x1200000,0x114a3d8d,0x24000002,0x10e00000,0x114a3d8d,0x24000008,0x810000,0x114a3d8d,0x24000008,0x1410000,0x114a3d90,0x7c00900, +0x930c00,0x114a3d90,0x7c00900,0xe30c00,0x114a3d92,0x7c00300,0xe30000,0x114a3e90,0x7000400,0x1200c02,0x114a3f87,0x4000004,0x1200000,0x114a3f90,0x7c00d00,0x2530c00, +0x114a4292,0x4000000,0xe00000,0x114a4292,0x4000000,0xe0000f,0x114a4492,0x4000000,0xe00002,0x114a4492,0x4000000,0xe00003,0x114a4492,0x4000000,0x10e00003,0x114a4592, +0x4000000,0xe00002,0x114a4592,0x4000000,0xe0000d,0x1180090a,0x2802400,0x962460,0x11800c17,0x2802100,0x962460,0x11800c17,0x2802500,0x962460,0x11800f1d,0x2802400, +0x962460,0x11800f29,0x2802400,0x962460,0x11820700,0x2802400,0x962460,0x11820700,0x2802500,0x962460,0x118a3d93,0x2802400,0x962460,0x118a3e90,0x2802400,0x962460, +0x11c00904,0x2802400,0x962460,0x11c00908,0x2802400,0x962460,0x11c00c1b,0x6800000,0x1329800,0x11c00f58,0x6800000,0x1329800,0x11c0105d,0x6800000,0x1329800,0x11c01161, +0x6800000,0x1329800,0x11c01265,0x6800000,0x1329800,0x11c01469,0x4000000,0x200000,0x11c01469,0x6800000,0x1329800,0x11c01469,0x7c00100,0x230400,0x11c0511b,0x7c00100, +0x230408,0x20000067,0x1000,0,0x20000b13,0x2802400,0x962460,0x20000b13,0x2802500,0x962460,0x20001b27,0x2802100,0x962460,0x20001b27,0x2802100,0x962461, +0x20001b27,0x2802400,0x962460,0x20001b27,0x2806400,0x962460,0x20001b27,0x2902100,0x962462,0x20001b27,0x4000000,0x200000,0x20001b27,0x4000000,0x400000,0x20001b27, +0x4000000,0x500000,0x20001b27,0x4000000,0x810000,0x20001b27,0x4000000,0xb00000,0x20001b27,0x4000000,0xc0000b,0x20001b27,0x4000000,0x1410000,0x20001b27,0x4000010, +0xb00000,0x20001b27,0x4000010,0xc00000,0x20001b27,0x6800000,0x1329800,0x20001b27,0x6800100,0x462540,0x20001b27,0x6800400,0x962540,0x20001b27,0x7c00100,0x230400, +0x20001b27,0x7c00100,0x230401,0x20002619,0x7c00100,0x220401,0x20002a00,0x4000000,0x1600000,0x20004b67,0,0x1900020,0x20004c67,0,0x1900020,0x20004d67, +0,0x1900020,0x20006d67,0x1000,0,0x20006e67,0x1000,0,0x20026d67,0,0,0x20026e67,0,0,0x200a4a12,0x7c00100, +0x1f304c1,0x200a4a12,0x7c00100,0x20304e1,0x21005600,0x4000000,0x700000,0x21022a00,0x4000000,0x1600000,0x30000419,0x7c00100,0x220400,0x30000419,0x7c00100,0x220401, +0x30000419,0x7c00100,0x250400,0x30000419,0x7c00100,0x250401,0x30000519,0x7c00100,0x220400,0x30000600,0x4000400,0x200000,0x30000600,0x7c00500,0x230400,0x30000605, +0x4000400,0x200000,0x3000080e,0x7c00100,0x220400,0x30000908,0x2000,0x962460,0x30000908,0x7c00100,0x220400,0x30000908,0x7c00100,0x220401,0x30000908,0x7c00100, +0x250400,0x30000908,0x7c00100,0x250401,0x30000a03,0x4000006,0x400000,0x30000c02,0x4000000,0x200000,0x30000c02,0x7c00100,0x230400,0x30000d22,0,0x218960, +0x30000d22,0x2802100,0x962460,0x30000d22,0x2802400,0x962460,0x30000d22,0x2802500,0x962460,0x30000d22,0x4000000,0x200000,0x30000d22,0x4000010,0x200000,0x30000d22, +0x7c00100,0x230400,0x30000d22,0xc000010,0x248000,0x30000e25,0x2802500,0x962460,0x30000e25,0x7c00100,0x230400,0x30001821,0x2802100,0x962460,0x30001821,0x2806400, +0x962460,0x30001821,0x4000000,0x200000,0x30001821,0x6800100,0x962540,0x30001821,0x6800100,0x962541,0x30001821,0x7c00100,0x230400,0x30001b27,0x2802100,0x962460, +0x30001b27,0x2802400,0x962460,0x30001b27,0x4000000,0x200000,0x30001b27,0x4000000,0x400000,0x30001b27,0x7c00100,0x230400,0x30001c1c,0x2802100,0x1862460,0x30001c1c, +0x2802400,0x1862460,0x30001c1c,0x2806400,0x1862460,0x30001c1c,0x4000000,0x200000,0x30001c1c,0x6800100,0x1862400,0x30001c1c,0x6800100,0x1862540,0x30001c1c,0x7c00100, +0x1830000,0x30001c1c,0x7c00100,0x1830001,0x30001c1c,0xc000010,0x448000,0x30001f0b,0x4000000,0x200000,0x30001f0b,0x4000010,0x200000,0x30001f0b,0x4000010,0x400000, +0x30001f0b,0x6800000,0x200000,0x30001f0b,0x7c00100,0x230400,0x30001f0b,0xc000010,0x248000,0x30002006,0x7c00100,0x250400,0x30002128,0x4000010,0x200000,0x30002128, +0x7c00100,0x230400,0x30002128,0xc000010,0x248000,0x3000221d,0x4000000,0x810000,0x3000221d,0x4000000,0x1410000,0x3000221d,0x4000001,0x440000,0x3000221d,0x7c00100, +0x230400,0x30002300,0x4000010,0x400000,0x30002320,0x7c00100,0x230400,0x30002417,0x2802100,0x1862460,0x30002417,0x2802400,0x1862460,0x30002417,0x2806400,0x1862460, +0x30002417,0x2882000,0x1862460,0x30002417,0x4000000,0x200000,0x30002417,0x4000000,0x400000,0x30002417,0x4000000,0x1600000,0x30002417,0x4000010,0x400000,0x30002417, +0x4000010,0x1200000,0x30002417,0x6800000,0x1329800,0x30002417,0x6800100,0x1862540,0x30002417,0x7c00100,0x1830000,0x30002417,0x7d00100,0x1830000,0x3000251b,0x80000, +0xc18820,0x3000251b,0x2802100,0x962460,0x3000251b,0x3c02100,0x962460,0x3000251b,0x4000000,0x200000,0x3000251b,0x4000006,0x500000,0x3000251b,0x4000010,0x400000, +0x3000251b,0x4000010,0xb70000,0x3000251b,0x4000800,0x200000,0x3000251b,0x6800000,0x1329800,0x3000251b,0x7c00100,0x230400,0x3000251b,0x7c00900,0x230400,0x3000251b, +0xc000010,0xb48000,0x3000251b,0x12882000,0x962460,0x30002800,0x4000001,0xc41c0b,0x30002800,0x24000000,0x200000,0x30002800,0x2c000010,0x1248002,0x30002800,0x2c000010, +0x11248002,0x30002a00,0x4000000,0x1600000,0x30002b01,0x2000,0x962460,0x30002c00,0x4000000,0x200000,0x30002c00,0x7c00100,0x10220405,0x30002d19,0x7c00100,0x250400, +0x30002e00,0x24000000,0x200000,0x30003000,0x24000000,0x200000,0x30003100,0x24000000,0x200000,0x30003600,0x24000000,0x200000,0x30003700,0x24000000,0x200000,0x3000392e, +0x24000000,0x200000,0x30005013,0x7c00100,0x2633801,0x30005600,0,0x918820,0x30020600,0x4000400,0x500000,0x30020701,0x2802400,0x962460,0x30020701,0x2802400, +0xc62460,0x300a3a11,0x4020000,0xe00000,0x300a3a11,0x4020000,0xe00002,0x300a3b11,0x4020000,0xe00002,0x300a3c00,0x4008000,0xe00000,0x300a3c00,0x4010000,0xe00000, +0x300a3d11,0x7c00300,0xe30002,0x300a4305,0x7c00100,0xe30400,0x300a4611,0x7c40300,0xe30000,0x300a4829,0x7c00100,0xe30400,0x300a4829,0x7c00900,0x1230400,0x300a4929, +0x4000000,0xe00000,0x30402576,0x4000010,0x400000,0x30402576,0x4000010,0xb70000,0x30402576,0xc000010,0xb48000,0x304a3d92,0x4000000,0xe00000,0x30800c17,0x2802100, +0x962460,0x30c01c6e,0x6800000,0x1329800,0x3100080e,0x7c00120,0x220402,0x3100080e,0x7c00120,0x250402,0x31005167,0x1000,0,0x3100581e,0x4000000,0x200000, +0x3100581e,0x7c00100,0x230400,0x3100590d,0x7c00100,0x230400,0x31005a09,0x7c00100,0x220400,0x31005a09,0x7c00100,0x250400,0x31005b00,0x4000000,0x200000,0x31005c00, +0x80000,0x918820,0x31005c00,0x2802000,0x962460,0x31005c00,0x2802400,0x962460,0x31005c00,0x4000000,0x200000,0x31005c00,0x4000000,0x200001,0x31005c00,0x6800000, +0x962540,0x31005c00,0x6800400,0x962540,0x31005c01,0x2802400,0x962460,0x31005d00,0x4000020,0x200005,0x31005d00,0x6800020,0x1329805,0x31005d00,0x7c00120,0x220405, +0x31005d00,0x7c00120,0x250405,0x31006000,0x82000,0x962460,0x31006000,0x180000,0x918820,0x310a5e11,0x7c40300,0xe30000,0x310a5f11,0x7c00300,0xe30001,0x32000419, +0x7c00100,0x250400,0x3200080e,0x4000020,0x200000,0x3200080e,0x7c00100,0x220400,0x3200080e,0x7c00100,0x250400,0x32000908,0x7c00100,0x220400,0x32000908,0x7c00100, +0x250400,0x32000c02,0x7c00100,0x230400,0x32000e25,0x7c00100,0x230400,0x32001d0c,0x7c00100,0x230400,0x32002800,0x80000,0x1e18820,0x32002800,0x80020,0x218820, +0x32002800,0x4000001,0x440002,0x32002800,0x24000000,0x200000,0x32002800,0x24000000,0x200002,0x32002800,0x24000020,0x200000,0x32002800,0x2c000010,0x1248002,0x32002919, +0x7c00100,0x22040f,0x32002a00,0x4000000,0x1600000,0x32002b01,0x2000,0x962460,0x32002b01,0x2802000,0x962460,0x32002b01,0x2802020,0x962460,0x32002c00,0x4000000, +0x200000,0x32002c00,0x4000020,0x200000,0x32002c00,0x4000020,0x200005,0x32002c00,0x7c00120,0x220405,0x32002c00,0x7c00120,0x250405,0x32002e00,0x24000020,0x200000, +0x32002f00,0x24000020,0x200000,0x32003000,0x24000000,0x200000,0x32003000,0x24000020,0x200000,0x32003500,0x24000000,0x200000,0x32003600,0x24000020,0x200000,0x32003600, +0x24000020,0x10200000,0x32003700,0x24000000,0x100000,0x32003700,0x24000000,0x200000,0x32003700,0x24000000,0x10200000,0x32003800,0x24000000,0x810000,0x32003800,0x24000000, +0x1410000,0x32005102,0x4000000,0x1500008,0x32005502,0x7c00100,0x230400,0x32006108,0x7c00100,0x220400,0x32006108,0x7c00100,0x250400,0x3200622a,0x2802100,0x962460, +0x3200622a,0x2806000,0x962460,0x3200622a,0x7c00100,0x230400,0x3200632b,0x2802100,0x962460,0x3200632b,0x2806000,0x962460,0x3200632b,0x7c00100,0x230400,0x3200642c, +0x2802100,0x962460,0x3200642c,0x7c00100,0x230400,0x3200652d,0x2802100,0x962460,0x3200652d,0x7c00100,0x230400,0x32006600,0x24000020,0x200000,0x32006700,0x24000020, +0x200000,0x32006800,0x24000020,0x200000,0x32006800,0x24000020,0x10200000,0x32006900,0x24000020,0x200000,0x32006900,0x24000020,0x810000,0x32006900,0x24000020,0x1410000, +0x32006a00,0x24000020,0x200000,0x32006a00,0x24000020,0x200001,0x32006a00,0x24000020,0x200002,0x32020701,0x2882000,0xc62460,0x32023300,0x4000000,0x100000,0x32026c01, +0x12882000,0x962460,0x32065700,0x4000000,0x810011,0x32065700,0x4000000,0x1410011,0x32086600,0x24000020,0x810000,0x32086600,0x24000020,0x1410000,0x32086900,0x24000020, +0x810000,0x32086900,0x24000020,0x1410000,0x320a3600,0x24000020,0x30200000,0x320a3d11,0x7c00100,0x1230400,0x320a3e14,0x7c00100,0xe30010,0x320a3e14,0x7c00100,0x2530000, +0x320a3f16,0x7c00100,0xe30c10,0x320a4400,0x4000000,0xe00003,0x320a4929,0x4000000,0xe00000,0x320a4f11,0x7c00300,0xe30001,0x320a6b16,0x7c00100,0x2530c00,0x32406372, +0xc000010,0x448000,0x324a3d95,0x4000000,0x10e00000,0x324a3d95,0x7c00100,0x1230400,0x324a3f90,0x4000002,0x1200c00,0x324a538d,0x24000000,0xe00000,0x32820701,0x2802000, +0x962460,0x40000419,0x7c00100,0x220400,0x40000519,0x7c00100,0x220400,0x40000600,0x4000400,0x200000,0x4000080e,0x7c00100,0x220400,0x4000080e,0x7c00100,0x250400, +0x4000080e,0x7c00100,0x250402,0x40000c02,0,0x218960,0x40000c02,0x2802100,0x962460,0x40000c02,0x2802400,0x962460,0x40000c02,0x2802500,0x962460,0x40000c02, +0x4000000,0x200000,0x40000c02,0x4000000,0x1071400,0x40000c02,0x7c00100,0x230400,0x40000d22,0x7c00100,0x230400,0x40000f0a,0x7c00100,0x230400,0x40001004,0x7c00100, +0x230400,0x40001110,0x2802100,0x962460,0x40001110,0x6800100,0x962540,0x4000120f,0x2802100,0x962460,0x4000120f,0x4000000,0x1600000,0x4000120f,0x7c00100,0x230400, +0x4000131f,0x7c00100,0x230400,0x40001423,0x4000000,0x200000,0x40001423,0x4000000,0x1600000,0x40001615,0x2802400,0x962460,0x40001615,0x7c00100,0x230400,0x40002417, +0x2802400,0x1862460,0x40002417,0x4000000,0x200000,0x40002800,0x6800000,0x201c00,0x40002800,0x24000002,0x200000,0x40002c00,0x4000000,0x200002,0x40003000,0x24000000, +0x10200000,0x40003000,0x24000020,0x200000,0x40003700,0x24000000,0x200000,0x40003700,0x24000000,0x10200000,0x40005a09,0x7c00100,0x220400,0x40005a09,0x7c00100,0x250400, +0x40005d00,0x7c00120,0x220405,0x40006f30,0x2802100,0x962460,0x40006f30,0x2802400,0x962460,0x40006f30,0x4000000,0x200000,0x40006f30,0x6800000,0x1329800,0x40006f30, +0x6800100,0x962540,0x40006f30,0x7c00100,0x230400,0x40006f30,0xc000010,0xb48000,0x40007034,0x7c00100,0x1830000,0x40007117,0x4000000,0x200000,0x40007208,0x7c00100, +0x220400,0x4000720e,0x7c00100,0x220400,0x4000720e,0x7c00500,0x22040e,0x4000720e,0x7c00500,0x22040f,0x40007219,0x7c00100,0x220400,0x40007219,0x7c00500,0x220400, +0x40007219,0x7c00500,0x22040e,0x40007219,0x7c00500,0x22040f,0x40007300,0x24000000,0x200000,0x40007300,0x24000000,0x10200000,0x40007400,0x4000000,0x200000,0x40007531, +0x7c00100,0x230400,0x40007631,0x7c00100,0x230400,0x40007835,0x4000010,0x400000,0x40007835,0x7c00100,0x230400,0x40007933,0x7c00100,0x230400,0x40007a32,0x6800000, +0x1329800,0x40007a32,0x7c00100,0x230400,0x40007b2f,0x7c00100,0x230400,0x40007c00,0x4000000,0x200000,0x40020701,0x2802400,0x962460,0x40020701,0x2802400,0xc62460, +0x40023300,0x4000000,0x200000,0x40027d01,0x12882000,0x962460,0x400a3700,0x24000000,0x30200000,0x400a3700,0x24000000,0x30e00000,0x400a4400,0x4000000,0xe0000d,0x400a4412, +0x4000000,0xe00002,0x400a4412,0x4000000,0xe00003,0x400a4500,0x4000000,0xe0000d,0x400a5300,0x4000000,0x810010,0x400a5300,0x4000000,0x1410010,0x404077b8,0x4000000, +0x200000,0x404077bb,0x4000000,0x200000,0x404077bb,0x4000000,0x400000,0x40c0511b,0x4000000,0x200000,0x41000419,0x7c00100,0x220400,0x41000419,0x7c00100,0x250400, +0x4100080e,0x7c00100,0x220400,0x4100080e,0x7c00100,0x250400,0x41000908,0x7c00100,0x220400,0x41000908,0x7c00100,0x250400,0x41000b13,0x2802000,0x962460,0x41000b13, +0x2802100,0x962460,0x41000b13,0x4000000,0xb00000,0x41000c02,0x2802100,0x962460,0x41000c02,0x4000000,0xb00000,0x41000c02,0x4000000,0x1500000,0x41000f0a,0x7c00100, +0x230400,0x41001004,0x7c00100,0x230400,0x41001423,0x7c00100,0x230400,0x41001b27,0x4000000,0x500000,0x41001d0c,0x7c00100,0x230400,0x41001d0c,0x7c00100,0x23040f, +0x41001f0b,0x2802100,0x962460,0x41001f0b,0x4000000,0x200000,0x41001f0b,0x7c00100,0x230400,0x41002800,0x24000000,0x200000,0x41002800,0x24000000,0x400000,0x41002919, +0x7c00100,0x22040e,0x41002a00,0x4000000,0x1600000,0x41002b01,0x2802020,0x962460,0x41002c00,0x4000000,0x200000,0x41002c00,0x7c00120,0x220405,0x41003000,0x24000000, +0x200000,0x41003700,0x24000000,0x200000,0x41003700,0x24000000,0x10200000,0x41003700,0x24000000,0x10e00000,0x41005d00,0x7c00120,0x220405,0x41006600,0x24000020,0x200000, +0x41006600,0x24000020,0x810000,0x41006600,0x24000020,0x1410000,0x41007208,0x7c00100,0x22040f,0x41007219,0x7c00100,0x220400,0x41007300,0x24000000,0x200000,0x41007e0e, +0x2802000,0x962460,0x41007e0e,0x4000000,0x200000,0x41007f0e,0x4000000,0x200000,0x41007f0e,0x7c00100,0x230400,0x41008002,0x7c00100,0x230400,0x41008137,0x2802100, +0x962460,0x41008137,0x4000000,0x200000,0x41008137,0x6800100,0x962540,0x41008137,0x7c00100,0x230400,0x41008301,0x2802000,0x962460,0x41008407,0x4000000,0x200000, +0x41008407,0x4000000,0x400000,0x41008407,0x4000000,0xb00000,0x41008407,0x7c00100,0x220400,0x41008407,0x7c00100,0x250400,0x4100850b,0x7c00100,0x230400,0x4100860b, +0x4000000,0x200000,0x4100860b,0x7c00100,0x230400,0x4100870c,0x7c00100,0x220400,0x41008838,0x7c00100,0x220400,0x41008838,0x7c00100,0x250400,0x41008939,0x2802000, +0x962460,0x41008939,0x2802100,0x962460,0x41008939,0x2806000,0x962460,0x41008939,0x4000000,0x200000,0x41008939,0x4000000,0x400000,0x41008939,0x7c00100,0x230400, +0x41008939,0xc000010,0x448000,0x41008a00,0x4000000,0x200000,0x41008b3b,0x4000000,0x1800000,0x41008b3b,0x6800000,0x1329800,0x41008b3b,0x7c00100,0x1830000,0x41008b3b, +0x7e00100,0x1830000,0x41008c3d,0x4000010,0x400000,0x41008c3d,0x7c00100,0x230400,0x41008d0e,0x7c00100,0x22040f,0x41008d19,0x7c00100,0x220400,0x41008d19,0x7c00100, +0x22040f,0x41008e00,0x24000000,0x200000,0x41008e00,0x24000000,0x400000,0x41008e00,0x24000000,0x1710000,0x41008e00,0x24000006,0x400000,0x41008f3a,0x2802000,0x962460, +0x41008f3a,0x2802100,0x962460,0x41008f3a,0x2806000,0x962460,0x41008f3a,0x4000000,0x200000,0x41008f3a,0x6800100,0x962540,0x41008f3a,0x7c00100,0x230400,0x4100903c, +0x7c00100,0x230400,0x4100903c,0x7c00100,0x23040f,0x41020701,0x2802000,0x962460,0x41020701,0x2802000,0xc62460,0x410a3700,0x24000000,0x30200000,0x410a3700,0x24000000, +0x30e00000,0x410a4412,0x4000000,0xe00003,0x410a4711,0x7c40300,0xe30000,0x410a4f11,0x7c00300,0xe30001,0x410a9100,0x4000000,0x800010,0x410a9100,0x4000000,0x810010, +0x410a9100,0x4000000,0x870010,0x410a9100,0x4000000,0xb00010,0x410a9100,0x4000000,0xf00010,0x410a9100,0x4000000,0x1001410,0x410a9100,0x4000000,0x1071010,0x410a9100, +0x4000000,0x1071410,0x410a9100,0x4000000,0x1410010,0x414a8292,0x4000000,0xe00000,0x41808300,0x2802000,0x962460,0x41c01469,0x6800000,0x1329800,0x50000419,0x7c00100, +0x220400,0x50000419,0x7c00100,0x250400,0x5000080e,0x7c00100,0x220400,0x50000908,0x7c00100,0x220400,0x50000908,0x7c00100,0x250400,0x50000b13,0x2802500,0x962460, +0x50000f0a,0x7c00100,0x230400,0x50001615,0x2802100,0x962460,0x50001615,0x7c00100,0x230400,0x50002b01,0x2802020,0x962460,0x50002c00,0x4000000,0x200000,0x50002c19, +0x7c00100,0x220400,0x50002d19,0x7c00100,0x220400,0x50003000,0x24000000,0x200000,0x50003000,0x24000020,0x200000,0x50003700,0x24000000,0x200000,0x50005d00,0x7c00120, +0x220405,0x50005d00,0x7c00120,0x250405,0x50006108,0x7c00100,0x220400,0x50006108,0x7c00100,0x250400,0x50006600,0x24000020,0x200000,0x50007300,0x24000000,0x200000, +0x50008301,0x2802400,0x962460,0x50008a00,0x7c00500,0x230400,0x50009257,0x2802400,0x962460,0x50009257,0x4000000,0x200000,0x50009257,0x4000010,0x1071400,0x50009257, +0x6800000,0x1329800,0x50009257,0x7c00100,0x230400,0x50009257,0x7c00500,0x230400,0x50009257,0x7c00900,0x230400,0x50009257,0xc000010,0xb48000,0x5000933e,0x2802100, +0x962460,0x5000933e,0x2802400,0x962460,0x5000933e,0x4000000,0x200000,0x5000933e,0x4000000,0x400000,0x5000933e,0x4000010,0x400000,0x5000933e,0x6800000,0x1329800, +0x5000933e,0x6800100,0x962540,0x5000933e,0x6800100,0x962541,0x5000933e,0x6804400,0x962540,0x5000933e,0x7c00100,0x230400,0x5000933e,0x7c00100,0x230401,0x5000933e, +0xc000010,0x448000,0x50009419,0x7c00100,0x220400,0x50009419,0x7c00100,0x250400,0x50009500,0x4000400,0x200000,0x5000965a,0x4000000,0x500000,0x5000965a,0x7c00100, +0x230400,0x5000965a,0xc000010,0xb48000,0x5000975b,0x4000000,0x200000,0x5000975b,0x4000010,0x400000,0x5000975b,0x7c00100,0x230400,0x50009865,0x7c00100,0x230400, +0x50009965,0x4000010,0x400000,0x50009965,0x7c00100,0x230400,0x50409a92,0x4000000,0x200000,0x5100080e,0x7c00100,0x220400,0x5100080e,0x7c00100,0x250400,0x51000c02, +0x2802100,0x962460,0x51000c02,0x4000000,0x1500000,0x51000c02,0x4000020,0x200000,0x51000c02,0x7c00100,0x230400,0x51000f0a,0x7c00100,0x230400,0x51000f0a,0x7c00500, +0x230400,0x51001110,0x2802100,0x962460,0x5100131f,0x2802100,0x962460,0x51001423,0x7c00100,0x230400,0x51001524,0x2802100,0x962460,0x51001524,0x4000000,0x200000, +0x51001524,0x7c00100,0x230400,0x5100171a,0x2802100,0x962460,0x5100171a,0x4000000,0x200000,0x5100171a,0x4000000,0x1500000,0x5100171a,0x7c00100,0x230400,0x51001b27, +0x4000000,0x200000,0x51001b27,0x4000000,0x400000,0x51001b27,0x4000000,0x500000,0x51001b27,0x7c00100,0x230400,0x51001c1c,0x2802100,0x1862460,0x51001c1c,0x2802400, +0x1862460,0x51001c1c,0x2806400,0x1862460,0x51001c1c,0x4000000,0x1800000,0x51001c1c,0x6800000,0x1329800,0x51001c1c,0x6800000,0x1862400,0x51001c1c,0x6800100,0x1862400, +0x51001c1c,0x6800100,0x1862540,0x51001c1c,0x6800400,0x1862400,0x51001c1c,0x7c00100,0x1830000,0x5100251b,0x7c00100,0x230400,0x51002619,0x7c00100,0x220400,0x51002619, +0x7c00100,0x250400,0x51002800,0x80020,0x218820,0x51002c00,0x4000000,0x200000,0x51002d19,0x7c00100,0x230400,0x51003700,0x24000000,0x200000,0x51003700,0x24000000, +0xe00000,0x51005201,0x2802400,0x962460,0x51005c00,0x4000000,0x200000,0x51006108,0x7c00100,0x220400,0x51006108,0x7c00100,0x250400,0x51006600,0x24000020,0x200000, +0x51006600,0x24000020,0x810000,0x51006600,0x24000020,0x1410000,0x51007300,0x24000000,0x200000,0x51007300,0x24000020,0x200000,0x51008002,0x7c00100,0x230400,0x51008301, +0x2802000,0x962460,0x51008301,0x2802400,0x962460,0x51008a00,0x7c00500,0x230400,0x51008e00,0x24000000,0x200000,0x51008e00,0x24000000,0x400000,0x51008e00,0x24000000, +0x810000,0x51008e00,0x24000000,0x1400000,0x51008e00,0x24000000,0x1410000,0x51008e00,0x24000000,0x1710000,0x51008e00,0x24000002,0x200000,0x51008e00,0x24000500,0x230400, +0x51008e00,0x2c000010,0xb48000,0x51009419,0x7c00100,0x220400,0x51009419,0x7c00100,0x22040e,0x51009419,0x7c00100,0x22040f,0x51009419,0x7c00100,0x250400,0x51009500, +0x4000000,0x200000,0x51009500,0x7c00500,0x230400,0x51009519,0x7c00100,0x220400,0x51009519,0x7c00100,0x22040f,0x51009519,0x7c00100,0x230400,0x51009519,0x7c00100, +0x250400,0x51009b71,0x2802100,0x962460,0x51009b71,0x6800000,0x1329800,0x51009b71,0x6800100,0x962540,0x51009b71,0x6804400,0x962540,0x51009b71,0x7c00100,0x230400, +0x51009c52,0x2802100,0x962460,0x51009c52,0x2802400,0x962460,0x51009c52,0x2802c00,0x962460,0x51009c52,0x4000010,0x400000,0x51009c52,0x6800000,0x1329800,0x51009c52, +0x6800100,0x962540,0x51009c52,0x7c00100,0x230400,0x51009c52,0xc000010,0x448000,0x51009d6d,0x6800000,0x1329800,0x51009d6d,0x7c00100,0x230400,0x51009d6d,0x7c00500, +0x230400,0x51009d6d,0x7c00d00,0x230400,0x51009d6d,0xc000010,0x448000,0x51009e08,0x2802100,0x962460,0x51009f63,0x4000010,0x400000,0x51009f63,0x6800000,0x1329800, +0x51009f63,0x7c00100,0x230400,0x51009f63,0x7c00900,0x230400,0x51009f63,0xc000010,0x448000,0x51009f63,0xc000010,0xb48000,0x5100a008,0x2000,0x962460,0x5100a008, +0x2802400,0x962460,0x5100a008,0x4000000,0x200000,0x5100a008,0x7c00100,0x220400,0x5100a008,0x7c00100,0x230400,0x5100a008,0x7c00100,0x250400,0x5100a008,0x7c00500, +0x230400,0x5100a16f,0x2806400,0x962460,0x5100a16f,0x6800000,0x1329800,0x5100a16f,0x6800100,0x962540,0x5100a16f,0x7c00100,0x230400,0x5100a16f,0xc000010,0x448000, +0x5100a24f,0x2802100,0x962460,0x5100a24f,0x2802400,0x962460,0x5100a24f,0x6800000,0x1329800,0x5100a24f,0x7c00100,0x230400,0x5100a24f,0xc000010,0x448000,0x5100a36e, +0x2802100,0x962460,0x5100a36e,0x4000000,0x200000,0x5100a36e,0x6800100,0x962540,0x5100a36e,0x6804400,0x962540,0x5100a36e,0x7c00100,0x230400,0x5100a442,0x2802100, +0x962460,0x5100a442,0x4000000,0x200000,0x5100a442,0x6800000,0x1329800,0x5100a442,0x6800100,0x962540,0x5100a442,0x7c00100,0x230400,0x5100a442,0xc000010,0x448000, +0x5100a500,0x4000000,0x200000,0x5100a600,0x4000000,0x200000,0x5100a601,0x2802000,0x962460,0x5100a76b,0x7c00100,0x230400,0x5100a868,0x7c00100,0x230400,0x5100a96c, +0x4000000,0x200000,0x5100a96c,0x7c00100,0x230400,0x5100aa00,0x4000000,0xe00000,0x5100ab00,0x4000000,0xe00000,0x51086600,0x24000020,0x810000,0x51086600,0x24000020, +0x1410000,0x510a4005,0x7c00100,0xe30400,0x510a4711,0x7c40300,0xe30000,0x510a7300,0x24000000,0x30200000,0x510aaa00,0x4000000,0x30e00000,0x5140a2b3,0x4000400,0x400000, +0x514a8292,0x4000000,0xe00000,0x51802b84,0x2802000,0x962460,0x51c00908,0x2802400,0x962460,0x51c0a008,0x2802400,0x962460,0x52000f0a,0x2802100,0x962460,0x52000f0a, +0x6800100,0x962540,0x52000f0a,0x7c00100,0x230400,0x52001004,0x4000000,0x1600000,0x52001b00,0x4000000,0x200000,0x52001c1c,0x2802100,0x1862460,0x52001c1c,0x6800100, +0x1862400,0x52001c1c,0x6800400,0x1862400,0x52001e12,0x7c00100,0x2230500,0x52001e12,0x7c00100,0x2330520,0x52002128,0x4000002,0x400000,0x52002128,0x7c00100,0x230400, +0x52002a00,0x4000000,0x1500000,0x52002a00,0x4000000,0x1600000,0x52002d00,0x4000000,0x200006,0x52003000,0x24000000,0x200000,0x52006108,0x7c00100,0x220400,0x52006108, +0x7c00100,0x250400,0x52008301,0x2802400,0x962460,0x52008407,0x2802400,0x962460,0x52008407,0x7c00100,0x220400,0x52008407,0x7c00100,0x250400,0x52008b3b,0x6800000, +0x1800000,0x52008b3b,0x7c00100,0x1830000,0x52008e00,0x24000000,0x400000,0x52009419,0x7c00100,0x250400,0x5200975b,0x4000000,0x200000,0x5200ac7e,0x2802000,0x962460, +0x5200ac7e,0x2802100,0x962460,0x5200ac7e,0x2802400,0x962460,0x5200ac7e,0x4000010,0x200000,0x5200ac7e,0x7c00100,0x230400,0x5200ad28,0x7c00100,0x230400,0x5200ae6a, +0x2802100,0x1862460,0x5200ae6a,0x2802400,0x962460,0x5200ae6a,0x2802400,0x1862460,0x5200ae6a,0x2806000,0x1862460,0x5200ae6a,0x4000000,0x1800000,0x5200ae6a,0x6800000, +0x1329800,0x5200ae6a,0x6800100,0x1862400,0x5200ae6a,0x6800100,0x1862540,0x5200ae6a,0x7c00100,0x1830000,0x5200ae6a,0x7c00900,0x1830000,0x5200ae6a,0xc000010,0x1848000, +0x5200b083,0x4000010,0x400000,0x5200b083,0x7c00100,0x230400,0x5200b083,0xc000010,0x448000,0x5200b182,0x2802400,0x962460,0x5200b182,0x4000000,0x200000,0x5200b182, +0x4000010,0x400000,0x5200b182,0x7c00100,0x230400,0x5200b182,0xc000010,0x448000,0x5200b30a,0x2802400,0x962460,0x5200b30a,0x4000000,0x200000,0x5200b30a,0x7c00100, +0x230400,0x5200b54e,0x2802100,0x962460,0x5200b54e,0x2802400,0x962460,0x5200b54e,0x4000000,0x200000,0x5200b54e,0x4000010,0x400000,0x5200b54e,0x6800000,0x1329800, +0x5200b54e,0x6800100,0x962540,0x5200b54e,0x6804400,0x962540,0x5200b54e,0x7c00100,0x230400,0x5200b54e,0xc000010,0x448000,0x5200b61c,0x4000000,0x1800000,0x5200b61c, +0x6800400,0x1862400,0x5200b61c,0x7c00100,0x1830000,0x5200b61c,0x7c00900,0x1830000,0x5200b77f,0x2802100,0x1862460,0x5200b77f,0x2802400,0x1862460,0x5200b77f,0x4000000, +0x1800000,0x5200b77f,0x4000010,0x1800000,0x5200b77f,0x7c00100,0x1830000,0x5200b77f,0x7c00500,0x1830000,0x5200b77f,0x7c00900,0x1830000,0x5200b77f,0x7e00100,0x1830000, +0x5200b873,0x2802100,0x962460,0x5200b873,0x2806400,0x962460,0x5200b873,0x6800000,0x1329800,0x5200b873,0x6800100,0x962540,0x5200b873,0x6800400,0x962540,0x5200b873, +0x7c00100,0x230400,0x5200b873,0xc000010,0x448000,0x5200b912,0x7c00100,0x2230500,0x5200b912,0x7c00100,0x2330520,0x5200ba74,0x4000000,0x200000,0x5200ba74,0x4000010, +0x400000,0x5200ba74,0x7c00100,0x230400,0x5200bb85,0x4000000,0x200000,0x5200bb85,0x7c00100,0x230400,0x5200bc75,0x4000000,0x400000,0x5200bc75,0x4000010,0x400000, +0x5200bc75,0x7c00100,0x230400,0x5200bd7d,0x4000000,0x200000,0x5200bd7d,0x7c00100,0x230400,0x5200be7a,0x4000000,0x200000,0x5200be7a,0x7c00100,0x230400,0x5200bf58, +0x7c00100,0x230400,0x5200c002,0x4000000,0x200000,0x5200c178,0,0x218960,0x5200c178,0x2802000,0x962460,0x5200c178,0x2802100,0x962460,0x5200c178,0x2802400, +0x962460,0x5200c178,0x2806400,0x962460,0x5200c178,0x4000000,0x200000,0x5200c178,0x6800100,0x962540,0x5200c178,0x7c00100,0x230400,0x5200c178,0x7c00100,0x230401, +0x5200c178,0xc000010,0x448000,0x5200c247,0x7c00100,0x230400,0x5200c247,0x7c00100,0x830400,0x5200c247,0x7c00100,0x1430400,0x5200c300,0x4000000,0x200003,0x52022d00, +0x4000000,0x100006,0x52023700,0x24000000,0x100000,0x52023700,0x24000000,0xe00000,0x52023700,0x24000000,0x10100000,0x52023700,0x24000000,0x10e00000,0x52023700,0x24000000, +0x928045a0,0x52024400,0x4000000,0x100000,0x52027300,0x24000000,0x100000,0x5202c300,0x4000000,0x100000,0x5202c300,0x4000000,0x100002,0x5202c300,0x4000000,0x100003, +0x5202c300,0x4000000,0x10000d,0x5202c300,0x4000100,0x150400,0x5202c300,0x4000100,0x15040d,0x5202c300,0x4000100,0x10150400,0x520a1e12,0x7c00100,0x2130480,0x520a3700, +0x24000000,0x30e00000,0x520a3800,0x24000000,0x30100000,0x520a4711,0x7c40300,0xe30000,0x520a4f11,0x7c00300,0xe30001,0x520a7300,0x24000000,0x30100000,0x520ab412,0x7c00100, +0x2130480,0x520ac400,0x4000000,0xe00002,0x520ac400,0x4000000,0xe0000d,0x520ac400,0x4000000,0x30e0000d,0x520ac414,0x4000000,0xe0000d,0x520ac511,0x7c40300,0xe30000, +0x5240af78,0x6800400,0x962540,0x5240af78,0x7c00100,0x230400,0x5240af79,0x4000400,0x200000,0x5240af79,0x6800100,0x962540,0x5240b298,0x4000000,0x200000,0x5240b2a2, +0x4000000,0x200000,0x5240b2a2,0x4000000,0x1500000,0x5240b5b6,0x7c00900,0x230400,0x524a4492,0x4000000,0xe00003,0x5280af78,0x2802400,0x962460,0x5280af79,0x2802400, +0x962460,0x5280af7b,0x2802400,0x962460,0x5280af7d,0x2802400,0x962460,0x52c0b3ad,0x2802400,0x962460,0x52c0b3b1,0x7c00100,0x230400,0x60000c02,0x2802100,0x962460, 0x60000c02,0x7c00100,0x230400,0x60000f0a,0x2802100,0x962460,0x60000f0a,0x6800100,0x962540,0x60000f0a,0x7c00100,0x230400,0x6000131f,0x4000000,0x200000,0x6000171a, -0x7c00100,0x230400,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000,0x962460,0x60002919,0x7c00100, -0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003000,0x24000000,0x30200000,0x60003000,0x24000000,0x30e00000, -0x60003700,0x24000000,0x200000,0x60003700,0x24000000,0x30200000,0x60003800,0x24000000,0x1710000,0x60003800,0x24000000,0x30200000,0x60003800,0x24000000,0xb0e00000,0x60005102, -0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301,0x2802000,0x962460,0x6000903c,0x2806000, -0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100,0x220400,0x6000a008,0x7c00100,0x250400, -0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400,0x6000c73f,0x2802000,0x962460,0x6000c73f, -0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f,0x7c00100,0x230400,0x6000c80b,0x7c00100, -0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010,0x200000,0x6000c941,0x6800000,0x1329800, -0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400,0x6000cc00,0x4000000,0xe00000,0x6000cc00, -0x4000000,0x30e00000,0x6000cd00,0x4000000,0x30200000,0x6000cd00,0x4000000,0x30e00000,0x6000cd00,0x4000000,0xb0e00000,0x6000ce00,0x4000000,0x30e00000,0x6000ce00,0x4000000, -0xb0e00000,0x6000cf00,0x4000000,0x30e00000,0x6000cf00,0x4000000,0xb0e00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d, -0x6002c300,0x4000000,0x30100000,0x6002c300,0x4000100,0x150400,0x6002c300,0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a4305,0x7c00100,0xe30400,0x600ac400, -0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e00003,0x600ac400,0x4000000,0x30e0000d,0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600ad111,0x7c40300, -0xe30000,0x61000a03,0x4000000,0x1600000,0x61000c02,0,0x218820,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400, -0x61001d0c,0x7c00100,0x250400,0x61006600,0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00, -0x24000000,0x200000,0x61008e00,0x24000000,0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100, -0x250400,0x61009519,0x7c00500,0x22040f,0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460, -0x6100c300,0x4000000,0x20000f,0x6100cd00,0x4000000,0x200000,0x6100ce00,0x4000000,0x30e00000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202, -0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120,0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400, -0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800,0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000, -0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573,0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573, -0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100,0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100, -0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460,0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800, -0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997,0x7c00100,0x230400,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98, -0x7c00100,0x230400,0x6100db71,0x4000000,0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100, -0x962540,0x6100dc99,0x6804400,0x962540,0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x6140af75,0x7c00100,0x230400, -0x6140af76,0x6800100,0x962540,0x6140af7f,0x7c00100,0x230400,0x6180af76,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800, -0x80000,0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0,0x218820,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100, -0x230400,0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800, -0x70002320,0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800, -0x24000000,0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100, -0x230400,0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000, -0x70008e00,0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519, -0x7c00100,0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100, -0x230400,0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460, -0x7000b61c,0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00, -0x4000000,0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x30e00000,0x7000cd00,0x4000000, -0x90e00000,0x7000cd00,0x4000000,0xb0e00000,0x7000ce00,0x4000000,0x30e00000,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000cf00,0x4000000,0x30e00000, -0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997,0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86, -0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000,0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400, -0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460,0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000, -0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489,0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489, -0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100,0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400, -0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000,0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400, -0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691,0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691, -0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400,0x200000,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500, -0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460,0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400, -0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79,0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c, -0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100,0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000, -0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540,0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800, -0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c,0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c, -0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100,0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100, -0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000,0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460, -0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b,0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b, -0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100,0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010, -0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460,0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000, -0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6,0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6, -0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000,0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400, -0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800,0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400, -0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92,0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x7040dfa8, -0x4000000,0x200000,0x7040f7aa,0x80000,0x918820,0x7080af76,0x2802400,0x962460,0x7080dfa8,0x2802400,0x962460,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100, -0x230400,0x8000171a,0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000, -0x80005208,0x2802400,0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519, -0x7c00100,0x250400,0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000, -0xe00000,0x8000cd00,0x4000000,0x30e00000,0x8000cd00,0x4000000,0x70200000,0x8000ce00,0x4000000,0x30e00000,0x8000cf00,0x4000000,0x30e00000,0x8000d202,0x2802500,0x962460, -0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000,0x400000,0x8000d997, -0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400,0x8000e719,0x7c00100, -0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1,0x2806400,0x1862460, -0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010,0x448000,0x8000fe9c, -0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400,0x800102a2,0x4000000, -0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c,0x7c00100,0x220400, -0x8001044c,0x7c00100,0x250400,0x80010500,0x4000000,0x30e00000,0x80010500,0x4000000,0xb0e00000,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670, -0x4000010,0x400000,0x80010670,0xc000010,0x448000,0x800a4711,0x7c40300,0xe30000,0x800b0011,0x7c40300,0xe30000}; +0x7c00100,0x230400,0x6000171a,0x7c00100,0x230560,0x60001b27,0x2802100,0x962460,0x60001b27,0x4000000,0xc00000,0x60001b27,0x7c00100,0x230400,0x60001f0b,0x2802000, +0x962460,0x60002919,0x7c00100,0x22040e,0x60002a00,0x4000000,0x1600000,0x60003000,0x24000000,0x10200000,0x60003000,0x24000000,0x10e00000,0x60003700,0x24000000,0x200000, +0x60003800,0x24000000,0x1710000,0x60005102,0x4000000,0x200000,0x60006108,0x7c00100,0x220400,0x60006108,0x7c00100,0x250400,0x60006600,0x24000020,0x200000,0x60008301, +0x2802000,0x962460,0x6000903c,0x2806000,0x962460,0x6000903c,0x4000000,0x400000,0x60009519,0x7c00100,0x220400,0x60009519,0x7c00100,0x250400,0x6000a008,0x7c00100, +0x220400,0x6000a008,0x7c00100,0x250400,0x6000c300,0x4000000,0x32703580,0x6000c654,0x2802000,0x962460,0x6000c654,0x4000010,0x200000,0x6000c654,0x7c00100,0x230400, +0x6000c73f,0x2802000,0x962460,0x6000c73f,0x2802100,0x962460,0x6000c73f,0x4000000,0x200000,0x6000c73f,0x6800100,0x962540,0x6000c73f,0x6804000,0x962540,0x6000c73f, +0x7c00100,0x230400,0x6000c80b,0x7c00100,0x230400,0x6000c941,0x2802100,0x962460,0x6000c941,0x2806000,0x962460,0x6000c941,0x4000000,0x200000,0x6000c941,0x4000010, +0x200000,0x6000c941,0x6800000,0x1329800,0x6000c941,0x6800100,0x962540,0x6000c941,0x7c00100,0x230400,0x6000c941,0xc000010,0x448000,0x6000ca82,0x7c00100,0x230400, +0x6000cc00,0x4000000,0xe00000,0x6000d000,0x4000000,0x200000,0x6002c300,0x4000000,0x100000,0x6002c300,0x4000000,0x10000d,0x6002c300,0x4000100,0x150400,0x6002c300, +0x4000100,0x15040d,0x6002c300,0x4000100,0x10150400,0x600a3000,0x24000000,0x30200000,0x600a3000,0x24000000,0x30e00000,0x600a3700,0x24000000,0x30200000,0x600a3800,0x24000000, +0x30200000,0x600a3800,0x24000000,0xb28045a0,0x600a4305,0x7c00100,0xe30400,0x600ac300,0x4000000,0x30100000,0x600ac400,0x4000000,0x10e0000d,0x600ac400,0x4000000,0x30e0000d, +0x600acb14,0x7c00100,0xe30000,0x600acb16,0x7c00100,0xe30c00,0x600acc00,0x4000000,0x30e00000,0x600acd00,0x4000000,0x30200000,0x600acd00,0x4000000,0x30e00000,0x600acd00, +0x4000000,0x30e05200,0x600acd00,0x4000000,0xb0e00000,0x600acd00,0x4000000,0xb28045a0,0x600acd00,0x4000000,0xb28049c0,0x600ace00,0x4000000,0x30e00000,0x600ace00,0x4000000, +0xb28045a0,0x600acf00,0x4000000,0x30e00000,0x600acf00,0x4000000,0xb28045a0,0x600ad111,0x7c40300,0xe30000,0x604ac492,0x4000000,0x30e00003,0x61000a03,0x4000000,0x1600000, +0x61000c02,0,0x218960,0x6100120f,0x4000000,0x200000,0x61001a18,0x7c00100,0x1830000,0x61001d0c,0x7c00100,0x230400,0x61001d0c,0x7c00100,0x250400,0x61006600, +0x24000020,0x200000,0x61008407,0x7c00100,0x220400,0x61008407,0x7c00100,0x250400,0x6100870c,0x7c00100,0x220400,0x61008e00,0x24000000,0x200000,0x61008e00,0x24000000, +0x400000,0x61008e00,0x24000002,0x300000,0x6100903c,0x7c00100,0x230400,0x61009519,0x7c00100,0x220400,0x61009519,0x7c00100,0x250400,0x61009519,0x7c00500,0x22040f, +0x61009b71,0x2802100,0x962460,0x61009b71,0x2806400,0x962460,0x61009b71,0x7c00100,0x230400,0x6100a008,0x2802100,0x962460,0x6100c300,0x4000000,0x20000f,0x6100cd00, +0x4000000,0x200000,0x6100d202,0x2802400,0x962460,0x6100d202,0x2802500,0x962460,0x6100d202,0x7c00100,0x230400,0x6100d302,0x4000020,0x200000,0x6100d302,0x7c00120, +0x230405,0x6100d476,0x2802100,0x962460,0x6100d476,0x2802100,0x962461,0x6100d476,0x2806400,0x962460,0x6100d476,0x4000000,0x400000,0x6100d476,0x6800000,0x1329800, +0x6100d476,0x6800100,0x962540,0x6100d476,0x7c00100,0x230400,0x6100d476,0xc000010,0x448000,0x6100d573,0x2802100,0x962460,0x6100d573,0x2806400,0x962460,0x6100d573, +0x6800100,0x962540,0x6100d573,0x7c00100,0x230400,0x6100d573,0x7c00900,0x230400,0x6100d573,0xc000010,0x448000,0x6100d68d,0x7c00100,0x230400,0x6100d756,0x7c00100, +0x230400,0x6100d85c,0x2802400,0x962460,0x6100d85c,0x6800100,0x962540,0x6100d85c,0x7c00100,0x230400,0x6100d85c,0x7c00500,0x230400,0x6100d997,0x2802100,0x962460, +0x6100d997,0x4000000,0x200000,0x6100d997,0x4000000,0x400000,0x6100d997,0x6800000,0x1329800,0x6100d997,0x6800100,0x962540,0x6100d997,0x6804400,0x962540,0x6100d997, +0x7c00100,0x230400,0x6100d997,0x7c00100,0x230560,0x6100d997,0xc000010,0x448000,0x6100da98,0x6800000,0x1329800,0x6100da98,0x7c00100,0x230400,0x6100db71,0x4000000, +0x200000,0x6100dc99,0x2802100,0x962460,0x6100dc99,0x2802400,0x962460,0x6100dc99,0x6800000,0x1329800,0x6100dc99,0x6800100,0x962540,0x6100dc99,0x6804400,0x962540, +0x6100dc99,0x7c00100,0x230400,0x610a4711,0x7c40300,0xe30000,0x610a4f11,0x7c00300,0xe30001,0x610ace00,0x4000000,0x30e00000,0x6140af78,0x7c00100,0x230400,0x6140af79, +0x6800100,0x962540,0x6140af82,0x7c00100,0x230400,0x6180af79,0x2802400,0x962460,0x62002a00,0x4000000,0x1600000,0x63000c00,0x80000,0x918820,0x63002800,0x80000, +0x918820,0x7000080e,0x7c00100,0x250400,0x70000a03,0x4000000,0x200000,0x70000c00,0,0x218960,0x70000f0a,0x7c00100,0x230400,0x70001004,0x7c00100,0x230400, +0x70001524,0x2802100,0x962460,0x70001524,0x7c00100,0x230400,0x70001615,0x2802100,0x962460,0x7000171a,0x2802100,0x962460,0x70001821,0x6800000,0x1329800,0x70002320, +0x7c00100,0x230400,0x70002a00,0x4000000,0x1500000,0x70002a00,0x4000000,0x1600000,0x70003000,0x24000000,0x200000,0x70003000,0x24000000,0x10200000,0x70003800,0x24000000, +0xe00000,0x70005201,0x2802400,0x962460,0x7000581e,0x7c00100,0x230400,0x70006108,0x7c00100,0x220400,0x70006108,0x7c00100,0x250400,0x70006f30,0x7c00100,0x230400, +0x70007300,0x24000000,0x200000,0x70007f0e,0x4000000,0x200000,0x70008301,0x2802100,0x962460,0x70008301,0x2802400,0x962460,0x70008e00,0x24000000,0x200000,0x70008e00, +0x24000000,0x400000,0x70008e00,0x24000002,0x400000,0x70008e00,0x24000008,0x1410000,0x70008e00,0x24000010,0x400000,0x70008e00,0x2c000010,0x448000,0x70009519,0x7c00100, +0x220400,0x70009519,0x7c00100,0x230400,0x70009519,0x7c00100,0x250400,0x70009865,0x7c00100,0x230400,0x70009965,0x4000010,0x400000,0x70009965,0x7c00100,0x230400, +0x7000a008,0x7c00100,0x220400,0x7000a008,0x7c00100,0x250400,0x7000a008,0x7c00500,0x22040f,0x7000a50e,0x4000000,0x200000,0x7000b61c,0x2802400,0x1862460,0x7000b61c, +0x6800400,0x1862400,0x7000b61c,0x7c00100,0x1830000,0x7000c300,0x4000000,0x100000,0x7000c941,0x2806000,0x962460,0x7000cc00,0x4000000,0xe00000,0x7000cd00,0x4000000, +0x200000,0x7000cd00,0x4000000,0xe00000,0x7000cd00,0x4000000,0x10200000,0x7000cd00,0x4000000,0x10e00000,0x7000cd00,0x4000000,0x10e05200,0x7000cd00,0x4000000,0x90e00000, +0x7000cd00,0x4000000,0x928045a0,0x7000cf00,0x4000000,0xe00000,0x7000cf00,0x4000000,0x10e00000,0x7000d202,0x2802100,0x962460,0x7000d202,0x7c00100,0x230400,0x7000d997, +0x7c00100,0x230400,0x7000d997,0xc000010,0x248000,0x7000dd86,0x2802400,0x962460,0x7000dd86,0x7c00100,0x230400,0x7000dd86,0xc000010,0x448000,0x7000de9f,0x4000000, +0x200000,0x7000de9f,0x7c00100,0x230400,0x7000e001,0x2000,0x962460,0x7000e001,0x2802400,0x962460,0x7000e187,0x2802000,0x962460,0x7000e187,0x2802100,0x962460, +0x7000e187,0x4000000,0x200000,0x7000e187,0x7c00100,0x230400,0x7000e187,0xc000010,0x448000,0x7000e288,0x7c00100,0x230400,0x7000e300,0x4000000,0x200000,0x7000e489, +0x2802100,0x962460,0x7000e489,0x2802400,0x962460,0x7000e489,0x6800100,0x962540,0x7000e489,0x6800100,0x962541,0x7000e489,0x6804400,0x962540,0x7000e489,0x7c00100, +0x230400,0x7000e489,0x7c00900,0x230400,0x7000e59d,0x2802100,0x962460,0x7000e59d,0x2802400,0x962460,0x7000e59d,0x4000000,0x200000,0x7000e59d,0x4000010,0x200000, +0x7000e59d,0x6800100,0x962540,0x7000e59d,0x6804400,0x962540,0x7000e59d,0x7c00100,0x230400,0x7000e59d,0xc000010,0x448000,0x7000e691,0x2802100,0x962460,0x7000e691, +0x2802400,0x962460,0x7000e691,0x2806400,0x962460,0x7000e691,0x6800000,0x1329800,0x7000e691,0x6800100,0x962540,0x7000e691,0x7c00100,0x230400,0x7000e700,0x4000400, +0x200000,0x7000e70e,0x7c00100,0x220400,0x7000e719,0x7c00100,0x220400,0x7000e719,0x7c00500,0x22040f,0x7000e853,0x7c00100,0x230400,0x7000e9a0,0x2802400,0x962460, +0x7000e9a0,0x4000000,0x200000,0x7000e9a0,0x4000000,0x500000,0x7000e9a0,0x7c00100,0x230400,0x7000ea79,0x2802400,0x962460,0x7000ea79,0x4000000,0x200000,0x7000ea79, +0x4000000,0xf00000,0x7000ea79,0x4000010,0x400000,0x7000ea79,0x7c00100,0x230400,0x7000eb8c,0x2802400,0x962460,0x7000eb8c,0x4000000,0x200000,0x7000eb8c,0x7c00100, +0x230400,0x7000eca3,0x2802100,0x962460,0x7000eca3,0x2806400,0x962460,0x7000eca3,0x4000000,0x200000,0x7000eca3,0x6800000,0x1329800,0x7000eca3,0x6800100,0x962540, +0x7000eca3,0x7c00100,0x230400,0x7000eca3,0xc000010,0x448000,0x7000ed95,0x6800000,0x1329800,0x7000ed95,0x7c00100,0x230400,0x7000ed95,0xc000010,0x448000,0x7000ee1c, +0x2802400,0x1862460,0x7000ee1c,0x6800000,0x1329800,0x7000ee1c,0x7c00100,0x1830000,0x7000ee1c,0x7c00900,0x1830000,0x7000ef8f,0x4000000,0x200000,0x7000ef8f,0x7c00100, +0x230400,0x7000f08e,0x4000000,0x200000,0x7000f08e,0x7c00100,0x230400,0x7000f159,0x2802100,0x962460,0x7000f159,0x7c00100,0x230400,0x7000f200,0x4000000,0x200000, +0x7000f200,0x4000000,0x1200000,0x7000f200,0x4000000,0x1710000,0x7000f34b,0x2802100,0x962460,0x7000f34b,0x4000000,0x200000,0x7000f34b,0x4000010,0x400000,0x7000f34b, +0x6800000,0x1329800,0x7000f34b,0x7c00100,0x230400,0x7000f34b,0x7c00900,0x230400,0x7000f34b,0xc000010,0x448000,0x7000f490,0x4000000,0x200000,0x7000f490,0x7c00100, +0x230400,0x7000f5a5,0x7c00100,0x230400,0x7000f67b,0x4000000,0x200000,0x7000f67b,0x4000010,0x200000,0x7000f67b,0x7c00100,0x230400,0x7000f8a6,0x2802100,0x962460, +0x7000f8a6,0x2802400,0x962460,0x7000f8a6,0x2806400,0x962460,0x7000f8a6,0x4000000,0x500000,0x7000f8a6,0x4000010,0xb00000,0x7000f8a6,0x4000800,0x200000,0x7000f8a6, +0x6800100,0x962540,0x7000f8a6,0x6800100,0x962541,0x7000f8a6,0x7c00100,0x230400,0x7000f8a6,0xc000010,0x448000,0x7000f921,0x4000000,0x200000,0x7000fa00,0x4000000, +0x200000,0x7000fb9e,0x2802100,0x962460,0x7000fb9e,0x2802400,0x962460,0x7000fb9e,0x2806400,0x962460,0x7000fb9e,0x4000000,0x200000,0x7000fb9e,0x6800000,0x1329800, +0x7000fb9e,0x6800100,0x962540,0x7000fb9e,0x6800100,0x962541,0x7000fb9e,0x7c00100,0x230400,0x7000fc92,0x4000000,0x200000,0x7000fc92,0x6800000,0x1329800,0x7000fc92, +0x7c00100,0x220400,0x7000fc92,0x7c00100,0x230400,0x7000fc92,0x7c00100,0x250400,0x700acd00,0x4000000,0x30e00000,0x700acd00,0x4000000,0xb28045a0,0x700ace00,0x4000000, +0x30e00000,0x700acf00,0x4000000,0x30e00000,0x700acf00,0x4000000,0xb0e00000,0x7040dfbd,0x4000000,0x200000,0x7040f7c1,0x80000,0x918820,0x7080af79,0x2802400,0x962460, +0x7080dfbd,0x2802400,0x962460,0x70c0e4bf,0x2802400,0x962460,0x70c0e4bf,0x6800100,0x962540,0x8000120f,0x7c00100,0x230400,0x80001524,0x7c00100,0x230400,0x8000171a, +0x7c00100,0x230400,0x80002006,0x7c00100,0x220400,0x80002006,0x7c00100,0x250400,0x80002a00,0x4000000,0x1500000,0x80002d00,0x4000000,0x200000,0x80005208,0x2802400, +0x962460,0x80005c00,0x4000000,0x200000,0x80007300,0x24000000,0x200000,0x80009519,0x7c00100,0x220400,0x80009519,0x7c00100,0x230400,0x80009519,0x7c00100,0x250400, +0x80009865,0x7c00100,0x230400,0x8000a008,0x2802100,0x962460,0x8000b30a,0x4000000,0x500000,0x8000b30a,0x7c00100,0x230400,0x8000cd00,0x4000000,0xe00000,0x8000d202, +0x2802500,0x962460,0x8000d202,0x7c00100,0x230400,0x8000d68d,0x4000000,0x200000,0x8000d997,0x2802400,0x962460,0x8000d997,0x4000000,0x200000,0x8000d997,0x4000000, +0x400000,0x8000d997,0x4000000,0x500000,0x8000d997,0x7c00100,0x230400,0x8000d997,0xc000010,0x448000,0x8000e489,0x2802100,0x962460,0x8000e489,0x7c00100,0x230400, +0x8000e719,0x7c00100,0x220400,0x8000f8a6,0x2802100,0x962460,0x8000f8a6,0x7c00100,0x230400,0x8000f8a6,0xc000010,0x448000,0x8000fda1,0x2802100,0x1862460,0x8000fda1, +0x2806400,0x1862460,0x8000fda1,0x4000000,0x1800000,0x8000fda1,0x6800000,0x1329800,0x8000fda1,0x6800100,0x1862540,0x8000fda1,0x7c00100,0x1830000,0x8000fda1,0xc000010, +0x448000,0x8000fe9c,0x7c00100,0x230400,0x8000fe9c,0x7c00100,0x830400,0x8000fe9c,0x7c00100,0x1430400,0x8000ff06,0x7c00100,0x220400,0x80010165,0x7c00100,0x230400, +0x800102a2,0x4000000,0x200000,0x800102a2,0x7c00100,0x230400,0x800103a4,0x7c00100,0x230400,0x800103a4,0xc000010,0x448000,0x8001044c,0x4000000,0x200000,0x8001044c, +0x7c00100,0x220400,0x8001044c,0x7c00100,0x250400,0x80010670,0x2802000,0x962460,0x80010670,0x4000000,0x200000,0x80010670,0x4000010,0x400000,0x80010670,0xc000010, +0x448000,0x800a4711,0x7c40300,0xe30000,0x800acd00,0x4000000,0x30e00000,0x800acd00,0x4000000,0x72904de0,0x800ace00,0x4000000,0x30e00000,0x800acf00,0x4000000,0x30e00000, +0x800b0011,0x7c40300,0xe30000,0x800b0500,0x4000000,0x30e00000,0x800b0500,0x4000000,0xb28045a0,0x90001615,0x7c00100,0x230400,0x9000171a,0x4000000,0x200000,0x9000171a, +0x7c00100,0x230400,0x90003000,0x24000000,0x200000,0x90007f0e,0x4000000,0x200000,0x90008301,0x2802000,0x962460,0x90008e00,0x24000000,0x400000,0x90009519,0x7c00100, +0x250400,0x9000a16f,0x2802100,0x962460,0x9000d200,0,0x218960,0x9000d202,0x2802000,0x962460,0x9000d202,0x2802100,0x962460,0x9000d202,0x7c00100,0x230400, +0x9000e59d,0x2802100,0x962460,0x900107a7,0x2802100,0x962460,0x900107a7,0x2802400,0x962460,0x900107a7,0x2802c00,0x962460,0x900107a7,0x4000000,0x1400000,0x900107a7, +0x6800000,0x1329800,0x900107a7,0x7c00100,0x220400,0x900107a7,0x7c00100,0x250400,0x900108a8,0x2802100,0x962460,0x900108a8,0x2806400,0x962460,0x900108a8,0x4000000, +0x200000,0x900108a8,0x4000000,0x400000,0x900108a8,0x4000010,0x400000,0x900108a8,0x6800000,0x1329800,0x900108a8,0x6800100,0x962540,0x900108a8,0x7c00100,0x230400, +0x900108a8,0xc000010,0x448000,0x90010908,0x7c00100,0x220400,0x90010a38,0x2802100,0x962460,0x90010ca9,0x2802100,0x962460,0x90010ca9,0x4000000,0x500000,0x90010ca9, +0x4000010,0xb00000,0x90010ca9,0x6800100,0x962540,0x90010ca9,0x7c00100,0x230400,0x90010d1b,0x4000000,0x500000,0x90010eaa,0x2802100,0x962460,0x90010eaa,0x2802400, +0x962460,0x90010eaa,0x2806400,0x962460,0x90010eaa,0x4000000,0x200000,0x90010eaa,0x4000000,0x400000,0x90010eaa,0x4000010,0x400000,0x90010eaa,0x6800000,0x1329800, +0x90010eaa,0x6800100,0x962540,0x90010eaa,0x7c00100,0x230400,0x90010eaa,0xc000010,0x448000,0x90010fab,0x7c00100,0x220400,0x90010fab,0x7c00100,0x250400,0x9002c300, +0x4000000,0x100000,0x900ac400,0x4000000,0xe0000d,0x900acd00,0x4000000,0x30e00000,0x900acd00,0x4000000,0xb28045a0,0x900acf00,0x4000000,0x30e00000,0x900b0500,0x4000000, +0xe00000,0x900b0500,0x4000000,0x30e00000,0x900b0500,0x4000000,0xb28045a0,0x900b0b9a,0x7c00900,0x1230400,0x900b109a,0x7c00300,0xe30000,0x900b119a,0x7c00300,0xe30000, +0x90408e06,0x24000000,0x400000}; -static const int32_t countPropsVectors=5931; +static const int32_t countPropsVectors=6195; static const int32_t propsVectorsColumns=3; -static const uint16_t scriptExtensions[172]={ -0x800e,0x8019,8,0x8059,8,2,8,0x8019,8,0x8038,8,8,3,0x800c,2,0x22, -0x8025,2,0x22,0x54,0x79,0x807b,2,0x8022,2,0x8025,2,0x18,4,0xa,0xf,0x10, -0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x8097,4,0xa,0xf,0x10,0x15,0x19,0x1a,0x1f, -0x23,0x24,0x8089,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89,0x91, -0x99,0x9e,0x80a0,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a,0x89, -0x91,0x99,0x9e,0x80a0,0xa,0x78,0x80a0,0xa,0x54,4,0x3a,0x8076,4,0x59,0x10,0x80a4, -0x10,0x5e,0xf,0x809d,0xf,0x62,0x23,0x8089,0x23,0x66,0x1c,0x34,0x8076,0x1c,0x6a,0x2a, -0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,0xa,0x8089,0xa,0x8097,0xa,0x15,0x1a,0x23,0x8024,0xa, -0x8015,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12,0x14,0x8016,0x11, -0x14,0x8016,5,0x8011,0xa,0xf,0x10,0x78,0x91,0x99,0x9e,0xa0,0x80a3,0xa,0x8023,0xa, -0x9d,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x8031,2,0x8007,0x8087,0}; +static const uint16_t scriptExtensions[194]={ +0x800e,0x8019,8,0x8059,8,2,8,0x8038,8,6,8,0x8019,3,0x800c,2,0x22, +0x8025,2,0x22,0x54,0x79,0x7b,0x80a7,2,0x8022,2,0x8025,2,0x19,4,0xa,0xf, +0x10,0x15,0x19,0x1a,0x1f,0x23,0x24,0x89,0x8097,4,0xa,0xf,0x10,0x15,0x19,0x1a, +0x1f,0x23,0x24,0x8089,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x3a,0x89, +0x91,0x99,0x9e,0x80a0,4,0xa,0xf,0x10,0x15,0x1a,0x1f,0x21,0x23,0x24,0x30,0x3a, +0x89,0x91,0x99,0x9e,0x80a0,0xa,0x78,0x80a0,0xa,0x55,4,0x3a,0x8076,4,0x5a,0x10, +0x80a4,0x10,0x5f,0xf,0x809d,0xf,0x63,0x23,0x8089,0x23,0x67,0x1c,0x34,0x8076,0x1c,0x6b, +0xc,0x8019,0x2a,0x2b,0x2c,0x802d,0x1b,0x805a,0x800a,0xa,0x8089,0xa,0x8097,0xa,0x15,0x1a, +0x23,0x8024,0xa,0x8015,0xa,0x19,0x8089,5,0x11,0x12,0x14,0x16,0x8029,5,0x11,0x12, +0x14,0x8016,0x8011,5,0x8011,0x11,0x14,0x8016,0xa,0xf,0x10,0x15,0x78,0x91,0x99,0x9e, +0xa0,0x80a3,0xa,0xf,0x10,0x78,0x91,0x99,0x9e,0xa0,0x80a3,4,0x800a,0xa,0xab,0xa, +0x8023,0xa,0xaf,0x19,0x1c,0x804f,0x37,0x804e,0x2f,0x31,0x8053,0x2f,0x8031,2,0x8007,0x89, +0x67,0x8087}; -static const int32_t indexes[UPROPS_INDEX_COUNT]={0x26ca,0x26ca,0x26ca,0x26ca,0x5c6c,3,0x7397,0x73ed,0x73ed,0x73ed,0xb06a6,0x2774191,0,0,0,0}; +static const int32_t indexes[UPROPS_INDEX_COUNT]={0x28aa,0x28aa,0x28aa,0x28aa,0x606c,3,0x789f,0x7900,0x7900,0x7900,0xb11ae,0x2a75631,0,0,0,0}; #endif // INCLUDED_FROM_UCHAR_C diff --git a/deps/icu-small/source/common/ucharstrie.cpp b/deps/icu-small/source/common/ucharstrie.cpp index 476271deacb836..d04d315c7913e0 100644 --- a/deps/icu-small/source/common/ucharstrie.cpp +++ b/deps/icu-small/source/common/ucharstrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucharstriebuilder.cpp b/deps/icu-small/source/common/ucharstriebuilder.cpp index 05255b48c9b3c8..412a58a45d6bd0 100644 --- a/deps/icu-small/source/common/ucharstriebuilder.cpp +++ b/deps/icu-small/source/common/ucharstriebuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -115,7 +117,7 @@ UCharsTrieBuilder::add(const UnicodeString &s, int32_t value, UErrorCode &errorC return *this; } if(elementsLength>0) { - uprv_memcpy(newElements, elements, elementsLength*sizeof(UCharsTrieElement)); + uprv_memcpy(newElements, elements, (size_t)elementsLength*sizeof(UCharsTrieElement)); } delete[] elements; elements=newElements; diff --git a/deps/icu-small/source/common/ucharstrieiterator.cpp b/deps/icu-small/source/common/ucharstrieiterator.cpp index 30867c05f07d82..68ba8c2177878a 100644 --- a/deps/icu-small/source/common/ucharstrieiterator.cpp +++ b/deps/icu-small/source/common/ucharstrieiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/common/uchriter.cpp b/deps/icu-small/source/common/uchriter.cpp index 40b06ce5acf486..fd0a407c6b1763 100644 --- a/deps/icu-small/source/common/uchriter.cpp +++ b/deps/icu-small/source/common/uchriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1998-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/ucln.h b/deps/icu-small/source/common/ucln.h index cd2630afff8652..3c8c66ad2f39e5 100644 --- a/deps/icu-small/source/common/ucln.h +++ b/deps/icu-small/source/common/ucln.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucln_cmn.cpp b/deps/icu-small/source/common/ucln_cmn.cpp index 53c95e67baa3c5..657ec337d7e041 100644 --- a/deps/icu-small/source/common/ucln_cmn.cpp +++ b/deps/icu-small/source/common/ucln_cmn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/common/ucln_cmn.h b/deps/icu-small/source/common/ucln_cmn.h index 2fdf1c7a67e97c..56fa73053f5c0c 100644 --- a/deps/icu-small/source/common/ucln_cmn.h +++ b/deps/icu-small/source/common/ucln_cmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines diff --git a/deps/icu-small/source/common/ucln_imp.h b/deps/icu-small/source/common/ucln_imp.h index a0a1850acc6745..5aa5b0d19f3aab 100644 --- a/deps/icu-small/source/common/ucln_imp.h +++ b/deps/icu-small/source/common/ucln_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucmndata.c b/deps/icu-small/source/common/ucmndata.c index b9a11eb66aac77..6b7d78d104d186 100644 --- a/deps/icu-small/source/common/ucmndata.c +++ b/deps/icu-small/source/common/ucmndata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucmndata.h b/deps/icu-small/source/common/ucmndata.h index c3dfc50d884171..4ff37cc20b0576 100644 --- a/deps/icu-small/source/common/ucmndata.h +++ b/deps/icu-small/source/common/ucmndata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnv.c b/deps/icu-small/source/common/ucnv.c index d7f197c5f7967b..7ce05644c7ec9f 100644 --- a/deps/icu-small/source/common/ucnv.c +++ b/deps/icu-small/source/common/ucnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -1061,7 +1063,7 @@ _fromUnicodeWithCallback(UConverterFromUnicodeArgs *pArgs, UErrorCode *err) { length=(int32_t)(pArgs->sourceLimit-pArgs->source); if(length>0) { - uprv_memcpy(cnv->preFromU, pArgs->source, length*U_SIZEOF_UCHAR); + u_memcpy(cnv->preFromU, pArgs->source, length); cnv->preFromULength=(int8_t)-length; } @@ -2743,7 +2745,7 @@ ucnv_getInvalidUChars (const UConverter * converter, } if ((*len = converter->invalidUCharLength) > 0) { - uprv_memcpy (errChars, converter->invalidUCharBuffer, sizeof(UChar) * (*len)); + u_memcpy (errChars, converter->invalidUCharBuffer, *len); } } diff --git a/deps/icu-small/source/common/ucnv2022.cpp b/deps/icu-small/source/common/ucnv2022.cpp index c3bcafb4bfcac8..d1d947f93c4ac3 100644 --- a/deps/icu-small/source/common/ucnv2022.cpp +++ b/deps/icu-small/source/common/ucnv2022.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines @@ -223,10 +225,10 @@ typedef struct{ /* ISO-2022 ----------------------------------------------------------------- */ /*Forward declaration */ -U_CFUNC void +U_CFUNC void U_CALLCONV ucnv_fromUnicode_UTF8(UConverterFromUnicodeArgs * args, UErrorCode * err); -U_CFUNC void +U_CFUNC void U_CALLCONV ucnv_fromUnicode_UTF8_OFFSETS_LOGIC(UConverterFromUnicodeArgs * args, UErrorCode * err); @@ -383,26 +385,31 @@ typedef enum{ } Variant2022; /*********** ISO 2022 Converter Protos ***********/ -static void +static void U_CALLCONV _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode); -static void +static void U_CALLCONV _ISO2022Close(UConverter *converter); -static void +static void U_CALLCONV _ISO2022Reset(UConverter *converter, UConverterResetChoice choice); -static const char* +U_CDECL_BEGIN +static const char * U_CALLCONV _ISO2022getName(const UConverter* cnv); +U_CDECL_END -static void +static void U_CALLCONV _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err); -static UConverter * +U_CDECL_BEGIN +static UConverter * U_CALLCONV _ISO_2022_SafeClone(const UConverter *cnv, void *stackBuffer, int32_t *pBufferSize, UErrorCode *status); +U_CDECL_END + #ifdef U_ENABLE_GENERIC_ISO_2022 -static void +static void U_CALLCONV T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args, UErrorCode* err); #endif @@ -468,7 +475,7 @@ setInitialStateFromUnicodeKR(UConverter* converter,UConverterDataISO2022 *myConv } } -static void +static void U_CALLCONV _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ char myLocale[6]={' ',' ',' ',' ',' ',' '}; @@ -646,7 +653,7 @@ _ISO2022Open(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *errorCode){ } -static void +static void U_CALLCONV _ISO2022Close(UConverter *converter) { UConverterDataISO2022* myData =(UConverterDataISO2022 *) (converter->extraInfo); UConverterSharedData **array = myData->myConverterArray; @@ -669,7 +676,7 @@ _ISO2022Close(UConverter *converter) { } } -static void +static void U_CALLCONV _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) { UConverterDataISO2022 *myConverterData=(UConverterDataISO2022 *) (converter->extraInfo); if(choice<=UCNV_RESET_TO_UNICODE) { @@ -714,7 +721,9 @@ _ISO2022Reset(UConverter *converter, UConverterResetChoice choice) { } } -static const char* +U_CDECL_BEGIN + +static const char * U_CALLCONV _ISO2022getName(const UConverter* cnv){ if(cnv->extraInfo){ UConverterDataISO2022* myData= (UConverterDataISO2022*)cnv->extraInfo; @@ -723,6 +732,8 @@ _ISO2022getName(const UConverter* cnv){ return NULL; } +U_CDECL_END + /*************** to unicode *******************/ /**************************************************************************** @@ -1243,7 +1254,7 @@ _2022ToGR94DBCS(uint32_t value) { * */ -static void +static void U_CALLCONV T_UConverter_toUnicode_ISO_2022_OFFSETS_LOGIC(UConverterToUnicodeArgs* args, UErrorCode* err){ const char* mySourceLimit, *realSourceLimit; @@ -1649,7 +1660,7 @@ static const uint16_t hwkana_fb[HWKANA_END - HWKANA_START + 1] = { 0x212C /* U+FF9F */ }; -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err) { UConverter *cnv = args->converter; UConverterDataISO2022 *converterData; @@ -2066,7 +2077,7 @@ UConverter_fromUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args /*************** to unicode *******************/ -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[2]; @@ -2318,7 +2329,7 @@ UConverter_toUnicode_ISO_2022_JP_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, * ii) There are only 2 shifting sequences SO to shift into double byte mode * and SI to shift into single byte mode */ -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs* args, UErrorCode* err){ UConverter* saveConv = args->converter; @@ -2342,7 +2353,7 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterFromUnicodeArgs* args->converter=saveConv; } -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){ const UChar *source = args->source; @@ -2561,7 +2572,7 @@ UConverter_fromUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args /************************ To Unicode ***************************************/ -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args, UErrorCode* err){ char const* sourceStart; @@ -2659,7 +2670,7 @@ UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC_IBM(UConverterToUnicodeArgs *args } } -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_KR_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[2]; @@ -2901,7 +2912,7 @@ static const char* const escSeqCharsCN[10] ={ CNS_11643_1992_Plane_7_STR }; -static void +static void U_CALLCONV UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args, UErrorCode* err){ UConverter *cnv = args->converter; UConverterDataISO2022 *converterData; @@ -3252,7 +3263,7 @@ UConverter_fromUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterFromUnicodeArgs* args } -static void +static void U_CALLCONV UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, UErrorCode* err){ char tempBuf[3]; @@ -3454,7 +3465,7 @@ UConverter_toUnicode_ISO_2022_CN_OFFSETS_LOGIC(UConverterToUnicodeArgs *args, } #endif /* #if !UCONFIG_ONLY_HTML_CONVERSION */ -static void +static void U_CALLCONV _ISO_2022_WriteSub(UConverterFromUnicodeArgs *args, int32_t offsetIndex, UErrorCode *err) { UConverter *cnv = args->converter; UConverterDataISO2022 *myConverterData=(UConverterDataISO2022 *) cnv->extraInfo; @@ -3578,7 +3589,9 @@ struct cloneStruct }; -static UConverter * +U_CDECL_BEGIN + +static UConverter * U_CALLCONV _ISO_2022_SafeClone( const UConverter *cnv, void *stackBuffer, @@ -3625,7 +3638,9 @@ _ISO_2022_SafeClone( return &localClone->cnv; } -static void +U_CDECL_END + +static void U_CALLCONV _ISO_2022_GetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, diff --git a/deps/icu-small/source/common/ucnv_bld.cpp b/deps/icu-small/source/common/ucnv_bld.cpp index 6deb61d2717d8d..bfbb45a7d1c911 100644 --- a/deps/icu-small/source/common/ucnv_bld.cpp +++ b/deps/icu-small/source/common/ucnv_bld.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * COPYRIGHT: diff --git a/deps/icu-small/source/common/ucnv_bld.h b/deps/icu-small/source/common/ucnv_bld.h index d95f49228e9277..aeb858c9d50cba 100644 --- a/deps/icu-small/source/common/ucnv_bld.h +++ b/deps/icu-small/source/common/ucnv_bld.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015 International Business Machines diff --git a/deps/icu-small/source/common/ucnv_cb.c b/deps/icu-small/source/common/ucnv_cb.c index fa34b65832726c..0c9cc2459f1844 100644 --- a/deps/icu-small/source/common/ucnv_cb.c +++ b/deps/icu-small/source/common/ucnv_cb.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2006, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_cnv.c b/deps/icu-small/source/common/ucnv_cnv.c index f8e2f830f91a9b..01f84829dd3f7d 100644 --- a/deps/icu-small/source/common/ucnv_cnv.c +++ b/deps/icu-small/source/common/ucnv_cnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnv_cnv.h b/deps/icu-small/source/common/ucnv_cnv.h index 67536c80452771..48978130775a36 100644 --- a/deps/icu-small/source/common/ucnv_cnv.h +++ b/deps/icu-small/source/common/ucnv_cnv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_ct.c b/deps/icu-small/source/common/ucnv_ct.c index 91d66e12ef6cbe..f76919c4a54f30 100644 --- a/deps/icu-small/source/common/ucnv_ct.c +++ b/deps/icu-small/source/common/ucnv_ct.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_err.c b/deps/icu-small/source/common/ucnv_err.c index ea588f6153bb98..449b162152e61e 100644 --- a/deps/icu-small/source/common/ucnv_err.c +++ b/deps/icu-small/source/common/ucnv_err.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * diff --git a/deps/icu-small/source/common/ucnv_ext.cpp b/deps/icu-small/source/common/ucnv_ext.cpp index 0c43693b357547..f8605187240159 100644 --- a/deps/icu-small/source/common/ucnv_ext.cpp +++ b/deps/icu-small/source/common/ucnv_ext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -883,7 +885,7 @@ ucnv_extContinueMatchFromU(UConverter *cnv, } else { /* the match did not use all of preFromU[] - keep the rest for replay */ int32_t length=cnv->preFromULength-match; - uprv_memmove(cnv->preFromU, cnv->preFromU+match, length*U_SIZEOF_UCHAR); + u_memmove(cnv->preFromU, cnv->preFromU+match, length); cnv->preFromULength=(int8_t)-length; } diff --git a/deps/icu-small/source/common/ucnv_ext.h b/deps/icu-small/source/common/ucnv_ext.h index 69e0523cb0e2b8..e2ce7fa07293c4 100644 --- a/deps/icu-small/source/common/ucnv_ext.h +++ b/deps/icu-small/source/common/ucnv_ext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnv_imp.h b/deps/icu-small/source/common/ucnv_imp.h index 27c373a98f5e9c..81aa80fd272409 100644 --- a/deps/icu-small/source/common/ucnv_imp.h +++ b/deps/icu-small/source/common/ucnv_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_io.cpp b/deps/icu-small/source/common/ucnv_io.cpp index 50ffd5843d92fa..eaa08e47cd82cc 100644 --- a/deps/icu-small/source/common/ucnv_io.cpp +++ b/deps/icu-small/source/common/ucnv_io.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -379,8 +381,9 @@ static const uint8_t ebcdicTypes[128] = { # error U_CHARSET_FAMILY is not valid #endif + /* @see ucnv_compareNames */ -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripASCIIForCompare(char *dst, const char *name) { char *dstItr = dst; uint8_t type, nextType; @@ -415,7 +418,7 @@ ucnv_io_stripASCIIForCompare(char *dst, const char *name) { return dst; } -U_CFUNC char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripEBCDICForCompare(char *dst, const char *name) { char *dstItr = dst; uint8_t type, nextType; @@ -731,9 +734,7 @@ findTaggedConverterNum(const char *alias, const char *standard, UErrorCode *pErr return UINT32_MAX; } - - -U_CFUNC const char * +U_CAPI const char * ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode) { const char *aliasTmp = alias; int32_t i = 0; @@ -764,6 +765,9 @@ ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *p return NULL; } +U_CDECL_BEGIN + + static int32_t U_CALLCONV ucnv_io_countStandardAliases(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { int32_t value = 0; @@ -776,7 +780,7 @@ ucnv_io_countStandardAliases(UEnumeration *enumerator, UErrorCode * /*pErrorCode return value; } -static const char* U_CALLCONV +static const char * U_CALLCONV ucnv_io_nextStandardAliases(UEnumeration *enumerator, int32_t* resultLength, UErrorCode * /*pErrorCode*/) @@ -814,6 +818,8 @@ ucnv_io_closeUEnumeration(UEnumeration *enumerator) { uprv_free(enumerator); } +U_CDECL_END + /* Enumerate the aliases for the specified converter and standard tag */ static const UEnumeration gEnumAliases = { NULL, @@ -1010,12 +1016,15 @@ ucnv_getCanonicalName(const char *alias, const char *standard, UErrorCode *pErro return NULL; } +U_CDECL_BEGIN + + static int32_t U_CALLCONV ucnv_io_countAllConverters(UEnumeration * /*enumerator*/, UErrorCode * /*pErrorCode*/) { return gMainTable.converterListSize; } -static const char* U_CALLCONV +static const char * U_CALLCONV ucnv_io_nextAllConverters(UEnumeration *enumerator, int32_t* resultLength, UErrorCode * /*pErrorCode*/) @@ -1040,7 +1049,7 @@ static void U_CALLCONV ucnv_io_resetAllConverters(UEnumeration *enumerator, UErrorCode * /*pErrorCode*/) { *((uint16_t *)(enumerator->context)) = 0; } - +U_CDECL_END static const UEnumeration gEnumAllConverters = { NULL, NULL, @@ -1075,7 +1084,7 @@ ucnv_openAllNames(UErrorCode *pErrorCode) { return myEnum; } -U_CFUNC uint16_t +U_CAPI uint16_t ucnv_io_countKnownConverters(UErrorCode *pErrorCode) { if (haveAliasData(pErrorCode)) { return (uint16_t)gMainTable.converterListSize; @@ -1085,7 +1094,11 @@ ucnv_io_countKnownConverters(UErrorCode *pErrorCode) { /* alias table swapping ----------------------------------------------------- */ +U_CDECL_BEGIN + typedef char * U_CALLCONV StripForCompareFn(char *dst, const char *name); +U_CDECL_END + /* * row of a temporary array @@ -1109,7 +1122,7 @@ enum { STACK_ROW_CAPACITY=500 }; -static int32_t +static int32_t U_CALLCONV io_compareRows(const void *context, const void *left, const void *right) { char strippedLeft[UCNV_MAX_CONVERTER_NAME_LENGTH], strippedRight[UCNV_MAX_CONVERTER_NAME_LENGTH]; @@ -1297,13 +1310,13 @@ ucnv_swapAliases(const UDataSwapper *ds, oldIndex=tempTable.rows[i].sortIndex; ds->swapArray16(ds, p+oldIndex, 2, r+i, pErrorCode); } - uprv_memcpy(q, r, 2*count); + uprv_memcpy(q, r, 2*(size_t)count); for(i=0; iswapArray16(ds, p2+oldIndex, 2, r+i, pErrorCode); } - uprv_memcpy(q2, r, 2*count); + uprv_memcpy(q2, r, 2*(size_t)count); } } diff --git a/deps/icu-small/source/common/ucnv_io.h b/deps/icu-small/source/common/ucnv_io.h index 060ffd05953db4..8b3585786d3238 100644 --- a/deps/icu-small/source/common/ucnv_io.h +++ b/deps/icu-small/source/common/ucnv_io.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2006, International Business Machines @@ -75,10 +77,10 @@ typedef struct UConverterAlias { # error U_CHARSET_FAMILY is not valid #endif -U_CAPI char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripASCIIForCompare(char *dst, const char *name); -U_CAPI char * U_EXPORT2 +U_CAPI char * U_CALLCONV ucnv_io_stripEBCDICForCompare(char *dst, const char *name); /** @@ -91,7 +93,7 @@ ucnv_io_stripEBCDICForCompare(char *dst, const char *name); * @param pErrorCode The error code * @return the converter name in mixed-case, return NULL if the alias is not found. */ -U_CFUNC const char * +U_CAPI const char * ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *pErrorCode); /** @@ -99,7 +101,7 @@ ucnv_io_getConverterName(const char *alias, UBool *containsOption, UErrorCode *p * @param pErrorCode The error code * @return the number of all aliases */ -U_CFUNC uint16_t +U_CAPI uint16_t ucnv_io_countKnownConverters(UErrorCode *pErrorCode); /** diff --git a/deps/icu-small/source/common/ucnv_lmb.c b/deps/icu-small/source/common/ucnv_lmb.c index 0879eecb081cd6..e595f931a08c09 100644 --- a/deps/icu-small/source/common/ucnv_lmb.c +++ b/deps/icu-small/source/common/ucnv_lmb.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines diff --git a/deps/icu-small/source/common/ucnv_set.c b/deps/icu-small/source/common/ucnv_set.c index 3d8d392729176d..c3933ab6109cbf 100644 --- a/deps/icu-small/source/common/ucnv_set.c +++ b/deps/icu-small/source/common/ucnv_set.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucnv_u16.c b/deps/icu-small/source/common/ucnv_u16.c index 888b69aa45b60a..d8f4576f33763f 100644 --- a/deps/icu-small/source/common/ucnv_u16.c +++ b/deps/icu-small/source/common/ucnv_u16.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2015, International Business Machines @@ -621,7 +623,10 @@ static const UConverterImpl _UTF16BEImpl={ _UTF16BEGetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16BEStaticData={ @@ -1217,7 +1222,10 @@ static const UConverterImpl _UTF16LEImpl={ _UTF16LEGetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; @@ -1486,7 +1494,10 @@ static const UConverterImpl _UTF16Impl = { _UTF16GetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16StaticData = { @@ -1528,7 +1539,10 @@ static const UConverterImpl _UTF16v2Impl = { _UTF16GetName, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF16v2StaticData = { diff --git a/deps/icu-small/source/common/ucnv_u32.c b/deps/icu-small/source/common/ucnv_u32.c index fe4ea102830ad3..fa74b85c93c3b8 100644 --- a/deps/icu-small/source/common/ucnv_u32.c +++ b/deps/icu-small/source/common/ucnv_u32.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2015, International Business Machines @@ -480,7 +482,10 @@ static const UConverterImpl _UTF32BEImpl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -972,7 +977,10 @@ static const UConverterImpl _UTF32LEImpl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1232 CCSID refers to any version of Unicode with any endianess of UTF-32 */ @@ -1214,7 +1222,10 @@ static const UConverterImpl _UTF32Impl = { NULL, NULL, NULL, - ucnv_getNonSurrogateUnicodeSet + ucnv_getNonSurrogateUnicodeSet, + + NULL, + NULL }; /* The 1236 CCSID refers to any version of Unicode with a BOM sensitive endianess of UTF-32 */ diff --git a/deps/icu-small/source/common/ucnv_u7.c b/deps/icu-small/source/common/ucnv_u7.c index 448c43e2dc32d0..3c1d240ed89d6d 100644 --- a/deps/icu-small/source/common/ucnv_u7.c +++ b/deps/icu-small/source/common/ucnv_u7.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines @@ -760,7 +762,10 @@ static const UConverterImpl _UTF7Impl={ _UTF7GetName, NULL, /* we don't need writeSub() because we never call a callback at fromUnicode() */ NULL, - ucnv_getCompleteUnicodeSet + ucnv_getCompleteUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _UTF7StaticData={ diff --git a/deps/icu-small/source/common/ucnv_u8.c b/deps/icu-small/source/common/ucnv_u8.c index 88b4f5d05aa748..ff73993bd629ef 100644 --- a/deps/icu-small/source/common/ucnv_u8.c +++ b/deps/icu-small/source/common/ucnv_u8.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines @@ -1072,7 +1074,10 @@ static const UConverterImpl _CESU8Impl={ NULL, NULL, NULL, - ucnv_getCompleteUnicodeSet + ucnv_getCompleteUnicodeSet, + + NULL, + NULL }; static const UConverterStaticData _CESU8StaticData={ diff --git a/deps/icu-small/source/common/ucnvbocu.cpp b/deps/icu-small/source/common/ucnvbocu.cpp index 2b97c02c318eba..69763ca32136af 100644 --- a/deps/icu-small/source/common/ucnvbocu.cpp +++ b/deps/icu-small/source/common/ucnvbocu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -386,7 +388,7 @@ packDiff(int32_t diff) { } -static void +static void U_CALLCONV _Bocu1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -647,7 +649,7 @@ _Bocu1FromUnicodeWithOffsets(UConverterFromUnicodeArgs *pArgs, * re-copy the original function and remove the variables * offsets, sourceIndex, and nextSourceIndex. */ -static void +static void U_CALLCONV _Bocu1FromUnicode(UConverterFromUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -950,7 +952,7 @@ decodeBocu1TrailByte(int32_t count, int32_t b) { } } -static void +static void U_CALLCONV _Bocu1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -1173,7 +1175,7 @@ _Bocu1ToUnicodeWithOffsets(UConverterToUnicodeArgs *pArgs, * re-copy the original function and remove the variables * offsets, sourceIndex, and nextSourceIndex. */ -static void +static void U_CALLCONV _Bocu1ToUnicode(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; diff --git a/deps/icu-small/source/common/ucnvdisp.c b/deps/icu-small/source/common/ucnvdisp.c index 4075be66da7645..e30f665f4a08e3 100644 --- a/deps/icu-small/source/common/ucnvdisp.c +++ b/deps/icu-small/source/common/ucnvdisp.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnvhz.c b/deps/icu-small/source/common/ucnvhz.c index 56b7ecf666e422..dc5785b2adc1f0 100644 --- a/deps/icu-small/source/common/ucnvhz.c +++ b/deps/icu-small/source/common/ucnvhz.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2015, International Business Machines diff --git a/deps/icu-small/source/common/ucnvisci.c b/deps/icu-small/source/common/ucnvisci.c index c0106f9800de5e..8b509153514eca 100644 --- a/deps/icu-small/source/common/ucnvisci.c +++ b/deps/icu-small/source/common/ucnvisci.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2016, International Business Machines diff --git a/deps/icu-small/source/common/ucnvlat1.c b/deps/icu-small/source/common/ucnvlat1.c index 30ebbeff37609b..fe11b1844c4613 100644 --- a/deps/icu-small/source/common/ucnvlat1.c +++ b/deps/icu-small/source/common/ucnvlat1.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2015, International Business Machines diff --git a/deps/icu-small/source/common/ucnvmbcs.cpp b/deps/icu-small/source/common/ucnvmbcs.cpp index a3b10744532cf5..0b598dbc34c256 100644 --- a/deps/icu-small/source/common/ucnvmbcs.cpp +++ b/deps/icu-small/source/common/ucnvmbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -375,53 +377,55 @@ typedef UBool U_CALLCONV UConverterEnumToUCallback(const void *context, uint32_t value, UChar32 codePoints[32]); -static void +static void U_CALLCONV ucnv_MBCSLoad(UConverterSharedData *sharedData, UConverterLoadArgs *pArgs, const uint8_t *raw, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSUnload(UConverterSharedData *sharedData); -static void +static void U_CALLCONV ucnv_MBCSOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *pErrorCode); -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSGetStarters(const UConverter* cnv, UBool starters[256], UErrorCode *pErrorCode); -static const char * +U_CDECL_BEGIN +static const char* U_CALLCONV ucnv_MBCSGetName(const UConverter *cnv); +U_CDECL_END -static void +static void U_CALLCONV ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs, int32_t offsetIndex, UErrorCode *pErrorCode); -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_MBCSGetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, UErrorCode *pErrorCode); -static void +static void U_CALLCONV ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode); @@ -503,7 +507,6 @@ static const UConverterImpl _MBCSImpl={ NULL }; - /* Static data is in tools/makeconv/ucnvstat.c for data-based * converters. Be sure to update it as well. */ @@ -1067,7 +1070,7 @@ ucnv_MBCSGetUnicodeSetForUnicode(const UConverterSharedData *sharedData, pErrorCode); } -static void +static void U_CALLCONV ucnv_MBCSGetUnicodeSet(const UConverter *cnv, const USetAdder *sa, UConverterUnicodeSet which, @@ -1547,7 +1550,7 @@ reconstituteData(UConverterMBCSTable *mbcsTable, /* MBCS setup functions ----------------------------------------------------- */ -static void +static void U_CALLCONV ucnv_MBCSLoad(UConverterSharedData *sharedData, UConverterLoadArgs *pArgs, const uint8_t *raw, @@ -1872,7 +1875,7 @@ ucnv_MBCSLoad(UConverterSharedData *sharedData, } } -static void +static void U_CALLCONV ucnv_MBCSUnload(UConverterSharedData *sharedData) { UConverterMBCSTable *mbcsTable=&sharedData->mbcs; @@ -1890,7 +1893,7 @@ ucnv_MBCSUnload(UConverterSharedData *sharedData) { } } -static void +static void U_CALLCONV ucnv_MBCSOpen(UConverter *cnv, UConverterLoadArgs *pArgs, UErrorCode *pErrorCode) { @@ -1981,7 +1984,9 @@ ucnv_MBCSOpen(UConverter *cnv, #endif } -static const char * +U_CDECL_BEGIN + +static const char* U_CALLCONV ucnv_MBCSGetName(const UConverter *cnv) { if((cnv->options&UCNV_OPTION_SWAP_LFNL)!=0 && cnv->sharedData->mbcs.swapLFNLName!=NULL) { return cnv->sharedData->mbcs.swapLFNLName; @@ -1989,10 +1994,12 @@ ucnv_MBCSGetName(const UConverter *cnv) { return cnv->sharedData->staticData->name; } } +U_CDECL_END + /* MBCS-to-Unicode conversion functions ------------------------------------- */ -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetFallback(UConverterMBCSTable *mbcsTable, uint32_t offset) { const _MBCSToUFallback *toUFallbacks; uint32_t i, start, limit; @@ -2955,7 +2962,7 @@ ucnv_MBCSSingleGetNextUChar(UConverterToUnicodeArgs *pArgs, * * All normal mappings and errors are handled here. */ -static UChar32 +static UChar32 U_CALLCONV ucnv_MBCSGetNextUChar(UConverterToUnicodeArgs *pArgs, UErrorCode *pErrorCode) { UConverter *cnv; @@ -5012,7 +5019,7 @@ utf8_minLegal[5]={ 0, 0, 0x80, 0x800, 0x10000 }; static const UChar32 utf8_offsets[7]={ 0, 0, 0x3080, 0xE2080, 0x3C82080 }; -static void +static void U_CALLCONV ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode) { @@ -5318,7 +5325,7 @@ ucnv_SBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, pFromUArgs->target=(char *)target; } -static void +static void U_CALLCONV ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, UConverterToUnicodeArgs *pToUArgs, UErrorCode *pErrorCode) { @@ -5630,7 +5637,7 @@ ucnv_DBCSFromUTF8(UConverterFromUnicodeArgs *pFromUArgs, /* miscellaneous ------------------------------------------------------------ */ -static void +static void U_CALLCONV ucnv_MBCSGetStarters(const UConverter* cnv, UBool starters[256], UErrorCode *) { @@ -5653,7 +5660,7 @@ ucnv_MBCSIsLeadByte(UConverterSharedData *sharedData, char byte) { return (UBool)MBCS_ENTRY_IS_TRANSITION(sharedData->mbcs.stateTable[0][(uint8_t)byte]); } -static void +static void U_CALLCONV ucnv_MBCSWriteSub(UConverterFromUnicodeArgs *pArgs, int32_t offsetIndex, UErrorCode *pErrorCode) { diff --git a/deps/icu-small/source/common/ucnvmbcs.h b/deps/icu-small/source/common/ucnvmbcs.h index df87bae16cff89..12d50b545cc67c 100644 --- a/deps/icu-small/source/common/ucnvmbcs.h +++ b/deps/icu-small/source/common/ucnvmbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnvscsu.c b/deps/icu-small/source/common/ucnvscsu.c index 36e33bde183a78..4228b44e7fb1e1 100644 --- a/deps/icu-small/source/common/ucnvscsu.c +++ b/deps/icu-small/source/common/ucnvscsu.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/ucnvsel.cpp b/deps/icu-small/source/common/ucnvsel.cpp index 353152a3f0f197..f6384cf7497297 100644 --- a/deps/icu-small/source/common/ucnvsel.cpp +++ b/deps/icu-small/source/common/ucnvsel.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucol_data.h b/deps/icu-small/source/common/ucol_data.h index 023064624c6d82..cdd328eccabed7 100644 --- a/deps/icu-small/source/common/ucol_data.h +++ b/deps/icu-small/source/common/ucol_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2011, International Business Machines diff --git a/deps/icu-small/source/common/ucol_swp.cpp b/deps/icu-small/source/common/ucol_swp.cpp index ab6ac7495ad12a..ddec0ec1c673b1 100644 --- a/deps/icu-small/source/common/ucol_swp.cpp +++ b/deps/icu-small/source/common/ucol_swp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucol_swp.h b/deps/icu-small/source/common/ucol_swp.h index 855b40419dac5e..422436dd30717d 100644 --- a/deps/icu-small/source/common/ucol_swp.h +++ b/deps/icu-small/source/common/ucol_swp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ucurr.cpp b/deps/icu-small/source/common/ucurr.cpp index 4385db51ce0e69..41fd8aa212a174 100644 --- a/deps/icu-small/source/common/ucurr.cpp +++ b/deps/icu-small/source/common/ucurr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -117,7 +119,7 @@ U_NAMESPACE_BEGIN // EquivIterator iterates over all strings that are equivalent to a given // string, s. Note that EquivIterator will never yield s itself. -class EquivIterator : icu::UMemory { +class EquivIterator : public icu::UMemory { public: // Constructor. hash stores the equivalence relationships; s is the string // for which we find equivalent strings. @@ -414,7 +416,7 @@ struct CReg : public icu::UMemory { } uprv_strncpy(id, _id, len); id[len] = 0; - uprv_memcpy(iso, _iso, ISO_CURRENCY_CODE_LENGTH * sizeof(const UChar)); + u_memcpy(iso, _iso, ISO_CURRENCY_CODE_LENGTH); iso[ISO_CURRENCY_CODE_LENGTH] = 0; } @@ -938,7 +940,7 @@ toUpperCase(const UChar* source, int32_t len, const char* locale) { dest = (UChar*)uprv_malloc(sizeof(UChar) * MAX(destLen, len)); u_strToUpper(dest, destLen, source, len, locale, &ec); if (U_FAILURE(ec)) { - uprv_memcpy(dest, source, sizeof(UChar) * len); + u_memcpy(dest, source, len); } return dest; } @@ -1023,7 +1025,8 @@ collectCurrencyNames(const char* locale, (*currencySymbols)[(*total_currency_symbol_count)++].currencyNameLen = len; // Add equivalent symbols if (currencySymbolsEquiv != NULL) { - icu::EquivIterator iter(*currencySymbolsEquiv, UnicodeString(TRUE, s, len)); + UnicodeString str(TRUE, s, len); + icu::EquivIterator iter(*currencySymbolsEquiv, str); const UnicodeString *symbol; while ((symbol = iter.next()) != NULL) { (*currencySymbols)[*total_currency_symbol_count].IsoCode = iso; diff --git a/deps/icu-small/source/common/ucurrimp.h b/deps/icu-small/source/common/ucurrimp.h index 9f5f2e3608f120..b35d6f47c62583 100644 --- a/deps/icu-small/source/common/ucurrimp.h +++ b/deps/icu-small/source/common/ucurrimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines diff --git a/deps/icu-small/source/common/udata.cpp b/deps/icu-small/source/common/udata.cpp index b48ff4f8066e9d..7585855171673b 100644 --- a/deps/icu-small/source/common/udata.cpp +++ b/deps/icu-small/source/common/udata.cpp @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1999-2015, International Business Machines +* Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -77,7 +79,7 @@ U_NAMESPACE_USE /* * Forward declarations */ -static UDataMemory *udata_findCachedData(const char *path); +static UDataMemory *udata_findCachedData(const char *path, UErrorCode &err); /*********************************************************************** * @@ -132,13 +134,13 @@ udata_cleanup(void) } static UBool U_CALLCONV -findCommonICUDataByName(const char *inBasename) +findCommonICUDataByName(const char *inBasename, UErrorCode &err) { UBool found = FALSE; int32_t i; - UDataMemory *pData = udata_findCachedData(inBasename); - if (pData == NULL) + UDataMemory *pData = udata_findCachedData(inBasename, err); + if (U_FAILURE(err) || pData == NULL) return FALSE; { @@ -268,40 +270,41 @@ static void U_CALLCONV DataCacheElement_deleter(void *pDCEl) { uprv_free(pDCEl); /* delete 'this' */ } -static void udata_initHashTable() { - UErrorCode err = U_ZERO_ERROR; +static void U_CALLCONV udata_initHashTable(UErrorCode &err) { U_ASSERT(gCommonDataCache == NULL); gCommonDataCache = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &err); if (U_FAILURE(err)) { - // TODO: handle errors better. - gCommonDataCache = NULL; - } - if (gCommonDataCache != NULL) { - uhash_setValueDeleter(gCommonDataCache, DataCacheElement_deleter); - ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup); + return; } + U_ASSERT(gCommonDataCache != NULL); + uhash_setValueDeleter(gCommonDataCache, DataCacheElement_deleter); + ucln_common_registerCleanup(UCLN_COMMON_UDATA, udata_cleanup); } /* udata_getCacheHashTable() * Get the hash table used to store the data cache entries. * Lazy create it if it doesn't yet exist. */ -static UHashtable *udata_getHashTable() { - umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable); +static UHashtable *udata_getHashTable(UErrorCode &err) { + umtx_initOnce(gCommonDataCacheInitOnce, &udata_initHashTable, err); return gCommonDataCache; } -static UDataMemory *udata_findCachedData(const char *path) +static UDataMemory *udata_findCachedData(const char *path, UErrorCode &err) { UHashtable *htable; UDataMemory *retVal = NULL; DataCacheElement *el; const char *baseName; + htable = udata_getHashTable(err); + if (U_FAILURE(err)) { + return NULL; + } + baseName = findBasename(path); /* Cache remembers only the base name, not the full path. */ - htable = udata_getHashTable(); umtx_lock(NULL); el = (DataCacheElement *)uhash_get(htable, baseName); umtx_unlock(NULL); @@ -323,6 +326,7 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr DataCacheElement *oldValue = NULL; UErrorCode subErr = U_ZERO_ERROR; + htable = udata_getHashTable(*pErr); if (U_FAILURE(*pErr)) { return NULL; } @@ -355,7 +359,6 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr /* Stick the new DataCacheElement into the hash table. */ - htable = udata_getHashTable(); umtx_lock(NULL); oldValue = (DataCacheElement *)uhash_get(htable, path); if (oldValue != NULL) { @@ -393,9 +396,6 @@ static UDataMemory *udata_cacheDataItem(const char *path, UDataMemory *item, UEr * * *----------------------------------------------------------------------*/ -#define U_DATA_PATHITER_BUFSIZ 128 /* Size of local buffer for paths */ - /* Overflow causes malloc of larger buf */ - U_NAMESPACE_BEGIN class UDataPathIterator @@ -717,18 +717,18 @@ openCommonData(const char *path, /* Path from OpenChoice? */ #ifdef UDATA_DEBUG fprintf(stderr, "ocd: no basename in %s, bailing.\n", path); #endif - *pErrorCode=U_FILE_ACCESS_ERROR; + if (U_SUCCESS(*pErrorCode)) { + *pErrorCode=U_FILE_ACCESS_ERROR; + } return NULL; } /* Is the requested common data file already open and cached? */ /* Note that the cache is keyed by the base name only. The rest of the path, */ /* if any, is not considered. */ - { - UDataMemory *dataToReturn = udata_findCachedData(inBasename); - if (dataToReturn != NULL) { - return dataToReturn; - } + UDataMemory *dataToReturn = udata_findCachedData(inBasename, *pErrorCode); + if (dataToReturn != NULL || U_FAILURE(*pErrorCode)) { + return dataToReturn; } /* Requested item is not in the cache. @@ -759,6 +759,9 @@ openCommonData(const char *path, /* Path from OpenChoice? */ } #endif + if (U_FAILURE(*pErrorCode)) { + return NULL; + } if (!UDataMemory_isLoaded(&tData)) { /* no common data */ *pErrorCode=U_FILE_ACCESS_ERROR; @@ -834,7 +837,7 @@ static UBool extendICUData(UErrorCode *pErr) umtx_storeRelease(gHaveTriedToLoadCommonData, 1); } - didUpdate = findCommonICUDataByName(U_ICUDATA_NAME); /* Return 'true' when a racing writes out the extended */ + didUpdate = findCommonICUDataByName(U_ICUDATA_NAME, *pErr); /* Return 'true' when a racing writes out the extended */ /* data after another thread has failed to see it (in openCommonData), so */ /* extended data can be examined. */ /* Also handles a race through here before gHaveTriedToLoadCommonData is set. */ @@ -1255,7 +1258,7 @@ doOpenChoice(const char *path, const char *type, const char *name, dataPath = u_getDataDirectory(); /**** Time zone individual files override */ - if (isTimeZoneFile(name, type) && isICUData) { + if (isICUData && isTimeZoneFile(name, type)) { const char *tzFilesDir = u_getTimeZoneFilesDirectory(pErrorCode); if (tzFilesDir[0] != 0) { #ifdef UDATA_DEBUG diff --git a/deps/icu-small/source/common/udatamem.c b/deps/icu-small/source/common/udatamem.c index ec6175d9857917..daa919373b71bb 100644 --- a/deps/icu-small/source/common/udatamem.c +++ b/deps/icu-small/source/common/udatamem.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/udatamem.h b/deps/icu-small/source/common/udatamem.h index 51372851f65173..385a77722cc87f 100644 --- a/deps/icu-small/source/common/udatamem.h +++ b/deps/icu-small/source/common/udatamem.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/udataswp.c b/deps/icu-small/source/common/udataswp.c index 06fe85bc463c0d..f47ac1f5e06f35 100644 --- a/deps/icu-small/source/common/udataswp.c +++ b/deps/icu-small/source/common/udataswp.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -298,7 +300,7 @@ udata_swapDataHeader(const UDataSwapper *ds, /* check minimum length and magic bytes */ pHeader=(const DataHeader *)inData; - if( (length>=0 && length=0 && length<(int32_t)sizeof(DataHeader)) || pHeader->dataHeader.magic1!=0xda || pHeader->dataHeader.magic2!=0x27 || pHeader->info.sizeofUChar!=2 @@ -425,7 +427,7 @@ udata_openSwapperForInputData(const void *data, int32_t length, return NULL; } if( data==NULL || - (length>=0 && length=0 && length<(int32_t)sizeof(DataHeader)) || outCharset>U_EBCDIC_FAMILY ) { *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; diff --git a/deps/icu-small/source/common/udataswp.h b/deps/icu-small/source/common/udataswp.h index 66c84955676708..07e06c221a7075 100644 --- a/deps/icu-small/source/common/udataswp.h +++ b/deps/icu-small/source/common/udataswp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -318,6 +320,20 @@ uprv_compareInvEbcdic(const UDataSwapper *ds, const char *outString, int32_t outLength, const UChar *localString, int32_t localLength); +/** + * \def uprv_compareInvWithUChar + * Compare an invariant-character strings with a UChar string + * @internal + */ +#if U_CHARSET_FAMILY==U_ASCII_FAMILY +# define uprv_compareInvWithUChar uprv_compareInvAscii +#elif U_CHARSET_FAMILY==U_EBCDIC_FAMILY +# define uprv_compareInvWithUChar uprv_compareInvEbcdic +#else +# error Unknown charset family! +#endif + + /* material... -------------------------------------------------------------- */ #if 0 diff --git a/deps/icu-small/source/common/uelement.h b/deps/icu-small/source/common/uelement.h index 5a6d723b192a95..9231f40ba1e8f2 100644 --- a/deps/icu-small/source/common/uelement.h +++ b/deps/icu-small/source/common/uelement.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2011, International Business Machines diff --git a/deps/icu-small/source/common/uenum.c b/deps/icu-small/source/common/uenum.c index 3ee8771040aaf1..4854b377c90872 100644 --- a/deps/icu-small/source/common/uenum.c +++ b/deps/icu-small/source/common/uenum.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uenumimp.h b/deps/icu-small/source/common/uenumimp.h index dd704b3f970221..04baac5dd13a34 100644 --- a/deps/icu-small/source/common/uenumimp.h +++ b/deps/icu-small/source/common/uenumimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uhash.c b/deps/icu-small/source/common/uhash.c index 9b6f446f1c07df..02572c80ea9f3b 100644 --- a/deps/icu-small/source/common/uhash.c +++ b/deps/icu-small/source/common/uhash.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2016, International Business Machines diff --git a/deps/icu-small/source/common/uhash.h b/deps/icu-small/source/common/uhash.h index e8f38958ac5501..4aa50e40853c81 100644 --- a/deps/icu-small/source/common/uhash.h +++ b/deps/icu-small/source/common/uhash.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -680,8 +682,8 @@ uhash_equals(const UHashtable* hash1, const UHashtable* hash2); U_NAMESPACE_BEGIN /** - * \class LocalUResourceBundlePointer - * "Smart pointer" class, closes a UResourceBundle via ures_close(). + * \class LocalUHashtablePointer + * "Smart pointer" class, closes a UHashtable via uhash_close(). * For most methods see the LocalPointerBase base class. * * @see LocalPointerBase diff --git a/deps/icu-small/source/common/uhash_us.cpp b/deps/icu-small/source/common/uhash_us.cpp index 71a41cbe29a2be..ac76c1b97821f6 100644 --- a/deps/icu-small/source/common/uhash_us.cpp +++ b/deps/icu-small/source/common/uhash_us.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2011, International Business Machines diff --git a/deps/icu-small/source/common/uidna.cpp b/deps/icu-small/source/common/uidna.cpp index 857c9fc417e863..2f133198491a9a 100644 --- a/deps/icu-small/source/common/uidna.cpp +++ b/deps/icu-small/source/common/uidna.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -316,7 +318,7 @@ _internal_toASCII(const UChar* src, int32_t srcLength, // Step 4: if the source is ASCII then proceed to step 8 if(srcIsASCII){ if(b1Len <= destCapacity){ - uprv_memmove(dest, b1, b1Len * U_SIZEOF_UCHAR); + u_memmove(dest, b1, b1Len); reqLength = b1Len; }else{ reqLength = b1Len; @@ -362,9 +364,9 @@ _internal_toASCII(const UChar* src, int32_t srcLength, goto CLEANUP; } //Step 7: prepend the ACE prefix - uprv_memcpy(dest,ACE_PREFIX,ACE_PREFIX_LENGTH * U_SIZEOF_UCHAR); + u_memcpy(dest, ACE_PREFIX, ACE_PREFIX_LENGTH); //Step 6: copy the contents in b2 into dest - uprv_memcpy(dest+ACE_PREFIX_LENGTH, b2, b2Len * U_SIZEOF_UCHAR); + u_memcpy(dest+ACE_PREFIX_LENGTH, b2, b2Len); }else{ *status = U_IDNA_ACE_PREFIX_ERROR; @@ -541,7 +543,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, //step 8: return output of step 5 reqLength = b2Len; if(b2Len <= destCapacity) { - uprv_memmove(dest, b2, b2Len * U_SIZEOF_UCHAR); + u_memmove(dest, b2, b2Len); } } else{ @@ -570,7 +572,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, // just return the source //copy the source to destination if(srcLength <= destCapacity){ - uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR); + u_memmove(dest, src, srcLength); } reqLength = srcLength; } @@ -597,7 +599,7 @@ _internal_toUnicode(const UChar* src, int32_t srcLength, if(dest && srcLength <= destCapacity){ // srcLength should have already been set earlier. U_ASSERT(srcLength >= 0); - uprv_memmove(dest,src,srcLength * U_SIZEOF_UCHAR); + u_memmove(dest, src, srcLength); } reqLength = srcLength; *status = U_ZERO_ERROR; diff --git a/deps/icu-small/source/common/uinit.cpp b/deps/icu-small/source/common/uinit.cpp index 901692864b3859..34e82a3db41752 100644 --- a/deps/icu-small/source/common/uinit.cpp +++ b/deps/icu-small/source/common/uinit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2015, International Business Machines diff --git a/deps/icu-small/source/common/uinvchar.c b/deps/icu-small/source/common/uinvchar.c index e0aa41306b1127..f1dbe4fe33e8f9 100644 --- a/deps/icu-small/source/common/uinvchar.c +++ b/deps/icu-small/source/common/uinvchar.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uinvchar.h b/deps/icu-small/source/common/uinvchar.h index 1a9aa78d54e651..19a3b2696e758b 100644 --- a/deps/icu-small/source/common/uinvchar.h +++ b/deps/icu-small/source/common/uinvchar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uiter.cpp b/deps/icu-small/source/common/uiter.cpp index 2cc76a965fa91c..26ca877814d0e8 100644 --- a/deps/icu-small/source/common/uiter.cpp +++ b/deps/icu-small/source/common/uiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ulist.c b/deps/icu-small/source/common/ulist.c index ea00ac24efd61f..3b8e6c53ed583a 100644 --- a/deps/icu-small/source/common/ulist.c +++ b/deps/icu-small/source/common/ulist.c @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2009-2014, International Business Machines +* Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** */ @@ -63,18 +65,45 @@ static void ulist_addFirstItem(UList *list, UListNode *newItem) { newItem->previous = NULL; list->head = newItem; list->tail = newItem; +} + +static void ulist_removeItem(UList *list, UListNode *p) { + if (p->previous == NULL) { + // p is the list head. + list->head = p->next; + } else { + p->previous->next = p->next; + } + if (p->next == NULL) { + // p is the list tail. + list->tail = p->previous; + } else { + p->next->previous = p->previous; + } + list->curr = NULL; list->currentIndex = 0; + --list->size; + if (p->forceDelete) { + uprv_free(p->data); + } + uprv_free(p); } U_CAPI void U_EXPORT2 ulist_addItemEndList(UList *list, const void *data, UBool forceDelete, UErrorCode *status) { UListNode *newItem = NULL; if (U_FAILURE(*status) || list == NULL || data == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } return; } newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); if (newItem == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } *status = U_MEMORY_ALLOCATION_ERROR; return; } @@ -97,11 +126,17 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBoo UListNode *newItem = NULL; if (U_FAILURE(*status) || list == NULL || data == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } return; } newItem = (UListNode *)uprv_malloc(sizeof(UListNode)); if (newItem == NULL) { + if (forceDelete) { + uprv_free((void *)data); + } *status = U_MEMORY_ALLOCATION_ERROR; return; } @@ -122,25 +157,31 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBoo } U_CAPI UBool U_EXPORT2 ulist_containsString(const UList *list, const char *data, int32_t length) { - UBool result = FALSE; - const UListNode *pointer = NULL; - - if (list != NULL && list->size != 0) { - pointer = list->head; - - while (pointer != NULL) { + if (list != NULL) { + const UListNode *pointer; + for (pointer = list->head; pointer != NULL; pointer = pointer->next) { if (length == uprv_strlen(pointer->data)) { if (uprv_memcmp(data, pointer->data, length) == 0) { - result = TRUE; - break; + return TRUE; } } - - pointer = pointer->next; } } + return FALSE; +} - return result; +U_CAPI UBool U_EXPORT2 ulist_removeString(UList *list, const char *data) { + if (list != NULL) { + UListNode *pointer; + for (pointer = list->head; pointer != NULL; pointer = pointer->next) { + if (uprv_strcmp(data, pointer->data) == 0) { + ulist_removeItem(list, pointer); + // Remove only the first occurrence, like Java LinkedList.remove(Object). + return TRUE; + } + } + } + return FALSE; } U_CAPI void *U_EXPORT2 ulist_getNext(UList *list) { diff --git a/deps/icu-small/source/common/ulist.h b/deps/icu-small/source/common/ulist.h index 4789247e318404..6f292bf9dcaff1 100644 --- a/deps/icu-small/source/common/ulist.h +++ b/deps/icu-small/source/common/ulist.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 2009, International Business Machines +* Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** */ @@ -22,6 +24,8 @@ U_CAPI void U_EXPORT2 ulist_addItemBeginList(UList *list, const void *data, UBoo U_CAPI UBool U_EXPORT2 ulist_containsString(const UList *list, const char *data, int32_t length); +U_CAPI UBool U_EXPORT2 ulist_removeString(UList *list, const char *data); + U_CAPI void *U_EXPORT2 ulist_getNext(UList *list); U_CAPI int32_t U_EXPORT2 ulist_getListSize(const UList *list); diff --git a/deps/icu-small/source/common/ulistformatter.cpp b/deps/icu-small/source/common/ulistformatter.cpp index 6931cddfe07c06..98aa50e25fb604 100644 --- a/deps/icu-small/source/common/ulistformatter.cpp +++ b/deps/icu-small/source/common/ulistformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/common/uloc.cpp b/deps/icu-small/source/common/uloc.cpp index 90c12b4f0d54c4..2a02b27c5ba1f7 100644 --- a/deps/icu-small/source/common/uloc.cpp +++ b/deps/icu-small/source/common/uloc.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -45,6 +47,8 @@ #include /* for sprintf */ +using namespace icu; + /* ### Declarations **************************************************/ /* Locale stuff from locid.cpp */ @@ -1470,6 +1474,8 @@ typedef struct UKeywordsContext { char* current; } UKeywordsContext; +U_CDECL_BEGIN + static void U_CALLCONV uloc_kw_closeKeywords(UEnumeration *enumerator) { uprv_free(((UKeywordsContext *)enumerator->context)->keywords); @@ -1488,7 +1494,7 @@ uloc_kw_countKeywords(UEnumeration *en, UErrorCode * /*status*/) { return result; } -static const char* U_CALLCONV +static const char * U_CALLCONV uloc_kw_nextKeyword(UEnumeration* en, int32_t* resultLength, UErrorCode* /*status*/) { @@ -1512,6 +1518,9 @@ uloc_kw_resetKeywords(UEnumeration* en, ((UKeywordsContext *)en->context)->current = ((UKeywordsContext *)en->context)->keywords; } +U_CDECL_END + + static const UEnumeration gKeywordsEnum = { NULL, NULL, @@ -2246,7 +2255,7 @@ _uloc_strtod(const char *start, char **end) { typedef struct { float q; int32_t dummy; /* to avoid uninitialized memory copy from qsort */ - char *locale; + char locale[ULOC_FULLNAME_CAPACITY+1]; } _acceptLangItem; static int32_t U_CALLCONV @@ -2288,9 +2297,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult UEnumeration* availableLocales, UErrorCode *status) { - _acceptLangItem *j; - _acceptLangItem smallBuffer[30]; - char **strs; + MaybeStackArray<_acceptLangItem, 4> items; // Struct for collecting items. char tmp[ULOC_FULLNAME_CAPACITY +1]; int32_t n = 0; const char *itemEnd; @@ -2300,11 +2307,7 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult int32_t res; int32_t i; int32_t l = (int32_t)uprv_strlen(httpAcceptLanguage); - int32_t jSize; - char *tempstr; /* Use for null pointer check */ - j = smallBuffer; - jSize = UPRV_LENGTHOF(smallBuffer); if(U_FAILURE(*status)) { return -1; } @@ -2332,27 +2335,29 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult while(isspace(*t)) { t++; } - j[n].q = (float)_uloc_strtod(t,NULL); + items[n].q = (float)_uloc_strtod(t,NULL); } else { /* no semicolon - it's 1.0 */ - j[n].q = 1.0f; + items[n].q = 1.0f; paramEnd = itemEnd; } - j[n].dummy=0; + items[n].dummy=0; /* eat spaces prior to semi */ for(t=(paramEnd-1);(paramEnd>s)&&isspace(*t);t--) ; - /* Check for null pointer from uprv_strndup */ - tempstr = uprv_strndup(s,(int32_t)((t+1)-s)); - if (tempstr == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return -1; - } - j[n].locale = tempstr; - uloc_canonicalize(j[n].locale,tmp,UPRV_LENGTHOF(tmp),status); - if(strcmp(j[n].locale,tmp)) { - uprv_free(j[n].locale); - j[n].locale=uprv_strdup(tmp); + int32_t slen = ((t+1)-s); + if(slen > ULOC_FULLNAME_CAPACITY) { + *status = U_BUFFER_OVERFLOW_ERROR; + return -1; // too big + } + uprv_strncpy(items[n].locale, s, slen); + items[n].locale[slen]=0; // terminate + int32_t clen = uloc_canonicalize(items[n].locale, tmp, UPRV_LENGTHOF(tmp)-1, status); + if(U_FAILURE(*status)) return -1; + if((clen!=slen) || (uprv_strncmp(items[n].locale, tmp, slen))) { + // canonicalization had an effect- copy back + uprv_strncpy(items[n].locale, tmp, clen); + items[n].locale[clen] = 0; // terminate } #if defined(ULOC_DEBUG) /*fprintf(stderr,"%d: s <%s> q <%g>\n", n, j[n].locale, j[n].q);*/ @@ -2362,42 +2367,22 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult while(*s==',') { /* eat duplicate commas */ s++; } - if(n>=jSize) { - if(j==smallBuffer) { /* overflowed the small buffer. */ - j = static_cast<_acceptLangItem *>(uprv_malloc(sizeof(j[0])*(jSize*2))); - if(j!=NULL) { - uprv_memcpy(j,smallBuffer,sizeof(j[0])*jSize); - } -#if defined(ULOC_DEBUG) - fprintf(stderr,"malloced at size %d\n", jSize); -#endif - } else { - j = static_cast<_acceptLangItem *>(uprv_realloc(j, sizeof(j[0])*jSize*2)); + if(n>=items.getCapacity()) { // If we need more items + if(NULL == items.resize(items.getCapacity()*2, items.getCapacity())) { + *status = U_MEMORY_ALLOCATION_ERROR; + return -1; + } #if defined(ULOC_DEBUG) - fprintf(stderr,"re-alloced at size %d\n", jSize); + fprintf(stderr,"malloced at size %d\n", items.getCapacity()); #endif - } - jSize *= 2; - if(j==NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - return -1; - } } } - uprv_sortArray(j, n, sizeof(j[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); - if(U_FAILURE(*status)) { - if(j != smallBuffer) { -#if defined(ULOC_DEBUG) - fprintf(stderr,"freeing j %p\n", j); -#endif - uprv_free(j); - } + uprv_sortArray(items.getAlias(), n, sizeof(items[0]), uloc_acceptLanguageCompare, NULL, TRUE, status); + if (U_FAILURE(*status)) { return -1; } - strs = static_cast(uprv_malloc((size_t)(sizeof(strs[0])*n))); - /* Check for null pointer */ - if (strs == NULL) { - uprv_free(j); /* Free to avoid memory leak */ + LocalMemory strs(NULL); + if (strs.allocateInsteadAndReset(n) == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; return -1; } @@ -2405,20 +2390,10 @@ uloc_acceptLanguageFromHTTP(char *result, int32_t resultAvailable, UAcceptResult #if defined(ULOC_DEBUG) /*fprintf(stderr,"%d: s <%s> q <%g>\n", i, j[i].locale, j[i].q);*/ #endif - strs[i]=j[i].locale; + strs[i]=items[i].locale; } res = uloc_acceptLanguage(result, resultAvailable, outResult, - (const char**)strs, n, availableLocales, status); - for(i=0;ikey); } else { cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); + /* Both are u extension keys - we need special handling for 'attribute' */ + if (cmp != 0) { + if (uprv_strcmp(cur->key, LOCALE_ATTRIBUTE_KEY) == 0) { + cmp = 1; + } else if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { + cmp = -1; + } + } } } else { cmp = uprv_compareInvCharsAsAscii(ext->key, cur->key); @@ -892,7 +903,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac char buf[ULOC_KEYWORD_AND_VALUES_CAPACITY]; char attrBuf[ULOC_KEYWORD_AND_VALUES_CAPACITY] = { 0 }; int32_t attrBufLength = 0; - UBool isAttribute = FALSE; UEnumeration *keywordEnum = NULL; int32_t reslen = 0; @@ -919,7 +929,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac UBool isBcpUExt; while (TRUE) { - isAttribute = FALSE; key = uenum_next(keywordEnum, NULL, status); if (key == NULL) { break; @@ -941,7 +950,6 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac /* special keyword used for representing Unicode locale attributes */ if (uprv_strcmp(key, LOCALE_ATTRIBUTE_KEY) == 0) { - isAttribute = TRUE; if (len > 0) { int32_t i = 0; while (TRUE) { @@ -984,6 +992,9 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } } } + /* for a place holder ExtensionListEntry */ + bcpKey = LOCALE_ATTRIBUTE_KEY; + bcpValue = NULL; } } else if (isBcpUExt) { bcpKey = uloc_toUnicodeLocaleKey(key); @@ -1063,22 +1074,20 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } } - if (!isAttribute) { - /* create ExtensionListEntry */ - ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); - if (ext == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - break; - } - ext->key = bcpKey; - ext->value = bcpValue; + /* create ExtensionListEntry */ + ext = (ExtensionListEntry*)uprv_malloc(sizeof(ExtensionListEntry)); + if (ext == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + break; + } + ext->key = bcpKey; + ext->value = bcpValue; - if (!_addExtensionToList(&firstExt, ext, TRUE)) { - uprv_free(ext); - if (strict) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - break; - } + if (!_addExtensionToList(&firstExt, ext, TRUE)) { + uprv_free(ext); + if (strict) { + *status = U_ILLEGAL_ARGUMENT_ERROR; + break; } } } @@ -1101,12 +1110,9 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac if (U_SUCCESS(*status) && (firstExt != NULL || firstAttr != NULL)) { UBool startLDMLExtension = FALSE; - - attr = firstAttr; - ext = firstExt; - do { - if (!startLDMLExtension && (ext && uprv_strlen(ext->key) > 1)) { - /* write LDML singleton extension */ + for (ext = firstExt; ext; ext = ext->next) { + if (!startLDMLExtension && uprv_strlen(ext->key) > 1) { + /* first LDML u singlton extension */ if (reslen < capacity) { *(appendAt + reslen) = SEP; } @@ -1120,7 +1126,20 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac } /* write out the sorted BCP47 attributes, extensions and private use */ - if (ext && (uprv_strlen(ext->key) == 1 || attr == NULL)) { + if (uprv_strcmp(ext->key, LOCALE_ATTRIBUTE_KEY) == 0) { + /* write the value for the attributes */ + for (attr = firstAttr; attr; attr = attr->next) { + if (reslen < capacity) { + *(appendAt + reslen) = SEP; + } + reslen++; + len = (int32_t)uprv_strlen(attr->attribute); + if (reslen < capacity) { + uprv_memcpy(appendAt + reslen, attr->attribute, uprv_min(len, capacity - reslen)); + } + reslen += len; + } + } else { if (reslen < capacity) { *(appendAt + reslen) = SEP; } @@ -1139,23 +1158,8 @@ _appendKeywordsToLanguageTag(const char* localeID, char* appendAt, int32_t capac uprv_memcpy(appendAt + reslen, ext->value, uprv_min(len, capacity - reslen)); } reslen += len; - - ext = ext->next; - } else if (attr) { - /* write the value for the attributes */ - if (reslen < capacity) { - *(appendAt + reslen) = SEP; - } - reslen++; - len = (int32_t)uprv_strlen(attr->attribute); - if (reslen < capacity) { - uprv_memcpy(appendAt + reslen, attr->attribute, uprv_min(len, capacity - reslen)); - } - reslen += len; - - attr = attr->next; } - } while (attr != NULL || ext != NULL); + } } cleanup: /* clean up */ @@ -1771,6 +1775,15 @@ _appendPrivateuseToLanguageTag(const char* localeID, char* appendAt, int32_t cap #define EXTV 0x0040 #define PRIV 0x0080 +/** + * Ticket #12705 - Visual Studio 2015 Update 3 contains a new code optimizer which has problems optimizing + * this function. (See https://blogs.msdn.microsoft.com/vcblog/2016/05/04/new-code-optimizer/ ) + * As a workaround, we will turn off optimization just for this function on VS2015 Update 3 and above. + */ +#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +#pragma optimize( "", off ) +#endif + static ULanguageTag* ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* status) { ULanguageTag *t; @@ -2134,6 +2147,13 @@ ultag_parse(const char* tag, int32_t tagLen, int32_t* parsedLen, UErrorCode* sta return NULL; } +/** +* Ticket #12705 - Turn optimization back on. +*/ +#if (defined(_MSC_VER) && (_MSC_VER >= 1900) && defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190024210)) +#pragma optimize( "", on ) +#endif + static void ultag_close(ULanguageTag* langtag) { diff --git a/deps/icu-small/source/common/ulocimp.h b/deps/icu-small/source/common/ulocimp.h index 36713e69be1b7b..26d5c7963e0862 100644 --- a/deps/icu-small/source/common/ulocimp.h +++ b/deps/icu-small/source/common/ulocimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2004-2016, International Business Machines diff --git a/deps/icu-small/source/common/umapfile.c b/deps/icu-small/source/common/umapfile.c index 016758892992dc..377b14d30f2df8 100644 --- a/deps/icu-small/source/common/umapfile.c +++ b/deps/icu-small/source/common/umapfile.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/umapfile.h b/deps/icu-small/source/common/umapfile.h index 2995e381ed30c0..70a6cc5f861784 100644 --- a/deps/icu-small/source/common/umapfile.h +++ b/deps/icu-small/source/common/umapfile.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/umath.c b/deps/icu-small/source/common/umath.c index 9e540d4d8d7a82..86f58819e067ac 100644 --- a/deps/icu-small/source/common/umath.c +++ b/deps/icu-small/source/common/umath.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/umutex.cpp b/deps/icu-small/source/common/umutex.cpp index cffa109d6348cf..13569cb075fa58 100644 --- a/deps/icu-small/source/common/umutex.cpp +++ b/deps/icu-small/source/common/umutex.cpp @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * -* Copyright (C) 1997-2015, International Business Machines +* Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. * ****************************************************************************** @@ -37,16 +39,7 @@ static UMutex globalMutex = U_MUTEX_INITIALIZER; // Build time user mutex hook: #include "U_USER_MUTEX_CPP" #include U_MUTEX_XSTR(U_USER_MUTEX_CPP) -#elif U_PLATFORM_HAS_WIN32_API - -//------------------------------------------------------------------------------------------- -// -// Windows Specific Definitions -// -// Note: Cygwin (and possibly others) have both WIN32 and POSIX. -// Prefer Win32 in these cases. (Win32 comes ahead in the #if chain) -// -//------------------------------------------------------------------------------------------- +#elif U_PLATFORM_USES_ONLY_WIN32_API #if defined U_NO_PLATFORM_ATOMICS #error ICU on Win32 requires support for low level atomic operations. @@ -68,10 +61,8 @@ U_NAMESPACE_BEGIN U_COMMON_API UBool U_EXPORT2 umtx_initImplPreInit(UInitOnce &uio) { for (;;) { int32_t previousState = InterlockedCompareExchange( -#if (U_PLATFORM == U_PF_MINGW) || (U_PLATFORM == U_PF_CYGWIN) || defined(__clang__) - (LONG volatile *) // this is the type given in the API doc for this function. -#endif - &uio.fState, // Destination + (LONG volatile *) // this is the type given in the API doc for this function. + &uio.fState, // Destination 1, // Exchange Value 0); // Compare value diff --git a/deps/icu-small/source/common/umutex.h b/deps/icu-small/source/common/umutex.h index f670b3d13ff371..d6618ed76621fb 100644 --- a/deps/icu-small/source/common/umutex.h +++ b/deps/icu-small/source/common/umutex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -229,7 +231,7 @@ struct UInitOnce { U_COMMON_API UBool U_EXPORT2 umtx_initImplPreInit(UInitOnce &); U_COMMON_API void U_EXPORT2 umtx_initImplPostInit(UInitOnce &); -template void umtx_initOnce(UInitOnce &uio, T *obj, void (T::*fp)()) { +template void umtx_initOnce(UInitOnce &uio, T *obj, void (U_CALLCONV T::*fp)()) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -242,7 +244,7 @@ template void umtx_initOnce(UInitOnce &uio, T *obj, void (T::*fp)()) { // umtx_initOnce variant for plain functions, or static class functions. // No context parameter. -inline void umtx_initOnce(UInitOnce &uio, void (*fp)()) { +inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)()) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -254,7 +256,7 @@ inline void umtx_initOnce(UInitOnce &uio, void (*fp)()) { // umtx_initOnce variant for plain functions, or static class functions. // With ErrorCode, No context parameter. -inline void umtx_initOnce(UInitOnce &uio, void (*fp)(UErrorCode &), UErrorCode &errCode) { +inline void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(UErrorCode &), UErrorCode &errCode) { if (U_FAILURE(errCode)) { return; } @@ -273,7 +275,7 @@ inline void umtx_initOnce(UInitOnce &uio, void (*fp)(UErrorCode &), UErrorCode & // umtx_initOnce variant for plain functions, or static class functions, // with a context parameter. -template void umtx_initOnce(UInitOnce &uio, void (*fp)(T), T context) { +template void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(T), T context) { if (umtx_loadAcquire(uio.fState) == 2) { return; } @@ -285,7 +287,7 @@ template void umtx_initOnce(UInitOnce &uio, void (*fp)(T), T context) { // umtx_initOnce variant for plain functions, or static class functions, // with a context parameter and an error code. -template void umtx_initOnce(UInitOnce &uio, void (*fp)(T, UErrorCode &), T context, UErrorCode &errCode) { +template void umtx_initOnce(UInitOnce &uio, void (U_CALLCONV *fp)(T, UErrorCode &), T context, UErrorCode &errCode) { if (U_FAILURE(errCode)) { return; } @@ -318,13 +320,7 @@ U_NAMESPACE_END // #inlcude "U_USER_MUTEX_H" #include U_MUTEX_XSTR(U_USER_MUTEX_H) -#elif U_PLATFORM_HAS_WIN32_API - -/* Windows Definitions. - * Windows comes first in the platform chain. - * Cygwin (and possibly others) have both WIN32 and POSIX APIs. Prefer Win32 in this case. - */ - +#elif U_PLATFORM_USES_ONLY_WIN32_API /* For CRITICAL_SECTION */ diff --git a/deps/icu-small/source/common/unames.cpp b/deps/icu-small/source/common/unames.cpp index 58d1a39bf55b31..b8c4151f42ccc7 100644 --- a/deps/icu-small/source/common/unames.cpp +++ b/deps/icu-small/source/common/unames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/appendable.h b/deps/icu-small/source/common/unicode/appendable.h index a6a83b15cf9719..2ae334505ef1f5 100644 --- a/deps/icu-small/source/common/unicode/appendable.h +++ b/deps/icu-small/source/common/unicode/appendable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines diff --git a/deps/icu-small/source/common/unicode/brkiter.h b/deps/icu-small/source/common/unicode/brkiter.h index 26ad182eafff56..88b39c6699b2f6 100644 --- a/deps/icu-small/source/common/unicode/brkiter.h +++ b/deps/icu-small/source/common/unicode/brkiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -168,6 +170,11 @@ class U_COMMON_API BreakIterator : public UObject { /** * Change the text over which this operates. The text boundary is * reset to the start. + * + * The BreakIterator will retain a reference to the supplied string. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param text The UnicodeString used to change the text. * @stable ICU 2.0 */ diff --git a/deps/icu-small/source/common/unicode/bytestream.h b/deps/icu-small/source/common/unicode/bytestream.h index cdab0ec743577a..4e404a6edc737b 100644 --- a/deps/icu-small/source/common/unicode/bytestream.h +++ b/deps/icu-small/source/common/unicode/bytestream.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2012, International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/common/unicode/bytestrie.h b/deps/icu-small/source/common/unicode/bytestrie.h index 9c7782740dba27..4a30ce1c0428b5 100644 --- a/deps/icu-small/source/common/unicode/bytestrie.h +++ b/deps/icu-small/source/common/unicode/bytestrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -306,7 +308,7 @@ class U_COMMON_API BytesTrie : public UMemory { * @return The NUL-terminated byte sequence for the last successful next(). * @stable ICU 4.8 */ - const StringPiece &getString() const { return sp_; } + StringPiece getString() const; /** * @return The value for the last successful next(). * @stable ICU 4.8 @@ -325,7 +327,6 @@ class U_COMMON_API BytesTrie : public UMemory { int32_t initialRemainingMatchLength_; CharString *str_; - StringPiece sp_; int32_t maxLength_; int32_t value_; diff --git a/deps/icu-small/source/common/unicode/bytestriebuilder.h b/deps/icu-small/source/common/unicode/bytestriebuilder.h index e7fbd6b23713e0..3ad800975b778c 100644 --- a/deps/icu-small/source/common/unicode/bytestriebuilder.h +++ b/deps/icu-small/source/common/unicode/bytestriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines @@ -29,7 +31,6 @@ U_NAMESPACE_BEGIN class BytesTrieElement; class CharString; - /** * Builder class for BytesTrie. * @@ -65,7 +66,7 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { * @return *this * @stable ICU 4.8 */ - BytesTrieBuilder &add(const StringPiece &s, int32_t value, UErrorCode &errorCode); + BytesTrieBuilder &add(StringPiece s, int32_t value, UErrorCode &errorCode); /** * Builds a BytesTrie for the add()ed data. @@ -141,7 +142,6 @@ class U_COMMON_API BytesTrieBuilder : public StringTrieBuilder { virtual int32_t getMinLinearMatch() const { return BytesTrie::kMinLinearMatch; } virtual int32_t getMaxLinearMatchLength() const { return BytesTrie::kMaxLinearMatchLength; } - // don't use #ifndef U_HIDE_INTERNAL_API with private class members /** * @internal */ diff --git a/deps/icu-small/source/common/unicode/caniter.h b/deps/icu-small/source/common/unicode/caniter.h index 31fcea312ada02..b988b2003d73a8 100644 --- a/deps/icu-small/source/common/unicode/caniter.h +++ b/deps/icu-small/source/common/unicode/caniter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/chariter.h b/deps/icu-small/source/common/unicode/chariter.h index a955ad52a40d0c..7c6f98f640eada 100644 --- a/deps/icu-small/source/common/unicode/chariter.h +++ b/deps/icu-small/source/common/unicode/chariter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * diff --git a/deps/icu-small/source/common/unicode/dbbi.h b/deps/icu-small/source/common/unicode/dbbi.h index ebc80fa9ac2ad9..be9618c551c7dc 100644 --- a/deps/icu-small/source/common/unicode/dbbi.h +++ b/deps/icu-small/source/common/unicode/dbbi.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2006,2013 IBM Corp. All rights reserved. diff --git a/deps/icu-small/source/common/unicode/docmain.h b/deps/icu-small/source/common/unicode/docmain.h index 5e804bc1707827..7b053b04640df2 100644 --- a/deps/icu-small/source/common/unicode/docmain.h +++ b/deps/icu-small/source/common/unicode/docmain.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2012, International Business Machines Corporation and @@ -147,7 +149,7 @@ * * * Bidirectional Algorithm - * ubidi.h + * ubidi.h, ubiditransform.h * C API * * diff --git a/deps/icu-small/source/common/unicode/dtintrv.h b/deps/icu-small/source/common/unicode/dtintrv.h index 0212fa236ac55d..c16ee63d9632e6 100644 --- a/deps/icu-small/source/common/unicode/dtintrv.h +++ b/deps/icu-small/source/common/unicode/dtintrv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2009, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/enumset.h b/deps/icu-small/source/common/unicode/enumset.h index 715ca57c1f2b53..e7c39c40dd2586 100644 --- a/deps/icu-small/source/common/unicode/enumset.h +++ b/deps/icu-small/source/common/unicode/enumset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/errorcode.h b/deps/icu-small/source/common/unicode/errorcode.h index 3fcbb7e0436f3c..92feb2b1b6b87e 100644 --- a/deps/icu-small/source/common/unicode/errorcode.h +++ b/deps/icu-small/source/common/unicode/errorcode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/filteredbrk.h b/deps/icu-small/source/common/unicode/filteredbrk.h index fff9bb5771f3f8..261151138cdc8f 100644 --- a/deps/icu-small/source/common/unicode/filteredbrk.h +++ b/deps/icu-small/source/common/unicode/filteredbrk.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -13,8 +15,6 @@ #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION -#ifndef U_HIDE_DRAFT_API - U_NAMESPACE_BEGIN /** @@ -31,13 +31,13 @@ U_NAMESPACE_BEGIN * but with "Mr." as an exception, a filtered break iterator * would consider the string "Mr. Smith" to be a single segment. * - * @draft ICU 56 + * @stable ICU 56 */ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { public: /** * destructor. - * @draft ICU 56 + * @stable ICU 56 */ virtual ~FilteredBreakIteratorBuilder(); @@ -51,7 +51,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param where the locale. * @param status The error code. * @return the new builder - * @draft ICU 56 + * @stable ICU 56 */ static FilteredBreakIteratorBuilder *createInstance(const Locale& where, UErrorCode& status); @@ -60,7 +60,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * In this state, it will not suppress any segment boundaries. * @param status The error code. * @return the new builder - * @draft ICU 56 + * @stable ICU 56 */ static FilteredBreakIteratorBuilder *createInstance(UErrorCode &status); @@ -72,7 +72,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param status error code * @return returns TRUE if the string was not present and now added, * FALSE if the call was a no-op because the string was already being suppressed. - * @draft ICU 56 + * @stable ICU 56 */ virtual UBool suppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; @@ -85,7 +85,7 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param status error code * @return returns TRUE if the string was present and now removed, * FALSE if the call was a no-op because the string was not being suppressed. - * @draft ICU 56 + * @stable ICU 56 */ virtual UBool unsuppressBreakAfter(const UnicodeString& string, UErrorCode& status) = 0; @@ -99,14 +99,14 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { * @param adoptBreakIterator the break iterator to adopt * @param status error code * @return the new BreakIterator, owned by the caller. - * @draft ICU 56 + * @stable ICU 56 */ virtual BreakIterator *build(BreakIterator* adoptBreakIterator, UErrorCode& status) = 0; protected: /** * For subclass use - * @draft ICU 56 + * @stable ICU 56 */ FilteredBreakIteratorBuilder(); }; @@ -114,8 +114,6 @@ class U_COMMON_API FilteredBreakIteratorBuilder : public UObject { U_NAMESPACE_END -#endif /* U_HIDE_DRAFT_API */ - #endif // #if !UCONFIG_NO_BREAK_ITERATION && !UCONFIG_NO_FILTERED_BREAK_ITERATION #endif // #ifndef FILTEREDBRK_H diff --git a/deps/icu-small/source/common/unicode/icudataver.h b/deps/icu-small/source/common/unicode/icudataver.h index 485c07081dd390..c5c44fc0754f15 100644 --- a/deps/icu-small/source/common/unicode/icudataver.h +++ b/deps/icu-small/source/common/unicode/icudataver.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/icuplug.h b/deps/icu-small/source/common/unicode/icuplug.h index 3b33a3608b9ad5..ff5e054d38e24b 100644 --- a/deps/icu-small/source/common/unicode/icuplug.h +++ b/deps/icu-small/source/common/unicode/icuplug.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -157,7 +159,11 @@ typedef enum { UPLUG_REASON_QUERY = 0, /**< The plugin is being queried for info. **/ UPLUG_REASON_LOAD = 1, /**< The plugin is being loaded. **/ UPLUG_REASON_UNLOAD = 2, /**< The plugin is being unloaded. **/ - UPLUG_REASON_COUNT /**< count of known reasons **/ + /** + * Number of known reasons. + * @internal The numeric value may change over time, see ICU ticket #12420. + */ + UPLUG_REASON_COUNT } UPlugReason; @@ -173,7 +179,11 @@ typedef enum { UPLUG_LEVEL_UNKNOWN = 1, /**< The plugin is waiting to be installed. **/ UPLUG_LEVEL_LOW = 2, /**< The plugin must be called before u_init completes **/ UPLUG_LEVEL_HIGH = 3, /**< The plugin can run at any time. **/ - UPLUG_LEVEL_COUNT /**< count of known reasons **/ + /** + * Number of known levels. + * @internal The numeric value may change over time, see ICU ticket #12420. + */ + UPLUG_LEVEL_COUNT } UPlugLevel; /** diff --git a/deps/icu-small/source/common/unicode/idna.h b/deps/icu-small/source/common/unicode/idna.h index 90194a378f3825..23a1d7ca0e8441 100644 --- a/deps/icu-small/source/common/unicode/idna.h +++ b/deps/icu-small/source/common/unicode/idna.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines @@ -198,7 +200,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -216,7 +218,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -234,7 +236,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; /** @@ -252,7 +254,7 @@ class U_COMMON_API IDNA : public UObject { * @stable ICU 4.6 */ virtual void - nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; }; diff --git a/deps/icu-small/source/common/unicode/listformatter.h b/deps/icu-small/source/common/unicode/listformatter.h index cb5d50d7a2e975..f2c898881a7939 100644 --- a/deps/icu-small/source/common/unicode/listformatter.h +++ b/deps/icu-small/source/common/unicode/listformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/localpointer.h b/deps/icu-small/source/common/unicode/localpointer.h index 35e37765c2342d..9ac5de5f06d751 100644 --- a/deps/icu-small/source/common/unicode/localpointer.h +++ b/deps/icu-small/source/common/unicode/localpointer.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -211,18 +213,16 @@ class LocalPointer : public LocalPointerBase { errorCode=U_MEMORY_ALLOCATION_ERROR; } } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move constructor, leaves src with isNull(). * @param src source smart pointer - * @draft ICU 56 + * @stable ICU 56 */ LocalPointer(LocalPointer &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } #endif -#endif /* U_HIDE_DRAFT_API */ /** * Destructor deletes the object it owns. * @stable ICU 4.4 @@ -230,19 +230,19 @@ class LocalPointer : public LocalPointerBase { ~LocalPointer() { delete LocalPointerBase::ptr; } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. * @param src source smart pointer * @return *this - * @draft ICU 56 + * @stable ICU 56 */ LocalPointer &operator=(LocalPointer &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -261,19 +261,18 @@ class LocalPointer : public LocalPointerBase { /** * Swap pointers. * @param other other smart pointer - * @draft ICU 56 + * @stable ICU 56 */ void swap(LocalPointer &other) U_NOEXCEPT { T *temp=LocalPointerBase::ptr; LocalPointerBase::ptr=other.ptr; other.ptr=temp; } -#endif /* U_HIDE_DRAFT_API */ /** * Non-member LocalPointer swap function. * @param p1 will get p2's pointer * @param p2 will get p1's pointer - * @draft ICU 56 + * @stable ICU 56 */ friend inline void swap(LocalPointer &p1, LocalPointer &p2) U_NOEXCEPT { p1.swap(p2); @@ -345,7 +344,6 @@ class LocalArray : public LocalPointerBase { * @stable ICU 4.4 */ explicit LocalArray(T *p=NULL) : LocalPointerBase(p) {} -#ifndef U_HIDE_DRAFT_API /** * Constructor takes ownership and reports an error if NULL. * @@ -357,7 +355,7 @@ class LocalArray : public LocalPointerBase { * @param p simple pointer to an array of T objects that is adopted * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR * if p==NULL and no other failure code had been set - * @draft ICU 56 + * @stable ICU 56 */ LocalArray(T *p, UErrorCode &errorCode) : LocalPointerBase(p) { if(p==NULL && U_SUCCESS(errorCode)) { @@ -368,13 +366,12 @@ class LocalArray : public LocalPointerBase { /** * Move constructor, leaves src with isNull(). * @param src source smart pointer - * @draft ICU 56 + * @stable ICU 56 */ LocalArray(LocalArray &&src) U_NOEXCEPT : LocalPointerBase(src.ptr) { src.ptr=NULL; } #endif -#endif /* U_HIDE_DRAFT_API */ /** * Destructor deletes the array it owns. * @stable ICU 4.4 @@ -382,19 +379,19 @@ class LocalArray : public LocalPointerBase { ~LocalArray() { delete[] LocalPointerBase::ptr; } -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. * @param src source smart pointer * @return *this - * @draft ICU 56 + * @stable ICU 56 */ LocalArray &operator=(LocalArray &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, leaves src with isNull(). * The behavior is undefined if *this and src are the same object. @@ -413,19 +410,18 @@ class LocalArray : public LocalPointerBase { /** * Swap pointers. * @param other other smart pointer - * @draft ICU 56 + * @stable ICU 56 */ void swap(LocalArray &other) U_NOEXCEPT { T *temp=LocalPointerBase::ptr; LocalPointerBase::ptr=other.ptr; other.ptr=temp; } -#endif /* U_HIDE_DRAFT_API */ /** * Non-member LocalArray swap function. * @param p1 will get p2's pointer * @param p2 will get p1's pointer - * @draft ICU 56 + * @stable ICU 56 */ friend inline void swap(LocalArray &p1, LocalArray &p2) U_NOEXCEPT { p1.swap(p2); @@ -440,7 +436,6 @@ class LocalArray : public LocalPointerBase { delete[] LocalPointerBase::ptr; LocalPointerBase::ptr=p; } -#ifndef U_HIDE_DRAFT_API /** * Deletes the array it owns, * and adopts (takes ownership of) the one passed in. @@ -454,7 +449,7 @@ class LocalArray : public LocalPointerBase { * @param p simple pointer to an array of T objects that is adopted * @param errorCode in/out UErrorCode, set to U_MEMORY_ALLOCATION_ERROR * if p==NULL and no other failure code had been set - * @draft ICU 56 + * @stable ICU 56 */ void adoptInsteadAndCheckErrorCode(T *p, UErrorCode &errorCode) { if(U_SUCCESS(errorCode)) { @@ -467,7 +462,6 @@ class LocalArray : public LocalPointerBase { delete[] p; } } -#endif /* U_HIDE_DRAFT_API */ /** * Array item access (writable). * No index bounds check. @@ -485,9 +479,6 @@ class LocalArray : public LocalPointerBase { * like LocalPointer except that this subclass will use the closeFunction * rather than the C++ delete operator. * - * Requirement: The closeFunction must tolerate a NULL pointer. - * (We could add a NULL check here but it is normally redundant.) - * * Usage example: * \code * LocalUCaseMapPointer csm(ucasemap_open(localeID, options, &errorCode)); @@ -512,12 +503,12 @@ class LocalArray : public LocalPointerBase { : LocalPointerBase(src.ptr) { \ src.ptr=NULL; \ } \ - ~LocalPointerClassName() { closeFunction(ptr); } \ + ~LocalPointerClassName() { if (ptr != NULL) { closeFunction(ptr); } } \ LocalPointerClassName &operator=(LocalPointerClassName &&src) U_NOEXCEPT { \ return moveFrom(src); \ } \ LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ LocalPointerBase::ptr=src.ptr; \ src.ptr=NULL; \ return *this; \ @@ -531,7 +522,7 @@ class LocalArray : public LocalPointerBase { p1.swap(p2); \ } \ void adoptInstead(Type *p) { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ ptr=p; \ } \ } @@ -544,7 +535,7 @@ class LocalArray : public LocalPointerBase { explicit LocalPointerClassName(Type *p=NULL) : LocalPointerBase(p) {} \ ~LocalPointerClassName() { closeFunction(ptr); } \ LocalPointerClassName &moveFrom(LocalPointerClassName &src) U_NOEXCEPT { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ LocalPointerBase::ptr=src.ptr; \ src.ptr=NULL; \ return *this; \ @@ -558,7 +549,7 @@ class LocalArray : public LocalPointerBase { p1.swap(p2); \ } \ void adoptInstead(Type *p) { \ - closeFunction(ptr); \ + if (ptr != NULL) { closeFunction(ptr); } \ ptr=p; \ } \ } diff --git a/deps/icu-small/source/common/unicode/locdspnm.h b/deps/icu-small/source/common/unicode/locdspnm.h index ba168d8c95a6de..b8c7a0ccae9281 100644 --- a/deps/icu-small/source/common/unicode/locdspnm.h +++ b/deps/icu-small/source/common/unicode/locdspnm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2010-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/locid.h b/deps/icu-small/source/common/unicode/locid.h index e8edd919b6c8b1..f797c25e8b6069 100644 --- a/deps/icu-small/source/common/unicode/locid.h +++ b/deps/icu-small/source/common/unicode/locid.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/messagepattern.h b/deps/icu-small/source/common/unicode/messagepattern.h index f8b8dfb43f3149..8c1115e04dc1db 100644 --- a/deps/icu-small/source/common/unicode/messagepattern.h +++ b/deps/icu-small/source/common/unicode/messagepattern.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2013, International Business Machines diff --git a/deps/icu-small/source/common/unicode/normalizer2.h b/deps/icu-small/source/common/unicode/normalizer2.h index c03cba39e987a6..6a7668bfd5ff3e 100644 --- a/deps/icu-small/source/common/unicode/normalizer2.h +++ b/deps/icu-small/source/common/unicode/normalizer2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/normlzr.h b/deps/icu-small/source/common/unicode/normlzr.h index cdd7f37d6706ad..b9b67bc434df9d 100644 --- a/deps/icu-small/source/common/unicode/normlzr.h +++ b/deps/icu-small/source/common/unicode/normlzr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************** * COPYRIGHT: @@ -179,6 +181,7 @@ class U_COMMON_API Normalizer : public UObject { * @deprecated ICU 56 Use Normalizer2 instead. */ Normalizer(const CharacterIterator& iter, UNormalizationMode mode); +#endif /* U_HIDE_DEPRECATED_API */ /** * Copy constructor. @@ -186,7 +189,6 @@ class U_COMMON_API Normalizer : public UObject { * @deprecated ICU 56 Use Normalizer2 instead. */ Normalizer(const Normalizer& copy); -#endif /* U_HIDE_DEPRECATED_API */ /** * Destructor @@ -750,9 +752,7 @@ class U_COMMON_API Normalizer : public UObject { FilteredNormalizer2*fFilteredNorm2; // owned if not NULL const Normalizer2 *fNorm2; // not owned; may be equal to fFilteredNorm2 -#ifndef U_HIDE_DEPRECATED_API - UNormalizationMode fUMode; -#endif /* U_HIDE_DEPRECATED_API */ + UNormalizationMode fUMode; // deprecated int32_t fOptions; // The input text and our position in it diff --git a/deps/icu-small/source/common/unicode/parseerr.h b/deps/icu-small/source/common/unicode/parseerr.h index 0096a13b1cdd56..f1976581a1ea63 100644 --- a/deps/icu-small/source/common/unicode/parseerr.h +++ b/deps/icu-small/source/common/unicode/parseerr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2005, International Business Machines diff --git a/deps/icu-small/source/common/unicode/parsepos.h b/deps/icu-small/source/common/unicode/parsepos.h index 1d56bd07a4bbb7..7bc2627773ef01 100644 --- a/deps/icu-small/source/common/unicode/parsepos.h +++ b/deps/icu-small/source/common/unicode/parsepos.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2005, International Business Machines Corporation and others. All Rights Reserved. ******************************************************************************* diff --git a/deps/icu-small/source/common/unicode/platform.h b/deps/icu-small/source/common/unicode/platform.h index 33ad07f0cc175b..bf31af5d1331cc 100644 --- a/deps/icu-small/source/common/unicode/platform.h +++ b/deps/icu-small/source/common/unicode/platform.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -841,6 +843,12 @@ * This is only used for non-ICU-API functions. * When a function is a public ICU API, * you must use the U_CAPI and U_EXPORT2 qualifiers. + * + * Please note, you need to use U_CALLCONV after the *. + * + * NO : "static const char U_CALLCONV *func( . . . )" + * YES: "static const char* U_CALLCONV func( . . . )" + * * @stable ICU 2.0 */ #if U_PLATFORM == U_PF_OS390 && defined(__cplusplus) diff --git a/deps/icu-small/source/common/unicode/ptypes.h b/deps/icu-small/source/common/unicode/ptypes.h index b7f711603282c3..69d7286d323e3d 100644 --- a/deps/icu-small/source/common/unicode/ptypes.h +++ b/deps/icu-small/source/common/unicode/ptypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/putil.h b/deps/icu-small/source/common/unicode/putil.h index 81d24c90081786..6f3250ed685fdc 100644 --- a/deps/icu-small/source/common/unicode/putil.h +++ b/deps/icu-small/source/common/unicode/putil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/rbbi.h b/deps/icu-small/source/common/unicode/rbbi.h index 0af960a9c94597..9f2a1a62b369d1 100644 --- a/deps/icu-small/source/common/unicode/rbbi.h +++ b/deps/icu-small/source/common/unicode/rbbi.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** -* Copyright (C) 1999-2014 International Business Machines Corporation * +* Copyright (C) 1999-2016 International Business Machines Corporation * * and others. All rights reserved. * *************************************************************************** @@ -56,15 +58,11 @@ struct RBBIStateTable; * *

See the ICU User Guide for information on Break Iterator Rules.

* - *

This class is not intended to be subclassed. (Class DictionaryBasedBreakIterator - * is a subclass, but that relationship is effectively internal to the ICU - * implementation. The subclassing interface to RulesBasedBreakIterator is - * not part of the ICU API, and may not remain stable.

- * + *

This class is not intended to be subclassed.

*/ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { -protected: +private: /** * The UText through which this BreakIterator accesses the text * @internal @@ -165,24 +163,10 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t fBreakType; -protected: //======================================================================= // constructors //======================================================================= -#ifndef U_HIDE_INTERNAL_API - /** - * Constant to be used in the constructor - * RuleBasedBreakIterator(RBBIDataHeader*, EDontAdopt, UErrorCode &); - * which does not adopt the memory indicated by the RBBIDataHeader* - * parameter. - * - * @internal - */ - enum EDontAdopt { - kDontAdopt - }; - /** * Constructor from a flattened set of RBBI data in malloced memory. * RulesBasedBreakIterators built from a custom set of rules @@ -195,17 +179,6 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ RuleBasedBreakIterator(RBBIDataHeader* data, UErrorCode &status); - /** - * Constructor from a flattened set of RBBI data in memory which need not - * be malloced (e.g. it may be a memory-mapped file, etc.). - * - * This version does not adopt the memory, and does not - * free it when done. - * @internal - */ - RuleBasedBreakIterator(const RBBIDataHeader* data, enum EDontAdopt dontAdopt, UErrorCode &status); -#endif /* U_HIDE_INTERNAL_API */ - friend class RBBIRuleBuilder; /** @internal */ @@ -402,6 +375,11 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { /** * Set the iterator to analyze a new piece of text. This function resets * the current iteration position to the beginning of the text. + * + * The BreakIterator will retain a reference to the supplied string. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param newText The text to analyze. * @stable ICU 2.0 */ @@ -661,7 +639,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { virtual RuleBasedBreakIterator &refreshInputText(UText *input, UErrorCode &status); -protected: +private: //======================================================================= // implementation //======================================================================= @@ -670,41 +648,19 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { * in text or iteration position. * @internal */ - virtual void reset(void); - -#if 0 - /** - * Return true if the category lookup for this char - * indicates that it is in the set of dictionary lookup chars. - * This function is intended for use by dictionary based break iterators. - * @return true if the category lookup for this char - * indicates that it is in the set of dictionary lookup chars. - * @internal - */ - virtual UBool isDictionaryChar(UChar32); - - /** - * Get the type of the break iterator. - * @internal - */ - virtual int32_t getBreakType() const; -#endif + void reset(void); /** * Set the type of the break iterator. * @internal */ - virtual void setBreakType(int32_t type); + void setBreakType(int32_t type); -#ifndef U_HIDE_INTERNAL_API /** * Common initialization function, used by constructors and bufferClone. * @internal */ void init(); -#endif /* U_HIDE_INTERNAL_API */ - -private: /** * This method backs the iterator back up to a "safe position" in the text. @@ -728,9 +684,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { */ int32_t handleNext(const RBBIStateTable *statetable); -protected: -#ifndef U_HIDE_INTERNAL_API /** * This is the function that actually implements dictionary-based * breaking. Covering at least the range from startPos to endPos, @@ -746,9 +700,7 @@ class U_COMMON_API RuleBasedBreakIterator /*U_FINAL*/ : public BreakIterator { * @internal */ int32_t checkDictionary(int32_t startPos, int32_t endPos, UBool reverse); -#endif /* U_HIDE_INTERNAL_API */ -private: /** * This function returns the appropriate LanguageBreakEngine for a diff --git a/deps/icu-small/source/common/unicode/rep.h b/deps/icu-small/source/common/unicode/rep.h index 21eb2918648749..8fa2332a71ca3e 100644 --- a/deps/icu-small/source/common/unicode/rep.h +++ b/deps/icu-small/source/common/unicode/rep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (C) 1999-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/resbund.h b/deps/icu-small/source/common/unicode/resbund.h index 8c979663622cfb..0d37d4209d6f44 100644 --- a/deps/icu-small/source/common/unicode/resbund.h +++ b/deps/icu-small/source/common/unicode/resbund.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/schriter.h b/deps/icu-small/source/common/unicode/schriter.h index 65042494a0ad89..b5fa32d0aecb8d 100644 --- a/deps/icu-small/source/common/unicode/schriter.h +++ b/deps/icu-small/source/common/unicode/schriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/simpleformatter.h b/deps/icu-small/source/common/unicode/simpleformatter.h index 7530cf796fcabe..2b74f5ca527ca2 100644 --- a/deps/icu-small/source/common/unicode/simpleformatter.h +++ b/deps/icu-small/source/common/unicode/simpleformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/std_string.h b/deps/icu-small/source/common/unicode/std_string.h index 05955c5d1e727f..104ef0c83e8cfe 100644 --- a/deps/icu-small/source/common/unicode/std_string.h +++ b/deps/icu-small/source/common/unicode/std_string.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/strenum.h b/deps/icu-small/source/common/unicode/strenum.h index 8defe2039b8d41..74ff28decc3df2 100644 --- a/deps/icu-small/source/common/unicode/strenum.h +++ b/deps/icu-small/source/common/unicode/strenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/stringpiece.h b/deps/icu-small/source/common/unicode/stringpiece.h index 1df790562e801c..43864ad81a8292 100644 --- a/deps/icu-small/source/common/unicode/stringpiece.h +++ b/deps/icu-small/source/common/unicode/stringpiece.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (C) 2009-2013, International Business Machines // Corporation and others. All Rights Reserved. // @@ -40,9 +42,9 @@ U_NAMESPACE_BEGIN * in a "const char*" or a "string" wherever a "StringPiece" is * expected. * - * Functions or methods may use const StringPiece& parameters to accept either - * a "const char*" or a "string" value that will be implicitly converted to - * a StringPiece. + * Functions or methods may use StringPiece parameters to accept either a + * "const char*" or a "string" value that will be implicitly converted to a + * StringPiece. * * Systematic usage of StringPiece is encouraged as it will reduce unnecessary * conversions from "const char*" to "string" and back again. diff --git a/deps/icu-small/source/common/unicode/stringtriebuilder.h b/deps/icu-small/source/common/unicode/stringtriebuilder.h index 1749ef4bf7c7c9..c2839fe53f29ff 100644 --- a/deps/icu-small/source/common/unicode/stringtriebuilder.h +++ b/deps/icu-small/source/common/unicode/stringtriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012,2014, International Business Machines @@ -184,7 +186,8 @@ class U_COMMON_API StringTrieBuilder : public UObject { /** @internal */ UHashtable *nodes; -#ifndef U_HIDE_INTERNAL_API + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** @internal */ class Node : public UObject { public: @@ -243,6 +246,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { int32_t offset; }; +#ifndef U_HIDE_INTERNAL_API // This class should not be overridden because // registerFinalValue() compares a stack-allocated FinalValueNode // (stack-allocated so that we don't unnecessarily create lots of duplicate nodes) @@ -258,7 +262,10 @@ class U_COMMON_API StringTrieBuilder : public UObject { protected: int32_t value; }; +#endif /* U_HIDE_INTERNAL_API */ + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** * @internal */ @@ -276,6 +283,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { int32_t value; }; +#ifndef U_HIDE_INTERNAL_API /** * @internal */ @@ -289,7 +297,10 @@ class U_COMMON_API StringTrieBuilder : public UObject { protected: Node *next; }; +#endif /* U_HIDE_INTERNAL_API */ + // Do not conditionalize the following with #ifndef U_HIDE_INTERNAL_API, + // it is needed for layout of other objects. /** * @internal */ @@ -305,6 +316,7 @@ class U_COMMON_API StringTrieBuilder : public UObject { Node *next; }; +#ifndef U_HIDE_INTERNAL_API /** * @internal */ diff --git a/deps/icu-small/source/common/unicode/symtable.h b/deps/icu-small/source/common/unicode/symtable.h index bc34dde51b4cf2..829c8105d05d85 100644 --- a/deps/icu-small/source/common/unicode/symtable.h +++ b/deps/icu-small/source/common/unicode/symtable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2005, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ubidi.h b/deps/icu-small/source/common/unicode/ubidi.h index 27042ed7f4b94e..e59969861f3402 100644 --- a/deps/icu-small/source/common/unicode/ubidi.h +++ b/deps/icu-small/source/common/unicode/ubidi.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -718,9 +720,13 @@ typedef enum UBiDiReorderingMode { * UBIDI_REORDER_NUMBERS_SPECIAL Bidi algorithm. * @stable ICU 3.6 */ UBIDI_REORDER_INVERSE_FOR_NUMBERS_SPECIAL, - /** Number of values for reordering mode. - * @stable ICU 3.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of values for reordering mode. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UBIDI_REORDER_COUNT +#endif // U_HIDE_DEPRECATED_API } UBiDiReorderingMode; /** @@ -1959,13 +1965,19 @@ U_STABLE int32_t U_EXPORT2 ubidi_getResultLength(const UBiDi *pBiDi); U_CDECL_BEGIN + +#ifndef U_HIDE_DEPRECATED_API /** - * value returned by UBiDiClassCallback callbacks when + * Value returned by UBiDiClassCallback callbacks when * there is no need to override the standard Bidi class for a given code point. + * + * This constant is deprecated; use u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 instead. + * * @see UBiDiClassCallback - * @stable ICU 3.6 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ #define U_BIDI_CLASS_DEFAULT U_CHAR_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API /** * Callback type declaration for overriding default Bidi class values with @@ -1981,8 +1993,8 @@ U_CDECL_BEGIN * * @return The directional property / Bidi class for the given code point * c if the default class has been overridden, or - * #U_BIDI_CLASS_DEFAULT if the standard Bidi class value - * for c is to be used. + * #U_BIDI_CLASS_DEFAULT=u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1 + * if the standard Bidi class value for c is to be used. * @see ubidi_setClassCallback * @see ubidi_getClassCallback * @stable ICU 3.6 @@ -1995,8 +2007,8 @@ U_CDECL_END /** * Retrieve the Bidi class for a given code point. *

If a #UBiDiClassCallback callback is defined and returns a - * value other than #U_BIDI_CLASS_DEFAULT, that value is used; - * otherwise the default class determination mechanism is invoked.

+ * value other than #U_BIDI_CLASS_DEFAULT=u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS)+1, + * that value is used; otherwise the default class determination mechanism is invoked.

* * @param pBiDi is the paragraph UBiDi object. * diff --git a/deps/icu-small/source/common/unicode/ubiditransform.h b/deps/icu-small/source/common/unicode/ubiditransform.h new file mode 100644 index 00000000000000..509f68bcc012e0 --- /dev/null +++ b/deps/icu-small/source/common/unicode/ubiditransform.h @@ -0,0 +1,321 @@ +/* +****************************************************************************** +* +* Copyright (C) 2016 and later: Unicode, Inc. and others. +* License & terms of use: http://www.unicode.org/copyright.html +* +****************************************************************************** +* file name: ubiditransform.h +* encoding: US-ASCII +* tab size: 8 (not used) +* indentation:4 +* +* created on: 2016jul24 +* created by: Lina Kemmel +* +*/ + +#ifndef UBIDITRANSFORM_H +#define UBIDITRANSFORM_H + +#include "unicode/utypes.h" +#include "unicode/ubidi.h" +#include "unicode/uchar.h" +#include "unicode/localpointer.h" + +#ifndef U_HIDE_DRAFT_API + +/** + * \file + * \brief Bidi Transformations + * + * UBiDiOrder indicates the order of text.

+ * This bidi transformation engine supports all possible combinations (4 in + * total) of input and output text order: + *

    + *
  • : unless the output direction is RTL, this + * corresponds to a normal operation of the Bidi algorithm as described in the + * Unicode Technical Report and implemented by UBiDi when the + * reordering mode is set to UBIDI_REORDER_DEFAULT. Visual RTL + * mode is not supported by UBiDi and is accomplished through + * reversing a visual LTR string,
  • + *
  • : unless the input direction is RTL, this + * corresponds to an "inverse bidi algorithm" in UBiDi with the + * reordering mode set to UBIDI_REORDER_INVERSE_LIKE_DIRECT. + * Visual RTL mode is not not supported by UBiDi and is + * accomplished through reversing a visual LTR string,
  • + *
  • : if the input and output base directions + * mismatch, this corresponds to the UBiDi implementation with the + * reordering mode set to UBIDI_REORDER_RUNS_ONLY; and if the + * input and output base directions are identical, the transformation engine + * will only handle character mirroring and Arabic shaping operations without + * reordering,
  • + *
  • : this reordering mode is not supported by + * the UBiDi engine; it implies character mirroring, Arabic + * shaping, and - if the input/output base directions mismatch - string + * reverse operations.
  • + *
+ * @see ubidi_setInverse + * @see ubidi_setReorderingMode + * @see UBIDI_REORDER_DEFAULT + * @see UBIDI_REORDER_INVERSE_LIKE_DIRECT + * @see UBIDI_REORDER_RUNS_ONLY + * @draft ICU 58 + */ +typedef enum { + /** 0: Constant indicating a logical order. + * This is the default for input text. + * @draft ICU 58 + */ + UBIDI_LOGICAL = 0, + /** 1: Constant indicating a visual order. + * This is a default for output text. + * @draft ICU 58 + */ + UBIDI_VISUAL +} UBiDiOrder; + +/** + * UBiDiMirroring indicates whether or not characters with the + * "mirrored" property in RTL runs should be replaced with their mirror-image + * counterparts. + * @see UBIDI_DO_MIRRORING + * @see ubidi_setReorderingOptions + * @see ubidi_writeReordered + * @see ubidi_writeReverse + * @draft ICU 58 + */ +typedef enum { + /** 0: Constant indicating that character mirroring should not be + * performed. + * This is the default. + * @draft ICU 58 + */ + UBIDI_MIRRORING_OFF = 0, + /** 1: Constant indicating that character mirroring should be performed. + * This corresponds to calling ubidi_writeReordered or + * ubidi_writeReverse with the + * UBIDI_DO_MIRRORING option bit set. + * @draft ICU 58 + */ + UBIDI_MIRRORING_ON +} UBiDiMirroring; + +/** + * Forward declaration of the UBiDiTransform structure that stores + * information used by the layout transformation engine. + * @draft ICU 58 + */ +typedef struct UBiDiTransform UBiDiTransform; + +/** + * Performs transformation of text from the bidi layout defined by the input + * ordering scheme to the bidi layout defined by the output ordering scheme, + * and applies character mirroring and Arabic shaping operations.

+ * In terms of UBiDi, such a transformation implies: + *

    + *
  • calling ubidi_setReorderingMode as needed (when the + * reordering mode is other than normal),
  • + *
  • calling ubidi_setInverse as needed (when text should be + * transformed from a visual to a logical form),
  • + *
  • resolving embedding levels of each character in the input text by + * calling ubidi_setPara,
  • + *
  • reordering the characters based on the computed embedding levels, also + * performing character mirroring as needed, and streaming the result to the + * output, by calling ubidi_writeReordered,
  • + *
  • performing Arabic digit and letter shaping on the output text by calling + * u_shapeArabic.
  • + *
+ * An "ordering scheme" encompasses the base direction and the order of text, + * and these characteristics must be defined by the caller for both input and + * output explicitly .

+ * There are 36 possible combinations of ordering schemes, + * which are partially supported by UBiDi already. Examples of the + * currently supported combinations: + *

    + *
  • : this is equivalent to calling + * ubidi_setPara with paraLevel == UBIDI_LTR,
  • + *
  • : this is equivalent to calling + * ubidi_setPara with paraLevel == UBIDI_RTL,
  • + *
  • : this is equivalent to + * calling ubidi_setPara with + * paraLevel == UBIDI_DEFAULT_LTR,
  • + *
  • : this is equivalent to + * calling ubidi_setPara with + * paraLevel == UBIDI_DEFAULT_RTL,
  • + *
  • : this is equivalent to + * calling ubidi_setInverse(UBiDi*, TRUE) and then + * ubidi_setPara with paraLevel == UBIDI_LTR,
  • + *
  • : this is equivalent to + * calling ubidi_setInverse(UBiDi*, TRUE) and then + * ubidi_setPara with paraLevel == UBIDI_RTL.
  • + *
+ * All combinations that involve the Visual RTL scheme are unsupported by + * UBiDi, for instance: + *
    + *
  • ,
  • + *
  • .
  • + *
+ *

Example of usage of the transformation engine:
+ *

+ * \code
+ * UChar text1[] = {'a', 'b', 'c', 0x0625, '1', 0};
+ * UChar text2[] = {'a', 'b', 'c', 0x0625, '1', 0};
+ * UErrorCode errorCode = U_ZERO_ERROR;
+ * // Run a transformation.
+ * ubiditransform_transform(pBidiTransform,
+ *          text1, -1, text2, -1,
+ *          UBIDI_LTR, UBIDI_VISUAL,
+ *          UBIDI_RTL, UBIDI_LOGICAL,
+ *          UBIDI_MIRRORING_OFF,
+ *          U_SHAPE_DIGITS_AN2EN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
+ *          &errorCode);
+ * // Do something with text2.
+ *  text2[4] = '2';
+ * // Run a reverse transformation.
+ * ubiditransform_transform(pBidiTransform,
+ *          text2, -1, text1, -1,
+ *          UBIDI_RTL, UBIDI_LOGICAL,
+ *          UBIDI_LTR, UBIDI_VISUAL,
+ *          UBIDI_MIRRORING_OFF,
+ *          U_SHAPE_DIGITS_EN2AN | U_SHAPE_DIGIT_TYPE_AN_EXTENDED,
+ *          &errorCode);
+ *\endcode
+ * 
+ *

+ * + * @param pBiDiTransform A pointer to a UBiDiTransform object + * allocated with ubiditransform_open() or + * NULL.

+ * This object serves for one-time setup to amortize initialization + * overheads. Use of this object is not thread-safe. All other threads + * should allocate a new UBiDiTransform object by calling + * ubiditransform_open() before using it. Alternatively, + * a caller can set this parameter to NULL, in which case + * the object will be allocated by the engine on the fly.

+ * @param src A pointer to the text that the Bidi layout transformations will + * be performed on. + *

Note: the text must be (at least) + * srcLength long.

+ * @param srcLength The length of the text, in number of UChars. If + * length == -1 then the text must be zero-terminated. + * @param dest A pointer to where the processed text is to be copied. + * @param destSize The size of the dest buffer, in number of + * UChars. If the U_SHAPE_LETTERS_UNSHAPE option is set, + * then the destination length could be as large as + * srcLength * 2. Otherwise, the destination length will + * not exceed srcLength. If the caller reserves the last + * position for zero-termination, it should be excluded from + * destSize. + *

destSize == -1 is allowed and makes sense when + * dest was holds some meaningful value, e.g. that of + * src. In this case dest must be + * zero-terminated.

+ * @param inParaLevel A base embedding level of the input as defined in + * ubidi_setPara documentation for the + * paraLevel parameter. + * @param inOrder An order of the input, which can be one of the + * UBiDiOrder values. + * @param outParaLevel A base embedding level of the output as defined in + * ubidi_setPara documentation for the + * paraLevel parameter. + * @param outOrder An order of the output, which can be one of the + * UBiDiOrder values. + * @param doMirroring Indicates whether or not to perform character mirroring, + * and can accept one of the UBiDiMirroring values. + * @param shapingOptions Arabic digit and letter shaping options defined in the + * ushape.h documentation. + *

Note: Direction indicator options are computed by + * the transformation engine based on the effective ordering schemes, so + * user-defined direction indicators will be ignored.

+ * @param pErrorCode A pointer to an error code value. + * + * @return The destination length, i.e. the number of UChars written to + * dest. If the transformation fails, the return value + * will be 0 (and the error code will be written to + * pErrorCode). + * + * @see UBiDiLevel + * @see UBiDiOrder + * @see UBiDiMirroring + * @see ubidi_setPara + * @see u_shapeArabic + * @draft ICU 58 + */ +U_DRAFT uint32_t U_EXPORT2 +ubiditransform_transform(UBiDiTransform *pBiDiTransform, + const UChar *src, int32_t srcLength, + UChar *dest, int32_t destSize, + UBiDiLevel inParaLevel, UBiDiOrder inOrder, + UBiDiLevel outParaLevel, UBiDiOrder outOrder, + UBiDiMirroring doMirroring, uint32_t shapingOptions, + UErrorCode *pErrorCode); + +/** + * Allocates a UBiDiTransform object. This object can be reused, + * e.g. with different ordering schemes, mirroring or shaping options.

+ * Note:The object can only be reused in the same thread. + * All other threads should allocate a new UBiDiTransform object + * before using it.

+ * Example of usage:

+ *

+ * \code
+ * UErrorCode errorCode = U_ZERO_ERROR;
+ * // Open a new UBiDiTransform.
+ * UBiDiTransform* transform = ubiditransform_open(&errorCode);
+ * // Run a transformation.
+ * ubiditransform_transform(transform,
+ *          text1, -1, text2, -1,
+ *          UBIDI_RTL, UBIDI_LOGICAL,
+ *          UBIDI_LTR, UBIDI_VISUAL,
+ *          UBIDI_MIRRORING_ON,
+ *          U_SHAPE_DIGITS_EN2AN,
+ *          &errorCode);
+ * // Do something with the output text and invoke another transformation using
+ * //   that text as input.
+ * ubiditransform_transform(transform,
+ *          text2, -1, text3, -1,
+ *          UBIDI_LTR, UBIDI_VISUAL,
+ *          UBIDI_RTL, UBIDI_VISUAL,
+ *          UBIDI_MIRRORING_ON,
+ *          0, &errorCode);
+ *\endcode
+ * 
+ *

+ * The UBiDiTransform object must be deallocated by calling + * ubiditransform_close(). + * + * @return An empty UBiDiTransform object. + * @draft ICU 58 + */ +U_DRAFT UBiDiTransform* U_EXPORT2 +ubiditransform_open(UErrorCode *pErrorCode); + +/** + * Deallocates the given UBiDiTransform object. + * @draft ICU 58 + */ +U_DRAFT void U_EXPORT2 +ubiditransform_close(UBiDiTransform *pBidiTransform); + +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUBiDiTransformPointer + * "Smart pointer" class, closes a UBiDiTransform via ubiditransform_close(). + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 58 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUBiDiTransformPointer, UBiDiTransform, ubiditransform_close); + +U_NAMESPACE_END + +#endif + +#endif /* U_HIDE_DRAFT_API */ +#endif diff --git a/deps/icu-small/source/common/unicode/ubrk.h b/deps/icu-small/source/common/unicode/ubrk.h index 59f0ed181f8458..f43943ed1ab12c 100644 --- a/deps/icu-small/source/common/unicode/ubrk.h +++ b/deps/icu-small/source/common/unicode/ubrk.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2015, International Business Machines Corporation and others. @@ -114,8 +116,12 @@ typedef enum UBreakIteratorType { * @deprecated ICU 2.8 Use the word break iterator for titlecasing for Unicode 4 and later. */ UBRK_TITLE = 4, -#endif /* U_HIDE_DEPRECATED_API */ - UBRK_COUNT = 5 + /** + * One more than the highest normal UBreakIteratorType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UBRK_COUNT = 5 +#endif // U_HIDE_DEPRECATED_API } UBreakIteratorType; /** Value indicating all text boundaries have been returned. @@ -130,7 +136,10 @@ typedef enum UBreakIteratorType { * word, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.2 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.2 */ typedef enum UWordBreak { /** Tag value for "words" that do not fit into any of other categories. @@ -163,7 +172,10 @@ typedef enum UWordBreak { * word, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.8 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.8 */ typedef enum ULineBreakTag { /** Tag value for soft line breaks, positions at which a line break @@ -185,7 +197,10 @@ typedef enum ULineBreakTag { * sentence, to allow for further subdivisions of a category in future releases. * Applications should check for tag values falling within the range, rather * than for single individual values. - * @stable ICU 2.8 + * + * The numeric values of all of these constants are stable (will not change). + * + * @stable ICU 2.8 */ typedef enum USentenceBreakTag { /** Tag value for for sentences ending with a sentence terminator @@ -316,7 +331,11 @@ U_NAMESPACE_END #endif /** - * Sets an existing iterator to point to a new piece of text + * Sets an existing iterator to point to a new piece of text. + * The break iterator retains a pointer to the supplied text. + * The caller must not modify or delete the text while the BreakIterator + * retains the reference. + * * @param bi The iterator to use * @param text The text to be set * @param textLength The length of the text diff --git a/deps/icu-small/source/common/unicode/ucasemap.h b/deps/icu-small/source/common/unicode/ucasemap.h index b37e16588697f1..d7345e8a402ab6 100644 --- a/deps/icu-small/source/common/unicode/ucasemap.h +++ b/deps/icu-small/source/common/unicode/ucasemap.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/ucat.h b/deps/icu-small/source/common/unicode/ucat.h index 875477c2138b07..418b64fa19d919 100644 --- a/deps/icu-small/source/common/unicode/ucat.h +++ b/deps/icu-small/source/common/unicode/ucat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2004, International Business Machines diff --git a/deps/icu-small/source/common/unicode/uchar.h b/deps/icu-small/source/common/unicode/uchar.h index 61835840a33c0a..7f6ea6d9343ab7 100644 --- a/deps/icu-small/source/common/unicode/uchar.h +++ b/deps/icu-small/source/common/unicode/uchar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -39,7 +41,7 @@ U_CDECL_BEGIN * @see u_getUnicodeVersion * @stable ICU 2.0 */ -#define U_UNICODE_VERSION "8.0" +#define U_UNICODE_VERSION "9.0" /** * \file @@ -427,8 +429,13 @@ typedef enum UProperty { */ UCHAR_EMOJI_MODIFIER_BASE=60, #endif /* U_HIDE_DRAFT_API */ - /** One more than the last constant for binary Unicode properties. @stable ICU 2.1 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for binary Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_BINARY_LIMIT=61, +#endif // U_HIDE_DEPRECATED_API /** Enumerated property Bidi_Class. Same as u_charDirection, returns UCharDirection values. @stable ICU 2.2 */ @@ -515,8 +522,13 @@ typedef enum UProperty { (http://www.unicode.org/reports/tr9/) Returns UBidiPairedBracketType values. @stable ICU 52 */ UCHAR_BIDI_PAIRED_BRACKET_TYPE=0x1015, - /** One more than the last constant for enumerated/integer Unicode properties. @stable ICU 2.2 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for enumerated/integer Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_INT_LIMIT=0x1016, +#endif // U_HIDE_DEPRECATED_API /** Bitmask property General_Category_Mask. This is the General_Category property returned as a bit mask. @@ -529,16 +541,26 @@ typedef enum UProperty { UCHAR_GENERAL_CATEGORY_MASK=0x2000, /** First constant for bit-mask Unicode properties. @stable ICU 2.4 */ UCHAR_MASK_START=UCHAR_GENERAL_CATEGORY_MASK, - /** One more than the last constant for bit-mask Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for bit-mask Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_MASK_LIMIT=0x2001, +#endif // U_HIDE_DEPRECATED_API /** Double property Numeric_Value. Corresponds to u_getNumericValue. @stable ICU 2.4 */ UCHAR_NUMERIC_VALUE=0x3000, /** First constant for double Unicode properties. @stable ICU 2.4 */ UCHAR_DOUBLE_START=UCHAR_NUMERIC_VALUE, - /** One more than the last constant for double Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for double Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_DOUBLE_LIMIT=0x3001, +#endif // U_HIDE_DEPRECATED_API /** String property Age. Corresponds to u_charAge. @stable ICU 2.4 */ @@ -590,8 +612,13 @@ typedef enum UProperty { /** String property Bidi_Paired_Bracket (new in Unicode 6.3). Corresponds to u_getBidiPairedBracket. @stable ICU 52 */ UCHAR_BIDI_PAIRED_BRACKET=0x400D, - /** One more than the last constant for string Unicode properties. @stable ICU 2.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for string Unicode properties. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_STRING_LIMIT=0x400E, +#endif // U_HIDE_DEPRECATED_API /** Miscellaneous property Script_Extensions (new in Unicode 6.0). Some characters are commonly used in multiple scripts. @@ -601,9 +628,14 @@ typedef enum UProperty { UCHAR_SCRIPT_EXTENSIONS=0x7000, /** First constant for Unicode properties with unusual value types. @stable ICU 4.6 */ UCHAR_OTHER_PROPERTY_START=UCHAR_SCRIPT_EXTENSIONS, - /** One more than the last constant for Unicode properties with unusual value types. - * @stable ICU 4.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the last constant for Unicode properties with unusual value types. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCHAR_OTHER_PROPERTY_LIMIT=0x7001, +#endif // U_HIDE_DEPRECATED_API + /** Represents a nonexistent or invalid property or property value. @stable ICU 2.4 */ UCHAR_INVALID_CODE = -1 } UProperty; @@ -684,7 +716,13 @@ typedef enum UCharCategory U_INITIAL_PUNCTUATION = 28, /** Pf @stable ICU 2.0 */ U_FINAL_PUNCTUATION = 29, - /** One higher than the last enum UCharCategory constant. @stable ICU 2.0 */ + /** + * One higher than the last enum UCharCategory constant. + * This numeric value is stable (will not change), see + * http://www.unicode.org/policies/stability_policy.html#Property_Value + * + * @stable ICU 2.0 + */ U_CHAR_CATEGORY_COUNT } UCharCategory; @@ -858,8 +896,15 @@ typedef enum UCharDirection { U_RIGHT_TO_LEFT_ISOLATE = 21, /** PDI @stable ICU 52 */ U_POP_DIRECTIONAL_ISOLATE = 22, - /** @stable ICU 2.0 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest UCharDirection value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_CLASS). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_CHAR_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API } UCharDirection; /** @@ -881,8 +926,15 @@ typedef enum UBidiPairedBracketType { U_BPT_OPEN, /** Close paired bracket. @stable ICU 52 */ U_BPT_CLOSE, - /** @stable ICU 52 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UBidiPairedBracketType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BIDI_PAIRED_BRACKET_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_BPT_COUNT /* 3 */ +#endif // U_HIDE_DEPRECATED_API } UBidiPairedBracketType; /** @@ -1572,8 +1624,40 @@ enum UBlockCode { /** @stable ICU 56 */ UBLOCK_SUTTON_SIGNWRITING = 262, /*[1D800]*/ - /** @stable ICU 2.0 */ - UBLOCK_COUNT = 263, + /* New blocks in Unicode 9.0 */ + + /** @stable ICU 58 */ + UBLOCK_ADLAM = 263, /*[1E900]*/ + /** @stable ICU 58 */ + UBLOCK_BHAIKSUKI = 264, /*[11C00]*/ + /** @stable ICU 58 */ + UBLOCK_CYRILLIC_EXTENDED_C = 265, /*[1C80]*/ + /** @stable ICU 58 */ + UBLOCK_GLAGOLITIC_SUPPLEMENT = 266, /*[1E000]*/ + /** @stable ICU 58 */ + UBLOCK_IDEOGRAPHIC_SYMBOLS_AND_PUNCTUATION = 267, /*[16FE0]*/ + /** @stable ICU 58 */ + UBLOCK_MARCHEN = 268, /*[11C70]*/ + /** @stable ICU 58 */ + UBLOCK_MONGOLIAN_SUPPLEMENT = 269, /*[11660]*/ + /** @stable ICU 58 */ + UBLOCK_NEWA = 270, /*[11400]*/ + /** @stable ICU 58 */ + UBLOCK_OSAGE = 271, /*[104B0]*/ + /** @stable ICU 58 */ + UBLOCK_TANGUT = 272, /*[17000]*/ + /** @stable ICU 58 */ + UBLOCK_TANGUT_COMPONENTS = 273, /*[18800]*/ + +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UBlockCode value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_BLOCK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UBLOCK_COUNT = 274, +#endif // U_HIDE_DEPRECATED_API /** @stable ICU 2.0 */ UBLOCK_INVALID_CODE=-1 @@ -1602,7 +1686,15 @@ typedef enum UEastAsianWidth { U_EA_FULLWIDTH, /*[F]*/ U_EA_NARROW, /*[Na]*/ U_EA_WIDE, /*[W]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UEastAsianWidth value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_EAST_ASIAN_WIDTH). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_EA_COUNT +#endif // U_HIDE_DEPRECATED_API } UEastAsianWidth; /** @@ -1631,8 +1723,13 @@ typedef enum UCharNameChoice { U_EXTENDED_CHAR_NAME = U_UNICODE_CHAR_NAME+2, /** Corrected name from NameAliases.txt. @stable ICU 4.4 */ U_CHAR_NAME_ALIAS, - /** @stable ICU 2.0 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UCharNameChoice value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_CHAR_NAME_CHOICE_COUNT +#endif // U_HIDE_DEPRECATED_API } UCharNameChoice; /** @@ -1651,7 +1748,13 @@ typedef enum UCharNameChoice { typedef enum UPropertyNameChoice { U_SHORT_PROPERTY_NAME, U_LONG_PROPERTY_NAME, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UPropertyNameChoice value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_PROPERTY_NAME_CHOICE_COUNT +#endif // U_HIDE_DEPRECATED_API } UPropertyNameChoice; /** @@ -1685,7 +1788,15 @@ typedef enum UDecompositionType { U_DT_SUPER, /*[sup]*/ U_DT_VERTICAL, /*[vert]*/ U_DT_WIDE, /*[wide]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDecompositionType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_DECOMPOSITION_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_DT_COUNT /* 18 */ +#endif // U_HIDE_DEPRECATED_API } UDecompositionType; /** @@ -1707,7 +1818,15 @@ typedef enum UJoiningType { U_JT_LEFT_JOINING, /*[L]*/ U_JT_RIGHT_JOINING, /*[R]*/ U_JT_TRANSPARENT, /*[T]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UJoiningType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_JT_COUNT /* 6 */ +#endif // U_HIDE_DEPRECATED_API } UJoiningType; /** @@ -1810,7 +1929,18 @@ typedef enum UJoiningGroup { U_JG_MANICHAEAN_YODH, /**< @stable ICU 54 */ U_JG_MANICHAEAN_ZAYIN, /**< @stable ICU 54 */ U_JG_STRAIGHT_WAW, /**< @stable ICU 54 */ + U_JG_AFRICAN_FEH, /**< @stable ICU 58 */ + U_JG_AFRICAN_NOON, /**< @stable ICU 58 */ + U_JG_AFRICAN_QAF, /**< @stable ICU 58 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UJoiningGroup value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_JOINING_GROUP). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_JG_COUNT +#endif // U_HIDE_DEPRECATED_API } UJoiningGroup; /** @@ -1836,10 +1966,31 @@ typedef enum UGraphemeClusterBreak { U_GCB_LVT = 7, /*[LVT]*/ U_GCB_T = 8, /*[T]*/ U_GCB_V = 9, /*[V]*/ + /** @stable ICU 4.0 */ U_GCB_SPACING_MARK = 10, /*[SM]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ + /** @stable ICU 4.0 */ U_GCB_PREPEND = 11, /*[PP]*/ + /** @stable ICU 50 */ U_GCB_REGIONAL_INDICATOR = 12, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - U_GCB_COUNT = 13 + /** @stable ICU 58 */ + U_GCB_E_BASE = 13, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_GCB_E_BASE_GAZ = 14, /*[EBG]*/ + /** @stable ICU 58 */ + U_GCB_E_MODIFIER = 15, /*[EM]*/ + /** @stable ICU 58 */ + U_GCB_GLUE_AFTER_ZWJ = 16, /*[GAZ]*/ + /** @stable ICU 58 */ + U_GCB_ZWJ = 17, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UGraphemeClusterBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_GRAPHEME_CLUSTER_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_GCB_COUNT = 18 +#endif // U_HIDE_DEPRECATED_API } UGraphemeClusterBreak; /** @@ -1864,16 +2015,43 @@ typedef enum UWordBreakValues { U_WB_MIDNUM = 5, /*[MN]*/ U_WB_NUMERIC = 6, /*[NU]*/ U_WB_EXTENDNUMLET = 7, /*[EX]*/ + /** @stable ICU 4.0 */ U_WB_CR = 8, /*[CR]*/ /* from here on: new in Unicode 5.1/ICU 4.0 */ + /** @stable ICU 4.0 */ U_WB_EXTEND = 9, /*[Extend]*/ + /** @stable ICU 4.0 */ U_WB_LF = 10, /*[LF]*/ + /** @stable ICU 4.0 */ U_WB_MIDNUMLET =11, /*[MB]*/ + /** @stable ICU 4.0 */ U_WB_NEWLINE =12, /*[NL]*/ + /** @stable ICU 50 */ U_WB_REGIONAL_INDICATOR = 13, /*[RI]*/ /* new in Unicode 6.2/ICU 50 */ + /** @stable ICU 52 */ U_WB_HEBREW_LETTER = 14, /*[HL]*/ /* from here on: new in Unicode 6.3/ICU 52 */ + /** @stable ICU 52 */ U_WB_SINGLE_QUOTE = 15, /*[SQ]*/ + /** @stable ICU 52 */ U_WB_DOUBLE_QUOTE = 16, /*[DQ]*/ - U_WB_COUNT = 17 + /** @stable ICU 58 */ + U_WB_E_BASE = 17, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_WB_E_BASE_GAZ = 18, /*[EBG]*/ + /** @stable ICU 58 */ + U_WB_E_MODIFIER = 19, /*[EM]*/ + /** @stable ICU 58 */ + U_WB_GLUE_AFTER_ZWJ = 20, /*[GAZ]*/ + /** @stable ICU 58 */ + U_WB_ZWJ = 21, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UWordBreakValues value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_WORD_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_WB_COUNT = 22 +#endif // U_HIDE_DEPRECATED_API } UWordBreakValues; /** @@ -1904,7 +2082,15 @@ typedef enum USentenceBreak { U_SB_EXTEND = 12, /*[EX]*/ U_SB_LF = 13, /*[LF]*/ U_SB_SCONTINUE = 14, /*[SC]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal USentenceBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SENTENCE_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_SB_COUNT = 15 +#endif // U_HIDE_DEPRECATED_API } USentenceBreak; /** @@ -1951,18 +2137,43 @@ typedef enum ULineBreak { U_LB_SPACE = 26, /*[SP]*/ U_LB_BREAK_SYMBOLS = 27, /*[SY]*/ U_LB_ZWSPACE = 28, /*[ZW]*/ + /** @stable ICU 2.6 */ U_LB_NEXT_LINE = 29, /*[NL]*/ /* from here on: new in Unicode 4/ICU 2.6 */ + /** @stable ICU 2.6 */ U_LB_WORD_JOINER = 30, /*[WJ]*/ + /** @stable ICU 3.4 */ U_LB_H2 = 31, /*[H2]*/ /* from here on: new in Unicode 4.1/ICU 3.4 */ + /** @stable ICU 3.4 */ U_LB_H3 = 32, /*[H3]*/ + /** @stable ICU 3.4 */ U_LB_JL = 33, /*[JL]*/ + /** @stable ICU 3.4 */ U_LB_JT = 34, /*[JT]*/ + /** @stable ICU 3.4 */ U_LB_JV = 35, /*[JV]*/ + /** @stable ICU 4.4 */ U_LB_CLOSE_PARENTHESIS = 36, /*[CP]*/ /* new in Unicode 5.2/ICU 4.4 */ + /** @stable ICU 49 */ U_LB_CONDITIONAL_JAPANESE_STARTER = 37,/*[CJ]*/ /* new in Unicode 6.1/ICU 49 */ + /** @stable ICU 49 */ U_LB_HEBREW_LETTER = 38, /*[HL]*/ /* new in Unicode 6.1/ICU 49 */ + /** @stable ICU 50 */ U_LB_REGIONAL_INDICATOR = 39,/*[RI]*/ /* new in Unicode 6.2/ICU 50 */ - U_LB_COUNT = 40 + /** @stable ICU 58 */ + U_LB_E_BASE = 40, /*[EB]*/ /* from here on: new in Unicode 9.0/ICU 58 */ + /** @stable ICU 58 */ + U_LB_E_MODIFIER = 41, /*[EM]*/ + /** @stable ICU 58 */ + U_LB_ZWJ = 42, /*[ZWJ]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULineBreak value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_LINE_BREAK). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_LB_COUNT = 43 +#endif // U_HIDE_DEPRECATED_API } ULineBreak; /** @@ -1982,7 +2193,15 @@ typedef enum UNumericType { U_NT_DECIMAL, /*[de]*/ U_NT_DIGIT, /*[di]*/ U_NT_NUMERIC, /*[nu]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumericType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_NUMERIC_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_NT_COUNT +#endif // U_HIDE_DEPRECATED_API } UNumericType; /** @@ -2004,7 +2223,15 @@ typedef enum UHangulSyllableType { U_HST_TRAILING_JAMO, /*[T]*/ U_HST_LV_SYLLABLE, /*[LV]*/ U_HST_LVT_SYLLABLE, /*[LVT]*/ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UHangulSyllableType value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_HANGUL_SYLLABLE_TYPE). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_HST_COUNT +#endif // U_HIDE_DEPRECATED_API } UHangulSyllableType; /** diff --git a/deps/icu-small/source/common/unicode/ucharstrie.h b/deps/icu-small/source/common/unicode/ucharstrie.h index 0575a974d0c957..8daed447cedab1 100644 --- a/deps/icu-small/source/common/unicode/ucharstrie.h +++ b/deps/icu-small/source/common/unicode/ucharstrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucharstriebuilder.h b/deps/icu-small/source/common/unicode/ucharstriebuilder.h index f7a8039b776729..cc9fb77a9176e0 100644 --- a/deps/icu-small/source/common/unicode/ucharstriebuilder.h +++ b/deps/icu-small/source/common/unicode/ucharstriebuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/uchriter.h b/deps/icu-small/source/common/unicode/uchriter.h index bf8f2a8cdd1b05..1365c9b7d1a0ae 100644 --- a/deps/icu-small/source/common/unicode/uchriter.h +++ b/deps/icu-small/source/common/unicode/uchriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2005, International Business Machines diff --git a/deps/icu-small/source/common/unicode/uclean.h b/deps/icu-small/source/common/unicode/uclean.h index ad16158e6c5f38..6a5a4f42b6c886 100644 --- a/deps/icu-small/source/common/unicode/uclean.h +++ b/deps/icu-small/source/common/unicode/uclean.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucnv.h b/deps/icu-small/source/common/unicode/ucnv.h index 564656c284f8e0..767c1a2a7f44f1 100644 --- a/deps/icu-small/source/common/unicode/ucnv.h +++ b/deps/icu-small/source/common/unicode/ucnv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines @@ -941,8 +943,13 @@ typedef enum UConverterUnicodeSet { UCNV_ROUNDTRIP_SET, /** Select the set of Unicode code points with roundtrip or fallback mappings. @stable ICU 4.0 */ UCNV_ROUNDTRIP_AND_FALLBACK_SET, - /** Number of UConverterUnicodeSet selectors. @stable ICU 2.6 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of UConverterUnicodeSet selectors. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCNV_SET_COUNT +#endif // U_HIDE_DEPRECATED_API } UConverterUnicodeSet; diff --git a/deps/icu-small/source/common/unicode/ucnv_cb.h b/deps/icu-small/source/common/unicode/ucnv_cb.h index 1698de8e333093..a553481c45f893 100644 --- a/deps/icu-small/source/common/unicode/ucnv_cb.h +++ b/deps/icu-small/source/common/unicode/ucnv_cb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2000-2004, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucnv_err.h b/deps/icu-small/source/common/unicode/ucnv_err.h index 9d37e18c158bfa..ea7f757d0ce799 100644 --- a/deps/icu-small/source/common/unicode/ucnv_err.h +++ b/deps/icu-small/source/common/unicode/ucnv_err.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2009, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucnvsel.h b/deps/icu-small/source/common/unicode/ucnvsel.h index af27f3d9a9a015..b5820031a5a9f0 100644 --- a/deps/icu-small/source/common/unicode/ucnvsel.h +++ b/deps/icu-small/source/common/unicode/ucnvsel.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uconfig.h b/deps/icu-small/source/common/unicode/uconfig.h index 90f5a58da34938..d681febf4f8c3d 100644 --- a/deps/icu-small/source/common/unicode/uconfig.h +++ b/deps/icu-small/source/common/unicode/uconfig.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ucurr.h b/deps/icu-small/source/common/unicode/ucurr.h index fc8999351f6330..8b5d41ae3b8a7f 100644 --- a/deps/icu-small/source/common/unicode/ucurr.h +++ b/deps/icu-small/source/common/unicode/ucurr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2016, International Business Machines @@ -50,11 +52,13 @@ enum UCurrencyUsage { * @stable ICU 54 */ UCURR_USAGE_CASH=1, +#ifndef U_HIDE_DEPRECATED_API /** * One higher than the last enum UCurrencyUsage constant. - * @stable ICU 54 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UCURR_USAGE_COUNT=2 +#endif // U_HIDE_DEPRECATED_API }; typedef enum UCurrencyUsage UCurrencyUsage; diff --git a/deps/icu-small/source/common/unicode/udata.h b/deps/icu-small/source/common/unicode/udata.h index 16c1aabbdc10f3..abc043f6d01c91 100644 --- a/deps/icu-small/source/common/unicode/udata.h +++ b/deps/icu-small/source/common/unicode/udata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -408,8 +410,13 @@ typedef enum UDataFileAccess { UDATA_PACKAGES_FIRST, /** ICU does not access the file system for data loading. @stable ICU 3.4 */ UDATA_NO_FILES, - /** Number of real UDataFileAccess values. @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * Number of real UDataFileAccess values. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATA_FILE_ACCESS_COUNT +#endif // U_HIDE_DEPRECATED_API } UDataFileAccess; /** diff --git a/deps/icu-small/source/common/unicode/udisplaycontext.h b/deps/icu-small/source/common/unicode/udisplaycontext.h index 7ecb95b02c9a08..eaef02d7956ef4 100644 --- a/deps/icu-small/source/common/unicode/udisplaycontext.h +++ b/deps/icu-small/source/common/unicode/udisplaycontext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2014-2016, International Business Machines @@ -41,7 +43,15 @@ enum UDisplayContextType { * UDISPCTX_LENGTH_FULL, UDISPCTX_LENGTH_SHORT. * @stable ICU 54 */ - UDISPCTX_TYPE_DISPLAY_LENGTH = 2 + UDISPCTX_TYPE_DISPLAY_LENGTH = 2, +#ifndef U_HIDE_DRAFT_API + /** + * Type to retrieve the substitute handling setting, e.g. + * UDISPCTX_SUBSTITUTE, UDISPCTX_NO_SUBSTITUTE. + * @draft ICU 58 + */ + UDISPCTX_TYPE_SUBSTITUTE_HANDLING = 3 +#endif /* U_HIDE_DRAFT_API */ }; /** * @stable ICU 51 @@ -132,7 +142,29 @@ enum UDisplayContext { * e.g. "U.S." for US. * @stable ICU 54 */ - UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1 + UDISPCTX_LENGTH_SHORT = (UDISPCTX_TYPE_DISPLAY_LENGTH<<8) + 1, +#ifndef U_HIDE_DRAFT_API + /** + * ================================ + * SUBSTITUTE_HANDLING can be set to one of UDISPCTX_SUBSTITUTE or + * UDISPCTX_NO_SUBSTITUTE. Use UDisplayContextType UDISPCTX_TYPE_SUBSTITUTE_HANDLING + * to get the value. + */ + /** + * A possible setting for SUBSTITUTE_HANDLING: + * Returns a fallback value (e.g., the input code) when no data is available. + * This is the default value. + * @draft ICU 58 + */ + UDISPCTX_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 0, + /** + * A possible setting for SUBSTITUTE_HANDLING: + * Returns a null value when no data is available. + * @draft ICU 58 + */ + UDISPCTX_NO_SUBSTITUTE = (UDISPCTX_TYPE_SUBSTITUTE_HANDLING<<8) + 1 +#endif /* U_HIDE_DRAFT_API */ + }; /** * @stable ICU 51 diff --git a/deps/icu-small/source/common/unicode/uenum.h b/deps/icu-small/source/common/unicode/uenum.h index ec19b0b59e61fc..50dde60da1824b 100644 --- a/deps/icu-small/source/common/unicode/uenum.h +++ b/deps/icu-small/source/common/unicode/uenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uidna.h b/deps/icu-small/source/common/unicode/uidna.h index a5677a44064690..d49729a29ce846 100644 --- a/deps/icu-small/source/common/unicode/uidna.h +++ b/deps/icu-small/source/common/unicode/uidna.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uiter.h b/deps/icu-small/source/common/unicode/uiter.h index 693ba2ca827de2..74075e5a6e0ea7 100644 --- a/deps/icu-small/source/common/unicode/uiter.h +++ b/deps/icu-small/source/common/unicode/uiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uldnames.h b/deps/icu-small/source/common/unicode/uldnames.h index 8c153d6a41e05b..8a3dfd0a6a36fa 100644 --- a/deps/icu-small/source/common/unicode/uldnames.h +++ b/deps/icu-small/source/common/unicode/uldnames.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unicode/ulistformatter.h b/deps/icu-small/source/common/unicode/ulistformatter.h index bd83199441c89a..bed18984e9c255 100644 --- a/deps/icu-small/source/common/unicode/ulistformatter.h +++ b/deps/icu-small/source/common/unicode/ulistformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015-2016, International Business Machines diff --git a/deps/icu-small/source/common/unicode/uloc.h b/deps/icu-small/source/common/unicode/uloc.h index 0caa02ed7e04dc..5146000f28cca4 100644 --- a/deps/icu-small/source/common/unicode/uloc.h +++ b/deps/icu-small/source/common/unicode/uloc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -348,10 +350,14 @@ typedef enum { * @deprecated ICU 2.8 */ ULOC_REQUESTED_LOCALE = 2, -#endif /* U_HIDE_DEPRECATED_API */ - ULOC_DATA_LOCALE_TYPE_LIMIT = 3 -} ULocDataLocaleType ; + /** + * One more than the highest normal ULocDataLocaleType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + ULOC_DATA_LOCALE_TYPE_LIMIT = 3 +#endif // U_HIDE_DEPRECATED_API +} ULocDataLocaleType; #ifndef U_HIDE_SYSTEM_API /** diff --git a/deps/icu-small/source/common/unicode/umachine.h b/deps/icu-small/source/common/unicode/umachine.h index d7829bafacc6da..22820d4b003a55 100644 --- a/deps/icu-small/source/common/unicode/umachine.h +++ b/deps/icu-small/source/common/unicode/umachine.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -49,6 +51,29 @@ */ #include +#ifndef U_HIDE_INTERNAL_API +/* + * U_USE_CHAR16_T + * When defined, force use of char16_t for UChar. + * Note: char16_t is expected to become the default and required in the future, + * and this option will be removed. + * @internal + */ +#ifdef U_USE_CHAR16_T +#ifdef UCHAR_TYPE +#undef UCHAR_TYPE +#endif +#define UCHAR_TYPE char16_t + +/* + * In plain C, is needed for the definition of char16_t + */ +#ifndef __cplusplus +#include +#endif +#endif +#endif /* U_HIDE_INTERNAL_API */ + /*==========================================================================*/ /* For C wrappers, we use the symbol U_STABLE. */ /* This works properly if the includer is C or C++. */ diff --git a/deps/icu-small/source/common/unicode/umisc.h b/deps/icu-small/source/common/unicode/umisc.h index cbc2d9ceed319c..4cc665721a00be 100644 --- a/deps/icu-small/source/common/unicode/umisc.h +++ b/deps/icu-small/source/common/unicode/umisc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2006, International Business Machines diff --git a/deps/icu-small/source/common/unicode/unifilt.h b/deps/icu-small/source/common/unicode/unifilt.h index c504d17ed9e8d0..cedde81de4a0e1 100644 --- a/deps/icu-small/source/common/unicode/unifilt.h +++ b/deps/icu-small/source/common/unicode/unifilt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2010, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/common/unicode/unifunct.h b/deps/icu-small/source/common/unicode/unifunct.h index 3fda80a64b0c53..724893ad962bb0 100644 --- a/deps/icu-small/source/common/unicode/unifunct.h +++ b/deps/icu-small/source/common/unicode/unifunct.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2005, International Business Machines Corporation diff --git a/deps/icu-small/source/common/unicode/unimatch.h b/deps/icu-small/source/common/unicode/unimatch.h index 0ac66c49e26e1d..a83199ef61f720 100644 --- a/deps/icu-small/source/common/unicode/unimatch.h +++ b/deps/icu-small/source/common/unicode/unimatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2001-2005, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** diff --git a/deps/icu-small/source/common/unicode/uniset.h b/deps/icu-small/source/common/unicode/uniset.h index 3277f11328a8f5..32e973dd791d5d 100644 --- a/deps/icu-small/source/common/unicode/uniset.h +++ b/deps/icu-small/source/common/unicode/uniset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 1999-2016, International Business Machines Corporation @@ -360,7 +362,7 @@ class U_COMMON_API UnicodeSet U_FINAL : public UnicodeFilter { UnicodeSet(); /** - * Constructs a set containing the given range. If end > + * Constructs a set containing the given range. If end < * start then an empty set is created. * * @param start first character, inclusive, of range diff --git a/deps/icu-small/source/common/unicode/unistr.h b/deps/icu-small/source/common/unicode/unistr.h index bf00974fddb70f..6f62244a1e2824 100644 --- a/deps/icu-small/source/common/unicode/unistr.h +++ b/deps/icu-small/source/common/unicode/unistr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2016, International Business Machines @@ -74,7 +76,9 @@ UStringCaseMapper(const UCaseMap *csm, U_NAMESPACE_BEGIN +#if !UCONFIG_NO_BREAK_ITERATION class BreakIterator; // unicode/brkiter.h +#endif class Locale; // unicode/locid.h class StringCharacterIterator; class UnicodeStringAppendable; // unicode/appendable.h @@ -172,8 +176,6 @@ class UnicodeStringAppendable; // unicode/appendable.h # endif #endif -/* Cannot make the following #ifndef U_HIDE_DRAFT_API, - it is used to construct other non-internal constants */ /** * \def UNISTR_OBJECT_SIZE * Desired sizeof(UnicodeString) in bytes. @@ -205,7 +207,7 @@ class UnicodeStringAppendable; // unicode/appendable.h * and the internal buffer would hold up to 11 UChars in that case. * * @see U16_MAX_LENGTH - * @draft ICU 56 + * @stable ICU 56 */ #ifndef UNISTR_OBJECT_SIZE # define UNISTR_OBJECT_SIZE 64 @@ -1902,7 +1904,6 @@ class U_COMMON_API UnicodeString : public Replaceable */ UnicodeString &fastCopyFrom(const UnicodeString &src); -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move assignment operator, might leave src in bogus state. @@ -1910,12 +1911,13 @@ class U_COMMON_API UnicodeString : public Replaceable * The behavior is undefined if *this and src are the same object. * @param src source string * @return *this - * @draft ICU 56 + * @stable ICU 56 */ UnicodeString &operator=(UnicodeString &&src) U_NOEXCEPT { return moveFrom(src); } #endif + // do not use #ifndef U_HIDE_DRAFT_API for moveFrom, needed by non-draft API /** * Move assignment, might leave src in bogus state. * This string will have the same contents and state that the source string had. @@ -1931,16 +1933,15 @@ class U_COMMON_API UnicodeString : public Replaceable /** * Swap strings. * @param other other string - * @draft ICU 56 + * @stable ICU 56 */ void swap(UnicodeString &other) U_NOEXCEPT; -#endif /* U_HIDE_DRAFT_API */ /** * Non-member UnicodeString swap function. * @param s1 will get s2's contents and state * @param s2 will get s1's contents and state - * @draft ICU 56 + * @stable ICU 56 */ friend U_COMMON_API inline void U_EXPORT2 swap(UnicodeString &s1, UnicodeString &s2) U_NOEXCEPT { @@ -3212,17 +3213,15 @@ class U_COMMON_API UnicodeString : public Replaceable */ UnicodeString(const UnicodeString& that); -#ifndef U_HIDE_DRAFT_API #if U_HAVE_RVALUE_REFERENCES /** * Move constructor, might leave src in bogus state. * This string will have the same contents and state that the source string had. * @param src source string - * @draft ICU 56 + * @stable ICU 56 */ UnicodeString(UnicodeString &&src) U_NOEXCEPT; #endif -#endif /* U_HIDE_DRAFT_API */ /** * 'Substring' constructor from tail of source string. @@ -3277,7 +3276,7 @@ class U_COMMON_API UnicodeString : public Replaceable * @see toUTF8String * @stable ICU 4.2 */ - static UnicodeString fromUTF8(const StringPiece &utf8); + static UnicodeString fromUTF8(StringPiece utf8); /** * Create a UnicodeString from a UTF-32 string. @@ -3392,7 +3391,7 @@ class U_COMMON_API UnicodeString : public Replaceable private: // For char* constructors. Could be made public. - UnicodeString &setToUTF8(const StringPiece &utf8); + UnicodeString &setToUTF8(StringPiece utf8); // For extract(char*). // We could make a toUTF8(target, capacity, errorCode) public but not // this version: New API will be cleaner if we make callers create substrings @@ -3617,7 +3616,6 @@ class U_COMMON_API UnicodeString : public Replaceable */ US_STACKBUF_SIZE=(int32_t)(UNISTR_OBJECT_SIZE-sizeof(void *)-2)/U_SIZEOF_UCHAR, kInvalidUChar=0xffff, // U+FFFF returned by charAt(invalid index) - kGrowSize=128, // grow size for this buffer kInvalidHashCode=0, // invalid hash code kEmptyHashCode=1, // hash code for empty string diff --git a/deps/icu-small/source/common/unicode/unorm.h b/deps/icu-small/source/common/unicode/unorm.h index ab3e34e84b3add..f527c263f0298a 100644 --- a/deps/icu-small/source/common/unicode/unorm.h +++ b/deps/icu-small/source/common/unicode/unorm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (c) 1996-2016, International Business Machines Corporation @@ -22,8 +24,6 @@ #include "unicode/uiter.h" #include "unicode/unorm2.h" -#ifndef U_HIDE_DEPRECATED_API - /** * \file * \brief C API: Unicode Normalization @@ -129,6 +129,8 @@ * For more usage examples, see the Unicode Standard Annex. */ +// Do not conditionalize the following enum with #ifndef U_HIDE_DEPRECATED_API, +// it is needed for layout of Normalizer object. /** * Constants for normalization modes. * @deprecated ICU 56 Use unorm2.h instead. @@ -153,6 +155,8 @@ typedef enum { UNORM_MODE_COUNT } UNormalizationMode; +#ifndef U_HIDE_DEPRECATED_API + /** * Constants for options flags for normalization. * Use 0 for default options, diff --git a/deps/icu-small/source/common/unicode/unorm2.h b/deps/icu-small/source/common/unicode/unorm2.h index b557d6a3ec2ebf..56e99b2a22b413 100644 --- a/deps/icu-small/source/common/unicode/unorm2.h +++ b/deps/icu-small/source/common/unicode/unorm2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/uobject.h b/deps/icu-small/source/common/unicode/uobject.h index cdd14f42accb7e..96b1b8fbeadd19 100644 --- a/deps/icu-small/source/common/unicode/uobject.h +++ b/deps/icu-small/source/common/unicode/uobject.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/urename.h b/deps/icu-small/source/common/unicode/urename.h index 627ffa9bdc46df..b220a546975e47 100644 --- a/deps/icu-small/source/common/unicode/urename.h +++ b/deps/icu-small/source/common/unicode/urename.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2002-2016, International Business Machines @@ -474,6 +476,9 @@ #define ubidi_setReorderingOptions U_ICU_ENTRY_POINT_RENAME(ubidi_setReorderingOptions) #define ubidi_writeReordered U_ICU_ENTRY_POINT_RENAME(ubidi_writeReordered) #define ubidi_writeReverse U_ICU_ENTRY_POINT_RENAME(ubidi_writeReverse) +#define ubiditransform_close U_ICU_ENTRY_POINT_RENAME(ubiditransform_close) +#define ubiditransform_open U_ICU_ENTRY_POINT_RENAME(ubiditransform_open) +#define ubiditransform_transform U_ICU_ENTRY_POINT_RENAME(ubiditransform_transform) #define ublock_getCode U_ICU_ENTRY_POINT_RENAME(ublock_getCode) #define ubrk_close U_ICU_ENTRY_POINT_RENAME(ubrk_close) #define ubrk_countAvailable U_ICU_ENTRY_POINT_RENAME(ubrk_countAvailable) @@ -1013,6 +1018,7 @@ #define ulist_getListSize U_ICU_ENTRY_POINT_RENAME(ulist_getListSize) #define ulist_getNext U_ICU_ENTRY_POINT_RENAME(ulist_getNext) #define ulist_next_keyword_value U_ICU_ENTRY_POINT_RENAME(ulist_next_keyword_value) +#define ulist_removeString U_ICU_ENTRY_POINT_RENAME(ulist_removeString) #define ulist_resetList U_ICU_ENTRY_POINT_RENAME(ulist_resetList) #define ulist_reset_keyword_values_iterator U_ICU_ENTRY_POINT_RENAME(ulist_reset_keyword_values_iterator) #define ulistfmt_close U_ICU_ENTRY_POINT_RENAME(ulistfmt_close) @@ -1355,6 +1361,7 @@ #define uprv_toupper U_ICU_ENTRY_POINT_RENAME(uprv_toupper) #define uprv_trunc U_ICU_ENTRY_POINT_RENAME(uprv_trunc) #define uprv_tzname U_ICU_ENTRY_POINT_RENAME(uprv_tzname) +#define uprv_tzname_clear_cache U_ICU_ENTRY_POINT_RENAME(uprv_tzname_clear_cache) #define uprv_tzset U_ICU_ENTRY_POINT_RENAME(uprv_tzset) #define uprv_uint16Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint16Comparator) #define uprv_uint32Comparator U_ICU_ENTRY_POINT_RENAME(uprv_uint32Comparator) @@ -1456,10 +1463,7 @@ #define ures_countArrayItems U_ICU_ENTRY_POINT_RENAME(ures_countArrayItems) #define ures_findResource U_ICU_ENTRY_POINT_RENAME(ures_findResource) #define ures_findSubResource U_ICU_ENTRY_POINT_RENAME(ures_findSubResource) -#define ures_getAllArrayItems U_ICU_ENTRY_POINT_RENAME(ures_getAllArrayItems) -#define ures_getAllArrayItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllArrayItemsWithFallback) -#define ures_getAllTableItems U_ICU_ENTRY_POINT_RENAME(ures_getAllTableItems) -#define ures_getAllTableItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllTableItemsWithFallback) +#define ures_getAllItemsWithFallback U_ICU_ENTRY_POINT_RENAME(ures_getAllItemsWithFallback) #define ures_getBinary U_ICU_ENTRY_POINT_RENAME(ures_getBinary) #define ures_getByIndex U_ICU_ENTRY_POINT_RENAME(ures_getByIndex) #define ures_getByKey U_ICU_ENTRY_POINT_RENAME(ures_getByKey) @@ -1607,13 +1611,20 @@ #define uspoof_areConfusableUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUTF8) #define uspoof_areConfusableUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_areConfusableUnicodeString) #define uspoof_check U_ICU_ENTRY_POINT_RENAME(uspoof_check) +#define uspoof_check2 U_ICU_ENTRY_POINT_RENAME(uspoof_check2) +#define uspoof_check2UTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_check2UTF8) +#define uspoof_check2UnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_check2UnicodeString) #define uspoof_checkUTF8 U_ICU_ENTRY_POINT_RENAME(uspoof_checkUTF8) #define uspoof_checkUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_checkUnicodeString) #define uspoof_clone U_ICU_ENTRY_POINT_RENAME(uspoof_clone) #define uspoof_close U_ICU_ENTRY_POINT_RENAME(uspoof_close) +#define uspoof_closeCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_closeCheckResult) #define uspoof_getAllowedChars U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedChars) #define uspoof_getAllowedLocales U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedLocales) #define uspoof_getAllowedUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getAllowedUnicodeSet) +#define uspoof_getCheckResultChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultChecks) +#define uspoof_getCheckResultNumerics U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultNumerics) +#define uspoof_getCheckResultRestrictionLevel U_ICU_ENTRY_POINT_RENAME(uspoof_getCheckResultRestrictionLevel) #define uspoof_getChecks U_ICU_ENTRY_POINT_RENAME(uspoof_getChecks) #define uspoof_getInclusionSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionSet) #define uspoof_getInclusionUnicodeSet U_ICU_ENTRY_POINT_RENAME(uspoof_getInclusionUnicodeSet) @@ -1625,6 +1636,7 @@ #define uspoof_getSkeletonUnicodeString U_ICU_ENTRY_POINT_RENAME(uspoof_getSkeletonUnicodeString) #define uspoof_internalInitStatics U_ICU_ENTRY_POINT_RENAME(uspoof_internalInitStatics) #define uspoof_open U_ICU_ENTRY_POINT_RENAME(uspoof_open) +#define uspoof_openCheckResult U_ICU_ENTRY_POINT_RENAME(uspoof_openCheckResult) #define uspoof_openFromSerialized U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSerialized) #define uspoof_openFromSource U_ICU_ENTRY_POINT_RENAME(uspoof_openFromSource) #define uspoof_serialize U_ICU_ENTRY_POINT_RENAME(uspoof_serialize) diff --git a/deps/icu-small/source/common/unicode/urep.h b/deps/icu-small/source/common/unicode/urep.h index 3d1b0b6902e386..128f465319e2be 100644 --- a/deps/icu-small/source/common/unicode/urep.h +++ b/deps/icu-small/source/common/unicode/urep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2010, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ures.h b/deps/icu-small/source/common/unicode/ures.h index 190a5050aefc4c..620d9268aaceeb 100644 --- a/deps/icu-small/source/common/unicode/ures.h +++ b/deps/icu-small/source/common/unicode/ures.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -120,9 +122,13 @@ typedef enum { RES_INT_VECTOR=URES_INT_VECTOR, /** @deprecated ICU 2.6 Not used. */ RES_RESERVED=15, -#endif /* U_HIDE_DEPRECATED_API */ + /** + * One more than the highest normal UResType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ URES_LIMIT = 16 +#endif // U_HIDE_DEPRECATED_API } UResType; /* diff --git a/deps/icu-small/source/common/unicode/uscript.h b/deps/icu-small/source/common/unicode/uscript.h index 7615a49998df89..a20cd157a45507 100644 --- a/deps/icu-small/source/common/unicode/uscript.h +++ b/deps/icu-small/source/common/unicode/uscript.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** - * Copyright (C) 1997-2015, International Business Machines + * Copyright (C) 1997-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** * @@ -32,13 +34,13 @@ * See UAX #24 Unicode Script Property (http://www.unicode.org/reports/tr24/) * and http://www.unicode.org/Public/UCD/latest/ucd/PropertyValueAliases.txt . * - * Starting with ICU 3.6, constants for most ISO 15924 script codes + * In addition, constants for many ISO 15924 script codes * are included, for use with language tags, CLDR data, and similar. * Some of those codes are not used in the Unicode Character Database (UCD). * For example, there are no characters that have a UCD script property value of * Hans or Hant. All Han ideographs have the Hani script property value in Unicode. * - * Private-use codes Qaaa..Qabx are not included. + * Private-use codes Qaaa..Qabx are not included, except as used in the UCD or in CLDR. * * Starting with ICU 55, script codes are only added when their scripts * have been or will certainly be encoded in Unicode, @@ -424,18 +426,33 @@ typedef enum UScriptCode { /** @stable ICU 54 */ USCRIPT_SIDDHAM = 166,/* Sidd */ - /** - * One higher than the last script code constant. - * This value increases as constants for script codes are added. - * - * There are constants for Unicode 7 script property values. - * There are constants for ISO 15924 script codes assigned on or before 2013-10-12. - * There are no constants for private use codes from Qaaa - Qabx - * except as used in the UCD. - * - * @stable ICU 2.2 - */ - USCRIPT_CODE_LIMIT = 167 + /** @stable ICU 58 */ + USCRIPT_ADLAM = 167,/* Adlm */ + /** @stable ICU 58 */ + USCRIPT_BHAIKSUKI = 168,/* Bhks */ + /** @stable ICU 58 */ + USCRIPT_MARCHEN = 169,/* Marc */ + /** @stable ICU 58 */ + USCRIPT_NEWA = 170,/* Newa */ + /** @stable ICU 58 */ + USCRIPT_OSAGE = 171,/* Osge */ + + /** @stable ICU 58 */ + USCRIPT_HAN_WITH_BOPOMOFO = 172,/* Hanb */ + /** @stable ICU 58 */ + USCRIPT_JAMO = 173,/* Jamo */ + /** @stable ICU 58 */ + USCRIPT_SYMBOLS_EMOJI = 174,/* Zsye */ + +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UScriptCode value. + * The highest value is available via u_getIntPropertyMaxValue(UCHAR_SCRIPT). + * + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + USCRIPT_CODE_LIMIT = 175 +#endif // U_HIDE_DEPRECATED_API } UScriptCode; /** @@ -503,9 +520,6 @@ uscript_getScript(UChar32 codepoint, UErrorCode *err); * * Some characters are commonly used in multiple scripts. * For more information, see UAX #24: http://www.unicode.org/reports/tr24/. - * - * The Script_Extensions property is provisional. It may be modified or removed - * in future versions of the Unicode Standard, and thus in ICU. * @param c code point * @param sc script code * @return TRUE if sc is in Script_Extensions(c) @@ -532,8 +546,6 @@ uscript_hasScript(UChar32 c, UScriptCode sc); * U_BUFFER_OVERFLOW_ERROR is set and the number of Script_Extensions is returned. * (Usual ICU buffer handling behavior.) * - * The Script_Extensions property is provisional. It may be modified or removed - * in future versions of the Unicode Standard, and thus in ICU. * @param c code point * @param scripts output script code array * @param capacity capacity of the scripts array diff --git a/deps/icu-small/source/common/unicode/uset.h b/deps/icu-small/source/common/unicode/uset.h index 1db3d3db59e938..b4ed176eb951a6 100644 --- a/deps/icu-small/source/common/unicode/uset.h +++ b/deps/icu-small/source/common/unicode/uset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -196,11 +198,13 @@ typedef enum USetSpanCondition { * @stable ICU 3.8 */ USET_SPAN_SIMPLE = 2, +#ifndef U_HIDE_DEPRECATED_API /** * One more than the last span condition. - * @stable ICU 3.8 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ USET_SPAN_CONDITION_COUNT +#endif // U_HIDE_DEPRECATED_API } USetSpanCondition; enum { diff --git a/deps/icu-small/source/common/unicode/usetiter.h b/deps/icu-small/source/common/unicode/usetiter.h index a0aae22115238d..d70e897b223335 100644 --- a/deps/icu-small/source/common/unicode/usetiter.h +++ b/deps/icu-small/source/common/unicode/usetiter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ushape.h b/deps/icu-small/source/common/unicode/ushape.h index dcd8bfe6791f29..97fe9e3880b843 100644 --- a/deps/icu-small/source/common/unicode/ushape.h +++ b/deps/icu-small/source/common/unicode/ushape.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unicode/usprep.h b/deps/icu-small/source/common/unicode/usprep.h index 767279857adb47..fce161759d9f9b 100644 --- a/deps/icu-small/source/common/unicode/usprep.h +++ b/deps/icu-small/source/common/unicode/usprep.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/ustring.h b/deps/icu-small/source/common/unicode/ustring.h index 10080350d66144..8f4809c8159ca9 100644 --- a/deps/icu-small/source/common/unicode/ustring.h +++ b/deps/icu-small/source/common/unicode/ustring.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1998-2014, International Business Machines diff --git a/deps/icu-small/source/common/unicode/ustringtrie.h b/deps/icu-small/source/common/unicode/ustringtrie.h index 871d0f887a3765..50d31ba226c308 100644 --- a/deps/icu-small/source/common/unicode/ustringtrie.h +++ b/deps/icu-small/source/common/unicode/ustringtrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/common/unicode/utext.h b/deps/icu-small/source/common/unicode/utext.h index 5c6d3d05c6c9ce..84ff22ad630f38 100644 --- a/deps/icu-small/source/common/unicode/utext.h +++ b/deps/icu-small/source/common/unicode/utext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf.h b/deps/icu-small/source/common/unicode/utf.h index 679e8f6e630e77..7f40190eb81ac7 100644 --- a/deps/icu-small/source/common/unicode/utf.h +++ b/deps/icu-small/source/common/unicode/utf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf16.h b/deps/icu-small/source/common/unicode/utf16.h index 986b4137170476..3455a40e56cceb 100644 --- a/deps/icu-small/source/common/unicode/utf16.h +++ b/deps/icu-small/source/common/unicode/utf16.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf32.h b/deps/icu-small/source/common/unicode/utf32.h index bf63e69dba00c7..f93727c109442a 100644 --- a/deps/icu-small/source/common/unicode/utf32.h +++ b/deps/icu-small/source/common/unicode/utf32.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf8.h b/deps/icu-small/source/common/unicode/utf8.h index 94a01342407745..095e955ecd3c7e 100644 --- a/deps/icu-small/source/common/unicode/utf8.h +++ b/deps/icu-small/source/common/unicode/utf8.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utf_old.h b/deps/icu-small/source/common/unicode/utf_old.h index 47dd1da3cc98d8..b550b28ae3ad98 100644 --- a/deps/icu-small/source/common/unicode/utf_old.h +++ b/deps/icu-small/source/common/unicode/utf_old.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unicode/utrace.h b/deps/icu-small/source/common/unicode/utrace.h index 1a51ff9a62d467..9add16f1ccb078 100644 --- a/deps/icu-small/source/common/unicode/utrace.h +++ b/deps/icu-small/source/common/unicode/utrace.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -64,7 +66,13 @@ typedef enum UTraceFunctionNumber { UTRACE_FUNCTION_START=0, UTRACE_U_INIT=UTRACE_FUNCTION_START, UTRACE_U_CLEANUP, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_FUNCTION_LIMIT, +#endif // U_HIDE_DEPRECATED_API UTRACE_CONVERSION_START=0x1000, UTRACE_UCNV_OPEN=UTRACE_CONVERSION_START, @@ -75,7 +83,13 @@ typedef enum UTraceFunctionNumber { UTRACE_UCNV_FLUSH_CACHE, UTRACE_UCNV_LOAD, UTRACE_UCNV_UNLOAD, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_CONVERSION_LIMIT, +#endif // U_HIDE_DEPRECATED_API UTRACE_COLLATION_START=0x2000, UTRACE_UCOL_OPEN=UTRACE_COLLATION_START, @@ -87,7 +101,13 @@ typedef enum UTraceFunctionNumber { UTRACE_UCOL_STRCOLLITER, UTRACE_UCOL_OPEN_FROM_SHORT_STRING, UTRACE_UCOL_STRCOLLUTF8, /**< @stable ICU 50 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal collation trace location. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTRACE_COLLATION_LIMIT +#endif // U_HIDE_DEPRECATED_API } UTraceFunctionNumber; /** diff --git a/deps/icu-small/source/common/unicode/utypes.h b/deps/icu-small/source/common/unicode/utypes.h index 5a761c094b8e48..8325d534ed1167 100644 --- a/deps/icu-small/source/common/unicode/utypes.h +++ b/deps/icu-small/source/common/unicode/utypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1996-2016, International Business Machines @@ -373,88 +375,6 @@ typedef double UDate; #define U_STANDARD_CPP_NAMESPACE #endif - -/*===========================================================================*/ -/* Global delete operator */ -/*===========================================================================*/ - -/* - * The ICU4C library must not use the global new and delete operators. - * These operators here are defined to enable testing for this. - * See Jitterbug 2581 for details of why this is necessary. - * - * Verification that ICU4C's memory usage is correct, i.e., - * that global new/delete are not used: - * - * a) Check for imports of global new/delete (see uobject.cpp for details) - * b) Verify that new is never imported. - * c) Verify that delete is only imported from object code for interface/mixin classes. - * d) Add global delete and delete[] only for the ICU4C library itself - * and define them in a way that crashes or otherwise easily shows a problem. - * - * The following implements d). - * The operator implementations crash; this is intentional and used for library debugging. - * - * Note: This is currently only done on Windows because - * some Linux/Unix compilers have problems with defining global new/delete. - * On Windows, it is _MSC_VER>=1200 for MSVC 6.0 and higher. - */ -#if defined(__cplusplus) && U_DEBUG && U_OVERRIDE_CXX_ALLOCATION && (_MSC_VER>=1200) && !defined(U_STATIC_IMPLEMENTATION) && (defined(U_COMMON_IMPLEMENTATION) || defined(U_I18N_IMPLEMENTATION) || defined(U_IO_IMPLEMENTATION) || defined(U_LAYOUT_IMPLEMENTATION) || defined(U_LAYOUTEX_IMPLEMENTATION)) - -#ifndef U_HIDE_INTERNAL_API -/** - * Global operator new, defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void * -operator new(size_t /*size*/) { - char *q=NULL; - *q=5; /* break it */ - return q; -} - -#ifdef _Ret_bytecap_ -/* This is only needed to suppress a Visual C++ 2008 warning for operator new[]. */ -_Ret_bytecap_(_Size) -#endif -/** - * Global operator new[], defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void * -operator new[](size_t /*size*/) { - char *q=NULL; - *q=5; /* break it */ - return q; -} - -/** - * Global operator delete, defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void -operator delete(void * /*p*/) { - char *q=NULL; - *q=5; /* break it */ -} - -/** - * Global operator delete[], defined only inside ICU4C, must not be used. - * Crashes intentionally. - * @internal - */ -inline void -operator delete[](void * /*p*/) { - char *q=NULL; - *q=5; /* break it */ -} - -#endif /* U_HIDE_INTERNAL_API */ -#endif - /*===========================================================================*/ /* UErrorCode */ /*===========================================================================*/ @@ -499,8 +419,13 @@ typedef enum UErrorCode { U_PLUGIN_CHANGED_LEVEL_WARNING = -120, /**< A plugin caused a level change. May not be an error, but later plugins may not load. */ - U_ERROR_WARNING_LIMIT, /**< This must always be the last warning value to indicate the limit for UErrorCode warnings (last warning code +1) */ - +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UErrorCode warning value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_ERROR_WARNING_LIMIT, +#endif // U_HIDE_DEPRECATED_API U_ZERO_ERROR = 0, /**< No error, no warning. */ @@ -536,9 +461,16 @@ typedef enum UErrorCode { U_USELESS_COLLATOR_ERROR = 29, /**< Collator is options only and no base is specified */ U_NO_WRITE_PERMISSION = 30, /**< Attempt to modify read-only or constant data. */ - U_STANDARD_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for standard errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest standard error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_STANDARD_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API + /* - * the error code range 0x10000 0x10100 are reserved for Transliterator + * Error codes in the range 0x10000 0x10100 are reserved for Transliterator. */ U_BAD_VARIABLE_DEFINITION=0x10000,/**< Missing '$' or duplicate variable name */ U_PARSE_ERROR_START = 0x10000, /**< Start of Transliterator errors */ @@ -576,10 +508,16 @@ typedef enum UErrorCode { U_INTERNAL_TRANSLITERATOR_ERROR, /**< Internal transliterator system error */ U_INVALID_ID, /**< A "::id" rule specifies an unknown transliterator */ U_INVALID_FUNCTION, /**< A "&fn()" rule specifies an unknown transliterator */ - U_PARSE_ERROR_LIMIT, /**< The limit for Transliterator errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal Transliterator error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_PARSE_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * the error code range 0x10100 0x10200 are reserved for formatting API parsing error + * Error codes in the range 0x10100 0x10200 are reserved for the formatting API. */ U_UNEXPECTED_TOKEN=0x10100, /**< Syntax error in format pattern */ U_FMT_PARSE_ERROR_START=0x10100, /**< Start of format library errors */ @@ -601,10 +539,16 @@ typedef enum UErrorCode { U_DEFAULT_KEYWORD_MISSING, /**< Missing DEFAULT rule in plural rules */ U_DECIMAL_NUMBER_SYNTAX_ERROR, /**< Decimal number syntax error */ U_FORMAT_INEXACT_ERROR, /**< Cannot format a number exactly and rounding mode is ROUND_UNNECESSARY @stable ICU 4.8 */ - U_FMT_PARSE_ERROR_LIMIT, /**< The limit for format library errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal formatting API error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_FMT_PARSE_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * the error code range 0x10200 0x102ff are reserved for Break Iterator related error + * Error codes in the range 0x10200 0x102ff are reserved for BreakIterator. */ U_BRK_INTERNAL_ERROR=0x10200, /**< An internal error (bug) was detected. */ U_BRK_ERROR_START=0x10200, /**< Start of codes indicating Break Iterator failures */ @@ -621,10 +565,16 @@ typedef enum UErrorCode { U_BRK_RULE_EMPTY_SET, /**< Rule contains an empty Unicode Set. */ U_BRK_UNRECOGNIZED_OPTION, /**< !!option in RBBI rules not recognized. */ U_BRK_MALFORMED_RULE_TAG, /**< The {nnn} tag on a rule is mal formed */ - U_BRK_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for Break Iterator failures */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal BreakIterator error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_BRK_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* - * The error codes in the range 0x10300-0x103ff are reserved for regular expression related errrs + * Error codes in the range 0x10300-0x103ff are reserved for regular expression related errors. */ U_REGEX_INTERNAL_ERROR=0x10300, /**< An internal error (bug) was detected. */ U_REGEX_ERROR_START=0x10300, /**< Start of codes indicating Regexp failures */ @@ -651,10 +601,16 @@ typedef enum UErrorCode { U_REGEX_STOPPED_BY_CALLER, /**< Matching operation aborted by user callback fn. */ U_REGEX_PATTERN_TOO_BIG, /**< Pattern exceeds limits on size or complexity. @stable ICU 55 */ U_REGEX_INVALID_CAPTURE_GROUP_NAME, /**< Invalid capture group name. @stable ICU 55 */ - U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3, /**< This must always be the last value to indicate the limit for regexp errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal regular expression error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_REGEX_ERROR_LIMIT=U_REGEX_STOPPED_BY_CALLER+3, +#endif // U_HIDE_DEPRECATED_API /* - * The error code in the range 0x10400-0x104ff are reserved for IDNA related error codes + * Error codes in the range 0x10400-0x104ff are reserved for IDNA related error codes. */ U_IDNA_PROHIBITED_ERROR=0x10400, U_IDNA_ERROR_START=0x10400, @@ -666,7 +622,13 @@ typedef enum UErrorCode { U_IDNA_LABEL_TOO_LONG_ERROR, U_IDNA_ZERO_LENGTH_LABEL_ERROR, U_IDNA_DOMAIN_NAME_TOO_LONG_ERROR, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal IDNA error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ U_IDNA_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API /* * Aliases for StringPrep */ @@ -675,14 +637,26 @@ typedef enum UErrorCode { U_STRINGPREP_CHECK_BIDI_ERROR = U_IDNA_CHECK_BIDI_ERROR, /* - * The error code in the range 0x10500-0x105ff are reserved for Plugin related error codes + * Error codes in the range 0x10500-0x105ff are reserved for Plugin related error codes. */ U_PLUGIN_ERROR_START=0x10500, /**< Start of codes indicating plugin failures */ U_PLUGIN_TOO_HIGH=0x10500, /**< The plugin's level is too high to be loaded right now. */ U_PLUGIN_DIDNT_SET_LEVEL, /**< The plugin didn't call uplug_setPlugLevel in response to a QUERY */ - U_PLUGIN_ERROR_LIMIT, /**< This must always be the last value to indicate the limit for plugin errors */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal plug-in error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_PLUGIN_ERROR_LIMIT, +#endif // U_HIDE_DEPRECATED_API - U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT /**< This must always be the last value to indicate the limit for UErrorCode (last error code +1) */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal error code. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + U_ERROR_LIMIT=U_PLUGIN_ERROR_LIMIT +#endif // U_HIDE_DEPRECATED_API } UErrorCode; /* Use the following to determine if an UErrorCode represents */ diff --git a/deps/icu-small/source/common/unicode/uvernum.h b/deps/icu-small/source/common/unicode/uvernum.h index 9c6edc3730d045..fb7b48bc07055c 100644 --- a/deps/icu-small/source/common/unicode/uvernum.h +++ b/deps/icu-small/source/common/unicode/uvernum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2016, International Business Machines @@ -32,13 +34,12 @@ * by running the UNIX makefile target 'update-windows-makefiles' in icu/source. * * - * source/common/common.vcproj - update 'Output file name' on the link tab so + * source/common/common.vcxproj - update 'Output file name' on the link tab so * that it contains the new major/minor combination - * source/i18n/i18n.vcproj - same as for the common.vcproj - * source/layout/layout.vcproj - same as for the common.vcproj + * source/i18n/i18n.vcxproj - same as for the common.vcxproj * source/layoutex/layoutex.vcproj - same - * source/stubdata/stubdata.vcproj - same as for the common.vcproj - * source/io/io.vcproj - same as for the common.vcproj + * source/stubdata/stubdata.vcproj - same as for the common.vcxproj + * source/io/io.vcproj - same as for the common.vcxproj * source/data/makedata.mak - change U_ICUDATA_NAME so that it contains * the new major/minor combination and the Unicode version. */ @@ -51,13 +52,13 @@ * @stable ICU 2.4 */ #define U_COPYRIGHT_STRING \ - " Copyright (C) 2016, International Business Machines Corporation and others. All Rights Reserved. " + " Copyright (C) 2016 and later: Unicode, Inc. and others. License & terms of use: http://www.unicode.org/copyright.html " /** The current ICU major version as an integer. * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION_MAJOR_NUM 57 +#define U_ICU_VERSION_MAJOR_NUM 58 /** The current ICU minor version as an integer. * This value will change in the subsequent releases of ICU @@ -83,7 +84,7 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SUFFIX _57 +#define U_ICU_VERSION_SUFFIX _58 /** * \def U_DEF2_ICU_ENTRY_POINT_RENAME @@ -118,19 +119,19 @@ * This value will change in the subsequent releases of ICU * @stable ICU 2.4 */ -#define U_ICU_VERSION "57.1" +#define U_ICU_VERSION "58.1" /** The current ICU library major/minor version as a string without dots, for library name suffixes. * This value will change in the subsequent releases of ICU * @stable ICU 2.6 */ -#define U_ICU_VERSION_SHORT "57" +#define U_ICU_VERSION_SHORT "58" #ifndef U_HIDE_INTERNAL_API /** Data version in ICU4C. * @internal ICU 4.4 Internal Use Only **/ -#define U_ICU_DATA_VERSION "57.1" +#define U_ICU_DATA_VERSION "58.1" #endif /* U_HIDE_INTERNAL_API */ /*=========================================================================== diff --git a/deps/icu-small/source/common/unicode/uversion.h b/deps/icu-small/source/common/unicode/uversion.h index 2200cfaff199af..63e2d17a363d94 100644 --- a/deps/icu-small/source/common/unicode/uversion.h +++ b/deps/icu-small/source/common/unicode/uversion.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2000-2011, International Business Machines diff --git a/deps/icu-small/source/common/unifiedcache.cpp b/deps/icu-small/source/common/unifiedcache.cpp index d7450f785a3e1c..3e8e33a1ff2806 100644 --- a/deps/icu-small/source/common/unifiedcache.cpp +++ b/deps/icu-small/source/common/unifiedcache.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unifiedcache.h b/deps/icu-small/source/common/unifiedcache.h index 7807b5dbbb146e..67c676d4531c72 100644 --- a/deps/icu-small/source/common/unifiedcache.h +++ b/deps/icu-small/source/common/unifiedcache.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and @@ -140,7 +142,7 @@ class LocaleCacheKey : public CacheKey { : CacheKey(other), fLoc(other.fLoc) { } virtual ~LocaleCacheKey() { } virtual int32_t hashCode() const { - return 37 *CacheKey::hashCode() + fLoc.hashCode(); + return (int32_t)(37u * (uint32_t)CacheKey::hashCode() + (uint32_t)fLoc.hashCode()); } virtual UBool operator == (const CacheKeyBase &other) const { // reflexive diff --git a/deps/icu-small/source/common/unifilt.cpp b/deps/icu-small/source/common/unifilt.cpp index 5e1a131f11d2be..2d8ce355c7532a 100644 --- a/deps/icu-small/source/common/unifilt.cpp +++ b/deps/icu-small/source/common/unifilt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2012, International Business Machines diff --git a/deps/icu-small/source/common/unifunct.cpp b/deps/icu-small/source/common/unifunct.cpp index b834eeed53526d..8fdc638407dee6 100644 --- a/deps/icu-small/source/common/unifunct.cpp +++ b/deps/icu-small/source/common/unifunct.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2004, International Business Machines diff --git a/deps/icu-small/source/common/uniset.cpp b/deps/icu-small/source/common/uniset.cpp index 355dc40ac8ae02..ef1b6113d9b96e 100644 --- a/deps/icu-small/source/common/uniset.cpp +++ b/deps/icu-small/source/common/uniset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines @@ -234,7 +236,7 @@ UnicodeSet::UnicodeSet(const UnicodeSet& o, UBool /* asThawed */) : if(list!=NULL){ // *this = o except for bmpSet and stringSpan len = o.len; - uprv_memcpy(list, o.list, len*sizeof(UChar32)); + uprv_memcpy(list, o.list, (size_t)len*sizeof(UChar32)); if (strings != NULL && o.strings != NULL) { strings->assign(*o.strings, cloneUnicodeString, status); } else { // Invalid strings. @@ -286,7 +288,7 @@ UnicodeSet& UnicodeSet::operator=(const UnicodeSet& o) { return *this; // There is no way to report this error :-( } len = o.len; - uprv_memcpy(list, o.list, len*sizeof(UChar32)); + uprv_memcpy(list, o.list, (size_t)len*sizeof(UChar32)); if (o.bmpSet == NULL) { bmpSet = NULL; } else { @@ -1253,14 +1255,14 @@ UnicodeSet& UnicodeSet::complement(void) { if (U_FAILURE(status)) { return *this; } - uprv_memcpy(buffer, list + 1, (len-1)*sizeof(UChar32)); + uprv_memcpy(buffer, list + 1, (size_t)(len-1)*sizeof(UChar32)); --len; } else { ensureBufferCapacity(len+1, status); if (U_FAILURE(status)) { return *this; } - uprv_memcpy(buffer + 1, list, len*sizeof(UChar32)); + uprv_memcpy(buffer + 1, list, (size_t)len*sizeof(UChar32)); buffer[0] = UNICODESET_LOW; ++len; } diff --git a/deps/icu-small/source/common/uniset_closure.cpp b/deps/icu-small/source/common/uniset_closure.cpp index e7aeff846a79a7..cacadf47758334 100644 --- a/deps/icu-small/source/common/uniset_closure.cpp +++ b/deps/icu-small/source/common/uniset_closure.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uniset_props.cpp b/deps/icu-small/source/common/uniset_props.cpp index d8b7042b83ebed..8348f8a33aa611 100644 --- a/deps/icu-small/source/common/uniset_props.cpp +++ b/deps/icu-small/source/common/uniset_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unisetspan.cpp b/deps/icu-small/source/common/unisetspan.cpp index 63cf985c034fc8..1179495d4feb6a 100644 --- a/deps/icu-small/source/common/unisetspan.cpp +++ b/deps/icu-small/source/common/unisetspan.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unisetspan.h b/deps/icu-small/source/common/unisetspan.h index 2fe0fc30d9f158..36cdd98d044d09 100644 --- a/deps/icu-small/source/common/unisetspan.h +++ b/deps/icu-small/source/common/unisetspan.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/unistr.cpp b/deps/icu-small/source/common/unistr.cpp index 4804083b207066..f825de91bba9dc 100644 --- a/deps/icu-small/source/common/unistr.cpp +++ b/deps/icu-small/source/common/unistr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2016, International Business Machines Corporation and @@ -82,7 +84,7 @@ us_arrayCopy(const UChar *src, int32_t srcStart, UChar *dst, int32_t dstStart, int32_t count) { if(count>0) { - uprv_memmove(dst+dstStart, src+srcStart, (size_t)(count*sizeof(*src))); + uprv_memmove(dst+dstStart, src+srcStart, (size_t)count*sizeof(*src)); } } @@ -151,41 +153,39 @@ UnicodeString::UnicodeString(int32_t capacity, UChar32 c, int32_t count) { if(count <= 0 || (uint32_t)c > 0x10ffff) { // just allocate and do not do anything else allocate(capacity); - } else { - // count > 0, allocate and fill the new string with count c's - int32_t unitCount = U16_LENGTH(c), length = count * unitCount; + } else if(c <= 0xffff) { + int32_t length = count; if(capacity < length) { capacity = length; } if(allocate(capacity)) { UChar *array = getArrayStart(); - int32_t i = 0; - - // fill the new string with c - if(unitCount == 1) { - // fill with length UChars - while(i < length) { - array[i++] = (UChar)c; - } - } else { - // get the code units for c - UChar units[U16_MAX_LENGTH]; - U16_APPEND_UNSAFE(units, i, c); - - // now it must be i==unitCount - i = 0; - - // for Unicode, unitCount can only be 1, 2, 3, or 4 - // 1 is handled above - while(i < length) { - int32_t unitIdx = 0; - while(unitIdx < unitCount) { - array[i++]=units[unitIdx++]; - } - } + UChar unit = (UChar)c; + for(int32_t i = 0; i < length; ++i) { + array[i] = unit; + } + setLength(length); + } + } else { // supplementary code point, write surrogate pairs + if(count > (INT32_MAX / 2)) { + // We would get more than 2G UChars. + allocate(capacity); + return; + } + int32_t length = count * 2; + if(capacity < length) { + capacity = length; + } + if(allocate(capacity)) { + UChar *array = getArrayStart(); + UChar lead = U16_LEAD(c); + UChar trail = U16_TRAIL(c); + for(int32_t i = 0; i < length; i += 2) { + array[i] = lead; + array[i + 1] = trail; } + setLength(length); } - setLength(length); } } @@ -342,33 +342,60 @@ UnicodeString::clone() const { // array allocation //======================================== +namespace { + +const int32_t kGrowSize = 128; + +// The number of bytes for one int32_t reference counter and capacity UChars +// must fit into a 32-bit size_t (at least when on a 32-bit platform). +// We also add one for the NUL terminator, to avoid reallocation in getTerminatedBuffer(), +// and round up to a multiple of 16 bytes. +// This means that capacity must be at most (0xfffffff0 - 4) / 2 - 1 = 0x7ffffff5. +// (With more complicated checks we could go up to 0x7ffffffd without rounding up, +// but that does not seem worth it.) +const int32_t kMaxCapacity = 0x7ffffff5; + +int32_t getGrowCapacity(int32_t newLength) { + int32_t growSize = (newLength >> 2) + kGrowSize; + if(growSize <= (kMaxCapacity - newLength)) { + return newLength + growSize; + } else { + return kMaxCapacity; + } +} + +} // namespace + UBool UnicodeString::allocate(int32_t capacity) { if(capacity <= US_STACKBUF_SIZE) { fUnion.fFields.fLengthAndFlags = kShortString; - } else { - // count bytes for the refCounter and the string capacity, and - // round up to a multiple of 16; then divide by 4 and allocate int32_t's - // to be safely aligned for the refCount - // the +1 is for the NUL terminator, to avoid reallocation in getTerminatedBuffer() - int32_t words = (int32_t)(((sizeof(int32_t) + (capacity + 1) * U_SIZEOF_UCHAR + 15) & ~15) >> 2); - int32_t *array = (int32_t*) uprv_malloc( sizeof(int32_t) * words ); - if(array != 0) { + return TRUE; + } + if(capacity <= kMaxCapacity) { + ++capacity; // for the NUL + // Switch to size_t which is unsigned so that we can allocate up to 4GB. + // Reference counter + UChars. + size_t numBytes = sizeof(int32_t) + (size_t)capacity * U_SIZEOF_UCHAR; + // Round up to a multiple of 16. + numBytes = (numBytes + 15) & ~15; + int32_t *array = (int32_t *) uprv_malloc(numBytes); + if(array != NULL) { // set initial refCount and point behind the refCount *array++ = 1; + numBytes -= sizeof(int32_t); // have fArray point to the first UChar fUnion.fFields.fArray = (UChar *)array; - fUnion.fFields.fCapacity = (int32_t)((words - 1) * (sizeof(int32_t) / U_SIZEOF_UCHAR)); + fUnion.fFields.fCapacity = (int32_t)(numBytes / U_SIZEOF_UCHAR); fUnion.fFields.fLengthAndFlags = kLongString; - } else { - fUnion.fFields.fLengthAndFlags = kIsBogus; - fUnion.fFields.fArray = 0; - fUnion.fFields.fCapacity = 0; - return FALSE; + return TRUE; } } - return TRUE; + fUnion.fFields.fLengthAndFlags = kIsBogus; + fUnion.fFields.fArray = 0; + fUnion.fFields.fCapacity = 0; + return FALSE; } //======================================== @@ -415,7 +442,7 @@ UnicodeString::~UnicodeString() // Factory methods //======================================== -UnicodeString UnicodeString::fromUTF8(const StringPiece &utf8) { +UnicodeString UnicodeString::fromUTF8(StringPiece utf8) { UnicodeString result; result.setToUTF8(utf8); return result; @@ -526,7 +553,7 @@ UnicodeString::copyFrom(const UnicodeString &src, UBool fastCopy) { // src is a writable alias; we make a copy of that instead int32_t srcLength = src.length(); if(allocate(srcLength)) { - uprv_memcpy(getArrayStart(), src.getArrayStart(), srcLength * U_SIZEOF_UCHAR); + u_memcpy(getArrayStart(), src.getArrayStart(), srcLength); setLength(srcLength); break; } @@ -855,7 +882,7 @@ UnicodeString::extract(UChar *dest, int32_t destCapacity, } else { const UChar *array = getArrayStart(); if(len>0 && len<=destCapacity && array!=dest) { - uprv_memcpy(dest, array, len*U_SIZEOF_UCHAR); + u_memcpy(dest, array, len); } return u_terminateUChars(dest, destCapacity, len, &errorCode); } @@ -1217,7 +1244,7 @@ UnicodeString::getTerminatedBuffer() { return array; } } - if(cloneArrayIfNeeded(len+1)) { + if(len (INT32_MAX - newLength)) { + setToBogus(); + return *this; + } + newLength += srcLength; // cloneArrayIfNeeded(doCopyArray=FALSE) may change fArray but will not copy the current contents; // therefore we need to keep the current fArray @@ -1446,7 +1479,7 @@ UnicodeString::doReplace(int32_t start, // clone our array and allocate a bigger array if needed int32_t *bufferToDelete = 0; - if(!cloneArrayIfNeeded(newLength, newLength + (newLength >> 2) + kGrowSize, + if(!cloneArrayIfNeeded(newLength, getGrowCapacity(newLength), FALSE, &bufferToDelete) ) { return *this; @@ -1513,7 +1546,7 @@ UnicodeString::doAppend(const UChar *srcChars, int32_t srcStart, int32_t srcLeng int32_t newLength = oldLength + srcLength; // optimize append() onto a large-enough, owned string if((newLength <= getCapacity() && isBufferWritable()) || - cloneArrayIfNeeded(newLength, newLength + (newLength >> 2) + kGrowSize)) { + cloneArrayIfNeeded(newLength, getGrowCapacity(newLength))) { UChar *newArray = getArrayStart(); // Do not copy characters when // UChar *buffer=str.getAppendBuffer(...); @@ -1861,7 +1894,9 @@ UnicodeStringAppendable::getAppendBuffer(int32_t minCapacity, return NULL; } int32_t oldLength = str.length(); - if(str.cloneArrayIfNeeded(oldLength + minCapacity, oldLength + desiredCapacityHint)) { + if(minCapacity <= (kMaxCapacity - oldLength) && + desiredCapacityHint <= (kMaxCapacity - oldLength) && + str.cloneArrayIfNeeded(oldLength + minCapacity, oldLength + desiredCapacityHint)) { *resultCapacity = str.getCapacity() - oldLength; return str.getArrayStart() + oldLength; } diff --git a/deps/icu-small/source/common/unistr_case.cpp b/deps/icu-small/source/common/unistr_case.cpp index 1b52eb60decb8e..1715b6ec66e268 100644 --- a/deps/icu-small/source/common/unistr_case.cpp +++ b/deps/icu-small/source/common/unistr_case.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unistr_case_locale.cpp b/deps/icu-small/source/common/unistr_case_locale.cpp index a8d5704431ec17..a01be5c30b372a 100644 --- a/deps/icu-small/source/common/unistr_case_locale.cpp +++ b/deps/icu-small/source/common/unistr_case_locale.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/unistr_cnv.cpp b/deps/icu-small/source/common/unistr_cnv.cpp index 38998ffd026c4d..a9b44ee424c33f 100644 --- a/deps/icu-small/source/common/unistr_cnv.cpp +++ b/deps/icu-small/source/common/unistr_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unistr_props.cpp b/deps/icu-small/source/common/unistr_props.cpp index 87e19275946f72..533a683928c0bc 100644 --- a/deps/icu-small/source/common/unistr_props.cpp +++ b/deps/icu-small/source/common/unistr_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp b/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp index 9b60e2a0358748..3d6737cfc5e3d9 100644 --- a/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp +++ b/deps/icu-small/source/common/unistr_titlecase_brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/unistrappender.h b/deps/icu-small/source/common/unistrappender.h index a6f7c2efc44714..600fd9033585a8 100644 --- a/deps/icu-small/source/common/unistrappender.h +++ b/deps/icu-small/source/common/unistrappender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/unorm.cpp b/deps/icu-small/source/common/unorm.cpp index fb948b88051d15..75aaea9cdfc02b 100644 --- a/deps/icu-small/source/common/unorm.cpp +++ b/deps/icu-small/source/common/unorm.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (c) 1996-2014, International Business Machines diff --git a/deps/icu-small/source/common/unormcmp.cpp b/deps/icu-small/source/common/unormcmp.cpp index 1b072c4c34d8be..b40a10a1385fb4 100644 --- a/deps/icu-small/source/common/unormcmp.cpp +++ b/deps/icu-small/source/common/unormcmp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/unormimp.h b/deps/icu-small/source/common/unormimp.h index 3dce76bc8fd361..c382f38b8beaae 100644 --- a/deps/icu-small/source/common/unormimp.h +++ b/deps/icu-small/source/common/unormimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uobject.cpp b/deps/icu-small/source/common/uobject.cpp index 900e0345952cdc..37406e4a0dc07a 100644 --- a/deps/icu-small/source/common/uobject.cpp +++ b/deps/icu-small/source/common/uobject.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uposixdefs.h b/deps/icu-small/source/common/uposixdefs.h index ca84fefad1eff3..495deea49e3f7c 100644 --- a/deps/icu-small/source/common/uposixdefs.h +++ b/deps/icu-small/source/common/uposixdefs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines diff --git a/deps/icu-small/source/common/uprops.cpp b/deps/icu-small/source/common/uprops.cpp index 3bf44317b26466..46ceb66d8cf632 100644 --- a/deps/icu-small/source/common/uprops.cpp +++ b/deps/icu-small/source/common/uprops.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uprops.h b/deps/icu-small/source/common/uprops.h index d45fc6c79b433f..63c588088ad1c3 100644 --- a/deps/icu-small/source/common/uprops.h +++ b/deps/icu-small/source/common/uprops.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -86,8 +88,15 @@ enum { * ((ntv>>2)-0xbf) * 60^((ntv&3)+1) = (1..9)*(60^1..60^4) */ UPROPS_NTV_BASE60_START=0x300, + /** + * Fraction-20 values: + * frac20 = ntv-0x324 = 0..0x17 -> 1|3|5|7 / 20|40|80|160|320|640 + * numerator: num = 2*(frac20&3)+1 + * denominator: den = 20<<(frac20>>2) + */ + UPROPS_NTV_FRACTION20_START=UPROPS_NTV_BASE60_START+36, // 0x300+9*4=0x324 /** No numeric value (yet). */ - UPROPS_NTV_RESERVED_START=UPROPS_NTV_BASE60_START+36, /* 0x300+9*4=0x324 */ + UPROPS_NTV_RESERVED_START=UPROPS_NTV_FRACTION20_START+24, // 0x324+6*4=0x34c UPROPS_NTV_MAX_SMALL_INT=UPROPS_NTV_FRACTION_START-UPROPS_NTV_NUMERIC_START-1 }; diff --git a/deps/icu-small/source/common/ures_cnv.c b/deps/icu-small/source/common/ures_cnv.c index 6a16c50b624c7d..a810fc08567144 100644 --- a/deps/icu-small/source/common/ures_cnv.c +++ b/deps/icu-small/source/common/ures_cnv.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uresbund.cpp b/deps/icu-small/source/common/uresbund.cpp index bb6b039495399f..6813645c98b614 100644 --- a/deps/icu-small/source/common/uresbund.cpp +++ b/deps/icu-small/source/common/uresbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2016, International Business Machines Corporation and @@ -267,7 +269,7 @@ static UBool U_CALLCONV ures_cleanup(void) } /** INTERNAL: Initializes the cache for resources */ -static void createCache(UErrorCode &status) { +static void U_CALLCONV createCache(UErrorCode &status) { U_ASSERT(cache == NULL); cache = uhash_open(hashEntry, compareEntries, NULL, &status); ucln_common_registerCleanup(UCLN_COMMON_URES, ures_cleanup); @@ -1885,32 +1887,27 @@ ures_getByKeyWithFallback(const UResourceBundle *resB, namespace { -void getAllContainerItemsWithFallback( +void getAllItemsWithFallback( const UResourceBundle *bundle, ResourceDataValue &value, - ResourceArraySink *arraySink, ResourceTableSink *tableSink, + ResourceSink &sink, UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } // We recursively enumerate child-first, // only storing parent items in the absence of child items. - // We store a placeholder value for the no-fallback/no-inheritance marker + // The sink needs to store a placeholder value for the no-fallback/no-inheritance marker // to prevent a parent item from being stored. // // It would be possible to recursively enumerate parent-first, // overriding parent items with child items. - // When we see the no-fallback/no-inheritance marker, - // then we would remove the parent's item. + // When the sink sees the no-fallback/no-inheritance marker, + // then it would remove the parent's item. // We would deserialize parent values even though they are overridden in a child bundle. - UResType expectedType = arraySink != NULL ? URES_ARRAY : URES_TABLE; - if (ures_getType(bundle) == expectedType) { - value.pResData = &bundle->fResData; - if (arraySink != NULL) { - ures_getAllArrayItems(&bundle->fResData, bundle->fRes, value, *arraySink, errorCode); - } else /* tableSink != NULL */ { - ures_getAllTableItems(&bundle->fResData, bundle->fRes, value, *tableSink, errorCode); - } - } - UResourceDataEntry *entry = bundle->fData->fParent; - if (entry != NULL && U_SUCCESS(entry->fBogus)) { + value.pResData = &bundle->fResData; + UResourceDataEntry *parentEntry = bundle->fData->fParent; + UBool hasParent = parentEntry != NULL && U_SUCCESS(parentEntry->fBogus); + value.setResource(bundle->fRes); + sink.put(bundle->fKey, value, !hasParent, errorCode); + if (hasParent) { // We might try to query the sink whether // any fallback from the parent bundle is still possible. @@ -1921,40 +1918,41 @@ void getAllContainerItemsWithFallback( // so that we need not create UResourceBundle objects. UResourceBundle parentBundle; ures_initStackObject(&parentBundle); - parentBundle.fTopLevelData = parentBundle.fData = entry; + parentBundle.fTopLevelData = parentBundle.fData = parentEntry; // TODO: What is the difference between bundle fData and fTopLevelData? - uprv_memcpy(&parentBundle.fResData, &entry->fData, sizeof(ResourceData)); + uprv_memcpy(&parentBundle.fResData, &parentEntry->fData, sizeof(ResourceData)); // TODO: Try to replace bundle.fResData with just using bundle.fData->fData. parentBundle.fHasFallback = !parentBundle.fResData.noFallback; parentBundle.fIsTopLevel = TRUE; parentBundle.fRes = parentBundle.fResData.rootRes; parentBundle.fSize = res_countArrayItems(&(parentBundle.fResData), parentBundle.fRes); parentBundle.fIndex = -1; - entryIncrease(entry); + entryIncrease(parentEntry); // Look up the container item in the parent bundle. UResourceBundle containerBundle; ures_initStackObject(&containerBundle); const UResourceBundle *rb; + UErrorCode pathErrorCode = U_ZERO_ERROR; // Ignore if parents up to root do not have this path. if (bundle->fResPath == NULL || *bundle->fResPath == 0) { rb = &parentBundle; } else { rb = ures_getByKeyWithFallback(&parentBundle, bundle->fResPath, - &containerBundle, &errorCode); + &containerBundle, &pathErrorCode); } - if (U_SUCCESS(errorCode) && ures_getType(rb) == expectedType) { - getAllContainerItemsWithFallback(rb, value, - arraySink, tableSink, errorCode); + if (U_SUCCESS(pathErrorCode)) { + getAllItemsWithFallback(rb, value, sink, errorCode); } ures_close(&containerBundle); ures_close(&parentBundle); } } -void getAllContainerItemsWithFallback( - const UResourceBundle *bundle, const char *path, - ResourceArraySink *arraySink, ResourceTableSink *tableSink, - UErrorCode &errorCode) { +} // namespace + +U_CAPI void U_EXPORT2 +ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path, + icu::ResourceSink &sink, UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } if (path == NULL) { errorCode = U_ILLEGAL_ARGUMENT_ERROR; @@ -1973,32 +1971,12 @@ void getAllContainerItemsWithFallback( return; } } - UResType expectedType = arraySink != NULL ? URES_ARRAY : URES_TABLE; - if (ures_getType(rb) != expectedType) { - errorCode = U_RESOURCE_TYPE_MISMATCH; - ures_close(&stackBundle); - return; - } // Get all table items with fallback. ResourceDataValue value; - getAllContainerItemsWithFallback(rb, value, arraySink, tableSink, errorCode); + getAllItemsWithFallback(rb, value, sink, errorCode); ures_close(&stackBundle); } -} // namespace - -U_CAPI void U_EXPORT2 -ures_getAllArrayItemsWithFallback(const UResourceBundle *bundle, const char *path, - ResourceArraySink &sink, UErrorCode &errorCode) { - getAllContainerItemsWithFallback(bundle, path, &sink, NULL, errorCode); -} - -U_CAPI void U_EXPORT2 -ures_getAllTableItemsWithFallback(const UResourceBundle *bundle, const char *path, - ResourceTableSink &sink, UErrorCode &errorCode) { - getAllContainerItemsWithFallback(bundle, path, NULL, &sink, errorCode); -} - U_CAPI UResourceBundle* U_EXPORT2 ures_getByKey(const UResourceBundle *resB, const char* inKey, UResourceBundle *fillIn, UErrorCode *status) { Resource res = RES_BOGUS; UResourceDataEntry *realData = NULL; @@ -2430,7 +2408,10 @@ ures_loc_countLocales(UEnumeration *en, UErrorCode * /*status*/) { return ures_getSize(&ctx->installed); } -static const char* U_CALLCONV +U_CDECL_BEGIN + + +static const char * U_CALLCONV ures_loc_nextLocale(UEnumeration* en, int32_t* resultLength, UErrorCode* status) { @@ -2456,6 +2437,7 @@ ures_loc_resetLocales(UEnumeration* en, ures_resetIterator(res); } +U_CDECL_END static const UEnumeration gLocalesEnum = { NULL, diff --git a/deps/icu-small/source/common/uresdata.cpp b/deps/icu-small/source/common/uresdata.cpp index 00231d7fc20018..f775bcdffb57a7 100644 --- a/deps/icu-small/source/common/uresdata.cpp +++ b/deps/icu-small/source/common/uresdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1999-2016, International Business Machines Corporation @@ -380,6 +382,36 @@ UBool isNoInheritanceMarker(const ResourceData *pResData, Resource res) { return FALSE; } +int32_t getStringArray(const ResourceData *pResData, const icu::ResourceArray &array, + icu::UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) { + if(U_FAILURE(errorCode)) { + return 0; + } + if(dest == NULL ? capacity != 0 : capacity < 0) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + int32_t length = array.getSize(); + if(length == 0) { + return 0; + } + if(length > capacity) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + return length; + } + for(int32_t i = 0; i < length; ++i) { + int32_t sLength; + const UChar *s = res_getString(pResData, array.internalGetResource(pResData, i), &sLength); + if(s == NULL) { + errorCode = U_RESOURCE_TYPE_MISMATCH; + return 0; + } + dest[i].setTo(TRUE, s, sLength); + } + return length; +} + } // namespace U_CAPI const UChar * U_EXPORT2 @@ -463,42 +495,6 @@ res_countArrayItems(const ResourceData *pResData, Resource res) { } } -namespace { - -int32_t getArrayLength(const ResourceData *pResData, Resource res) { - uint32_t offset=RES_GET_OFFSET(res); - if(offset == 0) { - return 0; - } - int32_t type = RES_GET_TYPE(res); - if(type == URES_ARRAY) { - return *(pResData->pRoot+offset); - } else if(type == URES_ARRAY16) { - return pResData->p16BitUnits[offset]; - } else { - return 0; - } -} - -int32_t getTableLength(const ResourceData *pResData, Resource res) { - uint32_t offset=RES_GET_OFFSET(res); - if(offset == 0) { - return 0; - } - int32_t type = RES_GET_TYPE(res); - if(type == URES_TABLE) { - return *((const uint16_t *)(pResData->pRoot+offset)); - } else if(type == URES_TABLE16) { - return pResData->p16BitUnits[offset]; - } else if(type == URES_TABLE32) { - return *(pResData->pRoot+offset); - } else { - return 0; - } -} - -} // namespace - U_NAMESPACE_BEGIN ResourceDataValue::~ResourceDataValue() {} @@ -571,6 +567,130 @@ const uint8_t *ResourceDataValue::getBinary(int32_t &length, UErrorCode &errorCo return b; } +ResourceArray ResourceDataValue::getArray(UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return ResourceArray(); + } + const uint16_t *items16 = NULL; + const Resource *items32 = NULL; + uint32_t offset=RES_GET_OFFSET(res); + int32_t length = 0; + switch(RES_GET_TYPE(res)) { + case URES_ARRAY: + if (offset!=0) { // empty if offset==0 + items32 = (const Resource *)pResData->pRoot+offset; + length = *items32++; + } + break; + case URES_ARRAY16: + items16 = pResData->p16BitUnits+offset; + length = *items16++; + break; + default: + errorCode = U_RESOURCE_TYPE_MISMATCH; + return ResourceArray(); + } + return ResourceArray(items16, items32, length); +} + +ResourceTable ResourceDataValue::getTable(UErrorCode &errorCode) const { + if(U_FAILURE(errorCode)) { + return ResourceTable(); + } + const uint16_t *keys16 = NULL; + const int32_t *keys32 = NULL; + const uint16_t *items16 = NULL; + const Resource *items32 = NULL; + uint32_t offset = RES_GET_OFFSET(res); + int32_t length = 0; + switch(RES_GET_TYPE(res)) { + case URES_TABLE: + if (offset != 0) { // empty if offset==0 + keys16 = (const uint16_t *)(pResData->pRoot+offset); + length = *keys16++; + items32 = (const Resource *)(keys16+length+(~length&1)); + } + break; + case URES_TABLE16: + keys16 = pResData->p16BitUnits+offset; + length = *keys16++; + items16 = keys16 + length; + break; + case URES_TABLE32: + if (offset != 0) { // empty if offset==0 + keys32 = pResData->pRoot+offset; + length = *keys32++; + items32 = (const Resource *)keys32 + length; + } + break; + default: + errorCode = U_RESOURCE_TYPE_MISMATCH; + return ResourceTable(); + } + return ResourceTable(keys16, keys32, items16, items32, length); +} + +UBool ResourceDataValue::isNoInheritanceMarker() const { + return ::isNoInheritanceMarker(pResData, res); +} + +int32_t ResourceDataValue::getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const { + return ::getStringArray(pResData, getArray(errorCode), dest, capacity, errorCode); +} + +int32_t ResourceDataValue::getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const { + if(URES_IS_ARRAY(res)) { + return ::getStringArray(pResData, getArray(errorCode), dest, capacity, errorCode); + } + if(U_FAILURE(errorCode)) { + return 0; + } + if(dest == NULL ? capacity != 0 : capacity < 0) { + errorCode = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + if(capacity < 1) { + errorCode = U_BUFFER_OVERFLOW_ERROR; + return 1; + } + int32_t sLength; + const UChar *s = res_getString(pResData, res, &sLength); + if(s != NULL) { + dest[0].setTo(TRUE, s, sLength); + return 1; + } + errorCode = U_RESOURCE_TYPE_MISMATCH; + return 0; +} + +UnicodeString ResourceDataValue::getStringOrFirstOfArray(UErrorCode &errorCode) const { + UnicodeString us; + if(U_FAILURE(errorCode)) { + return us; + } + int32_t sLength; + const UChar *s = res_getString(pResData, res, &sLength); + if(s != NULL) { + us.setTo(TRUE, s, sLength); + return us; + } + ResourceArray array = getArray(errorCode); + if(U_FAILURE(errorCode)) { + return us; + } + if(array.getSize() > 0) { + s = res_getString(pResData, array.internalGetResource(pResData, 0), &sLength); + if(s != NULL) { + us.setTo(TRUE, s, sLength); + return us; + } + } + errorCode = U_RESOURCE_TYPE_MISMATCH; + return us; +} + U_NAMESPACE_END static Resource @@ -691,91 +811,26 @@ res_getResource(const ResourceData *pResData, const char *key) { return res_getTableItemByKey(pResData, pResData->rootRes, &idx, &realKey); } -// TODO: Ported from Java, but enumerating at this low level may prevent us -// from doing necessary things, like resolving aliases, -// which need access to higher-level UResourceBundle code. -// Consider porting the low-level Container/Array/Table classes from Java, -// with getters for keys and values, -// and doing the enumeration in the higher-level code on top of those accessors. -U_CFUNC void -ures_getAllTableItems(const ResourceData *pResData, Resource table, - icu::ResourceDataValue &value, icu::ResourceTableSink &sink, - UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { return; } - const uint16_t *keys16 = NULL; - const int32_t *keys32 = NULL; - const uint16_t *items16 = NULL; - const Resource *items32 = NULL; - uint32_t offset = RES_GET_OFFSET(table); - int32_t length = 0; - switch(RES_GET_TYPE(table)) { - case URES_TABLE: { - if (offset != 0) { /* empty if offset==0 */ - keys16 = (const uint16_t *)(pResData->pRoot+offset); - length = *keys16++; - items32 = (const Resource *)(keys16+length+(~length&1)); - } - break; - } - case URES_TABLE16: { - keys16 = pResData->p16BitUnits+offset; - length = *keys16++; - items16 = keys16 + length; - break; - } - case URES_TABLE32: { - if (offset != 0) { /* empty if offset==0 */ - keys32 = pResData->pRoot+offset; - length = *keys32++; - items32 = (const Resource *)keys32 + length; - } - break; - } - default: - errorCode = U_RESOURCE_TYPE_MISMATCH; - return; - } - for (int32_t i = 0; i < length; ++i) { - const char *key; +UBool icu::ResourceTable::getKeyAndValue(int32_t i, + const char *&key, icu::ResourceValue &value) const { + if(0 <= i && i < length) { + icu::ResourceDataValue &rdValue = static_cast(value); if (keys16 != NULL) { - key=RES_GET_KEY16(pResData, keys16[i]); + key = RES_GET_KEY16(rdValue.pResData, keys16[i]); } else { - key=RES_GET_KEY32(pResData, keys32[i]); + key = RES_GET_KEY32(rdValue.pResData, keys32[i]); } Resource res; if (items16 != NULL) { - res = makeResourceFrom16(pResData, items16[i]); + res = makeResourceFrom16(rdValue.pResData, items16[i]); } else { res = items32[i]; } - int32_t type = RES_GET_TYPE(res); - if (URES_IS_ARRAY(type)) { - int32_t numItems = getArrayLength(pResData, res); - icu::ResourceArraySink *subSink = sink.getOrCreateArraySink(key, numItems, errorCode); - if (subSink != NULL) { - ures_getAllArrayItems(pResData, res, value, *subSink, errorCode); - } - } else if (URES_IS_TABLE(type)) { - int32_t numItems = getTableLength(pResData, res); - icu::ResourceTableSink *subSink = sink.getOrCreateTableSink(key, numItems, errorCode); - if (subSink != NULL) { - ures_getAllTableItems(pResData, res, value, *subSink, errorCode); - } - /* TODO: settle on how to deal with aliases, port to Java - } else if (type == URES_ALIAS) { - // aliases not handled in resource enumeration - errorCode = U_UNSUPPORTED_ERROR; - return; */ - } else if (isNoInheritanceMarker(pResData, res)) { - sink.putNoFallback(key, errorCode); - } else { - value.setResource(res); - sink.put(key, value, errorCode); - } - if(U_FAILURE(errorCode)) { return; } + rdValue.setResource(res); + return TRUE; } - sink.leave(errorCode); + return FALSE; } U_CAPI Resource U_EXPORT2 @@ -805,65 +860,21 @@ res_getArrayItem(const ResourceData *pResData, Resource array, int32_t indexR) { return RES_BOGUS; } -U_CFUNC void -ures_getAllArrayItems(const ResourceData *pResData, Resource array, - icu::ResourceDataValue &value, icu::ResourceArraySink &sink, - UErrorCode &errorCode) { - if(U_FAILURE(errorCode)) { return; } - const uint16_t *items16 = NULL; - const Resource *items32 = NULL; - uint32_t offset=RES_GET_OFFSET(array); - int32_t length = 0; - switch(RES_GET_TYPE(array)) { - case URES_ARRAY: { - if (offset!=0) { /* empty if offset==0 */ - items32 = (const Resource *)pResData->pRoot+offset; - length = *items32++; - } - break; - } - case URES_ARRAY16: { - items16 = pResData->p16BitUnits+offset; - length = *items16++; - break; - } - default: - errorCode = U_RESOURCE_TYPE_MISMATCH; - return; +uint32_t icu::ResourceArray::internalGetResource(const ResourceData *pResData, int32_t i) const { + if (items16 != NULL) { + return makeResourceFrom16(pResData, items16[i]); + } else { + return items32[i]; } +} - for (int32_t i = 0; i < length; ++i) { - Resource res; - if (items16 != NULL) { - res = makeResourceFrom16(pResData, items16[i]); - } else { - res = items32[i]; - } - int32_t type = RES_GET_TYPE(res); - if (URES_IS_ARRAY(type)) { - int32_t numItems = getArrayLength(pResData, res); - icu::ResourceArraySink *subSink = sink.getOrCreateArraySink(i, numItems, errorCode); - if (subSink != NULL) { - ures_getAllArrayItems(pResData, res, value, *subSink, errorCode); - } - } else if (URES_IS_TABLE(type)) { - int32_t numItems = getTableLength(pResData, res); - icu::ResourceTableSink *subSink = sink.getOrCreateTableSink(i, numItems, errorCode); - if (subSink != NULL) { - ures_getAllTableItems(pResData, res, value, *subSink, errorCode); - } - /* TODO: settle on how to deal with aliases, port to Java - } else if (type == URES_ALIAS) { - // aliases not handled in resource enumeration - errorCode = U_UNSUPPORTED_ERROR; - return; */ - } else { - value.setResource(res); - sink.put(i, value, errorCode); - } - if(U_FAILURE(errorCode)) { return; } +UBool icu::ResourceArray::getValue(int32_t i, icu::ResourceValue &value) const { + if(0 <= i && i < length) { + icu::ResourceDataValue &rdValue = static_cast(value); + rdValue.setResource(internalGetResource(rdValue.pResData, i)); + return TRUE; } - sink.leave(errorCode); + return FALSE; } U_CFUNC Resource @@ -974,7 +985,7 @@ typedef struct Row { int32_t keyIndex, sortIndex; } Row; -static int32_t +static int32_t U_CALLCONV ures_compareRows(const void *context, const void *left, const void *right) { const char *keyChars=(const char *)context; return (int32_t)uprv_strcmp(keyChars+((const Row *)left)->keyIndex, diff --git a/deps/icu-small/source/common/uresdata.h b/deps/icu-small/source/common/uresdata.h index 1afa77c0748eb4..ae7d9a817d2b2f 100644 --- a/deps/icu-small/source/common/uresdata.h +++ b/deps/icu-small/source/common/uresdata.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** -* Copyright (C) 1999-2015, International Business Machines +* Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. ****************************************************************************** * file name: uresdata.h @@ -379,7 +381,7 @@ enum { /* * Structure for a single, memory-mapped ResourceBundle. */ -typedef struct { +typedef struct ResourceData { UDataMemory *data; const int32_t *pRoot; const uint16_t *p16BitUnits; @@ -486,6 +488,14 @@ class ResourceDataValue : public ResourceValue { virtual uint32_t getUInt(UErrorCode &errorCode) const; virtual const int32_t *getIntVector(int32_t &length, UErrorCode &errorCode) const; virtual const uint8_t *getBinary(int32_t &length, UErrorCode &errorCode) const; + virtual ResourceArray getArray(UErrorCode &errorCode) const; + virtual ResourceTable getTable(UErrorCode &errorCode) const; + virtual UBool isNoInheritanceMarker() const; + virtual int32_t getStringArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const; + virtual int32_t getStringArrayOrStringAsArray(UnicodeString *dest, int32_t capacity, + UErrorCode &errorCode) const; + virtual UnicodeString getStringOrFirstOfArray(UErrorCode &errorCode) const; const ResourceData *pResData; @@ -495,24 +505,6 @@ class ResourceDataValue : public ResourceValue { U_NAMESPACE_END -/** - * @param value will be set during enumeration; input contents is ignored - * @param sink receives all table item key-value pairs - */ -U_CFUNC void -ures_getAllTableItems(const ResourceData *pResData, Resource table, - icu::ResourceDataValue &value, icu::ResourceTableSink &sink, - UErrorCode &errorCode); - -/** - * @param value will be set during enumeration; input contents is ignored - * @param sink receives all array item values - */ -U_CFUNC void -ures_getAllArrayItems(const ResourceData *pResData, Resource array, - icu::ResourceDataValue &value, icu::ResourceArraySink &sink, - UErrorCode &errorCode); - #endif /* __cplusplus */ /** diff --git a/deps/icu-small/source/common/uresimp.h b/deps/icu-small/source/common/uresimp.h index ce0b03ccf8233f..8339240a276b6f 100644 --- a/deps/icu-small/source/common/uresimp.h +++ b/deps/icu-small/source/common/uresimp.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** -* Copyright (C) 2000-2015, International Business Machines +* Copyright (C) 2000-2016, International Business Machines * Corporation and others. All Rights Reserved. ********************************************************************** */ @@ -225,12 +227,8 @@ ures_getStringByKeyWithFallback(const UResourceBundle *resB, #ifdef __cplusplus U_CAPI void U_EXPORT2 -ures_getAllArrayItemsWithFallback(const UResourceBundle *bundle, const char *path, - icu::ResourceArraySink &sink, UErrorCode &errorCode); - -U_CAPI void U_EXPORT2 -ures_getAllTableItemsWithFallback(const UResourceBundle *bundle, const char *path, - icu::ResourceTableSink &sink, UErrorCode &errorCode); +ures_getAllItemsWithFallback(const UResourceBundle *bundle, const char *path, + icu::ResourceSink &sink, UErrorCode &errorCode); #endif /* __cplusplus */ diff --git a/deps/icu-small/source/common/ureslocs.h b/deps/icu-small/source/common/ureslocs.h index e89ddb95ff69dd..85dd8fb4b7f211 100644 --- a/deps/icu-small/source/common/ureslocs.h +++ b/deps/icu-small/source/common/ureslocs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2009-2014 International Business Machines diff --git a/deps/icu-small/source/common/usc_impl.c b/deps/icu-small/source/common/usc_impl.c index a66e0d5edca020..c2b2a3656c4ebb 100644 --- a/deps/icu-small/source/common/usc_impl.c +++ b/deps/icu-small/source/common/usc_impl.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/common/usc_impl.h b/deps/icu-small/source/common/usc_impl.h index 2e972b0e9a9378..7c9c5e095052ff 100644 --- a/deps/icu-small/source/common/usc_impl.h +++ b/deps/icu-small/source/common/usc_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/uscript.c b/deps/icu-small/source/common/uscript.c index 3700099cd2a70e..336e185799ab96 100644 --- a/deps/icu-small/source/common/uscript.c +++ b/deps/icu-small/source/common/uscript.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2014, International Business Machines diff --git a/deps/icu-small/source/common/uscript_props.cpp b/deps/icu-small/source/common/uscript_props.cpp index fa7f78afd99c2e..20c7cdce2ffad1 100644 --- a/deps/icu-small/source/common/uscript_props.cpp +++ b/deps/icu-small/source/common/uscript_props.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2013-2015, International Business Machines +* Copyright (C) 2013-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: uscript_props.cpp @@ -72,7 +74,7 @@ const int32_t SCRIPT_PROPS[] = { 0x1826 | ASPIRATIONAL, // Mong 0x1000 | RECOMMENDED | LB_LETTERS, // Mymr 0x168F | EXCLUSION, // Ogam - 0x10308 | EXCLUSION, // Ital + 0x10300 | EXCLUSION, // Ital 0x0B15 | RECOMMENDED, // Orya 0x16A0 | EXCLUSION, // Runr 0x0D85 | RECOMMENDED, // Sinh @@ -102,7 +104,7 @@ const int32_t SCRIPT_PROPS[] = { 0x10A00 | EXCLUSION | RTL, // Khar 0xA800 | LIMITED_USE, // Sylo 0x1980 | LIMITED_USE | LB_LETTERS, // Talu - 0x2D5E | ASPIRATIONAL, // Tfng + 0x2D30 | ASPIRATIONAL, // Tfng 0x103A0 | EXCLUSION, // Xpeo 0x1B05 | LIMITED_USE, // Bali 0x1BC0 | LIMITED_USE, // Batk @@ -129,7 +131,7 @@ const int32_t SCRIPT_PROPS[] = { 0x0840 | LIMITED_USE | RTL, // Mand 0, 0x10980 | EXCLUSION | RTL, // Mero - 0x07D8 | LIMITED_USE | RTL, // Nkoo + 0x07CA | LIMITED_USE | RTL, // Nkoo 0x10C00 | EXCLUSION | RTL, // Orkh 0x1036B | EXCLUSION, // Perm 0xA840 | EXCLUSION, // Phag @@ -146,7 +148,7 @@ const int32_t SCRIPT_PROPS[] = { 0x12000 | EXCLUSION, // Xsux 0, 0xFDD0 | UNKNOWN, // Zzzz - 0x102B7 | EXCLUSION, // Cari + 0x102A0 | EXCLUSION, // Cari 0x304B | RECOMMENDED | LB_LETTERS, // Jpan 0x1A20 | LIMITED_USE | LB_LETTERS, // Lana 0x10280 | EXCLUSION, // Lyci @@ -163,7 +165,7 @@ const int32_t SCRIPT_PROPS[] = { 0x11103 | LIMITED_USE, // Cakm 0xAC00 | RECOMMENDED, // Kore 0x11083 | EXCLUSION, // Kthi - 0x10AC1 | EXCLUSION | RTL, // Mani + 0x10AD8 | EXCLUSION | RTL, // Mani 0x10B60 | EXCLUSION | RTL, // Phli 0x10B8F | EXCLUSION | RTL, // Phlp 0, @@ -173,7 +175,7 @@ const int32_t SCRIPT_PROPS[] = { 0, 0, 0xA6A0 | LIMITED_USE, // Bamu - 0xA4E8 | LIMITED_USE, // Lisu + 0xA4D0 | LIMITED_USE, // Lisu 0, 0x10A60 | EXCLUSION | RTL, // Sarb 0x16AE6 | EXCLUSION, // Bass @@ -196,7 +198,7 @@ const int32_t SCRIPT_PROPS[] = { 0x11183 | EXCLUSION, // Shrd 0x110D0 | EXCLUSION, // Sora 0x11680 | EXCLUSION, // Takr - 0, + 0x18229 | EXCLUSION | LB_LETTERS, // Tang 0, 0x14400 | EXCLUSION, // Hluw 0x11208 | EXCLUSION, // Khoj @@ -209,6 +211,14 @@ const int32_t SCRIPT_PROPS[] = { 0x1128F | EXCLUSION, // Mult 0x11AC0 | EXCLUSION, // Pauc 0x1158E | EXCLUSION, // Sidd + 0x1E909 | LIMITED_USE | RTL | CASED, // Adlm + 0x11C0E | EXCLUSION, // Bhks + 0x11C72 | EXCLUSION, // Marc + 0x11412 | LIMITED_USE, // Newa + 0x104B5 | LIMITED_USE | CASED, // Osge + 0x5B57 | RECOMMENDED | LB_LETTERS, // Hanb + 0x1112 | RECOMMENDED, // Jamo + 0, // End copy-paste from parsescriptmetadata.py }; diff --git a/deps/icu-small/source/common/uset.cpp b/deps/icu-small/source/common/uset.cpp index 717ea0430aaa4a..f15d4a14ab7d81 100644 --- a/deps/icu-small/source/common/uset.cpp +++ b/deps/icu-small/source/common/uset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uset_imp.h b/deps/icu-small/source/common/uset_imp.h index a7171ad715765c..8cb31edfcf779e 100644 --- a/deps/icu-small/source/common/uset_imp.h +++ b/deps/icu-small/source/common/uset_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/uset_props.cpp b/deps/icu-small/source/common/uset_props.cpp index ccbaf91e34eeac..cf772957ee5eac 100644 --- a/deps/icu-small/source/common/uset_props.cpp +++ b/deps/icu-small/source/common/uset_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/usetiter.cpp b/deps/icu-small/source/common/usetiter.cpp index bd1ecaa0e7753a..2be2079c513069 100644 --- a/deps/icu-small/source/common/usetiter.cpp +++ b/deps/icu-small/source/common/usetiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2006, International Business Machines diff --git a/deps/icu-small/source/common/ushape.cpp b/deps/icu-small/source/common/ushape.cpp index 16442072702dbd..4913a3ff573ce7 100644 --- a/deps/icu-small/source/common/ushape.cpp +++ b/deps/icu-small/source/common/ushape.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -777,7 +779,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, count--; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = u_strlen(dest); } @@ -835,7 +837,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, tempbuffer[i] = SPACE_CHAR; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = sourceLength; } @@ -877,7 +879,7 @@ handleGeneratedSpaces(UChar *dest, int32_t sourceLength, count--; } - uprv_memcpy(dest,tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); destSize = sourceLength; } @@ -941,7 +943,7 @@ expandCompositCharAtBegin(UChar *dest, int32_t sourceLength, int32_t destSize,UE i--; j--; } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); uprv_free(tempbuffer); @@ -1002,14 +1004,14 @@ expandCompositCharAtEnd(UChar *dest, int32_t sourceLength, int32_t destSize,UErr } if(countr > 0) { - uprv_memmove(tempbuffer, tempbuffer+countr, sourceLength*U_SIZEOF_UCHAR); + u_memmove(tempbuffer, tempbuffer+countr, sourceLength); if(u_strlen(tempbuffer) < sourceLength) { for(i=sourceLength-1;i>=sourceLength-countr;i--) { tempbuffer[i] = SPACE_CHAR; } } } - uprv_memcpy(dest, tempbuffer, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, sourceLength); uprv_free(tempbuffer); @@ -1177,7 +1179,7 @@ expandCompositChar(UChar *dest, int32_t sourceLength, j++; } - uprv_memcpy(dest, tempbuffer, destSize*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, destSize); } } @@ -1571,7 +1573,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, return 0; } } - uprv_memcpy(tempbuffer, source, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(tempbuffer, source, sourceLength); if (tempsource != NULL){ uprv_free(tempsource); } @@ -1637,7 +1639,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, countSpaces(tempbuffer,destLength,options,&spacesCountl,&spacesCountr); invertBuffer(tempbuffer,destLength,options,spacesCountl,spacesCountr); } - uprv_memcpy(dest, tempbuffer, uprv_min(destLength, destCapacity)*U_SIZEOF_UCHAR); + u_memcpy(dest, tempbuffer, uprv_min(destLength, destCapacity)); if(tempbuffer!=buffer) { uprv_free(tempbuffer); @@ -1659,7 +1661,7 @@ u_shapeArabic(const UChar *source, int32_t sourceLength, *pErrorCode=U_BUFFER_OVERFLOW_ERROR; return sourceLength; } - uprv_memcpy(dest, source, sourceLength*U_SIZEOF_UCHAR); + u_memcpy(dest, source, sourceLength); destLength=sourceLength; } diff --git a/deps/icu-small/source/common/usprep.cpp b/deps/icu-small/source/common/usprep.cpp index a3ff4e289d4b27..fb9c18b66bc83e 100644 --- a/deps/icu-small/source/common/usprep.cpp +++ b/deps/icu-small/source/common/usprep.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ustack.cpp b/deps/icu-small/source/common/ustack.cpp index c58de7ba1f5336..1de79ecfe3559c 100644 --- a/deps/icu-small/source/common/ustack.cpp +++ b/deps/icu-small/source/common/ustack.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2003-2011, International Business Machines diff --git a/deps/icu-small/source/common/ustr_cnv.cpp b/deps/icu-small/source/common/ustr_cnv.cpp index 6d3cd567059028..4b845d5adca0e7 100644 --- a/deps/icu-small/source/common/ustr_cnv.cpp +++ b/deps/icu-small/source/common/ustr_cnv.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/ustr_cnv.h b/deps/icu-small/source/common/ustr_cnv.h index eefeaa5328dcd7..e647356560e95f 100644 --- a/deps/icu-small/source/common/ustr_cnv.h +++ b/deps/icu-small/source/common/ustr_cnv.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2010, International Business Machines diff --git a/deps/icu-small/source/common/ustr_imp.h b/deps/icu-small/source/common/ustr_imp.h index 6881bce6a944dc..21ee6cba624aac 100644 --- a/deps/icu-small/source/common/ustr_imp.h +++ b/deps/icu-small/source/common/ustr_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines @@ -218,6 +220,44 @@ ucasemap_mapUTF8(const UCaseMap *csm, UTF8CaseMapper *stringCaseMapper, UErrorCode *pErrorCode); +#ifdef __cplusplus + +U_NAMESPACE_BEGIN +namespace GreekUpper { + +// Data bits. +static const uint32_t UPPER_MASK = 0x3ff; +static const uint32_t HAS_VOWEL = 0x1000; +static const uint32_t HAS_YPOGEGRAMMENI = 0x2000; +static const uint32_t HAS_ACCENT = 0x4000; +static const uint32_t HAS_DIALYTIKA = 0x8000; +// Further bits during data building and processing, not stored in the data map. +static const uint32_t HAS_COMBINING_DIALYTIKA = 0x10000; +static const uint32_t HAS_OTHER_GREEK_DIACRITIC = 0x20000; + +static const uint32_t HAS_VOWEL_AND_ACCENT = HAS_VOWEL | HAS_ACCENT; +static const uint32_t HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA = + HAS_VOWEL_AND_ACCENT | HAS_DIALYTIKA; +static const uint32_t HAS_EITHER_DIALYTIKA = HAS_DIALYTIKA | HAS_COMBINING_DIALYTIKA; + +// State bits. +static const uint32_t AFTER_CASED = 1; +static const uint32_t AFTER_VOWEL_WITH_ACCENT = 2; + +uint32_t getLetterData(UChar32 c); + +/** + * Returns a non-zero value for each of the Greek combining diacritics + * listed in The Unicode Standard, version 8, chapter 7.2 Greek, + * plus some perispomeni look-alikes. + */ +uint32_t getDiacriticData(UChar32 c); + +} // namespace GreekUpper +U_NAMESPACE_END + +#endif // __cplusplus + U_CAPI int32_t U_EXPORT2 ustr_hashUCharsN(const UChar *str, int32_t length); diff --git a/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp b/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp index 4a2352eed507dd..63808776199cc4 100644 --- a/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp +++ b/deps/icu-small/source/common/ustr_titlecase_brkiter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/ustr_wcs.cpp b/deps/icu-small/source/common/ustr_wcs.cpp index 33a7b194553427..572e41290f59f8 100644 --- a/deps/icu-small/source/common/ustr_wcs.cpp +++ b/deps/icu-small/source/common/ustr_wcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -42,7 +44,7 @@ u_growAnyBufferFromStatic(void *context, char *newBuffer=(char *)uprv_malloc(reqCapacity*size); if(newBuffer!=NULL) { if(length>0) { - uprv_memcpy(newBuffer, *pBuffer, length*size); + uprv_memcpy(newBuffer, *pBuffer, (size_t)length*size); } *pCapacity=reqCapacity; } else { @@ -200,7 +202,7 @@ _strToWCS(wchar_t *dest, count = (int32_t)(pIntTarget-intTarget); if(0 < count && count <= destCapacity){ - uprv_memcpy(dest,intTarget,count*sizeof(wchar_t)); + uprv_memcpy(dest, intTarget, (size_t)count*sizeof(wchar_t)); } if(pDestLength){ @@ -252,13 +254,13 @@ u_strToWCS(wchar_t *dest, srcLength = u_strlen(src); } if(0 < srcLength && srcLength <= destCapacity){ - uprv_memcpy(dest,src,srcLength*U_SIZEOF_UCHAR); + u_memcpy(dest, src, srcLength); } if(pDestLength){ *pDestLength = srcLength; } - u_terminateUChars(dest,destCapacity,srcLength,pErrorCode); + u_terminateUChars((UChar *)dest,destCapacity,srcLength,pErrorCode); return dest; @@ -395,7 +397,7 @@ _strFromWCS( UChar *dest, } if(nulLen>0){ /* copy the contents to tempStack */ - uprv_memcpy(pWStack,pSrc,nulLen*sizeof(wchar_t)); + uprv_memcpy(pWStack, pSrc, (size_t)nulLen*sizeof(wchar_t)); } /* null terminate the tempBuffer */ @@ -504,10 +506,10 @@ u_strFromWCS(UChar *dest, #ifdef U_WCHAR_IS_UTF16 /* wchar_t is UTF-16 just do a memcpy */ if(srcLength == -1){ - srcLength = u_strlen(src); + srcLength = u_strlen((const UChar *)src); } if(0 < srcLength && srcLength <= destCapacity){ - uprv_memcpy(dest,src,srcLength*U_SIZEOF_UCHAR); + u_memcpy(dest, src, srcLength); } if(pDestLength){ *pDestLength = srcLength; diff --git a/deps/icu-small/source/common/ustrcase.cpp b/deps/icu-small/source/common/ustrcase.cpp index 44952c4ee8122c..69c17e43b9b612 100644 --- a/deps/icu-small/source/common/ustrcase.cpp +++ b/deps/icu-small/source/common/ustrcase.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -45,24 +47,27 @@ appendResult(UChar *dest, int32_t destIndex, int32_t destCapacity, if(result<0) { /* (not) original code point */ c=~result; - length=-1; + length=U16_LENGTH(c); } else if(result<=UCASE_MAX_STRING_LENGTH) { c=U_SENTINEL; length=result; } else { c=result; - length=-1; + length=U16_LENGTH(c); + } + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } if(destIndex=0) { /* code point */ UBool isError=FALSE; U16_APPEND(dest, destIndex, destCapacity, c, isError); if(isError) { /* overflow, nothing written */ - destIndex+=U16_LENGTH(c); + destIndex+=length; } } else { /* string */ @@ -78,11 +83,32 @@ appendResult(UChar *dest, int32_t destIndex, int32_t destCapacity, } } else { /* preflight */ - if(length<0) { - destIndex+=U16_LENGTH(c); - } else { - destIndex+=length; + destIndex+=length; + } + return destIndex; +} + +static inline int32_t +appendUChar(UChar *dest, int32_t destIndex, int32_t destCapacity, UChar c) { + if(destIndex0) { + if(length>(INT32_MAX-destIndex)) { + return -1; // integer overflow } + if((destIndex+length)<=destCapacity) { + u_memcpy(dest+destIndex, s, length); + } + destIndex+=length; } return destIndex; } @@ -149,6 +175,10 @@ _caseMap(const UCaseMap *csm, UCaseMapFull *map, dest[destIndex++]=(UChar)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -167,7 +197,7 @@ ustrcase_internalToTitle(const UCaseMap *csm, UErrorCode *pErrorCode) { const UChar *s; UChar32 c; - int32_t prev, titleStart, titleLimit, idx, destIndex, length; + int32_t prev, titleStart, titleLimit, idx, destIndex; UBool isFirstIndex; if(U_FAILURE(*pErrorCode)) { @@ -233,12 +263,10 @@ ustrcase_internalToTitle(const UCaseMap *csm, break; /* cased letter at [titleStart..titleLimit[ */ } } - length=titleStart-prev; - if(length>0) { - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+prev, length*U_SIZEOF_UCHAR); - } - destIndex+=length; + destIndex=appendString(dest, destIndex, destCapacity, src+prev, titleStart-prev); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } } @@ -248,15 +276,22 @@ ustrcase_internalToTitle(const UCaseMap *csm, csc.cpLimit=titleLimit; c=ucase_toFullTitle(csm->csp, c, utf16_caseContextIterator, &csc, &s, csm->locale, &locCache); destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } /* Special case Dutch IJ titlecasing */ - if ( titleStart+1 < idx && - ucase_getCaseLocale(csm->locale,&locCache) == UCASE_LOC_DUTCH && - ( src[titleStart] == (UChar32) 0x0049 || src[titleStart] == (UChar32) 0x0069 ) && - ( src[titleStart+1] == (UChar32) 0x004A || src[titleStart+1] == (UChar32) 0x006A )) { - c=(UChar32) 0x004A; - destIndex=appendResult(dest, destIndex, destCapacity, c, s); - titleLimit++; + if (titleStart+1 < idx && + ucase_getCaseLocale(csm->locale,&locCache) == UCASE_LOC_DUTCH && + (src[titleStart] == 0x0049 || src[titleStart] == 0x0069) && + (src[titleStart+1] == 0x004A || src[titleStart+1] == 0x006A)) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x004A); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + titleLimit++; } /* lowercase [titleLimit..index[ */ @@ -270,13 +305,16 @@ ustrcase_internalToTitle(const UCaseMap *csm, src, &csc, titleLimit, idx, pErrorCode); + if(U_FAILURE(*pErrorCode)) { + return destIndex; + } } else { /* Optionally just copy the rest of the word unchanged. */ - length=idx-titleLimit; - if((destIndex+length)<=destCapacity) { - uprv_memcpy(dest+destIndex, src+titleLimit, length*U_SIZEOF_UCHAR); + destIndex=appendString(dest, destIndex, destCapacity, src+titleLimit, idx-titleLimit); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; } - destIndex+=length; } } } @@ -293,6 +331,605 @@ ustrcase_internalToTitle(const UCaseMap *csm, #endif // !UCONFIG_NO_BREAK_ITERATION +U_NAMESPACE_BEGIN +namespace GreekUpper { + +// Data generated by prototype code, see +// http://site.icu-project.org/design/case/greek-upper +// TODO: Move this data into ucase.icu. +static const uint16_t data0370[] = { + // U+0370..03FF + 0x0370, + 0x0370, + 0x0372, + 0x0372, + 0, + 0, + 0x0376, + 0x0376, + 0, + 0, + 0x037A, + 0x03FD, + 0x03FE, + 0x03FF, + 0, + 0x037F, + 0, + 0, + 0, + 0, + 0, + 0, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL, + 0x0392, + 0x0393, + 0x0394, + 0x0395 | HAS_VOWEL, + 0x0396, + 0x0397 | HAS_VOWEL, + 0x0398, + 0x0399 | HAS_VOWEL, + 0x039A, + 0x039B, + 0x039C, + 0x039D, + 0x039E, + 0x039F | HAS_VOWEL, + 0x03A0, + 0x03A1, + 0, + 0x03A3, + 0x03A4, + 0x03A5 | HAS_VOWEL, + 0x03A6, + 0x03A7, + 0x03A8, + 0x03A9 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0391 | HAS_VOWEL, + 0x0392, + 0x0393, + 0x0394, + 0x0395 | HAS_VOWEL, + 0x0396, + 0x0397 | HAS_VOWEL, + 0x0398, + 0x0399 | HAS_VOWEL, + 0x039A, + 0x039B, + 0x039C, + 0x039D, + 0x039E, + 0x039F | HAS_VOWEL, + 0x03A0, + 0x03A1, + 0x03A3, + 0x03A3, + 0x03A4, + 0x03A5 | HAS_VOWEL, + 0x03A6, + 0x03A7, + 0x03A8, + 0x03A9 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_DIALYTIKA, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03CF, + 0x0392, + 0x0398, + 0x03D2, + 0x03D2 | HAS_ACCENT, + 0x03D2 | HAS_DIALYTIKA, + 0x03A6, + 0x03A0, + 0x03CF, + 0x03D8, + 0x03D8, + 0x03DA, + 0x03DA, + 0x03DC, + 0x03DC, + 0x03DE, + 0x03DE, + 0x03E0, + 0x03E0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0x039A, + 0x03A1, + 0x03F9, + 0x037F, + 0x03F4, + 0x0395 | HAS_VOWEL, + 0, + 0x03F7, + 0x03F7, + 0x03F9, + 0x03FA, + 0x03FA, + 0x03FC, + 0x03FD, + 0x03FE, + 0x03FF, +}; + +static const uint16_t data1F00[] = { + // U+1F00..1FFF + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_ACCENT, + 0x0391 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0x0399 | HAS_VOWEL, + 0, + 0, + 0, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0395 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_ACCENT, + 0x0397 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0, + 0, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0, + 0, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0x0399 | HAS_VOWEL | HAS_ACCENT, + 0, + 0, + 0, + 0, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A1, + 0x03A1, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT | HAS_DIALYTIKA, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A5 | HAS_VOWEL | HAS_ACCENT, + 0x03A1, + 0, + 0, + 0, + 0, + 0, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x039F | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_ACCENT, + 0x03A9 | HAS_VOWEL | HAS_YPOGEGRAMMENI, + 0, + 0, + 0, +}; + +// U+2126 Ohm sign +static const uint16_t data2126 = 0x03A9 | HAS_VOWEL; + +uint32_t getLetterData(UChar32 c) { + if (c < 0x370 || 0x2126 < c || (0x3ff < c && c < 0x1f00)) { + return 0; + } else if (c <= 0x3ff) { + return data0370[c - 0x370]; + } else if (c <= 0x1fff) { + return data1F00[c - 0x1f00]; + } else if (c == 0x2126) { + return data2126; + } else { + return 0; + } +} + +uint32_t getDiacriticData(UChar32 c) { + switch (c) { + case 0x0300: // varia + case 0x0301: // tonos = oxia + case 0x0342: // perispomeni + case 0x0302: // circumflex can look like perispomeni + case 0x0303: // tilde can look like perispomeni + case 0x0311: // inverted breve can look like perispomeni + return HAS_ACCENT; + case 0x0308: // dialytika = diaeresis + return HAS_COMBINING_DIALYTIKA; + case 0x0344: // dialytika tonos + return HAS_COMBINING_DIALYTIKA | HAS_ACCENT; + case 0x0345: // ypogegrammeni = iota subscript + return HAS_YPOGEGRAMMENI; + case 0x0304: // macron + case 0x0306: // breve + case 0x0313: // comma above + case 0x0314: // reversed comma above + case 0x0343: // koronis + return HAS_OTHER_GREEK_DIACRITIC; + default: + return 0; + } +} + +UBool isFollowedByCasedLetter(const UCaseProps *csp, const UChar *s, int32_t i, int32_t length) { + while (i < length) { + UChar32 c; + U16_NEXT(s, i, length, c); + int32_t type = ucase_getTypeOrIgnorable(csp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // Case-ignorable, continue with the loop. + } else if (type != UCASE_NONE) { + return TRUE; // Followed by cased letter. + } else { + return FALSE; // Uncased and not case-ignorable. + } + } + return FALSE; // Not followed by cased letter. +} + +/** + * Greek string uppercasing with a state machine. + * Probably simpler than a stateless function that has to figure out complex context-before + * for each character. + * TODO: Try to re-consolidate one way or another with the non-Greek function. + */ +int32_t toUpper(const UCaseMap *csm, + UChar *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + UErrorCode *pErrorCode) { + int32_t locCache = UCASE_LOC_GREEK; + int32_t destIndex=0; + uint32_t state = 0; + for (int32_t i = 0; i < srcLength;) { + int32_t nextIndex = i; + UChar32 c; + U16_NEXT(src, nextIndex, srcLength, c); + uint32_t nextState = 0; + int32_t type = ucase_getTypeOrIgnorable(csm->csp, c); + if ((type & UCASE_IGNORABLE) != 0) { + // c is case-ignorable + nextState |= (state & AFTER_CASED); + } else if (type != UCASE_NONE) { + // c is cased + nextState |= AFTER_CASED; + } + uint32_t data = getLetterData(c); + if (data > 0) { + uint32_t upper = data & UPPER_MASK; + // Add a dialytika to this iota or ypsilon vowel + // if we removed a tonos from the previous vowel, + // and that previous vowel did not also have (or gain) a dialytika. + // Adding one only to the final vowel in a longer sequence + // (which does not occur in normal writing) would require lookahead. + // Set the same flag as for preserving an existing dialytika. + if ((data & HAS_VOWEL) != 0 && (state & AFTER_VOWEL_WITH_ACCENT) != 0 && + (upper == 0x399 || upper == 0x3A5)) { + data |= HAS_DIALYTIKA; + } + int32_t numYpogegrammeni = 0; // Map each one to a trailing, spacing, capital iota. + if ((data & HAS_YPOGEGRAMMENI) != 0) { + numYpogegrammeni = 1; + } + // Skip combining diacritics after this Greek letter. + while (nextIndex < srcLength) { + uint32_t diacriticData = getDiacriticData(src[nextIndex]); + if (diacriticData != 0) { + data |= diacriticData; + if ((diacriticData & HAS_YPOGEGRAMMENI) != 0) { + ++numYpogegrammeni; + } + ++nextIndex; + } else { + break; // not a Greek diacritic + } + } + if ((data & HAS_VOWEL_AND_ACCENT_AND_DIALYTIKA) == HAS_VOWEL_AND_ACCENT) { + nextState |= AFTER_VOWEL_WITH_ACCENT; + } + // Map according to Greek rules. + UBool addTonos = FALSE; + if (upper == 0x397 && + (data & HAS_ACCENT) != 0 && + numYpogegrammeni == 0 && + (state & AFTER_CASED) == 0 && + !isFollowedByCasedLetter(csm->csp, src, nextIndex, srcLength)) { + // Keep disjunctive "or" with (only) a tonos. + // We use the same "word boundary" conditions as for the Final_Sigma test. + if (i == nextIndex) { + upper = 0x389; // Preserve the precomposed form. + } else { + addTonos = TRUE; + } + } else if ((data & HAS_DIALYTIKA) != 0) { + // Preserve a vowel with dialytika in precomposed form if it exists. + if (upper == 0x399) { + upper = 0x3AA; + data &= ~HAS_EITHER_DIALYTIKA; + } else if (upper == 0x3A5) { + upper = 0x3AB; + data &= ~HAS_EITHER_DIALYTIKA; + } + } + destIndex=appendUChar(dest, destIndex, destCapacity, (UChar)upper); + if (destIndex >= 0 && (data & HAS_EITHER_DIALYTIKA) != 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x308); // restore or add a dialytika + } + if (destIndex >= 0 && addTonos) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x301); + } + while (destIndex >= 0 && numYpogegrammeni > 0) { + destIndex=appendUChar(dest, destIndex, destCapacity, 0x399); + --numYpogegrammeni; + } + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } + } else { + const UChar *s; + UChar32 c2 = 0; + c=ucase_toFullUpper(csm->csp, c, NULL, NULL, &s, csm->locale, &locCache); + if((destIndexdestCapacity) { + *pErrorCode=U_BUFFER_OVERFLOW_ERROR; + } + return destIndex; +} + +} // namespace GreekUpper +U_NAMESPACE_END + /* functions available in the common library (for unistr_case.cpp) */ U_CFUNC int32_t U_CALLCONV @@ -315,6 +952,10 @@ ustrcase_internalToUpper(const UCaseMap *csm, UChar *dest, int32_t destCapacity, const UChar *src, int32_t srcLength, UErrorCode *pErrorCode) { + int32_t locCache = csm->locCache; + if (ucase_getCaseLocale(csm->locale, &locCache) == UCASE_LOC_GREEK) { + return GreekUpper::toUpper(csm, dest, destCapacity, src, srcLength, pErrorCode); + } UCaseContext csc=UCASECONTEXT_INITIALIZER; csc.p=(void *)src; csc.limit=srcLength; @@ -346,6 +987,10 @@ ustr_foldCase(const UCaseProps *csp, dest[destIndex++]=(UChar)c2; } else { destIndex=appendResult(dest, destIndex, destCapacity, c, s); + if(destIndex<0) { + *pErrorCode=U_INDEX_OUTOFBOUNDS_ERROR; + return 0; + } } } @@ -419,7 +1064,7 @@ ustrcase_map(const UCaseMap *csm, if(destLength>0) { int32_t copyLength= destLength<=destCapacity ? destLength : destCapacity; if(copyLength>0) { - uprv_memmove(dest, temp, copyLength*U_SIZEOF_UCHAR); + u_memmove(dest, temp, copyLength); } } if(temp!=buffer) { diff --git a/deps/icu-small/source/common/ustrcase_locale.cpp b/deps/icu-small/source/common/ustrcase_locale.cpp index 5707c5a5be13f4..78f4bbd7a2fe7f 100644 --- a/deps/icu-small/source/common/ustrcase_locale.cpp +++ b/deps/icu-small/source/common/ustrcase_locale.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011, International Business Machines diff --git a/deps/icu-small/source/common/ustrenum.cpp b/deps/icu-small/source/common/ustrenum.cpp index af3c9fa9048b68..699ce32cfef242 100644 --- a/deps/icu-small/source/common/ustrenum.cpp +++ b/deps/icu-small/source/common/ustrenum.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines diff --git a/deps/icu-small/source/common/ustrenum.h b/deps/icu-small/source/common/ustrenum.h index d02c20779501b0..868fddcb53527d 100644 --- a/deps/icu-small/source/common/ustrenum.h +++ b/deps/icu-small/source/common/ustrenum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines diff --git a/deps/icu-small/source/common/ustrfmt.c b/deps/icu-small/source/common/ustrfmt.c index 5e9fb924f8d3ff..c7805d8d2a3062 100644 --- a/deps/icu-small/source/common/ustrfmt.c +++ b/deps/icu-small/source/common/ustrfmt.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2006, International Business Machines diff --git a/deps/icu-small/source/common/ustrfmt.h b/deps/icu-small/source/common/ustrfmt.h index f1891bdabf58ea..3cc3d69add5e05 100644 --- a/deps/icu-small/source/common/ustrfmt.h +++ b/deps/icu-small/source/common/ustrfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2006, International Business Machines diff --git a/deps/icu-small/source/common/ustring.cpp b/deps/icu-small/source/common/ustring.cpp index ef4b05dd735478..8361fe37077fbd 100644 --- a/deps/icu-small/source/common/ustring.cpp +++ b/deps/icu-small/source/common/ustring.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -991,7 +993,7 @@ U_CAPI int32_t U_EXPORT2 u_strlen(const UChar *s) { #if U_SIZEOF_WCHAR_T == U_SIZEOF_UCHAR - return (int32_t)uprv_wcslen(s); + return (int32_t)uprv_wcslen((const wchar_t *)s); #else const UChar *t = s; while(*t != 0) { @@ -1113,7 +1115,7 @@ u_strHasMoreChar32Than(const UChar *s, int32_t length, int32_t number) { U_CAPI UChar * U_EXPORT2 u_memcpy(UChar *dest, const UChar *src, int32_t count) { if(count > 0) { - uprv_memcpy(dest, src, count*U_SIZEOF_UCHAR); + uprv_memcpy(dest, src, (size_t)count*U_SIZEOF_UCHAR); } return dest; } @@ -1121,7 +1123,7 @@ u_memcpy(UChar *dest, const UChar *src, int32_t count) { U_CAPI UChar * U_EXPORT2 u_memmove(UChar *dest, const UChar *src, int32_t count) { if(count > 0) { - uprv_memmove(dest, src, count*U_SIZEOF_UCHAR); + uprv_memmove(dest, src, (size_t)count*U_SIZEOF_UCHAR); } return dest; } diff --git a/deps/icu-small/source/common/ustrtrns.cpp b/deps/icu-small/source/common/ustrtrns.cpp index e835d96b6aa52b..b61d771fafcdc2 100644 --- a/deps/icu-small/source/common/ustrtrns.cpp +++ b/deps/icu-small/source/common/ustrtrns.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utext.cpp b/deps/icu-small/source/common/utext.cpp index 20952a8459273a..a89e7a62b56366 100644 --- a/deps/icu-small/source/common/utext.cpp +++ b/deps/icu-small/source/common/utext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/utf_impl.c b/deps/icu-small/source/common/utf_impl.c index a1f43b94655731..91cb9ba5f2935f 100644 --- a/deps/icu-small/source/common/utf_impl.c +++ b/deps/icu-small/source/common/utf_impl.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/util.cpp b/deps/icu-small/source/common/util.cpp index 5a853ea34609ef..b5d1fa4888ad27 100644 --- a/deps/icu-small/source/common/util.cpp +++ b/deps/icu-small/source/common/util.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/common/util.h b/deps/icu-small/source/common/util.h index 427d25ca38c9e4..b3ed037ab62696 100644 --- a/deps/icu-small/source/common/util.h +++ b/deps/icu-small/source/common/util.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/common/util_props.cpp b/deps/icu-small/source/common/util_props.cpp index 44349061e74974..3b7bb20d254a86 100644 --- a/deps/icu-small/source/common/util_props.cpp +++ b/deps/icu-small/source/common/util_props.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2016, International Business Machines diff --git a/deps/icu-small/source/common/utrace.c b/deps/icu-small/source/common/utrace.c index 15f5ccef5255a4..e702497d8c0f69 100644 --- a/deps/icu-small/source/common/utrace.c +++ b/deps/icu-small/source/common/utrace.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2014, International Business Machines diff --git a/deps/icu-small/source/common/utracimp.h b/deps/icu-small/source/common/utracimp.h index d88b80967a8297..5ec047a967a858 100644 --- a/deps/icu-small/source/common/utracimp.h +++ b/deps/icu-small/source/common/utracimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/common/utrie.cpp b/deps/icu-small/source/common/utrie.cpp index b8caeb722b3058..478560df66eb3b 100644 --- a/deps/icu-small/source/common/utrie.cpp +++ b/deps/icu-small/source/common/utrie.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -139,7 +141,7 @@ utrie_clone(UNewTrie *fillIn, const UNewTrie *other, uint32_t *aliasData, int32_ uprv_free(aliasData); } else { uprv_memcpy(trie->index, other->index, sizeof(trie->index)); - uprv_memcpy(trie->data, other->data, other->dataLength*4); + uprv_memcpy(trie->data, other->data, (size_t)other->dataLength*4); trie->dataLength=other->dataLength; trie->isDataAllocated=isDataAllocated; } @@ -839,7 +841,7 @@ utrie_serialize(UNewTrie *trie, void *dt, int32_t capacity, } /* write 32-bit data values */ - uprv_memcpy(dest16, trie->data, 4*trie->dataLength); + uprv_memcpy(dest16, trie->data, 4*(size_t)trie->dataLength); } return length; diff --git a/deps/icu-small/source/common/utrie.h b/deps/icu-small/source/common/utrie.h index 3cec027fe34595..17e660b3e308cb 100644 --- a/deps/icu-small/source/common/utrie.h +++ b/deps/icu-small/source/common/utrie.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2.cpp b/deps/icu-small/source/common/utrie2.cpp index 5f873c5cac0825..4bd35a924d874a 100644 --- a/deps/icu-small/source/common/utrie2.cpp +++ b/deps/icu-small/source/common/utrie2.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2.h b/deps/icu-small/source/common/utrie2.h index 36ea9b4bb9423f..810bcfc9591058 100644 --- a/deps/icu-small/source/common/utrie2.h +++ b/deps/icu-small/source/common/utrie2.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utrie2_builder.cpp b/deps/icu-small/source/common/utrie2_builder.cpp index 0815822c5035f7..664051c5f9bd04 100644 --- a/deps/icu-small/source/common/utrie2_builder.cpp +++ b/deps/icu-small/source/common/utrie2_builder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -248,11 +250,11 @@ cloneBuilder(const UNewTrie2 *other) { /* clone data */ uprv_memcpy(trie->index1, other->index1, sizeof(trie->index1)); - uprv_memcpy(trie->index2, other->index2, other->index2Length*4); + uprv_memcpy(trie->index2, other->index2, (size_t)other->index2Length*4); trie->index2NullOffset=other->index2NullOffset; trie->index2Length=other->index2Length; - uprv_memcpy(trie->data, other->data, other->dataLength*4); + uprv_memcpy(trie->data, other->data, (size_t)other->dataLength*4); trie->dataNullOffset=other->dataNullOffset; trie->dataLength=other->dataLength; @@ -260,7 +262,7 @@ cloneBuilder(const UNewTrie2 *other) { if(other->isCompacted) { trie->firstFreeBlock=0; } else { - uprv_memcpy(trie->map, other->map, (other->dataLength>>UTRIE2_SHIFT_2)*4); + uprv_memcpy(trie->map, other->map, ((size_t)other->dataLength>>UTRIE2_SHIFT_2)*4); trie->firstFreeBlock=other->firstFreeBlock; } @@ -540,7 +542,7 @@ allocDataBlock(UNewTrie2 *trie, int32_t copyBlock) { if(data==NULL) { return -1; } - uprv_memcpy(data, trie->data, trie->dataLength*4); + uprv_memcpy(data, trie->data, (size_t)trie->dataLength*4); uprv_free(trie->data); trie->data=data; trie->dataCapacity=capacity; @@ -1402,7 +1404,7 @@ utrie2_freeze(UTrie2 *trie, UTrie2ValueBits valueBits, UErrorCode *pErrorCode) { /* write 32-bit data values */ trie->data16=NULL; trie->data32=(uint32_t *)dest16; - uprv_memcpy(dest16, newTrie->data, newTrie->dataLength*4); + uprv_memcpy(dest16, newTrie->data, (size_t)newTrie->dataLength*4); break; default: *pErrorCode=U_ILLEGAL_ARGUMENT_ERROR; diff --git a/deps/icu-small/source/common/utrie2_impl.h b/deps/icu-small/source/common/utrie2_impl.h index ecb3b6fc40a4d9..48883638b185c4 100644 --- a/deps/icu-small/source/common/utrie2_impl.h +++ b/deps/icu-small/source/common/utrie2_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uts46.cpp b/deps/icu-small/source/common/uts46.cpp index 13a1f246c21cc9..7bc4f925caca0b 100644 --- a/deps/icu-small/source/common/uts46.cpp +++ b/deps/icu-small/source/common/uts46.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines @@ -68,7 +70,7 @@ isASCIIOkBiDi(const char *s, int32_t length); IDNA::~IDNA() {} void -IDNA::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, +IDNA::labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -78,7 +80,7 @@ IDNA::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, } void -IDNA::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, +IDNA::labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -88,7 +90,7 @@ IDNA::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, } void -IDNA::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, +IDNA::nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -98,7 +100,7 @@ IDNA::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, } void -IDNA::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, +IDNA::nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { if(U_SUCCESS(errorCode)) { UnicodeString destString; @@ -131,19 +133,19 @@ class UTS46 : public IDNA { IDNAInfo &info, UErrorCode &errorCode) const; virtual void - labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, + labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, + labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, + nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; virtual void - nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, + nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; private: @@ -154,7 +156,7 @@ class UTS46 : public IDNA { IDNAInfo &info, UErrorCode &errorCode) const; void - processUTF8(const StringPiece &src, + processUTF8(StringPiece src, UBool isLabel, UBool toASCII, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const; @@ -251,25 +253,25 @@ UTS46::nameToUnicode(const UnicodeString &name, UnicodeString &dest, } void -UTS46::labelToASCII_UTF8(const StringPiece &label, ByteSink &dest, +UTS46::labelToASCII_UTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(label, TRUE, TRUE, dest, info, errorCode); } void -UTS46::labelToUnicodeUTF8(const StringPiece &label, ByteSink &dest, +UTS46::labelToUnicodeUTF8(StringPiece label, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(label, TRUE, FALSE, dest, info, errorCode); } void -UTS46::nameToASCII_UTF8(const StringPiece &name, ByteSink &dest, +UTS46::nameToASCII_UTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(name, FALSE, TRUE, dest, info, errorCode); } void -UTS46::nameToUnicodeUTF8(const StringPiece &name, ByteSink &dest, +UTS46::nameToUnicodeUTF8(StringPiece name, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { processUTF8(name, FALSE, FALSE, dest, info, errorCode); } @@ -401,7 +403,7 @@ UTS46::process(const UnicodeString &src, } void -UTS46::processUTF8(const StringPiece &src, +UTS46::processUTF8(StringPiece src, UBool isLabel, UBool toASCII, ByteSink &dest, IDNAInfo &info, UErrorCode &errorCode) const { diff --git a/deps/icu-small/source/common/utypeinfo.h b/deps/icu-small/source/common/utypeinfo.h index 51c3a03bf7c332..b39aa0d6053344 100644 --- a/deps/icu-small/source/common/utypeinfo.h +++ b/deps/icu-small/source/common/utypeinfo.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/utypes.c b/deps/icu-small/source/common/utypes.c index 6ff84607476400..c506dd44f5424c 100644 --- a/deps/icu-small/source/common/utypes.c +++ b/deps/icu-small/source/common/utypes.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/common/uvector.cpp b/deps/icu-small/source/common/uvector.cpp index c0cb2d83661ec6..e48913e55eac12 100644 --- a/deps/icu-small/source/common/uvector.cpp +++ b/deps/icu-small/source/common/uvector.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/uvector.h b/deps/icu-small/source/common/uvector.h index c209a30a76d251..f6abe3e78ad1c9 100644 --- a/deps/icu-small/source/common/uvector.h +++ b/deps/icu-small/source/common/uvector.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/common/uvectr32.cpp b/deps/icu-small/source/common/uvectr32.cpp index 09342f2f82d557..3607d974ce5a9d 100644 --- a/deps/icu-small/source/common/uvectr32.cpp +++ b/deps/icu-small/source/common/uvectr32.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/uvectr32.h b/deps/icu-small/source/common/uvectr32.h index 451b741f598d65..c975de769b55b4 100644 --- a/deps/icu-small/source/common/uvectr32.h +++ b/deps/icu-small/source/common/uvectr32.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/common/uvectr64.cpp b/deps/icu-small/source/common/uvectr64.cpp index afbe14f8da6049..9196274aba1826 100644 --- a/deps/icu-small/source/common/uvectr64.cpp +++ b/deps/icu-small/source/common/uvectr64.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1999-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/common/uvectr64.h b/deps/icu-small/source/common/uvectr64.h index 13d3c2e5c76e61..fec10983988de9 100644 --- a/deps/icu-small/source/common/uvectr64.h +++ b/deps/icu-small/source/common/uvectr64.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines diff --git a/deps/icu-small/source/common/wintz.c b/deps/icu-small/source/common/wintz.c index 166da0b484ac65..5a3ecae0a43f36 100644 --- a/deps/icu-small/source/common/wintz.c +++ b/deps/icu-small/source/common/wintz.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2015, International Business Machines diff --git a/deps/icu-small/source/common/wintz.h b/deps/icu-small/source/common/wintz.h index 39f886ab1c095a..01a906a401348d 100644 --- a/deps/icu-small/source/common/wintz.h +++ b/deps/icu-small/source/common/wintz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2011, International Business Machines diff --git a/deps/icu-small/source/data/in/icudt57l.dat b/deps/icu-small/source/data/in/icudt57l.dat deleted file mode 100644 index 87131f44e10ac40aaedc96158dffe7a84df9be08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1933056 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�do<0 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

ouR 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

@%X-^-&)R1V4t#7KNDKx#s86kX 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%0AFLbYTZ*-ZuEM1tMr4QG0 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%0A5bgc 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


Ll4BP|E1Re(F0M7zTfER()!0W&! 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%0Dast_8EcSo6gip3a}Op>l)cxP9eqv%XUQ)wy4B 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�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 DQh2QI diff --git a/deps/icu-small/source/data/in/icudt58l.dat b/deps/icu-small/source/data/in/icudt58l.dat new file mode 100644 index 0000000000000000000000000000000000000000..458da3e69df37fc755a0a74cbed8bf20c0363629 GIT binary patch literal 2680800 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
Q5b#b)g)HfvY0S-XnO+LNUA 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%0A(ul{o4b3txU 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�KuFr#8-{>T(@+&L$RUcAo z4H0D#^$}%}sgZt>rrP=hgT72(uTM=gXSgj19@sv^EDz9GIozB<8>;FO?Ea7xxD=clBmM5gyWNZ?~tZVYsjk4I+b-It2*0|-H=_M-7uhjKz?p&Ze>APL1dv{;rsa~ z@;el23lA3x@8P-))mQ_Y<_S<}_;zUJ6rC;TY%F&fho3)!8cGT}^*jK+V ze}BaTWe-#zG#qp~s6AM}EZ$Q2NDxbZ9OcoLV=O0HPPZ(vEVG<$m1lX*vflDL%gdII zR_<1QR>4+vR_Cnht-iB*!_r2pk}g{XTZSvnqXf$nR}fbq@HijZU)CS~=ou zIANKJ=isUEBdI5r?OS#td|&F3yd%Z?^7a+)dvxE#Q_~TjzAyC+%Qq}lI+e~Gk4724 zC?G#+)hKU*3^tGh59$I1L){xyCQ=UnC4;jkC7Y2}QZeR_V&(4{gm?Sv zzh}^=t0XD)9hRAf2a(({HvOK#7VXQbIQ%VC6m~8Bo&ozEgE%Qw>L=w%>>KXylJ1e_ zN{glC(t2sDv`2bCdQ5s+I*xDiYyNu&uSoAmXQWSXcggq7`Whq^zD2NkZp+L6#JBw2 z9>cf?oK&4u{;CjFgeqR8S7kMQlVdigf~I9-zOfxDddA?}A18xnUN_U|_-|_G|4&u> z-?Zm$*K&Ig+};DX_rUEvaC;B@JA0s9wMJE`+Nm<&HT%Hde%(Hzy8XDl2mTlLfGt1w z%~j8-%>TyY-+9j7Ud!!0(DEK&zh_W`57**U_o|*!{i^D&o~nLS{e!v&QTFI=GSS3f zLi~wnjeV^BE5Bt>sBO8HTM>Pv#aF1t#{Z_@6~H}^xWBCB-xa`j6rrz$-xWA#BAry3 zN+&&_L})m)2)Yk?5vqsGWp=-(8SW2;ZvU%}o%Vre#hw*K>zf(SC5BvbS~`!W#D&QAW8fy)k{fGpbV9!NkOIQPzHYEg((Z1DTS0~K{=2f zzxe_oFRZk$6vn=jAGr}&jwnsVZ@)05;rCzqOR$#m20~wo z3@uKU(wl0@z&+cUP@0s9{!H{|qUNT31J1&_aiDf*#_`F= z@yR!?2gfE+?u+xKzm$Y}lW?30aU8E(x6yaK7Uy0p&XYu(hnaX@Mj7*P%>AK29CvoU z#$rEaVm%pHchhl4e`oBIES#e`s4E2LUWt+iEC)hC*v=q%0LH=d0OweUjOT)!3l%_xP#VU@a{_gSVXQFJ5{6?RhH-jgxhMQR z(I0_riNJCM;<4aZ>{uQ5P)Wz}n^%na^3Fe) zEgS!#)}9!nXAJ^o*jKD&(qLOP*iH?$$rv-X=)Ug18ua`pWQJp|TrbLKRUNI(Q;vNj zE=_hXzH!d}>*mzH(EL~_$Ex))Y1MWqJvYm>rKZN6c_Na(t({*?eb)YY;82KQ!1M z%%j0RF?!9!`xbbUG}vyuel{ClgY7lLwFb*)|7!lCj-SWAO~Wxt<;SNR_FX)d6LBn3 z(5B=1FCDQAEN3EzT~{=FZNxE(z;R*6lI3UN8XyZXcFh%peD)rLT}Q#ZbQFR^Q)EL^u0n&BFc zZMz27cf7^5oLG+1;2IA7J+bd2u&*Mp&mwRw5`q03h5Z?e{TgeA>mBUlcnz-E%y7Mi zcp|P{5^-$UK2Jez2D}*VtTgX=AL{_-_48|P{vbWQB) z9Bfn5@jzX%5I-jnPXwoM{Q5WgMFf9H$I6F0NaH{^{{=G#=is=HT4P!TSRC zUZClH&5eAm?bqUY+uGc#^A_Xzes%0tE#o~^x4$zso~M7y-_pAA9xf2)27j)$)PE~t zcz+v2TKOB=F)E0~N$7B9a#N3~b*M)TK`%Gr8X+fwn40VR#^R8IDw~lQo z=js@S;s3C$?AUS-#$lgbBw~94u|0qJ+{J!sI@UE<%dHmn4f_nD8(Q|-9FN)~u*_c{ zl=;HV|DXu@IM>(>U}EVAHI{ZC!R|=i_qd&VRczG zyCY{EyC>%c_u>>O?#7ua?#Edu?#Nlk?#UUA`*0>&)!=@aKmPsodvRXZoztDbzI>A3 zi&Ly)_u?2Z_Glfu7iapl_u@>vnR{_6CR9(VnA9+-VsifEGTo`k)k`XtG%U$4uc)Z5 zYSq0s6AZZ1rG8S`PH z=U8ehW|z%wm{UK;X^wVI<-D?aSLW5vyE4Cieuw$m`3V(o+jhEUYLmE00*} zxAfGK6H6k>{mN&Qk1lsws$JT!x_)&7?m@ymOk2ygR&O(GbK0ieR$rpL6DQvC@7#-{ z`;&Wd*nK)$en*b+UK|Il;$EDReI?>voFd$dQ*>$~?!%eb{63t0misLEy*N$x*4Te6 z*=*C$y){EU{``I#TX)IYc&0}IdMosanN`S9q#7$)3kig zOKa|nxi*L0n{$UWQko!5+ZtsEHd*JpSxV;Ddf8GNpTf7EY zB;9`8-UI)OdtezqpX;T+_xS($8Gn1*ZnOv9Y;jI($@M{md0o)X1t%K2A|a5 z_z|a?u6h!`tMxWSkC*TX#Et&pJ48+Jn~IPYvVbg2ZscigKR&lL#c#;revx}{uf$)t zFQvv>I{6W#wvkSHLcO68P${$*IstuQgU_!2xG#nM{Vu*W%M!l_hxN{~*n-ccq0Ues z6a$a@YUGHCAhz4 zEm{k#A1Irm#pmK!Kg2#O4}#cd3@8)Ig4pNt z1E5?eAHw?AW4)zV-|hQS@EewmOf@)B|1ayh_oeLA-1_@c&SM?dyD!DV?Dl;rH+gOv ze|!DE@qCt(JB*N1pyUrn$f>OTW<>1^^xTt^-yLzQYG%Jf|7T;@-iN;}OF=EAxBl;p z|E!K%*{6{|9HEiFxn=uUS^LY9B>g9)tmWTixv}N*48O}g3E#j9&4Egw`IG+Dy5yqC z`2A6+7#a!yMM^Yyl*EhA3y&`oZZWz%=stScyGvYabF1g+h4wZ z5Bhso_V>HTcR}hu=7Hl0CerZ*(D^@NH(Lv?o2RqwKaTsRalJSF_)t^n_)f-_(`DIa z`tkEv_P~$x4uy6?=OGUbmNm$+Lyp7r}t4VEWD0_D|&> zT~Rj`zX3n>sQS!QYh`(!rE>W{!AIwentXK8sHW$^(MsZ@2E-ryBi@?Y zGqG)}a4iFS%;??KCQj4jJ$%-VU-az$&5v6ii$t;Ygl>tSsGWCO82*0Q;Q zwX8PQvV7LE`GB=-PGD`o^y~j!70pdFz9r@+w(ZO#=AE5vx%s@q=H`~>9=4rqj%E9T z&9Sn47v?M0PQm<#Yb1zC5S9hF$j?(+S4(vpf)Y5>&yT;2P^Hf*08m*1H+S=${d|9$#S}sjx43?`Ci=%}V|5sp-)tx0dtm=iRhUL%%9}{?dPO7s8e}HT`-{(MYNVss9QvCWm8U9JjaE&>CtoG1GSw>8CRG)_OY9K) z987gW^}4D~bxu{U`c8FOC8@P)8?~c4G9w|wB7=R}=A6GZeNTFazU3JYqzCl#=({Gv zvmh`#pl@YH=K_n&(7rn}x)rR>itM{TBdQ=Q`&i%fg2aO8?1a9B1vv%1v(x%MoH48* zV_AD;b6da!gy z;ro3P`i(3cpM5&-rM&WfpB7mSvK`cEP{^Q&LHa=%gC5C$F8{6k)A=9gU&z0d|4Y6} zL7RfH8DD0e%X+Ku75DSWQ*K;cV;o<%-IJqpt@E&5F>oKsj@IB4L#*=zc(C|qCob^3^b z@AqMQsi5!SjPEmlOh4cE&Vd69k7f82p3Jy=;QW5G@`9z`(oOoT%^j9on0q95SMH_U z^L@VTGb`65&oi%c-qPGDxfgPs^Sb4w=jG%j=0)YzWxbAXrEb&5zR%1|=RRNdGYsgE z@qHg{_QLFC*)Qd;%if$_g>S4rlx>sao}xGnqz$EbFy;sa*A`l z?{}r2MOI?&V*^L$j1iAXIrrqu#A8m*!ki^JD|6QJ$F3aq7?O1$=TJ^|R({rRIn5tW z=FlT8t0re&Rzj9z&IvruXTF~Edd?d;r^Mq-&iS1BobPge%-NNwi zz}U=!%t3<|4f4o1oVk3^vCOT5zApN$NFG!&V9%gQ1Evq?kmZpTkX1IIaPW@<-x;`m z(1<~^2R%LTgMn}5p3Ys6`^v!SYOTp~ld~qprmve$mt!@%G~a9Xn}ukf*Sec$nlCkf zQ*+27qs_TC11)8%F;-bt-{Z^gck4P@pRo?LSz_~!O()w?wr6bv>}J@VwY$UqaeE7g zLWj)`uRF+X$F}{sZBe^7+I4E*r~TgcjqL|JzUP?hwAbk;rwJWScW`u0bAHIV+Bv=B zeI4KJ=;|`m~!9b9=+h-2HC%kKBiMdaBbnk9{5&J$iU9@qEv-qt|?| zH@zCX^xk{Dk9(W=%65nz7zZ&^83s$!~d9nhX8%RoPZYs>^k4o`N7T~ zb++r$v&*wx+64{`d?@gnz`U-T*S(=t6514nQG-c zxlA_5@5yeOo|;U}IL&6wNzHkUg_(z0f?2V8rrBY$_svw=2<;f{4DC$qD(xoiquQsm zAK~%2*2dh?Jjy)Qe3tnF^8@COn5USZHutm$uoz=eW$~oNIg9TsE?c;@32GD8W@?*z z+H7dEt<58C>e^`WI|BLIX_og{zH9lLWp69J)ex(BR%KRI__cs1@!jd4T78LcLl4&t z&@I$$(VfwKrE{?MvcA{)g!%_-XPbPR88-85Ds1-Iykc|7#@yD)wx{i2+l{s_+J0+m zVdr62U^mHbiQR*Cjdnry1MOGXAGCkf{)&AE2M>oxhir!&hkG36I;?b9>rm}bm=9Ju4`Q@U60`L zoNEIfCtX!;er{%N!EQa=3f+det##Y%R_nIQ?F%=Rdnfl;_Yv-k+_$>#aX;pM%3amT zypyg|MyLLrwsd;5(_5X|cqDo(_1NL@hQ}8k8c$cxuAa%BlRYau_jy)()_T6?+34xu z73r1jHP&m5*I}>oUbfzyyyLwGdoT9h?)|j)2i{+M+xtZN4E0&!J(nA6O7LGjL7d z&cG9a`vT7eeimre)w^p<*Sor|=(?fn!LE;YeY)!hUFD#_prW9)K?j0f3c3)~CfGT6 zNbscK8NsWAHwHf&{8{kt!R4%G&3|e^q$aJp@TzLg{}`h z6#7``8UA?R|C3OMZjRlGI)!(O?KZmGm~K_w4BbBMcA=Y7_xSE(yLamTrrFW%A9cUj zT@~gZ78{ln)+cOU*pjeAVULEb4tqJwp+|a;aXn`BSleS)k4Ji(>~W=sUC+>-v-~Ia zO!9xC=jT0t?%6)vExc!VZ20i-ap6nDH;2C%em4Bua9u>Zh^`UcBl<*)k60G*RK$gd zUn1-x7dz%f4vriZxia#h$loHZqB=+QiW(R-KdLQ9h)s^w z$4-o$7CSq3P3)%F2V-B3eLeQa*k59GaRG6o;_i%_9k)DgYuv85{c$Jb8sg03gW?Cq z&xtRM-xmK&{HyU7;{6jc6BZ@xOn4*VVnRq_W@2gL{fTE18xmc5C-olD`|jSAz2EHp zO>a$-N7B%wnMrGs9!@%z^kLHPNv_Ggk_RSFOJ0%uYVya)ol^2rwx&Ftay;eJlrK~4 zQ=LkyKevJI(u_?3(A^p0sMY4>)zFYWC# z%k(bk>FKZ8)vJ%01WOML`ez>A{r&p~_kS~ULeaFM*+q+rmKCimT3@uK=>5#u1DED? z?z13ochT;m$r<%o-(}h7eVlta>$%)u>6hFu`xa$)Ee!4Vecz=8L;H5?vuI#KW@SI8 zL1X*AnQwo)kdk_3C z?tx%+{Gb7Y{M4@$9WNR(pl$!wKlFF}k=xSWDcp|z@9u#GgC7~ZdGNTwZw=lx_{iV` zgX6X4Va~-<2LCcRv3NmouoQ~>*e~Rb%U_!BlI@-SOJ1A&&G~5=1sNv!Ir;Ya*%=G+ zXJi%Tugy=-AC@1kZkzpZpTm9TXCCWwDQ{N(uKbgI)?}7vhGw1249NJg$bXQ#`tR;3 z_BSyS-u;*09loSySKBpe$t2FC#H7YV!Zme?X$?MrkCRK}8d=iBX-YIT8p$lqti-Iw zOwz__huApV?XcNwciQfp#@XSVCI+HMq1|kU*$#6Yo@t7lwm)sd`kZYGZ8zI*wsp2I zwExKbBa4qLJ6Y~%)5)rn?xQvzS#@eNq|FZN9hO6MA6f6fHS`W$C+m-NLo9|^?y%@& zF~qtPAA{EMd(+s)wcc)T?}7iNJ#gAKRb8fDr9On`-RtT)^<}lANw7({Nk5Z3lhG#Y zP4<{PU~@Ek( z;c}{6ERV)Bc9mQuKPf*ezb2oRf0i5N_8MPJiY8Z6sF|XfrCFd^s#&W!pg9)TPi;`2 zQx}^wnuMBGnbw&)%A4eGu%lOdc5_c*7i2XZSJvs&ozH+xCOof8IXRal509-d*pb_t)$7ee}ciBlXktv-ETI3-#;t75aVp zhxFC@8vG)gHq9o@FD)o7Hm%e$Gi_kn$g~M*)6(Xom8Pvo+m?1P?eVl{(wMPJ~O>MeGNV_9IZ|@`Prldv)Um!NTW83@qgHV zNI*d6T>9ybMnAb_K_r1RKy6C0y ze%^YTy_2`UcZ9c%NtSo6ca{1s?|Z!Gdav|;(EBm(SG?cx{?z+N?_a#z_&ED``gHaQ z#qUL?`4sq!^_k=|&!@s?htEErhkUAiYJE=meBtw=+~8yD>*O2atM|?K9qfCT?=;`D zj-|dEeDCw!=X=QagzrnfANyYL{oYsYXW`eu&%@8(FUYT_Uy5H}ziEE6{O0+s_N(@* z^?TLtL%(nQe)rS)yZZb12l@~2AK^dFe}R9wf2IF^|HJ+#{oPHj_*(>c1o#I;1Z=n6 zYx}J2Yqp=;{%rfJt=i7cu7h2uU8G%_ou7%dW~kj5yGM2N>{i=V*lo9a!tO=8_v}8m zGqX3-w72)Q?`hx5KG}Yx{T%xTZ8z9&v%k;&8T%LP-?cw&f8PFkd$og|Lx4kqLz=@d zhfxlT@z}*5`yA@<_`u;uJgnN@)p1(K(vB}!ZtHlk<1-y!?f7BG&pQ6pajcn}{av;? z7ax~Emu@bRE@>{=E|Xp6yOg`EajA6K?{e6s#^nW%||5Zd2S!?Ps|ya65pr`&9GTAd&68Bfv; z(hb*5)!nOGrkihezwUY6+qzG5Kj=)YEv>s)M_XrU`&buQ54WCbz0i7@^%m>);UL=wa!@{>nydrj#6i>bJjU)nX{Hd(OT!6k8{pC=d5woT5Fwi))`{n z@3FPZ(lq^-ZqNI9UhmJ>-~IQxuKT*L`<%mp0}p)sfu4IG4F5*>`-cDZ@Mj|KA2D~t z(Gim(_eCc9Yl2Tj9gZr!f7AUX(cg*w=mRA&pNpw_M^5aY$BrJ^IkGJ7i*XZ2ePz_= z;zvFB+Yg?3FfU<$Lgqui@zAk{k`k9DPKv+q&c8@Xe)ta_{^r9^C+|s48NFcicSgS_ zrRb6GKa!KWICc1=zy9dQ(nde_caME4eZ$zl9NRbc=-3-$UmY8oH8Sg+S!1)NXO(9) zW&L{AZ)YvdT9NhlS^tvt-K>Al`f~Jr?t$=@aqk=V!Et{u?z7__ z9QhaH{%YJ;$Nk;7m&g6vxL3x#Bm0r;$Fs+0zbpHh>=&|sBm4KVKbHNu>@Q@0Df?^L zN3yFDZe)jz4rjtKq@)AY!3kxxd>h^&fi zjGPy_G;&Sk`pE5(yCaW8o{78?`R|eU-4}ab;e9XM_ksI9bYF+RDcX16!TWBRhD6;r z@_~_0n5K+;YGlpG`6E9xa@oj^ky}Rgj{M5VuZ{eNks~6$HS)EQ_s2aJR}|M0_rAD~ z#jT0^6Vso?eZ%z6aYIH89W{K^d~74eWDd^zFegq9JnB)pPv&qK+k)Q4&wdf}n> zJoIZ1tug(thXN1nf9TLd=k81w9tum0N{ma)N}Q1RY+`-lti(y<^T*eZEFM2|{H*c6 zIsT*LKR*7GZT!7CLmzuAXI##cIlr0nk(`w| zf0DB$=gT>PoC7(BbFTkz8q7(akUZht52sJap78XYsd~bPCj8!nkC{3q^iEhgvTwq{ z2}dXV+l0TL@XCatxsT@#&z)b?UbM2PvuI0EZ&6>-*NXn3=vzgv6+Qgq_s17K`OK3u zpZxtNS3TKn`rMOWd2-;%lTZHBllK&d6(<#^6z3G@7Z(@LD1N&5w~9{{pDVsp{IA7B zr#>)s^wh_uJ~?&9)T*hCQ(LFbo4S7L=Baz54op2U^~}_lr@k_EXvuJYb#`>g_>xH_ zPnOJ?{>k`N)3;9FGyT}~6VoqDzcKyF^r*79vb3_Svb?gYvUz1o%T|=FFWX$Uy=-^c zzOoZ#|5)~&vRBGR%y?kNgEJnVF@DAqGp736wbe74X0**%G-KtAkI(p{8Gkn8i!=UY z#y`!tHY1{ZMEN7-W6HD3Cziih{!;n-%YUc*56jn;|NV^9<(JDN-!-G;`I5$xmrCAW z@;fDeShBWcXUS)$>?!Fl`FhDWO1@e0?UJF>9-KCM+T+unnD*qf=cmn@_UqH;O4nnUrBT!4rYB6#n4UAeV0y*$`sv?`f9%114<;oPC44?1_n{9w^r?rg zJTy6RcjE2D`giVp=f{%%HR;)h0}oG1{-flK(d$M(lJf49zf7rr61_Y|dDdxIJTE#*vKU8Rs)D zWn9a+l@T!}VNA-Hf-x0i!V>Do%o_9CV?H|OOJlw~=I_URW6Zb5d}qwPnfGQ!WG0wW zGM~(REOSQYtjyNT_h+_cF3ar5{AA`IXMQ2`YnlI?`Mu2VXWq_C8k;pXcWmL<%CU3C z&L7)8c6{zLre|~Ko9c5H=l*W)M{+-w`>EVxkAFV*FLS@1`@eI)k^3LH4@`V;;`oV^ zCe}`Dn7Cl#hbDf?^qGlUChnbhdgAnP=O_Nl#7h&eOuRlZGA}VNH7_%7Lf+)OX?f4) zy(jO3d4G`i>AXM9`>VYEyiOiGxPF{xnE)JgA}^vtBu69*=~H}6tj$E5r7 zzm%W$MClW?Pjo$zQSh4u-z}Ik`CF4eUpRcq@+p5hWk^v=(f5jGKl$A!XBGc`@t)#i z#S5qIp87z^hLQ)SouBsp(*Dw#>Fv`uOm8haP_}Hwl=80f!{yh@Yu|P9T{qt~sp5P^ z`@1)I_5I`1ha1})S2bo2S=$(#);0E5=hq&5uDEta?bEf-);9az?+>QojSn=AY@A&A z&c@#7{%Yn|XCA6P)p)Erd&t;~&<&@}8j$zt;HcjqhvR;`bT-VCrgo zJq9?J+-Rp6ZPkw3a|Tgee<24 zZ}@Ee&gxrLm!4W%b?vD?t$+8O@8$218^|$P?uYN;SNY&j^vxgk0@2QHge55|) z>8({Cd*(!aOx2&%We+)1KS!&7xyb{I>6ylmr=I;$JAR%L-&_0oskL@q?QhjCseMo7 zdn01AT>D9W4&kuP%|M~Feqo05G^YPCoKmXA4 z>CaDk{=w&iTe5AL@ciWG^K2P0v$y7KO`pG;eX!8=zkGhV;XkJhYWSyyzi(*2bCrMjvV$c&^1|d7KKR0f7sk9W?SwdhAJAT6Y>>=A4e%iFX;e(Bf@3iTQ4U3=pj~8p6?tLb{Zs?Eh+8?j&t=4?;#V^0O z|HZGr_`hEa?$!Cac75~3Z@d`&qjCLaWqkX^f4y_m>$hF0-&r-ky8D@=_w0Gy9sl}0 z-g^FAnN6_pcr)qz`DdM^RoT8qKdoJnD zH2OJTia(dB_j8}if3E1cvgazFd*;ryI9GeA_F8TBkXwYj?&`e0&2Q)Yr)U0!pSSv- zo8JFpBkI4mEpfAc+3BI5W3;{bxp^V=Q>UD_sKt*7{Etpg&YJOaP49k-b9wU~`e|!F zG3y^^{q?MWn{`jqJDR>aYfRIGrpZmuHod3mfS!T+~r@E-WT`Co7h zyzyUXXw*G#T=%P5PQUXz5o-Kyg4y?lhR&sxd8~Age!wpch?ez{WA6OkfRFi1|MJLS zTS7w{tdHbb7DcA|eYwQ@%t&N(XvVD2(BFzUcxS)Z;I>%D`~3lbFns?b(}(PTZ|RWz zFF&h{`g?!kXTqE3{x^Ik{3~zqnebr!zxuybIIzjzYTOk1_`qtpTK32uxw32Qz)JP6 zk!xg^?2;X_<4%r~;|6wiAvbl6SI&6lAiHFj?2$dPLw3kDT@#fz(SFD-*(JMWw_MXT z$@WRgMQ-SNVqin)6Us-fmaAot?2%nvPq^j<`$PV4$o~G-LmWTZ@spJ|MR|UQL{x=y zdD6K&X&tgdc7#5;zkl73{q5_9sOw2}*{5ro{ifLu*&#bZr|m!YcSAOYCYAbpQmJ-K z*N*Ahf$Wr>q0{%b?;NtfWakiNyjvOXRtB;|cF2`oPg(zz_944vx9pG|cb1>F{Iq34 zpY9F~ul74gs-6Ec&i@(pB3H}Ra;;n|J7uTrkv(!v_jAgp>jnA3zpkjzkG?{7 z$d1tWgf1HLlsYoILt}}{45d4?q9K&-(4?~N(5Ni^mnE~iL!*h!_8F|~{V9Jp#C*=D zL*sKgLKAar%XOdT%DnE-_&jCiE3d#Z5k)?8MO3lRXBBscrq(D=Uq+X9hvt+G?9+ey zLZ^3!CO9s^@zLeBm2VFXuj~#j)0VP^jiIqswh>iryMBq5G1ZQJ#<9vQ}O7 z>Z;dwjth5OLhwAy2c=MCxm=bv?CHk9mYb3_H=|kv;V6HJjU>mfg$@J;U4p!-9KdiG+rK1Z*0!~ zueREUkNmoQxM!Yy-mhOH^+RNyvL-4E@~i7jqkm3uk6(ay~g2QxmO-Cz7HAShm7k( z!Eqh!8b#MTuSwcI$+EE!XKWReg<@>D4p9xp>f^@h9$Yb|A_PWs^v|_`KHhpTxa7fUYW7RNm$|j{@?aF<1gvg@C=OS@Zfkh4kK)j zGNxjUi7Itg$vgLgu@q}8Mdr8;#&$%ZF;!@}!g7W7R%*Yo8SXrSVltFLLNMJ!NzNl$ zJyGtJXp)r^PYQ{ol0ha>%8quu!-ybw?_^t_RHLqZm*BWkl%LIrf>`5FEez&$<74g8I#q z5-`q}%T8nbQ$zfI0sAf`S$k4yJg-m6(pPda?@o5E$<8y`IpzADK-L)(@sZAnICa-J zHeS}rCaP&}2!td>28I*Os3iL)lR_$Kq?17=S!9z#q1P%!_XR?79Zxi)Na9gKqO2z* zhB*6&TQ;9*+l1W6EZ1BcpX4c?Pu6#V0^6oi&ePQKA}zU&&r?pmtZfJk&sQI#Na9g4 znLq(kDd%bGc##&~$9z7doK;>+tz-=w*u*YY)5UsrvzAUe*!)Aiau0idxV&7h_~HB( z`Fg=)_Pt@<-R*tW_cOo&4swWYf}hL1yWidPOE*G~{BZqId5rcSE+3aW+4@5pNlfM4Jk7H_?|IW}-Go`)p$#%9IMx#)J%*W&optwX8$VlSxr|cE zNx8Q>H04Lz@9yWGjNIQm-aYqCpE%VYCEw=z?#I{s7Wda)+g}nf^iHNk58dBBdg%Vo z4jsBVG;G$!(C}HEp%Jq_9U3)jb7-{XcoIpnoUDDR=F?<`%p{9!+j6WcoE0o{V`zzW z70RfTRm!WDHJ0mU`MmYe{V6eg)8l|Pg=karYo0S>hHA6(3CG`)Q@_U~;z=Zl;JK&b zZ_VBL+8|SAk&VASr~V1*4!xs7R#HVZ{w7_p{uK3}dtm7PkO+DI(ETOBbH8V3w0fiO zoMWXn>XYUe>#D5FnYDk~JwrXOIljO-#>qJ66C-0R=gWLqFY9Hu?3P>QR=G`XlRM>3 z*(dwt0eL_kkw?^%N+H4ar_A~jZHadNfu#AyK%;ey)|J>l&wNm^`7%l=pS8a~ZRq~~ z$FwuKX@5!D(CwiaP1@{lg;X@{Zy#fQwdFaiU~ALt+eN6|x`A0(nA(xvD z1lA7;48PHIVCW~Um!FZD^4DZiaDC^HK!F@Br^>0aT>hSXT7E{>$^PK;<@lio0-sRc zPRA)fGgy!M9+jVwqxR{;b=tMADG>5pWawFsL&3+T6$Bs4&ENfJtk|#I{+Hw>*(p1l zy4&zD_ruXIeMYx>ngLm&s*v ziCiL&$Rl!r403FLs%uHfqsn+x84=b;DDyGP!TT!Qa=86$Z>L{f?UWb;A&=W$WP6eA z8P-!mNO0bLR+4G^YTH*EOJf}yy!Wzgqhy@@D9Mua(;iIg+Q&IA-f{8TVc(E!%dwVY zU4P>tq}Om&DWjYUDygFSz57eX z-+8WAp0-AZ-Z>fn1%^N8b*IOR(6;-6>+U{A{7+DzPv3hvqT! zhZf7TF9+Kh8v05^f9SCD-uIUKtnYd`H1xHIyXO!Zde4a9v3Jk;C#C0~7T1mlB8eiJ z7-ESdz9lO(K?Wt7Pm)P3$)U+ID1}tZX);Zw%b*N0$s)Vu&DyZPeWH7wkV&3TLPvy# z-aF#W_WMce?w;=(GmyE?*AR>fUgu95x1VOduXUn=W8vOFrZF(#xjXO0zVXmz#rY_w>E1xnO}{NBjBp}|CWg3|f`1QPKbcP_gG>r2r-EAQm`58cSjk$}v5{^z zv*o40g#MQT1q{FWQXra9H(v_2$McBoJK4(`a{z% z^oOqDI!nLRA9|k3i~XVV=wK(uN%(euXd#XCFu(;OF7=0IQpJsnhkoYoUwuOV$LO3WZ9lgGCAauLLRA9 zQbi#}R8veTGpVP6Mw)1*mD$W;J_}gLA{MiRr7WYJRjg(W>)AjLTeW+KYr-g!$YcT` zyIiMT_UUC0d#&4N9i#SH?sJ^$8O))URB;QVp>9+5}oG24U7CnH?(8eyuYb;Lv?|rleqDhLfF532J>tn1Znj{`2GsgDVR`1`)IO6RaZ@&cl zF^VJ}O|V{Fi-L7Us{6oq`a>@gdAUC{i)!Yxj@_K(7D?aj4=tvd;lV_T4G70vMFbg<1bqbM-Wr;=&h zPNh6Jeh=A)=;QVwDd>P@$B!af8PUoe6=Xiix};z|vDWjb$F@u+kYwCGO30w?JZirr z$2`jL;60S2uTx1QolLUGCWm|qDWaHCDygD|S{i7iiDp`8Wj19blR^m@)G?EK%Bdii zJgO;RF7s$(J_}gLA{MiRr7UAk>)mVf^XAWd{|s+84jDxfkCMp*3YbbcPgB>fP0Lxq zN>;TVDgMVHzlhK_<+LfMZI!Wp$(W70(jS^l4GUOLFQ*v15@=c78h9UH@%)@PakzWQ zz3Z2d`S)ghlkEGh$-eKJ?E9+8zMq=x`>x5p|C$`S?#^qw?$FOic8506LNl%WIlCj@ zth_f{clZ7YW}u+pz90Oo!4N-_@!D&D6XNf*{wy5(H$ivzy}NvO-Rqa%Z2sV@=9PBVT2PwBvHhZKq5&blR_T(6i`SJ#gtITOzJ76fkv8WriE6P zvw~=1h$Wp2GRdNhaw@2#ifZOCmwB`?p9L&r5sO*EQr5DL^+eRY66lnj>8}Jf$S&fj zWf|@Cu!(*KIKV;9a*p#{;5x(Z(QkwkK|Bd0l1>)cDnwZ04+F8yDQnh2HT*YeE(7{^P)5!+9*v5ADu$O&QKIVE+PXlSnYm`ki)51L3 zSjv2s(av&Ku#Z0a8Q=g1xx{6{^miPKSpJc^@? zq5GBpfNLJ7u6ScO;g!G%G9Px0QuV3xJkJ#hGR$*MMcX66;F! z&r{l?-ZgZvSp7?g(uR422is31i6oIv0fiLNObe~dW)5>%Mmx*d#Addzmwoin&r0>K zVl|uD!d4D(n0eaM#zGcR{EopuyIjr+R?@+GHnNpnoa7W|xWGj&bA@fny(vSS<3{t_ z*}+bB1?OFt-LjWGG+5p%_i==y9OKM%*IJ(7B&RsdMJ~~wqfR*>ugI&^)*46hCbt+Q zQd^>kCWcs&NG64%L}N#$kwGT;6i`SJ#gtP)H7(RoOC2+*C(77qkShjUGdcL^D}mcV z!FHtCPBgK^5l;e%9Q@>9AVsE9Kp{mGlVRM|$~tCJPXn`=!(8UEh{Y^nY1%7CiYIvf z`pE(tvIYZPY^0kWHnEvT?cXA|vX_1I(a!(}ILILmbMF3Ek2I<4bpp-Gn9UrPvWzu! zv4uVCqCXaBG$)U!m9HtFngcCs|2_%w4GH30V zBD2Y%m=a1Uqm|jrVJ@p#OAp&Q$9XPrgPVk?e;8MleU0nfVvyTJ+b4!t;)o}eG}6f+ zk9-O!q=<4VsHBQ&YN(}-nbgxjBYp4JHx$fM1|`%nlX_a2%^c=3k5%-riF2GMy!;NGLO})p~<#p+L+G*7P5%NT<;tVERjoD#*N24uF9KojZEYLop?scI;Vl%~!FQwX9=3J2}BcE^(R2F!hl}I$P=GFz2|;6|QrO zK??5Gzx1$=J`MyeeKl~9qa5Q5XIUFL7`X6N_h6dqy?rpS_M*qW?+*s5N4^>ed-~Nt zb@i)(gqT+Y#osh;rW@O%UJax^qdw=7^jYI?hCb*T3=Gay?b;_=P zV$gnrfiUMY*zWOTzOimTj(8Htqna9OsbePfG|)&BOIS)L8|Y#q-Sn`F-So1DlU(5{ zrIb-l1@mZQJ_}gL3RaSuIT%dgUowWwAL1}aILa|jahfxnPh&NUe$fB4n++=e{=x40CQ_gp*7P8Dx@0HhC0K zNHL|9QBDO_)KbSx8fm75R_4*hd=|2ZB`hVD_0M{|Vguduu!+rVX9v6JWiR{aqo3oP z;3TKG$t?!CO-SuvU>IS96G0?VM03c!m!l0Qm2;6N zImKztaF+92;3Ai}$_>Je;|LN-BAFCY$tH(f@+hH{GRmo-k}4W#q=^F@Si?$Iv6?k>u$Fc7_?m4Ko7uuvw$UHy`f-4R9Ac5W z7PEw0|?4q?Zi_(u~`U=C`tq?d)JDyQnhGcFSJ&(C_t5zZ_sM zhd9g;j&h9SoZuv`(5m&mpvTQ_s5A= zZVd6HkV+ag)KbSLHnWATY-4?jewI5}@R;kUk9UUqdS-~PXMT2p4991ZMK(F)l1DxT z6jDSnC6rP|ITch=MYa09_xKA*cHI9dnzZF@5-2b}VvT_~;z@{j<;XJS|B3`E)t9KA zB$7!Xl{C`HAlLZIBcB2aDWaGXN-3k93M#3h$apQLgi^{Vr-DkVB7g4j_mjqIV9@(a ztDMVf){v>)S!9zFJO}c~r+`9=^zGYp-G0$>0>#=YIHp;?35*@%jZaJ$J5E?>g4g$p*UENH=xv#hKL8 zKqE~w(?Tn=nZsP>(Z+lhu#iP8c0a!jefYMNan|*G8w9GIR}Hmv+~+k!l>U_KSWhP# z=wc(?^l-_3m$|}Ku5t5zuN@fVHX+eow-H7-*SWz>ZZXIb^)6)@?JQ>nD_O;A*3iLP z*0G*WHqgaJy6IsPo7uuvwy~WZ>|__a>17Xl*+-viJ7lQm>i=GW!|Fc5QL^=64!Pu! zPXUD#u~eTfqn+ifU?r)r-DkVsHTQm>X=DA4K&h3GcB~TUi&)PaQ`cB#~A*l%J^@--fua+ijBSh27zPK zUJX>}|4OQ;riNPTm`ObiG}1&fSy8VXN!G^yL4g+SXk|8Yn9Drcn9l+hvWUejF~*i@ z^V=lQrOb_V)5BW#&^p%B$p*UENH;xfVl!LV%39wyT*rDk*+3VYW9-9Lwy~WZ>|__a zW4xYoF8?R!){b9=Wp9410@>cPE!1~K6jMSeWt3AvB~?^YLoId8q@D&EX`-1HTA3Z> zy^(#Byl-cIF7s$(J_}gLA{MhGm_^>la?QdBCxS?#h$e zu$FbKXSsH+{EWx$5Rct&EwCcEFRNJ18a61Si;Z;C!zP+syJlKwWi}VN#AU8f<(gJg zLl2wS%w?`{mBf**Ay-Cvef>6#<9*t9LEA6VXTG0HuGJ9d|5o0n>-dw#L!irh;4RwH zO4d6D14q37HrxCh=6ZbpDc9$xZ4Y!RCttsBrm4vL56<`J5a@OM9`-Uv8FQIO8}nJf zLKd-@C0yki*SWz>YF*blW>QZBjWor2KGvq6WXMmsK0jr9V5z#7(av&Ku##1*W(^&z zWgYA3WCOR}@s|A+Xx5)i+V?9I7}Sp2gy^ebgb_{zkwg(q3|;n%mCdx!%53H^mwoin z&mgJpu{6@jppKcevV_&{zn^k$fdu6wl0-5oq>@HD8Dx@0HaX;yM?M7*-_zU2LSALmcJ^M>$3t103KW zw+YcV!^k9y*(_%(r-=04Tq;|+$~A5g?lnsU%V=jgn@I69Ka1&NBU{+Pq4*!WHv-qx zf1MlL^yM?49n zkxmAgWRXn{g%lA&BDE}K8SV6uVeBsAG}pLIh;bXqLc+YS7fvi?RMNm4HZ#Bh4swWF z404++KRek(fqE*L$#M>Hj`LjP265_5pqg6hm`Ob?%waC`Xk#gBS;u<1*+~z(=;JKs zC{}(6rIb-cH8s@JKqE~w(?Tn=nL``%S-=VwvWUejiSzp2^T%5V%(LHSwy=xc^sC9s(D_F~x2Y+Jw0^8KPiS6uQCwpo6 zsOu{Cae#vy<_JeQ#tBYxiqo9oEEl-MWv+0Y^OvmWA~(6kAh!wmj>lobh$MUugb_&;(Zmo-Jc%TcObV%_kxmvl3LY-a~8tBeEL z%O3g};2?)c&2S#1lR+j~WRpWKc~nwGH8s>y$4u&Jpphn;=^Ev=)iAF`-&)|XHXPw7 z$2iUjPI8L#T;L*?xXcx8_5>En&#Q9mibeTs!1;OWE?R$ej zLYDnWBAFCYNh6&MGAW>tB8n-YlrrYly4JFSN~##t&Y7~F1{xWr9nqwbK_*#blS3{= z6jMSe^)xV>MXX>Y9js*oM>xtcPIHEfT;djy?*BLn&6iP51(j4$O%1iwF_T7`Xr_f$ z<}jCev@xFrEMY0jXlFUASj{@t(@8fyY+@_h*v?LN(aRq8a$tkU9oa`e1HpA1ILa|DaFI(~ z<_cGd{hEF!o&=7o{{#uHMHO>d$1Zkro;c5w@g$H)5``48oE5BOH3(*7 zJ;m=dekf%zOE}G-x^EMro?%20O$>=7kxUAy`+H`SXWQ%NJ83^FOEgi^{V zr-DkVsHTQm>X=DA4KyZrf5+>ew-AW6Ump1sFpoCovw(#xVlhit$}-y7!A^E@mUEov z0vCyJei;-~LMdf5(ahXn+OLI8Y-S5vIm$7P6Joz%q>xG>GnvC0PI8?T_gNmbtYr@e zImsE$GDwK~ZX4U*`KJ97=vC()_Og#Y`WfH=2RX!Hj&OymT;n=7xXCRBx$QcfbsgSB zAWOTm$sw0K@+qf+N~)-)hFa=qp@3FqGmkdrvw(#xVlhiuM*BnF@0#d6$^R;_Yw}=V zH@)m(FZ<}Dp8*bVkV72i2uqZCR376vC%DKZE)!BX7`P&@a*gXOcgzY_v6>FnvW`wR zu!+rVVJq9%&JK36hrR5hk3$^h2uC@_aZWhjA@_Ly@jnIDTi?Y-y6IsTyXmE$0S<7G zGu+@Nw@5R73MgbI^~`4x%V=jgD_F@ocCwe_i9gn!yKM^$D*HAe_8UeR;Y1Kg6fwjS zM?486l0NvzHPIHd)T;K{U0Y zF-hLwCbv1d(te!e6sI}E1uk-l%Ut0qH-gKKyCny?O~}Vw3nGXlmUt3LBAHau$sm_J z3dm{0&x&S}OCI?YP)HHQlvB-2>S>^nCYouXm85yvrhRkGuVfXgSwjbFS;u-hi7;Lw zi6V|f(nu$ROtQ!(hg`}ir-DkVsHTQmmQu$u+F8yDW_o@}_So|}foSVvh$Wr`l1L_n zRPxBDfI^CBq={x)Xk|8Yn9Drcn9l+hvPk{K>VLi0wdM8g`l<6x%6S_Ec4$|u`!J5} z>|iJ9KF6CuKLg|>>wEIZXER&aO898kkw^}5n-D*be4CI*JYG;t35)4v4|^Z^@&0&y z-@L_qAT8KNGRP#0Y;wpYk9-O!q=;flD5Z>Y&N%;SSwk&#%%q-EoaPK?IY*N&_ElJrsXXy0#mi|e?|wqLP8g>$N;ioNWkkA4O?z(Edi zm?IqJ7{@um$t17awDlM9%bs7idVg7GmGKJ-WVz1S9N-{_I81?STu2eclu$|;+t|(y zcCw2o;~|duKc6&7{@umNltN^GgR28k}9e> zYu#?y%O3W!k3RYt;6Sq1(Z6`#{i4SPu4vm;u5q0k+~gL6+$Kc(h7m?M5kwM2G%>^y zM?486l0-6n%1Du^q>)YrnPibo1C2D%Obe~dW)5?iM;r55z(N+Wm?bP_8SN}*1uI#_ zYSz%fTGr9~oSz$(oot|sjdat)CJu9iqa5QnCpgI|PIHE{oZ~zfxX2|gbA_v1<2pCE z$t?!CO^7i$j4<-Zr+`9=D5iu`$|$FTN~)-)hFa>FNj(iT(nK>Yv@)AH%w-;J#1cn5 z2_&+Dm8@blYv^Dt>sU`G8#v4nj&h9S40CT4F_U^)nav^=vy66Dkz)T;(nu$ROtQ!( zhg`Zi!AVXL=GbsDD5jFNY-JnUIn5c8Jy)iXN+WAo$9gs@Yd#BD$RZZgO%I#c%oet? zjqU7UC%f29FMHU_KKkfqfCHYVhIn82=M<>;7oTs`{z#&TCWctzh$n$Wl1L_nRMN;K zi)?bpC65wHDWi%8s;QxtIvQ!BnHJ_SkNGTM3Cmf*N;=s<7dzO=E_Tz)9`;hfT-sR3 zQu+yVEy5{f2}@Zq)fU6{>I&W&IWhFgqVmmuH$tkX~T3u`CU?bi1u!+rV zVSoc1eG#AU8SMmP~f5=AsI#1cn5x#W>g0fiJ%ObMlwQBDPw zTv1PgOr(nCte~5V9CE%Vxj~HcDxr}kI@rWn;+$JA!<<_zd6ZC14Nc5v5v$qBO;Xj7 zMmiZ}l0`N-)G?EK8fc`6Rjg(W9js+DJK4oEkHpxW;t` z2?>r*64=WHD%DX%H8s>RlX@Cxq={x)Xk|7FSjZw4vxKEAVPmU4dFx*MGUdTlSDG&%o0|!h7Q)Uj`ei1fi5=EO%I#c%oet?jqU7UC%f3q zVUBQ=V;tuMCppDw&Ty9N+~6j+800n~9;d^JAd)Dei6Nc@5=kPJG}6f+lPt2yA(ujm zD5mq9&X28ZV>{>6*(>+3mwoin&j1HF$RQ4MgcGZgCppDw&T#gdUh6;Vwf>t6TvXRp zu92)g`4mt}Ep;^0LMsbd$}ui+i&)R)aU_sPDw$-FO$9A<(#|uF?qa5Qn zCpgI|PIHE{W8d^=j^6k)NOzY5k=hVNH0jT|1~Q%`l1U?-406b&gi^{Vr-qr-(?BCl zG}FckR%mF?`Nmp$xdAN?HR1SdJgY0hw#bKGK(+k|N6Fv18Yf=Hr>CWapS zZDN1}9OMv(Im$7PbCFA2<_fWnjU%1}iYcL#GTNBW0v57}#cX98+u6Y`W%Y4^Ld!+W zW)5?i$7Z&0kvM%EAM9rmNurc8%Bi4|DynH?J_}gLPIhsUQ)AxpX9xp()VG&?^wG}% z2RO(f4s(Q~9OF1AILRrlbAy}QVvyT}sDCB}UmOe+(!pBRv7Tcb=L9E-+igFJsHKjX zG||RRWzLriSj`$bSj#%r)5{+Aa*ESja@=LEaFt|jN+Fdr(z#}RjjUx6i&?@_ma&^& zE)!;~r;tt#x#Uqy38hq1Lkq)##}G~gkwg(qCRt>YLoRvbQ$Qg_)YCvCO*GR&E3;kW zCSP~|5(0abvyVRd8Q=g1ImBU(aFk<2XXsmbhO?aGJXg8EMJ{ojNPUn*5p!9~I(pd2 zNltN^L2eV_aU+{X7P5%NEMX~K3~+!8T;vj$xuMRR++vX1geY?u;Z$DI|1z2wVu>T3 zM3PA*jSMo$BAWsVDWjYUDygEDI_A;Fd^WL}U7X<(k=htVG%>^yM?5*?l1DjBETf&} ztY9S@>86KGY~~<`=vBua_Og#Y`Z>rU4s(Q~9OF3WIL`$xa)qm0Cq$Vy zB$GlaX{38@ZklE+{#Stk$8ByO3~XU5+t|(ycCw4z^sI7`cF{2DO9{E&JO#_{D(MLaXgzI+%{R}Y35W|eHCKu~$u*nwN z><}zB5$Y(Q?$~F>l-JylZQmSniLq@gam4eM1QJOinG{kelu=Fvl~hqp zg0>nNV3K(jSY(N1R#;_?bvD>!i*0t;WsiLhIOK?9PB`U^b1t|fQr|v(1|+lHI{#OG z{yXMwg?KLX|97=>>-#VNci(6E`d5L=|HJqHbQni}gLL;t_1*s4S#p!3{l91bfI0hr z>cjt~uRd4y_CNKVnMuAIGRGS7-9e$b&Vhf<{QpD03Pja-{vSIp`kvQP^^{Rg4Ykx! zPZQ0w&`KNabkjpGgA6mmC}WH>!8_jbfsafv%?z{L#k$}6%st>=UZ6tzEmiuHXTJKm zL%GZftDF)2=Zy)mq>@7}c@$7YF(s5zMitdG(nU7|3^K$RADLo_du>1P$Xs|#5Wzel zgr__s^bh*mA?NMSED)vc=S1^@m%QRNZ-^n5IO2Ir0*NG%ObV%_kxmAgWQloE%-`mR z^yg4rpWC;^_6xlh*mbPhW8ZhEeeVAK(E7e`j`|q|4)pVoBaS)Ylrzq`;F2q@x#5;O z?s?#mLymh4G0X^~ zj4{px?|9E7ANa@=)66hS{U3JyK_f5K`-<1RA%!z^>mv%n(RZ}pX2^2n!vLW(G+gi^{Vr-DkVNJ((M{%P~)C-2{? z{m&^?eP0qNF~>?NqnrvVsiK-1YN@05j~Fxh8DNkhh8ba$F~*tT-5+rd4{{Fwl2Yye zCM|0J=hXU{$LmMb7pP8fO>X`ka>OwwpUOXQzcDJle+&3b-2KL(Sbk=KCiAwL7Fube zoenzbqMIIi>7$<$yimU66|Z?i46(!!&s!2mB#Got$4UA58i7==r;$zunPibo4!Pu!PXUD# zQA`P?lu=Fvl~if3RD0jY&pf|=$ovg_Omxm-ni*!9W1a;T6My_X`{Lis&%l=V%iHX* z%O3k2aL5tIoN&q+=Un{JZyd+38{6M|E^uSNRPFzU1#ZPr>a%oT5onOx=PBkmFL=o- zUh{?+Vu>T3!enz?S)@!*R)pRM5|v3LlR_$Kq?19_A9ud|86KX`uHHuk4!O5znDkG{5=Hb{+M;k0*frM%nGZlvCamY zY_a{vtS|HPTLdn}am6(|_St2ReGWL}h+|GT<&1MKxa5j!ZKZ1K2m06d+U~Xez#}<& zOc235A%v$qBa|@0i6D|Fo)gUrUh<09ydj2I;)v%h2_%w4GAX2zMmiZ}l0`N-+%1`~1^WU^DC5?14$Rvw* zsn#TueBdKfOf&N*tV!mWXEMz;d}NAgX2|}N-+9aqC5a>X?_+;YdbKHV!Hh!}HC zL=?}79&;U{?r#(QTh{645t#UtTXp>q(cgTG2rT{y*AXnU!YXU5v%w}?Y%`bUSjPg3 zEV0ZAtE{n}<{CkJUlKTwzeA2V=7dwuIOl>(uDIrgTkg2$fk)bZOwgZjzEuAY6xa~k zCR=Q?!!CR5bHE`-98>ov9V=;|ktUjHp_Mj*#q!0!XWe~8>X+vJZ~Es}vHXSw&gJuh zORl))hFk8q=YdCZ`k0_kx#bBVyf>#t_2VZ9B>S$~6m_MNMmiZ}lI0wIsQw=*kfV-V zR#{`6zI1boeU|=|eiM~pJDO=>gBv3Mw0TA&ODwa(Dr7bJ?y6K^pF~*tT9q*as10R_(#;N-F9Rg>z zJ?DZ;uDIrgTkd!yXO9UYm?wnrlxKtzMmP~f^MaQ|@|t_~L@BdaW`%2Rcy2vKlSe+S zwDFGjOtQ%>A=XwDuSp@FCYo7i<4-&8==WCy?*4E8tCj~I?fV}eywY}%GMJ}?(NFn- z|L;pJbu`gT3$1k0MK68yGsG}sj5EPI-ZM#zwql7RjdU`|q?i&)DWjYUDygEH8fvMd z-ux}q#~&b&XTN+3D5QZ#nrNnlR@!K%gHF2WriWho=x2aIR#{`64K~?gn;mw!{qA@J zhqgQ7m=jLP@qe(-l;>P<$peqfgU19B%o9R*$}>US>^nZhGjYk0$yVV2~k(8DW$$#+hY~c@|h?iDgz;WsPcuHgwGJSCh6B8lP^uX)3S`eT%_#1T&_X{3|E zm2IxM=YdDYB$USl5zG_92q%K)MDv1|yy6Wp#1hY25=bP8WYWnYmpsbJB#QzHDWaGX zN@<~$HrnZ+lPKSK(cf4nk4}4^b zX=a#Zj(HYXZqrIMw+tBuP5f$4=}2~UlHiiRyRHL(yZ+68EdGGG_Jw|ZZa?Q(M~nBneD41IUVW+B{s{u7#(mEC&a=QGODwa( zDr>B>!6sYg->7!KEc$!o;4^L$c=Rv)FJQ4`lS3|fR)$Fz#u~mGr}lij5EPI-ZRMuJ~G8LGt4r_JPRzY%e8h} z_47*tec9S%fI)^BW`t437-xcayl0Xv*g0f!uM%n7HQ8SiuBJ*xfhA+VI~ zJa5~dOSEJB_i^|O&5LhpCsmxkq%Xd7?)%cufpcSc!6jE*bHgon-1ERAwe^2n!vLW(G+glcN2rH*=9Xr+yIF0^sU71!Kw%N_ST@W`5eOc235;g}OnIpdrQ zF1g~G8*bTmEI8nhBaS(t^Upbd{K$FmWA{7M-j@XG#8*!PjWp3r3z=ffBAXm?$s?Zv z3VHSCTs!fG7-ESdo*8DDW1iP}wj+j4y7HV8Ki^#XA$0|c#a_brfcvmaG0hC~EU?It zJS;0$SY?fMw%BHeLykD+gmW&q=7vjdx#OOY|K7bLo^hxC0l8VucWqDVU-aIt&|LXT z^7mWv$6B%1*r4^VxZeD$uBpq6ONBA1^8SFXzvFoR+s5qg%6)_D(tlz*R=Ul@f2sUe zj{X0m`X^o6{7>FD{?Eqpe=(os;0Ym|a>h9qTyn)VH{5c^pm>KECc-#I62)_(c|jfZ zG%(Ksi!5=>38%*YOLOt-eh$Po{3`HDo3D9846(!!&s!2mB#C5FNF|MQGMtCM2=QL_ z*9A(wUPd_;R8mDXHPli^JqQN|c&f_J=U zk`H`jikHUu6^%5}Obe~Fk!YJFl1U+zG}6f+lPt2yA(uSzDWH%diYcL#GRmo-k}48k z{AwfG_3^w3Km{e;NHQ=Sn@ z7~xb=O%1ioaYU!zDSqINILD0!me}KnM}NVZB!ya9=;2&jk$?YJfeYm&S6p+$EqC1W zz$5KECWv635KA2Kyd{A|l1L_nRMJQ%gG{o>rkfmc$s?Zv3MrzP5=tqfhjJ>Yq?bPW z8DNkhh8ba$F~-?DxZg-M=3gVQ?)42e*T`BR@YTh&7MnlxYmJLbUP8CWjAf@zU57Qp5;{JT6cN!Nd?tJq~vzD5iuOb=Oiy6V0^HN*nET z&_geM^fSUJu5$f%N+Bpvc@J`EVIEQeF`F&r-Tv3b25o1krcAX zC67jW7^0U^CV0ntCYfQDIX2kjm>~Js*7gp&?6J=Qy{>%^l}8+N!YOB*^TzjdTq|$5 z<+1vn5W+J;2`7R`Uhs<7#PF5`ZtH#(c>LSH3Iq|%6C#KtiswZ0f|tDFHE)O^mN?>h zOF9{3l0`N-uJ^2D#*sPXP_g zG0y^vEV0ZATWqt#E_>{Az!lfraLXO{Jn+bxkLCq0dFHuL!U!jVNZt@bEOEs1mIM+> zBAsM1$Rvwwaww*RQpzZ&f=a5WrjaI^>7bJ?x*1@QAx0TvoC)4D$rSIHWtBD7IpUZT zPC4V83;H6wztHcepZd-R&uwr?l*joLP{<@7_{bE~%y7*Ow`z=BAFCYNh6yaa>*l~bP6b>h%%=2pKqE~w(@God zgz7^W;Y1Kg9Pzv*fkcu>CWTbeNGF3#vdAWfT=ELsH*;#Q_9;IkP(dZb%(B7;+w8Dg z=)Jo3zC&O~{Z+Q#Bh)>NFv5u-k|;XqqMIIi>7$?gBI}+)iYTUpQpzZ&f=a5WriNPT zioP}{U(L~%9|yw38BPR|MDd(xUhtAvyw?9k{r{c<)%K~OmOAQbpphn;>7tt+dg-H| z0R|aioC)4B$uu*}F;5{yjPZdaIZS4YZFbmYk9`hUldE+$*ksZ@rVo5%ifIh9qTyn)VH{7x%H{0y6%bxkQ_#c=9|3+ZscdTD# znPZ*>7FlAM6;@eeoeehGVw)Xy*<+sr4jC2yjq;W|?s?!*vtuGbEZAm|C01EuolW*R z;E*GZIpLJ&`WMX$Uh<09ydj2I;)v%h2_*g{b3os}>^qJJpN-}?B)c*Gn*fck{ z*k*@a_SoluLykD+gj2#xT-Oju6wis~1uuD3@`H05I8$#lFL=o-Uh{?+Vmar6ORl)) zhFk84^r#vH+Fv5u-k|>@N%?n=gir2g$hFIc= z=Pd~&l0-5oq>@HD8Dx@0HaX;yM?M7bqvJ^mVjD!*r~riNPTsHcHOnrNnlic-0!ifU@8 zCC~3^^C_V4)9-94ri4<;cx@fNA%-?}wbMZ-U3Ak!FMaegz#u~mQ>U$Z8fc`6W?E>a zjdnWdq>FAU{_6LdBi}ZM0waILJq9`aTo%>!nFL1U^gw$rRQ>;f0*B%_;+Q$H&a=QGODr?&vnC^qGR8P1f6XzB6;^p#Zd?c@j6#Yi zriBsq*yrhAci!Zszt4&O5o7jy`;^-ECkj;RUlrBVP)i;4G|)&B&9qSbsqd6hMmZH! zQbjd2)KXVw{fhD1r2gb28ABTY2ZLMv^w(?KU)bkjpGed7Cx`TJb^2PVWb zSL3sNVrrF>A1RQdo?PsXYPq26vl#48}%oERr zl>emM{n(s;b-zHFc*?1uk}9gHp_V%8X`qoNnrWexHrnZ+lPBzKPqB861aNGF3#>S>^#0j8N@(EdZjJ^NK)SUJKdV~jJw zJJwidgH5*BW`|w&*yn&ljyUFoQ_eW&f^h9d5J?oziRJ|_dBtnq5JN0+#PgN}N+_j_ zaw@2#ifU@8rIj|?>7bJ?66q$3Y;wpYk9-Pfq={w*8Df}OmRaGHGtRl-iW`EgrC^>A zLIjaS@tkOq>9Or7V~jJwJKi(N2R<^z9P=!&${Oozu*nwN?6AuLha7Rt371@R%NgZvD3od!{H;f;##1YS15@@5H6!oT(MmiZ} zl0`Q4G|bW`t2fDqSn^j8Ho1qMIIiE8UNGuJ{&#aq&#>j`vLRfdv*>Vwn|I zS!11j4mjk9V@^2bjB_qN{e5wmbJb55_^7T?_54uLf6X=T=M$I`N2>b1r@*B=Tyf3g zPvc53PYB^D&j=-qa3Y8#is!r`hFIc==PfCul14fiWRgW8MI=x|6U~hB(%gB)Yg%Y! zlP$I>G5@9X`z)iI_RW} zZu%KukRgT{VVw7TWPwGN*kYR4mhM#jAfKlK_yjGQ$sCVY_r2Id+c+- zAx9kR=NJAb*4GGxc|Dv6B8lQT(Y)X#uXxQHVu&SZw&bi={E3T>0&Vv|h zm37q9z!uxQ(EdwWXr+xYrila`4UWRgWTIn1-bB1tj->rH*<&@R3z6d2M_fXrzZ_R@h>X7v^KD`r2rx zgHF2WriWho=x2aIh8SjqQN|c&f_J=Uk`H`jifLw;WsV(o* z30YK7Nfk{r)517YoN~?u*W7T+9gp=dh+tmxh7?jsV~hn7ZJR_gDWsA{I@#oqOCI?Y zP)0R1)KW)1ZM4%tCtY;Y&j5oAF~K|DGsy=&GR+LL%rVabi>$N3Cfn?=%RUDja>N;z zT=BpoV_a&^eUrui%=^!87r6Ufxu=Cz+GwYPPP$mqR=2W;Ui#=~fI)^BW`t4hdHCJ0 zjV%ysT;ho5EeWKPK_*#blS3|fnPQq5W?5#1Rn}N%gKc&gVwe#|nPZ+4PI)W`L4*=UIB&_PlTi*yke4Z@ znc<9cE=ZK0B$7!Xl`gv3)y5wC9B{}H=Ui~f71!Kw%N_ST5UlMdgz%IIB8lP!FL}jl z-VjS1@g#8Wf2m(`#WgqF^Y{<=8)w3ZB#P%m^O9G@*#EWi&8MGJhWRXn{x#UqoDP@#XM?DQR(nK>Yw9-a99rV&iKLZRh#4sbgXOa&j z&HCTq$|+`;WsZ3kSY(N1R#;_?ZFbmYk9`g}uj*e7AKq%Yz{r4 zlv?T-WQA4MxZ|D&9+_8<$!Cxu_Bo)ynk%G;PHxqI$2}qTeabUJ2_u{cB6&_UFL=o- z-Vj49am4eMM3P7*g;X-gB#Ufv$R&?_3Mr$U3M#3ho(39eqL~(2X``JEI;m!eVMZ8b zjBzG-$9vY8oC6>A5ifeATB~4D#$sm&~vdJNrJbLJ*kA4Q&W`|96 zY_ZJ_yX>*g0f!uM%n3pE3FZkQJmndogb_{zkwo#FXkPG=SG?v8F~kx_0fiJ%ObMlw zQBDPwR8dV0wbW5h1C2D%Obe~F(O&C5t8?(rVN|_8KwwKex#oQ%O*GTO63c9`%Q+W3 zs_sJmDFkgb~4W z&TJE+j1up2qItn8Ypl~{zIM|?FMafrZ2qQ@N*d{8@X9=X%^PBfC60=}XB?@bni^hc z`z5b<%^PBf=Pd~&l0-5oq>@HD8Dx@0HaX;yM?M7VwxFdnPZ*>F1h;k_2+M)^_duAi6fr3B#_9ETqh}$NgbxE99^x7=~h1CPA+m>`0ALI_WJMkrx~6G0@ER8dV0wbW5h1C2D% zObe~F(M|`QbkR)@z4Xz~0D}xM%m|~5G0p_`0ALI_WJMkrx~6G0?VJSUnL zysY;=Q!ai9(ZBy#7&z4a5yx~nc68H2FMaegz#u~mGr}lij5EQzzw6u<>fH7nzB1l{ z9q%z(wB1S@?R3y7C#_=r+)BSA&!b-dIeqT_e5!Bp2l%GG9jfD(@Izw#xwefqM}Mp@ z{-innZv`@j;*tgy;1d+c+-Ax9i@!YON>U0X z=1Hpj|5#sq{qZHRD+hb*bHE`-9CN}cXUxdWEOX4Wz#>a5v(o4@FWUGf(LZ7Ce9nDK z#ql!;)XGsEHF8l)9rZNO$Sd>ZHE)RFlrzq`;F2q@nKY+9@R2EAnM1F6Lk#0g@Q#q4$PmMfFv=L?Oz@8PO!9$`OffBYqhkIpKSQ5>U!D%d@NK>;zHfW| zi~q>6|0h}$-&X`;t&KS1c}oI`B#}%Csicw49{U_{$Pve!kYz1plS3|fOfk*O?>K&c zM}B^(*Q4d}=kN{V6PT5oIp$elktLQ{VU;!3*o)E%Qo)JnI;Y1Kg6wis~1urR}kRpmH zp_DSpsi2Z7s;QxtI_hblktUjHp_Mk;>7bJ?y6K^pKKdD8kRgUSBG|d)2_Zb?8KHy` zP6Uxe@tkNg2a5MOi`wiNgnw$6Vz(`Qb`rn?6Su`4gW~n+!5Voe>Swg$u3)Lv&Rvq9COJP z*W7T+Jr6wk6c@ofA%v$qBa|@0i6D|_Uhsw(?$mK~@Asd6eoX=elv6<^b=1>L7v1zR z#w5p_aLO6C+!HJ(PYB^D&xjzNGRldyT|93|B#C5FNF|MQGRP#G9CFDcpCXDWp_DSJ zsHTQm8fc`2R@&&Ghe3uIW`cKo;3M-au*ecCY_h{1`y6n{IhR~<%_IGLOekT56G;@$ ziRNv$oRdT{DP)pGHaX;yM?M7v>{b&mO-0u}bD zq>5^4sHKf|I{3gxrkG}iS>~AMfk%$zj|n1}Cxq~nXM_?)I635!_Yc1|*1($j*4bc_ zEwy*L2ZM z554r!&j5p5aLEjyG%un%>{g1vjCtuCcw>}<~)1M%auYUy;QbaK&lv2htGt4r_ zJPRzc#4;-c>)R7Tc*-+E2_u{cB8j4odKy~22mNXB|Lgr1)$vmt+W+V9g}-0=%mR(_ z)q`t=l5zG@pc*-+E2_u{cB8lQT(YzpsT=K}LfI^BWri4<;D5ru-s;H)hTI#6R zw^V)mp}w4pFZ~=?Rp%P(Z1BkOMXrrBe1{h?S2Oc>-J>fNJ)X<~u zUN+fcn_$~MA(uSLC@0PB*4f~I3$6*5(^!r;CQ<&9Xr_fNw%K8qJ@zU2C)#6^EuuQ~ zi3S>}Qg<~q)KW)14K&h3E1h)F%@D(kFv=L?Oz@8PO!9$`Ofk(o3oNq2Dp~rHO&*g0f+zC zb(dq$PZTJW&mxK`p_DSpsi2Z7s;QxtI_hblktS=pRV?2ikZhY2Qb{A73^Hk_gHF2W zriWho=;w@cF1X~1Yi_vZj(Z+>WZWN9M?DSXc|M;41{h?BVMYkDO)yUg;VEsj(?KU^ zq?kLYq>;`rBaCv$5yzZR_D}VP!+-kY{swteKEH#{QTa}OaTQWT@jvli$bMfDX!KeW z&9v}ReEZ4+4mskOR!%tOm2F=0h8SXrBc8V;kVq2A9o~2S$F5Vp!B^t>YJ8vjao}A1 z>uhkrC0AT?!!38*^S~p0cuWw%JRyXqJR_7a!igYKe-GvPCkTwGXPgP%@t#RO@R2E| znPHYW=2>8oC6-yCiFG#EB-p%rLM(B_Q%EcCIOTyyo%%vFF}$UcMn163Ay5CA?bsr{ z%bK8*X|B7zcI*S&;@DxAJ@z>uS-ZuQ&`t-Pj55hOdmM1i1y@}2SS&#V6G9Rxtg3g7 zQ_eW&f=jNr=7wADxaWaKpXwxtXM_?)I1xk=#dD&0!AmaxH}{&9uX)3kx*l~ z0xGDaifU@8rH*uhk!8Nn_7ZwVok zsykBoniyhi5SK7*pRk6FmQS?gJl`ADLpB8Rl7FktLQ{ zW0P%m*kzw1jyd6$OYXSmiTvLvkCoTll4zY|Qc5dROf$nQM;sGv{k-5MuPC69B8n-Y zlwn3#W1S6x{<(F)6P{}G8KHy`P6Sar=M}GcLoCUpkwGTeudfl%>9#l z_fPKKKe>1Ra5v%)HCtaHRM zC#0%3ohwe^2n!vLW(J)oJy*w zriNPTXrPfc+UcN^F1qRYXU>2Bg=?R$7l=MG=Dg$;O~2zfr+h;U73xS)rjkZFx#W>g z0fiJ%ObL}#QB4iK>gZ#TA%+=YlrhGc;2m?!v%n%tEVIHYYpk=uroN>*wtk1ep>0Eq z(NmrgN*Lip5J?oz$tH(f^2n#30R|ajfkl>BW`$MmxaWaK#{Ds`|M@q@7CWTbeT+fv1^A8Xhwci-yOz@8PO!9$`OtHxp+w8E*9{U_{$Pve!aLO6y zTyV)1A^QE4XM_?)I1xk=#d8u!B#C5FNF|MQa>yl*d8DpFY z-tmzsrkP=uITl!CiDgz;WsMCcnP;CfqVy+~G)gFCk5sXiP{SDGOz@5!BF%#+$|z@p zO}2>qGzWN2G%u*7jsl+_FQkZKN+_k4I_hblktSMbrHytv=wy%~hMC|!lYHPKQ%p0% zx_-_o=h*b~7TfHw%N~auam)!9Tyf1UcLd2xFi!~K84*O18{=oD?cMf%{`lm) zew^oVe2?$(JFtRk}9gHp_aPe@4F@E<8KIbYpaJ|`Wax5Ax0TvifLw; zWsXHwS!10IHaX;oV@^2bjB_ryuaPqn-vDS!10mu8DG;$)b=Jx>#eK4K_P}F(2Q|%{Lwg z9_sHAi9F^BPe~$~6rS;%RMJQ%gG{o>CWl<|$ftk~I_aXD9(w7cp8*CLVwjhV@QP8! z7-xb>rkG}iS>~8$fkl>B=IlLlvgN&PcGzW)eGZ70*BD}nBc2-Osilqu7FlAM6;^r8 z8zSUBl1$FEdBG*GdBYXgyyd3-Z*iMD4E~ktK#*-PA%qh42YiR8wtlP|;qLuEpFo+| zCYWS{O}5x(hh6sA=YT_wIOc>?&WtTmOz#n>w$ChcoO8h?kK{I;3@WK%n3s$Y&R4LFYrlxyOAT{K4;xEpTLx?&;$`(ZmqTiPz(7<4GWq$2{RF zNhFiPGoF)84!JD&zwYyFizwy=`4mt_Jq(ZaF{P<_*V-*<}lDF2mK5%$PmN4WQ13YGR8O)OftnZGt4r_JPRzc#4;h9qT=JSXTyf1?ZaSautJ#k+X#ZaVfl_r-*8TqT)Vw&qM_|?QYpk=u zCR=Q?!!CR5bHIW+KD0gJn8Y6Elb(;y-~LDD`$P7>@hk3QK20FYShC3>mpt+*ppYVp zc|i#S*5M#S4D*r^UNOoT<7ECJ=T5T8A(uSzDWH%d%C%WRB~?^YLoIdG(?BClG}A&W zZM4%tCtY;YLoa>wGr%B24D*r^UNOoT<4iEg6w}Nw%N+A8u*ee2tf;?8dH*p!ao#?4 zzJKAk9~1lMIJQXseuTgi>+mT_B$L83o|8%%>12>e7TM&GOCI?YP)HHQyr6_q%B=H7 zaekK+um6+=_5TG0QmoNuJSUYj(#c?<*Lq-yWmZ^ajdeEIWQ%RW`+Sz*J`ac>k|?5y zA(lAesrVzl&;N1t@mY_b7t5D+H+|6PH^-{*g0f!thtGzkqSzwVRina5C5{@|Lgj3Eq=Ym{)<&jS_EwuhI_dTC?Z3K?RdcrAZ zoO8h?%j$Jrf8X@Ub@O9t?mLd%_u8lU=2$-0;~T%tJ;De2l$gK7F_Gf^30yCI4mjk9V@?Rs zcPL@pC7h=ukxUBDcup#5)co=9%u!%T49l#r${Oozu*nwN9B{}H$DDA=8RuMZ$!p$l zQ=GTB%^iZ6_4*w1?6J=^Z@K6FcoKNXBc75(GATSGn;defppq)8>1Byi&N%0Sd&YmC zV2?ux_15k_KBhYWZ0R|ajn3s(3 zic!WGXM#zlm}Z7q)>vnQO}5x(hh1LthAXal%S}1B#cl2oNfgn<5KA2KB=C?&B=VR% z@+qK@B8quI38j=#P6g>?kVzKVS>^nCYl*#jB$>cAk3PI;x0*~@QmlAl0zFB*>7kcC`Wax5A%=Nr-OQWMPY|ee{3{MQ;*OYt2quJ38X0AY zWwzMnm=i7tcOHo)jaQ5^#!Kgv5neIM@}IPhS!L}{`uTylzafyOt#mTTB#UecD5QvD zUQk6fHPli^Jq@nYH}1Pf{9%D|`!~@{3uBBk!6Yl}u**H;xz7V4NhgkY5_rfX5_wDp znPibo4!Pu!&p4IZZKaJTo12>e z7TM&;|99jlFeR30W|(D;c@|h?l{MDcV2^zcIOK>^&bZ_?Z@A)`x7;+Y+ke7&=s$5D z`n&??=6_zBA0Ti?96^K-#$BR_CWd5Ec*b*5si%QPnrNnlR@!K%gHF2WriWho=x2aI zQvL0pG}6f+lPt2yA&-0tD5QvDUQj|A=e2>78eTI3d7Eyl*d}{mrzDZg!k=+I zW{G81SY?fMHW=1_k#>uDK?$XlQBDPwR8dV0wbW5h1C2D%Obe~Fy>gE&uRkR6E7scg z^c83q^RxfMJv^zTkxmAgWRXn{xpdgS(->34{{sS%f7-d9Xkv&Zj(8Gy$RiSY%oEPu z&82P9pLT!zz)uz}KVWT7x|v^()YX`s8DZ}R8dV0wbW5h z1C2D%Obe~F(M|`QbdCM1Ie0e@zYH41@sR?X=6Q>4s?BK)wbW5h1C2CsHm*jv;F8z8 z;fibCa`VqIq0YHYAN>rF`sZEONGF5LKmTECzR0+~punK94N-1B2le#@1-jKu550uQ zS14iJC7gTQ=K&E!5=AsI#1cooJQq+%5yiZqgi@Z!_fwKcCWU7cu3H~pBcJ=2K)m>i zwe z^0=!$=Ed;K;>N%4UgH-9PUYgYc;9fvHE;i%`&9dWZr{=Wcg6IjUJHb)+k4#S0TH|; zk|?5yA(lAeN#G%mNaV43O_7^V@wxN)uiFcpi0hOy&bi={*Sz71>+g>{P-M*(^MVpe zDWjYUDyd?VYPQ&Bhh6sA=YT^JtoesLqLL~$#Iea1+w8E*9{U_{$PvfXXs4DVjyWMw zJCAw7Q)ZZDjyGI!?=R?=L{iCNjJMjnsf}CQ<_q?~SgIOCk4nNJ#X;8eV4oO8h?uX)22*SzJXvE1S|cL*Yw z5JCy#F5x6`kNZ3zf=Hr>CWcs&N#PmKNhOVRGRP#0Y;wpYk9-O!q=;f(P(mq9G}A&W zZM4%tCtY;YLoa>wGr%B24D*r^=2>8oC6-xXl{L26p_&?MsiU588favKNv4=)lPz8o zsy4!iBbx^L=x2aIhIz>duNY;KC6*b}&IXrMd)`J5Lo9GjlA7zLhhF;VXMjQOsl)s4 zYLN&ci6WX9Mj2zA2_~6hnqB?wvCjdA9C6GEr<`%l1=qagrnqi#n>z#%ObB-g=ROaJ zAd)Dei6Nc@8fl`L7FubigHF2Wrk4pOnPQq5W|?FDFSz$~{`g3NamTK(O0Zmp5K0&s zWRk@Ki!8Cs3Tg6}P6nA|kxdS{TjRdz{af7T4nZW7!ZV(eN*d`5^O6x>G0GU@Ofbn5)66i- z9P?t>7sEGwE1qx1_gS9L>+?MV4`$?%SQ2>1BcAY-B$COX!x%DcvnZs9VqQ=}DV0=F zO%u(uP{yijLZ@vP-SjyBzbCHG{d%BCy%iJ63rZ-ZjB+Zdq>5^4sHKj28fc`6W?E>a zjdnWdq>FBP2&0!i`Wax5A%D`#`D0e80JW2o&^?(H?IlruJ^RkMmrsJ z(nU8t?6J=QhukHcd%V=vecRxa>$MvZKAU`bff;>9=rfWiqKP4vI2vfAiDp{ZVw)Xy zdF)>12~SBPnG~K;K_yl6(nmiNOtPW>O}5x(hh6sA=YT_wIOc>?&N%0SOJ4JaE3SFV zO|jkLHg^ajm=Hn<;}MBG<_W#@(a#aboN!95c8oC6-y?jB_ry z2Z6?{|kVifR6j4kG zWt3Av9ra8(ewrC}*kzA>F1X~1V6lb}N)*p{P7d{qal{*f)YU^0NuiB)Mj7LR@L6kx zIQu8^m=v<9p_V$@Xs3fs4vBVr0?DLN%2RD6Q9uWsbg|4C=Ui|}=>Mf(lDJO!S>P=p zzvpLxP{O!NIQO{E10skdifCeprBys}w(%tVo}aDV_+MPNK3t&J@qG+1$PmN4{Az!~RUaLH@la#Ox;ahp4Y@_;bz5>5n>L=j6I@jNAoXFMmB zOtQ(LkRpnCK?zkMpWROKJdE`?-8Raz6La($rRJfFv}eCEU>~VYpk=uHaqOH z$39&wvqiLc9#Kvj6;x8iI1@~=$s@I!$OV_&pEHL<5J?o#^wH12oX5^4sHKiW`yX-438$QK&Ks_{<}Ejk z`!;t7BA5_D3F9vJxK9Kz#1cm$k9k5m8Dx@7H$C*yM?V9svc_xPa95tgxko$+JS2r@ z8orCC2iP=ntP zSn+z8IC}rG+><=L>z`O(|IB)1mEC_~J^jphZ~FcE-+cYeSib9V;Fj2KbB7>;2_b?=qKGDjSRV6) zr=*ci2AO1$O);gEkxUM`G}A&SS=MYeJM6N@J_j6fM6-Og&`KNabkIo`-Sqrr_t?L~ z8vkyAa(z`$Nfk|W&`Uo94Dpf?UNONWQ_L{S9P=!(%qnZFv%x02?6J>l-q1rIgA6mu zBDak%hg^<1;go)38eotVwepPTq>@HDC!BJ|ITu{A6>tt_hh6p<)7LoDEU>~B+w5?_ zAx9i@!YOB*b4N@;1QS9iVcaF0d(OKlYW_U}SK7GdEjR5S!!2ToBc22v@`ywp^Mt1) zkxUBDcup#5q?19W7>dO3UEUMd`{MoN*BkZ!UA`-(&-L28K7UB#d*b?9uMg_~TLSB9 zdxK53*k*@a_Solu8Z})@9rZNONP@b4$RiSY%oCoHL^3Hn3;6!+hjSEI{41^p@A{*b zI_hblktXMueeHaLz>wpIdC3T`7-fucCYWT3X=a#Zj(HYXWQk=~SY=I2ky?c5lsxS4D-_eN%TYc`T6@Pa`^=Wg4I?Cp*-Xfi9F^BPsyR41{!Ihm2L(Z zVwjh_Vw5Qs*x-~+&N!!9PT$(zbe}Qc@gPGC^O6x>G0GU@Ofbn5)66i-9P=!&$P&w} zu*w?iY_Q1|+w8E*9{cK`NPd3`-0DWH&JPB`U^b1t~# zHE-1aPm%L)_Sq;eUr}IRz7Ob;w_f__XMjP57$#1B;z{5kk4R*aDW)l0^tpm!UQj|Q zQ%p0%E$b|cY$pDSpZ9&9@dj4KxW+mgY_i2RJM6N@J_j6f^!_^hW^D!@8`~3}l0-5o zJmWd3q>)YrnPiczp7xFJdjy`z$#YUkBb^K~8G6@_Z7XfG(?KU)bkjpGee^THAVUoE zk`Z1p${6Epu*rx%UNOoT<4nBcy=-#GC69axnBX~JZ2Ig7dwixda#7)m{y?c#21QARKp@eal zaPD!R2SgA_6w$;GOC0ee@Q_C&@|Y()C5dEGXrzf|7FlAM6;@dzOq_Q~qJ&bK=wXBu zxy)pcO}4n;k_SFB*Zl$Cz1Wu1K_^{Iu%-QNcGzW)eGWL}h+|GT<&1MKxa2i&2p7ja z?(={MB8eiJ7-ESdo&=H^|DXKdL|kcO(sqhj=9p)h6;@eeoeehGVwXLRIN*?DPB`P7 z*Sz71Yr>2C{|wwGMGVh)PAX}nlR+lA6K{H)+)5A+fc*Q7Vtgz1khXkp+U_!X>`2!+|CWcrZ z@`ywp^Mq$SCzUj^$R?LO@+qK@B8n-YlqzbdrJhDwXr+yIIv8S_8D_cl`_-cDJPRzc z&CWaC+vT;#Z@A)`x7>7YyAkPomhTt1B?q^;!&3?=qL>%dQBMQIykwEL++3DNjyd6! zGtRmGf9%6e-)YrnS^R5j1->noK#9^q={x)Xr+x2Ua`b7yX>*g0q0zB z$!l(jCxm+>aKR<7mwzEgfeia+l0`N-~p{&M;vp)DQ8{2OZ9gHe?VYPfAcJ`#yT5pvc)z>9CN}c zXIyd3Z8^9@5O)bDmN??cBcB2aDWaGcl(3?WT-#}8m}QQ68m*runrWexHrnZ+lP-3w zuU+=o=YT_wR@C?JbPo6)-=4P=bNLkoN{w@YMV44*g;myAXM;_)*k*@a_SoluLypv9 zqxe6@2aYxHM*CM>^Ol?Pev8}OA&6i?2qlcWgmaJkJRpKdqKGDjDRCEx`=>Oh|IeZE zBlG{c_n+7Q7ZkW-T?G+L2%+S-YzWdn_$DDA=8RuMZN!glv7%HfwifU@8 zrH*=2{B_qZ>ZqrIMw)1*g;v^Vr-M$q=%$BW`sioiulsr6PdJx9 z@B2oSd+1LSC~@5`rHpbasHBQ&YN(}-dKze?iDuV}6#f1Pfp+b5&`B5F^w3Km{R}Y3 z5W~D=gjb9*#yAt=DH6}e*#8VQ_!-&=yxow0HC4gQzv14U+uR|DU_z+$eyD92cd1f? zjmG>QfkFE}4!RBu*$y-2m~keUWQu8Km}QQ67FcA7WmZ^ajdeEIWQ%Qf*kzA>X8)$P z{-)1&pH`Qj>$t$d-|+cg48Lp!#q=elX!m;rX8k_c9P=!&$P&w}u*w?iY_Q1|+w8E* z9{U_{$b{c3n`CP1kY(8VYQy(H(Z#W1j;KIpUZTPC4V83od!h8?MxNqj=uu z3(n~W)l14R&T(K`4ZQeUKIc(N8Rb+^Nfp)9P)i;4G%(}XM%yNuX`z)i+UelZ@07mg z4fFP2V38%3Sz(nm*4bc_EwF0rRbz4CtRa8?$Ep^n>KqE~w(?Tn4fBXB- zb&YcLErD2hk0YK09`cAp9`l5!B)xlV%{(QEWKwv>b5cp;%6wk)mYZU_#cl2oL@*(Q z62@J^xyOAT5J4nSL=!_Sam16rLmrXHW1jGoB$7$t8P7>2jdU`|BulOa<>NC8v}?PA zPP*u(hhF;VXMjP580IA-yke9w#+hJ}DW;iWmO18GV38%3Sz(nmM*mws@3P%slP$K{ zVV6DjIpB~Zjyd6!GtRl-lGnW9ifi6-Q%&6BHg^ajn07koq>FBP=%tT-1{h?BVO}!A zD@GY(oCzkGVwxESoVVxA-FFDw^?o?_xX%M3h$M<=V%2FJ@g(q&M1(_e==r_=oqM!v)YXkeI^Z0))4fBzf>V)YqEJP9<5 z^`UKx?IYVn9`l5!B#}%C&q!4-DRT2Y0`1!Bpp!1T>7kcC`g#7YEz(FQgG{o>CWl<| z*kzCWchBV_pK&IbWQtB>?_%8ef5hB7gNXp`o%QBJ_m%$!97wbrGQO>|E?U+N*g=G?i(NF3={VEtYP|D=YY@y_g&kz4|zl)k9opVl1L_nXSCSAl{QA`;1#2cvCR&< z+?Dfi?s1<7L=Z_XdE`?-Aw?9^Loa>wGr%B2v}?DU9(w7cp8*CLVwxFdnPZ*>7FlAM z6;@eeoek&0L38^90u%O~WQslZIpB~Zj)@XyG%>^y#|ug*rHo--GQulHDf=}!w7uYx z*Sz71Yo6|ZZ;XL>`y}v?Mb5cnooeVO``n&GGr}+R8qw*uis#`QbFBvVW? z!z^>mv%n%tEVIHYYpk=uCR=RtmYZU|#lFV}9CE}lC!BJ|IS=jkh(sRqglcN2rH*q>7tt+dg-H|0R|ajni*!9W1a;TSz?D>_SoluLykD+oC_{_&0B67+bwQ$hhRbo z>_vc|jG`)KE(u^)%2(6V0^HN*nET&`B5F^l(g= zIPMb8W1f&kI>o%8hFV%^rH=syDO5{E^wLK^TWphXX#MhtQttn{xgd$OUsrz#*3HKW zT!*_(bMsfO1Gl)%9fAlZgiyk`OE~wqPl9+K*hUb^y5}2gvc)z#?6Su`m%Qc;S6uU! zo5pvG+uR|DU_uBbjJt$$kNZ5}A&*GpSUV>~cpOO-(Zmo-F)t{glmP}AVwjhV@QP7( z*kzA>4mjk9MEQSA8Rb-v;PrCG80VN1PC4V83!d2bDM=)gLNztiQb!;Ctgy-&r#vv% z5j^B6DHKr1<9BWIlq8Z#;Tg|KC5?14$Rvwwa>ymmc`WjG`TX)}0u$PpWQu8Km}QQ6 z7FcA7WmZ^ajdeEkpQ7*2rAS+!C{Qoo4K&h3GcB~zMmqxxGQ==18Q~S9j4{pxlT0zq z4704W!6ubd(McEG^w7&Z3oNq4GDjS9!dt@Bz+GZ_LNXa-l1~MdR8dVo1I#kVmNvH8 zVV6DjIpB~p&bi={*Sz71n~uN5ZSD|6Fd>8z&OIWDBAPhjN#GHQJmwkCNhOPHawwvh z7t~TmJq zdi=1-CZGGJ#f=DW9Wr$%$c*PjwOftnf$DDA*HE+2kt{5JZ zMmmKQv8=xpR#{`64K~?gn;mx9W1o%fKWC9iqI71zAwraprRCWKJJj(k>jUig+k zgKJnLO*GR&D{ZvXK__F3Gr=TNOf$nQbIh~AB1_!W@3QR*tE{ok2AgdC%JsM7`Jv~5 zOl@Y7O%6pA^MVpeDWjYUs;H)hTI#5$fkv8Wrj2$w=%kBodg!H}0bVl71k=ng%Nz?V zvcxhgtg^u-TWqt-9{U_}#2M#YaLH@la9fSsA&6i?2qT<(+~)z2L=jCaaU}4NMb5hA5lPt2yA(uSzDW`%;s;H)hTI#5$fkv8WriIqu@cCHHeUCu5{dzd&gj3Eq z=YmUK^M-iqHGzjbqKay2sHKj28favVbvD>!i*0s@`TLIZ_iDcCWl<|$ftlp ziYVpq4$PmN4v_4ae?|TF)?Ki>`dE4cZ zyK7W|(D;d6rmajdeEI=iuZA^YioE1y1#U#yJ;U@|rhX zam`z9YWEhmxkC`a`YAFGA1RRH*k?Q^l{C`HB#Ufv$R&?_3MizA7nD#+8Rb+^Ne#8s z(M|{5^w3KmLk#nh5neIMI1@}V#R7}0u*w$O>~O*>%d&SM(o;42EGxQ;*LIjN+PP6nA|kxdS{@HD8Dx@0HaX;yM?M77bJ?x_Rt=?g>vxBAFDP@tjoBNGF3#vi`Aat?_@T!4I6LFSuVI zTg>y~_!u{g@k`kMSM&02Zhmqp#`u*4!p%XE{=OyfKutvuNfgn<5KA2KB=C?&)ch0o zf7DS=1C2D%Obe~F{S)V_|H$}$z>P07&!5n4U`*V1E_?*j5P zO}5x(hh6sA=YT_wI9B(Aa`Gwm_5YOxPQ~1%{<`U*mp=L#V2~k(dC3T`7-fv{H`clF zehxRjaW4Iy$AOM3=X1K~riWho=x2aIh8X50BfMgiF~*so?%H{QhHEwQ8EaWvfypcP z{o4FMfhu!RO%1iwQBMPnG|@~8t+dfj2c2}$O%J{F(a!*b3^B}0MtH?2V~jJwBvWd* zQQTiyU`F4w%rVabi!8Cs3ahL!{V!a9m}QQ67FcA7WmZ^ajdeEIWQ%QfDEOIs4T^sD z`Rcex?mj`FO&mFDGM7B^DWH%dig`f^rIb-l1(j4$O%1iwQBMPnG!d-Un{8WYrHv4; zg_2DUx#W>g0fiJ%%nM2=rHpbasH9z6RkqdCynAju9n@M|`*QL_8oz$ceY?g31LAI0 z7cI2XMmrsJ(nU8t^wLK^0}L|6FfSS56{C!CCKuzj6HGGoFWh$+^Vc${ukR747GKS~ z`J#?`8fc`6W?E={_x!Erw9rZ$?R3!j?)ks;oDMq4^?!7Q$?aXjxyOAT5J4nSL=!_S zam16rLmrXHW1jGoB$7$t8P7>2jdU`|B#TCxXr_f$+GwYPPP*u(hhF;VXTz8`*y_b=U_$@|Cpz4;ct7|4gL3u- z1@eqDp8^Ug;)r8TIOU9U>eOXD4a~DZj5>{_j4Dn!|`3MizAVqQ=}DbMMklX(_c?&Nyd9&8)J< z`J0WKX=a#Zj(IBeRZTrzbkjpGee^THAVUnZ#4;y+K(oNSmKB$frmUIMSIV9PAX}nlR+j~WRpWKd1U=o_jjL|w=Zy9 z;L-o^v$aU^e5xYHerb*R_(XwQzr}nz{>Mmh{MRt3pYIWn1IOfbn5)66i-9P=!&8sdKB|7Yg@L-N|%#y}rLL`1B$)^Qx`h;^*Bj05pf(55fKp)5fKp) z5fNXR>-`LJOwIfC^@RfY;w}(R zAw?8ZLMdgGQ$e?Qdw5JQee^THAVUn3`{(R?B>!Cu!N0>|7D{D1r* z5JCizB$7ljsiZN*Qx;g_j`;3B1QN)kgi^{Vr-E@gwre}+q>FB*y8rMw*J@x{{(Jh^ z=YT_wIOc>?&N%0SORl))hFk8q=Yb&o1rtKVg8PwnIr|TRFm3p^pAktE(Zmo-9PuQO zND|4UkV+cqWROV~+2oK*9{H@W${JNvQ$sCvjF`t!#u#UUNv4>l)V!5ZP6bHkh<-5TqTWqt#E_>{Az#&H*bHXWS zoO8h?S6p+$EqC1WK#;M52_cj)!igY~D58lWmN?=`Adw`JNg#D@zgRxWVH9>MteRI z-ycz+O>XUU&`B5F^zfKo`sinXL53J+gi*#AXM#zlm}Z7q=9uTnpZmdl1a^JC$36!f za>Owu>U^R-<&0AA%P6OUN~$>bUA4A`S~l5Yn^1ESMmP~Xb?h@1D4Mj!v@dwcD_--4 zx4h#$ANa^3ODxNy(7gQuftUYP|GecL@A<$-7Fp5%ns%KHHrZv5E%rI!kRy&c;gmDZ zx!{s3Zn@`yplSW-KUZDySY(N1GSnuMI$G&xfGHLUvW^qTCWl<|D5ruR9y7}v+gx!= zj5R;R>|glBb^Ebe2O7oQL^Cb4(ndQSbkapPJv^qDKKdD8kRgT{VU#h(nP8GBrkP=u zIp%r7Q=YNFb6)V0SG?v8Z+XXiKCsIk`y6n{5yyNaTD?!Sr<`%l1(#fL%?-EQanA!m z&I=}l7-GpIj(8G?B#Uew(MCHRO!I^VUh;}1mf7ckLqg1HGS#&3lpS_Cg;df=C!YceDWaGXN-3k@|F+(=6;x71H8s@IKqE~w(?Ta*baUex=+Qo= zmp(=qWsGqqm}G{h%<_!qyygvWdB=M`@R2pv*6!1#1T&di6oOkDrsbrMK(DUQ$i_alv7C+)zneXBO2^$4eke@AyDD?8d`YH zYd*41uxEk@l1Qe3Mw%F5lrhGcV1ehn=K~+PC-g7MksNZ#r+`A5jML08bIkLEr#xeU z53I7oE_rkG}iS>`z9jB_ryS*PbJMMXi{n46yzeYd#{!l%CrNFTK zjyWM${CVUv%?$fYiFKPD*6r0BG}xmXX`-1+uDE8FBPcuXJt3^2$LBTO>O z9P>QkDbIMvdp_`yMV44*g;myAXM;_)pILM zp8^UgqWFLMbu}zh|F0xa{6Biu)!(la*ix5mcGzW)eGWL}h+|GT<&1MKxa5j!Zp70s zo-g$)CWTbeNGF36 z{hxA1srO}+Q$ZzFR8vDOb=32S1{!IinHE}Uqn!>q>7tt+*U!8)@*ROppJy?`C}WH> z!6Z{mlT8jY%reJ3Pk72R7I@AJUh<09ydlrMGoJzqDWaGX-@WGpA6aCHWomt2M?H^d zpphmHIOK?9PB^9QFUg$_I_aXDBaS&CD?vWw&}W=}Qk|PdIvIRqkwV9>QSI14o{;9> z8?CX<2AgcL%?<;JjwQ>#Ny;XNT=K}LfI^BWF~(ctmukycqnrvVsiK-1%Ehs+-C&a~ zw%K8qclz1W?#H`_X1a%dhDGb)OC37rcN932(>WJha>X?_tWu;d#gtG=8S8A2V7?Mb zqJ|;faZZT2YM_xl_Br5?BZkc3Fe8jI#yAs{n7dMLjeo~I4+I%Am=HnT31QJOinG{k*l~g1_Y6Xuf}MKeEOGo8sAGn;mx9W1j;KNml<9 zQb{A73^J*uj(Q$3%m|}A7pl>3AdoAbJn|`^kRpmHp_DSpsi2Z7@i&O) z3j`XRH^w*%Jm&>3IU?S=O(2mZ3MrzP62_Tek}0N{VU`r@I+Zli$sm&~ve`}i(Rc$B z#+_t}X=a#Zj(J}3nm4@VBa1At%nGZlv%w}??6J=Qha9uUHaqNc#SM4d^FXLvA_yar zD58lWmN?SMAd@Vz$sw0K@+tVAJs+5#?+Bde|CBQ>xa68!f}9gfILV}tN-1TOQ$ZzF zR8vDOb=337nDfT`Dc_0ZyK#N->qTSy5%wKEq7smbl^S=2T?vKB~uZ{o5 z&QBD_=lUfv|HL_gYWJ@iYN;bQ$$!5U%g+ex*bDj`-_HPp3^B|Iql__5h<}qEN*Lip z5J?o##1Kp9Uv^z;_w>Eb0f!uM%n7HQF`?f{rkG}iS>~9hMnARGQO_e9Xrzf|T4<$> zN@G`1{g>TOzF;oCp1`^MF1X~1Yi`()*DibPbHE`-9CN}cXPk4v zo}BkN;E*GZIpLHu&bi={E8?A(Kq5&blR_$Kq?17=S!9z#E_virKp{mGQ$i_alv6<^ zRa6sZ+;AeSzwg!KkNSSz{QOFRNO?sOO$@Qb5l;e%B#}%Csicuk2AO1$O%A!_kxv1I z6j4kGrIb-l1vS)CM?H^dppksnK>>vnam@|4+;PtXLH_q7!GsXXb6)V0SG?v8Z+S;e ziZQ86aWDV%HT)`lEQ;ed5V%&y8*Z6as~KjQW1c5GY#q z?V2VU=Sv)#*Y62*sa-ccJf@dElGQ7PRMJQ%gG{n`$tzy-hM2#ihQ!gtBvVXt%;jJC zbZvg3W`TaOT&nGWc90>4x$@bFc9b#3nP8GBrkP=uIp+Tt_vR9KR8lLef{hF09_T31QJOimpsBrCxc9~$R>v-nrWexNv4=) zhFRvAXOk_q*ESWG z^wG}%gA6fjubsEod{1E9cN46z${Ooz5G=kBLdhhHY;wq@ni^`UqnAGVnc_M79CE<} zLDqdJVPyQZAC2k1#TeKZ!vTjJam)#)oN>+tm%QhSYi_vZj(d48%KH-nMdB)^gi^{V zr-DkVXr+yII_RW}ZhH7&tjF3Rh8ba$F~*r-l1DVqNE6MpFu)+w%d}dWsiL_#GOeN+4R!K8tZJZ$rdRY_C3<5 zq>6q9ctO5#DyX8G7FuaziY1m=VVw;QIpT~5g2WU|2%&@#K{PSM5=S2KI_h~u1C2D%OiQ}o^<1yNkwBX<4#=@q zav5NdA-36Jmp#(0mqCUYW`t4380R%_IOK*~%Kp0Jc*-SLv}Rggv}b;CZh?ETJ`g0H zU_uBbjBp}|B#LNah$W7A5=bP8WSalPy42=VKp{mGQ^LnK>q0xs2&0TK&IDy-$a7LV z#WedIaL5tIoRI0bEV8MlhFPDVa>h9q{I4L8E3Z8ADWH%diYcL#GRmpQ@VBaQe@0-!v6D>k zmUkR+$34;NluI5hbkNOXdKqPmd7iPrb6)V06;@eeoeehGVw;!7c*OzNr1&hG9A;=V z4^1@F!UI8n!`h~oj4bPhYv%r@ICw&Nwi?j(w_Hag5^4sHKj2 z9??J}O*GR=8|`$`Ll=GYGr$nTj5EO`Q%p0<98Y+|Ti)@W4}4^iC6+nlh+|GT<&1MK z{<^WAw?zrcvYv36RRJjiJ z*r&s_(8&%RIX_;L@7KutK(ujVh$W7A5=bP8WKu{ajr6}^@65J$ep=wU{9o{rSG?v8 zZ+XXiK9Hf$OtQ!(hg|Z=r+_!Sia|U{~HKwiG7g z0qbnA$rjt}u*)9%9B^vvGtRl-k}Iyc;g&n@c_2tE!GsV>7~w<^Nfgn<5KA2KB#=lF z$)u1<8tGZ?#p?RU@QJw$Jcunwje-dwlrX}HAd)Dei6NFa;z=NpB%bqvm%QRNZ%F=| zzi-|RYWzKcx8iumdp_`yMV3fmnH5%9quL%>LoIdG^N0o-X`-1HT4|%54m#uj*e7TfIbK#-V%2_cj)!igY~D58lWmN?=`Adw`JNg0pX!W|-v-Z+XXiK5)np$K+K{#2`aF=LH`*B{?LY~RKlh&5gu z@g$H)63L{HN*d{8P)rG>lu=FvmDKZy1{!H1lrS>MqKdbi@xT*tKcz;zwahTfCO6!Y z{HJ1}lrp+mV3$2^iOjdwsHBNbwy7~jEzPvhN*lfO(a#9;JmCc&*=CPmv4xOK9{JSL zOCS9Vu)qg)IN+W*vA64^gHF2WriaH2Fvt+Yj4{pxlT0zq471GflxHmPoL9W&4exl* z2Nqdkg;myAXOk^<*yVsjjyUFoQ!csUnj3DpB>!6sX5v&$a)9C6GEr<`%l1(#fL%?-EQ5oG-Y6GA9qgcCs| zQA86%EW`h&|8GyGm?6<;@g$H;4!Pu!PXUEA&`1-_w9rZ$?R4;jr#xeU=e*!0yX^6b zeS%z%!Gw_HeJW|BlR+jWlu|}H6;x71H9b70mp=L#V2~k(8DW$$#+hJ}Dc=(s!(9Zx1Jm&>3c}4i&F$Y8vMKm$Q5=T4B>!8C^)am)#)oN>+tmt1j8xR@h|B#LNah$W7A?j83)n%C)MkVzKVlv6<^Ra8?$ zEp_zpoP7>BQAiQRl<~AM2~T;J?{^Wge1^b{{(_woLMUN` z6F~xrB#}%Csicuk2AO1$O9`cvQBDOl)KbqQ8fc`BW^pc-_}k>C1q%Nkb3!pClu|}H z6;x8sBN}L=iB{TZC(l?N+D^K7OfP*D`L2p;T4`gK0oTSL*#)jUa>*l~0tzYOm=jJp zRCfAbp)$x2%&`WmUq0T?(dre9?|gkKl?iQ!L`({R$s%{sQ0{BeyLxOL!j7Plu$|; zEE8*H-0Hm#0nqn!>q>7tt+VyuN&;)o}KM3P7* zg;df=Cxc9~$R_9S`rYMM)b2~pT{O;*2wcjeg)6SP;g&n@c_2uv!GsV>7~w<^Nfe7L zvCImqtg+4pn{2Vo4!i8h|3_l_qkML#KEHuLt~_tJ<&JwE2(oVk6GAAuj*e z7TfHw%O3kYw%7F1M?V7$GQ=<=f6w3hzfE3W(r+MAtgqz!nm6YBn;gFf{5Asn#uzu= zf%cFijyd6!GtRl-k}IyolqjCBAkb^ajdnWdq>FBP zte<{)e2L#X=LYe8M_^RkW8}Km=8;bUg%nXt38kEK!6jE*bHgon+|%bi-Om7n3^B|I z8O8Q4vbOp1UEDHre8h+P~!;{iUuY1{q?QvVY_mjtVNN;)r8V53I1t7H3@ZK#ZJX|H04J=To)&wciEKu!oZip~1d9>3(Clfqji)}8sBE{M(rkx`$h_MD^>7bJ? zy6GXxTAVS)EQ8E({{Q)HL;HlMyx=9Tc+DH$@{W%zvcxj$Y_r2Id+c+-Ax9i@&Ly|p z5hV6tLI@>{a3YB!nmFP~Adw`JNgFBPcuX&S3^2$L!;CP>7~@PZ z%?z{5G0!s=c+Lx6@`~5IyRaussAVTT;p!A$rjt}u*)9%9B{}H$DDA=8RuMZ$rab!aLXO{JP;(0U_uBbjBp}| zWQu8Km}QQ6p74}sEbyEcyyO+HdBa=Y@tzNSWRWG7Sz)!*-}mPAI|9)@k0F*g;z=Np zB$8QYgH5*BW`|uS)qaX;W|(D;`G4dYA=fj)&-j{aY*B9iz4%7nzlHD2-FN5lYrPKK zn!7vhc_7HO6wDqWWu9+8Gp|C&{RRRjVmjrFb5_K)${Oozu*taVeS!?vc_vxB;VtiY z&j&tIV;`ucj*l#|L~wjBp}|B#LNah$W7A5=bP8WKu{ajdU`|B#Ufv z$R&?_3Mgcs0}eUjm=jJpCWTZEIpUZTPC4V8dh_v!1{!IinHH|gJq!Id>*@#nHW=qe z1fGjAh8Mi#6|Z^2Ti)@W4}4^iC6-xXl{MDcV3RGj*q4$PlZnvCamYY_ZJ_yZ^-V(65aDQ|Ev4w><-VTHuj5 z8fc`6WmX6?SK-w0l2`1IY2F4IVwe#^D;-Zb9dxqK0f!uM%n7HQ(elsK_Mf?*e>%SZ z_I=<`Oh+7Z!YOB*bHOE7Tyw)Mcii(pP=$MkvA!p;=evC(12{cHl)F+DAaa`cr;9{ChdObMlwQBD=r)KE(u z^)%8%GcB~zMhBgA(Zgf<8DfMnCau52a`(C)3UvEE;jJ}663L{HN*d{8lS3|fR8mM0 zC6rM`1*O!}L^Cb)y>%Zbb^U!>VC|_j!Uhv!UUdA|GVkAle@~#}zp5QwbkoCQdg-H| z0Y({PoCzjbP`4@VG&9UG&l8^Vj0K+af>p<_vCaku9CE}lC!BIdoV65B0*NG%ObV%_ zkxmAgWLbCp*4-xr_VwH6*nS2WoJ=ga>*l~0tzXjm=a2BezrcJs@S{I&eVd=)UH$H{&jE)V zam)#)oN>+tqxRD=#+hJ}DW;iWmO180F-9tBq?17=S-jybH~PHgj(Z*ma&9mogc3$L z5kwM2G%>^yM?486l0-5oq>@HD8Dx@0HaX;yM?M786Lr^wLK^0}S$#SG?v8A!3XnjZn&{ zppq&YX`-2yI)AUI&v$)htpY>Fs^<|6G}1&fEws``JHw1H${6EJFv%3t%rMIw^StK? zPkF`y&-uVd7FlAM6;@eeoeehGVw)XyDUJL?U{AZx0f!uM%n7HIs7op3)KE(u^|aAW z2c2}$O%IRhrH_6F7*yYH@;%dif$z?R*MT+tth2!;TWqt#E_>{AK!UZHND|4UkV+cu zbkIo`-SqI7UiLX~{e2?Vz=<(VIpdrQF1g~G8*aJdo(F>T8%zkHgb_{zkwg(q46)?W zM?V7$GQ=fUTysOIYpski#+l%VV@^2bjC0Cdf8|tANfp)9Fv2L$SRhZ|`4mt{5yg~H zN*U!;P)QZl)KE(u^*o}1Mw-+$(Hi)@6&mw<0*B%`;+PXoIpdrQ^3|(=LW(G+gnkAX zWQbu#7-f?!w%K8qJ@z@^kOH+W{MVjue;CtO{j5R%zd~SAtW!)g!z^>m^Mt27V}a+q z;3cnk%^Tjb{eQVnYTxsLk1VppGApcd!6jE*bHgon-19(?+65CrC}D&XK`oI)5lsxS z#1T&di6oIs3aO-#P960;qJc)5Xr_f$+GwYPPP*u(hsX5NM?XarQ$i_24D*zCY_Q1{ z(cj+hh$op8vdJNrJn|`^kRl$@KqE~w(?TnufBJ{On108ZV3H}OnPHYW26)a3Uh<09 zyx{{MdCMY8Y_ZG=tE{nZE%#e%-xGN6yK7>^lS&%Jl+Z>y9dt6!2AkaTK+wN2*K{$$ zGu{#1Aa5FJqL~(2X(Q_2I_BU0XiPtd@kV@i+!JKXV8RI@lrSQQB#HzQNhgC+$|$FT zN~)-)i*9;&OfP-(Gr%B23^T$gV~jJwBu{wCGZuKx3tsYy*Sz5^?|9D^+e|Ud2hKPr zN&S+kppq6^X`_#MmN?{rJoQ}QIWKt0D_+y6&P_DaLSm!-iTHQwMVK`>XUrv*Sz(nm z*16_}Tkc3VUIraxl0_$j3^B}8mRVtsbFR4lH-2xi2EQY)qt9LT*yn&ljyUFoQ$m~{ zN*Lip5J?o##1Kmy@g$IFym{k&Lf}f@DUMAgjVh|Cp`CsPc)~70YMRd*-tvz3e4tf* z+i0hQPP*tOSOC5?148h3e`G#-#9APiLW(G+gi^{Vr-DkVsHTQm>Zs>YgXglp<2mx@1>zl_Kq5&blR_$K zq?17=S!9z#t}zbH?XQ(6#;@r!a{ipU{E}k=kIh{SvBVKi0*NH?j`w`vBa1At%nGZl zvCamYY|(42_R-G(gA6gu2&0TKZasfyEd$&7-C>tK_Br5?BaS)Ylrzq`;F2q@x#5;O z?rETxKKdD8kRgT{VU#h(nP8GBrkP=uIp%r7Q=YNFb6)V0SG?v8Z^@Q_4i8=jX@dzN zlrX}HAd)Dei6NFa;z>}yLhJEY2xRIf>)Sr3MrzP z5=tqfoC+%G`SyM?H^dpphn;X`z)i z+UcN^F1qPa!v;0{BMCef!(;X7rH_6F7-WdyZ>iIWc9b#3nP8GBrkP>3$sQ+{FA$h8 z{;>HRVU#h(nP8GBrkP=uIp+VJ`;c+IhQeRBet*r{|MuL#6ZwP?N*LjC>lf2k5{S}g zG%>`IVV*L{BAXm?X*S0#w9-a99n3YWH&1xVGZuKx3)cUGy_Ze4*k*@a_Wr{cukApU zSgNU^mOAQrL<5a9(M$`iw9!rnopjMnkM;PK>iDbrSu~%&)cohI^T3L^T4jxOHrQl~ zZFbmYk9`g}{P*_n0{izT{L;9;)_LEE?Gpln@)+W!wfKtHyx}eHc+bAIc)%e?1pi0Z z9HE2}P6QuWWQk=~SY?g%Z{N3i&l>A&w0`k^_k+DLQGUNtU`hTD@(lVmHsI@pR3TZpAd*|@eDyCNhFg(Dw*amO`A@}x9`a!n;de~p{&M;vp)DQBE> z!6jE*xBUG2?3dSP3PhTtD58lWmN?=`Adw`JNg?8{QK0pREJph$n#|h8ZEvIO$}t!6sX5 zv%@ZX>~p{&M;voPv6xCIrHpb;eSXHK*IR6}!!CR5bHJhd$M0SDLv#Jd_RZgQPyZby z8tXF!j?Bw3`PNneg%nXt38lQCmzTWaHE-Bti)iaEfh5vMCxc>2D5Z>YDyXE2YWu-w z#`)RD70Ue!1Tw{+MK(F)lE-77bHgonq>4G80t)Hm9q;)-qU$S(WKu{ajWNcVV3Oc= z&ntwsdmjCCyn%k>4lu|N!;CP>7~@PZ$rRJfFv}eCJmD$N{*(K;@jfB2E=CyS6&}+%n7HQan1#oTyf0}x7=~h13}-eA3_KvjBp~TA(E*7>^Z|c|A;`Q@3Y8e zSARL$T=K}LfI^BWri4DFzTfkmbI!~;&mXT`_wBx} z&-?v(e|}t-`~1Kd<4my56S1<$CWoiwl1DxT6jH=9iYehaFL+5QuXs%vZz!jNx4h#$ zl~hqp4Yky{=ggbCzmPz(TBVRm8tG(^$rG~3CWoiwl1DxT6jH=9iYehaFL+5QuXxP> zi6kX`@VCA{1ghy}j(HXc`_Df3o9G|>ed7=QcCpXtV~_CU5B~1&2Y>hXgTLqd!Qb!p z|7j$aI9^i9D`uHvo&}Qrb1`WZzm0bG*yn&lj_Ba2d67#V`4rGWCtYkX$tGJ|5oJv$ zkwGR;$Re8@o{~$i_WS7Pm=jJpS3{PU z_3a<4({G!HzhnOGnt!{Wl;dye!>|1OE4BWK0=>qxkA4OiWQbu#m}Z7q=9p)JMV44* zg&kH|W0yVlIpB~Zjyd6$JA%xcdju0gC}D&XK`e2^lfZo*@Q_D5CXowmT@vYaH$CLL z&lM2#2gD$l5Z2jXlP$K{VV6DjIbgEVoMf6AW|?E21r}Li`wzO;h?hbtX{3`+0fiLt zjABZtp_V%8X`qoNnrWexHrnank}Iyc;g&ms^zo%*DX(}<8E+`3g15Z0J`>EBFQHVs zUsBe0_mpq$Gl3p8=%tT-1{h?BVMZ8bjBzG-X^cyG#cRrVLpc?^T31n%>I!$08pP#?eP*Y$Vac|U`|t=iwQBEMDE7%?wK8DpFYmh1(~ ztgy-&>uj*e7S~nQFSpzgc}H%O3k2aL5tI1lx~72qlbg zB8cRcJA&+0_gH6xO}5x(hh6sQ_Y6M3AVUoQ;ZI%{pR#s-)H(CU|4XXZ{{Az#&H*bHXWSoO8h?SConMhH@%+%RAmvNfp)9P)i;4G|)&B&9u-; z8|`$^Nf+Jp&`Tfvf5>+$pD>^Ho%4kR2IMiw5W|cx${6EJFv%3t%rMIw^DMB)63eWx z${Oozu*nwN?6Auo`y6mcsX2P&c+3f>oN=y3UuAn1_(Fa|T?6~_%Hb(v)<~{np69Ft z`Fsvvs$ajZ-7I;3LtssRy7a4?9(qZu@jO8WnLHtjY`W>8mpg*~7kfF`i!5=j)%tJn8$`$jFk zS(l&nb*a2QQD8)0M#)k8KKdD8kRgT%R__o(2_u(0@~Pl0tsD_!9Ab$ho&*Xh;u*!1 z@SGO*#NOwC60x51f|r!C$P$s-jw1SF42pSAB~?_@MK_}y@>KibS>^nCYouXl{VVxpp!1vSZ9MxwrajJ zX9FXCKFS#5Ofbn5)66i-9P=y?uC@^rP)HHact;!UbkNB#Bh0bHw(EC@^?KKFk9`g} zW|?P!Me@wWI>wn`k|1;Q9>Ii=M?M7{X%dD`<38x?5i?PZY z>uj*e7TfHw%O3k2bHXWSoO8h?S6p+$0k_-{B*g0f!uM%n7HQan1#oTyf0} zx5UULmN?=`;64v{$Ri$;ND|4UkV+cqWRS@dvdAXK9=>l6_#S~i=k+tdAVUl@!aNHs zvcw+y9B{}Hx7;(9A%qe|G!Kd45ji}i$+^dbc^%7R5=kPN6jI5fj5l<1PWT`78EHJ{ z1uto%oes7Lt=B&3WRS@d8krG$mN_=qWQ%Qf*yWrX?zk`R1F|Wmjt)8*VVB2Z7EnkL zwXCtu20`N9=K&Ymyd>Cl;Y1Kg9PuQOMmiZ}@`Nn%DWH%do>9VcUhtA~DtOB~-cv~x z)#UPu*K{$;7~{+_&jPEgvBx1NoN`TwK7|rSB1t5Z!ZV5~p^kbQXrzf6*VofPBTY2Z zLMuJ=(nmi73^K$7lT0zq46`h<#4;;vu*nwN>~p{o$DDD&C0E>XN09vP5ljS;#1cgu zF+>wj0{3~qLmrV%2AMn|i)?auN-lYn@`~4#@rH6Lc*{H9Q%M!of7I_}|CQg#e!4)u z_G(z=hFk7OXk&#J4dxi7yrP9xmWlo2YD7Glyy7)wbkoBk&0@9C z$|m>33MPbyJmN8lB#}%Csnk$Q9ck3lzzCy^G0qm-?66CO+#`wlV}Acp!*2;>IVYPO zo{~!*`4mt{5zi2l1Vgm$_(BvyUn zi03tJw9~-~XPlFuzV~@T7TLU^oL(l`6K9`T?LOfZ&Gd4~71tzbFPRilso*W|7-Wrg zHrQl~TONt=m>k|y$qp%v+TmF26HYnfoC_|w;+h+7xg$s}_XsA0P{N2Ko&@gmfQLNd zF^MFRObV%F5lsx4Jm&>3DW!vMdYERO1y)&OoeefQ;+PW>^!wEDjB_ry?`IEq_^~ED zCb7ZqQ~!hCJ^yWiH0M|Tzvcwh)KE(u{R}Y35W|cx${6EJFv%3t%rMIw^DMB(KG|aB z@RVHg$ftlpil{PPuN}*HLpc?^5^4siU3-8fl`1RyygU-}=k?Z+#!~;{~2+ zqtx|3QeZ$HgA6gu2&0TK&IFT8F~cl#EV9HhTWqt#E_>{M?3=yi69m%Cg>*8=PCgb_{zkwg(q46($q?V3Z*iTz*A5w_Xkj-V#%mTHEWW{pk4 z|2J!%NdLaoGm6<_n;qi*gguu8UQ)^{UNgfi`{EvOUoJ1`=a3_giIzhQ#q`n7CR^N+ zDvvbYFu)*F%(B1+&*b=u*HkghI>B;`7bAf*(#ar`CuEUL4o}G?k9-O!q=;t}Q^Io^ zX`-1HT4|%54m#9}dBtnWDCa$u)KW)1&9u-;8(nnMLoa>w^OOqS@{R@?X`-DDIvHk! zU5+^Bgj3Flx1ZeSF{z}HP6nA|kxdRy$t8~o*G@9SGIPwc$Pz28vd$LU?6A)PdmM7b zH8ibso*Vj)YCvCO$;!|7TfG_PK!W*hFa>Vr-5~%KVDBPaU}47hdd&QWKwuS0fiJ%!gF5ml2YFBo=Tc&p_Mk;>7bJ? zx+&%jRh4_Y}0rhx`ABu@}3X3VP|Ip8*CLVwe#|8DpGX_Solu zLykD+zMLQMkVlm9hH@%+%RAoxiSN|oo3;6r*MTYVrkP=uIp$elktLQ{VU;!3*KsiIMLeUJ5}wmc3$3)Vz%G02b3l;sxknsl;-7OtlJ+kh zuej!hTkZ(***$^@A(Sw}i6D|FqSf@P9N&F?nn0s#nrNnlR@!K%gHF2WriWho=%<(g z1{q?Q5k?tfoCzk`Vw)Xy*<+sr4mskO6HYnfoC_|w;+h+7xg$s|?-5K0p)J0z((i8w z%sDT@XOZMnKp}I?b4jdmct9>MDCHF!v|B$Nbkaqo^;1PPMb^+WiYeid_4JrTl1OGl z{Fsk1h~ot>DdiRI91<*67PZtd%?vSO#u7(73Ebxa4|&965=kPN6wbM5{Z2jpt=fc% zn@Sq#WRS@dvdHE&WxS!B3f}UL_f%3vH8s>yM?D>M(nU8t^wLK^0}L|6Fe8jI#yAs9 zGQ~8DEV0ZAtE{ok2AgcL%@N0(aLO6yTyVuTH{5bZh+2mdMmP~f5=Ar#+~*-lB$Gla zX{3`)4h0laL_CjpOd=U%@`OC{dCNQAQ%M!o)X+sYJ@nE?KLZRh#4sa_GR8O)Oj1k< z&w0sf%6LOL71Yx}BTY2ZLMv^w(?KV*%rVabi!8Cs3ahNKPO3RL<+#Zf+w8E*9{U_{ z$Pve!aLO6yTyV)1*W7T+9YNZ^M=&9T5=J-?L=r``b&zFW_yq*g#7`%KOrDTMHaR>c zmpt+*ppYV-QA`QXdBICcdBtnWctbfAyyYG5sicZ(YN(}-dKze?iDvaFRi7{6$JD%D zE}v20Odlug*ON>!%?z{5G0y^vEd5EpGmHO;0+-sp;+h+7xno&dE3C4{IvZ@V#Wn-( z8G{Tl%m|~5G0p^&Ofk(&n|u53b#MQM(l0b_-_vejPwx91aL5tIoN&q+=Ui~f71!Kw z%N;@bbB|y`2qlbgB8Vi4Xkv&Zj(8Hd&jTLvh{q(7L^3I)l14fiWb%Y8vdQ5ox#W?r zzVqt&L-c?8T=~>F^_}zf#rSo8NUmS<+yry-XApScnd%`=+l?D}rkG}iS>~8;w-<}|Od;x)M z>m`S9>mq_kN_oX=%6LOL6}+X``6WE(1urS(6|X7d4dqnumUq0Tk}9gzbzh%;jDFXB zqCmcU3n-+BXB1Pyb6)V0b1t~#ifeAT<&GeG#4K}v+WqRwjK!z68+a$5_f%3vH8s>y zM?DQR(nK>Yw9-a99dyz~H$C*yM?V7$GQ=<=j55YJ6HIn^HuASse<6WI|>wlm?qWen{$)u1<8tF99$O=s~v&tIlY;e!L={^sb*N+7<{5+E< zWYIz^ZEUhdi1R}UBbx<9>s_3HG61h(~U zhh6sA=YT_wIOc>?&N%0SORl))hFc=kB9bVgi6NFa9&zWKc*it~sicJghL~WDhiaKc zF;$E)%?#TtsB5qq-sd%C3^B(FkN!{B_h_3|E=m2rjDxllNg|mPQpqBl9G;R(9{Chd zNDSGeY0zdPO*GR%Cq4AiM?bTSGR7q1OtHWsE3C5423zc~%RYx3am)#)oN>+-*W7T+ z9YJ!xM=&9T5=J-?L=r_j3Ebxak9bTXNu-iSIvHg0gdCodOCI?YP{=b%c+Lx6Qp#(} zctbgFdB=MysiBrSnrNnlR@&&GlPkxmAg zWRt^Fa>*l~0t$c2v#>quTLQs83n7jqlF6cpXH?M41WUwN%W=e$z(bx;Ksgn>rGZ9z z8E1wKHrZmEi;u6hdC3hS-iMP%K5wX}lPKj@|Y!V$+oxT(8dCbEOAAZ zJ!gYsVtdW8kJl4M1d&7$%L5WgBAFCYNh6&MGRY=~r{q#d5zi>5gy+2AC8fOL9q*~6 zifU@8rH*D=Xr+yII_RUH0R|angi$7#WQti9Sz?)0)>vnkJq|eJgkw%Q9BTY2ZLMv^w(?KU)bTi5r<4my6BvVW?!z^>mv%n$;9CE}m zE3C4{IvZ@V#Wp+K5hUMx1oMu`;j!6jE* zb3=@CV~Hc41n%>Ihdkmji6oIs3aO-#P6nAg=LIh*iTn_F&JDNR5%eE@2;3u>5JCwf zoCqR`BAOUti6fo_?(=|$JmN8lB#}%CPsC1jEOmUvYsz>-ITgI+9q*~6ifU@8rH*Fv3G|OMFN>TA&X{OXr+zzUccM@KEK<2SKwBhH0`C6K_*Wq z;u*!1@P=wy>7bth2AN=*Ip*0ROx$SVi03|uB#}%CsgyaliDp^|_OlY6GsQIRe^yL7 z>7tvlK4ZxQlT0zq46`Kni$N-Bq?17=Psk!@!2A)jfkxVBr;{$a>7|E0h8SjqQN|c& zk|}0cWQk=~SY?fMHrZmEUG~`LfJ2Tr;gmDZx!{r;Zn+~!P3{p+1d+t>kViZwn;f2! zOCI?YP)HHaNF$vLUQ)^{UQ@;!%BkQj?|4roRa8?$Ep^n>KqF1&-M+Q)Jp#qf>!6b^ zy6K^pKKdD8kRgT{VU#h(nP5_^1oQg`3cPUb472o@SH1MHU=A&kW1c)Empt+*ppeJr zPa;VqlR_$Kq?17=PskeZ{F&?d^IN{BHs4pb&+%EHUq8c%Ad)Dei6NFa;z{5>4|vEU z9+UWIeP5&IKS5wejd$7OnVRl99&pGJ$DDA=8RuMZ$rab!aLXM*f6m$b~@;!OZ*==Uw_c~ zrN-tr`3Yn9Q^x(<*9Ml<@)3_oWSJFKS!10IHYqYswj8(nd|&kmef-kr^vmHh3B;He zvBVKi0{3~qLmu&%M3P7*g;df=Cxc9~?K$;w`zhvK{}Tkd<rvA380CjFmpY<|)h@5|#;{DfNnlyUmzwSnb9>&>`q zu*nwN?6Auo`y6n{5yzZx%2~hrg0cDNQ~Lac&j}R%1^c{QzMw#n7ztv0s(R;s0fBp- zHG&BtlrX}HAd)Dei6NFa;z{5>jmEx-W?E>ajdnWdq>FBP=%tT-1_uAlxM%6#FJWHX zFC-9WjQ6$weM)`)BLuqtqI%LxAN>q4$PmMfFv=L?O#DUr`+sd7eUte0zp$_5^9uCWctz{*vGE_32aetNjlUxUc;OJme9N zNhFD6Qb;9@bTY`4&%S(qCGq!vL0R(pDZcvU=FY#GvkBt=8i9ym-*1>h3oNq4GApdI z#yT5pvc)z#?6Su`2OM(5F(;gI#`%!n6XozrDHZz{78w1@YGaOnm1iIM!s_++$4HRZ z=g|KPj`g=<2YN<+<31M{`YY~5j4;X=<4iEg6w}Nw%N+A8u*ee2tgy-&=YQ3n&E;SH zo_$T7_J5>OWA&-N`oi<=6WR|1kGeMzI_jD7N6fQ&*L)^{-Vx6u^fSO9Lku&*C}WH> z!6Z{mGs7%%%(K8EODwa(Dr>B>!6sX5v%@ZX>~p{&M;vp)DQBE>!6jE*bHgon1es^| z2quJ3!U!jVNTP^lSlzSK@OOzo&XjwCe0~n4;`|7Kdt+)#2%&@#P6Uxe5lsxSW9s|g zsPA_L!p!?{B8Vi4Xkv&Zj(8Hd&jTLvh{q(7L^3I)l14fiWb%Y8vdQ5ox#W>g0fiLt zjABZ7&I?{r$}3(|#v971;4SZXPbF36)4sZXihAdLOQ227+UcN^F1qQVmp=L#V2~kl z$MuJN3MizAXB1Pyb6)V0mA`H+{`H@4p7sBl`8@CEzktB7n)SE`_0mT_0}L|6Fe8jI z#yAs9GQ~7A%reJ33oNq4GApdI#yT5pvc)z#?6Su`2OM(5F(;h5M}B49d_jRTF%rc1 z3<6hjzUGEo?il}TYR4o~Of$nQbIh~AB134vdS9kY_Q1|+w8E* z9{U_{$Pve!aLO6yTrg%n_sjj)$@19`6nJefFXIj6RPdH}yr+^Xs;QxtI_hblktT*G zKF=I2)rWs=-|HVBaP>E=7lOIrshZt7-VrqEnT}vW2qlbgB8Vi4M}O0P<2cC_)66i- zW1l6GL^3I)l1BR9^!=KAKcm2oy6!TmA5%;-!z^>mv*+^#$HnpQpBw#h`_ksc_?AG= zg!?3Y^fSO9Lo6AWWmZ_FPmTK-V31gKjU%2$R#;_?$SLDRITbW{?%n@k^W|TkA6Syh ztUAsy|FNDdvc$6IoP>P$x8E$V=KOUw*kp@sLi8<^Fv5u-k|?5yA(lAeNg!JPV?Ne^ zIO3USfkmFEK^EC`vt#~!CCA?_vgGmu1-gwx!pHvo4SR{}f1<#M_C^_FoCzkGVwxFd znPZ*>7FkpObvD>!i*0t;Wk`<0j4;X=<0Ke|`#j*G@ksd1bLLad3G9g(#69*o;E*GZ zIpLHu&bi=H4S!($Kl}MVar}Pj`2VZx>y5#e)-T4FG_UD`JFnRan6NxwJ*-E5ZLwk6)~=fC5|ML$>%w*sG^!0YU!qjIp*18p92m#;(>ZR zrIs$b8RLXhHAX?_+D_2!5A}^)zM0n#c^#+|zn%sfX`-1HT4|%59(w7cp8*CL zVw_<{m|&7ArkP=uc@|h?iDmMB--p18<0@;cv%w}?Y_r2IdmM7g8MoXKWUk%&INt~% zlrX}{8}`*pW$bLYJI6Owm-2Sfh+A?bHgon1gZc2jNh&F?Kk*W&uOn+^ZcJ% zC&%XR2jl(!StB7I0@wcgg`(f{A<*#Hf9sI*AyCcy@BI+S{2xCA4*uN_fyu-Vf!Tlm z>%jVd_;q0B_k0~F`A@zMBtG~$F!!H+9Y{(4IuMijb)fFQaQyvW2a>8j`1{{q``gi9 z2Rb`l^IKp0_v^n7)QVk4Jqtxr zSQGSj?Og;DLMUN`6G0?VMDujcS|yKs-u=B#nj^ny4t?kIuL|7bKG6@TUm#1rThyeL z?7!ogO8tMLK#n$_l1m=>6i`SJ&nTvZ=e*!0rM%)bWxS!B3f@v^Y~IQ7Q|s_!&r49} zPZW48pDgEp0f9t)PSocll1U-e{$4NMXB2oZP9;@TQ$sCv)YCvCO*GR&D{ZvXK_^{w z(?c(P^fSO9Lku&*C}WH>!6Z`@>EknsDd9OUcu6U*cug5^D5rwAyyHEUR8dV0wbW5h z1C2B>Enc(ZyyF6=UY~K!1(#fL%?+8>_Y< zBTeKlxQA;y<74|gA&YEscuFpLb~@;!z`0$HgK`{Vm=Q)9W1I=r zKj!J&R@!K%gHF2WriWho=x2aIh8U*%?|Ke1CqK7-ZT=YbpLc!ys7tuvbGwCB+GwYPXZG)6O4wkNEw!6Z{mGs7%%%(KHTd+c+-Ax9i@!YOB*bHOE7Toa?F zH;%X55#;?nf(cRU1hxJN0#CJ*OCI?YP)HHaD5iwxyx=9Jl<|ggDtOB~-cv&@b=1>9 zBb7AKObe~F(M}iL^w3Km{R}X~Fe8jI&IFT8ar5>=VA^qpS>~8$fhCq%VS^oZ*<+sr zPB`U^8*aI0eFqalC}BhpNfgn<5X++TS6O3|EsnV0k}Iw$bnbIrQceZcG}A&WZM4%x zH$C(+!4k`?u*wd*BygVxJS2`sJSLGOl1U+zG}6iB30Y*5!&7p}BcB3_ct$ZLyxS>^Z0R|ajm=Q)9W0EPRnPHYW=2>HbMb_Eim{Yd7XYajF3D0@K zOG-K9h-2E^KicV_lP0(d(eL}S#MmUi?;31EA zOd?4nyGLYMx1UMiOzd+mx#ET(ae|2;hFIc=CxLV_$m9uGWRt^Fa>*l~0tzYO8O8L` z&%h`2rBq+Ppg@m2ddW17Psk#h9GPMiEU6vBVKi0{3~q zLmu&%L9vGzW`t437-xb>rkG}iS>~8$fkl>BW`$MOSZ9Mxw%BHeU2^5VOWr^5UCocL zZ=gpT8QQ4V#*Y-p*G2(_6!DB=N_fr-UQ)^{UQ@;!%BkQj?|4roRa8?$Ep^n>KqF1; zvHt^d@7KpKAaEd$LykD+gj3Eq=YmVFxaNji?g%pH?h#A~p@b1m1d&7$O$@Qb5l;g5 zmwi9;tNRrg_=kQ+^x2m-FUBt@kYWv{l14fiWb%Y8vdQ5ox#W>g0fiLtjABZ7&I?|0 zs)k?vcb>(+;aAi%FzDPNh8ba$F~*r-k}0N{VU{`OSzwVRmRVtyHP+c+le`sqljwC4 z$!xLB4!i8J&jE)Vam)!-uC1nqTI#4L=pUJb1QS9iVT2PwBvG`}@sGY+k8jrIH@!|! z$Db(BqA#tq(M|{1`jNvL>um5szAq`|6|X7dmOFx0eNHK(?DOCsn?q#K$0iYL_9=Q< zrCYondg-H|r{d+Z$rjtZ5u=<6-f~a-!Mx%%V~jJw0f&T(*TE!9?2#pA1!2GK^WXN& z|I=&uy=`P^|9b=q^sSI0o>5E*&w0U1N_oX=%6LOL6};sg@7bYp#XU^SPxU>yeP7-` z<+DJv@rxmrIO0j*J`Z@vBObG=Pl=96B$Glfsicuk2AMn|i)?auN-lZiQ$Qg_Jfqn9 z`!#h6yz}{cDygEH8fvMdo(39eqL~)%)P=`4mt{5zi>5gcrP|lvli_j5m~1!CT%@O%1iw z(MS``w9-a9-Sp7QFe8jJ!4%WXFv}eCEU?HjE3C4{IvZ@U!!Cy$am*PPTyjIOwGl!n zVTAL5hdkmji6oIs3aO-#P6nAgvA*_=|Mv(~Ij@=;YN?~11{!IinHE}Uqn!>q>7tt+ zvA!zuZ1-;qy!Tlp!;G-a4sq_k@g#7cmz45~Mw%F5lrhGcV3*i+*U(AOKQXrm<^j3n zkxv1GVhyp*2AgaVshudIiTT(j&nTvZ=e(enI_hblp8*CLVwgpiSZ13Yjydss@vVA% z-}}I>y!P1VfJ2Tr=7dwuIOl>(uDIrgTkZ%F`yRopc^~RnND;kk5v_JHWb%Yuo>R^{ zqSY>jaVA*bP(ND#sX4&QP26!4ld-cU{jZ+XXiDv6+mKIU2Ah+C5MGmC6;$fJ;aih03HN_kBM zZ#f}WO`cFsvbwZ+tmt1kp9YONGM=+s;5l#e=L=i_k2|VB-kEo=ITI#5$fkv8WUiU0*?SBS= z745CE#yT5pvc)z#?6Su`2OM(5F(JkzlrX}HAd)B^@`%SIl0-5oq>@HD8D#zw-!1CX z4-hyP|AI@dxaNji?ugTFJPF(HC`4m&=+$Nf7 zp_OT7IO3jjf_cD0LMWkuMw*yla>KKUzW-1^q*iV6X{Uouy6C2dUi#=~fI)^BW`t2@ znPZ*>7FlAMF;-Y*jdeEIWQ%Qf*kzA>jyd6!GtRl-k}Iyc;nut;RhwU>{(tfu|8E2i zoj?8N!`i%`{T#lPQ{a)Yd`u!qq>@HD8Dx=74o}IYfI^CR#&cfql2TsrnsO?5%RAmv z#v3ZBqM90NsiU4Y+UcN^F1qQVmp=L#V2~k(8DW$$#?8-qWAH73W}i(l%?z{5G0y^v zEV0ZAtE_2jUR$5TxAOURen0empwm61i*9=8rH_6F7-WcHM*it{)@n{r{V^B)DRX?o z6FFs(O%6}VC66f2C(*!i*0t;WsiLhIOK?9PB=9O_RZyANFYYtV~Hc41n%>I zhdkmji6oIs3aO-#P6nAgA&YEscuFpLY^+;Gbs-Sp5)AN>q4$PmL+**~hOp_V%8X`qoNnrWexHrnZ+llS(NN~)-) zhRkjApCF&#BbX3E38RZ{dg!H(eg+t1h+#$;WsGqqm}H7+W|(D;c@|h?iRG=&GbcWE zPL&$#PY|e-SG{w;fWV4=ud>EE8*H-0HaqOH$36!fa>OwwoN~rF7hH11H8^yM?4A4v%n%tEVIHYFO7dGuXs%vZzyM;1r}LinHA!H$MfU& z*XL*Z{Htf49e#v;`F~5GK|LPn-(wOL|7w{Wb%YE z-cU{jZ>^snlk;b|Ca|WD>on0!3$3)#P6wTI(M=D%^pUI%{f+|+GQ=<=j55YJ6HGG2 zG&9VS;`&t5*zkUnEwXO%V9*N-w=p&Z4}YO5KA0oyrG;5-tvz3R8mDXHT2R)KLZRh z#0smdvCjeLTyRO4HJIRdpITmef57X1p|9){vZv0JQ9&b3bkolgn_O}4U+N2SB$7rt z8RYSb*Oc*w@_+fAdVI4spXGIydjAH25q%$JjBzHIWQu8Km}QQ6*4bc_EwyM?DQR(nK>Yw9-a99ro^0wf%tteXi~2kRy&c;gtL4+XEi*h%(+#P6cC( zGr=TNOmn~?M;sGsE{5@dhh&jU5rg6kG0X^~j4{pxXPk4vC0AT?!!36NiE)o$9+OBC z$)u1<8tG*4o=U3z#V6M+5aRq$!U!jVNTP@)hFIc=Cqdiw#^VPFG`X&s7Fubeoenzb zqMIIi>7$AjkhBW6S?XqvYTF z5I73+H%R}34}q8dpBjBJ9|BqNUNgox@&B>EElLl)^wG}^FA_ckMj4}8+!|`BqyGPA z?rvZ)Z`;PeKe5(YRjXE2RjsP3>U65Js;btiiij1lVy(5-T2(6|YDL7(T9Ju}h)gCE z5fKp)5fKp)nTSj#uE|71L_|bHWMWlSRaI40tylLq&35;B@Av+g`|Ek$JNe}r*Z=%D zj^jN4AFjC>UeU)Y@A<$QANj;O8*FmP71!Kw%N_ST5Md8R5=AsIq>{!nwzb(|mp%45 z;E*F8c_K*LU_yu`j(8GCB#CTt$fcTkn(3gEE?zUj1ZzAeofl+~Nf!AOP)IQ)lu||o zRn$;R9YZYgfgR#puQOQS1AE+)dMtN_8KFtrS1eHH_&B$uIQE9OoYC`tsVl7~-Y4Q8 zsUOctr;{!&xTNaTeq)w7692Ip(aS6P_{5TVmwCqutGs7}O}5x(pCdkV%n7HQan1#o zTyf0}4?OZjh@8TSAd(nj`RLdub~)gddx9JbC5$LiNuz*5isL@jmn(a!*b%rZxiwM!wD zGWyLmz#wlKW`t437-E7+rkG}iS>~8$iDllg!Yc3i$S2m>V3RGj*M39_=2_cp^;z=NpB$CM_i)?bpC69axD5Qu=(s@BKC6rP|Iqh`NNf+yEu*nwZ zTyV)1*MzBYIL}F-l@2=TqL){UGeMO;)znZ+9rZNONE6Mp&`KLG>86KXUeQNC0}L|6 z>tmlcxW{~tz^Ha>eB=`$VhSajLhir3+9!)FvC9RK&heLY(?c&;R6Eyem}h}SmRKg) z`JO^5X*~PKKOEn#nD*G`fJ2V>%rPgNa>Ffm-1ERAPXx&!m`I|CCWctzh$op8Qc2?( z>AWC=OtQ!&k9-O!ri4<;sGyQ6%BiM?dKze?iDp`8qn(#@GsJ7&@Rngl7-fuk7FcA7 zW!|yED)0Hg8Xx(@IvZ@V#WtTgW|AqUnPG=r_SoluLymahktdSufn z3^T$qH{5d11CN{->y$Ijx!{s3uDRisU~NMPC5&()h$M<=Vu&S!6jE*^V&S)Ofbn5(|lltS>~8$fi*tziFNkaV3RGj z*yH$8GG~N|ITM7-!5=!>@&{Q;y2p-9t2*Bvzs1zc|{-n3^2$LuX)2;h8ba$F~*r-k}0O; zohP4fO8oXZd{=$GydQY(-k8n{GRP#0Y;wqDh}XQ~EyIj3${5@1xW9fgo}cn{og99m zK%O}ADWH%d#+l%V^fP;gPh8RePh59cWQ~tJ5PR<2CzTdvnPZ+KK6A_oS^re6$f4gH z0}QgkCR-$!E0HGNvdlYHSml&6&IvVtBE>Y*LMsD|u*y0cY_i2Zm#mvB-WZJ>b3%ys z8);&g6+Usw1(9+{B!@a;<*l~a$eELAVa+74O2`r!xr1@u*)9%9B^%(P_Idp(Zwcl&dYcb=%JTaoN`8q^RtvP z%9&%H5a(zpVT4maAw?8Z!fW2JMVz_fNg$19JSUwOWROV~*%VMn5yg~HN(GfvQB4iC z)YCvCO*GR=8|`$^$xFKFp_hIJ7-ob~#u#UUNfuaSiDllg!Yc3iz#1R<#5xh9q zTyn)VH{5c^Jr6wcM3A}%6GA9qgcCs|QA88-Pd!W8*Iyx!sC^R2q>xG)&v;HcFUTO1 zKKdD8kRe|4hPMoJ&IOlTam|gG@+v(~{9%Dy$MVRhfI>zXWsGqqnBS>^nCPo-#jCcRsntPpK zl3{aYLoRt#Q$q}; zlu=Fvl~gg#4!i8J&n=xG)&q*hPOtQ!(hdlBrq=;h5si2Z7s;QxtR@!K%gHF15NjE+8 z@`^tC8DNkhUSIlLQ9XZxK%M??87A0zhY(5_;ViJo63f(H*$>pyKqE~={|j{^mN*VM z;xosbaQZJiPyP3vr~ZF|H|Blhi6G<8GRHg>#;v4^YHEluP9#z6u*)9%9Psv9E{rhB z7}@{Qx{ynhzw?VGhFGS|JIxHU%n@PkNTP@)hFIc=CxJwgNG63;(s;&m(s@A!nPibo z4!Pv9^3Q+ry8V&0UbFr`L10xJ@A<$QANj;O8*H-0HaqOH$36!fa>QqjIU%1@&N%0S zORnVm8*Bet0)^f$qL>m&DWjYUDygEH8fvNInj3DpUU**Zr&hoM)|mu0&(}zSW80Yvp}?&Ve&~sDetWsOFpt zF1g~G8*aJdo(F2|yjW7SD=cOM}t6!*XAl3Y7Y=3)AzSJl%@Av|XEV0ZxR#@ddA6VlfpIE>4 z{4Sp#V^aG+CIb6%IN*>YK6A_or<`%l1(#gOcTN1iC6H%b^C_T^B8rJ~?~5maM3P7* zg+2B;;E>XP<(f=6BkU4<>sf&mn&_m5YjNCg%N_ST@W>NE<_;!=P{If&f=Hr>CWctz zh$n$Wl1L_nRML3HbJBT12ARAf%bxyCm3z+b$np2@w?L|TrtysDr1OG~FL8U#B#Ufv z$R&?_3MizAVoE5bjB+aIG|rLN&m42YDQBE>!6g;eu#zgOsiBrp#u#UUNv4=)k9`g} z7@s zGo1bF-|bp|&z=g@$+4aW8fl`L7Fubeoenzb;w9bm5J@ku=%b$j1{vZtZ+OcvBaAY} zI1@}V#WXX_GRHg%EV9Hh?^t1#_k3WDk9=aC4K{E5eV23T_av|-hHZ8zv}cMari8Z) z6J&oR+Yc!evBpOZ3AuAkp^ppd{*84a>0TdFm?!Dq`kFz8IN|i)es%7F25~gfL^Cb4 z(ndQSbkfC3y6K^pSM<@(0D}zinm5cc$2XFR8v5=tqfoC+%Gqn{~i^sA?VMp|j3oesKqNjJT`qK|$C z8R9i>8DW$$#+kVFyru5nBk)GM4Q@#lPbXcxq?;akdBr53SZ9MHLhbQO8tm~#n%H2$ z9$);j-|g#EUUSAd7t}x4Uk^VR-g0fkgkLoIdG(?BClG}A&WZM4(DAVa+74YRyum=Q)9W1I=*m}h}S zmRRN;E3ERK4{Wo;E_>{Az&V?2@tI>zI3>)Q#gjn}x#W>g0oBw{OC9wz&`8sr&lS}5 zD+Dggb;%Xi+;Gbs_dM{(6G6rfCW1(!h$eY#*nPN*aR<@tQZh<%rK5b3&y(Uqv-Flo+R!GRmo-k}6tgrHytv z=%kC6bkjpGuhe`^&3~+KtWn^~Sl8Te%N_ST@W>O*@(3cB5JCwfoCqR`BAOUti6fo_ z5^16J-~6rkG}iS>~8$fkl>B<{c}n@}3W@@sT##>7bJ? zUeZkuy}Y82eg@cNi*0t;WsiLhI8?Xa{13jT_+f!h+OKoU8RuMZ$rab!aLXO{Jn+a9 zLH1}cA%qe}I1xk=MKm$Q5=T4~&)m**ul`r{%`EWfhAuKf4d=YT_U)FPKW@+qK@Nv4=)hFRvA=aDCZ+=qinr0wLlEC5&()h$M<=Vu&SEb2b z^w7&I`gqGQBaAY}I1@}V#WXX_GRHFSsPJ=IUA&~59(s92AN>q4$Pll2!&`H6eOI#DFW>G{FLo9J5kxUAyq>)1|dE`?-Aw?8Z zLMdg=?=}16w*(f~hQrSAV2f>b*kzA>4mjk9&m42Y8RuMZ$t@4u@yHeTJP{<$;4iTf zMg-4Er-F74IOBp#uDRisJMMWRNN!O?6GJS?q>xG)FUTO1EaLThMmg!e?qP~K7Fc1G zN1muuvnr~oVTWBRpS({sHPli^J*S*;PS?M)u5{D$@BZk1=oUv0y$tc1H@sz-5k?tf zhFRvAXMsiD^MN%s*<+t`9(W{NE)hhMKq5&zCz~8{$s?ZvDrusPZUz`-f=T9CW{r=m zv&k0Q?6Auor=0PYVMZ8ZoM~p5WsxP`@tzOtbHE`-1gU>8A%qe}I1xk=MKm$Q5=T4< zoa=wVC0AT?!!38*^FWHWsig6Y=cMz33^K_gn;de)t;-rUSLeWas7^67k>`|6Xu^J-np4TBGY6!KeNdpmpslm=YmVFxaNji zKKQxgH9qo*bvD?f@;~x($W&9qITy^DJIQ>>q%gxQ`Nk`tkRpmHp_DuBdEk*Jg3PhQ zE_>{Az#&J}nyZd_8fc{HKl+1jt$CvL`(61Fdu2OMT)(t$%d^frzbikGPoT`&mQz6` zRa8?$Ep^n>KqE~w(?Tn4w9`SS`^}`>e%p`9vsd3=SfE#2IrirRk311%Z}!p80D~k1 z`}us5NM?lu&u@uzk{aUY{i$b+aV7}zI{<>6d2!b^U#r{KkIxrN2Hl{`Xn?-RB+%wx2=>{c`>L_V@zL zjCWl<|$ftlpiYTUpQpzZ&LS26IKe~_q4kVi6M+jVs?}}?~ z=vTu51{vZtZ+OcSRjv)y)KJSbGu&~{1CK&F}LQtCWl<|$ftlpiYTUpQpzY-|H%gT%O5XLssGO3@I1yI`y6n{5uZ8c zgj3G`hTn;9o^R^?#`@11caC`$SY(N1w%BHeT_UYn6w$;`ObMSkrqJFlqL@#tv%w}M z_IfEB#@S?_0}eUjGsm28${FWeaLEc*`&&jB>&$XPk4v zC0AT?!!38*^S~od;yM=BZ~KZEzb21=-)7C&KgVxs+!KDL-_Gr4{5h~?k9K)}OBBzK z5a`pdp8@W;=YdC_2(ssc>86KXUeQNCVSblXI1%*niaz=o;4{aZaLO4KVXmuGg}JZ( zi2CJe`%C+QS_P`*SVJv!)YCvCO*GR&D{ZvXK_^|j40X>E_jma*`P3Qb7ZxZJV>uO6 zQpEv>9PycBPN=qaHPli^Jq^6DmKkJ{#SF8Yan1#oT#@)E%ta+tf8q~*PCkK1b4L+P z46(!!PXdGgsq31WeUHG7ymr~6LZ3=Lu*Ng-J|~?MPDv1VIbFP@n_0HF;l%G%J0R4nKHpQD z@2lG%Iksk=pX)dOlk4d(>^pJ~WLwJ|a>*l~0tzXjm=a1UqntVBSzwVRuDKz}+9#7j zDrr>P-#;RsK#g%~siU3-8fl`L7Fubeoenxla~(}ow{H=sc6^yz-ic|2J@z@{oCy0h zk|?5yp^9p1sHKj27FlAMcdW2Vs68G=4Ykx!|0lmQu5XL=JKxKb+bt@W>NE z@((72P{If&f=Hr>CWctzi2rik64Or!5)8lwAuNYyJ4GJAA zVuW*Y?1xF1X~1 zYi_vZj(Z+>!i*0t;WsiLhIOK@W9EbbfqZ!uP)HHQlu$|;+<*bnp}RP|F0zQ zPMj;O@}3W@@sUrglj2-VC5>nFvcV=>Y_mgw^Rtj@Y8YgQMS`8HFIgq?PdRtV{!{Lc ze>Atib7Q6Rf($arBAXm?$s?Zv3MrzP5=tqfoC+$bqM90NsiQvPTh}Mh=2$x&bkfC3 zy6NEqYkcGr>x9WMoCqR`BAOU-$s?auUeQNC4f?*KkA4OiWQfqRnJn}@4oPs^q=2_Pt zAyA}WF(s5zMmZH!QcE56G|)&B&9u-)I~{b=#Y?*B;WcjG0y@^Ec1>PR#{`64R+aM zp92m#;xosba>h9qTyf1dVd97(nM?}VVw)Xy>2Q8_(#1=9Bc*3zGcB~zMmrtU$)TPG8fl`L7T(Hfm=Q)9W1I;lnPQq5X6Z0@ zCtdV2z#v1s<_&KdW`t437-xb>rkG}iS>~8$fkl>B<{c~SvCjdo=;J*fSmPs~SZ9OH zNYA&<-(NxC(D+Au=9m*sIpdrQF1g~G8*aJdo(CRzBFMT06GA9qgcCs|QA86%EOEq> zKq5&blR_$KJmWd(ydc9ps#h(3A%PrY#@kZ~By!0W*W7T+9rrxgUynQyWbXtMLMUNW z{AuSJRa7$(V}CHkG&9U{{%6#c%Rlq2>l#QhS28K2lEyQhlgyl*d0xUIC&P6wS#8gq(iW|(D;c@|h? ziDlmL@z47H;|KP`uY5cZALDxvG5ih$64b8rPrC=0@7I#|yV&gf>h!ha zPRile)cXt6=$9H}O)S5*$sev~V8yjz)%D~(A6VlfpIB#uO}5x(hh6sA=YT_w_{=dU zoN~oAH{5c^Jr6vR?3$QDDrr39IqAG0gG{o>{_+~b>K2mp%4La-T_*=ePN}`Tqj_1I1!4p_DSpsi2Z7 z3hbLa@qdNDs(jz`fi({FKjetd9CN}cXPk4vC2RKRM?SI62AgbAAMe?MMw)2mhFgmN zy!a{QlR4MfV3RGbjD5`wx7=~hwsCjZWsiLhIHbk6t+dfj2c6t;&jXK?nX{YT31QJOinG{k<`}%$GHGAbJx2aRh zuM~JD?&lownPW~k<&1MKxa5j!Zn))+dmeb?iJ*Aj)0zJ(1v2%?BAXm?$s?Z-`zMqz z!igY~D54o>f=Q;BW`;0(Eu07%zP$SP+C~{;oG|}JTR0K_g=f95uhp;GwpScK#rM=X z5UdtY1gSwVA%s#%71h*GOC9yR;Vr|AFv=L?Y_r2Id+a-(e@e_hrq7zX{Eh`8yl*dNE&Z}TT=<{`?*C?WiA(nU& zNF)>SYu@mdVMZ9`mOJh#@ozGgQbsuy zR8mDXug$l~7NN$EBZ(C1sHcHOmRRN;E3ERK53KQ#Ppq>+lKGQKA(b?q@tkyCaBbcj zZVA&ToadzTf($arBAXoYDWH%diYcL#GRmo-GQs!r|BGkJpCM7-pCK?Ij!CA7ly4N# z#C*w}8w#vLAw?8($|PsR`~~k5OED$1)4?or%>MajdnWdWRayrB@hwmMu&iLOWFeIld zPQ;UMtqLe)l0~-J;ey&E_ZSWc{flxZoCxY^ppo}{V2zJ_Vx0}5lkFK|iA#3B|Ni)X z^6_5d{*oq*_cH|6)b}HwSZ9Mxw%BHeUG~`LfJ2V>%o9P@AeazB2_u{cB8g&3yJ=>a zWsY+$xa5jB?cyn=jB+Zdq?0cCc*7Xugjw@U-f>QmwJc_w2_~6h+4%2RVU_oM;D%f7 zxaWaK5{#Wl63L{HN*YyEQ$sCv)YHIAy6K^p0bX-$%zm#&DcYrp|8J{7w%GIBxBi}d zN&Iirx=hUftytNr)280_?C+~fgIZJi58Sty_+Om|E$04*=KSB}@xS}}|KR_0PwqC4 z*VUds_;>&Be}QOoKjS&+ydZ;2vdAWfT=Hn7iDp`8rHxk%GQ=<=Of$m*OKcHuE!r4h zmbcy;Wr8Wfy|>8)CDx~u85*5`O*E79m&C&$L%ik#_hhPL7NyiO#sZ5hvCR&-2S6p+$EqC1Wz#~rt$t#!;LWv-fD58lWmN*hfB#C5F zNF|MDJSUwOWROh`xs;MeJ_Qs~L@_0lQBDPwR8dV0b=1>9BTY2ZLM!cb&`B3B>86KX zUeQN?lIK#_p|2E}*JpucKCs3|KC#XQhaB;lV@^2b%v`^z_iXb00(06fvcw9jyl0DT zcGzW)ORl))hFk8q=YdC_2(mwe389Q~DyXE2YHFzci(eJv59RRx9Z!_&j})jA$1HQq zv%n%tEc1>PR(T@G`4&tFp@b1m1d&A1LMsQf(M|`Qbn%jIdfY#MWW4{reV#mjA%ST* z)rzH#dK%bekA1RTL*A3&`q0Nb8*H-0ArD0VW#=j{Xrh@`+IYn>VX10EDiOw= za;bCd*Vb!}Us0e}4PVj6AxC`Xm=jJpOkFi0BH4Y_=9BzrSrp3JBEpr_4nPX1=vd=UA zXnh00U&bSpFv5u-k|?5yA(lAeNg$CVl1U+zG@kLCbY74_CRvnIK_yjGQ$sCv)YCvC zO*GR&D{ZvXK_^|jq?;akc|{-n4E!aZ)yelq2yE)N#Wp+avd2CL9CE~Gjyd6!GtRl- zk}IzH#5xZ=@Q$Qg_6jMSOY zw9-ZgopkY%ZhGjYoqk?1z#v1s<_&L|VU{^QvCbX$lsF$sDWic#I_aX9J_Z?Pgi*#A zXM%YaSY*k0wPv4vi@;}d9rMT&LD~lsLMXAs5l;r0WRXn{xs+2uB~?_@P6sdP<{ja# z;SogA#s*jByyk|mFKvh*k^~Y-BAFCYN#hyMNhgnd3MizA8fvMdo)&uOXMiDIGszUw z%rMIetGwp}YkcGr>uj*e7TfHw%O3k2aH!_TYW@QPr`l$zLpC`KGQ?}%@Rl2Hx#OM( z9(khqugHy7+GwYPPQrXY6ix(v^fSO9L%dG=&VBLCy%NYZS04EkP)HHQlu$|;rl#Wp+aQutRqJN|vow|`im z*|A|p7-fucCYWT3X=a#Zj(HYXWQk?ovBE0v`M{d|63zEL0_)mkTdN#$*<_0f>r+V; z)znZ+9ravtMe$!%e@ZE1o&^?JqT!iWp8qxRGyL3s`Ri)L8k^?NGhaRhY_r2Id+c+- zA&us1qL~(2x#osj?kG2B1(j4$%`)#;;f{MAc>Js1x+dRTqc2|vip*b338j=#P6d@z zQB4iC)KO0ZjWk*RI&1MwdEWay2t=w?l=JVK@%)6Z18v4?r-M$qcu6-s^m5Mwk312i z{=r21a}2S>5l;e%B#}%Csig6Y=cMz33^K_gn;de8zMmR4hqLFEqdCw+WY_r2IdweF$c;Q44 zNdt{EvCam~Y!ab;BvBO8L>K#=wpc2yk(dXMj2;h$e{Az#&J3rvH%`0~6+-WQu8Km}QQ67FcA7W!|yED(~f-DCeIjaAS;H?zrcHN1g~0 zZ!jTW;wFp;B8eiJ7-ESdo`k>d^F#4`i$Jd9dE`?-Aw`r>N*U!;P)Rj4)KO0(O*GR< z7cc3ihhARMM?aHHG0hCK%rVabi!8CsJ62fbJs&vcgj3Eq=YmVFxaNji?zrcHj|91% z2UA2bV~i8-`W`_Ky_{3>LjFuM!z^=LkoI4?ZqZ5`tL$^h6`>i{f^s@}$)ow7NHAX_ zNhFg(Drr39IqAG0gG{o>CWl<|$ftlpd$-Qo{(wN3w&9deN*U!;P)QZl)G);~Gt4r_ zJPRzc#4_(#VU>6_OCXUXl1U+zG`}~CcnoAz}6i`SJ#gs5fDbd6b zOB}E0qn`mTD6?0}nP-7TF1g~G=k`iEFUVk)_gr(s3;U*oQtD`=nJ%6ge~=+w^MX?_+;Yb~4^)`9k}9gHp_V$9Smqrotn!`@+;Gbs_q;Gx2AO1$%`hX3GR8O)Jn}@4 ze!+xLPXmuU5hUL%vZKqE~w(?Tn4w9`Q+ zUA&~*UY)eZe#n|Ozhi+$b!wuS7Fubeoenzb;w9bm(90|O=x2aIhIq{z-ZIPxql_`m z1d~j?@Z2QdpX)dOz;nP)6L=6urhQOK8Rb+^Nfp(!Gspy!Ofk&@8|<*l0f!uO!Yy~) z^T-oH_Eh9qJP<7R5W)f{z^V{BPP9w9!r%FX^U- zUS841Fe8jI#yAs9GW9n-w^`?J5vVjz3xf>tnn|XZ=8z+9i8od{FDRm#eg+t1ni*!9 zW1a=>dEk*Jf-~ll3*b2!MR~G#YP?IGVHYo7_BUN%prvERgo!5*r$s$WElkj(}Asvh|$uhY) z+B5lI*}vuuF=raj7&PBLS$|7j44ZR=D)Wsq!6ZS(Z=#Dq-Z07-^Son)RnpD*f((kN z;T_xTng27#oN&q+=Ui~f71!Kx&jXJ<5hUhdLJ1?B2qK9hhFIcAAdw`JNgyM?DREV2zJ_Vx0}*ovR5X(#WZC&d7Ewhg|Z= zr+`9=D5iu`$|$FTN)}mSnRl$P%6p>C5ko9-)KW)14cwdifk&PQ(kGY@LJ1?B2qK9h zniyh86KXUeQNC0}L|6Yu@md zVMZ8bjBzHIWQu8Km}QRnzvb^H?A70sK$5jcCWTbec*b+mc|iu5WRXn{x#W>g0fiJ% zObMlwQBDPwR8dVk9dy#gOS_Z;z=V@^0F$$Y_t5K36~x7IAMYtB9PIpB~ZK6A_or<`%l1-IOB&jXJ< z5n|p@!Z@r_3$GDG5=$KMB#=lF$)u3RGoF)92AO1$O%A!_QA7!)lu=H_-}e6(*c0C) z(5GEL0}L|6Yu@mdVMZ8bhFRvAXMshQSmvGij?MQ20+-ream@|4+;PtXk311+jiQJq zhFIc=CxJv#NF|MDJSUwOWROf2*_6^u3;hi6mI?I3mRJS2Qssl0-3$ zG|@>H{R}Wju6}vsQ$Qg_6jMSu6;x71H8s>xPXmp#(nbfJyri2RdU-`3Lku&*46}UX z6Ps+a$36!fa>6O+Tyw!CH{5c^Jr6t)B(Gqih$Eg9Qc2?(nPjo6{b!Cj)2R1Dt` zxYmEd@kzpb|1`}Ev&@m0>pY^L0n+|!`-gVMIpL8AKTi@v7TFY0ObMlw(L^&Xw9=OM zy|wwSn*E{o6Xo39^;#1Kmy@g$H)63L{H zN*d32PCCifX5Q;3)9s1i8GTk5f|Y?^N0tM2_u{cB8eiJ7-ESdo-)d* zppq)8siBrS>S>^nCYouXl{VVxpp!0M(oGM&_UNR&_8kI~+DtLc471EJ&jQ!naLXN8 z_Chu}E1ruv zofl+~Ne7*DF~KBLOtZ-;XFL%k*GQs>CYCtjNpSr?7UOUGig*JB#x10XVoE5bjB+Zd zq>5^4sHKj28fc`6W?E>amsj-B&j5oA@tQZhWtb60nPHYW=2>8oC6;-|3ah;518aQb z6YFfS!!CR5bHE`-eCC2nuDIrgTkg2$fnYTaA(Sw}iTHyAg39-cM^>XhQl^Mr4GtQr+JD<<@ zbIx;~^PKZL=Q+=x_kEd}DXwyjFxTu-vdAWfT=Hn5nQd(61Sg3VPaN^oP)i;4G*GBc z5yh0yLMuDiNiTi$Gr=iNbB42=BSAZfB#}%Csie_FGc63Vi{sp4`6s=Pea5@$n}Rm& ztz$hK*ho7abh3%fbg_kQdf4h-mZ+Wgs?ae%W7^1~|lF#u(=a$GA$eHJCy!d6ZDfO6pik2W@oHO%Gcc z;1I_-$%ONHPb?3c4~E1s%m};L!(K+&$9@iQ(0DtH_Z5n>L=jC4vBVKi0*NG%N*d{8kVzKVAZxI~imbLyR!WKK65f zgB)gzagK0;GqkdicDmTYc6QK5Kf@fO)|}T-PXl@8JD&mu7-SdO3-itqj&Yn`b3exo zZgPu4=U}&X_i~vzZg7(f?ProjHaT?A$tE__#TL5hVJq9X$t~sy6VFnXv7BmFv6?lU z($_^Mnc@=D%rMJ!;sZeQHqy>n?VsZU=efdF zu5pWb!qi*JGL{og1d&7$%?e_OE%uJ+ntNDd>i(Do;pRDlNTP^l1u?`DM?486l0-5o zq>@HD8DvsV1C5+F<_lb8k|{26nJZl78q>@$%XQ|sL7_H^D5iu`R#HYe6;v|BFe6m4 zn?2M}OC3iz#&J$?l1gj8ifUG|nl;o=%Ox&zg{xen*tJnYDSH`ZANx5#gzF}fD4O)q zObe~7rHys0X9F8)r-M#5v6(Km&`l3p*~WHuu#;Z;nBWwrIm21bv6oTyv7ZAR0%4r^stp} zZ08V%8DpFy9OF1AILQR3IL#T(a*p#{;3AVuafub?_p-;?miX7X+0S+?GY0hwgi`?KQE6hO*vBVKi0*NG%Og;q^ zQp6f+sHKi|tY-rof8j@B4mRqioenzL#AdqKLO0vk&JK3cOCS9VFvxE9GRi*obA;oZ zV44{YahPMAWP($iNGF3_%BZH5y^L~F+ROj8j%_-BQ5?E;7j!mlzV)G%;dW!*&K3WP(%N()T>e^s$^s zqKPGeB+^JHgG{o>CWn=jQBDPwR8h@Vwy~WZ?4*}I`dL=?uIDK@qTVr%bApphaEjBM z;VkDk&jl_r$rP8k%oVP3jcI0>Wq?6;F~l$sZeQHqy>@ z=D5L4Zc$}TRZs>BbKKyjc;D|l4jAW;)1>wv#@JiuJIFS!9CFDcp8^Ug zqL>m&SxFh?R8VO?5?}IJ;XQbm81JvMMEf6-V1@fk46(!!PXdV~kxUAyq>)YrnPibo z4!Pu!PXUEwn3E!DF(s6;k`6lARPOWXhc}k{+X|NIV;Rc{CxS?#I4HJg{XfLH3M$pF zqMB8#W(_seQb#=vG}1&fEwt*R&=}uFa7!HXgsHohHrBD84Q!;H<(>oKL=Z_7(X1eb zdKze?iDnLPkVDLIgPX*9Zsb$RW^H$|g>HJ-$~LyMgPru!M?V7$vWp>x8DTej*vlyU z*v|nDa)`r>G0qW=ahwyJWP($i<_u>!$9ZDK9!ES0B$7ljDWsA{IvHe=MK(F)l1DxT z6h8Nk=VsxY1*Ph(q>OSZsHBQ&Ru>l9H;3$3iBjdiSN z0~=|lgHATFnJ%`_O%Gey#&&kFlV1AhXMjO=ahNg2Il?iHbApphaEjBM;VkDk&jl_r z$rP8k%oVP3ja$qUW{oXn8OsSLf=Hr>W(9G?lRzR#B$GlaX{3`uCRr3vND;-9P(?MX zSWP_*G}1&fEwr+ZY;wpYk5X1rMmaUqvX%{Op_?AIvW*?=q?bO17-ods>|rmX>|;L% zI7l6BY-WZ;@06Q3%~|FNt2Ab^$R>we8fc`6W?E=vE8E!44tCPZI7hh2E#_IT&yBRx zK_^}GbC@y4Il?iHbAnk;a-BJDaFbii6DIB?l1U+zB8n+t4K*B6_ac)_af!=Z;VRdd zW`(*j#1cn531pK)E_virKp~Y>QOzn=vypZ>=wvC&NF$vLN?A!6ZLFh*t!$%@e)h1B zlWZ}UY5z(aTq3&4_}Ruj_H%=(Uv@s2;u2YoEvJI@Y+yTs>|%($jBtImkH2IL;}~aFI!-xWr{{aFbgk8-EI^q>)YrYp9`? zI_l}BheMS=63@M{Jt!aKIWC_93MrzP5=vP~8Rb+^Nfp(sVl``NV;$?+z((5Xpp#8( zri(uM8DNlI3^B|IyV=8DM%l-HW9u;2?;<#??ijONXO0_WSVx&;kxdS{Y-x1e+*9g&B&(yM}e_U?;~p!AT}K#c85l*DGkCk=^WJFQd$IojD4$UAWLb z#gtIWO3El_6{}f84Ykx!PXmoK(M$`itYtkL*ho7abh3%fbg`Ws?4*}I`Wax5T?{eI z2zwc2ANx7LLB<&82*)_iNhUbOY0h$v^IYI6*O=uxbKKx2x0ol)d@d!N2qKAM1u?`D zM?486l1dusWROV?x#W>gF(s6;k}}Gvpo(g0Xrzf|T3O3_HquTfo7hYbz4Xz~0D}xO z!fy7kmr>5pLK_?Cpo=YZbCX_cq>sxBYo*#+VH?|N`jq)2%D-2WO&;acvzBfSaF$8J z{3bA)5uVxBOuEM*zX2`7R`qNrvSt64)0wbaqi0E6t} ztoF`vo(o)Lk|{26nJZl78q>@$%XQ}5Lk8UEJ}hI}`T&9iX~m~}fAse82mAEBp937^5QiCKoFg3L zI43yC1gAL78P0N!^IYH}lZ1(3DL3SAa*KH?lvPqiHT?`Q$Sy8%nRxNHvX(a1(Zg1T zIK~Xu$+wmZD4~))oLktoo|kEBIpIVQNfgnnAck1th$n$Wl1L_nRMJQ%gG{o>CWqW= zzd@Vl2MF@)&u1&qVl5U|86#XLPK@iABxbdFp_)rnKJOmD@-^aTm=SifhrO(N!F9zN zYN(}-dKzAM+qfPS>w79&(&Rg*4<@)`POfr|X=a$^I&<9MCbyU;%=|578OsSLf=HrB zAdw`JNg-DvPjkME2C!5$z7hBlI zc6P9nUi#=~fI)UK%m};L!(K+&#{mvnzNkaJQtbb5?8p&EOXr8 zCi8?D`%=P*Ad(ft5=T45@*v6?m1P)i++G|@~8t*mDQ z8)>J5O>Cx%Eo@~Q+u6ZR`Wax5T?{eIUPjr+{#Cw*veq6#a6$cxOmT_JT;VF$m}Z7q z=D5L4ZZXd?>u5RQL=Z_dD~KVMM3P7*g;df=Cxc9~$R>weN?A!6)F6Y+S$(~E)(be8BYRHJ-$~LyMgPru!M?V7$vWp>x8DTej*vlyUT-UYE{{sXa_IGlC zgQSQxl{C^>#cDb@$RQ4Mnd{7vVH`OWQcE56>|;L%ILILmGsZX-Yu+}l2gSNj7F-eI zRjx7346|HkjvL(M7W0IOZz;=IPB;-n5=AsC$RLv}vdJNrJn|`^kRpmHp_G-BQBDPw zt9|A)*AFR(bxf7HsHT%mM0gHIGRi*obAW>!qS3RsiDp`8CAr4ABb7AL$@~@LA)6d> zSypQv2q&WUZDS2O#kGmebg_kQdf3V~w$sl5gY066VMf@^9`-WIK65i*Zr+FBisP?x zO&ep{_z(oy=DLVtN+@L|Wt3Av1C2D%Obe~7rHys0X9F8q%^GUhOcz_|riZO;V>>(8 zNiTi$Gr%Cb7-E=gvmTbRjOBzAK_pQ`vw|36i6fo_5=kPN z6jDheop${$dD(l~+Y63}?-<89!AT}K#c9rPmUEov0vDNNic4JP3Rk(tG&9U{ojGoB zlUvLaX533zMgxsB(M$`itfh^0tY-roX{UouHnEv5w$M!vTiM2TcCeFP`sinXLHDx< zoRbf`EI6#MF~&KsZeQ zt{ZEjb#R}cQvE8bS;cDBP(v+s)HBBoZgPux_G)*OeeCA|2RX!H#u)b*q(i@NBN)=o z`g$?4k#_d5mr?c+=iWFgy-w+i&R?DLF5SUSdfCT*4seh|9A=Dhj&O|QT;eiUUVPW< z=bt| zD=DL#3M#3hnpLc34K>tKM?DQR(nK>Yw6c~q*0G)qY^0qIBF#k<(X60TS&TH6IO0hl zktC8yA(b@J$sm&~vb}Rnn$!0w=+l2c0}Qf@A%+=YH+$I2DErvY0Si^4I9|XHu@Q0@24MXZ3SEP zzm4teU?;uw(a!*b>|%&vM%c|B_A<&o_lHFDc8_4W@&nD*8izQ{7~>q_7{@umNhUbO zY0hw#bDZY_7nx*=OI)Vs*Q__`Rj#qs_BOT?ssAXVSwRf3#1T&d`#Hct4sn<<#wjz` z$Yol*94fWw@0{XJmJ!7=R}=L9F2;1s7h z!&%O8o(o)Lk|{26nJZl78q>^}<63ikpJ2$oVP?5bmbli_#~#KQ=LnNbafxW_cLg!T z5=R;3R8UD3)pXFwCiZiHgB-H{?~CVQwu1uw7g9tqC6uy~GRmo-k}9grbBD3Ni=bWI z4m#PyX1dryH$CiNC%p`^iy?*?VK?Wwz(tCUvxHJsa!}bJj&Yn5T;VF$m}Z6qbrVS< znN_T24V&p=3*GcE&Jn_Vt~e$=&IwL3!BXYRn9%kqPIHD?t~19CZgPux!WNEW8OsSL zf)r9oBb^K~$s(H^a>*l~0tzXjhFa>Vr-4SAXr_f$*3!m0wz7@w>|iIo^wG}%gY066 zVMf@^DNYk->}RBh8Dowc+~gLS_OGOj8fsZj2b<|*w88zG{TyKXXT-x!dg-IJQS7v_ zj+B?o6=|e%R$u2h&jl_r$rP8k%oVP3jd=YgkVq2Aq>xGux#W>g0fiJ%ObOMjVl``+ z*5(Xp^66wS$~n$+fs0HsMWJyPQA`P?tfY)`DyXE2YF0IPru~}tqX!F?Ycre(B8eiJ z6~qur7THu#NfmX}(?BClG}FQcHquEKTj-{T6GVtBk|Q_@OAm1>ovG)?AMrPhFPvN z#|>_Bi-YFk5QiCKoFg3LI6KV4PI_PR{{PnV@%Oe}D~|W0@FCAdhk8E_?(ZUnfcxYea7F<0E6sehz;7^NIM;LvWd-fv4w7W zSZf~ISjT!cu#tFklRzR#B$Gla)66uxpS}Az`iay@G(zJ&ZND;k-1_Obe~tg^)?se`M>HU= z4=9*5&)1pb1~<9IJiA>_d)Uh;`-pWd#j%=gM7WMpNTr-T>?OX{=My$^jB7;vy3a3E z(@gKLdq@A^WB4F#1pAF? zsAd)2^stpN#yP?yQ_OLL%!TLQ2OmceudM_UNg|mPQb{A73^K_gn=P+-wo7x#BcB2a zDWaGXN?A!67$`$6jB$=|nloJBB2!%D2C>#y zD)|&pOC9ZWu|=J3df3V!yBK00`#Hct4sn8$OmK?xOfpA|_L^AFMmpKVX1Y1T6{6Rg zGaBi0Tt5TsWt8KbC0yMV%8KVoE4wC1sRTK_ykJVl`{1p`HdB zX`z+1w6Tuu?4XZ+M%c|B_A<&o_H%%P9O5uz-W8U7)@QP}3VQ6@$~FcVJ5PPWiZ4_nzrFMaegz;<@A!T8TmG*oqvW1-tGQ==@In8Qy*HBLbjWp3r3$3iBjdiSNGhJ+q>Fw1prF;AFrE@c@vZAVF? z$)=bUR58kBt`Kbom~2zwdj0vDO&8q>^hi!kdik|a{dV!5`%i6Dkp;)o}K zM3P7*g;df=Cxc9~$RU?J@+qK@5=vP~8Rb+^Nj0lj%^GT`rH%#~X`zjEY@mZ?y6K^h zU5v1sJ?vvY2RO(f4l~9$M>xiDPH>V5&Ty6sTx61~Tw|IUX1UHBH@L+-Vdi%^;jAEr zSmKB$g$y#uBAXm?$)kWmiYR6!Wt3AvB~?_jiq)*4hFa=qpphn;X`z+1w6Tu$Y+xgu zY+^HAY+)7$Ed)UW*4seh|9OekeIL--9GQlZMbB42=<2+Mb;xbpb z$}HEJ;|B9AwPu$stXsl~Aetyv5JN0+B$7-jX{4|7eUIz?9znM93f8lMKKdD8ki(2| zg{xd6Y2iJI6t=R96P#p%E39%aZ(%!oxy&-3VV9FaDrv9%XgrnLucDe&tY!^0)KW)1 z4K&h3GaG5AgHATFnJ%`_O%Gey#&&kGlU@#Ti1S?FB9lyUiOa+qR~+#qkVq|cY@wST zj&qsoEHmyzl1L$qTuxBTkamX|VK;l&%P9Le!ZD6>f|E>eiqo9oEYr*|%XQ|s!A)*4 zPndX?F2uxg!igY~C{l?gjdU`|B#Ufv$R&?_3MizAVoE4wC1sRTK_yjGvx?Q!(?BCl zG}A&WYiVO0>)F6Y+UcN^O>AR3JJ?Atee^TH;H&-)#(IAj!6|i5bB42=<2)C*$Rtx- z;wsmeW`(v4w4%;xsc{ zXO0`(VyRfeiR3!D8;qNq6n@UwXyZD$8=VvKDftcM3^2$ph8SfZ$FzN%^GtDtt6XE2 zo6HlT&lqBfCxJxL$sm&~a>*l~0tzXjm=a1^Ng3r#YdcIjK)10RCP&=sC>CEohZ*A( z=Qz(bX1PV7d9C9JGwuKH|MwpL33Bwih9UNGksD-+qljAS*vlwKIKx?{NHgDAlu*hR zcGAmnPH>W?#xZD~KhIcoIk? ziDXhpCxc9~$sv~lidabnl~l8eHPlc~9gQ^6Obe}a(8(q?(@hUs&BK6sc!1!P{iiv@ zSCND@o+IdXbekQefRg_2sVqWi!F51!&bJjogM6?mp=L# zV31u5G0X_NH~P*@TyG;dsLmk{bCqjEn~N2sQpRf5u!StouvM(4g*JNF$_dVJ_2Hj! zZx`3S<-xR=W|-wVbKKx2x0okPY)e_ja>9uqk|<(`C60I!NF<45Qb;463^K_gn;de< zBcB2aDWaSTDygEHRn$;R9rZNONE6Mp(8^lYv7QZVq@4~r*~DhL>0v9|*v=u&5^2t( zh-L-xB#=lFX(W?EHaX;y$9~6;bA)3Y=LDxY!$l^U;u4pcW`^s`af6%86Q<3jEF*?k ziYTU*hj)5==bv7QZVq@4~r*~DhL*ur*pu#;Z;=x2aIb}_^- zyV=8DM%m8+4snYbnC3cj+<3TaAh@9J?8DW453h|6U3JL^_-8!S zdUZS$`@Qkd0L!n8hn8I)4>fc8^4m2#9-8{=@z6?j_TH{D9?Em<8qyrUO?&$&_`k+O zwcL=8m!6f5tJCo}q0q=@LZRL4VK1W`;1Guy=Lp9*&IwL3#vsc+vlv@w%aSFbE_~-l!KF%i|59$_gCAiy%PMnc{t5?ndEy+-;Mq6|?``9uhVPGux|sdD@led%cqn%+G-PeRozVYryYEma)A`M!_|Z_P z7tMDTS+`BTRD4io%mF08t}eivg1N?&+9c#djbpq`gm%WE$@aLq0ryO6$J z9Pgz(6x#Ng#Ct5Py?eJ8@^{u^*Y_9N4TZM5x9<4Nz5U-C)4loF(2}KZC-uI44~jVy zS`kXbeT7)!i08%dP{^endfA%&H9pI)^BSMyH~8Q9ihBQ%-{%j)#j^b9_(zr;{p3>P z_`0&FkGOYz6O;edXS5#`yzuWEg2kfR|XnODy0e7Vwe;5=kQ2{raceuPJ3EWt3AvB~?_jiq)*4hFa>Vr{SmW zKNrEVq1NCpIKy8u#osW)51HrD-){{ff4}wU__0TVpO%m3W2EsExqN~Wo~4TCspBPD zf4_A+l=S`JFMsuM|IYaBcZc9>AAc+u;hE9a;5ml>s5SV;AGI#V_fF?xvCiWB-Cy_K z{qL6lAjiI2+Yhrp`1q{%khi)&riJa`GwQVPZ)P9rIrE@4-mNUysQur1=k_O-{EhED zK79Ab7S#N}GnZywVFSNO7hhxtUtt$tXY_5--=2#I`sdy0nHt?HtWq&%f();GN=JZ0Ft5g*M); z&W~&VJH`Jn`#xw~57Wmx)p;tkWLbJB{?Uw3>|;-b(jQF^B|VxNs(AFN(5gohL%;0( z<5S^Bzqa&k=QnimPV1oyKiW%Z_#O65-r09FZ0V8=@3@KHb<;!Pw>|BB?rHCH>7g(4 z+x${^dgxz?T_jvl)UynzTn0n{?oW!2X3w6dbu3sKcB%}R%i>*QD28d^$A!Vmb*t$E!^t+E7ostep>lUoG{kxAWj$vU22SR6mCB#7Job=qU9Q|1GBSF%4BZ7ZSCjX2A ze*U`=1EE262Gt#xvhdk@Gn*FL*`sXFuPnBGZyG!i^;qy&gU`r>J^xq`)*lrlER-$e zeQtY|g9d{ismhno#SKe|$8ldCAebmL*3AKfB~;*xDtb^-F$E`Oi82 zpC*RFbEF^V6N#Z^g%rtuQd*oCT3(hIiYT-FtYe;)J|7iYktY3FYdbwE6q_agw9j^h zM?3#;iTuB`zx?RnaW}~&zkGD+#U)3JhV=Vqx5shs{4eI;82jQ_@6N+`=*Z25`FO*~ zk|pDz%QweE;s4KgD4p{EC#3AQ#W63Y#=hA8`$;EiFL^G$)nc6Yw|Dn>5Fhk4{#5Wa zM(FVl{bl<28Y6s@1HbxE&&uFa&wtK;OZIcYi!}2J8~9DS_~P@QyFZS5xBWL}KNoz3 zU3{HU{**Dk!vz2N%{GGFa}l@4XFh|37;F0TK>|;b&eP=a45d6rH7`)l%dF)! zI`{%Te3?GJ#t7g1hYj~$2aB->36I^LpWv}etw9t|kZ|et=Z)Y=`Sd&a#rlhB@bsnD zh4vP|ZwvC&eTGt=yL)`K{0r3I*`6qLe&5DoyYDw04{iOw$3vr>xob`uXYJ-wbMuXL zdwWfHC>wmsTK{~g^tI22R#NubM?&S&a%qLMLRuwVP|YeV zE$kzqX!~PdTO3npk85Y|?eiTGJQ?Fln3|6s9e-xY(WJ9szZ*(njlJjV`e;#>-wK}c+X0>OVOeiHYZm8XAwAle z^T>E8<8$>SMHd5&scpq`gm%WHJ-1$y{0eSD3Pr|ZW< ztNq@x@vnn#+CH$bU3%$`Ch4MX`9*u=7o56lR=OxgTeZ?((c2^8Buq{(-U)zr8R{=N~HnhB|v0 zmH#8gX-x&N&j`)FVenmo{rW%VjVH~TlQ_TuS+?d|IRVp+R;`~ zlT=$puSjduTc}S`nBx}|=$E=rIF`C1DM@0iTZr=)?59q=QxsKbpCYjj{ww9;pJMQr zr3@NN(!y9sT4nzil~eR3{eS6^iH^Va`QyX0a9<2s|M2$rJL93UE5X;ivy2d5_jvFz z(s-)w@$pd0m4)*k+}zm^eB^f;f^dF{SpHX1_$OrZFDT*{sNhr7@FHD&ksW-6U3{HU z{*=GsD&PN|H@>?Z57qzec&LcPznv)jZ|=?S-*{-Vc832psQ2AfRE+O*%O4G%i1U4J z+M_{2!|gS`c&$7rotXTd?_1xy#kR&nC-i@fsG0Fl7F9FB6ETl1?tiz`Z&R;^LchoF z^9Qevht_Fh(LwnO%(HXmL2bR?-*fywjoddH%+o60fv%yJI_hblktUiyb9DUMkAy-k z@~y089qZXZ`)7`Jj@jQK->L3Gev|xWy4XTD{S5eBBI)~~P>*~c!{jxFLirR>ND;-9 zP|C{2g>n0SRlb}GDygEHRd@HVxt%V~k@479M?DR1?7P!{qp~KN$$v@T6jDSnC6uy~ zvX}1kUoKxkB~?_jiZyrl*SvJJ=+ACHZ}k1r(XjEm`9yV+Zr538XQBT)?bR!9ps-25 z6jMSeD=DL#il#gDE9I-GW)-VhL(Sd&wern(^L6s|G|))X?efL`ol9k{tR?ql=YV_) zD5QvDN+^B#PX8ZLKzMC)6%U5r-y~?h+wnWR-&a%o&YDV^e3~>}nl8#r=X^~HFM(PwC)p7mLqgl8Y0m~`)dNTJXzW4>j)^Tx{)B=98Z^LOU{Y5BE0 zLn+TuO+7D@#|y;YG~|UFhg)x-`@iwoZ-&1ae&e^3#qmEV4JNF{-}dw;}3yiB?{vozK(#jXUG|(l;JBo`>!KL1SMin;0|y?_!}|Fz+|1NBt%h z$xjo{$4I;L8&&X>eD2-+C*(_bmMWfq^LMP<=crEEtF-gIKW+`C`MWIvHe=MK(F)l1DxT6jDqH zrL3fkN~)-4S>wIyZXrIuM|&>`CxS?#h-L+`Z@kNh&vwE++ljW5NG63;(nu$ROtQ!( zhuqu8{%HSE-bYug6%|-NG63;(nu$ROtQ!(=jA(nzq$VIod0FNrhmeTAd)DeiTSlV zb>igXNw~Y6D4#?!DWsA{IvHe=O%8eFQ$SnG1IF+DXgT3T5J?o##N2(yij$8g;qG># zd=kl|kV+cqWROV~+2oK*-tA)_(En%kPdE`o5zPu>KYM5V@$v~I-rY`;PbP&_(nu$R zOtQ!(hg|Z=|Lj}mfBN>{@V&ky@sS|vhi$JF?eC&~+)H~vH zRNJogn?=3+%XIJsdiXMZe2o#l$pOC2G5+F*Z4({df9|so)8aMucB%J9-`yrZ_QCJ} zi)%01yG7UcANF1B!>V`hxeu!T%642bK>|;b&eP=a45d6r zH7`)l%dF)!I`{%Te3?GJHq?5w$lvOWNIRw9RCa)G5547`VZL|b9&)@ulV~DiTeK#_}k=Gf1BJIgnh^R>UZ9lqt^#! z9(jG>`|e}PpZv~S)?1K%XFK={?|oa`0pL-YHQ{Vj_e(yXk9OGHmyin%Z*X-Fx1d&7$eS6>HF`k9WVu-z6{`!*eC7#E& z6G*zRZnCnJyKR@;O;eSny-{!R-TF@d%dDm4gcCs|QAD$X7-ESdo&*v}BAFCY-?EPM zr7WEcGRY#FR{vf>8|!JOlg(_Qhi$JM4fF3Qv@YxqXXEXEM`3Xu7Sh*`9W(Y}`$pKy zDErvY0S3o^j3hw@0`zik}K$r7c=(~oZwjd{`EvTf0guJ$+pKc1fGw<2ApS_{b z|LOYuuIra5o*;oIziXcUQu%*T&J!f?BlLDx>h_a|z-uY8CW*WLZ^KtHkV0nfa@C%5Ob(EaBpY;n$m z{cnG-f7tu_cxc4E?xZyy>+{@lma+Pc&xH40rw_^pU;V0QB;O#OkCDbxlTR#peJp*+ z>jTd$dA*~0$?LT*yO(YHb>D@5bUak@gYi%!TiDG6Ge3B}u*2U!B>x~3`kx>A`=?Oo zA3h!m{V%t_f4Vo0*Astp$^XyXoxoR7-3)w|?*LzD4)2Tzz!pU+SY% zSwc0B{$<;)_@3|P-|za5M~;fbGx~X-tV@~mNLf>Qv+JLa*0!3XJ8j!Crc8)3)?V*JAP?xu~o@de~oshAFH>0C|C-~6uPCxWQwmXr7tefZ_8Nx_T!mOqi0-Mu5v`Fj6VoiEbW^F4!@z@>k8 zP2;_xsomqbIX<`NcaK+waeDXk=&0^Na(4H|7ZxTocKT*Q<5Ay~KgDx5Puusu+bu}R z?(Q0(d($ra{(qSFhX2{V{*znZnd*DE<9DL>9=io!8fkq@?jDb9($0jQ-j(guZ^LUB`;V@LjVYvFVB+nH18v!vO0oE?(O$h*X)*t3lB~dW`9F665{DchB++pTen}#u-ec zpmo{Pt=qxY>0s+L-8xNgU8ia4P4`Um&547fw zT%I(~KM(L6^nljqpU;%vN7#xy=6U2a&m*VVMrpRu;OLjl@2YNJizXb+F&xWr z3?+*Z9M1`y$VrSLhdfT<)Vrbyr-^4Ukpj-*Z29Mi=W-s?(k)NA=b6)6m#JG)vgHWd zoa}k+^yrnwh3%Q|vvaffB`!`(*7js=Pxp*;vS+02uU*nTCoOhOkFMzU#4hh!cX~1M zL|4cg^xQnc=>4wa=u9UBrQ`H%%RPvjDHJ*^B)B zrp$R+$R62f8L?ihNn1^6h6&o_z^$mCw!LA@l%eXA3x_= zp5vGNnipu{C0=2G<(Y5UW>~h@q<>2$|Bv7EzYMl7b@5DMm-6IjSFx+uP3$K25POKp zVsiOf&sD~o?}@C6_VS$NHzI4Jy`}FLQ_JH;8|C*YkLNxl_AU23ocuK9zAdIpe@A{s zdAv4^{Y|%79H7qp@>QOlT;c4-^Pj6c|G6rB{xfoyeZ8mg+LZfjBwk59kzY8T53xRGIYt*bzUMlweJhe4 z{cd87V}FffP>o~IosK0n%H65H6ze3#`be=ZQmls*>mWt@QnanNcBOb`)bpI(?^f<^ z7rw;NRo@ca9zcNTRZK7wVQ|5-p z*DF1v!LTdim20hQB43HbbE%}B$U12%sV8!WG?jNmn$o@N`w@!Qd4{ohWJ0{(@&2w< z_j_=B@!1&eGm<2Z6i1QGXo@*e{(HX%<=LEM*9}aekg1%{bY|j}-)IrV$$KALf*qcZ zdDinVTLyLtUNQU!%6vCc&TAYgJ%v)P{M!M~w{-OHk09Bz4k;vi?;|qavw`k+W>Wr^ zdol7eiIGJ%IV36iIwaZ>9wgnglVN9VuyGKa%K#IqfVWRF@D6f%Px3Md}6 z$TnCMEoE^Sdo7AC7$`5__BfphhsPuKv)pihyFKC@X564fL9%HhJq-6<~h|qpg3A_Pij`bAge$hj(xE;OMlc;Q>zpIkDQvM@v-y>*Wws(rbM%#0RI;x1h_w%Cr*YRPV9crC6 z!Mb~&f*j9nCEAa#ZMY)%8z;oC2*z?MlQ@UzocrVz!A$0G2@6=lwcNm$pS;33@*?{V z53`AMpZAOof3Fyge!}0OW1UmFnYJgr=uIkpIG;%@C6_Z<#Y`4nr+`A9<8b5q(vR1qU#HaY3hSndG~bVA_TT4PfB$V4rh~-i{ryS`X=D;3 zi)?bpr+`9cP)rGBlvBY9s#x>9zm*4AhXdbp-r@W^`Z@D=raA{xV11v(*_`uUrfo{&&s_$)!Rc&TYT4i5J8FQ%ScmSCNZ+eKCsUHmqWTQ`}7&nw9CBq6O^mJ zVt9x4mA6~{_E1xT`_~^rkh0T#e=>=YMK(F)Q$QgzDBii}zH566I=cOXx4bKNxNZ8J zGz*+@TT^@^})AWdwoq6 zj{k>1aQKMCpvMTGzez=|+bCovMa*SBmr}+emT)zdT+fZ%!fj-5GUrppI_{)~ySRr9 z9PjV=Z1G<1=fR>N@z;*Oq>x4?F|x=ehkObsWCq2QP)0cwte}cDR8z;jY-BT!(fI2< z_b-Ep{V(yP4}Jf1|9h|P+qEMxC<)te=T$*6DWs7}j4ZOrA)f*YnL#lnlu=FvE2v@( z)pxeOGa8hgw9oN1DEAqxU`6=eDr@E)(Ny7>^gh`au8Ni}xk^8AcFdCRMovNo zZrIfLo2r((xQ7kg%YEF>gFM8;Y+^It;|DyN93+0-_9KNfGKrBzHaX-|Kp`_Iri3!e zsbB?Ftf87Z?qwsJd5lJ$V&~V}_Rq*giA`f${QdB@{nt})_&2T!dT=Ct>Bk_3GK$2D z_Uz+9#6F!!^1S!FZfKuRkT}fypQMmRCNZ+eCWm|qC}al3lu$-F6|A6&HB=8P4!2!U ztSu#!%{xN6H>vIO4P%fTF28rr-h=7hu@9=&I#MojeL^NNvMxGcKiYeq`wt)O9zVV4 zO)7opOB(5947Q&QY3-k4WzrD$PGj!L#@v$)>oV?WhH?t$4%JV9cswUDh8*%Zm5CJW z-GFOtArZ_Xf`sf+jd;P`p)YVyCTUn;Qyd$K0O0(=!(!HdQlxA6P=@jWyX_kFjdrVVj zn%Tguentt?Ylp1L}#Yb(ptm6tAkl=N|7onc*P#G4mdPd{$`4*Fs9*=Rl- z%W={}#Vke`KAsZ{pD3Qh7;?zt6i$uLR(D>8w)Zoi{@TyhOv^C9{QsZ4L6+?pWn#)4 zD?L~l8ccVW>6V+W*firz)890QndU``P1j($yG*y-bj79_cbswZFB+H-AAfXf`y2C0 z6B@T(p3vBtyhRC({mKmc&ah5?-GYS1+48qaZ@p5wTp5-vmj4B5WNI2CY(N(W@ReHdLo5RWQT>{=^V{5 z9LsSGC5sUp&k3B!NsJ+fJWfGBBnhW+1`{dZEY9W}&gDGxXR^li=k?}yyLhATfWDL1 zl<-S`KOLO+a-Cnk!T<10_luSNC?&W@`yb@{OUtn_F}P}bQc$@)scFlv{QcWTpP9ye zoA2;lzRx2(M!;6${E%%t$y5A@AM+D_%FlV0=lEq}(=PQN%q-*fcVcdU+ z?~Tm!C0^k*e#`IqU;fCS`Dj6NhXt`&>q%~q~he-6rJ zs3%vsBI9cHL6I@e@Hp?pUuZkc?sm}6!LE1tjJ%I=(dfnIQ^M!DtlR#_mLQhs9v0c; zkWT@H%%GSO$|$Fzt)HHET9+Rr&%NRK?hA7@6|L`Ih4pmwK8){)-S=G5`fS?4=I=YK zJ@p=}Oh@O}KD|B+O5L|6<$!1C+RMCCbnU+9Z?)h`_rI>@I#zNk>sZeQ9$?eH_dJ7$ z_oNfOCtc$?(GOyazpeK2PHj9`UXar9`)~)XBXPaIFG(SdOk!k_O%C}KP{<65DWQyV zD%S6FKVkoQ1&_JE(8yEl+_%law3n9zMWpy%D2<~$1NQep9DGA9ueeI zKp`_oyu$L6LK>OG$Re8@@+qK@85C1O8Rb;4f-2TfO&#~LkXpUD#LlVSCn7ye>n2 zzfSS3N455A5sw(oqrRK^C^EkCDE0Jntn1<&*t>OFeW4`9o7Fe_Z|eMeLVVeqt;gw^k`qx|+k|CY@rt5lnMZ=`2r6|EXBHB+~r#<~S>F-DT<<*Lj&e|^4{=2R2j4aog z;k07sK7KPIy;FQ#N~d_kXFJ80AK58>SYJME_;czozQy<;EW-zq#3U z>WkVfR*H2mw9TWa#V{G<%Fi{v=mpF3qCV=wKDN>?2xIX2m*)m=@)n1$(znhn`qtrC zhI5I&aTc(IYuUmNY2v3;j7kbtP{kUmspDQYvYE$5?b%NI@5e!-@lUan=V<0NUgu5T z;_wraf*u@6U-~hKp^Rb-)U~ zy(T(OoG11i<@>@>@uIEP;nswj=vet<<>!jI;y5wXWjOj7EU|v6y;LOQGTT^e7HcUg zl}9tRrRwW7*mseGYoY_k`Yvv4O{xA9snNG#*uSAzAQt#OO&ibB#edHed0?n4IR$qwGUgMRc zC%s9f%LLO9V=(<0!Z3!@dy?n5w4pc2^rUY%Jk>D0=t?(|=n*xB1RzeV&nH2B5z~^y6f@gh(1&PwlS#C}xj8NwIcGAZ;JQNMn zC+s#x-k2bHW|DMXJhwI>NSWyxw>5q0ef|cMe@43?)415ogYK96@23Y#2WjWHhCb&* z*VA5qymPtF`>Iay;!`@sUvzC&{B_ZF-na|JD}CQtjr}z$DJ+S%0pZIyL6pX}RyTKlj#eKpz&fWKZ7%9X(I_e3@=03q3Qih%W9!cg5qK zQGc38dyt$QG@g@W9tT|K+4oC)hFHSVJ@4LkbpF9pVZF0V+tYk{(VJBI(089_liqEe zc65H8tx#`_!O6i++wM7;Xhgdhm7|uvWkxd4=un=<@qsQaxkIWgO$l z=X548DLFW@Fe#p^U6p8eypsB`jSZdN>s_~?uircB#~_9txV)abHIH;M=+6KKCI_RG z9}}+MrQL(^2Tm6*WB5<|Jx`MBx0>cgwB7LOOk%R%Wx7aSq2cqHNs)44-dw};xs);% zE!cL?;|bgD*=~C+m%f3OtYWo#=6Ju-G^LAJ()t}~@QC&`uymxpmOL+Vg&6T1Nf{Mv zCfhrW`OKi0911Ap70;KHWn4Qofm`#x3JUZe}fC z;~u`r!+f85w(&GS=U2SM@AxzSp!3wEpc_Y!%I6rsu?*)#aygANId^JOJo1=xb>RA@ zJ|W0zJ=abPvS%jU5iPtR$l0CFpP5wc-e|)u)koj$J}Sos1v8VJuZJ2AWx0+SF6PKP zMSsu5-Y1|NNyYL`2nt;XY^_ZAOmx@CusJoU`=d6~!jWXs^%D-=FgbBVl5DNT-V%}ofZ%zw>+*Bg%YK4Zlc zG1s-;JlA?8lR_Gq^OE8j!>!}t{>Jt^#s?6uHSHGDegxvpVOvJHo*j|kenFD^1%8K) zTUp0?Ht+zOc!UO?WCzc(i&yvqf8}39=lfkYK1CmnVj#ycl9L$68BFFpW^oahas^9S z#*N&}TE50Te3OUyKJ{$lX?{N6y1&G_zceXcYnc)+wf--aS1PZ}^=Ft@CeLujNY|By zGl`K^rrbhS+HO_Kgzwp`GTmxvl1U+rOtQ!!pMup%_xPNoo6l#WT`uq}d+WaKx&8}2 z6HPXpN?-YD(&-nZM*B+-5C@4d1~bICVe&>Rm)j~idb<1xh9`+lzu=#AX-1k|Z_gSC!S)UuN&j+o854zso?|kmF z-8R^6_t|du*>3mQZsGCky|z#LeC~_(RJP{@ttVaoJ(2!WCwe+P`?P^X*{gS?{gU$8cXUjTl3UQ$1S|&p6S&rfm1QM!U~t zxPF-H&n(xY)Q54n>r(2;9bw$aw)=3oBjwS2y!&4ijcUuUZI6zpL+?n6*JmdLqwa9c z$#^C*g=rLVF{NCoY-P6d&q((&j(6|tME5gJbRIJ9x^SFyz4S`yTcsnTjUSy5tdm~P z1|DD&k5K41JcD9NR%^%c2|<|{8I=%}%d21oRjVD>Z*v_!%DI1(^Zr`r1;hPLaL;0$ zV?D{FkVYmkvdAWfd{Wt}wj9aKtvL5_82h@~WxhUN*9s$7tj!cJds}yvFOi$y*$5UH9Nf`qGa< z;r6n9>TRC}=_kYVNzx}J1Usak4Y%LPw%^IVpLOl>F^EUZFPBR5sXy6oOWm0i4C4gG zaw?PV)Q+*rQAz#Scl}QO-M+6sVBGs$rg&tGc2G(En1tZzYS%CPikJ8uf94-_cD>t; zBS__Q3}84XlFMnF$+^sA4wtZiC0xr5e3{$$DtGZeJj8d|!VhWUr#w#!zu}MkjepbC zy8I-)`7HhK^nLS3{~hiJtus8gHqFwW{}S!z`j0aPTklB@Un-}4v#$zfkl z3O@1m1MZc46zvLns{7MlcWnJeQd5O>e~5YZB&n%JJN^qqqnkYcqAiC|uzXii@Fi~H zE7b6H?&sUPlA3mD-ys$}_quZquf3ksl;Amqk3ev~<-3r1T*e~4V0qKke+V7yGZ!4b z#rc&Z=}SKbF_ck^VLTI=!ZeDwm{P9fYOZ4?x3Z4)Y~TSlZF$eYo zG1@bq8uR%NXrEsggT>Dz1=nyrH?f*KsO1|x$ai>@_%p57J;8RvKj9a=z^nW(Z}5L@ zW%iy&M~8zh&n5-k>BVQB{m|D~O*KBxhf=z}G7c%fmz#d*Je81;a43D8%ifWFx@oNK z|32+qZ__N(|CiXiT?ZTPNZ&B;Rwf$V;ya>x8ffHko?tsoJk1Vv@-v>{7d+3e*hMoh z^71~<2L$t9P6{q(G1qWCH?f*KsD0VrT|K?~)r;Pw(ucmJkxmBv8NfgW5o0hz7{+i$ z624PDO3Y?7Co}elrY-uAd!N+hd;i=cf{a)E)-FR{X*&)dZ}?!bKWtxmLE;xYuSp7NWD+BbY;wq_fI?<`;i~lLHJ-V=#{00> zdLNNwQb;3{7+L)2RreTQwNLExyhZD~eZGr4!grBJG}Y(}@xMSvw^P#=?foy&-sYg_ zkM527d-YA;;&AC697$jLF^HjzVhrP%$P}ji(cj&c>ktY?{>k^TJoIPx0NKJ1Y2v3m zPYb`{kNk~))AcXz0n(e#(w}1(#tDq&R3>o_)0xeDE@v^4_uTaC+xu0+I1Ge%6Kjs;J&CC3rzwl2Ed&7M^dh%(~`F{*%1f$90bk1Tb7ciI4 zvyiK(N+0#I@4tTED;@mLKO7VIE?f8^P5hMS zY2i2gk-zb8y8hEK;h%dxr$KM&&(fb`7{&>VHI$iGlJ3N zaXM!)l?#~5=UK>Ay;`5G4Jr+PkyYHzo!rfRe5DVSI&bn8hxhIt^x#PP(vLw5WfWr=&&1vbJg2;O8{cg>nDW7=eYbi$ zI<6_*zW-mMqix>1ToCJPpCOwZ@+qK@85C1O8Rb;;-Dg_`E96zNhHC1#myP?D+k2jS z4>ygq{tltN+tQKYrdis1h;^i$?PY?z4979fVk#Ffm(R11tEl9QtjgGD+lF;CRao9b zsC_vO7K48M9a9*}D8?|JiA-S{Mg0$0uJ-zxYAoL&)ZUJR#ilLV_YpW){qHxwX{>9H zL+Gi9`L+{RkgQQdm4e)s(Q>Sr-oKa2a^zu$j-y;Hg=UH=Img6*U~?lKnY$D8OP z7PEw`v?9RenS3J!jt^{Lb(nc%46m z`SSiEzQN!42mj(N!f}x!^aDT_y3&m#dXP+Oy}fqF-s0Z+zSBBw&)aL7RKwwY@V0y5 zneK(h$m)1Me(iPcAA`iNx*typX=D;3i)?bpr+`9cP)rGBlvBZqueSABSY>!k+wlJL z+Pyq|gKTZjA)mxW=1&S~WD+BbY;wq_fI?=1&S~WD+BbY;wq_fI?M&uKQN_S$<)F5qY~m3bc#<7F%PwBw5B&AzckI_S_?L0fSC#}xuPo`vx(~{(|hObcWtrHcddKM1%FlN zzry8t=kfd1+kS2eV|)GShC>;<>5Dh)k9UvuwzZzqZsu0jyzkFa`!=zSFSUJH&h?kJ=XdmT9+r1aWZJSl z)3(>qk@$Y*^G@|yKl}H0(7p}!S%>d5ZJ6ixApGs}EAN@_S{NjfObTga5+iHZp5I5< zzn+e^KitlHPaDr&5s5Eb5$Wjkdr!Of@Q0l~D1O231(QY=C6rN41uLjx4b?=*592TW zhQJG@9i4xA_*=-Crpu<}m!;``|2W<672SsO3ZkIc2KC*TD-ea*cKa=4IdSx>+VbgD6) zoErCzUV2Xln|GN1VcXx7ZvG$Awq3vJv~AaKI|b9mxhFEN^;pr-c6GGeyRCx{Gp?iW zJ%3!~`s!!u)B2fWA_bhq+49d3&*eO(c|W0NNBa!#=(`N9b)NF0NW5ixB%b$FB>tk| z*-uB}oqsG6r+A0^VGQ_*a-6a=5?}sJWyRS)jl{Q7{4-@}_<1CrN$xX|`1R!7A8E|E zR)12<5*jO)Cp6|>m(UowKB2Lm$`#T#crSLJ>xXwZ_rL44&^w;%!gEar>TNC4SX-$* z+Sjaowc1ytZ5i6uOzjQQUrcD6Z5fs+SEt-o<(4Uzr(9=cwz5pQJmosyD9y4jNw1W? zNt%9D@@OIN%j%)?s)Tr5xIWaGq0XXJ=0`IbH%n7XGh5BS#r!)j_a5^N3GsfF3Gqs1 zuhqv@m-3k3DvbH9!kFJGjQOp?fqtuSfZr+{=w9zYzg6fRZRx&-(?~a*L4O96H%7F( z9(6Y6Y0GSF>8D*S)LF*amam`XYoRV&7nZM|7gNYRATm3BYZ29Mi=SrW)G{dLHBVV#i4=2Pk zw52)hzwgHh@m$MTbcKG>E&pA%Pp&evYb^hItcN`P-E@9RnWv3AHzEGR$<_rKmb-SQ z^TAJ?BfjDMaIf>j55&8jFYb{qUih$hzx?~;KO`O6>b#-+3r~sPbROBL-a>U!PsBXJ ze$9)>I7>VAOI~ZZIZU4?pIVyH_xauWD(4uEp$-t@m$Vhnm%=o<`|Bpy|0}t!z04&A-49rBc4RqH(%JdPadams^3*UO+2F` z^(l8e9jZ^ci4<@aXPeJC;<=p1H1j(;Y@gV=e!}7KpLA=xcMrF&pVkp=@IWA)Ii7sn>$9Whmw4nx$K^X6pPgH3oiqAvGW_EX z|L%x&^^WVg{hSt_&yKM!^`kl{7VR}i-z|frkKs6m4)8lSG5x2eM+Xj*9$|d8coI3W zXxcc@@8P74*T)Nk$4j3|0cYuVZSvq~|H+2WPLIx=?t0{cf%;n;s=p@p*QQX&bob9F zW-dv_4P-bcGlk+=+Iw`o_L2nW++*C6i;1njfpUMe*D%BH`Wqv8mgnmD37>9+z~w{URS2BvIOIgGyXW^5qF3?#2T?i+%9g99vAO?t@&4& zhL&p*2SW+n6Lcm>MZqT#Vc>MAAim7#aOO-*M_wVt!LLu4f^b@TjY9W zF|PG0ajhNCbv@}iIPUs4UVn@9ZN{;c`nB?Hr_R;Z#aHFK#yrgR*jBM}ld|7)U9&~~ zKQ`VqSLc$1h8t_nX}B?ZPQwl24dQL$ZDO@pEjEY^VY>QU>2n)y6K@l%tIv}@uc4}X zT0>QIn)QOXL);O@=<&)GG~8m^TcYR1Gb~&4BmSOAp5)%~q_!+nO>?+4k}=@G`5 z^kC$74aW`h8K6hD^l0gm?ek;BTydPJZ{>8ll0hGOFq#;H>5?yRg8S5TIg`nzC5eHP z_3Ny@oFcRD`E%QcPICv5u^ z)A|gDk_{)DF4V`oduo50I)`XW?_sXp!`~)4TiuiNS*^aFF?Czk9>W=_4)f}(P2DVG zFU#0N9eqsS&3a3vTX?*fY8umaGw)P-hSP`hVE}#TWt|N$&otBYnQT2xAFQp8LB|e` zCJ!E5nsA(B(y-vDwR3}k9LGpbVjO3zog1DDf^CMM=I8v1m-rojZX0iz%s-i~=Gl#8 zx>}a5mZgv7=tXaOSe`zXC!KEE)tCMZu^ht~Xn45TS6x#t2=car_An`P-WG8SDtD_WW`B3>UPC}W$XhWoPesp=X$IbL*~ z&m)m9`}|h&HH1zf85SCXKe= zO}#&ws(q>YDIaBhjvD`7>#){x$Lqtt$yRDZRf6={@koF?N;Ydus_YuLSzc%I{7gLJNASiN$&%2iTyhw;X_9}&-UJgk#;&mrEqUb%35 zcwAg;{Tb)}K|E4RRK8bHk<7b`W7Q>N6hNU|@X66|#qO)Ub-dFt1O1*k#OK&ya z-~92}-%W_end^93zsY>movZGQ@cQIC@}w)nc}Yhc-^1&cTKSPW=gQBpotvLF z?rGaM)&7z?UH|prXF(h!4iX28gT;~JNO6=n$}uQg%yumi##H-b|M0VBf9z|29A!Vu zrnmiY^z@p=3CHRC{y2T&XW19C#1W2VKA*iu#`C^l9W1qMS6ePRQzy?omH6yy6P!0s zaNaz@@txLqig=2AqNl{`EK?q{?=medcRM%JkF8;Pqcr{Qm;R=-xQy8kD*vF1n1n3X zQls^mH`4W!>!jrD!O`Ay%})1u(U0C}edmqUxBXaUNXm7uUAZ3P(xbh{$zzynuGIYW zXwoFtZj;n^=HO^AWnz={eJdtSk)C2+)6%2Kj)Og|w?5Oe^so3{pN|hS-fm+k8wSMctdrL>2mh} zd*1r8-n)!$U+#~)A4}&!=er(`VaZ~$*i-B&cC|lub(~8Qlf>cS`C+`zg*a$@yz*N< zL*Meb>1KU)bKdS59)rbRVlT1F>CTgJvT}hL=65EL){#legXYCtXLm9=g%>P=nYY zZW1?%>%?`ge zU)KieHkdd4e5SVEr!928FWetawOvnD53TVG@eK75JtN-PajR}~xIdhsUgN4K8b8r^ zq7&oGzOPR5oOfEpWsgWd5?-$sC|95y;tp|#xLw>XHd^>Ma(h@KtK*y;H93+?}z@y~0Ubie0##_+EkPoIwwaNHp z#&`a;W9m!1V%*ETDqnipD|`MwNV`{$Tj8mg9Bv zHGaAAhy6vq@#Fr4=^BjB^;4 zHs<}#vS`;b>CW2US^Jl1Z?1HGxD3YkvwSVmvyGo^e2ekTf4BYqW!yid|4;ru42vz& zb#G~#bhGixr1PY=N-r}$PhMy3i*(Vxu9o+360Ha6WnJI?-Je|PT;uDEuQR?yx@E8N z^?tu7qq}vJL=Wpwtdrg<_WNX8->601+v3(9ZL#z2xa^ai?vEC^t}D{7ZgKecwK!Lt zE6x+=iSxzz;-%uHVyRdvmWgHJLUG{*_eU3ri^Rp^V);wOrQ+4%)nbKMAzm+DFWw;D zAl@k6D6SM&idABjxJq0l-Xh*2t`=8|w~4ojYsIzVI&q!&wD`2RL);-=B3>dc5toRS zVx_oTTrO6N)#9Dvo#I{MUE)3BJ>mv&gZQBMp!l%(u((OwByJWri{BH!C;mYEf%vHS zsMsJjh>wepi%*D8h}*^O;!bg=KD3i&IbV}ZA7Tt+3PqI7N{%k(M#ELyMm4o;VhfM+ z3w|}L@xrzC*<(97he;1)@~p;dZ}lC)nuPS|>$4hjZu8v$Ik$_q%M0h-XLtSW_0~!^ z&kCmrr)@tMejKqTnl{VdC$s$ikvLBKZqYaTVCfywJH)Z#SaE~6!T4Jfg2-Ls8s+Nc zH_C6cjA8l-`K!f8V-b}9Fw@h{G5>~x#ye>bb~C^7OU+aXMgN8PS} z_czopW{QEBC3gBsLNMbE^^d>s{%HP%HPO?>2~0A4rZ|}?6f%|b(2K^bpKn4+G zFhdx|a7L|fPoAm#$bjpjNy!A6xodCWX6(9IQ@9?Ih_ei;!Gwp zg+iusKGT`WEZVkTy6MwR-?n}x7@o9yc(UOs6f%|b_pHaT>__$Q{XFacPV;oGxX^D* zT>-f{goj}*DDz*wfUit3_pS!<%Tt#SY5u8H2aC*S9<$Y+lp z^rSa^NMitl7|bw6l1(n-Ii0Q~kxVaA=}S5Ti7|xXjAAt7$Y%m)GKHzkqL_JHLMaPb z%u*^?&JC<&wPo!}63O%;mA<4ikQhT4&L~DRj(jF?CR3QoEQ*=OC6uy|#VnyJLeG|kFZW_9v+_#DSfzkilK zX8_)t^ZRG%(izej(izej(*33TOZS)VFFizh$Q*ya(^VZ^#cpCZF6mo3bhdQ1-#!bU zN&Bj2Dqc12Rdv6i?l;Wq4f6`)@5JBDi8ovR+R>dFi@uW3nDG_Yv}2_y%CSCjIyE-S zuMP91YiZ6CDGFn*NJeg_q0!gX|GIi#SMTd{;<>9`|KG;#%6!FiY?aCaijQ8&lmnT1FeA<0HIw$-r1v%=?AE3;rIYE|j*?&_` z-HGasJl$F*EcY38dEb<5rnKgNCi*MGrQ~zxoRsJv#7#8tINQ0Nd$^xlc!*26fkDJL zokCVq!v_0!U$JRU<57O|FXs-w|FrM?lcPVgUmiIBu&p1({KIz(J{Hg3b7Wed~o|JvvOZreXB z`*E!Q`0TIwJK5)It61lA*7>Xcj`kVrOpD{tGV1P;{JamM9$Or{^1d(n{B3n?shi;Q>G)FQxDs((sdZebKU3b> zKAVmwwT>eZWonHpGA`FKB)34B3q{9}BFB&-$B@be%3oo)T-mD(FE#uH@fzt0!^;g{ zCtfdpQ69M~)w6O>`@?1UAphbm+TNml%gEEle%iOyv8kWq(z4Jr!_1y(9fq`dnPXr} z=pxftz82FgBhPZTm?m$!Y0fhoPCG|^3$3fqo7OV*a~#Zb{M+hS){naH^9^NhQHOQD z^=9R4%dIQKuVDRmHh#A4TDMkyxP8NIqW;-4I{CdTpZ6iodn28fMmjc(lpZNPSbDJZ zVClhg8rM5sTpJ!UxR9g#hG-`O!!NA!d#EQXf3or?D}S=-M@x^E9xXjudaU$V>9Nvd zrN>E++w*w{kAM5G|M2r4=7pcXFoyeoTYUTY*OqQO{F9d5L}XD$)L1WdF@AQRWi+>!pTExy*iS zzpu5=H(#yHGLeiM&K0MMQ^g9gLM#)@Y`@L6-)7r$v*|ZWZ;{?2y+wMz&E74)W~tEtY$kgbKZG{v^ZPrccbwvqhFQJz)fQKd7<8VsV%qutnVUq)~c__dT+MgYt`B8 z*iq!zk+Dd0+-Rn9rS+(eO6t{D`(@)-iB$UhRo-g+YLSTRm`Wn9Wg@O+B0ht)K9?Em z)K}dp-99kHIes9iq%*|1dLXH!GsJm*AgQD?#Cd!msjcVp4bt~Z-!FZ?@%KwVB>j-| zL(&gPZ<5|5y-9kLbc1w*bixxRK}mcKdbGE4h_*x3@k&5gupW?O$-DdG@6rgBZ#v#xS0V zOko;DTudofay2Wtm36FV0}rr?NBArMB5Jvk_!NCOih(z`wlR3p_#HgUE?(getM;@% z$hWKo6f%QiN^X05{O7Hgg%bX`A2HUNsQwRCUYLMxQI)4xA6+YOIgN^ zZFyn6!OhZZ`5O1|O&;d^yQiz)9kH!QY9IR~z4B-u zIhj+Ku)3{%XB$4B3z^rJ*V?|zq!;l8mh&ZU;VZkRtJxjDF7JN6%@6jPeyj8o{FrC> zH81mf{=z>w%>MQXdh%(~`G0NuUohD42u72~>72z>F5q_Vj55f@X+m0ZnwHt+zOc!UO?WCy!=g+K6D{zcUBE{RVu zne&*%MO?}iEM*xtvzD)M58vcrzE3@WbKLwlUDw(F>CI>9zpib+I>zuYPGBsjGKq6` zkDqRMHuJfh#azSnyT{*Tcr|xW%QtwC@9ZA`sNp!<`3b+^1zz1f{(lX>!T-_a4(9=S z@tHf?+LvMYXohe+CvyrDc8@>X@cCTGJT7AqUuYZe9`QW)DJf$ii{^!&oABSZEnO0P zcep3*{-yDiET0#z4Bqo^7vD4PnYOLQ@cZ7tbzs}Ho=NNEUg^c|TXV_9?Pc1dw#hHu zldp}^3t6-$FD&c+DyyGx85}n_4Vdg)LJ$k+1lEE_03lwi&?@_D(AP=yWH^g z+^{=+qv4fQwWiz3blEf9KEL-9EnkV{Vj+uIT+%-Mw)C#nf5o1(b{W5%>-Xffm)$>V zvvM~cP%d7%)p}@O_CjT*T;e+tre3ml9ou$wOV~Cx$^2)w=DWA8OcBM*-BZ^6_dUaV zPah83wg(-zf7!P3F?A2#XBzk3<&9(5e)+@Yjbs$LWHXkN8BIQ?Gl5C_OxrfEGv!Za z$>(izuBL*@&xhl;4d`y!Z{&6{N3d)X^mlfv{!y9Wh`V7i&?U#Ok24-_erR*YBRk4ZGuwrQ4SGvh7wIcU$SUE-8lB8Lp;E-wHLQ`byHj0-40{gr>fdN`oBo zDWH%U6jMSOPqnrv>P{kUmspDQYvYE$dS4R2H(xw{yf_;>>sPBCU5?|InQb;3{ z7+GYK^Kxt3n<}jTk3o1Gam{ zX8;2kM2x|^#}6?)jN!Y}BX`G9tud_Mx-dR_cm8O@Co`5@#xb6JPGIFrdt**#sM z;i;Uzr{1P?zdd#c+4c);bCMUtE9XRPZ^NndC4E8LviCPUkQhT2#3OT+8*X?MqZw=3 zFmIgUd?s+Fau>;)Vt6XknWbEqS8RA5mn>+iv0uN3VEhjk1XC!Yl&e|Ex*xW-FKlDe z7WI4pL85-Gl1U+rOk!k_O%C}KQ$iW#RIq|7)=*6y_p*`AJVql=v6E(A=S|+?@NEkm zf6bp1(#Rx67TL_8m=ek;r-Bt!v4(2uxR=d5Mk7zr%$vMLk0%!dM>2?sOd)Z*`IAB# znZ(E$u!5?#@nPK^`4=Sq()>vwjZ9)>kxdTy z6i~?ccEjj*v7Hga5s5LVv^WH>>(zLZ5$5`_tcMHFa7xSGOo9DZ!uL& z75j*N#J*x1$7I84^3usLoMBr1m8XzN4uup`&KfrJ8i(tbya#<5#2BVf%9UKrt!$uy zC;2N$`Z7O?<2Z@)xM-yLk1}t4p3jngPW{yJdpYLD$J{COplZ8Puukku>{^X#2H?~i+ zcXTYVzDOaBOk!k_O%C}KP{<65DWQyVDp)}kYpAA8ECWt3CFikH;+%EG2u zw)H!RMt^I5zc)XUNg<6)iYcLtaw=Fs?Dq@fvu}?C*@kn-|Gm$2%WkiTuV|P2LT3EF zb=@^3xZXL$g7I(oeFUa3jUq0llqlnmPMlt4%1GfF%`*Hhlka*Y?K{6?%kx7g! z@~Pm8E>{F^ihqb+5&Xk&x5KXpj^J|);6zU2OlEQkOSqO}S-?cozNL=q#FccGm&()X z`#HZN+xS9CSVJ9~Y2-C}n658F8AA~d(7?0&iyPI`hm)AaJ$#>+_#Lk(GeccvtRRO1 zim9TSjXcIqo}-z=O?M=N7{xR$rj#q$z$5J7uYAh91~QUyoX1j@v6hF~##8FPm)E&S zdc0|;(2uLx#FIpgJA-dh&&_;|KeNmDqr`G`{D0=oKd`5IfBa{!yv?-qPHS6h_kFj8 zmWDA&OETf^N=RBlG9kax2pf|&VUm_4328%;+=V1ba>SA!%ax>ZU6Ul0+^*zy&b#}4 zJkNQZw|C<6x%d0I_jdny^msj=uh)5<*Lj`S`SE_Y*>Kzhxq2HHY9=m6Q!k$(ds4H`o_G=t{Q0$M^Qw1U>q2HHY9 z=m6Ou+joM_&=tBtcgTSr&=Yz?ALtAHpg#WL43Dpo$&d;hr7UV)P zl!FP?5V4SY$bwubhH@|$hJL2lyWXmb_cKV8Y|H4XgB;^Oi^09?*XI9l z@BF{qchBC|TQC2c`TWJ-s{voFF=j?f%C*M$3cy#JGWeo#^cXX)mKrHnz8peSyo)`+imp~bO0Svw*489bo2Mr*V z9E^dnFdlqqX*2Lgz18t!lbbxH= z2%VraZJ+>rU7;IvhaBiZ9r$`eZ|DPkp&#^zfiMV$z%bf^Z#ag6;bVA~jVWXQJkOvl zw1WydKhGBE1AU<%^oM~k2!_Bg+5-D8WB+B&{_}`O z!YFdU-#6k}1LI&kOn@SoNImfPjmr4@Mm%$1Dolgv@IU{3qw}ppo-xb?_-4Uu%Ck8) zb2vA1i02Z6Z$1X!0t~(~48DaJe2X#omcUZV;9G{lw;Y470)uY_2Hz^YihZqSU*Lzh z)#TTZ2j5x@zI7OU>oNE?z(&d&*>)4#f`1da&E&vWiNUuOgKrxK-wwQkZK~J?{8i+3 zkptgu48A=We0%X;+U}$6zW?#>MxAe7|Is|37xMYMkk99Zd_FJa^LZhk&kOl{UdZSD zJ)igKd_Fhi^G==5yL>+Pi+oen$~U9H4{;EH`j7@0kO^6k4P77y?uPy_6h_vfpW5^j zO+Vm=I0!&}NP`T>ge=I0E|3FvLw^_wBVjBQK}j@y*2%9bJIMFB|9|kE5@U*COyGw& z2ta*EgAB-otQhtcOWSzbf*;}_5Kle<5+Oi+67}GRI0z(>Pa$8AJoq6F0#F~)AOkY% z(XIjQQfUYNRN{vDRU0|3e*xSp=`S6cPn8o&S^d-<@^ZgqOW-!p9&vuT6N~D^p+QdojPv_Y&9XeJ~h? z!u{|7jDQDWG~~lrD1?XLVJL=2U^0}zqwp9!4o|?7@Dw}^&%m=V51xbPp`3l+2ZLcK z+z$`H2zU@iLq3d!LU;%shGKXGCPN843Xj3#@B};wPr=jh3_J_-;5m36WWS5x1;$Xb zfOl=E4be~s{7@HSAQs{w0TLkqNst2dpaG;pLr8iC`S((=AHM@z;9YnRw!=RlPkuLz+@?-3NnVDBKSZzzBE{MngV~g+h1;9)@Cg1SUfXJPMD&A!_f-zJuh6={u)mJc<3dXXWu~aaY3dT~wSkBZxOkFX#M_@9Pz@uUH zk5T_PxhFz7+4k%)a=&H#Ps20tEX?EFJ;%8NKg2-*>O&f2JV%@7p&S;$3$%Zc_TYy& z2ta*EgAB-gk#;Y^%kT$yg>6={4fr7r0#JV?b+5u}@H)H!Z^B#fHkj}ZY=L*-J=hLA z;eGfcd;lN9NANLx3V(t>Lv=w_8~*>%dGO}eb5&p3{)^%N%Q246;S1*AOXdLl5cegy zuizW<-;xLax5R&ezryzgRb{NPUz>mNeEe_o>z#{mU%=lGnhY24cZ4Rx1^g|c$#4OG zPiQh+z~2;_>`-^?mW4~yWd63$mWeOnSmFvCKXyyXN}Moui&}*f$MWxz-~jDj!%4(z zaLQQz{a{>=?bhN3W4HLq)t1Fjf1%p4h`+bK1>d`fza6!hzd7{+b@=8b{Ou{qSH8&K zo`M=nG1PbomQjWpFY`C2pzU%D9rznnz6$;(73Bu6s4Yie@e1~_lD|9nD%-5$?^dm5 z4AC50x3S^#@t-VjXLj=|4!wbsxo&e&$g9(U%!Lz z>#<2(zK&0L)TE|?+ul|VQl$)wc65t4fFdt^SqWhdV}(t{9Uj0ihqxX zp9^}6^8t%Csx6fpn76l?SIRXvF}HB@JJdnVEyU2FlD{AJuG%vBJ&pLI1uOa86A!}nDxioTb;>KgQv|W$WscQz!p#`*r z%&}WGF}AiFsBgvEGZnu#M!7ZR&6GD&Zo`^mJcr(;+?I97IQs3N+>Y%#Q1^zKA^Y#Q zPVr7Nc7g2w&^mJLzu%kc8QK5D^~C98XR!Zy?0*LPpTYj;$o>^`GI4{NBl~a5{x_MF z*?(L1ziBgN_P>z*r);In{!{o{YYTVKUpxBfFt!2vPGg@9*k672#lIN^&BiumKm2LO&f2Kqh2C zHgtg;xEuPzP#6hgp$JN#6rP6puxK9pd5--&&wg;!^Xv!WAOQ8BKj(S!&ez$lN;=AS zTfYuxkL90@&HOU{ZZ}MZ>F^ZHg>qO5ufQ633pT@c*bN`ULHMGKxm*MDw_ybOPU zS70T)3a`QI@CLjIZ^7GO!aJ}9-i7yIJM4t_;g9eEd+lA=32(vMV8T1F1>S}CU_0!D_u-H50elD_!N>3^{0aUH)vU$O zSc{MiT_6YUhW;=VM#5Mqf)Xf&r(r%Uf@QE0*23FR2~psOI0!&}NP`U6347ot_!JJo zmv91pfXKt+%%*T9Ooo=w5T?Um=mmMu59+{EkO-H-t#A|MLwD!^6Au56*F%-T+W!?X zFXivTCqOc!LKA2KH$pqO1-ijq&=>B5;V>G;fAK#a+dpzWnNdeMR}cpQs1Iq70hy2m z+0X@Y;BM#-Lt!M0g(4_{Qg|BX!y;G)D`73X4VAF-=+DMnW$^P4zcT;GJe{u%|E4kX z2XPR9`j7@0kO^6k4P77y?uPy_6vjdklt3vw4fA0UEQ6J>7T$(R*a>^!Q#b@8zvde5 zP{{w=g^th(Izw0J2HgvJ7lB$(8=|2O_@OSuKrF;V0wh8Jk{|`@K?6vIhL8r0Asw1Q zbM{daYC&y?hC1Mfx)1}g5Dy8E2mwff6sQLcAQc)y8Z?G@M3upc{zkI0!&}NP`T>ge=I0E|3FvLw^_wBVjBQK?#(?(=ZO%j2DmIr=wY zMlCI@YQr`DYjKd@`~7dh;Adn0!!pg?M7fOTdtqh#@Zk zNsuz$H@e<<-#Ex?0IARr(r5>HjWOh+VFY& zSLS~k<3Ceh)tBS>FX5jVx7W5ZH;?~6yM+Je3dt{0h6w(jZ1o8K|EpO3|LjZre_7!{ z+VKBni@}6yNap|7Wo=ofiaZ%8L4FUk@W)Y$rV$M zkbWg*pVf?~n!b|X#2YY}Qr<;*1@QlltBH$+&GaLEY^2|vK%6YwZehQh=$HQw9l>_R z(l28wrmu3wo?A(uCa_I0edfy8sLNVQ4AqRWSjO`{UQHcy6+xR^>T;{-ADiqem;EG@ zFPDB9PnN)btJz06`Qlx_`2939X{Ke`0o&}@$Ts)Xx6A{bZ1cc{xYRORD2v~bw#*r8 zEpx{R+gzMxnaw*}=80CeS^EXsocf{7?`&J<9NRX#eN8_v(C#_g47_BSZRxLDq-Dm& zS!O|kW!BqinMWS5&4u%9v)^9ZjP?i3)%7fM-Fvn(Oep0do@7g*+o#+Es7LeOC|W6fc{YHZ7xr;%@d1lvn)Dj4(k-;_o6Lx*wvP~cRzFGx6L}M?aGK3 z8NXZ)xEzWlW_@OH4MfP=gkpj9YC^=T)I%;5Ll%^S$-2yajhy`Kgdjh60THr(*E;L2 zGJx-4SsRqfrjZ3?;mxLyzc);1ICvG0joPg8Ak)+Ir62V?A+ z5j3+~1 z^E{9>+kXsejXCIg+BOeA&OPW^a@*be?02-;&AQ8E4kwP_82-SVzGRts6`Wh>168lE zEgti#WiDOAzF)V@zHcxGZ?QhMu>Rh*%&*_!UdA{Bo46McPi3vog(a|z+}EtdhSQk~ z=I#V^e3$Es^E?$QVG_r+jN?je#(g=1<7{r3C$F{4x-Bez*U?4pnVq2z{B%A0?!a}^ zietk)aCU31IgTagcFxi78Q(4R0W&GvohVLB}M< z3CpRIXGaf6ouy|_8st82LN!EiuTO?7D2Hl@;NCCy|8g*)8X|ZOBtsUIgDEl3gkmTM^L4{K zz`38>llkeznt|BfJP(LF-_8BL59b$_<#ONd?{ah?_klrNFN58C;)J2h%P`Aq3>~4y zbgr%8TsN>UkN!qlX2K};0b55~=0ff@JMiKH)&X>2KW*;i8l1v;gZ*sZ;0gMfO&!@b#Rj?FvIL#zjAHi7g0FxwY#T@>>SgS?3x+a#U~Z~{(& z+!vRP3YwWynJbN~k2=#VhggoI*=E*UA^W0y02-IFhM{5xAJ3?hSQtKwu{_1OfLWAhG4BVT<{UEj zZ9&d~xRm*q^KcBR;4tie&OImcKGe31`GX#dxW6rC4qjlJ7cF!160TExnt1tA<{I{K z{yKB+7H|&boXS0R?OX2sG;JsSe#?6J&OK*xzE)gfn@K6$Q+R&(yVzzc$b?du3rk_z zZMHcbCf#Y9GkS7u_H*w+vH7;yq5z7hc@LWI1>j-?D)yu+4*3DpoG@3D{t${_v%o*}T7d+~Bu&AZ3mIIex3 z5eGP@eWH2p^Xy;9xs_|NG{!b#dFPuJYn$!jIM0{!UYAJBJ6LVrx7xrMNKJAHT*UqFp`cNBs&|+=}D4iTBXfyhq()n^StbYpc^R_V=K>#@bDA*H)|NIsS#V*?9x& zY#Yyno$hC=R(pBh`G|Wzmd{!8{@D)ryj7XSXPaComd`j)4H10SDF#zMJ3<7Xdy?g| z4-|t5)eynwpk%0q2>Cn&#ZV3r^0^4g!Gz*>$?^Fo8FHZ*%C{QM@vY_As33mi}m44iU63hH}{svUZXCBmF=Y{f(f}F5bvQ46hk>w zgSp2r+p=DJLtiL@VT*VcF15}5FYu1CjPC(>cdLXtlxx1toGs_NsNj6?Sz*^o&IL|g zZJTvprH?i4dw;>}oM%|Imh0dRuIo2BpX=P~;soWKx40g-MixU6qzURybj5c?kM3(t?|-E9}^Z8z8F2lNXY_PE#4@J~6Xe`cT6tcTB7zfk)N`ajD1 z*D?A_<{ji4+gt;mKz4oJV^8rucAD|Ct$g1h(t?0w{Flpz~=<{?&A=j=~8%Z z%6B00yp-=j=H|HH3$&ikGahDh50`s&U9K6qR+e$C^cci7^d;XZj0>8zCj`CkOU`y> z7UwY+k~x>TP!1*(Kjfa*V$P)r$(+Y5IhRll)eymXO@=HehH@|=nRA<~&vWvJl%W_* zh}cU#WI^s;!(7L^K&LD|)7>02XS55No7(ePwqwv7bqk-__|BqbH$I==;U4qJzCklE zFle5*kMDwp1kJXCgXTsY;IrMVp+R#QpCv2!Jin0lqJw;9NGjmn2ByP)s5h2(8s;Nm zd}ux@BN$T_ltVR`j4R?Ja!?G_Qr?H5{A21N;uDSma-kSZsD_A7fARg=+4FsNTv^Qi z%Ap#P*;g)^W*TwrS^0-jJ~xjbsVq5 zt0R=rIm%Lvx){b{JQy#jZK(^CGP+)9sS0AguTjVGv1m)(OMdZ1mTJ@0Fb37J)QiL? zaS`$2i!JpHac#e)mJu(ZGox7648C{DeD30o&u#PfLWm@VK?M~gmd=ZatWvK${ z=iF$i59n_-PR%ilLpb+hWejO;sipW7w&-`sO_q9>cpbjXuZ)~F^v8B<@QuWEvn(}> z?f2p*h-cw_t zIQLG&SdAxna_jIH>M>kOm8C`&y;z7?({KOetL zd;}jQ?mU|D5--Cw?>3CqV=VO%+s(q41eCD~HzhwI-%>+}zsAe()&k~*e5H1m=rE4+fcuZ=>(1oCp~Pb88{EG#5?d#+^~rCgy-VkeGFq< zG4q(LjG6d5TxXJ{E>B_I;tcGc%>3bL_-Wi>ilshgJHAIy7V-2F*721b@1v|+Ja8K8 z^B%)k_BiXRo-%Aak9c^grJB`OM*0(+Cp;04#XsRyc;5_5y@$s?X{pG*tmB#7Uvc0m zOC?-y7;|y+2FlosN8n?#SQpf2Y%qw13&V96@GU_d~R0}*EkL|}gTEzMxZn4->ONdwC)x|(#y za=-l}=MUG}%{u0I=HNXWS%3Ih+QojreSrGI_*?SF_OKqv^Bsk{tOeH_z8&}5%lRC_ z{Tvq(Z~Tb)F`55;+=s}w{)BnGP8sX*cH&N-a$g`W!@KdA{k)Hm-+(V~$^Gq5mbwnF z#n0el2Y6oKVSna4<2DCbx7RDLl%(f5&N z-!p%u_=@42FFYC#I%%nkZ{$4&+qBz;FKo^D@iTwmdj6jK3+?vcyUDLR#k_3dJp91@ zmi!4E^MGNrInDbU{j9<}X;+26$AQ0Dsx$S+@y$2!Uh*U7mF*8$mfAvGX7k*jenyb% ztc@~G;J*>i{E7Dq;!p5pc|2GC&h<;YA0NfDl&$Jy@jSS|RxR)>ydHn&v(;wWkE&^_ zZ;AJciTg#`s$W~SuVt%@3f>E&Z1oJ|D8pGJc;CRQsP9?ZRwtz$E+pULLR&@Ntc)2r z10TV2$@h%5RafGrcnxvyi){5h@xD5?I!)a5Vq0}<$NIrz+H)Q*wN+vV-a{_4RZF}N z_riT+ZS??Ng5Ma)dqljgn*2@~H7>VR7d#a|fNLh$>aWxf!uyFUudvlAd>UVr&GRYI zRyhxH-}sHK?jYCiS-e`~A15ih{2i247K>f+yXpH8yXZsJ+^TH@pQ zG;!}_`Xye73-Rz2TfKt&UummjxLrN+@9>_A$ByE@k7GLWzER&+ZSi_M6!&XjtHt==4M7*p__#2auv zZqw9OACaGizs9Ya*=iH{iP)0*3|lqq%zX#1!)4dn>O*`4_vpfN=sL!OkK(7g^4zj9r^Pab#Zz&v&5IrKYQb-)d>ZS^4j z1otlBJpG=2h!^75+ZaZ>j<(uHJP`kg8{T58Mt5*taVI>i6W0aXRpLD2TDNjN;5qnB zoYtA`@Bw^T4)42NY;_G@hdbl6uAEmq8;>2!`!k+O9Dkdwmf#h5E_oa8BktV|6Hn=G ztIRCJNV>yTbMEB6iC5uu_~LPfQ6tAzJBd5u=ETG9WWIZFT(~!G-h=tZ>+ouvewVGr z({4&n+TX?c!DH~$UbdQtPvfWq*B{2jby4wvguqj_$?# zOfJ_qp4HD*#pIjaYpchJ7vnl@xnK6T)gOuX;yu()8(^#W-pV+HPY|yk$aPM;+V|ON zH2H=&emvJ3t|V?Z$X3aB0i za9hRQ!~5U^+y`+^o~>#>#Cy^R);as%hf|5WjXh zV-)uZ;;py?aktU7+DrU3{ww`;8)K^?@?&tV3A{Juvo3MX0$WApa-HMO#D{Pz;(B8_ zetZ}glJ78%{-qt>gA)sFb@{`*M?Yk%(tgbM!`#Plog%L9dzJBHG3yJDoXEPy9Ufs` z`*U6=aoyr!liAMz>Zh_Foc<`=<8jUVSVy=yK8<@(-+Ko0PrL~ywxgdXZS^ei96Xcy)S28T265khig6Op zz&(gh;5^)67V8$zz=eZ3kI!(Q8^XBeu^uO~?&fp7&~N&4wz_nvGP3b5@(b~G#BCSY zs{13n_dIW_`-$h{JmQ=(oBZpV8F&ZWNYQr6ol*5^yi3;m73 zU(l`s*J;muEwfeY;oJ{i=Dbk98#f|fu-sNt$S=cNapOO5y-qfa#0u8Y1LW~=-24^h zgY9|G623wUAuf|)kdYj`UKOUbZ{th=C z#q)Nft=i$ExD@X(dEVf0n|NMK<@*Wz7h)Ut8qMdP&8!ph{VKUH<70Rwp8qb-1>AZo z*YOzMgYXx`d+>VVzV9(#_&7d|CvM|?;8DZakK5*RU2M122;5)?>lT;d!~*7_ih07z z@tb(|F5aUg|3~ikV|gFgZL2G$@jS(^cHsM(4>-@{({V2OA$zz#5%0k#@v;w@SMrH_ zZS^Tm`H1%o+#26Ij^{3(gR}Q>pWDiHiFXsHe9Zl=knw%WeGN~*A3VnU?tWYSfLr~E z^*)~Ueb81PG-^Pdk%6gp0^?s83 zCa&>4dD>4o#d#oJjjM3l4;%Z6$AfY9-?)F_3cLz8`;q4^?fY4_ znmCE`7UaCi_CML`1>*kr!Wn#Dg0~PK!(ZWve`nsv*HA%~Jem6J2Pa&RuK~Sy6 z4Qd3ruIUGVj@RMd+gP8zpc*rU^H(#dp2D>vgK9n7cfzj_Ps4kNtMGQ>nze%JD?And zjr?I8U&8xbR8Td;({cQhhOr6XLVOgD!v(d2>Pfr?ufu5<2GvO%A01Q|PGwy9Ivjmb zP<4_R55`;Z9Quo{6I6SN<1Y@Xj*s$v#U(-2XeRTHXW*rEgK8BXerZrGr#?C+sD2=> zz*j%T{pYfvIzqlT{ylM0Y*00s#&vL{C>QVct*pZI*#jJ6I8XI;Q5bN;W3SZDsBe%!^T0?9B;-?`f3_fH{e>$f@(b8h@ZqYGC2RwupX}ss)CuUpB8eycy8hg zp5ptS>w@ZbytpOvg$G{G@#Bs7u2~#^tDwrmeee}?cz)w2h_~Si-1f$xy8LP0k6Q;- z20o3)(=MeA>z+6}E2uueW%wxm1Sihse$zInTH+cGx?{V**^!FU| zg`48jc-%a`ck0bN5;wj(sNN(Vk9QJp#(Rhx_u;rY@wp!VKz7gXwb#)WUdb?#-o;y(BX>gx_vZ8m*Sbk9fmO9#53@6;Dhi`8+s=^@f+^Gruoz{S-1E&+~l?{(-pG z_@Jt@g!O~3#~a574gOrcVLTpX__0!!8$S{CvwW@ddPx1YBC-1*L5ojX6KhJDU;l@NRGe5)JIo#$us&e;z?pLfoD zQrC0m4?KPDe8KE<=j(oU?);DE$@9A$q4CIdW!zTVxxVCjapK$E*vrdxajyKSE6<(Z zG4R~^^hM{+uU&KQe1P+NuKn)t+2_nJ&peaAOpeQ_>$H>hZXBcS=4Bn8D=+KtT=`%2 z6XW#%%YNMaFZ*%xzw9UWJpH)&U-skXf7ws`dHQklzigjyp7w73m+ceJ)85VhvVGt@ z?cMw@+b5l;y_^4K`;_yvck|)xW1aO-?-%XE^Jm(}o@br>Jpaq~XRimZ{n_W;%b$JT zf1dwk|7V|Hul?EQ*UO)Met(|-W&dZNU$6by=h4fbeZIW>+2}t?)Qe1zngpm>W$a|?!4_EU^LZnW9%mmua7$P^LmM8JZi-N z=YA2uR}hP3JF)a9mgiH3t`|$aSn9>nPd1iz{ta$FVreIqc4DV~ldi{3J$CA`)CY9E z*cpeemsskfcDdV&rCu!Ci)9>g+)1mBI`ibsLt`B~$9rgiA$f%*jymSX;xdWXj&|(V zj?)fk*Vj(d&d|=(&eG1-?xLNeeYbXh?V;Kuwa01~X_si1YCo+#Uwe`EGVPVxYqj6j zuGHSCy+`{~?L*pMYM;>lLHj4{%rE~FOPr=XQhSkhr8a+)!CB{GX&?B(b*6T8ZgZ*a zY&Vfu`V&ikVrjPz`;0ut5-UDui4S3EFP3_-_;r^ z&CeC(=T&na+|AFv!fh{>?fE@l$Nt~Ad9mbUu=KZ1dso1X`5i!~p5HZe z`j^jn(*9&U*Om2MCpB=La+TXIU0Xi?Ipfynt&h%c*7-@P?l{EKuEo`EEWU!cJC^)r zofk`-n&vvXkvq;9EcxY)-R*X3e}d(>Jg4#bQu>w8nUX)GPF^f=D;oumPL-`?edmF zb*}fcbe+KW60*H~ZzSytTDjYcB|g^9^|JP^4|Z^Uva{PxEbUHV=||RqSiV=1dA9i; zN$Mxu?s^@TdVWsD$#?AOwi}409se$ZlzbW*Lv7>Z7kZoa@I9K0Q!H`(9M`+Gztb+8=jPXHC(d_ces|W{-gSW? zmVUagah;=mW z5KBDuq-*{S87KBzu8(T-@AEkMjoSR%I&76^xGr!k<496LXB>GK1fBM+Y6hKlV%bmC zg+XV$pJ0jCU+kKHAH>;CzSop|<(A@vG61JH%_FBU?7$=LgnB zN9N({*GEUrz~5ryD#LhdV|3&!Jnx<8$anF{&E!-0d4-Sh)rOH(86Ej7-v3^7V$Qg?b`z4$)sw7?9bX3VC@!v+3 z7|ZbYqe_az14ovu_=tI4Sx~Ya_c~ora*+{X+c;*+; zC1onYi28C|N%{r&n{g%O*uS)}q-zc0oWhcQ;<>g3gSy6jQ*?gN{krlSLc-!VgH)E zlF65`zm4Q$X}2}6WE$?jjd@FqFtU&2m5#(wl@FHA#Qw?$ON=DqWrZd8rbHNDuPZFs zi!aL4gyDPSl9D1k;vL4HPP_MTJACc<5@S$=abxHFl3hcH`{b7xL-FV1O1eG} zVWd4jZlaMFVbtg_exflog5S@g{d($q6h<1m7~hwyzduG8TfdEt%*2EL5*;}mPy3Gi z2N6cmA-pfbxU<1Ukz+oIFy3u`QHgPs?eEEtG)_bqubzsIOvhjT5FPnPeAJ@-Un7if zYi#vYM(r^DT%l-cJdRxaAWMmhjol47Sbkub%if2Qi%5zMaTQPVwWp? zJ;?Xau~93YZ+cQSQugq2;yB;qQJ3-N7w3B-$}1DsJu5!DKK88o__N}Kv*N_F;=oyP z(phmzcpU39>V?JO`;I+ptl{GbA4B;5!}lG&-_Sn8_jjq!xZ2zI!mu*=Yr^uOGWkYf z`B0gBldycKOulJYK2#>35ta{?$zL0m50%MZ7nTo|$zLCq50%N^5S9;>$=?{350%N^ z6qXN_$!CS-LuK+ehvh?M^6kU&p)&d3h2=x#7@zTbFTXUbO#55BJm)1;CVy*KK2#>( zB`hB*lfNx2A1af-JuDw8GoCxVJmU$KX@94eXFQ=Y`MbjMp)&biVfj#5{wB4Tm$Lk= z<}-2apOt@J7adj?eb#pVusZ))b#=q)f~=xhxaLQ zKFHsvmcKjw##wEpPX0!9aaca^v+~dT3!K$9C9JLd?d$M;*9)tYzlj}Q*C4D;{#JH) zU20gJ{0;5!x`ttO?%&py^X2#5R-1KjtKWBf?Iho;=ioJRKZn1M6fMsQ$J4a=@kBE! z*2z02?^yDFofk`9Og_nXdo=rQq@BUvUX1oFkpB8PHq{{469&7Uu02;<4cF~Py7s&F z`6f8AkLQl`=RSYr8FU7pZ=$=+&{?iWy5`^GkNzcd$o(9%%UpN6vD!u2rP|B1o6d9F z-K5=lJ$P|! zSUEndoDfz{3@Zo1%1L466tCQzXY_CBAL`0@ym9KB#11k(os(y`pd-PJq` zbQ|Z`XcHf{U4q^&AuN}ubBSTOfX)TNa!ERu6qZZTxfCy#!m&tB-UB2@IacPEV~zFZ zJgl6^SYtts+j$?+{YXycLoCPTknSFl3uSz5+T<(oPY}xTGKE=SFc;p0T(I zebyj%E9FMyZebkpdc5&^ymDT>vYc11Ed9zD>T1h)CH9bUNm<4vmT`$?Tw-T?J+Anb zjD>wC=zS;Xeap7ekL*J%`w)A0_0qTGq;IkGouK#}VCoHa&WlI|}ltiL4PpY$PPkv>v%ACi+kQe-@`J|yqsz0k+6 zRmi=2epoq_=iVI3JNI?no*zLD6C zm%P_MKb{}zUzacCSdwP*W8T`%_QXCuYCGfBWhc*%9f$I|?Bq9-XKtMKx*W>0|4^PX zYxin74>(IK`)}+ksf`p7C~c;(yJp69LIY&}voAw&nwh47|9-6>464T}y5Z|Ed zy>`-{wDP1Z@-fF_Pd#~ zdtEg3=`!=v6mDUzu9Y%#Eo&ab}#w^-{)ug|^p%oWE;ndmVMXboqBp*}s&@-Np5EUD7J&8oo~Qx~;4Y*`^7W{YlyB zhc?%DRN<54qc!v+KR@QJDKsnY!y&x@%A@YekOzdgjH!i^FqL zr}H=Hb~muk>)~eIpIpPzM&?=ik!x1sJ9R8`exsf<$838e+sb%vWE|H>%&~^9IbH9} zpR^Gq2RCVF>3o(Kv%NgyrHymlNtrgzyz6`yox5GUmd~T&mA;&Nn6I0h^~2g?zCvZm zZ}QEwBq!!LZUUKykSX7w^EXLepkG18Ccas_y*{6kYY(?-BzDfJ#JVpzzc)dbm7FK? z(njV{_S=hcmcCy}AEC0I1DP9Hk1`L}P|jM3S#w#?NZY%2$oi7@&RokjAm>*0C*=@c z-;$#ouj}MEWSr86H`lU_GcIzs>pGe9ESYnOJYu1(5LUfyNgdu@Ap2a$3p&o-<*H!s_JWv?G;@AY%$ zoua+(%sWMU=kt=+zkIIs`d{d7>-4Y7PXE%M*It)Hd2e1MPuV%nrIck{8^X5J&>UPe-t#bd- zZDh`+&Vh3#_r6;>XY$VKl!?1YzhY^}@yfHMOOnsum^NMH+`>(4+l9QG2WjWr%h*pB z*_X5jrw_j`rn8Ra9ZB-?j&z&8RvmMEw}m}BL*-E3UCVCXUCVBn`C{He(LhTi7*!n{zF@*LG*X2;&y~f=3vR@gazOF*;-D}Lv zb3Q|P%A7-aSHDiqr7m-gbd4l;d)Q|Q=b6u(I`06C*?R|Y-UrBg?-!vwZGKiKZKO|V zFZQr>eR!SM-xS>!cG`)(Kc;)cz!jDJl!|S|pcw_g@gV?L{#^;Sq?A7r(!x_8td4u!djU#-YT%%4K?2O&p zzte|buMO9H_w2;(T%IY1^3GUv-Wd;Nj%kT(C&%X5IUb#Jj!Boj?WL`^z1P-j=e2R_ z6P@ua@VWMRrfn$aY^Up`%yIp!&N)t9PoJT>u>QTZ`?I?6?U>I{oioR}KRwSss|(*Q zd@Np`V|Us+^F=>m?|5|CIZm(a^$`|_>b>KUI`4SAa`<*q7q)*{C!sNT$0OT?A5T~u z+Fy8|UVq-$z4M^YfwPS_K5uN{sRt#zf$)4)n%u>*N4o3^y_WwZRcFC5Ku`LKIhw_Xwly}BVd*;W<$vnw6VsCq04&}Y= zCGTzTwRPr$?Y%ZmeJl5V<-=@KrtR}}(s^xXTU~ax(`9EaDYNZ7*+%y3nQcNjZ+kti zP~PiH^7IwTd;NNS;3d+p*ALq{ZN2ST4^Hf?3)*?xbH1HCcD9%EFa3zUzNGB+BV}(} z)`hdJbKmDXfk_g(_IY;3r*lq!VP&qtPnI)Srwad^;V7>YX{#+d1P5 zD~E3aI9uk-TGIb(b0oN0T{Du6FdEpch)X;`g85`rRn{-c4DWV z*x6q*-QKm&*FpF1+KHX^#7=w6dajUm&bsdCdpU3YH~C^dbKOGw;ActXlYEK&IgivI zBrmRU*ypRQ<7n+V+J4-Fc4FDy&-Nbi^ix;2i`9N^t5L`&{$6 zgjmLq=;VFAfOe90igp9XNj}#;$Fg0ju5YNFrrj9NXYAq)+H%YiAN=f0os^|M-N`rb z#SUoTOBm1;H^qJ&@5^-JbnM32I?mQ{N4AL_5bzDx&eQp=1Fj&Stq0?B88eZvAHZHEMX}Gi!9O z-rk!dcYfqt$=IY1uY9IocYdTVIexLM8ySO?y=~kzB{{DjZ;qu;uMfFDNFUkym}DKu z@yNRHEPY74)v?>Yqtiakm&3I<@hiFRJg57n(B}c#Zlz4z+?M$2YQfR5?ywvl&P*1k?9V8mAiyEFIj?;E#jn5jeo$oDmT&Ed}=YVr? zPwdaSa}Kg?4*G5DGd1kcFy)q#U(OC|!E?>I`HbdEo$K^GK35&|d}ehp z*1HbY5u10LTGoWxQqi(D)RrP=^5(teIMf_$*L94+nsE%)iaOSgW0=^~s7`9cF%OEq zZLEW$KPYpOZDUcxvt#;otcC4ude(>Yvp#iFpE{`z=Vg8Bq&~|q7WcReRtn$5=6Nhb z|57pIn>|v)^(>R;y-e@LjKR+Z8)4i7$J{69zQgDH+3{YQ&mHESWxsuTUHp7vbUfcY zH`H~EneX~a*4oy_y>ne8Yr*xJn$YJv&Gncw!u7HS%cKU&(T8VZIgDqLF>At@`(F-g zyKjtd>OdWzEp>b*CN}d^#~N`B%cV}s<(X5*b+ezzoAoW1^-;(5EtmDJll81a8=nzl zo|$zpj>C5D+q9c!w@&8n(3^Fcc8;F|y_t8N%)3tJT_^L_%RKcmPrb~u5$&uOpBL+8 zVl)0mjBD;x)6R7zUr%()GHIXAg)oH_f-qh3N%$YI1*#p*Zce%r=f;&UbV>*WcFO;d70qFYCmySSOA}w&_aIx5GE*lw+0Z zy%;^~%Koe?`;%>b+RhoLbK!nD z9%uut2b*oV)OefZoC>CX#>{JNQWK0|(O%zd#hYe;=Z+_4t3XQN|Z8b5EcKcD9z zc|Q)x`*BE~%OR=FtK%Zx;79CZ>P&LJSM_|RozH=FF}b$9sqw3N9GC0$aS_+HQ+vI~ zHNE(nlz(3I;?Jfe|BRXsa@~=P;79DsuVKA-KbX(Z?@8O&*5>TAogtGm^=qr6X)|9J zvyOZo{F=(JQpP(tu7@7qoCDU+^y7Zo>SoSP+gUgL`Ody7eP7jMa^3v8pX;WE#+c^9 z*CE`ykHpW!;@up<&%$!K`rZ+7W&X?M>L)A_4i=6UmI)^bD}}YfS;C;O?|2zk)93P! z_qpbd$M^W8-FK(S=LmC!y@f-CV}!*MjlQp@&y{nR&$SXZKsZD=N;q0LMp!1CB%G|d z_lb>_9CvS6_<iMHq>iM{fl)_NM^Z;pM^fj7QAbioQb$rpQkMXuj--yHj--yHE)hl@NgYWYNgYXD z5{x>MI+8k)I+D5+7PYHH>PYHH>e6AgLh2Y(M^Z;pmjR=Wq>iMH zq>iM{2cwRpj--wZ2&v12QAbioQb$rp24Pt+>PYHH>PYHH>atiMHq%I#u9Z4NY9Z4NYT>*?bk~)$)k~)&Q zLKt-I>ywI)RENngHcCPM^Z;pM^aY;qmHDGq>c;-sq@3ABdH^)BdH^UumLdY zNa{%HNa{%H2EwQ#sUxW)sUxW?g;7URM^Z;pM^ZNkMjc5VNgYWYN!?%=btH8pbtH8p zbwgm(k<^jYk<^jY4TVuhQb$rpQb$rZ3`QME9Z4NY9ZB7A7ywI)REMUfl)_NM^Z;pM^aY? zqmHDGq>c;-sf(?`*f4U8uuM2sSPr^j)REMY)REMY)WyT7BdH^)BdH^)^T4PhsUxW) zsUxX#VAPS+k<^jYk<@u%)REMY)REMY)Fr^EBdH^)BdH^)ON3EJQb$rpQb$sk1f!0m zj--yHj-)OHMjc5VNgYWYNnIL@I+8k)I+8k)x^x(IBy}WpBy}Wp8L-hp>KIc;Qb$tf zgHcCPM^Z;pM^cvwqmHDGq>dabq%I3a9Z4NY9Z4No4$Fp7M^Z;pM^Z;pmjk1Yq>iMH zq>iL67e*aP9Z4NY9Z6jtj5?A!k~)$)lDd2tbtH8pbtH8pbpm|8flItb8UXr@LFzQI^Na{%H zNb35*MhmH9OdUxbSzfglKTButtUCCQ=t$~F>PYHH>XJc@M^Z;pM^Z;p zmjO~oQb$rpQb$tP1Eh|mj--yHj-)ORq>iMHq>iMHq^=i89Z4NY9Z4NYT`@=zoI+8k)I+D6lkUEk&k~)$)lDg|a>PYHH>PYHH>PCRnk<^jYk<^jY-2zfa zQb$rpQb$r(4pK)_M^Z;pM^ZNtq>iMHq>iMHq^=62j--yHj--yHZaPRENgYWYNgYXD z0Hltjj--yHj-+k@NF7NXNgYWYN!=2VI+8k)I+8k)x)mUGBy}WpBy}WpYeDKr>PYHH z>PYII0I4IXBdH^)BdH66)REMY)REMY)IAGQM^Z;pM^Z;pw*#b(q>iMHq>iNS1&}(D zI+8k)I+D5rAax{lBy}WpBy}%?)REMY)REMY)ExtiMHr0zl(btH8pbtH8pb?GqbNa{%HNa{%HE{0J@ zQb$rpQb$sk3!{#tj--yHj-;+9j5?A!k~)$)lDZ-obtH8pbtH8pbyvcuBdH^)BdH^) z8wjJ0q>iMHq>iNSr!eYB>PYHH>PYH_!>A*vBdH^)Bca2eL#DV~buhQk3oeBv2n&RT z!V;lhI8-=HSSB1RtOYm1$gpr57=W>zWIMTS3V!wiY|oU4ui{@m*J1dt!j8fkVMW#W z_iwPG>b-Hts`oBw)Wr9zO{|U^CWBtdgF4Tcd6M~L$%8u2n0b=<49SB!&zO0V`5ux7 zb)GTvB=dQa2X&q?^Ca`VBoFF5W9CWbizN^0JY(ib=KD(?)Op6tlgyV&9@Kfp%#+Mt zCwWlk88c5ZKSJ`L&NF77Wd0V(gF4Tcd6M~Z$%8u2n0b=JgD=GnJ1ZFD|t}o z88c5Z|Agd0ooCEE$$VJypw2U9o@D-6$%8u2n0b=<9g+uio-y+z^Djsq)Op6tlguBG zJgD=GnJ1BVxn9-pAIUu4Q&==l7!CSpEyq-NU-{00dQ8R~lVmO5oSN#;jL9@Kfp%#+ODB6(2f88c5Z zUoLr2=NU6kBJXp31p6Oh{8aqiJj@5{J=IlNs11KVI1T?63l=YQgbCmvSdzqP5@!fA zr9EHxBjFXoD?#?ZO2-+l*qRLdoVE;CywD@`3KN8h!W3b86lcTFkeFo5{9;%pjN=>n zT(7|AoYP=gFy^v_Il^4cUar{b`L43=1+G!k>ErL>r{{0Quk}P*FIT>_jY4}r?NgKI z8jrX{>lpWPxu^GZ6-s;3^!zRO@waHBuBR(!`aDz3G?R}}6=St9HuM!r3oV%B6B*sX9jewsE%a?eJ&Y3-9POPiIHAdEM zVzcf67&}pqy;Rr}G$GDekX#4nWdDgb4D_i$%({WDbNxfISjuG%n+uM7( z2DR6~jM1hq!yIN$^H3+&c9rnVvAA#Zypk|B*OA%&eA?zF&AR$v&nYsVVF6-OE7m$q z>S0)b*yQ~BEHI|!!18px8FS78^i7w(hCLDUIdQ#4ldjjv^J2yL z*9qsj@+5EA6EWAMQdY>R8W%SkKe9{henm%sa)q!L+wM%Z`}OA34m) zXFLyg2-m+#sAD}o+V%M6j){I}O<%UV^|>%}_LDQrJ@G8?&fq%w!A9ukJP-Ginafbe zdM?CzE^~jGT4cx?(I)lbbLSn$J?S$bcVyeW*AwTa!!Ly2SM`vH3*w0~i!S04lf!za}2Ad9>0lOD=A8a;k4s0H50qlO*1F*%g2VuX2{R;ML z*iP7QV84aE0NV@u9c(}B_pm>}UV^<0`y=cX*q>m3hW!Qh8tkvIH(+nV-iEyc`y1?i zn3Vuagz;yeq`=Z(>97o#50(kb@;)SO&}o%Y@e&I>?rIQ>{VDJ>~+|2*a_HM0hc-%aAm;; z!p6fE!ZyPW!#;r}z7ufufsKUK!q&oe!`_0$yc=+3!%ATjV2fZ|U`Js8h9&(i;3|TR zg3W}jgYEfSzzf5FyA{BHw-s=mgvGuWaOJ!gz|WEoxCX%{!ImI~xwgWN!ahX|!_Sou zxKiE^xQbz;VYA*3_+a@kS3N8Odlzl6e3;99D&We64L%jX&!rFG=gkLPli|biVXmdH zZHQs`H*o>iG1zCYv=0KVzOXT{0IUJF5B44`{=kl=30nqx4)!YS3t0L`0arg* z87%lw0RMh5fPYgMz`rL9xHiBJz)rzD9|v6du%WOj*mBr*SR?E!SjOK2t`gW-*j(5~ z*g@EbFy|iuR{?AotQxiwwgdJ$tQqF}XTar$mBZ%4La-NMAH%$#1YCu%;jpQ&Rj^&K z?ADqbDSaAAlM|>64+MQQP`)jlrL~*V54EPVD+#F>|L1qOPmqdVAy2XQrI@wG1zCY zw6Aa$U}InbSOaVy>^)d~6V3u`2&@vetO>uHva4mqbX8UYXvGA)mMf3~^TBdp1r~nK zTP&^~w{Eknc$d~>AeV=n<$*aypU)UKno4ll$qDcir4N2mE3Qe7Y2m8WV{2`?OW~^| z({9D;aq;_h0@<*h)W+hMw76|$rP!8Av+d+G#Oe0w^Jk#V2g^L8Jq!KvOxtN==0jV6 z@d|BwNg@2+&<#L5(6-`WRw?44rr()$u!bQ&9NH1K?HvJsWGCZ~LjQ7TDr~z~1vKMf z6JVCR)7o0GaY)5kDn8DNgIOM!gV-BqXL#W!z!DKBAx?sy64z0`v^ZsDB9|3s_sBvn z8*w4x-f?#NWr%--_zJ{7jeZ$f-C=7L$bARdSKjySv59f#Guz@*jxu7ssQPQSn1j{=*pKmpZnrUkQJWHoF^scWO5~5ZBGJ zx^+|5cMyNKn-vGMzK6J1H&dU>;9rZ}PrKO}KSl03#5W_prJEhT1@W!$Z|i1XdpoE+ zxCT6?Uo3n#EM8)dp>jM{9L(~1@UFv$S&8tIJa&&H_$eM`r6bPp*vT1)eTWMY_x9N3 zy%G0;U*xgJUJm~X;tufCxa1LECN;6l+ zoG+{sE)*`()Z?ioSl1G)W2xkp8LH(Td&zRNuax#x(!R!Hr#^-DO%mhxMh$re@v{=+ z_eWj)9OCT~MJruBy1ZU0jT~Z+B%4>29f^-R+E_h=(CA(;BnSvB;I9 zy#hAg^tC2LlD>f^ z2H6UNW)tY2^3k4k03a!~8VzdJwf~Ii#sD%&(;2U zAPL&EsC+u~)(`&M^$FnPM!}dwh(g^ zD$7%7=5P>u5hv={>@NvzDTR9c)4t|PLwmYuZ-3SqX!D_eR#g9NwB^Y7xyThDwtD^7 z>y@*JHTTAvVe!4qnmxU77Q{~wCL(WL_Wv+95uY~iM^}Dr?xl8ao#dm~WVS=X7CrVoq^eN(}3DbocLSKop za>UPtJ`ZN~|CVd^%X9GKZqUBe-;Z;TwnWgn>RXOIAgUe%aIT_aulDizM3^`L=Sut( zXfp=rIot0WAM)1K-)0@rcP`G|K%9wz7=K{L+I)y}b&OgH^MwV_7e;A&OM4%*7l~gS zmG6so>nGo4omg8b)>dksN4(HeiaSsI1Yx2u3HlWA)8Jdz=y?+@^F085-sgGb*IN9X z&p-3w`vLm%eUbj0Fv!g17RC?4Sry-bZ(aLs_R&^v>}N3cGq|J9@rXT9v4hyFW1Iu{ ziQ*>>#-BgL&p^8mmML)-a(%=vg5Ots>!<%eYsH#tuugt19)dLw!MiZT)W#8d(Uv$w z&(VG+lhEda-n#Bv&)qTaP|Q2j%o#8Apv@8AD@+h34#nLszIFY7J3sb0%*^E;hC51p z&oJy!`{oWvLYywSjHq@W+OwkKY{a>u%ZqBy$Jo{l|Lxl3?jDYM43~Pq_h?`4Cd6J? zg5(pUa@NoEeBb;X7=d|4$UN|^8^7gxM`E0jcvnZ7u@Vp`!mOMA+wt&hMq#W`vL>NN z=pg46-@5r*j6E7-kCw4V<4zXeD@@QdbxxGFBw>m$ZM2@Z{XIy>m>H7uVa#mtbA-9V zJYl}D0NOs{7YU2c7`rbtC6eSM~FXCI7&DgxiR9G zVa^Ki#|tN*ZPsY~8S55H#oUT#bgQnxXq0dv-XgE#`rndQ|>vmd1q+z&xi}o zhzm`8+Io6p{64a#B4M$xuhE~i#(wBi0`r@Er+XhDV+<6Q3J0CBroo-8X~_RF?og9E zYfZz>7iVN1}a{tYx%tjG-z+ZmjmrJ6kUK3gLL+1mPs%WMQSSN?0wNs%gfo ziSlbDKT|kM7!U@9bA|JTb;5X@ z-kWFR);>Om3q4UeC(8G>`yF4OB}kt{VUjRKn5JpwNtd<^p--48%o1h`b2Lrg+$cY< z!&mu68z;01Ol%c)Xsq7S*2hp48O8~%V#)Uv_7j!}{lWplftqGrrP4Mis%@~e4G|6% z4vW$ZkMc)Iexz`eaI|oYp(-so1_DV!w?2!q18!ui5F;leYv==9Tk=A$p`JHc+A@Sagn2@1kM66rDk9?ut$il84hRow8tsds6I}_?Mx#FN(8L+vvi>3c zKk3M+f19>AL$kI|O`G~ma)vtRjq;NvpAps8L)!9$y@bV4n*P#OD!eW#ho3R6zs|Zv zXnkQ~>nmZip^CW;ck^vgcXN~Gls`!OmNhu4ZAg?qRPw{3+J;B@Bcl9~QU0hXf3)`TX9r=KaIB#!$C;=QfBbD$ z9L$;^@ub^q?)k;wQmR5kC!ny7(FJed1@r&k{cyevbIL@bkpahhHFmA^hIr_kmv|ezCBx zupe?I;``wb5Pu;2Qt=1DA1wY5_(R1X27kEtBjAq|e-!-D;*Wt}CjMCX<>FVsA20p{ z_>;t+48KzRD)`mnPlaD2el7f&;?IH~5I+ciuK4re*NMLn{vz?0z+Wo!Zc0O zCtcbyqS}1YmMP2-pAWyl_^PnnURzjhsb1ywj$UBQIIMeI+q(I+Jnn(^80(MnJ?d+VDuE)UleoXGHKi~Q~>66(>Th`faDtnw= znvHpLI@W3Bo@1W8bF}B5J+4*INn7DKd>^Wl_9Dz*e2%gEcB1dsNn1%LZGMb9pp*82 zXfHMGXVr4hIobzf?L)^|YS=it$1wCCZglP6BN}l=JTj`DqtLf3Djplb%9BVorb=FUut+C$1d?!0JaZ$eY zuFIO8d9#!G=ov!Y9BDmG)~-f*ULC%BR3krTujX3|HE3Jq>O~`!B#PmG;BW zfLkkV`&n=s^1lS1tF-^~D{wo;`8Bws()RAae7h=ncFdW1Ui+4{+fePPw2Ssa^E+wZ zFYUjtwDW$CF%Dvle*j;sw5PoU9;&o64ncodbVn-f@*{|kN_?!+o_-9vKcnq0mAaEt_S(16=VYb*{yX5im3Hpm!1pTc(EDJ_-KZPPeK*d> z-H59Y!`xN)civUzxn;pG5Wf(9vG{%AmsjE6ombhf-2ui-L0_1A3jQu?ig~BT!=EaC zjj&cY6S-wm%pA+%?-4(OG4@Td)PX7XzTblfr`T)$0KPcIu6zkRG{r7H1kGWiS4XDc zjzoM^;$u_nXOAI%RmN+S_SdJ_{a;7_zfQ52{1rSt#a?k7d;{?t;E5@A-~{;Q6#KxN zU`#dkQ*GAg7RC!bLPzKoCK#&3YAX(AB}sdVFin^)%nZ*qN1QFW9Qe87 z=Lz#gTTpE$7gSrSXSMxxPq0_D{Xs9VceVXcAM`5{U2(PjLNVgL68EdNcl1MCBC)^P ze!`D_S5@0%2Y^>2_mgU6y#oJF)%NFq0*_VO_*oFBtMqBCw(+waEbDcNk5}9Mk0U-I z@mtk)ueZ?e?P@#kZM455?SHGb7yJ$J`x1YEejgzINaDX&+iU-h_@5I0tJ)s%FU0>N z@qeoA_dmn9pI6)e_yYX0+D`up`DV#~U2RYQ8tpOn*pJ!wSjv5m{k0p6zXx~vJ?42j zLa#7Em?%sVrU=u7>B0=5Pnapp5@ri?gt@{zVZN|HSSai*>?14^77P0d`w2^ge&GP& zKw+tHkZ`bYh;XQIm~gmogm9#AlyJ0gjIc~NR#+~q5RMm45Kax2u1i-b#rONGmX%Y`e2tAuNWYlZ8C^}+_>2H{3wNEjAw7H$!4 z6>bwgC){qRcHCpd?J&Mqm@Lc?_7LU?dkKq${e`8%>x3hOw+PFH6NOd6>B4|;fpCd% zg>bF#31L|HtZ;|$1>phV%fe&AzY0$ZKM;N*{9O38Q0=xA{f2H^(bM)V1Z9~N#FZV_%3ZZlNR;XQZ`{kBW{4&g50^TOTG>@mKIOvRt25$}`S z0pUU6i^4;O>M-<&p+6$+M}^0PuZpe_`-Z8QY4(ViX?U-v>CfNFJj zrwOMEX9({V-Y1+boFkkkTp+w(_<(S+@Im22!iR+`gpUYU3m+9eCVX7DUigIYN#Rq% zO@=B4cV}#k{$5r4_bA-Fr{w$S@n_^bXT(mF)_X=S;fy%(j5sN(Z^{|Dw5VMA8M%xz zVqcUt^Nd{98FBU*an2cW?iq0&Key=d@jZM)Raj#u7oxp))VzHV7m2P|*jLyOxf1dH zn&$5)21wgLLseR1drP4mB<+LY4-tPT{9)n`7mg5)6pk`fqcP5C<0r$<6TcVyD)Fbo ze?t5)`~%{@4Bxp0bKNRq-X^?V#vWH=e?Ct8W)F9qQLj6raucKcpGWz3MfrC}`BS3& zd!qblXUs7@DmNp_zc`57pSWJcQak ztlKPWh47IYWj$(q^;nJF>oI5^m)v^c6KH!f=={>owW7tq^(aUZAG256`QuRo>kv-wD&tld&xQ4{pV;OaC*H? zJ3j+WpVQh(&oR!R|7D!Prce9V5kpSbc3ShH-#{}A@7M6tb?5r;rmYd@SocWN-su`f zoukj_bF_~+M|;`nYdq^2kDcD}byazkUtz{;uiN<3V-^#y@M+;MgwF_{75-BAE8(w&JB7ay{#N*c zaIf%p!u`VE3;!T|N%*qxkHS}ke-i##_!r@8!oLdN5WXpV+fcnzYd`!h>hZT)d*=J# zsapHxQ{V@+_RSxHAJy7BJ_0|kwNHKw{=L?I;qPF~44k1E=IpqI@j{Q#5qgCQ!bD+` zFh!UqOc!PdeZov(mM~kGBg_@%3G;;o!a`whVIN_Uuvpkv*iTp@^a}?F2MSAtgM@>H zLxe+x!-T^P)rcAP@Ed1XYUB+2&o_gkXV}L^gSX7E)5n0f&af-Xz}sfn&)x=(onilV zEO`42`<3zFoip(30l+CU?0MDTJu~c=?*XTRQ^9F7>?>>VoN8z2cU{e#Vdu?6`@J*l zTkb{seX@?(Gwfco(H=zGTv_9M$<@uU;$YT7i5JbVlNTXgBD$r*Wy0mcm4<5747SwMhlxM}OX*i?&9S*U#g1#45(esafI&;J+mr z&VLfIiZgu}$HZX_#2haPenO(&zm=HSq!wLh*16@&&u?9wWe7&Ch94eZJoj7k$4;4M)szN5J0~l{5?iHhL;7>Z{D*Xx00b-uzrSON` zVEPWdp-GK~&$-6HSHn$v%8Cm*j=XY$h(?UQkC&js+!b%@$29p zpK01p%!K}4(cg>b0iQMJo+}W)E4laJpA!E=_+w|8KIOBT)XbpqXMyY&2;vTsHZ`Y7 z#m_PO^1z=ApXaa={_6{je|!P?c^k_OZ6Z@@Ep!t`Y>&G=UO6IgRpdm&=A!Ss*WfIDfU@e?*SsZ~!If6Y^9|CJdx z;a5#+jrePY>(I7iyUFj`-lQ^inR$6meY8|6|5f;0Pb2)nzcGD={H955h0peF z@H3w`?OD$^sV%=X{#N0(-(n2o>vO>RHli)K+w`BiyGeZ|elz@}7fgG~3r(tizZt7x zKR#C-(0yGadz-*$EfBHnt^Stzp99AK`P}-%ZVO{*HRUr!GMM zQ_~*!6zA*<hCuFzt;A&C0pJ_}&YeRf+h1;Q+M7B$|9|VzY8zX#DsKn^hm<>oJQErzPo}-a~p) zvs#p5v`d6bQ<~MkGfdm385rxkG8V|^;rVW}YQDs@eSJx@+L~khZ8^>Ac&_nJIDq>=5AN;SyS9w@>UbFt35DW6WyU~^ipEXW`KmJlP4(Fb5X|t*~vDE`Hzi+!3^{Ev+9`BAevR%HBFi?H8f1$%nQ`@&$ zeK^4M`*=XJ3SVvf%~v<8w+0&j5z^-pBdl!Vo0;{UT50d&UV6e%_`KV)`j z!LM0q+G|&$-S~Q}w-BeSGP$%>&FZN5$Kd~4{7>Q6KWa1$k7B>#?}DGc*0g6Bw%5S7 zwpk6|ZgL}pBeyrJ_kL~KPW`%B?b~Pk1N)lQnEl2t+uy7_2aN9sy$70A)yt->S~yi$ z^K!HLMErll&pl#vc}LL4_)oPei64Mpd6{Xix~xU{FE{>x%dv)HN0-yUo z3g25|Gzldw>ZJJZ!Y{hYv=?91qUyzOfPYB*!@?tmdjCh6FE#xRm$s-6uhG8FeS8h} zKFH)M2DPa4YmJ|AZHrns)cA{rVr|!V^f`Kci#l|-Q6a)@a`7%k1FGTQq`g+R2zR%b&F~ce*^rOdrW(*(0vcih4>rcr%yHcjHxZk zS7ZFl8q{9=V)!qLe+Yh~_^-qFPB;35=`Cul`0MD`n)Y?IcvogUO7znay8@4bDE z??bg(Rtv1P760Fw7Uyzxu?E9k))a9~5)Lfe;wrFWySBCtDXVu4EW>XUmk7UOWSq;T ztQ%rmTix)6gYn?czy$CFtiWQc7v4YGqa=7U$8)aTajmTZcz*$d;H-%puU|Jr@J4_E z@J4Vhm^O*y{RL45yiqWWfT#=}Tg$=GumasW7GB-Y8IAC?wl0EKGnvt!5!J%0gW)G5 zd)&HZA);5Q13$TM2|iM{6r^u@F{-nHA*?{RE`_(Ok|V!}+;Vt- z>>gvi34bm8PwrcVkIbwA=@)1nquRS&t{++{&h^&CPOkNRC(+8okDt$Tn)mLH{LuM& z?|zl&S|Gx7j{9NZN_&;!(_U;d6LznIR2k|A&XNYs0&(Y^%=U?!%oPWdb;e3id z-@%wZXnoG#(e^#(pJ>Z;K0&|lI3L2#a6W?nUFT!;OL5+TCe`^H+S8o((0-BgKHAfr zQ)u^Kg$Wq#LX38y^AIDbK(Sd1A5ZJhH8+Txv~XzS+u3H@T7m*LyaVfb$6kLcIM`8_nsIf(YI z&L7Yo8l%(q7G=u4W|1`2u}(H6vNh|G?MP zM9tc&`46<|YWj6GgSwi2UCp4bW+cUV7aCnnzpiFbS2L3Ce1P_|s_EC&4C-n|bTxyz znvq23P3YUJ8Sy%=Bi7aQdz?SR*VXjvYNBRQ)%5FX26Z(fx|%^<&4}AMf_}Q1eqGI= zu4W|0c?s>hn*LemuBKmCGpMT>(bWv_S2L)q8Tl?xuF}=?>uLsdH6s`CR4QFf)ZvV?8PwH`B=bZoUCqb^Je5jU z({HMYQ>k<{{kob#T}{8PW>8lXHH)fdP**e3jVD;?YDR3HN~Npm*VPQ_YDT*9R4QFf zzpiF5aPDdbbu}aTjuqLjbTuQne8-iprr%T(@3_*{^y_K{bv6CEnn7Jn)GVr+L0!#A zChr5Ks~O4QJFav!{kob#UCl@u-*Kg@>DSdn9nPp`B#H01($(}Q@EupWntol)V0$(F zx|%^<&4{jMP**eJ@E$N_iiE85B#MzX46V=4MiL;4&6K^{1O`J{Kn|RZ4Z{k)(&7!J_ zdlNS%?oCwF{~g|#xHnNv+?zO?xHs{pd@eH&IR8n>d@eH}R&+y@|7ldlPRu?oHgRN>>y2CT>jJo2Vvg)>cj2n7B7lP28I} zn?YSo+?zO?xHs{p2tFqjI<2h}P}kA;z1SJn zWBAe8VJFQxj$bu#-1%N)|5a}|7f1Hreu8xkzUjo{W7u)y#6IoxK&5}-WTRz^b4g@> zqyc>zoOI-#aK3}wlTHS5PdVR3?lC7B?dzNrv_I~oqJ6!ShW6!{Yc=|4J|zrz?8S zbz;yyrt`f$q4)MXy|;+oTSV{8ulE+zdy8ywaxhN&-u!xRLA|%gQ;rWgy*Iz!TTt&U zvfjA}?WgU{ulE+zdyA}fl5`$>^Xt6@_1+?nIOn6ieQ%LE$40F87F_Ij;LmmxKI*;s z_1=PIo$M_$vcKyaPF7_9#V1$`^(O10^xlGcZ;@Z{i7CA|fBW8odT)^@`NWjon_urO zsP`6moKH;Yz4=euTTt&U@+hB}(tAT5dkgBlMON~ODZMwp*&Cji(tGpky+!oi{CaPG zy|MY_ZE4Yr%~y>`Ssp{?R$$n!PBVp-u!xRLA|%gI-W+Q z_vY7o3!b*O$QqtTrT6C7dqW<3i>%;jRC;fIy|-Zd-u!xR!G(NVl-^rV?=7hJ7MaU) ztI9jy+wb(=-qCx*`-bO+_YG$o?;G}p_YKbt?;Fmfyl;5Z@V;Shc;E2c@V?W<9nybS zTmMKEbE>*s!AvoJKYD?c?`>^`w}8Lx`3Kg@)WO#J)E?Hx)I@7jY8-5NWdGQ3>I!^( zI&~#JZcKd$AD>EHhL54thw*WJ>LPq>NL`GNPoyrv#|^0u;^UL4OY!khjI<6TtxLTh z(c`HL@v%Pj0iBtL>a9(kkB^U~)}du(Y5@Ktsk8BMRca6)SEtUw$2F;Q@$mtyYbi#1 z7^6L$dM{d*r_RF16{+{(bxe0(T%20kuJor#YRq~3#%i&CfJdKwel{={`cT!jGq^{gaUAdFGawm1=PM%h|le%&z zb>)yj<@~yGCw1jc>dN_b<@~yGeqA}guAKj@%K3HW{JL^}T{*w5oL^TCdQ{G@E9cjh z^Xtm_b>;l0RnD&~=hu}(29@*c%K3HW{JL^}T{*w5oL^VYuPf(A<&rzA9NyE+FyGV6 zr&Axn$BleXGoRvnni=A|oVlLwX=Vf8)66IMo@Q>~dz$$q-|Nhd%HciDe4OuTW{l?&?11$E_ux^h8XxuC8b^r&1=S1zb4 z7u1yt>dFOAt6Wf5E~qPq3@R7Yl?&?11$E_ux^h8XxuC9GP**PadG+470_(DiT3g|H zVae@L2BIGAQ68dR?NKqJ{_RmIqFdUd@-M3QhD-$S8QAvr=(mXWwMR!0z0@APhUl&K z=>0pY_RhN0S`{8)Z3yRD;c%k$i*Ow5Hk^zt;j!4|GvV8D--N@rz<)YC2L9%78Q!C( zpnEEO6XH<#X2hGqqtRzWcm(_>!#Bd;7#@i}>oDeeXxE2_p{*f&1KOSl4@bXs;UVxJ z4_^nrK72j;Jqq2U;X#Pkh6f{lEc{dSSrz^X{MF%7_-n$~pwA+#bs5H80sV^bRcK!s z9)R{o!dIj3vhbDg9}btmUmo_O?}N}i7`_7W((sQFKNRkVK8wOd@E3K(!hT)hpsuiAS2(CEj5~Dts+sU17hja8Os+uPYqX6^@)$;h?T?~D%=;buCQNM7|#h6_Uj4k0>Th5fq1L0#bpD!k?#6^?A-=~cSI{xDCk(iQgW3J2RO?AH|z>Iz46g@d}n zk&QgzsAE)xBMm&gN>|vwj;B}Y3j1}1gY6ae>k0>Tg(JGcL0#d<8lG@k0?kE9}=54(bZyIibQqUE#k0>Th5fq1L0#cUdxe9#!jZ>#k0@Q?$ZFmXN>|u_dWCU6 zC|zN{u5eIS*sm)b)D@1jS2(CE9C?WM2%Zxv99hi!LFo#kj%^jj{h)M({kpFKQDNM}IK#MyaZBJH#u>&vj9UWtFm7qN zhjB~b9>xufdl(hQJ&YR|_b@7qdl+XJb&RSo?qQtapssL4R~Yv&ZVBAOxTWPD#w~$+ z7&kEPVN@9RFm7Pn!>BOsVVvRMSrx`Tj5CaT7`FuOVVq&y!?-1I595}Wdl5z!UKJ&aod_b_g0xrcE};2y>ejC&Xr z#yyN1822zLjC&YoIEcT7!QaQ+WVtRn(4}D0xGt{7SyozOZ|l;=Bv`Cf+!$vaX=!bZ z`FgJ^uzbf`TSv~=tGeLF_O!O%I&H6td!w~=9GKSVwk~SC!16T~Sl>U<+B$INUZt$- z;Ejd;J#Y+E>2J2S{;ifHS@0f&=Wa~2-016R>}H*hz81#441J9kM&APK2F&pXc&_LxrKx^|KE!8*|mTz@!oMy#f|8w3*gyBz)=;4NLGx#9572FMO0WZW%+dvn_ zI|@)q1q_1+C4PwFYeTSzT}*euY_nh1`yN%q+K{*N-szt>90vk~_gfAwe{~<(?qcRHe|u4kgW$pAWy*U?1j-zL01ocz$b(J$6&#x*4Cb= zVx>5j z^&4AT2ZI*!4Z1Jdr{ih%1Tp80H@CK`d-tlkhSt_eh>vV&ZCwne`;zg)K|C<%u$O`# zqP=3Ty0*adPxr;{->WwJ%3t2AinG-rjA*{vRdc{UW2QY|40n-^lZzFO0^O+Xh26(n z^+|oK?36Sskm`Z8wjQG{t+n+{=zQSYh_h4BpU(pMLuelg{t4|@C3~!^l3QEfK-=x$ z2`~U&ja+>a`rz4iMf_K^Ukn}xEpM8&?*b1Df3J!$_awHq?gAf#{xIjj_a}Oz|DV8^ zu^1--?=W_IA^v_b=B~YJ9*I3A<9jYKckjjbxj;OT5_}&d2IIeI7g!g@r&%kyd0=Rp zgueJ&&zPU%6qAz?$AfnwCMO`KZX)~QgkmnsjVFhbT>@T&*oD8zjkyDQa{OL(X-t}x zgI`~qgTDoi8He`_{bHb71g3+R#vm@+t9rV?+wmkxjMp1KxMr^!jQ`9D`?A#U_NqeWt*2 zH7aW>&NiZby9|H(Tf?KjuiWd!KUise24lm|fF(!8Jz|6JS-q{x@OR}uwd$?)`1^3X z>!z;Zt|z;`)AiDrf|#DJLe~-3E3TZ_@5kN{J0jL=pKmX+7uzq|FWHv6i@U_#-|dQv zjaw17GH!R=3vqvmYmB=vJ}G`h{L1(XyCrq&*X_z~Bf5?3wxZk0Zo9j^(CshX8oOQS zN%D;F+~`^1S?P&*e&_kK=P#ZMyC-$;*Zs=wH+CP{eO~wZ-CykfQujZ0Khpip?r(MP z;#}$!I=!6P&Kzg1GtXJz-0v)O9&i>rOPuA-DrdD*@2qz=I8Qnoou{0T6LvN`zi^&$ zwmH9ajyrETCFk`&@9y)ao)iv`Vn72M*eZsyA_Fu3kac|;-NlTOJ zlh!A7O^!*vI5{i%s^kI5w}NWu|03RdF0J?4fi)3+3?DSYn~kRWc|kV8?8{6P)VqNC>WX(ir>_2Q^BU5o91qs zx5)~32?xSk!+W0I`?R&W%Vw)FuF=!jz483UgvPYS^hRIf_Zly4ENColyrS_)%PTFo zXRR*!e*xUNvtjkH^}K((q8(NM>j|3(n*tTs8U91aXLt)p$0i)(CqIW_3dzRs!n}D}&tzdl0r1W_gf@t%o(hT;4ADP0?MfIk35~ zBd}LsUC-}g#lS9s<-mr)Zh*~!&4sxWy5L7bVO-c!*lyShunRBfVkN=)!LEee2pb7Y zNbF)=0GkV&2ippJ7Pbra8`y7QyJ1T%#F(&WU|V5MQWxtySO7K~mYm$hN`XC>f||qj zq;;|O!kl#IU{$awFw2L1!fxo<#TpK?1|WuAHv!KM_8#ngSo*{+)^}jmUC6_}AM9e~ z!hFx8{xEe4wSdKa(8Y@Xz@2J z_eN(=_pRLBa01;+ zoiZm}RMb6$vBx_l&Pb=m*_5&=y};>W)pf@+b2cT0Yf9kpe|tPTFJFE6mzS?DzNz@~ zV$1!df7dl@uKDVkQG<5fwC1L-ZW=Y}wE=6Yc1~YC{mbdAYj3Kpb6%_6xq9{LFIV5R zX7#3>Ta`O>dEMowF0U&tEzT*9ai8*suBp4`)HS7pLO0djbn2$kQ3nUqRfVS4O+Pig zt``5rv~#dFw7PEfsnw-x>NbV8mWD6CBIkJ{!QR`;*#|7HJE{df99{#3u) zpE}Sz@TQ-X{-pTYoNHgd=HNBE289NtUF*I!ZIFA=m)D=V{n!EbWx;wv| zaB4#81owpL6UR@yX=3TbHFwwD{Z-Yesf1@4Vym zs;a%epJ$$#Nk~E!=`!>X2qZut7)Y3wnaPw)req3%WHOnAn95{Anlw>C5djeqBTe+u z1ni((+rkZs^1CiS_A6t*vhFLVd}X(dBR0Nu%`?}$b;C0^^xSy)&F9_x!&|PuWw%>K-15xl zDn}>(SH(|ZlusGGc=XEAYe%0o`n=I=$8?YW+vsOTzdZWQ(YubR7&CUvgfS1xb3HTW z3Pfo~D)#$tA-Q2c23O8cg59#mr+qy9$#_YQ7hezBsx?Vc?$H{lp z-}Sj0K6lsT8|v@qzGL1E-8am;;d?i%{Nq}suf3uE{?Yf3PHmgoR;P@%yz2BaZZEf|`>dPmws-T~K7twUSXb`$b+cT( zo9&jkkGL+kpZk#8+f}#^yUA{f>vZ$o39iyrxoXwC#!Yjp-AcFIHM(1MiG<(cGKAR_wrY5o1I{x5Rfx@&cHQR?yTG`F+v&UL$JhB(Gebvroyz(C?( zukJr3IN#|b#)?f&aUXMSZn`^APe%#%cW3Ccd=0ug$bG_{<<8dKnQlk-QC*!o(e>-^ zS~th7aHqQQQQAprZJj;?xWOIb2BH*wQq&#nR=FeGXLNU-8|MypgKn%l(w*)mxzgcT2R{eR^ zUsnBfmA-5{G;!$2p`(VXhiZo&82ZD|V?+NOdSmFVA-8(O>TOovzWPV2^%cd_jyp}? zqFd9n=HxYV*XXNaYsH-POV?kp{=)Uwtbcs{lk1;ZziIt*>z`k*H}5yh-q5{a&W4jV z%-ztpVg82x4U0Fd+OT@VX&csTIDNw>He9jc$_-a-xO&4i8@{&Tx((NFxN*bX8{Eey zeSG@I#mIj-tpfb7{!0z}?|-%Ft*JbvRet_exIZ2Ap{PLGwGFJQD$#u^;bX7a%TPeqNmgY7{M=GR) ztCgmYb4#)hlO!J|iPj#l^ipdd(&u*NSs?sU{qKwF@g=A0sZU~v_Ef8u`Oy;}%Af^m z%rBj6dEw^rq&DbjvC5sI_F7eXwQ5Golj$oH>CI|wsT+#g8c>;~Dh)mIrBRQTZN@B- zu=Xh@RH8sjg@NuQrSxSW>I>}$%Jki1)wWm|U#4BP(N;0atS>_mb&KP6nl{tcAUdGi zV*=IIAD^D&Z8j!JTP_bmJI$hZty<~N>uIYngX+_1n`vl|Mi+aVi(wR(s;51|z|Z9> zQz0u3KTH;~F$)ry%BU4D6AM+(3Z+m|KlQFB!}$I(CQICN!d2;RsZ5>6Bsr0bOY*{S zi)H7LhHQzgiu$oQ(P#Q zS}JNyLzB2gk=zB`bhY%c&0NXuA3Q1~z0g?~;ovSKhlbGhGF`KA3vzG`;t#nQ4Msg% zC$n+M{uPsOXlYV?Ly1vnQy=H6emrb04jBzN8?7NxzCyGhOGBcHI*VyXzy%wT>_e{Z zB>PZId#E#COBy88P*Vtpyc@1PqWUy(fRR|D9?(Pd2+O=8;>v*XRwy0o=lfnv!>oVk zC$d1jShRkXq$j3jgVH190t&ETjG~u&^fMQ`ax=ELrqOP3T{A3HCAH1hYgnXez3}8Q zs*zr-A~hRV287GjV#?;~W342B9>alrEImzPp=yOBfBxonJzbQA>qw`kDQV^Mu}Mo; zT-%|!CTbJ@7qZ61HJ-BcZ%E}SYn)mV(P`sb+#*mG?DD9j`Bdb6P;$3K*L*DYAYhX= zBik-ebG`B|PH<|GC?tl!is2QD*#^oM*K)%SXmsc)V~4zEYb7$$C#mfdcAcJ13x3;Jv!>8IlKQ&;(swMqdZaM{Ai2{ z^UpLbsfXAO@(xOxyhl#rgT7F|FTW-#gX}HQN`b{CNat|+M){Vgf6!Q%zE(+}d6$*a z0>;5C3FC~P7*02+ze8n~Me=V_&m1X8$ne@j`A&H^__sv$Fw)34-V86VA4wAZ=oYa| zh1Ny5_j8Lidct#)lPIxxj#|}9-NcZlO{Pik7CVlV70%(Mi6}f*&y!Yyo(!+aKF44r zO~tfrcx|VS;q{dqwUK_J(QwO;dYI1^%dtvav>7j2m5h-)<)^B()|0gJg>wYiC0X&uC?MO(RE}_}rrL>xf#nIsGc#b4Lt84q|#@hgF+L77H5uMWGzoTyGa=S?BN) zV!BWr)$*!ZLZb@h=+DZ5r69H-DnM4U<4@`^Z*B8nYXdt@OroW=sFfkDoK(m{GixGW zpPrI2OulWQ-%0P&sZvV>D`XR~jl?NM#U$>;$P*SN9xzT-}YQkn9hs4^ISS zZb_4=$8>p-N@Asvjckb^kJrQylfp0ag^M+2mS=cP^Lf^b*ET!xe!Dgy8|D}D^Caa5 z-!dS%sgSLWpXEWDsEhvler59q-m%h>>%ZH?2|p_@mWP>u&y)1xmC;-!=!SU* z);GthM7G9b4U!svuySo#pXuF}H99+&ANzJ$Ad8uplf&m^T|O6fDmNFaXROwFsYlv~ zPniu?$de7oDicTK=VFFnxv-Sv+Oi#i`fLkONW00EI}7!C(XJj4nPH#vbKwus9%jrT z7yg)7jM-Aq7vehn0g^NAP>- zG|`RE$1_so^D*1W&gXq|ac!dy`77B*e^_n97jK=$^(h~t!m1ZBs+Y71Z5G0zp-7&W zM)l?DQz1>E-6oY>8`TC~jBw$V{NeHiZyxkzI8C74Vp2}5nUwRwQkN}H)VDRVLcT)M zLYukrlJo`8U@ITq|E!E927iz%F`>3xnPKLKmku0mRL#_d6>idaqF+d1e$FL{oEE=Y z&aJU^P(A!ehY=*F?E=<_E+5k~CRoC?q7JLZDil_za89fazB)f=(jHPLQdzjp+?=Zl z)LCdO{YWx5N$#YE`T208N$;86u8U)>ipVc{d(Oxv=}JcSlw$Pe>pwmqKZ@JhF@=T> z)j@=AzCC|VL5j`6wkEH)Wq!PpeK397x^b|)g+`)N9-0UVdc8etj5vZ-vAquLlSx;8 zUe>sowdCe4G{Ql@vd4IpG-*IKn)a7QBLzjQS=mg0(cwUbQL*)-Y%)QVXrl_}m#a^# z;xIxMJyyt~F=n=}5pv@*3gxzy8*+!);g)0wO8o9W<&7S{EvV{s>zvs ze%-99AseCYAWPHL-cpUb*N%K$Nm@zlsqN;NwZlL8lKFbIW%>7XY^_8w>iAsFQJ8L3 z$Z})%LX2OnShZ683)Zl(zwkC@Wz+-H($%sUg}pdE_fknzhXoxj&PIlE^M{Cg>m{qO zv>?5#ZV`3hL9o)D8e{V&`4WKq=H~aj|6uY}n4aPiM*a^XW8}}>2X2UU53b{pi1CvB z&CQRkK(n*+hyH#LDTbax_A5va`hyOz5^M6)p)0GwKKjSIW5w{56LpsF2>suw;s~Ae z(L2YH2d-2NW|_R*MYh&Yz8^@oKU-bYu>%@=L%eybIhdTmrlwzut&j ze)h&Fa7xR@gZtt$Ih%c9dl~&&@!hXE7MuHJmq3O?iMB|K@fS%cVUNS4WKu$|j*h4* zTw?VwB|0KoN(;n?%zh6Pbf{(IlbKj<^pq>@@NIZ$?^O;~+&FT%CgKfoR!uY}Xwsmb z#;Pyq$KiI!T&Kmf zP1ecWV`EK0I%%g`cq}+FLhrZ6f8*~g?g+b&ZK}s=m>pehuO)cFLSV{9`@f2k42x+U2OH5ZQ#a&x{vvQ5HOWeVazzIs> z6&Yh|D}NUZAB@+vQj=xZy$l^AE5CK6j#Vk|+b3_1obuaZR`tQ#$}Ux?t>PBaMz)w; z&9{+Qa4eAL#{UZ|iSB-In@6eQmc{zT*yh_K=6=|4yoQ~#2&?yAHYRV5ll*w)mP)Sq z7cW(4-I5*3TtAk*YgxEd{wQV76^liS$dn(i{1~&i1@xs%KfI=x-7Id;td!Y`d@GoJ z%FJ}j=J!xoDLS)PEzz&x&fg4IDtFa1+fJL_2MWzs<*&}+iLg^dls;MwcEfWcx2o>}U+@z-!#~kpp>nKzZn<2xbxhhh&re$M^GI(W{~eo! z4Yv~!^emi+#U?Qp#JHw&M@1e!*}p>N(2OmW8_t?o|B6|m;yNDq!WxN>M2cCIpyi?5 zq|N<+EcC5{rs-u;yfub4?_doJcW#9+Qw4TL(bbi)n3WFJEt2!x--D zp>L7zK$wJ1QY;iSg1DKu-AB`meQpGPR9q5IRJtk^}%smC{=W9N8 z&ECnS*PZh7P@7vaH|ovyc=;t+g|Sg=)tz4AlrbaqK>EBl1Rp|(q8+L>RnIJKw5GaKJ3 z+GTon^k&b>`l+4D@~hUh~T?+lsR0@pAP$XlWRo zWA)axk1xH36QO6n^}|~=tD_kl66#upnkjL~7D@WP&l9=qZjzVP%t##lXZN)R#H;ZsS*qVo@IlnAp zkz9}P{VlXEacmS@S<8NfA-lBiaWY2sZ5Jw?ztVswSrus!tDfxI`nVv(b!M9@B~`g6 zgNd=MG?F!Z>B6=r*pDD3`PQc@8keMP&rR`mAbT&w#}~zI2=5DWZp-)ks3>kj%8rh0 zHE$Lcvp~6}jps?7{9vWM#l{X=e3RdHwgn4Z`(XAjm-4Oaw{JVQ^w#yec65k<(kU`z42d&(F`il0Ld{X=4AaDUBui z_q+#wt0krndBwMwMXuH?le4dzuz5sF2K-j;fMVsAHkTRd5@t@plGN8xwuIwNb& znt*AuX{ERGq=!=roFQP(*1t#THPPD?Ux#rvSw}djc~T=C%UuUz zy}er>VINf6u9KALvmHgB8A+25{r$Q zE7-16F>9H0a*Mlr)W~!-I9kguWxJrTUTSg9SeO9Yvfkr!GHdD>rD1Mzt&`&B z6rUFwZNG}>or zA@%mMv^%Ec&G*yp%+%%gDQBwh2l`QnREz#jDY@!h-KQ5lk#>tpTHZ*zM@puu>`j>$ zUR7J^x7F6UnNKKvqx*qc+~Ds1V%oiws@#}%jj7$2>pp$4%5E$fn38tCNKYS3yTj9m z3wuuLrN`3l+LGVzn%4Jt)05I}T1m~nR9k9D?Vg`{RyDux>Sw0ieeMy}`HzWvJT3~| zcMeRu)De?)e_>{|`qG}+s8X+{MmMJ2JDCS{|AzbAQTm(O`3q^cB=ZB&)|L9yU(@co zlB?fLyZtiV;?>6VAODedC#KHcM>*4Xh{Bsn-rl6P((mi(7Ju9v^&;iU%hIl{WRy}aOYh#9cDJT) z-YxAGXKoaQ(=zYAtdUBMQ~EBckBFYbQ@?2u-_kFrkNU2sYP&2oZfx4^ow`+hJSdY< zp2m{xo)kAq%3oK`l9k^PC8@87!rRg}>+is;T$S2JH6N2cb-hy3KNI%- z)Xf^xnI-+I?VgfDRL`}Uv))eYtH+zmRs{P3}R9 zbY7P}MO5uk(kaTXb2n;4ZgM@Bia#aSh{N}!w|P#rWxk;M+ftua&hy=V!rof4%T$ef z`YF|Ue&$fob56dPIehj&lAQR$}dNQ2TlDCYy|_muv4$pxza0avG#M>2KqiHE7f zuS&b0x=Bj8BfUm7&&}NYno?2&_ezRN{{Fo9mdgBHI^{NsGtapTR%l$(4@s6zOy8`O zx#>~sl|Q}i(X_iWwMKIO>(tGX!}82+YU_~HF3S0I$$$P+(v|+H^52tMqPF_em#VE% znHQD5sC3*5YAgMB)i5pfb#d>I%v|;N+>*A}g-w55IhUkobSh8kPm-eZOO{GnZgtP< zeucYTvi)86%X`F`l2z|Wp3|S#-|E!c!rqs9OPqPcef2C!Nc#FY;(W=6#wn+}Uz99L z{akc*mDIl^YD@N2`lyn#)$UH||5A&;cBhNZ6`4J@S5Hf>7llhwyNM5vyU$7nR-~>J zAMPu;UV8L&dW?FpOZtA5Iw$?0WZ)h5TlM9V^g8kI@XX?Wh_@wIzb`A{4%CP&FFkjR z`dHHXim)XE`rBXfsAzs5)$@h4dnk36>MV5^s`U+-mo!GJQg=xn_D+9nKVj2jG>)&P z$COKFGm|t@dt^Q$8#T9NfktY(%q7oiEK05vPv(@Kv#q#Ma(kKjzWhPmzmYjZH5`-K zLG+ZD{z$!^U;4EAdr8SejnRtq&&2tA-0hbTqU`O+8duJMV+xaL#8dZDxm?9^uuQ?I$Zaqyh4+T9)R zp7AfcTm8hir|j;OH{N>7?qaco@QdC$y?%U<7gO-#!t%I0g_q50c8yuL?FUwOAAg0xRQ_2szTOCP^E zZsY!)@88+5mppZSjQ#x^Gv2ne6P{lXbN5GY?)#3Vo%+vbw6V=IUzS#I*LmFaG4`TwEsVLb`_s?FwY>VoyD@$J zuU;Bc|Fy?cvP6{aKIjWm>~4ow-jUvscGSK~ z_Kk7Av76)z!2Wu->0|9~_cwNrxwhAn2S06TZ{GfqSk@|DZ<8ib;+*fyyx;D=|Lj*{ z9*jNxoAKSRp1oWaiG1IF>h`!tpEzh6Pv6sT#%VK7uf5XpbzNB_PeO?mkN;;Z2gg2H z7gMnD?d@XzUGd@(F)fenwlb#qhV4h}Ze`!u?Q?P3tM6_nJ4JnKdrmyv?*8ZTx|n|> zHa!%}$9ku5pR=XMO5w%Qtq@Gcl#} zK749SeZv`(&oJz_UOX@!{oa?S#CP|#Dose6Kx!XKW9~{%G2NTWf1K9U5!*b(1EaXlZ>vS`=fSeB!UM zzSW=jv6wGcPTe)mx9P>@vDAHh)IK{{*`=FoO8eIl;;xEJ<~ZSl=Nx-F)vc88%otd^C}&5J$G50CopM=h;v z+)>l)?%9L?G}Z1t{bu<)cK7DNo8q*~cepREW&NvviEYUtSMPm?<-6gXjj_Bu{PIs@ z8T!RLx5a5w$9+C-r7*r;J^`ee!i;8>qVG!^Ah-mA&vk@d$R`ab{f09an!n=F6G? zxL)xH`Cd8ehFBX9d%QW8*!8a*A8Yc3ue8T^Z@=?E%(dN~xjoj8wI{8OsruqeH^w~Z zZt8BbnlJy*GY7_PjCo~@-F@|q!(++$`YV^lHDCAAPvWx8uYES|N7JjP$7A{AE9Ehz zH~r(LxWuGa2V(4b&##Gl`SoW{i}m-Puccxu|NHWrwy}0wo@?X~+~D^Gd9 z-9M!J8<*JqB^fubHcsD3=^u{MSE-)v8q0H)@;tiK?q}-fxoV$xQM>0T{cCaAB`W*J z#g=DfU;|K=>c zU-@Un_4KRXpPggrT}q$l`=$JI$}Rm!-S@^cU#2|m^DX^4rQa3TS*`T*7g_omwfnoc z-FDG=Pn^Do@_%^1@_bk6tK$2)O8;bBf4}bEEVDf4i-)UY8Xi)er@d``c~tjv-m?3f zlxJm}ey7rZyseczNcAr{#qO_Co+n~@WTfWZKf=;$zvbrrKBnOjrT=}br9UDX?u_Z_ zDs}T-h~;Fz%GA8CEU-NFy8mH(|6P?``@YfhoZ3A!rmaytIWNBNRz07O`?9yv2R>%? zJfQrS#$)l4?&mDC^jno@aV#@abpM5z&Jxk~lRYiZtIB_2JQmw2{T|(qOP!h7uJq2* zb29sspPM;9vs39Z_v_MoO7AOup!9(9gUcT(J=Hx@I?C-*`e^AMrH_}ccH_&}=|^dv zE`6@_rP7JzlgjrlJ+}P9%q5w#^=m_)amSaxTKY!mJEiZJmXvMhD$8rj8_F+m`<0fL zUF=4cUFt5&T&~|%I;ga{d}C%-d1v`mnJZjR`7Z7ncT)K`+;(L$GH)X!>e&`M_?JFNB->>Y)?#R-`<;%){uHVkv!yQ!iOLw!n^yLuYb@QQFPc@C)s?L-KS;k|bZh3jnRVr_ zXyxml?vBjiZf0qF>09nSmr9*pes=kh?x&ej{m9;!)DEegQ@f?QO7}`Nmdz}?Gt*wS zPpYfz*O?PbPb~XX`De=KmL8D0C(~bgLHXRWgHz*Ei%Rdy^p`Cvo0z(|d`anw(qr6` zvP;V+rB;-!DqT~0Z0h*bsm z>fF+E%FZo2DfLjMFEx-_oI1aBS?a>l^UE$Ny{z=q)aul_)P-f2ls%GpG;@0Dva+*N zpGs{kyQ=Insg0!Qys`T;9wWUvIE>2xn_FU%D)a9vZ?xoBXscXt_Dtk3k?QSjm zZrK}|+sdv>H^%_l@%RGuM?ix}TQaS@!F)d&=%Bd!THld#LP@vPa7vFKc&C zmvy=4%5EsXx%{QFZn&2CP%k+G`u3yph3c=NaYX$!yxIyqu z!L5Rul;;+~w*}wP^Y;a}3+@p7MDTOLF9g39{6_Fw!S4kR2>wU#J(asn@JHSMS@0v> z|5)%d!J~Sg7*aa>8p!M1Z9Geg3*HQ z1Um|L7VIk6L+}y7K7#!P2MO*|UE_59Z(YahIze!x;Ap|Ig5w0!1P=;drE9IAUhuG< z9}zU_zC|!g&>`p&{8j0_x}GGMC+HU}6f71j6|4{p3RVl&3N{EHQ<*b#JzMZe!MTFZ z3N8>_B)CNICBfx_uL`abd`<8T!S#Zh1h)vjE%=_`Ho=bsKNkE6UJ$&@z4E-O>+6EI1n&yo7o-ny7nKS|2u2CE z73?7RkYE?V?t;Ap6@vW)2MS(LT?gxWsNitH5rRpA$$}|@mxZ6IYo(w@@T#8cbe$n+ z7QC+Kw*;-aZx_rK^a$n%<_hKu1_Y-F-c`OOx-J)-Di{*15v&)SE;vhYj^NXR&j>yz zxKQu~!KH%tRsPGmZWN?otO}3$7E~D7aZrD%`hp{jT5#f)RQiCHSH4|5NZ& z!G8&UDY#2;k6>HjcM$we_xB6_Ab3ddC&7o5{uf>UCU{)%lwgzKdBID9e+d35*hTr? z)b$;~zXZGMc`rfgP%M{m1Y-q<2o4iW6dWZuM(|O=B;}nfm?D@es1zKp^cr1H(6vt2YF%gOI$hTWfyH|_ z-uQLJZRbROlIZ%z8-F6-dv-T|)1D{ES9U}`)t>j?DK+oQCk6b0il@$B7@mKxxTq@f z$CiJA@HZv!{fgJliDEFrPf`BY1-`xYQ&aO!Rm|X@N661ljC{T2e_%{%Uf+oU|Lj4j zdG{ph-&^s*@1mH&^8Z-veI$xM?0JsvM=c8F4_8d_ZWLD-euMCbB=E=U`ME^>x6BoP zRHvu!=X<5*U9ewxE}fT}_ecUiP0w#7o^SoVo7WS?Vb zv^?SF{rQ!Ee@JoTYRQ1lzeKzN{PXQ9J24?o+oA6YI|39Am|MBGiMm*VcsB4`i7_*0~n62v$x}K=(Ji*So zAJBC-UH1~~Blwt}572dmu0w)#f-?l?2+k86EZhaUj@NafV3ObqdcI8XRlzla{}9|H z_?F=Nf@78EN4ox0@C(7+g5L>_SNa3GJ}juzeXXED@E1Kd>pDx&DfqjdpB6kXcty~o zwAXb#N!NFD)v>77Qo%NY?F1hZ>?Y_F{v)~$=(?Y-V+G>{M+lA)94Dw0OcyLxoDsDmr=V9bSFk{^Sg>4hs_?6HT`M?U@Cm_crJbwm=L8oEz9iTvxLWWH!Ht4j1>Y0= zQ1BDMor1drzZLwq;32`E1&;}y5f?B~0!AwDiphs}BpkHu`V3}Z0utxB4!P$aO3(gl@B)C-Y6~R@4uM2Jv z+#*<~K7Uu&+XX)s{FmU@f_nw`3;sv&h~RI6Ck4+6UJ{(HaQAd77>@f(F57^xUFryP#Wel3>1IkzlFdRKaP2 z4T1}l_bgpMCHSo1LctdWmkX{GTr0R(d9K&>X2Ev^w+a4J@N>bh1osGjFL+S!C&8nF zCj^@WFA822T&g3sL@Ylv^TmLYO}Gv%{4Ypca5!Gu2K0KdplfHWut3SkDD6XTvJ<(YwBon zO|zR^b6urtZf#b~az0F-ouAbI6xVUfmkWX6IxqR_ZYv0h&z~FMdXgYMtz@VEwFt}>*3Vr&| zhIw84%D(=^%k@J2Lgk7FXx(OPbKg+EUanuhYG81vYG7#1z`%01N+nmUUcNx33_X8f z;fle5&1L;fbKgo=S?v}MuF%i2EpS6CTxG4RY|xmy%2}?m!&P><%5GQL>#Ay9)pS=? z=c?*mRfDUV;i{S>29g2^fvcJ&A(SMzD#=EttC}r|kU&TtB$%#RLQvs_^eTB=b3 z;;Ne^tdbH}E!pUF)#6aMtL~AUxSCp5Geg26S#dSJuC~(E)=FkvZN01QaMK$kHxe5+ zz1dAi(j`8wuFlofONLyXq(_MzuCCM7bxD$>2ClwY;^gW(ButVe*HA0HkXpEgS*`)e zax-crTW-co>4|Hsb&YirGuPN4L353WnWRiYCK+>0)vl?*HFZk9TvLy0mVi~e=30rG zYp!?AlDQVwJkvF|y5?D~xm{xCnrBPxBzvy8SJLNNs$EO1#81*E;d3pWQb;$mS+3i) z)=3m4i4sIb46aqu*zRUkN)BCnwIomiDEV{k4X(Y}wa=6sy7t+wy<0-)+Iw9`rR%76 z9n&R`u49JlXmlOTl1quD>zFN-cOAX1vrc;Nh6a`|kd$@yxXxZTyVA|BbF&*{4BYHa z*VXR28(mMW>*t}u5H(-x4Wixji4+s={ zWtHL(UF#Y(I2r<=T2Q0W5ntMSMehvg?+`OPTz9twJ7!+%($#}~OQq$@2gE;FRau}) zS)0n4ZL+XfS@E@_U44*ViH@q;YJvDF3t1&vs%A>B+GKHMS*zNlke!XPLH zt7VO9YMRCSW+{zyqyZ(7Rh=ark=3f}(p8qaUiS^PtmS?Q)utfu-Zf6%P) zYt~pbcc}l}f?h;clG`K^ZR%C*RqNU`=4~@IRy7*4h7Q**>)zfb9>{98&z2z0kleM_ zYTPt-?JWXbMc?e&D*2o`L8t4ksubwCs#+i)Bun32tMutJ1-iB>tyMe}PkPi&k9=KE zXNv?=KhC1@>}~7S_&2$Q18dx}zUAxO&>FpSHZUkF)+EkKaw^;4BoZMG*6F@Zwn|i2 zsdSYjvPv~n*VhVUftqw}(P+)=bhXv(g4yy@GC%DYnMQF7YcWHfRMtTf+gvR!)kyyv zrS!Am)NDycgFro%PnzA*;<`0T-RXP}%P0&YkP} z`<6;G`}Cs8z{0-OONZQz&V94OxgQE{65J^G55czuKNj3B_>tg|U7Wi{*P8{m2wolO z-1l_-j^HPP>jZ~7=l--kUk>HXF1~cYce=Q5)cY6wZPwp5z1hpJbk5gbiB0sEU&(0H zc}=H$Rr=ecGn&rvJ8aIKpdg-ls7=qh8WHh8O9 z#!c56{VwNpU7PhZQ`aiJk<4?o-Vd>>1|rHQ?-1pan(NxD5?#7#h@$jLl_tGP<;W*t zkJ_hi)YGK*udF=3BtmbyqV#sP1Rd=v-yY>_i}T6)N9i(S(N%sx*WQ@!YNZ<8opE`o zSd>p@Ji1DybnQ^@DKABjuXPbWN&@rE{$kmUgSeFY2ulU*R8Ir2T5ONB`wwqw!Q|7nN%lo^l-;Z`$n;mVC37f3~jj zrV+kU{eq8jKM@@Yui|S@d^I_cBZ=x&I2hGKe;JQ@UEzDZ+Jj!O$cg+~RKJ{tYJ{Ja z5xz-(p`X?%Cqo~lOI@RMsd{vkagO?{C?R^56N&2URK8A?>r}n;3u%Q8-UOzdNi!);~16i5Vl9@9r_QS zyHtvNtx7e1nmj5BiJq&3CtpomkK%?Xy+I>SdV}hteFYp5KW4=A&QN~vjj{a6oJQ@# zHPTyzhwpNdQF(q#i~ghCcC~gjS&8sf;tbYDW;VjtsYUpqFgoHRz1?5Wa$HfmqRglr zY9U{z%Gc{UU2;YH$RBd3us`a*9C9?SO&S@-w_X1!H(jkWPBQyZ{W9y(wOLw8dvY+* z6}jb^@qL1p`>M^_0Bs~40pC->p9`q`V))jt0KlXxg;EG%+aEz~58t8%}Tou6U zs_;7+PX%%jUQ?uq&kahaefY%{K0!D7P5a$y9ea*`7@cN+G_{KAxbLBP0CKlD=@{jZZ=Q(v1nYyC9) zM}GR(tyX9k{|5bzX3h)i+bP>+G=vq8QBHwhT*kvAbhh*Fy80|?Q0?s z;pq=_R;vc%zsVzhAG@uYT*Mcii3{-amQJJr9!tl#n7wUOtaVD1uEi8x89kmE9q7QW zklrnB7~bqC<&hKgpZxnr6d@NiQGc+b`zsx3JS@V~6ZmHKkhtOd6^cDuc37G^+58Oo zi2zMgxEf8}D#?H6MpdA#j8~OgAj&Dhn{s@c3Z5Wir188WiXV5*9FaL8Gc`kxcu$yo z=JUvRZ&`iWL;?EC7j>X?Tz{&!an>%2oLkf1ILq$7HE?xXUstsPoHffPbUo32+g#^P z9$Fh?Pab-%`@yBZyU4j|U%L0iuBFG#LC*R1Bwu=Qiid~vR+-ruej(C+7sB#bF61_( z?~<94nUJZ9s2@h3hU8J#$aIy6x`y9o>Brpv4RJSoUOxwR+F`)4sIv#Cz7S z8+2-Qx!U3vH72TMzB@Ko-&NtwN|n*Jfd8V2&pA=w8J!>;U$NzP>y1OxzI66iUpr}+ zxm{<{Zou^^=RV@+q|C&atFN7O_x$l)e;&GfKD{=op1tty`M;9T-8!(xvh8Pj9)AAJ z>RBV+-)G5_10&ye?pp(UcO7}wX|wLV`0n{mZ|Y6ZNw5lCC+doIGH%!#+|C_0ho1j= z=>B!P_q=uz`N>Cq$~m`p%(2Otc`{K~B)$qm`1R-F_!XQ$ER;{Yv-SUH4y%)-D9zIwzBL>A;KzuuF#9lGT5Dfo=`WDBL}|${PFtDWcKOzUuP=Q6hO%vv0Q;I) zL)=O-ZKkttIH5~sgLq5U=ywUaLRvOo_>HIhcIk(gxC+@%WDqN2G7}^O9$*V$Y~>w78-0~(#q$}yc-{xz zX7kzeAoRm@iGJ|Ax@b3VEb}FTWl8 z$p7$#FTPFHr~4u0^DXqj;iHmzzF@dY{N&4Hd~pT2x8Lr`riI^_voR0jOMd&N z@GAGF=sQhi*NHy9V>Uy%?TZc0eO+fn4;AbeSp%%F(;JG=UlIAKKHW`Bg|u~|#HZ~o zO0oM#WhQ63Gu4^nMDw%)X}fD|$429O_{hqUWx99n@R3y`x6@cxxP3-8X!Iv2?U^0F zw&Us@U)*uhPS5Qq%eUkB9p(APH;iu{KVkgL@iTNcQ{dcRW?tQPaNCtFQ`eO&dgjVq z+IEp|>uSGs;O_Z{^q37Ezwz9lm*a$3<7S-73#2uX*v6E%(YU z=5p_9ag>;eFa9Dkd=1UMq=xLXX2Y*kF|x=2l7z3CE9qFL>r&m>Y?(1)lve0Ha7KbU zobu0)q%C|g)1nBz%78qD-^(CgVifHg>n8P$8pj5uEzlTNs2#qgzF7b98+d-cMp6-5 zAM!Q}2X%Z8q;<0d2H${&Q4YBbc4wCI+wVCtx8V0NS4Hgw8ak8%-k>}1z_CZe=e-1XjCa8=7-hMs{i4U)#gNzN&CLt<3*|NGW2BNbU<>nWSeHokR&GLM=X_qD z`cc^sUqjN0LxXt^IEbWTk4ZJz;#b3xvNJ={&lgLU%NKb0G*6W;J4C;v@{0s;m3xbK z(G_A$tBD>rMPq>c`md!yLrCRUtp-I)Uz|E5>q~BIf_VkLq{dT{YeYHbok{mL9nA_d zS)&O1c-h;ezV)as@6~-T&0-kE=UT3XvW-4Ms@QA^yq+Pq#ZtW&_j!@#{JdsMOzMJ{W#ogO zHO=Zv<=P$MCccDeaVTFiE98^=qE!D4vK{+B41CGl3fF_z|>4`-u#FF?LMlkrfhmyg`1?gY;D;=dYYj*?VckK z8(BYcXIZ@LxZvs?_uO&ZjyLUisp5jycN`T(2FH!>h~k3d$5*&s#RbRd$+;_Aj#zg7 zr5``-tS>a3H{!EzwcgUHo$1Zd!AtE87e3Ozd7cr+49uUy>?0WsSbpMx2bYfO@^cq$ zs7opj7AGyrLT=1vVCCWaeDU4OV86!6%NoD3Zr}RiOL6!;8z=jP0Q0m->wy*$F<0b7 z%vF-2LH%cbI3%gyHzV+0>`9r8A$|)!yG|`318Bp%6h0pfH@}Z8^KGZ3=f@fncUG!j z#Hg$a^eI0!j$fokWAQ}Ps0o`ah5h;(zs#Aer;v@o4+M`2o$vtuk-l30sfDN~(9aj) z?YB!RB*C<0)|GNbpZQk44vS}nJ5X(@UXPr-g^zpex>U1dY4;| zeX|P<rbjfe#+9A!<0$B~nA2iXzO7}m8P@P@Mr8gs%!-h-LUN9T_|av(jwlrQN2*OG zvprxkJ!qaw=qOQC&{G{cit9(xy_X8U0x4e@_1E+lDv=R=}^hD`9 z$=>@&cY;;{4%gEWBQ>knb*GU>M=AJ%opm=(>DZrDiuO%Do5U51r?8V=hALzQ{j8cV zthDt7ZRDGA_mM0S78-^%#I6S2M>hQ&jkz82NvmiKqs~`q**jug0iIMydKgo1%=#GT zQ=@cJyxk_}jt2V`q^6HucHJ zytM1nlkpY&A-#}ZWZNSontBUI(%22J~=HYD`d()0DYkUzCp-bd|5rS~JYHbs15D^o}f{q^&5 zY@U~OR`J?3dT2i@3H*)>RuwusbS1i6Q3 z@mM}2*JkpbKIWhB)XzhLA2ADouF_v`tI<7+;%&v$;zQ~VUJ8Ed%XTV@gq}`PR zk9dMgWY4`OsrISS4jSwr6x@W=DEqdg_YMQ_K#|+8hL0GhxBM(d5oaK%@oXz=9|nipX@lK z^$$y~Z0SFly)4_=KUi{d-%9otZ<@dF=_B4R?_WE>?33B!#tUCNDb-s&i`>ay+sIG1 zujo(v(%th9pSj|!5giBhES)u~>)8vZ4t8l`urOh*@wNCG>=IvWUoLGx+wiNbH*v>4 z5BkXb5L<&zngwC5h$a#VVI7mRw&2;(j@8k8i>M-d{?V?w{ja2h@fNdEciv+5sZ6aj z5elGzcB=H3nBJloKdY;W`eGgv48J)^^n(2gQ4Ns^^G{}p7Ufuk)R?juVL+CEn2^~^ zhz^Moh|`FY%>Vjz@8I`4g%7{?f@jA2;;)kys83YWZ=&Mh&3$dzv)8~y^M}l#`Mo=7 zp#J&@jFGc3%O1m|ufeu^Ujqe&LsoBdT#Pp6LZ&5QmRzmYZS}?Cu%wjR8oTFclUjjh zDC6V5>bH8^$A07Ogp{wnBKBxML+3*VZyADsK$Jx%{an*Cd|Vv z{;=_;oq(|j#7jc4*b1tXQ51Fx4I_dI7^5uYbHWd5mTEIpi`q_!bR}SDKVSw_oAH8D zjB8SVz|h9xh--dE#F%EU98vCL5x0rWD1}s5Nh}6Y3K+jOr`Oj;;o zytB0^EC6zBbtQQaR-MQnVj-s)A2P|9TPa4ETAWh+Dl#^aC#WWtvdAbI75mkd1v@C7IZ{^4Vi{JWv0_KaitVJdx_Euz zDBVxU)J7}O&V6XJ)ys{ESd&OvL?3tg=#BblBSdg^VrbgtxGRa-KZ^5wjKwPW2@ySt z9gEstTir#!On=~j*$~z(W=8UgcfdFK@xiwv)z}YWaX4&i5!rrXeB}Gh*9S|^Xj7lJ z*TLG3&$7cr0Z@ZQFl*^0)8YeLflAiKeuqU4p^TsXWBnO-Z*_bGjm{Z{nsO~gjoQX; z`S!6iHp>Wpk~0g~AhRme=6zmrriAQd`yVU_Ue_oHo(Ug;24dy2%QVKRv}73e#TEOh z9%3m20(rW4Z|6JPz7| zZ$w6t)-oHz`qK-V=|CG8c#XfPNYsEo4fB0u1X(3tHU{q#{Aoi}7nZ=RBct}L@cxv6 z_l#HFm^&9xz-5P?dl;?RuRcJ5i{I1 z3I;XWo;OKJEW8qFwQ(ZKTLWSoo2wGt8m0NsMz<(nd{`s0D2$xQPT`e7+95~SLu8D+ z*Tgzo1jovMn7t4yuhw($j#dWW=p%98SL_~?cuW|#FlWk+uc^WB7X(gKMBEMY?Ib3w z6~gNz2H(!QKOP_(16NoHV1&Ss53Ug@BxmnX@8^o_LHKzFD+@_XN5pls&@f>hVLE3X zz3}=eb_ZU1-r$>TK1Y8RsZEdDv>C&g;%^JD5|}?`4Dhw|ZAsKCANwy6?S}JlgvWRq zOtz7Y+}Ixp@xCPZJ?dkJDLE@Z_APoNQuexlcd&VDu9xAtu$S?Eha7Ona`uTfFv%5K zi`9{9q}Y#wNi{ibwU=EIANLbeFl)3jCNbbFa>w!+#{80b1SHyKx3t5(JX*^0z-V&f zI2wd>+YS&XTONz#4GFW|mnDud4O-$c)P*HUVz8n_PN&7AM-Q>eaMOH=jVfAe>*>tH zyzIaOvnPyc5<@!y0->+fl)(0&DNu>RZ^aWr7O{`;ADK883FoeLP>XIeB&F<-J$ zd!Kf`fZp(CGQ3BB0*2mr45RIPRv~_(33ir)b^^w8gZY177AAM~i+&gOKiL>YmGMDO zIhQ#<8Z$J+?9*dP17kKmj5ao&l}7J#vTZy)rN4Hn7Cqn>+|lk+iej+6$SOOdzMXKw zz%b^wp)QGG6p&zOK+4%MfN$syF%}YP5*PNB!+tXyuyjVjEJiX?HhS2*;LgvH89RFh z<8=!?Flx{y+kdC!$JE9WrNDdhw9Kl((0af?!3fP&S=SG1gWZ}{AFo;U&e3keRAHId zG8dkxzb6Q@i}L%u1JaL)pLJ$Gng_FMVI?^KP2JAt+fIT;ha)UL;)DeBv(BG2JUza9PL)#!typ<`#sfVmHJ!Z_S25f z4DIsp*ST`-=h&MdJ8P$=LgzqEh<1M1>8aEXO}+5BdqCr(9U#&VkM?dVby9?LB)nr# zr}HJ8pU&MMnxMA{c$eUW@wT(mqWj+Q`d*wq!ga*5l0_pv%gznEHQ|@B3t{XxufbgZ zx&D)rWvZg{f%zETQao7Nc;;tbSk*K5hb1R>cXW?<-?zwK5okq47K*Pe zGU`)(Go}B$A;sLqRu-_ccG?9`PDHd=7J)ScVgzC*{2;9n>-&hlO)1Py!I2Y>%PCiE z3ii?4^h({GAzQ;95FV#Sf3ZMV^{S{mZz>S~KoJ-`G3zGOZTmbnL$Dnn!}&UhLy51g z_FNqG+X-RvQ)ejGp`O?Z6tOL-45yxnb9f z{+M5refV4oTpI7+V57J{1b~3WFIMwzCDTx=RPd1kzhV`pyv}w3L(TRNE`~2EF(&@*K z5hjKRewA^B$4)IU2H?H_W~Ck(wV2gbM*L|AdPm$ujK#{4Me;@`y|i+B%RaLY@4X0C zmmPim9)a?hj`?-*FxR%-QEDWvCDLFIk@?(!+Jhz{aoWw*=}P5+*TzpIJMh}$e599) zGuu*;HK#?cv-K)_AFN6(!3owyHDst~?UNazjb&d{r^O~jg8AkAEZWA2ULYZU zjoHtz{ThJBRVxqHEvz#HJD6PA&26tyd}M6^`OU?7{X@gYZ`MBQMOXUt8-|oZ_8C31 zpoX*gy`9e^UJLdtc}mQmf(<8U899A^PJfYT&a0YavHD|@nj5hb`C;FR*>WtKX(#n1 zpIEVA{DP+VwMtfav)3QcY@46bKYKELwwY&$HCgdqC+Q4&6n2E5(bi=tWwOc69CC*3 zwi61}3rB(aEK0@%t^|U1!@L zL`I3uybLh&Hs8^p(ebBui5h~;kI&mNXpBb6%4M%Fd#hr&5v9jxWCR^(4lRz~*BY&#Zh ztfE4`v~jS?RjPiAkS$&{&w=KFV=TcEDPfb5dc2|caTbl{`T!y!Bt4wz@LE8*>?jF2 zG>HXA{bmKRcFDEsrN>p9#Xt)2?4dX55qen_!YMpNq?;CG3k* z&hLIAyP=%z?f7!MfmAQ<74vZoqKy$Z8j%3x46Ei(>SNEX&fu*)E<|-UKCA}@Tp>G8 z++(q@SDE7enzuf&tzspE_>?UGUz4zyy-qGI72vay_ zAm)QA^4qE)_J&yl@gRJ}Qn5Qv56m}aj^tfoKT?_*eUYu z8ICw_NLCl06ZXvgPQB;0-!bkJo$ZQt8Es@5sqp&0DGSHQ;ca+x!r~>$nXb}<;2jvh zWR#wa*%@~v)wu7iWSHZDGar||H_1vb++y}j3`QScP!F*%w3mI#53LU|dp3@K8jkgN zkAsrOgnjlwn zjp59enBQb<84W*gq7Oz5ew@>eA!b1){74%P+RUd0J$WW-FFYG9^k|b>$}ML$aE172 z{qyC#l=)}$&+op5aR?`EsUN=ab{*qxo(!EM#xx%K(F^v4<}k%Y&Y z9xaL2=aAmq^}%dh_WEEpj*&omY=7Qxtm9H=rDzUohhF-j#q^u9NVAJ-u(yCV$wT0m z;1s%RIBX9R5mw7=+-cd)6xk@4oG~ht!*akkKZ2Iq+GC9d8nfS1HJrB#P>Q`b%NKBV zZXJq}GJ!oIMxm75+iFN(L`z{DdgRMtbFCLX1zd7x8doS79uk9>U#WYO4(0q56xnfPK9xA(o?O0xRvPm}ny7&y)7`R6{>Id7P? znGsq=vA5^^j%V0I-d^i3hMSz3nen^0$3=U^;qAKoa=UA7p4FLSwQ`d@>up~?@o(Qz zZmRI%4ZOV~T5QKQcki>%PB*)rtoc`{o}*N@JKnWDD%uO+w7Apmdh&cbwc7c1)`|QM z^<C(eUEyisNwIyB*Vr43rF!SEdE`g5|IC|&hiTXPKt1#JqI0F% z+iupIg?#aVZyoSugCn#*y|Zw8>MM8?gxxcNVWsT^;l^q0@Cc}6mE=#4+(mSb6a5p^YWPMUZ%Xpb z2HU0Q3k|eRZpoS2;w?(P>UT&)=LGH8r=$KIt1>C&Vqc$Yvd(iyeP`6=qkcQ;(ouJf zs&L;L^{V_nwM|@pF`u*2yn@5QeW5 z@--sf6+J$p@<{#7$JHqndN^;;tm_=r>uKQ}Li_l+0_U#pKJznAcJRd_f3kotFgHZ& zpZ;4!e3_!s?Nq_n%k`5(5$^9xpX)wu&Xq0W-I5DV?tZf4=F`WV?!S37`>fr2K7Z!x zb3WIxeBot_&iu?Dmb^Y^_nwlI`KB#zmnLT(m9qXe$8@sl*{2eGd_i2-B!5ao;`ig4 z9`CuqR>S-VlfDxG0xD5vd8&{sSntL8*da4K-X z;&IO*)~1QMhRYkeRt#nV=*24a3&i}j}fY(~I(F@Bz$w(rY|9p2W;X0Pbxen}*` zer;T;h|U1OO-?OXn(>Z$p}=~jnoDN80 zEoOo)N?N33Bf=OFPxnXjADbJ|E4Tx<^07X4vj~&2;jD$x70R-AYkMf3V(27NMPifl zH}KSKBV<@~6?wMU52^zesbLP~d4Y_fjl7Yhxif$}8=i#P0qA7?-;?hB_J!%0Jb z+RNA{Vl{l>HdyB+4VMDQIHLB0s4Qg(a z1lX+CTC|xKyaGErDn(n&5_lKR?t;BS(x^ANf&tcMeuHY)?`$IDYa^-4wO84eA!)Cm zl-gT2Ygr*|(4*{qwJ^6wmz_Kh9y6KBZkTz`-2E(CrFFlfRU7rlcGu17XJfNZzfihL zZQ4nu>CxEQ%3Vz~2gDlKcMRA|@-k_CMH_?e<82rpyasOsW%H^f!kQiy!X{6J`5u|1 zu|LAw+^2~W&K_aq;4^lU(dQ0NUJ;FDQh)n|4L*@FwqhFWvtiA5Gxx?@Vg=D_*0#ML zv{NG3oM2wM6_zW&;*Fyw&k*Ypg6| z37M_aCi7VM!2TBP2Fpfibi{aWr#Es>!+6VY9+nbeJ&oE~@%1~p*;q>xV|}|GYwPBIJ=~W~_Q?1K-Jw;#(vGJ? zqKJg>XVi`^*&G5aYn8;fP|9vF-$iHq`Qn(Z+a~vjlYT!NOAQ{&7-eH^jBEt^A}sa? zyK6hl=qQvj4wNn~-qvANpqJuiHq&1{LqYU0_DN^)3f z(}v_~ExyD!XC9pR%12*FNA`P3$VT!smhr;xEJHK4$kbMkE&8(l1) z*Zt)8B|I;%xQsJvo8Ip+`gjS}YW<2LF2Zo@8zA7{#0RW(+YS zzgAa~Zkyr~mb=aMz&pJMaxl(2@im)0X$Q443>lB)+~M~%Dxx_)mJn=%Bq@n&Qz{bbV{fd4-+!Sb&&U;Jn8@hV%lRqivY4X;LnMm=~0I*4`%uexX;v%WkoQqwSg@xW?D^yhx zpUl4!$zZW;gp3>h)P>nQ>@0o5ZqlyD!fP9)Y^3hC0HM~d#V~$-hZK{R@#<)-vRv$k@)%%MK-QjR9~-l7Q6Bkt>H(}LS_l9JmsF3%+=6_ zh<}WLX(uDVjMC1U%+P(9E#{WZ$HF-uT{lL(_v@a?SqhdgU_Hf_gOM|A@yNXR=}9=* zD4B!H#2eIMR>?=^P3qB*{=;>Dj<-p<%xhq6kznH^F{6)i`&6@Gi>=5R7P(_&eLYyc zP}Z>Q@Y%~SCCoba{voZ$1}IaFn1y^YMp`jr!lMlDipQCWC|mG!#f&lj`WgKig_r?f_8 z7y~RgW9wrUMzBrKcu6b+R%cnvJ3FJ=7L6=DLN3j&*m+B2qxcEWY^>eq;2tvO+UDijU&E$$Qp4amgejC>7 z2vHRB%GbE@&tTC3I7WPx9pM+kZcx;bD{5Swn)mr>chzX63_1b&%BNTeUYAt*=3{k!H*v~}#?)(eNV^kx*1MU@3ObYg( ziRAdzX&VFEXHTw9BQ?g$_o5gIuGo9Sltl(9i4NI3($07y?O>BpuEk2oQJ=7WFV)&b zlZc4?UaDb>MY)VF5>Hubr5&PJTVqUOp(|iny##A^!DdZh>7hxi&A;utR@Nu-Lo+f- zi%^eE^Sw5^LhMcJNSe`Q@w1;XxrkD{fvuYvU078j48yXYYF~ds7l?WAL5772IBj)P z+MgJttjBVPyyu?i#)DbAa4YEtDG{*L>#^3Zmw$Sjf9Bh~B%Ct~?4{OLw!zwIarzT* zaFSK*5PQR`Wc1~&vB@%H0$=?YA-ld!qWX%cb!MCVmW-EdBr3?gl?F>p_?*hXd85Fh zCA7?uPiF)i^}?SA*^6_^zC;Lh`rGRizUf#>l^&_T9WU( zX~WwJKf=t*kO3D-ZxYKWcuQkg@|s6MrYsgSui;}Fk0ny{(R8vb9?rgWz`G(ybP@}X z!?)CY&Ae3uwd}uea@c?AjQ8EK-Hb4tVob3vNRHK=^^0so0Nw|9d~+KKmBN6kK;<2BUJ3bL{E2`ik9g)&R?a}u*G`hDkUH2vPa?dOL# z@jMnvSdTOOCeevZCb9P2LX#!aGB|@pH!fqneG1%|w}l;|{86y|BkUDBME+E}KWA-U zC*v2jw~x-dvl|n>R36S0*?A;(jE>d*M()Y>9kfp~JvuiX_BE#I^f@Pz_|CfhatviD zNv(EPiBs`>h5i4K_O`K>Ue|r!8HZ&wVF#AT2-J%eT}nz!y1LfPki(gg$Pw?naAq_! zm*mV)BqdqO;c!HYB1MLJGa1M#k|==P6m|>5iEF^_mjZR{#)7}(LxCDCf))atra=6m zACeDr{E`XE3WeR&DDu+v+yC>Qwf26VbM7Syf_Kh2dp-MQ?X}ikulr$Ej^q%l`DDu* zKOL=ix8J$%Chulbe)gGYy(h-hon;xD+KFGt1J^C?XIjiFTQx4N?~Tl=(=nHvG0~+{ z?HAoh_ehI+k^TS4wzl&z3*8n+yzH^KJN`uUE=;mA?%@HGA87v)_cE6K{wUs%L4`p7 z?hJC(kH<4R(fYx*(z#rC=B!AZF*U}#6p1_Ba5A0qkHrX|Y7w)eWzJLtoQ$65?iB*F zdOy%s%$ZR$->k0aBhmAt?I!)L_C_BdxmUm5toQl$yz!B@>)l`OZeu;d1vlP7ImGEI zu5?=*ZyHf66&mX(_DIZXJxz|S#4XCsYNIwG*_ir&y@-(T1-%ihXdPSk^3x zWkq8vypZ%v^~jWBeJe=cI@TGuPD4AOst4V<$hfM`NKVMg4O+oA`;qjV?X-#mvuEEM zsAo4tmU%Yg&dk{{Tz27;8#x6|u2myoQok`SyQMc>ndV$;1DExcBO@R6t>divR?~(s zxL7A`o zocA&c6JUqP5VP0is}p(W`(ZJpLIUDzmdYAdTv zi3Fah&gpB$YF_TNwQ>rr>(Aexje9D8z18{fma^ZCJ1dXGd&zz_KK+kzW99em`iFP@ z&v$+QuHT936)IS^7QYs?E59AT%vY}*-@XxbBF{&)2(>1>TddZ$T#4_lD4~^#mECRE zhU{*Cw*7LXJ=@=4`CL@CT#F~DL80fqGKSWRt(N6VYo)4%v8Ys0wF;kA$@1tn)h?fp z|JAk|pRUCJ%Yf%S*#GM<>YZn%VW`4cK}|&eiCNKCxKTH!%%W!Sejo_}tqDS7Jmws8}|{>(M*??9Frz zH||V3n>S*^N1Y;bm(lP7JLuE}r1iv2wlR9=-jEzyxjd zf*lyARogLnREX8wY@=R?f3eoEjT|MUM&){ZmxXgWKHR-7@#j=7~DFD&*u5CF~DCxKaB|uVOuaaMIv4I)3@_{wu65xJ$y!@eA#-o z^zchCGG2G=7q_M@N4v5mu#}mBchC5v-5D^leheWSQyeWj+bggYzHH;OuUMQKofTFe z6VGE!Vn@%9@Ak|VuJom-2tBYW^iheaG{`*z8Y@wa{K~gqhBdY-s4;_!;?!U1MdM-IPE3_9=gk^*!pJr?h{}8A*|= z=ayMkEc)#;fwg;3)7N6P>@Pl1tpK0m)CWPk?@aOjRQi)gPB-5QJAIT-e1*Kur{NaU zr)+EXfTx)s6rcAs_3hv%+u ziyuMslRGR9KNP;CTCb$`lmOiJj-@XBg}h5^)m8iXaA7g5$<@L1c;_??rTzMvniM$cbp&ner$=SOY77SF+z$_m%{c(&X# zB>$>TFRhjS@usSOxLWc&$G^1Ve`<%W#g6oO59BJ5ZNV!rmki5FRg&*oectYXh+me8~fAO z$tm;8=XaHF{qq%@ocoDwMTUtd)Erg$wTXE!2m04qI34p00OM2wshxe7j~W@vPSod_ zf1dBO`g{k!?CTqWVdf?IuK5cCw4?2URd5IH@y~Oj@FeFq7?z)(=$NG?{V~6K&la9t zW+QsL6@4jQuV|spCr0u7=%09gZ6D_^OCZ4*H2s+Z*w#b?GXfYCE`0{$sZFc_KO4gKHigNoO5e9~h|7@{DkAg>*oV#KtoI z`&uua?e{mIFzxg)bM$`WM%ZHq(T7BzRHOmn==HdNWBa&&eSH;A_x*E9L%oinP1`y3 z9b;o}jB#iH{Rhr~Tj@JbbK}QR;goGyfnRGJL5xN+nO|}T#9!zXZWk5K@sFN2?=pwf zu9mCk!6bAcO^@0d=8Vp+{#8?x)JLD-1p0w<;dyp7IaqcS^Oycs$2WeY|Mcxs{Jqll z+W0X2XU!(Kua#M2T#k0ryzoPO$P%0RReYNUy(^BcIxBL@zwAEP)69tc^z>s+#c$E` zGTO@GHYd}bQDAyh`|B}VzDa+a;wN)%k~@uI^rtaCs1>k#;vd@OZAj^!E8uxq-fm@u zmXFW}5#Vpd9x1a)7-r708;KK&!$o6Sg>-CgrJ~*Et1u`Tk5vFg(O%>1>R%X#FQ@T9 zDBSVDWwgJm`F6ABX!Ka3ALB_S+GQ^+pO4(}T+@Fu4wmt#sz2Y`bmy$JLW9o8lOjh% z7oH8jck16+)%4L8b*WLB3*mhw7DhaVXbS)0PxkE8`=b$kLO(yUhkmcO?5x-CfBrvz z=Gwpi7GAp}i<67vixY8Q44+Ocjy11c@0aVP5%}%f6+4Aqkyf;$-|qxZK-N)Dq@=r}`QZ5H9cY)GAt^c?bRKqE(_QwOtXY5@6=c6wqI43=Gmj($J z=y`fe80&|L4f=y-GZsW#0^fVYAcC8H#z)+$e3O2#6TNUU(4%mZ=Lhm@C-4QQ za*u)9CGng^knOA;?v(CW+tVVzdnHYhlhXaG-Os0gi~WVRn3?qBEAa_QgC0n}zwE>G zZy`VX`D6d}_G7P~h&G{&thRW3wN~US?e>4^bmcr^4x*ph&I&XGYxq2$-pcK;wtH_T z?Z{s!gRBrV$yZ~y@pf=-(Y{$frycr1CQ65XGN_sPseWSGZrbYGwJY9X_rUn9llkck zWS%}BG(S!Q`|qauAJ41ZCyX^jFi8KE_j3>6e=_4}R}b>ZO1~2=qJPzPQ*b>Wt?~Ld zw3)4V%KGovuGVV*k2i*Zf$8&(y~B5#+7$<^&nJI-{$O1CZuLJPai{n_6Z(oBT;!}KP+D?ue zv+mdty4X}zDkjH&dyE#@5iHOcIZZojjY2r%y}W3XI;Hv@=reROhRkx|2kGspQpX| zmZKlmv%5+M%irnw$_eCpSf1Z(zn%|#LQjf6$m;@@eU}M!jhp=Q_SxYlXJw=RY1+oB`2G_i{fwV z5OeSIo7(S}f)du%YC^x9Q)9K})tHlH0qxfRkYD1}-;X_2Hf-OHCg8oaeC7E~_W6~# zk?U-DsxJp+pd}*r&`IH0_=nZ9dTH#OANUA4&*fjEU0ySLbxdLST=jgmBVT*}>6J!5 z_!u>c^e@-#@Vxd`^4}*=+TXh|zI;GPuKu4U?^Y91$Z{#?56o10);0OOTTAyq9wr+cuC7-A59)G?a`W1xm&+|xh@P`Bj z6YR6~yS}}8gQeePyVqY~GJgP`_X(I81hi|J;zj0#bkTc3ZUz0re|{c|1OM zdI;a}zg}!7{#V~^vuxwT&&X`iFV;64FP>Yp z7Cf+=4~d`T-zx2O_KQ=61D;1tL8HcB?hf>+cG)!Z{WI2Af{Sy1>PhipB_g?|9D~Xr!kK?|AgmHc7c2kP{&Ar#GGDOxTYN1 z@Qz6SnVWA!i)dZ6jMfc(Wc$4R?RN2{y=CdY%68~u+Rn+F`EkJ1i2fp0Zu{FD$QtnN zg00%F^J!eaqEF~^<{h2gvT3toTkZ6n?eLGD&zf!cpE>38> z{rxNP?zL=ZcB*HD!ezg+K0PmM0v!Xm?1A>LH~O;tk$e)zYkYJ8a0R_+6lqdO!Lh!3 zN*_ep@t5e?TaAXP#ilp>Z`1gBzkcWfuHjeBy>k2_R@1kO0`h#ycAjQ+Nx!U*-` z!7LCwpOuTWGgG+Pt-byQFLGOCPlKHCNMN2v&(e8H4`9eNjsHK}$5!Stw%;mGW8*>z=rGIcbEZg(Fe?!qFsOGJpQTor=l`)VzM7#VS(7EIn(n>lR^ikt6ThU@| zhfl%}-bv&o=d|~j^B0OFJ}6A)eXd{-4F%}h&g__j+q6EOcfW8E{KE{fK~xz}yXn)> zf1Q=fRsYn3vWMgeU<*MJ%!>V!%w;vg&KTdWGCA>=^r`l_DtAs1^$!QCR$XgH--RC8 zf1Y=>dd@}C7yJtwp<5qdbn~Au0RQPs#>YncTd`8Kd-|9Erf-M-vYqkW4n2vwvmN}= z?n(^puGb*@V!l21Kig%0jrgTq^|aFN*>8T+4r%-!Jpc^zlXMq1Vl~t5x_U_ppu{8M z-)wh&UC%$J3*YQJR&G!8Ly$1(pF*~6@=wvOTrk!r%|hOI>33D5VD9vu5{~?n^m%!Q zJSO|cZt;{YUaj9}h}tyi_ArCoOl%=?$TQ><=0>zAwNUH>!gwc2GF z$@*aba&-1jcD1wP*}athYDdCICYrw3Be0MBLc6H#tgmmk|A(h(?ax*aP;_ zZ@ELic(h!5PbR=1ImATBgW&Db_7fuqI!Ow|FdXW z-_CqrT8*DRMA<3IU*hDH^tE($EBwLPCH;YMO~dj(En9o?gCW>w&e^$kcF^stzh<++ znd*)GL+4RDlQHw$JBR(Vn?8^pUlt@% z0@+%9^}k?Ft=h@_QiZvm*BuKQpZu~Dtx`KHxm{09|93|#mGxPpp$s-v@9Q=NvdhR5 z%ltCcACup6Pt5Pp$T<-F^d^V*Ms}I%xs{*B4D0ys-6MbKeUXPo?J!w%#$bK^eGPxU zhn(KYuKRS1$($F9_r+6GfI9;Yh*}lAuH7}oABbnkggdudJ$E|r=0SFy+TRbf&mJG# z_4#${?|mRsV|urPSK$0W-R__p4fM`QaLrIT>3wnGsep@W= z3(7efdj$=8e`|i^M*@lp_s8zI5cr}OYWS)7hHDm!yk{cmTRDl`HnCXzcsxVhe_g-1 zhxPZjzJvY59?ydvt={*|XLhFAH}kJ3&$)5a+HtC(@?Lq3Z|*U9H=Y=Zc^PZORW_!`6-VvbrZI&-QU*!+;GyiIS%$E0M&gZ|5_i8Y{Z-QZb zZpYXppQg8GaA!c?u5oM+`82kV^Y3rinBFUZ?9iPtTA$|6oVht>5$_r8+v(r=z2Jx2 zWH!mav3;B$dA`Y=+Px|t`*xmA`Kj@H`KkGN&lWLPDBN!yqyL^iXwQ2>G`?grl0eTt z8yKqmnLW@hNs-ji%h&$45aHkSg?#Dn3t{}^e#U1OA?t#^*Hy{i^5d zog<8&caErivwYUgB9^W^?@T{1>sw3Qj(l{x&X>8HNh*GjZl4T^svDlB_<=K#r+NA& zeK3CCZtUp%1wZ}mCR6_4cBI^Ucr#BA`tS40=|Ag7>7U(XMtvXL@*?_jdoTZ>dfj3) z-k_ox>JAmgr+w4;*58COT^}>qbiR%4#-QnoS?2l2{^a?`{QCCk`KY%&Tl=BC=b!O5 z7Dn(*O!VL1xI$}xKK8epsJ)(F)AoLUc}MW!c(3n|#v6utAMmMz?~3>HzBk_edw+b+ zcN5=N-dkMX7p(UIpK9;^)!T&W@mM_jf%g3Lo|7ZnXX1tu?m^LQCF4CP<83C#<8Bk~ zAo1IGAC1r4o5Fo3+;%eFl)|kkKp&2G>(V~Ho%edX-n+$xpv#hbFBxSAMZrr z4wv0>Q_Fat%C)$ug&Dg4vHf%HEx)>1CC;CKWp&)qqB~a}?D`*PcOEKlk?6pL_lHzWT*yuRr^)|DcvX_u{*Lp0^es{15myu~f0m@eZW75WfZXpX*2L z1?O%KJQ9v?t3IU0h_SJs47*kSBemmY!3xGUJsVGFekGm{?)0cu@m7qCS1Mk6ym+Dy9YyPqzu)t4t+qzlX`Tps({^Lt_I9d$H@*`C zQp8mEwaDM;wVrEj&Ojz3Onc+@(=q>y@Uz;hk=42znakG$UwA?Ahw^{CXFb}^HGF7B z?&EVY3-IY%RKQpd!AhYrd5PJ%ozwo3@$_x>Dsy-V$Q21CF6PmDxh4tD8*ZVl3HCkP9vy7QS`X&#yyut7- z^r|tSUFQKS2H_Y2P?9${Vir6B#yIbSyAG(Th}}&uJ6tz~02_{7Aph|sr*tu8^b+Qq zfel7XDjj$3JuvH`A(3&|Ya?=+ZBsjwyPQ`KkT_*4cr))nzVj0zF9{>b`eQ8B?98P&n5q?{R9j1*5Pl zKtRLF4oV23cRhsWAt{Cyrj^c`5<_WC{Lb?on zuqJxY&StMHrUn6eNVY29jpaE(4#pYDrig&Z>d z_&4n>r;9Y4-2MGz6S^0)obkTB>F$p@%yeIOluUNOv$5YAuXyN@j;^b>4KfKmhO9_f(Dn0i`?ss!t#LeN8nP#@BN=u3M;KQ(uKv`y)y zKatsa>qYYz1KY@kUJ^Qkm6>veVew-n>xNckE3;F#VyEV`U}nPDXl$&-rxm+jEhhSK zo(`6SB%k))Qro8(z7pDz+vYpNfFX2T*5P~=*6Vin0Ytqm2aF==!L)eJ`7%f(&qLWI z=xEC}ifu9UWkwmT6LMyJrw;8JMR`Ql#(M};5Sd2O#;0C|aV>K<^U#k@YUQ?|v9mtj zT!R)R4WIeTI|sFpJ%g^Jwa^0;$6Dz_)#&V`+R1{)-Ign6|2yn-`~M1pqTLu9#Ek&f`Ab2bh;`tMKp$Y1d8;&^1jD>(+6~# z{u5Ie(y-cis&VF6TNILhBVX`+ zOGo3zrF*uHE)K_kN85c%bJi<7CF>O$lgC^-C|cjNCS2C*`g?t3HSPq($-02{Y!kXJ zP4;cQ8yYEfHpYXqZ2_N&&uCmoR$I7N;}bfzMw#AUQEwNQeOoI$Qv1~XBtTpWKAYCq zUyD&+S&gzABkB}FE`hJBA$gD>U~D%azZL((*~l(sm~k4ha=hoG7n1ux$wRiEk`p;) zAJTLzTClkPt$+br)`F*YHaf$0__={uuGVrPK0yV>=lK{J8Ohm&*BZ?c3C78& zwMtSV{pe#SS`;l|b%M|dOb_@^6GF098f=ZKFw=S~uFt64{c$Z*?HNAMNhc0+SsnwZS^6S@c#Sof@edG1lt#~ePI+=q&`e&`w2%(dI+DG0-jE2(RmygHk<@R<~s;$5~Q~^Ke z)X|MS=6q9-XPtKfp)K*8PD^S6p&{UxfsgE&+aA=jyj>cb*oi$qP#632*Wwo_0FD5s z$P&dcxV7IpKa}m5*4fx~{Hyj!k2^yj+|C0HksJQT;{97YF_t({93=?OSC5epSj6t5 zLR@a6suw~0$%;dc7aV};J&%%?URN*dpe?Cq~bvslGH#{DHp;Kf| z@+G{@O}k+1@#r5MpqX$7YwufB6wnasY-IN#x$tyEKF)*$%KayXBbi=#uD7BSLc3O5 zwU+a-2Axp8)lObR@fd62-W=9xd`Sjr_Ts1ut(|klwGEc)#@HMLd<+IP59B)30cV?U zds!&SPkp6hwxgbG2qI0`QJgN-*5dSFU3ed$0#hlJ%nH$hFUD?3)=9?Ph(3Ia53&ac z_>}!$=e4dk?RXThqw^S?UWzgF4sy=(@va;}z;nn`rn@QwzO zX9v&mD;U#f?&xD*jd%752>5n0MD~FcqY4cA(O#!4yb^uMKWB+7f17@#4d#T#OOfZ6MfLupr5RZZ+m^$kRnTaFwD&AJ^jd^s*qa#yioj#XN$8H$)?W z=%YjQay4d$>_>C#A;fjiOWq81Eg<1zBscific*I9?i-{X*jFFDF9#bW*J4Vo5=K^v zB>TKf24b_fXZl_PE z{IQGB$NX(PRA!5A=kL?O=Yl1w8+B@YZtff-g2&qJsW;ZEru5mE&1QcPJ7TV+2Y4Y* zQ^nT6DUyP$5$Uizvy3-2i;`(`UYcjo-@XD*vUYd|yOSq`E%=FjQDv|p+)JgP=L5#k zx16c;8r|U_2*#k#>_dBr{78tGRuE&II1p*A&E;KW<$5b@ytmj3-1xfah9i#PY3Z^$zHHmH%uQrK)0 z0)ceolv9Fn<{r{uJplbg`KT|o{&>O*q+loShb@Zo(DIkuz&EW=`?qSKKi(6-C5Z$BgAxX z$wow*V8$7t!NSHi0PFAqnpWDC>_79xrv!aWAsDBJSeLsYU6DT4L40!+q4{!*_;QRX zd7rkFVry79Krm<7L3x_mYX-z#_H9C>4a|CNf6#~I%iA%I{q&M@+!zD}d5>;HyZtG> zhonM`S#P3`guu>rFVzpzL(Ey?36ZkUzsWPzNB$6luUO`{w zn|_Cq`NUq@BQWI`Mur(%s>ZHY!19xmdP@N zqvx{-Qcf=$1ky=TI%Q$PEE)zJ1<*SPm@ATtnK4svgiPWoW}2rMRInLBbfi9ruk|;f z^mqN}E+9d8|9c2&s?t4}Ma@8j8^EGHBz)F+D({GHoT(7fYK4167l=r(OL?b|Y(6lO zatw&Ct=`vgD>w>DHn)>4p+2NFgGb#SC7+)?tiYkQRsAG&;AQKhzxzj6m%KFAr+F9l z)Nr0M4{sn`!m{tl>&ZhR=6V0vNlcWoCTt3=7CNqeDJLK z(s@er5OAHIgOBF=VBZV@o$9kr-FZqjG&JUC!633iKBXQ4ubQ~4hk&-^mqG{T8|#IO zIOpi2-uoOB^jBh>X)cTW@#0|mNlGPOiazpw9tY^L9PBN;eQy|z!bX}|@d^;IQM^B#K!UKgtc~BOkfEW2wtb5>hLH@~#6NDmh zhB(*Sq+KmneOM2i-&=MO&s@#OOu3Hy5X2^r(Fnmx(x=4PzzD1d+#?BULiQ|zzuf3Je8~#9*2UA(WyV^wWe!p zmXf7!E>0hSZ{@#P#K^4ng*G#B0+P_95Y=EEg2~e(r6u$59>77Y)w{%Z{$IrZ;8XWv zr(8EzVI={H1)O8#8AppCs@F-7oOC+bM+jC8N4TB6<$bjM|pfL+6X4&$NxXI%**BjIr;q2|5SGHWehbM0m0XNRtyDvV0nZuEH2X>t)$Lw`i z(0z@bj<(D=?jO;8I;U58XYB2L?K3%keIA=D`WK6jwte%hE2fXUQ)99CSj>Z5LhgXb z)%FnN89sW)<1tV7U~K5t3U)Sc-EmHyX8}%G6K_%MF@9EK8;bYM+eIQ9# zy?2G%HtJmxqk?mOfsQ2;cz8-qXwRpA0$6mZIUfXmlnd#5-n9g*(_h-5< zBgAxH#=C!n(~7a_+YcGXZ$D(`M8&5AYrf$K2>AAsAtB}=pi)CXr{f(z(|N#YdCQOY zzQ5;(o!^x8E86HGm_1E zw>IY|_qYCNrYV8w1F2Z={Yjj0^9rX2w}z4L?Dwj&mg(I+n@S#=e7yB=DxSG=@WTPW zwIKig;K3g`cwa!=AHC7Xv4iIi0-bjcahuWo4dP1tdOBJki9G$I2QRcI>pTv(dvdr3 zM>pf>)*SBt(G5e~{=@AlIkr#pNrofX>(>2V3z?wpO3^{MP3Ux_*`sv0Qn}L??3f# zzHsTOdtY>I!jbYW=p(H*;eUVQ)nEC@cTT-7h!cy47Z0x97X9$*ZPCB-3xE1k2R?V^ zDfe+A>Ka_%aH93`N563BJOA$Q9Dc?S$KzeohB)3J`uYaEH+b-=a*#g*-zT4y|4y74 z4*|bmH_O{YF3g$cQ*kCEZA6`D$EO6u+2%*7KCKbreDf^Gx2PUeo z8*5GtqdeXGKaO+F&13EzPg{|(!`#se`x_>w5=L?4x0>xOUoY7m_?2%oEY(|#&c@1F z5AP#+F6OJ~&|-0C-0O9?aluD}Ywl}ze4UEFpNQ%eIA(gokn^ROrLqUs!CYO%5b$X% zTHd#2fE})0uE$*QEaD{wX3UnJi@}aC>ghAlgX8w|W94t3HVn;qzpd z1OD< zOlWub2+)A2EpW?(sj~ybUAin3>ARU}rh0A7&`8vN#G(8~dr* zm*9c9fm21a)em`(>9sYc!I9{vzKwb=drCDV$RYI&Pe`sJ8Q??eVX1haN5yA7N*}`| zgJ043uLhSZk}U~R;>4{4q1bLx0eYuFO?XMPFZ-uSzh7cZRZ$N0Uukwj4*xf zC42~;(^pJCmg~e04bl7G616C6PRy zU>)=Wt-lhpa?Ta)T9d_s@_X)A{w5f3Y>x2SM;I^)J=T49-m>XbGw%0PFnJD}62YXRAx9-0ndR(e97gjvQyl7iH+^ZO$~n*& z=ccqpt%zQXGt<0sV>l~38nkLC@x>GdPBsiZX{>tY_%t;XbU5BjGKZgxM?v?h_aAA# zmwn{ORr$!v1@R0f)%3 zJe%fWj6vZ!VS3p+_LH}jXudU11U`jloqe$mKb#=W+V{$kEj-J3;IP6}N!G(Crwuwn zlGnZ*yUrYo+KSY!c^JqC$pd5uvHg)YIA09IZueOf$~R6qv7Rr0(VK*zLVAP(ZiVD0 zS3>)2)Fi+m z`LLYdRj*Tz+C6N0@o;Kv6+>W^ets-8`Dt_#zuaT1*cVa1<1J2#=Y8FsAVhxlvK{cM z?qxd=yRC7|Ioo0WHjUnP_^X1<%|tM8C%Ytl_DXz)^Ch#O z4Rrp~@hjRrJPM7Bwz*(ZCtC+|zV%_f2#T+Ilg7FjT$}m~JdB0$daK=M-x=#Otsi8Y zESkCb%+&>BVZd|nJN@joez33BuWL7WW2{1CK5&d}nI~7;IaTUN0$N6&*|m6rGXb4` z&M$$C;;tL=I#@sU3v>_vsG0`8_=EV3j2reMH38|yl2Lgx_ql+}+bOTdxY99H@e1x` z=dstX2R3%%FL;oxCw?I!tawSr_!U`ev4nuFbz7`@CuW;^Ys4D{81s5c1z`M4O5f0c zqt*m$!STRM?>q*R;FLYZ2Lhb}4JM>pVl}1ZfNp%cVV6}hruW^a2xk&7oSOIo#TDn; zt~lF<-++O0@V3y`*5b2m$MCJ-JJMbxjK(3Kx&O`myuD{XSx<__=6s(gV>FLdtsPbk zCVG3v{=%xM!27j^Loj*w0TejiXFY{syuO}f^fR+FvQd5V>%I(EV4aI~z!z``IOQ~i zPxrd*g8e!hut29AtDLRIDlnBGN>KU4Myx=vQ*^n206NQah8FdKl@6Oy>5K~hZo~n_7^$X^B~fbvu1Hy#&5FYJ`?!f%SKBW zYqi$zwt~)>gM2c`5VXJC2`DCgDVN$ezY#h6sB#P#xGp6#d{McLvCv7;%5?jTbU*dZ z)4EGy4(6+E28OxZs0U85?dekh2+=C1`KH^4Ip2Xng7^-2PIu|1;|&R52hEHT<%h$E z0Cz2K_tV25Ri`kU{m+_@wC-G4k3(R3I}SWEcG_t3Fk?U7FC@9vRejyiYR`2@L+9nQ zb3BJ0bu(6qbd%(Vy2tAM-GD?}fm@Nw`1Q_&ETM+z)h2}&;oD>m&iQ^hAnbdPo`b!7 zHJ*h_bTa97pPL~!;UqLL10yPpj`VYx=R) zlnKtc^K|Tzc0+VwyN(@)$LZ(kkksraznFf;dmQJYnBEUrVT;8xu`YSiZFg@q+{2gh zVB&+#o9lQUU90{E9YT-x0~iLbKpsFDtV?TR9Gx4$$wq^I7;S_B0%@gldp!&@N*J<~ z8B5U(K6ys+9Qj5)W>$4bL#Zd(@4$dxG*jsBmH4bX2c!qF7qr&OFJ|nzSYZGd>zO>i z)t;$i!(Tm&X9JJsSunkwfVB%ov$U@pJ-x2I?+4u@YsGUc?-)1)#-0_{p8l7c?S0Rz z9T+eTy`cB1(hm%9zCuJA7?i>DhH>4NYBPE*&Exp|;wf%0z@v(FikuM4OEDV$+pje_+23-2 z-B`72QIKG4(L!T*y}?f2Znp@!GF5WYKsAbr@V*TD`4c8({7#Hm^9m{lz=4$`B|{l2 zxorx=nK8oj-ZCUId_h0{N@Cc{>pFkGv18= zjrIGbj1=28+Iy&jeevA}Uyje?odS|&;9K%}4u;W8Wyp;=n70B3$`u{Y!`vz`?nfsD z=b=yTKA(iKrZDKV@;D$@=VAIB7<5JECm#yo zEj5YP4JB>in$$%o&e}yi4p?)jHuXW|X?A_$y^25X|3P!uoX< z2nIcLJskp5tI*A-K2caZr+@lj(JAOLS4JFGFj=b(jn()d>jH*Zl8+>LdE zNto;h>e3yD8QVfCOOMi69!C(Ck=8ST!QMb0k(Qua<@LMp%xBr}P+M9C?#pX83{Qb= z@nG8cudMh*{RxKi^qsuT0oek5nHuN?>{LGh_(3-Dh9}>7sMX_t$y*Px0y(MBX{%j{ z7uNAOJUll8$9U`D1ndw_IHVo8fCss|1$k^MpY`MQp2}#7%cegDAg6~< z2J}PbERB~I?G_^^=jf&oIEp<*aw2U8sy(Az7kn`fGgj5V5tz3xD|wzX4oZBX_48-#8#16jzY_-Pe`&QY z?Y&kH)z`Xs_JDr1r^tbqOLFL|-Vv`^ge z#2v06%8J`}M=RA#dfRwb8f8rjmETms(od~Ht~GD2xhC5dSVhE7#&~=`5~E*^oZEY2 z9>nY&FXzqcR8np&j;~r4ix0;4T92k0F6K|(E;VV&2RPbhqiDWX#=AZEq)Kyg23T{x zL1bDnG@n<{rviq$Woq0s zCu5+;;YXuS_UhT_T{}TUmYO6gw?7vxi^csduld=iOwJm{h>5r7RFO&LG1&=>d%5BI zaNBv+<2~9|qw3_n_MH)G1+%KM*a>FDX!Nr;ZOqjO9Q+?O8(wWgR8=JAlD&)D^ zs%afE{bU`o`T;lK)btEYQoLYTd#%i;YOSBoTotfqt^ANhys4f%^h$-(ex^0LS{b=0 zqKJ44dVJoCcfcfcdg_iZ#i!(D@hvqps*tVKt#df+>stj;DHZ(8SGclzC>}}&=FDpK zwL-P8r(+-b3RPoJGKzkH*-Iu&VN?yPnqe@hD%AcRI2y}uPBlzl?W*;=nl)ieJ8G{S zXqY}{iLneNng>fg3^J%oz@V>U+L`(~)=3@LXN$ zbS$u4D^oR+s1ONAKV#*oVO)DEn6dVhvGO(u!R#$pr@2_uIiJ}_{@9s@9dk4?oPK(_ z!JQh=V%{w=g&E(Y1Vnu&6zc*88Io^>n$G#cio5bG0LHW-8k@pQ&%tM#M1Lq&W0@ft zB^fW;cs6$Q;b`ZM5ahq_3ZS>6ZLW*O$M1an&d=O={?4uT>B61&$EP2^^X#1u-g)89 zPu%(A(Mo0OrB(GSwRMN1F7>@pv%1xOKf0<*JrNbFKN1zKTZ@zN>1h0ae}k#jt-N6h zc&c0PZ`G}*qJD2{@v->rXh2g%JFP3d7S*6%Xtk%;)2?s!`R;m*V#)wr{q-f}s}m(e~7})ksvM z9$D4G(pTK}^ThYQ`&&2v_*;MOi>?nnxj3?_F+Caes1JmG__wb8^KX3Mxl^wn`R4Eb z7uSFBkG}DbzW7@=zuf9cpN`z5GY#hFKL3Z;fAIYO@%i27-Ous%rmZ7UZF(|lQt9XS zU*7)PNB`#czWcx3FwC)5ttyyf4d$P|_WBpE|Kf$G{$STI4@cGOJzKz>h#u+ZpT72k z=eM8vjpsk|9m5=tYFNRXj0#y`KK)B4fBOIVV#1t=r@gM@tNDyDC!>F=XEoM*Kg_~4 zxF=RMxVtOc59>|QXXou?{?G2pYmV(8Z@0b2`8J|22aGI|8`0C1(A?9Dqxe4gEqE>z zrI$5@Cl>2~8>nfkwWm);3sxPuM%aOg`-EQ%C%s}(0{`u2w z9Bf!TI%FGRTae$(I2nD%|BPP|tDM{>Y!v##_7K$R_>M0c?S#FMZ52oS=M$vfky;S!Ls$GHF9gE=XEKb!7C*{2=n4TD=b}L zS?#TWeJ18|HS!wB&k){$m$lz}C2bqa(=`Xh{v{OnT9=P04}tu0RE6Q4!;0khokl;Z z6eWws_V4AGqx>Ai{)s~=Lci7Cxu%w=SC4g6&k*!iJws5N;<#WP4*)x>+y!ug=fa*k zB8)u_c&26y(ieNz*B{akE2(#g*2)f6q_O(?56269f2rdIdqaWw3I*<&1JsdKbc_id z)k-=%XFS<^oS<(}CF{orhTlUTKj7UHm^0VlbyC!VwS!gmNt|*ydhvTI@jH3%7@3_* zYhmw_I zPBt%7v!ivXHP@^61A2}0MfMb!mRw^*@`IpZX2OU&;VA`Q^7&{^;I{YFosVbOGotL| zqvP3upO6QZpX4yEhq8p)1hpNM0M@`4oFzZDW}NSHWo+%=qSbwaMPT8*`C3izUh_=6 zkBpX)&5VVcBG~Kdxmw1&z9a%M4}R z(y5ut#|XY^zCzB*XQgG%7)ghwl;vTsBmQ0cBcTB(LsWtEO0VUjoWsid5FW-6=j9g^ zX8DCQnX4=W`}qAhQCO#-M1`BM$_awpshO*i8Q@VT8S%rp+*RQ0?_@;AueSp*?=ce% zeoQRZnWd+ez9b8s>B%0^8~BAo!PERb0)px@Iq6H$8Sjl&h_4cDfp(23sPy^L8??;&fYcEyrz2*JakA>xd?;OvJ{nB|m*QxMD=zbDuhRl~W z^A~GKc^r(04uA#043K@PjVezVI!Y+#3`*jM*P_vvWTv4w*N{EPe8XLhZ$!V40E{?a zGxB&m#Y~7U1BJE#g+jgH6&jn4cwvQOs?db(c_^$Hu0OtMcsa(UzDpeL z+3QzDHi5bly-c(A&&K?8zH9c^qA!go9-g25wU`51KBqtPM{i)oSVpYIeKBh+4ca8D zmEjM?f>mieg8F*&@>={NZ9DZ2$yIb()%yDF49=I=IokJy)*!68KX&n3F`_67y*>4D za^&C|bRSuBJMo>lv9rhpbDQ-?_5&T0XGC4Vuu9g8gaN1IDlCFd^Tr6%0~oFr5m3k} z+vs4jYEkruHZ(%Pv&vPj`YKj>zk0Gpl;b0v989dQw(?t)ADD$Aj*sufz6(J?1JtMJ z6lV2c;q_IFA4$)M!ZZAezd(Bdzp*>UJ>CNFP7mneu0=rS*QpOC1SOq7@yzgL1iX9- z_+H51f$!F5YWhvTKDA`uk{*FY+bi8%4gp zIC5YPie26ewa#|G81xU#=mfBYgPPFMWUb>LLx$)LJtjOfo>oJ10oP-*s_y~m*=cHO+S4CffLWX8# z71+wEDMO_mElfbyJePVjeT^D2bYtvGH@OmcgK8y>@nBXh*Hwl6ufRfIqa^R4Qud~f zi3He25gO)8Baz( zdwT+b$~j42*jmky-=#f186$vazMD#?Iyq2ic3T@f75GGvpL=6Fz2({yUq(LoN64xEBu}#!Uy9`c<^|yZ39(n#GtO}KK4*aU)3jq4+h@g zwlZ`b^gGu1TH`(_oih$7c;l;$hS@XwaHMZZ3)oLZ7npF}*Jdl=b1@GjY4zTLiJm(+ zJ=6as>Je{OtR|GGOBuJqJoKrYTW~60TZPKZS3^y`QRKr`O)9+U(QB=zvUdeZi2M~+ z`={3FUp*A(5WV*vF*H8SAE^ngs)|Xu;NOVf*jGW>PH-oh85AgmWAS=d11ME5YViv$;y^%BeRdHk}u!lb9 zdo_$TaDg0vhse%mz0wrK6+DH_tW#(mly0k$Zb5(3zQ8V2l&6HD(vH!Y#>{G__#&|6 zy`XQ|2-OhjP~K2;~?>-}9MYdpZ`&-{F7 z)t-69n%14Q3AKp|!Qx!q4lCe%lyy>}*4r>W6r-BL+>@$Y@R{zX4hSp0S~~RD$3@}O zX?2eHNSfL*@C6pf`W(*3p3~-_Jby`i_w`Ej=PYMQiKKc_G<{Vr75#%#Lt-N*RNWy% z(5ecge9ve0Q{_9pAt+p@5V~>3GW)nY9v^g&Z#Vw2jPtKxj1lD*!lr?W`8&1dfttI` za9ks@Ju^#Wr?87?37mbprKyLKS7Ex7YgM08KD9KeY$8L*%b?1Zhc1{wwSm&m^*7}To zi4~_90NmK?Cd^OkVfWYxP9$L9I=?g9yDEQG55+7!qI+V@DU?q4F>aNsRBa%1jz8Kv zU2&S#al$H4bN92cmaO6hO1DUYKfIgTDbYUO18|S_feq8|VoD~DSZ`=yZq_J_Bh~Rh z>F6Gc0|3XI`h7$)7z(WSP?jdsS|{=LUe!*P0M%;pDS}LtrUPeJ%YE4}AsS#`RWS$D zsKM~g0ruVaLN7rFWJhF0qJKflP%(c62_EW*3FXWi@G$3jK=aaR1tn!~y#zov2CrzX zNNd53xSy{8sxd=!6YzjNhYv|!Chw7WP?~5T4Ftj`t)w>3_w_{JQ=TY3v2G;AGNAq} zR`!kPf!#;zouB>mEs^M$K5K1JWHr!O&63p-)B}+>e7t2tJE}-619{fGxskkgy=9Te zW7Y(b=l@uHQy7_#$KqT6mP9g~-xJT1V}2?=Q+so~^>t7Ds&~wNYL!dr3~j#;jlAl6 z1D<}#WG3?Ix%CmxzUn966xBn0c-6<|=;<63Gw=JlFIM`KfoJjCgz~KDsm_XhoYo5|!ksi|sPSE))7*BwUxw;2 zV*wcF(PxFyST&>(_o^)tRF4VKX>tcE?72g;U(Z8+gR0(|xHqR!E4VkO^%aH8iW-D7 zL2Xq3@pcX71*Z1qw0S5pn$3^UYOQP1c+>>)$t{eC%n(;3*8-C~vKB=cgQ`bsDFRckt?wMFz+>yOk|t$@tgCsx-%O>sZ1RPwyQ5K@G`cst&BkF#)J ztApmCrthx<$9+wcM(nGa=JH?|v0o!+*7#07Ns~HzPNwk&Y5K~y&#=aweaZWIsF8=} z?xWUD_VXI6sf3BW>Z#~yl)kQ3*nGmw*IgkO{Qewa;!Nz2=<<=(Nj1f)I2FF#bXu*e z;$jWSkBo;jRAr{PpAmb0oK|uPUn3MWTi+BscXo^wU+QV^nlHiiXPPR*_BxT*)oXzX z)oX$Ke|7hNbNAo9`_Mgq;qHHNclbo^`6u!1|Bg?`?tbm=?YsX%YYS=8DyE)@+9lUV zQCW3(`?K-?=c7W3`lyH*#wV(wsC6>jwe6?lH&sHZ2I>!YU;i8TUj5L2cIhd-fAg0QedmqW zU3o;kk>93wvO)c~&wlsk{_y&L`d`-Cqla(T9-UnErFyCF->el=)JeH7RZM;03%~c( zU){a*)E|B04{yIE@Zp%hppLBi`qQ8K?$2F%>eXNQcYo)5-}StBSD-7IG_N@*ji~x7 z)jQ2Yx#H>M;-R+2?|iGT8#@{^=ReQu;Rf}azx=JI?)m#4|Lcctzrm1Nu%oMaxl(Jl zSvOc|*b2_8eYk@+iv+HGEoO_^|q4%}@1ZCk;4+lTVbSUvYJ%t2vk8tP_1jkQQ`MSEY1 zL|;z?cH}3#8na{0WZPlG(jV)@n#&vA&%}4EeAaj+{^eE~Ma(MHmGFAY`X|#0C})>A zMuESCduOmX8PmQWkC=ADR@e=f@3Z2XIR=8?5i^Ycmj`KwtJ5YWXcfCD9_`4FbU=1~I>T1l2 z9b%8DQGn~6gCYM5Gbe6}SDZX-?VF>$;EP_f=80dRF}xo^$$`xmgBG;@&IF~X zx!7&{f00`F_uxO|6y6`x>G{}G<~6NW$_gW*kCy|&u?NWksHd;{V}9U7ezK%q){8$C zjuEB9MRRmI%|b}JwQo)yyy`1sTtz}zm8glH*oT@C3taVz;g6LkQW;FtFCfoYFZ-w5 zhI$X8#x^}ee|?luqgx_Yx!%KNY>=I;aPze`8dp@0|870MF}CN2bkF!xkDJjerWgZz zhU9_Pj7d%lB(prwM1;86kXb8V!}*o&QFJ;F2bUWTf1IN)wd&Dp6(30o3Qp0GoEdvu z<00S$St$C;3LW?82t^NPU#xu5Bc1l&dk?;zl(!RkrRYocH#aUGQqD530`5+qC!S~| z3i6LLV9cyz#n7iJJ%O|CF=`*CLGi5M$buN**b!*3!ofGS=0)pB>8x>mCl@$z6DS8_kFry0SX3gzM3JeuX8~GXBwPNMRpnO5P8j-S+P$V)hevhbF#{X{avpQ zp(}tx$@|J{nJqJwFBjtpW+=@cSwF2GVBCE7%Vz!gQX8K$X7f3HDez$X>+%Zv8-bJa zF+L{?mZGLEl$B6Z`u@gPS||**#-f=Q%Qo{-9`RNgDZjIO)!nGej5G zpXrZWXk<8bYUJ+`f7hI$On6Fqr}P6!`^s&Pw;fP59kvy+Px%t_)dK9tZonw|X!_JI z`CWWkI>VV_CNU3$b3q^peB1aKLdh zt8P@#F3s6d`>6?FehIhP-n!c6Ouky)4#Lh{i&d~E(tg657I*DAIsBR z86Rnv>10UDyVnyrcRA0Pi^fyFP(rD{F{56m1W&*n%oo1K&XXjC?pdAslqDeD8H(%S zHjgW>6FwNhaT4k`*E!+O@ox#Ib>#gMUI*htV?Ouk6^Vd8iR5AB^v8Ej1CP57FQX3R zy31Z4QkKx4M32fJwjPC~A}3tDw}{W2U*JzTYv5GPn?=UlaY<-ptaugh#|X!%$%>$N{Depv;B1+Ib=vECc}DjN z14nDkAUEaHBRS;SU!QiuBecS}s##F)(hpd@&KRG7qEVfW(1&W==JaBCchrmLZvBvL z1c!hnWVqN}uKw2lhLNuT_ikYj%d2Q?&|?1db6lRi|(O}M%KGD{jN;XFh$ zT$d+ZZ!np&SCJmbyH zwieK=xZeIme@KV^jwt4rQ0fmZfYKzbw7b<Yt3Ku(uF=a{{l zW*vXKX}j8Iqz$8UHbGfPKh7C;yZU^gRAjU?9@fJDd%w3pdA|7J=-0Zv-=)Fq@Mq8h zHv-2R(yzw~=5NH|9FkuTT26ZI_t$+ve-+E7EBKo{eoJAv16(lfT-~hU7-bV2G*$1< zspqBi15SSYK0Tb~$QdWe1Jts?;lBVkcsXgq@-clO&E4Pr;#)d7=}-L0(~OOzv|XWb zGcM-Qm|c~WfaY5KZTQwu|JV>@at{0_(2uplg^^~*)Okg!O9el z9t}r-^Le{K^>hzK!An`gV0{t^2&IZ%7*%jYJDkH0kHAH~IgML-rf~S{rf_gdf0vI( zW^eGwK&SH=ywi33)qVSIk;<~XH}S{2B2z~9{*uj;cLbA1;ygYwN!}e%<1qu2?4Zo% zBrB@V3wACXaL#^IUgKhMcf^~yef{wmmE1q)=;i(HWQ#2p?+d>&@#+dA-!NHA+^kLu z?-e)`pSg9KEW9)E47sd~T=P8jZUHjU$dx4O?TpY7?!M^hX#D?J%yQG6$Yj}mDf&4V z|JQs&@JANXkvpCX2<~elV!F3~d@j>=4$t#&(=4alpIj?YW5(B}j8*5NvW^i>8BE?? zWqu2;=A(iQXMXdUtOT;N=Jlr&2aW3yv7$rY-${(!5 z{K3o?u`_dUQ$E@o?(x8lGF8oQ7h;6WFYU)AMl^++j=MKpjyvAH4{c4eU*RM;+O$axd|9Y3X^@q0dZc{$)!i>X`_G?$_^++c zhExvV?>+b8Q(yeX51#+;zy840Kl(=IR&p1+vIcd>yz?P{=jZ#3$h_BmeHP*ZU4~i>_heU>0dha`k(&PBVQo*^U_n!o_y$b_TJKoVH&xCFy zUmQ_dX*2lm_+4)UR2)`*x0*FLTH}JlhcCNJRtbOOTxyy!dfPJeFvcZzhc+u%*+j8( zZB*M)^SOieIH4O$zrSxq_fUP+ui%fQeB!^@w6d!4X}l3Luyu>(PORl-%nzLre_(OJ_86 z;HlS8yA4*9P3oA9ysGrcvoFMofE;HJ^?0RV4sAXuty;zOqMM?sO?)n9l{sjP2^DUy z>_IGBp2M5LQ)AX57F{1@ST;y3c*XNyikbKCA%(u6OClb!RGd$042{1sdeV~Ut{>I2 z#A{&dn^oCP9N)Bytv7{)?nX#_LnCK+b+Y=Q1KV#vX6#n`jbFx5UU9Cn4l|1k8pnU8 z^^1RPUqbU(O+7nAj_dFRKH*05$K6=lG zCA>77D&zUZwh6ioGGs1~X1DDTd6e}0N{kNVd?en|T7J@$OLMW+8r98AB^2yjNrhGMLkl6GEIPF9}>! zb9)zYA1d>chg2NFOrbOQ2LCwx_(1DZeY}6`)mRz)1+C$4d;b>EI!;67-()TsUbykL z$|^t4M*naSnu5>6o%U_afdCS&;)M6@s?7IXeAl@ypY)iOd_A7v9%{~9qKco5c`9RR zQ=X7^opTf%Pcwy_p~Q|L6BRi?6WA-K$az#iN}hmgXa{*fe<}aud8+wBHyib{r}#!W zA0$QCGid2za45Z2uUksWWz=fm=O-uZQoy4FAXT6cVHY|WqhFU}oS%u`or_D>Oy<($ zDmLfGX#W(Y-vo&kQv2ME)o{BktAcZs8RlP=)gh|ejTP6<_$j1 zWnc-7nchVSIX=)tw3rp1f3&ro&~EFAf?h7}V-%f_@X@vS6&lovF2`r_A9R}18(IR= zIuU(%^_4occBp(^21zf$uE)4z&IjiZD}<84iR34oA}_AaQb{K0VVL~%==iz zis*wgSE~ocF&pK*$y<#tchryS+0~!gx`hb2&l+l<2`B$B(a);aWo#JiR=Jdrdr2_m zo-npgPOk_|O15eAG5bXKIT{*?jxNO7ft2>i3O21sQBWiz^tBn1U6iIOT*6PelR8V- zqxze%K84iDRr3<+=+3-!@7^mMt1}IMN2(t-!!`?AxtIolp;$ z=8OY3(`=8q`17cHOV-Y3n!I^{c%p8y-n1gs?0xn2tSYSTzu}BzH;s!Mfo~$xmZexs zvPe`Dh3?(kT=WUQ^_n4AnuEMGfh6WyBj}n^C!%0(sAG#?Gb$< z@%zjO_1Wh}ASIZkPW-e`;3n@hzY-OnheXyGQr4Lu-wfNq){dfEwXz34c^b^~wIrLW7!hK8gCgdUl0A(F|m5x=z6} z?XkpJx<3yO5)W%?E^ZAyDQ>-t(UqxKbpg(ORZXOQC&-LRYaQ#dch*IlUy6Q{-?86q zyE9^M_3(==eT~jJhP5+7@{1v%I{Fc9L!))3!X~|lH`hhG#hva`^F$}JoyCY?OuOpL zbICepS@C9@*LXIjsTq|LV{0hgbZLKI<=i z)H(4%pPOUJHR{ZB)2OZ@FMT}Jw+iL0AIcUGtXmoV#M;b)k(P+a?T?n$RkwkuKCZV8 zlCcw#$R1olUIsJZb{f+!Hzg4zIu>ojkAS2$n;!O}WI;}=>zHT1N5nJtNAneu8_SYA zn6tTq8=5x7Dw#pvUm|JXsNp8xnjsmh=Occx7fyE_fE}W4BP74nm<(`pu|v_4vpd)$ z^B>tPP#&wWH`{HBult)J8FPdr=DY}LHWwMpu`@R4J4Al{dmni2w|~J=zmpMDJHCp( zaXSgp<~RQ4!QJ2c>ZPZ?_tSslZ!NElH?$}|C`kD#)9&KTAy(G^f+Ypy`9b>^^i%Px zJg-={g1i{#fwgM1$=!e;_Cp*c-xoulyV0|}NY<{H!I|MLB0xSFPjc$J9)Vu-U3>Tt zJUa0zYy~R4F2qw<64<%axG6UF!fKxBK~Nr8UBAyms-W@~S0K>-(OH-ev(O2+j6M~s zliugMKhd;qL{1r}Atya2JKCCkL30*JwL9`Q5%7<;fOW{o*W!C>D9lrF1fqs`+gLZB zYgQ(jB-R-^4O%@u(moDptwfPX)?4rSNLz<7mQ9*l+kCuc_Kp8ugN_AqNC*wuCMxzR_!h}KDaj{;H! z9skw1%?H|$mGzaNZ0Vh&B~tHR!Fu;Q<2wIRB0S_Sl* zkvjTJe^!5Ui?V7ff6nXC;%54-mJT?n7NOP${@G<<#|l<@pR+lTT=)Wb%Y^a~WPcdD zj4#U`zQC5BtF|+ArL&}|l(4{o-}K|jg8fjO)|{Vc0=m~N^YGA?xKZ|0=;dfZyzO$o z{Kn~VCe{a@YkUQIBR-Syd7WNY0#=e$Sa1~UiTD+ob=52VUSER?=$?MeZ{9cAgq)71 zUD1v`vCFc@%y!&k(WUknn(X^Up394?y`XPotNcAZEIvfefoi(}3%%|y1BE#=hn?sH z9P!uD3f3;)sebnjCcSPUj_+wf*ycnz6KAZ(K)P(cdFf2Z9HP&xm>dy2oV;Na?ZTXF zzThlE3cxS&QtSjY*kRYX@rjivZgDQ2$2$afYnAo<*BR{UIVfqqs{eZQP_20)X8V_u z7Xw!BYaz}=PiPZhWZLh=wvPSD$xU&yX_RZ!({k^s&uSU_hQ5@3u#~BD^0((Hq$p68 z1Ajl(%c_ZWsm1^v%DtLq8(#Ek~ygsfqh0XbkE2ig)es?5jlyHe?Z8@7m}Z^(M0MwMMn*a$gSm zkaR*G(H-#N6|{akLbME6 z^uRnjk!+POXw|)7f}P7n+iJYR9_hvrMq0#EI&I~5X1|o{fM)dnMyu#mmJnP5JW{}w zn8pJqiSBX|9)N{*@|`J$)a_aTqcPpv}=%H=b)O1UvwnXTUdC8nA8R zdSU=;yd!gJrW|{byR3ehH#mX9P2ZkH!s5kF9h?&!Ih*!{Y!A^q=fw!?9(y?X=E1En z4o8@euf=@oJ(A)#P9t`fk*Ke8E(QIgE#)uha&Qp4j`m``Oq`J`)4maNKvueD{Z{Y~ zXVx^Hut~QEzfcdFl57!nVBQV@Htm3A;A}lCc*%a@H=ic#0eqU#(`lSSu*434t-B`u zit|vIqF+vP;Lsdii0_KqS?VO-@)kDWy}zPSP7>)UV-Ded&doOhgUpgOBbW0=P~v&g zVI4sqE8?;qWh*@8R0Ex8u?ec;?gEdjJ<^IG>u!}$()Z|tcxAULz!L;`elS^^&s^SeY61B@l6Imxpqu_ zXZ08rdbNsh6V9+3snR;uDz>&`9O5y&WyF<&jwJ8~g#F`pj3a zpD|Lw8u|#tx>$v1p@-$20qG-n_O>rxJ_A~qr7HFuFS!K*oScK<^CW^j;hvH85Yui`aZS1;#{o?jA zet9B(;pX;>+q>=C6LDAjGuM9W<`16#Po6t@^DBREulvBM6#DPJ^Q*i5_uv0K9DgLV z*oWI)>)ck(rw2k-%j+t6s`JgdCmM{T9NGwHK%U)m8da}Hr6>FG=m&{;BYMM^iQdS$ z_x0PpOzT@Zb!zs$bOK~JS`KsYeBX-RdM~kb-0CNOI!+#*@)kCIs>seu^7mT zW{0S*VYO(C$}YYdpSU?0d!u@fWQXCG!MWhu}5TX-_{51>=aMB5OZXg2eH zVd=Tla0n`EGxXin8T38x?L`xt*9pPy^u{#wBIey&<(oaIXu9Z0tQD#P`dWN;y%ljP zqzQW?PhO3~nbV=~QHJna$`JH)`ZaY6_oBjY1tdAowwj>-@Dj&}`~oDJ7}((UMCby4 z+;*4Ay?-Aft2`SsK`tN>FGbJLBj2qH;&Fasg~!G1ao$`|cTwkKI!u{}cMv|3wU{%9 z(_QCuxs5Dtfb#L5_*Pjy;qw))$4H86OCc|C!ag(gV%ekGou zcX>9ld{@rnS*`s>nI@GiuX>XZpFI3GsW_Pf< zs~-w(HP$rJ`jZ6S$~Q~1E<7~ICi!;w%XnZ09}F4i(4=(-s0!TE&bvy;>;6~q9cVCw zB$KY9U9rSO5+HT>D_a_9C@62^vL6N*&STy0Dhwjy)g%4O8r7P;h8nkY%uo>W5ujg? z;jC}i>iDI|@Se}4%-Qt*qm;;u+~-s3-05=~nJbMPu_j;d!dLBIt!ql8~KRsO? zYaDHMAd_mXH5&TOMr*3exD{svI-Z~%9mn^@n;o%*sp7{P&G%tovCFEE?MtT6NB61m z>sE*R!=krMi=`n8^;ok;pmS`8^I`WZmk`JY!)jpMw0+Xn`sB)&-aXn@((Tg0IoTz;EeS z(Cr`2X~SF6Td10eGvMa3)dXQ}!x?J6`Q#@eXNEWb+!=W@_s9EwK5_7Le7ZNXX?PFN zC*p5pz_f3?{iojPWwu^|lSPMb3 zB8LI5vv+^`rY`vd(NVTy1kR5Nf3&?DOSXpIOLn?RM&v%{O6p>0a@i)&BlAyrxD~Se zn~^1fq*ZnZC#g>+-{O|1o9qqd<=ih>L54uy&)Fvxo-@_(u9XM3>HC%BTyLY;5+eUi zb`z)FZma#_C*GrbK>_}3oI+a6j=uZe7h z>~p>)5=gggx&M>pEpUp-DHqF6ASaPihM&@dts86W;bnb3RpE(!yM*2YZf2NIv?v9qT6+N-D;zxQ!$K`BB zn}(jX8b+J9T(Gg=VP*VmvR%$MNN#g~yv-etj^2`1wNmM(*cZ~gWuL%#(o5$nQ(3ic z#r*S;l?0C1j|ZZE%})_Uu)y!EcIwX(y(wO9Jq?XdvO@GZr3d5>FmOQq?9+!^cIw;x z5@x%>|8Vu}I(W3g%+gT|h`cPpPjAU#r>3!XX?cCLUD_U0U}_a@5$XLu8$S7jhFkY{ z%2p}ddXf25w22Ry8!N~s-U#}~;uQz4w-Q!; z$8L^x0)6|;Qze{r^F9hI{PdOr^j|SrBe8}@9%yv-wMJO=YmXnW%gN2&5*svs(eu}$ zCq=5MLWM(-SNOF=5!xFlg^{3%ouCHJN-U~Z8~@5vB`*l_Oq4wJQc-b<^|Cp}H{D;I zFZ<{BgoooLANVACp2`Q`M6%gN$HR(_k=0bAT_W7?&oVKVddo!k`Nz#`jt7WS2in5t zmEO?p$Z_OmXEZbR>z+6bGY%o$8f|kO|K1z$SSSz0Q>WrzbjNz{BF|c%q^4mSUu<;H zEGKGPJ|9mL|6vx$^N+^A>#JWJw{s25V)3zdp7%9U$D0jyy7iQ^QH{kq%R?IRCfft8 zLHJ4iL2t0F@@;d>ktZE20bXqT^Y6+mF6yciyUcuh_=QKVD4#)T)H(p{}Mr7q3@{4)X)kyT7{K7XwFlOk7?~uO^ zZ+|A@lNYxii}>W>?dP_?5O0#c65shvG0Z38^MmcT8xgnUP1A?tm*cC}!`r-@`eM9! zI^Q~dF@Ad_BAw3#JSWbJA-m9?IaiQ{$T+@NpEbX7E4Qj}rf-dTHS8$PC$wpL!HVS` zChO;t$8-L!Jl&T8KiY_#mO8`6mW+qklHyFY1l-W+i!hCZ)?r7}wTMs?du!llVn&K- zD878Yjm{3N!|vIrVAGnUeOA8*`}0IQsTCOkqgYwePn7{y@6y2o&kC{lwQlCJXm6tN zKA`Pzx2165TV}{RBq}BSUGG=3CM)Yd{p!|#nQ!W{m*ca>kOg8(3@ZZ7Q+{7^w0UY7 zv#RkWR>l(KG%jAl)H=Cd`_(gWS5M{ovj5 zwn0?scs2U7MhLY#DvO=`P4JA{%2?;vJHf=X88_R2FO)!Cl(P_yu+5i8j&#uNH>#<+-d%-=B4!($f^5mV%< zMwjUC|F4aw8TM9QT0Q&S58E;7&6Z5=$CPVN2bGXhXzMv{9t~VmAqlnFa?b2YY=>zs zqA*HkV`d|!wQ>F(@8J9sSY+OFMIKopd5@vV>=6NdcRbriLF*IrmN8RVe$ywOeaAeA zULsA3bCU?pUXcwby=Iu=Ez#Zm`RFKx+ z=bm(5yx+b<=;g&9#8aHH&Jn_+Kh@aC{NPU2w*s2;v)-?2UO(DSPkA+tHYw-G8>hDX z;K~f*o8-eZ5@)*w$=};%86~p~hulZ+%~&F5xlb!BC*ttacp@6S^13*AIT`CaNIkcc zi}6nS%nsu@X_cJ3WR9_(6RWI5Jp1U6Ncwz6el=^Fo1T$Q$QWpgJXdu{MKO9kl6zjs zL802q=e)G>LkG~@z&MpB(xzk$%{`NuE$g01yGhX@Wyfhp$+qG-tSZNfz`Qbc#)+DpTZr`%%PP8 zP`jvU{iJlS>DP~%?S(-XHd)=#Y7Bk@{b(H11qkpGdHtU*>J8&md{!ebAf|LyTjI+gq!9>(=aR(gxLTSmMq~#O6t^NVptPxrv7l z$Ogj3-&%a}cGY9z;Kc3dy>Zl6CSez1#a=&)#|@Bc>j?UoSLkbliq#s@7K5o4IcL*V~wp zc2{$&6*rr7y>;~V@q_0N9*r!h!;$%PB66O>mmQxz9=|2mU_rsLM^-m&;oscbTWKxs zMo6W&2l2o^`%9|Da2^9EACg3S+E?VrQbU6v-i?*1yC_Fr9~x?v*x|*GXI$&+x)OPB zIb+agk%^ZA3OVar!vE?X)^N3JxjTj24Lqu;Q*z$tx0EDP4U^N!+4)H8#1oiEeFS+6 zDiO5Y9Tst%tjXq7dpt?zSjZT1Qr>BN%k?$0xE;Cd|>{LX2?`dyI> zX~D}FD|KhiBTn1-JTqF;?_YH*vofvqKa=a6_^;h|~o{k<>BSw64r%9jZr)(*QeFnmSj8N$B-f9p%y32Zk>qGoXv6H?rW}UU;=s06hv#Iy9(TCm zlYEmNpBMIpPwRj7^99$mz3(+Z-T*54{QsDH4>&1`^#8vmETEvEU^){DDheW*#Ym0| zjJsq}m!zPCRWK(MJ@7>36mu3atXVN<;nY(U%=y6V8BsCo&F}r`s+#WUnOzp{zOVnE z7oV-^?oU0HtDbtgy2_vbSvP;(ayEl*ZbyN-`s9kKx*GA6}P; z=5N2w9}|QlYyA54FQGsC4Zxs4i~S5~Gfn$M7+$>HDqhxNEIr8fW_4)~af_jywJATX zW!dISq5aU-6=?yrXXHQ9Wv{%Wnh_IGI297j9KpC{M7-TIQ!h*MaW zK0gb~ueko^V`g<)^~aJBZGY?U&yLfZF{WrOuYHTJ{g!rNr0I?ovUBj}RhCNaycD-- zw&1CJg;vt( z0N+pgmS5N-YORw0YCi1qWv9~0Nvok+3y6)2?r2ojDlLs*n$JY{O!OTA;a3 zG0Ugzkrlqyvxc_M&?c^VhGL?(=i$CFKAqhHjnviztC{qG8GT3S>swrhD$Jq$H3WVg zY5wS4yqAmCgu*&t*8-~c7S@Eq_xzeGX~$F9Z!{BA+KavI*WNF7)uT^g;VesaN~P}C zuxV}(>a>#U*WvmWU|UX2HGbXuL))?{+(~CJsZdJn8g5yp>}ip9XAHGD8>Z$5zGd5W zx`SQau(m$+34V3AYMyO(gUK!Fkk&G9XYhvpPBqtlRjk@(^GKhiheq*Tj9_SakvGQvoy!CcnwtGA03wZ(h=rD(4cm1ps`qR}9KhFW~aFB$ndr0*qdS?c{z-TE|XpBvg% z?09Ft{MC%X?^|V88mo7=b*OVNLyGo8g*(`&bkyJaHln$;v~KC${_T{$mR5^ZPbmE~ zy6=l}Bz&u-E4BFO9xyfeR6IkUx{CVLJU42`m6bwql{F^%<*n{1RJ91@sM<%}eX17< zed?=oUtiRYi>>Rbxel#+HH5d6TYW}(X>H?HciE8k8O~Y!yj)|Nw>c?aYU(xPK0gTj zMc2X9)u-%=;Y=!Q*@b#(;kpNX)3+~cCv^H(DJvCfS~0P`Th*YI40e8D=QOf%g|=I3 z|H?msqj{j~YlqQpZY^`S+$>?AbQ!;We;a-;Z>{ac_lYf>&lL7Ub)8=*zWJJT{tUyX zr!F~^@6*l{;(4pP`Lh$dU#s@2@UukC*i8Vy5^%_UM-fFcAy%#g+bD9yU*Nv{X z9mBnKtqYE7j8^9=X6aY2QfQN`>j>(t9bSJPM~uU9Mx(I$U5!ARjo8^$@i((G18pI+ z5Bhhk@!hw53oo3vg!+6Y7zLEi-qva772a>5&0<}8xs7>oZNvJF@As&Y)$TRhivBdd z)E*NXcZ z5$#tZ8ch!m!W|!ks?an-`cc=9mg~~46yvC0#Vz!!tJ*X(tM4dP_FN>z(C>%l$2hHv zRu67--1gvw_ENn|SGXGelx|P&T1uKfbc0wz*f-mN_o4YACO* zZj`^Pg>p2ijT(4SjZ!&NSdZ-NOV9k=Q+lubhGW0#Zm1uqrr35_lSWXJR#_OjjdR%E z4gH$rYYwJR?b}YZcY8k?ZgduAXGGox5Wbg)r^}abVf&TN6>40n@xK31y{LUwR7_t} z$lj-Z+q^2AQSBCtrJWhGIyilVbYcCiP(a(W#`o&4i^fMQb=U4rz=o+*2?7 z%1Gm`4>vxmD)ehdSJ{B~L;KQIO@8aD&lDTS;_FHCQ>(Pvb7ZwHQtJ%52b!StkGhZb zHr#N`*2ru11KF^n-=)>fj@_%keyW`Hc5GRW!@P>G_3!7(*XvW_7M8C~bF_RF=eS>K zB6abrx}i5@(YJ}~)92({#EMx)HLJ+KZ(FVGHqtiqt*B;8x|`omdTWTNp$@}bgrhpqu6Y%wozC%*5adhdC-sA^ANb8FIq3D@m2kx9fMV->NE8Q+`j{r zJv!f-7;1Xb%;YmVviY~wer0@5o_dS9Ew5W=rFzjDd$y5Ezq{rB`5nKXm8->J%e zrqvkUcQ@WmXvKmo-2M%FZ=U*baa|gwdUvH-J+pGS*tbOS?~PQq{5P<+7Y}$q|H>uQ92O+FIcEju zLLIo!cc=qvokaM4AllY_JuhtEVimK@+L?A}VYSzaPuOGWo#-z?pQhC0&kOB*RBvSC zHQnZcN=#b2dQpFdn?`tz^cok!d5g+VI=&?N*{OWjw64MTF1~LmzA9-G_S;lmsy!$y z$**R@8i(o;1$zD|D-?hNIwy`nIFs7TD7?W6*p=-}LMBBKu`op#{#`(Ztv4M%nHP z=O9*d4`(p)Q`0P@m_1ghE2fthjs|wENLXU>=}SyD%$iE9U9k6G+_&QCeQS+yO}*Aq%b6xoFn5uG*4s7gjjyQ(HFFx2-MtzBR+l4_kL? zuBjX9yI9!1p2aQV_I`e>G!xUQWOc3Q%2Uf%Jzrnng{>ri#w_X4IbdxwW`$joW!Vy<<;m)|^RWh2~azOO?M?T(d#VMrScX<q*$((zv?6xZWaay~DmljPfuLtQc7=B(JM zcE|I@YQTl%rx=Ij7lvu?`}`S4_|l*Y{Yxt==HK48{%!fkzsvLUuK0U1TmPbK+->_= zmnN$cwYqb0T{fya)@JjP%|Np_wJ2{fQ~HbR!pbK*)Al`CVf^j8jwXRNpuLfFrs$!J zL*d?C;l8iF{Y7UHHvOC9FM4{Z*Gpyl)!wig4fO??!Y^hg*cN?6Cwb~TSDl*LJ-4q@ zaXmO+f0Aw}ZDzycUral!dGsl!ALi?5eteATS>f1MIB(9^R>X|14AymA%TQiQFYg(& z{|)uuhc}jLzxn>9Sw+Jyu6xxSe%<{S58viqVT$Xj?X8c0ukY1eW3$rpbvEtTQCNRf zZpG@ay|2{lhc9VP#r@lPLa}*Zy#D8FeKv;cqxThRZdOKJbvLd3?m}w9Jwp7K0XCKP zT%%%nVdpr--lg}5jj4Y8l6};#w(06t{jHCGeWT=UN8YO4hf&GyO=VXN$clZmX`1MY zl|XxU$-1sLe$!3sgjT5P&4B7|Ip32HrTq*Ep89tY@g2+Z-$_V{-TO7%v$ihQ#zI?= z9Z$zaGytow**7WHg5uv;uiN?-+6ncQzqJ%v8KH$g)WVAO;?}N_|0SaBM^xkew-x$r z$Du+iTo3Zu>eK+mk#P>L~Uh04)N8w;)hme z)jHJ%z2DXtE;nBrx4pTy3#vDjCidUOAzmNi8jI3jQ+=4SLG_{VJIF$7tmYK)H4vc% zzSt^=xUORBQ(d(kyC0X`Atb7oswBK#YI}uZTApne#WXuSBGvk&talIwY+u>?TMcr+2HA%2zRq?S- zG4Ul~Q&4QQvvHV^l%-&X8Ija({i=JucFPW}J`SsmvAe*B?+NtQtq(KPUX(>R-c`^h zH4f;VtX+2!{SwF5>OyOa?bH2RBE41A7+3hF$i4$FuC*7Rbt(2W^-X%_Q>3)kHgl^< zM!YZ7J_H)C^4FHB&(^yH^%VA7Rlmy2+DYR(XV%>UQ5Y|Ut`-uNq0p6^e&i|i><%fRHlW zM&rVfP-9Ruz1DX)0!Rn)wu#AZEd1~5$GS#CuV01ZVc{%qLu7bO)xYJGrN&#zHnffv zACJPFf5K7CmrLP@6x~bRTDfF_wEO53(@j(YzF$z^r}kpk>(z8dVzh?%ctl48TTjD2 zD_?6>uUgl7THDTzHID_+)%V84Eg*h$)HwU!TS01zg&+UyIZ)eS2hmJ4)DQCaUku-P z**ulj=4Vs-@=)bs&z9WVtscxD?UkNztgg9SLX9BqU;EsIPs7o^?)rkAn})FnWkl2N|_)ZAjS`pW!R)n#xwsd_31>C8$Y8T+3su46JMaUD?+B zrFYG#QB1J?~Gnz{D~v?k3{{K_izj@lni zw)VQt_(Cau?9r$c>LB);s&&m9HTEA*sQw+shOO}r*YMeOfmOj=$@a{e^&C(7>^?ny ztzEG`Ab%EYzreKf;F`b2T)&yH#__u90GjPZ-){Ihx#mpX!VzDSuM;}`J8`vQuQSMk zF0D4y81!aA^L2Y)T5WzQXk^jorj;KxjlU}Inlv;$3w6A4NQsV~s%3gh^uHZH73R8f z*RO+DjraQ}*gB(@r;$~A$WLLFqJ8%@oVT6>7$GD%T91^XCiIYntII>{Pq<1W+FScQ zsoFU^Ug78!wPO0Wx8Z7UjdNP6s>#i>PN$H?%6B0eszfJS=3tX-U?nn zDAXV8s@K=lrt}t3t-4UB_WiDAD)}oHeSfE2Py81S>iZ-oOx0jwZ@($oko9yugI+`} zO8a2goyuell+G?2vR%ohKFGH)yMoiM>r;!>_x+mFDi@>n+~}%+!uR!l{uE#T)2HCv zRIQyacJ`QTo6^$NAF1>dSG!(8?c0`DILEecaqS3ae~0sI<-Ctie4ZUIulP7w{Ec;C zdBx=@)_!~n#{@eo3oUEwmZP{^InlAj&+dG>3gv9b?zP48`7laAxvX;<{F`9SzBOV= z%kW<|*gINtqF&n0&((M9dn}Dp@zJh$jg!>c$2;}(db4g<1gNy4)?4{6He#rD=l99^ za+J#(Do3NV-xotM(+UY|nN}FeAN!SSbiHrk8~b9bDD7w^O|_;Ka)ssIY8|Kg)YLm` z<(>A=()gzSr>^sqn&qu)uA}9+Y=5t2j9?_ z1#diME7e!~%7Z>Z9w=Q}CD7dLAAEJCm1up_L%FuAPx*HBe^_8SJ z)u!dw*4Gwl`q6VglrFn&H9YmBxHQ?4qU)Gdc2P-MOA|`cRjV2_{$i49nm1UTzj%z) z^J=WfpF60hi+=YP?N{Q@>^xc;pn4T=!PYOOF3t`mX@zI}sn^+yNs9K1wXb;y`%-U9 zitGROdrrlCUAlWOa-x{-u6cvi-PIn$6$D;8@mi(TRl=17z8Cej3cm}1{fez{d{R$m z)8l*3y6ViudOY+{wu zYZ0h%v*y=g<*-gawqHFTPs>!9OV9GsRO0?Ep|`);ertWCwO~Zl+BuDU z#rCY#dxQKoVRvYd^+;bL=uM41uT?uD_4*%4Qy5x>sLBascJJ`69`+O9sAd>-R%CJjk#tK>g9^hCPK@MG^%xJHOc|m2I{h}wMOKcG)Fy? zMZ0@2%a_!`J}uOZZFu_rt!}-fuTibvt6L55C0M*x*{3!y{hYAPd)gaIBaKF1eFx*~ zZT|S;$JMCbV9UYl27aD3+>BsuFTJ--opZP@+PTeT|CV9T8slA)ez!g`ua5j{Zr<6g z8L2TQY04+f?3v_Of>!STH8!SseJ(Zun>i$K1)iA!(`U{aH+AZyiDfe;jGH=%mtNC@ zr|pBk&Be<^f~$^)ml7`$-ZO;PV8u>mBkr$s7>}DaD|T9hyI<+F9gMk_Uk91J%^~c! zytg^nT}k`UJJwn5UI){bIZIpSDed^%nc0g{X%a7_lV(}+GyZ1Hm;C+N{J`IY*|sEU zrlcG4_krZA+^KJ#Lg`CDR^@^@s( zj!3vSnd0xLk{0|OThg>-JpI#ArXh9l1apcx-JE64CjZVge>WGI%S=;qmD$Q%XBL}V z%pb>5=SMDNt}>4C2@Mfj5VW88#5rWO>p%bA#G%iEBPg* zXAQa6kDPgFr%kYY-NiG>nS%c*>3s<4m~^X>&4QS0AN<{m(wScJRHA<(VJ=F%mQ0wp z6Xo?%rX<-kxl{6$omTGj_D=a%)z!@?uf~+kR+PhzuTRZY>XYkQZrt)d-t*d>Vyd~{xK#zpl*X%7VHl~r5 zm_M^^xM$nfVf2&w@^BJ&5@vXEe2M;Ek<#Dq+v{(lgZ@^e_4ml&ujL#X{B9jE``o3c zZ<5!;lRpH1I|fg;4gP)^aGnVMo*(@EIk?|7_**{+aXhVuo)(yigPSHzCOMou;d=GE z##9n*%EL4l=XG&r?~vnkhO=#nsnoNse`d3$$<(3x{T0YwxYy8BAZt{T@>qRb%2ZM& ztM&Z;EZk1l&B<}EIeSab?FZ-1q^TU}xb?*SYKJ!Bekr+!j@r?4%i%Oe?r>anZ}dIQ zdxF7Wl#BD$+&9O6_KHu}c(@n3bdmExy4Hwu!>*5d4(}3If0VH4`p16=f8My$6#n-h zd(K8AMR_zT$=cJ^O9}rNTs@~(ZhpLzxmxkQtKoZI=4?1A@=EzRrv}d15zc(aStU7R z4}aauxd6^?hrwJJK&u|dhd2JA5-{`9v{e;zwD7s&-C1f;M9lvD6Ynz zYQkOuo^Ww^k9+2=pBnf$JO}R*%0=NmqGz+qEA;z)kZpYh#ccC@1-v(r`wFg}UkXgS z%gT#!-+}WiTx0}X`UqpH+AkFM3XuJ|&ulOE6F47#Z7M&zL-!cOXS}!zH$PWg`O6Mn za<=Dg1m{c2xsl_Fs(<3jU-sM53p}?OoC_)ItsM7wwZ*q44-i-XvIp&2;<@x?tDi+K z{n_dgp8ZDJ=nR@S27dwch0Wz}N7egLgHk???cje)7|Mr^jzj+B^#|SH`2OHv)eUn8 zK^67~-Qjg4A9~^H`M${O>tuc;f6H#8{@H$L2%HyOxCc58?Ts?O?R?J}3Fjo2|GUcn zU1#nox#DHdd1awb`yudJllE~g+%d?T=w!yzG8K-}qV&#ioCdm>+KYb6#_bq5r@3&$ zHigaxFMG+_Tw6RDURTl!H%RYwi1BUgE`DYg-8|OEaV{LSvA;QPZEfrVIBH`T;i}Fa zPdv{6=YmUJoF7nFvpUkH+Bjbicc$w_^m@pzyJmp+5BVAUC(`vjajk^8jc(w|WQF8RTSksUedK+k<1 z&bP>Y(Q!Xi*{*GNrMU8!z2vc9Joj}tJ0kZjT#e(4N&lVTVek*I61)rKcROINz2GIE zC$!zwU%GM(`)$k1{{G;rK8$bRsSp1SS8~2U-dZPfQ^_1PK9|pbz**&FRt9zYj9?5C zFMIF2C0-^CZ1oH9>fuUe%Rflt>VMv@-}0B;@s{?UyD6MEN#ka?>Ql3Xy;0IMZwADV z*WvBq`SzHS+;-iM7B4ERS#NmqH;g*%0F0TA#&p9kN=IsUNceouK7fSF? z+=U>!Puu-`eD{WPIOVrr9k_kq>;tzyuKFbs)O-)n8FUAOfWlyGreIF*=*w;d{1&dA zj&_{4#QEcm7d+=sILEm<{|}YL=ew6mmU!8bf3EcLJq+Hv#9<1qo}Vi2{0k=NxBO*$ zWpZgd3eK&R#Vp4?Tzzi(6QXSWWj}jxvX^@@oVjpOB7$~0o_J0L#HsliF3uk)tp4XT z_HmvMmoX~nf6jNDH^k{wd9UYO1m`5jxzur56TbQQ^y!{+H5{Km*EvqSp4(wFUaQM|!g0P<{6{tF;yM3-Gsv}(m-TG< zoF^q$yzIRls1A0_Uk;CcqjH4{_c`RD&;|A3WQ9BS;Lp6wci;?lGM7tcvvRQ)X%?9qrEJ>ng>QykM{~1%_hxWD zb24w&v$BhNNoLR=-}$WZGPj0z4fS|iCsXaxymot)xbm01>5=}P+XBu^xVt*;IpS`e z4aS6^J@56}F`nBN&MLTcNI_hW6}Q2`4@<86WoPd4Z_n)pX9nDT9rp{B#lo&Hiz|QG z33HzCTry+zk#PGtZmGCm?MO4Bk5yTGd+-~cI~2}oaena#uT_}hzeSCLF|oE`aXp1X0j=Mb0Gb6g#2FFk0g*~ULRnrG^RC3`yl z$($gZ(-h8`O(yC7`5^m3Y0}5}Wc(~5eW&3n+%ue?T_k&U%L}}0l)u#nxwy@D9Okxk zRC8YR9F)G*htlR1&f^Mmev_s8Enc=`^(#Ki%iz5L?@C-fr!qIc#>pJ6Nc4Vck(YTB z9Q2MrW}uhfw&Do+8Lhhd#0fdwg~t#r@(Q-t%hDT?R)w51xa#)~55UfKwkX2@S@HYSP4D+WZOdJa`=_KHDq2Mqf_w zXmVRZNAY_TX_zZclDQ)tvFvfPFx@T9*);Xe{`Ie6;|bZh8bJOeuu+6 zCCJY}FC2RaL$SfWM7kfjXQEGcGHq7>Kw3(0^?Vaxu0541;O1TroVl~-ZUUz%achFB zvHw4W-5_n6b1z8m&GNh5%XA+$4%@-o(T$7fMMXKgL^!P+XB&)llNziYB@dOJmT`WkK^p2xL?_oW@$Nt z;QZj~V{|+cFZ=VsG;{GrCClNRkF4Riir*0AjRH+w{I-(Z()-`_a>v2*c{0(3eWudz z)(NN`HtZu5HZoNPJ>|dm+#U5>V`lcW9Z+*^*hj(p9o{TlJ)efW;bOcS? z#$_S=o2W;ZxVZcv?y{YBRlMTdYv5?Czus{*|1k5{(!Vh7g6u~Z^)~W8ax%m5+2%ieKrl~K8GYk8@qS<}9N!Q8>^NJ=!?MMw##YXsaJ*hMMREK5 zv&$7X@v@%{%=Ojj66yzeQy*8)O$mAh(C>J=-W*Opm&boq-Tl1h&f-;r?5!{5+Qv5U zT9A+1Ihk7^kGdbo94~)m{|Uxd*-x^Km!IVGX*c+{Qs#T$Dmi;PKXIM06VH9x#!23p zr=gY=&Mo$Vw}Q0okE`chk=Mh?40PW4f1c&@YXBUTy}~VXoG$z}^Qv?GS~;AVl(#s; z9cORVr+H-ucsU2bIp4LPLmVfZ*V(d}2uE`{$)R2Z`7&1NFk9tp57Xc<(Wq3sgRy$v zeyEqIoA9y+?Kj8g*(`X9_i?y-UWL39oy^xIb8TDHVH@rlaOS%BpXE9DiP}}qfup=t z+|F~H4+2j52QO!#3sd2pt@Ky^f;wu9c-eRN$jytdfX8@Lc{Q${-wI62t?3hu(O94T ztQD$);x;OIBb*7O;}%@C_e%)-I&hndLtMwb51!&FS%H0E;uBlzcc9}gTD8BI`zX9# z#Ni2CJ%3Dj;_Qac>X-=6E!-+*_G%g?uc zJn?7Fyqlu4dAY<>rpdyAZ~>D<2V8ww~;85>_44_! z2VA93b#G6{iKnY09G|Y9^547o7`Zn*#`4Pja1~Y;X8(xH=)5g%s~8HeAN8Z$ z$sB~d;ZEi+s#h(y{nV%BU^ti1ewCI=$0<=i+~D34&p8avg|4rd;yB$UC;eltt<8X= z_N_D=A^&a0Y^LAhWe?rbEA;dmWrvEyt_#+iM$$HZdW%dK!4y8h=5 z$N5t6zcQ1X2Q7i)`_Bg)=P}Z3?)p6C(@`jPTQyzJ70a=O$qcn6Sg z&*JL&b->RRZWFg+tDZiOSHRI+;T6Y?_9gNceFyOl9Q7sd8&^Vi7x*~$D}I`o67u|6NNaD09y>)UqMRF!gUWloQ2P@j3J%d1{I zGNb-}yyOPD!qUYZeEJ*1<6h;HH-s{aaGI-;3+9pgRISdd+D zbZ$;M1>SDd$*E4}B;?I-GCz{PPB+m%+xBuC93Rj5YA0)k1bRZe?>ZIUAnN1kPUeZo zJJZQ5RljoS-PmZX%=vJ9ojKoe9u()fEpqdOi{Nx5FIAN;b(}s5|H*$X@^Y?*<8`X* z9OpU3zvbp_J?ADknztz*_SCa||AWaElL*M3R@%{*-5u~y6f5t>)$>pnxBjx1wCv@% z55dX8eH2&Ycr{@!0Z+I%1a_GwEB@-^@Ep9~U0PmnoVPV*wro!qZu8`2IImJBO7Clq z6WEn*t|mT~^9~%Zm%r~gk1OBi-+7+rd<5qT7uKha6WH2bd!0FnmGc#xYv3rI>Q~ID zYcch@F?PjhOb+6WO8x-vG}8GKuAWEVXUJdn-e+=ikpIB>7H*<}<<|B-Vbt%rp1*>01K!mEh1E&<(`5ggZn+Iy8eI_QBbDYe-ylvlJt(A6=RfNVvV zw|zWcg?AHSzk#dg;rPb1QE7U%XHIwj7aWasAK)sUD+v2-@Ue?SyqW<;>n+)E zI}rB1pr4DwAnuvhHr>?6AtSy^Z-wK;Z8D?b_`ZLv;{;=Tlao&Ha>m11S@wa&dS*s_6VvAIkv>muf^!pTQFvip4A#4t?A$j)`#(I@%e!&Ktw!DwCo`~fFaNo{ zm-#51TV4J<;Wz^n?!2#ZbFY8Exzll;bDTpI{{^@H;pMypr^3bmWygt^*PC#BdA;K} zm#WX0{B5oduZAN#w(9vujaok~|KPu5W7`J|RK)Ij{(8@A1kd+9ngbcL@mZ25 zUiQxCulMz#DZEAG&z87)ev_z;8U(iAVD5BKyT5tv4scS`ot+#v+CJqkdwAQ{p1V67 zwa+%V(mxs#&uu_UuoqBR@&2+KTp#B^4}I?EFU5=N!QJ6)h3sCqdhY+}cks?JvW8#~ zoLmCNz$2rL7W~VGvJjBb+*#>pp zw$W+uZX%znaP|BKU`i9zcUC!pY(*blJz4JYl1chba@=S>2llSk``_!ibKoeS|B9

WgapblQ_I7?IqKi)6bZmxtw|6Hl~9ZjP)t$J>y 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 xfR6n`cDw|G2} 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%0A1{pcz5!v7SsT2DJB7FQi&1W*Uv? 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

!s@7{0}E-=ar3zWgJJ> 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

o1)wq|cH^{+Aq-&yw#M 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 z%0D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 literal 0 HcmV?d00001 diff --git a/deps/icu-small/source/i18n/affixpatternparser.cpp b/deps/icu-small/source/i18n/affixpatternparser.cpp index fc98f7bf45684d..05e45dbb12bfc5 100644 --- a/deps/icu-small/source/i18n/affixpatternparser.cpp +++ b/deps/icu-small/source/i18n/affixpatternparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -44,7 +46,8 @@ nextToken(const UChar *buffer, int32_t idx, int32_t len, UChar *token) { *token = buffer[idx + 1]; if (buffer[idx + 1] == 0xA4) { int32_t i = 2; - for (; idx + i < len && i < 4 && buffer[idx + i] == buffer[idx + 1]; ++i); + for (; idx + i < len && i < 4 && buffer[idx + i] == buffer[idx + 1]; ++i) + ; return i; } return 2; @@ -66,7 +69,8 @@ nextUserToken(const UChar *buffer, int32_t idx, int32_t len, UChar *token) { break; } int32_t i = 1; - for (; idx + i < len && i < max && buffer[idx + i] == buffer[idx]; ++i); + for (; idx + i < len && i < max && buffer[idx + i] == buffer[idx]; ++i) + ; return i; } diff --git a/deps/icu-small/source/i18n/affixpatternparser.h b/deps/icu-small/source/i18n/affixpatternparser.h index 2105540a1aa7ba..07f84c53145d1d 100644 --- a/deps/icu-small/source/i18n/affixpatternparser.h +++ b/deps/icu-small/source/i18n/affixpatternparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/alphaindex.cpp b/deps/icu-small/source/i18n/alphaindex.cpp index 9159014f800596..8a2f0a3cb5c820 100644 --- a/deps/icu-small/source/i18n/alphaindex.cpp +++ b/deps/icu-small/source/i18n/alphaindex.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/anytrans.cpp b/deps/icu-small/source/i18n/anytrans.cpp index 695a9390b681c0..8ec6f837cfdffa 100644 --- a/deps/icu-small/source/i18n/anytrans.cpp +++ b/deps/icu-small/source/i18n/anytrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************** * Copyright (c) 2002-2014, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/anytrans.h b/deps/icu-small/source/i18n/anytrans.h index 228ccbe03affcc..d06d2baa57e202 100644 --- a/deps/icu-small/source/i18n/anytrans.h +++ b/deps/icu-small/source/i18n/anytrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *********************************************************************** * Copyright (c) 2002-2007, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/astro.cpp b/deps/icu-small/source/i18n/astro.cpp index 1b3bf58964b548..d657aaa20d751a 100644 --- a/deps/icu-small/source/i18n/astro.cpp +++ b/deps/icu-small/source/i18n/astro.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************ * Copyright (C) 1996-2012, International Business Machines Corporation * and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/astro.h b/deps/icu-small/source/i18n/astro.h index cd20b6cf2578b0..e8546617634e36 100644 --- a/deps/icu-small/source/i18n/astro.h +++ b/deps/icu-small/source/i18n/astro.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************ * Copyright (C) 1996-2008, International Business Machines Corporation * * and others. All Rights Reserved. * diff --git a/deps/icu-small/source/i18n/basictz.cpp b/deps/icu-small/source/i18n/basictz.cpp index 7fea290f169d06..b464f5cc5fbe64 100644 --- a/deps/icu-small/source/i18n/basictz.cpp +++ b/deps/icu-small/source/i18n/basictz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/bocsu.cpp b/deps/icu-small/source/i18n/bocsu.cpp index cfc9816693bc9e..a2f94f239efcf7 100644 --- a/deps/icu-small/source/i18n/bocsu.cpp +++ b/deps/icu-small/source/i18n/bocsu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/bocsu.h b/deps/icu-small/source/i18n/bocsu.h index 0f89a0fbeb06da..56b03500b143d2 100644 --- a/deps/icu-small/source/i18n/bocsu.h +++ b/deps/icu-small/source/i18n/bocsu.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/brktrans.cpp b/deps/icu-small/source/i18n/brktrans.cpp index dafac399f855e3..714a0a8720ad3f 100644 --- a/deps/icu-small/source/i18n/brktrans.cpp +++ b/deps/icu-small/source/i18n/brktrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/brktrans.h b/deps/icu-small/source/i18n/brktrans.h index 5a4c4b6d6b249a..27228321e67399 100644 --- a/deps/icu-small/source/i18n/brktrans.h +++ b/deps/icu-small/source/i18n/brktrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/buddhcal.cpp b/deps/icu-small/source/i18n/buddhcal.cpp index 5c9f80ed0ca092..c8a3a91a2cbd0d 100644 --- a/deps/icu-small/source/i18n/buddhcal.cpp +++ b/deps/icu-small/source/i18n/buddhcal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/buddhcal.h b/deps/icu-small/source/i18n/buddhcal.h index 441156d3d8fd52..95db980600d20f 100644 --- a/deps/icu-small/source/i18n/buddhcal.h +++ b/deps/icu-small/source/i18n/buddhcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/calendar.cpp b/deps/icu-small/source/i18n/calendar.cpp index 5a1bef805f656f..9b0f5a0ad3e9e4 100644 --- a/deps/icu-small/source/i18n/calendar.cpp +++ b/deps/icu-small/source/i18n/calendar.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -634,7 +636,9 @@ static const int32_t kCalendarLimits[UCAL_FIELD_COUNT][4] = { }; // Resource bundle tags read by this class +static const char gCalendar[] = "calendar"; static const char gMonthNames[] = "monthNames"; +static const char gGregorian[] = "gregorian"; // Data flow in Calendar // --------------------- @@ -3791,12 +3795,30 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& from the calendar data. The code used to use the dateTimeElements resource to get first day of week data, but this was moved to supplemental data under ticket 7755. (JCE) */ - CalendarData calData(useLocale,type,status); - UResourceBundle *monthNames = calData.getByKey(gMonthNames,status); + // Get the monthNames resource bundle for the calendar 'type'. Fallback to gregorian if the resource is not + // found. + LocalUResourceBundlePointer calData(ures_open(NULL, useLocale.getBaseName(), &status)); + ures_getByKey(calData.getAlias(), gCalendar, calData.getAlias(), &status); + + LocalUResourceBundlePointer monthNames; + if (type != NULL && *type != '\0' && uprv_strcmp(type, gGregorian) != 0) { + monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), type, NULL, &status)); + ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames, + monthNames.getAlias(), &status); + } + + if (monthNames.isNull() || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + monthNames.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), gGregorian, + monthNames.orphan(), &status)); + ures_getByKeyWithFallback(monthNames.getAlias(), gMonthNames, + monthNames.getAlias(), &status); + } + if (U_SUCCESS(status)) { U_LOCALE_BASED(locBased,*this); - locBased.setLocaleIDs(ures_getLocaleByType(monthNames, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(monthNames, ULOC_ACTUAL_LOCALE, &status)); + locBased.setLocaleIDs(ures_getLocaleByType(monthNames.getAlias(), ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(monthNames.getAlias(), ULOC_ACTUAL_LOCALE, &status)); } else { status = U_USING_FALLBACK_WARNING; return; @@ -3815,9 +3837,6 @@ Calendar::setWeekData(const Locale& desiredLocale, const char *type, UErrorCode& } if (U_FAILURE(status)) { -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, " Failure loading weekData from supplemental = %s\n", u_errorName(status)); -#endif status = U_USING_FALLBACK_WARNING; } else { int32_t arrLen; diff --git a/deps/icu-small/source/i18n/casetrn.cpp b/deps/icu-small/source/i18n/casetrn.cpp index 602c22914f913f..7f71362c334dce 100644 --- a/deps/icu-small/source/i18n/casetrn.cpp +++ b/deps/icu-small/source/i18n/casetrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/casetrn.h b/deps/icu-small/source/i18n/casetrn.h index b20cb8e9692c19..1067e0fc7b5638 100644 --- a/deps/icu-small/source/i18n/casetrn.h +++ b/deps/icu-small/source/i18n/casetrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/cecal.cpp b/deps/icu-small/source/i18n/cecal.cpp index 9c2759ba757566..38c89799be7c4a 100644 --- a/deps/icu-small/source/i18n/cecal.cpp +++ b/deps/icu-small/source/i18n/cecal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2009, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/cecal.h b/deps/icu-small/source/i18n/cecal.h index 471d88933e83f8..ce6f4209ca5c74 100644 --- a/deps/icu-small/source/i18n/cecal.h +++ b/deps/icu-small/source/i18n/cecal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2008, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/chnsecal.cpp b/deps/icu-small/source/i18n/chnsecal.cpp index d2c9e9ea0bec33..0cf88205cb6357 100644 --- a/deps/icu-small/source/i18n/chnsecal.cpp +++ b/deps/icu-small/source/i18n/chnsecal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2007-2014, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/chnsecal.h b/deps/icu-small/source/i18n/chnsecal.h index ba3f943066584c..e000df7158d51c 100644 --- a/deps/icu-small/source/i18n/chnsecal.h +++ b/deps/icu-small/source/i18n/chnsecal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2007-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/choicfmt.cpp b/deps/icu-small/source/i18n/choicfmt.cpp index e739adde0ce628..3630157852514c 100644 --- a/deps/icu-small/source/i18n/choicfmt.cpp +++ b/deps/icu-small/source/i18n/choicfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/coleitr.cpp b/deps/icu-small/source/i18n/coleitr.cpp index c842663ba183cf..4825baebcd8c51 100644 --- a/deps/icu-small/source/i18n/coleitr.cpp +++ b/deps/icu-small/source/i18n/coleitr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/coll.cpp b/deps/icu-small/source/i18n/coll.cpp index 6a8dc1c0d06b3f..46e5324ffdfe81 100644 --- a/deps/icu-small/source/i18n/coll.cpp +++ b/deps/icu-small/source/i18n/coll.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/collation.cpp b/deps/icu-small/source/i18n/collation.cpp index c01457e7386289..bac7498dfc35f7 100644 --- a/deps/icu-small/source/i18n/collation.cpp +++ b/deps/icu-small/source/i18n/collation.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collation.h b/deps/icu-small/source/i18n/collation.h index 53cffa983c1fae..c82d9a4778aa5f 100644 --- a/deps/icu-small/source/i18n/collation.h +++ b/deps/icu-small/source/i18n/collation.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationbuilder.cpp b/deps/icu-small/source/i18n/collationbuilder.cpp index 3465832d5a240b..0025cfc34fb39c 100644 --- a/deps/icu-small/source/i18n/collationbuilder.cpp +++ b/deps/icu-small/source/i18n/collationbuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationbuilder.h b/deps/icu-small/source/i18n/collationbuilder.h index cd499a4e927c02..7dda928a51a785 100644 --- a/deps/icu-small/source/i18n/collationbuilder.h +++ b/deps/icu-small/source/i18n/collationbuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationcompare.cpp b/deps/icu-small/source/i18n/collationcompare.cpp index 3b72d05d718a0f..5d8bd90d6c4781 100644 --- a/deps/icu-small/source/i18n/collationcompare.cpp +++ b/deps/icu-small/source/i18n/collationcompare.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationcompare.h b/deps/icu-small/source/i18n/collationcompare.h index 0185226d62fb4f..630b90b5564a7a 100644 --- a/deps/icu-small/source/i18n/collationcompare.h +++ b/deps/icu-small/source/i18n/collationcompare.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdata.cpp b/deps/icu-small/source/i18n/collationdata.cpp index 7f781f50f19737..d3a62e4fd0384f 100644 --- a/deps/icu-small/source/i18n/collationdata.cpp +++ b/deps/icu-small/source/i18n/collationdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdata.h b/deps/icu-small/source/i18n/collationdata.h index dd7fcebea46138..ab40bbd89e5a8f 100644 --- a/deps/icu-small/source/i18n/collationdata.h +++ b/deps/icu-small/source/i18n/collationdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatabuilder.cpp b/deps/icu-small/source/i18n/collationdatabuilder.cpp index 7bdf184cc01375..4a9a67c7b0a189 100644 --- a/deps/icu-small/source/i18n/collationdatabuilder.cpp +++ b/deps/icu-small/source/i18n/collationdatabuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatabuilder.h b/deps/icu-small/source/i18n/collationdatabuilder.h index cfa46fd5506a0c..f2c9a820ad1ac8 100644 --- a/deps/icu-small/source/i18n/collationdatabuilder.h +++ b/deps/icu-small/source/i18n/collationdatabuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatareader.cpp b/deps/icu-small/source/i18n/collationdatareader.cpp index f7098f984199dd..df0b2a36809272 100644 --- a/deps/icu-small/source/i18n/collationdatareader.cpp +++ b/deps/icu-small/source/i18n/collationdatareader.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatareader.h b/deps/icu-small/source/i18n/collationdatareader.h index 4a9fa5eecadada..ff8ec3d406a8c0 100644 --- a/deps/icu-small/source/i18n/collationdatareader.h +++ b/deps/icu-small/source/i18n/collationdatareader.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatawriter.cpp b/deps/icu-small/source/i18n/collationdatawriter.cpp index 6943ed2c61f0b5..596236bc61b005 100644 --- a/deps/icu-small/source/i18n/collationdatawriter.cpp +++ b/deps/icu-small/source/i18n/collationdatawriter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationdatawriter.h b/deps/icu-small/source/i18n/collationdatawriter.h index 50e26524cec866..6169e0fd2640ed 100644 --- a/deps/icu-small/source/i18n/collationdatawriter.h +++ b/deps/icu-small/source/i18n/collationdatawriter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatin.cpp b/deps/icu-small/source/i18n/collationfastlatin.cpp index 70e393c4dfeaec..c3e8c98b3adb1a 100644 --- a/deps/icu-small/source/i18n/collationfastlatin.cpp +++ b/deps/icu-small/source/i18n/collationfastlatin.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatin.h b/deps/icu-small/source/i18n/collationfastlatin.h index 6a25c6692c901d..00a2d1b5105faf 100644 --- a/deps/icu-small/source/i18n/collationfastlatin.h +++ b/deps/icu-small/source/i18n/collationfastlatin.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp b/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp index d5acda15b01755..032e5e82aaef15 100644 --- a/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp +++ b/deps/icu-small/source/i18n/collationfastlatinbuilder.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines @@ -147,7 +149,7 @@ CollationFastLatinBuilder::loadGroups(const CollationData &data, UErrorCode &err // missing data return FALSE; } - result.append(0); // reserve a slot for this group + result.append((UChar)0); // reserve a slot for this group } firstDigitPrimary = data.getFirstPrimaryForGroup(UCOL_REORDER_CODE_DIGIT); @@ -564,7 +566,7 @@ CollationFastLatinBuilder::encodeCharCEs(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return FALSE; } int32_t miniCEsStart = result.length(); for(int32_t i = 0; i < CollationFastLatin::NUM_FAST_CHARS; ++i) { - result.append(0); // initialize to completely ignorable + result.append((UChar)0); // initialize to completely ignorable } int32_t indexBase = result.length(); for(int32_t i = 0; i < CollationFastLatin::NUM_FAST_CHARS; ++i) { diff --git a/deps/icu-small/source/i18n/collationfastlatinbuilder.h b/deps/icu-small/source/i18n/collationfastlatinbuilder.h index b9eedf985af515..9d380380b4e58c 100644 --- a/deps/icu-small/source/i18n/collationfastlatinbuilder.h +++ b/deps/icu-small/source/i18n/collationfastlatinbuilder.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/collationfcd.cpp b/deps/icu-small/source/i18n/collationfcd.cpp index 153953cfc8671b..de1d9a2d1d8c5b 100644 --- a/deps/icu-small/source/i18n/collationfcd.cpp +++ b/deps/icu-small/source/i18n/collationfcd.cpp @@ -1,5 +1,7 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* - * Copyright (C) 1999-2015, International Business Machines + * Copyright (C) 1999-2016, International Business Machines * Corporation and others. All Rights Reserved. * * file name: collationfcd.cpp @@ -20,27 +22,27 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,1,1,2,3,0,0,0,0, 0,0,0,0,4,0,0,0,0,0,0,0,5,6,7,0, 8,0,9,0xa,0,0,0xb,0xc,0xd,0xe,0xf,0,0,0,0,0x10, -0x11,0x12,0x13,0,0,0,0,0x14,0,0x15,0x16,0,0,0x15,0x17,0, -0,0x15,0x17,0,0,0x15,0x17,0,0,0x15,0x17,0,0,0,0x17,0, -0,0,0x18,0,0,0x15,0x17,0,0,0,0x17,0,0,0,0x19,0, -0,0x1a,0x1b,0,0,0x1c,0x1b,0,0x1c,0x1d,0,0x1e,0x1f,0,0x20,0, -0,0x21,0,0,0x17,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x22,0,0,0,0,0, +0x11,0x12,0x13,0,0,0,0x14,0x15,0,0x16,0x17,0,0,0x16,0x18,0, +0,0x16,0x18,0,0,0x16,0x18,0,0,0x16,0x18,0,0,0,0x18,0, +0,0,0x19,0,0,0x16,0x18,0,0,0,0x18,0,0,0,0x1a,0, +0,0x1b,0x1c,0,0,0x1d,0x1c,0,0x1d,0x1e,0,0x1f,0x20,0,0x21,0, +0,0x22,0,0,0x18,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x23,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x23,0x23,0,0,0,0,0x24,0, -0,0,0,0,0,0x25,0,0,0,0x13,0,0,0,0,0,0, -0x26,0,0,0x27,0,0x28,0,0,0,0x23,0x29,0x10,0,0x2a,0,0x2b, -0,0x2c,0,0,0,0,0x2d,0x2e,0,0,0,0,0,0,1,0x2f, +0,0,0,0,0,0,0,0,0x24,0x24,0,0,0,0,0x25,0, +0,0,0,0,0,0x26,0,0,0,0x13,0,0,0,0,0,0, +0x27,0,0,0x28,0,0x29,0,0,0,0x24,0x2a,0x10,0,0x2b,0,0x2c, +0,0x2d,0,0,0,0,0x2e,0x2f,0,0,0,0,0,0,1,0x30, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x30,0x31,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0x31,0x32,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x32,0,0,0,0x33,0,0,0,1, +0,0,0,0,0,0,0,0x33,0,0,0,0x34,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x34,0,0,0x35,0,0,0,0,0,0,0,0,0,0,0, +0,0x35,0,0,0x36,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -99,9 +101,9 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x36,0x37,0,0,0x38,0,0,0,0,0,0,0,0, -0x20,0,0,0,0,0,0x29,0x39,0,0x3a,0x3b,0,0,0x3b,0x3c,0, -0,0,0,0,0,0x3d,0x3e,0x3f,0,0,0,0,0,0,0,0x17, +0,0,0,0x37,0x38,0,0,0x39,0,0,0,0,0,0,0,0, +0x21,0,0,0,0,0,0x2a,0x3a,0,0x3b,0x3c,0,0,0x3c,0x3d,0, +0,0,0,0,0,0x3e,0x3f,0x40,0,0,0,0,0,0,0,0x18, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -124,7 +126,7 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x40,0x41,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x41,0x42,0,0,0,0,0,0,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,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, @@ -141,17 +143,17 @@ const uint8_t CollationFCD::lcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x42,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x43,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -const uint32_t CollationFCD::lcccBits[67]={ +const uint32_t CollationFCD::lcccBits[68]={ 0,0xffffffff,0xffff7fff,0xffff,0xf8,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0xfffff800,0x10000,0x9fc00000,0x3d9f,0x20000,0xffff0000,0x7ff, -0xff800,0xfbc00000,0x3eef,0xe000000,0xfffffff8,0x10000000,0x1e2000,0x2000,0x602000,0x400,0x7000000,0xf00,0x3000000,0x2a00000,0x3c3e0000,0xdf, -0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf03fffff, -0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000, -0x4000035,0x4108000,0x40000000 +0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10000000,0x1e2000,0x2000,0x602000,0x400,0x7000000,0xf00,0x3000000,0x2a00000,0x3c3e0000, +0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd, +0xf83fffff,0x1fff0000,0x1ffe2,0x38000,0x80000000,0xfc00,0x6000000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2, +0x400000,0x40000b5,0x5108000,0x40000000 }; const uint8_t CollationFCD::tcccIndex[2048]={ @@ -159,27 +161,27 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0xb,0xc,0,0,0,0,0,0,1,1,0xd,0xe,0xf,0x10,0x11,0, 0x12,0x13,0x14,0x15,0x16,0,0x17,0x18,0,0,0,0,0x19,0x1a,0x1b,0, 0x1c,0x1d,0x1e,0x1f,0,0,0x20,0x21,0x22,0x23,0x24,0,0,0,0,0x25, -0x26,0x27,0x28,0,0,0,0,0x29,0,0x2a,0x2b,0,0,0x2c,0x2d,0, -0,0x2e,0x2f,0,0,0x2c,0x30,0,0,0x2c,0x31,0,0,0,0x30,0, -0,0,0x32,0,0,0x2c,0x30,0,0,0,0x30,0,0,0,0x33,0, -0,0x34,0x35,0,0,0x36,0x35,0,0x36,0x37,0,0x38,0x39,0,0x3a,0, -0,0x3b,0,0,0x30,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0,0,0x3c,0,0,0,0,0, +0x26,0x27,0x28,0,0,0,0x29,0x2a,0,0x2b,0x2c,0,0,0x2d,0x2e,0, +0,0x2f,0x30,0,0,0x2d,0x31,0,0,0x2d,0x32,0,0,0,0x31,0, +0,0,0x33,0,0,0x2d,0x31,0,0,0,0x31,0,0,0,0x34,0, +0,0x35,0x36,0,0,0x37,0x36,0,0x37,0x38,0,0x39,0x3a,0,0x3b,0, +0,0x3c,0,0,0x31,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0x3d,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x3d,0x3d,0,0,0,0,0x3e,0, -0,0,0,0,0,0x3f,0,0,0,0x28,0,0,0,0,0,0, -0x40,0,0,0x41,0,0x42,0,0,0,0x3d,0x43,0x25,0,0x44,0,0x45, -0,0x46,0,0,0,0,0x47,0x48,0,0,0,0,0,0,1,0x49, -1,1,1,1,0x4a,1,1,0x4b,0x4c,1,0x4d,0x4e,1,0x4f,0x50,0x51, -0,0,0,0,0,0,0x52,0x53,0,0x54,0,0,0x55,0x56,0x57,0, -0x58,0x59,0x5a,0x5b,0x5c,0x5d,0,0x5e,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x3e,0x3e,0,0,0,0,0x3f,0, +0,0,0,0,0,0x40,0,0,0,0x28,0,0,0,0,0,0, +0x41,0,0,0x42,0,0x43,0,0,0,0x3e,0x44,0x25,0,0x45,0,0x46, +0,0x47,0,0,0,0,0x48,0x49,0,0,0,0,0,0,1,0x4a, +1,1,1,1,0x4b,1,1,0x4c,0x4d,1,0x4e,0x4f,1,0x50,0x51,0x52, +0,0,0,0,0,0,0x53,0x54,0,0x55,0,0,0x56,0x57,0x58,0, +0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0,0x5f,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0x2c,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0x5f,0,0,0,0x60,0,0,0,1, +0,0,0,0,0,0,0x2d,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0x60,0,0,0,0x61,0,0,0,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0x61,0x62,0x63,0x64,0x62,0x63,0x65,0,0,0,0,0,0,0,0, +0,0x62,0x63,0x64,0x65,0x63,0x64,0x66,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -238,9 +240,9 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0x66,0x67,0,0,0x68,0,0,0,0,0,0,0,0, -0x3a,0,0,0,0,0,0x43,0x69,0,0x6a,0x6b,0,0,0x6b,0x6c,0, -0,0,0,0,0,0x6d,0x6e,0x6f,0,0,0,0,0,0,0,0x30, +0,0,0,0x67,0x68,0,0,0x69,0,0,0,0,0,0,0,0, +0x3b,0,0,0,0,0,0x44,0x6a,0,0x6b,0x6c,0,0,0x6c,0x6d,0, +0,0,0,0,0,0x6e,0x6f,0x70,0,0,0,0,0,0,0,0x31, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -263,7 +265,7 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0x70,0x71,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0x71,0x72,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, @@ -280,20 +282,20 @@ const uint8_t CollationFCD::tcccIndex[2048]={ 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, -0,0,0,0,0,0,0,0,0x3c,0x72,0x73,0,0,0,0,0, +0,0,0,0,0,0,0,0,0x3d,0x73,0x74,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0xe,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; -const uint32_t CollationFCD::tcccBits[116]={ +const uint32_t CollationFCD::tcccBits[117]={ 0,0xffffffff,0x3e7effbf,0xbe7effbf,0xfffcffff,0x7ef1ff3f,0xfff3f1f8,0x7fffff3f,0x18003,0xdfffe000,0xff31ffcf,0xcfffffff,0xfffc0,0xffff7fff,0xffff,0x1d760, 0x1fc00,0x187c00,0x200708b,0x2000000,0x708b0000,0xc00000,0xf8,0xfccf0006,0x33ffcfc,0xfffe0000,0xbfffffff,0xb6,0x7ff0000,0x7c,0xfffff800,0x10000, -0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0xff800,0xfbc00000,0x3eef,0xe000000,0xfffffff8,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x10480000,0x4e002000, -0x2000,0x30002000,0x602100,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000,0x200, -0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf03fffff,0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff,0x1fdfffff, -0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,0x333,0xf000,0x3c0f,0x38000, -0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2,0x400000, -0x4000035,0x4108000,0x5f7ffc00,0x7fdb +0x9fc80005,0x3d9f,0x20000,0xffff0000,0x7ff,0xff800,0xfbc00000,0x3eef,0xe000000,0xfff00000,0xfffffffb,0x10120200,0xff1e2000,0x10000000,0xb0002000,0x10480000, +0x4e002000,0x2000,0x30002000,0x602100,0x24000400,0x7000000,0xf00,0x3000000,0x2a00000,0x3d7e0000,0xdf,0x40,0x6800000,0xe0000000,0x100000,0x20040000, +0x200,0x1800000,0x9fe00001,0x3fff0000,0x10,0xc00,0xc0040,0x800000,0xfff70000,0x31021fd,0xf83fffff,0xbffffff,0x3ffffff,0x3f3fffff,0xaaff3f3f,0x3fffffff, +0x1fdfffff,0xefcfffde,0x1fdc7fff,0x1fff0000,0x1ffe2,0x800,0xc000000,0x4000,0xe000,0x1210,0x50,0x292,0x333e005,0x333,0xf000,0x3c0f, +0x38000,0x80000000,0xfc00,0x55555000,0x36db02a5,0x46100000,0x47900000,0x3ff08000,0xc0000000,0x30000,0x3ffff,0x3800,0x80000,1,0xc19d0000,2, +0x400000,0x40000b5,0x5108000,0x5f7ffc00,0x7fdb }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/collationfcd.h b/deps/icu-small/source/i18n/collationfcd.h index f4cc8a170e8ed5..150f4880c90046 100644 --- a/deps/icu-small/source/i18n/collationfcd.h +++ b/deps/icu-small/source/i18n/collationfcd.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationiterator.cpp b/deps/icu-small/source/i18n/collationiterator.cpp index 86199bcd177216..e6e8f27e2f6b9d 100644 --- a/deps/icu-small/source/i18n/collationiterator.cpp +++ b/deps/icu-small/source/i18n/collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationiterator.h b/deps/icu-small/source/i18n/collationiterator.h index a7b2cbfbce76e0..0161f5a7b16e9a 100644 --- a/deps/icu-small/source/i18n/collationiterator.h +++ b/deps/icu-small/source/i18n/collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationkeys.cpp b/deps/icu-small/source/i18n/collationkeys.cpp index 3fb1af1b36768d..91302285d6b78f 100644 --- a/deps/icu-small/source/i18n/collationkeys.cpp +++ b/deps/icu-small/source/i18n/collationkeys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationkeys.h b/deps/icu-small/source/i18n/collationkeys.h index d1cc76f0283ac0..74b370e710991e 100644 --- a/deps/icu-small/source/i18n/collationkeys.h +++ b/deps/icu-small/source/i18n/collationkeys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationroot.cpp b/deps/icu-small/source/i18n/collationroot.cpp index 749f05c51c3a2f..f862e410b81cd5 100644 --- a/deps/icu-small/source/i18n/collationroot.cpp +++ b/deps/icu-small/source/i18n/collationroot.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines @@ -45,7 +47,7 @@ static UBool U_CALLCONV uprv_collation_root_cleanup() { U_CDECL_END -void +void U_CALLCONV CollationRoot::load(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } LocalPointer t(new CollationTailoring(NULL)); diff --git a/deps/icu-small/source/i18n/collationroot.h b/deps/icu-small/source/i18n/collationroot.h index 345fbe77eb4128..26e5071fff8b7a 100644 --- a/deps/icu-small/source/i18n/collationroot.h +++ b/deps/icu-small/source/i18n/collationroot.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines @@ -34,7 +36,7 @@ class U_I18N_API CollationRoot { // purely static static const CollationSettings *getSettings(UErrorCode &errorCode); private: - static void load(UErrorCode &errorCode); + static void U_CALLCONV load(UErrorCode &errorCode); }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/collationrootelements.cpp b/deps/icu-small/source/i18n/collationrootelements.cpp index c8fd0a09ffd37e..638a2456c82958 100644 --- a/deps/icu-small/source/i18n/collationrootelements.cpp +++ b/deps/icu-small/source/i18n/collationrootelements.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationrootelements.h b/deps/icu-small/source/i18n/collationrootelements.h index df2a13df243cef..518a24fe4e0e5f 100644 --- a/deps/icu-small/source/i18n/collationrootelements.h +++ b/deps/icu-small/source/i18n/collationrootelements.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationruleparser.cpp b/deps/icu-small/source/i18n/collationruleparser.cpp index 2d2e25fcb0e1d4..ea3ea66bc08cf5 100644 --- a/deps/icu-small/source/i18n/collationruleparser.cpp +++ b/deps/icu-small/source/i18n/collationruleparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines @@ -788,7 +790,7 @@ CollationRuleParser::readWords(int32_t i, UnicodeString &raw) const { return i; } if(PatternProps::isWhiteSpace(c)) { - raw.append(0x20); + raw.append(sp); i = skipWhiteSpace(i + 1); } else { raw.append(c); diff --git a/deps/icu-small/source/i18n/collationruleparser.h b/deps/icu-small/source/i18n/collationruleparser.h index 3c2b22c9dc455d..bd393c2b6ad143 100644 --- a/deps/icu-small/source/i18n/collationruleparser.h +++ b/deps/icu-small/source/i18n/collationruleparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsets.cpp b/deps/icu-small/source/i18n/collationsets.cpp index ab282d89c6a95c..1188f310620e84 100644 --- a/deps/icu-small/source/i18n/collationsets.cpp +++ b/deps/icu-small/source/i18n/collationsets.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsets.h b/deps/icu-small/source/i18n/collationsets.h index 4f0a2b6dceac13..070d507ebdc318 100644 --- a/deps/icu-small/source/i18n/collationsets.h +++ b/deps/icu-small/source/i18n/collationsets.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsettings.cpp b/deps/icu-small/source/i18n/collationsettings.cpp index e3e76a476588b9..bc1d4e63f8a2a7 100644 --- a/deps/icu-small/source/i18n/collationsettings.cpp +++ b/deps/icu-small/source/i18n/collationsettings.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationsettings.h b/deps/icu-small/source/i18n/collationsettings.h index d839de7e541e3f..1522dd58be6603 100644 --- a/deps/icu-small/source/i18n/collationsettings.h +++ b/deps/icu-small/source/i18n/collationsettings.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationtailoring.cpp b/deps/icu-small/source/i18n/collationtailoring.cpp index ba20cc871ac57e..d1ffa306f1290d 100644 --- a/deps/icu-small/source/i18n/collationtailoring.cpp +++ b/deps/icu-small/source/i18n/collationtailoring.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/collationtailoring.h b/deps/icu-small/source/i18n/collationtailoring.h index 2a9b3d566f687a..e463005e08f54a 100644 --- a/deps/icu-small/source/i18n/collationtailoring.h +++ b/deps/icu-small/source/i18n/collationtailoring.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/collationweights.cpp b/deps/icu-small/source/i18n/collationweights.cpp index dba362255e4850..9a7b9a9973c127 100644 --- a/deps/icu-small/source/i18n/collationweights.cpp +++ b/deps/icu-small/source/i18n/collationweights.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/collationweights.h b/deps/icu-small/source/i18n/collationweights.h index a32274b876b7b8..8f3f328547a1af 100644 --- a/deps/icu-small/source/i18n/collationweights.h +++ b/deps/icu-small/source/i18n/collationweights.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/collunsafe.h b/deps/icu-small/source/i18n/collunsafe.h index 97a766db26f729..4819ad195a6921 100644 --- a/deps/icu-small/source/i18n/collunsafe.h +++ b/deps/icu-small/source/i18n/collunsafe.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // collunsafe.h // Copyright (C) 2015-2016, International Business Machines Corporation and others. // All Rights Reserved. diff --git a/deps/icu-small/source/i18n/compactdecimalformat.cpp b/deps/icu-small/source/i18n/compactdecimalformat.cpp index 2004356e700b8a..31a5123cb10317 100644 --- a/deps/icu-small/source/i18n/compactdecimalformat.cpp +++ b/deps/icu-small/source/i18n/compactdecimalformat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -39,7 +41,7 @@ static const char gNumberElementsTag[] = "NumberElements"; static const char gDecimalFormatTag[] = "decimalFormat"; static const char gPatternsShort[] = "patternsShort"; static const char gPatternsLong[] = "patternsLong"; -static const char gRoot[] = "root"; +static const char gLatnPath[] = "NumberElements/latn"; static const UChar u_0 = 0x30; static const UChar u_apos = 0x27; @@ -94,7 +96,13 @@ class CDFLocaleStyleData : public UMemory { // Compute cdfUnits = unitsByVariant[pluralVariant]. // Prefix and suffix to use at cdfUnits[log10(x)] UHashtable* unitsByVariant; - inline CDFLocaleStyleData() : unitsByVariant(NULL) {} + // A flag for whether or not this CDFLocaleStyleData was loaded from the + // Latin numbering system as a fallback from the locale numbering system. + // This value is meaningless if the object is bogus or empty. + UBool fromFallback; + inline CDFLocaleStyleData() : unitsByVariant(NULL), fromFallback(FALSE) { + uprv_memset(divisors, 0, sizeof(divisors)); + } ~CDFLocaleStyleData(); // Init initializes this object. void Init(UErrorCode& status); @@ -102,6 +110,9 @@ class CDFLocaleStyleData : public UMemory { return unitsByVariant == NULL; } void setToBogus(); + UBool isEmpty() { + return unitsByVariant == NULL || unitsByVariant->count == 0; + } private: CDFLocaleStyleData(const CDFLocaleStyleData&); CDFLocaleStyleData& operator=(const CDFLocaleStyleData&); @@ -146,15 +157,12 @@ static const CDFLocaleStyleData* getCDFLocaleStyleData(const Locale& inLocale, U static const CDFLocaleStyleData* extractDataByStyleEnum(const CDFLocaleData& data, UNumberCompactStyle style, UErrorCode& status); static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& status); -static void initCDFLocaleData(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status); -static UResourceBundle* tryGetDecimalFallback(const UResourceBundle* numberSystemResource, const char* style, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status); -static UResourceBundle* tryGetByKeyWithFallback(const UResourceBundle* rb, const char* path, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status); -static UBool isRoot(const UResourceBundle* rb, UErrorCode& status); -static void initCDFLocaleStyleData(const UResourceBundle* decimalFormatBundle, CDFLocaleStyleData* result, UErrorCode& status); -static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyleData* result, UErrorCode& status); -static int32_t populatePrefixSuffix(const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UErrorCode& status); +static void load(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status); +static int32_t populatePrefixSuffix(const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UBool overwrite, UErrorCode& status); +static double calculateDivisor(double power10, int32_t numZeros); static UBool onlySpaces(UnicodeString u); static void fixQuotes(UnicodeString& s); +static void checkForOtherVariants(CDFLocaleStyleData* result, UErrorCode& status); static void fillInMissing(CDFLocaleStyleData* result); static int32_t computeLog10(double x, UBool inRange); static CDFUnit* createCDFUnit(const char* variant, int32_t log10Value, UHashtable* table, UErrorCode& status); @@ -345,7 +353,7 @@ CompactDecimalFormat::format( UnicodeString& CompactDecimalFormat::format( - const StringPiece& /* number */, + StringPiece /* number */, UnicodeString& appendTo, FieldPositionIterator* /* posIter */, UErrorCode& status) const { @@ -518,7 +526,8 @@ static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& stat return NULL; } - initCDFLocaleData(inLocale, result, status); + load(inLocale, result, status); + if (U_FAILURE(status)) { delete result; return NULL; @@ -526,278 +535,226 @@ static CDFLocaleData* loadCDFLocaleData(const Locale& inLocale, UErrorCode& stat return result; } -// initCDFLocaleData initializes result with data from CLDR. -// inLocale is the locale, the CLDR data is stored in result. -// We load the UNUM_SHORT and UNUM_LONG data looking first in local numbering -// system and not including root locale in fallback. Next we try in the latn -// numbering system where we fallback all the way to root. If we don't find -// UNUM_SHORT data in these three places, we report an error. If we find -// UNUM_SHORT data before finding UNUM_LONG data we make UNUM_LONG data fall -// back to UNUM_SHORT data. -static void initCDFLocaleData(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status) { - LocalPointer ns(NumberingSystem::createInstance(inLocale, status)); - if (U_FAILURE(status)) { - return; - } - const char* numberingSystemName = ns->getName(); - UResourceBundle* rb = ures_open(NULL, inLocale.getName(), &status); - rb = ures_getByKeyWithFallback(rb, gNumberElementsTag, rb, &status); - if (U_FAILURE(status)) { - ures_close(rb); - return; - } - UResourceBundle* shortDataFillIn = NULL; - UResourceBundle* longDataFillIn = NULL; - UResourceBundle* shortData = NULL; - UResourceBundle* longData = NULL; +namespace { - if (uprv_strcmp(numberingSystemName, gLatnTag) != 0) { - LocalUResourceBundlePointer localResource( - tryGetByKeyWithFallback(rb, numberingSystemName, NULL, NOT_ROOT, status)); - shortData = tryGetDecimalFallback( - localResource.getAlias(), gPatternsShort, &shortDataFillIn, NOT_ROOT, status); - longData = tryGetDecimalFallback( - localResource.getAlias(), gPatternsLong, &longDataFillIn, NOT_ROOT, status); - } - if (U_FAILURE(status)) { - ures_close(shortDataFillIn); - ures_close(longDataFillIn); - ures_close(rb); - return; - } +struct CmptDecDataSink : public ResourceSink { + + CDFLocaleData& dataBundle; // Where to save values when they are read + UBool isLatin; // Whether or not we are traversing the Latin tree + UBool isFallback; // Whether or not we are traversing the Latin tree as fallback + + enum EPatternsTableKey { PATTERNS_SHORT, PATTERNS_LONG }; + enum EFormatsTableKey { DECIMAL_FORMAT, CURRENCY_FORMAT }; - // If we haven't found UNUM_SHORT look in latn numbering system. We must - // succeed at finding UNUM_SHORT here. - if (shortData == NULL) { - LocalUResourceBundlePointer latnResource(tryGetByKeyWithFallback(rb, gLatnTag, NULL, MUST, status)); - shortData = tryGetDecimalFallback(latnResource.getAlias(), gPatternsShort, &shortDataFillIn, MUST, status); - if (longData == NULL) { - longData = tryGetDecimalFallback(latnResource.getAlias(), gPatternsLong, &longDataFillIn, ANY, status); - if (longData != NULL && isRoot(longData, status) && !isRoot(shortData, status)) { - longData = NULL; + /* + * NumberElements{ <-- top (numbering system table) + * latn{ <-- patternsTable (one per numbering system) + * patternsLong{ <-- formatsTable (one per pattern) + * decimalFormat{ <-- powersOfTenTable (one per format) + * 1000{ <-- pluralVariantsTable (one per power of ten) + * one{"0 thousand"} <-- plural variant and template + */ + + CmptDecDataSink(CDFLocaleData& _dataBundle) + : dataBundle(_dataBundle), isLatin(FALSE), isFallback(FALSE) {} + virtual ~CmptDecDataSink(); + + virtual void put(const char *key, ResourceValue &value, UBool isRoot, UErrorCode &errorCode) { + // SPECIAL CASE: Don't consume root in the non-Latin numbering system + if (isRoot && !isLatin) { return; } + + ResourceTable patternsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i1 = 0; patternsTable.getKeyAndValue(i1, key, value); ++i1) { + + // Check for patternsShort or patternsLong + EPatternsTableKey patternsTableKey; + if (uprv_strcmp(key, gPatternsShort) == 0) { + patternsTableKey = PATTERNS_SHORT; + } else if (uprv_strcmp(key, gPatternsLong) == 0) { + patternsTableKey = PATTERNS_LONG; + } else { + continue; } - } - } - initCDFLocaleStyleData(shortData, &result->shortData, status); - ures_close(shortDataFillIn); - if (U_FAILURE(status)) { - ures_close(longDataFillIn); - ures_close(rb); - } - if (longData == NULL) { - result->longData.setToBogus(); - } else { - initCDFLocaleStyleData(longData, &result->longData, status); - } - ures_close(longDataFillIn); - ures_close(rb); -} - -/** - * tryGetDecimalFallback attempts to fetch the "decimalFormat" resource bundle - * with a particular style. style is either "patternsShort" or "patternsLong." - * FillIn, flags, and status work in the same way as in tryGetByKeyWithFallback. - */ -static UResourceBundle* tryGetDecimalFallback(const UResourceBundle* numberSystemResource, const char* style, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status) { - UResourceBundle* first = tryGetByKeyWithFallback(numberSystemResource, style, fillIn, flags, status); - UResourceBundle* second = tryGetByKeyWithFallback(first, gDecimalFormatTag, fillIn, flags, status); - if (fillIn == NULL) { - ures_close(first); - } - return second; -} - -// tryGetByKeyWithFallback returns a sub-resource bundle that matches given -// criteria or NULL if none found. rb is the resource bundle that we are -// searching. If rb == NULL then this function behaves as if no sub-resource -// is found; path is the key of the sub-resource, -// (i.e "foo" but not "foo/bar"); If fillIn is NULL, caller must always call -// ures_close() on returned resource. See below for example when fillIn is -// not NULL. flags is ANY or NOT_ROOT. Optionally, these values -// can be ored with MUST. MUST by itself is the same as ANY | MUST. -// The locale of the returned sub-resource will either match the -// flags or the returned sub-resouce will be NULL. If MUST is included in -// flags, and not suitable sub-resource is found then in addition to returning -// NULL, this function also sets status to U_MISSING_RESOURCE_ERROR. If MUST -// is not included in flags, then this function just returns NULL if no -// such sub-resource is found and will never set status to -// U_MISSING_RESOURCE_ERROR. -// -// Example: This code first searches for "foo/bar" sub-resource without falling -// back to ROOT. Then searches for "baz" sub-resource as last resort. -// -// UResourcebundle* fillIn = NULL; -// UResourceBundle* data = tryGetByKeyWithFallback(rb, "foo", &fillIn, NON_ROOT, status); -// data = tryGetByKeyWithFallback(data, "bar", &fillIn, NON_ROOT, status); -// if (!data) { -// data = tryGetbyKeyWithFallback(rb, "baz", &fillIn, MUST, status); -// } -// if (U_FAILURE(status)) { -// ures_close(fillIn); -// return; -// } -// doStuffWithNonNullSubresource(data); -// -// /* Wrong! don't do the following as it can leak memory if fillIn gets set -// to NULL. */ -// fillIn = tryGetByKeyWithFallback(rb, "wrong", &fillIn, ANY, status); -// -// ures_close(fillIn); -// -static UResourceBundle* tryGetByKeyWithFallback(const UResourceBundle* rb, const char* path, UResourceBundle** fillIn, FallbackFlags flags, UErrorCode& status) { - if (U_FAILURE(status)) { - return NULL; - } - UBool must = (flags & MUST); - if (rb == NULL) { - if (must) { - status = U_MISSING_RESOURCE_ERROR; - } - return NULL; - } - UResourceBundle* result = NULL; - UResourceBundle* ownedByUs = NULL; - if (fillIn == NULL) { - ownedByUs = ures_getByKeyWithFallback(rb, path, NULL, &status); - result = ownedByUs; - } else { - *fillIn = ures_getByKeyWithFallback(rb, path, *fillIn, &status); - result = *fillIn; - } - if (U_FAILURE(status)) { - ures_close(ownedByUs); - if (status == U_MISSING_RESOURCE_ERROR && !must) { - status = U_ZERO_ERROR; - } - return NULL; - } - flags = (FallbackFlags) (flags & ~MUST); - switch (flags) { - case NOT_ROOT: - { - UBool bRoot = isRoot(result, status); - if (bRoot || U_FAILURE(status)) { - ures_close(ownedByUs); - if (must && (status == U_ZERO_ERROR)) { - status = U_MISSING_RESOURCE_ERROR; + // Traverse into the formats table + ResourceTable formatsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i2 = 0; formatsTable.getKeyAndValue(i2, key, value); ++i2) { + + // Check for decimalFormat or currencyFormat + EFormatsTableKey formatsTableKey; + if (uprv_strcmp(key, gDecimalFormatTag) == 0) { + formatsTableKey = DECIMAL_FORMAT; + // TODO: Enable this statement when currency support is added + // } else if (uprv_strcmp(key, gCurrencyFormat) == 0) { + // formatsTableKey = CURRENCY_FORMAT; + } else { + continue; + } + + // Set the current style and destination based on the two keys + UNumberCompactStyle style; + CDFLocaleStyleData* destination = NULL; + if (patternsTableKey == PATTERNS_LONG + && formatsTableKey == DECIMAL_FORMAT) { + style = UNUM_LONG; + destination = &dataBundle.longData; + } else if (patternsTableKey == PATTERNS_SHORT + && formatsTableKey == DECIMAL_FORMAT) { + style = UNUM_SHORT; + destination = &dataBundle.shortData; + // TODO: Enable the following statements when currency support is added + // } else if (patternsTableKey == PATTERNS_SHORT + // && formatsTableKey == CURRENCY_FORMAT) { + // style = UNUM_SHORT_CURRENCY; // or whatever the enum gets named + // destination = &dataBundle.shortCurrencyData; + // } else { + // // Silently ignore this case + // continue; + } + + // SPECIAL CASE: RULES FOR WHETHER OR NOT TO CONSUME THIS TABLE: + // 1) Don't consume longData if shortData was consumed from the non-Latin + // locale numbering system + // 2) Don't consume longData for the first time if this is the root bundle and + // shortData is already populated from a more specific locale. Note that if + // both longData and shortData are both only in root, longData will be + // consumed since it is alphabetically before shortData in the bundle. + if (isFallback + && style == UNUM_LONG + && !dataBundle.shortData.isEmpty() + && !dataBundle.shortData.fromFallback) { + continue; + } + if (isRoot + && style == UNUM_LONG + && dataBundle.longData.isEmpty() + && !dataBundle.shortData.isEmpty()) { + continue; + } + + // Set the "fromFallback" flag on the data object + destination->fromFallback = isFallback; + + // Traverse into the powers of ten table + ResourceTable powersOfTenTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i3 = 0; powersOfTenTable.getKeyAndValue(i3, key, value); ++i3) { + + // The key will always be some even power of 10. e.g 10000. + char* endPtr = NULL; + double power10 = uprv_strtod(key, &endPtr); + if (*endPtr != 0) { + errorCode = U_INTERNAL_PROGRAM_ERROR; + return; + } + int32_t log10Value = computeLog10(power10, FALSE); + + // Silently ignore divisors that are too big. + if (log10Value >= MAX_DIGITS) continue; + + // Iterate over the plural variants ("one", "other", etc) + ResourceTable pluralVariantsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i4 = 0; pluralVariantsTable.getKeyAndValue(i4, key, value); ++i4) { + const char* pluralVariant = key; + const UnicodeString formatStr = value.getUnicodeString(errorCode); + + // Copy the data into the in-memory data bundle (do not overwrite + // existing values) + int32_t numZeros = populatePrefixSuffix( + pluralVariant, log10Value, formatStr, + destination->unitsByVariant, FALSE, errorCode); + + // If populatePrefixSuffix returns -1, it means that this key has been + // encountered already. + if (numZeros < 0) { + continue; + } + + // Set the divisor, which is based on the number of zeros in the template + // string. If the divisor from here is different from the one previously + // stored, it means that the number of zeros in different plural variants + // differs; throw an exception. + // TODO: How should I check for floating-point errors here? + // Is there a good reason why "divisor" is double and not long like Java? + double divisor = calculateDivisor(power10, numZeros); + if (destination->divisors[log10Value] != 0.0 + && destination->divisors[log10Value] != divisor) { + errorCode = U_INTERNAL_PROGRAM_ERROR; + return; + } + destination->divisors[log10Value] = divisor; } - return NULL; } - return result; } - case ANY: - return result; - default: - ures_close(ownedByUs); - status = U_ILLEGAL_ARGUMENT_ERROR; - return NULL; + } } -} +}; -static UBool isRoot(const UResourceBundle* rb, UErrorCode& status) { - const char* actualLocale = ures_getLocaleByType( - rb, ULOC_ACTUAL_LOCALE, &status); - if (U_FAILURE(status)) { - return FALSE; - } - return uprv_strcmp(actualLocale, gRoot) == 0; -} +// Virtual destructors must be defined out of line. +CmptDecDataSink::~CmptDecDataSink() {} +} // namespace -// initCDFLocaleStyleData loads formatting data for a particular style. -// decimalFormatBundle is the "decimalFormat" resource bundle in CLDR. -// Loaded data stored in result. -static void initCDFLocaleStyleData(const UResourceBundle* decimalFormatBundle, CDFLocaleStyleData* result, UErrorCode& status) { +static void load(const Locale& inLocale, CDFLocaleData* result, UErrorCode& status) { + LocalPointer ns(NumberingSystem::createInstance(inLocale, status)); if (U_FAILURE(status)) { return; } - // Iterate through all the powers of 10. - int32_t size = ures_getSize(decimalFormatBundle); - UResourceBundle* power10 = NULL; - for (int32_t i = 0; i < size; ++i) { - power10 = ures_getByIndex(decimalFormatBundle, i, power10, &status); - if (U_FAILURE(status)) { - ures_close(power10); - return; - } - populatePower10(power10, result, status); - if (U_FAILURE(status)) { - ures_close(power10); - return; - } - } - ures_close(power10); - fillInMissing(result); -} + const char* nsName = ns->getName(); -// populatePower10 grabs data for a particular power of 10 from CLDR. -// The loaded data is stored in result. -static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyleData* result, UErrorCode& status) { + LocalUResourceBundlePointer resource(ures_open(NULL, inLocale.getName(), &status)); if (U_FAILURE(status)) { return; } - char* endPtr = NULL; - double power10 = uprv_strtod(ures_getKey(power10Bundle), &endPtr); - if (*endPtr != 0) { - status = U_INTERNAL_PROGRAM_ERROR; - return; - } - int32_t log10Value = computeLog10(power10, FALSE); - // Silently ignore divisors that are too big. - if (log10Value == MAX_DIGITS) { - return; - } - int32_t size = ures_getSize(power10Bundle); - int32_t numZeros = 0; - UBool otherVariantDefined = FALSE; - UResourceBundle* variantBundle = NULL; - // Iterate over all the plural variants for the power of 10 - for (int32_t i = 0; i < size; ++i) { - variantBundle = ures_getByIndex(power10Bundle, i, variantBundle, &status); - if (U_FAILURE(status)) { - ures_close(variantBundle); - return; - } - const char* variant = ures_getKey(variantBundle); - int32_t resLen; - const UChar* formatStrP = ures_getString(variantBundle, &resLen, &status); - if (U_FAILURE(status)) { - ures_close(variantBundle); - return; - } - UnicodeString formatStr(false, formatStrP, resLen); - if (uprv_strcmp(variant, gOther) == 0) { - otherVariantDefined = TRUE; - } - int32_t nz = populatePrefixSuffix( - variant, log10Value, formatStr, result->unitsByVariant, status); - if (U_FAILURE(status)) { - ures_close(variantBundle); + CmptDecDataSink sink(*result); + sink.isFallback = FALSE; + + // First load the number elements data if nsName is not Latin. + if (uprv_strcmp(nsName, gLatnTag) != 0) { + sink.isLatin = FALSE; + CharString path; + path.append(gNumberElementsTag, status) + .append('/', status) + .append(nsName, status); + ures_getAllItemsWithFallback(resource.getAlias(), path.data(), sink, status); + if (status == U_MISSING_RESOURCE_ERROR) { + // Silently ignore and use Latin + status = U_ZERO_ERROR; + } else if (U_FAILURE(status)) { return; } - if (nz != numZeros) { - // We expect all format strings to have the same number of 0's - // left of the decimal point. - if (numZeros != 0) { - status = U_INTERNAL_PROGRAM_ERROR; - ures_close(variantBundle); - return; - } - numZeros = nz; - } + sink.isFallback = TRUE; } - ures_close(variantBundle); - // We expect to find an OTHER variant for each power of 10. - if (!otherVariantDefined) { - status = U_INTERNAL_PROGRAM_ERROR; - return; + + // Now load Latin. + sink.isLatin = TRUE; + ures_getAllItemsWithFallback(resource.getAlias(), gLatnPath, sink, status); + if (U_FAILURE(status)) return; + + // If longData is empty, default it to be equal to shortData + if (result->longData.isEmpty()) { + result->longData.setToBogus(); } - double divisor = power10; - for (int32_t i = 1; i < numZeros; ++i) { - divisor /= 10.0; + + // Check for "other" variants in each of the three data classes, and resolve missing elements. + + if (!result->longData.isBogus()) { + checkForOtherVariants(&result->longData, status); + if (U_FAILURE(status)) return; + fillInMissing(&result->longData); } - result->divisors[log10Value] = divisor; + + checkForOtherVariants(&result->shortData, status); + if (U_FAILURE(status)) return; + fillInMissing(&result->shortData); + + // TODO: Enable this statement when currency support is added + // checkForOtherVariants(&result->shortCurrencyData, status); + // if (U_FAILURE(status)) return; + // fillInMissing(&result->shortCurrencyData); } // populatePrefixSuffix Adds a specific prefix-suffix pair to result for a @@ -810,7 +767,7 @@ static void populatePower10(const UResourceBundle* power10Bundle, CDFLocaleStyle // In the special case that formatStr contains only spaces for prefix // and suffix, populatePrefixSuffix returns log10Value + 1. static int32_t populatePrefixSuffix( - const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UErrorCode& status) { + const char* variant, int32_t log10Value, const UnicodeString& formatStr, UHashtable* result, UBool overwrite, UErrorCode& status) { if (U_FAILURE(status)) { return 0; } @@ -825,6 +782,13 @@ static int32_t populatePrefixSuffix( if (U_FAILURE(status)) { return 0; } + + // Return -1 if we are not overwriting an existing value + if (unit->isSet() && !overwrite) { + return -1; + } + unit->markAsSet(); + // Everything up to first 0 is the prefix unit->prefix = formatStr.tempSubString(0, firstIdx); fixQuotes(unit->prefix); @@ -846,6 +810,16 @@ static int32_t populatePrefixSuffix( return (idx - firstIdx); } +// Calculate a divisor based on the magnitude and number of zeros in the +// template string. +static double calculateDivisor(double power10, int32_t numZeros) { + double divisor = power10; + for (int32_t i = 1; i < numZeros; ++i) { + divisor /= 10.0; + } + return divisor; +} + static UBool onlySpaces(UnicodeString u) { return u.trim().length() == 0; } @@ -884,6 +858,38 @@ static void fixQuotes(UnicodeString& s) { s.truncate(dest); } +// Checks to make sure that an "other" variant is present in all +// powers of 10. +static void checkForOtherVariants(CDFLocaleStyleData* result, + UErrorCode& status) { + if (result == NULL || result->unitsByVariant == NULL) { + return; + } + + const CDFUnit* otherByBase = + (const CDFUnit*) uhash_get(result->unitsByVariant, gOther); + if (otherByBase == NULL) { + status = U_INTERNAL_PROGRAM_ERROR; + return; + } + + // Check all other plural variants, and make sure that if + // any of them are populated, then other is also populated + int32_t pos = UHASH_FIRST; + const UHashElement* element; + while ((element = uhash_nextElement(result->unitsByVariant, &pos)) != NULL) { + CDFUnit* variantsByBase = (CDFUnit*) element->value.pointer; + if (variantsByBase == otherByBase) continue; + for (int32_t log10Value = 0; log10Value < MAX_DIGITS; ++log10Value) { + if (variantsByBase[log10Value].isSet() + && !otherByBase[log10Value].isSet()) { + status = U_INTERNAL_PROGRAM_ERROR; + return; + } + } + } +} + // fillInMissing ensures that the data in result is complete. // result data is complete if for each variant in result, there exists // a prefix-suffix pair for each log10 value and there also exists @@ -973,7 +979,6 @@ static CDFUnit* createCDFUnit(const char* variant, int32_t log10Value, UHashtabl } } CDFUnit* result = &cdfUnit[log10Value]; - result->markAsSet(); return result; } diff --git a/deps/icu-small/source/i18n/coptccal.cpp b/deps/icu-small/source/i18n/coptccal.cpp index 1996327a6f21a8..ce531ca0e851bd 100644 --- a/deps/icu-small/source/i18n/coptccal.cpp +++ b/deps/icu-small/source/i18n/coptccal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/coptccal.h b/deps/icu-small/source/i18n/coptccal.h index 47c952868b10ae..523769fabe57f0 100644 --- a/deps/icu-small/source/i18n/coptccal.h +++ b/deps/icu-small/source/i18n/coptccal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003 - 2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/cpdtrans.cpp b/deps/icu-small/source/i18n/cpdtrans.cpp index 3798a6de021df9..b6e328f92c223c 100644 --- a/deps/icu-small/source/i18n/cpdtrans.cpp +++ b/deps/icu-small/source/i18n/cpdtrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/cpdtrans.h b/deps/icu-small/source/i18n/cpdtrans.h index 004f04fd63c305..6f832df883cb85 100644 --- a/deps/icu-small/source/i18n/cpdtrans.h +++ b/deps/icu-small/source/i18n/cpdtrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/csdetect.cpp b/deps/icu-small/source/i18n/csdetect.cpp index 94d440090cd14a..8ddbe8129b68d7 100644 --- a/deps/icu-small/source/i18n/csdetect.cpp +++ b/deps/icu-small/source/i18n/csdetect.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csdetect.h b/deps/icu-small/source/i18n/csdetect.h index bbe81c801669b5..d0dc0d20777d44 100644 --- a/deps/icu-small/source/i18n/csdetect.h +++ b/deps/icu-small/source/i18n/csdetect.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csmatch.cpp b/deps/icu-small/source/i18n/csmatch.cpp index b2c8544fc559ac..ea8d37cd202703 100644 --- a/deps/icu-small/source/i18n/csmatch.cpp +++ b/deps/icu-small/source/i18n/csmatch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csmatch.h b/deps/icu-small/source/i18n/csmatch.h index 19a285262d399d..a94b86ae7c0ca4 100644 --- a/deps/icu-small/source/i18n/csmatch.h +++ b/deps/icu-small/source/i18n/csmatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csr2022.cpp b/deps/icu-small/source/i18n/csr2022.cpp index 5ba30d53c44994..9566ee479612be 100644 --- a/deps/icu-small/source/i18n/csr2022.cpp +++ b/deps/icu-small/source/i18n/csr2022.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csr2022.h b/deps/icu-small/source/i18n/csr2022.h index ba5e5e011e59e0..9ff2648505f141 100644 --- a/deps/icu-small/source/i18n/csr2022.h +++ b/deps/icu-small/source/i18n/csr2022.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/csrecog.cpp b/deps/icu-small/source/i18n/csrecog.cpp index 7535e9aa66016e..7ae7765399f20a 100644 --- a/deps/icu-small/source/i18n/csrecog.cpp +++ b/deps/icu-small/source/i18n/csrecog.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2006, International Business Machines diff --git a/deps/icu-small/source/i18n/csrecog.h b/deps/icu-small/source/i18n/csrecog.h index 97d3af7ad1a528..1759ca561b363a 100644 --- a/deps/icu-small/source/i18n/csrecog.h +++ b/deps/icu-small/source/i18n/csrecog.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csrmbcs.cpp b/deps/icu-small/source/i18n/csrmbcs.cpp index 1963bf85abe649..d61269f5e33770 100644 --- a/deps/icu-small/source/i18n/csrmbcs.cpp +++ b/deps/icu-small/source/i18n/csrmbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csrmbcs.h b/deps/icu-small/source/i18n/csrmbcs.h index 9ea9d8f8ee0338..6a49a859724be8 100644 --- a/deps/icu-small/source/i18n/csrmbcs.h +++ b/deps/icu-small/source/i18n/csrmbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csrsbcs.cpp b/deps/icu-small/source/i18n/csrsbcs.cpp index 803105c24a7da0..48e7dc51233c53 100644 --- a/deps/icu-small/source/i18n/csrsbcs.cpp +++ b/deps/icu-small/source/i18n/csrsbcs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/csrsbcs.h b/deps/icu-small/source/i18n/csrsbcs.h index b4897b1ceec91a..2f967dd9c2888d 100644 --- a/deps/icu-small/source/i18n/csrsbcs.h +++ b/deps/icu-small/source/i18n/csrsbcs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/csrucode.cpp b/deps/icu-small/source/i18n/csrucode.cpp index 3780c3b3e684e6..201b2996c78cab 100644 --- a/deps/icu-small/source/i18n/csrucode.cpp +++ b/deps/icu-small/source/i18n/csrucode.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/csrucode.h b/deps/icu-small/source/i18n/csrucode.h index 458b2c96ad9d53..10e5fafe66febd 100644 --- a/deps/icu-small/source/i18n/csrucode.h +++ b/deps/icu-small/source/i18n/csrucode.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/csrutf8.cpp b/deps/icu-small/source/i18n/csrutf8.cpp index 6dd874e0ba6bf0..4f29fa2af7fe28 100644 --- a/deps/icu-small/source/i18n/csrutf8.cpp +++ b/deps/icu-small/source/i18n/csrutf8.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/csrutf8.h b/deps/icu-small/source/i18n/csrutf8.h index 79a424b7c0cda7..71309eade75657 100644 --- a/deps/icu-small/source/i18n/csrutf8.h +++ b/deps/icu-small/source/i18n/csrutf8.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/curramt.cpp b/deps/icu-small/source/i18n/curramt.cpp index 195d5f30f4808f..4475ff611eeec0 100644 --- a/deps/icu-small/source/i18n/curramt.cpp +++ b/deps/icu-small/source/i18n/curramt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004, International Business Machines diff --git a/deps/icu-small/source/i18n/currfmt.cpp b/deps/icu-small/source/i18n/currfmt.cpp index 23a7d52acac157..b92aa00e5cb8b5 100644 --- a/deps/icu-small/source/i18n/currfmt.cpp +++ b/deps/icu-small/source/i18n/currfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014 International Business Machines diff --git a/deps/icu-small/source/i18n/currfmt.h b/deps/icu-small/source/i18n/currfmt.h index b3f23e56f9676b..83e027246562eb 100644 --- a/deps/icu-small/source/i18n/currfmt.h +++ b/deps/icu-small/source/i18n/currfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/currpinf.cpp b/deps/icu-small/source/i18n/currpinf.cpp index 9d8d524a0fb5a4..7c16fff961dc40 100644 --- a/deps/icu-small/source/i18n/currpinf.cpp +++ b/deps/icu-small/source/i18n/currpinf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/currunit.cpp b/deps/icu-small/source/i18n/currunit.cpp index 64233aee7cf55a..f538d65ada657d 100644 --- a/deps/icu-small/source/i18n/currunit.cpp +++ b/deps/icu-small/source/i18n/currunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/dangical.cpp b/deps/icu-small/source/i18n/dangical.cpp index bfe15b59edbf26..3a7b2ebb8fca2d 100644 --- a/deps/icu-small/source/i18n/dangical.cpp +++ b/deps/icu-small/source/i18n/dangical.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/dangical.h b/deps/icu-small/source/i18n/dangical.h index cc35ca3f07b3f4..17a5004bdc6d32 100644 --- a/deps/icu-small/source/i18n/dangical.h +++ b/deps/icu-small/source/i18n/dangical.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/datefmt.cpp b/deps/icu-small/source/i18n/datefmt.cpp index 048a4723ef6c91..00f46cfdfdf2c0 100644 --- a/deps/icu-small/source/i18n/datefmt.cpp +++ b/deps/icu-small/source/i18n/datefmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and * @@ -317,7 +319,7 @@ DateFormat::format(UDate date, UnicodeString& appendTo) const { // Note that any error information is just lost. That's okay // for this convenience method. - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); return format(date, appendTo, fpos); } diff --git a/deps/icu-small/source/i18n/dayperiodrules.cpp b/deps/icu-small/source/i18n/dayperiodrules.cpp index fb8ae8147f8d56..30414823efdfe3 100644 --- a/deps/icu-small/source/i18n/dayperiodrules.cpp +++ b/deps/icu-small/source/i18n/dayperiodrules.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2016, International Business Machines @@ -42,129 +44,90 @@ enum CutoffType { } // namespace -struct DayPeriodRulesDataSink : public ResourceTableSink { - // Initialize sub-sinks. - DayPeriodRulesDataSink() : - rulesSink(*this), ruleSetSink(*this), periodSink(*this), cutoffSink(*this) { +struct DayPeriodRulesDataSink : public ResourceSink { + DayPeriodRulesDataSink() { for (int32_t i = 0; i < UPRV_LENGTHOF(cutoffs); ++i) { cutoffs[i] = 0; } } virtual ~DayPeriodRulesDataSink(); - // Entry point. - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - if (uprv_strcmp(key, "locales") == 0) { - return &localesSink; - } else if (uprv_strcmp(key, "rules") == 0) { - // Allocate one more than needed to skip [0]. See comment in parseSetNum(). - data->rules = new DayPeriodRules[data->maxRuleSetNum + 1]; - if (data->rules == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } else { - return &rulesSink; + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + ResourceTable dayPeriodData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; dayPeriodData.getKeyAndValue(i, key, value); ++i) { + if (uprv_strcmp(key, "locales") == 0) { + ResourceTable locales = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t j = 0; locales.getKeyAndValue(j, key, value); ++j) { + UnicodeString setNum_str = value.getUnicodeString(errorCode); + int32_t setNum = parseSetNum(setNum_str, errorCode); + uhash_puti(data->localeToRuleSetNumMap, const_cast(key), setNum, &errorCode); + } + } else if (uprv_strcmp(key, "rules") == 0) { + // Allocate one more than needed to skip [0]. See comment in parseSetNum(). + data->rules = new DayPeriodRules[data->maxRuleSetNum + 1]; + if (data->rules == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + ResourceTable rules = value.getTable(errorCode); + processRules(rules, key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } } } - return NULL; } - // Data root -> locales. - struct LocalesSink : public ResourceTableSink { - virtual ~LocalesSink(); + void processRules(const ResourceTable &rules, const char *key, + ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + for (int32_t i = 0; rules.getKeyAndValue(i, key, value); ++i) { + ruleSetNum = parseSetNum(key, errorCode); + ResourceTable ruleSet = value.getTable(errorCode); if (U_FAILURE(errorCode)) { return; } - UnicodeString setNum_str = value.getUnicodeString(errorCode); - int32_t setNum = parseSetNum(setNum_str, errorCode); - uhash_puti(data->localeToRuleSetNumMap, const_cast(key), setNum, &errorCode); - } - } localesSink; - - // Data root -> rules. - struct RulesSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - RulesSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~RulesSink(); - - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - outer.ruleSetNum = parseSetNum(key, errorCode); - return &outer.ruleSetSink; - } - } rulesSink; - - // Data root -> rules -> a rule set. - struct RuleSetSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - RuleSetSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~RuleSetSink(); - - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - - outer.period = DayPeriodRules::getDayPeriodFromString(key); - if (outer.period == DayPeriodRules::DAYPERIOD_UNKNOWN) { - errorCode = U_INVALID_FORMAT_ERROR; - return NULL; + for (int32_t j = 0; ruleSet.getKeyAndValue(j, key, value); ++j) { + period = DayPeriodRules::getDayPeriodFromString(key); + if (period == DayPeriodRules::DAYPERIOD_UNKNOWN) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + ResourceTable periodDefinition = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t k = 0; periodDefinition.getKeyAndValue(k, key, value); ++k) { + if (value.getType() == URES_STRING) { + // Key-value pairs (e.g. before{6:00}). + CutoffType type = getCutoffTypeFromString(key); + addCutoff(type, value.getUnicodeString(errorCode), errorCode); + if (U_FAILURE(errorCode)) { return; } + } else { + // Arrays (e.g. before{6:00, 24:00}). + cutoffType = getCutoffTypeFromString(key); + ResourceArray cutoffArray = value.getArray(errorCode); + if (U_FAILURE(errorCode)) { return; } + + int32_t length = cutoffArray.getSize(); + for (int32_t l = 0; l < length; ++l) { + cutoffArray.getValue(l, value); + addCutoff(cutoffType, value.getUnicodeString(errorCode), errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } + } + setDayPeriodForHoursFromCutoffs(errorCode); + for (int32_t k = 0; k < UPRV_LENGTHOF(cutoffs); ++k) { + cutoffs[k] = 0; + } } - return &outer.periodSink; - } - - virtual void leave(UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - if (!data->rules[outer.ruleSetNum].allHoursAreSet()) { + if (!data->rules[ruleSetNum].allHoursAreSet()) { errorCode = U_INVALID_FORMAT_ERROR; + return; } } - } ruleSetSink; - - // Data root -> rules -> a rule set -> a period (e.g. "morning1"). - // Key-value pairs (e.g. before{6:00}) will be captured here. - // Arrays (e.g. before{6:00, 24:00}) will be redirected to the next sink. - struct PeriodSink : public ResourceTableSink { - DayPeriodRulesDataSink &outer; - PeriodSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~PeriodSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - CutoffType type = getCutoffTypeFromString(key); - outer.addCutoff(type, value.getUnicodeString(errorCode), errorCode); - } - - virtual ResourceArraySink *getOrCreateArraySink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.cutoffType = getCutoffTypeFromString(key); - return &outer.cutoffSink; - } - - virtual void leave(UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - outer.setDayPeriodForHoursFromCutoffs(errorCode); - for (int32_t i = 0; i < UPRV_LENGTHOF(outer.cutoffs); ++i) { - outer.cutoffs[i] = 0; - } - } - } periodSink; - - // Data root -> rules -> a rule set -> a period -> a cutoff type. - // Will enter this sink if 2+ times appear in a single cutoff type (e.g. before{6:00, 24:00}). - struct CutoffSink : public ResourceArraySink { - DayPeriodRulesDataSink &outer; - CutoffSink(DayPeriodRulesDataSink &outer) : outer(outer) {} - virtual ~CutoffSink(); - - virtual void put(int32_t, const ResourceValue &value, UErrorCode &errorCode) { - outer.addCutoff(outer.cutoffType, value.getUnicodeString(errorCode), errorCode); - } - } cutoffSink; + } // Members. int32_t cutoffs[25]; // [0] thru [24]: 24 is allowed in "before 24". @@ -316,35 +279,31 @@ struct DayPeriodRulesDataSink : public ResourceTableSink { } }; // struct DayPeriodRulesDataSink -struct DayPeriodRulesCountSink : public ResourceTableSink { +struct DayPeriodRulesCountSink : public ResourceSink { virtual ~DayPeriodRulesCountSink(); - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - int32_t setNum = DayPeriodRulesDataSink::parseSetNum(key, errorCode); - if (setNum > data->maxRuleSetNum) { - data->maxRuleSetNum = setNum; - } + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + ResourceTable rules = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } - return NULL; + for (int32_t i = 0; rules.getKeyAndValue(i, key, value); ++i) { + int32_t setNum = DayPeriodRulesDataSink::parseSetNum(key, errorCode); + if (setNum > data->maxRuleSetNum) { + data->maxRuleSetNum = setNum; + } + } } }; // Out-of-line virtual destructors. -DayPeriodRulesDataSink::LocalesSink::~LocalesSink() {} -DayPeriodRulesDataSink::CutoffSink::~CutoffSink() {} -DayPeriodRulesDataSink::PeriodSink::~PeriodSink() {} -DayPeriodRulesDataSink::RuleSetSink::~RuleSetSink() {} -DayPeriodRulesDataSink::RulesSink::~RulesSink() {} DayPeriodRulesDataSink::~DayPeriodRulesDataSink() {} - DayPeriodRulesCountSink::~DayPeriodRulesCountSink() {} namespace { UInitOnce initOnce = U_INITONCE_INITIALIZER; -UBool dayPeriodRulesCleanup() { +U_CFUNC UBool U_CALLCONV dayPeriodRulesCleanup() { delete[] data->rules; uhash_close(data->localeToRuleSetNumMap); delete data; @@ -354,7 +313,7 @@ UBool dayPeriodRulesCleanup() { } // namespace -void DayPeriodRules::load(UErrorCode &errorCode) { +void U_CALLCONV DayPeriodRules::load(UErrorCode &errorCode) { if (U_FAILURE(errorCode)) { return; } @@ -365,11 +324,11 @@ void DayPeriodRules::load(UErrorCode &errorCode) { // Get the largest rule set number (so we allocate enough objects). DayPeriodRulesCountSink countSink; - ures_getAllTableItemsWithFallback(rb_dayPeriods.getAlias(), "rules", countSink, errorCode); + ures_getAllItemsWithFallback(rb_dayPeriods.getAlias(), "rules", countSink, errorCode); // Populate rules. DayPeriodRulesDataSink sink; - ures_getAllTableItemsWithFallback(rb_dayPeriods.getAlias(), "", sink, errorCode); + ures_getAllItemsWithFallback(rb_dayPeriods.getAlias(), "", sink, errorCode); ucln_i18n_registerCleanup(UCLN_I18N_DAYPERIODRULES, dayPeriodRulesCleanup); } diff --git a/deps/icu-small/source/i18n/dayperiodrules.h b/deps/icu-small/source/i18n/dayperiodrules.h index 5491f7c1ff013f..3c006cdc2f59dd 100644 --- a/deps/icu-small/source/i18n/dayperiodrules.h +++ b/deps/icu-small/source/i18n/dayperiodrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2016, International Business Machines @@ -59,7 +61,7 @@ class DayPeriodRules : public UMemory { // Translates "morning1" to DAYPERIOD_MORNING1, for example. static DayPeriod getDayPeriodFromString(const char *type_str); - static void load(UErrorCode &errorCode); + static void U_CALLCONV load(UErrorCode &errorCode); // Sets period type for all hours in [startHour, limitHour). void add(int32_t startHour, int32_t limitHour, DayPeriod period); diff --git a/deps/icu-small/source/i18n/dcfmtimp.h b/deps/icu-small/source/i18n/dcfmtimp.h index a8279479608ddc..58858728419641 100644 --- a/deps/icu-small/source/i18n/dcfmtimp.h +++ b/deps/icu-small/source/i18n/dcfmtimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/dcfmtsym.cpp b/deps/icu-small/source/i18n/dcfmtsym.cpp index fee9b319ba0bcf..b8b9c32a42fa25 100644 --- a/deps/icu-small/source/i18n/dcfmtsym.cpp +++ b/deps/icu-small/source/i18n/dcfmtsym.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and +* Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -35,6 +37,7 @@ #include "locbased.h" #include "uresimp.h" #include "ureslocs.h" +#include "charstr.h" // ***************************************************************************** // class DecimalFormatSymbols @@ -51,10 +54,45 @@ static const char gAfterCurrencyTag[] = "afterCurrency"; static const char gCurrencyMatchTag[] = "currencyMatch"; static const char gCurrencySudMatchTag[] = "surroundingMatch"; static const char gCurrencyInsertBtnTag[] = "insertBetween"; - +static const char gLatn[] = "latn"; +static const char gSymbols[] = "symbols"; +static const char gNumberElementsLatnSymbols[] = "NumberElements/latn/symbols"; static const UChar INTL_CURRENCY_SYMBOL_STR[] = {0xa4, 0xa4, 0}; +// List of field names to be loaded from the data files. +// These are parallel with the enum ENumberFormatSymbol in unicode/dcfmtsym.h. +static const char *gNumberElementKeys[DecimalFormatSymbols::kFormatSymbolCount] = { + "decimal", + "group", + "list", + "percentSign", + NULL, /* Native zero digit is deprecated from CLDR - get it from the numbering system */ + NULL, /* Pattern digit character is deprecated from CLDR - use # by default always */ + "minusSign", + "plusSign", + NULL, /* currency symbol - Wait until we know the currency before loading from CLDR */ + NULL, /* intl currency symbol - Wait until we know the currency before loading from CLDR */ + "currencyDecimal", + "exponential", + "perMille", + NULL, /* Escape padding character - not in CLDR */ + "infinity", + "nan", + NULL, /* Significant digit symbol - not in CLDR */ + "currencyGroup", + NULL, /* one digit - get it from the numbering system */ + NULL, /* two digit - get it from the numbering system */ + NULL, /* three digit - get it from the numbering system */ + NULL, /* four digit - get it from the numbering system */ + NULL, /* five digit - get it from the numbering system */ + NULL, /* six digit - get it from the numbering system */ + NULL, /* seven digit - get it from the numbering system */ + NULL, /* eight digit - get it from the numbering system */ + NULL, /* nine digit - get it from the numbering system */ + "superscriptingExponent", /* Multiplication (x) symbol for exponents */ +}; + // ------------------------------------- // Initializes this with the decimal format symbols in the default locale. @@ -166,63 +204,149 @@ DecimalFormatSymbols::operator==(const DecimalFormatSymbols& that) const // ------------------------------------- -void -DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, UBool useLastResortData) -{ - static const char *gNumberElementKeys[kFormatSymbolCount] = { - "decimal", - "group", - "list", - "percentSign", - NULL, /* Native zero digit is deprecated from CLDR - get it from the numbering system */ - NULL, /* Pattern digit character is deprecated from CLDR - use # by default always */ - "minusSign", - "plusSign", - NULL, /* currency symbol - We don't really try to load this directly from CLDR until we know the currency */ - NULL, /* intl currency symbol - We don't really try to load this directly from CLDR until we know the currency */ - "currencyDecimal", - "exponential", - "perMille", - NULL, /* Escape padding character - not in CLDR */ - "infinity", - "nan", - NULL, /* Significant digit symbol - not in CLDR */ - "currencyGroup", - NULL, /* one digit - get it from the numbering system */ - NULL, /* two digit - get it from the numbering system */ - NULL, /* three digit - get it from the numbering system */ - NULL, /* four digit - get it from the numbering system */ - NULL, /* five digit - get it from the numbering system */ - NULL, /* six digit - get it from the numbering system */ - NULL, /* seven digit - get it from the numbering system */ - NULL, /* eight digit - get it from the numbering system */ - NULL, /* nine digit - get it from the numbering system */ - "superscriptingExponent", /* Multiplication (x) symbol for exponents */ - }; - - static const char *gLatn = "latn"; - static const char *gSymbols = "symbols"; - const char *nsName; - const UChar *sym = NULL; - int32_t len = 0; +namespace { + +/** + * Sink for enumerating all of the decimal format symbols (more specifically, anything + * under the "NumberElements.symbols" tree). + * + * More specific bundles (en_GB) are enumerated before their parents (en_001, en, root): + * Only store a value if it is still missing, that is, it has not been overridden. + */ +struct DecFmtSymDataSink : public ResourceSink { + + // Destination for data, modified via setters. + DecimalFormatSymbols& dfs; + // Boolean array of whether or not we have seen a particular symbol yet. + // Can't simpy check fSymbols because it is pre-populated with defaults. + UBool seenSymbol[DecimalFormatSymbols::kFormatSymbolCount]; + + // Constructor/Destructor + DecFmtSymDataSink(DecimalFormatSymbols& _dfs) : dfs(_dfs) { + uprv_memset(seenSymbol, FALSE, sizeof(seenSymbol)); + } + virtual ~DecFmtSymDataSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable symbolsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; symbolsTable.getKeyAndValue(j, key, value); ++j) { + for (int32_t i=0; i ns(NumberingSystem::createInstance(loc, status)); + const char *nsName; if (U_SUCCESS(status) && ns->getRadix() == 10 && !ns->isAlgorithmic()) { nsName = ns->getName(); UnicodeString digitString(ns->getDescription()); @@ -248,61 +372,61 @@ DecimalFormatSymbols::initialize(const Locale& loc, UErrorCode& status, UBool us nsName = gLatn; } - UBool isLatn = !uprv_strcmp(nsName,gLatn); + // Open resource bundles + const char* locStr = loc.getName(); + LocalUResourceBundlePointer resource(ures_open(NULL, locStr, &status)); + LocalUResourceBundlePointer numberElementsRes( + ures_getByKeyWithFallback(resource.getAlias(), gNumberElements, NULL, &status)); - UErrorCode nlStatus = U_ZERO_ERROR; - LocalUResourceBundlePointer nonLatnSymbols; - if ( !isLatn ) { - nonLatnSymbols.adoptInstead( - ures_getByKeyWithFallback(numberElementsRes.getAlias(), nsName, NULL, &nlStatus)); - ures_getByKeyWithFallback(nonLatnSymbols.getAlias(), gSymbols, nonLatnSymbols.getAlias(), &nlStatus); + if (U_FAILURE(status)) { + if ( useLastResortData ) { + status = U_USING_DEFAULT_WARNING; + initialize(); + } + return; } - LocalUResourceBundlePointer latnSymbols( - ures_getByKeyWithFallback(numberElementsRes.getAlias(), gLatn, NULL, &status)); - ures_getByKeyWithFallback(latnSymbols.getAlias(), gSymbols, latnSymbols.getAlias(), &status); - - UBool kMonetaryDecimalSet = FALSE; - UBool kMonetaryGroupingSet = FALSE; - for(int32_t i = 0; iindexOf(kCurrencySign) != -1) { // initialize for currency, not only for plural format, // but also for mix parsing - if (fCurrencyPluralInfo == NULL) { - fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status); - if (U_FAILURE(status)) { - return; - } - } - // need it for mix parsing + handleCurrencySignInPattern(status); + } +} + +void +DecimalFormat::handleCurrencySignInPattern(UErrorCode& status) { + // initialize for currency, not only for plural format, + // but also for mix parsing + if (U_FAILURE(status)) { + return; + } + if (fCurrencyPluralInfo == NULL) { + fCurrencyPluralInfo = new CurrencyPluralInfo(fImpl->fSymbols->getLocale(), status); + if (U_FAILURE(status)) { + return; + } + } + // need it for mix parsing + if (fAffixPatternsForCurrency == NULL) { setupCurrencyAffixPatterns(status); } } @@ -828,7 +842,7 @@ DecimalFormat::format( double number, UnicodeString& -DecimalFormat::format(const StringPiece &number, +DecimalFormat::format(StringPiece number, UnicodeString &toAppendTo, FieldPositionIterator *posIter, UErrorCode &status) const @@ -1643,7 +1657,7 @@ UBool DecimalFormat::subparse(const UnicodeString& text, // if we didn't see a decimal and it is required, check to see if the pattern had one if(!sawDecimal && isDecimalPatternMatchRequired()) { - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0) + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1) { parsePosition.setIndex(oldStart); parsePosition.setErrorIndex(position); @@ -1769,7 +1783,7 @@ printf("PP -> %d, SLOW = [%s]! pp=%d, os=%d, err=%s\n", position, parsedNum.d // check if we missed a required decimal point if(fastParseOk && isDecimalPatternMatchRequired()) { - if(formatPattern.indexOf(DecimalFormatSymbols::kDecimalSeparatorSymbol) != 0) + if(formatPattern.indexOf(kPatternDecimalSeparator) != -1) { parsePosition.setIndex(oldStart); parsePosition.setErrorIndex(position); @@ -2815,6 +2829,9 @@ DecimalFormat::toLocalizedPattern(UnicodeString& result) const void DecimalFormat::applyPattern(const UnicodeString& pattern, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyPattern(pattern, status); } @@ -2825,6 +2842,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyPattern(pattern, parseError, status); } //------------------------------------------------------------------------------ @@ -2832,6 +2852,9 @@ DecimalFormat::applyPattern(const UnicodeString& pattern, void DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyLocalizedPattern(pattern, status); } @@ -2842,6 +2865,9 @@ DecimalFormat::applyLocalizedPattern(const UnicodeString& pattern, UParseError& parseError, UErrorCode& status) { + if (pattern.indexOf(kCurrencySign) != -1) { + handleCurrencySignInPattern(status); + } fImpl->applyLocalizedPattern(pattern, parseError, status); } diff --git a/deps/icu-small/source/i18n/decimfmtimpl.cpp b/deps/icu-small/source/i18n/decimfmtimpl.cpp index d0c96493a902be..342ce5b5e4ed1f 100644 --- a/deps/icu-small/source/i18n/decimfmtimpl.cpp +++ b/deps/icu-small/source/i18n/decimfmtimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -241,9 +243,9 @@ DecimalFormatImpl::setMultiplierScale(int32_t scale) { if (scale == 0) { // Needed to preserve equality. fMultiplier == 0 means // multiplier is 1. - fMultiplier.set(0); + fMultiplier.set((int32_t)0); } else { - fMultiplier.set(1); + fMultiplier.set((int32_t)1); fMultiplier.shiftDecimalRight(scale); } } @@ -425,7 +427,7 @@ DecimalFormatImpl::format( UnicodeString & DecimalFormatImpl::format( - const StringPiece &number, + StringPiece number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const { @@ -706,7 +708,7 @@ DecimalFormatImpl::getMultiplier() const { void DecimalFormatImpl::setMultiplier(int32_t m) { if (m == 0 || m == 1) { - fMultiplier.set(0); + fMultiplier.set((int32_t)0); } else { fMultiplier.set(m); } @@ -1481,7 +1483,7 @@ DecimalFormatImpl::toNumberPattern( } } else { if (i < roundingIncrementUpperExp && i >= roundingIncrementLowerExp) { - result.append(fEffPrecision.fMantissa.fRoundingIncrement.getDigitByExponent(i) + kPatternZeroDigit); + result.append((UChar)(fEffPrecision.fMantissa.fRoundingIncrement.getDigitByExponent(i) + kPatternZeroDigit)); } else if (minInterval.contains(i)) { result.append(kPatternZeroDigit); } else { diff --git a/deps/icu-small/source/i18n/decimfmtimpl.h b/deps/icu-small/source/i18n/decimfmtimpl.h index d55a4eca2f2f33..537107c6f74de4 100644 --- a/deps/icu-small/source/i18n/decimfmtimpl.h +++ b/deps/icu-small/source/i18n/decimfmtimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2015, International Business Machines @@ -217,7 +219,7 @@ UnicodeString &format( FieldPositionIterator *posIter, UErrorCode &status) const; UnicodeString &format( - const StringPiece &number, + StringPiece number, UnicodeString &appendTo, FieldPositionIterator *posIter, UErrorCode &status) const; diff --git a/deps/icu-small/source/i18n/digitaffix.cpp b/deps/icu-small/source/i18n/digitaffix.cpp index d73d40121a843f..262bc49427062a 100644 --- a/deps/icu-small/source/i18n/digitaffix.cpp +++ b/deps/icu-small/source/i18n/digitaffix.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitaffix.h b/deps/icu-small/source/i18n/digitaffix.h index d5b545a3d7509f..a1a100654f4e84 100644 --- a/deps/icu-small/source/i18n/digitaffix.h +++ b/deps/icu-small/source/i18n/digitaffix.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitaffixesandpadding.cpp b/deps/icu-small/source/i18n/digitaffixesandpadding.cpp index d941a573de8ff4..716ab4a32ebfb3 100644 --- a/deps/icu-small/source/i18n/digitaffixesandpadding.cpp +++ b/deps/icu-small/source/i18n/digitaffixesandpadding.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitaffixesandpadding.h b/deps/icu-small/source/i18n/digitaffixesandpadding.h index 3586371094b97a..e837e07c8fbe0e 100644 --- a/deps/icu-small/source/i18n/digitaffixesandpadding.h +++ b/deps/icu-small/source/i18n/digitaffixesandpadding.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitformatter.cpp b/deps/icu-small/source/i18n/digitformatter.cpp index 837dcb4d9edb7b..d1a88f95eee80f 100644 --- a/deps/icu-small/source/i18n/digitformatter.cpp +++ b/deps/icu-small/source/i18n/digitformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitformatter.h b/deps/icu-small/source/i18n/digitformatter.h index cf339f598d627e..d92d4251513f38 100644 --- a/deps/icu-small/source/i18n/digitformatter.h +++ b/deps/icu-small/source/i18n/digitformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitgrouping.cpp b/deps/icu-small/source/i18n/digitgrouping.cpp index 0a340cdc4a1300..0d96b407c5039f 100644 --- a/deps/icu-small/source/i18n/digitgrouping.cpp +++ b/deps/icu-small/source/i18n/digitgrouping.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitgrouping.h b/deps/icu-small/source/i18n/digitgrouping.h index e075ae204bd71f..33835ff665cfb1 100644 --- a/deps/icu-small/source/i18n/digitgrouping.h +++ b/deps/icu-small/source/i18n/digitgrouping.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitinterval.cpp b/deps/icu-small/source/i18n/digitinterval.cpp index bf78c19aab2a9d..b1ba811606b371 100644 --- a/deps/icu-small/source/i18n/digitinterval.cpp +++ b/deps/icu-small/source/i18n/digitinterval.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/digitinterval.h b/deps/icu-small/source/i18n/digitinterval.h index 174f797fa4209c..5dbf3f9a296f8b 100644 --- a/deps/icu-small/source/i18n/digitinterval.h +++ b/deps/icu-small/source/i18n/digitinterval.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/digitlst.cpp b/deps/icu-small/source/i18n/digitlst.cpp index 54aebbb6323ebd..8bb470c8f08535 100644 --- a/deps/icu-small/source/i18n/digitlst.cpp +++ b/deps/icu-small/source/i18n/digitlst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1997-2015, International Business Machines @@ -24,9 +26,14 @@ ****************************************************************************** */ +#if defined(__CYGWIN__) && !defined(_GNU_SOURCE) +#define _GNU_SOURCE +#endif + #include "digitlst.h" #if !UCONFIG_NO_FORMATTING + #include "unicode/putil.h" #include "charstr.h" #include "cmemory.h" @@ -35,12 +42,32 @@ #include "putilimp.h" #include "uassert.h" #include "digitinterval.h" +#include "ucln_in.h" +#include "umutex.h" #include #include #include #include #include +#if !defined(U_USE_STRTOD_L) +# if U_PLATFORM_USES_ONLY_WIN32_API +# define U_USE_STRTOD_L 1 +# elif defined(U_HAVE_STRTOD_L) +# define U_USE_STRTOD_L U_HAVE_STRTOD_L +# else +# define U_USE_STRTOD_L 0 +# endif +#endif + +#if U_USE_STRTOD_L && !U_PLATFORM_USES_ONLY_WIN32_API +# if U_PLATFORM == U_PF_CYGWIN +# include +# else +# include +# endif +#endif + // *************************************************************************** // class DigitList // A wrapper onto decNumber. @@ -395,27 +422,6 @@ DigitList::append(char digit) internalClear(); } -char DigitList::getStrtodDecimalSeparator() { - // TODO: maybe use andy's pthread once. - static char gDecimal = 0; - char result; - { - Mutex mutex; - result = gDecimal;; - if (result == 0) { - // We need to know the decimal separator character that will be used with strtod(). - // Depends on the C runtime global locale. - // Most commonly is '.' - // TODO: caching could fail if the global locale is changed on the fly. - char rep[MAX_DIGITS]; - sprintf(rep, "%+1.1f", 1.0); - result = rep[2]; - gDecimal = result;; - } - } - return result; -} - // ------------------------------------- /** @@ -428,24 +434,11 @@ char DigitList::getStrtodDecimalSeparator() { double DigitList::getDouble() const { - static char gDecimal = 0; - char decimalSeparator; { Mutex mutex; if (fHave == kDouble) { return fUnion.fDouble; } - decimalSeparator = gDecimal; - } - - if (decimalSeparator == 0) { - // We need to know the decimal separator character that will be used with strtod(). - // Depends on the C runtime global locale. - // Most commonly is '.' - // TODO: caching could fail if the global locale is changed on the fly. - char rep[MAX_DIGITS]; - sprintf(rep, "%+1.1f", 1.0); - decimalSeparator = rep[2]; } double tDouble = 0.0; @@ -483,24 +476,71 @@ DigitList::getDouble() const } U_ASSERT(uprv_strlen(&s[0]) < MAX_DBL_DIGITS+18); - if (decimalSeparator != '.') { - char *decimalPt = strchr(s.getAlias(), '.'); - if (decimalPt != NULL) { - *decimalPt = decimalSeparator; - } - } char *end = NULL; - tDouble = uprv_strtod(s.getAlias(), &end); + tDouble = decimalStrToDouble(s.getAlias(), &end); } { Mutex mutex; DigitList *nonConstThis = const_cast(this); nonConstThis->internalSetDouble(tDouble); - gDecimal = decimalSeparator; } return tDouble; } +#if U_USE_STRTOD_L && U_PLATFORM_USES_ONLY_WIN32_API +# define locale_t _locale_t +# define freelocale _free_locale +# define strtod_l _strtod_l +#endif + +#if U_USE_STRTOD_L +static locale_t gCLocale = (locale_t)0; +#endif +static icu::UInitOnce gCLocaleInitOnce = U_INITONCE_INITIALIZER; + +U_CDECL_BEGIN +// Cleanup callback func +static UBool U_CALLCONV digitList_cleanup(void) +{ +#if U_USE_STRTOD_L + if (gCLocale != (locale_t)0) { + freelocale(gCLocale); + } +#endif + return TRUE; +} +// C Locale initialization func +static void U_CALLCONV initCLocale(void) { + ucln_i18n_registerCleanup(UCLN_I18N_DIGITLIST, digitList_cleanup); +#if U_USE_STRTOD_L +# if U_PLATFORM_USES_ONLY_WIN32_API + gCLocale = _create_locale(LC_ALL, "C"); +# else + gCLocale = newlocale(LC_ALL_MASK, "C", (locale_t)0); +# endif +#endif +} +U_CDECL_END + +double +DigitList::decimalStrToDouble(char *decstr, char **end) { + umtx_initOnce(gCLocaleInitOnce, &initCLocale); +#if U_USE_STRTOD_L + return strtod_l(decstr, end, gCLocale); +#else + char *decimalPt = strchr(decstr, '.'); + if (decimalPt) { + // We need to know the decimal separator character that will be used with strtod(). + // Depends on the C runtime global locale. + // Most commonly is '.' + char rep[MAX_DIGITS]; + sprintf(rep, "%+1.1f", 1.0); + *decimalPt = rep[2]; + } + return uprv_strtod(decstr, end); +#endif +} + // ------------------------------------- /** @@ -734,7 +774,7 @@ DigitList::set(int64_t source) * be acceptable for a public API. */ void -DigitList::set(const StringPiece &source, UErrorCode &status, uint32_t /*fastpathBits*/) { +DigitList::set(StringPiece source, UErrorCode &status, uint32_t /*fastpathBits*/) { if (U_FAILURE(status)) { return; } diff --git a/deps/icu-small/source/i18n/digitlst.h b/deps/icu-small/source/i18n/digitlst.h index 6cea007cb88306..27e6e8c410b4ad 100644 --- a/deps/icu-small/source/i18n/digitlst.h +++ b/deps/icu-small/source/i18n/digitlst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -267,7 +269,7 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil * @param source The value to be set. The string must be nul-terminated. * @param fastpathBits special flags for fast parsing */ - void set(const StringPiece &source, UErrorCode &status, uint32_t fastpathBits = 0); + void set(StringPiece source, UErrorCode &status, uint32_t fastpathBits = 0); /** * Multiply this = this * arg @@ -493,7 +495,8 @@ class U_I18N_API DigitList : public UMemory { // Declare external to make compil static inline void * U_EXPORT2 operator new(size_t size) U_NO_THROW { return ::operator new(size); }; static inline void U_EXPORT2 operator delete(void *ptr ) U_NO_THROW { ::operator delete(ptr); }; #endif - static char U_EXPORT2 getStrtodDecimalSeparator(); + + static double U_EXPORT2 decimalStrToDouble(char *decstr, char **end); /** * Placement new for stack usage diff --git a/deps/icu-small/source/i18n/dt_impl.h b/deps/icu-small/source/i18n/dt_impl.h new file mode 100644 index 00000000000000..9b01bad79edd9b --- /dev/null +++ b/deps/icu-small/source/i18n/dt_impl.h @@ -0,0 +1,92 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +/* +******************************************************************************* +* Copyright (C) 2007-2016, International Business Machines Corporation and +* others. All Rights Reserved. +******************************************************************************* +* +* File dt_impl.h +* +******************************************************************************* +*/ + + +#ifndef DT_IMPL_H__ +#define DT_IMPL_H__ + +/** + * \file + * \brief C++ API: Defines macros for interval format implementation + */ + +#if !UCONFIG_NO_FORMATTING + +#include "unicode/unistr.h" + + +#define QUOTE ((UChar)0x0027) +#define LOW_LINE ((UChar)0x005F) +#define COLON ((UChar)0x003A) +#define LEFT_CURLY_BRACKET ((UChar)0x007B) +#define RIGHT_CURLY_BRACKET ((UChar)0x007D) +#define SPACE ((UChar)0x0020) +#define EN_DASH ((UChar)0x2013) +#define SOLIDUS ((UChar)0x002F) +#define PERCENT ((UChar)0x0025) + +#define DIGIT_ZERO ((UChar)0x0030) +#define DIGIT_ONE ((UChar)0x0031) + +#define LOW_A ((UChar)0x0061) +#define LOW_B ((UChar)0x0062) +#define LOW_C ((UChar)0x0063) +#define LOW_D ((UChar)0x0064) +#define LOW_E ((UChar)0x0065) +#define LOW_F ((UChar)0x0066) +#define LOW_G ((UChar)0x0067) +#define LOW_H ((UChar)0x0068) +#define LOW_I ((UChar)0x0069) +#define LOW_J ((UChar)0x006a) +#define LOW_K ((UChar)0x006B) +#define LOW_L ((UChar)0x006C) +#define LOW_M ((UChar)0x006D) +#define LOW_N ((UChar)0x006E) +#define LOW_O ((UChar)0x006F) +#define LOW_P ((UChar)0x0070) +#define LOW_Q ((UChar)0x0071) +#define LOW_R ((UChar)0x0072) +#define LOW_S ((UChar)0x0073) +#define LOW_T ((UChar)0x0074) +#define LOW_U ((UChar)0x0075) +#define LOW_V ((UChar)0x0076) +#define LOW_W ((UChar)0x0077) +#define LOW_Y ((UChar)0x0079) +#define LOW_Z ((UChar)0x007A) + +#define CAP_A ((UChar)0x0041) +#define CAP_C ((UChar)0x0043) +#define CAP_D ((UChar)0x0044) +#define CAP_E ((UChar)0x0045) +#define CAP_F ((UChar)0x0046) +#define CAP_G ((UChar)0x0047) +#define CAP_H ((UChar)0x0048) +#define CAP_K ((UChar)0x004B) +#define CAP_L ((UChar)0x004C) +#define CAP_M ((UChar)0x004D) +#define CAP_N ((UChar)0x004E) +#define CAP_O ((UChar)0x004F) +#define CAP_P ((UChar)0x0050) +#define CAP_Q ((UChar)0x0051) +#define CAP_S ((UChar)0x0053) +#define CAP_T ((UChar)0x0054) +#define CAP_U ((UChar)0x0055) +#define CAP_V ((UChar)0x0056) +#define CAP_W ((UChar)0x0057) +#define CAP_Y ((UChar)0x0059) +#define CAP_Z ((UChar)0x005A) + +#endif /* #if !UCONFIG_NO_FORMATTING */ + +#endif +//eof diff --git a/deps/icu-small/source/i18n/dtfmtsym.cpp b/deps/icu-small/source/i18n/dtfmtsym.cpp index 206d7a26a9ee6f..c412c5be05242b 100644 --- a/deps/icu-small/source/i18n/dtfmtsym.cpp +++ b/deps/icu-small/source/i18n/dtfmtsym.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -33,11 +35,15 @@ #include "umutex.h" #include "cmemory.h" #include "cstring.h" +#include "charstr.h" +#include "dt_impl.h" #include "locbased.h" #include "gregoimp.h" #include "hash.h" +#include "uassert.h" #include "uresimp.h" #include "ureslocs.h" +#include "uvector.h" #include "shareddateformatsymbols.h" #include "unicode/calendar.h" #include "unifiedcache.h" @@ -194,6 +200,8 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(DateFormatSymbols) * These are the tags we expect to see in normal resource bundle files associated * with a locale and calendar */ +static const char gCalendarTag[]="calendar"; +static const char gGregorianTag[]="gregorian"; static const char gErasTag[]="eras"; static const char gCyclicNameSetsTag[]="cyclicNameSets"; static const char gNameSetYearsTag[]="years"; @@ -206,11 +214,11 @@ static const char gNamesAbbrTag[]="abbreviated"; static const char gNamesShortTag[]="short"; static const char gNamesNarrowTag[]="narrow"; static const char gNamesAllTag[]="all"; -static const char gNamesLeapTag[]="leap"; static const char gNamesFormatTag[]="format"; static const char gNamesStandaloneTag[]="stand-alone"; static const char gNamesNumericTag[]="numeric"; static const char gAmPmMarkersTag[]="AmPmMarkers"; +static const char gAmPmMarkersAbbrTag[]="AmPmMarkersAbbr"; static const char gAmPmMarkersNarrowTag[]="AmPmMarkersNarrow"; static const char gQuartersTag[]="quarters"; static const char gNumberElementsTag[]="NumberElements"; @@ -293,8 +301,8 @@ DateFormatSymbols::assignArray(UnicodeString*& dstArray, const UnicodeString* srcArray, int32_t srcCount) { - // assignArray() is only called by copyData(), which in turn implements the - // copy constructor and the assignment operator. + // assignArray() is only called by copyData() and initializeData(), which in turn + // implements the copy constructor and the assignment operator. // All strings in a DateFormatSymbols object are created in one of the following // three ways that all allow to safely use UnicodeString::fastCopyFrom(): // - readonly-aliases from resource bundles @@ -1271,6 +1279,12 @@ DateFormatSymbols::initZoneStringsArray(void) { TimeZoneNames *tzNames = NULL; int32_t rows = 0; + static const UTimeZoneNameType TYPES[] = { + UTZNM_LONG_STANDARD, UTZNM_SHORT_STANDARD, + UTZNM_LONG_DAYLIGHT, UTZNM_SHORT_DAYLIGHT + }; + static const int32_t NUM_TYPES = 4; + do { // dummy do-while tzids = TimeZone::createTimeZoneIDEnumeration(ZONE_SET, NULL, NULL, status); @@ -1289,6 +1303,8 @@ DateFormatSymbols::initZoneStringsArray(void) { uprv_memset(zarray, 0, size); tzNames = TimeZoneNames::createInstance(fZSFLocale, status); + tzNames->loadAllDisplayNames(status); + if (U_FAILURE(status)) { break; } const UnicodeString *tzid; int32_t i = 0; @@ -1307,10 +1323,7 @@ DateFormatSymbols::initZoneStringsArray(void) { } zarray[i][0].setTo(*tzid); - zarray[i][1].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_STANDARD, now, tzDispName)); - zarray[i][2].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_STANDARD, now, tzDispName)); - zarray[i][3].setTo(tzNames->getDisplayName(*tzid, UTZNM_LONG_DAYLIGHT, now, tzDispName)); - zarray[i][4].setTo(tzNames->getDisplayName(*tzid, UTZNM_SHORT_DAYLIGHT, now, tzDispName)); + tzNames->getDisplayNames(*tzid, TYPES, NUM_TYPES, now, zarray[i]+1, status); i++; } @@ -1324,6 +1337,7 @@ DateFormatSymbols::initZoneStringsArray(void) { } } uprv_free(zarray); + zarray = NULL; } } @@ -1336,7 +1350,7 @@ DateFormatSymbols::initZoneStringsArray(void) { fLocaleZoneStrings = zarray; fZoneStringsRowCount = rows; - fZoneStringsColCount = 5; + fZoneStringsColCount = 1 + NUM_TYPES; } void @@ -1431,25 +1445,409 @@ DateFormatSymbols::setLocalPatternChars(const UnicodeString& newLocalPatternChar //------------------------------------------------------ -static void -initField(UnicodeString **field, int32_t& length, const UResourceBundle *data, UErrorCode &status) { - if (U_SUCCESS(status)) { - int32_t strLen = 0; - length = ures_getSize(data); - *field = newUnicodeStringArray(length); - if (*field) { - for(int32_t i = 0; isetTo(TRUE, resStr, strLen); +namespace { + +// Constants declarations +static const UChar kCalendarAliasPrefixUChar[] = { + SOLIDUS, CAP_L, CAP_O, CAP_C, CAP_A, CAP_L, CAP_E, SOLIDUS, + LOW_C, LOW_A, LOW_L, LOW_E, LOW_N, LOW_D, LOW_A, LOW_R, SOLIDUS +}; +static const UChar kGregorianTagUChar[] = { + LOW_G, LOW_R, LOW_E, LOW_G, LOW_O, LOW_R, LOW_I, LOW_A, LOW_N +}; +static const UChar kVariantTagUChar[] = { + PERCENT, LOW_V, LOW_A, LOW_R, LOW_I, LOW_A, LOW_N, LOW_T +}; +static const UChar kLeapTagUChar[] = { + LOW_L, LOW_E, LOW_A, LOW_P +}; +static const UChar kCyclicNameSetsTagUChar[] = { + LOW_C, LOW_Y, LOW_C, LOW_L, LOW_I, LOW_C, CAP_N, LOW_A, LOW_M, LOW_E, CAP_S, LOW_E, LOW_T, LOW_S +}; +static const UChar kYearsTagUChar[] = { + SOLIDUS, LOW_Y, LOW_E, LOW_A, LOW_R, LOW_S +}; +static const UChar kZodiacsUChar[] = { + SOLIDUS, LOW_Z, LOW_O, LOW_D, LOW_I, LOW_A, LOW_C, LOW_S +}; +static const UChar kDayPartsTagUChar[] = { + SOLIDUS, LOW_D, LOW_A, LOW_Y, CAP_P, LOW_A, LOW_R, LOW_T, LOW_S +}; +static const UChar kFormatTagUChar[] = { + SOLIDUS, LOW_F, LOW_O, LOW_R, LOW_M, LOW_A, LOW_T +}; +static const UChar kAbbrTagUChar[] = { + SOLIDUS, LOW_A, LOW_B, LOW_B, LOW_R, LOW_E, LOW_V, LOW_I, LOW_A, LOW_T, LOW_E, LOW_D +}; + +// ResourceSink to enumerate all calendar resources +struct CalendarDataSink : public ResourceSink { + + // Enum which specifies the type of alias received, or no alias + enum AliasType { + SAME_CALENDAR, + DIFFERENT_CALENDAR, + GREGORIAN, + NONE + }; + + // Data structures to store resources from the current resource bundle + Hashtable arrays; + Hashtable arraySizes; + Hashtable maps; + /** + * Whenever there are aliases, the same object will be added twice to 'map'. + * To avoid double deletion, 'maps' won't take ownership of the objects. Instead, + * 'mapRefs' will own them and will delete them when CalendarDataSink is deleted. + */ + UVector mapRefs; + + // Paths and the aliases they point to + UVector aliasPathPairs; + + // Current and next calendar resource table which should be loaded + UnicodeString currentCalendarType; + UnicodeString nextCalendarType; + + // Resources to visit when enumerating fallback calendars + LocalPointer resourcesToVisit; + + // Alias' relative path populated whenever an alias is read + UnicodeString aliasRelativePath; + + // Initializes CalendarDataSink with default values + CalendarDataSink(UErrorCode& status) + : arrays(FALSE, status), arraySizes(FALSE, status), maps(FALSE, status), + mapRefs(deleteHashtable, NULL, 10, status), + aliasPathPairs(uprv_deleteUObject, uhash_compareUnicodeString, status), + currentCalendarType(), nextCalendarType(), + resourcesToVisit(NULL), aliasRelativePath() { + if (U_FAILURE(status)) { return; } + } + virtual ~CalendarDataSink(); + + // Configure the CalendarSink to visit all the resources + void visitAllResources() { + resourcesToVisit.adoptInstead(NULL); + } + + // Actions to be done before enumerating + void preEnumerate(const UnicodeString &calendarType) { + currentCalendarType = calendarType; + nextCalendarType.setToBogus(); + aliasPathPairs.removeAllElements(); + } + + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + U_ASSERT(!currentCalendarType.isEmpty()); + + // Stores the resources to visit on the next calendar. + LocalPointer resourcesToVisitNext(NULL); + ResourceTable calendarData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + // Enumerate all resources for this calendar + for (int i = 0; calendarData.getKeyAndValue(i, key, value); i++) { + UnicodeString keyUString(key, -1, US_INV); + + // == Handle aliases == + AliasType aliasType = processAliasFromValue(keyUString, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (aliasType == GREGORIAN) { + // Ignore aliases to the gregorian calendar, all of its resources will be loaded anyway. + continue; + + } else if (aliasType == DIFFERENT_CALENDAR) { + // Whenever an alias to the next calendar (except gregorian) is encountered, register the + // calendar type it's pointing to + if (resourcesToVisitNext.isNull()) { + resourcesToVisitNext + .adoptInsteadAndCheckErrorCode(new UVector(uprv_deleteUObject, uhash_compareUnicodeString, errorCode), + errorCode); + if (U_FAILURE(errorCode)) { return; } + } + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + resourcesToVisitNext->addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after resourcesToVisitNext takes it (no error happened): + aliasRelativePathCopy.orphan(); + continue; + + } else if (aliasType == SAME_CALENDAR) { + // Register same-calendar alias + if (arrays.get(aliasRelativePath) == NULL && maps.get(aliasRelativePath) == NULL) { + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + aliasRelativePathCopy.orphan(); + LocalPointer keyUStringCopy(new UnicodeString(keyUString), errorCode); + aliasPathPairs.addElement(keyUStringCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + keyUStringCopy.orphan(); + } + continue; + } + + // Only visit the resources that were referenced by an alias on the previous calendar + // (AmPmMarkersAbbr is an exception). + if (!resourcesToVisit.isNull() && !resourcesToVisit->isEmpty() && !resourcesToVisit->contains(&keyUString) + && uprv_strcmp(key, gAmPmMarkersAbbrTag) != 0) { continue; } + + // == Handle data == + if (uprv_strcmp(key, gAmPmMarkersTag) == 0 + || uprv_strcmp(key, gAmPmMarkersAbbrTag) == 0 + || uprv_strcmp(key, gAmPmMarkersNarrowTag) == 0) { + if (arrays.get(keyUString) == NULL) { + ResourceArray resourceArray = value.getArray(errorCode); + int32_t arraySize = resourceArray.getSize(); + LocalArray stringArray(new UnicodeString[arraySize], errorCode); + value.getStringArray(stringArray.getAlias(), arraySize, errorCode); + arrays.put(keyUString, stringArray.orphan(), errorCode); + arraySizes.puti(keyUString, arraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } else if (uprv_strcmp(key, gErasTag) == 0 + || uprv_strcmp(key, gDayNamesTag) == 0 + || uprv_strcmp(key, gMonthNamesTag) == 0 + || uprv_strcmp(key, gQuartersTag) == 0 + || uprv_strcmp(key, gDayPeriodTag) == 0 + || uprv_strcmp(key, gMonthPatternsTag) == 0 + || uprv_strcmp(key, gCyclicNameSetsTag) == 0) { + processResource(keyUString, key, value, errorCode); } } - else { - length = 0; - status = U_MEMORY_ALLOCATION_ERROR; + + // Apply same-calendar aliases + UBool modified; + do { + modified = false; + for (int32_t i = 0; i < aliasPathPairs.size();) { + UBool mod = false; + UnicodeString *alias = (UnicodeString*)aliasPathPairs[i]; + UnicodeString *aliasArray; + Hashtable *aliasMap; + if ((aliasArray = (UnicodeString*)arrays.get(*alias)) != NULL) { + // Clone the array + int32_t aliasArraySize = arraySizes.geti(*alias); + LocalArray aliasArrayCopy(new UnicodeString[aliasArraySize], errorCode); + if (U_FAILURE(errorCode)) { return; } + uprv_arrayCopy(aliasArray, aliasArrayCopy.getAlias(), aliasArraySize); + // Put the array on the 'arrays' map + UnicodeString *path = (UnicodeString*)aliasPathPairs[i + 1]; + arrays.put(*path, aliasArrayCopy.orphan(), errorCode); + arraySizes.puti(*path, aliasArraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + mod = true; + } else if ((aliasMap = (Hashtable*)maps.get(*alias)) != NULL) { + UnicodeString *path = (UnicodeString*)aliasPathPairs[i + 1]; + maps.put(*path, aliasMap, errorCode); + if (U_FAILURE(errorCode)) { return; } + mod = true; + } + if (mod) { + aliasPathPairs.removeElementAt(i + 1); + aliasPathPairs.removeElementAt(i); + modified = true; + } else { + i += 2; + } + } + } while (modified && !aliasPathPairs.isEmpty()); + + // Set the resources to visit on the next calendar + if (!resourcesToVisitNext.isNull()) { + resourcesToVisit.moveFrom(resourcesToVisitNext); + } + } + + // Process the nested resource bundle tables + void processResource(UnicodeString &path, const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) return; + + ResourceTable table = value.getTable(errorCode); + if (U_FAILURE(errorCode)) return; + Hashtable* stringMap = NULL; + + // Iterate over all the elements of the table and add them to the map + for (int i = 0; table.getKeyAndValue(i, key, value); i++) { + UnicodeString keyUString(key, -1, US_INV); + + // Ignore '%variant' keys + if (keyUString.endsWith(kVariantTagUChar, UPRV_LENGTHOF(kVariantTagUChar))) { + continue; + } + + // == Handle String elements == + if (value.getType() == URES_STRING) { + // We are on a leaf, store the map elements into the stringMap + if (i == 0) { + LocalPointer stringMapPtr(new Hashtable(FALSE, errorCode), errorCode); + stringMap = stringMapPtr.getAlias(); + maps.put(path, stringMap, errorCode); + // mapRefs will take ownership of 'stringMap': + mapRefs.addElement(stringMap, errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after mapRefs takes it (no error happened): + stringMapPtr.orphan(); + stringMap->setValueDeleter(uprv_deleteUObject); + } + U_ASSERT(stringMap != NULL); + int32_t valueStringSize; + const UChar *valueString = value.getString(valueStringSize, errorCode); + if (U_FAILURE(errorCode)) { return; } + LocalPointer valueUString(new UnicodeString(TRUE, valueString, valueStringSize), errorCode); + stringMap->put(keyUString, valueUString.orphan(), errorCode); + if (U_FAILURE(errorCode)) { return; } + continue; + } + U_ASSERT(stringMap == NULL); + + // Store the current path's length and append the current key to the path. + int32_t pathLength = path.length(); + path.append(SOLIDUS).append(keyUString); + + // In cyclicNameSets ignore everything but years/format/abbreviated + // and zodiacs/format/abbreviated + if (path.startsWith(kCyclicNameSetsTagUChar, UPRV_LENGTHOF(kCyclicNameSetsTagUChar))) { + UBool skip = TRUE; + int32_t startIndex = UPRV_LENGTHOF(kCyclicNameSetsTagUChar); + int32_t length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kZodiacsUChar)), kZodiacsUChar, 0, UPRV_LENGTHOF(kZodiacsUChar)) == 0 + || path.compare(startIndex, (length = UPRV_LENGTHOF(kYearsTagUChar)), kYearsTagUChar, 0, UPRV_LENGTHOF(kYearsTagUChar)) == 0 + || path.compare(startIndex, (length = UPRV_LENGTHOF(kDayPartsTagUChar)), kDayPartsTagUChar, 0, UPRV_LENGTHOF(kDayPartsTagUChar)) == 0) { + startIndex += length; + length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kFormatTagUChar)), kFormatTagUChar, 0, UPRV_LENGTHOF(kFormatTagUChar)) == 0) { + startIndex += length; + length = 0; + if (startIndex == path.length() + || path.compare(startIndex, (length = UPRV_LENGTHOF(kAbbrTagUChar)), kAbbrTagUChar, 0, UPRV_LENGTHOF(kAbbrTagUChar)) == 0) { + skip = FALSE; + } + } + } + if (skip) { + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + } + + // == Handle aliases == + if (arrays.get(path) != NULL || maps.get(path) != NULL) { + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + + AliasType aliasType = processAliasFromValue(path, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + if (aliasType == SAME_CALENDAR) { + // Store the alias path and the current path on aliasPathPairs + LocalPointer aliasRelativePathCopy(new UnicodeString(aliasRelativePath), errorCode); + aliasPathPairs.addElement(aliasRelativePathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + aliasRelativePathCopy.orphan(); + LocalPointer pathCopy(new UnicodeString(path), errorCode); + aliasPathPairs.addElement(pathCopy.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { return; } + // Only release ownership after aliasPathPairs takes it (no error happened): + pathCopy.orphan(); + + // Drop the latest key on the path and continue + path.retainBetween(0, pathLength); + continue; + } + U_ASSERT(aliasType == NONE); + + // == Handle data == + if (value.getType() == URES_ARRAY) { + // We are on a leaf, store the array + ResourceArray rDataArray = value.getArray(errorCode); + int32_t dataArraySize = rDataArray.getSize(); + LocalArray dataArray(new UnicodeString[dataArraySize], errorCode); + value.getStringArray(dataArray.getAlias(), dataArraySize, errorCode); + arrays.put(path, dataArray.orphan(), errorCode); + arraySizes.puti(path, dataArraySize, errorCode); + if (U_FAILURE(errorCode)) { return; } + } else if (value.getType() == URES_TABLE) { + // We are not on a leaf, recursively process the subtable. + processResource(path, key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + + // Drop the latest key on the path + path.retainBetween(0, pathLength); } } + + // Populates an AliasIdentifier with the alias information contained on the UResource.Value. + AliasType processAliasFromValue(UnicodeString ¤tRelativePath, ResourceValue &value, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return NONE; } + + if (value.getType() == URES_ALIAS) { + int32_t aliasPathSize; + const UChar* aliasPathUChar = value.getAliasString(aliasPathSize, errorCode); + if (U_FAILURE(errorCode)) { return NONE; } + UnicodeString aliasPath(aliasPathUChar, aliasPathSize); + const int32_t aliasPrefixLength = UPRV_LENGTHOF(kCalendarAliasPrefixUChar); + if (aliasPath.startsWith(kCalendarAliasPrefixUChar, aliasPrefixLength) + && aliasPath.length() > aliasPrefixLength) { + int32_t typeLimit = aliasPath.indexOf(SOLIDUS, aliasPrefixLength); + if (typeLimit > aliasPrefixLength) { + const UnicodeString aliasCalendarType = + aliasPath.tempSubStringBetween(aliasPrefixLength, typeLimit); + aliasRelativePath.setTo(aliasPath, typeLimit + 1, aliasPath.length()); + + if (currentCalendarType == aliasCalendarType + && currentRelativePath != aliasRelativePath) { + // If we have an alias to the same calendar, the path to the resource must be different + return SAME_CALENDAR; + + } else if (currentCalendarType != aliasCalendarType + && currentRelativePath == aliasRelativePath) { + // If we have an alias to a different calendar, the path to the resource must be the same + if (aliasCalendarType.compare(kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)) == 0) { + return GREGORIAN; + } else if (nextCalendarType.isBogus()) { + nextCalendarType = aliasCalendarType; + return DIFFERENT_CALENDAR; + } else if (nextCalendarType == aliasCalendarType) { + return DIFFERENT_CALENDAR; + } + } + } + } + errorCode = U_INTERNAL_PROGRAM_ERROR; + return NONE; + } + return NONE; + } + + // Deleter function to be used by 'arrays' + static void U_CALLCONV deleteUnicodeStringArray(void *uArray) { + delete[] static_cast(uArray); + } + + // Deleter function to be used by 'maps' + static void U_CALLCONV deleteHashtable(void *table) { + delete static_cast(table); + } +}; +// Virtual destructors have to be defined out of line +CalendarDataSink::~CalendarDataSink() { + arrays.setValueDeleter(deleteUnicodeStringArray); } +} + +//------------------------------------------------------ static void initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortSize numStr, LastResortSize strLen, UErrorCode &status) { @@ -1471,16 +1869,89 @@ initField(UnicodeString **field, int32_t& length, const UChar *data, LastResortS } static void -initLeapMonthPattern(UnicodeString *field, int32_t index, const UResourceBundle *data, UErrorCode &status) { +initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, UErrorCode &status) { + if (U_SUCCESS(status)) { + UnicodeString keyUString(key.data(), -1, US_INV); + UnicodeString* array = static_cast(sink.arrays.get(keyUString)); + + if (array != NULL) { + length = sink.arraySizes.geti(keyUString); + *field = array; + // DateFormatSymbols takes ownership of the array: + sink.arrays.remove(keyUString); + } else { + length = 0; + status = U_MISSING_RESOURCE_ERROR; + } + } +} + +static void +initField(UnicodeString **field, int32_t& length, CalendarDataSink &sink, CharString &key, int32_t arrayOffset, UErrorCode &status) { + if (U_SUCCESS(status)) { + UnicodeString keyUString(key.data(), -1, US_INV); + UnicodeString* array = static_cast(sink.arrays.get(keyUString)); + + if (array != NULL) { + int32_t arrayLength = sink.arraySizes.geti(keyUString); + length = arrayLength + arrayOffset; + *field = new UnicodeString[length]; + if (*field == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + uprv_arrayCopy(array, 0, *field, arrayOffset, arrayLength); + } else { + length = 0; + status = U_MISSING_RESOURCE_ERROR; + } + } +} + +static void +initLeapMonthPattern(UnicodeString *field, int32_t index, CalendarDataSink &sink, CharString &path, UErrorCode &status) { field[index].remove(); if (U_SUCCESS(status)) { - int32_t strLen = 0; - const UChar *resStr = ures_getStringByKey(data, gNamesLeapTag, &strLen, &status); - if (U_SUCCESS(status)) { - field[index].setTo(TRUE, resStr, strLen); + UnicodeString pathUString(path.data(), -1, US_INV); + Hashtable *leapMonthTable = static_cast(sink.maps.get(pathUString)); + if (leapMonthTable != NULL) { + UnicodeString leapLabel(FALSE, kLeapTagUChar, UPRV_LENGTHOF(kLeapTagUChar)); + UnicodeString *leapMonthPattern = static_cast(leapMonthTable->get(leapLabel)); + if (leapMonthPattern != NULL) { + field[index].fastCopyFrom(*leapMonthPattern); + } else { + field[index].setToBogus(); + } + return; } + status = U_MISSING_RESOURCE_ERROR; } - status = U_ZERO_ERROR; +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, UErrorCode &errorCode) { + return path.clear().append(segment1, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + UErrorCode &errorCode) { + return buildResourcePath(path, segment1, errorCode).append('/', errorCode) + .append(segment2, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + const char* segment3, UErrorCode &errorCode) { + return buildResourcePath(path, segment1, segment2, errorCode).append('/', errorCode) + .append(segment3, -1, errorCode); +} + +static CharString +&buildResourcePath(CharString &path, const char* segment1, const char* segment2, + const char* segment3, const char* segment4, UErrorCode &errorCode) { + return buildResourcePath(path, segment1, segment2, segment3, errorCode).append('/', errorCode) + .append(segment4, -1, errorCode); } typedef struct { @@ -1513,41 +1984,43 @@ static const char *dayPeriodKeys[] = {"midnight", "noon", "morning1", "afternoon1", "evening1", "night1", "morning2", "afternoon2", "evening2", "night2"}; -UnicodeString* loadDayPeriodStrings(CalendarData &calData, const char *tag, UBool standalone, +UnicodeString* loadDayPeriodStrings(CalendarDataSink &sink, CharString &path, int32_t &stringCount, UErrorCode &status) { - if (U_FAILURE(status)) { - return NULL; - } - - UResourceBundle *dayPeriodData; + if (U_FAILURE(status)) { return NULL; } - if (standalone) { - dayPeriodData = calData.getByKey3(gDayPeriodTag, gNamesStandaloneTag, tag, status); - } else { - dayPeriodData = calData.getByKey2(gDayPeriodTag, tag, status); - } + UnicodeString pathUString(path.data(), -1, US_INV); + Hashtable* map = static_cast(sink.maps.get(pathUString)); stringCount = UPRV_LENGTHOF(dayPeriodKeys); UnicodeString *strings = new UnicodeString[stringCount]; - for (int32_t i = 0; i < stringCount; ++i) { - //TODO: Check if there are fallbacks/aliases defined in the data; e.g., if there - //is no wide string, then use the narrow one? - strings[i].fastCopyFrom(ures_getUnicodeStringByKey(dayPeriodData, dayPeriodKeys[i], &status)); - if (U_FAILURE(status)) { - // string[i] will be bogus if ures_getUnicodeString() returns with an error, - // which is just the behavior we want. Simply reset the error code. - status = U_ZERO_ERROR; + if (strings == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + + if (map != NULL) { + for (int32_t i = 0; i < stringCount; ++i) { + UnicodeString dayPeriodKey(dayPeriodKeys[i], -1, US_INV); + UnicodeString *dayPeriod = static_cast(map->get(dayPeriodKey)); + if (dayPeriod != NULL) { + strings[i].fastCopyFrom(*dayPeriod); + } else { + strings[i].setToBogus(); + } + } + } else { + for (int32_t i = 0; i < stringCount; i++) { + strings[i].setToBogus(); } } return strings; } + void DateFormatSymbols::initializeData(const Locale& locale, const char *type, UErrorCode& status, UBool useLastResortData) { - int32_t i; int32_t len = 0; - const UChar *resStr; /* In case something goes wrong, initialize all of the data to NULL. */ fEras = NULL; fErasCount = 0; @@ -1628,97 +2101,107 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError if (U_FAILURE(status)) return; - /** - * Retrieve the string arrays we need from the resource bundle file. - * We cast away const here, but that's okay; we won't delete any of - * these. - */ - CalendarData calData(locale, type, status); + // Create a CalendarDataSink to process this data and the resouce bundles + CalendarDataSink calendarSink(status); + UResourceBundle *rb = ures_open(NULL, locale.getBaseName(), &status); + UResourceBundle *cb = ures_getByKey(rb, gCalendarTag, NULL, &status); - // load the first data item - UResourceBundle *erasMain = calData.getByKey(gErasTag, status); - UResourceBundle *eras = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - UErrorCode oldStatus = status; - UResourceBundle *eraNames = ures_getByKeyWithFallback(erasMain, gNamesWideTag, NULL, &status); - if ( status == U_MISSING_RESOURCE_ERROR ) { // Workaround because eras/wide was omitted from CLDR 1.3 - status = oldStatus; - eraNames = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - } - // current ICU4J falls back to abbreviated if narrow eras are missing, so we will too - oldStatus = status; - UResourceBundle *narrowEras = ures_getByKeyWithFallback(erasMain, gNamesNarrowTag, NULL, &status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = oldStatus; - narrowEras = ures_getByKeyWithFallback(erasMain, gNamesAbbrTag, NULL, &status); - } - - UErrorCode tempStatus = U_ZERO_ERROR; - UResourceBundle *monthPatterns = calData.getByKey(gMonthPatternsTag, tempStatus); - if (U_SUCCESS(tempStatus) && monthPatterns != NULL) { - fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount); - if (fLeapMonthPatterns) { - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calData.getByKey2(gMonthPatternsTag, gNamesWideTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calData.getByKey2(gMonthPatternsTag, gNamesAbbrTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calData.getByKey2(gMonthPatternsTag, gNamesNarrowTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calData.getByKey3(gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus); - initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calData.getByKey3(gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus); - if (U_SUCCESS(tempStatus)) { - // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't. - // The ordering of the following statements is important. - if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); - }; - if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) { - fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]); - }; - // end of hack - fLeapMonthPatternsCount = kMonthPatternsCount; - } else { - delete[] fLeapMonthPatterns; - fLeapMonthPatterns = NULL; + if (U_FAILURE(status)) return; + + // Iterate over the resource bundle data following the fallbacks through different calendar types + UnicodeString calendarType((type != NULL && *type != '\0')? type : gGregorianTag, -1, US_INV); + while (!calendarType.isBogus()) { + CharString calendarTypeBuffer; + calendarTypeBuffer.appendInvariantChars(calendarType, status); + if (U_FAILURE(status)) { return; } + const char *calendarTypeCArray = calendarTypeBuffer.data(); + + // Enumerate this calendar type. If the calendar is not found fallback to gregorian + UErrorCode oldStatus = status; + UResourceBundle *ctb = ures_getByKeyWithFallback(cb, calendarTypeCArray, NULL, &status); + if (status == U_MISSING_RESOURCE_ERROR) { + ures_close(ctb); + if (uprv_strcmp(calendarTypeCArray, gGregorianTag) != 0) { + calendarType.setTo(FALSE, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)); + calendarSink.visitAllResources(); + status = oldStatus; + continue; } + return; } - } - tempStatus = U_ZERO_ERROR; - UResourceBundle *cyclicNameSets= calData.getByKey(gCyclicNameSetsTag, tempStatus); - if (U_SUCCESS(tempStatus) && cyclicNameSets != NULL) { - UResourceBundle *nameSetYears = ures_getByKeyWithFallback(cyclicNameSets, gNameSetYearsTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetYearsFmt = ures_getByKeyWithFallback(nameSetYears, gNamesFormatTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetYearsFmtAbbrev = ures_getByKeyWithFallback(nameSetYearsFmt, gNamesAbbrTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - initField(&fShortYearNames, fShortYearNamesCount, nameSetYearsFmtAbbrev, tempStatus); - ures_close(nameSetYearsFmtAbbrev); - } - ures_close(nameSetYearsFmt); - } - ures_close(nameSetYears); + calendarSink.preEnumerate(calendarType); + ures_getAllItemsWithFallback(ctb, "", calendarSink, status); + ures_close(ctb); + if (U_FAILURE(status)) break; + + // Stop loading when gregorian was loaded + if (uprv_strcmp(calendarTypeCArray, gGregorianTag) == 0) { + break; } - UResourceBundle *nameSetZodiacs = ures_getByKeyWithFallback(cyclicNameSets, gNameSetZodiacsTag, NULL, &tempStatus); + + // Get the next calendar type to process from the sink + calendarType = calendarSink.nextCalendarType; + + // Gregorian is always the last fallback + if (calendarType.isBogus()) { + calendarType.setTo(FALSE, kGregorianTagUChar, UPRV_LENGTHOF(kGregorianTagUChar)); + calendarSink.visitAllResources(); + } + } + + // CharString object to build paths + CharString path; + + // Load Leap Month Patterns + UErrorCode tempStatus = status; + fLeapMonthPatterns = newUnicodeStringArray(kMonthPatternsCount); + if (fLeapMonthPatterns) { + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatWide, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesWideTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatAbbrev, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternFormatNarrow, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesFormatTag, gNamesNarrowTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneWide, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesWideTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneAbbrev, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesAbbrTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternStandaloneNarrow, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesStandaloneTag, gNamesNarrowTag, tempStatus), tempStatus); + initLeapMonthPattern(fLeapMonthPatterns, kLeapMonthPatternNumeric, calendarSink, + buildResourcePath(path, gMonthPatternsTag, gNamesNumericTag, gNamesAllTag, tempStatus), tempStatus); if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetZodiacsFmt = ures_getByKeyWithFallback(nameSetZodiacs, gNamesFormatTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - UResourceBundle *nameSetZodiacsFmtAbbrev = ures_getByKeyWithFallback(nameSetZodiacsFmt, gNamesAbbrTag, NULL, &tempStatus); - if (U_SUCCESS(tempStatus)) { - initField(&fShortZodiacNames, fShortZodiacNamesCount, nameSetZodiacsFmtAbbrev, tempStatus); - ures_close(nameSetZodiacsFmtAbbrev); - } - ures_close(nameSetZodiacsFmt); - } - ures_close(nameSetZodiacs); + // Hack to fix bad C inheritance for dangi monthPatterns (OK in J); this should be handled by aliases in root, but isn't. + // The ordering of the following statements is important. + if (fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternFormatNarrow].setTo(fLeapMonthPatterns[kLeapMonthPatternStandaloneNarrow]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternStandaloneWide].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatWide]); + }; + if (fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].isEmpty()) { + fLeapMonthPatterns[kLeapMonthPatternStandaloneAbbrev].setTo(fLeapMonthPatterns[kLeapMonthPatternFormatAbbrev]); + }; + // end of hack + fLeapMonthPatternsCount = kMonthPatternsCount; + } else { + delete[] fLeapMonthPatterns; + fLeapMonthPatterns = NULL; } } + // Load cyclic names sets + tempStatus = status; + initField(&fShortYearNames, fShortYearNamesCount, calendarSink, + buildResourcePath(path, gCyclicNameSetsTag, gNameSetYearsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + initField(&fShortZodiacNames, fShortZodiacNamesCount, calendarSink, + buildResourcePath(path, gCyclicNameSetsTag, gNameSetZodiacsTag, gNamesFormatTag, gNamesAbbrTag, tempStatus), tempStatus); + + // Load context transforms and capitalization tempStatus = U_ZERO_ERROR; UResourceBundle *localeBundle = ures_open(NULL, locale.getName(), &tempStatus); if (U_SUCCESS(tempStatus)) { @@ -1775,126 +2258,108 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError fTimeSeparator.setTo(DateFormatSymbols::DEFAULT_TIME_SEPARATOR); } - fWideDayPeriods = loadDayPeriodStrings(calData, gNamesWideTag, FALSE, - fWideDayPeriodsCount, status); - fNarrowDayPeriods = loadDayPeriodStrings(calData, gNamesNarrowTag, FALSE, - fNarrowDayPeriodsCount, status); - fAbbreviatedDayPeriods = loadDayPeriodStrings(calData, gNamesAbbrTag, FALSE, - fAbbreviatedDayPeriodsCount, status); - fStandaloneWideDayPeriods = loadDayPeriodStrings(calData, gNamesWideTag, TRUE, - fStandaloneWideDayPeriodsCount, status); - fStandaloneNarrowDayPeriods = loadDayPeriodStrings(calData, gNamesNarrowTag, TRUE, - fStandaloneNarrowDayPeriodsCount, status); - fStandaloneAbbreviatedDayPeriods = loadDayPeriodStrings(calData, gNamesAbbrTag, TRUE, - fStandaloneAbbreviatedDayPeriodsCount, status); - - UResourceBundle *weekdaysData = NULL; // Data closed by calData - UResourceBundle *abbrWeekdaysData = NULL; // Data closed by calData - UResourceBundle *shorterWeekdaysData = NULL; // Data closed by calData - UResourceBundle *narrowWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneAbbrWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneShorterWeekdaysData = NULL; // Data closed by calData - UResourceBundle *standaloneNarrowWeekdaysData = NULL; // Data closed by calData + // Load day periods + fWideDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesWideTag, status), + fWideDayPeriodsCount, status); + fNarrowDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesNarrowTag, status), + fNarrowDayPeriodsCount, status); + fAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesFormatTag, gNamesAbbrTag, status), + fAbbreviatedDayPeriodsCount, status); + fStandaloneWideDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesWideTag, status), + fStandaloneWideDayPeriodsCount, status); + fStandaloneNarrowDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesNarrowTag, status), + fStandaloneNarrowDayPeriodsCount, status); + fStandaloneAbbreviatedDayPeriods = loadDayPeriodStrings(calendarSink, + buildResourcePath(path, gDayPeriodTag, gNamesStandaloneTag, gNamesAbbrTag, status), + fStandaloneAbbreviatedDayPeriodsCount, status); U_LOCALE_BASED(locBased, *this); - if (U_FAILURE(status)) - { - if (useLastResortData) - { - // Handle the case in which there is no resource data present. - // We don't have to generate usable patterns in this situation; - // we just need to produce something that will be semi-intelligible - // in most locales. - - status = U_USING_FALLBACK_WARNING; - - initField(&fEras, fErasCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fEraNames, fEraNamesCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fNarrowEras, fNarrowErasCount, (const UChar *)gLastResortEras, kEraNum, kEraLen, status); - initField(&fMonths, fMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fShortMonths, fShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fNarrowMonths, fNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneMonths, fStandaloneMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, (const UChar *)gLastResortMonthNames, kMonthNum, kMonthLen, status); - initField(&fWeekdays, fWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fShortWeekdays, fShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fShorterWeekdays, fShorterWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fNarrowWeekdays, fNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneShorterWeekdays, fStandaloneShorterWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fStandaloneNarrowWeekdays, fStandaloneNarrowWeekdaysCount, (const UChar *)gLastResortDayNames, kDayNum, kDayLen, status); - initField(&fAmPms, fAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status); - initField(&fNarrowAmPms, fNarrowAmPmsCount, (const UChar *)gLastResortAmPmMarkers, kAmPmNum, kAmPmLen, status); - initField(&fQuarters, fQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fShortQuarters, fShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fStandaloneQuarters, fStandaloneQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, (const UChar *)gLastResortQuarters, kQuarterNum, kQuarterLen, status); - fLocalPatternChars.setTo(TRUE, gPatternChars, PATTERN_CHARS_LEN); - } - goto cleanup; - } - // if we make it to here, the resource data is cool, and we can get everything out // of it that we need except for the time-zone and localized-pattern data, which // are stored in a separate file - locBased.setLocaleIDs(ures_getLocaleByType(eras, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(eras, ULOC_ACTUAL_LOCALE, &status)); + locBased.setLocaleIDs(ures_getLocaleByType(cb, ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(cb, ULOC_ACTUAL_LOCALE, &status)); - initField(&fEras, fErasCount, eras, status); - initField(&fEraNames, fEraNamesCount, eraNames, status); - initField(&fNarrowEras, fNarrowErasCount, narrowEras, status); - - initField(&fMonths, fMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); - initField(&fShortMonths, fShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); - if(status == U_MISSING_RESOURCE_ERROR) { - status = U_ZERO_ERROR; - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); - } - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If format/narrow not available, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fNarrowMonths, fNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - } - - initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/wide not available, use format/wide */ - status = U_ZERO_ERROR; - initField(&fStandaloneMonths, fStandaloneMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesWideTag, status), status); - } - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* If standalone/abbreviated not available, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); + // Load eras + initField(&fEras, fErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesAbbrTag, status), status); + UErrorCode oldStatus = status; + initField(&fEraNames, fEraNamesCount, calendarSink, buildResourcePath(path, gErasTag, gNamesWideTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3 + status = oldStatus; + assignArray(fEraNames, fEraNamesCount, fEras, fErasCount); } - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey3(gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* if standalone/narrow not availabe, try format/narrow */ - status = U_ZERO_ERROR; - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesNarrowTag, status), status); - if ( status == U_MISSING_RESOURCE_ERROR ) { /* if still not there, use format/abbreviated */ - status = U_ZERO_ERROR; - initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calData.getByKey2(gMonthNamesTag, gNamesAbbrTag, status), status); - } + // current ICU4J falls back to abbreviated if narrow eras are missing, so we will too + oldStatus = status; + initField(&fNarrowEras, fNarrowErasCount, calendarSink, buildResourcePath(path, gErasTag, gNamesNarrowTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { // Workaround because eras/wide was omitted from CLDR 1.3 + status = oldStatus; + assignArray(fNarrowEras, fNarrowErasCount, fEras, fErasCount); + } + + // Load month names + initField(&fMonths, fMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesWideTag, status), status); + initField(&fShortMonths, fShortMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesAbbrTag, status), status); + initField(&fStandaloneMonths, fStandaloneMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesWideTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide not available, use format/wide */ + status = U_ZERO_ERROR; + assignArray(fStandaloneMonths, fStandaloneMonthsCount, fMonths, fMonthsCount); } - initField(&fAmPms, fAmPmsCount, calData.getByKey(gAmPmMarkersTag, status), status); - initField(&fNarrowAmPms, fNarrowAmPmsCount, calData.getByKey(gAmPmMarkersNarrowTag, status), status); - - initField(&fQuarters, fQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); - initField(&fShortQuarters, fShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); - - initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status); + initField(&fStandaloneShortMonths, fStandaloneShortMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated not available, use format/abbreviated */ + status = U_ZERO_ERROR; + assignArray(fStandaloneShortMonths, fStandaloneShortMonthsCount, fShortMonths, fShortMonthsCount); + } + + UErrorCode narrowMonthsEC = status; + UErrorCode standaloneNarrowMonthsEC = status; + initField(&fNarrowMonths, fNarrowMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesFormatTag, gNamesNarrowTag, narrowMonthsEC), narrowMonthsEC); + initField(&fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, calendarSink, + buildResourcePath(path, gMonthNamesTag, gNamesStandaloneTag, gNamesNarrowTag, narrowMonthsEC), standaloneNarrowMonthsEC); + if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC != U_MISSING_RESOURCE_ERROR) { + // If format/narrow not available, use standalone/narrow + assignArray(fNarrowMonths, fNarrowMonthsCount, fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount); + } else if (narrowMonthsEC != U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) { + // If standalone/narrow not availabe, use format/narrow + assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fNarrowMonths, fNarrowMonthsCount); + } else if (narrowMonthsEC == U_MISSING_RESOURCE_ERROR && standaloneNarrowMonthsEC == U_MISSING_RESOURCE_ERROR) { + // If neither is available, use format/abbreviated + assignArray(fNarrowMonths, fNarrowMonthsCount, fShortMonths, fShortMonthsCount); + assignArray(fStandaloneNarrowMonths, fStandaloneNarrowMonthsCount, fShortMonths, fShortMonthsCount); + } + + // Load AM/PM markers + initField(&fAmPms, fAmPmsCount, calendarSink, + buildResourcePath(path, gAmPmMarkersTag, status), status); + initField(&fNarrowAmPms, fNarrowAmPmsCount, calendarSink, + buildResourcePath(path, gAmPmMarkersNarrowTag, status), status); + + // Load quarters + initField(&fQuarters, fQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesWideTag, status), status); + initField(&fShortQuarters, fShortQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesFormatTag, gNamesAbbrTag, status), status); + + initField(&fStandaloneQuarters, fStandaloneQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesWideTag, status), status); if(status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - initField(&fStandaloneQuarters, fStandaloneQuartersCount, calData.getByKey2(gQuartersTag, gNamesWideTag, status), status); + assignArray(fStandaloneQuarters, fStandaloneQuartersCount, fQuarters, fQuartersCount); } - - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey3(gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); + initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calendarSink, + buildResourcePath(path, gQuartersTag, gNamesStandaloneTag, gNamesAbbrTag, status), status); if(status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - initField(&fStandaloneShortQuarters, fStandaloneShortQuartersCount, calData.getByKey2(gQuartersTag, gNamesAbbrTag, status), status); + assignArray(fStandaloneShortQuarters, fStandaloneShortQuartersCount, fShortQuarters, fShortQuartersCount); } // ICU 3.8 or later version no longer uses localized date-time pattern characters by default (ticket#5597) @@ -1912,177 +2377,108 @@ DateFormatSymbols::initializeData(const Locale& locale, const char *type, UError // Format wide weekdays -> fWeekdays // {sfb} fixed to handle 1-based weekdays - weekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); - fWeekdaysCount = ures_getSize(weekdaysData); - fWeekdays = new UnicodeString[fWeekdaysCount+1]; - /* pin the blame on system. If we cannot get a chunk of memory .. the system is dying!*/ - if (fWeekdays == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fWeekdays[0] empty - for(i = 0; i fShortWeekdays - abbrWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - fShortWeekdaysCount = ures_getSize(abbrWeekdaysData); - fShortWeekdays = new UnicodeString[fShortWeekdaysCount+1]; - /* test for NULL */ - if (fShortWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fShortWeekdays[0] empty - for(i = 0; i fShorterWeekdays (fall back to abbreviated) - shorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesShortTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - shorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fShorterWeekdaysCount = ures_getSize(shorterWeekdaysData); - fShorterWeekdays = new UnicodeString[fShorterWeekdaysCount+1]; - /* test for NULL */ - if (fShorterWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fShorterWeekdays[0] empty - for(i = 0; i fNarrowWeekdays - narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); - if(status == U_MISSING_RESOURCE_ERROR) { + // Format short weekdays -> fShorterWeekdays (fall back to abbreviated) + initField(&fShorterWeekdays, fShorterWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesShortTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { status = U_ZERO_ERROR; - narrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); - } - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - narrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); + assignArray(fShorterWeekdays, fShorterWeekdaysCount, fShortWeekdays, fShortWeekdaysCount); } - fNarrowWeekdaysCount = ures_getSize(narrowWeekdaysData); - fNarrowWeekdays = new UnicodeString[fNarrowWeekdaysCount+1]; - /* test for NULL */ - if (fNarrowWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fNarrowWeekdays[0] empty - for(i = 0; i fStandaloneWeekdays - standaloneWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesWideTag, status); - } - fStandaloneWeekdaysCount = ures_getSize(standaloneWeekdaysData); - fStandaloneWeekdays = new UnicodeString[fStandaloneWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneWeekdays[0] empty - for(i = 0; i fStandaloneShortWeekdays - standaloneAbbrWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneAbbrWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fStandaloneShortWeekdaysCount = ures_getSize(standaloneAbbrWeekdaysData); - fStandaloneShortWeekdays = new UnicodeString[fStandaloneShortWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneShortWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; + + // Stand-alone wide weekdays -> fStandaloneWeekdays + initField(&fStandaloneWeekdays, fStandaloneWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesWideTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/wide is not available, use format/wide */ + status = U_ZERO_ERROR; + assignArray(fStandaloneWeekdays, fStandaloneWeekdaysCount, fWeekdays, fWeekdaysCount); } - // leave fStandaloneShortWeekdays[0] empty - for(i = 0; i fStandaloneShortWeekdays + initField(&fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesStandaloneTag, gNamesAbbrTag, status), 1, status); + if (status == U_MISSING_RESOURCE_ERROR) { /* If standalone/abbreviated is not available, use format/abbreviated */ + status = U_ZERO_ERROR; + assignArray(fStandaloneShortWeekdays, fStandaloneShortWeekdaysCount, fShortWeekdays, fShortWeekdaysCount); } - fStandaloneShortWeekdaysCount++; // Stand-alone short weekdays -> fStandaloneShorterWeekdays (fall back to format abbreviated) - standaloneShorterWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesShortTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneShorterWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - fStandaloneShorterWeekdaysCount = ures_getSize(standaloneShorterWeekdaysData); - fStandaloneShorterWeekdays = new UnicodeString[fStandaloneShorterWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneShorterWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneShorterWeekdays[0] empty - for(i = 0; i fNarrowWeekdays + UErrorCode narrowWeeksEC = status; + initField(&fNarrowWeekdays, fNarrowWeekdaysCount, calendarSink, + buildResourcePath(path, gDayNamesTag, gNamesFormatTag, gNamesNarrowTag, status), 1, narrowWeeksEC); // Stand-alone narrow weekdays -> fStandaloneNarrowWeekdays - standaloneNarrowWeekdaysData = calData.getByKey3(gDayNamesTag, gNamesStandaloneTag, gNamesNarrowTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesNarrowTag, status); - if ( status == U_MISSING_RESOURCE_ERROR ) { - status = U_ZERO_ERROR; - standaloneNarrowWeekdaysData = calData.getByKey2(gDayNamesTag, gNamesAbbrTag, status); - } - } - fStandaloneNarrowWeekdaysCount = ures_getSize(standaloneNarrowWeekdaysData); - fStandaloneNarrowWeekdays = new UnicodeString[fStandaloneNarrowWeekdaysCount+1]; - /* test for NULL */ - if (fStandaloneNarrowWeekdays == 0) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - // leave fStandaloneNarrowWeekdays[0] empty - for(i = 0; i @@ -51,7 +53,9 @@ static const UChar gDateFormatSkeleton[][11] = { {LOW_Y, CAP_M, LOW_D, 0} }; -static const char gDateTimePatternsTag[]="DateTimePatterns"; +static const char gCalendarTag[] = "calendar"; +static const char gGregorianTag[] = "gregorian"; +static const char gDateTimePatternsTag[] = "DateTimePatterns"; // latestFirst: @@ -217,15 +221,9 @@ DateIntervalFormat::operator==(const Format& other) const { Mutex lock(&gFormatterMutex); if (fDateFormat != fmt->fDateFormat && (fDateFormat == NULL || fmt->fDateFormat == NULL)) {return FALSE;} if (fDateFormat && fmt->fDateFormat && (*fDateFormat != *fmt->fDateFormat)) {return FALSE;} - - // TODO: should operator == ignore the From and ToCalendar? They hold transient values during - // formatting of a DateInterval. - if (fFromCalendar != fmt->fFromCalendar && (fFromCalendar == NULL || fmt->fFromCalendar == NULL)) {return FALSE;} - if (fFromCalendar && fmt->fFromCalendar && !fFromCalendar->isEquivalentTo(*fmt->fFromCalendar)) {return FALSE;} - - if (fToCalendar != fmt->fToCalendar && (fToCalendar == NULL || fmt->fToCalendar == NULL)) {return FALSE;} - if (fToCalendar && fmt->fToCalendar && !fToCalendar->isEquivalentTo(*fmt->fToCalendar)) {return FALSE;} } + // note: fFromCalendar and fToCalendar hold no persistent state, and therefore do not participate in operator ==. + // fDateFormat has the master calendar for the DateIntervalFormat. if (fSkeleton != fmt->fSkeleton) {return FALSE;} if (fDatePattern != fmt->fDatePattern && (fDatePattern == NULL || fmt->fDatePattern == NULL)) {return FALSE;} if (fDatePattern && fmt->fDatePattern && (*fDatePattern != *fmt->fDatePattern)) {return FALSE;} @@ -657,27 +655,22 @@ DateIntervalFormat::initializePattern(UErrorCode& status) { // with the time interval. // The date/time pattern ( such as {0} {1} ) is saved in // calendar, that is why need to get the CalendarData here. - CalendarData* calData = new CalendarData(locale, NULL, status); - if ( U_FAILURE(status) ) { - delete calData; - return; - } - if ( calData == NULL ) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } + LocalUResourceBundlePointer dateTimePatternsRes(ures_open(NULL, locale.getBaseName(), &status)); + ures_getByKey(dateTimePatternsRes.getAlias(), gCalendarTag, + dateTimePatternsRes.getAlias(), &status); + ures_getByKeyWithFallback(dateTimePatternsRes.getAlias(), gGregorianTag, + dateTimePatternsRes.getAlias(), &status); + ures_getByKeyWithFallback(dateTimePatternsRes.getAlias(), gDateTimePatternsTag, + dateTimePatternsRes.getAlias(), &status); - const UResourceBundle* dateTimePatternsRes = calData->getByKey( - gDateTimePatternsTag, status); int32_t dateTimeFormatLength; const UChar* dateTimeFormat = ures_getStringByIndex( - dateTimePatternsRes, + dateTimePatternsRes.getAlias(), (int32_t)DateFormat::kDateTime, &dateTimeFormatLength, &status); if ( U_SUCCESS(status) && dateTimeFormatLength >= 3 ) { fDateTimeFormat = new UnicodeString(dateTimeFormat, dateTimeFormatLength); } - delete calData; } UBool found = setSeparateDateTimePtn(normalizedDateSkeleton, @@ -1274,11 +1267,11 @@ DateIntervalFormat::splitPatternInto2Part(const UnicodeString& intervalPattern) } count = 0; } - if (ch == '\'') { + if (ch == 0x0027 /*'*/) { // Consecutive single quotes are a single quote literal, // either outside of quotes or between quotes if ((i+1) < intervalPattern.length() && - intervalPattern.charAt(i+1) == '\'') { + intervalPattern.charAt(i+1) == 0x0027 /*'*/) { ++i; } else { inQuote = ! inQuote; @@ -1478,10 +1471,10 @@ DateIntervalFormat::adjustFieldWidth(const UnicodeString& inputSkeleton, } count = 0; } - if (ch == '\'') { + if (ch == 0x0027 /*'*/) { // Consecutive single quotes are a single quote literal, // either outside of quotes or between quotes - if ((i+1) < adjustedPtn.length() && adjustedPtn.charAt(i+1) == '\'') { + if ((i+1) < adjustedPtn.length() && adjustedPtn.charAt(i+1) == 0x0027 /* ' */) { ++i; } else { inQuote = ! inQuote; diff --git a/deps/icu-small/source/i18n/dtitvinf.cpp b/deps/icu-small/source/i18n/dtitvinf.cpp index 4553159e6c5d81..07129db928b31a 100644 --- a/deps/icu-small/source/i18n/dtitvinf.cpp +++ b/deps/icu-small/source/i18n/dtitvinf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************************* * Copyright (C) 2008-2016, International Business Machines Corporation and * others. All Rights Reserved. @@ -222,131 +224,83 @@ static const UChar PATH_SUFFIX[] = {SOLIDUS, LOW_I, LOW_N, LOW_T, LOW_E, LOW_R, /** * Sink for enumerating all of the date interval skeletons. - * Contains inner sink structs, each one corresponding to a type of resource table. - * The outer struct finds the dateInterval table or an alias. */ -struct DateIntervalSink : public ResourceTableSink { +struct DateIntervalInfo::DateIntervalSink : public ResourceSink { - /** - * Sink to handle each skeleton table. - */ - struct SkeletonSink : public ResourceTableSink { - SkeletonSink(DateIntervalSink &sink) : outer(sink) {} - virtual ~SkeletonSink(); - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t, UErrorCode &errorCode) { - if (U_SUCCESS(errorCode)) { - outer.currentSkeleton = key; - return &outer.patternSink; - } - return NULL; - } - - DateIntervalSink &outer; - } skeletonSink; - - /** - * Sink to store the date interval pattern for each skeleton pattern character. - */ - struct PatternSink : public ResourceTableSink { - PatternSink(DateIntervalSink &sink) : outer(sink) {} - virtual ~PatternSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - // Process the key - UCalendarDateFields calendarField = validateAndProcessPatternLetter(key); - - // If the calendar field has a valid value - if (calendarField < UCAL_FIELD_COUNT) { - // Set the interval pattern - setIntervalPatternIfAbsent(calendarField, value, errorCode); - } else { - errorCode = U_INVALID_FORMAT_ERROR; - } - } - - UCalendarDateFields validateAndProcessPatternLetter(const char *patternLetter) { - // Check that patternLetter is just one letter - char c0; - if ((c0 = patternLetter[0]) != 0 && patternLetter[1] == 0) { - // Check that the pattern letter is accepted - if (c0 == 'y') { - return UCAL_YEAR; - } else if (c0 == 'M') { - return UCAL_MONTH; - } else if (c0 == 'd') { - return UCAL_DATE; - } else if (c0 == 'a') { - return UCAL_AM_PM; - } else if (c0 == 'h' || c0 == 'H') { - return UCAL_HOUR; - } else if (c0 == 'm') { - return UCAL_MINUTE; - }// TODO(ticket:12190): Why icu4c doesn't accept the calendar field "s" but icu4j does? - } - return UCAL_FIELD_COUNT; - } - - /** - * Stores the interval pattern for the current skeleton in the internal data structure - * if it's not present. - */ - void setIntervalPatternIfAbsent(UCalendarDateFields lrgDiffCalUnit, - const ResourceValue &value, UErrorCode &errorCode) { - // Check if the pattern has already been stored on the data structure - DateIntervalInfo::IntervalPatternIndex index = - outer.dateIntervalInfo.calendarFieldToIntervalIndex(lrgDiffCalUnit, errorCode); - if (U_FAILURE(errorCode)) { return; } - - UnicodeString skeleton(outer.currentSkeleton, -1, US_INV); - UnicodeString* patternsOfOneSkeleton = - (UnicodeString*)(outer.dateIntervalInfo.fIntervalPatterns->get(skeleton)); - - if (patternsOfOneSkeleton == NULL || patternsOfOneSkeleton[index].isEmpty()) { - UnicodeString pattern = value.getUnicodeString(errorCode); - outer.dateIntervalInfo.setIntervalPatternInternally(skeleton, lrgDiffCalUnit, - pattern, errorCode); - } - } - - DateIntervalSink &outer; - } patternSink; + // Output data + DateIntervalInfo &dateIntervalInfo; + // Next calendar type + UnicodeString nextCalendarType; DateIntervalSink(DateIntervalInfo &diInfo, const char *currentCalendarType) - : skeletonSink(*this), patternSink(*this), dateIntervalInfo(diInfo), - nextCalendarType(currentCalendarType, -1, US_INV), currentSkeleton(NULL) { } + : dateIntervalInfo(diInfo), nextCalendarType(currentCalendarType, -1, US_INV) { } virtual ~DateIntervalSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - // Check if it's an alias of intervalFormats - if (U_FAILURE(errorCode) || value.getType() != URES_ALIAS - || uprv_strcmp(key, gIntervalDateTimePatternTag) != 0) { - return; - } + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } - // Get the calendar type for the alias path. - const UnicodeString &aliasPath = value.getAliasUnicodeString(errorCode); + // Iterate over all the calendar entries and only pick the 'intervalFormats' table. + ResourceTable dateIntervalData = value.getTable(errorCode); if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; dateIntervalData.getKeyAndValue(i, key, value); i++) { + if (uprv_strcmp(key, gIntervalDateTimePatternTag) != 0) { + continue; + } - nextCalendarType.remove(); - getCalendarTypeFromPath(aliasPath, nextCalendarType, errorCode); + // Handle aliases and tables. Ignore the rest. + if (value.getType() == URES_ALIAS) { + // Get the calendar type for the alias path. + const UnicodeString &aliasPath = value.getAliasUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { return; } - if (U_FAILURE(errorCode)) { - resetNextCalendarType(); + nextCalendarType.remove(); + getCalendarTypeFromPath(aliasPath, nextCalendarType, errorCode); + + if (U_FAILURE(errorCode)) { + resetNextCalendarType(); + } + break; + + } else if (value.getType() == URES_TABLE) { + // Iterate over all the skeletons in the 'intervalFormat' table. + ResourceTable skeletonData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; skeletonData.getKeyAndValue(j, key, value); j++) { + if (value.getType() == URES_TABLE) { + // Process the skeleton + processSkeletonTable(key, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } + break; + } } } - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t, UErrorCode &errorCode) { - // Check if it's the intervalFormat table - if (U_SUCCESS(errorCode) && uprv_strcmp(key, gIntervalDateTimePatternTag) == 0) { - return &skeletonSink; + /** + * Processes the patterns for a skeleton table + */ + void processSkeletonTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + + // Iterate over all the patterns in the current skeleton table + const char *currentSkeleton = key; + ResourceTable patternData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t k = 0; patternData.getKeyAndValue(k, key, value); k++) { + if (value.getType() == URES_STRING) { + // Process the key + UCalendarDateFields calendarField = validateAndProcessPatternLetter(key); + + // If the calendar field has a valid value + if (calendarField < UCAL_FIELD_COUNT) { + // Set the interval pattern + setIntervalPatternIfAbsent(currentSkeleton, calendarField, value, errorCode); + if (U_FAILURE(errorCode)) { return; } + } + } } - return NULL; } /** @@ -364,6 +318,53 @@ struct DateIntervalSink : public ResourceTableSink { path.extractBetween(PATH_PREFIX_LENGTH, path.length() - PATH_SUFFIX_LENGTH, calendarType); } + /** + * Validates and processes the pattern letter + */ + UCalendarDateFields validateAndProcessPatternLetter(const char *patternLetter) { + // Check that patternLetter is just one letter + char c0; + if ((c0 = patternLetter[0]) != 0 && patternLetter[1] == 0) { + // Check that the pattern letter is accepted + if (c0 == 'y') { + return UCAL_YEAR; + } else if (c0 == 'M') { + return UCAL_MONTH; + } else if (c0 == 'd') { + return UCAL_DATE; + } else if (c0 == 'a') { + return UCAL_AM_PM; + } else if (c0 == 'h' || c0 == 'H') { + return UCAL_HOUR; + } else if (c0 == 'm') { + return UCAL_MINUTE; + }// TODO(ticket:12190): Why icu4c doesn't accept the calendar field "s" but icu4j does? + } + return UCAL_FIELD_COUNT; + } + + /** + * Stores the interval pattern for the current skeleton in the internal data structure + * if it's not present. + */ + void setIntervalPatternIfAbsent(const char *currentSkeleton, UCalendarDateFields lrgDiffCalUnit, + const ResourceValue &value, UErrorCode &errorCode) { + // Check if the pattern has already been stored on the data structure + IntervalPatternIndex index = + dateIntervalInfo.calendarFieldToIntervalIndex(lrgDiffCalUnit, errorCode); + if (U_FAILURE(errorCode)) { return; } + + UnicodeString skeleton(currentSkeleton, -1, US_INV); + UnicodeString* patternsOfOneSkeleton = + (UnicodeString*)(dateIntervalInfo.fIntervalPatterns->get(skeleton)); + + if (patternsOfOneSkeleton == NULL || patternsOfOneSkeleton[index].isEmpty()) { + UnicodeString pattern = value.getUnicodeString(errorCode); + dateIntervalInfo.setIntervalPatternInternally(skeleton, lrgDiffCalUnit, + pattern, errorCode); + } + } + const UnicodeString &getNextCalendarType() { return nextCalendarType; } @@ -371,22 +372,10 @@ struct DateIntervalSink : public ResourceTableSink { void resetNextCalendarType() { nextCalendarType.setToBogus(); } - - - // Output data - DateIntervalInfo &dateIntervalInfo; - - // Next calendar type - UnicodeString nextCalendarType; - - // Current skeleton table being enumerated - const char *currentSkeleton; }; // Virtual destructors must be defined out of line. -DateIntervalSink::SkeletonSink::~SkeletonSink() {} -DateIntervalSink::PatternSink::~PatternSink() {} -DateIntervalSink::~DateIntervalSink() {} +DateIntervalInfo::DateIntervalSink::~DateIntervalSink() {} @@ -472,7 +461,7 @@ DateIntervalInfo::initializeData(const Locale& locale, UErrorCode& status) sink.resetNextCalendarType(); // Get all resources for this calendar type - ures_getAllTableItemsWithFallback(calBundle, calType, sink, status); + ures_getAllItemsWithFallback(calBundle, calType, sink, status); } } } diff --git a/deps/icu-small/source/i18n/dtptngen.cpp b/deps/icu-small/source/i18n/dtptngen.cpp index 2a6b35b51182cc..17e7ec7cde8a21 100644 --- a/deps/icu-small/source/i18n/dtptngen.cpp +++ b/deps/icu-small/source/i18n/dtptngen.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -31,13 +33,13 @@ #include "cmemory.h" #include "cstring.h" #include "locbased.h" -#include "gregoimp.h" #include "hash.h" #include "uhash.h" #include "uresimp.h" #include "dtptngen_impl.h" #include "ucln_in.h" #include "charstr.h" +#include "uassert.h" #if U_CHARSET_FAMILY==U_EBCDIC_FAMILY /** @@ -221,10 +223,6 @@ static const char* const CLDR_FIELD_NAME[] = { "hour", "minute", "second", "*", "zone" }; -static const char* const Resource_Fields[] = { - "day", "dayperiod", "era", "hour", "minute", "month", "second", "week", - "weekday", "year", "zone", "quarter" }; - // For appendItems static const UChar UDATPG_ItemFormat[]= {0x7B, 0x30, 0x7D, 0x20, 0x251C, 0x7B, 0x32, 0x7D, 0x3A, 0x20, 0x7B, 0x31, 0x7D, 0x2524, 0}; // {0} \u251C{2}: {1}\u2524 @@ -392,12 +390,12 @@ UInitOnce initOnce = U_INITONCE_INITIALIZER; UHashtable *localeToAllowedHourFormatsMap = NULL; // Value deleter for hashmap. -void deleteAllowedHourFormats(void *ptr) { +U_CFUNC void U_CALLCONV deleteAllowedHourFormats(void *ptr) { uprv_free(ptr); } // Close hashmap at cleanup. -UBool allowedHourFormatsCleanup() { +U_CFUNC UBool U_CALLCONV allowedHourFormatsCleanup() { uhash_close(localeToAllowedHourFormatsMap); return TRUE; } @@ -420,11 +418,8 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) { skipMatcher = NULL; fAvailableFormatKeyHash=NULL; - addCanonicalItems(); + addCanonicalItems(status); addICUPatterns(locale, status); - if (U_FAILURE(status)) { - return; - } addCLDRData(locale, status); setDateTimeFromCalendar(locale, status); setDecimalSymbols(locale, status); @@ -434,80 +429,51 @@ DateTimePatternGenerator::initData(const Locale& locale, UErrorCode &status) { namespace { -struct AllowedHourFormatsSink : public ResourceTableSink { +struct AllowedHourFormatsSink : public ResourceSink { // Initialize sub-sinks. - AllowedHourFormatsSink() : localeSink(*this), allowedListSink(*this) {} + AllowedHourFormatsSink() {} virtual ~AllowedHourFormatsSink(); - // Entry point. - virtual ResourceTableSink *getOrCreateTableSink(const char *key, int32_t, UErrorCode &status) { - if (U_FAILURE(status)) { return NULL; } - - locale = key; - return &localeSink; - } - - struct LocaleSink : public ResourceTableSink { - AllowedHourFormatsSink &outer; - LocaleSink(AllowedHourFormatsSink &outer) : outer(outer) {} - virtual ~LocaleSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &status) { - if (U_FAILURE(status)) { return; } - - if (uprv_strcmp(key, "allowed") == 0) { - outer.allowedFormats = static_cast(uprv_malloc(2 * sizeof(int32_t))); - outer.allowedFormatsLength = 1; - if (outer.allowedFormats == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - outer.allowedFormats[0] = outer.getHourFormatFromUnicodeString( - value.getUnicodeString(status)); - } - } - - virtual ResourceArraySink *getOrCreateArraySink(const char *key, int32_t size, UErrorCode &status) { - if (U_FAILURE(status)) { return NULL; } - - if (uprv_strcmp(key, "allowed") == 0) { - outer.allowedFormats = static_cast(uprv_malloc((size + 1) * sizeof(int32_t))); - outer.allowedFormatsLength = size; - if (outer.allowedFormats == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return NULL; - } else { - return &outer.allowedListSink; + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable timeData = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; timeData.getKeyAndValue(i, key, value); ++i) { + const char *regionOrLocale = key; + ResourceTable formatList = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t j = 0; formatList.getKeyAndValue(j, key, value); ++j) { + if (uprv_strcmp(key, "allowed") == 0) { // Ignore "preferred" list. + LocalMemory list; + int32_t length; + if (value.getType() == URES_STRING) { + if (list.allocateInsteadAndReset(2) == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + list[0] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode)); + length = 1; + } + else { + ResourceArray allowedFormats = value.getArray(errorCode); + length = allowedFormats.getSize(); + if (list.allocateInsteadAndReset(length + 1) == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + for (int32_t k = 0; k < length; ++k) { + allowedFormats.getValue(k, value); + list[k] = getHourFormatFromUnicodeString(value.getUnicodeString(errorCode)); + } + } + list[length] = ALLOWED_HOUR_FORMAT_UNKNOWN; + uhash_put(localeToAllowedHourFormatsMap, + const_cast(regionOrLocale), list.orphan(), &errorCode); + if (U_FAILURE(errorCode)) { return; } } } - return NULL; - } - - virtual void leave(UErrorCode &status) { - if (U_FAILURE(status) || outer.allowedFormats == NULL) { return; } - - outer.allowedFormats[outer.allowedFormatsLength] = ALLOWED_HOUR_FORMAT_UNKNOWN; - uhash_put(localeToAllowedHourFormatsMap, const_cast(outer.locale), outer.allowedFormats, &status); - outer.allowedFormats = NULL; } - } localeSink; - - struct AllowedListSink : public ResourceArraySink { - AllowedHourFormatsSink &outer; - AllowedListSink(AllowedHourFormatsSink &outer) : outer(outer) {} - virtual ~AllowedListSink(); - - virtual void put(int32_t index, const ResourceValue &value, UErrorCode &status) { - if (U_FAILURE(status)) { return; } - - outer.allowedFormats[index] = outer.getHourFormatFromUnicodeString( - value.getUnicodeString(status)); - } - } allowedListSink; - - const char *locale; - int32_t *allowedFormats; - int32_t allowedFormatsLength; + } AllowedHourFormat getHourFormatFromUnicodeString(UnicodeString s) { if (s.length() == 1) { @@ -527,10 +493,8 @@ struct AllowedHourFormatsSink : public ResourceTableSink { } // namespace AllowedHourFormatsSink::~AllowedHourFormatsSink() {} -AllowedHourFormatsSink::LocaleSink::~LocaleSink() {} -AllowedHourFormatsSink::AllowedListSink::~AllowedListSink() {} -void DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { +U_CFUNC void U_CALLCONV DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { if (U_FAILURE(status)) { return; } localeToAllowedHourFormatsMap = uhash_open( uhash_hashChars, uhash_compareChars, NULL, &status); @@ -544,14 +508,13 @@ void DateTimePatternGenerator::loadAllowedHourFormatsData(UErrorCode &status) { // into the hashmap, store 6 single-value sub-arrays right at the beginning of the // vector (at index enum*2) for easy data sharing, copy sub-arrays into runtime // object. Remember to clean up the vector, too. - ures_getAllTableItemsWithFallback(rb.getAlias(), "timeData", sink, status); + ures_getAllItemsWithFallback(rb.getAlias(), "timeData", sink, status); ucln_i18n_registerCleanup(UCLN_I18N_ALLOWED_HOUR_FORMATS, allowedHourFormatsCleanup); } void DateTimePatternGenerator::getAllowedHourFormats(const Locale &locale, UErrorCode &status) { if (U_FAILURE(status)) { return; } - const char *localeID = locale.getName(); char maxLocaleID[ULOC_FULLNAME_CAPACITY]; int32_t length = uloc_addLikelySubtags(localeID, maxLocaleID, ULOC_FULLNAME_CAPACITY, &status); @@ -632,41 +595,38 @@ DateTimePatternGenerator::staticGetBaseSkeleton( void DateTimePatternGenerator::addICUPatterns(const Locale& locale, UErrorCode& status) { + if (U_FAILURE(status)) { return; } UnicodeString dfPattern; UnicodeString conflictingString; DateFormat* df; - if (U_FAILURE(status)) { - return; - } - // Load with ICU patterns for (int32_t i=DateFormat::kFull; i<=DateFormat::kShort; i++) { DateFormat::EStyle style = (DateFormat::EStyle)i; df = DateFormat::createDateInstance(style, locale); SimpleDateFormat* sdf; if (df != NULL && (sdf = dynamic_cast(df)) != NULL) { - addPattern(sdf->toPattern(dfPattern), FALSE, conflictingString, status); + sdf->toPattern(dfPattern); + addPattern(dfPattern, FALSE, conflictingString, status); } // TODO Maybe we should return an error when the date format isn't simple. delete df; - if (U_FAILURE(status)) { - return; - } + if (U_FAILURE(status)) { return; } df = DateFormat::createTimeInstance(style, locale); if (df != NULL && (sdf = dynamic_cast(df)) != NULL) { - addPattern(sdf->toPattern(dfPattern), FALSE, conflictingString, status); - // HACK for hh:ss - if ( i==DateFormat::kMedium ) { - hackPattern = dfPattern; + sdf->toPattern(dfPattern); + addPattern(dfPattern, FALSE, conflictingString, status); + + // TODO: C++ and Java are inconsistent (see #12568). + // C++ uses MEDIUM, but Java uses SHORT. + if ( i==DateFormat::kShort && !dfPattern.isEmpty() ) { + consumeShortTimePattern(dfPattern, status); } } // TODO Maybe we should return an error when the date format isn't simple. delete df; - if (U_FAILURE(status)) { - return; - } + if (U_FAILURE(status)) { return; } } } @@ -721,221 +681,223 @@ DateTimePatternGenerator::hackTimes(const UnicodeString& hackPattern, UErrorCode static const UChar hourFormatChars[] = { CAP_H, LOW_H, CAP_K, LOW_K, 0 }; // HhKk, the hour format characters void -DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& err) { - UResourceBundle *rb, *calTypeBundle, *calBundle; - UResourceBundle *patBundle, *fieldBundle, *fBundle; - UnicodeString rbPattern, value, field; - UnicodeString conflictingPattern; - const char *key=NULL; - int32_t i; - - UnicodeString defaultItemFormat(TRUE, UDATPG_ItemFormat, UPRV_LENGTHOF(UDATPG_ItemFormat)-1); // Read-only alias. - - err = U_ZERO_ERROR; - - fDefaultHourFormatChar = 0; - for (i=0; i0) { - hackTimes(hackPattern, err); - } +// Virtual destructors must be defined out of line. +DateTimePatternGenerator::AppendItemFormatsSink::~AppendItemFormatsSink() {} +DateTimePatternGenerator::AppendItemNamesSink::~AppendItemNamesSink() {} +DateTimePatternGenerator::AvailableFormatsSink::~AvailableFormatsSink() {} + +void +DateTimePatternGenerator::addCLDRData(const Locale& locale, UErrorCode& errorCode) { + if (U_FAILURE(errorCode)) { return; } + UnicodeString rbPattern, value, field; + CharString path; + + LocalUResourceBundlePointer rb(ures_open(NULL, locale.getName(), &errorCode)); + if (U_FAILURE(errorCode)) { return; } + + CharString calendarTypeToUse; // to be filled in with the type to use, if all goes well + getCalendarTypeToUse(locale, calendarTypeToUse, errorCode); + if (U_FAILURE(errorCode)) { return; } + + // Local err to ignore resource not found exceptions + UErrorCode err = U_ZERO_ERROR; + + // Load append item formats. + AppendItemFormatsSink appendItemFormatsSink(*this); + path.clear() + .append(DT_DateTimeCalendarTag, errorCode) + .append('/', errorCode) + .append(calendarTypeToUse, errorCode) + .append('/', errorCode) + .append(DT_DateTimeAppendItemsTag, errorCode); // i.e., calendar/xxx/appendItems + if (U_FAILURE(errorCode)) { return; } + ures_getAllItemsWithFallback(rb.getAlias(), path.data(), appendItemFormatsSink, err); + appendItemFormatsSink.fillInMissing(); + + // Load CLDR item names. + err = U_ZERO_ERROR; + AppendItemNamesSink appendItemNamesSink(*this); + ures_getAllItemsWithFallback(rb.getAlias(), DT_DateTimeFieldsTag, appendItemNamesSink, err); + appendItemNamesSink.fillInMissing(); + + // Load the available formats from CLDR. + err = U_ZERO_ERROR; + initHashtable(errorCode); + if (U_FAILURE(errorCode)) { return; } + AvailableFormatsSink availableFormatsSink(*this); + path.clear() + .append(DT_DateTimeCalendarTag, errorCode) + .append('/', errorCode) + .append(calendarTypeToUse, errorCode) + .append('/', errorCode) + .append(DT_DateTimeAvailableFormatsTag, errorCode); // i.e., calendar/xxx/availableFormats + if (U_FAILURE(errorCode)) { return; } + ures_getAllItemsWithFallback(rb.getAlias(), path.data(), availableFormatsSink, err); } void @@ -949,7 +911,6 @@ DateTimePatternGenerator::initHashtable(UErrorCode& err) { } } - void DateTimePatternGenerator::setAppendItemFormat(UDateTimePatternField field, const UnicodeString& value) { appendItemFormats[field] = value; @@ -970,7 +931,12 @@ DateTimePatternGenerator::setAppendItemName(UDateTimePatternField field, const U } const UnicodeString& -DateTimePatternGenerator:: getAppendItemName(UDateTimePatternField field) const { +DateTimePatternGenerator::getAppendItemName(UDateTimePatternField field) const { + return appendItemNames[field]; +} + +UnicodeString& +DateTimePatternGenerator::getMutableAppendItemName(UDateTimePatternField field) { return appendItemNames[field]; } @@ -1096,12 +1062,15 @@ DateTimePatternGenerator::getDecimal() const { } void -DateTimePatternGenerator::addCanonicalItems() { +DateTimePatternGenerator::addCanonicalItems(UErrorCode& status) { + if (U_FAILURE(status)) { return; } UnicodeString conflictingPattern; - UErrorCode status = U_ZERO_ERROR; for (int32_t i=0; i 0) { + addPattern(UnicodeString(Canonical_Items[i]), FALSE, conflictingPattern, status); + } + if (U_FAILURE(status)) { return; } } } @@ -1123,16 +1092,35 @@ DateTimePatternGenerator::setDateTimeFromCalendar(const Locale& locale, UErrorCo int32_t resStrLen = 0; Calendar* fCalendar = Calendar::createInstance(locale, status); - CalendarData calData(locale, fCalendar?fCalendar->getType():NULL, status); - UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag, status); - if (U_FAILURE(status)) return; + if (U_FAILURE(status)) { return; } + + LocalUResourceBundlePointer calData(ures_open(NULL, locale.getBaseName(), &status)); + ures_getByKey(calData.getAlias(), DT_DateTimeCalendarTag, calData.getAlias(), &status); - if (ures_getSize(dateTimePatterns) <= DateFormat::kDateTime) + LocalUResourceBundlePointer dateTimePatterns; + if (fCalendar != NULL && fCalendar->getType() != NULL && *fCalendar->getType() != '\0' + && uprv_strcmp(fCalendar->getType(), DT_DateTimeGregorianTag) != 0) { + dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), fCalendar->getType(), + NULL, &status)); + ures_getByKeyWithFallback(dateTimePatterns.getAlias(), DT_DateTimePatternsTag, + dateTimePatterns.getAlias(), &status); + } + + if (dateTimePatterns.isNull() || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + dateTimePatterns.adoptInstead(ures_getByKeyWithFallback(calData.getAlias(), DT_DateTimeGregorianTag, + dateTimePatterns.orphan(), &status)); + ures_getByKeyWithFallback(dateTimePatterns.getAlias(), DT_DateTimePatternsTag, + dateTimePatterns.getAlias(), &status); + } + if (U_FAILURE(status)) { return; } + + if (ures_getSize(dateTimePatterns.getAlias()) <= DateFormat::kDateTime) { status = U_INVALID_FORMAT_ERROR; return; } - resStr = ures_getStringByIndex(dateTimePatterns, (int32_t)DateFormat::kDateTime, &resStrLen, &status); + resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), (int32_t)DateFormat::kDateTime, &resStrLen, &status); setDateTimeFormat(UnicodeString(TRUE, resStr, resStrLen)); delete fCalendar; @@ -1324,8 +1312,8 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, } if ((flags & kDTPGFixFractionalSeconds) != 0 && typeValue == UDATPG_SECOND_FIELD) { - UnicodeString newField=dtMatcher->skeleton.original[UDATPG_FRACTIONAL_SECOND_FIELD]; - field = field + decimal + newField; + field += decimal; + dtMatcher->skeleton.original.appendFieldTo(UDATPG_FRACTIONAL_SECOND_FIELD, field); } else if (dtMatcher->skeleton.type[typeValue]!=0) { // Here: // - "reqField" is the field from the originally requested skeleton, with length @@ -1349,9 +1337,9 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, // a) The length of the field in the skeleton (skelFieldLen) is equal to reqFieldLen. // b) The pattern field is numeric and the skeleton field is not, or vice versa. - UnicodeString reqField = dtMatcher->skeleton.original[typeValue]; - int32_t reqFieldLen = reqField.length(); - if (reqField.charAt(0) == CAP_E && reqFieldLen < 3) + UChar reqFieldChar = dtMatcher->skeleton.original.getFieldChar(typeValue); + int32_t reqFieldLen = dtMatcher->skeleton.original.getFieldLength(typeValue); + if (reqFieldChar == CAP_E && reqFieldLen < 3) reqFieldLen = 3; // 1-3 for E are equivalent to 3 for c,e int32_t adjFieldLen = reqFieldLen; if ( (typeValue==UDATPG_HOUR_FIELD && (options & UDATPG_MATCH_HOUR_FIELD_LENGTH)==0) || @@ -1359,8 +1347,7 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, (typeValue==UDATPG_SECOND_FIELD && (options & UDATPG_MATCH_SECOND_FIELD_LENGTH)==0) ) { adjFieldLen = field.length(); } else if (specifiedSkeleton) { - UnicodeString skelField = specifiedSkeleton->original[typeValue]; - int32_t skelFieldLen = skelField.length(); + int32_t skelFieldLen = specifiedSkeleton->original.getFieldLength(typeValue); UBool patFieldIsNumeric = (row->type > 0); UBool skelFieldIsNumeric = (specifiedSkeleton->type[typeValue] > 0); if (skelFieldLen == reqFieldLen || (patFieldIsNumeric && !skelFieldIsNumeric) || (skelFieldIsNumeric && !patFieldIsNumeric)) { @@ -1368,9 +1355,12 @@ DateTimePatternGenerator::adjustFieldTypes(const UnicodeString& pattern, adjFieldLen = field.length(); } } - UChar c = (typeValue!= UDATPG_HOUR_FIELD && typeValue!= UDATPG_MONTH_FIELD && - typeValue!= UDATPG_WEEKDAY_FIELD && (typeValue!= UDATPG_YEAR_FIELD || reqField.charAt(0)==CAP_Y))? - reqField.charAt(0): field.charAt(0); + UChar c = (typeValue!= UDATPG_HOUR_FIELD + && typeValue!= UDATPG_MONTH_FIELD + && typeValue!= UDATPG_WEEKDAY_FIELD + && (typeValue!= UDATPG_YEAR_FIELD || reqFieldChar==CAP_Y)) + ? reqFieldChar + : field.charAt(0); if (typeValue == UDATPG_HOUR_FIELD && (flags & kDTPGSkeletonUsesCapJ) != 0) { c = fDefaultHourFormatChar; } @@ -1733,36 +1723,19 @@ PatternMap::getPatternFromSkeleton(PtnSkeleton& skeleton, const PtnSkeleton** sp } // find boot entry - UChar baseChar='\0'; - for (int32_t i=0; iskeleton->original[i].compare(skeleton.original[i]) != 0 ) - { - break; - } - } + equal = curElem->skeleton->original == skeleton.original; } else { // called from DateTimePatternGenerator::getRedundants, use baseOriginal - for (i=0; iskeleton->baseOriginal[i].compare(skeleton.baseOriginal[i]) != 0 ) - { - break; - } - } + equal = curElem->skeleton->baseOriginal == skeleton.baseOriginal; } - if (i == UDATPG_FIELD_COUNT) { + if (equal) { if (specifiedSkeletonPtr && curElem->skeletonWasSpecified) { *specifiedSkeletonPtr = curElem->skeleton; } @@ -1866,37 +1839,35 @@ void DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton& skeletonResult) { int32_t i; for (i=0; iset(pattern); for (i=0; i < fp->itemNumber; i++) { - UnicodeString field = fp->items[i]; - if ( field.charAt(0) == LOW_A ) { + const UnicodeString& value = fp->items[i]; + if ( value.charAt(0) == LOW_A ) { continue; // skip 'a' } - if ( fp->isQuoteLiteral(field) ) { + if ( fp->isQuoteLiteral(value) ) { UnicodeString quoteLiteral; fp->getQuoteLiteral(quoteLiteral, &i); continue; } - int32_t canonicalIndex = fp->getCanonicalIndex(field); + int32_t canonicalIndex = fp->getCanonicalIndex(value); if (canonicalIndex < 0 ) { continue; } const dtTypeElem *row = &dtTypes[canonicalIndex]; - int32_t typeValue = row->field; - skeletonResult.original[typeValue]=field; + int32_t field = row->field; + skeletonResult.original.populate(field, value); UChar repeatChar = row->patternChar; int32_t repeatCount = row->minLen; // #7930 removes cap at 3 - while (repeatCount-- > 0) { - skeletonResult.baseOriginal[typeValue] += repeatChar; - } - int16_t subTypeValue = row->type; + skeletonResult.baseOriginal.populate(field, repeatChar, repeatCount); + int16_t subField = row->type; if ( row->type > 0) { - subTypeValue += field.length(); + subField += value.length(); } - skeletonResult.type[typeValue] = subTypeValue; + skeletonResult.type[field] = subField; } copyFrom(skeletonResult); } @@ -1904,23 +1875,13 @@ DateTimeMatcher::set(const UnicodeString& pattern, FormatParser* fp, PtnSkeleton void DateTimeMatcher::getBasePattern(UnicodeString &result ) { result.remove(); // Reset the result first. - for (int32_t i=0; iskeleton.type[i]=newSkeleton.type[i]; - this->skeleton.original[i]=newSkeleton.original[i]; - this->skeleton.baseOriginal[i]=newSkeleton.baseOriginal[i]; - } + skeleton.copyFrom(newSkeleton); } void DateTimeMatcher::copyFrom() { // same as clear - for (int32_t i=0; iskeleton.type[i]=0; - this->skeleton.original[i].remove(); - this->skeleton.baseOriginal[i].remove(); - } + skeleton.clear(); } UBool DateTimeMatcher::equals(const DateTimeMatcher* other) const { - if (other==NULL) { - return FALSE; - } - for (int32_t i=0; iskeleton.original[i]!=other->skeleton.original[i] ) { - return FALSE; - } - } - return TRUE; + if (other==NULL) { return FALSE; } + return skeleton.original == other->skeleton.original; } int32_t @@ -2074,7 +2020,7 @@ FormatParser::getCanonicalIndex(const UnicodeString& s, UBool strict) { } int32_t i = 0; int32_t bestRow = -1; - while (dtTypes[i].patternChar != '\0') { + while (dtTypes[i].patternChar != 0x0000) { if ( dtTypes[i].patternChar != ch ) { ++i; continue; @@ -2246,52 +2192,116 @@ PatternMapIterator::next() { return *matcher; } -PtnSkeleton::PtnSkeleton() { + +SkeletonFields::SkeletonFields() { + // Set initial values to zero + clear(); } +void SkeletonFields::clear() { + uprv_memset(chars, 0, sizeof(chars)); + uprv_memset(lengths, 0, sizeof(lengths)); +} -PtnSkeleton::PtnSkeleton(const PtnSkeleton& other) { - for (int32_t i=0; itype[i]=other.type[i]; - this->original[i]=other.original[i]; - this->baseOriginal[i]=other.baseOriginal[i]; +void SkeletonFields::copyFrom(const SkeletonFields& other) { + uprv_memcpy(chars, other.chars, sizeof(chars)); + uprv_memcpy(lengths, other.lengths, sizeof(lengths)); +} + +void SkeletonFields::clearField(int32_t field) { + chars[field] = 0; + lengths[field] = 0; +} + +UChar SkeletonFields::getFieldChar(int32_t field) const { + return chars[field]; +} + +int32_t SkeletonFields::getFieldLength(int32_t field) const { + return lengths[field]; +} + +void SkeletonFields::populate(int32_t field, const UnicodeString& value) { + populate(field, value.charAt(0), value.length()); +} + +void SkeletonFields::populate(int32_t field, UChar ch, int32_t length) { + chars[field] = (int8_t) ch; + lengths[field] = (int8_t) length; +} + +UBool SkeletonFields::isFieldEmpty(int32_t field) const { + return lengths[field] == 0; +} + +UnicodeString& SkeletonFields::appendTo(UnicodeString& string) const { + for (int32_t i = 0; i < UDATPG_FIELD_COUNT; ++i) { + appendFieldTo(i, string); } + return string; } -UBool -PtnSkeleton::equals(const PtnSkeleton& other) { - for (int32_t i=0; isize() % 3) != 0) { + if (adopt->size() == 0) { + delete adopt; + adopt = NULL; + } else if ((adopt->size() % 3) != 0) { status = U_ILLEGAL_ARGUMENT_ERROR; } else { for (int i = 1; i < adopt->size(); i += 3) { diff --git a/deps/icu-small/source/i18n/funcrepl.cpp b/deps/icu-small/source/i18n/funcrepl.cpp index 7ad5fc20bf5172..683e00a2c8db51 100644 --- a/deps/icu-small/source/i18n/funcrepl.cpp +++ b/deps/icu-small/source/i18n/funcrepl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2012, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/funcrepl.h b/deps/icu-small/source/i18n/funcrepl.h index ff00b55abfbb52..954150cf002c40 100644 --- a/deps/icu-small/source/i18n/funcrepl.h +++ b/deps/icu-small/source/i18n/funcrepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/gender.cpp b/deps/icu-small/source/i18n/gender.cpp index 0c2fca576f2982..4847ce95848e1d 100644 --- a/deps/icu-small/source/i18n/gender.cpp +++ b/deps/icu-small/source/i18n/gender.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/gregocal.cpp b/deps/icu-small/source/i18n/gregocal.cpp index b8bd8e293de9ce..959228ab49b31b 100644 --- a/deps/icu-small/source/i18n/gregocal.cpp +++ b/deps/icu-small/source/i18n/gregocal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/gregoimp.cpp b/deps/icu-small/source/i18n/gregoimp.cpp index 6b3277107f5217..fa886f5a6fa037 100644 --- a/deps/icu-small/source/i18n/gregoimp.cpp +++ b/deps/icu-small/source/i18n/gregoimp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2008, International Business Machines @@ -18,10 +20,6 @@ #include "cstring.h" #include "uassert.h" -#if defined(U_DEBUG_CALDATA) -#include -#endif - U_NAMESPACE_BEGIN int32_t ClockMath::floorDivide(int32_t numerator, int32_t denominator) { @@ -157,171 +155,6 @@ int32_t Grego::dayOfWeekInMonth(int32_t year, int32_t month, int32_t dom) { return weekInMonth; } -/* ---- CalendarData ------ */ - -#define U_CALENDAR_KEY "calendar" -#define U_GREGORIAN_KEY "gregorian" -#define U_FORMAT_KEY "format" -#define U_DEFAULT_KEY "default" -#define U_CALENDAR_DATA ((char*)0) - - -// CalendarData::CalendarData(const Locale& loc, UErrorCode& status) -// : fFillin(NULL), fBundle(NULL), fFallback(NULL) { -// initData(loc.getBaseName(), (char*) "???", status); -// } - -CalendarData::CalendarData(const Locale& loc, const char *type, UErrorCode& status) - : fFillin(NULL), fOtherFillin(NULL), fBundle(NULL), fFallback(NULL) { - initData(loc.getBaseName(), type, status); -} - -void CalendarData::initData(const char *locale, const char *type, UErrorCode& status) { - fOtherFillin = ures_open(U_CALENDAR_DATA, locale, &status); - fFillin = ures_getByKey(fOtherFillin, U_CALENDAR_KEY, fFillin, &status); - - if((type != NULL) && - (*type != '\0') && - (uprv_strcmp(type, U_GREGORIAN_KEY))) - { - fBundle = ures_getByKeyWithFallback(fFillin, type, NULL, &status); - fFallback = ures_getByKeyWithFallback(fFillin, U_GREGORIAN_KEY, NULL, &status); - -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: CalendarData(%s, %s, %s) -> main(%p, %s)=%s, fallback(%p, %s)=%s\n", - this, locale, type, u_errorName(status), fBundle, type, fBundle?ures_getLocale(fBundle, &status):"", - fFallback, U_GREGORIAN_KEY, fFallback?ures_getLocale(fFallback, &status):""); -#endif - - } else { - fBundle = ures_getByKeyWithFallback(fFillin, U_GREGORIAN_KEY, NULL, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: CalendarData(%s, %s, %s) -> main(%p, %s)=%s, fallback = NULL\n", - this, locale, type, u_errorName(status), fBundle, U_GREGORIAN_KEY, fBundle?ures_getLocale(fBundle, &status):"" ); -#endif - } -} - -CalendarData::~CalendarData() { - ures_close(fFillin); - ures_close(fBundle); - ures_close(fFallback); - ures_close(fOtherFillin); -} - -UResourceBundle* -CalendarData::getByKey(const char *key, UErrorCode& status) { - if(U_FAILURE(status)) { - return NULL; - } - - if(fBundle) { - fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s -> %s - from MAIN %s\n",this, key, u_errorName(status), ures_getLocale(fFillin, &status)); -#endif - } - if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) { - status = U_ZERO_ERROR; // retry with fallback (gregorian) - fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s -> %s - from FALLBACK %s\n",this, key, u_errorName(status), ures_getLocale(fFillin, &status)); -#endif - } - return fFillin; -} - -UResourceBundle* CalendarData::getByKey2(const char *key, const char *subKey, UErrorCode& status) { - if(U_FAILURE(status)) { - return NULL; - } - - if(fBundle) { -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: //\n"); -#endif - fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status); - fOtherFillin = ures_getByKeyWithFallback(fFillin, U_FORMAT_KEY, fOtherFillin, &status); - fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s/format/%s -> %s - from MAIN %s\n", this, key, subKey, u_errorName(status), ures_getLocale(fFillin, &status)); -#endif - } - if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) { - status = U_ZERO_ERROR; // retry with fallback (gregorian) - fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status); - fOtherFillin = ures_getByKeyWithFallback(fFillin, U_FORMAT_KEY, fOtherFillin, &status); - fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s/format/%s -> %s - from FALLBACK %s\n",this, key, subKey, u_errorName(status), ures_getLocale(fFillin,&status)); -#endif - } - -//// handling of 'default' keyword on failure: Commented out for 3.0. -// if((status == U_MISSING_RESOURCE_ERROR) && -// uprv_strcmp(subKey,U_DEFAULT_KEY)) { // avoid recursion -// #if defined (U_DEBUG_CALDATA) -// fprintf(stderr, "%p: - attempting fallback -\n", this); -// fflush(stderr); -// #endif -// UErrorCode subStatus = U_ZERO_ERROR; -// int32_t len; -// char kwBuf[128] = ""; -// const UChar *kw; -// /* fFillin = */ getByKey2(key, U_DEFAULT_KEY, subStatus); -// kw = ures_getString(fFillin, &len, &subStatus); -// if(len>126) { // too big -// len = 0; -// } -// if(U_SUCCESS(subStatus) && (len>0)) { -// u_UCharsToChars(kw, kwBuf, len+1); -// if(*kwBuf && uprv_strcmp(kwBuf,subKey)) { -// #if defined (U_DEBUG_CALDATA) -// fprintf(stderr, "%p: trying %s/format/default -> \"%s\"\n",this, key, kwBuf); -// #endif -// // now try again with the default -// status = U_ZERO_ERROR; -// /* fFillin = */ getByKey2(key, kwBuf, status); -// } -// #if defined (U_DEBUG_CALDATA) -// } else { -// fprintf(stderr, "%p: could not load %s/format/default - fail out (%s)\n",this, key, kwBuf, u_errorName(status)); -// #endif -// } -// } - - return fFillin; -} - -UResourceBundle* CalendarData::getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status) { - if(U_FAILURE(status)) { - return NULL; - } - - if(fBundle) { -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: //\n"); -#endif - fFillin = ures_getByKeyWithFallback(fBundle, key, fFillin, &status); - fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status); - fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s/%s/%s -> %s - from MAIN %s\n", this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin, &status)); -#endif - } - if(fFallback && (status == U_MISSING_RESOURCE_ERROR)) { - status = U_ZERO_ERROR; // retry with fallback (gregorian) - fFillin = ures_getByKeyWithFallback(fFallback, key, fFillin, &status); - fOtherFillin = ures_getByKeyWithFallback(fFillin, contextKey, fOtherFillin, &status); - fFillin = ures_getByKeyWithFallback(fOtherFillin, subKey, fFillin, &status); -#if defined (U_DEBUG_CALDATA) - fprintf(stderr, "%p: get %s/%s/%s -> %s - from FALLBACK %s\n",this, key, contextKey, subKey, u_errorName(status), ures_getLocale(fFillin,&status)); -#endif - } - - return fFillin; -} - U_NAMESPACE_END #endif diff --git a/deps/icu-small/source/i18n/gregoimp.h b/deps/icu-small/source/i18n/gregoimp.h index b3048946c705db..19e44c7a5a01d2 100644 --- a/deps/icu-small/source/i18n/gregoimp.h +++ b/deps/icu-small/source/i18n/gregoimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2008, International Business Machines @@ -291,71 +293,6 @@ inline int32_t Grego::gregorianShift(int32_t eyear) { return gregShift; } -/** - * This utility class provides convenient access to the data needed for a calendar. - * @internal ICU 3.0 - */ -class CalendarData : public UMemory { -public: - /** - * Construct a CalendarData from the given locale. - * @param loc locale to use. The 'calendar' keyword will be ignored. - * @param type calendar type. NULL indicates the gregorian calendar. - * No default lookup is done. - * @param status error code - */ - CalendarData(const Locale& loc, const char *type, UErrorCode& status); - - /** - * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()! - * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API. - * - * @param key Resource key to data - * @param status Error Status - * @internal - */ - UResourceBundle* getByKey(const char *key, UErrorCode& status); - - /** - * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()! - * There is an implicit key of 'format' - * data is located in: "calendar/key/format/subKey" - * for example, calendar/dayNames/format/abbreviated - * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API. - * - * @param key Resource key to data - * @param subKey Resource key to data - * @param status Error Status - * @internal - */ - UResourceBundle* getByKey2(const char *key, const char *subKey, UErrorCode& status); - - /** - * Load data for calendar. Note, this object owns the resources, do NOT call ures_close()! - * data is located in: "calendar/key/contextKey/subKey" - * for example, calendar/dayNames/standalone/narrow - * The ResourceBundle C++ API should NOT be used because it is too slow for a low level API. - * - * @param key Resource key to data - * @param contextKey Resource key to data - * @param subKey Resource key to data - * @param status Error Status - * @internal - */ - UResourceBundle* getByKey3(const char *key, const char *contextKey, const char *subKey, UErrorCode& status); - - ~CalendarData(); - -private: - void initData(const char *locale, const char *type, UErrorCode& status); - - UResourceBundle *fFillin; - UResourceBundle *fOtherFillin; - UResourceBundle *fBundle; - UResourceBundle *fFallback; - CalendarData(); // Not implemented. -}; - U_NAMESPACE_END #endif // !UCONFIG_NO_FORMATTING diff --git a/deps/icu-small/source/i18n/hebrwcal.cpp b/deps/icu-small/source/i18n/hebrwcal.cpp index 96673e5788d85b..0b329a87158733 100644 --- a/deps/icu-small/source/i18n/hebrwcal.cpp +++ b/deps/icu-small/source/i18n/hebrwcal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2016, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/hebrwcal.h b/deps/icu-small/source/i18n/hebrwcal.h index 4cb2d3ebbfe9d9..0824fb7c784e9e 100644 --- a/deps/icu-small/source/i18n/hebrwcal.h +++ b/deps/icu-small/source/i18n/hebrwcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/i18n.rc b/deps/icu-small/source/i18n/i18n.rc index cc516ee0a0589e..62fcbc738dd6f3 100644 --- a/deps/icu-small/source/i18n/i18n.rc +++ b/deps/icu-small/source/i18n/i18n.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/i18n/identifier_info.cpp b/deps/icu-small/source/i18n/identifier_info.cpp deleted file mode 100644 index 05882830a5baae..00000000000000 --- a/deps/icu-small/source/i18n/identifier_info.cpp +++ /dev/null @@ -1,310 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 2012-2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -*/ - -#include "unicode/utypes.h" - -#include "unicode/uchar.h" -#include "unicode/utf16.h" - -#include "identifier_info.h" -#include "mutex.h" -#include "scriptset.h" -#include "ucln_in.h" -#include "uvector.h" - -U_NAMESPACE_BEGIN - -static UnicodeSet *ASCII; -static ScriptSet *JAPANESE; -static ScriptSet *CHINESE; -static ScriptSet *KOREAN; -static ScriptSet *CONFUSABLE_WITH_LATIN; -static UInitOnce gIdentifierInfoInitOnce = U_INITONCE_INITIALIZER; - - -U_CDECL_BEGIN -static UBool U_CALLCONV -IdentifierInfo_cleanup(void) { - delete ASCII; - ASCII = NULL; - delete JAPANESE; - JAPANESE = NULL; - delete CHINESE; - CHINESE = NULL; - delete KOREAN; - KOREAN = NULL; - delete CONFUSABLE_WITH_LATIN; - CONFUSABLE_WITH_LATIN = NULL; - gIdentifierInfoInitOnce.reset(); - return TRUE; -} - -static void U_CALLCONV -IdentifierInfo_init(UErrorCode &status) { - ASCII = new UnicodeSet(0, 0x7f); - JAPANESE = new ScriptSet(); - CHINESE = new ScriptSet(); - KOREAN = new ScriptSet(); - CONFUSABLE_WITH_LATIN = new ScriptSet(); - if (ASCII == NULL || JAPANESE == NULL || CHINESE == NULL || KOREAN == NULL - || CONFUSABLE_WITH_LATIN == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - return; - } - ASCII->freeze(); - JAPANESE->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_HIRAGANA, status) - .set(USCRIPT_KATAKANA, status); - CHINESE->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_BOPOMOFO, status); - KOREAN->set(USCRIPT_LATIN, status).set(USCRIPT_HAN, status).set(USCRIPT_HANGUL, status); - CONFUSABLE_WITH_LATIN->set(USCRIPT_CYRILLIC, status).set(USCRIPT_GREEK, status) - .set(USCRIPT_CHEROKEE, status); - ucln_i18n_registerCleanup(UCLN_I18N_IDENTIFIER_INFO, IdentifierInfo_cleanup); -} -U_CDECL_END - - -IdentifierInfo::IdentifierInfo(UErrorCode &status): - fIdentifier(NULL), fRequiredScripts(NULL), fScriptSetSet(NULL), - fCommonAmongAlternates(NULL), fNumerics(NULL), fIdentifierProfile(NULL) { - umtx_initOnce(gIdentifierInfoInitOnce, &IdentifierInfo_init, status); - if (U_FAILURE(status)) { - return; - } - - fIdentifier = new UnicodeString(); - fRequiredScripts = new ScriptSet(); - fScriptSetSet = uhash_open(uhash_hashScriptSet, uhash_compareScriptSet, NULL, &status); - uhash_setKeyDeleter(fScriptSetSet, uhash_deleteScriptSet); - fCommonAmongAlternates = new ScriptSet(); - fNumerics = new UnicodeSet(); - fIdentifierProfile = new UnicodeSet(0, 0x10FFFF); - - if (U_SUCCESS(status) && (fIdentifier == NULL || fRequiredScripts == NULL || fScriptSetSet == NULL || - fCommonAmongAlternates == NULL || fNumerics == NULL || fIdentifierProfile == NULL)) { - status = U_MEMORY_ALLOCATION_ERROR; - } -} - -IdentifierInfo::~IdentifierInfo() { - delete fIdentifier; - delete fRequiredScripts; - uhash_close(fScriptSetSet); - delete fCommonAmongAlternates; - delete fNumerics; - delete fIdentifierProfile; -} - - -IdentifierInfo &IdentifierInfo::clear() { - fRequiredScripts->resetAll(); - uhash_removeAll(fScriptSetSet); - fNumerics->clear(); - fCommonAmongAlternates->resetAll(); - return *this; -} - - -IdentifierInfo &IdentifierInfo::setIdentifierProfile(const UnicodeSet &identifierProfile) { - *fIdentifierProfile = identifierProfile; - return *this; -} - - -const UnicodeSet &IdentifierInfo::getIdentifierProfile() const { - return *fIdentifierProfile; -} - - -IdentifierInfo &IdentifierInfo::setIdentifier(const UnicodeString &identifier, UErrorCode &status) { - if (U_FAILURE(status)) { - return *this; - } - *fIdentifier = identifier; - clear(); - ScriptSet scriptsForCP; - UChar32 cp; - for (int32_t i = 0; i < identifier.length(); i += U16_LENGTH(cp)) { - cp = identifier.char32At(i); - // Store a representative character for each kind of decimal digit - if (u_charType(cp) == U_DECIMAL_DIGIT_NUMBER) { - // Just store the zero character as a representative for comparison. Unicode guarantees it is cp - value - fNumerics->add(cp - (UChar32)u_getNumericValue(cp)); - } - UScriptCode extensions[500]; - int32_t extensionsCount = uscript_getScriptExtensions(cp, extensions, UPRV_LENGTHOF(extensions), &status); - if (U_FAILURE(status)) { - return *this; - } - scriptsForCP.resetAll(); - for (int32_t j=0; jUnion(scriptsForCP); - break; - default: - if (!fRequiredScripts->intersects(scriptsForCP) - && !uhash_geti(fScriptSetSet, &scriptsForCP)) { - // If the set hasn't been added already, add it - // (Add a copy, fScriptSetSet takes ownership of the copy.) - uhash_puti(fScriptSetSet, new ScriptSet(scriptsForCP), 1, &status); - } - break; - } - } - // Now make a final pass through ScriptSetSet to remove alternates that came before singles. - // [Kana], [Kana Hira] => [Kana] - // This is relatively infrequent, so doesn't have to be optimized. - // We also compute any commonalities among the alternates. - if (uhash_count(fScriptSetSet) > 0) { - fCommonAmongAlternates->setAll(); - for (int32_t it = UHASH_FIRST;;) { - const UHashElement *nextHashEl = uhash_nextElement(fScriptSetSet, &it); - if (nextHashEl == NULL) { - break; - } - ScriptSet *next = static_cast(nextHashEl->key.pointer); - // [Kana], [Kana Hira] => [Kana] - if (fRequiredScripts->intersects(*next)) { - uhash_removeElement(fScriptSetSet, nextHashEl); - } else { - fCommonAmongAlternates->intersect(*next); - // [[Arab Syrc Thaa]; [Arab Syrc]] => [[Arab Syrc]] - for (int32_t otherIt = UHASH_FIRST;;) { - const UHashElement *otherHashEl = uhash_nextElement(fScriptSetSet, &otherIt); - if (otherHashEl == NULL) { - break; - } - ScriptSet *other = static_cast(otherHashEl->key.pointer); - if (next != other && next->contains(*other)) { - uhash_removeElement(fScriptSetSet, nextHashEl); - break; - } - } - } - } - } - if (uhash_count(fScriptSetSet) == 0) { - fCommonAmongAlternates->resetAll(); - } - return *this; -} - - -const UnicodeString *IdentifierInfo::getIdentifier() const { - return fIdentifier; -} - -const ScriptSet *IdentifierInfo::getScripts() const { - return fRequiredScripts; -} - -const UHashtable *IdentifierInfo::getAlternates() const { - return fScriptSetSet; -} - - -const UnicodeSet *IdentifierInfo::getNumerics() const { - return fNumerics; -} - -const ScriptSet *IdentifierInfo::getCommonAmongAlternates() const { - return fCommonAmongAlternates; -} - -#if !UCONFIG_NO_NORMALIZATION - -URestrictionLevel IdentifierInfo::getRestrictionLevel(UErrorCode &status) const { - if (!fIdentifierProfile->containsAll(*fIdentifier) || getNumerics()->size() > 1) { - return USPOOF_UNRESTRICTIVE; - } - if (ASCII->containsAll(*fIdentifier)) { - return USPOOF_ASCII; - } - // This is a bit tricky. We look at a number of factors. - // The number of scripts in the text. - // Plus 1 if there is some commonality among the alternates (eg [Arab Thaa]; [Arab Syrc]) - // Plus number of alternates otherwise (this only works because we only test cardinality up to 2.) - - // Note: the requiredScripts set omits COMMON and INHERITED; they are taken out at the - // time it is created, in setIdentifier(). - int32_t cardinalityPlus = fRequiredScripts->countMembers() + - (fCommonAmongAlternates->countMembers() == 0 ? uhash_count(fScriptSetSet) : 1); - if (cardinalityPlus < 2) { - return USPOOF_SINGLE_SCRIPT_RESTRICTIVE; - } - if (containsWithAlternates(*JAPANESE, *fRequiredScripts) || containsWithAlternates(*CHINESE, *fRequiredScripts) - || containsWithAlternates(*KOREAN, *fRequiredScripts)) { - return USPOOF_HIGHLY_RESTRICTIVE; - } - if (cardinalityPlus == 2 && - fRequiredScripts->test(USCRIPT_LATIN, status) && - !fRequiredScripts->intersects(*CONFUSABLE_WITH_LATIN)) { - return USPOOF_MODERATELY_RESTRICTIVE; - } - return USPOOF_MINIMALLY_RESTRICTIVE; -} - -#endif /* !UCONFIG_NO_NORMALIZATION */ - -int32_t IdentifierInfo::getScriptCount() const { - // Note: Common and Inherited scripts were removed by setIdentifier(), and do not appear in fRequiredScripts. - int32_t count = fRequiredScripts->countMembers() + - (fCommonAmongAlternates->countMembers() == 0 ? uhash_count(fScriptSetSet) : 1); - return count; -} - - - -UBool IdentifierInfo::containsWithAlternates(const ScriptSet &container, const ScriptSet &containee) const { - if (!container.contains(containee)) { - return FALSE; - } - for (int32_t iter = UHASH_FIRST; ;) { - const UHashElement *hashEl = uhash_nextElement(fScriptSetSet, &iter); - if (hashEl == NULL) { - break; - } - ScriptSet *alternatives = static_cast(hashEl->key.pointer); - if (!container.intersects(*alternatives)) { - return false; - } - } - return true; -} - -UnicodeString &IdentifierInfo::displayAlternates(UnicodeString &dest, const UHashtable *alternates, UErrorCode &status) { - UVector sorted(status); - if (U_FAILURE(status)) { - return dest; - } - for (int32_t pos = UHASH_FIRST; ;) { - const UHashElement *el = uhash_nextElement(alternates, &pos); - if (el == NULL) { - break; - } - ScriptSet *ss = static_cast(el->key.pointer); - sorted.addElement(ss, status); - } - sorted.sort(uhash_compareScriptSet, status); - UnicodeString separator = UNICODE_STRING_SIMPLE("; "); - for (int32_t i=0; i0) { - dest.append(separator); - } - ScriptSet *ss = static_cast(sorted.elementAt(i)); - ss->displayScripts(dest); - } - return dest; -} - -U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/identifier_info.h b/deps/icu-small/source/i18n/identifier_info.h deleted file mode 100644 index 1dee627e1c57bf..00000000000000 --- a/deps/icu-small/source/i18n/identifier_info.h +++ /dev/null @@ -1,189 +0,0 @@ -/* -********************************************************************** -* Copyright (C) 2014, International Business Machines -* Corporation and others. All Rights Reserved. -********************************************************************** -* -* indentifier_info.h -* -* created on: 2013 Jan 7 -* created by: Andy Heninger -*/ - -#ifndef __IDENTIFIER_INFO_H__ -#define __IDENTIFIER_INFO_H__ - -#include "unicode/utypes.h" - -#include "unicode/uniset.h" -#include "unicode/uspoof.h" -#include "uhash.h" - -U_NAMESPACE_BEGIN - -class ScriptSet; - -// TODO(andy): review consistency of reference vs pointer arguments to the funcions. - -/** - * This class analyzes a possible identifier for script and identifier status. Use it by calling setIdentifierProfile - * then setIdentifier. Available methods include: - *
    - *
  1. call getScripts for the specific scripts in the identifier. The identifier contains at least one character in - * each of these. - *
  2. call getAlternates to get cases where a character is not limited to a single script. For example, it could be - * either Katakana or Hiragana. - *
  3. call getCommonAmongAlternates to find out if any scripts are common to all the alternates. - *
  4. call getNumerics to get a representative character (with value zero) for each of the decimal number systems in - * the identifier. - *
  5. call getRestrictionLevel to see what the UTS36 restriction level is. - *
- * - * This is a port from ICU4J of class com.ibm.icu.text.IdentifierInfo - */ -class U_I18N_API IdentifierInfo : public UMemory { - - public: - /** - * Create an identifier info object. Subsequently, call setIdentifier(), etc. - * @internal - */ - IdentifierInfo(UErrorCode &status); - - /** - * Destructor - */ - virtual ~IdentifierInfo(); - - private: - /* Disallow copying for now. Can be added if there's a need. */ - IdentifierInfo(const IdentifierInfo &other); - - public: - - /** - * Set the identifier profile: the characters that are to be allowed in the identifier. - * - * @param identifierProfile the characters that are to be allowed in the identifier - * @return this - * @internal - */ - IdentifierInfo &setIdentifierProfile(const UnicodeSet &identifierProfile); - - /** - * Get the identifier profile: the characters that are to be allowed in the identifier. - * - * @return The characters that are to be allowed in the identifier. - * @internal - */ - const UnicodeSet &getIdentifierProfile() const; - - - /** - * Set an identifier to analyze. Afterwards, call methods like getScripts() - * - * @param identifier the identifier to analyze - * @param status Errorcode, set if errors occur. - * @return this - * @internal - */ - IdentifierInfo &setIdentifier(const UnicodeString &identifier, UErrorCode &status); - - - /** - * Get the identifier that was analyzed. The returned string is owned by the ICU library, - * and must not be deleted by the caller. - * - * @return the identifier that was analyzed. - * @internal - */ - const UnicodeString *getIdentifier() const; - - - /** - * Get the scripts found in the identifiers. - * - * @return the set of explicit scripts. - * @internal - */ - const ScriptSet *getScripts() const; - - /** - * Get the set of alternate scripts found in the identifiers. That is, when a character can be in two scripts, then - * the set consisting of those scripts will be returned. - * - * @return a uhash, with each key being of type (ScriptSet *). - * This is a set, not a map, so the value stored in the uhash is not relevant. - * (It is, in fact, 1). - * Ownership of the uhash and its contents remains with the IndetifierInfo object, - * and remains valid until a new identifer is set or until the object is deleted. - * @internal - */ - const UHashtable *getAlternates() const; - - /** - * Get the representative characters (zeros) for the numerics found in the identifier. - * - * @return the set of explicit scripts. - * @internal - */ - const UnicodeSet *getNumerics() const; - - /** - * Find out which scripts are in common among the alternates. - * - * @return the set of scripts that are in common among the alternates. - * @internal - */ - const ScriptSet *getCommonAmongAlternates() const; - - /** - * Get the number of scripts appearing in the identifier. - * Note: Common and Inherited scripts are omitted from the count. - * Note: Result may be high when the identifier contains characters - * with alternate scripts. The distinction between - * 0, 1 and > 1 will remain valid, however. - * @return the number of scripts. - */ - int32_t getScriptCount() const; - -#if !UCONFIG_NO_NORMALIZATION - - /** - * Find the "tightest" restriction level that the identifier satisfies. - * - * @return the restriction level. - * @internal - */ - URestrictionLevel getRestrictionLevel(UErrorCode &status) const; - -#endif /*!UCONFIG_NO_NORMALIZATION */ - - UnicodeString toString() const; - - /** - * Produce a readable string of alternates. - * - * @param alternates a UHashtable of UScriptSets. - * Keys only, no meaningful values in the UHash. - * @return display form - * @internal - */ - static UnicodeString &displayAlternates(UnicodeString &dest, const UHashtable *alternates, UErrorCode &status); - - private: - - IdentifierInfo & clear(); - UBool containsWithAlternates(const ScriptSet &container, const ScriptSet &containee) const; - - UnicodeString *fIdentifier; - ScriptSet *fRequiredScripts; - UHashtable *fScriptSetSet; - ScriptSet *fCommonAmongAlternates; - UnicodeSet *fNumerics; - UnicodeSet *fIdentifierProfile; -}; - -U_NAMESPACE_END - -#endif // __IDENTIFIER_INFO_H__ diff --git a/deps/icu-small/source/i18n/indiancal.cpp b/deps/icu-small/source/i18n/indiancal.cpp index 722d3adcdc0acf..7964d45312ea4d 100644 --- a/deps/icu-small/source/i18n/indiancal.cpp +++ b/deps/icu-small/source/i18n/indiancal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2003-2014, International Business Machines Corporation * and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/indiancal.h b/deps/icu-small/source/i18n/indiancal.h index 62ff1c78e744b9..fcc21d729bf0aa 100644 --- a/deps/icu-small/source/i18n/indiancal.h +++ b/deps/icu-small/source/i18n/indiancal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2003-2008, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/inputext.cpp b/deps/icu-small/source/i18n/inputext.cpp index 5c75d5d42cbf8a..4e053aef2ea1ee 100644 --- a/deps/icu-small/source/i18n/inputext.cpp +++ b/deps/icu-small/source/i18n/inputext.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/inputext.h b/deps/icu-small/source/i18n/inputext.h index 12b915a0bdecfa..6a5d253e0568c2 100644 --- a/deps/icu-small/source/i18n/inputext.h +++ b/deps/icu-small/source/i18n/inputext.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2008, International Business Machines diff --git a/deps/icu-small/source/i18n/islamcal.cpp b/deps/icu-small/source/i18n/islamcal.cpp index f343ebd88b69c7..7c2d1b6b98e74c 100644 --- a/deps/icu-small/source/i18n/islamcal.cpp +++ b/deps/icu-small/source/i18n/islamcal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2015, International Business Machines Corporation @@ -734,7 +736,7 @@ int32_t IslamicCalendar::defaultCenturyStartYear() const } -void U_CALLCONV +U_CFUNC void U_CALLCONV IslamicCalendar::initializeSystemDefaultCentury() { // initialize systemDefaultCentury and systemDefaultCenturyYear based diff --git a/deps/icu-small/source/i18n/islamcal.h b/deps/icu-small/source/i18n/islamcal.h index 8597ace92930b6..4e2a1e3d52fe1b 100644 --- a/deps/icu-small/source/i18n/islamcal.h +++ b/deps/icu-small/source/i18n/islamcal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation @@ -417,7 +419,7 @@ class U_I18N_API IslamicCalendar : public Calendar { * are considered to fall within so that its start date is 80 years * before the current time. */ - static void initializeSystemDefaultCentury(void); + static void U_CALLCONV initializeSystemDefaultCentury(void); }; U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/japancal.cpp b/deps/icu-small/source/i18n/japancal.cpp index e9b5483620ea7d..0c8396f6f8c620 100644 --- a/deps/icu-small/source/i18n/japancal.cpp +++ b/deps/icu-small/source/i18n/japancal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2009,2012,2016 International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/japancal.h b/deps/icu-small/source/i18n/japancal.h index f4c405eba9805a..ab267f81f17271 100644 --- a/deps/icu-small/source/i18n/japancal.h +++ b/deps/icu-small/source/i18n/japancal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2008, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/measfmt.cpp b/deps/icu-small/source/i18n/measfmt.cpp index f8f46a9a95d654..4ac2f7d5ebe768 100644 --- a/deps/icu-small/source/i18n/measfmt.cpp +++ b/deps/icu-small/source/i18n/measfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -39,7 +41,7 @@ #include "standardplural.h" #include "unifiedcache.h" -#define MEAS_UNIT_COUNT 134 +#define MEAS_UNIT_COUNT 138 #define WIDTH_INDEX_COUNT (UMEASFMT_WIDTH_NARROW + 1) U_NAMESPACE_BEGIN @@ -108,6 +110,7 @@ class MeasureFormatCacheData : public SharedObject { UMeasureFormatWidth widthFallback[WIDTH_INDEX_COUNT]; /** Measure unit -> format width -> array of patterns ("{0} meters") (plurals + PER_UNIT_INDEX) */ SimpleFormatter *patterns[MEAS_UNIT_COUNT][WIDTH_INDEX_COUNT][PATTERN_COUNT]; + const UChar* dnams[MEAS_UNIT_COUNT][WIDTH_INDEX_COUNT]; SimpleFormatter perFormatters[WIDTH_INDEX_COUNT]; MeasureFormatCacheData(); @@ -157,6 +160,7 @@ MeasureFormatCacheData::MeasureFormatCacheData() { currencyFormats[i] = NULL; } uprv_memset(patterns, 0, sizeof(patterns)); + uprv_memset(dnams, 0, sizeof(dnams)); integerFormat = NULL; numericDateFormatters = NULL; } @@ -172,6 +176,7 @@ MeasureFormatCacheData::~MeasureFormatCacheData() { } } } + // Note: the contents of 'dnams' are pointers into the resource bundle delete integerFormat; delete numericDateFormatters; } @@ -213,117 +218,135 @@ static const UChar gNarrow[] = { 0x4E, 0x61, 0x72, 0x72, 0x6F, 0x77 }; * C++: Each inner sink class has a reference to the main outer sink. * Java: Use non-static inner classes instead. */ -struct UnitDataSink : public ResourceTableSink { - /** - * Sink for a table of display patterns. For example, - * unitsShort/duration/hour contains other{"{0} hrs"}. - */ - struct UnitPatternSink : public ResourceTableSink { - UnitPatternSink(UnitDataSink &sink) : outer(sink) {} - ~UnitPatternSink(); - - void setFormatterIfAbsent(int32_t index, const ResourceValue &value, - int32_t minPlaceholders, UErrorCode &errorCode) { - SimpleFormatter **patterns = - &outer.cacheData.patterns[outer.unitIndex][outer.width][0]; - if (U_SUCCESS(errorCode) && patterns[index] == NULL) { +struct UnitDataSink : public ResourceSink { + + // Output data. + MeasureFormatCacheData &cacheData; + + // Path to current data. + UMeasureFormatWidth width; + const char *type; + int32_t unitIndex; + + UnitDataSink(MeasureFormatCacheData &outputData) + : cacheData(outputData), + width(UMEASFMT_WIDTH_COUNT), type(NULL), unitIndex(0) {} + ~UnitDataSink(); + + void setFormatterIfAbsent(int32_t index, const ResourceValue &value, + int32_t minPlaceholders, UErrorCode &errorCode) { + SimpleFormatter **patterns = &cacheData.patterns[unitIndex][width][0]; + if (U_SUCCESS(errorCode) && patterns[index] == NULL) { + if (minPlaceholders >= 0) { patterns[index] = new SimpleFormatter( - value.getUnicodeString(errorCode), minPlaceholders, 1, errorCode); - if (U_SUCCESS(errorCode) && patterns[index] == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - } + value.getUnicodeString(errorCode), minPlaceholders, 1, errorCode); + } + if (U_SUCCESS(errorCode) && patterns[index] == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; } } + } - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - if (uprv_strcmp(key, "dnam") == 0) { - // Skip the unit display name for now. - } else if (uprv_strcmp(key, "per") == 0) { - // For example, "{0}/h". - setFormatterIfAbsent(MeasureFormatCacheData::PER_UNIT_INDEX, value, 1, errorCode); - } else { - // The key must be one of the plural form strings. For example: - // one{"{0} hr"} - // other{"{0} hrs"} - setFormatterIfAbsent(StandardPlural::indexFromString(key, errorCode), value, 0, - errorCode); - } + void setDnamIfAbsent(const ResourceValue &value, UErrorCode& errorCode) { + if (cacheData.dnams[unitIndex][width] == NULL) { + int32_t length; + cacheData.dnams[unitIndex][width] = value.getString(length, errorCode); } - UnitDataSink &outer; - } patternSink; + } /** - * Sink for a table of per-unit tables. For example, + * Consume a display pattern. For example, + * unitsShort/duration/hour contains other{"{0} hrs"}. + */ + void consumePattern(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + if (uprv_strcmp(key, "dnam") == 0) { + // The display name for the unit in the current width. + setDnamIfAbsent(value, errorCode); + } else if (uprv_strcmp(key, "per") == 0) { + // For example, "{0}/h". + setFormatterIfAbsent(MeasureFormatCacheData::PER_UNIT_INDEX, value, 1, errorCode); + } else { + // The key must be one of the plural form strings. For example: + // one{"{0} hr"} + // other{"{0} hrs"} + setFormatterIfAbsent(StandardPlural::indexFromString(key, errorCode), value, 0, + errorCode); + } + } + + /** + * Consume a table of per-unit tables. For example, * unitsShort/duration contains tables for duration-unit subtypes day & hour. */ - struct UnitSubtypeSink : public ResourceTableSink { - UnitSubtypeSink(UnitDataSink &sink) : outer(sink) {} - ~UnitSubtypeSink(); - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.unitIndex = MeasureUnit::internalGetIndexForTypeAndSubtype(outer.type, key); - if (outer.unitIndex >= 0) { - return &outer.patternSink; + void consumeSubtypeTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + unitIndex = MeasureUnit::internalGetIndexForTypeAndSubtype(type, key); + if (unitIndex < 0) { + // TODO: How to handle unexpected data? + // See http://bugs.icu-project.org/trac/ticket/12597 + return; + } + + if (value.getType() == URES_STRING) { + // Units like "coordinate" that don't have plural variants + setFormatterIfAbsent(StandardPlural::OTHER, value, 0, errorCode); + } else if (value.getType() == URES_TABLE) { + // Units that have plural variants + ResourceTable patternTableTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; patternTableTable.getKeyAndValue(i, key, value); ++i) { + consumePattern(key, value, errorCode); } - return NULL; + } else { + // TODO: How to handle unexpected data? + // See http://bugs.icu-project.org/trac/ticket/12597 + return; } - UnitDataSink &outer; - } subtypeSink; + } /** - * Sink for compound x-per-y display pattern. For example, + * Consume compound x-per-y display pattern. For example, * unitsShort/compound/per may be "{0}/{1}". */ - struct UnitCompoundSink : public ResourceTableSink { - UnitCompoundSink(UnitDataSink &sink) : outer(sink) {} - ~UnitCompoundSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_SUCCESS(errorCode) && uprv_strcmp(key, "per") == 0) { - outer.cacheData.perFormatters[outer.width]. - applyPatternMinMaxArguments(value.getUnicodeString(errorCode), 2, 2, errorCode); - } + void consumeCompoundPattern(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + if (U_SUCCESS(errorCode) && uprv_strcmp(key, "per") == 0) { + cacheData.perFormatters[width]. + applyPatternMinMaxArguments(value.getUnicodeString(errorCode), 2, 2, errorCode); } - UnitDataSink &outer; - } compoundSink; + } /** - * Sink for a table of unit type tables. For example, + * Consume a table of unit type tables. For example, * unitsShort contains tables for area & duration. * It also contains a table for the compound/per pattern. */ - struct UnitTypeSink : public ResourceTableSink { - UnitTypeSink(UnitDataSink &sink) : outer(sink) {} - ~UnitTypeSink(); - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - if (uprv_strcmp(key, "currency") == 0) { - // Skip. - } else if (uprv_strcmp(key, "compound") == 0) { - if (!outer.cacheData.hasPerFormatter(outer.width)) { - return &outer.compoundSink; + void consumeUnitTypesTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + if (uprv_strcmp(key, "currency") == 0) { + // Skip. + } else if (uprv_strcmp(key, "compound") == 0) { + if (!cacheData.hasPerFormatter(width)) { + ResourceTable compoundTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; compoundTable.getKeyAndValue(i, key, value); ++i) { + consumeCompoundPattern(key, value, errorCode); } - } else { - outer.type = key; - return &outer.subtypeSink; } - return NULL; + } else { + type = key; + ResourceTable subtypeTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; subtypeTable.getKeyAndValue(i, key, value); ++i) { + consumeSubtypeTable(key, value, errorCode); + } } - UnitDataSink &outer; - } typeSink; + } - UnitDataSink(MeasureFormatCacheData &outputData) - : patternSink(*this), subtypeSink(*this), compoundSink(*this), typeSink(*this), - cacheData(outputData), - width(UMEASFMT_WIDTH_COUNT), type(NULL), unitIndex(0) {} - ~UnitDataSink(); - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + void consumeAlias(const char *key, const ResourceValue &value, UErrorCode &errorCode) { // Handle aliases like // units:alias{"/LOCALE/unitsShort"} // which should only occur in the root bundle. - if (U_FAILURE(errorCode) || value.getType() != URES_ALIAS) { return; } UMeasureFormatWidth sourceWidth = widthFromKey(key); if (sourceWidth == UMEASFMT_WIDTH_COUNT) { // Alias from something we don't care about. @@ -342,12 +365,15 @@ struct UnitDataSink : public ResourceTableSink { } cacheData.widthFallback[sourceWidth] = targetWidth; } - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { + + void consumeTable(const char *key, ResourceValue &value, UErrorCode &errorCode) { if (U_SUCCESS(errorCode) && (width = widthFromKey(key)) != UMEASFMT_WIDTH_COUNT) { - return &typeSink; + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + consumeUnitTypesTable(key, value, errorCode); + } } - return NULL; } static UMeasureFormatWidth widthFromKey(const char *key) { @@ -382,20 +408,22 @@ struct UnitDataSink : public ResourceTableSink { return UMEASFMT_WIDTH_COUNT; } - // Output data. - MeasureFormatCacheData &cacheData; - - // Path to current data. - UMeasureFormatWidth width; - const char *type; - int32_t unitIndex; + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + // Main entry point to sink + ResourceTable widthsTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int i = 0; widthsTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_ALIAS) { + consumeAlias(key, value, errorCode); + } else { + consumeTable(key, value, errorCode); + } + } + } }; // Virtual destructors must be defined out of line. -UnitDataSink::UnitPatternSink::~UnitPatternSink() {} -UnitDataSink::UnitSubtypeSink::~UnitSubtypeSink() {} -UnitDataSink::UnitCompoundSink::~UnitCompoundSink() {} -UnitDataSink::UnitTypeSink::~UnitTypeSink() {} UnitDataSink::~UnitDataSink() {} } // namespace @@ -405,7 +433,7 @@ static UBool loadMeasureUnitData( MeasureFormatCacheData &cacheData, UErrorCode &status) { UnitDataSink sink(cacheData); - ures_getAllTableItemsWithFallback(resource, "", sink, status); + ures_getAllItemsWithFallback(resource, "", sink, status); return U_SUCCESS(status); } @@ -484,8 +512,14 @@ const MeasureFormatCacheData *LocaleCacheKey::createObje } for (int32_t i = 0; i < WIDTH_INDEX_COUNT; ++i) { + // NumberFormat::createInstance can erase warning codes from status, so pass it + // a separate status instance + UErrorCode localStatus = U_ZERO_ERROR; result->adoptCurrencyFormat(i, NumberFormat::createInstance( - localeId, currencyStyles[i], status)); + localeId, currencyStyles[i], localStatus)); + if (localStatus != U_ZERO_ERROR) { + status = localStatus; + } if (U_FAILURE(status)) { return NULL; } @@ -795,6 +829,24 @@ UnicodeString &MeasureFormat::formatMeasures( return appendTo; } +UnicodeString MeasureFormat::getUnitDisplayName(const MeasureUnit& unit, UErrorCode& /*status*/) const { + UMeasureFormatWidth width = getRegularWidth(this->width); + const UChar* const* styleToDnam = cache->dnams[unit.getIndex()]; + const UChar* dnam = styleToDnam[width]; + if (dnam == NULL) { + int32_t fallbackWidth = cache->widthFallback[width]; + dnam = styleToDnam[fallbackWidth]; + } + + UnicodeString result; + if (dnam == NULL) { + result.setToBogus(); + } else { + result.setTo(dnam, -1); + } + return result; +} + void MeasureFormat::initMeasureFormat( const Locale &locale, UMeasureFormatWidth w, diff --git a/deps/icu-small/source/i18n/measunit.cpp b/deps/icu-small/source/i18n/measunit.cpp index ad540b5085e36e..a3021b740521fd 100644 --- a/deps/icu-small/source/i18n/measunit.cpp +++ b/deps/icu-small/source/i18n/measunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -38,20 +40,21 @@ static const int32_t gOffsets[] = { 16, 20, 24, - 284, - 294, - 305, + 28, + 288, + 298, 309, - 315, + 313, 319, - 338, - 339, - 350, - 356, - 361, + 323, + 342, + 343, + 354, + 360, 365, 369, - 394 + 373, + 398 }; static const int32_t gIndexes[] = { @@ -61,20 +64,21 @@ static const int32_t gIndexes[] = { 16, 20, 24, - 24, - 34, - 45, + 28, + 28, + 38, 49, - 55, + 53, 59, - 78, - 79, - 90, - 96, - 101, + 63, + 82, + 83, + 94, + 100, 105, 109, - 134 + 113, + 138 }; // Must be sorted alphabetically. @@ -84,6 +88,7 @@ static const char * const gTypes[] = { "area", "concentr", "consumption", + "coordinate", "currency", "digital", "duration", @@ -126,6 +131,10 @@ static const char * const gSubTypes[] = { "liter-per-kilometer", "mile-per-gallon", "mile-per-gallon-imperial", + "east", + "north", + "south", + "west", "ADP", "AED", "AFA", @@ -500,14 +509,14 @@ static const char * const gSubTypes[] = { // Must be sorted by first value and then second value. static int32_t unitPerUnitToSingleUnit[][4] = { - {326, 296, 16, 0}, - {328, 302, 16, 2}, - {330, 296, 16, 3}, - {330, 383, 4, 2}, - {330, 384, 4, 3}, - {344, 381, 3, 1}, - {347, 11, 15, 4}, - {386, 326, 4, 1} + {330, 300, 17, 0}, + {332, 306, 17, 2}, + {334, 300, 17, 3}, + {334, 387, 4, 2}, + {334, 388, 4, 3}, + {348, 385, 3, 1}, + {351, 11, 16, 4}, + {390, 330, 4, 1} }; MeasureUnit *MeasureUnit::createGForce(UErrorCode &status) { @@ -606,444 +615,460 @@ MeasureUnit *MeasureUnit::createMilePerGallonImperial(UErrorCode &status) { return MeasureUnit::create(4, 3, status); } +MeasureUnit *MeasureUnit::createEast(UErrorCode &status) { + return MeasureUnit::create(5, 0, status); +} + +MeasureUnit *MeasureUnit::createNorth(UErrorCode &status) { + return MeasureUnit::create(5, 1, status); +} + +MeasureUnit *MeasureUnit::createSouth(UErrorCode &status) { + return MeasureUnit::create(5, 2, status); +} + +MeasureUnit *MeasureUnit::createWest(UErrorCode &status) { + return MeasureUnit::create(5, 3, status); +} + MeasureUnit *MeasureUnit::createBit(UErrorCode &status) { - return MeasureUnit::create(6, 0, status); + return MeasureUnit::create(7, 0, status); } MeasureUnit *MeasureUnit::createByte(UErrorCode &status) { - return MeasureUnit::create(6, 1, status); + return MeasureUnit::create(7, 1, status); } MeasureUnit *MeasureUnit::createGigabit(UErrorCode &status) { - return MeasureUnit::create(6, 2, status); + return MeasureUnit::create(7, 2, status); } MeasureUnit *MeasureUnit::createGigabyte(UErrorCode &status) { - return MeasureUnit::create(6, 3, status); + return MeasureUnit::create(7, 3, status); } MeasureUnit *MeasureUnit::createKilobit(UErrorCode &status) { - return MeasureUnit::create(6, 4, status); + return MeasureUnit::create(7, 4, status); } MeasureUnit *MeasureUnit::createKilobyte(UErrorCode &status) { - return MeasureUnit::create(6, 5, status); + return MeasureUnit::create(7, 5, status); } MeasureUnit *MeasureUnit::createMegabit(UErrorCode &status) { - return MeasureUnit::create(6, 6, status); + return MeasureUnit::create(7, 6, status); } MeasureUnit *MeasureUnit::createMegabyte(UErrorCode &status) { - return MeasureUnit::create(6, 7, status); + return MeasureUnit::create(7, 7, status); } MeasureUnit *MeasureUnit::createTerabit(UErrorCode &status) { - return MeasureUnit::create(6, 8, status); + return MeasureUnit::create(7, 8, status); } MeasureUnit *MeasureUnit::createTerabyte(UErrorCode &status) { - return MeasureUnit::create(6, 9, status); + return MeasureUnit::create(7, 9, status); } MeasureUnit *MeasureUnit::createCentury(UErrorCode &status) { - return MeasureUnit::create(7, 0, status); + return MeasureUnit::create(8, 0, status); } MeasureUnit *MeasureUnit::createDay(UErrorCode &status) { - return MeasureUnit::create(7, 1, status); + return MeasureUnit::create(8, 1, status); } MeasureUnit *MeasureUnit::createHour(UErrorCode &status) { - return MeasureUnit::create(7, 2, status); + return MeasureUnit::create(8, 2, status); } MeasureUnit *MeasureUnit::createMicrosecond(UErrorCode &status) { - return MeasureUnit::create(7, 3, status); + return MeasureUnit::create(8, 3, status); } MeasureUnit *MeasureUnit::createMillisecond(UErrorCode &status) { - return MeasureUnit::create(7, 4, status); + return MeasureUnit::create(8, 4, status); } MeasureUnit *MeasureUnit::createMinute(UErrorCode &status) { - return MeasureUnit::create(7, 5, status); + return MeasureUnit::create(8, 5, status); } MeasureUnit *MeasureUnit::createMonth(UErrorCode &status) { - return MeasureUnit::create(7, 6, status); + return MeasureUnit::create(8, 6, status); } MeasureUnit *MeasureUnit::createNanosecond(UErrorCode &status) { - return MeasureUnit::create(7, 7, status); + return MeasureUnit::create(8, 7, status); } MeasureUnit *MeasureUnit::createSecond(UErrorCode &status) { - return MeasureUnit::create(7, 8, status); + return MeasureUnit::create(8, 8, status); } MeasureUnit *MeasureUnit::createWeek(UErrorCode &status) { - return MeasureUnit::create(7, 9, status); + return MeasureUnit::create(8, 9, status); } MeasureUnit *MeasureUnit::createYear(UErrorCode &status) { - return MeasureUnit::create(7, 10, status); + return MeasureUnit::create(8, 10, status); } MeasureUnit *MeasureUnit::createAmpere(UErrorCode &status) { - return MeasureUnit::create(8, 0, status); + return MeasureUnit::create(9, 0, status); } MeasureUnit *MeasureUnit::createMilliampere(UErrorCode &status) { - return MeasureUnit::create(8, 1, status); + return MeasureUnit::create(9, 1, status); } MeasureUnit *MeasureUnit::createOhm(UErrorCode &status) { - return MeasureUnit::create(8, 2, status); + return MeasureUnit::create(9, 2, status); } MeasureUnit *MeasureUnit::createVolt(UErrorCode &status) { - return MeasureUnit::create(8, 3, status); + return MeasureUnit::create(9, 3, status); } MeasureUnit *MeasureUnit::createCalorie(UErrorCode &status) { - return MeasureUnit::create(9, 0, status); + return MeasureUnit::create(10, 0, status); } MeasureUnit *MeasureUnit::createFoodcalorie(UErrorCode &status) { - return MeasureUnit::create(9, 1, status); + return MeasureUnit::create(10, 1, status); } MeasureUnit *MeasureUnit::createJoule(UErrorCode &status) { - return MeasureUnit::create(9, 2, status); + return MeasureUnit::create(10, 2, status); } MeasureUnit *MeasureUnit::createKilocalorie(UErrorCode &status) { - return MeasureUnit::create(9, 3, status); + return MeasureUnit::create(10, 3, status); } MeasureUnit *MeasureUnit::createKilojoule(UErrorCode &status) { - return MeasureUnit::create(9, 4, status); + return MeasureUnit::create(10, 4, status); } MeasureUnit *MeasureUnit::createKilowattHour(UErrorCode &status) { - return MeasureUnit::create(9, 5, status); + return MeasureUnit::create(10, 5, status); } MeasureUnit *MeasureUnit::createGigahertz(UErrorCode &status) { - return MeasureUnit::create(10, 0, status); + return MeasureUnit::create(11, 0, status); } MeasureUnit *MeasureUnit::createHertz(UErrorCode &status) { - return MeasureUnit::create(10, 1, status); + return MeasureUnit::create(11, 1, status); } MeasureUnit *MeasureUnit::createKilohertz(UErrorCode &status) { - return MeasureUnit::create(10, 2, status); + return MeasureUnit::create(11, 2, status); } MeasureUnit *MeasureUnit::createMegahertz(UErrorCode &status) { - return MeasureUnit::create(10, 3, status); + return MeasureUnit::create(11, 3, status); } MeasureUnit *MeasureUnit::createAstronomicalUnit(UErrorCode &status) { - return MeasureUnit::create(11, 0, status); + return MeasureUnit::create(12, 0, status); } MeasureUnit *MeasureUnit::createCentimeter(UErrorCode &status) { - return MeasureUnit::create(11, 1, status); + return MeasureUnit::create(12, 1, status); } MeasureUnit *MeasureUnit::createDecimeter(UErrorCode &status) { - return MeasureUnit::create(11, 2, status); + return MeasureUnit::create(12, 2, status); } MeasureUnit *MeasureUnit::createFathom(UErrorCode &status) { - return MeasureUnit::create(11, 3, status); + return MeasureUnit::create(12, 3, status); } MeasureUnit *MeasureUnit::createFoot(UErrorCode &status) { - return MeasureUnit::create(11, 4, status); + return MeasureUnit::create(12, 4, status); } MeasureUnit *MeasureUnit::createFurlong(UErrorCode &status) { - return MeasureUnit::create(11, 5, status); + return MeasureUnit::create(12, 5, status); } MeasureUnit *MeasureUnit::createInch(UErrorCode &status) { - return MeasureUnit::create(11, 6, status); + return MeasureUnit::create(12, 6, status); } MeasureUnit *MeasureUnit::createKilometer(UErrorCode &status) { - return MeasureUnit::create(11, 7, status); + return MeasureUnit::create(12, 7, status); } MeasureUnit *MeasureUnit::createLightYear(UErrorCode &status) { - return MeasureUnit::create(11, 8, status); + return MeasureUnit::create(12, 8, status); } MeasureUnit *MeasureUnit::createMeter(UErrorCode &status) { - return MeasureUnit::create(11, 9, status); + return MeasureUnit::create(12, 9, status); } MeasureUnit *MeasureUnit::createMicrometer(UErrorCode &status) { - return MeasureUnit::create(11, 10, status); + return MeasureUnit::create(12, 10, status); } MeasureUnit *MeasureUnit::createMile(UErrorCode &status) { - return MeasureUnit::create(11, 11, status); + return MeasureUnit::create(12, 11, status); } MeasureUnit *MeasureUnit::createMileScandinavian(UErrorCode &status) { - return MeasureUnit::create(11, 12, status); + return MeasureUnit::create(12, 12, status); } MeasureUnit *MeasureUnit::createMillimeter(UErrorCode &status) { - return MeasureUnit::create(11, 13, status); + return MeasureUnit::create(12, 13, status); } MeasureUnit *MeasureUnit::createNanometer(UErrorCode &status) { - return MeasureUnit::create(11, 14, status); + return MeasureUnit::create(12, 14, status); } MeasureUnit *MeasureUnit::createNauticalMile(UErrorCode &status) { - return MeasureUnit::create(11, 15, status); + return MeasureUnit::create(12, 15, status); } MeasureUnit *MeasureUnit::createParsec(UErrorCode &status) { - return MeasureUnit::create(11, 16, status); + return MeasureUnit::create(12, 16, status); } MeasureUnit *MeasureUnit::createPicometer(UErrorCode &status) { - return MeasureUnit::create(11, 17, status); + return MeasureUnit::create(12, 17, status); } MeasureUnit *MeasureUnit::createYard(UErrorCode &status) { - return MeasureUnit::create(11, 18, status); + return MeasureUnit::create(12, 18, status); } MeasureUnit *MeasureUnit::createLux(UErrorCode &status) { - return MeasureUnit::create(12, 0, status); + return MeasureUnit::create(13, 0, status); } MeasureUnit *MeasureUnit::createCarat(UErrorCode &status) { - return MeasureUnit::create(13, 0, status); + return MeasureUnit::create(14, 0, status); } MeasureUnit *MeasureUnit::createGram(UErrorCode &status) { - return MeasureUnit::create(13, 1, status); + return MeasureUnit::create(14, 1, status); } MeasureUnit *MeasureUnit::createKilogram(UErrorCode &status) { - return MeasureUnit::create(13, 2, status); + return MeasureUnit::create(14, 2, status); } MeasureUnit *MeasureUnit::createMetricTon(UErrorCode &status) { - return MeasureUnit::create(13, 3, status); + return MeasureUnit::create(14, 3, status); } MeasureUnit *MeasureUnit::createMicrogram(UErrorCode &status) { - return MeasureUnit::create(13, 4, status); + return MeasureUnit::create(14, 4, status); } MeasureUnit *MeasureUnit::createMilligram(UErrorCode &status) { - return MeasureUnit::create(13, 5, status); + return MeasureUnit::create(14, 5, status); } MeasureUnit *MeasureUnit::createOunce(UErrorCode &status) { - return MeasureUnit::create(13, 6, status); + return MeasureUnit::create(14, 6, status); } MeasureUnit *MeasureUnit::createOunceTroy(UErrorCode &status) { - return MeasureUnit::create(13, 7, status); + return MeasureUnit::create(14, 7, status); } MeasureUnit *MeasureUnit::createPound(UErrorCode &status) { - return MeasureUnit::create(13, 8, status); + return MeasureUnit::create(14, 8, status); } MeasureUnit *MeasureUnit::createStone(UErrorCode &status) { - return MeasureUnit::create(13, 9, status); + return MeasureUnit::create(14, 9, status); } MeasureUnit *MeasureUnit::createTon(UErrorCode &status) { - return MeasureUnit::create(13, 10, status); + return MeasureUnit::create(14, 10, status); } MeasureUnit *MeasureUnit::createGigawatt(UErrorCode &status) { - return MeasureUnit::create(14, 0, status); + return MeasureUnit::create(15, 0, status); } MeasureUnit *MeasureUnit::createHorsepower(UErrorCode &status) { - return MeasureUnit::create(14, 1, status); + return MeasureUnit::create(15, 1, status); } MeasureUnit *MeasureUnit::createKilowatt(UErrorCode &status) { - return MeasureUnit::create(14, 2, status); + return MeasureUnit::create(15, 2, status); } MeasureUnit *MeasureUnit::createMegawatt(UErrorCode &status) { - return MeasureUnit::create(14, 3, status); + return MeasureUnit::create(15, 3, status); } MeasureUnit *MeasureUnit::createMilliwatt(UErrorCode &status) { - return MeasureUnit::create(14, 4, status); + return MeasureUnit::create(15, 4, status); } MeasureUnit *MeasureUnit::createWatt(UErrorCode &status) { - return MeasureUnit::create(14, 5, status); + return MeasureUnit::create(15, 5, status); } MeasureUnit *MeasureUnit::createHectopascal(UErrorCode &status) { - return MeasureUnit::create(15, 0, status); + return MeasureUnit::create(16, 0, status); } MeasureUnit *MeasureUnit::createInchHg(UErrorCode &status) { - return MeasureUnit::create(15, 1, status); + return MeasureUnit::create(16, 1, status); } MeasureUnit *MeasureUnit::createMillibar(UErrorCode &status) { - return MeasureUnit::create(15, 2, status); + return MeasureUnit::create(16, 2, status); } MeasureUnit *MeasureUnit::createMillimeterOfMercury(UErrorCode &status) { - return MeasureUnit::create(15, 3, status); + return MeasureUnit::create(16, 3, status); } MeasureUnit *MeasureUnit::createPoundPerSquareInch(UErrorCode &status) { - return MeasureUnit::create(15, 4, status); + return MeasureUnit::create(16, 4, status); } MeasureUnit *MeasureUnit::createKilometerPerHour(UErrorCode &status) { - return MeasureUnit::create(16, 0, status); + return MeasureUnit::create(17, 0, status); } MeasureUnit *MeasureUnit::createKnot(UErrorCode &status) { - return MeasureUnit::create(16, 1, status); + return MeasureUnit::create(17, 1, status); } MeasureUnit *MeasureUnit::createMeterPerSecond(UErrorCode &status) { - return MeasureUnit::create(16, 2, status); + return MeasureUnit::create(17, 2, status); } MeasureUnit *MeasureUnit::createMilePerHour(UErrorCode &status) { - return MeasureUnit::create(16, 3, status); + return MeasureUnit::create(17, 3, status); } MeasureUnit *MeasureUnit::createCelsius(UErrorCode &status) { - return MeasureUnit::create(17, 0, status); + return MeasureUnit::create(18, 0, status); } MeasureUnit *MeasureUnit::createFahrenheit(UErrorCode &status) { - return MeasureUnit::create(17, 1, status); + return MeasureUnit::create(18, 1, status); } MeasureUnit *MeasureUnit::createGenericTemperature(UErrorCode &status) { - return MeasureUnit::create(17, 2, status); + return MeasureUnit::create(18, 2, status); } MeasureUnit *MeasureUnit::createKelvin(UErrorCode &status) { - return MeasureUnit::create(17, 3, status); + return MeasureUnit::create(18, 3, status); } MeasureUnit *MeasureUnit::createAcreFoot(UErrorCode &status) { - return MeasureUnit::create(18, 0, status); + return MeasureUnit::create(19, 0, status); } MeasureUnit *MeasureUnit::createBushel(UErrorCode &status) { - return MeasureUnit::create(18, 1, status); + return MeasureUnit::create(19, 1, status); } MeasureUnit *MeasureUnit::createCentiliter(UErrorCode &status) { - return MeasureUnit::create(18, 2, status); + return MeasureUnit::create(19, 2, status); } MeasureUnit *MeasureUnit::createCubicCentimeter(UErrorCode &status) { - return MeasureUnit::create(18, 3, status); + return MeasureUnit::create(19, 3, status); } MeasureUnit *MeasureUnit::createCubicFoot(UErrorCode &status) { - return MeasureUnit::create(18, 4, status); + return MeasureUnit::create(19, 4, status); } MeasureUnit *MeasureUnit::createCubicInch(UErrorCode &status) { - return MeasureUnit::create(18, 5, status); + return MeasureUnit::create(19, 5, status); } MeasureUnit *MeasureUnit::createCubicKilometer(UErrorCode &status) { - return MeasureUnit::create(18, 6, status); + return MeasureUnit::create(19, 6, status); } MeasureUnit *MeasureUnit::createCubicMeter(UErrorCode &status) { - return MeasureUnit::create(18, 7, status); + return MeasureUnit::create(19, 7, status); } MeasureUnit *MeasureUnit::createCubicMile(UErrorCode &status) { - return MeasureUnit::create(18, 8, status); + return MeasureUnit::create(19, 8, status); } MeasureUnit *MeasureUnit::createCubicYard(UErrorCode &status) { - return MeasureUnit::create(18, 9, status); + return MeasureUnit::create(19, 9, status); } MeasureUnit *MeasureUnit::createCup(UErrorCode &status) { - return MeasureUnit::create(18, 10, status); + return MeasureUnit::create(19, 10, status); } MeasureUnit *MeasureUnit::createCupMetric(UErrorCode &status) { - return MeasureUnit::create(18, 11, status); + return MeasureUnit::create(19, 11, status); } MeasureUnit *MeasureUnit::createDeciliter(UErrorCode &status) { - return MeasureUnit::create(18, 12, status); + return MeasureUnit::create(19, 12, status); } MeasureUnit *MeasureUnit::createFluidOunce(UErrorCode &status) { - return MeasureUnit::create(18, 13, status); + return MeasureUnit::create(19, 13, status); } MeasureUnit *MeasureUnit::createGallon(UErrorCode &status) { - return MeasureUnit::create(18, 14, status); + return MeasureUnit::create(19, 14, status); } MeasureUnit *MeasureUnit::createGallonImperial(UErrorCode &status) { - return MeasureUnit::create(18, 15, status); + return MeasureUnit::create(19, 15, status); } MeasureUnit *MeasureUnit::createHectoliter(UErrorCode &status) { - return MeasureUnit::create(18, 16, status); + return MeasureUnit::create(19, 16, status); } MeasureUnit *MeasureUnit::createLiter(UErrorCode &status) { - return MeasureUnit::create(18, 17, status); + return MeasureUnit::create(19, 17, status); } MeasureUnit *MeasureUnit::createMegaliter(UErrorCode &status) { - return MeasureUnit::create(18, 18, status); + return MeasureUnit::create(19, 18, status); } MeasureUnit *MeasureUnit::createMilliliter(UErrorCode &status) { - return MeasureUnit::create(18, 19, status); + return MeasureUnit::create(19, 19, status); } MeasureUnit *MeasureUnit::createPint(UErrorCode &status) { - return MeasureUnit::create(18, 20, status); + return MeasureUnit::create(19, 20, status); } MeasureUnit *MeasureUnit::createPintMetric(UErrorCode &status) { - return MeasureUnit::create(18, 21, status); + return MeasureUnit::create(19, 21, status); } MeasureUnit *MeasureUnit::createQuart(UErrorCode &status) { - return MeasureUnit::create(18, 22, status); + return MeasureUnit::create(19, 22, status); } MeasureUnit *MeasureUnit::createTablespoon(UErrorCode &status) { - return MeasureUnit::create(18, 23, status); + return MeasureUnit::create(19, 23, status); } MeasureUnit *MeasureUnit::createTeaspoon(UErrorCode &status) { - return MeasureUnit::create(18, 24, status); + return MeasureUnit::create(19, 24, status); } // End generated code diff --git a/deps/icu-small/source/i18n/measure.cpp b/deps/icu-small/source/i18n/measure.cpp index eb610e6f8fde46..3459e71b8077ca 100644 --- a/deps/icu-small/source/i18n/measure.cpp +++ b/deps/icu-small/source/i18n/measure.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/msgfmt.cpp b/deps/icu-small/source/i18n/msgfmt.cpp index 1fe2c8d622e04b..4658528050cfe1 100644 --- a/deps/icu-small/source/i18n/msgfmt.cpp +++ b/deps/icu-small/source/i18n/msgfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/msgfmt_impl.h b/deps/icu-small/source/i18n/msgfmt_impl.h index 0f56dee885ad53..80a07dc1ea28f6 100644 --- a/deps/icu-small/source/i18n/msgfmt_impl.h +++ b/deps/icu-small/source/i18n/msgfmt_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/name2uni.cpp b/deps/icu-small/source/i18n/name2uni.cpp index 45705e676a4014..acd9c0af997ada 100644 --- a/deps/icu-small/source/i18n/name2uni.cpp +++ b/deps/icu-small/source/i18n/name2uni.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/name2uni.h b/deps/icu-small/source/i18n/name2uni.h index 1324ec3e8d273d..2ba4c8f792b357 100644 --- a/deps/icu-small/source/i18n/name2uni.h +++ b/deps/icu-small/source/i18n/name2uni.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrlist.h b/deps/icu-small/source/i18n/nfrlist.h index 95e837883851ca..65b21c6b1dbaac 100644 --- a/deps/icu-small/source/i18n/nfrlist.h +++ b/deps/icu-small/source/i18n/nfrlist.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrs.cpp b/deps/icu-small/source/i18n/nfrs.cpp index 88f903cf201b76..5cbd33d0e2ef8b 100644 --- a/deps/icu-small/source/i18n/nfrs.cpp +++ b/deps/icu-small/source/i18n/nfrs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrs.h b/deps/icu-small/source/i18n/nfrs.h index 47c17e6fb5f502..b06c2b2215ad54 100644 --- a/deps/icu-small/source/i18n/nfrs.h +++ b/deps/icu-small/source/i18n/nfrs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrule.cpp b/deps/icu-small/source/i18n/nfrule.cpp index b162b197abe866..100a46490daca0 100644 --- a/deps/icu-small/source/i18n/nfrule.cpp +++ b/deps/icu-small/source/i18n/nfrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nfrule.h b/deps/icu-small/source/i18n/nfrule.h index b4bc2cf28fbb7c..5424b968a1fd90 100644 --- a/deps/icu-small/source/i18n/nfrule.h +++ b/deps/icu-small/source/i18n/nfrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nfsubs.cpp b/deps/icu-small/source/i18n/nfsubs.cpp index ea570dc453c8f2..58039c8bacd570 100644 --- a/deps/icu-small/source/i18n/nfsubs.cpp +++ b/deps/icu-small/source/i18n/nfsubs.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nfsubs.h b/deps/icu-small/source/i18n/nfsubs.h index e7a950a2dd0127..4fb0c06caf600e 100644 --- a/deps/icu-small/source/i18n/nfsubs.h +++ b/deps/icu-small/source/i18n/nfsubs.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/nortrans.cpp b/deps/icu-small/source/i18n/nortrans.cpp index 038a6836c3bca2..da0206776ced93 100644 --- a/deps/icu-small/source/i18n/nortrans.cpp +++ b/deps/icu-small/source/i18n/nortrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/nortrans.h b/deps/icu-small/source/i18n/nortrans.h index 634f534f7d410e..79d1be3b072179 100644 --- a/deps/icu-small/source/i18n/nortrans.h +++ b/deps/icu-small/source/i18n/nortrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2010, International Business Machines diff --git a/deps/icu-small/source/i18n/nultrans.cpp b/deps/icu-small/source/i18n/nultrans.cpp index 820c43d07e9fe4..600873e3735f41 100644 --- a/deps/icu-small/source/i18n/nultrans.cpp +++ b/deps/icu-small/source/i18n/nultrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2005, International Business Machines diff --git a/deps/icu-small/source/i18n/nultrans.h b/deps/icu-small/source/i18n/nultrans.h index 699c323f8c6e06..a9856bde5b2b2e 100644 --- a/deps/icu-small/source/i18n/nultrans.h +++ b/deps/icu-small/source/i18n/nultrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2000-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/numfmt.cpp b/deps/icu-small/source/i18n/numfmt.cpp index 3f10bbf1b44e40..c00955a781a22e 100644 --- a/deps/icu-small/source/i18n/numfmt.cpp +++ b/deps/icu-small/source/i18n/numfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and @@ -450,7 +452,7 @@ NumberFormat::format(int64_t number, // XXXFormat::format(double UnicodeString& -NumberFormat::format(const StringPiece &decimalNum, +NumberFormat::format(StringPiece decimalNum, UnicodeString& toAppendTo, FieldPositionIterator* fpi, UErrorCode& status) const @@ -683,7 +685,7 @@ NumberFormat::parseObject(const UnicodeString& source, UnicodeString& NumberFormat::format(double number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } @@ -693,7 +695,7 @@ NumberFormat::format(double number, UnicodeString& appendTo) const UnicodeString& NumberFormat::format(int32_t number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } @@ -703,7 +705,7 @@ NumberFormat::format(int32_t number, UnicodeString& appendTo) const UnicodeString& NumberFormat::format(int64_t number, UnicodeString& appendTo) const { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); return format(number, appendTo, pos); } diff --git a/deps/icu-small/source/i18n/numsys.cpp b/deps/icu-small/source/i18n/numsys.cpp index 498a8b38914393..442ad7f255abe3 100644 --- a/deps/icu-small/source/i18n/numsys.cpp +++ b/deps/icu-small/source/i18n/numsys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/numsys_impl.h b/deps/icu-small/source/i18n/numsys_impl.h index 5b7f4f3f3a25b8..d39faba5afa3a9 100644 --- a/deps/icu-small/source/i18n/numsys_impl.h +++ b/deps/icu-small/source/i18n/numsys_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/olsontz.cpp b/deps/icu-small/source/i18n/olsontz.cpp index 56b36c36662aef..f4c3dd24c9273f 100644 --- a/deps/icu-small/source/i18n/olsontz.cpp +++ b/deps/icu-small/source/i18n/olsontz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/olsontz.h b/deps/icu-small/source/i18n/olsontz.h index 115a0773c5b3c3..7dbc303a05fa68 100644 --- a/deps/icu-small/source/i18n/olsontz.h +++ b/deps/icu-small/source/i18n/olsontz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2003-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/persncal.cpp b/deps/icu-small/source/i18n/persncal.cpp index e1b30b8aee6959..210646ca8c22ca 100644 --- a/deps/icu-small/source/i18n/persncal.cpp +++ b/deps/icu-small/source/i18n/persncal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/persncal.h b/deps/icu-small/source/i18n/persncal.h index ff18f6158cd68f..3fe5a614643416 100644 --- a/deps/icu-small/source/i18n/persncal.h +++ b/deps/icu-small/source/i18n/persncal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/pluralaffix.cpp b/deps/icu-small/source/i18n/pluralaffix.cpp index b541f120df51b6..f6a51a79ef9ab7 100644 --- a/deps/icu-small/source/i18n/pluralaffix.cpp +++ b/deps/icu-small/source/i18n/pluralaffix.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/pluralaffix.h b/deps/icu-small/source/i18n/pluralaffix.h index 5212fc714bcccf..a08f2131d96ee6 100644 --- a/deps/icu-small/source/i18n/pluralaffix.h +++ b/deps/icu-small/source/i18n/pluralaffix.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/plurfmt.cpp b/deps/icu-small/source/i18n/plurfmt.cpp index 9ff2bffc9d99ca..8a000ce6e97bd9 100644 --- a/deps/icu-small/source/i18n/plurfmt.cpp +++ b/deps/icu-small/source/i18n/plurfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2015, International Business Machines Corporation and @@ -216,14 +218,14 @@ PluralFormat::format(const Formattable& obj, UnicodeString PluralFormat::format(int32_t number, UErrorCode& status) const { - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); UnicodeString result; return format(Formattable(number), number, result, fpos, status); } UnicodeString PluralFormat::format(double number, UErrorCode& status) const { - FieldPosition fpos(0); + FieldPosition fpos(FieldPosition::DONT_CARE); UnicodeString result; return format(Formattable(number), number, result, fpos, status); } diff --git a/deps/icu-small/source/i18n/plurrule.cpp b/deps/icu-small/source/i18n/plurrule.cpp index 9d5fa5bee29248..7b5063455169ce 100644 --- a/deps/icu-small/source/i18n/plurrule.cpp +++ b/deps/icu-small/source/i18n/plurrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/plurrule_impl.h b/deps/icu-small/source/i18n/plurrule_impl.h index d829110cd03a9e..c6e4767a096a72 100644 --- a/deps/icu-small/source/i18n/plurrule_impl.h +++ b/deps/icu-small/source/i18n/plurrule_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/precision.cpp b/deps/icu-small/source/i18n/precision.cpp index c7765748adab84..5d07e0f9ee3d78 100644 --- a/deps/icu-small/source/i18n/precision.cpp +++ b/deps/icu-small/source/i18n/precision.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/precision.h b/deps/icu-small/source/i18n/precision.h index 4543108cef7596..f002fd228bf77d 100644 --- a/deps/icu-small/source/i18n/precision.h +++ b/deps/icu-small/source/i18n/precision.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/quant.cpp b/deps/icu-small/source/i18n/quant.cpp index 4bfdf2a1813d63..6e08e628fc2e10 100644 --- a/deps/icu-small/source/i18n/quant.cpp +++ b/deps/icu-small/source/i18n/quant.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/quant.h b/deps/icu-small/source/i18n/quant.h index f84c43133254ec..21adf19e70d87a 100644 --- a/deps/icu-small/source/i18n/quant.h +++ b/deps/icu-small/source/i18n/quant.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/quantityformatter.cpp b/deps/icu-small/source/i18n/quantityformatter.cpp index 3b04c86d46f196..c44357a53b6908 100644 --- a/deps/icu-small/source/i18n/quantityformatter.cpp +++ b/deps/icu-small/source/i18n/quantityformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/quantityformatter.h b/deps/icu-small/source/i18n/quantityformatter.h index 7f61c0dc039a70..0f61022666531b 100644 --- a/deps/icu-small/source/i18n/quantityformatter.h +++ b/deps/icu-small/source/i18n/quantityformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/rbnf.cpp b/deps/icu-small/source/i18n/rbnf.cpp index 5f78f73b86f614..5e32d804441dbf 100644 --- a/deps/icu-small/source/i18n/rbnf.cpp +++ b/deps/icu-small/source/i18n/rbnf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/rbt.cpp b/deps/icu-small/source/i18n/rbt.cpp index e38aabc832d1ec..62aae52f18eb4d 100644 --- a/deps/icu-small/source/i18n/rbt.cpp +++ b/deps/icu-small/source/i18n/rbt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/rbt.h b/deps/icu-small/source/i18n/rbt.h index f8a6f3cbc41116..9add715acabcb9 100644 --- a/deps/icu-small/source/i18n/rbt.h +++ b/deps/icu-small/source/i18n/rbt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/rbt_data.cpp b/deps/icu-small/source/i18n/rbt_data.cpp index 579c681de0e35c..1b6163956c61fe 100644 --- a/deps/icu-small/source/i18n/rbt_data.cpp +++ b/deps/icu-small/source/i18n/rbt_data.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/rbt_data.h b/deps/icu-small/source/i18n/rbt_data.h index ce833dc26dd509..29e39a59ef076c 100644 --- a/deps/icu-small/source/i18n/rbt_data.h +++ b/deps/icu-small/source/i18n/rbt_data.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/rbt_pars.cpp b/deps/icu-small/source/i18n/rbt_pars.cpp index c6840456ddef1a..5e7c0ff5f9c5dc 100644 --- a/deps/icu-small/source/i18n/rbt_pars.cpp +++ b/deps/icu-small/source/i18n/rbt_pars.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/rbt_pars.h b/deps/icu-small/source/i18n/rbt_pars.h index 497c1e31820938..48067905b9c819 100644 --- a/deps/icu-small/source/i18n/rbt_pars.h +++ b/deps/icu-small/source/i18n/rbt_pars.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/rbt_rule.cpp b/deps/icu-small/source/i18n/rbt_rule.cpp index e88df7e5aec65a..a04a535f0e9508 100644 --- a/deps/icu-small/source/i18n/rbt_rule.cpp +++ b/deps/icu-small/source/i18n/rbt_rule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines @@ -174,7 +176,7 @@ TransliterationRule::TransliterationRule(TransliterationRule& other) : segmentsCount = 0; if (other.segmentsCount > 0) { segments = (UnicodeFunctor **)uprv_malloc(other.segmentsCount * sizeof(UnicodeFunctor *)); - uprv_memcpy(segments, other.segments, other.segmentsCount*sizeof(segments[0])); + uprv_memcpy(segments, other.segments, (size_t)other.segmentsCount*sizeof(segments[0])); } if (other.anteContext != NULL) { diff --git a/deps/icu-small/source/i18n/rbt_rule.h b/deps/icu-small/source/i18n/rbt_rule.h index ffbd25c6a8c55a..b25afd6ef07651 100644 --- a/deps/icu-small/source/i18n/rbt_rule.h +++ b/deps/icu-small/source/i18n/rbt_rule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) {1999-2001}, International Business Machines Corporation and others. All Rights Reserved. ********************************************************************** diff --git a/deps/icu-small/source/i18n/rbt_set.cpp b/deps/icu-small/source/i18n/rbt_set.cpp index 425e3e72581233..f2c78ca9c8d46b 100644 --- a/deps/icu-small/source/i18n/rbt_set.cpp +++ b/deps/icu-small/source/i18n/rbt_set.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/rbt_set.h b/deps/icu-small/source/i18n/rbt_set.h index cbf3419a970558..ed76e6ddf7d71e 100644 --- a/deps/icu-small/source/i18n/rbt_set.h +++ b/deps/icu-small/source/i18n/rbt_set.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2007, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/rbtz.cpp b/deps/icu-small/source/i18n/rbtz.cpp index 73fc480e1d3ebd..fb458dd5020b73 100644 --- a/deps/icu-small/source/i18n/rbtz.cpp +++ b/deps/icu-small/source/i18n/rbtz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/regexcmp.cpp b/deps/icu-small/source/i18n/regexcmp.cpp index 8262cfaed45c13..d0e166cfa446d9 100644 --- a/deps/icu-small/source/i18n/regexcmp.cpp +++ b/deps/icu-small/source/i18n/regexcmp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: regexcmp.cpp // @@ -2603,7 +2605,11 @@ void RegexCompile::findCaseInsensitiveStarters(UChar32 c, UnicodeSet *starterCh // End of machine generated data. - if (u_hasBinaryProperty(c, UCHAR_CASE_SENSITIVE)) { + if (c < UCHAR_MIN_VALUE || c > UCHAR_MAX_VALUE) { + // This function should never be called with an invalid input character. + U_ASSERT(FALSE); + starterChars->clear(); + } else if (u_hasBinaryProperty(c, UCHAR_CASE_SENSITIVE)) { UChar32 caseFoldedC = u_foldCase(c, U_FOLD_CASE_DEFAULT); starterChars->set(caseFoldedC, caseFoldedC); diff --git a/deps/icu-small/source/i18n/regexcmp.h b/deps/icu-small/source/i18n/regexcmp.h index 896de17f58ead0..931f2387b5169b 100644 --- a/deps/icu-small/source/i18n/regexcmp.h +++ b/deps/icu-small/source/i18n/regexcmp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // regexcmp.h // diff --git a/deps/icu-small/source/i18n/regexcst.h b/deps/icu-small/source/i18n/regexcst.h index 8e572e21207591..259b44f5dd734e 100644 --- a/deps/icu-small/source/i18n/regexcst.h +++ b/deps/icu-small/source/i18n/regexcst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html //--------------------------------------------------------------------------------- // // Generated Header File. Do not edit by hand. diff --git a/deps/icu-small/source/i18n/regexcst.pl b/deps/icu-small/source/i18n/regexcst.pl old mode 100644 new mode 100755 index c15d2868b28530..6c06b4eb5fc56a --- a/deps/icu-small/source/i18n/regexcst.pl +++ b/deps/icu-small/source/i18n/regexcst.pl @@ -1,4 +1,6 @@ #!/usr/bin/perl +# Copyright (C) 2016 and later: Unicode, Inc. and others. +# License & terms of use: http://www.unicode.org/copyright.html # ******************************************************************** # * COPYRIGHT: # * Copyright (c) 2002-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/regeximp.cpp b/deps/icu-small/source/i18n/regeximp.cpp index d923deb9e835e1..c1360ebf6cd943 100644 --- a/deps/icu-small/source/i18n/regeximp.cpp +++ b/deps/icu-small/source/i18n/regeximp.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 2012 International Business Machines Corporation // and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/regeximp.h b/deps/icu-small/source/i18n/regeximp.h index c6c3b0d6ca312b..0261c58c637a25 100644 --- a/deps/icu-small/source/i18n/regeximp.h +++ b/deps/icu-small/source/i18n/regeximp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // Copyright (C) 2002-2015 International Business Machines Corporation // and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/regexst.cpp b/deps/icu-small/source/i18n/regexst.cpp index 1ef879e39913e9..a8feffa1bd2009 100644 --- a/deps/icu-small/source/i18n/regexst.cpp +++ b/deps/icu-small/source/i18n/regexst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // regexst.h // diff --git a/deps/icu-small/source/i18n/regexst.h b/deps/icu-small/source/i18n/regexst.h index 59faa4846b2d09..21f7ec945c748a 100644 --- a/deps/icu-small/source/i18n/regexst.h +++ b/deps/icu-small/source/i18n/regexst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // regexst.h // diff --git a/deps/icu-small/source/i18n/regextxt.cpp b/deps/icu-small/source/i18n/regextxt.cpp index 2156756a491411..d6157f5ed6d02e 100644 --- a/deps/icu-small/source/i18n/regextxt.cpp +++ b/deps/icu-small/source/i18n/regextxt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2008-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/regextxt.h b/deps/icu-small/source/i18n/regextxt.h index 5b59838a92bf3c..c5651aefd4f74c 100644 --- a/deps/icu-small/source/i18n/regextxt.h +++ b/deps/icu-small/source/i18n/regextxt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2008-2010, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/region.cpp b/deps/icu-small/source/i18n/region.cpp index 551960bfe839ad..fdd467fc98a411 100644 --- a/deps/icu-small/source/i18n/region.cpp +++ b/deps/icu-small/source/i18n/region.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2014-2015, International Business Machines Corporation and +* Copyright (C) 2014-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -67,8 +69,7 @@ static UVector *allRegions = NULL; static const UChar UNKNOWN_REGION_ID [] = { 0x5A, 0x5A, 0 }; /* "ZZ" */ static const UChar OUTLYING_OCEANIA_REGION_ID [] = { 0x51, 0x4F, 0 }; /* "QO" */ static const UChar WORLD_ID [] = { 0x30, 0x30, 0x31, 0 }; /* "001" */ -static const UChar RANGE_MARKER [] = { 0x7e, 0 }; /* "~" */ -static const UnicodeString RANGE_MARKER_STRING(RANGE_MARKER); +static const UChar RANGE_MARKER = 0x7E; /* '~' */ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RegionNameEnumeration) @@ -80,7 +81,7 @@ UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RegionNameEnumeration) * If the region data has already loaded, then this method simply returns without doing * anything meaningful. */ -void Region::loadRegionData(UErrorCode &status) { +void U_CALLCONV Region::loadRegionData(UErrorCode &status) { // Construct service objs first LocalUHashtablePointer newRegionIDMap(uhash_open(uhash_hashUnicodeString, uhash_compareUnicodeString, NULL, &status)); @@ -121,7 +122,7 @@ void Region::loadRegionData(UErrorCode &status) { while ( ures_hasNext(regionRegular.getAlias()) ) { UnicodeString regionName = ures_getNextUnicodeString(regionRegular.getAlias(),NULL,&status); - int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER_STRING); + int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER); UChar buf[6]; regionName.extract(buf,6,status); if ( rangeMarkerLocation > 0 ) { @@ -140,7 +141,7 @@ void Region::loadRegionData(UErrorCode &status) { while ( ures_hasNext(regionMacro.getAlias()) ) { UnicodeString regionName = ures_getNextUnicodeString(regionMacro.getAlias(),NULL,&status); - int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER_STRING); + int32_t rangeMarkerLocation = regionName.indexOf(RANGE_MARKER); UChar buf[6]; regionName.extract(buf,6,status); if ( rangeMarkerLocation > 0 ) { diff --git a/deps/icu-small/source/i18n/region_impl.h b/deps/icu-small/source/i18n/region_impl.h index 2bd97f61052e2b..852209603b116a 100644 --- a/deps/icu-small/source/i18n/region_impl.h +++ b/deps/icu-small/source/i18n/region_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/reldatefmt.cpp b/deps/icu-small/source/i18n/reldatefmt.cpp index 29f760e0e8dd19..7009b190a25cb9 100644 --- a/deps/icu-small/source/i18n/reldatefmt.cpp +++ b/deps/icu-small/source/i18n/reldatefmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014-2016, International Business Machines Corporation and @@ -178,14 +180,11 @@ namespace { /** * Sink for enumerating all of the measurement unit display names. - * Contains inner sink classes, each one corresponding to a level of the resource table. * * More specific bundles (en_GB) are enumerated before their parents (en_001, en, root): * Only store a value if it is still missing, that is, it has not been overridden. - * - * C++: Each inner sink class has a reference to the main outer sink. */ -struct RelDateTimeFmtDataSink : public ResourceTableSink { +struct RelDateTimeFmtDataSink : public ResourceSink { /** * Sink for patterns for relative dates and times. For example, @@ -291,188 +290,16 @@ struct RelDateTimeFmtDataSink : public ResourceTableSink { return -1; } - // Sinks for additional levels under /fields/*/relative/ and /fields/*/relativeTime/ - - /** - * Make list of simplePatternFmtList, for past and for future. - * Set a SimpleFormatter for the - * - * Fill in values for the particular plural given, e.g., ONE, FEW, OTHER, etc. - */ - struct RelDateTimeDetailSink : public ResourceTableSink { - RelDateTimeDetailSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelDateTimeDetailSink(); - - virtual void put(const char *key, const ResourceValue &value, - UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - - outer.relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (outer.relUnitIndex < 0) { - return; - } - - /* Make two lists of simplePatternFmtList, one for past and one for future. - * Set a SimpleFormatter pattern for the - * - * Fill in values for the particular plural given, e.g., ONE, FEW, OTHER, etc. - */ - int32_t pluralIndex = StandardPlural::indexOrNegativeFromString(key); - if (pluralIndex >= 0) { - SimpleFormatter **patterns = - outer.outputData.relativeUnitsFormatters[outer.style][outer.relUnitIndex] - [outer.pastFutureIndex]; - // Only set if not already established. - if (patterns[pluralIndex] == NULL) { - patterns[pluralIndex] = new SimpleFormatter( - value.getUnicodeString(errorCode), 0, 1, errorCode); - if (patterns[pluralIndex] == NULL) { - errorCode = U_MEMORY_ALLOCATION_ERROR; - } - } - } - } - - RelDateTimeFmtDataSink &outer; - } relDateTimeDetailSink; - - /* - * Handles "relativeTime" entries, e.g., under "day", "hour", "minute", - * "minute-short", etc. - */ - struct RelativeTimeSink : public ResourceTableSink { - RelativeTimeSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelativeTimeSink(); - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode& errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - outer.relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (outer.relUnitIndex < 0) { - return NULL; - } - - if (uprv_strcmp(key, "past") == 0) { - outer.pastFutureIndex = 0; - } else if (uprv_strcmp(key, "future") == 0) { - outer.pastFutureIndex = 1; - } else { - // Unknown key. - return NULL; - } - return &outer.relDateTimeDetailSink; - } - - RelDateTimeFmtDataSink &outer; - } relativeTimeSink; - - /* - * Handles "relative" entries, e.g., under "day", "day-short", "fri", - * "fri-narrow", "fri-short", etc. - */ - struct RelativeSink : public ResourceTableSink { - RelativeSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~RelativeSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - int32_t direction = keyToDirection(key); - if (direction < 0) { - return; - } - - int32_t relUnitIndex = relUnitFromGeneric(outer.genericUnit); - if (relUnitIndex == UDAT_RELATIVE_SECONDS && - direction == UDAT_DIRECTION_THIS && - outer.outputData.absoluteUnits[outer.style][UDAT_ABSOLUTE_NOW] - [UDAT_DIRECTION_PLAIN].isEmpty()) { - // Handle "NOW" - outer.outputData.absoluteUnits[outer.style][UDAT_ABSOLUTE_NOW] - [UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); - } - - int32_t absUnitIndex = absUnitFromGeneric(outer.genericUnit); - if (absUnitIndex < 0) { - return; - } - // Only reset if slot is empty. - if (outer.outputData.absoluteUnits[outer.style][absUnitIndex][direction].isEmpty()) { - outer.outputData.absoluteUnits[outer.style][absUnitIndex] - [direction].fastCopyFrom(value.getUnicodeString(errorCode)); - } - } - - RelDateTimeFmtDataSink &outer; - } relativeSink; - - /* - * Handles entries under "fields", recognizing "relative" and "relativeTime" entries. - */ - struct UnitSink : public ResourceTableSink { - UnitSink(RelDateTimeFmtDataSink &sink) : outer(sink) {} - ~UnitSink(); - - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return; } - if (uprv_strcmp(key, "dn") != 0) { - return; - } - - // Handle Display Name for PLAIN direction for some units. - int32_t absUnit = absUnitFromGeneric(outer.genericUnit); - if (absUnit < 0) { - return; // Not interesting. - } - - // TODO(Travis Keep): This is a hack to get around CLDR bug 6818. - UnicodeString displayName = value.getUnicodeString(errorCode); - if (U_SUCCESS(errorCode)) { - if (uprv_strcmp("en", outer.sinkLocaleId) == 0) { - displayName.toLower(); - } - } - // end hack - - // Store displayname if not set. - if (outer.outputData.absoluteUnits[outer.style] - [absUnit][UDAT_DIRECTION_PLAIN].isEmpty()) { - outer.outputData.absoluteUnits[outer.style] - [absUnit][UDAT_DIRECTION_PLAIN].fastCopyFrom(displayName); - return; - } - } - - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode &errorCode) { - if (U_FAILURE(errorCode)) { return NULL; } - if (uprv_strcmp(key, "relative") == 0) { - return &outer.relativeSink; - } else if (uprv_strcmp(key, "relativeTime") == 0) { - return &outer.relativeTimeSink; - } - return NULL; - } - - RelDateTimeFmtDataSink &outer; - } unitSink; - - // For hack for locale "en". - // TODO(Travis Keep): This is a hack to get around CLDR bug 6818. - const char* sinkLocaleId; - // Values kept between levels of parsing the CLDR data. int32_t pastFutureIndex; // 0 == past or 1 == future UDateRelativeDateTimeFormatterStyle style; // {LONG, SHORT, NARROW} RelAbsUnit genericUnit; - int32_t relUnitIndex; - int32_t absUnitIndex; RelativeDateTimeCacheData &outputData; // Constructor - RelDateTimeFmtDataSink(RelativeDateTimeCacheData& cacheData, const char* localeId) - : relDateTimeDetailSink(*this), relativeTimeSink(*this), relativeSink(*this), - unitSink(*this), sinkLocaleId(localeId), outputData(cacheData) { + RelDateTimeFmtDataSink(RelativeDateTimeCacheData& cacheData) + : outputData(cacheData) { // Clear cacheData.fallBackCache cacheData.fallBackCache[UDAT_STYLE_LONG] = -1; cacheData.fallBackCache[UDAT_STYLE_SHORT] = -1; @@ -571,55 +398,165 @@ struct RelDateTimeFmtDataSink : public ResourceTableSink { return INVALID_UNIT; } - // Member functions of top level sink. - virtual void put(const char *key, const ResourceValue &value, UErrorCode &errorCode) { - // Only handle aliases, storing information about alias fallback. + void handlePlainDirection(ResourceValue &value, UErrorCode &errorCode) { + // Handle Display Name for PLAIN direction for some units. + if (U_FAILURE(errorCode)) { return; } + + int32_t absUnit = absUnitFromGeneric(genericUnit); + if (absUnit < 0) { + return; // Not interesting. + } + + // Store displayname if not set. + if (outputData.absoluteUnits[style] + [absUnit][UDAT_DIRECTION_PLAIN].isEmpty()) { + outputData.absoluteUnits[style] + [absUnit][UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); + return; + } + } + + void consumeTableRelative(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_STRING) { + int32_t direction = keyToDirection(key); + if (direction < 0) { + continue; + } - if (U_SUCCESS(errorCode)) { - if (value.getType() != URES_ALIAS) { - return; + int32_t relUnitIndex = relUnitFromGeneric(genericUnit); + if (relUnitIndex == UDAT_RELATIVE_SECONDS && uprv_strcmp(key, "0") == 0 && + outputData.absoluteUnits[style][UDAT_ABSOLUTE_NOW][UDAT_DIRECTION_PLAIN].isEmpty()) { + // Handle "NOW" + outputData.absoluteUnits[style][UDAT_ABSOLUTE_NOW] + [UDAT_DIRECTION_PLAIN].fastCopyFrom(value.getUnicodeString(errorCode)); + } + + int32_t absUnitIndex = absUnitFromGeneric(genericUnit); + if (absUnitIndex < 0) { + continue; + } + // Only reset if slot is empty. + if (outputData.absoluteUnits[style][absUnitIndex][direction].isEmpty()) { + outputData.absoluteUnits[style][absUnitIndex] + [direction].fastCopyFrom(value.getUnicodeString(errorCode)); + } } - const UnicodeString valueStr = value.getAliasUnicodeString(errorCode); - if (U_SUCCESS(errorCode)) { - UDateRelativeDateTimeFormatterStyle sourceStyle= styleFromString(key); - UDateRelativeDateTimeFormatterStyle targetStyle = - styleFromAliasUnicodeString(valueStr); - - if (sourceStyle == targetStyle) { - errorCode = U_INVALID_FORMAT_ERROR; - return; + } + } + + void consumeTimeDetail(int32_t relUnitIndex, + const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_STRING) { + int32_t pluralIndex = StandardPlural::indexOrNegativeFromString(key); + if (pluralIndex >= 0) { + SimpleFormatter **patterns = + outputData.relativeUnitsFormatters[style][relUnitIndex] + [pastFutureIndex]; + // Only set if not already established. + if (patterns[pluralIndex] == NULL) { + patterns[pluralIndex] = new SimpleFormatter( + value.getUnicodeString(errorCode), 0, 1, errorCode); + if (patterns[pluralIndex] == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + } + } } - if (outputData.fallBackCache[sourceStyle] != -1 && - outputData.fallBackCache[sourceStyle] != targetStyle) { - errorCode = U_INVALID_FORMAT_ERROR; - return; + } + } + } + + void consumeTableRelativeTime(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable relativeTimeTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + int32_t relUnitIndex = relUnitFromGeneric(genericUnit); + if (relUnitIndex < 0) { + return; + } + for (int32_t i = 0; relativeTimeTable.getKeyAndValue(i, key, value); ++i) { + if (uprv_strcmp(key, "past") == 0) { + pastFutureIndex = 0; + } else if (uprv_strcmp(key, "future") == 0) { + pastFutureIndex = 1; + } else { + // Unknown key. + continue; + } + consumeTimeDetail(relUnitIndex, key, value, errorCode); + } + } + + void consumeAlias(const char *key, const ResourceValue &value, UErrorCode &errorCode) { + + UDateRelativeDateTimeFormatterStyle sourceStyle = styleFromString(key); + const UnicodeString valueStr = value.getAliasUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { return; } + + UDateRelativeDateTimeFormatterStyle targetStyle = + styleFromAliasUnicodeString(valueStr); + + if (sourceStyle == targetStyle) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + if (outputData.fallBackCache[sourceStyle] != -1 && + outputData.fallBackCache[sourceStyle] != targetStyle) { + errorCode = U_INVALID_FORMAT_ERROR; + return; + } + outputData.fallBackCache[sourceStyle] = targetStyle; + } + + void consumeTimeUnit(const char *key, ResourceValue &value, UErrorCode &errorCode) { + ResourceTable unitTypesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; unitTypesTable.getKeyAndValue(i, key, value); ++i) { + // Handle display name. + if (uprv_strcmp(key, "dn") == 0 && value.getType() == URES_STRING) { + handlePlainDirection(value, errorCode); + } + if (value.getType() == URES_TABLE) { + if (uprv_strcmp(key, "relative") == 0) { + consumeTableRelative(key, value, errorCode); + } else if (uprv_strcmp(key, "relativeTime") == 0) { + consumeTableRelativeTime(key, value, errorCode); } - outputData.fallBackCache[sourceStyle] = targetStyle; } } - return; } - // Top level sink - virtual ResourceTableSink *getOrCreateTableSink( - const char *key, int32_t /* initialSize */, UErrorCode& /* errorCode */) { - style= styleFromString(key); - int32_t unitSize = uprv_strlen(key) - styleSuffixLength(style); - genericUnit = unitOrNegativeFromString(key, unitSize); - if (style < 0 || genericUnit == INVALID_UNIT) { - return NULL; - } - return &unitSink; + virtual void put(const char *key, ResourceValue &value, + UBool /*noFallback*/, UErrorCode &errorCode) { + // Main entry point to sink + ResourceTable table = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; table.getKeyAndValue(i, key, value); ++i) { + if (value.getType() == URES_ALIAS) { + consumeAlias(key, value, errorCode); + } else { + style = styleFromString(key); + int32_t unitSize = uprv_strlen(key) - styleSuffixLength(style); + genericUnit = unitOrNegativeFromString(key, unitSize); + if (style >= 0 && genericUnit != INVALID_UNIT) { + consumeTimeUnit(key, value, errorCode); + } + } + } } + }; // Virtual destructors must be defined out of line. -RelDateTimeFmtDataSink::RelDateTimeDetailSink::~RelDateTimeDetailSink() {} -RelDateTimeFmtDataSink::RelativeTimeSink::~RelativeTimeSink() {} -RelDateTimeFmtDataSink::RelativeSink::~RelativeSink() {} -RelDateTimeFmtDataSink::UnitSink::~UnitSink() {} RelDateTimeFmtDataSink::~RelDateTimeFmtDataSink() {} - } // namespace DateFormatSymbols::DtWidthType styleToDateFormatSymbolWidth[UDAT_STYLE_COUNT] = { @@ -652,8 +589,10 @@ static UBool loadUnitData( RelativeDateTimeCacheData &cacheData, const char* localeId, UErrorCode &status) { - RelDateTimeFmtDataSink sink(cacheData, localeId); - ures_getAllTableItemsWithFallback(resource, "fields", sink, status); + + RelDateTimeFmtDataSink sink(cacheData); + + ures_getAllItemsWithFallback(resource, "fields", sink, status); // Get the weekday names from DateFormatSymbols. loadWeekdayNames(cacheData.absoluteUnits, localeId, status); diff --git a/deps/icu-small/source/i18n/reldtfmt.cpp b/deps/icu-small/source/i18n/reldtfmt.cpp index 7055e724bbe7e5..4a928695356b0c 100644 --- a/deps/icu-small/source/i18n/reldtfmt.cpp +++ b/deps/icu-small/source/i18n/reldtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -11,15 +13,15 @@ #include -#include "reldtfmt.h" #include "unicode/datefmt.h" +#include "unicode/reldatefmt.h" #include "unicode/simpleformatter.h" #include "unicode/smpdtfmt.h" #include "unicode/udisplaycontext.h" #include "unicode/uchar.h" #include "unicode/brkiter.h" -#include "gregoimp.h" // for CalendarData +#include "reldtfmt.h" #include "cmemory.h" #include "uresimp.h" @@ -35,16 +37,12 @@ struct URelativeString { const UChar* string; /** string, or NULL if not set **/ }; -static const char DT_DateTimePatternsTag[]="DateTimePatterns"; - - UOBJECT_DEFINE_RTTI_IMPLEMENTATION(RelativeDateFormat) RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : DateFormat(other), fDateTimeFormatter(NULL), fDatePattern(other.fDatePattern), fTimePattern(other.fTimePattern), fCombinedFormat(NULL), fDateStyle(other.fDateStyle), fLocale(other.fLocale), - fDayMin(other.fDayMin), fDayMax(other.fDayMax), fDatesLen(other.fDatesLen), fDates(NULL), fCombinedHasDateAtStart(other.fCombinedHasDateAtStart), fCapitalizationInfoSet(other.fCapitalizationInfoSet), @@ -59,8 +57,8 @@ RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : fCombinedFormat = new SimpleFormatter(*other.fCombinedFormat); } if (fDatesLen > 0) { - fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); - uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*fDatesLen); + fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*(size_t)fDatesLen); + uprv_memcpy(fDates, other.fDates, sizeof(fDates[0])*(size_t)fDatesLen); } #if !UCONFIG_NO_BREAK_ITERATION if (other.fCapitalizationBrkIter != NULL) { @@ -72,7 +70,7 @@ RelativeDateFormat::RelativeDateFormat(const RelativeDateFormat& other) : RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatStyle dateStyle, const Locale& locale, UErrorCode& status) : DateFormat(), fDateTimeFormatter(NULL), fDatePattern(), fTimePattern(), fCombinedFormat(NULL), - fDateStyle(dateStyle), fLocale(locale), fDayMin(0), fDayMax(0), fDatesLen(0), fDates(NULL), + fDateStyle(dateStyle), fLocale(locale), fDatesLen(0), fDates(NULL), fCombinedHasDateAtStart(FALSE), fCapitalizationInfoSet(FALSE), fCapitalizationOfRelativeUnitsForUIListMenu(FALSE), fCapitalizationOfRelativeUnitsForStandAlone(FALSE), fCapitalizationBrkIter(NULL) @@ -112,6 +110,7 @@ RelativeDateFormat::RelativeDateFormat( UDateFormatStyle timeStyle, UDateFormatS fDateTimeFormatter=dynamic_cast(df); if (fDateTimeFormatter == NULL) { status = U_UNSUPPORTED_ERROR; + delete df; return; } fDateTimeFormatter->toPattern(fTimePattern); @@ -353,19 +352,14 @@ const UChar *RelativeDateFormat::getStringForDay(int32_t day, int32_t &len, UErr return NULL; } - // Is it outside the resource bundle's range? - if(day < fDayMin || day > fDayMax) { - return NULL; // don't have it. - } - - // Linear search the held strings - for(int n=0;n= 0 && n < fDatesLen) { + if (fDates[n].offset == day && fDates[n].string != NULL) { len = fDates[n].len; return fDates[n].string; } } - return NULL; // not found. } @@ -453,125 +447,114 @@ RelativeDateFormat::initCapitalizationContextInfo(const Locale& thelocale) #if !UCONFIG_NO_BREAK_ITERATION const char * localeID = (thelocale != NULL)? thelocale.getBaseName(): NULL; UErrorCode status = U_ZERO_ERROR; - UResourceBundle *rb = ures_open(NULL, localeID, &status); - rb = ures_getByKeyWithFallback(rb, "contextTransforms", rb, &status); - rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); + LocalUResourceBundlePointer rb(ures_open(NULL, localeID, &status)); + ures_getByKeyWithFallback(rb.getAlias(), + "contextTransforms/relative", + rb.getAlias(), &status); if (U_SUCCESS(status) && rb != NULL) { int32_t len = 0; - const int32_t * intVector = ures_getIntVector(rb, &len, &status); + const int32_t * intVector = ures_getIntVector(rb.getAlias(), + &len, &status); if (U_SUCCESS(status) && intVector != NULL && len >= 2) { fCapitalizationOfRelativeUnitsForUIListMenu = intVector[0]; fCapitalizationOfRelativeUnitsForStandAlone = intVector[1]; } } - ures_close(rb); #endif } +namespace { + +/** + * Sink for getting data from fields/day/relative data. + * For loading relative day names, e.g., "yesterday", "today". + */ + +struct RelDateFmtDataSink : public ResourceSink { + URelativeString *fDatesPtr; + int32_t fDatesLen; + + RelDateFmtDataSink(URelativeString* fDates, int32_t len) : fDatesPtr(fDates), fDatesLen(len) { + for (int32_t i = 0; i < fDatesLen; ++i) { + fDatesPtr[i].offset = 0; + fDatesPtr[i].string = NULL; + fDatesPtr[i].len = -1; + } + } + + virtual ~RelDateFmtDataSink(); + + virtual void put(const char *key, ResourceValue &value, + UBool /*noFallback*/, UErrorCode &errorCode) { + ResourceTable relDayTable = value.getTable(errorCode); + int32_t n = 0; + int32_t len = 0; + for (int32_t i = 0; relDayTable.getKeyAndValue(i, key, value); ++i) { + // Find the relative offset. + int32_t offset = atoi(key); + + // Put in the proper spot, but don't override existing data. + n = offset + UDAT_DIRECTION_THIS; // Converts to index in UDAT_R + if (n < fDatesLen && fDatesPtr[n].string == NULL) { + // Not found and n is an empty slot. + fDatesPtr[n].offset = offset; + fDatesPtr[n].string = value.getString(len, errorCode); + fDatesPtr[n].len = len; + } + } + } +}; + + +// Virtual destructors must be defined out of line. +RelDateFmtDataSink::~RelDateFmtDataSink() {} + +} // Namespace + + static const UChar patItem1[] = {0x7B,0x31,0x7D}; // "{1}" static const int32_t patItem1Len = 3; void RelativeDateFormat::loadDates(UErrorCode &status) { - CalendarData calData(fLocale, "gregorian", status); - - UErrorCode tempStatus = status; - UResourceBundle *dateTimePatterns = calData.getByKey(DT_DateTimePatternsTag, tempStatus); - if(U_SUCCESS(tempStatus)) { - int32_t patternsSize = ures_getSize(dateTimePatterns); + UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); + LocalUResourceBundlePointer dateTimePatterns( + ures_getByKeyWithFallback(rb, + "calendar/gregorian/DateTimePatterns", + (UResourceBundle*)NULL, &status)); + if(U_SUCCESS(status)) { + int32_t patternsSize = ures_getSize(dateTimePatterns.getAlias()); if (patternsSize > kDateTime) { int32_t resStrLen = 0; - int32_t glueIndex = kDateTime; - if (patternsSize >= (DateFormat::kDateTimeOffset + DateFormat::kShort + 1)) { - // Get proper date time format - switch (fDateStyle) { - case kFullRelative: - case kFull: - glueIndex = kDateTimeOffset + kFull; - break; - case kLongRelative: - case kLong: - glueIndex = kDateTimeOffset + kLong; - break; - case kMediumRelative: - case kMedium: - glueIndex = kDateTimeOffset + kMedium; - break; - case kShortRelative: - case kShort: - glueIndex = kDateTimeOffset + kShort; - break; - default: - break; + if (patternsSize >= (kDateTimeOffset + kShort + 1)) { + int32_t offsetIncrement = (fDateStyle & ~kRelative); // Remove relative bit. + if (offsetIncrement >= (int32_t)kFull && + offsetIncrement <= (int32_t)kShortRelative) { + glueIndex = kDateTimeOffset + offsetIncrement; } } - const UChar *resStr = ures_getStringByIndex(dateTimePatterns, glueIndex, &resStrLen, &tempStatus); - if (U_SUCCESS(tempStatus) && resStrLen >= patItem1Len && u_strncmp(resStr,patItem1,patItem1Len)==0) { + const UChar *resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), glueIndex, &resStrLen, &status); + if (U_SUCCESS(status) && resStrLen >= patItem1Len && u_strncmp(resStr,patItem1,patItem1Len)==0) { fCombinedHasDateAtStart = TRUE; } - fCombinedFormat = new SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, tempStatus); + fCombinedFormat = new SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, status); } } - UResourceBundle *rb = ures_open(NULL, fLocale.getBaseName(), &status); - rb = ures_getByKeyWithFallback(rb, "fields", rb, &status); - rb = ures_getByKeyWithFallback(rb, "day", rb, &status); - rb = ures_getByKeyWithFallback(rb, "relative", rb, &status); - // set up min/max - fDayMin=-1; - fDayMax=1; - - if(U_FAILURE(status)) { - fDatesLen=0; - ures_close(rb); - return; - } - - fDatesLen = ures_getSize(rb); + // Data loading for relative names, e.g., "yesterday", "today", "tomorrow". + fDatesLen = UDAT_DIRECTION_COUNT; // Maximum defined by data. fDates = (URelativeString*) uprv_malloc(sizeof(fDates[0])*fDatesLen); - // Load in each item into the array... - int n = 0; - - UResourceBundle *subString = NULL; - - while(ures_hasNext(rb) && U_SUCCESS(status)) { // iterate over items - subString = ures_getNextResource(rb, subString, &status); - - if(U_FAILURE(status) || (subString==NULL)) break; - - // key = offset # - const char *key = ures_getKey(subString); - - // load the string and length - int32_t aLen; - const UChar* aString = ures_getString(subString, &aLen, &status); + RelDateFmtDataSink sink(fDates, fDatesLen); + ures_getAllItemsWithFallback(rb, "fields/day/relative", sink, status); - if(U_FAILURE(status) || aString == NULL) break; - - // calculate the offset - int32_t offset = atoi(key); - - // set min/max - if(offset < fDayMin) { - fDayMin = offset; - } - if(offset > fDayMax) { - fDayMax = offset; - } - - // copy the string pointer - fDates[n].offset = offset; - fDates[n].string = aString; - fDates[n].len = aLen; - - n++; - } - ures_close(subString); ures_close(rb); - // the fDates[] array could be sorted here, for direct access. + if(U_FAILURE(status)) { + fDatesLen=0; + return; + } } //---------------------------------------------------------------------- @@ -609,4 +592,4 @@ int32_t RelativeDateFormat::dayDifference(Calendar &cal, UErrorCode &status) { U_NAMESPACE_END -#endif +#endif /* !UCONFIG_NO_FORMATTING */ diff --git a/deps/icu-small/source/i18n/reldtfmt.h b/deps/icu-small/source/i18n/reldtfmt.h index f82855c357f1fc..ea091a91c393d5 100644 --- a/deps/icu-small/source/i18n/reldtfmt.h +++ b/deps/icu-small/source/i18n/reldtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and * @@ -255,8 +257,6 @@ class RelativeDateFormat : public DateFormat { UDateFormatStyle fDateStyle; Locale fLocale; - int32_t fDayMin; // day id of lowest # - int32_t fDayMax; // day id of highest # int32_t fDatesLen; // Length of array URelativeString *fDates; // array of strings @@ -264,7 +264,11 @@ class RelativeDateFormat : public DateFormat { UBool fCapitalizationInfoSet; UBool fCapitalizationOfRelativeUnitsForUIListMenu; UBool fCapitalizationOfRelativeUnitsForStandAlone; +#if !UCONFIG_NO_BREAK_ITERATION BreakIterator* fCapitalizationBrkIter; +#else + UObject* fCapitalizationBrkIter; +#endif /** * Get the string at a specific offset. @@ -333,4 +337,3 @@ U_NAMESPACE_END #endif /* #if !UCONFIG_NO_FORMATTING */ #endif // RELDTFMT_H -//eof diff --git a/deps/icu-small/source/i18n/rematch.cpp b/deps/icu-small/source/i18n/rematch.cpp index 348fd45d22ad58..5a5bb80e05e642 100644 --- a/deps/icu-small/source/i18n/rematch.cpp +++ b/deps/icu-small/source/i18n/rematch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (C) 2002-2016 International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/remtrans.cpp b/deps/icu-small/source/i18n/remtrans.cpp index 4ee98f7d3cc10a..89837f991d6f30 100644 --- a/deps/icu-small/source/i18n/remtrans.cpp +++ b/deps/icu-small/source/i18n/remtrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/remtrans.h b/deps/icu-small/source/i18n/remtrans.h index 25a5609dffeec8..a5635781f979c7 100644 --- a/deps/icu-small/source/i18n/remtrans.h +++ b/deps/icu-small/source/i18n/remtrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/repattrn.cpp b/deps/icu-small/source/i18n/repattrn.cpp index bf69dbb66f4295..b792ca048445b5 100644 --- a/deps/icu-small/source/i18n/repattrn.cpp +++ b/deps/icu-small/source/i18n/repattrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // // file: repattrn.cpp // diff --git a/deps/icu-small/source/i18n/rulebasedcollator.cpp b/deps/icu-small/source/i18n/rulebasedcollator.cpp index 758c65769cc52e..4852667ada8079 100644 --- a/deps/icu-small/source/i18n/rulebasedcollator.cpp +++ b/deps/icu-small/source/i18n/rulebasedcollator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines @@ -1609,7 +1611,7 @@ RuleBasedCollator::isUnsafe(UChar32 c) const { return data->isUnsafeBackward(c, settings->isNumeric()); } -void +void U_CALLCONV RuleBasedCollator::computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode) { t->maxExpansions = CollationElementIterator::computeMaxExpansions(t->data, errorCode); } diff --git a/deps/icu-small/source/i18n/scientificnumberformatter.cpp b/deps/icu-small/source/i18n/scientificnumberformatter.cpp index b3bc09939ceb9f..56a43f9b7fa45e 100644 --- a/deps/icu-small/source/i18n/scientificnumberformatter.cpp +++ b/deps/icu-small/source/i18n/scientificnumberformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/scriptset.cpp b/deps/icu-small/source/i18n/scriptset.cpp index c20a55d00baad5..ab7cb1e68ec449 100644 --- a/deps/icu-small/source/i18n/scriptset.cpp +++ b/deps/icu-small/source/i18n/scriptset.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2014, International Business Machines @@ -191,6 +193,15 @@ int32_t ScriptSet::nextSetBit(int32_t fromIndex) const { return -1; } +UBool ScriptSet::isEmpty() const { + for (uint32_t i=0; i= 0; i = nextSetBit(i + 1)) { @@ -238,6 +249,41 @@ ScriptSet &ScriptSet::parseScripts(const UnicodeString &scriptString, UErrorCode return *this; } +void ScriptSet::setScriptExtensions(UChar32 codePoint, UErrorCode& status) { + if (U_FAILURE(status)) { return; } + static const int32_t FIRST_GUESS_SCRIPT_CAPACITY = 5; + MaybeStackArray scripts; + UErrorCode internalStatus = U_ZERO_ERROR; + int32_t script_count = -1; + + while (TRUE) { + script_count = uscript_getScriptExtensions( + codePoint, scripts.getAlias(), FIRST_GUESS_SCRIPT_CAPACITY, &internalStatus); + if (internalStatus == U_BUFFER_OVERFLOW_ERROR) { + // Need to allocate more space + if (scripts.resize(script_count) == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + internalStatus = U_ZERO_ERROR; + } else { + break; + } + } + + // Check if we failed for some reason other than buffer overflow + if (U_FAILURE(internalStatus)) { + status = internalStatus; + return; + } + + // Load the scripts into the ScriptSet and return + for (int32_t i = 0; i < script_count; i++) { + this->set(scripts[i], status); + if (U_FAILURE(status)) { return; } + } +} + U_NAMESPACE_END U_CAPI UBool U_EXPORT2 diff --git a/deps/icu-small/source/i18n/scriptset.h b/deps/icu-small/source/i18n/scriptset.h index 62af5d591d100c..e8de3b9613f990 100644 --- a/deps/icu-small/source/i18n/scriptset.h +++ b/deps/icu-small/source/i18n/scriptset.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2013, International Business Machines @@ -38,6 +40,7 @@ class U_I18N_API ScriptSet: public UMemory { ~ScriptSet(); UBool operator == (const ScriptSet &other) const; + UBool operator != (const ScriptSet &other) const {return !(*this == other);}; ScriptSet & operator = (const ScriptSet &other); UBool test(UScriptCode script, UErrorCode &status) const; @@ -55,9 +58,14 @@ class U_I18N_API ScriptSet: public UMemory { int32_t hashCode() const; int32_t nextSetBit(int32_t script) const; + UBool isEmpty() const; + UnicodeString &displayScripts(UnicodeString &dest) const; // append script names to dest string. ScriptSet & parseScripts(const UnicodeString &scriptsString, UErrorCode &status); // Replaces ScriptSet contents. + // Wraps around UScript::getScriptExtensions() and adds the corresponding scripts to this instance. + void setScriptExtensions(UChar32 codePoint, UErrorCode& status); + private: uint32_t bits[6]; }; diff --git a/deps/icu-small/source/i18n/search.cpp b/deps/icu-small/source/i18n/search.cpp index 8d2de67974e1d9..77323cc664fc19 100644 --- a/deps/icu-small/source/i18n/search.cpp +++ b/deps/icu-small/source/i18n/search.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2008,2010 IBM and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/selfmt.cpp b/deps/icu-small/source/i18n/selfmt.cpp index 5016e8e30a16c3..041fea515c88ba 100644 --- a/deps/icu-small/source/i18n/selfmt.cpp +++ b/deps/icu-small/source/i18n/selfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/selfmtimpl.h b/deps/icu-small/source/i18n/selfmtimpl.h index 02638448718e56..75bc3e343a8f36 100644 --- a/deps/icu-small/source/i18n/selfmtimpl.h +++ b/deps/icu-small/source/i18n/selfmtimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/sharedbreakiterator.cpp b/deps/icu-small/source/i18n/sharedbreakiterator.cpp index 430dfba1ccb24a..ca962c6283374a 100644 --- a/deps/icu-small/source/i18n/sharedbreakiterator.cpp +++ b/deps/icu-small/source/i18n/sharedbreakiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2014, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/sharedbreakiterator.h b/deps/icu-small/source/i18n/sharedbreakiterator.h index 09ba4312a3995a..58be1f6a76e906 100644 --- a/deps/icu-small/source/i18n/sharedbreakiterator.h +++ b/deps/icu-small/source/i18n/sharedbreakiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharedcalendar.h b/deps/icu-small/source/i18n/sharedcalendar.h index 2a10c88b593851..f6d97b55bc128f 100644 --- a/deps/icu-small/source/i18n/sharedcalendar.h +++ b/deps/icu-small/source/i18n/sharedcalendar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/shareddateformatsymbols.h b/deps/icu-small/source/i18n/shareddateformatsymbols.h index 8451183bc29aa5..a11a8a391b55ba 100644 --- a/deps/icu-small/source/i18n/shareddateformatsymbols.h +++ b/deps/icu-small/source/i18n/shareddateformatsymbols.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharednumberformat.h b/deps/icu-small/source/i18n/sharednumberformat.h index b6f5a8c923f36a..fcb618a4d48d50 100644 --- a/deps/icu-small/source/i18n/sharednumberformat.h +++ b/deps/icu-small/source/i18n/sharednumberformat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/sharedpluralrules.h b/deps/icu-small/source/i18n/sharedpluralrules.h index 51773008fb69d2..faed6dea0e174d 100644 --- a/deps/icu-small/source/i18n/sharedpluralrules.h +++ b/deps/icu-small/source/i18n/sharedpluralrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2014, International Business Machines diff --git a/deps/icu-small/source/i18n/significantdigitinterval.h b/deps/icu-small/source/i18n/significantdigitinterval.h index a3d86f1c8fe280..336af784a50649 100644 --- a/deps/icu-small/source/i18n/significantdigitinterval.h +++ b/deps/icu-small/source/i18n/significantdigitinterval.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/simpletz.cpp b/deps/icu-small/source/i18n/simpletz.cpp index 3696d210736d7f..7dadef5ae60620 100644 --- a/deps/icu-small/source/i18n/simpletz.cpp +++ b/deps/icu-small/source/i18n/simpletz.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/smallintformatter.cpp b/deps/icu-small/source/i18n/smallintformatter.cpp index 44dd9391cb722c..b96f6dad3b5f5d 100644 --- a/deps/icu-small/source/i18n/smallintformatter.cpp +++ b/deps/icu-small/source/i18n/smallintformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/smallintformatter.h b/deps/icu-small/source/i18n/smallintformatter.h index 2907c6203a6f6c..846d6b405472ae 100644 --- a/deps/icu-small/source/i18n/smallintformatter.h +++ b/deps/icu-small/source/i18n/smallintformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/smpdtfmt.cpp b/deps/icu-small/source/i18n/smpdtfmt.cpp index 145587fb12ee14..85cc162a11f39f 100644 --- a/deps/icu-small/source/i18n/smpdtfmt.cpp +++ b/deps/icu-small/source/i18n/smpdtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2016, International Business Machines Corporation and * @@ -50,10 +52,10 @@ #include "unicode/vtzone.h" #include "unicode/udisplaycontext.h" #include "unicode/brkiter.h" +#include "uresimp.h" #include "olsontz.h" #include "patternprops.h" #include "fphdlimp.h" -#include "gregoimp.h" #include "hebrwcal.h" #include "cstring.h" #include "uassert.h" @@ -164,9 +166,6 @@ static const UChar SUPPRESS_NEGATIVE_PREFIX[] = {0xAB00, 0}; * These are the tags we expect to see in normal resource bundle files associated * with a locale. */ -static const char gDateTimePatternsTag[]="DateTimePatterns"; - -//static const UChar gEtcUTC[] = {0x45, 0x74, 0x63, 0x2F, 0x55, 0x54, 0x43, 0x00}; // "Etc/UTC" static const UChar QUOTE = 0x27; // Single quote /* @@ -702,20 +701,42 @@ void SimpleDateFormat::construct(EStyle timeStyle, initializeCalendar(NULL, locale, status); if (U_FAILURE(status)) return; - CalendarData calData(locale, fCalendar?fCalendar->getType():NULL, status); - UResourceBundle *dateTimePatterns = calData.getByKey(gDateTimePatternsTag, status); - UResourceBundle *currentBundle; + // Load date time patterns directly from resources. + const char* cType = fCalendar ? fCalendar->getType() : NULL; + LocalUResourceBundlePointer bundle(ures_open(NULL, locale.getBaseName(), &status)); + if (U_FAILURE(status)) return; + + UBool cTypeIsGregorian = TRUE; + LocalUResourceBundlePointer dateTimePatterns; + if (cType != NULL && uprv_strcmp(cType, "gregorian") != 0) { + CharString resourcePath("calendar/", status); + resourcePath.append(cType, status).append("/DateTimePatterns", status); + dateTimePatterns.adoptInstead( + ures_getByKeyWithFallback(bundle.getAlias(), resourcePath.data(), + (UResourceBundle*)NULL, &status)); + cTypeIsGregorian = FALSE; + } + // Check for "gregorian" fallback. + if (cTypeIsGregorian || status == U_MISSING_RESOURCE_ERROR) { + status = U_ZERO_ERROR; + dateTimePatterns.adoptInstead( + ures_getByKeyWithFallback(bundle.getAlias(), + "calendar/gregorian/DateTimePatterns", + (UResourceBundle*)NULL, &status)); + } if (U_FAILURE(status)) return; - if (ures_getSize(dateTimePatterns) <= kDateTime) + LocalUResourceBundlePointer currentBundle; + + if (ures_getSize(dateTimePatterns.getAlias()) <= kDateTime) { status = U_INVALID_FORMAT_ERROR; return; } - setLocaleIDs(ures_getLocaleByType(dateTimePatterns, ULOC_VALID_LOCALE, &status), - ures_getLocaleByType(dateTimePatterns, ULOC_ACTUAL_LOCALE, &status)); + setLocaleIDs(ures_getLocaleByType(dateTimePatterns.getAlias(), ULOC_VALID_LOCALE, &status), + ures_getLocaleByType(dateTimePatterns.getAlias(), ULOC_ACTUAL_LOCALE, &status)); // create a symbols object from the locale fSymbols = DateFormatSymbols::createForLocale(locale, status); @@ -736,66 +757,64 @@ void SimpleDateFormat::construct(EStyle timeStyle, // and time pattern strings. if ((timeStyle != kNone) && (dateStyle != kNone)) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)timeStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fTimeOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } - ures_close(currentBundle); UnicodeString tempus1(TRUE, resStr, resStrLen); - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)dateStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)dateStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } - ures_close(currentBundle); UnicodeString tempus2(TRUE, resStr, resStrLen); int32_t glueIndex = kDateTime; - int32_t patternsSize = ures_getSize(dateTimePatterns); + int32_t patternsSize = ures_getSize(dateTimePatterns.getAlias()); if (patternsSize >= (kDateTimeOffset + kShort + 1)) { // Get proper date time format glueIndex = (int32_t)(kDateTimeOffset + (dateStyle - kDateOffset)); } - resStr = ures_getStringByIndex(dateTimePatterns, glueIndex, &resStrLen, &status); + resStr = ures_getStringByIndex(dateTimePatterns.getAlias(), glueIndex, &resStrLen, &status); SimpleFormatter(UnicodeString(TRUE, resStr, resStrLen), 2, 2, status). format(tempus1, tempus2, fPattern, status); } @@ -803,56 +822,54 @@ void SimpleDateFormat::construct(EStyle timeStyle, // pattern string from the resources // setTo() - see DateFormatSymbols::assignArray comments else if (timeStyle != kNone) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)timeStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)timeStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } fPattern.setTo(TRUE, resStr, resStrLen); - ures_close(currentBundle); } else if (dateStyle != kNone) { - currentBundle = ures_getByIndex(dateTimePatterns, (int32_t)dateStyle, NULL, &status); + currentBundle.adoptInstead( + ures_getByIndex(dateTimePatterns.getAlias(), (int32_t)dateStyle, NULL, &status)); if (U_FAILURE(status)) { status = U_INVALID_FORMAT_ERROR; return; } - switch (ures_getType(currentBundle)) { + switch (ures_getType(currentBundle.getAlias())) { case URES_STRING: { - resStr = ures_getString(currentBundle, &resStrLen, &status); + resStr = ures_getString(currentBundle.getAlias(), &resStrLen, &status); break; } case URES_ARRAY: { - resStr = ures_getStringByIndex(currentBundle, 0, &resStrLen, &status); - ovrStr = ures_getStringByIndex(currentBundle, 1, &ovrStrLen, &status); + resStr = ures_getStringByIndex(currentBundle.getAlias(), 0, &resStrLen, &status); + ovrStr = ures_getStringByIndex(currentBundle.getAlias(), 1, &ovrStrLen, &status); fDateOverride.setTo(TRUE, ovrStr, ovrStrLen); break; } default: { status = U_INVALID_FORMAT_ERROR; - ures_close(currentBundle); return; } } fPattern.setTo(TRUE, resStr, resStrLen); - ures_close(currentBundle); } // and if it includes _neither_, that's an error @@ -1553,7 +1570,7 @@ SimpleDateFormat::subFormat(UnicodeString &appendTo, } else if (count == 2) { value /= 10; } - FieldPosition p(0); + FieldPosition p(FieldPosition::DONT_CARE); currentNumberFormat->format(value, appendTo, p); if (count > 3) { currentNumberFormat->setMinimumIntegerDigits(count - 3); @@ -2040,7 +2057,7 @@ SimpleDateFormat::zeroPaddingNumber( int32_t value, int32_t minDigits, int32_t maxDigits) const { if (currentNumberFormat!=NULL) { - FieldPosition pos(0); + FieldPosition pos(FieldPosition::DONT_CARE); currentNumberFormat->setMinimumIntegerDigits(minDigits); currentNumberFormat->setMaximumIntegerDigits(maxDigits); diff --git a/deps/icu-small/source/i18n/smpdtfst.cpp b/deps/icu-small/source/i18n/smpdtfst.cpp index f9e94b82c62939..50980a99e4dfa5 100644 --- a/deps/icu-small/source/i18n/smpdtfst.cpp +++ b/deps/icu-small/source/i18n/smpdtfst.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/smpdtfst.h b/deps/icu-small/source/i18n/smpdtfst.h index da30f11d886f00..38ad558de2dfc0 100644 --- a/deps/icu-small/source/i18n/smpdtfst.h +++ b/deps/icu-small/source/i18n/smpdtfst.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/sortkey.cpp b/deps/icu-small/source/i18n/sortkey.cpp index 257888c741512b..68b0f062b8daf4 100644 --- a/deps/icu-small/source/i18n/sortkey.cpp +++ b/deps/icu-small/source/i18n/sortkey.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/standardplural.cpp b/deps/icu-small/source/i18n/standardplural.cpp index 456e9390ca7c2d..c39bae1ab18b9c 100644 --- a/deps/icu-small/source/i18n/standardplural.cpp +++ b/deps/icu-small/source/i18n/standardplural.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/standardplural.h b/deps/icu-small/source/i18n/standardplural.h index 8a8de2188485ec..56c63c347cee1e 100644 --- a/deps/icu-small/source/i18n/standardplural.h +++ b/deps/icu-small/source/i18n/standardplural.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/strmatch.cpp b/deps/icu-small/source/i18n/strmatch.cpp index ad02c5f44c538a..e72cfc9ab03d00 100644 --- a/deps/icu-small/source/i18n/strmatch.cpp +++ b/deps/icu-small/source/i18n/strmatch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2012, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/strmatch.h b/deps/icu-small/source/i18n/strmatch.h index 32f5c4b7907883..0241adfd3f01f0 100644 --- a/deps/icu-small/source/i18n/strmatch.h +++ b/deps/icu-small/source/i18n/strmatch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2001-2011, International Business Machines Corporation * and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/strrepl.cpp b/deps/icu-small/source/i18n/strrepl.cpp index 3181d5b15982b7..d061eff579e58a 100644 --- a/deps/icu-small/source/i18n/strrepl.cpp +++ b/deps/icu-small/source/i18n/strrepl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2012, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/strrepl.h b/deps/icu-small/source/i18n/strrepl.h index faf96b62962425..a452db993fb45d 100644 --- a/deps/icu-small/source/i18n/strrepl.h +++ b/deps/icu-small/source/i18n/strrepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2011, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/stsearch.cpp b/deps/icu-small/source/i18n/stsearch.cpp index 925ee3138f3547..643ec21b277395 100644 --- a/deps/icu-small/source/i18n/stsearch.cpp +++ b/deps/icu-small/source/i18n/stsearch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 IBM and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/taiwncal.cpp b/deps/icu-small/source/i18n/taiwncal.cpp index 7c51843c0f5c08..f1ca6fa135bd34 100644 --- a/deps/icu-small/source/i18n/taiwncal.cpp +++ b/deps/icu-small/source/i18n/taiwncal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/taiwncal.h b/deps/icu-small/source/i18n/taiwncal.h index 125a20da173a04..b15cff5beb75b8 100644 --- a/deps/icu-small/source/i18n/taiwncal.h +++ b/deps/icu-small/source/i18n/taiwncal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2003-2013, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/timezone.cpp b/deps/icu-small/source/i18n/timezone.cpp index d0a1a418798179..427674aac4ff3d 100644 --- a/deps/icu-small/source/i18n/timezone.cpp +++ b/deps/icu-small/source/i18n/timezone.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1997-2015, International Business Machines Corporation and +* Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* * @@ -458,6 +460,8 @@ TimeZone::detectHostTimeZone() uprv_tzset(); // Initialize tz... system data + uprv_tzname_clear_cache(); + // Get the timezone ID from the host. This function should do // any required host-specific remapping; e.g., on Windows this // function maps the Date and Time control panel setting to an diff --git a/deps/icu-small/source/i18n/titletrn.cpp b/deps/icu-small/source/i18n/titletrn.cpp index 79ffb403194adc..a1de8be6669567 100644 --- a/deps/icu-small/source/i18n/titletrn.cpp +++ b/deps/icu-small/source/i18n/titletrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/titletrn.h b/deps/icu-small/source/i18n/titletrn.h index a093152b66cbdb..a6380e3bd142c6 100644 --- a/deps/icu-small/source/i18n/titletrn.h +++ b/deps/icu-small/source/i18n/titletrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/tmunit.cpp b/deps/icu-small/source/i18n/tmunit.cpp index e56c51ca0f7e73..d9da2681251c2f 100644 --- a/deps/icu-small/source/i18n/tmunit.cpp +++ b/deps/icu-small/source/i18n/tmunit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2014, Google, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/tmutamt.cpp b/deps/icu-small/source/i18n/tmutamt.cpp index 734b5de882d953..7be730765bfff4 100644 --- a/deps/icu-small/source/i18n/tmutamt.cpp +++ b/deps/icu-small/source/i18n/tmutamt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008, Google, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/tmutfmt.cpp b/deps/icu-small/source/i18n/tmutfmt.cpp index fa31d7b3c1815c..1669546f767535 100644 --- a/deps/icu-small/source/i18n/tmutfmt.cpp +++ b/deps/icu-small/source/i18n/tmutfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2015, Google, International Business Machines Corporation @@ -347,6 +349,115 @@ TimeUnitFormat::initDataMembers(UErrorCode& err){ } } +struct TimeUnitFormatReadSink : public ResourceSink { + TimeUnitFormat *timeUnitFormatObj; + const UVector &pluralCounts; + UTimeUnitFormatStyle style; + UBool beenHere; + + TimeUnitFormatReadSink(TimeUnitFormat *timeUnitFormatObj, + const UVector &pluralCounts, UTimeUnitFormatStyle style) : + timeUnitFormatObj(timeUnitFormatObj), pluralCounts(pluralCounts), + style(style), beenHere(FALSE){} + + virtual ~TimeUnitFormatReadSink(); + + virtual void put(const char *key, ResourceValue &value, UBool, UErrorCode &errorCode) { + // Skip all put() calls except the first one -- discard all fallback data. + if (beenHere) { + return; + } else { + beenHere = TRUE; + } + + ResourceTable units = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + + for (int32_t i = 0; units.getKeyAndValue(i, key, value); ++i) { + const char* timeUnitName = key; + if (timeUnitName == NULL) { + continue; + } + + TimeUnit::UTimeUnitFields timeUnitField = TimeUnit::UTIMEUNIT_FIELD_COUNT; + if ( uprv_strcmp(timeUnitName, gTimeUnitYear) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_YEAR; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitMonth) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_MONTH; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitDay) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_DAY; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitHour) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_HOUR; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitMinute) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_MINUTE; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitSecond) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_SECOND; + } else if ( uprv_strcmp(timeUnitName, gTimeUnitWeek) == 0 ) { + timeUnitField = TimeUnit::UTIMEUNIT_WEEK; + } else { + continue; + } + LocalPointer localCountToPatterns; + Hashtable *countToPatterns = + timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField]; + if (countToPatterns == NULL) { + localCountToPatterns.adoptInsteadAndCheckErrorCode( + timeUnitFormatObj->initHash(errorCode), errorCode); + countToPatterns = localCountToPatterns.getAlias(); + if (U_FAILURE(errorCode)) { + return; + } + } + + ResourceTable countsToPatternTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { + continue; + } + for (int32_t j = 0; countsToPatternTable.getKeyAndValue(j, key, value); ++j) { + errorCode = U_ZERO_ERROR; + UnicodeString pattern = value.getUnicodeString(errorCode); + if (U_FAILURE(errorCode)) { + continue; + } + UnicodeString pluralCountUniStr(key, -1, US_INV); + if (!pluralCounts.contains(&pluralCountUniStr)) { + continue; + } + LocalPointer messageFormat(new MessageFormat( + pattern, timeUnitFormatObj->getLocale(errorCode), errorCode), errorCode); + if (U_FAILURE(errorCode)) { + return; + } + MessageFormat** formatters = + (MessageFormat**)countToPatterns->get(pluralCountUniStr); + if (formatters == NULL) { + LocalMemory localFormatters( + (MessageFormat **)uprv_malloc(UTMUTFMT_FORMAT_STYLE_COUNT*sizeof(MessageFormat*))); + if (localFormatters.isNull()) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + localFormatters[UTMUTFMT_FULL_STYLE] = NULL; + localFormatters[UTMUTFMT_ABBREVIATED_STYLE] = NULL; + countToPatterns->put(pluralCountUniStr, localFormatters.getAlias(), errorCode); + if (U_FAILURE(errorCode)) { + return; + } + formatters = localFormatters.orphan(); + } + formatters[style] = messageFormat.orphan(); + } + + if (timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField] == NULL) { + timeUnitFormatObj->fTimeUnitToCountToPatterns[timeUnitField] = localCountToPatterns.orphan(); + } + } + } + +}; + +TimeUnitFormatReadSink::~TimeUnitFormatReadSink() {} + void TimeUnitFormat::readFromCurrentLocale(UTimeUnitFormatStyle style, const char* key, const UVector& pluralCounts, UErrorCode& err) { @@ -365,94 +476,10 @@ TimeUnitFormat::readFromCurrentLocale(UTimeUnitFormatStyle style, const char* ke if (U_FAILURE(status)) { return; } - int32_t size = ures_getSize(unitsRes.getAlias()); - for ( int32_t index = 0; index < size; ++index) { - status = U_ZERO_ERROR; - // resource of one time unit - LocalUResourceBundlePointer oneTimeUnit( - ures_getByIndex(unitsRes.getAlias(), index, NULL, &status)); - if (U_FAILURE(status)) { - continue; - } - const char* timeUnitName = ures_getKey(oneTimeUnit.getAlias()); - if (timeUnitName == NULL) { - continue; - } - LocalUResourceBundlePointer countsToPatternRB( - ures_getByKey(unitsRes.getAlias(), timeUnitName, NULL, &status)); - if (countsToPatternRB.isNull() || U_FAILURE(status)) { - continue; - } - TimeUnit::UTimeUnitFields timeUnitField = TimeUnit::UTIMEUNIT_FIELD_COUNT; - if ( uprv_strcmp(timeUnitName, gTimeUnitYear) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_YEAR; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitMonth) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_MONTH; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitDay) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_DAY; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitHour) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_HOUR; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitMinute) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_MINUTE; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitSecond) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_SECOND; - } else if ( uprv_strcmp(timeUnitName, gTimeUnitWeek) == 0 ) { - timeUnitField = TimeUnit::UTIMEUNIT_WEEK; - } else { - continue; - } - LocalPointer localCountToPatterns; - Hashtable *countToPatterns = fTimeUnitToCountToPatterns[timeUnitField]; - if (countToPatterns == NULL) { - localCountToPatterns.adoptInsteadAndCheckErrorCode(initHash(err), err); - countToPatterns = localCountToPatterns.getAlias(); - if (U_FAILURE(err)) { - return; - } - } - int32_t count = ures_getSize(countsToPatternRB.getAlias()); - const char* pluralCount; - for ( int32_t pluralIndex = 0; pluralIndex < count; ++pluralIndex) { - // resource of count to pattern - status = U_ZERO_ERROR; - UnicodeString pattern = - ures_getNextUnicodeString(countsToPatternRB.getAlias(), &pluralCount, &status); - if (U_FAILURE(status)) { - continue; - } - UnicodeString pluralCountUniStr(pluralCount, -1, US_INV); - if (!pluralCounts.contains(&pluralCountUniStr)) { - continue; - } - LocalPointer messageFormat(new MessageFormat(pattern, getLocale(err), err), err); - if (U_FAILURE(err)) { - return; - } - MessageFormat** formatters = (MessageFormat**)countToPatterns->get(pluralCountUniStr); - if (formatters == NULL) { - LocalMemory localFormatters( - (MessageFormat **)uprv_malloc(UTMUTFMT_FORMAT_STYLE_COUNT*sizeof(MessageFormat*))); - if (localFormatters.isNull()) { - err = U_MEMORY_ALLOCATION_ERROR; - return; - } - localFormatters[UTMUTFMT_FULL_STYLE] = NULL; - localFormatters[UTMUTFMT_ABBREVIATED_STYLE] = NULL; - countToPatterns->put(pluralCountUniStr, localFormatters.getAlias(), err); - if (U_FAILURE(err)) { - return; - } - formatters = localFormatters.orphan(); - } - //delete formatters[style]; - formatters[style] = messageFormat.orphan(); - } - if (fTimeUnitToCountToPatterns[timeUnitField] == NULL) { - fTimeUnitToCountToPatterns[timeUnitField] = localCountToPatterns.orphan(); - } - } -} + TimeUnitFormatReadSink sink(this, pluralCounts, style); + ures_getAllItemsWithFallback(unitsRes.getAlias(), "", sink, status); +} void TimeUnitFormat::checkConsistency(UTimeUnitFormatStyle style, const char* key, UErrorCode& err) { diff --git a/deps/icu-small/source/i18n/tolowtrn.cpp b/deps/icu-small/source/i18n/tolowtrn.cpp index 3edeaf81a68443..f0a59bbd0b4716 100644 --- a/deps/icu-small/source/i18n/tolowtrn.cpp +++ b/deps/icu-small/source/i18n/tolowtrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/tolowtrn.h b/deps/icu-small/source/i18n/tolowtrn.h index 564b215a728d54..616e59899f974d 100644 --- a/deps/icu-small/source/i18n/tolowtrn.h +++ b/deps/icu-small/source/i18n/tolowtrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/toupptrn.cpp b/deps/icu-small/source/i18n/toupptrn.cpp index 4b7c7d06acaca1..a34792e07cfb82 100644 --- a/deps/icu-small/source/i18n/toupptrn.cpp +++ b/deps/icu-small/source/i18n/toupptrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/toupptrn.h b/deps/icu-small/source/i18n/toupptrn.h index 77799acbfd6bba..eae44e7d187dfa 100644 --- a/deps/icu-small/source/i18n/toupptrn.h +++ b/deps/icu-small/source/i18n/toupptrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/translit.cpp b/deps/icu-small/source/i18n/translit.cpp index 56cad2d18f98b9..79328baa2bb157 100644 --- a/deps/icu-small/source/i18n/translit.cpp +++ b/deps/icu-small/source/i18n/translit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/transreg.cpp b/deps/icu-small/source/i18n/transreg.cpp index 2f7e7d56fa7b55..cc1d51dea84749 100644 --- a/deps/icu-small/source/i18n/transreg.cpp +++ b/deps/icu-small/source/i18n/transreg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/transreg.h b/deps/icu-small/source/i18n/transreg.h index e01f89ad0705e6..334963f8d1e9c2 100644 --- a/deps/icu-small/source/i18n/transreg.h +++ b/deps/icu-small/source/i18n/transreg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/tridpars.cpp b/deps/icu-small/source/i18n/tridpars.cpp index a58d58550d427d..140e3d7d1cf74d 100644 --- a/deps/icu-small/source/i18n/tridpars.cpp +++ b/deps/icu-small/source/i18n/tridpars.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2014, International Business Machines Corporation @@ -902,7 +904,7 @@ Transliterator* TransliteratorIDParser::createBasicInstance(const UnicodeString& /** * Initialize static memory. Called through umtx_initOnce only. */ -void TransliteratorIDParser::init(UErrorCode &status) { +void U_CALLCONV TransliteratorIDParser::init(UErrorCode &status) { U_ASSERT(SPECIAL_INVERSES == NULL); ucln_i18n_registerCleanup(UCLN_I18N_TRANSLITERATOR, utrans_transliterator_cleanup); diff --git a/deps/icu-small/source/i18n/tridpars.h b/deps/icu-small/source/i18n/tridpars.h index 88620fd18daf78..7c226023ef8011 100644 --- a/deps/icu-small/source/i18n/tridpars.h +++ b/deps/icu-small/source/i18n/tridpars.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************** * Copyright (c) 2002-2010, International Business Machines Corporation * @@ -349,7 +351,7 @@ class TransliteratorIDParser /* not : public UObject because all methods are sta /** * Initialize static memory. */ - static void init(UErrorCode &status); + static void U_CALLCONV init(UErrorCode &status); friend class SingleID; }; diff --git a/deps/icu-small/source/i18n/tzfmt.cpp b/deps/icu-small/source/i18n/tzfmt.cpp index e03b1a88aae044..783edac34fde70 100644 --- a/deps/icu-small/source/i18n/tzfmt.cpp +++ b/deps/icu-small/source/i18n/tzfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/tzgnames.cpp b/deps/icu-small/source/i18n/tzgnames.cpp index 127ea58deb9e90..4fc726ea54de9b 100644 --- a/deps/icu-small/source/i18n/tzgnames.cpp +++ b/deps/icu-small/source/i18n/tzgnames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/tzgnames.h b/deps/icu-small/source/i18n/tzgnames.h index ebe9b76ba5ba91..e78e8ee991734e 100644 --- a/deps/icu-small/source/i18n/tzgnames.h +++ b/deps/icu-small/source/i18n/tzgnames.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2012, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/tznames.cpp b/deps/icu-small/source/i18n/tznames.cpp index db1ce0ddeec0cc..6aefd13b536fc0 100644 --- a/deps/icu-small/source/i18n/tznames.cpp +++ b/deps/icu-small/source/i18n/tznames.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and * @@ -116,6 +118,9 @@ class TimeZoneNamesDelegate : public TimeZoneNames { UnicodeString& getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const; + void loadAllDisplayNames(UErrorCode& status); + void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; private: TimeZoneNamesDelegate(); @@ -278,6 +283,16 @@ TimeZoneNamesDelegate::getExemplarLocationName(const UnicodeString& tzID, Unicod return fTZnamesCacheEntry->names->getExemplarLocationName(tzID, name); } +void +TimeZoneNamesDelegate::loadAllDisplayNames(UErrorCode& status) { + fTZnamesCacheEntry->names->loadAllDisplayNames(status); +} + +void +TimeZoneNamesDelegate::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const { + fTZnamesCacheEntry->names->getDisplayNames(tzID, types, numTypes, date, dest, status); +} + TimeZoneNames::MatchInfoCollection* TimeZoneNamesDelegate::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const { return fTZnamesCacheEntry->names->find(text, start, types, status); @@ -330,6 +345,29 @@ TimeZoneNames::getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, return name; } +// Empty default implementation, to be overriden in tznames_impl.cpp. +void +TimeZoneNames::loadAllDisplayNames(UErrorCode& /*status*/) { +} + +// A default, lightweight implementation of getDisplayNames. +// Overridden in tznames_impl.cpp. +void +TimeZoneNames::getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const { + if (U_FAILURE(status)) { return; } + if (tzID.isEmpty()) { return; } + UnicodeString mzID; + for (int i = 0; i < numTypes; i++) { + getTimeZoneDisplayName(tzID, types[i], dest[i]); + if (dest[i].isEmpty()) { + if (mzID.isEmpty()) { + getMetaZoneID(tzID, date, mzID); + } + getMetaZoneDisplayName(mzID, types[i], dest[i]); + } + } +} + struct MatchInfo : UMemory { UTimeZoneNameType nameType; diff --git a/deps/icu-small/source/i18n/tznames_impl.cpp b/deps/icu-small/source/i18n/tznames_impl.cpp index 0f50232a3ca64c..3e92acb6f9606e 100644 --- a/deps/icu-small/source/i18n/tznames_impl.cpp +++ b/deps/icu-small/source/i18n/tznames_impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2016, International Business Machines Corporation and @@ -21,6 +23,7 @@ #include "cstring.h" #include "uassert.h" #include "mutex.h" +#include "resource.h" #include "uresimp.h" #include "ureslocs.h" #include "zonemeta.h" @@ -28,7 +31,6 @@ #include "uvector.h" #include "olsontz.h" - U_NAMESPACE_BEGIN #define ZID_KEY_MAX 128 @@ -37,25 +39,16 @@ U_NAMESPACE_BEGIN static const char gZoneStrings[] = "zoneStrings"; static const char gMZPrefix[] = "meta:"; -static const char* KEYS[] = {"lg", "ls", "ld", "sg", "ss", "sd"}; -static const int32_t KEYS_SIZE = UPRV_LENGTHOF(KEYS); - -static const char gEcTag[] = "ec"; - -static const char EMPTY[] = ""; // place holder for empty ZNames/TZNames - -static const UTimeZoneNameType ALL_NAME_TYPES[] = { - UTZNM_LONG_GENERIC, UTZNM_LONG_STANDARD, UTZNM_LONG_DAYLIGHT, - UTZNM_SHORT_GENERIC, UTZNM_SHORT_STANDARD, UTZNM_SHORT_DAYLIGHT, - UTZNM_EXEMPLAR_LOCATION, - UTZNM_UNKNOWN // unknown as the last one -}; +static const char EMPTY[] = ""; // place holder for empty ZNames +static const char DUMMY_LOADER[] = ""; // place holder for dummy ZNamesLoader +static const UChar NO_NAME[] = { 0 }; // for empty no-fallback time zone names // stuff for TZDBTimeZoneNames static const char* TZDBNAMES_KEYS[] = {"ss", "sd"}; static const int32_t TZDBNAMES_KEYS_SIZE = UPRV_LENGTHOF(TZDBNAMES_KEYS); static UMutex gTZDBNamesMapLock = U_MUTEX_INITIALIZER; +static UMutex gDataMutex = U_MUTEX_INITIALIZER; static UHashtable* gTZDBNamesMap = NULL; static icu::UInitOnce gTZDBNamesMapInitOnce = U_INITONCE_INITIALIZER; @@ -63,6 +56,20 @@ static icu::UInitOnce gTZDBNamesMapInitOnce = U_INITONCE_INITIALIZER; static TextTrieMap* gTZDBNamesTrie = NULL; static icu::UInitOnce gTZDBNamesTrieInitOnce = U_INITONCE_INITIALIZER; +// The order in which strings are stored may be different than the order in the public enum. +enum UTimeZoneNameTypeIndex { + UTZNM_INDEX_UNKNOWN = -1, + UTZNM_INDEX_EXEMPLAR_LOCATION, + UTZNM_INDEX_LONG_GENERIC, + UTZNM_INDEX_LONG_STANDARD, + UTZNM_INDEX_LONG_DAYLIGHT, + UTZNM_INDEX_SHORT_GENERIC, + UTZNM_INDEX_SHORT_STANDARD, + UTZNM_INDEX_SHORT_DAYLIGHT, + UTZNM_INDEX_COUNT +}; +static const UChar* EMPTY_NAMES[UTZNM_INDEX_COUNT] = {0,0,0,0,0,0,0}; + U_CDECL_BEGIN static UBool U_CALLCONV tzdbTimeZoneNames_cleanup(void) { if (gTZDBNamesMap != NULL) { @@ -81,6 +88,26 @@ static UBool U_CALLCONV tzdbTimeZoneNames_cleanup(void) { } U_CDECL_END +/** + * ZNameInfo stores zone name information in the trie + */ +struct ZNameInfo { + UTimeZoneNameType type; + const UChar* tzID; + const UChar* mzID; +}; + +/** + * ZMatchInfo stores zone name match information used by find method + */ +struct ZMatchInfo { + const ZNameInfo* znameInfo; + int32_t matchLength; +}; + +// Helper functions +static void mergeTimeZoneKey(const UnicodeString& mzID, char* result); + #define DEFAULT_CHARACTERNODE_CAPACITY 1 // --------------------------------------------------- @@ -182,7 +209,7 @@ TextTrieMap::put(const UnicodeString &key, void *value, ZNStringPool &sp, UError put(s, value, status); } -// This method is for designed for a persistent key, such as string key stored in +// This method is designed for a persistent key, such as string key stored in // resource bundle. void TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { @@ -194,11 +221,22 @@ TextTrieMap::put(const UChar *key, void *value, UErrorCode &status) { } } if (U_FAILURE(status)) { + if (fValueDeleter) { + fValueDeleter((void*) key); + } return; } U_ASSERT(fLazyContents != NULL); + UChar *s = const_cast(key); fLazyContents->addElement(s, status); + if (U_FAILURE(status)) { + if (fValueDeleter) { + fValueDeleter((void*) key); + } + return; + } + fLazyContents->addElement(value, status); } @@ -207,6 +245,10 @@ TextTrieMap::putImpl(const UnicodeString &key, void *value, UErrorCode &status) if (fNodes == NULL) { fNodesCapacity = 512; fNodes = (CharacterNode *)uprv_malloc(fNodesCapacity * sizeof(CharacterNode)); + if (fNodes == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } fNodes[0].clear(); // Init root node. fNodesCount = 1; } @@ -517,196 +559,283 @@ void ZNStringPool::freeze() { } -// --------------------------------------------------- -// ZNames - names common for time zone and meta zone -// --------------------------------------------------- +/** + * This class stores name data for a meta zone or time zone. + */ class ZNames : public UMemory { -public: - virtual ~ZNames(); +private: + friend class TimeZoneNamesImpl; + + static UTimeZoneNameTypeIndex getTZNameTypeIndex(UTimeZoneNameType type) { + switch(type) { + case UTZNM_EXEMPLAR_LOCATION: return UTZNM_INDEX_EXEMPLAR_LOCATION; + case UTZNM_LONG_GENERIC: return UTZNM_INDEX_LONG_GENERIC; + case UTZNM_LONG_STANDARD: return UTZNM_INDEX_LONG_STANDARD; + case UTZNM_LONG_DAYLIGHT: return UTZNM_INDEX_LONG_DAYLIGHT; + case UTZNM_SHORT_GENERIC: return UTZNM_INDEX_SHORT_GENERIC; + case UTZNM_SHORT_STANDARD: return UTZNM_INDEX_SHORT_STANDARD; + case UTZNM_SHORT_DAYLIGHT: return UTZNM_INDEX_SHORT_DAYLIGHT; + default: return UTZNM_INDEX_UNKNOWN; + } + } + static UTimeZoneNameType getTZNameType(UTimeZoneNameTypeIndex index) { + switch(index) { + case UTZNM_INDEX_EXEMPLAR_LOCATION: return UTZNM_EXEMPLAR_LOCATION; + case UTZNM_INDEX_LONG_GENERIC: return UTZNM_LONG_GENERIC; + case UTZNM_INDEX_LONG_STANDARD: return UTZNM_LONG_STANDARD; + case UTZNM_INDEX_LONG_DAYLIGHT: return UTZNM_LONG_DAYLIGHT; + case UTZNM_INDEX_SHORT_GENERIC: return UTZNM_SHORT_GENERIC; + case UTZNM_INDEX_SHORT_STANDARD: return UTZNM_SHORT_STANDARD; + case UTZNM_INDEX_SHORT_DAYLIGHT: return UTZNM_SHORT_DAYLIGHT; + default: return UTZNM_UNKNOWN; + } + } - static ZNames* createInstance(UResourceBundle* rb, const char* key); - virtual const UChar* getName(UTimeZoneNameType type); + const UChar* fNames[UTZNM_INDEX_COUNT]; + UBool fDidAddIntoTrie; -protected: - ZNames(const UChar** names); - static const UChar** loadData(UResourceBundle* rb, const char* key); + // Whether we own the location string, if computed rather than loaded from a bundle. + // A meta zone names instance never has an exemplar location string. + UBool fOwnsLocationName; + + ZNames(const UChar* names[], const UChar* locationName) + : fDidAddIntoTrie(FALSE) { + uprv_memcpy(fNames, names, sizeof(fNames)); + if (locationName != NULL) { + fOwnsLocationName = TRUE; + fNames[UTZNM_INDEX_EXEMPLAR_LOCATION] = locationName; + } else { + fOwnsLocationName = FALSE; + } + } + +public: + ~ZNames() { + if (fOwnsLocationName) { + const UChar* locationName = fNames[UTZNM_INDEX_EXEMPLAR_LOCATION]; + U_ASSERT(locationName != NULL); + uprv_free((void*) locationName); + } + } private: - const UChar** fNames; -}; + static void* createMetaZoneAndPutInCache(UHashtable* cache, const UChar* names[], + const UnicodeString& mzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(names != NULL); -ZNames::ZNames(const UChar** names) -: fNames(names) { -} + // Use the persistent ID as the resource key, so we can + // avoid duplications. + // TODO: Is there a more efficient way, like intern() in Java? + void* key = (void*) ZoneMeta::findMetaZoneID(mzID); + void* value; + if (uprv_memcmp(names, EMPTY_NAMES, sizeof(EMPTY_NAMES)) == 0) { + value = (void*) EMPTY; + } else { + value = (void*) (new ZNames(names, NULL)); + if (value == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + } + uhash_put(cache, key, value, &status); + return value; + } + + static void* createTimeZoneAndPutInCache(UHashtable* cache, const UChar* names[], + const UnicodeString& tzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(names != NULL); + + // If necessary, compute the location name from the time zone name. + UChar* locationName = NULL; + if (names[UTZNM_INDEX_EXEMPLAR_LOCATION] == NULL) { + UnicodeString locationNameUniStr; + TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, locationNameUniStr); + + // Copy the computed location name to the heap + if (locationNameUniStr.length() > 0) { + const UChar* buff = locationNameUniStr.getTerminatedBuffer(); + int32_t len = sizeof(UChar) * (locationNameUniStr.length() + 1); + locationName = (UChar*) uprv_malloc(len); + if (locationName == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memcpy(locationName, buff, len); + } + } -ZNames::~ZNames() { - if (fNames != NULL) { - uprv_free(fNames); + // Use the persistent ID as the resource key, so we can + // avoid duplications. + // TODO: Is there a more efficient way, like intern() in Java? + void* key = (void*) ZoneMeta::findTimeZoneID(tzID); + void* value = (void*) (new ZNames(names, locationName)); + if (value == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uhash_put(cache, key, value, &status); + return value; } -} -ZNames* -ZNames::createInstance(UResourceBundle* rb, const char* key) { - const UChar** names = loadData(rb, key); - if (names == NULL) { - // No names data available - return NULL; + const UChar* getName(UTimeZoneNameType type) const { + UTimeZoneNameTypeIndex index = getTZNameTypeIndex(type); + return index >= 0 ? fNames[index] : NULL; } - return new ZNames(names); -} -const UChar* -ZNames::getName(UTimeZoneNameType type) { - if (fNames == NULL) { - return NULL; - } - const UChar *name = NULL; - switch(type) { - case UTZNM_LONG_GENERIC: - name = fNames[0]; - break; - case UTZNM_LONG_STANDARD: - name = fNames[1]; - break; - case UTZNM_LONG_DAYLIGHT: - name = fNames[2]; - break; - case UTZNM_SHORT_GENERIC: - name = fNames[3]; - break; - case UTZNM_SHORT_STANDARD: - name = fNames[4]; - break; - case UTZNM_SHORT_DAYLIGHT: - name = fNames[5]; - break; - case UTZNM_EXEMPLAR_LOCATION: // implemeted by subclass - default: - name = NULL; + void addAsMetaZoneIntoTrie(const UChar* mzID, TextTrieMap& trie, UErrorCode& status) { + addNamesIntoTrie(mzID, NULL, trie, status); } - return name; -} - -const UChar** -ZNames::loadData(UResourceBundle* rb, const char* key) { - if (rb == NULL || key == NULL || *key == 0) { - return NULL; + void addAsTimeZoneIntoTrie(const UChar* tzID, TextTrieMap& trie, UErrorCode& status) { + addNamesIntoTrie(NULL, tzID, trie, status); } - UErrorCode status = U_ZERO_ERROR; - const UChar **names = NULL; + void addNamesIntoTrie(const UChar* mzID, const UChar* tzID, TextTrieMap& trie, + UErrorCode& status) { + if (U_FAILURE(status)) { return; } + if (fDidAddIntoTrie) { return; } + fDidAddIntoTrie = TRUE; - UResourceBundle* rbTable = NULL; - rbTable = ures_getByKeyWithFallback(rb, key, rbTable, &status); - if (U_SUCCESS(status)) { - names = (const UChar **)uprv_malloc(sizeof(const UChar*) * KEYS_SIZE); - if (names != NULL) { - UBool isEmpty = TRUE; - for (int32_t i = 0; i < KEYS_SIZE; i++) { - status = U_ZERO_ERROR; - int32_t len = 0; - const UChar *value = ures_getStringByKeyWithFallback(rbTable, KEYS[i], &len, &status); - if (U_FAILURE(status) || len == 0) { - names[i] = NULL; - } else { - names[i] = value; - isEmpty = FALSE; + for (int32_t i = 0; i < UTZNM_INDEX_COUNT; i++) { + const UChar* name = fNames[i]; + if (name != NULL) { + ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); + if (nameinfo == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + nameinfo->mzID = mzID; + nameinfo->tzID = tzID; + nameinfo->type = getTZNameType((UTimeZoneNameTypeIndex)i); + trie.put(name, nameinfo, status); // trie.put() takes ownership of the key + if (U_FAILURE(status)) { + return; } - } - if (isEmpty) { - // No need to keep the names array - uprv_free(names); - names = NULL; } } } - ures_close(rbTable); - return names; -} -// --------------------------------------------------- -// TZNames - names for a time zone -// --------------------------------------------------- -class TZNames : public ZNames { public: - virtual ~TZNames(); - - static TZNames* createInstance(UResourceBundle* rb, const char* key, const UnicodeString& tzID); - virtual const UChar* getName(UTimeZoneNameType type); - -private: - TZNames(const UChar** names); - const UChar* fLocationName; - UChar* fLocationNameOwned; + struct ZNamesLoader; }; -TZNames::TZNames(const UChar** names) -: ZNames(names), fLocationName(NULL), fLocationNameOwned(NULL) { -} +struct ZNames::ZNamesLoader : public ResourceSink { + const UChar *names[UTZNM_INDEX_COUNT]; -TZNames::~TZNames() { - if (fLocationNameOwned) { - uprv_free(fLocationNameOwned); + ZNamesLoader() { + clear(); } -} + virtual ~ZNamesLoader(); -const UChar* -TZNames::getName(UTimeZoneNameType type) { - if (type == UTZNM_EXEMPLAR_LOCATION) { - return fLocationName; + /** Reset for loading another set of names. */ + void clear() { + uprv_memcpy(names, EMPTY_NAMES, sizeof(names)); } - return ZNames::getName(type); -} -TZNames* -TZNames::createInstance(UResourceBundle* rb, const char* key, const UnicodeString& tzID) { - if (rb == NULL || key == NULL || *key == 0) { - return NULL; + void loadMetaZone(const UResourceBundle* zoneStrings, const UnicodeString& mzID, UErrorCode& errorCode) { + if (U_FAILURE(errorCode)) { return; } + + char key[ZID_KEY_MAX + 1]; + mergeTimeZoneKey(mzID, key); + + loadNames(zoneStrings, key, errorCode); } - const UChar** names = loadData(rb, key); - const UChar* locationName = NULL; - UChar* locationNameOwned = NULL; + void loadTimeZone(const UResourceBundle* zoneStrings, const UnicodeString& tzID, UErrorCode& errorCode) { + // Replace "/" with ":". + UnicodeString uKey(tzID); + for (int32_t i = 0; i < uKey.length(); i++) { + if (uKey.charAt(i) == (UChar)0x2F) { + uKey.setCharAt(i, (UChar)0x3A); + } + } + + char key[ZID_KEY_MAX + 1]; + uKey.extract(0, uKey.length(), key, sizeof(key), US_INV); - UErrorCode status = U_ZERO_ERROR; - int32_t len = 0; + loadNames(zoneStrings, key, errorCode); + } + + void loadNames(const UResourceBundle* zoneStrings, const char* key, UErrorCode& errorCode) { + U_ASSERT(zoneStrings != NULL); + U_ASSERT(key != NULL); + U_ASSERT(key[0] != '\0'); - UResourceBundle* table = ures_getByKeyWithFallback(rb, key, NULL, &status); - locationName = ures_getStringByKeyWithFallback(table, gEcTag, &len, &status); - // ignore missing resource here - status = U_ZERO_ERROR; + UErrorCode localStatus = U_ZERO_ERROR; + clear(); + ures_getAllItemsWithFallback(zoneStrings, key, *this, localStatus); - ures_close(table); + // Ignore errors, but propogate possible warnings. + if (U_SUCCESS(localStatus)) { + errorCode = localStatus; + } + } - if (locationName == NULL) { - UnicodeString tmpName; - int32_t tmpNameLen = 0; - TimeZoneNamesImpl::getDefaultExemplarLocationName(tzID, tmpName); - tmpNameLen = tmpName.length(); + void setNameIfEmpty(const char* key, const ResourceValue* value, UErrorCode& errorCode) { + UTimeZoneNameTypeIndex type = nameTypeFromKey(key); + if (type == UTZNM_INDEX_UNKNOWN) { return; } + if (names[type] == NULL) { + int32_t length; + // 'NO_NAME' indicates internally that this field should remain empty. It will be + // replaced by 'NULL' in getNames() + names[type] = (value == NULL) ? NO_NAME : value->getString(length, errorCode); + } + } - if (tmpNameLen > 0) { - locationNameOwned = (UChar*) uprv_malloc(sizeof(UChar) * (tmpNameLen + 1)); - if (locationNameOwned) { - tmpName.extract(locationNameOwned, tmpNameLen + 1, status); - locationName = locationNameOwned; + virtual void put(const char* key, ResourceValue& value, UBool /*noFallback*/, + UErrorCode &errorCode) { + ResourceTable namesTable = value.getTable(errorCode); + if (U_FAILURE(errorCode)) { return; } + for (int32_t i = 0; namesTable.getKeyAndValue(i, key, value); ++i) { + if (value.isNoInheritanceMarker()) { + setNameIfEmpty(key, NULL, errorCode); + } else { + setNameIfEmpty(key, &value, errorCode); } } } - TZNames* tznames = NULL; - if (locationName != NULL || names != NULL) { - tznames = new TZNames(names); - if (tznames == NULL) { - if (locationNameOwned) { - uprv_free(locationNameOwned); + static UTimeZoneNameTypeIndex nameTypeFromKey(const char *key) { + char c0, c1; + if ((c0 = key[0]) == 0 || (c1 = key[1]) == 0 || key[2] != 0) { + return UTZNM_INDEX_UNKNOWN; + } + if (c0 == 'l') { + return c1 == 'g' ? UTZNM_INDEX_LONG_GENERIC : + c1 == 's' ? UTZNM_INDEX_LONG_STANDARD : + c1 == 'd' ? UTZNM_INDEX_LONG_DAYLIGHT : UTZNM_INDEX_UNKNOWN; + } else if (c0 == 's') { + return c1 == 'g' ? UTZNM_INDEX_SHORT_GENERIC : + c1 == 's' ? UTZNM_INDEX_SHORT_STANDARD : + c1 == 'd' ? UTZNM_INDEX_SHORT_DAYLIGHT : UTZNM_INDEX_UNKNOWN; + } else if (c0 == 'e' && c1 == 'c') { + return UTZNM_INDEX_EXEMPLAR_LOCATION; + } + return UTZNM_INDEX_UNKNOWN; + } + + /** + * Returns an array of names. It is the caller's responsibility to copy the data into a + * permanent location, as the returned array is owned by the loader instance and may be + * cleared or leave scope. + * + * This is different than Java, where the array will no longer be modified and null + * may be returned. + */ + const UChar** getNames() { + // Remove 'NO_NAME' references in the array and replace with 'NULL' + for (int32_t i = 0; i < UTZNM_INDEX_COUNT; ++i) { + if (names[i] == NO_NAME) { + names[i] = NULL; } } - tznames->fLocationName = locationName; - tznames->fLocationNameOwned = locationNameOwned; + return names; } +}; + +ZNames::ZNamesLoader::~ZNamesLoader() {} - return tznames; -} // --------------------------------------------------- // The meta zone ID enumeration class @@ -772,25 +901,6 @@ MetaZoneIDsEnumeration::~MetaZoneIDsEnumeration() { } } -U_CDECL_BEGIN -/** - * ZNameInfo stores zone name information in the trie - */ -typedef struct ZNameInfo { - UTimeZoneNameType type; - const UChar* tzID; - const UChar* mzID; -} ZNameInfo; - -/** - * ZMatchInfo stores zone name match information used by find method - */ -typedef struct ZMatchInfo { - const ZNameInfo* znameInfo; - int32_t matchLength; -} ZMatchInfo; -U_CDECL_END - // --------------------------------------------------- // ZNameSearchHandler @@ -883,16 +993,7 @@ U_CDECL_BEGIN static void U_CALLCONV deleteZNames(void *obj) { if (obj != EMPTY) { - delete (ZNames *)obj; - } -} -/** - * Deleter for TZNames - */ -static void U_CALLCONV -deleteTZNames(void *obj) { - if (obj != EMPTY) { - delete (TZNames *)obj; + delete (ZNames*) obj; } } @@ -906,14 +1007,13 @@ deleteZNameInfo(void *obj) { U_CDECL_END -static UMutex gLock = U_MUTEX_INITIALIZER; - TimeZoneNamesImpl::TimeZoneNamesImpl(const Locale& locale, UErrorCode& status) : fLocale(locale), fZoneStrings(NULL), fTZNamesMap(NULL), fMZNamesMap(NULL), fNamesTrieFullyLoaded(FALSE), + fNamesFullyLoaded(FALSE), fNamesTrie(TRUE, deleteZNameInfo) { initialize(locale, status); } @@ -943,14 +1043,14 @@ TimeZoneNamesImpl::initialize(const Locale& locale, UErrorCode& status) { } uhash_setValueDeleter(fMZNamesMap, deleteZNames); - uhash_setValueDeleter(fTZNamesMap, deleteTZNames); + uhash_setValueDeleter(fTZNamesMap, deleteZNames); // no key deleters for name maps // preload zone strings for the default zone TimeZone *tz = TimeZone::createDefault(); const UChar *tzID = ZoneMeta::getCanonicalCLDRID(*tz); if (tzID != NULL) { - loadStrings(UnicodeString(tzID)); + loadStrings(UnicodeString(tzID), status); } delete tz; @@ -962,20 +1062,15 @@ TimeZoneNamesImpl::initialize(const Locale& locale, UErrorCode& status) { * except initializer. */ void -TimeZoneNamesImpl::loadStrings(const UnicodeString& tzCanonicalID) { - loadTimeZoneNames(tzCanonicalID); +TimeZoneNamesImpl::loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status) { + loadTimeZoneNames(tzCanonicalID, status); + LocalPointer mzIDs(getAvailableMetaZoneIDs(tzCanonicalID, status)); + if (U_FAILURE(status)) { return; } + U_ASSERT(!mzIDs.isNull()); - UErrorCode status = U_ZERO_ERROR; - StringEnumeration *mzIDs = getAvailableMetaZoneIDs(tzCanonicalID, status); - if (U_SUCCESS(status) && mzIDs != NULL) { - const UnicodeString *mzID; - while ((mzID = mzIDs->snext(status))) { - if (U_FAILURE(status)) { - break; - } - loadMetaZoneNames(*mzID); - } - delete mzIDs; + const UnicodeString *mzID; + while ((mzID = mzIDs->snext(status)) && U_SUCCESS(status)) { + loadMetaZoneNames(*mzID, status); } } @@ -1096,7 +1191,6 @@ TimeZoneNamesImpl::_getReferenceZoneID(const UnicodeString& mzID, const char* re return tzID; } - UnicodeString& TimeZoneNamesImpl::getMetaZoneDisplayName(const UnicodeString& mzID, UTimeZoneNameType type, @@ -1109,11 +1203,12 @@ TimeZoneNamesImpl::getMetaZoneDisplayName(const UnicodeString& mzID, ZNames *znames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - znames = nonConstThis->loadMetaZoneNames(mzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + znames = nonConstThis->loadMetaZoneNames(mzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (znames != NULL) { const UChar* s = znames->getName(type); @@ -1131,14 +1226,15 @@ TimeZoneNamesImpl::getTimeZoneDisplayName(const UnicodeString& tzID, UTimeZoneNa return name; } - TZNames *tznames = NULL; + ZNames *tznames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - tznames = nonConstThis->loadTimeZoneNames(tzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + tznames = nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (tznames != NULL) { const UChar *s = tznames->getName(type); @@ -1153,14 +1249,15 @@ UnicodeString& TimeZoneNamesImpl::getExemplarLocationName(const UnicodeString& tzID, UnicodeString& name) const { name.setToBogus(); // cleanup result. const UChar* locName = NULL; - TZNames *tznames = NULL; + ZNames *tznames = NULL; TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); { - tznames = nonConstThis->loadTimeZoneNames(tzID); + Mutex lock(&gDataMutex); + UErrorCode status = U_ZERO_ERROR; + tznames = nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return name; } } - umtx_unlock(&gLock); if (tznames != NULL) { locName = tznames->getName(UTZNM_EXEMPLAR_LOCATION); @@ -1193,215 +1290,386 @@ static void mergeTimeZoneKey(const UnicodeString& mzID, char* result) { * This method updates the cache and must be called with a lock */ ZNames* -TimeZoneNamesImpl::loadMetaZoneNames(const UnicodeString& mzID) { - if (mzID.length() > (ZID_KEY_MAX - MZ_PREFIX_LEN)) { - return NULL; - } +TimeZoneNamesImpl::loadMetaZoneNames(const UnicodeString& mzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(mzID.length() <= ZID_KEY_MAX - MZ_PREFIX_LEN); - ZNames *znames = NULL; - - UErrorCode status = U_ZERO_ERROR; UChar mzIDKey[ZID_KEY_MAX + 1]; mzID.extract(mzIDKey, ZID_KEY_MAX + 1, status); - U_ASSERT(status == U_ZERO_ERROR); // already checked length above + U_ASSERT(U_SUCCESS(status)); // already checked length above mzIDKey[mzID.length()] = 0; - void *cacheVal = uhash_get(fMZNamesMap, mzIDKey); - if (cacheVal == NULL) { - char key[ZID_KEY_MAX + 1]; - mergeTimeZoneKey(mzID, key); - znames = ZNames::createInstance(fZoneStrings, key); - - if (znames == NULL) { - cacheVal = (void *)EMPTY; - } else { - cacheVal = znames; - } - // Use the persistent ID as the resource key, so we can - // avoid duplications. - const UChar* newKey = ZoneMeta::findMetaZoneID(mzID); - if (newKey != NULL) { - uhash_put(fMZNamesMap, (void *)newKey, cacheVal, &status); - if (U_FAILURE(status)) { - if (znames != NULL) { - delete znames; - znames = NULL; - } - } else if (znames != NULL) { - // put the name info into the trie - for (int32_t i = 0; ALL_NAME_TYPES[i] != UTZNM_UNKNOWN; i++) { - const UChar* name = znames->getName(ALL_NAME_TYPES[i]); - if (name != NULL) { - ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); - if (nameinfo != NULL) { - nameinfo->type = ALL_NAME_TYPES[i]; - nameinfo->tzID = NULL; - nameinfo->mzID = newKey; - fNamesTrie.put(name, nameinfo, status); - } - } - } - } - - } else { - // Should never happen with a valid input - if (znames != NULL) { - // It's not possible that we get a valid ZNames with unknown ID. - // But just in case.. - delete znames; - znames = NULL; - } - } - } else if (cacheVal != EMPTY) { - znames = (ZNames *)cacheVal; + void* mznames = uhash_get(fMZNamesMap, mzIDKey); + if (mznames == NULL) { + ZNames::ZNamesLoader loader; + loader.loadMetaZone(fZoneStrings, mzID, status); + mznames = ZNames::createMetaZoneAndPutInCache(fMZNamesMap, loader.getNames(), mzID, status); + if (U_FAILURE(status)) { return NULL; } } - return znames; + if (mznames != EMPTY) { + return (ZNames*)mznames; + } else { + return NULL; + } } /* * This method updates the cache and must be called with a lock */ -TZNames* -TimeZoneNamesImpl::loadTimeZoneNames(const UnicodeString& tzID) { - if (tzID.length() > ZID_KEY_MAX) { - return NULL; - } - - TZNames *tznames = NULL; +ZNames* +TimeZoneNamesImpl::loadTimeZoneNames(const UnicodeString& tzID, UErrorCode& status) { + if (U_FAILURE(status)) { return NULL; } + U_ASSERT(tzID.length() <= ZID_KEY_MAX); - UErrorCode status = U_ZERO_ERROR; UChar tzIDKey[ZID_KEY_MAX + 1]; int32_t tzIDKeyLen = tzID.extract(tzIDKey, ZID_KEY_MAX + 1, status); - U_ASSERT(status == U_ZERO_ERROR); // already checked length above + U_ASSERT(U_SUCCESS(status)); // already checked length above tzIDKey[tzIDKeyLen] = 0; - void *cacheVal = uhash_get(fTZNamesMap, tzIDKey); - if (cacheVal == NULL) { - char key[ZID_KEY_MAX + 1]; - UErrorCode status = U_ZERO_ERROR; - // Replace "/" with ":". - UnicodeString uKey(tzID); - for (int32_t i = 0; i < uKey.length(); i++) { - if (uKey.charAt(i) == (UChar)0x2F) { - uKey.setCharAt(i, (UChar)0x3A); - } - } - uKey.extract(0, uKey.length(), key, sizeof(key), US_INV); - tznames = TZNames::createInstance(fZoneStrings, key, tzID); - - if (tznames == NULL) { - cacheVal = (void *)EMPTY; - } else { - cacheVal = tznames; - } - // Use the persistent ID as the resource key, so we can - // avoid duplications. - const UChar* newKey = ZoneMeta::findTimeZoneID(tzID); - if (newKey != NULL) { - uhash_put(fTZNamesMap, (void *)newKey, cacheVal, &status); - if (U_FAILURE(status)) { - if (tznames != NULL) { - delete tznames; - tznames = NULL; - } - } else if (tznames != NULL) { - // put the name info into the trie - for (int32_t i = 0; ALL_NAME_TYPES[i] != UTZNM_UNKNOWN; i++) { - const UChar* name = tznames->getName(ALL_NAME_TYPES[i]); - if (name != NULL) { - ZNameInfo *nameinfo = (ZNameInfo *)uprv_malloc(sizeof(ZNameInfo)); - if (nameinfo != NULL) { - nameinfo->type = ALL_NAME_TYPES[i]; - nameinfo->tzID = newKey; - nameinfo->mzID = NULL; - fNamesTrie.put(name, nameinfo, status); - } - } - } - } - } else { - // Should never happen with a valid input - if (tznames != NULL) { - // It's not possible that we get a valid TZNames with unknown ID. - // But just in case.. - delete tznames; - tznames = NULL; - } - } - } else if (cacheVal != EMPTY) { - tznames = (TZNames *)cacheVal; + void *tznames = uhash_get(fTZNamesMap, tzIDKey); + if (tznames == NULL) { + ZNames::ZNamesLoader loader; + loader.loadTimeZone(fZoneStrings, tzID, status); + tznames = ZNames::createTimeZoneAndPutInCache(fTZNamesMap, loader.getNames(), tzID, status); + if (U_FAILURE(status)) { return NULL; } } - return tznames; + // tznames is never EMPTY + return (ZNames*)tznames; } TimeZoneNames::MatchInfoCollection* TimeZoneNamesImpl::find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const { ZNameSearchHandler handler(types); + TimeZoneNames::MatchInfoCollection* matches; + TimeZoneNamesImpl* nonConstThis = const_cast(this); - TimeZoneNamesImpl *nonConstThis = const_cast(this); - - umtx_lock(&gLock); + // Synchronize so that data is not loaded multiple times. + // TODO: Consider more fine-grained synchronization. { - fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); - } - umtx_unlock(&gLock); + Mutex lock(&gDataMutex); - if (U_FAILURE(status)) { - return NULL; + // First try of lookup. + matches = doFind(handler, text, start, status); + if (U_FAILURE(status)) { return NULL; } + if (matches != NULL) { + return matches; + } + + // All names are not yet loaded into the trie. + // We may have loaded names for formatting several time zones, + // and might be parsing one of those. + // Populate the parsing trie from all of the already-loaded names. + nonConstThis->addAllNamesIntoTrie(status); + + // Second try of lookup. + matches = doFind(handler, text, start, status); + if (U_FAILURE(status)) { return NULL; } + if (matches != NULL) { + return matches; + } + + // There are still some names we haven't loaded into the trie yet. + // Load everything now. + nonConstThis->internalLoadAllDisplayNames(status); + nonConstThis->addAllNamesIntoTrie(status); + nonConstThis->fNamesTrieFullyLoaded = TRUE; + if (U_FAILURE(status)) { return NULL; } + + // Third try: we must return this one. + return doFind(handler, text, start, status); } +} + +TimeZoneNames::MatchInfoCollection* +TimeZoneNamesImpl::doFind(ZNameSearchHandler& handler, + const UnicodeString& text, int32_t start, UErrorCode& status) const { + + fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); + if (U_FAILURE(status)) { return NULL; } int32_t maxLen = 0; TimeZoneNames::MatchInfoCollection* matches = handler.getMatches(maxLen); if (matches != NULL && ((maxLen == (text.length() - start)) || fNamesTrieFullyLoaded)) { - // perfect match + // perfect match, or no more names available return matches; } - delete matches; + return NULL; +} - // All names are not yet loaded into the trie - umtx_lock(&gLock); - { - if (!fNamesTrieFullyLoaded) { - const UnicodeString *id; +// Caller must synchronize. +void TimeZoneNamesImpl::addAllNamesIntoTrie(UErrorCode& status) { + if (U_FAILURE(status)) return; + int32_t pos; + const UHashElement* element; - // load strings for all zones - StringEnumeration *tzIDs = TimeZone::createTimeZoneIDEnumeration(UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, status); - if (U_SUCCESS(status)) { - while ((id = tzIDs->snext(status))) { - if (U_FAILURE(status)) { - break; + pos = UHASH_FIRST; + while ((element = uhash_nextElement(fMZNamesMap, &pos)) != NULL) { + if (element->value.pointer == EMPTY) { continue; } + UChar* mzID = (UChar*) element->key.pointer; + ZNames* znames = (ZNames*) element->value.pointer; + znames->addAsMetaZoneIntoTrie(mzID, fNamesTrie, status); + if (U_FAILURE(status)) { return; } + } + + pos = UHASH_FIRST; + while ((element = uhash_nextElement(fTZNamesMap, &pos)) != NULL) { + if (element->value.pointer == EMPTY) { continue; } + UChar* tzID = (UChar*) element->key.pointer; + ZNames* znames = (ZNames*) element->value.pointer; + znames->addAsTimeZoneIntoTrie(tzID, fNamesTrie, status); + if (U_FAILURE(status)) { return; } + } +} + +U_CDECL_BEGIN +static void U_CALLCONV +deleteZNamesLoader(void* obj) { + if (obj == DUMMY_LOADER) { return; } + const ZNames::ZNamesLoader* loader = (const ZNames::ZNamesLoader*) obj; + delete loader; +} +U_CDECL_END + +struct TimeZoneNamesImpl::ZoneStringsLoader : public ResourceSink { + TimeZoneNamesImpl& tzn; + UHashtable* keyToLoader; + + ZoneStringsLoader(TimeZoneNamesImpl& _tzn, UErrorCode& status) + : tzn(_tzn) { + keyToLoader = uhash_open(uhash_hashChars, uhash_compareChars, NULL, &status); + if (U_FAILURE(status)) { return; } + uhash_setKeyDeleter(keyToLoader, uprv_free); + uhash_setValueDeleter(keyToLoader, deleteZNamesLoader); + } + virtual ~ZoneStringsLoader(); + + void* createKey(const char* key, UErrorCode& status) { + int32_t len = sizeof(char) * (uprv_strlen(key) + 1); + char* newKey = (char*) uprv_malloc(len); + if (newKey == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + uprv_memcpy(newKey, key, len); + newKey[len-1] = '\0'; + return (void*) newKey; + } + + UBool isMetaZone(const char* key) { + return (uprv_strlen(key) >= MZ_PREFIX_LEN && uprv_memcmp(key, gMZPrefix, MZ_PREFIX_LEN) == 0); + } + + UnicodeString mzIDFromKey(const char* key) { + return UnicodeString(key + MZ_PREFIX_LEN, uprv_strlen(key) - MZ_PREFIX_LEN, US_INV); + } + + UnicodeString tzIDFromKey(const char* key) { + UnicodeString tzID(key, -1, US_INV); + // Replace all colons ':' with slashes '/' + for (int i=0; ivalue.pointer == DUMMY_LOADER) { continue; } + ZNames::ZNamesLoader* loader = (ZNames::ZNamesLoader*) element->value.pointer; + char* key = (char*) element->key.pointer; + + if (isMetaZone(key)) { + UnicodeString mzID = mzIDFromKey(key); + ZNames::createMetaZoneAndPutInCache(tzn.fMZNamesMap, loader->getNames(), mzID, status); + } else { + UnicodeString tzID = tzIDFromKey(key); + ZNames::createTimeZoneAndPutInCache(tzn.fTZNamesMap, loader->getNames(), tzID, status); + } + if (U_FAILURE(status)) { return; } + } + } + + void consumeNamesTable(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &status) { + if (U_FAILURE(status)) { return; } + + void* loader = uhash_get(keyToLoader, key); + if (loader == NULL) { + if (isMetaZone(key)) { + UnicodeString mzID = mzIDFromKey(key); + void* cacheVal = uhash_get(tzn.fMZNamesMap, mzID.getTerminatedBuffer()); + if (cacheVal != NULL) { + // We have already loaded the names for this meta zone. + loader = (void*) DUMMY_LOADER; + } else { + loader = (void*) new ZNames::ZNamesLoader(); + if (loader == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; + } + } + } else { + UnicodeString tzID = tzIDFromKey(key); + void* cacheVal = uhash_get(tzn.fTZNamesMap, tzID.getTerminatedBuffer()); + if (cacheVal != NULL) { + // We have already loaded the names for this time zone. + loader = (void*) DUMMY_LOADER; + } else { + loader = (void*) new ZNames::ZNamesLoader(); + if (loader == NULL) { + status = U_MEMORY_ALLOCATION_ERROR; + return; } - // loadStrings also load related metazone strings - nonConstThis->loadStrings(*id); } } - if (tzIDs != NULL) { - delete tzIDs; + + void* newKey = createKey(key, status); + if (U_FAILURE(status)) { + deleteZNamesLoader(loader); + return; } - if (U_SUCCESS(status)) { - nonConstThis->fNamesTrieFullyLoaded = TRUE; + + uhash_put(keyToLoader, newKey, loader, &status); + if (U_FAILURE(status)) { return; } + } + + if (loader != DUMMY_LOADER) { + // Let the ZNamesLoader consume the names table. + ((ZNames::ZNamesLoader*)loader)->put(key, value, noFallback, status); + } + } + + virtual void put(const char *key, ResourceValue &value, UBool noFallback, + UErrorCode &status) { + ResourceTable timeZonesTable = value.getTable(status); + if (U_FAILURE(status)) { return; } + for (int32_t i = 0; timeZonesTable.getKeyAndValue(i, key, value); ++i) { + U_ASSERT(!value.isNoInheritanceMarker()); + if (value.getType() == URES_TABLE) { + consumeNamesTable(key, value, noFallback, status); + } else { + // Ignore fields that aren't tables (e.g., fallbackFormat and regionFormatStandard). + // All time zone fields are tables. } + if (U_FAILURE(status)) { return; } } } - umtx_unlock(&gLock); +}; - if (U_FAILURE(status)) { - return NULL; +// Virtual destructors must be defined out of line. +TimeZoneNamesImpl::ZoneStringsLoader::~ZoneStringsLoader() { + uhash_close(keyToLoader); +} + +void TimeZoneNamesImpl::loadAllDisplayNames(UErrorCode& status) { + if (U_FAILURE(status)) return; + + { + Mutex lock(&gDataMutex); + internalLoadAllDisplayNames(status); } +} + +void TimeZoneNamesImpl::getDisplayNames(const UnicodeString& tzID, + const UTimeZoneNameType types[], int32_t numTypes, + UDate date, UnicodeString dest[], UErrorCode& status) const { + if (U_FAILURE(status)) return; + + if (tzID.isEmpty()) { return; } + void* tznames = NULL; + void* mznames = NULL; + TimeZoneNamesImpl *nonConstThis = const_cast(this); - umtx_lock(&gLock); + // Load the time zone strings { - // now try it again - fNamesTrie.search(text, start, (TextTrieMapSearchResultHandler *)&handler, status); + Mutex lock(&gDataMutex); + tznames = (void*) nonConstThis->loadTimeZoneNames(tzID, status); + if (U_FAILURE(status)) { return; } + } + U_ASSERT(tznames != NULL); + + // Load the values into the dest array + for (int i = 0; i < numTypes; i++) { + UTimeZoneNameType type = types[i]; + const UChar* name = ((ZNames*)tznames)->getName(type); + if (name == NULL) { + if (mznames == NULL) { + // Load the meta zone name + UnicodeString mzID; + getMetaZoneID(tzID, date, mzID); + if (mzID.isEmpty()) { + mznames = (void*) EMPTY; + } else { + // Load the meta zone strings + // Mutex is scoped to the "else" statement + Mutex lock(&gDataMutex); + mznames = (void*) nonConstThis->loadMetaZoneNames(mzID, status); + if (U_FAILURE(status)) { return; } + // Note: when the metazone doesn't exist, in Java, loadMetaZoneNames returns + // a dummy object instead of NULL. + if (mznames == NULL) { + mznames = (void*) EMPTY; + } + } + } + U_ASSERT(mznames != NULL); + if (mznames != EMPTY) { + name = ((ZNames*)mznames)->getName(type); + } + } + if (name != NULL) { + dest[i].setTo(TRUE, name, -1); + } else { + dest[i].setToBogus(); + } } - umtx_unlock(&gLock); +} - return handler.getMatches(maxLen); +// Caller must synchronize. +void TimeZoneNamesImpl::internalLoadAllDisplayNames(UErrorCode& status) { + if (!fNamesFullyLoaded) { + fNamesFullyLoaded = TRUE; + + ZoneStringsLoader loader(*this, status); + loader.load(status); + if (U_FAILURE(status)) { return; } + + const UnicodeString *id; + + // load strings for all zones + StringEnumeration *tzIDs = TimeZone::createTimeZoneIDEnumeration( + UCAL_ZONE_TYPE_CANONICAL, NULL, NULL, status); + if (U_SUCCESS(status)) { + while ((id = tzIDs->snext(status))) { + if (U_FAILURE(status)) { + break; + } + UnicodeString copy(*id); + void* value = uhash_get(fTZNamesMap, copy.getTerminatedBuffer()); + if (value == NULL) { + // loadStrings also loads related metazone strings + loadStrings(*id, status); + } + } + } + if (tzIDs != NULL) { + delete tzIDs; + } + } } + + static const UChar gEtcPrefix[] = { 0x45, 0x74, 0x63, 0x2F }; // "Etc/" static const int32_t gEtcPrefixLen = 4; static const UChar gSystemVPrefix[] = { 0x53, 0x79, 0x73, 0x74, 0x65, 0x6D, 0x56, 0x2F }; // "SystemV/ @@ -1554,7 +1822,7 @@ TZDBNames::createInstance(UResourceBundle* rb, const char* key) { if (regions != NULL) { char **p = regions; for (int32_t i = 0; i < numRegions; p++, i++) { - uprv_free(p); + uprv_free(*p); } uprv_free(regions); } @@ -1982,9 +2250,10 @@ TZDBTimeZoneNames::getMetaZoneNames(const UnicodeString& mzID, UErrorCode& statu } // Use the persistent ID as the resource key, so we can // avoid duplications. - const UChar* newKey = ZoneMeta::findMetaZoneID(mzID); + // TODO: Is there a more efficient way, like intern() in Java? + void* newKey = (void*) ZoneMeta::findMetaZoneID(mzID); if (newKey != NULL) { - uhash_put(gTZDBNamesMap, (void *)newKey, cacheVal, &status); + uhash_put(gTZDBNamesMap, newKey, cacheVal, &status); if (U_FAILURE(status)) { if (tzdbNames != NULL) { delete tzdbNames; diff --git a/deps/icu-small/source/i18n/tznames_impl.h b/deps/icu-small/source/i18n/tznames_impl.h index 5e5d96829e79ca..6b913bb6bf8c1b 100644 --- a/deps/icu-small/source/i18n/tznames_impl.h +++ b/deps/icu-small/source/i18n/tznames_impl.h @@ -1,7 +1,9 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* - * Copyright (C) 2011-2014, International Business Machines Corporation and * - * others. All Rights Reserved. * + * Copyright (C) 2011-2016, International Business Machines Corporation and + * others. All Rights Reserved. ******************************************************************************* */ @@ -159,8 +161,8 @@ class U_I18N_API TextTrieMap : public UMemory { class ZNames; -class TZNames; class TextTrieMap; +class ZNameSearchHandler; class TimeZoneNamesImpl : public TimeZoneNames { public: @@ -184,6 +186,9 @@ class TimeZoneNamesImpl : public TimeZoneNames { TimeZoneNames::MatchInfoCollection* find(const UnicodeString& text, int32_t start, uint32_t types, UErrorCode& status) const; + void loadAllDisplayNames(UErrorCode& status); + void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + static UnicodeString& getDefaultExemplarLocationName(const UnicodeString& tzID, UnicodeString& name); static StringEnumeration* _getAvailableMetaZoneIDs(UErrorCode& status); @@ -201,15 +206,23 @@ class TimeZoneNamesImpl : public TimeZoneNames { UHashtable* fMZNamesMap; UBool fNamesTrieFullyLoaded; + UBool fNamesFullyLoaded; TextTrieMap fNamesTrie; void initialize(const Locale& locale, UErrorCode& status); void cleanup(); - void loadStrings(const UnicodeString& tzCanonicalID); + void loadStrings(const UnicodeString& tzCanonicalID, UErrorCode& status); + + ZNames* loadMetaZoneNames(const UnicodeString& mzId, UErrorCode& status); + ZNames* loadTimeZoneNames(const UnicodeString& mzId, UErrorCode& status); + TimeZoneNames::MatchInfoCollection* doFind(ZNameSearchHandler& handler, + const UnicodeString& text, int32_t start, UErrorCode& status) const; + void addAllNamesIntoTrie(UErrorCode& errorCode); + + void internalLoadAllDisplayNames(UErrorCode& status); - ZNames* loadMetaZoneNames(const UnicodeString& mzId); - TZNames* loadTimeZoneNames(const UnicodeString& mzId); + struct ZoneStringsLoader; }; class TZDBNames; diff --git a/deps/icu-small/source/i18n/tzrule.cpp b/deps/icu-small/source/i18n/tzrule.cpp index 59e1f44c87d975..2ff61302b8180e 100644 --- a/deps/icu-small/source/i18n/tzrule.cpp +++ b/deps/icu-small/source/i18n/tzrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/tztrans.cpp b/deps/icu-small/source/i18n/tztrans.cpp index 6e0ddf6d39b8aa..76e259c5aef672 100644 --- a/deps/icu-small/source/i18n/tztrans.cpp +++ b/deps/icu-small/source/i18n/tztrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/ucal.cpp b/deps/icu-small/source/i18n/ucal.cpp index c405701ece9121..a9377b1e511f9e 100644 --- a/deps/icu-small/source/i18n/ucal.cpp +++ b/deps/icu-small/source/i18n/ucal.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/ucln_in.cpp b/deps/icu-small/source/i18n/ucln_in.cpp index 49e6b37fd0f6df..b33a68923767ca 100644 --- a/deps/icu-small/source/i18n/ucln_in.cpp +++ b/deps/icu-small/source/i18n/ucln_in.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -28,7 +30,7 @@ static const char copyright[] = U_COPYRIGHT_STRING; static cleanupFunc *gCleanupFunctions[UCLN_I18N_COUNT]; -static UBool i18n_cleanup(void) +static UBool U_CALLCONV i18n_cleanup(void) { int32_t libType = UCLN_I18N_START; (void)copyright; /* Suppress unused variable warning with clang. */ diff --git a/deps/icu-small/source/i18n/ucln_in.h b/deps/icu-small/source/i18n/ucln_in.h index 3fdec6db0d5686..b609fce0c2da5a 100644 --- a/deps/icu-small/source/i18n/ucln_in.h +++ b/deps/icu-small/source/i18n/ucln_in.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines @@ -24,8 +26,8 @@ as the functions are suppose to be called. It's usually best to have child dependencies called first. */ typedef enum ECleanupI18NType { UCLN_I18N_START = -1, - UCLN_I18N_IDENTIFIER_INFO, UCLN_I18N_SPOOF, + UCLN_I18N_SPOOFDATA, UCLN_I18N_TRANSLITERATOR, UCLN_I18N_REGEX, UCLN_I18N_ISLAMIC_CALENDAR, @@ -40,6 +42,7 @@ typedef enum ECleanupI18NType { UCLN_I18N_TIMEZONENAMES, UCLN_I18N_ZONEMETA, UCLN_I18N_TIMEZONE, + UCLN_I18N_DIGITLIST, UCLN_I18N_DECFMT, UCLN_I18N_NUMFMT, UCLN_I18N_ALLOWED_HOUR_FORMATS, diff --git a/deps/icu-small/source/i18n/ucol.cpp b/deps/icu-small/source/i18n/ucol.cpp index b950756d4075b1..c622aef7c245b7 100644 --- a/deps/icu-small/source/i18n/ucol.cpp +++ b/deps/icu-small/source/i18n/ucol.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/ucol_imp.h b/deps/icu-small/source/i18n/ucol_imp.h index bfa2bb445af30d..7c9e8f68911209 100644 --- a/deps/icu-small/source/i18n/ucol_imp.h +++ b/deps/icu-small/source/i18n/ucol_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -76,7 +78,7 @@ class CollationLoader { const CollationCacheEntry *createCacheEntry(UErrorCode &errorCode); private: - static void loadRootRules(UErrorCode &errorCode); + static void U_CALLCONV loadRootRules(UErrorCode &errorCode); // The following members are used by loadTailoring() // and the cache callback. diff --git a/deps/icu-small/source/i18n/ucol_res.cpp b/deps/icu-small/source/i18n/ucol_res.cpp index d7e2ab427c9f4d..314b766ee6db02 100644 --- a/deps/icu-small/source/i18n/ucol_res.cpp +++ b/deps/icu-small/source/i18n/ucol_res.cpp @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 1996-2014, International Business Machines +* Copyright (C) 1996-2016, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* * file name: ucol_res.cpp @@ -34,11 +36,13 @@ #include "unicode/uloc.h" #include "unicode/unistr.h" #include "unicode/ures.h" +#include "charstr.h" #include "cmemory.h" #include "cstring.h" #include "collationdatareader.h" #include "collationroot.h" #include "collationtailoring.h" +#include "resource.h" #include "putilimp.h" #include "uassert.h" #include "ucln_in.h" @@ -74,9 +78,7 @@ ucol_res_cleanup() { return TRUE; } -U_CDECL_END - -void +void U_CALLCONV CollationLoader::loadRootRules(UErrorCode &errorCode) { if(U_FAILURE(errorCode)) { return; } rootBundle = ures_open(U_ICUDATA_COLL, kRootLocaleName, &errorCode); @@ -90,6 +92,8 @@ CollationLoader::loadRootRules(UErrorCode &errorCode) { ucln_i18n_registerCleanup(UCLN_I18N_UCOL_RES, ucol_res_cleanup); } +U_CDECL_END + void CollationLoader::appendRootRules(UnicodeString &s) { UErrorCode errorCode = U_ZERO_ERROR; @@ -501,8 +505,6 @@ U_CAPI UCollator* ucol_open(const char *loc, UErrorCode *status) { - U_NAMESPACE_USE - UTRACE_ENTRY_OC(UTRACE_UCOL_OPEN); UTRACE_DATA1(UTRACE_INFO, "locale = \"%s\"", loc); UCollator *result = NULL; @@ -523,8 +525,6 @@ ucol_getDisplayName( const char *objLoc, int32_t resultLength, UErrorCode *status) { - U_NAMESPACE_USE - if(U_FAILURE(*status)) return -1; UnicodeString dst; if(!(result==NULL && resultLength==0)) { @@ -558,8 +558,6 @@ ucol_countAvailable() #if !UCONFIG_NO_SERVICE U_CAPI UEnumeration* U_EXPORT2 ucol_openAvailableLocales(UErrorCode *status) { - U_NAMESPACE_USE - // This is a wrapper over Collator::getAvailableLocales() if (U_FAILURE(*status)) { return NULL; @@ -615,119 +613,75 @@ static const UEnumeration defaultKeywordValues = { ulist_reset_keyword_values_iterator }; -#include - -U_CAPI UEnumeration* U_EXPORT2 -ucol_getKeywordValuesForLocale(const char* /*key*/, const char* locale, - UBool /*commonlyUsed*/, UErrorCode* status) { - /* Get the locale base name. */ - char localeBuffer[ULOC_FULLNAME_CAPACITY] = ""; - uloc_getBaseName(locale, localeBuffer, sizeof(localeBuffer), status); - - /* Create the 2 lists - * -values is the temp location for the keyword values - * -results hold the actual list used by the UEnumeration object - */ - UList *values = ulist_createEmptyList(status); - UList *results = ulist_createEmptyList(status); - UEnumeration *en = (UEnumeration *)uprv_malloc(sizeof(UEnumeration)); - if (U_FAILURE(*status) || en == NULL) { - if (en == NULL) { - *status = U_MEMORY_ALLOCATION_ERROR; - } else { - uprv_free(en); - } - ulist_deleteList(values); - ulist_deleteList(results); - return NULL; - } +namespace { - memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); - en->context = results; - - /* Open the resource bundle for collation with the given locale. */ - UResourceBundle bundle, collations, collres, defres; - ures_initStackObject(&bundle); - ures_initStackObject(&collations); - ures_initStackObject(&collres); - ures_initStackObject(&defres); - - ures_openFillIn(&bundle, U_ICUDATA_COLL, localeBuffer, status); - - while (U_SUCCESS(*status)) { - ures_getByKey(&bundle, RESOURCE_NAME, &collations, status); - ures_resetIterator(&collations); - while (U_SUCCESS(*status) && ures_hasNext(&collations)) { - ures_getNextResource(&collations, &collres, status); - const char *key = ures_getKey(&collres); - /* If the key is default, get the string and store it in results list only - * if results list is empty. - */ - if (uprv_strcmp(key, "default") == 0) { - if (ulist_getListSize(results) == 0) { - char *defcoll = (char *)uprv_malloc(sizeof(char) * ULOC_KEYWORDS_CAPACITY); - int32_t defcollLength = ULOC_KEYWORDS_CAPACITY; - - ures_getNextResource(&collres, &defres, status); -#if U_CHARSET_FAMILY==U_ASCII_FAMILY - /* optimize - use the utf-8 string */ - ures_getUTF8String(&defres, defcoll, &defcollLength, TRUE, status); -#else - { - const UChar* defString = ures_getString(&defres, &defcollLength, status); - if(U_SUCCESS(*status)) { - if(defcollLength+1 > ULOC_KEYWORDS_CAPACITY) { - *status = U_BUFFER_OVERFLOW_ERROR; - } else { - u_UCharsToChars(defString, defcoll, defcollLength+1); - } - } +struct KeywordsSink : public ResourceSink { +public: + KeywordsSink(UErrorCode &errorCode) : + values(ulist_createEmptyList(&errorCode)), hasDefault(FALSE) {} + virtual ~KeywordsSink(); + + virtual void put(const char *key, ResourceValue &value, UBool /*noFallback*/, + UErrorCode &errorCode) { + if (U_FAILURE(errorCode)) { return; } + ResourceTable collations = value.getTable(errorCode); + for (int32_t i = 0; collations.getKeyAndValue(i, key, value); ++i) { + UResType type = value.getType(); + if (type == URES_STRING) { + if (!hasDefault && uprv_strcmp(key, "default") == 0) { + CharString defcoll; + defcoll.appendInvariantChars(value.getUnicodeString(errorCode), errorCode); + if (U_SUCCESS(errorCode) && !defcoll.isEmpty()) { + char *ownedDefault = uprv_strdup(defcoll.data()); + if (ownedDefault == NULL) { + errorCode = U_MEMORY_ALLOCATION_ERROR; + return; + } + ulist_removeString(values, defcoll.data()); + ulist_addItemBeginList(values, ownedDefault, TRUE, &errorCode); + hasDefault = TRUE; } -#endif - - ulist_addItemBeginList(results, defcoll, TRUE, status); } - } else if (uprv_strncmp(key, "private-", 8) != 0) { - ulist_addItemEndList(values, key, FALSE, status); - } - } - - /* If the locale is "" this is root so exit. */ - if (uprv_strlen(localeBuffer) == 0) { - break; - } - /* Get the parent locale and open a new resource bundle. */ - uloc_getParent(localeBuffer, localeBuffer, sizeof(localeBuffer), status); - ures_openFillIn(&bundle, U_ICUDATA_COLL, localeBuffer, status); - } - - ures_close(&defres); - ures_close(&collres); - ures_close(&collations); - ures_close(&bundle); - - if (U_SUCCESS(*status)) { - char *value = NULL; - ulist_resetList(values); - while ((value = (char *)ulist_getNext(values)) != NULL) { - if (!ulist_containsString(results, value, (int32_t)uprv_strlen(value))) { - ulist_addItemEndList(results, value, FALSE, status); - if (U_FAILURE(*status)) { - break; + } else if (type == URES_TABLE && uprv_strncmp(key, "private-", 8) != 0) { + if (!ulist_containsString(values, key, (int32_t)uprv_strlen(key))) { + ulist_addItemEndList(values, key, FALSE, &errorCode); } } + if (U_FAILURE(errorCode)) { return; } } } + UList *values; + UBool hasDefault; +}; + +KeywordsSink::~KeywordsSink() { ulist_deleteList(values); +} - if (U_FAILURE(*status)){ - uenum_close(en); - en = NULL; - } else { - ulist_resetList(results); - } +} // namespace + +U_CAPI UEnumeration* U_EXPORT2 +ucol_getKeywordValuesForLocale(const char* /*key*/, const char* locale, + UBool /*commonlyUsed*/, UErrorCode* status) { + // Note: The parameter commonlyUsed is not used. + // The switch is in the method signature for consistency + // with other locale services. + + // Read available collation values from collation bundles. + LocalUResourceBundlePointer bundle(ures_open(U_ICUDATA_COLL, locale, status)); + KeywordsSink sink(*status); + ures_getAllItemsWithFallback(bundle.getAlias(), RESOURCE_NAME, sink, *status); + if (U_FAILURE(*status)) { return NULL; } + UEnumeration *en = (UEnumeration *)uprv_malloc(sizeof(UEnumeration)); + if (en == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + memcpy(en, &defaultKeywordValues, sizeof(UEnumeration)); + en->context = sink.values; + sink.values = NULL; // Avoid deletion in the sink destructor. return en; } diff --git a/deps/icu-small/source/i18n/ucol_sit.cpp b/deps/icu-small/source/i18n/ucol_sit.cpp index 5d9e0d4546d765..c81977b8a34cc0 100644 --- a/deps/icu-small/source/i18n/ucol_sit.cpp +++ b/deps/icu-small/source/i18n/ucol_sit.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/ucoleitr.cpp b/deps/icu-small/source/i18n/ucoleitr.cpp index 6ccabded67c898..4b46b205aa07db 100644 --- a/deps/icu-small/source/i18n/ucoleitr.cpp +++ b/deps/icu-small/source/i18n/ucoleitr.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 2001-2016, International Business Machines @@ -34,9 +36,9 @@ U_NAMESPACE_USE #define DEFAULT_BUFFER_SIZE 16 #define BUFFER_GROW 8 -#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (count) * sizeof (src)[0]) +#define ARRAY_COPY(dst, src, count) uprv_memcpy((void *) (dst), (void *) (src), (size_t)(count) * sizeof (src)[0]) -#define NEW_ARRAY(type, count) (type *) uprv_malloc((count) * sizeof(type)) +#define NEW_ARRAY(type, count) (type *) uprv_malloc((size_t)(count) * sizeof(type)) #define DELETE_ARRAY(array) uprv_free((void *) (array)) diff --git a/deps/icu-small/source/i18n/ucsdet.cpp b/deps/icu-small/source/i18n/ucsdet.cpp index f0445427c706a6..dd69d9f548b78a 100644 --- a/deps/icu-small/source/i18n/ucsdet.cpp +++ b/deps/icu-small/source/i18n/ucsdet.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/udat.cpp b/deps/icu-small/source/i18n/udat.cpp index 7b65aa739a47d3..b07e1ceab7436d 100644 --- a/deps/icu-small/source/i18n/udat.cpp +++ b/deps/icu-small/source/i18n/udat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/udateintervalformat.cpp b/deps/icu-small/source/i18n/udateintervalformat.cpp index ef6fc197c75680..e6eec44847453c 100644 --- a/deps/icu-small/source/i18n/udateintervalformat.cpp +++ b/deps/icu-small/source/i18n/udateintervalformat.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/udatpg.cpp b/deps/icu-small/source/i18n/udatpg.cpp index d0bafa30a89cc5..d8824afdfc4adf 100644 --- a/deps/icu-small/source/i18n/udatpg.cpp +++ b/deps/icu-small/source/i18n/udatpg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/ufieldpositer.cpp b/deps/icu-small/source/i18n/ufieldpositer.cpp index 7f8688425d6fb6..b1c9c64805889c 100644 --- a/deps/icu-small/source/i18n/ufieldpositer.cpp +++ b/deps/icu-small/source/i18n/ufieldpositer.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015, International Business Machines diff --git a/deps/icu-small/source/i18n/uitercollationiterator.cpp b/deps/icu-small/source/i18n/uitercollationiterator.cpp index f717282eac03b8..eb71725380a635 100644 --- a/deps/icu-small/source/i18n/uitercollationiterator.cpp +++ b/deps/icu-small/source/i18n/uitercollationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/uitercollationiterator.h b/deps/icu-small/source/i18n/uitercollationiterator.h index a64f88561b3b33..da9f8d34687d0b 100644 --- a/deps/icu-small/source/i18n/uitercollationiterator.h +++ b/deps/icu-small/source/i18n/uitercollationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/ulocdata.c b/deps/icu-small/source/i18n/ulocdata.c index fc84756d4c88f4..e1e61ce8706abc 100644 --- a/deps/icu-small/source/i18n/ulocdata.c +++ b/deps/icu-small/source/i18n/ulocdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * diff --git a/deps/icu-small/source/i18n/umsg.cpp b/deps/icu-small/source/i18n/umsg.cpp index d4a55818cdbe17..75647e37d6bbdf 100644 --- a/deps/icu-small/source/i18n/umsg.cpp +++ b/deps/icu-small/source/i18n/umsg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -469,7 +471,7 @@ umsg_vformat( const UMessageFormat *fmt, } } UnicodeString resultStr; - FieldPosition fieldPosition(0); + FieldPosition fieldPosition(FieldPosition::DONT_CARE); /* format the message */ ((const MessageFormat*)fmt)->format(args,count,resultStr,fieldPosition,*status); diff --git a/deps/icu-small/source/i18n/umsg_imp.h b/deps/icu-small/source/i18n/umsg_imp.h index 78bbf966bcec1c..e3538d39710f31 100644 --- a/deps/icu-small/source/i18n/umsg_imp.h +++ b/deps/icu-small/source/i18n/umsg_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001, International Business Machines diff --git a/deps/icu-small/source/i18n/unesctrn.cpp b/deps/icu-small/source/i18n/unesctrn.cpp index a4e9358ae68052..2e79067dee6aa9 100644 --- a/deps/icu-small/source/i18n/unesctrn.cpp +++ b/deps/icu-small/source/i18n/unesctrn.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2011, International Business Machines @@ -85,7 +87,7 @@ static UChar* copySpec(const UChar* spec) { UChar *result = (UChar *)uprv_malloc(len*sizeof(UChar)); // Check for memory allocation error. if (result != NULL) { - uprv_memcpy(result, spec, len*sizeof(result[0])); + uprv_memcpy(result, spec, (size_t)len*sizeof(result[0])); } return result; } diff --git a/deps/icu-small/source/i18n/unesctrn.h b/deps/icu-small/source/i18n/unesctrn.h index bfde6fc134fdd7..7ae8302b0fcb33 100644 --- a/deps/icu-small/source/i18n/unesctrn.h +++ b/deps/icu-small/source/i18n/unesctrn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/uni2name.cpp b/deps/icu-small/source/i18n/uni2name.cpp index a10fa14c7f31f7..24323b3f60642f 100644 --- a/deps/icu-small/source/i18n/uni2name.cpp +++ b/deps/icu-small/source/i18n/uni2name.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/uni2name.h b/deps/icu-small/source/i18n/uni2name.h index aede864564a65b..7d85113f665b1d 100644 --- a/deps/icu-small/source/i18n/uni2name.h +++ b/deps/icu-small/source/i18n/uni2name.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2007, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/alphaindex.h b/deps/icu-small/source/i18n/unicode/alphaindex.h index 9116ccc26c1d36..e9e8739ed28a00 100644 --- a/deps/icu-small/source/i18n/unicode/alphaindex.h +++ b/deps/icu-small/source/i18n/unicode/alphaindex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/i18n/unicode/basictz.h b/deps/icu-small/source/i18n/unicode/basictz.h index 5b470382507f54..8da4a00bf877be 100644 --- a/deps/icu-small/source/i18n/unicode/basictz.h +++ b/deps/icu-small/source/i18n/unicode/basictz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/calendar.h b/deps/icu-small/source/i18n/unicode/calendar.h index 35252bb9c809a0..b7da5f3c5b8b94 100644 --- a/deps/icu-small/source/i18n/unicode/calendar.h +++ b/deps/icu-small/source/i18n/unicode/calendar.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/choicfmt.h b/deps/icu-small/source/i18n/unicode/choicfmt.h index cfd520624dc53a..ab3c28fe0740d7 100644 --- a/deps/icu-small/source/i18n/unicode/choicfmt.h +++ b/deps/icu-small/source/i18n/unicode/choicfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/coleitr.h b/deps/icu-small/source/i18n/unicode/coleitr.h index f07ada7b6703a2..628b461f9453d4 100644 --- a/deps/icu-small/source/i18n/unicode/coleitr.h +++ b/deps/icu-small/source/i18n/unicode/coleitr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1997-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/coll.h b/deps/icu-small/source/i18n/unicode/coll.h index 5468342716b6d4..e41be2ee81a25c 100644 --- a/deps/icu-small/source/i18n/unicode/coll.h +++ b/deps/icu-small/source/i18n/unicode/coll.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/compactdecimalformat.h b/deps/icu-small/source/i18n/unicode/compactdecimalformat.h index ced6bee5994a4f..1fcc5c581e089d 100644 --- a/deps/icu-small/source/i18n/unicode/compactdecimalformat.h +++ b/deps/icu-small/source/i18n/unicode/compactdecimalformat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2012-2016, International Business Machines @@ -157,7 +159,6 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat { FieldPositionIterator* posIter, UErrorCode& status) const; - /* Cannot use #ifndef U_HIDE_DRAFT_API for the following draft method since it is virtual. */ /** * Format a long number using base-10 representation. * @@ -167,7 +168,7 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat { * @param pos On input: an alignment field, if desired. * On output: the offsets of the alignment field. * @return Reference to 'appendTo' parameter. - * @draft ICU 56 + * @stable ICU 56 */ virtual UnicodeString& format(int32_t number, UnicodeString& appendTo, @@ -274,7 +275,7 @@ class U_I18N_API CompactDecimalFormat : public DecimalFormat { * @return Reference to 'appendTo' parameter. * @internal */ - virtual UnicodeString& format(const StringPiece &number, + virtual UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter, UErrorCode& status) const; diff --git a/deps/icu-small/source/i18n/unicode/curramt.h b/deps/icu-small/source/i18n/unicode/curramt.h index ce9acbfd5cda7c..268d53c0b15f7e 100644 --- a/deps/icu-small/source/i18n/unicode/curramt.h +++ b/deps/icu-small/source/i18n/unicode/curramt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2006, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/currpinf.h b/deps/icu-small/source/i18n/unicode/currpinf.h index 4f1f8962c38896..133de38fc2fd99 100644 --- a/deps/icu-small/source/i18n/unicode/currpinf.h +++ b/deps/icu-small/source/i18n/unicode/currpinf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2015, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/currunit.h b/deps/icu-small/source/i18n/unicode/currunit.h index 93ecd2c48906e2..313c92a6acacfc 100644 --- a/deps/icu-small/source/i18n/unicode/currunit.h +++ b/deps/icu-small/source/i18n/unicode/currunit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/datefmt.h b/deps/icu-small/source/i18n/unicode/datefmt.h index 2ccac7976037d9..6e3a78f2913ce1 100644 --- a/deps/icu-small/source/i18n/unicode/datefmt.h +++ b/deps/icu-small/source/i18n/unicode/datefmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/dcfmtsym.h b/deps/icu-small/source/i18n/unicode/dcfmtsym.h index 9b406b14172b43..946227addb7557 100644 --- a/deps/icu-small/source/i18n/unicode/dcfmtsym.h +++ b/deps/icu-small/source/i18n/unicode/dcfmtsym.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/decimfmt.h b/deps/icu-small/source/i18n/unicode/decimfmt.h index e7f8ea592e09af..7339399f72e001 100644 --- a/deps/icu-small/source/i18n/unicode/decimfmt.h +++ b/deps/icu-small/source/i18n/unicode/decimfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -968,7 +970,7 @@ class U_I18N_API DecimalFormat: public NumberFormat { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(double number, UnicodeString& appendTo, @@ -1017,7 +1019,7 @@ class U_I18N_API DecimalFormat: public NumberFormat { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int32_t number, UnicodeString& appendTo, @@ -1066,7 +1068,7 @@ class U_I18N_API DecimalFormat: public NumberFormat { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, @@ -1087,9 +1089,9 @@ class U_I18N_API DecimalFormat: public NumberFormat { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ - virtual UnicodeString& format(const StringPiece &number, + virtual UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter, UErrorCode& status) const; @@ -2101,6 +2103,8 @@ class U_I18N_API DecimalFormat: public NumberFormat { DecimalFormatSymbols* symbolsToAdopt = 0 ); + void handleCurrencySignInPattern(UErrorCode& status); + void parse(const UnicodeString& text, Formattable& result, ParsePosition& pos, diff --git a/deps/icu-small/source/i18n/unicode/dtfmtsym.h b/deps/icu-small/source/i18n/unicode/dtfmtsym.h index c338c46fac2dbc..507868e2c328fb 100644 --- a/deps/icu-small/source/i18n/unicode/dtfmtsym.h +++ b/deps/icu-small/source/i18n/unicode/dtfmtsym.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines @@ -270,9 +272,15 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject { * @stable ICU 3.6 */ enum DtContextType { - FORMAT, - STANDALONE, - DT_CONTEXT_COUNT + FORMAT, + STANDALONE, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal DtContextType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + DT_CONTEXT_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** @@ -280,17 +288,21 @@ class U_I18N_API DateFormatSymbols U_FINAL : public UObject { * @stable ICU 3.6 */ enum DtWidthType { - ABBREVIATED, - WIDE, - NARROW, - /** - * Short width is currently only supported for weekday names. - * @stable ICU 51 - */ - SHORT, - /** - */ - DT_WIDTH_COUNT = 4 + ABBREVIATED, + WIDE, + NARROW, + /** + * Short width is currently only supported for weekday names. + * @stable ICU 51 + */ + SHORT, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal DtWidthType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + DT_WIDTH_COUNT = 4 +#endif // U_HIDE_DEPRECATED_API }; /** diff --git a/deps/icu-small/source/i18n/unicode/dtitvfmt.h b/deps/icu-small/source/i18n/unicode/dtitvfmt.h index 181d46c8e0af72..68360b87dffaf5 100644 --- a/deps/icu-small/source/i18n/unicode/dtitvfmt.h +++ b/deps/icu-small/source/i18n/unicode/dtitvfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************************** * Copyright (C) 2008-2016, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/unicode/dtitvinf.h b/deps/icu-small/source/i18n/unicode/dtitvinf.h index 1c7f3983df991e..b31061e16aff10 100644 --- a/deps/icu-small/source/i18n/unicode/dtitvinf.h +++ b/deps/icu-small/source/i18n/unicode/dtitvinf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2016, International Business Machines Corporation and @@ -150,7 +152,8 @@ U_NAMESPACE_BEGIN class U_I18N_API DateIntervalInfo U_FINAL : public UObject { public: -#ifndef U_HIDE_INTERNAL_API + // Do not enclose the protected default constructor with #ifndef U_HIDE_INTERNAL_API + // or else the compiler will create a public default constructor. /** * Default constructor. * It does not initialize any interval patterns except @@ -165,7 +168,6 @@ class U_I18N_API DateIntervalInfo U_FINAL : public UObject { * @internal ICU 4.0 */ DateIntervalInfo(UErrorCode& status); -#endif /* U_HIDE_INTERNAL_API */ /** @@ -339,7 +341,10 @@ class U_I18N_API DateIntervalInfo U_FINAL : public UObject { */ friend class DateIntervalFormat; - friend struct DateIntervalSink; + /** + * Internal struct used to load resource bundle data. + */ + struct DateIntervalSink; /** * Following is for saving the interval patterns. diff --git a/deps/icu-small/source/i18n/unicode/dtptngen.h b/deps/icu-small/source/i18n/unicode/dtptngen.h index eb8a44541e061c..fd617ce3cdcbfb 100644 --- a/deps/icu-small/source/i18n/unicode/dtptngen.h +++ b/deps/icu-small/source/i18n/unicode/dtptngen.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and @@ -116,7 +118,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject { */ UBool operator!=(const DateTimePatternGenerator& other) const; -#ifndef U_HIDE_DRAFT_API /** * Utility to return a unique skeleton from a given pattern. For example, * both "MMM-dd" and "dd/MMM" produce the skeleton "MMMdd". @@ -125,10 +126,9 @@ class U_I18N_API DateTimePatternGenerator : public UObject { * @param status Output param set to success/failure code on exit, * which must not indicate a failure before the function call. * @return skeleton such as "MMMdd" - * @draft ICU 56 + * @stable ICU 56 */ static UnicodeString staticGetSkeleton(const UnicodeString& pattern, UErrorCode& status); -#endif /* U_HIDE_DRAFT_API */ /** * Utility to return a unique skeleton from a given pattern. For example, @@ -149,7 +149,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject { return staticGetSkeleton(pattern, status); }*/ -#ifndef U_HIDE_DRAFT_API /** * Utility to return a unique base skeleton from a given pattern. This is * the same as the skeleton, except that differences in length are minimized @@ -161,10 +160,9 @@ class U_I18N_API DateTimePatternGenerator : public UObject { * @param status Output param set to success/failure code on exit, * which must not indicate a failure before the function call. * @return base skeleton, such as "MMMd" - * @draft ICU 56 + * @stable ICU 56 */ static UnicodeString staticGetBaseSkeleton(const UnicodeString& pattern, UErrorCode& status); -#endif /* U_HIDE_DRAFT_API */ /** * Utility to return a unique base skeleton from a given pattern. This is @@ -518,7 +516,6 @@ class U_I18N_API DateTimePatternGenerator : public UObject { UnicodeString decimal; DateTimeMatcher *skipMatcher; Hashtable *fAvailableFormatKeyHash; - UnicodeString hackPattern; UnicodeString emptyString; UChar fDefaultHourFormatChar; @@ -534,9 +531,11 @@ class U_I18N_API DateTimePatternGenerator : public UObject { }; void initData(const Locale &locale, UErrorCode &status); - void addCanonicalItems(); + void addCanonicalItems(UErrorCode &status); void addICUPatterns(const Locale& locale, UErrorCode& status); void hackTimes(const UnicodeString& hackPattern, UErrorCode& status); + void getCalendarTypeToUse(const Locale& locale, CharString& destination, UErrorCode& err); + void consumeShortTimePattern(const UnicodeString& shortTimePattern, UErrorCode& status); void addCLDRData(const Locale& locale, UErrorCode& status); UDateTimePatternConflict addPatternWithSkeleton(const UnicodeString& pattern, const UnicodeString * skeletonToUse, UBool override, UnicodeString& conflictingPattern, UErrorCode& status); void initHashtable(UErrorCode& status); @@ -544,6 +543,7 @@ class U_I18N_API DateTimePatternGenerator : public UObject { void setDecimalSymbols(const Locale& locale, UErrorCode& status); UDateTimePatternField getAppendFormatNumber(const char* field) const; UDateTimePatternField getAppendNameNumber(const char* field) const; + UnicodeString& getMutableAppendItemName(UDateTimePatternField field); void getAppendName(UDateTimePatternField field, UnicodeString& value); int32_t getCanonicalIndex(const UnicodeString& field); const UnicodeString* getBestRaw(DateTimeMatcher& source, int32_t includeMask, DistanceInfo* missingFields, const PtnSkeleton** specifiedSkeletonPtr = 0); @@ -554,8 +554,12 @@ class U_I18N_API DateTimePatternGenerator : public UObject { UBool isAvailableFormatSet(const UnicodeString &key) const; void copyHashtable(Hashtable *other, UErrorCode &status); UBool isCanonicalItem(const UnicodeString& item) const; - static void loadAllowedHourFormatsData(UErrorCode &status); + static void U_CALLCONV loadAllowedHourFormatsData(UErrorCode &status); void getAllowedHourFormats(const Locale &locale, UErrorCode &status); + + struct AppendItemFormatsSink; + struct AppendItemNamesSink; + struct AvailableFormatsSink; } ;// end class DateTimePatternGenerator U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/unicode/dtrule.h b/deps/icu-small/source/i18n/unicode/dtrule.h index 3ef080b4eb0ee9..32d230ea778244 100644 --- a/deps/icu-small/source/i18n/unicode/dtrule.h +++ b/deps/icu-small/source/i18n/unicode/dtrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/fieldpos.h b/deps/icu-small/source/i18n/unicode/fieldpos.h index b3d64b4e842186..6091941106e87d 100644 --- a/deps/icu-small/source/i18n/unicode/fieldpos.h +++ b/deps/icu-small/source/i18n/unicode/fieldpos.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2006, International Business Machines @@ -56,7 +58,7 @@ U_NAMESPACE_BEGIN * to perform partial formatting or to get information about the * formatted output (such as the position of a field). * - * The FieldPosition class is not suitable for subclassing. + * The FieldPosition class is not intended for public subclassing. * *

* Below is an example of using FieldPosition to aid @@ -107,7 +109,8 @@ class U_I18N_API FieldPosition : public UObject { public: /** * DONT_CARE may be specified as the field to indicate that the - * caller doesn't need to specify a field. Do not subclass. + * caller doesn't need to specify a field. + * @stable ICU 2.0 */ enum { DONT_CARE = -1 }; diff --git a/deps/icu-small/source/i18n/unicode/fmtable.h b/deps/icu-small/source/i18n/unicode/fmtable.h index 6cad276f42366c..ac5daba893646f 100644 --- a/deps/icu-small/source/i18n/unicode/fmtable.h +++ b/deps/icu-small/source/i18n/unicode/fmtable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2014, International Business Machines @@ -134,7 +136,7 @@ class U_I18N_API Formattable : public UObject { * decimal number. * @stable ICU 4.4 */ - Formattable(const StringPiece &number, UErrorCode &status); + Formattable(StringPiece number, UErrorCode &status); /** * Creates a Formattable object with a UnicodeString object to copy from. @@ -581,7 +583,7 @@ class U_I18N_API Formattable : public UObject { * incoming string is not a valid decimal number. * @stable ICU 4.4 */ - void setDecimalNumber(const StringPiece &numberString, + void setDecimalNumber(StringPiece numberString, UErrorCode &status); /** diff --git a/deps/icu-small/source/i18n/unicode/format.h b/deps/icu-small/source/i18n/unicode/format.h index 7bbd32df6adee6..1484e9f00edf6d 100644 --- a/deps/icu-small/source/i18n/unicode/format.h +++ b/deps/icu-small/source/i18n/unicode/format.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2011, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/unicode/fpositer.h b/deps/icu-small/source/i18n/unicode/fpositer.h index 20e78714dc071c..694a1d8770d019 100644 --- a/deps/icu-small/source/i18n/unicode/fpositer.h +++ b/deps/icu-small/source/i18n/unicode/fpositer.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/gender.h b/deps/icu-small/source/i18n/unicode/gender.h index cbb73916c66ce7..02948951843c10 100644 --- a/deps/icu-small/source/i18n/unicode/gender.h +++ b/deps/icu-small/source/i18n/unicode/gender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/gregocal.h b/deps/icu-small/source/i18n/unicode/gregocal.h index 1e507d3bb7b620..60ba0cc6acf6f4 100644 --- a/deps/icu-small/source/i18n/unicode/gregocal.h +++ b/deps/icu-small/source/i18n/unicode/gregocal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2013, International Business Machines Corporation and others. * All Rights Reserved. diff --git a/deps/icu-small/source/i18n/unicode/measfmt.h b/deps/icu-small/source/i18n/unicode/measfmt.h index c177a963f80b63..866d7d3227cae7 100644 --- a/deps/icu-small/source/i18n/unicode/measfmt.h +++ b/deps/icu-small/source/i18n/unicode/measfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -59,11 +61,13 @@ enum UMeasureFormatWidth { */ UMEASFMT_WIDTH_NUMERIC, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of values in this enum. - * @stable ICU 53 + * One more than the highest normal UMeasureFormatWidth value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UMEASFMT_WIDTH_COUNT = 4 +#endif // U_HIDE_DEPRECATED_API }; /** @stable ICU 53 */ typedef enum UMeasureFormatWidth UMeasureFormatWidth; @@ -206,6 +210,21 @@ class U_I18N_API MeasureFormat : public Format { FieldPosition &pos, UErrorCode &status) const; +#ifndef U_HIDE_DRAFT_API + /** + * Gets the display name of the specified {@link MeasureUnit} corresponding to the current + * locale and format width. + * @param unit The unit for which to get a display name. + * @param status the error. + * @return The display name in the locale and width specified in + * {@link MeasureFormat#getInstance}, or null if there is no display name available + * for the specified unit. + * + * @draft ICU 58 + */ + UnicodeString getUnitDisplayName(const MeasureUnit& unit, UErrorCode &status) const; +#endif /* U_HIDE_DRAFT_API */ + /** * Return a formatter for CurrencyAmount objects in the given diff --git a/deps/icu-small/source/i18n/unicode/measunit.h b/deps/icu-small/source/i18n/unicode/measunit.h index 8f8c92415b9dc2..9810b91194616b 100644 --- a/deps/icu-small/source/i18n/unicode/measunit.h +++ b/deps/icu-small/source/i18n/unicode/measunit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2016, International Business Machines @@ -255,15 +257,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createRadian(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of angle: revolution. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createRevolutionAngle(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of area: acre. @@ -375,15 +375,13 @@ class U_I18N_API MeasureUnit: public UObject { static MeasureUnit *createPartPerMillion(UErrorCode &status); #endif /* U_HIDE_DRAFT_API */ -#ifndef U_HIDE_DRAFT_API /** * Returns unit of consumption: liter-per-100kilometers. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createLiterPer100Kilometers(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of consumption: liter-per-kilometer. @@ -411,6 +409,46 @@ class U_I18N_API MeasureUnit: public UObject { static MeasureUnit *createMilePerGallonImperial(UErrorCode &status); #endif /* U_HIDE_DRAFT_API */ +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: east. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createEast(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: north. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createNorth(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: south. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createSouth(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DRAFT_API + /** + * Returns unit of coordinate: west. + * Caller owns returned value and must free it. + * @param status ICU error code. + * @draft ICU 58 + */ + static MeasureUnit *createWest(UErrorCode &status); +#endif /* U_HIDE_DRAFT_API */ + /** * Returns unit of digital: bit. * Caller owns returned value and must free it. @@ -491,15 +529,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createTerabyte(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of duration: century. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createCentury(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of duration: day. @@ -789,15 +825,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createMile(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of length: mile-scandinavian. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createMileScandinavian(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of length: millimeter. @@ -1039,15 +1073,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createKilometerPerHour(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of speed: knot. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createKnot(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of speed: meter-per-second. @@ -1081,15 +1113,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createFahrenheit(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of temperature: generic. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createGenericTemperature(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of temperature: kelvin. @@ -1187,15 +1217,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createCup(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of volume: cup-metric. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createCupMetric(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of volume: deciliter. @@ -1271,15 +1299,13 @@ class U_I18N_API MeasureUnit: public UObject { */ static MeasureUnit *createPint(UErrorCode &status); -#ifndef U_HIDE_DRAFT_API /** * Returns unit of volume: pint-metric. * Caller owns returned value and must free it. * @param status ICU error code. - * @draft ICU 56 + * @stable ICU 56 */ static MeasureUnit *createPintMetric(UErrorCode &status); -#endif /* U_HIDE_DRAFT_API */ /** * Returns unit of volume: quart. diff --git a/deps/icu-small/source/i18n/unicode/measure.h b/deps/icu-small/source/i18n/unicode/measure.h index a9c75989965ae6..719bc6bc8f6054 100644 --- a/deps/icu-small/source/i18n/unicode/measure.h +++ b/deps/icu-small/source/i18n/unicode/measure.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2004-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/msgfmt.h b/deps/icu-small/source/i18n/unicode/msgfmt.h index 5de91e41ff70c3..1a9973872d627d 100644 --- a/deps/icu-small/source/i18n/unicode/msgfmt.h +++ b/deps/icu-small/source/i18n/unicode/msgfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 2007-2013, International Business Machines Corporation and * others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/unicode/numfmt.h b/deps/icu-small/source/i18n/unicode/numfmt.h index 072b566da13a18..9e3d5d34ec4cca 100644 --- a/deps/icu-small/source/i18n/unicode/numfmt.h +++ b/deps/icu-small/source/i18n/unicode/numfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2016, International Business Machines Corporation and others. @@ -266,7 +268,7 @@ class U_I18N_API NumberFormat : public Format { * NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(const Formattable& obj, UnicodeString& appendTo, @@ -389,7 +391,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(double number, UnicodeString& appendTo, @@ -441,7 +443,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int32_t number, UnicodeString& appendTo, @@ -494,7 +496,7 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ virtual UnicodeString& format(int64_t number, UnicodeString& appendTo, @@ -515,9 +517,9 @@ class U_I18N_API NumberFormat : public Format { * Can be NULL. * @param status Output param filled with success/failure status. * @return Reference to 'appendTo' parameter. - * @stable 4.4 + * @stable ICU 4.4 */ - virtual UnicodeString& format(const StringPiece &number, + virtual UnicodeString& format(StringPiece number, UnicodeString& appendTo, FieldPositionIterator* posIter, UErrorCode& status) const; diff --git a/deps/icu-small/source/i18n/unicode/numsys.h b/deps/icu-small/source/i18n/unicode/numsys.h index 2b21afc074ac5f..da181551c272d0 100644 --- a/deps/icu-small/source/i18n/unicode/numsys.h +++ b/deps/icu-small/source/i18n/unicode/numsys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/plurfmt.h b/deps/icu-small/source/i18n/unicode/plurfmt.h index 6b417b8d57a2f2..b10e4179b6bab0 100644 --- a/deps/icu-small/source/i18n/unicode/plurfmt.h +++ b/deps/icu-small/source/i18n/unicode/plurfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/plurrule.h b/deps/icu-small/source/i18n/unicode/plurrule.h index 7abd6574086495..146e6bea831f09 100644 --- a/deps/icu-small/source/i18n/unicode/plurrule.h +++ b/deps/icu-small/source/i18n/unicode/plurrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/rbnf.h b/deps/icu-small/source/i18n/unicode/rbnf.h index 2cd02e70f14b6f..14230f8982d2ef 100644 --- a/deps/icu-small/source/i18n/unicode/rbnf.h +++ b/deps/icu-small/source/i18n/unicode/rbnf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and others. @@ -54,7 +56,13 @@ enum URBNFRuleSetTag { URBNF_ORDINAL, URBNF_DURATION, URBNF_NUMBERING_SYSTEM, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal URBNFRuleSetTag value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ URBNF_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** diff --git a/deps/icu-small/source/i18n/unicode/rbtz.h b/deps/icu-small/source/i18n/unicode/rbtz.h index 79805dd64eeac9..20de34bb1743dc 100644 --- a/deps/icu-small/source/i18n/unicode/rbtz.h +++ b/deps/icu-small/source/i18n/unicode/rbtz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/regex.h b/deps/icu-small/source/i18n/unicode/regex.h index 2333f96b25f2c0..96c64874a4cf43 100644 --- a/deps/icu-small/source/i18n/unicode/regex.h +++ b/deps/icu-small/source/i18n/unicode/regex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2002-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/region.h b/deps/icu-small/source/i18n/unicode/region.h index 2e1ac82a62f1d1..47829944a3bfaf 100644 --- a/deps/icu-small/source/i18n/unicode/region.h +++ b/deps/icu-small/source/i18n/unicode/region.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2014-2016, International Business Machines Corporation and others. @@ -210,7 +212,7 @@ class U_I18N_API Region : public UObject { * anything meaningful. */ - static void loadRegionData(UErrorCode &status); + static void U_CALLCONV loadRegionData(UErrorCode &status); }; diff --git a/deps/icu-small/source/i18n/unicode/reldatefmt.h b/deps/icu-small/source/i18n/unicode/reldatefmt.h index b336e2fe3ddc9f..8e659e2bc83b1a 100644 --- a/deps/icu-small/source/i18n/unicode/reldatefmt.h +++ b/deps/icu-small/source/i18n/unicode/reldatefmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 2014-2016, International Business Machines Corporation and @@ -23,7 +25,7 @@ * \brief C++ API: Formats relative dates such as "1 day ago" or "tomorrow" */ -#if !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION +#if !UCONFIG_NO_FORMATTING /** * Represents the unit for formatting a relative date. e.g "in 5 days" @@ -74,11 +76,13 @@ typedef enum UDateRelativeUnit { */ UDAT_RELATIVE_YEARS, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateRelativeUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_RELATIVE_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateRelativeUnit; /** @@ -161,11 +165,13 @@ typedef enum UDateAbsoluteUnit { */ UDAT_ABSOLUTE_NOW, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateAbsoluteUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_ABSOLUTE_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateAbsoluteUnit; /** @@ -211,13 +217,16 @@ typedef enum UDateDirection { */ UDAT_DIRECTION_PLAIN, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of items in this enum. - * @stable ICU 53 + * One more than the highest normal UDateDirection value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_DIRECTION_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateDirection; +#if !UCONFIG_NO_BREAK_ITERATION U_NAMESPACE_BEGIN @@ -509,5 +518,6 @@ class U_I18N_API RelativeDateTimeFormatter : public UObject { U_NAMESPACE_END -#endif /* !UCONFIG_NO_FORMATTING && !UCONFIG_NO_BREAK_ITERATION*/ -#endif +#endif /* !UCONFIG_NO_BREAK_ITERATION */ +#endif /* !UCONFIG_NO_FORMATTING */ +#endif /* __RELDATEFMT_H */ diff --git a/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h b/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h index 710238a796d6b1..0b34755dc2858b 100644 --- a/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h +++ b/deps/icu-small/source/i18n/unicode/scientificnumberformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2014-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/search.h b/deps/icu-small/source/i18n/unicode/search.h index 5b65e88b9c3e75..35a05526236db7 100644 --- a/deps/icu-small/source/i18n/unicode/search.h +++ b/deps/icu-small/source/i18n/unicode/search.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011 IBM and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/unicode/selfmt.h b/deps/icu-small/source/i18n/unicode/selfmt.h old mode 100644 new mode 100755 index 635144bb9b35d6..37a8f2b82192fc --- a/deps/icu-small/source/i18n/unicode/selfmt.h +++ b/deps/icu-small/source/i18n/unicode/selfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/simpletz.h b/deps/icu-small/source/i18n/unicode/simpletz.h index a0639d6a708d40..7e41a4ab8a4849 100644 --- a/deps/icu-small/source/i18n/unicode/simpletz.h +++ b/deps/icu-small/source/i18n/unicode/simpletz.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 1997-2013, International Business Machines * diff --git a/deps/icu-small/source/i18n/unicode/smpdtfmt.h b/deps/icu-small/source/i18n/unicode/smpdtfmt.h index b7fa42054dc9a3..e6cf28d22be00d 100644 --- a/deps/icu-small/source/i18n/unicode/smpdtfmt.h +++ b/deps/icu-small/source/i18n/unicode/smpdtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* * Copyright (C) 1997-2016, International Business Machines Corporation and * others. All Rights Reserved. @@ -651,7 +653,7 @@ class SimpleDateFormatMutableNFs; * = new SimpleDateFormat ("yyyy.MM.dd G 'at' hh:mm:ss a zzz", success ); * GregorianCalendar cal(success); * UDate currentTime_1 = cal.getTime(success); - * FieldPosition fp(0); + * FieldPosition fp(FieldPosition::DONT_CARE); * UnicodeString dateString; * formatter->format( currentTime_1, dateString, fp ); * cout << "result: " << dateString << endl; @@ -999,6 +1001,12 @@ class U_I18N_API SimpleDateFormat: public DateFormat { * (Presumably, letters that would be more mnemonic in that locale's * language.) This function would produce a pattern using those * letters. + *

+ * Note: This implementation depends on DateFormatSymbols::getLocalPatternChars() + * to get localized format pattern characters. ICU does not include + * localized pattern character data, therefore, unless user sets localized + * pattern characters manually, this method returns the same result as + * toPattern(). * * @param result Receives the localized pattern. * @param status Output param set to success/failure code on diff --git a/deps/icu-small/source/i18n/unicode/sortkey.h b/deps/icu-small/source/i18n/unicode/sortkey.h index b4629d4e241ccc..6f1543da4003d9 100644 --- a/deps/icu-small/source/i18n/unicode/sortkey.h +++ b/deps/icu-small/source/i18n/unicode/sortkey.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************** * Copyright (C) 1996-2014, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/unicode/stsearch.h b/deps/icu-small/source/i18n/unicode/stsearch.h index 64317608b5acf2..1cae53d12859de 100644 --- a/deps/icu-small/source/i18n/unicode/stsearch.h +++ b/deps/icu-small/source/i18n/unicode/stsearch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 IBM and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/unicode/tblcoll.h b/deps/icu-small/source/i18n/unicode/tblcoll.h index 020c4b96062ad7..c48ea38c130a2f 100644 --- a/deps/icu-small/source/i18n/unicode/tblcoll.h +++ b/deps/icu-small/source/i18n/unicode/tblcoll.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * Copyright (C) 1996-2016, International Business Machines Corporation and @@ -854,7 +856,7 @@ class U_I18N_API RuleBasedCollator : public Collator { */ UBool isUnsafe(UChar32 c) const; - static void computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); + static void U_CALLCONV computeMaxExpansions(const CollationTailoring *t, UErrorCode &errorCode); UBool initMaxExpansions(UErrorCode &errorCode) const; void setFastLatinOptions(CollationSettings &ownedSettings) const; diff --git a/deps/icu-small/source/i18n/unicode/timezone.h b/deps/icu-small/source/i18n/unicode/timezone.h index 6c72095537f75f..58c84d062bebad 100644 --- a/deps/icu-small/source/i18n/unicode/timezone.h +++ b/deps/icu-small/source/i18n/unicode/timezone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************* * Copyright (c) 1997-2016, International Business Machines Corporation * and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/unicode/tmunit.h b/deps/icu-small/source/i18n/unicode/tmunit.h index e398ab96bdcf23..a19a1f3c1760c3 100644 --- a/deps/icu-small/source/i18n/unicode/tmunit.h +++ b/deps/icu-small/source/i18n/unicode/tmunit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation, * @@ -41,7 +43,13 @@ class U_I18N_API TimeUnit: public MeasureUnit { UTIMEUNIT_HOUR, UTIMEUNIT_MINUTE, UTIMEUNIT_SECOND, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UTimeUnitFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UTIMEUNIT_FIELD_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** diff --git a/deps/icu-small/source/i18n/unicode/tmutamt.h b/deps/icu-small/source/i18n/unicode/tmutamt.h index ad8047a1f1a4de..887150121fe545 100644 --- a/deps/icu-small/source/i18n/unicode/tmutamt.h +++ b/deps/icu-small/source/i18n/unicode/tmutamt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2010, Google, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/tmutfmt.h b/deps/icu-small/source/i18n/unicode/tmutfmt.h index 728ff13219a012..b90d4a096d71bb 100644 --- a/deps/icu-small/source/i18n/unicode/tmutfmt.h +++ b/deps/icu-small/source/i18n/unicode/tmutfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2008-2014, Google, International Business Machines Corporation @@ -50,6 +52,8 @@ U_NAMESPACE_BEGIN class Hashtable; class UVector; +struct TimeUnitFormatReadSink; + /** * Format or parse a TimeUnitAmount, using plural rules for the units where available. * @@ -227,6 +231,7 @@ class U_I18N_API TimeUnitFormat: public MeasureFormat { // UTIMEUNIT_YEAR. static const char* getTimeUnitName(TimeUnit::UTimeUnitFields field, UErrorCode& status); + friend struct TimeUnitFormatReadSink; }; inline UBool diff --git a/deps/icu-small/source/i18n/unicode/translit.h b/deps/icu-small/source/i18n/unicode/translit.h index d41b5c0a80edc8..1e49bfb9697a62 100644 --- a/deps/icu-small/source/i18n/unicode/translit.h +++ b/deps/icu-small/source/i18n/unicode/translit.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 1999-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/tzfmt.h b/deps/icu-small/source/i18n/unicode/tzfmt.h index 9b39bf0ee43c6e..dd86f1b48c9619 100644 --- a/deps/icu-small/source/i18n/unicode/tzfmt.h +++ b/deps/icu-small/source/i18n/unicode/tzfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/tznames.h b/deps/icu-small/source/i18n/unicode/tznames.h index cbc9c1f3a847e3..8861a7d026b89b 100644 --- a/deps/icu-small/source/i18n/unicode/tznames.h +++ b/deps/icu-small/source/i18n/unicode/tznames.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* -* Copyright (C) 2011-2015, International Business Machines Corporation and +* Copyright (C) 2011-2016, International Business Machines Corporation and * others. All Rights Reserved. ******************************************************************************* */ @@ -133,7 +135,7 @@ class U_I18N_API TimeZoneNames : public UObject { virtual ~TimeZoneNames(); /** - * Return true if the given TimeZoneNames objects are emantically equal. + * Return true if the given TimeZoneNames objects are semantically equal. * @param other the object to be compared with. * @return Return TRUE if the given Format objects are semantically equal. * @stable ICU 50 @@ -288,6 +290,18 @@ class U_I18N_API TimeZoneNames : public UObject { */ virtual UnicodeString& getDisplayName(const UnicodeString& tzID, UTimeZoneNameType type, UDate date, UnicodeString& name) const; + /** + * @internal For specific users only until proposed publicly. + * @deprecated This API is ICU internal only. + */ + virtual void loadAllDisplayNames(UErrorCode& status); + + /** + * @internal For specific users only until proposed publicly. + * @deprecated This API is ICU internal only. + */ + virtual void getDisplayNames(const UnicodeString& tzID, const UTimeZoneNameType types[], int32_t numTypes, UDate date, UnicodeString dest[], UErrorCode& status) const; + /** * MatchInfoCollection represents a collection of time zone name matches used by * {@link TimeZoneNames#find}. diff --git a/deps/icu-small/source/i18n/unicode/tzrule.h b/deps/icu-small/source/i18n/unicode/tzrule.h index c153afa1e94da2..5e020bc1a38c56 100644 --- a/deps/icu-small/source/i18n/unicode/tzrule.h +++ b/deps/icu-small/source/i18n/unicode/tzrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/tztrans.h b/deps/icu-small/source/i18n/unicode/tztrans.h index f5934d91254525..b2e09999bb9263 100644 --- a/deps/icu-small/source/i18n/unicode/tztrans.h +++ b/deps/icu-small/source/i18n/unicode/tztrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2008, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/unicode/ucal.h b/deps/icu-small/source/i18n/unicode/ucal.h index 8f3bf71f99a587..18522f6475e15e 100644 --- a/deps/icu-small/source/i18n/unicode/ucal.h +++ b/deps/icu-small/source/i18n/unicode/ucal.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines Corporation and @@ -423,10 +425,12 @@ enum UCalendarDateFields { */ UCAL_IS_LEAP_MONTH, - /** - * Field count - * @stable ICU 2.6 - */ + // Do not conditionalize with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of Calendar, DateFormat, and other objects + /** + * One more than the highest normal UCalendarDateFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCAL_FIELD_COUNT, /** diff --git a/deps/icu-small/source/i18n/unicode/ucol.h b/deps/icu-small/source/i18n/unicode/ucol.h index 25f90408c92ecc..0b3fab90b1a05d 100644 --- a/deps/icu-small/source/i18n/unicode/ucol.h +++ b/deps/icu-small/source/i18n/unicode/ucol.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (c) 1996-2015, International Business Machines Corporation and others. @@ -123,8 +125,13 @@ typedef enum { /** upper case sorts before lower case */ UCOL_UPPER_FIRST = 25, +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColAttributeValue value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_ATTRIBUTE_VALUE_COUNT - +#endif // U_HIDE_DEPRECATED_API } UColAttributeValue; /** @@ -191,12 +198,13 @@ typedef enum { * @stable ICU 4.8 */ UCOL_REORDER_CODE_DIGIT = 0x1004, - /** - * The limit of the reorder codes. This is intended for use in range checking - * and enumeration of the reorder codes. - * @stable ICU 4.8 - */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColReorderCode value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_REORDER_CODE_LIMIT = 0x1005 +#endif // U_HIDE_DEPRECATED_API } UColReorderCode; /** @@ -333,10 +341,13 @@ typedef enum { * @stable ICU 2.8 */ UCOL_NUMERIC_COLLATION = UCOL_STRENGTH + 2, - /** - * The number of UColAttribute constants. - * @stable ICU 2.0 - */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of RuleBasedCollator object. + /** + * One more than the highest normal UColAttribute value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UCOL_ATTRIBUTE_COUNT } UColAttribute; @@ -1050,7 +1061,13 @@ typedef enum { UCOL_BOUND_UPPER = 1, /** upper bound that will match all the strings that have the same initial substring as the given string */ UCOL_BOUND_UPPER_LONG = 2, - UCOL_BOUND_VALUE_COUNT +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UColBoundMode value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UCOL_BOUND_VALUE_COUNT +#endif // U_HIDE_DEPRECATED_API } UColBoundMode; /** diff --git a/deps/icu-small/source/i18n/unicode/ucoleitr.h b/deps/icu-small/source/i18n/unicode/ucoleitr.h index 7af783d37c52f3..89fd9e85cf79a0 100644 --- a/deps/icu-small/source/i18n/unicode/ucoleitr.h +++ b/deps/icu-small/source/i18n/unicode/ucoleitr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2001-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/ucsdet.h b/deps/icu-small/source/i18n/unicode/ucsdet.h index b737b160479268..a926d2f22cbbc4 100644 --- a/deps/icu-small/source/i18n/unicode/ucsdet.h +++ b/deps/icu-small/source/i18n/unicode/ucsdet.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2005-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/udat.h b/deps/icu-small/source/i18n/unicode/udat.h index 5baec621379d90..cacfbe85009c23 100644 --- a/deps/icu-small/source/i18n/unicode/udat.h +++ b/deps/icu-small/source/i18n/unicode/udat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2016, International Business Machines @@ -787,16 +789,15 @@ typedef enum UDateFormatField { UDAT_TIME_SEPARATOR_FIELD = 37, #endif /* U_HIDE_INTERNAL_API */ - /** +#ifndef U_HIDE_DEPRECATED_API + /** * Number of FieldPosition and UFieldPosition selectors for * DateFormat and UDateFormat. * Valid selectors range from 0 to UDAT_FIELD_COUNT-1. - * This value is subject to change if new fields are defined - * in the future. - * @stable ICU 3.0 + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_FIELD_COUNT = 38 - +#endif // U_HIDE_DEPRECATED_API } UDateFormatField; @@ -888,23 +889,24 @@ typedef enum UDateFormatBooleanAttribute { * @stable ICU 53 */ UDAT_PARSE_ALLOW_NUMERIC = 1, -#ifndef U_HIDE_DRAFT_API /** * indicates tolerance of a partial literal match * e.g. accepting "--mon-02-march-2011" for a pattern of "'--: 'EEE-WW-MMMM-yyyy" - * @draft ICU 56 + * @stable ICU 56 */ UDAT_PARSE_PARTIAL_LITERAL_MATCH = 2, /** * indicates tolerance of pattern mismatch between input data and specified format pattern. * e.g. accepting "September" for a month pattern of MMM ("Sep") - * @draft ICU 56 + * @stable ICU 56 */ UDAT_PARSE_MULTIPLE_PATTERNS_FOR_MATCH = 3, -#endif /* U_HIDE_DRAFT_API */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DateFormat object. /** - * count boolean date format constants - * @stable ICU 53 + * One more than the highest normal UDateFormatBooleanAttribute value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_BOOLEAN_ATTRIBUTE_COUNT = 4 } UDateFormatBooleanAttribute; diff --git a/deps/icu-small/source/i18n/unicode/udateintervalformat.h b/deps/icu-small/source/i18n/unicode/udateintervalformat.h index 26d9b5a9ddc0ce..81bff16d6e67af 100644 --- a/deps/icu-small/source/i18n/unicode/udateintervalformat.h +++ b/deps/icu-small/source/i18n/unicode/udateintervalformat.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2012,2015 International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/udatpg.h b/deps/icu-small/source/i18n/unicode/udatpg.h index f52ed4c34ae88a..365d51c493c5fe 100644 --- a/deps/icu-small/source/i18n/unicode/udatpg.h +++ b/deps/icu-small/source/i18n/unicode/udatpg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -83,7 +85,13 @@ typedef enum UDateTimePatternField { UDATPG_FRACTIONAL_SECOND_FIELD, /** @stable ICU 3.8 */ UDATPG_ZONE_FIELD, - /** @stable ICU 3.8 */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DateTimePatternGenerator object. + /** + * One more than the highest normal UDateTimePatternField value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATPG_FIELD_COUNT } UDateTimePatternField; @@ -120,8 +128,13 @@ typedef enum UDateTimePatternConflict { UDATPG_BASE_CONFLICT, /** @stable ICU 3.8 */ UDATPG_CONFLICT, - /** @stable ICU 3.8 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDateTimePatternConflict value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UDATPG_CONFLICT_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateTimePatternConflict; /** diff --git a/deps/icu-small/source/i18n/unicode/ufieldpositer.h b/deps/icu-small/source/i18n/unicode/ufieldpositer.h index 836bfdf279d4b2..8dfa3df5a409d0 100644 --- a/deps/icu-small/source/i18n/unicode/ufieldpositer.h +++ b/deps/icu-small/source/i18n/unicode/ufieldpositer.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2015-2016, International Business Machines @@ -84,8 +86,8 @@ U_NAMESPACE_END /** * Get information for the next field in the formatted string to which this - * UFieldPositionIterator currently applies, or return FALSE if there are - * no more fields. + * UFieldPositionIterator currently applies, or return a negative value if there + * are no more fields. * @param fpositer * A pointer to the UFieldPositionIterator object containing iteration * state for the format fields. diff --git a/deps/icu-small/source/i18n/unicode/uformattable.h b/deps/icu-small/source/i18n/unicode/uformattable.h index a64ae14653a19d..e4683d56c35898 100644 --- a/deps/icu-small/source/i18n/unicode/uformattable.h +++ b/deps/icu-small/source/i18n/unicode/uformattable.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2013-2014, International Business Machines Corporation and others. @@ -49,7 +51,13 @@ typedef enum UFormattableType { UFMT_ARRAY, /**< ufmt_countArray() and ufmt_getArray() will return the value. @see ufmt_getArrayItemByIndex */ UFMT_INT64, /**< ufmt_getInt64() will return without conversion. @see ufmt_getInt64 */ UFMT_OBJECT, /**< ufmt_getObject() will return without conversion. @see ufmt_getObject*/ - UFMT_COUNT /**< Count of defined UFormattableType values */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UFormattableType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UFMT_COUNT +#endif // U_HIDE_DEPRECATED_API } UFormattableType; diff --git a/deps/icu-small/source/i18n/unicode/ugender.h b/deps/icu-small/source/i18n/unicode/ugender.h index 86e229df61b298..c1e591ed28fb0e 100644 --- a/deps/icu-small/source/i18n/unicode/ugender.h +++ b/deps/icu-small/source/i18n/unicode/ugender.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/ulocdata.h b/deps/icu-small/source/i18n/unicode/ulocdata.h index 63495f681cee4a..ecf6fdcb3f532e 100644 --- a/deps/icu-small/source/i18n/unicode/ulocdata.h +++ b/deps/icu-small/source/i18n/unicode/ulocdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -47,8 +49,13 @@ typedef enum ULocaleDataExemplarSetType { ULOCDATA_ES_INDEX=2, /** Punctuation set @stable ICU 51 */ ULOCDATA_ES_PUNCTUATION=3, - /** One higher than the last valid type @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULocaleDataExemplarSetType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ ULOCDATA_ES_COUNT=4 +#endif // U_HIDE_DEPRECATED_API } ULocaleDataExemplarSetType; /** The possible types of delimiters. @@ -63,8 +70,13 @@ typedef enum ULocaleDataDelimiterType { ULOCDATA_ALT_QUOTATION_START = 2, /** Alternate quotation end @stable ICU 3.4 */ ULOCDATA_ALT_QUOTATION_END = 3, - /** One higher than the last valid type @stable ICU 3.4 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal ULocaleDataDelimiterType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ ULOCDATA_DELIMITER_COUNT = 4 +#endif // U_HIDE_DEPRECATED_API } ULocaleDataDelimiterType; /** @@ -189,7 +201,13 @@ typedef enum UMeasurementSystem { UMS_SI, /**< Measurement system specified by SI otherwise known as Metric system. @stable ICU 2.8 */ UMS_US, /**< Measurement system followed in the United States of America. @stable ICU 2.8 */ UMS_UK, /**< Mix of metric and imperial units used in Great Britain. @stable ICU 55 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UMeasurementSystem value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UMS_LIMIT +#endif // U_HIDE_DEPRECATED_API } UMeasurementSystem; /** diff --git a/deps/icu-small/source/i18n/unicode/umsg.h b/deps/icu-small/source/i18n/unicode/umsg.h index e79026f72e00b6..0beb39d5abbee0 100644 --- a/deps/icu-small/source/i18n/unicode/umsg.h +++ b/deps/icu-small/source/i18n/unicode/umsg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 1997-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/unirepl.h b/deps/icu-small/source/i18n/unicode/unirepl.h index 974a3f54014081..37815a9a24cfa4 100644 --- a/deps/icu-small/source/i18n/unicode/unirepl.h +++ b/deps/icu-small/source/i18n/unicode/unirepl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (c) 2002-2005, International Business Machines Corporation diff --git a/deps/icu-small/source/i18n/unicode/unum.h b/deps/icu-small/source/i18n/unicode/unum.h index 8747cc595fec1a..7c652e09cf701b 100644 --- a/deps/icu-small/source/i18n/unicode/unum.h +++ b/deps/icu-small/source/i18n/unicode/unum.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2015, International Business Machines Corporation and others. @@ -219,35 +221,35 @@ typedef enum UNumberFormatStyle { * @stable ICU 54 */ UNUM_CASH_CURRENCY=13, -#ifndef U_HIDE_DRAFT_API /** * Decimal format expressed using compact notation * (short form, corresponds to UNumberCompactStyle=UNUM_SHORT) * e.g. "23K", "45B" - * @draft ICU 56 + * @stable ICU 56 */ UNUM_DECIMAL_COMPACT_SHORT=14, /** * Decimal format expressed using compact notation * (long form, corresponds to UNumberCompactStyle=UNUM_LONG) * e.g. "23 thousand", "45 billion" - * @draft ICU 56 + * @stable ICU 56 */ UNUM_DECIMAL_COMPACT_LONG=15, /** * Currency format with a currency symbol, e.g., "$1.00", * using non-accounting style for negative values (e.g. minus sign). * Overrides any style specified using -cf- key in locale. - * @draft ICU 56 + * @stable ICU 56 */ UNUM_CURRENCY_STANDARD=16, -#endif /* U_HIDE_DRAFT_API */ +#ifndef U_HIDE_DEPRECATED_API /** - * One more than the highest number format style constant. - * @stable ICU 4.8 + * One more than the highest normal UNumberFormatStyle value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UNUM_FORMAT_STYLE_COUNT=17, +#endif // U_HIDE_DEPRECATED_API /** * Default format @@ -323,7 +325,13 @@ enum UCurrencySpacing { UNUM_CURRENCY_SURROUNDING_MATCH, /** @stable ICU 4.8 */ UNUM_CURRENCY_INSERT, - /** @stable ICU 4.8 */ + + // Do not conditionalize the following with #ifndef U_HIDE_DEPRECATED_API, + // it is needed for layout of DecimalFormatSymbols object. + /** + * One more than the highest normal UCurrencySpacing value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_CURRENCY_SPACING_COUNT }; typedef enum UCurrencySpacing UCurrencySpacing; /**< @stable ICU 4.8 */ @@ -357,8 +365,13 @@ typedef enum UNumberFormatFields { UNUM_PERMILL_FIELD, /** @stable ICU 49 */ UNUM_SIGN_FIELD, - /** @stable ICU 49 */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumberFormatFields value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_FIELD_COUNT +#endif // U_HIDE_DEPRECATED_API } UNumberFormatFields; @@ -1272,8 +1285,13 @@ typedef enum UNumberFormatSymbol { */ UNUM_EXPONENT_MULTIPLICATION_SYMBOL = 27, - /** count symbol constants */ +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UNumberFormatSymbol value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ UNUM_FORMAT_SYMBOL_COUNT = 28 +#endif // U_HIDE_DEPRECATED_API } UNumberFormatSymbol; /** diff --git a/deps/icu-small/source/i18n/unicode/unumsys.h b/deps/icu-small/source/i18n/unicode/unumsys.h index 8f9d386dd5d458..396d55d6b7699b 100644 --- a/deps/icu-small/source/i18n/unicode/unumsys.h +++ b/deps/icu-small/source/i18n/unicode/unumsys.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/upluralrules.h b/deps/icu-small/source/i18n/unicode/upluralrules.h index 5bcadd4bda60f4..52e34d8d25dd66 100644 --- a/deps/icu-small/source/i18n/unicode/upluralrules.h +++ b/deps/icu-small/source/i18n/unicode/upluralrules.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2013, International Business Machines @@ -52,11 +54,13 @@ enum UPluralType { * @stable ICU 50 */ UPLURAL_TYPE_ORDINAL, +#ifndef U_HIDE_DEPRECATED_API /** - * Number of Plural rules types. - * @stable ICU 50 + * One more than the highest normal UPluralType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UPLURAL_TYPE_COUNT +#endif // U_HIDE_DEPRECATED_API }; /** * @stable ICU 50 diff --git a/deps/icu-small/source/i18n/unicode/uregex.h b/deps/icu-small/source/i18n/unicode/uregex.h index c51acd5f4043fe..7806a74afcc745 100644 --- a/deps/icu-small/source/i18n/unicode/uregex.h +++ b/deps/icu-small/source/i18n/unicode/uregex.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2004-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/uregion.h b/deps/icu-small/source/i18n/unicode/uregion.h index 29347528e0d284..b5d03691cabfe9 100644 --- a/deps/icu-small/source/i18n/unicode/uregion.h +++ b/deps/icu-small/source/i18n/unicode/uregion.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2014, International Business Machines @@ -105,11 +107,13 @@ typedef enum URegionType { */ URGN_DEPRECATED, +#ifndef U_HIDE_DEPRECATED_API /** - * Maximum value for this unumeration. - * @stable ICU 51 + * One more than the highest normal URegionType value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ URGN_LIMIT +#endif // U_HIDE_DEPRECATED_API } URegionType; #if !UCONFIG_NO_FORMATTING diff --git a/deps/icu-small/source/i18n/unicode/ureldatefmt.h b/deps/icu-small/source/i18n/unicode/ureldatefmt.h index fce016f564ff64..fad8ffd9e184b8 100644 --- a/deps/icu-small/source/i18n/unicode/ureldatefmt.h +++ b/deps/icu-small/source/i18n/unicode/ureldatefmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2016, International Business Machines @@ -58,11 +60,13 @@ typedef enum UDateRelativeDateTimeFormatterStyle { */ UDAT_STYLE_NARROW, - /** - * The number of styles. - * @stable ICU 54 - */ - UDAT_STYLE_COUNT +#ifndef U_HIDE_DEPRECATED_API + /** + * One more than the highest normal UDateRelativeDateTimeFormatterStyle value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. + */ + UDAT_STYLE_COUNT +#endif // U_HIDE_DEPRECATED_API } UDateRelativeDateTimeFormatterStyle; #ifndef U_HIDE_DRAFT_API @@ -162,11 +166,13 @@ typedef enum URelativeDateTimeUnit { * @draft ICU 57 */ UDAT_REL_UNIT_SATURDAY, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of URelativeDateTimeUnit values - * @draft ICU 57 + * One more than the highest normal URelativeDateTimeUnit value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ UDAT_REL_UNIT_COUNT +#endif // U_HIDE_DEPRECATED_API } URelativeDateTimeUnit; #endif /* U_HIDE_DRAFT_API */ diff --git a/deps/icu-small/source/i18n/unicode/usearch.h b/deps/icu-small/source/i18n/unicode/usearch.h index 10721bc726dc2c..dcdb7fe420b814 100644 --- a/deps/icu-small/source/i18n/unicode/usearch.h +++ b/deps/icu-small/source/i18n/unicode/usearch.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2011,2014 IBM and others. All rights reserved. @@ -188,11 +190,13 @@ typedef enum { */ USEARCH_ELEMENT_COMPARISON = 2, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of attribute types - * @stable ICU 2.4 + * One more than the highest normal USearchAttribute value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ USEARCH_ATTRIBUTE_COUNT = 3 +#endif // U_HIDE_DEPRECATED_API } USearchAttribute; /** @@ -262,11 +266,13 @@ typedef enum { */ USEARCH_ANY_BASE_WEIGHT_IS_WILDCARD, +#ifndef U_HIDE_DEPRECATED_API /** - * Count of attribute values - * @stable ICU 2.4 + * One more than the highest normal USearchAttributeValue value. + * @deprecated ICU 58 The numeric value may change over time, see ICU ticket #12420. */ USEARCH_ATTRIBUTE_VALUE_COUNT +#endif // U_HIDE_DEPRECATED_API } USearchAttributeValue; /* open and close ------------------------------------------------------ */ diff --git a/deps/icu-small/source/i18n/unicode/uspoof.h b/deps/icu-small/source/i18n/unicode/uspoof.h index c2285a700ed6bc..40b73380c57d52 100644 --- a/deps/icu-small/source/i18n/unicode/uspoof.h +++ b/deps/icu-small/source/i18n/unicode/uspoof.h @@ -1,6 +1,8 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** -* Copyright (C) 2008-2015, International Business Machines Corporation +* Copyright (C) 2008-2016, International Business Machines Corporation * and others. All Rights Reserved. *************************************************************************** * file name: uspoof.h @@ -35,123 +37,350 @@ * \file * \brief Unicode Security and Spoofing Detection, C API. * - * These functions are intended to check strings, typically - * identifiers of some type, such as URLs, for the presence of - * characters that are likely to be visually confusing - - * for cases where the displayed form of an identifier may - * not be what it appears to be. - * - * Unicode Technical Report #36, http://unicode.org/reports/tr36, and - * Unicode Technical Standard #39, http://unicode.org/reports/tr39 - * "Unicode security considerations", give more background on - * security an spoofing issues with Unicode identifiers. - * The tests and checks provided by this module implement the recommendations - * from those Unicode documents. - * - * The tests available on identifiers fall into two general categories: - * -# Single identifier tests. Check whether an identifier is - * potentially confusable with any other string, or is suspicious - * for other reasons. - * -# Two identifier tests. Check whether two specific identifiers are confusable. - * This does not consider whether either of strings is potentially - * confusable with any string other than the exact one specified. - * - * The steps to perform confusability testing are - * -# Open a USpoofChecker. - * -# Configure the USPoofChecker for the desired set of tests. The tests that will - * be performed are specified by a set of USpoofChecks flags. - * -# Perform the checks using the pre-configured USpoofChecker. The results indicate - * which (if any) of the selected tests have identified possible problems with the identifier. - * Results are reported as a set of USpoofChecks flags; this mirrors the form in which - * the set of tests to perform was originally specified to the USpoofChecker. - * - * A USpoofChecker may be used repeatedly to perform checks on any number of identifiers. - * - * Thread Safety: The test functions for checking a single identifier, or for testing - * whether two identifiers are possible confusable, are thread safe. - * They may called concurrently, from multiple threads, using the same USpoofChecker instance. - * - * More generally, the standard ICU thread safety rules apply: functions that take a - * const USpoofChecker parameter are thread safe. Those that take a non-const - * USpoofChecier are not thread safe. - * - * - * Descriptions of the available checks. - * - * When testing whether pairs of identifiers are confusable, with the uspoof_areConfusable() - * family of functions, the relevant tests are - * - * -# USPOOF_SINGLE_SCRIPT_CONFUSABLE: All of the characters from the two identifiers are - * from a single script, and the two identifiers are visually confusable. - * -# USPOOF_MIXED_SCRIPT_CONFUSABLE: At least one of the identifiers contains characters - * from more than one script, and the two identifiers are visually confusable. - * -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: Each of the two identifiers is of a single script, but - * the two identifiers are from different scripts, and they are visually confusable. - * - * The safest approach is to enable all three of these checks as a group. - * - * USPOOF_ANY_CASE is a modifier for the above tests. If the identifiers being checked can - * be of mixed case and are used in a case-sensitive manner, this option should be specified. - * - * If the identifiers being checked are used in a case-insensitive manner, and if they are - * displayed to users in lower-case form only, the USPOOF_ANY_CASE option should not be - * specified. Confusabality issues involving upper case letters will not be reported. - * - * When performing tests on a single identifier, with the uspoof_check() family of functions, - * the relevant tests are: - * - * -# USPOOF_MIXED_SCRIPT_CONFUSABLE: the identifier contains characters from multiple - * scripts, and there exists an identifier of a single script that is visually confusable. - * -# USPOOF_WHOLE_SCRIPT_CONFUSABLE: the identifier consists of characters from a single - * script, and there exists a visually confusable identifier. - * The visually confusable identifier also consists of characters from a single script. - * but not the same script as the identifier being checked. - * -# USPOOF_ANY_CASE: modifies the mixed script and whole script confusables tests. If - * specified, the checks will consider confusable characters of any case. If this flag is not - * set, the test is performed assuming case folded identifiers. - * -# USPOOF_SINGLE_SCRIPT: check that the identifier contains only characters from a - * single script. (Characters from the 'common' and 'inherited' scripts are ignored.) - * This is not a test for confusable identifiers - * -# USPOOF_INVISIBLE: check an identifier for the presence of invisible characters, - * such as zero-width spaces, or character sequences that are - * likely not to display, such as multiple occurrences of the same - * non-spacing mark. This check does not test the input string as a whole - * for conformance to any particular syntax for identifiers. - * -# USPOOF_CHAR_LIMIT: check that an identifier contains only characters from a specified set - * of acceptable characters. See uspoof_setAllowedChars() and - * uspoof_setAllowedLocales(). - * - * Note on Scripts: - * Characters from the Unicode Scripts "Common" and "Inherited" are ignored when considering - * the script of an identifier. Common characters include digits and symbols that - * are normally used with text from more than one script. - * - * Identifier Skeletons: A skeleton is a transformation of an identifier, such that - * all identifiers that are confusable with each other have the same skeleton. - * Using skeletons, it is possible to build a dictionary data structure for - * a set of identifiers, and then quickly test whether a new identifier is - * confusable with an identifier already in the set. The uspoof_getSkeleton() - * family of functions will produce the skeleton from an identifier. - * - * Note that skeletons are not guaranteed to be stable between versions - * of Unicode or ICU, so an applications should not rely on creating a permanent, - * or difficult to update, database of skeletons. Instabilities result from - * identifying new pairs or sequences of characters that are visually - * confusable, and thus must be mapped to the same skeleton character(s). - * - * Skeletons are computed using the algorithm and data describe in Unicode UAX 39. - * The latest proposed update, UAX 39 Version 8 draft 1, says "the tables SL, SA, and ML - * were still problematic, and discouraged from use in [Uniocde] 7.0. - * They were thus removed from version 8.0" - * - * In light of this, the default mapping data included with ICU 55 uses the - * Unicode 7 MA (Multi script Any case) table data for the other type options - * (Single Script, Any Case), (Single Script, Lower Case) and (Multi Script, Lower Case). + *

+ * This class, based on Unicode Technical Report #36 and + * Unicode Technical Standard #39, has two main functions: + * + *

    + *
  1. Checking whether two strings are visually confusable with each other, such as "Harvest" and + * "Ηarvest", where the second string starts with the Greek capital letter Eta.
  2. + *
  3. Checking whether an individual string is likely to be an attempt at confusing the reader (spoof + * detection), such as "paypal" with some Latin characters substituted with Cyrillic look-alikes.
  4. + *
+ * + *

+ * Although originally designed as a method for flagging suspicious identifier strings such as URLs, + * USpoofChecker has a number of other practical use cases, such as preventing attempts to evade bad-word + * content filters. + * + *

+ * The functions of this class are exposed as C API, with a handful of syntactical conveniences for C++. + * + *

Confusables

+ * + *

+ * The following example shows how to use USpoofChecker to check for confusability between two strings: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str1 = (UChar*) u"Harvest"; + * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * + * int32_t bitmask = uspoof_areConfusable(sc, str1, -1, str2, -1, &status); + * UBool result = bitmask != 0; + * // areConfusable: 1 (status: U_ZERO_ERROR) + * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * \endcode + * + *

+ * The call to {@link uspoof_open} creates a USpoofChecker object; the call to {@link uspoof_setChecks} + * enables confusable checking and disables all other checks; the call to {@link uspoof_areConfusable} performs the + * confusability test; and the following line extracts the result out of the return value. For best performance, + * the instance should be created once (e.g., upon application startup), and the efficient + * {@link uspoof_areConfusable} method can be used at runtime. + * + *

+ * The type {@link LocalUSpoofCheckerPointer} is exposed for C++ programmers. It will automatically call + * {@link uspoof_close} when the object goes out of scope: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setChecks(sc.getAlias(), USPOOF_CONFUSABLE, &status); + * // ... + * \endcode + * + *

+ * UTS 39 defines two strings to be confusable if they map to the same skeleton string. A skeleton can + * be thought of as a "hash code". {@link uspoof_getSkeleton} computes the skeleton for a particular string, so + * the following snippet is equivalent to the example above: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str1 = (UChar*) u"Harvest"; + * UChar* str2 = (UChar*) u"\u0397arvest"; // with U+0397 GREEK CAPITAL LETTER ETA + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * + * // Get skeleton 1 + * int32_t skel1Len = uspoof_getSkeleton(sc, 0, str1, -1, NULL, 0, &status); + * UChar* skel1 = (UChar*) malloc(++skel1Len * sizeof(UChar)); + * status = U_ZERO_ERROR; + * uspoof_getSkeleton(sc, 0, str1, -1, skel1, skel1Len, &status); + * + * // Get skeleton 2 + * int32_t skel2Len = uspoof_getSkeleton(sc, 0, str2, -1, NULL, 0, &status); + * UChar* skel2 = (UChar*) malloc(++skel2Len * sizeof(UChar)); + * status = U_ZERO_ERROR; + * uspoof_getSkeleton(sc, 0, str2, -1, skel2, skel2Len, &status); + * + * // Are the skeletons the same? + * UBool result = u_strcmp(skel1, skel2) == 0; + * // areConfusable: 1 (status: U_ZERO_ERROR) + * printf("areConfusable: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * free(skel1); + * free(skel2); + * \endcode + * + *

+ * If you need to check if a string is confusable with any string in a dictionary of many strings, rather than calling + * {@link uspoof_areConfusable} many times in a loop, {@link uspoof_getSkeleton} can be used instead, as shown below: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * #define DICTIONARY_LENGTH 2 + * UChar* dictionary[DICTIONARY_LENGTH] = { (UChar*) u"lorem", (UChar*) u"ipsum" }; + * UChar* skeletons[DICTIONARY_LENGTH]; + * UChar* str = (UChar*) u"1orern"; + * + * // Setup: + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_CONFUSABLE, &status); + * for (size_t i=0; i + * Note: Since the Unicode confusables mapping table is frequently updated, confusable skeletons are not + * guaranteed to be the same between ICU releases. We therefore recommend that you always compute confusable skeletons + * at runtime and do not rely on creating a permanent, or difficult to update, database of skeletons. + * + *

Spoof Detection

+ * + *

+ * The following snippet shows a minimal example of using USpoofChecker to perform spoof detection on a + * string: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * USet* allowed = uset_openEmpty(); + * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); + * uset_addAll(allowed, uspoof_getInclusionSet(&status)); + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setAllowedChars(sc, allowed, &status); + * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); + * + * int32_t bitmask = uspoof_check(sc, str, -1, NULL, &status); + * UBool result = bitmask != 0; + * // fails checks: 1 (status: U_ZERO_ERROR) + * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * uset_close(allowed); + * \endcode + * + *

+ * As in the case for confusability checking, it is good practice to create one USpoofChecker instance at + * startup, and call the cheaper {@link uspoof_check} online. We specify the set of + * allowed characters to be those with type RECOMMENDED or INCLUSION, according to the recommendation in UTS 39. + * + *

+ * In addition to {@link uspoof_check}, the function {@link uspoof_checkUTF8} is exposed for UTF8-encoded char* strings, + * and {@link uspoof_checkUnicodeString} is exposed for C++ programmers. + * + *

+ * If the {@link USPOOF_AUX_INFO} check is enabled, a limited amount of information on why a string failed the checks + * is available in the returned bitmask. For complete information, use the {@link uspoof_check2} class of functions + * with a {@link USpoofCheckResult} parameter: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"p\u0430ypal"; // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * USet* allowed = uset_openEmpty(); + * uset_addAll(allowed, uspoof_getRecommendedSet(&status)); + * uset_addAll(allowed, uspoof_getInclusionSet(&status)); + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setAllowedChars(sc, allowed, &status); + * uspoof_setRestrictionLevel(sc, USPOOF_MODERATELY_RESTRICTIVE); + * + * USpoofCheckResult* checkResult = uspoof_openCheckResult(&status); + * int32_t bitmask = uspoof_check2(sc, str, -1, checkResult, &status); + * + * int32_t failures1 = bitmask; + * int32_t failures2 = uspoof_getCheckResultChecks(checkResult, &status); + * assert(failures1 == failures2); + * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) + * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); + * + * // Cleanup: + * uspoof_close(sc); + * uset_close(allowed); + * uspoof_closeCheckResult(checkResult); + * \endcode + * + * C++ users can take advantage of a few syntactical conveniences. The following snippet is functionally + * equivalent to the one above: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * UnicodeSet allowed; + * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); + * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); + * + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); + * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); + * + * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); + * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); + * + * int32_t failures1 = bitmask; + * int32_t failures2 = uspoof_getCheckResultChecks(checkResult.getAlias(), &status); + * assert(failures1 == failures2); + * // checks that failed: 0x00000010 (status: U_ZERO_ERROR) + * printf("checks that failed: %#010x (status: %s)\n", failures1, u_errorName(status)); + * + * // Explicit cleanup not necessary. + * \endcode + * + *

+ * The return value is a bitmask of the checks that failed. In this case, there was one check that failed: + * {@link USPOOF_RESTRICTION_LEVEL}, corresponding to the fifth bit (16). The possible checks are: + * + *

    + *
  • RESTRICTION_LEVEL: flags strings that violate the + * Restriction Level test as specified in UTS + * 39; in most cases, this means flagging strings that contain characters from multiple different scripts.
  • + *
  • INVISIBLE: flags strings that contain invisible characters, such as zero-width spaces, or character + * sequences that are likely not to display, such as multiple occurrences of the same non-spacing mark.
  • + *
  • CHAR_LIMIT: flags strings that contain characters outside of a specified set of acceptable + * characters. See {@link uspoof_setAllowedChars} and {@link uspoof_setAllowedLocales}.
  • + *
  • MIXED_NUMBERS: flags strings that contain digits from multiple different numbering systems.
  • + *
+ * + *

+ * These checks can be enabled independently of each other. For example, if you were interested in checking for only the + * INVISIBLE and MIXED_NUMBERS conditions, you could do: + * + * \code{.c} + * UErrorCode status = U_ZERO_ERROR; + * UChar* str = (UChar*) u"8\u09EA"; // 8 mixed with U+09EA BENGALI DIGIT FOUR + * + * USpoofChecker* sc = uspoof_open(&status); + * uspoof_setChecks(sc, USPOOF_INVISIBLE | USPOOF_MIXED_NUMBERS, &status); + * + * int32_t bitmask = uspoof_check2(sc, str, -1, NULL, &status); + * UBool result = bitmask != 0; + * // fails checks: 1 (status: U_ZERO_ERROR) + * printf("fails checks: %d (status: %s)\n", result, u_errorName(status)); + * uspoof_close(sc); + * \endcode + * + *

+ * Here is an example in C++ showing how to compute the restriction level of a string: + * + * \code{.cpp} + * UErrorCode status = U_ZERO_ERROR; + * UnicodeString str((UChar*) u"p\u0430ypal"); // with U+0430 CYRILLIC SMALL LETTER A + * + * // Get the default set of allowable characters: + * UnicodeSet allowed; + * allowed.addAll(*uspoof_getRecommendedUnicodeSet(&status)); + * allowed.addAll(*uspoof_getInclusionUnicodeSet(&status)); + * + * LocalUSpoofCheckerPointer sc(uspoof_open(&status)); + * uspoof_setAllowedChars(sc.getAlias(), allowed.toUSet(), &status); + * uspoof_setRestrictionLevel(sc.getAlias(), USPOOF_MODERATELY_RESTRICTIVE); + * uspoof_setChecks(sc.getAlias(), USPOOF_RESTRICTION_LEVEL | USPOOF_AUX_INFO, &status); + * + * LocalUSpoofCheckResultPointer checkResult(uspoof_openCheckResult(&status)); + * int32_t bitmask = uspoof_check2UnicodeString(sc.getAlias(), str, checkResult.getAlias(), &status); + * + * URestrictionLevel restrictionLevel = uspoof_getCheckResultRestrictionLevel(checkResult.getAlias(), &status); + * // Since USPOOF_AUX_INFO was enabled, the restriction level is also available in the upper bits of the bitmask: + * assert((restrictionLevel & bitmask) == restrictionLevel); + * // Restriction level: 0x50000000 (status: U_ZERO_ERROR) + * printf("Restriction level: %#010x (status: %s)\n", restrictionLevel, u_errorName(status)); + * \endcode + * + *

+ * The code '0x50000000' corresponds to the restriction level USPOOF_MINIMALLY_RESTRICTIVE. Since + * USPOOF_MINIMALLY_RESTRICTIVE is weaker than USPOOF_MODERATELY_RESTRICTIVE, the string fails the check. + * + *

+ * Note: The Restriction Level is the most powerful of the checks. The full logic is documented in + * UTS 39, but the basic idea is that strings + * are restricted to contain characters from only a single script, except that most scripts are allowed to have + * Latin characters interspersed. Although the default restriction level is HIGHLY_RESTRICTIVE, it is + * recommended that users set their restriction level to MODERATELY_RESTRICTIVE, which allows Latin mixed + * with all other scripts except Cyrillic, Greek, and Cherokee, with which it is often confusable. For more details on + * the levels, see UTS 39 or {@link URestrictionLevel}. The Restriction Level test is aware of the set of + * allowed characters set in {@link uspoof_setAllowedChars}. Note that characters which have script code + * COMMON or INHERITED, such as numbers and punctuation, are ignored when computing whether a string has multiple + * scripts. + * + *

Additional Information

+ * + *

+ * A USpoofChecker instance may be used repeatedly to perform checks on any number of identifiers. + * + *

+ * Thread Safety: The test functions for checking a single identifier, or for testing whether + * two identifiers are possible confusable, are thread safe. They may called concurrently, from multiple threads, + * using the same USpoofChecker instance. + * + *

+ * More generally, the standard ICU thread safety rules apply: functions that take a const USpoofChecker parameter are + * thread safe. Those that take a non-const USpoofChecker are not thread safe.. + * + * @stable ICU 4.6 */ struct USpoofChecker; typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker */ +#ifndef U_HIDE_DRAFT_API +/** + * @see uspoof_openCheckResult + */ +struct USpoofCheckResult; +/** + * @see uspoof_openCheckResult + */ +typedef struct USpoofCheckResult USpoofCheckResult; +#endif /* U_HIDE_DRAFT_API */ + /** * Enum for the kinds of checks that USpoofChecker can perform. * These enum values are used both to select the set of checks that @@ -160,45 +389,61 @@ typedef struct USpoofChecker USpoofChecker; /**< typedef for C of USpoofChecker * @stable ICU 4.2 */ typedef enum USpoofChecks { - /** Single script confusable test. - * When testing whether two identifiers are confusable, report that they are if - * both are from the same script and they are visually confusable. - * Note: this test is not applicable to a check of a single identifier. - */ + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are from the same script, according to UTS 39 section + * 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 + */ USPOOF_SINGLE_SCRIPT_CONFUSABLE = 1, - /** Mixed script confusable test. - * When checking a single identifier, report a problem if - * the identifier contains multiple scripts, and - * is confusable with some other identifier in a single script - * When testing whether two identifiers are confusable, report that they are if - * the two IDs are visually confusable, - * and at least one contains characters from more than one script. + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are not from the same script, according to UTS + * 39 section 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 */ USPOOF_MIXED_SCRIPT_CONFUSABLE = 2, - /** Whole script confusable test. - * When checking a single identifier, report a problem if - * The identifier is of a single script, and - * there exists a confusable identifier in another script. - * When testing whether two identifiers are confusable, report that they are if - * each is of a single script, - * the scripts of the two identifiers are different, and - * the identifiers are visually confusable. + /** + * When performing the two-string {@link uspoof_areConfusable} test, this flag in the return value indicates + * that the two strings are visually confusable and that they are not from the same script but both of them are + * single-script strings, according to UTS 39 section 4. + * + * @see uspoof_areConfusable + * @stable ICU 4.2 */ USPOOF_WHOLE_SCRIPT_CONFUSABLE = 4, - /** Any Case Modifier for confusable identifier tests. - If specified, consider all characters, of any case, when looking for confusables. - If USPOOF_ANY_CASE is not specified, identifiers being checked are assumed to have been - case folded. Upper case confusable characters will not be checked. - Selects between Lower Case Confusable and - Any Case Confusable. */ +#ifndef U_HIDE_DRAFT_API + /** + * Enable this flag in {@link uspoof_setChecks} to turn on all types of confusables. You may set + * the checks to some subset of SINGLE_SCRIPT_CONFUSABLE, MIXED_SCRIPT_CONFUSABLE, or WHOLE_SCRIPT_CONFUSABLE to + * make {@link uspoof_areConfusable} return only those types of confusables. + * + * @see uspoof_areConfusable + * @see uspoof_getSkeleton + * @draft ICU 58 + */ + USPOOF_CONFUSABLE = USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_WHOLE_SCRIPT_CONFUSABLE, +#endif /* U_HIDE_DRAFT_API */ + +#ifndef U_HIDE_DEPRECATED_API + /** + * This flag is deprecated and no longer affects the behavior of SpoofChecker. + * + * @deprecated ICU 58 Any case confusable mappings were removed from UTS 39; the corresponding ICU API was deprecated. + */ USPOOF_ANY_CASE = 8, +#endif /* U_HIDE_DEPRECATED_API */ /** * Check that an identifier is no looser than the specified RestrictionLevel. - * The default if uspoof_setRestrctionLevel() is not called is HIGHLY_RESTRICTIVE. + * The default if {@link uspoof_setRestrictionLevel} is not called is HIGHLY_RESTRICTIVE. * * If USPOOF_AUX_INFO is enabled the actual restriction level of the * identifier being tested will also be returned by uspoof_check(). @@ -229,14 +474,15 @@ typedef enum USpoofChecks { USPOOF_INVISIBLE = 32, /** Check that an identifier contains only characters from a specified set - * of acceptable characters. See uspoof_setAllowedChars() and - * uspoof_setAllowedLocales(). + * of acceptable characters. See {@link uspoof_setAllowedChars} and + * {@link uspoof_setAllowedLocales}. Note that a string that fails this check + * will also fail the {@link USPOOF_RESTRICTION_LEVEL} check. */ USPOOF_CHAR_LIMIT = 64, /** - * Check that an identifier does not include decimal digits from - * more than one numbering system. + * Check that an identifier does not mix numbers from different numbering systems. + * For more information, see UTS 39 section 5.3. * * @stable ICU 51 */ @@ -253,11 +499,11 @@ typedef enum USpoofChecks { * Enable the return of auxillary (non-error) information in the * upper bits of the check results value. * - * If this "check" is not enabled, the results of uspoof_check() will be zero when an - * identifier passes all of the enabled checks. + * If this "check" is not enabled, the results of {@link uspoof_check} will be + * zero when an identifier passes all of the enabled checks. * - * If this "check" is enabled, (uspoof_check() & USPOOF_ALL_CHECKS) will be zero - * when an identifier passes all checks. + * If this "check" is enabled, (uspoof_check() & {@link USPOOF_ALL_CHECKS}) will + * be zero when an identifier passes all checks. * * @stable ICU 51 */ @@ -267,39 +513,53 @@ typedef enum USpoofChecks { /** - * Constants from UAX #39 for use in setRestrictionLevel(), and + * Constants from UAX #39 for use in {@link uspoof_setRestrictionLevel}, and * for returned identifier restriction levels in check results. + * * @stable ICU 51 + * + * @see uspoof_setRestrictionLevel + * @see uspoof_check */ typedef enum URestrictionLevel { /** - * Only ASCII characters: U+0000..U+007F + * All characters in the string are in the identifier profile and all characters in the string are in the + * ASCII range. * * @stable ICU 51 */ USPOOF_ASCII = 0x10000000, /** - * All characters in each identifier must be from a single script. - * - * @stable ICU 53 - */ + * The string classifies as ASCII-Only, or all characters in the string are in the identifier profile and + * the string is single-script, according to the definition in UTS 39 section 5.1. + * + * @stable ICU 53 + */ USPOOF_SINGLE_SCRIPT_RESTRICTIVE = 0x20000000, /** - * All characters in each identifier must be from a single script, or from the combinations: Latin + Han + - * Hiragana + Katakana; Latin + Han + Bopomofo; or Latin + Han + Hangul. Note that this level will satisfy the - * vast majority of Latin-script users; also that TR36 has ASCII instead of Latin. + * The string classifies as Single Script, or all characters in the string are in the identifier profile and + * the string is covered by any of the following sets of scripts, according to the definition in UTS 39 + * section 5.1: + *

    + *
  • Latin + Han + Bopomofo (or equivalently: Latn + Hanb)
  • + *
  • Latin + Han + Hiragana + Katakana (or equivalently: Latn + Jpan)
  • + *
  • Latin + Han + Hangul (or equivalently: Latn +Kore)
  • + *
+ * This is the default restriction in ICU. * * @stable ICU 51 */ USPOOF_HIGHLY_RESTRICTIVE = 0x30000000, /** - * Allow Latin with other scripts except Cyrillic, Greek, Cherokee Otherwise, the same as Highly Restrictive + * The string classifies as Highly Restrictive, or all characters in the string are in the identifier profile + * and the string is covered by Latin and any one other Recommended or Aspirational script, except Cyrillic, + * Greek, and Cherokee. * * @stable ICU 51 */ USPOOF_MODERATELY_RESTRICTIVE = 0x40000000, /** - * Allow arbitrary mixtures of scripts. Otherwise, the same as Moderately Restrictive. + * All characters in the string are in the identifier profile. Allow arbitrary mixtures of scripts. * * @stable ICU 51 */ @@ -311,11 +571,18 @@ typedef enum USpoofChecks { */ USPOOF_UNRESTRICTIVE = 0x60000000, /** - * Mask for selecting the Restriction Level bits from the return value of uspoof_check(). - * - * @stable ICU 53 - */ - USPOOF_RESTRICTION_LEVEL_MASK = 0x7F000000 + * Mask for selecting the Restriction Level bits from the return value of {@link uspoof_check}. + * + * @stable ICU 53 + */ + USPOOF_RESTRICTION_LEVEL_MASK = 0x7F000000, +#ifndef U_HIDE_INTERNAL_API + /** + * An undefined restriction level. + * @internal + */ + USPOOF_UNDEFINED_RESTRICTIVE = -1 +#endif /* U_HIDE_INTERNAL_API */ } URestrictionLevel; /** @@ -359,10 +626,10 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng /** * Open a Spoof Checker from the source form of the spoof data. - * The two inputs correspond to the Unicode data files confusables.txt - * and confusablesWholeScript.txt as described in Unicode UAX #39. - * The syntax of the source data is as described in UAX #39 for - * these files, and the content of these files is acceptable input. + * The input corresponds to the Unicode data file confusables.txt + * as described in Unicode UAX #39. The syntax of the source data + * is as described in UAX #39 for this file, and the content of + * this file is acceptable input. * * The character encoding of the (char *) input text is UTF-8. * @@ -371,10 +638,9 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng * @param confusablesLen The length of the confusables text, or -1 if the * input string is zero terminated. * @param confusablesWholeScript - * a pointer to the whole script confusables definitions, - * as found in the file confusablesWholeScript.txt from unicode.org. - * @param confusablesWholeScriptLen The length of the whole script confusables text, or - * -1 if the input string is zero terminated. + * Deprecated in ICU 58. No longer used. + * @param confusablesWholeScriptLen + * Deprecated in ICU 58. No longer used. * @param errType In the event of an error in the input, indicates * which of the input files contains the error. * The value is one of USPOOF_SINGLE_SCRIPT_CONFUSABLE or @@ -435,8 +701,33 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status); /** - * Specify the set of checks that will be performed by the check - * functions of this Spoof Checker. + * Specify the bitmask of checks that will be performed by {@link uspoof_check}. Calling this method + * overwrites any checks that may have already been enabled. By default, all checks are enabled. + * + * To enable specific checks and disable all others, the "whitelisted" checks should be ORed together. For + * example, to fail strings containing characters outside of the set specified by {@link uspoof_setAllowedChars} and + * also strings that contain digits from mixed numbering systems: + * + *
+ * {@code
+ * uspoof_setChecks(USPOOF_CHAR_LIMIT | USPOOF_MIXED_NUMBERS);
+ * }
+ * 
+ * + * To disable specific checks and enable all others, the "blacklisted" checks should be ANDed away from + * ALL_CHECKS. For example, if you are not planning to use the {@link uspoof_areConfusable} functionality, + * it is good practice to disable the CONFUSABLE check: + * + *
+ * {@code
+ * uspoof_setChecks(USPOOF_ALL_CHECKS & ~USPOOF_CONFUSABLE);
+ * }
+ * 
+ * + * Note that methods such as {@link uspoof_setAllowedChars}, {@link uspoof_setAllowedLocales}, and + * {@link uspoof_setRestrictionLevel} will enable certain checks when called. Those methods will OR the check they + * enable onto the existing bitmask specified by this method. For more details, see the documentation of those + * methods. * * @param sc The USpoofChecker * @param checks The set of checks that this spoof checker will perform. @@ -464,19 +755,22 @@ U_STABLE int32_t U_EXPORT2 uspoof_getChecks(const USpoofChecker *sc, UErrorCode *status); /** - * Set the loosest restriction level allowed. The default if this function - * is not called is HIGHLY_RESTRICTIVE. - * Calling this function also enables the RESTRICTION_LEVEL check. - * @param restrictionLevel The loosest restriction level allowed. - * @see URestrictionLevel - * @stable ICU 51 - */ + * Set the loosest restriction level allowed for strings. The default if this is not called is + * {@link USPOOF_HIGHLY_RESTRICTIVE}. Calling this method enables the {@link USPOOF_RESTRICTION_LEVEL} and + * {@link USPOOF_MIXED_NUMBERS} checks, corresponding to Sections 5.1 and 5.2 of UTS 39. To customize which checks are + * to be performed by {@link uspoof_check}, see {@link uspoof_setChecks}. + * + * @param sc The USpoofChecker + * @param restrictionLevel The loosest restriction level allowed. + * @see URestrictionLevel + * @stable ICU 51 + */ U_STABLE void U_EXPORT2 uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel); /** - * Get the Restriction Level that will be tested if the checks include RESTRICTION_LEVEL. + * Get the Restriction Level that will be tested if the checks include {@link USPOOF_RESTRICTION_LEVEL}. * * @return The restriction level * @see URestrictionLevel @@ -499,7 +793,7 @@ uspoof_getRestrictionLevel(const USpoofChecker *sc); * Supplying an empty string removes all restrictions; * characters from any script will be allowed. * - * The USPOOF_CHAR_LIMIT test is automatically enabled for this + * The {@link USPOOF_CHAR_LIMIT} test is automatically enabled for this * USpoofChecker when calling this function with a non-empty list * of locales. * @@ -511,7 +805,7 @@ uspoof_getRestrictionLevel(const USpoofChecker *sc); * can be made to the result of uspoof_setAllowedLocales() by * fetching the resulting set with uspoof_getAllowedChars(), * manipulating it with the Unicode Set API, then resetting the - * spoof detectors limits with uspoof_setAllowedChars() + * spoof detectors limits with uspoof_setAllowedChars(). * * @param sc The USpoofChecker * @param localesList A list list of locales, from which the language @@ -654,16 +948,21 @@ uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status); * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id The identifier to be checked for possible security issues, * in UTF-16 format. * @param length the length of the string to be checked, expressed in * 16 bit UTF-16 code units, or -1 if the string is * zero terminated. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -673,6 +972,7 @@ uspoof_getAllowedUnicodeSet(const USpoofChecker *sc, UErrorCode *status); * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2 * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -687,15 +987,19 @@ uspoof_check(const USpoofChecker *sc, * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2UTF8}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id A identifier to be checked for possible security issues, in UTF8 format. * @param length the length of the string to be checked, or -1 if the string is * zero terminated. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. - * @deprecated ICU 51 + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -707,6 +1011,7 @@ uspoof_check(const USpoofChecker *sc, * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2UTF8 * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -722,13 +1027,17 @@ uspoof_checkUTF8(const USpoofChecker *sc, * The text to be checked will typically be an identifier of some sort. * The set of checks to be performed is specified with uspoof_setChecks(). * + * \note + * Consider using the newer API, {@link uspoof_check2UnicodeString}, instead. + * The newer API exposes additional information from the check procedure + * and is otherwise identical to this method. + * * @param sc The USpoofChecker * @param id A identifier to be checked for possible security issues. - * @param position An out parameter. - * Originally, the index of the first string position that failed a check. - * Now, always returns zero. - * This parameter may be null. - * @deprecated ICU 51 + * @param position Deprecated in ICU 51. Always returns zero. + * Originally, an out parameter for the index of the first + * string position that failed a check. + * This parameter may be NULL. * @param status The error code, set if an error occurred while attempting to * perform the check. * Spoofing or security issues detected with the input string are @@ -738,6 +1047,7 @@ uspoof_checkUTF8(const USpoofChecker *sc, * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) * will be zero if the input string passes all of the * enabled checks. + * @see uspoof_check2UnicodeString * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -745,26 +1055,229 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, const icu::UnicodeString &id, int32_t *position, UErrorCode *status); +#endif + + +#ifndef U_HIDE_DRAFT_API +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * @param sc The USpoofChecker + * @param id The identifier to be checked for possible security issues, + * in UTF-16 format. + * @param length the length of the string to be checked, or -1 if the string is + * zero terminated. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2UTF8 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2(const USpoofChecker *sc, + const UChar* id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status); + +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * This version of {@link uspoof_check} accepts a USpoofCheckResult, which + * returns additional information about the identifier. For more + * information, see {@link uspoof_openCheckResult}. + * + * @param sc The USpoofChecker + * @param id A identifier to be checked for possible security issues, in UTF8 format. + * @param length the length of the string to be checked, or -1 if the string is + * zero terminated. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2UTF8(const USpoofChecker *sc, + const char *id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status); + +#if U_SHOW_CPLUSPLUS_API +/** + * Check the specified string for possible security issues. + * The text to be checked will typically be an identifier of some sort. + * The set of checks to be performed is specified with uspoof_setChecks(). + * + * @param sc The USpoofChecker + * @param id A identifier to be checked for possible security issues. + * @param checkResult An instance of USpoofCheckResult to be filled with + * details about the identifier. Can be NULL. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * Spoofing or security issues detected with the input string are + * not reported here, but through the function's return value. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. Any information in this bitmask will be + * consistent with the information saved in the optional + * checkResult parameter. + * @see uspoof_openCheckResult + * @see uspoof_check2 + * @see uspoof_check2UTF8 + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_check2UnicodeString(const USpoofChecker *sc, + const icu::UnicodeString &id, + USpoofCheckResult* checkResult, + UErrorCode *status); +#endif + +/** + * Create a USpoofCheckResult, used by the {@link uspoof_check2} class of functions to return + * information about the identifier. Information includes: + *
    + *
  • A bitmask of the checks that failed
  • + *
  • The identifier's restriction level (UTS 39 section 5.2)
  • + *
  • The set of numerics in the string (UTS 39 section 5.3)
  • + *
+ * The data held in a USpoofCheckResult is cleared whenever it is passed into a new call + * of {@link uspoof_check2}. + * + * @param status The error code, set if this function encounters a problem. + * @return the newly created USpoofCheckResult + * @see uspoof_check2 + * @see uspoof_check2UTF8 + * @see uspoof_check2UnicodeString + * @draft ICU 58 + */ +U_DRAFT USpoofCheckResult* U_EXPORT2 +uspoof_openCheckResult(UErrorCode *status); + +/** + * Close a USpoofCheckResult, freeing any memory that was being held by + * its implementation. + * + * @param checkResult The instance of USpoofCheckResult to close + * @draft ICU 58 + */ +U_DRAFT void U_EXPORT2 +uspoof_closeCheckResult(USpoofCheckResult *checkResult); + +#if U_SHOW_CPLUSPLUS_API + +U_NAMESPACE_BEGIN + +/** + * \class LocalUSpoofCheckResultPointer + * "Smart pointer" class, closes a USpoofCheckResult via {@link uspoof_closeCheckResult}. + * For most methods see the LocalPointerBase base class. + * + * @see LocalPointerBase + * @see LocalPointer + * @draft ICU 58 + */ +U_DEFINE_LOCAL_OPEN_POINTER(LocalUSpoofCheckResultPointer, USpoofCheckResult, uspoof_closeCheckResult); + +U_NAMESPACE_END #endif +/** + * Indicates which of the spoof check(s) have failed. The value is a bitwise OR of the constants for the tests + * in question: USPOOF_RESTRICTION_LEVEL, USPOOF_CHAR_LIMIT, and so on. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @param status The error code, set if an error occurred. + * @return An integer value with bits set for any potential security + * or spoofing issues detected. The bits are defined by + * enum USpoofChecks. (returned_value & USPOOF_ALL_CHECKS) + * will be zero if the input string passes all of the + * enabled checks. + * @see uspoof_setChecks + * @draft ICU 58 + */ +U_DRAFT int32_t U_EXPORT2 +uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status); + +/** + * Gets the restriction level that the text meets, if the USPOOF_RESTRICTION_LEVEL check + * was enabled; otherwise, undefined. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @param status The error code, set if an error occurred. + * @return The restriction level contained in the USpoofCheckResult + * @see uspoof_setRestrictionLevel + * @draft ICU 58 + */ +U_DRAFT URestrictionLevel U_EXPORT2 +uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status); + +/** + * Gets the set of numerics found in the string, if the USPOOF_MIXED_NUMBERS check was enabled; + * otherwise, undefined. The set will contain the zero digit from each decimal number system found + * in the input string. Ownership of the returned USet remains with the USpoofCheckResult. + * The USet will be free'd when {@link uspoof_closeCheckResult} is called. + * + * @param checkResult The instance of USpoofCheckResult created by {@link uspoof_openCheckResult} + * @return The set of numerics contained in the USpoofCheckResult + * @param status The error code, set if an error occurred. + * @draft ICU 58 + */ +U_DRAFT const USet* U_EXPORT2 +uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status); +#endif /* U_HIDE_DRAFT_API */ + /** * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. * - * The tests to be performed are controlled by the flags - * USPOOF_SINGLE_SCRIPT_CONFUSABLE - * USPOOF_MIXED_SCRIPT_CONFUSABLE - * USPOOF_WHOLE_SCRIPT_CONFUSABLE - * At least one of these tests must be selected. + * If the strings are confusable, the return value will be nonzero, as long as + * {@link USPOOF_CONFUSABLE} was enabled in uspoof_setChecks(). + * + * The bits in the return value correspond to flags for each of the classes of + * confusables applicable to the two input strings. According to UTS 39 + * section 4, the possible flags are: + * + *
    + *
  • {@link USPOOF_SINGLE_SCRIPT_CONFUSABLE}
  • + *
  • {@link USPOOF_MIXED_SCRIPT_CONFUSABLE}
  • + *
  • {@link USPOOF_WHOLE_SCRIPT_CONFUSABLE}
  • + *
* - * USPOOF_ANY_CASE is a modifier for the tests. Select it if the identifiers - * may be of mixed case. - * If identifiers are case folded for comparison and - * display to the user, do not select the USPOOF_ANY_CASE option. + * If one or more of the above flags were not listed in uspoof_setChecks(), this + * function will never report that class of confusable. The check + * {@link USPOOF_CONFUSABLE} enables all three flags. * * * @param sc The USpoofChecker @@ -786,6 +1299,7 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the identifiers * are not confusable. + * * @stable ICU 4.2 */ U_STABLE int32_t U_EXPORT2 @@ -797,10 +1311,7 @@ uspoof_areConfusable(const USpoofChecker *sc, /** - * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. + * A version of {@link uspoof_areConfusable} accepting strings in UTF-8 format. * * @param sc The USpoofChecker * @param id1 The first of the two identifiers to be compared for @@ -819,7 +1330,10 @@ uspoof_areConfusable(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the strings * are not confusable. + * * @stable ICU 4.2 + * + * @see uspoof_areConfusable */ U_STABLE int32_t U_EXPORT2 uspoof_areConfusableUTF8(const USpoofChecker *sc, @@ -832,10 +1346,7 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc, #if U_SHOW_CPLUSPLUS_API /** - * Check the whether two specified strings are visually confusable. - * The types of confusability to be tested - single script, mixed script, - * or whole script - are determined by the check options set for the - * USpoofChecker. + * A version of {@link uspoof_areConfusable} accepting UnicodeStrings. * * @param sc The USpoofChecker * @param s1 The first of the two identifiers to be compared for @@ -850,7 +1361,10 @@ uspoof_areConfusableUTF8(const USpoofChecker *sc, * the type of confusability found, as defined by * enum USpoofChecks. Zero is returned if the identifiers * are not confusable. + * * @stable ICU 4.2 + * + * @see uspoof_areConfusable */ U_STABLE int32_t U_EXPORT2 uspoof_areConfusableUnicodeString(const USpoofChecker *sc, @@ -861,37 +1375,36 @@ uspoof_areConfusableUnicodeString(const USpoofChecker *sc, /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The input identifier whose skeleton will be computed. - * @param length The length of the input identifier, expressed in 16 bit - * UTF-16 code units, or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in 16 bit units. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return The length of the skeleton string. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The input identifier whose skeleton will be computed. + * @param length The length of the input identifier, expressed in 16 bit + * UTF-16 code units, or -1 if the string is zero terminated. + * @param dest The output buffer, to receive the skeleton string. + * @param destCapacity The length of the output buffer, in 16 bit units. + * The destCapacity may be zero, in which case the function will + * return the actual length of the skeleton. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * @return The length of the skeleton string. The returned length + * is always that of the complete skeleton, even when the + * supplied buffer is too small (or of zero length) + * + * @stable ICU 4.2 + * @see uspoof_areConfusable + */ U_STABLE int32_t U_EXPORT2 uspoof_getSkeleton(const USpoofChecker *sc, uint32_t type, @@ -900,40 +1413,38 @@ uspoof_getSkeleton(const USpoofChecker *sc, UErrorCode *status); /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The UTF-8 format identifier whose skeleton will be computed. - * @param length The length of the input string, in bytes, - * or -1 if the string is zero terminated. - * @param dest The output buffer, to receive the skeleton string. - * @param destCapacity The length of the output buffer, in bytes. - * The destCapacity may be zero, in which case the function will - * return the actual length of the skeleton. - * @param status The error code, set if an error occurred while attempting to - * perform the check. Possible Errors include U_INVALID_CHAR_FOUND - * for invalid UTF-8 sequences, and - * U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small - * to hold the complete skeleton. - * @return The length of the skeleton string, in bytes. The returned length - * is always that of the complete skeleton, even when the - * supplied buffer is too small (or of zero length) - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The UTF-8 format identifier whose skeleton will be computed. + * @param length The length of the input string, in bytes, + * or -1 if the string is zero terminated. + * @param dest The output buffer, to receive the skeleton string. + * @param destCapacity The length of the output buffer, in bytes. + * The destCapacity may be zero, in which case the function will + * return the actual length of the skeleton. + * @param status The error code, set if an error occurred while attempting to + * perform the check. Possible Errors include U_INVALID_CHAR_FOUND + * for invalid UTF-8 sequences, and + * U_BUFFER_OVERFLOW_ERROR if the destination buffer is too small + * to hold the complete skeleton. + * @return The length of the skeleton string, in bytes. The returned length + * is always that of the complete skeleton, even when the + * supplied buffer is too small (or of zero length) + * + * @stable ICU 4.2 + */ U_STABLE int32_t U_EXPORT2 uspoof_getSkeletonUTF8(const USpoofChecker *sc, uint32_t type, @@ -943,30 +1454,28 @@ uspoof_getSkeletonUTF8(const USpoofChecker *sc, #if U_SHOW_CPLUSPLUS_API /** - * Get the "skeleton" for an identifier. - * Skeletons are a transformation of the input identifier; - * Two identifiers are confusable if their skeletons are identical. - * See Unicode UAX #39 for additional information. - * - * Using skeletons directly makes it possible to quickly check - * whether an identifier is confusable with any of some large - * set of existing identifiers, by creating an efficiently - * searchable collection of the skeletons. - * - * @param sc The USpoofChecker. - * @param type The type of skeleton, corresponding to which - * of the Unicode confusable data tables to use. - * The default is Mixed-Script, Lowercase. - * Allowed options are USPOOF_SINGLE_SCRIPT_CONFUSABLE and - * USPOOF_ANY_CASE. The two flags may be ORed. - * @param id The input identifier whose skeleton will be computed. - * @param dest The output identifier, to receive the skeleton string. - * @param status The error code, set if an error occurred while attempting to - * perform the check. - * @return A reference to the destination (skeleton) string. - * - * @stable ICU 4.2 - */ + * Get the "skeleton" for an identifier. + * Skeletons are a transformation of the input identifier; + * Two identifiers are confusable if their skeletons are identical. + * See Unicode UAX #39 for additional information. + * + * Using skeletons directly makes it possible to quickly check + * whether an identifier is confusable with any of some large + * set of existing identifiers, by creating an efficiently + * searchable collection of the skeletons. + * + * @param sc The USpoofChecker. + * @param type Deprecated in ICU 58. You may pass any number. + * Originally, controlled which of the Unicode confusable data + * tables to use. + * @param id The input identifier whose skeleton will be computed. + * @param dest The output identifier, to receive the skeleton string. + * @param status The error code, set if an error occurred while attempting to + * perform the check. + * @return A reference to the destination (skeleton) string. + * + * @stable ICU 4.2 + */ U_I18N_API icu::UnicodeString & U_EXPORT2 uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, uint32_t type, @@ -977,7 +1486,8 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, /** * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -991,7 +1501,8 @@ uspoof_getInclusionSet(UErrorCode *status); /** * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Recommended_Scripts + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -1007,7 +1518,8 @@ uspoof_getRecommendedSet(UErrorCode *status); /** * Get the set of Candidate Characters for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Candidate_Characters_for_Inclusion_in_Identifiers + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. @@ -1021,7 +1533,8 @@ uspoof_getInclusionUnicodeSet(UErrorCode *status); /** * Get the set of characters from Recommended Scripts for Inclusion in Identifiers, as defined - * in Unicode UAX #31, http://www.unicode.org/reports/tr31/#Table_Recommended_Scripts + * in http://unicode.org/Public/security/latest/xidmodifications.txt + * and documented in http://www.unicode.org/reports/tr39/, Unicode Security Mechanisms. * * The returned set is frozen. Ownership of the set remains with the ICU library; it must not * be deleted by the caller. diff --git a/deps/icu-small/source/i18n/unicode/utmscale.h b/deps/icu-small/source/i18n/unicode/utmscale.h index e22b1bc5e6ce99..6b4b389ac8ad24 100644 --- a/deps/icu-small/source/i18n/unicode/utmscale.h +++ b/deps/icu-small/source/i18n/unicode/utmscale.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004 - 2008, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unicode/utrans.h b/deps/icu-small/source/i18n/unicode/utrans.h index 4ada5ef93c2082..661ee5d3850860 100644 --- a/deps/icu-small/source/i18n/unicode/utrans.h +++ b/deps/icu-small/source/i18n/unicode/utrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2011,2014-2015 International Business Machines diff --git a/deps/icu-small/source/i18n/unicode/vtzone.h b/deps/icu-small/source/i18n/unicode/vtzone.h index 22992b197f4c01..1682a3d526ccfb 100644 --- a/deps/icu-small/source/i18n/unicode/vtzone.h +++ b/deps/icu-small/source/i18n/unicode/vtzone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/unum.cpp b/deps/icu-small/source/i18n/unum.cpp index 4b617df36fb759..0e224858db0a1d 100644 --- a/deps/icu-small/source/i18n/unum.cpp +++ b/deps/icu-small/source/i18n/unum.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1996-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/unumsys.cpp b/deps/icu-small/source/i18n/unumsys.cpp index aab769dd030f74..f643e342ebc762 100644 --- a/deps/icu-small/source/i18n/unumsys.cpp +++ b/deps/icu-small/source/i18n/unumsys.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/upluralrules.cpp b/deps/icu-small/source/i18n/upluralrules.cpp index 1e92c8840f30a9..5e1eebf53d5dc2 100644 --- a/deps/icu-small/source/i18n/upluralrules.cpp +++ b/deps/icu-small/source/i18n/upluralrules.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2010-2012, International Business Machines diff --git a/deps/icu-small/source/i18n/uregex.cpp b/deps/icu-small/source/i18n/uregex.cpp index a6e6be26a7d5f8..03e2586c5f74f4 100644 --- a/deps/icu-small/source/i18n/uregex.cpp +++ b/deps/icu-small/source/i18n/uregex.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/uregexc.cpp b/deps/icu-small/source/i18n/uregexc.cpp index f430cdbf68bd2d..6d0dc2062c6037 100644 --- a/deps/icu-small/source/i18n/uregexc.cpp +++ b/deps/icu-small/source/i18n/uregexc.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2006, International Business Machines diff --git a/deps/icu-small/source/i18n/uregion.cpp b/deps/icu-small/source/i18n/uregion.cpp index 58bd9d0a0cca44..8e079ec593318c 100644 --- a/deps/icu-small/source/i18n/uregion.cpp +++ b/deps/icu-small/source/i18n/uregion.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ***************************************************************************************** * Copyright (C) 2013-2015, International Business Machines Corporation and others. diff --git a/deps/icu-small/source/i18n/usearch.cpp b/deps/icu-small/source/i18n/usearch.cpp index a2aad7c67495eb..5e1617eb3e8d8d 100644 --- a/deps/icu-small/source/i18n/usearch.cpp +++ b/deps/icu-small/source/i18n/usearch.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2015 IBM and others. All rights reserved. @@ -222,7 +224,7 @@ inline int32_t * addTouint32_tArray(int32_t *destination, if (U_FAILURE(*status)) { return NULL; } - uprv_memcpy(temp, destination, sizeof(int32_t) * offset); + uprv_memcpy(temp, destination, sizeof(int32_t) * (size_t)offset); *destinationlength = newlength; destination = temp; } @@ -264,7 +266,7 @@ inline int64_t * addTouint64_tArray(int64_t *destination, return NULL; } - uprv_memcpy(temp, destination, sizeof(int64_t) * offset); + uprv_memcpy(temp, destination, sizeof(int64_t) * (size_t)offset); *destinationlength = newlength; destination = temp; } @@ -1379,7 +1381,7 @@ inline UChar * addToUCharArray( UChar *destination, } } if (source1length != 0) { - uprv_memcpy(destination, source1, sizeof(UChar) * source1length); + u_memcpy(destination, source1, source1length); } if (source2length != 0) { uprv_memcpy(destination + source1length, source2, diff --git a/deps/icu-small/source/i18n/uspoof.cpp b/deps/icu-small/source/i18n/uspoof.cpp index 341fff6ecd086d..3be10862fccdd9 100644 --- a/deps/icu-small/source/i18n/uspoof.cpp +++ b/deps/icu-small/source/i18n/uspoof.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2015, International Business Machines Corporation @@ -20,7 +22,6 @@ #include "unicode/utf16.h" #include "cmemory.h" #include "cstring.h" -#include "identifier_info.h" #include "mutex.h" #include "scriptset.h" #include "uassert.h" @@ -40,9 +41,7 @@ U_NAMESPACE_USE static UnicodeSet *gInclusionSet = NULL; static UnicodeSet *gRecommendedSet = NULL; static const Normalizer2 *gNfdNormalizer = NULL; -static SpoofData *gDefaultSpoofData = NULL; static UInitOnce gSpoofInitStaticsOnce = U_INITONCE_INITIALIZER; -static UInitOnce gSpoofInitDefaultOnce = U_INITONCE_INITIALIZER; static UBool U_CALLCONV uspoof_cleanup(void) { @@ -51,83 +50,78 @@ uspoof_cleanup(void) { delete gRecommendedSet; gRecommendedSet = NULL; gNfdNormalizer = NULL; - if (gDefaultSpoofData) { - gDefaultSpoofData->removeReference(); // Will delete, assuming all user-level spoof checkers were closed. - } - gDefaultSpoofData = NULL; gSpoofInitStaticsOnce.reset(); - gSpoofInitDefaultOnce.reset(); return TRUE; } static void U_CALLCONV initializeStatics(UErrorCode &status) { static const char *inclusionPat = - "[\\u0027\\u002D-\\u002E\\u003A\\u00B7\\u0375\\u058A\\u05F3-\\u05F4" - "\\u06FD-\\u06FE\\u0F0B\\u200C-\\u200D\\u2010\\u2019\\u2027\\u30A0\\u30FB]"; + "['\\-.\\:\\u00B7\\u0375\\u058A\\u05F3\\u05F4\\u06FD\\u06FE\\u0F0B\\u200C\\u200D\\u2010\\u" + "2019\\u2027\\u30A0\\u30FB]"; gInclusionSet = new UnicodeSet(UnicodeString(inclusionPat, -1, US_INV), status); gInclusionSet->freeze(); - // Note: data from http://unicode.org/Public/security/latest/xidmodifications.txt version 8.0.0 - // There is no tooling to generate this from the .txt file, hand extracted with editor macros. - // Ultimately, data will be available as character properties, eliminating this. + // Note: data from http://unicode.org/Public/security/9.0.0/IdentifierStatus.txt + // There is tooling to generate this constant in the unicodetools project: + // org.unicode.text.tools.RecommendedSetGenerator + // It will print the Java and C++ code to the console for easy copy-paste into this file. // Note: concatenated string constants do not work with UNICODE_STRING_SIMPLE on all platforms. static const char *recommendedPat = - "[\\u0030-\\u0039\\u0041-\\u005A\\u005F\\u0061-\\u007A\\u00C0-\\u00D6\\u00D8-\\u00F6" - "\\u00F8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u018F\\u01A0-\\u01A1" - "\\u01AF-\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E6-\\u01F0\\u01F4-\\u01F5\\u01F8-\\u021B" - "\\u021E-\\u021F\\u0226-\\u0233\\u0259\\u02BB-\\u02BC\\u02EC\\u0300-\\u0304\\u0306-\\u030C" - "\\u030F-\\u0311\\u0313-\\u0314\\u031B\\u0323-\\u0328\\u032D-\\u032E\\u0330-\\u0331" - "\\u0335\\u0338-\\u0339\\u0342\\u0345\\u037B-\\u037D\\u0386\\u0388-\\u038A\\u038C" - "\\u038E-\\u03A1\\u03A3-\\u03CE\\u03FC-\\u045F\\u048A-\\u0529\\u052E-\\u052F\\u0531-\\u0556" - "\\u0559\\u0561-\\u0586\\u05B4\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u063F\\u0641-\\u0655" - "\\u0660-\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-\\u06D3\\u06D5\\u06E5-\\u06E6" - "\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC\\u08B2\\u0901-\\u094D\\u094F-\\u0950" - "\\u0956-\\u0957\\u0960-\\u0963\\u0966-\\u096F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983" - "\\u0985-\\u098C\\u098F-\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9" - "\\u09BC-\\u09C4\\u09C7-\\u09C8\\u09CB-\\u09CE\\u09D7\\u09E0-\\u09E3\\u09E6-\\u09F1" - "\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F-\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32" - "\\u0A35\\u0A38-\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47-\\u0A48\\u0A4B-\\u0A4D\\u0A5C" - "\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0" - "\\u0AB2-\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0" - "\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F-\\u0B10\\u0B13-\\u0B28" - "\\u0B2A-\\u0B30\\u0B32-\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47-\\u0B48\\u0B4B-\\u0B4D" - "\\u0B56-\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82-\\u0B83\\u0B85-\\u0B8A" - "\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99-\\u0B9A\\u0B9C\\u0B9E-\\u0B9F\\u0BA3-\\u0BA4" - "\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0" - "\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28" - "\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55-\\u0C56" - "\\u0C60-\\u0C61\\u0C66-\\u0C6F\\u0C82-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8" - "\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5-\\u0CD6" - "\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1-\\u0CF2\\u0D02-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10" - "\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D61" - "\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82-\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D96\\u0D9A-\\u0DA5" - "\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6" - "\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59" - "\\u0E81-\\u0E82\\u0E84\\u0E87-\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F" - "\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA-\\u0EAB\\u0EAD-\\u0EB2\\u0EB4-\\u0EB9\\u0EBB-\\u0EBD" - "\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE-\\u0EDF\\u0F00\\u0F20-\\u0F29" - "\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F56" - "\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71-\\u0F72\\u0F74\\u0F7A-\\u0F80" - "\\u0F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6" - "\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D" - "\\u10C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D" - "\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0" - "\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310" - "\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7" - "\\u17A9-\\u17B3\\u17B6-\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1E00-\\u1E99" - "\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D" - "\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74\\u1F76\\u1F78" - "\\u1F7A\\u1F7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8" - "\\u1FCA\\u1FCC\\u1FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC" - "\\u1FF2-\\u1FF4\\u1FF6-\\u1FF8\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6" - "\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6" - "\\u2DD8-\\u2DDE\\u3005-\\u3007\\u3041-\\u3096\\u3099-\\u309A\\u309D-\\u309E\\u30A1-\\u30FA" - "\\u30FC-\\u30FE\\u3105-\\u312D\\u31A0-\\u31BA\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA660-\\uA661" - "\\uA674-\\uA67B\\uA67F\\uA69F\\uA717-\\uA71F\\uA788\\uA78D-\\uA78E\\uA790-\\uA793" - "\\uA7A0-\\uA7AA\\uA7FA\\uA9E7-\\uA9FE\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06" - "\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAC00-\\uD7A3\\uFA0E-\\uFA0F" - "\\uFA11\\uFA13-\\uFA14\\uFA1F\\uFA21\\uFA23-\\uFA24\\uFA27-\\uFA29\\U00020000-\\U0002A6D6" - "\\U0002A700-\\U0002B734\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1]"; + "[0-9A-Z_a-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u0131\\u0134-\\u013E\\u0141-\\u014" + "8\\u014A-\\u017E\\u018F\\u01A0\\u01A1\\u01AF\\u01B0\\u01CD-\\u01DC\\u01DE-\\u01E3\\u01E" + "6-\\u01F0\\u01F4\\u01F5\\u01F8-\\u021B\\u021E\\u021F\\u0226-\\u0233\\u0259\\u02BB\\u02B" + "C\\u02EC\\u0300-\\u0304\\u0306-\\u030C\\u030F-\\u0311\\u0313\\u0314\\u031B\\u0323-\\u03" + "28\\u032D\\u032E\\u0330\\u0331\\u0335\\u0338\\u0339\\u0342\\u0345\\u037B-\\u037D\\u0386" + "\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03FC-\\u045F\\u048A-\\u0529\\u05" + "2E\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05B4\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0" + "620-\\u063F\\u0641-\\u0655\\u0660-\\u0669\\u0670-\\u0672\\u0674\\u0679-\\u068D\\u068F-" + "\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0750-\\u07B1\\u08A0-\\u08AC\\u08B2" + "\\u08B6-\\u08BD\\u0901-\\u094D\\u094F\\u0950\\u0956\\u0957\\u0960-\\u0963\\u0966-\\u096" + "F\\u0971-\\u0977\\u0979-\\u097F\\u0981-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u0" + "9A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u" + "09D7\\u09E0-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-" + "\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A35\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\" + "u0A4B-\\u0A4D\\u0A5C\\u0A66-\\u0A74\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A9" + "3-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0" + "ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\" + "u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B43\\u0B47" + "\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83" + "\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3" + "\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0B" + "D0\\u0BD7\\u0BE6-\\u0BEF\\u0C01-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u" + "0C2A-\\u0C33\\u0C35-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56" + "\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C80\\u0C82\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92" + "-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0" + "CD5\\u0CD6\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D02\\u0D03\\u0D05-\\u0D0C\\u0" + "D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D54-\\u0D57" + "\\u0D60\\u0D61\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D8E\\u0D91-\\u0D9" + "6\\u0D9A-\\u0DA5\\u0DA7-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0" + "DD4\\u0DD6\\u0DD8-\\u0DDE\\u0DF2\\u0E01-\\u0E32\\u0E34-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\" + "u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u" + "0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB2\\u0EB4-\\u0EB9\\u0EBB-\\u0EBD\\" + "u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDE\\u0EDF\\u0F00\\u0F20-\\u0F29" + "\\u0F35\\u0F37\\u0F3E-\\u0F42\\u0F44-\\u0F47\\u0F49-\\u0F4C\\u0F4E-\\u0F51\\u0F53-\\u0F" + "56\\u0F58-\\u0F5B\\u0F5D-\\u0F68\\u0F6A-\\u0F6C\\u0F71\\u0F72\\u0F74\\u0F7A-\\u0F80\\u0" + "F82-\\u0F84\\u0F86-\\u0F92\\u0F94-\\u0F97\\u0F99-\\u0F9C\\u0F9E-\\u0FA1\\u0FA3-\\u0FA6" + "\\u0FA8-\\u0FAB\\u0FAD-\\u0FB8\\u0FBA-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10" + "C7\\u10CD\\u10D0-\\u10F0\\u10F7-\\u10FA\\u10FD-\\u10FF\\u1200-\\u1248\\u124A-\\u124D\\u" + "1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2" + "-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1" + "315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u1780-\\u17A2\\u17A5-\\u17A7\\u17A9-" + "\\u17B3\\u17B6-\\u17CA\\u17D2\\u17D7\\u17DC\\u17E0-\\u17E9\\u1C80-\\u1C88\\u1E00-\\u1E9" + "9\\u1E9E\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1" + "F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F70\\u1F72\\u1F74\\u1F76\\u1F78\\u1F7A\\u1F" + "7C\\u1F80-\\u1FB4\\u1FB6-\\u1FBA\\u1FBC\\u1FC2-\\u1FC4\\u1FC6-\\u1FC8\\u1FCA\\u1FCC\\u1" + "FD0-\\u1FD2\\u1FD6-\\u1FDA\\u1FE0-\\u1FE2\\u1FE4-\\u1FEA\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-" + "\\u1FF8\\u1FFA\\u1FFC\\u2D27\\u2D2D\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0" + "-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3" + "005-\\u3007\\u3041-\\u3096\\u3099\\u309A\\u309D\\u309E\\u30A1-\\u30FA\\u30FC-\\u30FE\\u" + "3105-\\u312D\\u31A0-\\u31BA\\u3400-\\u4DB5\\u4E00-\\u9FD5\\uA660\\uA661\\uA674-\\uA67B" + "\\uA67F\\uA69F\\uA717-\\uA71F\\uA788\\uA78D\\uA78E\\uA790-\\uA793\\uA7A0-\\uA7AA\\uA7AE" + "\\uA7FA\\uA9E7-\\uA9FE\\uAA60-\\uAA76\\uAA7A-\\uAA7F\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB" + "11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAC00-\\uD7A3\\uFA0E\\uFA0F\\uFA11\\uFA13\\uF" + "A14\\uFA1F\\uFA21\\uFA23\\uFA24\\uFA27-\\uFA29\\U00020000-\\U0002A6D6\\U0002A700-\\U0" + "002B734\\U0002B740-\\U0002B81D\\U0002B820-\\U0002CEA1]"; gRecommendedSet = new UnicodeSet(UnicodeString(recommendedPat, -1, US_INV), status); gRecommendedSet->freeze(); @@ -135,11 +129,6 @@ static void U_CALLCONV initializeStatics(UErrorCode &status) { ucln_i18n_registerCleanup(UCLN_I18N_SPOOF, uspoof_cleanup); } -static void U_CALLCONV initializeDefaultData(UErrorCode &status) { - gDefaultSpoofData = SpoofData::getDefault(status); - ucln_i18n_registerCleanup(UCLN_I18N_SPOOF, uspoof_cleanup); -} - U_CFUNC void uspoof_internalInitStatics(UErrorCode *status) { umtx_initOnce(gSpoofInitStaticsOnce, &initializeStatics, *status); } @@ -147,14 +136,10 @@ U_CFUNC void uspoof_internalInitStatics(UErrorCode *status) { U_CAPI USpoofChecker * U_EXPORT2 uspoof_open(UErrorCode *status) { umtx_initOnce(gSpoofInitStaticsOnce, &initializeStatics, *status); - umtx_initOnce(gSpoofInitDefaultOnce, &initializeDefaultData, *status); if (U_FAILURE(*status)) { return NULL; } - SpoofImpl *si = new SpoofImpl(gDefaultSpoofData, *status); - if (si) { - gDefaultSpoofData->addReference(); - } + SpoofImpl *si = new SpoofImpl(*status); if (U_SUCCESS(*status) && si == NULL) { *status = U_MEMORY_ALLOCATION_ERROR; } @@ -162,7 +147,7 @@ uspoof_open(UErrorCode *status) { delete si; si = NULL; } - return reinterpret_cast(si); + return si->asUSpoofChecker(); } @@ -188,9 +173,9 @@ uspoof_openFromSerialized(const void *data, int32_t length, int32_t *pActualLeng } if (pActualLength != NULL) { - *pActualLength = sd->fRawData->fLength; + *pActualLength = sd->size(); } - return reinterpret_cast(si); + return si->asUSpoofChecker(); } @@ -205,7 +190,7 @@ uspoof_clone(const USpoofChecker *sc, UErrorCode *status) { delete result; result = NULL; } - return reinterpret_cast(result); + return result->asUSpoofChecker(); } @@ -250,6 +235,7 @@ uspoof_setRestrictionLevel(USpoofChecker *sc, URestrictionLevel restrictionLevel SpoofImpl *This = SpoofImpl::validateThis(sc, status); if (This != NULL) { This->fRestrictionLevel = restrictionLevel; + This->fChecks |= USPOOF_RESTRICTION_LEVEL; } } @@ -333,6 +319,22 @@ uspoof_check(const USpoofChecker *sc, int32_t *position, UErrorCode *status) { + // Backwards compatibility: + if (position != NULL) { + *position = 0; + } + + // Delegate to uspoof_check2 + return uspoof_check2(sc, id, length, NULL, status); +} + + +U_CAPI int32_t U_EXPORT2 +uspoof_check2(const USpoofChecker *sc, + const UChar* id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status) { + const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); if (This == NULL) { return 0; @@ -342,7 +344,7 @@ uspoof_check(const USpoofChecker *sc, return 0; } UnicodeString idStr((length == -1), id, length); // Aliasing constructor. - int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); + int32_t result = uspoof_check2UnicodeString(sc, idStr, checkResult, status); return result; } @@ -353,11 +355,27 @@ uspoof_checkUTF8(const USpoofChecker *sc, int32_t *position, UErrorCode *status) { + // Backwards compatibility: + if (position != NULL) { + *position = 0; + } + + // Delegate to uspoof_check2 + return uspoof_check2UTF8(sc, id, length, NULL, status); +} + + +U_CAPI int32_t U_EXPORT2 +uspoof_check2UTF8(const USpoofChecker *sc, + const char *id, int32_t length, + USpoofCheckResult* checkResult, + UErrorCode *status) { + if (U_FAILURE(*status)) { return 0; } UnicodeString idStr = UnicodeString::fromUTF8(StringPiece(id, length>=0 ? length : uprv_strlen(id))); - int32_t result = uspoof_checkUnicodeString(sc, idStr, position, status); + int32_t result = uspoof_check2UnicodeString(sc, idStr, checkResult, status); return result; } @@ -419,125 +437,95 @@ uspoof_areConfusableUnicodeString(const USpoofChecker *sc, // If no tests relavant to this function have been specified, return an error. // TODO: is this really the right thing to do? It's probably an error on the caller's part, // but logically we would just return 0 (no error). - if ((This->fChecks & (USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | - USPOOF_WHOLE_SCRIPT_CONFUSABLE)) == 0) { + if ((This->fChecks & USPOOF_CONFUSABLE) == 0) { *status = U_INVALID_STATE_ERROR; return 0; } - int32_t flagsForSkeleton = This->fChecks & USPOOF_ANY_CASE; - int32_t result = 0; - IdentifierInfo *identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { + // Compute the skeletons and check for confusability. + UnicodeString id1Skeleton; + uspoof_getSkeletonUnicodeString(sc, 0 /* deprecated */, id1, id1Skeleton, status); + UnicodeString id2Skeleton; + uspoof_getSkeletonUnicodeString(sc, 0 /* deprecated */, id2, id2Skeleton, status); + if (U_FAILURE(*status)) { return 0; } + if (id1Skeleton != id2Skeleton) { return 0; } - identifierInfo->setIdentifier(id1, *status); - int32_t id1ScriptCount = identifierInfo->getScriptCount(); - int32_t id1FirstScript = identifierInfo->getScripts()->nextSetBit(0); - identifierInfo->setIdentifier(id2, *status); - int32_t id2ScriptCount = identifierInfo->getScriptCount(); - int32_t id2FirstScript = identifierInfo->getScripts()->nextSetBit(0); - This->releaseIdentifierInfo(identifierInfo); - identifierInfo = NULL; - - if (This->fChecks & USPOOF_SINGLE_SCRIPT_CONFUSABLE) { - UnicodeString id1Skeleton; - UnicodeString id2Skeleton; - if (id1ScriptCount <= 1 && id2ScriptCount <= 1 && id1FirstScript == id2FirstScript) { - flagsForSkeleton |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id1, id1Skeleton, status); - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id2, id2Skeleton, status); - if (id1Skeleton == id2Skeleton) { - result |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; - } + + // If we get here, the strings are confusable. Now we just need to set the flags for the appropriate classes + // of confusables according to UTS 39 section 4. + // Start by computing the resolved script sets of id1 and id2. + ScriptSet id1RSS; + This->getResolvedScriptSet(id1, id1RSS, *status); + ScriptSet id2RSS; + This->getResolvedScriptSet(id2, id2RSS, *status); + + // Turn on all applicable flags + int32_t result = 0; + if (id1RSS.intersects(id2RSS)) { + result |= USPOOF_SINGLE_SCRIPT_CONFUSABLE; + } else { + result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; + if (!id1RSS.isEmpty() && !id2RSS.isEmpty()) { + result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; } } - if (result & USPOOF_SINGLE_SCRIPT_CONFUSABLE) { - // If the two inputs are single script confusable they cannot also be - // mixed or whole script confusable, according to the UAX39 definitions. - // So we can skip those tests. - return result; + // Turn off flags that the user doesn't want + if ((This->fChecks & USPOOF_SINGLE_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_SINGLE_SCRIPT_CONFUSABLE; } - - // Two identifiers are whole script confusable if each is of a single script - // and they are mixed script confusable. - UBool possiblyWholeScriptConfusables = - id1ScriptCount <= 1 && id2ScriptCount <= 1 && (This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE); - - // - // Mixed Script Check - // - if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) || possiblyWholeScriptConfusables ) { - // For getSkeleton(), resetting the USPOOF_SINGLE_SCRIPT_CONFUSABLE flag will get us - // the mixed script table skeleton, which is what we want. - // The Any Case / Lower Case bit in the skelton flags was set at the top of the function. - UnicodeString id1Skeleton; - UnicodeString id2Skeleton; - flagsForSkeleton &= ~USPOOF_SINGLE_SCRIPT_CONFUSABLE; - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id1, id1Skeleton, status); - uspoof_getSkeletonUnicodeString(sc, flagsForSkeleton, id2, id2Skeleton, status); - if (id1Skeleton == id2Skeleton) { - result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; - if (possiblyWholeScriptConfusables) { - result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; - } - } + if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_MIXED_SCRIPT_CONFUSABLE; + } + if ((This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE) == 0) { + result &= ~USPOOF_WHOLE_SCRIPT_CONFUSABLE; } return result; } - - U_CAPI int32_t U_EXPORT2 uspoof_checkUnicodeString(const USpoofChecker *sc, const icu::UnicodeString &id, int32_t *position, UErrorCode *status) { - const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); - if (This == NULL) { - return 0; - } - int32_t result = 0; - IdentifierInfo *identifierInfo = NULL; - if ((This->fChecks) & (USPOOF_RESTRICTION_LEVEL | USPOOF_MIXED_NUMBERS)) { - identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { - goto cleanupAndReturn; - } - identifierInfo->setIdentifier(id, *status); - identifierInfo->setIdentifierProfile(*This->fAllowedCharsSet); + // Backwards compatibility: + if (position != NULL) { + *position = 0; } + // Delegate to uspoof_check2 + return uspoof_check2UnicodeString(sc, id, NULL, status); +} + +int32_t checkImpl(const SpoofImpl* This, const UnicodeString& id, CheckResult* checkResult, UErrorCode* status) { + U_ASSERT(This != NULL); + U_ASSERT(checkResult != NULL); + checkResult->clear(); + int32_t result = 0; - if ((This->fChecks) & USPOOF_RESTRICTION_LEVEL) { - URestrictionLevel idRestrictionLevel = identifierInfo->getRestrictionLevel(*status); + if (0 != (This->fChecks & USPOOF_RESTRICTION_LEVEL)) { + URestrictionLevel idRestrictionLevel = This->getRestrictionLevel(id, *status); if (idRestrictionLevel > This->fRestrictionLevel) { result |= USPOOF_RESTRICTION_LEVEL; } - if (This->fChecks & USPOOF_AUX_INFO) { - result |= idRestrictionLevel; - } + checkResult->fRestrictionLevel = idRestrictionLevel; } - if ((This->fChecks) & USPOOF_MIXED_NUMBERS) { - const UnicodeSet *numerics = identifierInfo->getNumerics(); - if (numerics->size() > 1) { + if (0 != (This->fChecks & USPOOF_MIXED_NUMBERS)) { + UnicodeSet numerics; + This->getNumerics(id, numerics, *status); + if (numerics.size() > 1) { result |= USPOOF_MIXED_NUMBERS; } - - // TODO: ICU4J returns the UnicodeSet of the numerics found in the identifier. - // We have no easy way to do the same in C. - // if (checkResult != null) { - // checkResult.numerics = numerics; - // } + checkResult->fNumerics = numerics; // UnicodeSet::operator= } - if (This->fChecks & (USPOOF_CHAR_LIMIT)) { + if (0 != (This->fChecks & USPOOF_CHAR_LIMIT)) { int32_t i; UChar32 c; int32_t length = id.length(); @@ -551,103 +539,74 @@ uspoof_checkUnicodeString(const USpoofChecker *sc, } } - if (This->fChecks & - (USPOOF_WHOLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE | USPOOF_INVISIBLE)) { - // These are the checks that need to be done on NFD input + if (0 != (This->fChecks & USPOOF_INVISIBLE)) { + // This check needs to be done on NFD input UnicodeString nfdText; gNfdNormalizer->normalize(id, nfdText, *status); int32_t nfdLength = nfdText.length(); - if (This->fChecks & USPOOF_INVISIBLE) { - - // scan for more than one occurence of the same non-spacing mark - // in a sequence of non-spacing marks. - int32_t i; - UChar32 c; - UChar32 firstNonspacingMark = 0; - UBool haveMultipleMarks = FALSE; - UnicodeSet marksSeenSoFar; // Set of combining marks in a single combining sequence. - - for (i=0; ifChecks & (USPOOF_WHOLE_SCRIPT_CONFUSABLE | USPOOF_MIXED_SCRIPT_CONFUSABLE)) { - // The basic test is the same for both whole and mixed script confusables. - // Compute the set of scripts that every input character has a confusable in. - // For this computation an input character is always considered to be - // confusable with itself in its own script. - // - // If the number of such scripts is two or more, and the input consisted of - // characters all from a single script, we have a whole script confusable. - // (The two scripts will be the original script and the one that is confusable) - // - // If the number of such scripts >= one, and the original input contained characters from - // more than one script, we have a mixed script confusable. (We can transform - // some of the characters, and end up with a visually similar string all in - // one script.) - - if (identifierInfo == NULL) { - identifierInfo = This->getIdentifierInfo(*status); - if (U_FAILURE(*status)) { - goto cleanupAndReturn; + for (i=0; isetIdentifier(id, *status); + continue; } - - int32_t scriptCount = identifierInfo->getScriptCount(); - - ScriptSet scripts; - This->wholeScriptCheck(nfdText, &scripts, *status); - int32_t confusableScriptCount = scripts.countMembers(); - //printf("confusableScriptCount = %d\n", confusableScriptCount); - - if ((This->fChecks & USPOOF_WHOLE_SCRIPT_CONFUSABLE) && - confusableScriptCount >= 2 && - scriptCount == 1) { - result |= USPOOF_WHOLE_SCRIPT_CONFUSABLE; + if (firstNonspacingMark == 0) { + firstNonspacingMark = c; + continue; } - - if ((This->fChecks & USPOOF_MIXED_SCRIPT_CONFUSABLE) && - confusableScriptCount >= 1 && - scriptCount > 1) { - result |= USPOOF_MIXED_SCRIPT_CONFUSABLE; + if (!haveMultipleMarks) { + marksSeenSoFar.add(firstNonspacingMark); + haveMultipleMarks = TRUE; } + if (marksSeenSoFar.contains(c)) { + // report the error, and stop scanning. + // No need to find more than the first failure. + result |= USPOOF_INVISIBLE; + break; + } + marksSeenSoFar.add(c); } } -cleanupAndReturn: - This->releaseIdentifierInfo(identifierInfo); - if (position != NULL) { - *position = 0; + checkResult->fChecks = result; + return checkResult->toCombinedBitmask(This->fChecks); +} + +U_CAPI int32_t U_EXPORT2 +uspoof_check2UnicodeString(const USpoofChecker *sc, + const icu::UnicodeString &id, + USpoofCheckResult* checkResult, + UErrorCode *status) { + const SpoofImpl *This = SpoofImpl::validateThis(sc, *status); + if (This == NULL) { + return FALSE; + } + + if (checkResult != NULL) { + CheckResult* ThisCheckResult = CheckResult::validateThis(checkResult, *status); + if (ThisCheckResult == NULL) { + return FALSE; + } + return checkImpl(This, id, ThisCheckResult, status); + } else { + // Stack-allocate the checkResult since this method doesn't return it + CheckResult stackCheckResult; + return checkImpl(This, id, &stackCheckResult, status); } - return result; } @@ -678,7 +637,7 @@ uspoof_getSkeleton(const USpoofChecker *sc, U_I18N_API UnicodeString & U_EXPORT2 uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, - uint32_t type, + uint32_t /*type*/, const UnicodeString &id, UnicodeString &dest, UErrorCode *status) { @@ -687,21 +646,9 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, return dest; } - int32_t tableMask = 0; - switch (type) { - case 0: - tableMask = USPOOF_ML_TABLE_FLAG; - break; - case USPOOF_SINGLE_SCRIPT_CONFUSABLE: - tableMask = USPOOF_SL_TABLE_FLAG; - break; - case USPOOF_ANY_CASE: - tableMask = USPOOF_MA_TABLE_FLAG; - break; - case USPOOF_SINGLE_SCRIPT_CONFUSABLE | USPOOF_ANY_CASE: - tableMask = USPOOF_SA_TABLE_FLAG; - break; - default: + // Check that at least one of the CONFUSABLE flags is turned on. If not, + // return an error. + if ((This->fChecks & USPOOF_CONFUSABLE) == 0) { *status = U_ILLEGAL_ARGUMENT_ERROR; return dest; } @@ -717,7 +664,7 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, for (inputIndex=0; inputIndex < normalizedLen; ) { UChar32 c = nfdId.char32At(inputIndex); inputIndex += U16_LENGTH(c); - This->confusableLookup(c, tableMask, skelStr); + This->fSpoofData->confusableLookup(c, skelStr); } gNfdNormalizer->normalize(skelStr, dest, *status); @@ -761,13 +708,8 @@ uspoof_serialize(USpoofChecker *sc,void *buf, int32_t capacity, UErrorCode *stat U_ASSERT(U_FAILURE(*status)); return 0; } - int32_t dataSize = This->fSpoofData->fRawData->fLength; - if (capacity < dataSize) { - *status = U_BUFFER_OVERFLOW_ERROR; - return dataSize; - } - uprv_memcpy(buf, This->fSpoofData->fRawData, dataSize); - return dataSize; + + return This->fSpoofData->serialize(buf, capacity, *status); } U_CAPI const USet * U_EXPORT2 @@ -794,6 +736,48 @@ uspoof_getRecommendedUnicodeSet(UErrorCode *status) { return gRecommendedSet; } +//------------------ +// CheckResult APIs +//------------------ + +U_CAPI USpoofCheckResult* U_EXPORT2 +uspoof_openCheckResult(UErrorCode *status) { + CheckResult* checkResult = new CheckResult(); + if (checkResult == NULL) { + *status = U_MEMORY_ALLOCATION_ERROR; + return NULL; + } + return checkResult->asUSpoofCheckResult(); +} + +U_CAPI void U_EXPORT2 +uspoof_closeCheckResult(USpoofCheckResult* checkResult) { + UErrorCode status = U_ZERO_ERROR; + CheckResult* This = CheckResult::validateThis(checkResult, status); + delete This; +} + +U_CAPI int32_t U_EXPORT2 +uspoof_getCheckResultChecks(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return 0; } + return This->fChecks; +} + +U_CAPI URestrictionLevel U_EXPORT2 +uspoof_getCheckResultRestrictionLevel(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return USPOOF_UNRESTRICTIVE; } + return This->fRestrictionLevel; +} + +U_CAPI const USet* U_EXPORT2 +uspoof_getCheckResultNumerics(const USpoofCheckResult *checkResult, UErrorCode *status) { + const CheckResult* This = CheckResult::validateThis(checkResult, *status); + if (U_FAILURE(*status)) { return NULL; } + return This->fNumerics.toUSet(); +} + #endif // !UCONFIG_NO_NORMALIZATION diff --git a/deps/icu-small/source/i18n/uspoof_build.cpp b/deps/icu-small/source/i18n/uspoof_build.cpp index 0a404faf76bef2..d676fe997741b3 100644 --- a/deps/icu-small/source/i18n/uspoof_build.cpp +++ b/deps/icu-small/source/i18n/uspoof_build.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2015, International Business Machines Corporation @@ -35,7 +37,6 @@ #include "uassert.h" #include "uarrsort.h" #include "uspoof_conf.h" -#include "uspoof_wsconf.h" #if !UCONFIG_NO_NORMALIZATION @@ -48,7 +49,7 @@ U_CFUNC void uspoof_internalInitStatics(UErrorCode *status); U_CAPI USpoofChecker * U_EXPORT2 uspoof_openFromSource(const char *confusables, int32_t confusablesLen, - const char *confusablesWholeScript, int32_t confusablesWholeScriptLen, + const char* /*confusablesWholeScript*/, int32_t /*confusablesWholeScriptLen*/, int32_t *errorType, UParseError *pe, UErrorCode *status) { uspoof_internalInitStatics(status); if (U_FAILURE(*status)) { @@ -74,7 +75,6 @@ uspoof_openFromSource(const char *confusables, int32_t confusablesLen, // Compile the binary data from the source (text) format. ConfusabledataBuilder::buildConfusableData(This, confusables, confusablesLen, errorType, pe, *status); - buildWSConfusableData(This, confusablesWholeScript, confusablesWholeScriptLen, pe, *status); if (U_FAILURE(*status)) { delete This; diff --git a/deps/icu-small/source/i18n/uspoof_conf.cpp b/deps/icu-small/source/i18n/uspoof_conf.cpp index aba8375e7c6bf8..6edd1fa3f3cd66 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.cpp +++ b/deps/icu-small/source/i18n/uspoof_conf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -43,11 +45,13 @@ U_NAMESPACE_USE // // The binary structures are described in uspoof_impl.h // -// 1. parse the data, building 4 hash tables, one each for the SL, SA, ML and MA -// tables. Each maps from a UChar32 to a String. +// 1. Parse the data, making a hash table mapping from a UChar32 to a String. // // 2. Sort all of the strings encountered by length, since they will need to // be stored in that order in the final string table. +// TODO: Sorting these strings by length is no longer needed since the removal of +// the string lengths table. This logic can be removed to save processing time +// when building confusables data. // // 3. Build a list of keys (UChar32s) from the four mapping tables. Sort the // list because that will be the ordering of our runtime table. @@ -61,7 +65,7 @@ U_NAMESPACE_USE SPUString::SPUString(UnicodeString *s) { fStr = s; - fStrTableIndex = 0; + fCharOrStrTableIndex = 0; } @@ -143,15 +147,11 @@ SPUString *SPUStringPool::addString(UnicodeString *src, UErrorCode &status) { ConfusabledataBuilder::ConfusabledataBuilder(SpoofImpl *spImpl, UErrorCode &status) : fSpoofImpl(spImpl), fInput(NULL), - fSLTable(NULL), - fSATable(NULL), - fMLTable(NULL), - fMATable(NULL), + fTable(NULL), fKeySet(NULL), fKeyVec(NULL), fValueVec(NULL), fStringTable(NULL), - fStringLengthsTable(NULL), stringPool(NULL), fParseLine(NULL), fParseHexNum(NULL), @@ -160,10 +160,7 @@ ConfusabledataBuilder::ConfusabledataBuilder(SpoofImpl *spImpl, UErrorCode &stat if (U_FAILURE(status)) { return; } - fSLTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fSATable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fMLTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); - fMATable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); + fTable = uhash_open(uhash_hashLong, uhash_compareLong, NULL, &status); fKeySet = new UnicodeSet(); fKeyVec = new UVector(status); fValueVec = new UVector(status); @@ -175,14 +172,10 @@ ConfusabledataBuilder::~ConfusabledataBuilder() { uprv_free(fInput); uregex_close(fParseLine); uregex_close(fParseHexNum); - uhash_close(fSLTable); - uhash_close(fSATable); - uhash_close(fMLTable); - uhash_close(fMATable); + uhash_close(fTable); delete fKeySet; delete fKeyVec; delete fStringTable; - delete fStringLengthsTable; delete fValueVec; delete stringPool; } @@ -228,7 +221,7 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // any line. What was matched is determined by examining which capture groups have a match. // Capture Group 1: the source char // Capture Group 2: the replacement chars - // Capture Group 3-6 the table type, SL, SA, ML, or MA + // Capture Group 3-6 the table type, SL, SA, ML, or MA (deprecated) // Capture Group 7: A blank or comment only line. // Capture Group 8: A syntactically invalid line. Anything that didn't match before. // Example Line from the confusables.txt source file: @@ -294,41 +287,12 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // This a little like a Java intern() - any duplicates will be eliminated. SPUString *smapString = stringPool->addString(mapString, status); - // Add the UChar32 -> string mapping to the appropriate table. - UHashtable *table = uregex_start(fParseLine, 3, &status) >= 0 ? fSLTable : - uregex_start(fParseLine, 4, &status) >= 0 ? fSATable : - uregex_start(fParseLine, 5, &status) >= 0 ? fMLTable : - uregex_start(fParseLine, 6, &status) >= 0 ? fMATable : - NULL; - if (U_SUCCESS(status) && table == NULL) { - status = U_PARSE_ERROR; - } - if (U_FAILURE(status)) { - return; - } - + // Add the UChar32 -> string mapping to the table. // For Unicode 8, the SL, SA and ML tables have been discontinued. // All input data from confusables.txt is tagged MA. - // ICU spoof check functions should ignore the specified table and always - // use this MA Data. - // For now, implement by populating the MA data into all four tables, and - // keep the multiple table implementation in place, in case it comes back - // at some time in the future. - // There is no run time size penalty to keeping the four table implementation - - // the data is shared when it's the same betweeen tables. - if (table != fMATable) { - status = U_PARSE_ERROR; - return; - }; - // uhash_iput(table, keyChar, smapString, &status); - uhash_iput(fSLTable, keyChar, smapString, &status); - uhash_iput(fSATable, keyChar, smapString, &status); - uhash_iput(fMLTable, keyChar, smapString, &status); - uhash_iput(fMATable, keyChar, smapString, &status); + uhash_iput(fTable, keyChar, smapString, &status); + if (U_FAILURE(status)) { return; } fKeySet->add(keyChar); - if (U_FAILURE(status)) { - return; - } } // Input data is now all parsed and collected. @@ -341,43 +305,24 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // Build up the string array, and record the index of each string therein // in the (build time only) string pool. // Strings of length one are not entered into the strings array. - // At the same time, build up the string lengths table, which records the - // position in the string table of the first string of each length >= 4. // (Strings in the table are sorted by length) stringPool->sort(status); fStringTable = new UnicodeString(); - fStringLengthsTable = new UVector(status); - int32_t previousStringLength = 0; - int32_t previousStringIndex = 0; int32_t poolSize = stringPool->size(); int32_t i; for (i=0; igetByIndex(i); int32_t strLen = s->fStr->length(); int32_t strIndex = fStringTable->length(); - U_ASSERT(strLen >= previousStringLength); if (strLen == 1) { // strings of length one do not get an entry in the string table. // Keep the single string character itself here, which is the same // convention that is used in the final run-time string table index. - s->fStrTableIndex = s->fStr->charAt(0); + s->fCharOrStrTableIndex = s->fStr->charAt(0); } else { - if ((strLen > previousStringLength) && (previousStringLength >= 4)) { - fStringLengthsTable->addElement(previousStringIndex, status); - fStringLengthsTable->addElement(previousStringLength, status); - } - s->fStrTableIndex = strIndex; + s->fCharOrStrTableIndex = strIndex; fStringTable->append(*(s->fStr)); } - previousStringLength = strLen; - previousStringIndex = strIndex; - } - // Make the final entry to the string lengths table. - // (it holds an entry for the _last_ string of each length, so adding the - // final one doesn't happen in the main loop because no longer string was encountered.) - if (previousStringLength >= 4) { - fStringLengthsTable->addElement(previousStringIndex, status); - fStringLengthsTable->addElement(previousStringLength, status); } // Construct the compile-time Key and Value tables @@ -396,10 +341,22 @@ void ConfusabledataBuilder::build(const char * confusables, int32_t confusablesL // code points requires a nested loop. for (UChar32 keyChar=fKeySet->getRangeStart(range); keyChar <= fKeySet->getRangeEnd(range); keyChar++) { - addKeyEntry(keyChar, fSLTable, USPOOF_SL_TABLE_FLAG, status); - addKeyEntry(keyChar, fSATable, USPOOF_SA_TABLE_FLAG, status); - addKeyEntry(keyChar, fMLTable, USPOOF_ML_TABLE_FLAG, status); - addKeyEntry(keyChar, fMATable, USPOOF_MA_TABLE_FLAG, status); + SPUString *targetMapping = static_cast(uhash_iget(fTable, keyChar)); + U_ASSERT(targetMapping != NULL); + + // Set an error code if trying to consume a long string. Otherwise, + // codePointAndLengthToKey will abort on a U_ASSERT. + if (targetMapping->fStr->length() > 256) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + int32_t key = ConfusableDataUtils::codePointAndLengthToKey(keyChar, + targetMapping->fStr->length()); + int32_t value = targetMapping->fCharOrStrTableIndex; + + fKeyVec->addElement(key, status); + fValueVec->addElement(value, status); } } @@ -435,14 +392,14 @@ void ConfusabledataBuilder::outputData(UErrorCode &status) { return; } int i; - int32_t previousKey = 0; + UChar32 previousCodePoint = 0; for (i=0; ielementAti(i); - (void)previousKey; // Suppress unused variable warning on gcc. - U_ASSERT((key & 0x00ffffff) >= (previousKey & 0x00ffffff)); - U_ASSERT((key & 0xff000000) != 0); + UChar32 codePoint = ConfusableDataUtils::keyToCodePoint(key); + // strictly greater because there can be only one entry per code point + U_ASSERT(codePoint > previousCodePoint); keys[i] = key; - previousKey = key; + previousCodePoint = codePoint; } SpoofDataHeader *rawData = fSpoofImpl->fSpoofData->fRawData; rawData->fCFUKeys = (int32_t)((char *)keys - (char *)rawData); @@ -484,143 +441,6 @@ void ConfusabledataBuilder::outputData(UErrorCode &status) { rawData->fCFUStringTable = (int32_t)((char *)strings - (char *)rawData); rawData->fCFUStringTableLen = stringsLength; fSpoofImpl->fSpoofData->fCFUStrings = strings; - - // The String Lengths Table - // While copying into the runtime array do some sanity checks on the values - // Each complete entry contains two fields, an index and an offset. - // Lengths should increase with each entry. - // Offsets should be less than the size of the string table. - int32_t lengthTableLength = fStringLengthsTable->size(); - uint16_t *stringLengths = - static_cast(fSpoofImpl->fSpoofData->reserveSpace(lengthTableLength*sizeof(uint16_t), status)); - if (U_FAILURE(status)) { - return; - } - int32_t destIndex = 0; - uint32_t previousLength = 0; - for (i=0; i(fStringLengthsTable->elementAti(i)); - uint32_t length = static_cast(fStringLengthsTable->elementAti(i+1)); - U_ASSERT(offset < stringsLength); - U_ASSERT(length < 40); - (void)previousLength; // Suppress unused variable warning on gcc. - U_ASSERT(length > previousLength); - stringLengths[destIndex++] = static_cast(offset); - stringLengths[destIndex++] = static_cast(length); - previousLength = length; - } - rawData = fSpoofImpl->fSpoofData->fRawData; - rawData->fCFUStringLengths = (int32_t)((char *)stringLengths - (char *)rawData); - // Note: StringLengthsSize in the raw data is the number of complete entries, - // each consisting of a pair of 16 bit values, hence the divide by 2. - rawData->fCFUStringLengthsSize = lengthTableLength / 2; - fSpoofImpl->fSpoofData->fCFUStringLengths = - reinterpret_cast(stringLengths); -} - - - -// addKeyEntry Construction of the confusable Key and Mapping Values tables. -// This is an intermediate point in the building process. -// We already have the mappings in the hash tables fSLTable, etc. -// This function builds corresponding run-time style table entries into -// fKeyVec and fValueVec - -void ConfusabledataBuilder::addKeyEntry( - UChar32 keyChar, // The key character - UHashtable *table, // The table, one of SATable, MATable, etc. - int32_t tableFlag, // One of USPOOF_SA_TABLE_FLAG, etc. - UErrorCode &status) { - - SPUString *targetMapping = static_cast(uhash_iget(table, keyChar)); - if (targetMapping == NULL) { - // No mapping for this key character. - // (This function is called for all four tables for each key char that - // is seen anywhere, so this no entry cases are very much expected.) - return; - } - - // Check whether there is already an entry with the correct mapping. - // If so, simply set the flag in the keyTable saying that the existing entry - // applies to the table that we're doing now. - - UBool keyHasMultipleValues = FALSE; - int32_t i; - for (i=fKeyVec->size()-1; i>=0 ; i--) { - int32_t key = fKeyVec->elementAti(i); - if ((key & 0x0ffffff) != keyChar) { - // We have now checked all existing key entries for this key char (if any) - // without finding one with the same mapping. - break; - } - UnicodeString mapping = getMapping(i); - if (mapping == *(targetMapping->fStr)) { - // The run time entry we are currently testing has the correct mapping. - // Set the flag in it indicating that it applies to the new table also. - key |= tableFlag; - fKeyVec->setElementAt(key, i); - return; - } - keyHasMultipleValues = TRUE; - } - - // Need to add a new entry to the binary data being built for this mapping. - // Includes adding entries to both the key table and the parallel values table. - - int32_t newKey = keyChar | tableFlag; - if (keyHasMultipleValues) { - newKey |= USPOOF_KEY_MULTIPLE_VALUES; - } - int32_t adjustedMappingLength = targetMapping->fStr->length() - 1; - if (adjustedMappingLength>3) { - adjustedMappingLength = 3; - } - newKey |= adjustedMappingLength << USPOOF_KEY_LENGTH_SHIFT; - - int32_t newData = targetMapping->fStrTableIndex; - - fKeyVec->addElement(newKey, status); - fValueVec->addElement(newData, status); - - // If the preceding key entry is for the same key character (but with a different mapping) - // set the multiple-values flag on it. - if (keyHasMultipleValues) { - int32_t previousKeyIndex = fKeyVec->size() - 2; - int32_t previousKey = fKeyVec->elementAti(previousKeyIndex); - previousKey |= USPOOF_KEY_MULTIPLE_VALUES; - fKeyVec->setElementAt(previousKey, previousKeyIndex); - } -} - - - -UnicodeString ConfusabledataBuilder::getMapping(int32_t index) { - int32_t key = fKeyVec->elementAti(index); - int32_t value = fValueVec->elementAti(index); - int32_t length = USPOOF_KEY_LENGTH_FIELD(key); - int32_t lastIndexWithLen; - switch (length) { - case 0: - return UnicodeString(static_cast(value)); - case 1: - case 2: - return UnicodeString(*fStringTable, value, length+1); - case 3: - length = 0; - int32_t i; - for (i=0; isize(); i+=2) { - lastIndexWithLen = fStringLengthsTable->elementAti(i); - if (value <= lastIndexWithLen) { - length = fStringLengthsTable->elementAti(i+1); - break; - } - } - U_ASSERT(length>=3); - return UnicodeString(*fStringTable, value, length); - default: - U_ASSERT(FALSE); - } - return UnicodeString(); } #endif diff --git a/deps/icu-small/source/i18n/uspoof_conf.h b/deps/icu-small/source/i18n/uspoof_conf.h index 2157142be6cd9e..72cd028104fdad 100644 --- a/deps/icu-small/source/i18n/uspoof_conf.h +++ b/deps/icu-small/source/i18n/uspoof_conf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -36,9 +38,9 @@ U_NAMESPACE_BEGIN struct SPUString : public UMemory { UnicodeString *fStr; // The actual string. - int32_t fStrTableIndex; // Index into the final runtime data for this string. - // (or, for length 1, the single string char itself, - // there being no string table entry for it.) + int32_t fCharOrStrTableIndex; // Index into the final runtime data for this + // string (or, for length 1, the single string char + // itself, there being no string table entry for it.) SPUString(UnicodeString *s); ~SPUString(); }; @@ -86,10 +88,7 @@ class ConfusabledataBuilder : public UMemory { private: SpoofImpl *fSpoofImpl; UChar *fInput; - UHashtable *fSLTable; - UHashtable *fSATable; - UHashtable *fMLTable; - UHashtable *fMATable; + UHashtable *fTable; UnicodeSet *fKeySet; // A set of all keys (UChar32s) that go into the four mapping tables. // The binary data is first assembled into the following four collections, then @@ -97,7 +96,6 @@ class ConfusabledataBuilder : public UMemory { UVector *fKeyVec; UVector *fValueVec; UnicodeString *fStringTable; - UVector *fStringLengthsTable; SPUStringPool *stringPool; URegularExpression *fParseLine; diff --git a/deps/icu-small/source/i18n/uspoof_impl.cpp b/deps/icu-small/source/i18n/uspoof_impl.cpp index 111a1489ffd55c..fba742c3ffc013 100644 --- a/deps/icu-small/source/i18n/uspoof_impl.cpp +++ b/deps/icu-small/source/i18n/uspoof_impl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2008-2016, International Business Machines @@ -13,11 +15,11 @@ #include "utrie2.h" #include "cmemory.h" #include "cstring.h" -#include "identifier_info.h" #include "scriptset.h" #include "umutex.h" #include "udataswp.h" #include "uassert.h" +#include "ucln_in.h" #include "uspoof_impl.h" #if !UCONFIG_NO_NORMALIZATION @@ -27,41 +29,53 @@ U_NAMESPACE_BEGIN UOBJECT_DEFINE_RTTI_IMPLEMENTATION(SpoofImpl) -SpoofImpl::SpoofImpl(SpoofData *data, UErrorCode &status) : - fMagic(0), fChecks(USPOOF_ALL_CHECKS), fSpoofData(data), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { - if (U_FAILURE(status)) { - return; - } +SpoofImpl::SpoofImpl(SpoofData *data, UErrorCode& status) { + construct(status); + fSpoofData = data; +} + +SpoofImpl::SpoofImpl(UErrorCode& status) { + construct(status); + + // TODO: Call this method where it is actually needed, instead of in the + // constructor, to allow for lazy data loading. See #12696. + fSpoofData = SpoofData::getDefault(status); +} + +SpoofImpl::SpoofImpl() { + UErrorCode status = U_ZERO_ERROR; + construct(status); + + // TODO: Call this method where it is actually needed, instead of in the + // constructor, to allow for lazy data loading. See #12696. + fSpoofData = SpoofData::getDefault(status); +} + +void SpoofImpl::construct(UErrorCode& status) { + fMagic = USPOOF_MAGIC; + fChecks = USPOOF_ALL_CHECKS; + fSpoofData = NULL; + fAllowedCharsSet = NULL; + fAllowedLocales = NULL; fRestrictionLevel = USPOOF_HIGHLY_RESTRICTIVE; + if (U_FAILURE(status)) { return; } + UnicodeSet *allowedCharsSet = new UnicodeSet(0, 0x10ffff); - allowedCharsSet->freeze(); fAllowedCharsSet = allowedCharsSet; fAllowedLocales = uprv_strdup(""); if (fAllowedCharsSet == NULL || fAllowedLocales == NULL) { status = U_MEMORY_ALLOCATION_ERROR; return; } - fMagic = USPOOF_MAGIC; -} - - -SpoofImpl::SpoofImpl() : - fMagic(USPOOF_MAGIC), fChecks(USPOOF_ALL_CHECKS), fSpoofData(NULL), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { - UnicodeSet *allowedCharsSet = new UnicodeSet(0, 0x10ffff); allowedCharsSet->freeze(); - fAllowedCharsSet = allowedCharsSet; - fAllowedLocales = uprv_strdup(""); - fRestrictionLevel = USPOOF_HIGHLY_RESTRICTIVE; } // Copy Constructor, used by the user level clone() function. SpoofImpl::SpoofImpl(const SpoofImpl &src, UErrorCode &status) : fMagic(0), fChecks(USPOOF_ALL_CHECKS), fSpoofData(NULL), fAllowedCharsSet(NULL) , - fAllowedLocales(NULL), fCachedIdentifierInfo(NULL) { + fAllowedLocales(NULL) { if (U_FAILURE(status)) { return; } @@ -71,10 +85,10 @@ SpoofImpl::SpoofImpl(const SpoofImpl &src, UErrorCode &status) : fSpoofData = src.fSpoofData->addReference(); } fAllowedCharsSet = static_cast(src.fAllowedCharsSet->clone()); - if (fAllowedCharsSet == NULL) { + fAllowedLocales = uprv_strdup(src.fAllowedLocales); + if (fAllowedCharsSet == NULL || fAllowedLocales == NULL) { status = U_MEMORY_ALLOCATION_ERROR; } - fAllowedLocales = uprv_strdup(src.fAllowedLocales); fRestrictionLevel = src.fRestrictionLevel; } @@ -86,7 +100,11 @@ SpoofImpl::~SpoofImpl() { } delete fAllowedCharsSet; uprv_free((void *)fAllowedLocales); - delete fCachedIdentifierInfo; +} + +// Cast this instance as a USpoofChecker for the C API. +USpoofChecker *SpoofImpl::asUSpoofChecker() { + return reinterpret_cast(this); } // @@ -102,12 +120,11 @@ const SpoofImpl *SpoofImpl::validateThis(const USpoofChecker *sc, UErrorCode &st return NULL; } SpoofImpl *This = (SpoofImpl *)sc; - if (This->fMagic != USPOOF_MAGIC || - This->fSpoofData == NULL) { + if (This->fMagic != USPOOF_MAGIC) { status = U_INVALID_FORMAT_ERROR; return NULL; } - if (!SpoofData::validateDataVersion(This->fSpoofData->fRawData, status)) { + if (This->fSpoofData != NULL && !This->fSpoofData->validateDataVersion(status)) { return NULL; } return This; @@ -119,148 +136,6 @@ SpoofImpl *SpoofImpl::validateThis(USpoofChecker *sc, UErrorCode &status) { } - -//-------------------------------------------------------------------------------------- -// -// confusableLookup() This is the heart of the confusable skeleton generation -// implementation. -// -// Given a source character, produce the corresponding -// replacement character(s), appending them to the dest string. -// -//--------------------------------------------------------------------------------------- -int32_t SpoofImpl::confusableLookup(UChar32 inChar, int32_t tableMask, UnicodeString &dest) const { - - // Binary search the spoof data key table for the inChar - int32_t *low = fSpoofData->fCFUKeys; - int32_t *mid = NULL; - int32_t *limit = low + fSpoofData->fRawData->fCFUKeysSize; - UChar32 midc; - do { - int32_t delta = ((int32_t)(limit-low))/2; - mid = low + delta; - midc = *mid & 0x1fffff; - if (inChar == midc) { - goto foundChar; - } else if (inChar < midc) { - limit = mid; - } else { - low = mid; - } - } while (low < limit-1); - mid = low; - midc = *mid & 0x1fffff; - if (inChar != midc) { - // Char not found. It maps to itself. - int i = 0; - dest.append(inChar); - return i; - } - foundChar: - int32_t keyFlags = *mid & 0xff000000; - if ((keyFlags & tableMask) == 0) { - // We found the right key char, but the entry doesn't pertain to the - // table we need. See if there is an adjacent key that does - if (keyFlags & USPOOF_KEY_MULTIPLE_VALUES) { - int32_t *altMid; - for (altMid = mid-1; (*altMid&0x00ffffff) == inChar; altMid--) { - keyFlags = *altMid & 0xff000000; - if (keyFlags & tableMask) { - mid = altMid; - goto foundKey; - } - } - for (altMid = mid+1; (*altMid&0x00ffffff) == inChar; altMid++) { - keyFlags = *altMid & 0xff000000; - if (keyFlags & tableMask) { - mid = altMid; - goto foundKey; - } - } - } - // No key entry for this char & table. - // The input char maps to itself. - int i = 0; - dest.append(inChar); - return i; - } - - foundKey: - int32_t stringLen = USPOOF_KEY_LENGTH_FIELD(keyFlags) + 1; - int32_t keyTableIndex = (int32_t)(mid - fSpoofData->fCFUKeys); - - // Value is either a UChar (for strings of length 1) or - // an index into the string table (for longer strings) - uint16_t value = fSpoofData->fCFUValues[keyTableIndex]; - if (stringLen == 1) { - dest.append((UChar)value); - return 1; - } - - // String length of 4 from the above lookup is used for all strings of length >= 4. - // For these, get the real length from the string lengths table, - // which maps string table indexes to lengths. - // All strings of the same length are stored contiguously in the string table. - // 'value' from the lookup above is the starting index for the desired string. - - int32_t ix; - if (stringLen == 4) { - int32_t stringLengthsLimit = fSpoofData->fRawData->fCFUStringLengthsSize; - for (ix = 0; ix < stringLengthsLimit; ix++) { - if (fSpoofData->fCFUStringLengths[ix].fLastString >= value) { - stringLen = fSpoofData->fCFUStringLengths[ix].fStrLength; - break; - } - } - U_ASSERT(ix < stringLengthsLimit); - } - - U_ASSERT(value + stringLen <= fSpoofData->fRawData->fCFUStringTableLen); - UChar *src = &fSpoofData->fCFUStrings[value]; - dest.append(src, stringLen); - return stringLen; -} - - -//--------------------------------------------------------------------------------------- -// -// wholeScriptCheck() -// -// Input text is already normalized to NFD -// Return the set of scripts, each of which can represent something that is -// confusable with the input text. The script of the input text -// is included; input consisting of characters from a single script will -// always produce a result consisting of a set containing that script. -// -//--------------------------------------------------------------------------------------- -void SpoofImpl::wholeScriptCheck( - const UnicodeString &text, ScriptSet *result, UErrorCode &status) const { - - UTrie2 *table = - (fChecks & USPOOF_ANY_CASE) ? fSpoofData->fAnyCaseTrie : fSpoofData->fLowerCaseTrie; - result->setAll(); - int32_t length = text.length(); - for (int32_t inputIdx=0; inputIdx < length;) { - UChar32 c = text.char32At(inputIdx); - inputIdx += U16_LENGTH(c); - uint32_t index = utrie2_get32(table, c); - if (index == 0) { - // No confusables in another script for this char. - // TODO: we should change the data to have sets with just the single script - // bit for the script of this char. Gets rid of this special case. - // Until then, grab the script from the char and intersect it with the set. - UScriptCode cpScript = uscript_getScript(c, &status); - U_ASSERT(cpScript > USCRIPT_INHERITED); - result->intersect(cpScript, status); - } else if (index == 1) { - // Script == Common or Inherited. Nothing to do. - } else { - result->intersect(fSpoofData->fScriptSets[index]); - } - } -} - - void SpoofImpl::setAllowedLocales(const char *localesList, UErrorCode &status) { UnicodeSet allowedChars; UnicodeSet *tmpSet = NULL; @@ -372,6 +247,137 @@ void SpoofImpl::addScriptChars(const char *locale, UnicodeSet *allowedChars, UEr } } +// Computes the augmented script set for a code point, according to UTS 39 section 5.1. +void SpoofImpl::getAugmentedScriptSet(UChar32 codePoint, ScriptSet& result, UErrorCode& status) { + result.resetAll(); + result.setScriptExtensions(codePoint, status); + if (U_FAILURE(status)) { return; } + + // Section 5.1 step 1 + if (result.test(USCRIPT_HAN, status)) { + result.set(USCRIPT_HAN_WITH_BOPOMOFO, status); + result.set(USCRIPT_JAPANESE, status); + result.set(USCRIPT_KOREAN, status); + } + if (result.test(USCRIPT_HIRAGANA, status)) { + result.set(USCRIPT_JAPANESE, status); + } + if (result.test(USCRIPT_KATAKANA, status)) { + result.set(USCRIPT_JAPANESE, status); + } + if (result.test(USCRIPT_HANGUL, status)) { + result.set(USCRIPT_KOREAN, status); + } + if (result.test(USCRIPT_BOPOMOFO, status)) { + result.set(USCRIPT_HAN_WITH_BOPOMOFO, status); + } + + // Section 5.1 step 2 + if (result.test(USCRIPT_COMMON, status) || result.test(USCRIPT_INHERITED, status)) { + result.setAll(); + } +} + +// Computes the resolved script set for a string, according to UTS 39 section 5.1. +void SpoofImpl::getResolvedScriptSet(const UnicodeString& input, ScriptSet& result, UErrorCode& status) const { + getResolvedScriptSetWithout(input, USCRIPT_CODE_LIMIT, result, status); +} + +// Computes the resolved script set for a string, omitting characters having the specified script. +// If USCRIPT_CODE_LIMIT is passed as the second argument, all characters are included. +void SpoofImpl::getResolvedScriptSetWithout(const UnicodeString& input, UScriptCode script, ScriptSet& result, UErrorCode& status) const { + result.setAll(); + + ScriptSet temp; + UChar32 codePoint; + for (int32_t i = 0; i < input.length(); i += U16_LENGTH(codePoint)) { + codePoint = input.char32At(i); + + // Compute the augmented script set for the character + getAugmentedScriptSet(codePoint, temp, status); + if (U_FAILURE(status)) { return; } + + // Intersect the augmented script set with the resolved script set, but only if the character doesn't + // have the script specified in the function call + if (script == USCRIPT_CODE_LIMIT || !temp.test(script, status)) { + result.intersect(temp); + } + } +} + +// Computes the set of numerics for a string, according to UTS 39 section 5.3. +void SpoofImpl::getNumerics(const UnicodeString& input, UnicodeSet& result, UErrorCode& /*status*/) const { + result.clear(); + + UChar32 codePoint; + for (int32_t i = 0; i < input.length(); i += U16_LENGTH(codePoint)) { + codePoint = input.char32At(i); + + // Store a representative character for each kind of decimal digit + if (u_charType(codePoint) == U_DECIMAL_DIGIT_NUMBER) { + // Store the zero character as a representative for comparison. + // Unicode guarantees it is codePoint - value + result.add(codePoint - (UChar32)u_getNumericValue(codePoint)); + } + } +} + +// Computes the restriction level of a string, according to UTS 39 section 5.2. +URestrictionLevel SpoofImpl::getRestrictionLevel(const UnicodeString& input, UErrorCode& status) const { + // Section 5.2 step 1: + if (!fAllowedCharsSet->containsAll(input)) { + return USPOOF_UNRESTRICTIVE; + } + + // Section 5.2 step 2 + // Java use a static UnicodeSet for this test. In C++, avoid the static variable + // and just do a simple for loop. + UBool allASCII = TRUE; + for (int32_t i=0, length=input.length(); i 0x7f) { + allASCII = FALSE; + break; + } + } + if (allASCII) { + return USPOOF_ASCII; + } + + // Section 5.2 steps 3: + ScriptSet resolvedScriptSet; + getResolvedScriptSet(input, resolvedScriptSet, status); + if (U_FAILURE(status)) { return USPOOF_UNRESTRICTIVE; } + + // Section 5.2 step 4: + if (!resolvedScriptSet.isEmpty()) { + return USPOOF_SINGLE_SCRIPT_RESTRICTIVE; + } + + // Section 5.2 step 5: + ScriptSet resolvedNoLatn; + getResolvedScriptSetWithout(input, USCRIPT_LATIN, resolvedNoLatn, status); + if (U_FAILURE(status)) { return USPOOF_UNRESTRICTIVE; } + + // Section 5.2 step 6: + if (resolvedNoLatn.test(USCRIPT_HAN_WITH_BOPOMOFO, status) + || resolvedNoLatn.test(USCRIPT_JAPANESE, status) + || resolvedNoLatn.test(USCRIPT_KOREAN, status)) { + return USPOOF_HIGHLY_RESTRICTIVE; + } + + // Section 5.2 step 7: + if (!resolvedNoLatn.isEmpty() + && !resolvedNoLatn.test(USCRIPT_CYRILLIC, status) + && !resolvedNoLatn.test(USCRIPT_GREEK, status) + && !resolvedNoLatn.test(USCRIPT_CHEROKEE, status)) { + return USPOOF_MODERATELY_RESTRICTIVE; + } + + // Section 5.2 step 8: + return USPOOF_MINIMALLY_RESTRICTIVE; +} + + // Convert a text format hex number. Utility function used by builder code. Static. // Input: UChar *string text. Output: a UChar32 @@ -404,55 +410,60 @@ UChar32 SpoofImpl::ScanHex(const UChar *s, int32_t start, int32_t limit, UErrorC return (UChar32)val; } -// IdentifierInfo Cache. IdentifierInfo objects are somewhat expensive to create. -// Maintain a one-element cache, which is sufficient to avoid repeatedly -// creating new ones unless we get multi-thread concurrency in spoof -// check operations, which should be statistically uncommon. -// These functions are used in place of new & delete of an IdentifierInfo. -// They will recycle the IdentifierInfo when possible. -// They are logically const, and used within const functions that must be thread safe. -IdentifierInfo *SpoofImpl::getIdentifierInfo(UErrorCode &status) const { - IdentifierInfo *returnIdInfo = NULL; - if (U_FAILURE(status)) { - return returnIdInfo; - } - SpoofImpl *nonConstThis = const_cast(this); - { - Mutex m; - returnIdInfo = nonConstThis->fCachedIdentifierInfo; - nonConstThis->fCachedIdentifierInfo = NULL; - } - if (returnIdInfo == NULL) { - returnIdInfo = new IdentifierInfo(status); - if (U_SUCCESS(status) && returnIdInfo == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - } - if (U_FAILURE(status) && returnIdInfo != NULL) { - delete returnIdInfo; - returnIdInfo = NULL; - } - } - return returnIdInfo; +//----------------------------------------- +// +// class CheckResult Implementation +// +//----------------------------------------- + +CheckResult::CheckResult() : fMagic(USPOOF_CHECK_MAGIC) { + clear(); } +USpoofCheckResult* CheckResult::asUSpoofCheckResult() { + return reinterpret_cast(this); +} -void SpoofImpl::releaseIdentifierInfo(IdentifierInfo *idInfo) const { - if (idInfo != NULL) { - SpoofImpl *nonConstThis = const_cast(this); - { - Mutex m; - if (nonConstThis->fCachedIdentifierInfo == NULL) { - nonConstThis->fCachedIdentifierInfo = idInfo; - idInfo = NULL; - } - } - delete idInfo; +// +// Incoming parameter check on Status and the CheckResult object +// received from the C API. +// +const CheckResult* CheckResult::validateThis(const USpoofCheckResult *ptr, UErrorCode &status) { + if (U_FAILURE(status)) { return NULL; } + if (ptr == NULL) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return NULL; } + CheckResult *This = (CheckResult*) ptr; + if (This->fMagic != USPOOF_CHECK_MAGIC) { + status = U_INVALID_FORMAT_ERROR; + return NULL; + } + return This; +} + +CheckResult* CheckResult::validateThis(USpoofCheckResult *ptr, UErrorCode &status) { + return const_cast + (CheckResult::validateThis(const_cast(ptr), status)); } +void CheckResult::clear() { + fChecks = 0; + fNumerics.clear(); + fRestrictionLevel = USPOOF_UNDEFINED_RESTRICTIVE; +} +int32_t CheckResult::toCombinedBitmask(int32_t enabledChecks) { + if ((enabledChecks & USPOOF_AUX_INFO) != 0 && fRestrictionLevel != USPOOF_UNDEFINED_RESTRICTIVE) { + return fChecks | fRestrictionLevel; + } else { + return fChecks; + } +} +CheckResult::~CheckResult() { +} //---------------------------------------------------------------------------------------------- // @@ -461,12 +472,14 @@ void SpoofImpl::releaseIdentifierInfo(IdentifierInfo *idInfo) const { //---------------------------------------------------------------------------------------------- -UBool SpoofData::validateDataVersion(const SpoofDataHeader *rawData, UErrorCode &status) { +UBool SpoofData::validateDataVersion(UErrorCode &status) const { if (U_FAILURE(status) || - rawData == NULL || - rawData->fMagic != USPOOF_MAGIC || - rawData->fFormatVersion[0] > 1 || - rawData->fFormatVersion[1] > 0) { + fRawData == NULL || + fRawData->fMagic != USPOOF_MAGIC || + fRawData->fFormatVersion[0] != USPOOF_CONFUSABLE_DATA_FORMAT_VERSION || + fRawData->fFormatVersion[1] != 0 || + fRawData->fFormatVersion[2] != 0 || + fRawData->fFormatVersion[3] != 0) { status = U_INVALID_FORMAT_ERROR; return FALSE; } @@ -485,7 +498,7 @@ spoofDataIsAcceptable(void *context, pInfo->dataFormat[1] == 0x66 && pInfo->dataFormat[2] == 0x75 && pInfo->dataFormat[3] == 0x20 && - pInfo->formatVersion[0] == 1 + pInfo->formatVersion[0] == USPOOF_CONFUSABLE_DATA_FORMAT_VERSION ) { UVersionInfo *version = static_cast(context); if(version != NULL) { @@ -497,32 +510,61 @@ spoofDataIsAcceptable(void *context, } } +// Methods for the loading of the default confusables data file. The confusable +// data is loaded only when it is needed. +// +// SpoofData::getDefault() - Return the default confusables data, and call the +// initOnce() if it is not available. Adds a reference +// to the SpoofData that the caller is responsible for +// decrementing when they are done with the data. // -// SpoofData::getDefault() - return a wrapper around the spoof data that is -// baked into the default ICU data. +// uspoof_loadDefaultData - Called once, from initOnce(). The resulting SpoofData +// is shared by all spoof checkers using the default data. // -// Called once, from the initOnce() function in uspoof_impl.cpp; the resulting -// SpoofData is shared by all spoof checkers using the default data. +// uspoof_cleanupDefaultData - Called during cleanup. // -SpoofData *SpoofData::getDefault(UErrorCode &status) { + +static UInitOnce gSpoofInitDefaultOnce = U_INITONCE_INITIALIZER; +static SpoofData* gDefaultSpoofData; + +static UBool U_CALLCONV +uspoof_cleanupDefaultData(void) { + if (gDefaultSpoofData) { + // Will delete, assuming all user-level spoof checkers were closed. + gDefaultSpoofData->removeReference(); + gDefaultSpoofData = NULL; + gSpoofInitDefaultOnce.reset(); + } + return TRUE; +} + +static void U_CALLCONV uspoof_loadDefaultData(UErrorCode& status) { UDataMemory *udm = udata_openChoice(NULL, "cfu", "confusables", spoofDataIsAcceptable, NULL, // context, would receive dataVersion if supplied. &status); + if (U_FAILURE(status)) { return; } + gDefaultSpoofData = new SpoofData(udm, status); if (U_FAILURE(status)) { - return NULL; - } - SpoofData *This = new SpoofData(udm, status); - if (U_FAILURE(status)) { - delete This; - return NULL; + delete gDefaultSpoofData; + return; } - if (This == NULL) { + if (gDefaultSpoofData == NULL) { status = U_MEMORY_ALLOCATION_ERROR; + return; } - return This; + ucln_i18n_registerCleanup(UCLN_I18N_SPOOFDATA, uspoof_cleanupDefaultData); +} + +SpoofData* SpoofData::getDefault(UErrorCode& status) { + umtx_initOnce(gSpoofInitDefaultOnce, &uspoof_loadDefaultData, status); + if (U_FAILURE(status)) { return NULL; } + gDefaultSpoofData->addReference(); + return gDefaultSpoofData; } + + SpoofData::SpoofData(UDataMemory *udm, UErrorCode &status) { reset(); @@ -533,7 +575,7 @@ SpoofData::SpoofData(UDataMemory *udm, UErrorCode &status) // fRawData is non-const because it may be constructed by the data builder. fRawData = reinterpret_cast( const_cast(udata_getMemory(udm))); - validateDataVersion(fRawData, status); + validateDataVersion(status); initPtrs(status); } @@ -554,7 +596,7 @@ SpoofData::SpoofData(const void *data, int32_t length, UErrorCode &status) status = U_INVALID_FORMAT_ERROR; return; } - validateDataVersion(fRawData, status); + validateDataVersion(status); initPtrs(status); } @@ -582,7 +624,7 @@ SpoofData::SpoofData(UErrorCode &status) { uprv_memset(fRawData, 0, initialSize); fRawData->fMagic = USPOOF_MAGIC; - fRawData->fFormatVersion[0] = 1; + fRawData->fFormatVersion[0] = USPOOF_CONFUSABLE_DATA_FORMAT_VERSION; fRawData->fFormatVersion[1] = 0; fRawData->fFormatVersion[2] = 0; fRawData->fFormatVersion[3] = 0; @@ -600,11 +642,7 @@ void SpoofData::reset() { fRefCount = 1; fCFUKeys = NULL; fCFUValues = NULL; - fCFUStringLengths = NULL; fCFUStrings = NULL; - fAnyCaseTrie = NULL; - fLowerCaseTrie = NULL; - fScriptSets = NULL; } @@ -626,7 +664,6 @@ void SpoofData::reset() { void SpoofData::initPtrs(UErrorCode &status) { fCFUKeys = NULL; fCFUValues = NULL; - fCFUStringLengths = NULL; fCFUStrings = NULL; if (U_FAILURE(status)) { return; @@ -637,33 +674,13 @@ void SpoofData::initPtrs(UErrorCode &status) { if (fRawData->fCFUStringIndex != 0) { fCFUValues = (uint16_t *)((char *)fRawData + fRawData->fCFUStringIndex); } - if (fRawData->fCFUStringLengths != 0) { - fCFUStringLengths = (SpoofStringLengthsElement *)((char *)fRawData + fRawData->fCFUStringLengths); - } if (fRawData->fCFUStringTable != 0) { fCFUStrings = (UChar *)((char *)fRawData + fRawData->fCFUStringTable); } - - if (fAnyCaseTrie == NULL && fRawData->fAnyCaseTrie != 0) { - fAnyCaseTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, - (char *)fRawData + fRawData->fAnyCaseTrie, fRawData->fAnyCaseTrieLength, NULL, &status); - } - if (fLowerCaseTrie == NULL && fRawData->fLowerCaseTrie != 0) { - fLowerCaseTrie = utrie2_openFromSerialized(UTRIE2_16_VALUE_BITS, - (char *)fRawData + fRawData->fLowerCaseTrie, fRawData->fLowerCaseTrieLength, NULL, &status); - } - - if (fRawData->fScriptSets != 0) { - fScriptSets = (ScriptSet *)((char *)fRawData + fRawData->fScriptSets); - } } SpoofData::~SpoofData() { - utrie2_close(fAnyCaseTrie); - fAnyCaseTrie = NULL; - utrie2_close(fLowerCaseTrie); - fLowerCaseTrie = NULL; if (fDataOwned) { uprv_free(fRawData); } @@ -708,6 +725,78 @@ void *SpoofData::reserveSpace(int32_t numBytes, UErrorCode &status) { return (char *)fRawData + returnOffset; } +int32_t SpoofData::serialize(void *buf, int32_t capacity, UErrorCode &status) const { + int32_t dataSize = fRawData->fLength; + if (capacity < dataSize) { + status = U_BUFFER_OVERFLOW_ERROR; + return dataSize; + } + uprv_memcpy(buf, fRawData, dataSize); + return dataSize; +} + +int32_t SpoofData::size() const { + return fRawData->fLength; +} + +//------------------------------- +// +// Front-end APIs for SpoofData +// +//------------------------------- + +int32_t SpoofData::confusableLookup(UChar32 inChar, UnicodeString &dest) const { + // Perform a binary search. + // [lo, hi), i.e lo is inclusive, hi is exclusive. + // The result after the loop will be in lo. + int32_t lo = 0; + int32_t hi = length(); + do { + int32_t mid = (lo + hi) / 2; + if (codePointAt(mid) > inChar) { + hi = mid; + } else if (codePointAt(mid) < inChar) { + lo = mid; + } else { + // Found result. Break early. + lo = mid; + break; + } + } while (hi - lo > 1); + + // Did we find an entry? If not, the char maps to itself. + if (codePointAt(lo) != inChar) { + dest.append(inChar); + return 1; + } + + // Add the element to the string builder and return. + return appendValueTo(lo, dest); +} + +int32_t SpoofData::length() const { + return fRawData->fCFUKeysSize; +} + +UChar32 SpoofData::codePointAt(int32_t index) const { + return ConfusableDataUtils::keyToCodePoint(fCFUKeys[index]); +} + +int32_t SpoofData::appendValueTo(int32_t index, UnicodeString& dest) const { + int32_t stringLength = ConfusableDataUtils::keyToLength(fCFUKeys[index]); + + // Value is either a char (for strings of length 1) or + // an index into the string table (for longer strings) + uint16_t value = fCFUValues[index]; + if (stringLength == 1) { + dest.append((UChar)value); + } else { + dest.append(fCFUStrings + value, stringLength); + } + + return stringLength; +} + U_NAMESPACE_END @@ -739,7 +828,10 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou pInfo->dataFormat[1]==0x66 && pInfo->dataFormat[2]==0x75 && pInfo->dataFormat[3]==0x20 && - pInfo->formatVersion[0]==1 )) { + pInfo->formatVersion[0]==USPOOF_CONFUSABLE_DATA_FORMAT_VERSION && + pInfo->formatVersion[1]==0 && + pInfo->formatVersion[2]==0 && + pInfo->formatVersion[3]==0 )) { udata_printError(ds, "uspoof_swap(): data format %02x.%02x.%02x.%02x " "(format version %02x %02x %02x %02x) is not recognized\n", pInfo->dataFormat[0], pInfo->dataFormat[1], @@ -828,26 +920,6 @@ uspoof_swap(const UDataSwapper *ds, const void *inData, int32_t length, void *ou sectionLength = ds->readUInt32(spoofDH->fCFUStringTableLen) * 2; ds->swapArray16(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - // String Lengths Section - sectionStart = ds->readUInt32(spoofDH->fCFUStringLengths); - sectionLength = ds->readUInt32(spoofDH->fCFUStringLengthsSize) * 4; - ds->swapArray16(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Any Case Trie - sectionStart = ds->readUInt32(spoofDH->fAnyCaseTrie); - sectionLength = ds->readUInt32(spoofDH->fAnyCaseTrieLength); - utrie2_swap(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Lower Case Trie - sectionStart = ds->readUInt32(spoofDH->fLowerCaseTrie); - sectionLength = ds->readUInt32(spoofDH->fLowerCaseTrieLength); - utrie2_swap(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - - // Script Sets. The data is an array of int32_t - sectionStart = ds->readUInt32(spoofDH->fScriptSets); - sectionLength = ds->readUInt32(spoofDH->fScriptSetsLength) * sizeof(ScriptSet); - ds->swapArray32(ds, inBytes+sectionStart, sectionLength, outBytes+sectionStart, status); - // And, last, swap the header itself. // int32_t fMagic // swap this // uint8_t fFormatVersion[4] // Do not swap this, just copy diff --git a/deps/icu-small/source/i18n/uspoof_impl.h b/deps/icu-small/source/i18n/uspoof_impl.h index 44f6b5c9439053..62480e39e89791 100644 --- a/deps/icu-small/source/i18n/uspoof_impl.h +++ b/deps/icu-small/source/i18n/uspoof_impl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* *************************************************************************** * Copyright (C) 2008-2013, International Business Machines Corporation @@ -13,6 +15,7 @@ #ifndef USPOOFIM_H #define USPOOFIM_H +#include "uassert.h" #include "unicode/utypes.h" #include "unicode/uspoof.h" #include "unicode/uscript.h" @@ -37,11 +40,13 @@ U_NAMESPACE_BEGIN // Magic number for sanity checking spoof data. #define USPOOF_MAGIC 0x3845fdef -class IdentifierInfo; +// Magic number for sanity checking spoof checkers. +#define USPOOF_CHECK_MAGIC 0x2734ecde + class ScriptSet; class SpoofData; struct SpoofDataHeader; -struct SpoofStringLengthsElement; +class ConfusableDataUtils; /** * Class SpoofImpl corresponds directly to the plain C API opaque type @@ -49,25 +54,20 @@ struct SpoofStringLengthsElement; */ class SpoofImpl : public UObject { public: - SpoofImpl(SpoofData *data, UErrorCode &status); - SpoofImpl(); - virtual ~SpoofImpl(); + SpoofImpl(SpoofData *data, UErrorCode& status); + SpoofImpl(UErrorCode& status); + SpoofImpl(); + void construct(UErrorCode& status); + virtual ~SpoofImpl(); /** Copy constructor, used by the user level uspoof_clone() function. */ SpoofImpl(const SpoofImpl &src, UErrorCode &status); + USpoofChecker *asUSpoofChecker(); static SpoofImpl *validateThis(USpoofChecker *sc, UErrorCode &status); static const SpoofImpl *validateThis(const USpoofChecker *sc, UErrorCode &status); - /** Get the confusable skeleton transform for a single code point. - * The result is a string with a length between 1 and 18. - * @param tableMask bit flag specifying which confusable table to use. - * One of USPOOF_SL_TABLE_FLAG, USPOOF_MA_TABLE_FLAG, etc. - * @return The length in UTF-16 code units of the substition string. - */ - int32_t confusableLookup(UChar32 inChar, int32_t tableMask, UnicodeString &destBuf) const; - /** Set and Get AllowedLocales, implementations of the corresponding API */ void setAllowedLocales(const char *localesList, UErrorCode &status); const char * getAllowedLocales(UErrorCode &status); @@ -76,26 +76,19 @@ class SpoofImpl : public UObject { // the specified locale. Part of the implementation of setAllowedLocales. void addScriptChars(const char *locale, UnicodeSet *allowedChars, UErrorCode &status); + // Functions implementing the features of UTS 39 section 5. + static void getAugmentedScriptSet(UChar32 codePoint, ScriptSet& result, UErrorCode& status); + void getResolvedScriptSet(const UnicodeString& input, ScriptSet& result, UErrorCode& status) const; + void getResolvedScriptSetWithout(const UnicodeString& input, UScriptCode script, ScriptSet& result, UErrorCode& status) const; + void getNumerics(const UnicodeString& input, UnicodeSet& result, UErrorCode& status) const; + URestrictionLevel getRestrictionLevel(const UnicodeString& input, UErrorCode& status) const; /** parse a hex number. Untility used by the builders. */ static UChar32 ScanHex(const UChar *s, int32_t start, int32_t limit, UErrorCode &status); - // Implementation for Whole Script tests. - // Return the test bit flag to be ORed into the eventual user return value - // if a Spoof opportunity is detected. - void wholeScriptCheck( - const UnicodeString &text, ScriptSet *result, UErrorCode &status) const; - static UClassID U_EXPORT2 getStaticClassID(void); virtual UClassID getDynamicClassID(void) const; - // IdentifierInfo Cache. IdentifierInfo objects are somewhat expensive to create. - // Maintain a one-element cache, which is sufficient to avoid repeatedly - // creating new ones unless we get multi-thread concurrency in spoof - // check operations, which should be statistically uncommon. - IdentifierInfo *getIdentifierInfo(UErrorCode &status) const; - void releaseIdentifierInfo(IdentifierInfo *idInfo) const; - // // Data Members // @@ -110,14 +103,36 @@ class SpoofImpl : public UObject { const char *fAllowedLocales; // The list of allowed locales. URestrictionLevel fRestrictionLevel; // The maximum restriction level for an acceptable identifier. - - IdentifierInfo *fCachedIdentifierInfo; // Do not use directly. See getIdentifierInfo().:w }; +/** + * Class CheckResult corresponds directly to the plain C API opaque type + * USpoofCheckResult. One can be cast to the other. + */ +class CheckResult : public UObject { +public: + CheckResult(); + virtual ~CheckResult(); + + USpoofCheckResult *asUSpoofCheckResult(); + static CheckResult *validateThis(USpoofCheckResult *ptr, UErrorCode &status); + static const CheckResult *validateThis(const USpoofCheckResult *ptr, UErrorCode &status); + + void clear(); + + // Used to convert this CheckResult to the older int32_t return value API + int32_t toCombinedBitmask(int32_t expectedChecks); + + // Data Members + int32_t fMagic; // Internal sanity check. + int32_t fChecks; // Bit vector of checks that were failed. + UnicodeSet fNumerics; // Set of numerics found in the string. + URestrictionLevel fRestrictionLevel; // The restriction level of the string. +}; // -// Confusable Mappings Data Structures +// Confusable Mappings Data Structures, version 2.0 // // For the confusable data, we are essentially implementing a map, // key: a code point @@ -125,14 +140,7 @@ class SpoofImpl : public UObject { // // The keys are stored as a sorted array of 32 bit ints. // bits 0-23 a code point value -// bits 24-31 flags -// 24: 1 if entry applies to SL table -// 25: 1 if entry applies to SA table -// 26: 1 if entry applies to ML table -// 27: 1 if entry applies to MA table -// 28: 1 if there are multiple entries for this code point. -// 29-30: length of value string, in UChars. -// values are (1, 2, 3, other) +// bits 24-31 length of value string, in UChars (between 1 and 256 UChars). // The key table is sorted in ascending code point order. (not on the // 32 bit int value, the flag bits do not participate in the sorting.) // @@ -146,39 +154,37 @@ class SpoofImpl : public UObject { // The strings table contains all of the value strings (those of length two or greater) // concatentated together into one long UChar (UTF-16) array. // -// The array is arranged by length of the strings - all strings of the same length -// are stored together. The sections are ordered by length of the strings - -// all two char strings first, followed by all of the three Char strings, etc. -// // There is no nul character or other mark between adjacent strings. // -// String Lengths table -// The length of strings from 1 to 3 is flagged in the key table. -// For strings of length 4 or longer, the string length table provides a -// mapping between an index into the string table and the corresponding length. -// Strings of these lengths are rare, so lookup time is not an issue. -// Each entry consists of -// uint16_t index of the _last_ string with this length -// uint16_t the length +//---------------------------------------------------------------------------- // +// Changes from format version 1 to format version 2: +// 1) Removal of the whole-script confusable data tables. +// 2) Removal of the SL/SA/ML/MA and multi-table flags in the key bitmask. +// 3) Expansion of string length value in the key bitmask from 2 bits to 8 bits. +// 4) Removal of the string lengths table since 8 bits is sufficient for the +// lengths of all entries in confusables.txt. -// Flag bits in the Key entries -#define USPOOF_SL_TABLE_FLAG (1<<24) -#define USPOOF_SA_TABLE_FLAG (1<<25) -#define USPOOF_ML_TABLE_FLAG (1<<26) -#define USPOOF_MA_TABLE_FLAG (1<<27) -#define USPOOF_KEY_MULTIPLE_VALUES (1<<28) -#define USPOOF_KEY_LENGTH_SHIFT 29 -#define USPOOF_KEY_LENGTH_FIELD(x) (((x)>>29) & 3) -struct SpoofStringLengthsElement { - uint16_t fLastString; // index in string table of last string with this length - uint16_t fStrLength; // Length of strings +// Internal functions for manipulating confusable data table keys +#define USPOOF_CONFUSABLE_DATA_FORMAT_VERSION 2 // version for ICU 58 +class ConfusableDataUtils { +public: + inline static UChar32 keyToCodePoint(int32_t key) { + return key & 0x00ffffff; + } + inline static int32_t keyToLength(int32_t key) { + return ((key & 0xff000000) >> 24) + 1; + } + inline static int32_t codePointAndLengthToKey(UChar32 codePoint, int32_t length) { + U_ASSERT((codePoint & 0x00ffffff) == codePoint); + U_ASSERT(length <= 256); + return codePoint | ((length - 1) << 24); + } }; - //------------------------------------------------------------------------------------- // // SpoofData @@ -195,7 +201,9 @@ struct SpoofStringLengthsElement { //--------------------------------------------------------------------------------------- class SpoofData: public UMemory { public: - static SpoofData *getDefault(UErrorCode &status); // Load standard ICU spoof data. + static SpoofData* getDefault(UErrorCode &status); // Get standard ICU spoof data. + static void releaseDefault(); // Cleanup reference to default spoof data. + SpoofData(UErrorCode &status); // Create new spoof data wrapper. // Only used when building new data from rules. @@ -210,7 +218,8 @@ class SpoofData: public UMemory { // Check raw Spoof Data Version compatibility. // Return TRUE it looks good. - static UBool validateDataVersion(const SpoofDataHeader *rawData, UErrorCode &status); + UBool validateDataVersion(UErrorCode &status) const; + ~SpoofData(); // Destructor not normally used. // Use removeReference() instead. // Reference Counting functions. @@ -220,6 +229,35 @@ class SpoofData: public UMemory { SpoofData *addReference(); void removeReference(); + // Reset all fields to an initial state. + // Called from the top of all constructors. + void reset(); + + // Copy this instance's raw data buffer to the specified address. + int32_t serialize(void *buf, int32_t capacity, UErrorCode &status) const; + + // Get the total number of bytes of data backed by this SpoofData. + // Not to be confused with length, which returns the number of confusable entries. + int32_t size() const; + + // Get the confusable skeleton transform for a single code point. + // The result is a string with a length between 1 and 18 as of Unicode 9. + // This is the main public endpoint for this class. + // @return The length in UTF-16 code units of the substition string. + int32_t confusableLookup(UChar32 inChar, UnicodeString &dest) const; + + // Get the number of confusable entries in this SpoofData. + int32_t length() const; + + // Get the code point (key) at the specified index. + UChar32 codePointAt(int32_t index) const; + + // Get the confusable skeleton (value) at the specified index. + // Append it to the specified UnicodeString&. + // @return The length in UTF-16 code units of the skeleton string. + int32_t appendValueTo(int32_t index, UnicodeString& dest) const; + + private: // Reserve space in the raw data. For use by builder when putting together a // new set of data. Init the new storage to zero, to prevent inconsistent // results if it is not all otherwise set by the requester. @@ -230,10 +268,6 @@ class SpoofData: public UMemory { // initialize the pointers from this object to the raw data. void initPtrs(UErrorCode &status); - // Reset all fields to an initial state. - // Called from the top of all constructors. - void reset(); - SpoofDataHeader *fRawData; // Ptr to the raw memory-mapped data UBool fDataOwned; // True if the raw data is owned, and needs // to be deleted when refcount goes to zero. @@ -247,15 +281,10 @@ class SpoofData: public UMemory { // Confusable data int32_t *fCFUKeys; uint16_t *fCFUValues; - SpoofStringLengthsElement *fCFUStringLengths; UChar *fCFUStrings; - // Whole Script Confusable Data - UTrie2 *fAnyCaseTrie; - UTrie2 *fLowerCaseTrie; - ScriptSet *fScriptSets; - }; - + friend class ConfusabledataBuilder; +}; //--------------------------------------------------------------------------------------- // @@ -284,47 +313,11 @@ struct SpoofDataHeader { int32_t fCFUStringTable; // byte offset of String table int32_t fCFUStringTableLen; // length of string table (in 16 bit UChars) - int32_t fCFUStringLengths; // byte offset to String Lengths table - int32_t fCFUStringLengthsSize; // number of entries in lengths table. (2 x 16 bits each) - - - // The following sections are for data from confusablesWholeScript.txt - - int32_t fAnyCaseTrie; // byte offset to the serialized Any Case Trie - int32_t fAnyCaseTrieLength; // Length (bytes) of the serialized Any Case Trie - - int32_t fLowerCaseTrie; // byte offset to the serialized Lower Case Trie - int32_t fLowerCaseTrieLength; // Length (bytes) of the serialized Lower Case Trie - - int32_t fScriptSets; // byte offset to array of ScriptSets - int32_t fScriptSetsLength; // Number of ScriptSets (24 bytes each) - - // The following sections are for data from xidmodifications.txt - int32_t unused[15]; // Padding, Room for Expansion +}; - }; - - - - -// -// Structure for the Whole Script Confusable Data -// See Unicode UAX-39, Unicode Security Mechanisms, for a description of the -// Whole Script confusable data -// -// The data provides mappings from code points to a set of scripts -// that contain characters that might be confused with the code point. -// There are two mappings, one for lower case only, and one for characters -// of any case. -// -// The actual data consists of a utrie2 to map from a code point to an offset, -// and an array of UScriptSets (essentially bit maps) that is indexed -// by the offsets obtained from the Trie. -// -// U_NAMESPACE_END diff --git a/deps/icu-small/source/i18n/uspoof_wsconf.cpp b/deps/icu-small/source/i18n/uspoof_wsconf.cpp deleted file mode 100644 index ad73ed690cd3fc..00000000000000 --- a/deps/icu-small/source/i18n/uspoof_wsconf.cpp +++ /dev/null @@ -1,435 +0,0 @@ -/* -****************************************************************************** -* -* Copyright (C) 2008-2013, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: uspoof_wsconf.cpp -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009Jan05 (refactoring earlier files) -* created by: Andy Heninger -* -* Internal functions for compililing Whole Script confusable source data -* into its binary (runtime) form. The binary data format is described -* in uspoof_impl.h -*/ - -#include "unicode/utypes.h" -#include "unicode/uspoof.h" - -#if !UCONFIG_NO_NORMALIZATION - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "unicode/unorm.h" -#include "unicode/uregex.h" -#include "unicode/ustring.h" -#include "cmemory.h" -#include "scriptset.h" -#include "uspoof_impl.h" -#include "uhash.h" -#include "uvector.h" -#include "uassert.h" -#include "uspoof_wsconf.h" - -U_NAMESPACE_USE - - -// Regular expression for parsing a line from the Unicode file confusablesWholeScript.txt -// Example Lines: -// 006F ; Latn; Deva; A # (o) LATIN SMALL LETTER O -// 0048..0049 ; Latn; Grek; A # [2] (H..I) LATIN CAPITAL LETTER H..LATIN CAPITAL LETTER I -// | | | | -// | | | |---- Which table, Any Case or Lower Case (A or L) -// | | |----------Target script. We need this. -// | |----------------Src script. Should match the script of the source -// | code points. Beyond checking that, we don't keep it. -// |--------------------------------Source code points or range. -// -// The expression will match _all_ lines, including erroneous lines. -// The result of the parse is returned via the contents of the (match) groups. -static const char *parseExp = - "(?m)" // Multi-line mode - "^([ \\t]*(?:#.*?)?)$" // A blank or comment line. Matches Group 1. - "|^(?:" // OR - "\\s*([0-9A-F]{4,})(?:..([0-9A-F]{4,}))?\\s*;" // Code point range. Groups 2 and 3. - "\\s*([A-Za-z]+)\\s*;" // The source script. Group 4. - "\\s*([A-Za-z]+)\\s*;" // The target script. Group 5. - "\\s*(?:(A)|(L))" // The table A or L. Group 6 or 7 - "[ \\t]*(?:#.*?)?" // Trailing commment - ")$|" // OR - "^(.*?)$"; // An error line. Group 8. - // Any line not matching the preceding - // parts of the expression.will match - // this, and thus be flagged as an error - - -// Extract a regular expression match group into a char * string. -// The group must contain only invariant characters. -// Used for script names -// -static void extractGroup( - URegularExpression *e, int32_t group, char *destBuf, int32_t destCapacity, UErrorCode &status) { - - UChar ubuf[50]; - ubuf[0] = 0; - destBuf[0] = 0; - int32_t len = uregex_group(e, group, ubuf, 50, &status); - if (U_FAILURE(status) || len == -1 || len >= destCapacity) { - return; - } - UnicodeString s(FALSE, ubuf, len); // Aliasing constructor - s.extract(0, len, destBuf, destCapacity, US_INV); -} - - - -U_NAMESPACE_BEGIN - -// Build the Whole Script Confusable data -// -// TODO: Reorganize. Either get rid of the WSConfusableDataBuilder class, -// because everything is local to this one build function anyhow, -// OR -// break this function into more reasonably sized pieces, with -// state in WSConfusableDataBuilder. -// -void buildWSConfusableData(SpoofImpl *spImpl, const char * confusablesWS, - int32_t confusablesWSLen, UParseError *pe, UErrorCode &status) -{ - if (U_FAILURE(status)) { - return; - } - URegularExpression *parseRegexp = NULL; - int32_t inputLen = 0; - UChar *input = NULL; - int32_t lineNum = 0; - - UVector *scriptSets = NULL; - uint32_t rtScriptSetsCount = 2; - - UTrie2 *anyCaseTrie = NULL; - UTrie2 *lowerCaseTrie = NULL; - - anyCaseTrie = utrie2_open(0, 0, &status); - lowerCaseTrie = utrie2_open(0, 0, &status); - - UnicodeString pattern(parseExp, -1, US_INV); - - // The scriptSets vector provides a mapping from TRIE values to the set of scripts. - // - // Reserved TRIE values: - // 0: Code point has no whole script confusables. - // 1: Code point is of script Common or Inherited. - // These code points do not participate in whole script confusable detection. - // (This is logically equivalent to saying that they contain confusables in - // all scripts) - // - // Because Trie values are indexes into the ScriptSets vector, pre-fill - // vector positions 0 and 1 to avoid conflicts with the reserved values. - - scriptSets = new UVector(status); - if (scriptSets == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - scriptSets->addElement((void *)NULL, status); - scriptSets->addElement((void *)NULL, status); - - // Convert the user input data from UTF-8 to UChar (UTF-16) - u_strFromUTF8(NULL, 0, &inputLen, confusablesWS, confusablesWSLen, &status); - if (status != U_BUFFER_OVERFLOW_ERROR) { - goto cleanup; - } - status = U_ZERO_ERROR; - input = static_cast(uprv_malloc((inputLen+1) * sizeof(UChar))); - if (input == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - u_strFromUTF8(input, inputLen+1, NULL, confusablesWS, confusablesWSLen, &status); - - parseRegexp = uregex_open(pattern.getBuffer(), pattern.length(), 0, NULL, &status); - - // Zap any Byte Order Mark at the start of input. Changing it to a space is benign - // given the syntax of the input. - if (*input == 0xfeff) { - *input = 0x20; - } - - // Parse the input, one line per iteration of this loop. - uregex_setText(parseRegexp, input, inputLen, &status); - while (uregex_findNext(parseRegexp, &status)) { - lineNum++; - if (uregex_start(parseRegexp, 1, &status) >= 0) { - // this was a blank or comment line. - continue; - } - if (uregex_start(parseRegexp, 8, &status) >= 0) { - // input file syntax error. - status = U_PARSE_ERROR; - goto cleanup; - } - if (U_FAILURE(status)) { - goto cleanup; - } - - // Pick up the start and optional range end code points from the parsed line. - UChar32 startCodePoint = SpoofImpl::ScanHex( - input, uregex_start(parseRegexp, 2, &status), uregex_end(parseRegexp, 2, &status), status); - UChar32 endCodePoint = startCodePoint; - if (uregex_start(parseRegexp, 3, &status) >=0) { - endCodePoint = SpoofImpl::ScanHex( - input, uregex_start(parseRegexp, 3, &status), uregex_end(parseRegexp, 3, &status), status); - } - - // Extract the two script names from the source line. We need these in an 8 bit - // default encoding (will be EBCDIC on IBM mainframes) in order to pass them on - // to the ICU u_getPropertyValueEnum() function. Ugh. - char srcScriptName[20]; - char targScriptName[20]; - extractGroup(parseRegexp, 4, srcScriptName, sizeof(srcScriptName), status); - extractGroup(parseRegexp, 5, targScriptName, sizeof(targScriptName), status); - UScriptCode srcScript = - static_cast(u_getPropertyValueEnum(UCHAR_SCRIPT, srcScriptName)); - UScriptCode targScript = - static_cast(u_getPropertyValueEnum(UCHAR_SCRIPT, targScriptName)); - if (U_FAILURE(status)) { - goto cleanup; - } - if (srcScript == USCRIPT_INVALID_CODE || targScript == USCRIPT_INVALID_CODE) { - status = U_INVALID_FORMAT_ERROR; - goto cleanup; - } - - // select the table - (A) any case or (L) lower case only - UTrie2 *table = anyCaseTrie; - if (uregex_start(parseRegexp, 7, &status) >= 0) { - table = lowerCaseTrie; - } - - // Build the set of scripts containing confusable characters for - // the code point(s) specified in this input line. - // Sanity check that the script of the source code point is the same - // as the source script indicated in the input file. Failure of this check is - // an error in the input file. - // Include the source script in the set (needed for Mixed Script Confusable detection). - // - UChar32 cp; - for (cp=startCodePoint; cp<=endCodePoint; cp++) { - int32_t setIndex = utrie2_get32(table, cp); - BuilderScriptSet *bsset = NULL; - if (setIndex > 0) { - U_ASSERT(setIndex < scriptSets->size()); - bsset = static_cast(scriptSets->elementAt(setIndex)); - } else { - bsset = new BuilderScriptSet(); - if (bsset == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - bsset->codePoint = cp; - bsset->trie = table; - bsset->sset = new ScriptSet(); - setIndex = scriptSets->size(); - bsset->index = setIndex; - bsset->rindex = 0; - if (bsset->sset == NULL) { - status = U_MEMORY_ALLOCATION_ERROR; - goto cleanup; - } - scriptSets->addElement(bsset, status); - utrie2_set32(table, cp, setIndex, &status); - } - bsset->sset->set(targScript, status); - bsset->sset->set(srcScript, status); - - if (U_FAILURE(status)) { - goto cleanup; - } - UScriptCode cpScript = uscript_getScript(cp, &status); - if (cpScript != srcScript) { - status = U_INVALID_FORMAT_ERROR; - goto cleanup; - } - } - } - - // Eliminate duplicate script sets. At this point we have a separate - // script set for every code point that had data in the input file. - // - // We eliminate underlying ScriptSet objects, not the BuildScriptSets that wrap them - // - // printf("Number of scriptSets: %d\n", scriptSets->size()); - { - int32_t duplicateCount = 0; - rtScriptSetsCount = 2; - for (int32_t outeri=2; outerisize(); outeri++) { - BuilderScriptSet *outerSet = static_cast(scriptSets->elementAt(outeri)); - if (outerSet->index != static_cast(outeri)) { - // This set was already identified as a duplicate. - // It will not be allocated a position in the runtime array of ScriptSets. - continue; - } - outerSet->rindex = rtScriptSetsCount++; - for (int32_t inneri=outeri+1; innerisize(); inneri++) { - BuilderScriptSet *innerSet = static_cast(scriptSets->elementAt(inneri)); - if (*(outerSet->sset) == *(innerSet->sset) && outerSet->sset != innerSet->sset) { - delete innerSet->sset; - innerSet->scriptSetOwned = FALSE; - innerSet->sset = outerSet->sset; - innerSet->index = outeri; - innerSet->rindex = outerSet->rindex; - duplicateCount++; - } - // But this doesn't get all. We need to fix the TRIE. - } - } - // printf("Number of distinct script sets: %d\n", rtScriptSetsCount); - } - - - - // Update the Trie values to be reflect the run time script indexes (after duplicate merging). - // (Trie Values 0 and 1 are reserved, and the corresponding slots in scriptSets - // are unused, which is why the loop index starts at 2.) - { - for (int32_t i=2; isize(); i++) { - BuilderScriptSet *bSet = static_cast(scriptSets->elementAt(i)); - if (bSet->rindex != (uint32_t)i) { - utrie2_set32(bSet->trie, bSet->codePoint, bSet->rindex, &status); - } - } - } - - // For code points with script==Common or script==Inherited, - // Set the reserved value of 1 into both Tries. These characters do not participate - // in Whole Script Confusable detection; this reserved value is the means - // by which they are detected. - { - UnicodeSet ignoreSet; - ignoreSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_COMMON, status); - UnicodeSet inheritedSet; - inheritedSet.applyIntPropertyValue(UCHAR_SCRIPT, USCRIPT_INHERITED, status); - ignoreSet.addAll(inheritedSet); - for (int32_t rn=0; rnfSpoofData->fRawData->fAnyCaseTrie = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength = size; - spImpl->fSpoofData->fAnyCaseTrie = anyCaseTrie; - void *where = spImpl->fSpoofData->reserveSpace(size, status); - utrie2_serialize(anyCaseTrie, where, size, &status); - - utrie2_freeze(lowerCaseTrie, UTRIE2_16_VALUE_BITS, &status); - size = utrie2_serialize(lowerCaseTrie, NULL, 0, &status); - // printf("Lower case Trie size: %d\n", size); - if (status != U_BUFFER_OVERFLOW_ERROR) { - goto cleanup; - } - status = U_ZERO_ERROR; - spImpl->fSpoofData->fRawData->fLowerCaseTrie = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fLowerCaseTrieLength = size; - spImpl->fSpoofData->fLowerCaseTrie = lowerCaseTrie; - where = spImpl->fSpoofData->reserveSpace(size, status); - utrie2_serialize(lowerCaseTrie, where, size, &status); - - spImpl->fSpoofData->fRawData->fScriptSets = spImpl->fSpoofData->fMemLimit; - spImpl->fSpoofData->fRawData->fScriptSetsLength = rtScriptSetsCount; - ScriptSet *rtScriptSets = static_cast - (spImpl->fSpoofData->reserveSpace(rtScriptSetsCount * sizeof(ScriptSet), status)); - uint32_t rindex = 2; - for (int32_t i=2; isize(); i++) { - BuilderScriptSet *bSet = static_cast(scriptSets->elementAt(i)); - if (bSet->rindex < rindex) { - // We have already copied this script set to the serialized data. - continue; - } - U_ASSERT(rindex == bSet->rindex); - rtScriptSets[rindex] = *bSet->sset; // Assignment of a ScriptSet just copies the bits. - rindex++; - } - } - - // Open new utrie2s from the serialized data. We don't want to keep the ones - // we just built because we would then have two copies of the data, one internal to - // the utries that we have already constructed, and one in the serialized data area. - // An alternative would be to not pre-serialize the Trie data, but that makes the - // spoof detector data different, depending on how the detector was constructed. - // It's simpler to keep the data always the same. - - spImpl->fSpoofData->fAnyCaseTrie = utrie2_openFromSerialized( - UTRIE2_16_VALUE_BITS, - (const char *)spImpl->fSpoofData->fRawData + spImpl->fSpoofData->fRawData->fAnyCaseTrie, - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength, - NULL, - &status); - - spImpl->fSpoofData->fLowerCaseTrie = utrie2_openFromSerialized( - UTRIE2_16_VALUE_BITS, - (const char *)spImpl->fSpoofData->fRawData + spImpl->fSpoofData->fRawData->fLowerCaseTrie, - spImpl->fSpoofData->fRawData->fAnyCaseTrieLength, - NULL, - &status); - - - -cleanup: - if (U_FAILURE(status)) { - pe->line = lineNum; - } - uregex_close(parseRegexp); - uprv_free(input); - - int32_t i; - if (scriptSets != NULL) { - for (i=0; isize(); i++) { - BuilderScriptSet *bsset = static_cast(scriptSets->elementAt(i)); - delete bsset; - } - delete scriptSets; - } - utrie2_close(anyCaseTrie); - utrie2_close(lowerCaseTrie); - return; -} - -U_NAMESPACE_END - - - -BuilderScriptSet::BuilderScriptSet() { - codePoint = -1; - trie = NULL; - sset = NULL; - index = 0; - rindex = 0; - scriptSetOwned = TRUE; -} - -BuilderScriptSet::~BuilderScriptSet() { - if (scriptSetOwned) { - delete sset; - } -} - -#endif -#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS diff --git a/deps/icu-small/source/i18n/uspoof_wsconf.h b/deps/icu-small/source/i18n/uspoof_wsconf.h deleted file mode 100644 index 5c0e6111a7a45d..00000000000000 --- a/deps/icu-small/source/i18n/uspoof_wsconf.h +++ /dev/null @@ -1,70 +0,0 @@ -/* -****************************************************************************** -* -* Copyright (C) 2008-2012, International Business Machines -* Corporation and others. All Rights Reserved. -* -****************************************************************************** -* file name: uspoof_buildwsconf.h -* encoding: US-ASCII -* tab size: 8 (not used) -* indentation:4 -* -* created on: 2009Jan19 -* created by: Andy Heninger -* -* Internal classes and functions -* for compiling whole script confusable data into its binary (runtime) form. -*/ - -#ifndef __USPOOF_BUILDWSCONF_H__ -#define __USPOOF_BUILDWSCONF_H__ - -#include "unicode/utypes.h" - -#if !UCONFIG_NO_NORMALIZATION - -#if !UCONFIG_NO_REGULAR_EXPRESSIONS - -#include "uspoof_impl.h" -#include "utrie2.h" - - -U_NAMESPACE_BEGIN - -// -// class BuilderScriptSet. Represents the set of scripts (Script Codes) -// containing characters that are confusable with one specific -// code point. -// - -class BuilderScriptSet: public UMemory { - public: - UChar32 codePoint; // The source code point. - UTrie2 *trie; // Any-case or Lower-case Trie. - // These Trie tables are the final result of the - // build. This flag indicates which of the two - // this set of data is for. - ScriptSet *sset; // The set of scripts itself. - - // Vectors of all B - uint32_t index; // Index of this set in the Build Time vector - // of script sets. - uint32_t rindex; // Index of this set in the final (runtime) - // array of sets. - UBool scriptSetOwned; // True if this BuilderScriptSet owns (should delete) - // its underlying sset. - - BuilderScriptSet(); - ~BuilderScriptSet(); -}; - - -void buildWSConfusableData(SpoofImpl *spImpl, const char * confusablesWS, - int32_t confusablesWSLen, UParseError *pe, UErrorCode &status); - -U_NAMESPACE_END - -#endif // !UCONFIG_NO_REGULAR_EXPRESSIONS -#endif // !UCONFIG_NO_NORMALIZATION -#endif diff --git a/deps/icu-small/source/i18n/usrchimp.h b/deps/icu-small/source/i18n/usrchimp.h index 898e38a20f9e72..e6693d16b7ac51 100644 --- a/deps/icu-small/source/i18n/usrchimp.h +++ b/deps/icu-small/source/i18n/usrchimp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2015 IBM and others. All rights reserved. diff --git a/deps/icu-small/source/i18n/utf16collationiterator.cpp b/deps/icu-small/source/i18n/utf16collationiterator.cpp index 559ea91ea88492..733729fae79ece 100644 --- a/deps/icu-small/source/i18n/utf16collationiterator.cpp +++ b/deps/icu-small/source/i18n/utf16collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf16collationiterator.h b/deps/icu-small/source/i18n/utf16collationiterator.h index 16de2078ed0b3f..505ab810d37921 100644 --- a/deps/icu-small/source/i18n/utf16collationiterator.h +++ b/deps/icu-small/source/i18n/utf16collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf8collationiterator.cpp b/deps/icu-small/source/i18n/utf8collationiterator.cpp index ddb753f6aefe66..0a0205e7b31cc2 100644 --- a/deps/icu-small/source/i18n/utf8collationiterator.cpp +++ b/deps/icu-small/source/i18n/utf8collationiterator.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2014, International Business Machines diff --git a/deps/icu-small/source/i18n/utf8collationiterator.h b/deps/icu-small/source/i18n/utf8collationiterator.h index bb0fc1179dc1eb..8deb5ea395b7af 100644 --- a/deps/icu-small/source/i18n/utf8collationiterator.h +++ b/deps/icu-small/source/i18n/utf8collationiterator.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2012-2016, International Business Machines diff --git a/deps/icu-small/source/i18n/utmscale.c b/deps/icu-small/source/i18n/utmscale.c index 94fb7525fd39a5..6868b9db2261a1 100644 --- a/deps/icu-small/source/i18n/utmscale.c +++ b/deps/icu-small/source/i18n/utmscale.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2004-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/utrans.cpp b/deps/icu-small/source/i18n/utrans.cpp index 91d9f1c8e67313..aed817ce2636e7 100644 --- a/deps/icu-small/source/i18n/utrans.cpp +++ b/deps/icu-small/source/i18n/utrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1997-2009,2014 International Business Machines diff --git a/deps/icu-small/source/i18n/valueformatter.cpp b/deps/icu-small/source/i18n/valueformatter.cpp index d7870d1041df8d..45b08f60b653ac 100644 --- a/deps/icu-small/source/i18n/valueformatter.cpp +++ b/deps/icu-small/source/i18n/valueformatter.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/valueformatter.h b/deps/icu-small/source/i18n/valueformatter.h index 42ccd212077670..da2dd1b33787e5 100644 --- a/deps/icu-small/source/i18n/valueformatter.h +++ b/deps/icu-small/source/i18n/valueformatter.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/visibledigits.cpp b/deps/icu-small/source/i18n/visibledigits.cpp index a6cbd0fdce276e..1fea3504dfeee8 100644 --- a/deps/icu-small/source/i18n/visibledigits.cpp +++ b/deps/icu-small/source/i18n/visibledigits.cpp @@ -1,5 +1,7 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* - * Copyright (C) 2015, International Business Machines + * Copyright (C) 2016, International Business Machines * Corporation and others. All Rights Reserved. * * file name: visibledigits.cpp @@ -84,8 +86,11 @@ double VisibleDigits::computeAbsDoubleValue() const { } // stack allocate a decNumber to hold MAX_DBL_DIGITS+3 significant digits - char rawNumber[sizeof(decNumber) + MAX_DBL_DIGITS+3]; - decNumber *numberPtr = (decNumber *) rawNumber; + struct { + decNumber decNum; + char digits[MAX_DBL_DIGITS+3]; + } decNumberWithStorage; + decNumber *numberPtr = &decNumberWithStorage.decNum; int32_t mostSig = fInterval.getMostSignificantExclusive(); int32_t mostSigNonZero = fExponent + fDigits.length(); @@ -109,15 +114,8 @@ double VisibleDigits::computeAbsDoubleValue() const { char str[MAX_DBL_DIGITS+18]; uprv_decNumberToString(numberPtr, str); U_ASSERT(uprv_strlen(str) < MAX_DBL_DIGITS+18); - char decimalSeparator = DigitList::getStrtodDecimalSeparator(); - if (decimalSeparator != '.') { - char *decimalPt = strchr(str, '.'); - if (decimalPt != NULL) { - *decimalPt = decimalSeparator; - } - } char *unused = NULL; - return uprv_strtod(str, &unused); + return DigitList::decimalStrToDouble(str, &unused); } void VisibleDigits::getFixedDecimal( @@ -165,7 +163,8 @@ void VisibleDigits::getFixedDecimal( // f (decimal digits) // skip over any leading 0's in fraction digits. int32_t idx = -1; - for (; idx >= -v && getDigitByExponent(idx) == 0; --idx); + for (; idx >= -v && getDigitByExponent(idx) == 0; --idx) + ; // Only process up to first 18 non zero fraction digits for decimalDigits // since that is all we can fit into an int64. diff --git a/deps/icu-small/source/i18n/visibledigits.h b/deps/icu-small/source/i18n/visibledigits.h index 9390aadc6bd200..cd18239a56601a 100644 --- a/deps/icu-small/source/i18n/visibledigits.h +++ b/deps/icu-small/source/i18n/visibledigits.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/i18n/vtzone.cpp b/deps/icu-small/source/i18n/vtzone.cpp index 0585ea75ae0fa2..ba5f3bc0d7bde2 100644 --- a/deps/icu-small/source/i18n/vtzone.cpp +++ b/deps/icu-small/source/i18n/vtzone.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/vzone.cpp b/deps/icu-small/source/i18n/vzone.cpp index cd75802a179074..7ee95e4edecd6a 100644 --- a/deps/icu-small/source/i18n/vzone.cpp +++ b/deps/icu-small/source/i18n/vzone.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/vzone.h b/deps/icu-small/source/i18n/vzone.h index f89a5619a67fa8..22a41b4e37b478 100644 --- a/deps/icu-small/source/i18n/vzone.h +++ b/deps/icu-small/source/i18n/vzone.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/windtfmt.cpp b/deps/icu-small/source/i18n/windtfmt.cpp index 8625ea7e3efa4e..20ce338bb4b88a 100644 --- a/deps/icu-small/source/i18n/windtfmt.cpp +++ b/deps/icu-small/source/i18n/windtfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -230,8 +232,8 @@ static const DWORD dfFlags[] = {DATE_LONGDATE, DATE_LONGDATE, DATE_SHORTDATE, DA void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) const { int result; - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; result = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, STACK_BUFFER_SIZE); @@ -239,12 +241,12 @@ void Win32DateFormat::formatDate(const SYSTEMTIME *st, UnicodeString &appendTo) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); GetDateFormatW(fLCID, dfFlags[fDateStyle - kDateOffset], st, NULL, buffer, newLength); } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((const UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); @@ -256,8 +258,8 @@ static const DWORD tfFlags[] = {0, 0, 0, TIME_NOSECONDS}; void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) const { int result; - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; result = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, STACK_BUFFER_SIZE); @@ -265,12 +267,12 @@ void Win32DateFormat::formatTime(const SYSTEMTIME *st, UnicodeString &appendTo) if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetTimeFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); GetDateFormatW(fLCID, tfFlags[fTimeStyle], st, NULL, buffer, newLength); } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((const UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); diff --git a/deps/icu-small/source/i18n/windtfmt.h b/deps/icu-small/source/i18n/windtfmt.h index a286ced2e3ddad..a8221943706ef0 100644 --- a/deps/icu-small/source/i18n/windtfmt.h +++ b/deps/icu-small/source/i18n/windtfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/winnmfmt.cpp b/deps/icu-small/source/i18n/winnmfmt.cpp index 23610732a2e94a..d7e98723bb271d 100644 --- a/deps/icu-small/source/i18n/winnmfmt.cpp +++ b/deps/icu-small/source/i18n/winnmfmt.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2016, International Business Machines @@ -86,10 +88,10 @@ static void getNumberFormat(NUMBERFMTW *fmt, int32_t lcid) GetLocaleInfoA(lcid, LOCALE_SGROUPING, buf, 10); fmt->Grouping = getGrouping(buf); - fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SDECIMAL, fmt->lpDecimalSep, 6); - fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_STHOUSAND, fmt->lpThousandSep, 6); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGNUMBER, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); @@ -113,16 +115,16 @@ static void getCurrencyFormat(CURRENCYFMTW *fmt, int32_t lcid) GetLocaleInfoA(lcid, LOCALE_SMONGROUPING, buf, sizeof(buf)); fmt->Grouping = getGrouping(buf); - fmt->lpDecimalSep = NEW_ARRAY(UChar, 6); + fmt->lpDecimalSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SMONDECIMALSEP, fmt->lpDecimalSep, 6); - fmt->lpThousandSep = NEW_ARRAY(UChar, 6); + fmt->lpThousandSep = NEW_ARRAY(wchar_t, 6); GetLocaleInfoW(lcid, LOCALE_SMONTHOUSANDSEP, fmt->lpThousandSep, 6); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_INEGCURR, (LPWSTR) &fmt->NegativeOrder, sizeof(UINT)); GetLocaleInfoW(lcid, LOCALE_RETURN_NUMBER|LOCALE_ICURRENCY, (LPWSTR) &fmt->PositiveOrder, sizeof(UINT)); - fmt->lpCurrencySymbol = NEW_ARRAY(UChar, 8); + fmt->lpCurrencySymbol = NEW_ARRAY(wchar_t, 8); GetLocaleInfoW(lcid, LOCALE_SCURRENCY, (LPWSTR) fmt->lpCurrencySymbol, 8); } @@ -290,8 +292,8 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen } } - UChar stackBuffer[STACK_BUFFER_SIZE]; - UChar *buffer = stackBuffer; + wchar_t stackBuffer[STACK_BUFFER_SIZE]; + wchar_t *buffer = stackBuffer; FormatInfo formatInfo; formatInfo = *fFormatInfo; @@ -314,7 +316,7 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen if (lastError == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); buffer[0] = 0x0000; GetCurrencyFormatW(fLCID, 0, nBuffer, &formatInfo.currency, buffer, newLength); } @@ -334,14 +336,14 @@ UnicodeString &Win32NumberFormat::format(int32_t numDigits, UnicodeString &appen if (GetLastError() == ERROR_INSUFFICIENT_BUFFER) { int newLength = GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, NULL, 0); - buffer = NEW_ARRAY(UChar, newLength); + buffer = NEW_ARRAY(wchar_t, newLength); buffer[0] = 0x0000; GetNumberFormatW(fLCID, 0, nBuffer, &formatInfo.number, buffer, newLength); } } } - appendTo.append(buffer, (int32_t) wcslen(buffer)); + appendTo.append((UChar *)buffer, (int32_t) wcslen(buffer)); if (buffer != stackBuffer) { DELETE_ARRAY(buffer); diff --git a/deps/icu-small/source/i18n/winnmfmt.h b/deps/icu-small/source/i18n/winnmfmt.h index a0b34dfc9fe8d2..3b0df915e1439b 100644 --- a/deps/icu-small/source/i18n/winnmfmt.h +++ b/deps/icu-small/source/i18n/winnmfmt.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2005-2015, International Business Machines diff --git a/deps/icu-small/source/i18n/wintzimpl.cpp b/deps/icu-small/source/i18n/wintzimpl.cpp index 921ecf78d2323b..4c042d54213d05 100644 --- a/deps/icu-small/source/i18n/wintzimpl.cpp +++ b/deps/icu-small/source/i18n/wintzimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2009-2013, International Business Machines diff --git a/deps/icu-small/source/i18n/wintzimpl.h b/deps/icu-small/source/i18n/wintzimpl.h index 3ba4174a06f37c..8149fc14173814 100644 --- a/deps/icu-small/source/i18n/wintzimpl.h +++ b/deps/icu-small/source/i18n/wintzimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************** * Copyright (C) 2008-2011, International Business Machines diff --git a/deps/icu-small/source/i18n/zonemeta.cpp b/deps/icu-small/source/i18n/zonemeta.cpp index e2c75e5577b503..fdf333c3712aef 100644 --- a/deps/icu-small/source/i18n/zonemeta.cpp +++ b/deps/icu-small/source/i18n/zonemeta.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/zonemeta.h b/deps/icu-small/source/i18n/zonemeta.h index ac65e82acbc69c..84be5553ea797e 100644 --- a/deps/icu-small/source/i18n/zonemeta.h +++ b/deps/icu-small/source/i18n/zonemeta.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2007-2013, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/zrule.cpp b/deps/icu-small/source/i18n/zrule.cpp index a7573e5fb5b61d..ad64ab6e161ed5 100644 --- a/deps/icu-small/source/i18n/zrule.cpp +++ b/deps/icu-small/source/i18n/zrule.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2011, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/zrule.h b/deps/icu-small/source/i18n/zrule.h index cfc2b71542cdae..b9827bf5201a66 100644 --- a/deps/icu-small/source/i18n/zrule.h +++ b/deps/icu-small/source/i18n/zrule.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/i18n/ztrans.cpp b/deps/icu-small/source/i18n/ztrans.cpp index e33e8511bceddc..956b563a2a0310 100644 --- a/deps/icu-small/source/i18n/ztrans.cpp +++ b/deps/icu-small/source/i18n/ztrans.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2010, International Business Machines Corporation and * diff --git a/deps/icu-small/source/i18n/ztrans.h b/deps/icu-small/source/i18n/ztrans.h index 6697dcd5eb1c2f..0101dc06e36bae 100644 --- a/deps/icu-small/source/i18n/ztrans.h +++ b/deps/icu-small/source/i18n/ztrans.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2009-2016, International Business Machines Corporation and diff --git a/deps/icu-small/source/io/io.rc b/deps/icu-small/source/io/io.rc index daa8da94b9cc6e..94db3ebd0f4a62 100644 --- a/deps/icu-small/source/io/io.rc +++ b/deps/icu-small/source/io/io.rc @@ -1,6 +1,8 @@ // Do not edit with Microsoft Developer Studio Resource Editor. // It will permanently substitute version numbers that are intended to be // picked up by the pre-processor during each build. +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html // Copyright (c) 2001-2010 International Business Machines // Corporation and others. All Rights Reserved. // diff --git a/deps/icu-small/source/io/locbund.cpp b/deps/icu-small/source/io/locbund.cpp index e032d00c8a3bf4..4dc50d50df1e4c 100644 --- a/deps/icu-small/source/io/locbund.cpp +++ b/deps/icu-small/source/io/locbund.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/io/locbund.h b/deps/icu-small/source/io/locbund.h index 1eac6227b1d5eb..b9e19484b654d2 100644 --- a/deps/icu-small/source/io/locbund.h +++ b/deps/icu-small/source/io/locbund.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/io/sprintf.c b/deps/icu-small/source/io/sprintf.c index 251faca5c3cb41..17cdb2dcdd3f5e 100644 --- a/deps/icu-small/source/io/sprintf.c +++ b/deps/icu-small/source/io/sprintf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -179,7 +181,7 @@ u_vsnprintf(UChar *buffer, int32_t size = (int32_t)strlen(patternSpecification) + 1; /* convert from the default codepage to Unicode */ - if (size >= MAX_UCHAR_BUFFER_SIZE(patBuffer)) { + if (size >= (int32_t)MAX_UCHAR_BUFFER_SIZE(patBuffer)) { pattern = (UChar *)uprv_malloc(size * sizeof(UChar)); if(pattern == 0) { return 0; diff --git a/deps/icu-small/source/io/sscanf.c b/deps/icu-small/source/io/sscanf.c index c9579e8b5627de..2e14cdbcb65968 100644 --- a/deps/icu-small/source/io/sscanf.c +++ b/deps/icu-small/source/io/sscanf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -71,7 +73,7 @@ u_vsscanf(const UChar *buffer, int32_t size = (int32_t)uprv_strlen(patternSpecification) + 1; /* convert from the default codepage to Unicode */ - if (size >= MAX_UCHAR_BUFFER_SIZE(patBuffer)) { + if (size >= (int32_t)MAX_UCHAR_BUFFER_SIZE(patBuffer)) { pattern = (UChar *)uprv_malloc(size * sizeof(UChar)); if(pattern == 0) { return 0; diff --git a/deps/icu-small/source/io/ucln_io.cpp b/deps/icu-small/source/io/ucln_io.cpp index 9469f5d58bb959..5822d22be15981 100644 --- a/deps/icu-small/source/io/ucln_io.cpp +++ b/deps/icu-small/source/io/ucln_io.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * @@ -33,7 +35,7 @@ static const char copyright[] = U_COPYRIGHT_STRING; static cleanupFunc *gCleanupFunctions[UCLN_IO_COUNT]; -static UBool io_cleanup(void) +static UBool U_CALLCONV io_cleanup(void) { int32_t libType = UCLN_IO_START; diff --git a/deps/icu-small/source/io/ucln_io.h b/deps/icu-small/source/io/ucln_io.h index 105eca8b136701..97d06a12ffd18c 100644 --- a/deps/icu-small/source/io/ucln_io.h +++ b/deps/icu-small/source/io/ucln_io.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * * diff --git a/deps/icu-small/source/io/ufile.c b/deps/icu-small/source/io/ufile.c index d20f8079b1e314..71d27a5e2596dd 100644 --- a/deps/icu-small/source/io/ufile.c +++ b/deps/icu-small/source/io/ufile.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/ufile.h b/deps/icu-small/source/io/ufile.h index e0c343d6aa5fa7..b2562747e6e1ac 100644 --- a/deps/icu-small/source/io/ufile.h +++ b/deps/icu-small/source/io/ufile.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/io/ufmt_cmn.c b/deps/icu-small/source/io/ufmt_cmn.c index a9f533ce735fbb..e896bc560d44bc 100644 --- a/deps/icu-small/source/io/ufmt_cmn.c +++ b/deps/icu-small/source/io/ufmt_cmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/ufmt_cmn.h b/deps/icu-small/source/io/ufmt_cmn.h index b0852de5f8a62c..7daeee881363b2 100644 --- a/deps/icu-small/source/io/ufmt_cmn.h +++ b/deps/icu-small/source/io/ufmt_cmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/unicode/ustdio.h b/deps/icu-small/source/io/unicode/ustdio.h index ec2a35fef4fc4a..5e11bb67666c45 100644 --- a/deps/icu-small/source/io/unicode/ustdio.h +++ b/deps/icu-small/source/io/unicode/ustdio.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/unicode/ustream.h b/deps/icu-small/source/io/unicode/ustream.h index 41ccf5ae036c67..ab52f6a28a0728 100644 --- a/deps/icu-small/source/io/unicode/ustream.h +++ b/deps/icu-small/source/io/unicode/ustream.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2014 International Business Machines diff --git a/deps/icu-small/source/io/uprintf.cpp b/deps/icu-small/source/io/uprintf.cpp index 4453d3a2da96f0..e6062ade297862 100644 --- a/deps/icu-small/source/io/uprintf.cpp +++ b/deps/icu-small/source/io/uprintf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uprintf.h b/deps/icu-small/source/io/uprintf.h index 4b538451023274..0a07e6b7d6a0c3 100644 --- a/deps/icu-small/source/io/uprintf.h +++ b/deps/icu-small/source/io/uprintf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uprntf_p.c b/deps/icu-small/source/io/uprntf_p.c index a51b67108f73b4..81f52696581960 100644 --- a/deps/icu-small/source/io/uprntf_p.c +++ b/deps/icu-small/source/io/uprntf_p.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uscanf.c b/deps/icu-small/source/io/uscanf.c index 2919305f9e570a..9866963201ea53 100644 --- a/deps/icu-small/source/io/uscanf.c +++ b/deps/icu-small/source/io/uscanf.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uscanf.h b/deps/icu-small/source/io/uscanf.h index 96b5c4da44e0eb..bbe84d9e2bbf2a 100644 --- a/deps/icu-small/source/io/uscanf.h +++ b/deps/icu-small/source/io/uscanf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/io/uscanf_p.c b/deps/icu-small/source/io/uscanf_p.c index 4e874f24f1f4ad..f17502038ae45b 100644 --- a/deps/icu-small/source/io/uscanf_p.c +++ b/deps/icu-small/source/io/uscanf_p.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/io/ustdio.c b/deps/icu-small/source/io/ustdio.c index 20eaf35dcd25c9..4b156595bb18f5 100644 --- a/deps/icu-small/source/io/ustdio.c +++ b/deps/icu-small/source/io/ustdio.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * @@ -428,7 +430,7 @@ ufile_fill_uchar_buffer(UFILE *f) /* shift the buffer if it isn't empty */ if(dataSize != 0) { - uprv_memmove(f->fUCBuffer, str->fPos, dataSize * sizeof(UChar)); /* not accessing beyond memory */ + u_memmove(f->fUCBuffer, str->fPos, dataSize); /* not accessing beyond memory */ } diff --git a/deps/icu-small/source/io/ustream.cpp b/deps/icu-small/source/io/ustream.cpp index 25c54eb55532f9..8e0087edbe6b21 100644 --- a/deps/icu-small/source/io/ustream.cpp +++ b/deps/icu-small/source/io/ustream.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ********************************************************************** * Copyright (C) 2001-2016, International Business Machines diff --git a/deps/icu-small/source/stubdata/stubdata.c b/deps/icu-small/source/stubdata/stubdata.c index 2f1d41191ff091..a1a16545605de1 100644 --- a/deps/icu-small/source/stubdata/stubdata.c +++ b/deps/icu-small/source/stubdata/stubdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * * Copyright (C) 2001, International Business Machines diff --git a/deps/icu-small/source/tools/genccode/genccode.c b/deps/icu-small/source/tools/genccode/genccode.c index 58f5c2e8e0a713..2534820bac33b6 100644 --- a/deps/icu-small/source/tools/genccode/genccode.c +++ b/deps/icu-small/source/tools/genccode/genccode.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 1999-2016, International Business Machines diff --git a/deps/icu-small/source/tools/gencmn/gencmn.c b/deps/icu-small/source/tools/gencmn/gencmn.c index a6498ce6a977e0..d328a305215159 100644 --- a/deps/icu-small/source/tools/gencmn/gencmn.c +++ b/deps/icu-small/source/tools/gencmn/gencmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/derb.cpp b/deps/icu-small/source/tools/genrb/derb.cpp index 3d2507bc14e23f..22e275ef353700 100644 --- a/deps/icu-small/source/tools/genrb/derb.cpp +++ b/deps/icu-small/source/tools/genrb/derb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/errmsg.c b/deps/icu-small/source/tools/genrb/errmsg.c index 420c12399e607b..7340f01af2a7d8 100644 --- a/deps/icu-small/source/tools/genrb/errmsg.c +++ b/deps/icu-small/source/tools/genrb/errmsg.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/errmsg.h b/deps/icu-small/source/tools/genrb/errmsg.h index 19dfee8d858792..5026ecf7be54bb 100644 --- a/deps/icu-small/source/tools/genrb/errmsg.h +++ b/deps/icu-small/source/tools/genrb/errmsg.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/genrb.cpp b/deps/icu-small/source/tools/genrb/genrb.cpp index 50e9bfd02e97eb..685fb5884e405c 100644 --- a/deps/icu-small/source/tools/genrb/genrb.cpp +++ b/deps/icu-small/source/tools/genrb/genrb.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/genrb.h b/deps/icu-small/source/tools/genrb/genrb.h index 9a190f28d37f92..99c604f7809454 100644 --- a/deps/icu-small/source/tools/genrb/genrb.h +++ b/deps/icu-small/source/tools/genrb/genrb.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/parse.cpp b/deps/icu-small/source/tools/genrb/parse.cpp index 879db96b024340..f448daab6cc460 100644 --- a/deps/icu-small/source/tools/genrb/parse.cpp +++ b/deps/icu-small/source/tools/genrb/parse.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/parse.h b/deps/icu-small/source/tools/genrb/parse.h index c9ac5521e1bf90..d7341be6dd9fc4 100644 --- a/deps/icu-small/source/tools/genrb/parse.h +++ b/deps/icu-small/source/tools/genrb/parse.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/prscmnts.cpp b/deps/icu-small/source/tools/genrb/prscmnts.cpp index d9c690ff525096..edae16c5c5f99b 100644 --- a/deps/icu-small/source/tools/genrb/prscmnts.cpp +++ b/deps/icu-small/source/tools/genrb/prscmnts.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2014, International Business Machines diff --git a/deps/icu-small/source/tools/genrb/prscmnts.h b/deps/icu-small/source/tools/genrb/prscmnts.h index da085965aa1b4a..c9958cd0713119 100644 --- a/deps/icu-small/source/tools/genrb/prscmnts.h +++ b/deps/icu-small/source/tools/genrb/prscmnts.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/rbutil.c b/deps/icu-small/source/tools/genrb/rbutil.c index bbe8624909b94e..174b4d7b44c4c6 100644 --- a/deps/icu-small/source/tools/genrb/rbutil.c +++ b/deps/icu-small/source/tools/genrb/rbutil.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/rbutil.h b/deps/icu-small/source/tools/genrb/rbutil.h index 3f055a848c89e0..d2a303516ab820 100644 --- a/deps/icu-small/source/tools/genrb/rbutil.h +++ b/deps/icu-small/source/tools/genrb/rbutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/read.c b/deps/icu-small/source/tools/genrb/read.c index b652fee9bfead5..313fb61677f01f 100644 --- a/deps/icu-small/source/tools/genrb/read.c +++ b/deps/icu-small/source/tools/genrb/read.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/read.h b/deps/icu-small/source/tools/genrb/read.h index f79b145f25aa36..74b8c823a2e970 100644 --- a/deps/icu-small/source/tools/genrb/read.h +++ b/deps/icu-small/source/tools/genrb/read.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/reslist.cpp b/deps/icu-small/source/tools/genrb/reslist.cpp index 9f8365d7f6a405..9420184a9df806 100644 --- a/deps/icu-small/source/tools/genrb/reslist.cpp +++ b/deps/icu-small/source/tools/genrb/reslist.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/reslist.h b/deps/icu-small/source/tools/genrb/reslist.h index 5d09ecd8db572d..614be2d10f9c56 100644 --- a/deps/icu-small/source/tools/genrb/reslist.h +++ b/deps/icu-small/source/tools/genrb/reslist.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/rle.c b/deps/icu-small/source/tools/genrb/rle.c index fb14d1afc236a7..4a69cd52985ad7 100644 --- a/deps/icu-small/source/tools/genrb/rle.c +++ b/deps/icu-small/source/tools/genrb/rle.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/rle.h b/deps/icu-small/source/tools/genrb/rle.h index 0810914c52aab4..93d51a3750e8b2 100644 --- a/deps/icu-small/source/tools/genrb/rle.h +++ b/deps/icu-small/source/tools/genrb/rle.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/ustr.c b/deps/icu-small/source/tools/genrb/ustr.c index b73ce9bd2a2e07..1631a205ff9fe0 100644 --- a/deps/icu-small/source/tools/genrb/ustr.c +++ b/deps/icu-small/source/tools/genrb/ustr.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -92,7 +94,7 @@ ustr_cpy(struct UString *dst, if(src->fChars == NULL || dst->fChars == NULL){ return; } - uprv_memcpy(dst->fChars, src->fChars, sizeof(UChar) * src->fLength); + u_memcpy(dst->fChars, src->fChars, src->fLength); dst->fLength = src->fLength; dst->fChars[dst->fLength] = 0x0000; } diff --git a/deps/icu-small/source/tools/genrb/ustr.h b/deps/icu-small/source/tools/genrb/ustr.h index 05a446ea0e58ad..c27a78104fbdb1 100644 --- a/deps/icu-small/source/tools/genrb/ustr.h +++ b/deps/icu-small/source/tools/genrb/ustr.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/wrtjava.cpp b/deps/icu-small/source/tools/genrb/wrtjava.cpp index 6bfa7bb150b3f7..329753717b1f64 100644 --- a/deps/icu-small/source/tools/genrb/wrtjava.cpp +++ b/deps/icu-small/source/tools/genrb/wrtjava.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/genrb/wrtxml.cpp b/deps/icu-small/source/tools/genrb/wrtxml.cpp index c250fc29b41e58..62fdd2427cd249 100644 --- a/deps/icu-small/source/tools/genrb/wrtxml.cpp +++ b/deps/icu-small/source/tools/genrb/wrtxml.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/icupkg/icupkg.cpp b/deps/icu-small/source/tools/icupkg/icupkg.cpp index 056fc46faca5e7..20239304410e7a 100644 --- a/deps/icu-small/source/tools/icupkg/icupkg.cpp +++ b/deps/icu-small/source/tools/icupkg/icupkg.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/pkgdata/pkgdata.cpp b/deps/icu-small/source/tools/pkgdata/pkgdata.cpp index 5dc075101be25c..bf933186025baf 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgdata.cpp +++ b/deps/icu-small/source/tools/pkgdata/pkgdata.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2000-2016, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/pkgdata/pkgtypes.c b/deps/icu-small/source/tools/pkgdata/pkgtypes.c index c8e08c2e828369..eadf634db385e8 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgtypes.c +++ b/deps/icu-small/source/tools/pkgdata/pkgtypes.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************** * * Copyright (C) 2000-2016, International Business Machines diff --git a/deps/icu-small/source/tools/pkgdata/pkgtypes.h b/deps/icu-small/source/tools/pkgdata/pkgtypes.h index 0bba60c517b625..c7eeba42cb218e 100644 --- a/deps/icu-small/source/tools/pkgdata/pkgtypes.h +++ b/deps/icu-small/source/tools/pkgdata/pkgtypes.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /************************************************************************** * * Copyright (C) 2000-2012, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/collationinfo.cpp b/deps/icu-small/source/tools/toolutil/collationinfo.cpp index fef1cdf1051cc9..bbb1839ef1a5a4 100644 --- a/deps/icu-small/source/tools/toolutil/collationinfo.cpp +++ b/deps/icu-small/source/tools/toolutil/collationinfo.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/collationinfo.h b/deps/icu-small/source/tools/toolutil/collationinfo.h index dac12d2d48149f..48cd5561844cb8 100644 --- a/deps/icu-small/source/tools/toolutil/collationinfo.h +++ b/deps/icu-small/source/tools/toolutil/collationinfo.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2013-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/dbgutil.cpp b/deps/icu-small/source/tools/toolutil/dbgutil.cpp index 668a2269e20a7f..345715163baacd 100644 --- a/deps/icu-small/source/tools/toolutil/dbgutil.cpp +++ b/deps/icu-small/source/tools/toolutil/dbgutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2012, International Business Machines Corporation and diff --git a/deps/icu-small/source/tools/toolutil/dbgutil.h b/deps/icu-small/source/tools/toolutil/dbgutil.h index 49d52eae51f8ca..704090cc21d6c1 100644 --- a/deps/icu-small/source/tools/toolutil/dbgutil.h +++ b/deps/icu-small/source/tools/toolutil/dbgutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************ diff --git a/deps/icu-small/source/tools/toolutil/denseranges.cpp b/deps/icu-small/source/tools/toolutil/denseranges.cpp index 7d81f2e9442f01..3b83715f28cfce 100644 --- a/deps/icu-small/source/tools/toolutil/denseranges.cpp +++ b/deps/icu-small/source/tools/toolutil/denseranges.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/denseranges.h b/deps/icu-small/source/tools/toolutil/denseranges.h index f9af56173872bd..7b072f4654ce59 100644 --- a/deps/icu-small/source/tools/toolutil/denseranges.h +++ b/deps/icu-small/source/tools/toolutil/denseranges.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2010, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/filestrm.c b/deps/icu-small/source/tools/toolutil/filestrm.c index c7b4eee54a31e0..446125de6b1a83 100644 --- a/deps/icu-small/source/tools/toolutil/filestrm.c +++ b/deps/icu-small/source/tools/toolutil/filestrm.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/tools/toolutil/filestrm.h b/deps/icu-small/source/tools/toolutil/filestrm.h index 0eeba98b661fd6..b42345140681c6 100644 --- a/deps/icu-small/source/tools/toolutil/filestrm.h +++ b/deps/icu-small/source/tools/toolutil/filestrm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ****************************************************************************** * diff --git a/deps/icu-small/source/tools/toolutil/filetools.cpp b/deps/icu-small/source/tools/toolutil/filetools.cpp index 238ef7ba155004..b0d4ed81a560dd 100644 --- a/deps/icu-small/source/tools/toolutil/filetools.cpp +++ b/deps/icu-small/source/tools/toolutil/filetools.cpp @@ -1,9 +1,12 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2013, International Business Machines * Corporation and others. All Rights Reserved. ******************************************************************************* */ +#include "unicode/platform.h" #if U_PLATFORM == U_PF_MINGW // *cough* - for struct stat #ifdef __STRICT_ANSI__ @@ -13,6 +16,7 @@ #include "filetools.h" #include "filestrm.h" +#include "charstr.h" #include "cstring.h" #include "unicode/putil.h" #include "putilimp.h" @@ -27,8 +31,6 @@ #include typedef struct dirent DIRENT; -#define MAX_PATH_SIZE 4096 /* Set the limit for the size of the path. */ - #define SKIP1 "." #define SKIP2 ".." #endif @@ -56,20 +58,24 @@ isFileModTimeLater(const char *filePath, const char *checkAgainst, UBool isDir) while ((dirEntry = readdir(pDir)) != NULL) { if (uprv_strcmp(dirEntry->d_name, SKIP1) != 0 && uprv_strcmp(dirEntry->d_name, SKIP2) != 0) { - char newpath[MAX_PATH_SIZE] = ""; - uprv_strcpy(newpath, checkAgainst); - uprv_strcat(newpath, U_FILE_SEP_STRING); - uprv_strcat(newpath, dirEntry->d_name); - - if ((subDirp = opendir(newpath)) != NULL) { + UErrorCode status = U_ZERO_ERROR; + icu::CharString newpath(checkAgainst, -1, status); + newpath.append(U_FILE_SEP_STRING, -1, status); + newpath.append(dirEntry->d_name, -1, status); + if (U_FAILURE(status)) { + fprintf(stderr, "%s:%d: %s\n", __FILE__, __LINE__, u_errorName(status)); + return FALSE; + }; + + if ((subDirp = opendir(newpath.data())) != NULL) { /* If this new path is a directory, make a recursive call with the newpath. */ closedir(subDirp); - isLatest = isFileModTimeLater(filePath, newpath, isDir); + isLatest = isFileModTimeLater(filePath, newpath.data(), isDir); if (!isLatest) { break; } } else { - int32_t latest = whichFileModTimeIsLater(filePath, newpath); + int32_t latest = whichFileModTimeIsLater(filePath, newpath.data()); if (latest < 0 || latest == 2) { isLatest = FALSE; break; diff --git a/deps/icu-small/source/tools/toolutil/filetools.h b/deps/icu-small/source/tools/toolutil/filetools.h index 7d4e13905575ca..5ede02761ac46a 100644 --- a/deps/icu-small/source/tools/toolutil/filetools.h +++ b/deps/icu-small/source/tools/toolutil/filetools.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/flagparser.c b/deps/icu-small/source/tools/toolutil/flagparser.c index 252267b7ae8e07..c87beb147cf44b 100644 --- a/deps/icu-small/source/tools/toolutil/flagparser.c +++ b/deps/icu-small/source/tools/toolutil/flagparser.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2015, International Business Machines * Corporation and others. All Rights Reserved. @@ -61,7 +63,7 @@ parseFlagsFile(const char *fileName, char **flagBuffer, int32_t flagBufferSize, continue; } - if (uprv_strlen(buffer) == (currentBufferSize - 1) && buffer[currentBufferSize-2] != '\n') { + if ((int32_t)uprv_strlen(buffer) == (currentBufferSize - 1) && buffer[currentBufferSize-2] != '\n') { /* Allocate more space for buffer if it didnot read the entrire line */ allocateMoreSpace = TRUE; T_FileStream_rewind(f); diff --git a/deps/icu-small/source/tools/toolutil/flagparser.h b/deps/icu-small/source/tools/toolutil/flagparser.h index 32a51e3d2acbd8..4aa03c8a5fdca4 100644 --- a/deps/icu-small/source/tools/toolutil/flagparser.h +++ b/deps/icu-small/source/tools/toolutil/flagparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/package.cpp b/deps/icu-small/source/tools/toolutil/package.cpp index 8992f30eee691a..d069147708ed3d 100644 --- a/deps/icu-small/source/tools/toolutil/package.cpp +++ b/deps/icu-small/source/tools/toolutil/package.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -1292,7 +1294,7 @@ void Package::setItemCapacity(int32_t max) exit(U_MEMORY_ALLOCATION_ERROR); } if(items && itemCount>0) { - uprv_memcpy(newItems, items, itemCount*sizeof(items[0])); + uprv_memcpy(newItems, items, (size_t)itemCount*sizeof(items[0])); } itemMax = max; items = newItems; diff --git a/deps/icu-small/source/tools/toolutil/package.h b/deps/icu-small/source/tools/toolutil/package.h index 194722f4f4e59a..4d60202999243b 100644 --- a/deps/icu-small/source/tools/toolutil/package.h +++ b/deps/icu-small/source/tools/toolutil/package.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/pkg_genc.c b/deps/icu-small/source/tools/toolutil/pkg_genc.c index f486ec4a107c6c..c85a12322b9381 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_genc.c +++ b/deps/icu-small/source/tools/toolutil/pkg_genc.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2009-2016, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_genc.h b/deps/icu-small/source/tools/toolutil/pkg_genc.h index 9bd312b96f74ac..12ffc927285b27 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_genc.h +++ b/deps/icu-small/source/tools/toolutil/pkg_genc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2011, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_gencmn.c b/deps/icu-small/source/tools/toolutil/pkg_gencmn.c index 25f36088a0f8f4..38cc820a176d3b 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_gencmn.c +++ b/deps/icu-small/source/tools/toolutil/pkg_gencmn.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2012, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_gencmn.h b/deps/icu-small/source/tools/toolutil/pkg_gencmn.h index 0ba953be74ab96..62f8327cdfdf91 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_gencmn.h +++ b/deps/icu-small/source/tools/toolutil/pkg_gencmn.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_icu.cpp b/deps/icu-small/source/tools/toolutil/pkg_icu.cpp index 471b1d45ec1220..e679c23be84f99 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_icu.cpp +++ b/deps/icu-small/source/tools/toolutil/pkg_icu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2015, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_icu.h b/deps/icu-small/source/tools/toolutil/pkg_icu.h index 50f3f51c96dfce..3d620f78dfb6cc 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_icu.h +++ b/deps/icu-small/source/tools/toolutil/pkg_icu.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /****************************************************************************** * Copyright (C) 2008-2016, International Business Machines * Corporation and others. All Rights Reserved. diff --git a/deps/icu-small/source/tools/toolutil/pkg_imp.h b/deps/icu-small/source/tools/toolutil/pkg_imp.h index 45ddc4c0912844..c9fe81bd73a20a 100644 --- a/deps/icu-small/source/tools/toolutil/pkg_imp.h +++ b/deps/icu-small/source/tools/toolutil/pkg_imp.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/pkgitems.cpp b/deps/icu-small/source/tools/toolutil/pkgitems.cpp index 7c8c744a442347..91c85201101c01 100644 --- a/deps/icu-small/source/tools/toolutil/pkgitems.cpp +++ b/deps/icu-small/source/tools/toolutil/pkgitems.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/ppucd.cpp b/deps/icu-small/source/tools/toolutil/ppucd.cpp index ed5229be786a60..18d317e3e330f2 100644 --- a/deps/icu-small/source/tools/toolutil/ppucd.cpp +++ b/deps/icu-small/source/tools/toolutil/ppucd.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2014, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/ppucd.h b/deps/icu-small/source/tools/toolutil/ppucd.h index d4726fec1091f4..593bd247996c23 100644 --- a/deps/icu-small/source/tools/toolutil/ppucd.h +++ b/deps/icu-small/source/tools/toolutil/ppucd.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2011-2013, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/swapimpl.cpp b/deps/icu-small/source/tools/toolutil/swapimpl.cpp index dbeff2d7b8ac6c..6cc21623016849 100644 --- a/deps/icu-small/source/tools/toolutil/swapimpl.cpp +++ b/deps/icu-small/source/tools/toolutil/swapimpl.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -230,7 +232,7 @@ uprops_swap(const UDataSwapper *ds, /* copy everything for inaccessible data (padding) */ if(inData32!=outData32) { - uprv_memcpy(outData32, inData32, 4*dataTop); + uprv_memcpy(outData32, inData32, 4*(size_t)dataTop); } /* swap the indexes[16] */ diff --git a/deps/icu-small/source/tools/toolutil/swapimpl.h b/deps/icu-small/source/tools/toolutil/swapimpl.h index b36ec2609dabf5..0e4d41734433d2 100644 --- a/deps/icu-small/source/tools/toolutil/swapimpl.h +++ b/deps/icu-small/source/tools/toolutil/swapimpl.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/toolutil.cpp b/deps/icu-small/source/tools/toolutil/toolutil.cpp index 259df9873d21ae..bb393a2e7d0302 100644 --- a/deps/icu-small/source/tools/toolutil/toolutil.cpp +++ b/deps/icu-small/source/tools/toolutil/toolutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -312,7 +314,7 @@ utm_hasCapacity(UToolMemory *mem, int32_t capacity) { if(mem->array==mem->staticArray) { mem->array=uprv_malloc(newCapacity*mem->size); if(mem->array!=NULL) { - uprv_memcpy(mem->array, mem->staticArray, mem->idx*mem->size); + uprv_memcpy(mem->array, mem->staticArray, (size_t)mem->idx*mem->size); } } else { mem->array=uprv_realloc(mem->array, newCapacity*mem->size); diff --git a/deps/icu-small/source/tools/toolutil/toolutil.h b/deps/icu-small/source/tools/toolutil/toolutil.h index 68c9e834a65cfd..026e75aeb2ef47 100644 --- a/deps/icu-small/source/tools/toolutil/toolutil.h +++ b/deps/icu-small/source/tools/toolutil/toolutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/ucbuf.cpp b/deps/icu-small/source/tools/toolutil/ucbuf.cpp index d83acff276c089..b6b0150afc1b48 100644 --- a/deps/icu-small/source/tools/toolutil/ucbuf.cpp +++ b/deps/icu-small/source/tools/toolutil/ucbuf.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/ucbuf.h b/deps/icu-small/source/tools/toolutil/ucbuf.h index 739eb9fbe2607c..cb9509b427a718 100644 --- a/deps/icu-small/source/tools/toolutil/ucbuf.h +++ b/deps/icu-small/source/tools/toolutil/ucbuf.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/ucln_tu.cpp b/deps/icu-small/source/tools/toolutil/ucln_tu.cpp index 0a88ba584bc5bb..2f67641768e27e 100644 --- a/deps/icu-small/source/tools/toolutil/ucln_tu.cpp +++ b/deps/icu-small/source/tools/toolutil/ucln_tu.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2014, International Business Machines Corporation and diff --git a/deps/icu-small/source/tools/toolutil/ucm.c b/deps/icu-small/source/tools/toolutil/ucm.c index adb3ebd2d0a9e8..8d4cdfc40f1e45 100644 --- a/deps/icu-small/source/tools/toolutil/ucm.c +++ b/deps/icu-small/source/tools/toolutil/ucm.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -967,7 +969,7 @@ ucm_addMapping(UCMTable *table, exit(U_MEMORY_ALLOCATION_ERROR); } - uprv_memcpy(table->codePoints+idx, codePoints, m->uLen*4); + uprv_memcpy(table->codePoints+idx, codePoints, (size_t)m->uLen*4); m->u=idx; } @@ -1124,7 +1126,7 @@ ucm_addMappingAuto(UCMFile *ucm, UBool forBase, UCMStates *baseStates, U_CAPI UBool U_EXPORT2 ucm_addMappingFromLine(UCMFile *ucm, const char *line, UBool forBase, UCMStates *baseStates) { - UCMapping m={ 0 }; + UCMapping m={ 0, {0}, 0, 0, 0, 0 }; UChar32 codePoints[UCNV_EXT_MAX_UCHARS]; uint8_t bytes[UCNV_EXT_MAX_BYTES]; diff --git a/deps/icu-small/source/tools/toolutil/ucm.h b/deps/icu-small/source/tools/toolutil/ucm.h index 5de1bdc5e38d14..0058adab5da1d1 100644 --- a/deps/icu-small/source/tools/toolutil/ucm.h +++ b/deps/icu-small/source/tools/toolutil/ucm.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * Copyright (C) 2003-2013, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/ucmstate.c b/deps/icu-small/source/tools/toolutil/ucmstate.c index 6152ca94636759..7c8559090b2a9b 100644 --- a/deps/icu-small/source/tools/toolutil/ucmstate.c +++ b/deps/icu-small/source/tools/toolutil/ucmstate.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/udbgutil.cpp b/deps/icu-small/source/tools/toolutil/udbgutil.cpp index 819cbd91150a12..bbb814ba901c41 100644 --- a/deps/icu-small/source/tools/toolutil/udbgutil.cpp +++ b/deps/icu-small/source/tools/toolutil/udbgutil.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /******************************************************************** * COPYRIGHT: * Copyright (c) 2007-2016, International Business Machines Corporation and @@ -13,6 +15,7 @@ #include "unicode/ulocdata.h" #include "unicode/ucnv.h" #include "unicode/unistr.h" +#include "cstr.h" /* To add a new enum type @@ -689,8 +692,9 @@ void KnownIssues::add(const char *ticket, const char *where, const UChar *msg, U } if(msg==NULL || !*msg) return; - std::string str; - fTable[ticket][where].insert(icu::UnicodeString(msg).toUTF8String(str)); + const icu::UnicodeString ustr(msg); + + fTable[ticket][where].insert(std::string(icu::CStr(ustr)())); } void KnownIssues::add(const char *ticket, const char *where, const char *msg, UBool *firstForTicket, UBool *firstForWhere) diff --git a/deps/icu-small/source/tools/toolutil/udbgutil.h b/deps/icu-small/source/tools/toolutil/udbgutil.h index 3f6ecb0c85ed5b..4bfb4cf86720a9 100644 --- a/deps/icu-small/source/tools/toolutil/udbgutil.h +++ b/deps/icu-small/source/tools/toolutil/udbgutil.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ************************************************************************ * Copyright (c) 2008-2015, International Business Machines diff --git a/deps/icu-small/source/tools/toolutil/unewdata.c b/deps/icu-small/source/tools/toolutil/unewdata.c index 94af7859517748..f3b152c0796ce0 100644 --- a/deps/icu-small/source/tools/toolutil/unewdata.c +++ b/deps/icu-small/source/tools/toolutil/unewdata.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -39,7 +41,7 @@ udata_create(const char *dir, const char *type, const char *name, uint16_t headerSize, commentLength; char filename[512]; uint8_t bytes[16]; - int length; + int32_t length; if(pErrorCode==NULL || U_FAILURE(*pErrorCode)) { return NULL; @@ -74,7 +76,7 @@ udata_create(const char *dir, const char *type, const char *name, /* LDH buffer Length error check */ - if(length > (sizeof(filename) - 1)) + if(length > ((int32_t)sizeof(filename) - 1)) { *pErrorCode = U_BUFFER_OVERFLOW_ERROR; uprv_free(pData); diff --git a/deps/icu-small/source/tools/toolutil/unewdata.h b/deps/icu-small/source/tools/toolutil/unewdata.h index d25b8e9f749847..9cc39942258700 100644 --- a/deps/icu-small/source/tools/toolutil/unewdata.h +++ b/deps/icu-small/source/tools/toolutil/unewdata.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uoptions.c b/deps/icu-small/source/tools/toolutil/uoptions.c index 291e2fce4e7fb8..e5ce64a3728e99 100644 --- a/deps/icu-small/source/tools/toolutil/uoptions.c +++ b/deps/icu-small/source/tools/toolutil/uoptions.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uoptions.h b/deps/icu-small/source/tools/toolutil/uoptions.h index 59804793646886..72652feadba560 100644 --- a/deps/icu-small/source/tools/toolutil/uoptions.h +++ b/deps/icu-small/source/tools/toolutil/uoptions.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uparse.c b/deps/icu-small/source/tools/toolutil/uparse.c index 71c7602cc007b4..a7142c3cba6cde 100644 --- a/deps/icu-small/source/tools/toolutil/uparse.c +++ b/deps/icu-small/source/tools/toolutil/uparse.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/uparse.h b/deps/icu-small/source/tools/toolutil/uparse.h index b379cf83548fdc..5ad766cf104c85 100644 --- a/deps/icu-small/source/tools/toolutil/uparse.h +++ b/deps/icu-small/source/tools/toolutil/uparse.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/writesrc.c b/deps/icu-small/source/tools/toolutil/writesrc.c index 6fd9f75dba743d..e3f14f2c46e377 100644 --- a/deps/icu-small/source/tools/toolutil/writesrc.c +++ b/deps/icu-small/source/tools/toolutil/writesrc.c @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * @@ -48,18 +50,16 @@ usrc_createWithHeader(const char *path, const char *filename, f=fopen(p, "w"); if(f!=NULL) { - char year[8]; const struct tm *lt; time_t t; time(&t); lt=localtime(&t); - strftime(year, sizeof(year), "%Y", lt); if(generator==NULL) { strftime(buffer, sizeof(buffer), "%Y-%m-%d", lt); - fprintf(f, header, year, filename, buffer); + fprintf(f, header, filename, buffer); } else { - fprintf(f, header, year, filename, generator); + fprintf(f, header, filename, generator); } } else { fprintf( @@ -72,28 +72,34 @@ usrc_createWithHeader(const char *path, const char *filename, U_CAPI FILE * U_EXPORT2 usrc_create(const char *path, const char *filename, const char *generator) { + // TODO: Add parameter for the first year this file was generated, not before 2016. static const char *header= - "/*\n" - " * Copyright (C) 1999-%s, International Business Machines\n" - " * Corporation and others. All Rights Reserved.\n" - " *\n" - " * file name: %s\n" - " *\n" - " * machine-generated by: %s\n" - " */\n\n"; + "// Copyright (C) 2016 and later: Unicode, Inc. and others.\n" + "// License & terms of use: http://www.unicode.org/copyright.html\n" + "//\n" + "// Copyright (C) 1999-2016, International Business Machines\n" + "// Corporation and others. All Rights Reserved.\n" + "//\n" + "// file name: %s\n" + "//\n" + "// machine-generated by: %s\n" + "\n\n"; return usrc_createWithHeader(path, filename, generator, header); } U_CAPI FILE * U_EXPORT2 usrc_createTextData(const char *path, const char *filename, const char *generator) { + // TODO: Add parameter for the first year this file was generated, not before 2016. static const char *header= - "# Copyright (C) 1999-%s, International Business Machines\n" + "# Copyright (C) 2016 and later: Unicode, Inc. and others.\n" + "# License & terms of use: http://www.unicode.org/copyright.html\n" + "# Copyright (C) 1999-2016, International Business Machines\n" "# Corporation and others. All Rights Reserved.\n" "#\n" "# file name: %s\n" "#\n" "# machine-generated by: %s\n" - "#\n\n"; + "\n\n"; return usrc_createWithHeader(path, filename, generator, header); } diff --git a/deps/icu-small/source/tools/toolutil/writesrc.h b/deps/icu-small/source/tools/toolutil/writesrc.h index f4ca08103bbfc0..c82bf3c3345edd 100644 --- a/deps/icu-small/source/tools/toolutil/writesrc.h +++ b/deps/icu-small/source/tools/toolutil/writesrc.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/xmlparser.cpp b/deps/icu-small/source/tools/toolutil/xmlparser.cpp index 8d467bac6a53f4..2fc6e1f78c21b1 100644 --- a/deps/icu-small/source/tools/toolutil/xmlparser.cpp +++ b/deps/icu-small/source/tools/toolutil/xmlparser.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * diff --git a/deps/icu-small/source/tools/toolutil/xmlparser.h b/deps/icu-small/source/tools/toolutil/xmlparser.h index 30bd746beffdb3..5c08903f86ac1a 100644 --- a/deps/icu-small/source/tools/toolutil/xmlparser.h +++ b/deps/icu-small/source/tools/toolutil/xmlparser.h @@ -1,3 +1,5 @@ +// Copyright (C) 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html /* ******************************************************************************* * From ae477b7b62888f46798968d5504eee34f6975f48 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 9 Dec 2016 12:44:31 -0800 Subject: [PATCH 035/169] deps: ICU 58.2 bump Bump ICU from 58.1 to 58.2 No feature changes. Bug fixes. * This commit contains the actual ICU source code and data. * CLDR 30.0.3 ( was 30.0.2) * Timezone 2016j ( was 2016g ) ICU Details: http://site.icu-project.org/download/58#TOC-Updates-in-ICU-58.2 PR-URL: https://github.com/nodejs/node/pull/10206 Reviewed-By: Michael Dawson Reviewed-By: Jeremiah Senkpiel Reviewed-By: James M Snell --- deps/icu-small/source/common/locmap.c | 2 +- deps/icu-small/source/common/ucasemap.cpp | 5 ++++- .../icu-small/source/common/unicode/uvernum.h | 6 +++--- deps/icu-small/source/common/ustrcase.cpp | 3 +++ deps/icu-small/source/data/in/icudt58l.dat | Bin 2680800 -> 2682224 bytes deps/icu-small/source/i18n/digitlst.cpp | 4 ++-- deps/icu-small/source/i18n/scriptset.cpp | 2 +- deps/icu-small/source/i18n/uspoof.cpp | 7 ------- 8 files changed, 14 insertions(+), 15 deletions(-) diff --git a/deps/icu-small/source/common/locmap.c b/deps/icu-small/source/common/locmap.c index 0d0aac42e15c19..1dba67a092a925 100644 --- a/deps/icu-small/source/common/locmap.c +++ b/deps/icu-small/source/common/locmap.c @@ -1022,7 +1022,7 @@ uprv_convertToPosix(uint32_t hostid, char *posixID, int32_t posixIDCapacity, UEr // GetLocaleInfo() maps such LCID to "ku". However, CLDR uses "ku" for // Northern Kurdish and "ckb" for Central Kurdish. For this reason, we cannot // use the Windows API to resolve locale ID for this specific case. - if (hostid & 0x3FF != 0x92) { + if ((hostid & 0x3FF) != 0x92) { int32_t tmpLen = 0; char locName[157]; /* ULOC_FULLNAME_CAPACITY */ diff --git a/deps/icu-small/source/common/ucasemap.cpp b/deps/icu-small/source/common/ucasemap.cpp index c0d56c28731d1f..0576a26ddd1c86 100644 --- a/deps/icu-small/source/common/ucasemap.cpp +++ b/deps/icu-small/source/common/ucasemap.cpp @@ -200,7 +200,7 @@ appendUChar(uint8_t *dest, int32_t destIndex, int32_t destCapacity, UChar c) { return -1; // integer overflow } int32_t limit=destIndex+length; - if(limitQnZZm2yg7iqkao{W7m|msDQnRo)sM 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

V%!rsNF$-hX#B7f_ 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 # else # include diff --git a/deps/icu-small/source/i18n/scriptset.cpp b/deps/icu-small/source/i18n/scriptset.cpp index ab7cb1e68ec449..951fe440803573 100644 --- a/deps/icu-small/source/i18n/scriptset.cpp +++ b/deps/icu-small/source/i18n/scriptset.cpp @@ -258,7 +258,7 @@ void ScriptSet::setScriptExtensions(UChar32 codePoint, UErrorCode& status) { while (TRUE) { script_count = uscript_getScriptExtensions( - codePoint, scripts.getAlias(), FIRST_GUESS_SCRIPT_CAPACITY, &internalStatus); + codePoint, scripts.getAlias(), scripts.getCapacity(), &internalStatus); if (internalStatus == U_BUFFER_OVERFLOW_ERROR) { // Need to allocate more space if (scripts.resize(script_count) == NULL) { diff --git a/deps/icu-small/source/i18n/uspoof.cpp b/deps/icu-small/source/i18n/uspoof.cpp index 3be10862fccdd9..d81b5b2149a206 100644 --- a/deps/icu-small/source/i18n/uspoof.cpp +++ b/deps/icu-small/source/i18n/uspoof.cpp @@ -646,13 +646,6 @@ uspoof_getSkeletonUnicodeString(const USpoofChecker *sc, return dest; } - // Check that at least one of the CONFUSABLE flags is turned on. If not, - // return an error. - if ((This->fChecks & USPOOF_CONFUSABLE) == 0) { - *status = U_ILLEGAL_ARGUMENT_ERROR; - return dest; - } - UnicodeString nfdId; gNfdNormalizer->normalize(id, nfdId, *status); From 687137eced35a21af09e51e25d8dddfdc6470579 Mon Sep 17 00:00:00 2001 From: "Steven R. Loomis" Date: Fri, 9 Dec 2016 12:49:45 -0800 Subject: [PATCH 036/169] deps: ICU 58.2 bump download URL Bump configure download path for ICU from 58.1 to 58.2 * This commit just changes the download URL. PR-URL: https://github.com/nodejs/node/pull/10206 Reviewed-By: Michael Dawson Reviewed-By: Jeremiah Senkpiel Reviewed-By: James M Snell --- configure | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configure b/configure index fd66a2b78400b6..d6672f2e25e046 100755 --- a/configure +++ b/configure @@ -987,8 +987,8 @@ def glob_to_var(dir_base, dir_sub, patch_dir): def configure_intl(o): icus = [ { - 'url': 'https://ssl.icu-project.org/files/icu4c/58.1/icu4c-58_1-src.zip', - 'md5': 'd6476b355f66a11fbe12db1d61d90d69', + 'url': 'https://ssl.icu-project.org/files/icu4c/58.2/icu4c-58_2-src.zip', + 'md5': 'f4fca37508fc5d14390501cf17aef084', }, ] def icu_download(path): From 6f8b32e75433118f6507b4dcafb1af607db92e79 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Wed, 9 Nov 2016 02:04:04 +0100 Subject: [PATCH 037/169] promise: better stack traces for --trace-warnings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Give better stack traces for `PromiseRejectionHandledWarning` and `UnhandledPromiseRejectionWarning`s. For `PromiseRejectionHandledWarning`, when it is likely that there is an `Error` object generated, it is created early to provide a proper stack trace. For `UnhandledPromiseRejectionWarning`, the stack trace of the underlying error object is used, if possible. Fixes: https://github.com/nodejs/node/issues/9523 PR-URL: https://github.com/nodejs/node/pull/9525 Reviewed-By: Ben Noordhuis Reviewed-By: Daniel Bevenius Reviewed-By: Michael Dawson Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Michaël Zasso --- lib/internal/process/promises.js | 17 +++++++++++++-- .../unhandled_promise_trace_warnings.js | 5 +++++ .../unhandled_promise_trace_warnings.out | 21 +++++++++++++++++++ 3 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 test/message/unhandled_promise_trace_warnings.js create mode 100644 test/message/unhandled_promise_trace_warnings.out diff --git a/lib/internal/process/promises.js b/lib/internal/process/promises.js index 279fba326ebb43..d976b9d38a9050 100644 --- a/lib/internal/process/promises.js +++ b/lib/internal/process/promises.js @@ -8,6 +8,11 @@ let lastPromiseId = 1; exports.setup = setupPromises; +function getAsynchronousRejectionWarningObject(uid) { + return new Error('Promise rejection was handled ' + + `asynchronously (rejection id: ${uid})`); +} + function setupPromises(scheduleMicrotasks) { process._setupPromises(function(event, promise, reason) { if (event === promiseRejectEvent.unhandled) @@ -31,10 +36,15 @@ function setupPromises(scheduleMicrotasks) { const uid = promiseToGuidProperty.get(promise); promiseToGuidProperty.delete(promise); if (hasBeenNotified === true) { + let warning = null; + if (!process.listenerCount('rejectionHandled')) { + // Generate the warning object early to get a good stack trace. + warning = getAsynchronousRejectionWarningObject(uid); + } process.nextTick(function() { if (!process.emit('rejectionHandled', promise)) { - const warning = new Error('Promise rejection was handled ' + - `asynchronously (rejection id: ${uid})`); + if (warning === null) + warning = getAsynchronousRejectionWarningObject(uid); warning.name = 'PromiseRejectionHandledWarning'; warning.id = uid; process.emitWarning(warning); @@ -58,6 +68,9 @@ function setupPromises(scheduleMicrotasks) { `(rejection id: ${uid}): ${reason}`); warning.name = 'UnhandledPromiseRejectionWarning'; warning.id = uid; + if (reason instanceof Error) { + warning.stack = reason.stack; + } process.emitWarning(warning); } else { hadListeners = true; diff --git a/test/message/unhandled_promise_trace_warnings.js b/test/message/unhandled_promise_trace_warnings.js new file mode 100644 index 00000000000000..48450fb21e2169 --- /dev/null +++ b/test/message/unhandled_promise_trace_warnings.js @@ -0,0 +1,5 @@ +// Flags: --trace-warnings +'use strict'; +require('../common'); +const p = Promise.reject(new Error('This was rejected')); +setImmediate(() => p.catch(() => {})); diff --git a/test/message/unhandled_promise_trace_warnings.out b/test/message/unhandled_promise_trace_warnings.out new file mode 100644 index 00000000000000..c2c7b91f47e11d --- /dev/null +++ b/test/message/unhandled_promise_trace_warnings.out @@ -0,0 +1,21 @@ +(node:*) Error: This was rejected + at * (*test*message*unhandled_promise_trace_warnings.js:*) + at * + at * + at * + at * + at * + at * + at * + at * + at * +(node:*) PromiseRejectionHandledWarning: Promise rejection was handled asynchronously (rejection id: 1) + at getAsynchronousRejectionWarningObject (internal/process/promises.js:*) + at rejectionHandled (internal/process/promises.js:*) + at * + at Promise.then (native) + at Promise.catch (native) + at Immediate.setImmediate (*test*message*unhandled_promise_trace_warnings.js:*) + at * + at * + at * From c57d72089f49784807520afff75e88ed433d6953 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 8 Dec 2016 22:46:39 -0800 Subject: [PATCH 038/169] test: refactor http pipelined socket test In test-http-incoming-pipelined-socket-destory: * setTimeout() with no duration -> setImmediate() * eliminate unneeded exit listener * use common.mustCall() * var -> const/let PR-URL: https://github.com/nodejs/node/pull/10189 Reviewed-By: Santiago Gimeno Reviewed-By: Colin Ihrig Reviewed-By: Sakthipriyan Vairamani --- ...-http-incoming-pipelined-socket-destroy.js | 29 ++++++++----------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/test/parallel/test-http-incoming-pipelined-socket-destroy.js b/test/parallel/test-http-incoming-pipelined-socket-destroy.js index 9789e9976cb7a7..1465f189dd2045 100644 --- a/test/parallel/test-http-incoming-pipelined-socket-destroy.js +++ b/test/parallel/test-http-incoming-pipelined-socket-destroy.js @@ -1,16 +1,17 @@ 'use strict'; -require('../common'); +const common = require('../common'); -var http = require('http'); -var net = require('net'); +const http = require('http'); +const net = require('net'); +const seeds = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ]; // Set up some timing issues where sockets can be destroyed // via either the req or res. -var server = http.createServer(function(req, res) { +const server = http.createServer(common.mustCall(function(req, res) { switch (req.url) { case '/1': - return setTimeout(function() { + return setImmediate(function() { req.socket.destroy(); server.emit('requestDone'); }); @@ -24,7 +25,7 @@ var server = http.createServer(function(req, res) { // in one case, actually send a response in 2 chunks case '/3': res.write('hello '); - return setTimeout(function() { + return setImmediate(function() { res.end('world!'); server.emit('requestDone'); }); @@ -33,7 +34,7 @@ var server = http.createServer(function(req, res) { res.destroy(); server.emit('requestDone'); } -}); +}, seeds.length)); // Make a bunch of requests pipelined on the same socket @@ -47,10 +48,9 @@ function generator(seeds) { } -server.listen(0, function() { - var seeds = [ 3, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 ]; - var client = net.connect({ port: this.address().port }); - var done = 0; +server.listen(0, common.mustCall(function() { + const client = net.connect({ port: this.address().port }); + let done = 0; server.on('requestDone', function() { if (++done === seeds.length) { server.close(); @@ -60,9 +60,4 @@ server.listen(0, function() { // immediately write the pipelined requests. // Some of these will not have a socket to destroy! client.write(generator(seeds)); -}); - -process.on('exit', function(c) { - if (!c) - console.log('ok'); -}); +})); From 0b243ca178d2ff71932c72ddcfc392769caeb390 Mon Sep 17 00:00:00 2001 From: "Prieto, Marcos" Date: Thu, 1 Dec 2016 11:24:16 -0600 Subject: [PATCH 039/169] test: refactor assert.equal, update syntax to ES6 --- test/parallel/test-buffer-arraybuffer.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-buffer-arraybuffer.js b/test/parallel/test-buffer-arraybuffer.js index 6ffe2c43da8376..6556916439cd86 100644 --- a/test/parallel/test-buffer-arraybuffer.js +++ b/test/parallel/test-buffer-arraybuffer.js @@ -15,9 +15,9 @@ const buf = Buffer.from(ab); assert.ok(buf instanceof Buffer); // For backwards compatibility of old .parent property test that if buf is not // a slice then .parent should be undefined. -assert.equal(buf.parent, undefined); -assert.equal(buf.buffer, ab); -assert.equal(buf.length, ab.byteLength); +assert.strictEqual(buf.parent, undefined); +assert.strictEqual(buf.buffer, ab); +assert.strictEqual(buf.length, ab.byteLength); buf.fill(0xC); @@ -46,7 +46,7 @@ assert.throws(function() { }, TypeError); // write{Double,Float}{LE,BE} with noAssert should not crash, cf. #3766 -var b = Buffer.allocUnsafe(1); +const b = Buffer.allocUnsafe(1); b.writeFloatLE(11.11, 0, true); b.writeFloatBE(11.11, 0, true); b.writeDoubleLE(11.11, 0, true); From 10747f4102440699d42355217754132f0dce7615 Mon Sep 17 00:00:00 2001 From: larissayvette Date: Sun, 11 Dec 2016 12:12:46 +0100 Subject: [PATCH 040/169] test: refactor test-http-after-connect.js - Replace assert.equal() to assert.strictEqual() - Replace var with const where applicable - Removed firstBodyChunk which is never used - Remove the process.on('exit', ...) and replace its functionality by - Using common.mustCall() where applicable PR-URL: https://github.com/nodejs/node/pull/10229 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Italo A. Casas Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott --- test/parallel/test-http-after-connect.js | 36 +++++++++--------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/test/parallel/test-http-after-connect.js b/test/parallel/test-http-after-connect.js index 0bae99b1d34cf1..0580f428ed70f5 100644 --- a/test/parallel/test-http-after-connect.js +++ b/test/parallel/test-http-after-connect.js @@ -1,38 +1,34 @@ 'use strict'; -require('../common'); -var assert = require('assert'); -var http = require('http'); +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); -var serverConnected = false; -var serverRequests = 0; var clientResponses = 0; -var server = http.createServer(function(req, res) { +const server = http.createServer(common.mustCall(function(req, res) { console.error('Server got GET request'); req.resume(); - ++serverRequests; res.writeHead(200); res.write(''); setTimeout(function() { res.end(req.url); }, 50); -}); -server.on('connect', function(req, socket, firstBodyChunk) { +}, 2)); +server.on('connect', common.mustCall(function(req, socket) { console.error('Server got CONNECT request'); - serverConnected = true; socket.write('HTTP/1.1 200 Connection established\r\n\r\n'); socket.resume(); socket.on('end', function() { socket.end(); }); -}); +})); server.listen(0, function() { - var req = http.request({ + const req = http.request({ port: this.address().port, method: 'CONNECT', path: 'google.com:80' }); - req.on('connect', function(res, socket, firstBodyChunk) { + req.on('connect', common.mustCall(function(res, socket) { console.error('Client got CONNECT response'); socket.end(); socket.on('end', function() { @@ -40,7 +36,7 @@ server.listen(0, function() { doRequest(1); }); socket.resume(); - }); + })); req.end(); }); @@ -48,7 +44,7 @@ function doRequest(i) { http.get({ port: server.address().port, path: '/request' + i - }, function(res) { + }, common.mustCall(function(res) { console.error('Client got GET response'); var data = ''; res.setEncoding('utf8'); @@ -56,17 +52,11 @@ function doRequest(i) { data += chunk; }); res.on('end', function() { - assert.equal(data, '/request' + i); + assert.strictEqual(data, '/request' + i); ++clientResponses; if (clientResponses === 2) { server.close(); } }); - }); + })); } - -process.on('exit', function() { - assert(serverConnected); - assert.equal(serverRequests, 2); - assert.equal(clientResponses, 2); -}); From 217e2c6fcf73e7c1230187259f8650827ac778d8 Mon Sep 17 00:00:00 2001 From: Rob Adelmann Date: Tue, 6 Dec 2016 17:04:22 -0800 Subject: [PATCH 041/169] test: refactor test-fs-fsync - replace var with const. - remove successes var. - use assert.ifError() for handling all errors. - wrap all callbacks with common.mustCall(). PR-URL: https://github.com/nodejs/node/pull/10176 Reviewed-By: Colin Ihrig Reviewed-By: Santiago Gimeno Reviewed-By: Italo A. Casas Reviewed-By: Sakthipriyan Vairamani --- test/parallel/test-fs-fsync.js | 37 +++++++++++++--------------------- 1 file changed, 14 insertions(+), 23 deletions(-) diff --git a/test/parallel/test-fs-fsync.js b/test/parallel/test-fs-fsync.js index 89d104c00246bc..f69a3c5e7f13c6 100644 --- a/test/parallel/test-fs-fsync.js +++ b/test/parallel/test-fs-fsync.js @@ -1,32 +1,23 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); -var path = require('path'); -var fs = require('fs'); -var successes = 0; +const path = require('path'); +const fs = require('fs'); -var file = path.join(common.fixturesDir, 'a.js'); +const file = path.join(common.fixturesDir, 'a.js'); -fs.open(file, 'a', 0o777, function(err, fd) { - if (err) throw err; +fs.open(file, 'a', 0o777, common.mustCall(function(err, fd) { + assert.ifError(err); fs.fdatasyncSync(fd); - successes++; fs.fsyncSync(fd); - successes++; - fs.fdatasync(fd, function(err) { - if (err) throw err; - successes++; - fs.fsync(fd, function(err) { - if (err) throw err; - successes++; - }); - }); -}); - -process.on('exit', function() { - assert.equal(4, successes); -}); + fs.fdatasync(fd, common.mustCall(function(err) { + assert.ifError(err); + fs.fsync(fd, common.mustCall(function(err) { + assert.ifError(err); + })); + })); +})); From e3f926594eb1f91f532fe0570407af9780d70db8 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Sun, 11 Dec 2016 22:37:05 -0500 Subject: [PATCH 042/169] test: improvements in test fixtures symlinked - using strictEqual instead equal - common dependency should be the first one - using path.join instead relative path PR-URL: https://github.com/nodejs/node/pull/10182 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- test/fixtures/module-require-symlink/symlinked.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/fixtures/module-require-symlink/symlinked.js b/test/fixtures/module-require-symlink/symlinked.js index fea1cedb0aa4f8..657ef2662644c0 100644 --- a/test/fixtures/module-require-symlink/symlinked.js +++ b/test/fixtures/module-require-symlink/symlinked.js @@ -1,13 +1,13 @@ 'use strict'; -const assert = require('assert'); const common = require('../../common'); +const assert = require('assert'); +const foo = require('./foo'); const path = require('path'); const linkScriptTarget = path.join(common.fixturesDir, - '/module-require-symlink/symlinked.js'); + 'module-require-symlink', 'symlinked.js'); -var foo = require('./foo'); -assert.equal(foo.dep1.bar.version, 'CORRECT_VERSION'); -assert.equal(foo.dep2.bar.version, 'CORRECT_VERSION'); -assert.equal(__filename, linkScriptTarget); +assert.strictEqual(foo.dep1.bar.version, 'CORRECT_VERSION'); +assert.strictEqual(foo.dep2.bar.version, 'CORRECT_VERSION'); +assert.strictEqual(__filename, linkScriptTarget); assert(__filename in require.cache); From b0a5a3bb70e208907171e450cc6c54c78761e343 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 9 Dec 2016 22:44:58 -0800 Subject: [PATCH 043/169] test: fix flaky test-dgram-exclusive-implicit-bind test-dgram-exclusive-implicit-bind is written assuming that dgram messages are received with 100% reliability. While missing a dgram message sent to localhost is rare, we do see it as evidenced by CI failures from time to time. The test has been rewritten to send dgram messages over and over until the test requirements have been met. Additional incidental refactoring includes: * var -> const * use of common.mustCall() instead of exit listener + boolean PR-URL: https://github.com/nodejs/node/pull/10212 Reviewed-By: Santiago Gimeno Reviewed-By: Italo A. Casas --- .../test-dgram-exclusive-implicit-bind.js | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/test/parallel/test-dgram-exclusive-implicit-bind.js b/test/parallel/test-dgram-exclusive-implicit-bind.js index c8799cf058b99e..97fd6bed5d6e33 100644 --- a/test/parallel/test-dgram-exclusive-implicit-bind.js +++ b/test/parallel/test-dgram-exclusive-implicit-bind.js @@ -20,10 +20,10 @@ // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE // USE OR OTHER DEALINGS IN THE SOFTWARE. -var common = require('../common'); -var assert = require('assert'); -var cluster = require('cluster'); -var dgram = require('dgram'); +const common = require('../common'); +const assert = require('assert'); +const cluster = require('cluster'); +const dgram = require('dgram'); // Without an explicit bind, send() causes an implicit bind, which always // generate a unique per-socket ephemeral port. An explicit bind to a port @@ -40,17 +40,21 @@ var dgram = require('dgram'); // with ENOTSUP. if (cluster.isMaster) { - var pass; var messages = 0; - var ports = {}; - - process.on('exit', function() { - assert.strictEqual(pass, true); - }); + const ports = {}; + const pids = []; var target = dgram.createSocket('udp4'); + const done = common.mustCall(function() { + cluster.disconnect(); + target.close(); + }); + target.on('message', function(buf, rinfo) { + if (pids.includes(buf.toString())) + return; + pids.push(buf.toString()); messages++; ports[rinfo.port] = true; @@ -63,12 +67,6 @@ if (cluster.isMaster) { assert.strictEqual(Object.keys(ports).length, 3); done(); } - - function done() { - pass = true; - cluster.disconnect(); - target.close(); - } }); target.on('listening', function() { @@ -85,7 +83,12 @@ if (cluster.isMaster) { return; } -var source = dgram.createSocket('udp4'); +const source = dgram.createSocket('udp4'); +var interval; + +source.on('close', function() { + clearInterval(interval); +}); if (process.env.BOUND === 'y') { source.bind(0); @@ -96,4 +99,7 @@ if (process.env.BOUND === 'y') { source.unref(); } -source.send(Buffer.from('abc'), 0, 3, common.PORT, '127.0.0.1'); +const buf = Buffer.from(process.pid.toString()); +interval = setInterval(() => { + source.send(buf, common.PORT, '127.0.0.1'); +}, 1).unref(); From 70e4fb8ca1c1b6c5adcc7cc02af87dcfa9d1d1f4 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 9 Dec 2016 16:08:05 -0800 Subject: [PATCH 044/169] test: refactor test-http-pause-resume-one-end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * setTimeout() with no duration -> setImmediate() * var -> const * remove unused variable `chunk` PR-URL: https://github.com/nodejs/node/pull/10210 Reviewed-By: Colin Ihrig Reviewed-By: Santiago Gimeno Reviewed-By: Michaël Zasso --- test/parallel/test-http-pause-resume-one-end.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-http-pause-resume-one-end.js b/test/parallel/test-http-pause-resume-one-end.js index 2ebd3cbe619ac7..6b98246cc271ac 100644 --- a/test/parallel/test-http-pause-resume-one-end.js +++ b/test/parallel/test-http-pause-resume-one-end.js @@ -1,23 +1,23 @@ 'use strict'; const common = require('../common'); -var http = require('http'); +const http = require('http'); -var server = http.Server(function(req, res) { +const server = http.Server(function(req, res) { res.writeHead(200, {'Content-Type': 'text/plain'}); res.end('Hello World\n'); server.close(); }); server.listen(0, common.mustCall(function() { - var opts = { + const opts = { port: this.address().port, headers: { connection: 'close' } }; http.get(opts, common.mustCall(function(res) { - res.on('data', common.mustCall(function(chunk) { + res.on('data', common.mustCall(function() { res.pause(); - setTimeout(function() { + setImmediate(function() { res.resume(); }); })); From 2f64d5a294a8cb6c348065c6563b1020dc402adc Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sun, 11 Dec 2016 20:34:52 -0800 Subject: [PATCH 045/169] test: refactor test-crypto-random MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * specify constructor for assert.throws() * load additional modules only if crypto check passes * normalize some potentially confusing indentation * provided actual first and expected second in assertions PR-URL: https://github.com/nodejs/node/pull/10232 Reviewed-By: Prince John Wesley Reviewed-By: Luigi Pinca Reviewed-By: Michaël Zasso --- test/parallel/test-crypto-random.js | 23 +++++++---------------- 1 file changed, 7 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-crypto-random.js b/test/parallel/test-crypto-random.js index 6866c8c08186ee..a3e9ab26687f09 100644 --- a/test/parallel/test-crypto-random.js +++ b/test/parallel/test-crypto-random.js @@ -1,11 +1,11 @@ 'use strict'; const common = require('../common'); -const assert = require('assert'); if (!common.hasCrypto) { common.skip('missing crypto'); return; } +const assert = require('assert'); const crypto = require('crypto'); crypto.DEFAULT_ENCODING = 'buffer'; @@ -13,25 +13,16 @@ crypto.DEFAULT_ENCODING = 'buffer'; // bump, we register a lot of exit listeners process.setMaxListeners(256); -[crypto.randomBytes, - crypto.pseudoRandomBytes -].forEach(function(f) { - [-1, - undefined, - null, - false, - true, - {}, - [] - ].forEach(function(value) { - assert.throws(function() { f(value); }); - assert.throws(function() { f(value, function() {}); }); +[crypto.randomBytes, crypto.pseudoRandomBytes].forEach(function(f) { + [-1, undefined, null, false, true, {}, []].forEach(function(value) { + assert.throws(function() { f(value); }, TypeError); + assert.throws(function() { f(value, function() {}); }, TypeError); }); [0, 1, 2, 4, 16, 256, 1024].forEach(function(len) { f(len, common.mustCall(function(ex, buf) { - assert.strictEqual(null, ex); - assert.strictEqual(len, buf.length); + assert.strictEqual(ex, null); + assert.strictEqual(buf.length, len); assert.ok(Buffer.isBuffer(buf)); })); }); From 373755cad02dc47bcf9a81abe8b45451bd8348a6 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Mon, 12 Dec 2016 18:04:05 -0500 Subject: [PATCH 046/169] test: refactor test-http-dns-fail * remove counter used to control function execution * use commont.mustCall to control the function execution * use const and let instead of var * use arrow functions PR-URL: https://github.com/nodejs/node/pull/10243 Reviewed-By: Italo A. Casas Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Lance Ball Reviewed-By: Brian White --- test/internet/test-http-dns-fail.js | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/test/internet/test-http-dns-fail.js b/test/internet/test-http-dns-fail.js index c83b89f8ccd37e..37abe6ed14b70b 100644 --- a/test/internet/test-http-dns-fail.js +++ b/test/internet/test-http-dns-fail.js @@ -5,34 +5,25 @@ */ const common = require('../common'); -var assert = require('assert'); -var http = require('http'); - -var hadError = 0; +const assert = require('assert'); +const http = require('http'); function httpreq(count) { - if (1 < count) return; + if (count > 1) return; - var req = http.request({ + const req = http.request({ host: 'not-a-real-domain-name.nobody-would-register-this-as-a-tld', port: 80, path: '/', method: 'GET' }, common.fail); - req.on('error', function(e) { - console.log(e.message); + req.on('error', common.mustCall((e) => { assert.strictEqual(e.code, 'ENOTFOUND'); - hadError++; httpreq(count + 1); - }); + })); req.end(); } httpreq(0); - - -process.on('exit', function() { - assert.equal(2, hadError); -}); From b868ce676361bc58fbc23127943d4974663ab17e Mon Sep 17 00:00:00 2001 From: hveldstra Date: Wed, 23 Nov 2016 10:57:49 +0000 Subject: [PATCH 047/169] timers: fix handling of cleared immediates If current immediate has no callback, move on to the next one in the queue. Fixes: https://github.com/nodejs/node/issues/9756 PR-URL: https://github.com/nodejs/node/pull/9759 Reviewed-By: Jeremiah Senkpiel --- lib/timers.js | 4 +++- test/parallel/test-timers-regress-GH-9765.js | 23 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-timers-regress-GH-9765.js diff --git a/lib/timers.js b/lib/timers.js index a55e265f29ffe9..6d456da36faf67 100644 --- a/lib/timers.js +++ b/lib/timers.js @@ -580,8 +580,10 @@ function processImmediate() { while (immediate) { domain = immediate.domain; - if (!immediate._onImmediate) + if (!immediate._onImmediate) { + immediate = immediate._idleNext; continue; + } if (domain) domain.enter(); diff --git a/test/parallel/test-timers-regress-GH-9765.js b/test/parallel/test-timers-regress-GH-9765.js new file mode 100644 index 00000000000000..71169fa0d1704c --- /dev/null +++ b/test/parallel/test-timers-regress-GH-9765.js @@ -0,0 +1,23 @@ +'use strict'; +const common = require('../common'); + +// This test ensures that if an Immediate callback clears subsequent +// immediates we don't get stuck in an infinite loop. +// +// If the process does get stuck, it will be timed out by the test +// runner. +// +// Ref: https://github.com/nodejs/node/issues/9756 + +setImmediate(common.mustCall(function() { + clearImmediate(i2); + clearImmediate(i3); +})); + +const i2 = setImmediate(function() { + common.fail('immediate callback should not have fired'); +}); + +const i3 = setImmediate(function() { + common.fail('immediate callback should not have fired'); +}); From 713f04ce1dffe78558c29f638cb4b9d5b9c12498 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 10 Dec 2016 21:43:39 -0800 Subject: [PATCH 048/169] test: refactor test-stream-big-push MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use common.mustCall() * specify setTimeout() duration of 1ms * remove unused `n` function argument PR-URL: https://github.com/nodejs/node/pull/10226 Reviewed-By: Benjamin Gruenbaum Reviewed-By: Michaël Zasso --- test/parallel/test-stream-big-push.js | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) diff --git a/test/parallel/test-stream-big-push.js b/test/parallel/test-stream-big-push.js index d9b79ebafc1d08..27feef35ef536d 100644 --- a/test/parallel/test-stream-big-push.js +++ b/test/parallel/test-stream-big-push.js @@ -1,5 +1,5 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const stream = require('stream'); const str = 'asdfasdfasdfasdfasdf'; @@ -10,29 +10,25 @@ const r = new stream.Readable({ }); let reads = 0; -let eofed = false; -let ended = false; -r._read = function(n) { +function _read() { if (reads === 0) { setTimeout(function() { r.push(str); - }); + }, 1); reads++; } else if (reads === 1) { var ret = r.push(str); assert.strictEqual(ret, false); reads++; } else { - assert(!eofed); - eofed = true; r.push(null); } -}; +} -r.on('end', function() { - ended = true; -}); +r._read = common.mustCall(_read, 3); + +r.on('end', common.mustCall(function() {})); // push some data in to start. // we've never gotten any read event at this point. @@ -55,10 +51,3 @@ r.once('readable', function() { chunk = r.read(); assert.strictEqual(chunk, null); }); - -process.on('exit', function() { - assert(eofed); - assert(ended); - assert.strictEqual(reads, 2); - console.log('ok'); -}); From be3334709d13dc15e42238a0145a95499574d72d Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 10 Dec 2016 20:38:06 -0800 Subject: [PATCH 049/169] test: fix http-client-timeout-option-listeners test-http-client-timeout-option-listeners is flaky due to depending on completing operations before a 100ms socket timeout. The socket timeout is an integral part of the test but can be very large. Set to the maximum allowable value. PR-URL: https://github.com/nodejs/node/pull/10224 Reviewed-By: Santiago Gimeno --- test/parallel/test-http-client-timeout-option-listeners.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/parallel/test-http-client-timeout-option-listeners.js b/test/parallel/test-http-client-timeout-option-listeners.js index 3ac6cd4616b496..eac2e6599c8f43 100644 --- a/test/parallel/test-http-client-timeout-option-listeners.js +++ b/test/parallel/test-http-client-timeout-option-listeners.js @@ -9,13 +9,16 @@ const server = http.createServer((req, res) => { res.end(''); }); +// Maximum allowed value for timeouts +const timeout = Math.pow(2, 31) - 1; + const options = { agent, method: 'GET', port: undefined, host: common.localhostIPv4, path: '/', - timeout: common.platformTimeout(100) + timeout: timeout }; server.listen(0, options.host, common.mustCall(() => { From 843d4557e25df40fdb52d96a0d463d3ccff526b0 Mon Sep 17 00:00:00 2001 From: Michael Dawson Date: Wed, 14 Dec 2016 13:55:44 -0500 Subject: [PATCH 050/169] doc: fix broken link in COLLABORATOR_GUIDE.md One of the links to CONTRIBUTING.md was broken in the doc. Updated broken link to be the same as the other one in the doc that was working. PR-URL: https://github.com/nodejs/node/pull/10267 Reviewed-By: Sam Roberts Reviewed-By: Gibson Fahnestock Reviewed-By: Luigi Pinca Reviewed-By: Italo A. Casas Reviewed-By: Colin Ihrig Reviewed-By: Roman Reiss --- COLLABORATOR_GUIDE.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md index 702d539d460301..abf91289fcfdec 100644 --- a/COLLABORATOR_GUIDE.md +++ b/COLLABORATOR_GUIDE.md @@ -126,7 +126,7 @@ information regarding the change process: - Protects against the assumption that GitHub will be around forever. Review the commit message to ensure that it adheres to the guidelines -outlined in the [contributing](https://github.com/nodejs/node/blob/master/CONTRIBUTING.md#step-3-commit) guide. +outlined in the [contributing](./CONTRIBUTING.md#step-3-commit) guide. See the commit log for examples such as [this one](https://github.com/nodejs/node/commit/b636ba8186) if unsure @@ -237,7 +237,8 @@ Save the file and close the editor. You'll be asked to enter a new commit message for that commit. This is a good moment to fix incorrect commit logs, ensure that they are properly formatted, and add `Reviewed-By` lines. -* The commit message text must conform to the [commit message guidelines](../CONTRIBUTING.md#step-3-commit). +* The commit message text must conform to the +[commit message guidelines](./CONTRIBUTING.md#step-3-commit). Time to push it: From 5ff6011cecca6a1aa8dc68f9634a2cc0bb0eede2 Mon Sep 17 00:00:00 2001 From: Aaron Williams Date: Thu, 1 Dec 2016 10:38:22 -0600 Subject: [PATCH 051/169] test: refactor test-tls-ecdh-disable * use common.mustCall() * use String.prototype.includes() instead of String.prototype.indexOf() PR-URL: https://github.com/nodejs/node/pull/9989 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- test/parallel/test-tls-ecdh-disable.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-tls-ecdh-disable.js b/test/parallel/test-tls-ecdh-disable.js index a6ddb15cc1478e..c2a7440a686a10 100644 --- a/test/parallel/test-tls-ecdh-disable.js +++ b/test/parallel/test-tls-ecdh-disable.js @@ -20,7 +20,7 @@ var options = { var server = tls.createServer(options, common.fail); -server.listen(0, '127.0.0.1', function() { +server.listen(0, '127.0.0.1', common.mustCall(function() { var cmd = '"' + common.opensslCli + '" s_client -cipher ' + options.ciphers + ` -connect 127.0.0.1:${this.address().port}`; @@ -28,10 +28,10 @@ server.listen(0, '127.0.0.1', function() { if (common.isWindows) cmd += ' -no_rand_screen'; - exec(cmd, function(err, stdout, stderr) { + exec(cmd, common.mustCall(function(err, stdout, stderr) { // Old versions of openssl will still exit with 0 so we // can't just check if err is not null. - assert.notEqual(stderr.indexOf('handshake failure'), -1); + assert(stderr.includes('handshake failure')); server.close(); - }); -}); + })); +})); From 92e3f8f26e2598b234a4eb521a2b2e4000bb4325 Mon Sep 17 00:00:00 2001 From: mfrance Date: Thu, 1 Dec 2016 10:36:15 -0600 Subject: [PATCH 052/169] test: refactor test-dgram-send-callback-multi-buffer * use assert.strictEqual() instead of assert.equal() PR-URL: https://github.com/nodejs/node/pull/9999 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig --- test/parallel/test-dgram-send-callback-multi-buffer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-dgram-send-callback-multi-buffer.js b/test/parallel/test-dgram-send-callback-multi-buffer.js index a60d42cc45d49e..f77b5618450095 100644 --- a/test/parallel/test-dgram-send-callback-multi-buffer.js +++ b/test/parallel/test-dgram-send-callback-multi-buffer.js @@ -7,7 +7,7 @@ const dgram = require('dgram'); const client = dgram.createSocket('udp4'); const messageSent = common.mustCall(function messageSent(err, bytes) { - assert.equal(bytes, buf1.length + buf2.length); + assert.strictEqual(bytes, buf1.length + buf2.length); }); const buf1 = Buffer.alloc(256, 'x'); From 2eccea06b5940ba4701415dd7f26a6821f1b687b Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 13 Dec 2016 09:12:05 -0800 Subject: [PATCH 053/169] doc: expand common module material in test guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Provide a little more information about the `common` module. This doesn't really provide much that wasn't already there, but hopefully makes some things a bit more explicit for first-time readers. PR-URL: https://github.com/nodejs/node/pull/10251 Reviewed-By: Jeremiah Senkpiel Reviewed-By: Anna Henningsen Reviewed-By: Evan Lucas Reviewed-By: Italo A. Casas Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca --- doc/guides/writing-tests.md | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/doc/guides/writing-tests.md b/doc/guides/writing-tests.md index d00be9cdbcc4c6..d628e3f6f5873c 100644 --- a/doc/guides/writing-tests.md +++ b/doc/guides/writing-tests.md @@ -19,7 +19,6 @@ Tests can be added for multiple reasons: - When fixing regressions and bugs. - When expanding test coverage. - ## Test structure Let's analyze this very basic test from the Node.js test suite: @@ -55,17 +54,22 @@ Let's analyze this very basic test from the Node.js test suite: const common = require('../common'); ``` -These two lines are mandatory and should be included on every test. -The `common` module is a helper module that provides useful tools for the tests. -If for some reason, no functionality from `common` is used, it should still be -included like this: +The first line enables strict mode. All tests should be in strict mode unless +the nature of the test requires that the test run without it. + +The second line loads the `common` module. The `common` module is a helper +module that provides useful tools for the tests. + +Even if no functions or other properties exported by `common` are used in a +test, the `common` module should still be included. This is because the `common` +module includes code that will cause tests to fail if variables are leaked into +the global space. In situations where no functions or other properties exported +by `common` are used, it can be included without assigning it to an identifier: ```javascript require('../common'); ``` -Why? It checks for leaks of globals. - **Lines 4-5** ```javascript @@ -76,7 +80,6 @@ Why? It checks for leaks of globals. A test should start with a comment containing a brief description of what it is designed to test. - **Lines 7-8** ```javascript From 3a6fdd805d4926b9a5a9e39120cec9277ed668a5 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Mon, 12 Dec 2016 21:35:17 -0800 Subject: [PATCH 054/169] test: refactor test-fs-read-stream-inherit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Refactor to take advantage of block scoping to isolate tests. Checks in exit handlers now reside with the relevant test block. Where test cases start and end is more clear. Also: Some use of `common.mustCall()` and improved wrapping/indentation. PR-URL: https://github.com/nodejs/node/pull/10246 Reviewed-By: Michaël Zasso --- test/parallel/test-fs-read-stream-inherit.js | 307 ++++++++++--------- 1 file changed, 159 insertions(+), 148 deletions(-) diff --git a/test/parallel/test-fs-read-stream-inherit.js b/test/parallel/test-fs-read-stream-inherit.js index 40ec5ed883829b..d71dc3d4381272 100644 --- a/test/parallel/test-fs-read-stream-inherit.js +++ b/test/parallel/test-fs-read-stream-inherit.js @@ -7,174 +7,185 @@ const fs = require('fs'); const fn = path.join(common.fixturesDir, 'elipses.txt'); const rangeFile = path.join(common.fixturesDir, 'x.txt'); -const callbacks = { open: 0, end: 0, close: 0 }; - let paused = false; -const file = fs.ReadStream(fn); - -file.on('open', function(fd) { - file.length = 0; - callbacks.open++; - assert.strictEqual(typeof fd, 'number'); - assert.ok(file.readable); +{ + const file = fs.ReadStream(fn); - // GH-535 - file.pause(); - file.resume(); - file.pause(); - file.resume(); -}); + file.on('open', common.mustCall(function(fd) { + file.length = 0; + assert.strictEqual(typeof fd, 'number'); + assert.ok(file.readable); -file.on('data', function(data) { - assert.ok(data instanceof Buffer); - assert.ok(!paused); - file.length += data.length; + // GH-535 + file.pause(); + file.resume(); + file.pause(); + file.resume(); + })); - paused = true; - file.pause(); + file.on('data', function(data) { + assert.ok(data instanceof Buffer); + assert.ok(!paused); + file.length += data.length; - setTimeout(function() { - paused = false; - file.resume(); - }, 10); -}); + paused = true; + file.pause(); + setTimeout(function() { + paused = false; + file.resume(); + }, 10); + }); -file.on('end', function(chunk) { - callbacks.end++; -}); + file.on('end', common.mustCall(function() {})); -file.on('close', function() { - callbacks.close++; -}); -const file3 = fs.createReadStream(fn, Object.create({encoding: 'utf8'})); -file3.length = 0; -file3.on('data', function(data) { - assert.strictEqual(typeof data, 'string'); - file3.length += data.length; + file.on('close', common.mustCall(function() { + assert.strictEqual(file.length, 30000); + })); +} - for (let i = 0; i < data.length; i++) { - // http://www.fileformat.info/info/unicode/char/2026/index.htm - assert.strictEqual(data[i], '\u2026'); - } -}); - -file3.on('close', function() { - callbacks.close++; -}); - -process.on('exit', function() { - assert.strictEqual(callbacks.open, 1); - assert.strictEqual(callbacks.end, 1); - assert.strictEqual(callbacks.close, 2); - assert.strictEqual(file.length, 30000); - assert.strictEqual(file3.length, 10000); - console.error('ok'); -}); - -const file4 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1, - start: 1, end: 2})); -assert.strictEqual(file4.start, 1); -assert.strictEqual(file4.end, 2); -let contentRead = ''; -file4.on('data', function(data) { - contentRead += data.toString('utf-8'); -}); -file4.on('end', function(data) { - assert.strictEqual(contentRead, 'yz'); -}); - -const file5 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1, - start: 1})); -assert.strictEqual(file5.start, 1); -file5.data = ''; -file5.on('data', function(data) { - file5.data += data.toString('utf-8'); -}); -file5.on('end', function() { - assert.strictEqual(file5.data, 'yz\n'); -}); +{ + const file3 = fs.createReadStream(fn, Object.create({encoding: 'utf8'})); + file3.length = 0; + file3.on('data', function(data) { + assert.strictEqual(typeof data, 'string'); + file3.length += data.length; + + for (let i = 0; i < data.length; i++) { + // http://www.fileformat.info/info/unicode/char/2026/index.htm + assert.strictEqual(data[i], '\u2026'); + } + }); -// https://github.com/joyent/node/issues/2320 -const file6 = fs.createReadStream(rangeFile, Object.create({bufferSize: 1.23, - start: 1})); -assert.strictEqual(file6.start, 1); -file6.data = ''; -file6.on('data', function(data) { - file6.data += data.toString('utf-8'); -}); -file6.on('end', function() { - assert.strictEqual(file6.data, 'yz\n'); -}); - -assert.throws(function() { - fs.createReadStream(rangeFile, Object.create({start: 10, end: 2})); -}, /"start" option must be <= "end" option/); - -const stream = fs.createReadStream(rangeFile, Object.create({ start: 0, - end: 0 })); -assert.strictEqual(stream.start, 0); -assert.strictEqual(stream.end, 0); -stream.data = ''; - -stream.on('data', function(chunk) { - stream.data += chunk; -}); - -stream.on('end', function() { - assert.strictEqual(stream.data, 'x'); -}); + file3.on('close', common.mustCall(function() { + assert.strictEqual(file3.length, 10000); + })); +} -// pause and then resume immediately. -const pauseRes = fs.createReadStream(rangeFile); -pauseRes.pause(); -pauseRes.resume(); - -let file7 = fs.createReadStream(rangeFile, Object.create({autoClose: false })); -assert.strictEqual(file7.autoClose, false); -file7.on('data', function() {}); -file7.on('end', function() { - process.nextTick(function() { - assert(!file7.closed); - assert(!file7.destroyed); - file7Next(); +{ + const options = Object.create({bufferSize: 1, start: 1, end: 2}); + const file4 = fs.createReadStream(rangeFile, options); + assert.strictEqual(file4.start, 1); + assert.strictEqual(file4.end, 2); + let contentRead = ''; + file4.on('data', function(data) { + contentRead += data.toString('utf-8'); }); -}); - -function file7Next() { - // This will tell us if the fd is usable again or not. - file7 = fs.createReadStream(null, Object.create({fd: file7.fd, start: 0 })); - file7.data = ''; - file7.on('data', function(data) { - file7.data += data; + file4.on('end', common.mustCall(function() { + assert.strictEqual(contentRead, 'yz'); + })); +} + +{ + const options = Object.create({bufferSize: 1, start: 1}); + const file5 = fs.createReadStream(rangeFile, options); + assert.strictEqual(file5.start, 1); + file5.data = ''; + file5.on('data', function(data) { + file5.data += data.toString('utf-8'); }); - file7.on('end', function(err) { - assert.strictEqual(file7.data, 'xyz\n'); + file5.on('end', common.mustCall(function() { + assert.strictEqual(file5.data, 'yz\n'); + })); +} + +// https://github.com/joyent/node/issues/2320 +{ + const options = Object.create({bufferSize: 1.23, start: 1}); + const file6 = fs.createReadStream(rangeFile, options); + assert.strictEqual(file6.start, 1); + file6.data = ''; + file6.on('data', function(data) { + file6.data += data.toString('utf-8'); }); + file6.on('end', common.mustCall(function() { + assert.strictEqual(file6.data, 'yz\n'); + })); } -// Just to make sure autoClose won't close the stream because of error. -const file8 = fs.createReadStream(null, Object.create({fd: 13337, - autoClose: false })); -file8.on('data', function() {}); -file8.on('error', common.mustCall(function() {})); +{ + assert.throws(function() { + fs.createReadStream(rangeFile, Object.create({start: 10, end: 2})); + }, /"start" option must be <= "end" option/); +} -// Make sure stream is destroyed when file does not exist. -const file9 = fs.createReadStream('/path/to/file/that/does/not/exist'); -file9.on('data', function() {}); -file9.on('error', common.mustCall(function() {})); +{ + const options = Object.create({start: 0, end: 0}); + const stream = fs.createReadStream(rangeFile, options); + assert.strictEqual(stream.start, 0); + assert.strictEqual(stream.end, 0); + stream.data = ''; + + stream.on('data', function(chunk) { + stream.data += chunk; + }); + + stream.on('end', common.mustCall(function() { + assert.strictEqual(stream.data, 'x'); + })); +} + +// pause and then resume immediately. +{ + const pauseRes = fs.createReadStream(rangeFile); + pauseRes.pause(); + pauseRes.resume(); +} -process.on('exit', function() { - assert(file7.closed); - assert(file7.destroyed); +{ + let file7 = + fs.createReadStream(rangeFile, Object.create({autoClose: false })); + assert.strictEqual(file7.autoClose, false); + file7.on('data', function() {}); + file7.on('end', common.mustCall(function() { + process.nextTick(common.mustCall(function() { + assert(!file7.closed); + assert(!file7.destroyed); + file7Next(); + })); + })); + + function file7Next() { + // This will tell us if the fd is usable again or not. + file7 = fs.createReadStream(null, Object.create({fd: file7.fd, start: 0 })); + file7.data = ''; + file7.on('data', function(data) { + file7.data += data; + }); + file7.on('end', common.mustCall(function() { + assert.strictEqual(file7.data, 'xyz\n'); + })); + } + process.on('exit', function() { + assert(file7.closed); + assert(file7.destroyed); + }); +} - assert(!file8.closed); - assert(!file8.destroyed); - assert(file8.fd); +// Just to make sure autoClose won't close the stream because of error. +{ + const options = Object.create({fd: 13337, autoClose: false}); + const file8 = fs.createReadStream(null, options); + file8.on('data', function() {}); + file8.on('error', common.mustCall(function() {})); + process.on('exit', function() { + assert(!file8.closed); + assert(!file8.destroyed); + assert(file8.fd); + }); +} - assert(!file9.closed); - assert(file9.destroyed); -}); +// Make sure stream is destroyed when file does not exist. +{ + const file9 = fs.createReadStream('/path/to/file/that/does/not/exist'); + file9.on('data', function() {}); + file9.on('error', common.mustCall(function() {})); + + process.on('exit', function() { + assert(!file9.closed); + assert(file9.destroyed); + }); +} From 70f70478dedaa46e17a8e4191e3e0b52174e95f4 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 16 Dec 2016 19:31:46 -0500 Subject: [PATCH 055/169] test: improve test-child-process-exec-buffer * use const instead of var for required modules * use assert.strictEqual instead of assert.equal * use assert.strictEqual instead of assert.ok PR-URL: https://github.com/nodejs/node/pull/10275 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- .../test-child-process-exec-buffer.js | 22 ++++++++++--------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-child-process-exec-buffer.js b/test/parallel/test-child-process-exec-buffer.js index 47879c05b2ce97..092304879ec48c 100644 --- a/test/parallel/test-child-process-exec-buffer.js +++ b/test/parallel/test-child-process-exec-buffer.js @@ -1,22 +1,24 @@ 'use strict'; const common = require('../common'); -var assert = require('assert'); -var exec = require('child_process').exec; -var os = require('os'); -var str = 'hello'; +const assert = require('assert'); +const exec = require('child_process').exec; +const os = require('os'); +const str = 'hello'; // default encoding exec('echo ' + str, common.mustCall(function(err, stdout, stderr) { - assert.ok('string', typeof stdout, 'Expected stdout to be a string'); - assert.ok('string', typeof stderr, 'Expected stderr to be a string'); - assert.equal(str + os.EOL, stdout); + assert.strictEqual(typeof stdout, 'string', 'Expected stdout to be a string'); + assert.strictEqual(typeof stderr, 'string', 'Expected stderr to be a string'); + assert.strictEqual(str + os.EOL, stdout); })); // no encoding (Buffers expected) exec('echo ' + str, { encoding: null }, common.mustCall(function(err, stdout, stderr) { - assert.ok(stdout instanceof Buffer, 'Expected stdout to be a Buffer'); - assert.ok(stderr instanceof Buffer, 'Expected stderr to be a Buffer'); - assert.equal(str + os.EOL, stdout.toString()); + assert.strictEqual(stdout instanceof Buffer, true, + 'Expected stdout to be a Buffer'); + assert.strictEqual(stderr instanceof Buffer, true, + 'Expected stderr to be a Buffer'); + assert.strictEqual(str + os.EOL, stdout.toString()); })); From 4cba20c1c8de54ef43aa42c07029d40eb8c01a99 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 15 Dec 2016 13:31:36 -0800 Subject: [PATCH 056/169] test: fix flaky test-http-client-timeout-event Race condition caused occasional failure on CI. Chained callbacks used to remove race condition. PR-URL: https://github.com/nodejs/node/pull/10293 Reviewed-By: Santiago Gimeno Reviewed-By: Colin Ihrig --- .../test-http-client-timeout-event.js | 23 ++++++++----------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/test/parallel/test-http-client-timeout-event.js b/test/parallel/test-http-client-timeout-event.js index 8e3d034c31d857..623b253a20e667 100644 --- a/test/parallel/test-http-client-timeout-event.js +++ b/test/parallel/test-http-client-timeout-event.js @@ -1,33 +1,30 @@ 'use strict'; const common = require('../common'); -const assert = require('assert'); const http = require('http'); -var options = { +const options = { method: 'GET', port: undefined, host: '127.0.0.1', path: '/' }; -var server = http.createServer(); +const server = http.createServer(); server.listen(0, options.host, function() { options.port = this.address().port; - var req = http.request(options); + const req = http.request(options); req.on('error', function() { // this space is intentionally left blank }); req.on('close', common.mustCall(() => server.close())); - var timeout_events = 0; req.setTimeout(1); - req.on('timeout', common.mustCall(() => timeout_events += 1)); - setTimeout(function() { - req.destroy(); - assert.strictEqual(timeout_events, 1); - }, common.platformTimeout(100)); - setTimeout(function() { - req.end(); - }, common.platformTimeout(50)); + req.on('timeout', common.mustCall(() => { + req.end(() => { + setTimeout(() => { + req.destroy(); + }, 100); + }); + })); }); From a18f72d8d201d1f1d4c20ae19e8accd610325966 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 16 Dec 2016 19:02:18 -0500 Subject: [PATCH 057/169] test: improve test-child-process-fork-and-spawn * use const instead of var for required modules * use assert.strictEqual instead of assert.equal * remove unnecessary process.nextTick PR-URL: https://github.com/nodejs/node/pull/10273 Reviewed-By: Santiago Gimeno Reviewed-By: Evan Lucas Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig Reviewed-By: Minwoo Jung Reviewed-By: Italo A. Casas --- test/parallel/test-child-process-fork-and-spawn.js | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-child-process-fork-and-spawn.js b/test/parallel/test-child-process-fork-and-spawn.js index 50615ecb79d0c6..5807147a1c947d 100644 --- a/test/parallel/test-child-process-fork-and-spawn.js +++ b/test/parallel/test-child-process-fork-and-spawn.js @@ -1,8 +1,8 @@ 'use strict'; const common = require('../common'); -var assert = require('assert'); -var spawn = require('child_process').spawn; -var fork = require('child_process').fork; +const assert = require('assert'); +const spawn = require('child_process').spawn; +const fork = require('child_process').fork; // Fork, then spawn. The spawned process should not hang. switch (process.argv[2] || '') { @@ -16,10 +16,9 @@ switch (process.argv[2] || '') { case 'spawn': break; default: - assert(0); + common.fail(); } function checkExit(statusCode) { - assert.equal(statusCode, 0); - process.nextTick(process.exit); + assert.strictEqual(statusCode, 0); } From d8405da44cd6fc1f517242c13f437bc69a4142dc Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 16 Dec 2016 11:02:29 -0500 Subject: [PATCH 058/169] test: refactor the code in test-dns-ipv6 * remove the manual control for functions execution * use common.mustCall to control the functions execution automatically * use let and const instead of var * use assert.strictEqual instead assert.equal PR-URL: https://github.com/nodejs/node/pull/10219 Reviewed-By: Santiago Gimeno --- test/internet/test-dns-ipv6.js | 129 ++++++++++++++++----------------- 1 file changed, 61 insertions(+), 68 deletions(-) diff --git a/test/internet/test-dns-ipv6.js b/test/internet/test-dns-ipv6.js index c1ccc4996eb24d..b2cdd14c53a60c 100644 --- a/test/internet/test-dns-ipv6.js +++ b/test/internet/test-dns-ipv6.js @@ -5,8 +5,6 @@ const dns = require('dns'); const net = require('net'); const isIPv6 = net.isIPv6; -let expected = 0; -let completed = 0; let running = false; const queue = []; @@ -17,7 +15,7 @@ if (!common.hasIPv6) { function TEST(f) { function next() { - var f = queue.shift(); + const f = queue.shift(); if (f) { running = true; console.log(f.name); @@ -27,11 +25,9 @@ function TEST(f) { function done() { running = false; - completed++; process.nextTick(next); } - expected++; queue.push(f); if (!running) { @@ -44,46 +40,46 @@ function checkWrap(req) { } TEST(function test_resolve6(done) { - var req = dns.resolve6('ipv6.google.com', function(err, ips) { - if (err) throw err; + const req = dns.resolve6('ipv6.google.com', + common.mustCall((err, ips) => { + assert.ifError(err); - assert.ok(ips.length > 0); + assert.ok(ips.length > 0); - for (var i = 0; i < ips.length; i++) { - assert.ok(isIPv6(ips[i])); - } + for (let i = 0; i < ips.length; i++) + assert.ok(isIPv6(ips[i])); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_reverse_ipv6(done) { - var req = dns.reverse('2001:4860:4860::8888', function(err, domains) { - if (err) throw err; + const req = dns.reverse('2001:4860:4860::8888', + common.mustCall((err, domains) => { + assert.ifError(err); - assert.ok(domains.length > 0); + assert.ok(domains.length > 0); - for (var i = 0; i < domains.length; i++) { - assert.ok(domains[i]); - assert.ok(typeof domains[i] === 'string'); - } + for (let i = 0; i < domains.length; i++) + assert.ok(typeof domains[i] === 'string'); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_ipv6_explicit(done) { - var req = dns.lookup('ipv6.google.com', 6, function(err, ip, family) { - if (err) throw err; - assert.ok(net.isIPv6(ip)); - assert.strictEqual(family, 6); + const req = dns.lookup('ipv6.google.com', 6, + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.ok(isIPv6(ip)); + assert.strictEqual(family, 6); - done(); - }); + done(); + })); checkWrap(req); }); @@ -103,24 +99,24 @@ TEST(function test_lookup_ipv6_implicit(done) { */ TEST(function test_lookup_ipv6_explicit_object(done) { - var req = dns.lookup('ipv6.google.com', { + const req = dns.lookup('ipv6.google.com', { family: 6 - }, function(err, ip, family) { - if (err) throw err; - assert.ok(net.isIPv6(ip)); + }, common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.ok(isIPv6(ip)); assert.strictEqual(family, 6); done(); - }); + })); checkWrap(req); }); TEST(function test_lookup_ipv6_hint(done) { - var req = dns.lookup('www.google.com', { + const req = dns.lookup('www.google.com', { family: 6, hints: dns.V4MAPPED - }, function(err, ip, family) { + }, common.mustCall((err, ip, family) => { if (err) { // FreeBSD does not support V4MAPPED if (common.isFreeBSD) { @@ -130,41 +126,43 @@ TEST(function test_lookup_ipv6_hint(done) { assert.ok(/getaddrinfo EAI_BADFLAGS/.test(err.message)); done(); return; - } else { - throw err; } + + assert.ifError(err); } - assert.ok(net.isIPv6(ip)); + + assert.ok(isIPv6(ip)); assert.strictEqual(family, 6); done(); - }); + })); checkWrap(req); }); TEST(function test_lookup_ip_ipv6(done) { - var req = dns.lookup('::1', function(err, ip, family) { - if (err) throw err; - assert.ok(net.isIPv6(ip)); - assert.strictEqual(family, 6); + const req = dns.lookup('::1', + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.ok(isIPv6(ip)); + assert.strictEqual(family, 6); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_all_ipv6(done) { - var req = dns.lookup( + const req = dns.lookup( 'www.google.com', {all: true, family: 6}, - function(err, ips) { - if (err) throw err; + common.mustCall((err, ips) => { + assert.ifError(err); assert.ok(Array.isArray(ips)); assert.ok(ips.length > 0); - ips.forEach(function(ip) { + ips.forEach((ip) => { assert.ok(isIPv6(ip.address), 'Invalid IPv6: ' + ip.address.toString()); assert.strictEqual(ip.family, 6); @@ -172,24 +170,25 @@ TEST(function test_lookup_all_ipv6(done) { done(); } - ); + )); checkWrap(req); }); TEST(function test_lookupservice_ip_ipv6(done) { - var req = dns.lookupService('::1', 80, function(err, host, service) { - if (err) { - // Not skipping the test, rather checking an alternative result, - // i.e. that ::1 may not be configured (e.g. in /etc/hosts) - assert.strictEqual(err.code, 'ENOTFOUND'); - return done(); - } - assert.equal(typeof host, 'string'); - assert(host); - assert(['http', 'www', '80'].includes(service)); - done(); - }); + const req = dns.lookupService('::1', 80, + common.mustCall((err, host, service) => { + if (err) { + // Not skipping the test, rather checking an alternative result, + // i.e. that ::1 may not be configured (e.g. in /etc/hosts) + assert.strictEqual(err.code, 'ENOTFOUND'); + return done(); + } + assert.strictEqual(typeof host, 'string'); + assert(host); + assert(['http', 'www', '80'].includes(service)); + done(); + })); checkWrap(req); }); @@ -206,9 +205,3 @@ TEST(function test_lookupservice_ip_ipv6(done) { checkWrap(req); }); */ - -process.on('exit', function() { - console.log(completed + ' tests completed'); - assert.equal(running, false); - assert.strictEqual(expected, completed); -}); From f9227fe9443225fc6c4be1b62bed20e66056052a Mon Sep 17 00:00:00 2001 From: Fedor Indutny Date: Thu, 8 Dec 2016 21:32:06 +0100 Subject: [PATCH 059/169] stream_base: homogenize req_wrap_obj use Always use `req_wrap_obj` to allow calling `req->Done()` in stream implementations. PR-URL: https://github.com/nodejs/node/pull/10184 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig --- src/stream_base.cc | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/stream_base.cc b/src/stream_base.cc index a12a1efc73be11..3ed622d7ef35a2 100644 --- a/src/stream_base.cc +++ b/src/stream_base.cc @@ -82,10 +82,8 @@ void StreamBase::AfterShutdown(ShutdownWrap* req_wrap, int status) { req_wrap_obj }; - if (req_wrap->object()->Has(env->context(), - env->oncomplete_string()).FromJust()) { + if (req_wrap_obj->Has(env->context(), env->oncomplete_string()).FromJust()) req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); - } delete req_wrap; } @@ -172,9 +170,8 @@ int StreamBase::Writev(const FunctionCallbackInfo& args) { int err = DoWrite(req_wrap, *bufs, count, nullptr); - req_wrap->object()->Set(env->async(), True(env->isolate())); - req_wrap->object()->Set(env->bytes_string(), - Number::New(env->isolate(), bytes)); + req_wrap_obj->Set(env->async(), True(env->isolate())); + req_wrap_obj->Set(env->bytes_string(), Number::New(env->isolate(), bytes)); const char* msg = Error(); if (msg != nullptr) { req_wrap_obj->Set(env->error_string(), OneByteString(env->isolate(), msg)); @@ -328,7 +325,7 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { // Reference StreamWrap instance to prevent it from being garbage // collected before `AfterWrite` is called. CHECK_EQ(false, req_wrap->persistent().IsEmpty()); - req_wrap->object()->Set(env->handle_string(), send_handle_obj); + req_wrap_obj->Set(env->handle_string(), send_handle_obj); } err = DoWrite( @@ -338,7 +335,7 @@ int StreamBase::WriteString(const FunctionCallbackInfo& args) { reinterpret_cast(send_handle)); } - req_wrap->object()->Set(env->async(), True(env->isolate())); + req_wrap_obj->Set(env->async(), True(env->isolate())); if (err) req_wrap->Dispose(); @@ -383,10 +380,8 @@ void StreamBase::AfterWrite(WriteWrap* req_wrap, int status) { wrap->ClearError(); } - if (req_wrap->object()->Has(env->context(), - env->oncomplete_string()).FromJust()) { + if (req_wrap_obj->Has(env->context(), env->oncomplete_string()).FromJust()) req_wrap->MakeCallback(env->oncomplete_string(), arraysize(argv), argv); - } req_wrap->Dispose(); } From 8792fb17888f850bd20d05f26cab1a8c833cca11 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Sat, 17 Dec 2016 18:10:57 -0500 Subject: [PATCH 060/169] test: improve code in test-fs-open.js * use const and let instead of var * use assert.strictEqual instead of assert.equal * use assert.strictEqual instead of assert.ok * use assert.ifError PR-URL: https://github.com/nodejs/node/pull/10312 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Luigi Pinca Reviewed-By: Santiago Gimeno --- test/parallel/test-fs-open.js | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/test/parallel/test-fs-open.js b/test/parallel/test-fs-open.js index a5a9bbf2577fca..d2d24b1e07ab75 100644 --- a/test/parallel/test-fs-open.js +++ b/test/parallel/test-fs-open.js @@ -1,27 +1,24 @@ 'use strict'; const common = require('../common'); -var assert = require('assert'); -var fs = require('fs'); +const assert = require('assert'); +const fs = require('fs'); + +let caughtException = false; -var caughtException = false; try { // should throw ENOENT, not EBADF // see https://github.com/joyent/node/pull/1228 fs.openSync('/path/to/file/that/does/not/exist', 'r'); } catch (e) { - assert.equal(e.code, 'ENOENT'); + assert.strictEqual(e.code, 'ENOENT'); caughtException = true; } -assert.ok(caughtException); +assert.strictEqual(caughtException, true); -fs.open(__filename, 'r', common.mustCall(function(err, fd) { - if (err) { - throw err; - } +fs.open(__filename, 'r', common.mustCall((err) => { + assert.ifError(err); })); -fs.open(__filename, 'rs', common.mustCall(function(err, fd) { - if (err) { - throw err; - } +fs.open(__filename, 'rs', common.mustCall((err) => { + assert.ifError(err); })); From 24bf75309a804402588e9223eae81fd247527a6e Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Mon, 19 Dec 2016 13:17:18 -0800 Subject: [PATCH 061/169] doc: fix typo in ecdhCurve, a tls property name Addresses comment after PR #6933 merged. https://github.com/nodejs/node/pull/6933#pullrequestreview-13318708 PR-URL: https://github.com/nodejs/node/pull/10345 Reviewed-By: Roman Reiss Reviewed-By: Italo A. Casas --- doc/api/tls.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/tls.md b/doc/api/tls.md index 85fcfc35b43bf6..3784210ba7b6c0 100644 --- a/doc/api/tls.md +++ b/doc/api/tls.md @@ -98,9 +98,9 @@ openssl dhparam -outform PEM -out dhparam.pem 2048 ``` If using Perfect Forward Secrecy using `ECDHE`, Diffie-Hellman parameters are -not required and a default ECDHE curve will be used. The `ecdheCurve` property -can be used when creating a TLS Server to specify the name of an -alternative curve to use. +not required and a default ECDHE curve will be used. The `ecdhCurve` property +can be used when creating a TLS Server to specify the name of an alternative +curve to use, see [`tls.createServer()`] for more info. ### ALPN, NPN and SNI From 969dcab5aa48fef7219c3ee73d2a408120024b91 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Fri, 30 Sep 2016 23:38:20 -0700 Subject: [PATCH 062/169] win,msi: add required UIRef for localized strings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-By: João Reis PR-URL: https://github.com/nodejs/node/pull/8884 --- tools/msvs/msi/product.wxs | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/msvs/msi/product.wxs b/tools/msvs/msi/product.wxs index db2a74a7054e44..a21a3bb3ef1659 100755 --- a/tools/msvs/msi/product.wxs +++ b/tools/msvs/msi/product.wxs @@ -357,6 +357,7 @@ + From 03bf87c703638d476cab013cc54e1604f30b0048 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 16 Dec 2016 22:05:01 -0800 Subject: [PATCH 063/169] test: refactor test-timers-this MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use common.mustCall() and eliminate exit handler * provide timer durtion of 1ms where previously omitted * var -> const PR-URL: https://github.com/nodejs/node/pull/10315 Reviewed-By: Michaël Zasso Reviewed-By: Jeremiah Senkpiel --- test/parallel/test-timers-this.js | 56 +++++++++++-------------------- 1 file changed, 20 insertions(+), 36 deletions(-) diff --git a/test/parallel/test-timers-this.js b/test/parallel/test-timers-this.js index e21167581e8944..6bd4033756626e 100644 --- a/test/parallel/test-timers-this.js +++ b/test/parallel/test-timers-this.js @@ -1,45 +1,29 @@ 'use strict'; -require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); -let immediateThis, intervalThis, timeoutThis; -let immediateArgsThis, intervalArgsThis, timeoutArgsThis; +const immediateHandler = setImmediate(common.mustCall(function() { + assert.strictEqual(this, immediateHandler); +})); -var immediateHandler = setImmediate(function() { - immediateThis = this; -}); +const immediateArgsHandler = setImmediate(common.mustCall(function() { + assert.strictEqual(this, immediateArgsHandler); +}), 'args ...'); -var immediateArgsHandler = setImmediate(function() { - immediateArgsThis = this; -}, 'args ...'); - -var intervalHandler = setInterval(function() { +const intervalHandler = setInterval(common.mustCall(function() { clearInterval(intervalHandler); + assert.strictEqual(this, intervalHandler); +}), 1); - intervalThis = this; -}); - -var intervalArgsHandler = setInterval(function() { +const intervalArgsHandler = setInterval(common.mustCall(function() { clearInterval(intervalArgsHandler); + assert.strictEqual(this, intervalArgsHandler); +}), 1, 'args ...'); - intervalArgsThis = this; -}, 0, 'args ...'); - -var timeoutHandler = setTimeout(function() { - timeoutThis = this; -}); - -var timeoutArgsHandler = setTimeout(function() { - timeoutArgsThis = this; -}, 0, 'args ...'); - -process.once('exit', function() { - assert.strictEqual(immediateThis, immediateHandler); - assert.strictEqual(immediateArgsThis, immediateArgsHandler); - - assert.strictEqual(intervalThis, intervalHandler); - assert.strictEqual(intervalArgsThis, intervalArgsHandler); +const timeoutHandler = setTimeout(common.mustCall(function() { + assert.strictEqual(this, timeoutHandler); +}), 1); - assert.strictEqual(timeoutThis, timeoutHandler); - assert.strictEqual(timeoutArgsThis, timeoutArgsHandler); -}); +const timeoutArgsHandler = setTimeout(common.mustCall(function() { + assert.strictEqual(this, timeoutArgsHandler); +}), 1, 'args ...'); From c95adab452411f469dbcfb0cb802779b0cdbe37c Mon Sep 17 00:00:00 2001 From: Emanuel Buholzer Date: Mon, 19 Dec 2016 13:59:19 +0100 Subject: [PATCH 064/169] doc: fix broken link in COLLABORATOR_GUIDE.md PR-URL: https://github.com/nodejs/node/pull/10337 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Luigi Pinca Reviewed-By: Jeremiah Senkpiel Reviewed-By: Gibson Fahnestock --- COLLABORATOR_GUIDE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/COLLABORATOR_GUIDE.md b/COLLABORATOR_GUIDE.md index abf91289fcfdec..32533304fecc67 100644 --- a/COLLABORATOR_GUIDE.md +++ b/COLLABORATOR_GUIDE.md @@ -36,7 +36,7 @@ Collaborators or additional evidence that the issue has relevance, the issue may be closed. Remember that issues can always be re-opened if necessary. -[**See "Who to CC in issues"**](./onboarding-extras.md#who-to-cc-in-issues) +[**See "Who to CC in issues"**](./doc/onboarding-extras.md#who-to-cc-in-issues) ## Accepting Modifications From 20665f408bb418ba222d02fc7da67edbfd0c3357 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 20 Dec 2016 21:56:29 -0800 Subject: [PATCH 065/169] tools: enable block-spacing rule in .eslintrc MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Enable rule to enforce consistent use of space between the `{` and `}` that surround a code block and the code block itself. This enforces via linting the de facto standard in the code base. PR-URL: https://github.com/nodejs/node/pull/10377 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Gibson Fahnestock Reviewed-By: Michaël Zasso Reviewed-By: Julian Duque --- .eslintrc | 1 + 1 file changed, 1 insertion(+) diff --git a/.eslintrc b/.eslintrc index 9e8e6ffa7a3181..16e4b66a93d477 100644 --- a/.eslintrc +++ b/.eslintrc @@ -76,6 +76,7 @@ rules: # Stylistic Issues # http://eslint.org/docs/rules/#stylistic-issues + block-spacing: 2 brace-style: [2, 1tbs, {allowSingleLine: true}] comma-spacing: 2 comma-style: 2 From d7a36fc2daaa0863359e149daee89eaab21babc7 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 20 Dec 2016 21:54:04 -0800 Subject: [PATCH 066/169] test: use consistent block spacing MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In preparation for enabling an ESLint rule, use consistent block spacing. This changes only six files in the code base as block spacing is consistent throughout the rest of the code base. Before: function(c) {data += c;} After: function(c) { data += c; } PR-URL: https://github.com/nodejs/node/pull/10377 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: Gibson Fahnestock Reviewed-By: Michaël Zasso Reviewed-By: Julian Duque --- test/parallel/test-assert.js | 6 +++--- test/parallel/test-buffer-alloc.js | 2 +- test/parallel/test-debugger-repeat-last.js | 6 +++--- test/parallel/test-fs-realpath.js | 24 +++++++++++----------- test/parallel/test-http-chunked.js | 4 ++-- test/parallel/test-v8-flag-type-check.js | 4 ++-- 6 files changed, 23 insertions(+), 23 deletions(-) diff --git a/test/parallel/test-assert.js b/test/parallel/test-assert.js index 3564c3b5ec25c5..eb983345418637 100644 --- a/test/parallel/test-assert.js +++ b/test/parallel/test-assert.js @@ -358,9 +358,9 @@ try { assert.equal(true, threw, 'a.doesNotThrow is not catching type matching errors'); -assert.throws(function() {assert.ifError(new Error('test error'));}); -assert.doesNotThrow(function() {assert.ifError(null);}); -assert.doesNotThrow(function() {assert.ifError();}); +assert.throws(function() { assert.ifError(new Error('test error')); }); +assert.doesNotThrow(function() { assert.ifError(null); }); +assert.doesNotThrow(function() { assert.ifError(); }); assert.throws(() => { assert.doesNotThrow(makeBlock(thrower, Error), 'user message'); diff --git a/test/parallel/test-buffer-alloc.js b/test/parallel/test-buffer-alloc.js index b03c96bf646042..ba5379ad45fbea 100644 --- a/test/parallel/test-buffer-alloc.js +++ b/test/parallel/test-buffer-alloc.js @@ -1020,7 +1020,7 @@ assert.throws(() => Buffer.from('', 'buffer'), TypeError); { let a = [0]; for (let i = 0; i < 7; ++i) a = a.concat(a); - a = a.map((_, i) => {return i;}); + a = a.map((_, i) => { return i; }); const b = Buffer.from(a); const c = Buffer.from(b); assert.strictEqual(b.length, a.length); diff --git a/test/parallel/test-debugger-repeat-last.js b/test/parallel/test-debugger-repeat-last.js index 157baada0c3ea7..7a43bbb6c767ae 100644 --- a/test/parallel/test-debugger-repeat-last.js +++ b/test/parallel/test-debugger-repeat-last.js @@ -26,15 +26,15 @@ var sentExit = false; proc.stdout.on('data', (data) => { stdout += data; if (!sentCommand && stdout.includes('> 1')) { - setImmediate(() => {proc.stdin.write('n\n');}); + setImmediate(() => { proc.stdin.write('n\n'); }); return sentCommand = true; } if (!sentEmpty && stdout.includes('> 3')) { - setImmediate(() => {proc.stdin.write('\n');}); + setImmediate(() => { proc.stdin.write('\n'); }); return sentEmpty = true; } if (!sentExit && sentCommand && sentEmpty) { - setTimeout(() => {proc.stdin.write('\n\n\n.exit\n\n\n');}, 1); + setTimeout(() => { proc.stdin.write('\n\n\n.exit\n\n\n'); }, 1); return sentExit = true; } }); diff --git a/test/parallel/test-fs-realpath.js b/test/parallel/test-fs-realpath.js index 250837467d84eb..dcaf8177c9499c 100644 --- a/test/parallel/test-fs-realpath.js +++ b/test/parallel/test-fs-realpath.js @@ -87,7 +87,7 @@ function test_simple_relative_symlink(callback) { [ [entry, '../' + common.tmpDirName + '/cycles/root.js'] ].forEach(function(t) { - try {fs.unlinkSync(t[0]);} catch (e) {} + try { fs.unlinkSync(t[0]); } catch (e) {} console.log('fs.symlinkSync(%j, %j, %j)', t[1], t[0], 'file'); fs.symlinkSync(t[1], t[0], 'file'); unlink.push(t[0]); @@ -113,7 +113,7 @@ function test_simple_absolute_symlink(callback) { [ [entry, expected] ].forEach(function(t) { - try {fs.unlinkSync(t[0]);} catch (e) {} + try { fs.unlinkSync(t[0]); } catch (e) {} console.error('fs.symlinkSync(%j, %j, %j)', t[1], t[0], type); fs.symlinkSync(t[1], t[0], type); unlink.push(t[0]); @@ -138,13 +138,13 @@ function test_deep_relative_file_symlink(callback) { expected); const linkPath1 = path.join(targetsAbsDir, 'nested-index', 'one', 'symlink1.js'); - try {fs.unlinkSync(linkPath1);} catch (e) {} + try { fs.unlinkSync(linkPath1); } catch (e) {} fs.symlinkSync(linkData1, linkPath1, 'file'); const linkData2 = '../one/symlink1.js'; const entry = path.join(targetsAbsDir, 'nested-index', 'two', 'symlink1-b.js'); - try {fs.unlinkSync(entry);} catch (e) {} + try { fs.unlinkSync(entry); } catch (e) {} fs.symlinkSync(linkData2, entry, 'file'); unlink.push(linkPath1); unlink.push(entry); @@ -165,13 +165,13 @@ function test_deep_relative_dir_symlink(callback) { const path1b = path.join(targetsAbsDir, 'nested-index', 'one'); const linkPath1b = path.join(path1b, 'symlink1-dir'); const linkData1b = path.relative(path1b, expected); - try {fs.unlinkSync(linkPath1b);} catch (e) {} + try { fs.unlinkSync(linkPath1b); } catch (e) {} fs.symlinkSync(linkData1b, linkPath1b, 'dir'); const linkData2b = '../one/symlink1-dir'; const entry = path.join(targetsAbsDir, 'nested-index', 'two', 'symlink12-dir'); - try {fs.unlinkSync(entry);} catch (e) {} + try { fs.unlinkSync(entry); } catch (e) {} fs.symlinkSync(linkData2b, entry, 'dir'); unlink.push(linkPath1b); unlink.push(entry); @@ -195,7 +195,7 @@ function test_cyclic_link_protection(callback) { [common.tmpDir + '/cycles/realpath-3b', '../cycles/realpath-3c'], [common.tmpDir + '/cycles/realpath-3c', '../cycles/realpath-3a'] ].forEach(function(t) { - try {fs.unlinkSync(t[0]);} catch (e) {} + try { fs.unlinkSync(t[0]); } catch (e) {} fs.symlinkSync(t[1], t[0], 'dir'); unlink.push(t[0]); }); @@ -218,7 +218,7 @@ function test_cyclic_link_overprotection(callback) { const link = folder + '/cycles'; var testPath = cycles; testPath += '/folder/cycles'.repeat(10); - try {fs.unlinkSync(link);} catch (ex) {} + try { fs.unlinkSync(link); } catch (ex) {} fs.symlinkSync(cycles, link, 'dir'); unlink.push(link); assertEqualPath(fs.realpathSync(testPath), path.resolve(expected)); @@ -246,7 +246,7 @@ function test_relative_input_cwd(callback) { ].forEach(function(t) { const fn = t[0]; console.error('fn=%j', fn); - try {fs.unlinkSync(fn);} catch (e) {} + try { fs.unlinkSync(fn); } catch (e) {} const b = path.basename(t[1]); const type = (b === 'root.js' ? 'file' : 'dir'); console.log('fs.symlinkSync(%j, %j, %j)', t[1], fn, type); @@ -363,7 +363,7 @@ function test_up_multiple(cb) { ['a/b', 'a' ].forEach(function(folder) { - try {fs.rmdirSync(tmp(folder));} catch (ex) {} + try { fs.rmdirSync(tmp(folder)); } catch (ex) {} }); } function setup() { @@ -420,14 +420,14 @@ function test_abs_with_kids(cb) { ['/a/b/c/x.txt', '/a/link' ].forEach(function(file) { - try {fs.unlinkSync(root + file);} catch (ex) {} + try { fs.unlinkSync(root + file); } catch (ex) {} }); ['/a/b/c', '/a/b', '/a', '' ].forEach(function(folder) { - try {fs.rmdirSync(root + folder);} catch (ex) {} + try { fs.rmdirSync(root + folder); } catch (ex) {} }); } function setup() { diff --git a/test/parallel/test-http-chunked.js b/test/parallel/test-http-chunked.js index 6edb1b3f96a74b..bb91dadd159de5 100644 --- a/test/parallel/test-http-chunked.js +++ b/test/parallel/test-http-chunked.js @@ -25,7 +25,7 @@ server.listen(0, function() { port: this.address().port }, function(x) { x.setEncoding('utf8'); - x.on('data', function(c) {data += c;}); + x.on('data', function(c) { data += c; }); x.on('error', function(e) { throw e; }); @@ -37,7 +37,7 @@ server.listen(0, function() { server.close(); }); }); - get.on('error', function(e) {throw e;}); + get.on('error', function(e) { throw e; }); get.end(); }); diff --git a/test/parallel/test-v8-flag-type-check.js b/test/parallel/test-v8-flag-type-check.js index 3724944821343c..986f37314d605f 100644 --- a/test/parallel/test-v8-flag-type-check.js +++ b/test/parallel/test-v8-flag-type-check.js @@ -3,5 +3,5 @@ require('../common'); var assert = require('assert'); var v8 = require('v8'); -assert.throws(function() {v8.setFlagsFromString(1);}, TypeError); -assert.throws(function() {v8.setFlagsFromString();}, TypeError); +assert.throws(function() { v8.setFlagsFromString(1); }, TypeError); +assert.throws(function() { v8.setFlagsFromString(); }, TypeError); From 540ff7c12339c62a4c6d46c9205acbc6cdf428e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Zasso?= Date: Wed, 21 Dec 2016 08:15:56 +0100 Subject: [PATCH 067/169] =?UTF-8?q?doc:=20add=20Micha=C3=ABl=20Zasso=20to?= =?UTF-8?q?=20the=20CTC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Approved by the CTC at https://github.com/nodejs/node/issues/9420 Reviewers are CTC members who voted for this. Reviewed-By: Rich Trott Reviewed-By: Evan Lucas Reviewed-By: Colin Ihrig Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Julien Gilli Reviewed-By: Myles Borins Reviewed-By: Anna Henningsen Reviewed-By: Fedor Indutny Reviewed-By: Ben Noordhuis Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Rod Vagg Reviewed-By: Shigeki Ohtsu Reviewed-By: James M Snell Reviewed-By: Brian White --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index bdb74b5446ac40..a2abc2ad388562 100644 --- a/README.md +++ b/README.md @@ -184,6 +184,8 @@ more information about the governance of the Node.js project, see **Rod Vagg** <rod@vagg.org> * [shigeki](https://github.com/shigeki) - **Shigeki Ohtsu** <ohtsu@iij.ad.jp> +* [targos](https://github.com/targos) - +**Michaël Zasso** <targos@protonmail.com> * [TheAlphaNerd](https://github.com/TheAlphaNerd) - **Myles Borins** <myles.borins@gmail.com> * [thefourtheye](https://github.com/thefourtheye) - @@ -317,8 +319,6 @@ more information about the governance of the Node.js project, see **Steven R Loomis** <srloomis@us.ibm.com> * [stefanmb](https://github.com/stefanmb) - **Stefan Budeanu** <stefan@budeanu.com> -* [targos](https://github.com/targos) - -**Michaël Zasso** <targos@protonmail.com> * [tellnes](https://github.com/tellnes) - **Christian Tellnes** <christian@tellnes.no> * [thekemkid](https://github.com/thekemkid) - From c706a923737d1756d9cfc485aaad7f13e5ed5a2a Mon Sep 17 00:00:00 2001 From: Duy Le Date: Wed, 21 Dec 2016 15:01:31 -0800 Subject: [PATCH 068/169] test: refactor test-child-process-kill * var -> const * assert.equal() -> assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/9903 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Franziska Hinkelmann --- test/parallel/test-child-process-kill.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/parallel/test-child-process-kill.js b/test/parallel/test-child-process-kill.js index 9f6f8f6e796196..758129e1062c27 100644 --- a/test/parallel/test-child-process-kill.js +++ b/test/parallel/test-child-process-kill.js @@ -1,8 +1,8 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var spawn = require('child_process').spawn; -var cat = spawn(common.isWindows ? 'cmd' : 'cat'); +const common = require('../common'); +const assert = require('assert'); +const spawn = require('child_process').spawn; +const cat = spawn(common.isWindows ? 'cmd' : 'cat'); cat.stdout.on('end', common.mustCall(function() {})); cat.stderr.on('data', common.fail); @@ -13,6 +13,6 @@ cat.on('exit', common.mustCall(function(code, signal) { assert.strictEqual(signal, 'SIGTERM'); })); -assert.equal(cat.killed, false); +assert.strictEqual(cat.killed, false); cat.kill(); -assert.equal(cat.killed, true); +assert.strictEqual(cat.killed, true); From 0c31802ea94f1f7c7bd9f05e6b2ba0b8fde79fa5 Mon Sep 17 00:00:00 2001 From: Duy Le Date: Wed, 21 Dec 2016 15:07:46 -0800 Subject: [PATCH 069/169] test: add test-require-invalid-package Add test for requiriing an invalid package path. PR-URL: https://github.com/nodejs/node/pull/9903 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Franziska Hinkelmann --- test/parallel/test-require-invalid-package.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 test/parallel/test-require-invalid-package.js diff --git a/test/parallel/test-require-invalid-package.js b/test/parallel/test-require-invalid-package.js new file mode 100644 index 00000000000000..45272cf5c3af9a --- /dev/null +++ b/test/parallel/test-require-invalid-package.js @@ -0,0 +1,9 @@ +'use strict'; + +require('../common'); +const assert = require('assert'); + +// Should be an invalid package path. +assert.throws(() => require('package.json'), (err) => { + return err && err.code === 'MODULE_NOT_FOUND'; +}); From 40c55e73be9388511746eca584db5c5950971ec2 Mon Sep 17 00:00:00 2001 From: Duy Le Date: Wed, 21 Dec 2016 15:09:31 -0800 Subject: [PATCH 070/169] test: refactor test-net-reconnect-error * var -> const/let * assert.equal() -> assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/9903 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig Reviewed-By: Franziska Hinkelmann --- test/parallel/test-net-reconnect-error.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-net-reconnect-error.js b/test/parallel/test-net-reconnect-error.js index 4e322bd09d2914..4e1e3d14984e80 100644 --- a/test/parallel/test-net-reconnect-error.js +++ b/test/parallel/test-net-reconnect-error.js @@ -1,13 +1,13 @@ 'use strict'; -var common = require('../common'); -var net = require('net'); -var assert = require('assert'); -var N = 20; -var client_error_count = 0; -var disconnect_count = 0; +const common = require('../common'); +const net = require('net'); +const assert = require('assert'); +const N = 20; +let client_error_count = 0; +let disconnect_count = 0; // Hopefully nothing is running on common.PORT -var c = net.createConnection(common.PORT); +const c = net.createConnection(common.PORT); c.on('connect', function() { console.error('CLIENT connected'); @@ -17,7 +17,7 @@ c.on('connect', function() { c.on('error', function(e) { console.error('CLIENT error: ' + e.code); client_error_count++; - assert.equal('ECONNREFUSED', e.code); + assert.strictEqual('ECONNREFUSED', e.code); }); c.on('close', function() { @@ -27,6 +27,6 @@ c.on('close', function() { }); process.on('exit', function() { - assert.equal(N + 1, disconnect_count); - assert.equal(N + 1, client_error_count); + assert.strictEqual(N + 1, disconnect_count); + assert.strictEqual(N + 1, client_error_count); }); From 61105d75fb464d51d1c5e4955f7d7cd963d52bf9 Mon Sep 17 00:00:00 2001 From: Neeraj Sharma Date: Thu, 1 Dec 2016 10:49:52 -0600 Subject: [PATCH 071/169] test: use strictEqual in test-cwd-enoent-repl.js In file /test/parallel/test-cwd-enoent-repl.js at line: 26:3 and 27:3 assert.equal was used. This commit changes use of assert.equal to assert.strictEqual. PR-URL: https://github.com/nodejs/node/pull/9952 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- test/parallel/test-cwd-enoent-repl.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/parallel/test-cwd-enoent-repl.js b/test/parallel/test-cwd-enoent-repl.js index 2782ec4394ea06..1d03bd3e9112c1 100644 --- a/test/parallel/test-cwd-enoent-repl.js +++ b/test/parallel/test-cwd-enoent-repl.js @@ -23,6 +23,6 @@ proc.stdin.write('require("path");\n'); proc.stdin.write('process.exit(42);\n'); proc.once('exit', common.mustCall(function(exitCode, signalCode) { - assert.equal(exitCode, 42); - assert.equal(signalCode, null); + assert.strictEqual(exitCode, 42); + assert.strictEqual(signalCode, null); })); From 37ced4d324694853dea67ef27b4cd2aa38ea57e1 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Tue, 20 Dec 2016 19:00:10 -0500 Subject: [PATCH 072/169] test: refactor the code in test-http-keep-alive * use common.mustCall to control the functions execution automatically * use let and const instead of var * use assert.strictEqual instead assert.equal PR-URL: https://github.com/nodejs/node/pull/10350 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- test/parallel/test-http-keep-alive.js | 50 +++++++++++++-------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/test/parallel/test-http-keep-alive.js b/test/parallel/test-http-keep-alive.js index d48732e1161886..7f12e45765451d 100644 --- a/test/parallel/test-http-keep-alive.js +++ b/test/parallel/test-http-keep-alive.js @@ -1,51 +1,51 @@ 'use strict'; -require('../common'); -var assert = require('assert'); -var http = require('http'); +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); -var body = 'hello world\n'; +const server = http.createServer(common.mustCall((req, res) => { + const body = 'hello world\n'; -var server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Length': body.length}); res.write(body); res.end(); -}); +}, 3)); -var agent = new http.Agent({maxSockets: 1}); -var headers = {'connection': 'keep-alive'}; -var name; +const agent = new http.Agent({maxSockets: 1}); +const headers = {'connection': 'keep-alive'}; +let name; -server.listen(0, function() { +server.listen(0, common.mustCall(function() { name = agent.getName({ port: this.address().port }); http.get({ path: '/', headers: headers, port: this.address().port, agent: agent - }, function(response) { - assert.equal(agent.sockets[name].length, 1); - assert.equal(agent.requests[name].length, 2); + }, common.mustCall((response) => { + assert.strictEqual(agent.sockets[name].length, 1); + assert.strictEqual(agent.requests[name].length, 2); response.resume(); - }); + })); http.get({ path: '/', headers: headers, port: this.address().port, agent: agent - }, function(response) { - assert.equal(agent.sockets[name].length, 1); - assert.equal(agent.requests[name].length, 1); + }, common.mustCall((response) => { + assert.strictEqual(agent.sockets[name].length, 1); + assert.strictEqual(agent.requests[name].length, 1); response.resume(); - }); + })); http.get({ path: '/', headers: headers, port: this.address().port, agent: agent - }, function(response) { - response.on('end', function() { - assert.equal(agent.sockets[name].length, 1); + }, common.mustCall((response) => { + response.on('end', common.mustCall(() => { + assert.strictEqual(agent.sockets[name].length, 1); assert(!agent.requests.hasOwnProperty(name)); server.close(); - }); + })); response.resume(); - }); -}); + })); +})); -process.on('exit', function() { +process.on('exit', () => { assert(!agent.sockets.hasOwnProperty(name)); assert(!agent.requests.hasOwnProperty(name)); }); From 0e5ef4164d4afee01e4886d966e8694b1c5a87ee Mon Sep 17 00:00:00 2001 From: Ashita Nagesh Date: Thu, 1 Dec 2016 12:06:43 -0500 Subject: [PATCH 073/169] test: change assert.strict to assert.strictEqual() PR-URL: https://github.com/nodejs/node/pull/9988 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- .../test-domain-with-abort-on-uncaught-exception.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-domain-with-abort-on-uncaught-exception.js b/test/parallel/test-domain-with-abort-on-uncaught-exception.js index eae1d28e846ce2..6fb3912e5b8d9c 100644 --- a/test/parallel/test-domain-with-abort-on-uncaught-exception.js +++ b/test/parallel/test-domain-with-abort-on-uncaught-exception.js @@ -125,15 +125,15 @@ if (process.argv[2] === 'child') { } else { // By default, uncaught exceptions make node exit with an exit // code of 7. - assert.equal(exitCode, 7); - assert.equal(signal, null); + assert.strictEqual(exitCode, 7); + assert.strictEqual(signal, null); } } else { // If the top-level domain's error handler does not throw, // the process must exit gracefully, whether or not // --abort_on_uncaught_exception was passed on the command line - assert.equal(exitCode, 0); - assert.equal(signal, null); + assert.strictEqual(exitCode, 0); + assert.strictEqual(signal, null); } }); } From 4cf11d9f4a9e96885eb4a07e0c0c924c9177beb6 Mon Sep 17 00:00:00 2001 From: Segu Riluvan Date: Thu, 1 Dec 2016 11:53:59 -0600 Subject: [PATCH 074/169] test: refactor test-cluster-net-listen 10.5 error Please use assert.strictEqual() instead of assert.equal() PR-URL: https://github.com/nodejs/node/pull/10047 Reviewed-By: James M Snell --- test/parallel/test-cluster-net-listen.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/parallel/test-cluster-net-listen.js b/test/parallel/test-cluster-net-listen.js index f302b3def8bcef..d065c466f26621 100644 --- a/test/parallel/test-cluster-net-listen.js +++ b/test/parallel/test-cluster-net-listen.js @@ -7,7 +7,7 @@ const net = require('net'); if (cluster.isMaster) { // ensure that the worker exits peacefully cluster.fork().on('exit', common.mustCall(function(statusCode) { - assert.equal(statusCode, 0); + assert.strictEqual(statusCode, 0); })); } else { // listen() without port should not trigger a libuv assert From c9c9b5c47eb82c118391ee4a37ddd5d5fdb86908 Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Wed, 14 Dec 2016 23:46:08 +0200 Subject: [PATCH 075/169] doc: modernize code examples in the cluster.md - Fixes https://github.com/nodejs/node/issues/10255 - It also will be consistent with a previous code example. - `cluster.workers` iteration: `Object.keys().forEach` -> `for`...`in` PR-URL: https://github.com/nodejs/node/pull/10270 Reviewed-By: Luigi Pinca Reviewed-By: Sam Roberts --- doc/api/cluster.md | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/doc/api/cluster.md b/doc/api/cluster.md index c323282d0f94b1..dc8b6ec6a2b220 100644 --- a/doc/api/cluster.md +++ b/doc/api/cluster.md @@ -15,8 +15,10 @@ const http = require('http'); const numCPUs = require('os').cpus().length; if (cluster.isMaster) { + console.log(`Master ${process.pid} is running`); + // Fork workers. - for (var i = 0; i < numCPUs; i++) { + for (let i = 0; i < numCPUs; i++) { cluster.fork(); } @@ -30,17 +32,20 @@ if (cluster.isMaster) { res.writeHead(200); res.end('hello world\n'); }).listen(8000); + + console.log(`Worker ${process.pid} started`); } ``` Running Node.js will now share port 8000 between the workers: ```txt -$ NODE_DEBUG=cluster node server.js -23521,Master Worker 23524 online -23521,Master Worker 23526 online -23521,Master Worker 23523 online -23521,Master Worker 23528 online +$ node server.js +Master 3596 is running +Worker 4324 started +Worker 4520 started +Worker 6056 started +Worker 5644 started ``` Please note that on Windows, it is not yet possible to set up a named pipe @@ -202,27 +207,27 @@ const http = require('http'); if (cluster.isMaster) { // Keep track of http requests - var numReqs = 0; + let numReqs = 0; setInterval(() => { - console.log('numReqs =', numReqs); + console.log(`numReqs = ${numReqs}`); }, 1000); // Count requests function messageHandler(msg) { - if (msg.cmd && msg.cmd == 'notifyRequest') { + if (msg.cmd && msg.cmd === 'notifyRequest') { numReqs += 1; } } // Start workers and listen for messages containing notifyRequest const numCPUs = require('os').cpus().length; - for (var i = 0; i < numCPUs; i++) { + for (let i = 0; i < numCPUs; i++) { cluster.fork(); } - Object.keys(cluster.workers).forEach((id) => { + for (const id in cluster.workers) { cluster.workers[id].on('message', messageHandler); - }); + } } else { @@ -285,8 +290,8 @@ the `'disconnect'` event has not been emitted after some time. ```js if (cluster.isMaster) { - var worker = cluster.fork(); - var timeout; + const worker = cluster.fork(); + let timeout; worker.on('listening', (address) => { worker.send('shutdown'); @@ -302,7 +307,7 @@ if (cluster.isMaster) { } else if (cluster.isWorker) { const net = require('net'); - var server = net.createServer((socket) => { + const server = net.createServer((socket) => { // connections never end }); @@ -428,7 +433,7 @@ This example will echo back all messages from the master: ```js if (cluster.isMaster) { - var worker = cluster.fork(); + const worker = cluster.fork(); worker.send('hi there'); } else if (cluster.isWorker) { @@ -524,7 +529,7 @@ When a new worker is forked the cluster module will emit a `'fork'` event. This can be used to log worker activity, and create your own timeout. ```js -var timeouts = []; +const timeouts = []; function errorMsg() { console.error('Something must be wrong with the connection ...'); } @@ -588,7 +593,7 @@ If you need to support older versions and don't need the worker object, you can work around the discrepancy by checking the number of arguments: ```js -cluster.on('message', function(worker, message, handle) { +cluster.on('message', (worker, message, handle) => { if (arguments.length === 2) { handle = message; message = worker; @@ -807,7 +812,7 @@ before last `'disconnect'` or `'exit'` event is emitted. ```js // Go through all workers function eachWorker(callback) { - for (var id in cluster.workers) { + for (const id in cluster.workers) { callback(cluster.workers[id]); } } @@ -821,7 +826,7 @@ the worker's unique id is the easiest way to find the worker. ```js socket.on('data', (id) => { - var worker = cluster.workers[id]; + const worker = cluster.workers[id]; }); ``` From 1b9c125325dd711d25b3c42198fcb12f8b13ad6e Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Mon, 19 Dec 2016 21:40:40 -0800 Subject: [PATCH 076/169] test: refactor test-stream2-writable * add duration to setTimeout() * assert.equal() -> assert.strictEqual() * remove unused function arguments * normalize indentation PR-URL: https://github.com/nodejs/node/pull/10353 Reviewed-By: Julian Duque Reviewed-By: Matteo Collina --- test/parallel/test-stream2-writable.js | 64 +++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/test/parallel/test-stream2-writable.js b/test/parallel/test-stream2-writable.js index 050c2121b2289a..5ecdd0f76ecb5a 100644 --- a/test/parallel/test-stream2-writable.js +++ b/test/parallel/test-stream2-writable.js @@ -46,7 +46,7 @@ function run() { console.log('# %s', name); fn({ same: assert.deepStrictEqual, - equal: assert.equal, + equal: assert.strictEqual, end: function() { count--; run(); @@ -56,7 +56,7 @@ function run() { // ensure all tests have run process.on('exit', function() { - assert.equal(count, 0); + assert.strictEqual(count, 0); }); process.nextTick(run); @@ -136,18 +136,18 @@ test('write bufferize', function(t) { }); var encodings = - [ 'hex', - 'utf8', - 'utf-8', - 'ascii', - 'latin1', - 'binary', - 'base64', - 'ucs2', - 'ucs-2', - 'utf16le', - 'utf-16le', - undefined ]; + [ 'hex', + 'utf8', + 'utf-8', + 'ascii', + 'latin1', + 'binary', + 'base64', + 'ucs2', + 'ucs-2', + 'utf16le', + 'utf-16le', + undefined ]; tw.on('finish', function() { t.same(tw.buffer, chunks, 'got the expected chunks'); @@ -174,18 +174,18 @@ test('write no bufferize', function(t) { }; var encodings = - [ 'hex', - 'utf8', - 'utf-8', - 'ascii', - 'latin1', - 'binary', - 'base64', - 'ucs2', - 'ucs-2', - 'utf16le', - 'utf-16le', - undefined ]; + [ 'hex', + 'utf8', + 'utf-8', + 'ascii', + 'latin1', + 'binary', + 'base64', + 'ucs2', + 'ucs-2', + 'utf16le', + 'utf-16le', + undefined ]; tw.on('finish', function() { t.same(tw.buffer, chunks, 'got the expected chunks'); @@ -201,7 +201,7 @@ test('write no bufferize', function(t) { test('write callbacks', function(t) { var callbacks = chunks.map(function(chunk, i) { - return [i, function(er) { + return [i, function() { callbacks._called[i] = chunk; }]; }).reduce(function(set, x) { @@ -272,7 +272,7 @@ test('end callback called after write callback', function(t) { test('encoding should be ignored for buffers', function(t) { var tw = new W(); var hex = '018b5e9a8f6236ffe30e31baf80d2cf6eb'; - tw._write = function(chunk, encoding, cb) { + tw._write = function(chunk) { t.equal(chunk.toString('hex'), hex); t.end(); }; @@ -284,7 +284,7 @@ test('writables are not pipable', function(t) { var w = new W(); w._write = function() {}; var gotError = false; - w.on('error', function(er) { + w.on('error', function() { gotError = true; }); w.pipe(process.stdout); @@ -297,7 +297,7 @@ test('duplexes are pipable', function(t) { d._read = function() {}; d._write = function() {}; var gotError = false; - d.on('error', function(er) { + d.on('error', function() { gotError = true; }); d.pipe(process.stdout); @@ -331,7 +331,7 @@ test('dont end while writing', function(t) { setTimeout(function() { this.writing = false; cb(); - }); + }, 1); }; w.on('finish', function() { assert(wrote); @@ -368,7 +368,7 @@ test('finish does not come before sync _write cb', function(t) { assert(writeCb); t.end(); }); - w.write(Buffer.alloc(0), function(er) { + w.write(Buffer.alloc(0), function() { writeCb = true; }); w.end(); From 8b44fb30a1b3cd8be8e27181d08c61d2bf27971d Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 20 Dec 2016 13:38:22 -0800 Subject: [PATCH 077/169] test: fix timers-same-timeout-wrong-list-deleted test-timers-same-timeout-wrong-list-deleted was flaky under load because there is no guarantee that a timer will fire within a given period of time. It had an exit handler that checked that the process was finishing in less than twice as much as a timer was set for. Under load, the timer could take over 200ms to fire even if it was set for 100ms, so this was causing the test to be flaky on CI from time to time. However, that timing check is unnecessary to identify the regression that the test was written for. When run with a version of Node.js that does not contain the fix that accompanied the test in its initial commit, an assertion indicating that there were still timers in the active timer list fired. So, this commit removes the exit handler timing check and relies on the existing robust active timers list length check. This allows us to move the test back to parallel because it does not seem to fail under load anymore. The test was refactored slightly, removing duplicated code to a function, using `assert.strictEqual()` instead of `assert.equal()`, changing a 10ms timer to 1ms, and improving the messages provided by assertions. Fixes: https://github.com/nodejs/node/issues/8459 PR-URL: https://github.com/nodejs/node/pull/10362 Reviewed-By: Jeremiah Senkpiel Reviewed-By: James M Snell --- ...-timers-same-timeout-wrong-list-deleted.js | 40 ++++++++----------- 1 file changed, 16 insertions(+), 24 deletions(-) rename test/{sequential => parallel}/test-timers-same-timeout-wrong-list-deleted.js (68%) diff --git a/test/sequential/test-timers-same-timeout-wrong-list-deleted.js b/test/parallel/test-timers-same-timeout-wrong-list-deleted.js similarity index 68% rename from test/sequential/test-timers-same-timeout-wrong-list-deleted.js rename to test/parallel/test-timers-same-timeout-wrong-list-deleted.js index 05c0233e124b83..8a622b32e434af 100644 --- a/test/sequential/test-timers-same-timeout-wrong-list-deleted.js +++ b/test/parallel/test-timers-same-timeout-wrong-list-deleted.js @@ -16,16 +16,6 @@ const assert = require('assert'); const Timer = process.binding('timer_wrap').Timer; const TIMEOUT = common.platformTimeout(100); -const start = Timer.now(); - -// This bug also prevents the erroneously dereferenced timer's callback -// from being called, so we can't use it's execution or lack thereof -// to assert that the bug is fixed. -process.on('exit', function() { - const end = Timer.now(); - assert.equal(end - start < TIMEOUT * 2, true, - 'Elapsed time does not include second timer\'s timeout.'); -}); const handle1 = setTimeout(common.mustCall(function() { // Cause the old TIMEOUT list to be deleted @@ -42,27 +32,22 @@ const handle1 = setTimeout(common.mustCall(function() { // erroneously deleted. If we are able to cancel the timer successfully, // the bug is fixed. clearTimeout(handle2); + setImmediate(common.mustCall(function() { setImmediate(common.mustCall(function() { - const activeHandles = process._getActiveHandles(); - const activeTimers = activeHandles.filter(function(handle) { - return handle instanceof Timer; - }); + const activeTimers = getActiveTimers(); // Make sure our clearTimeout succeeded. One timer finished and // the other was canceled, so none should be active. - assert.equal(activeTimers.length, 0, 'No Timers remain.'); + assert.strictEqual(activeTimers.length, 0, 'Timers remain.'); })); })); - }), 10); + }), 1); // Make sure our timers got added to the list. - const activeHandles = process._getActiveHandles(); - const activeTimers = activeHandles.filter(function(handle) { - return handle instanceof Timer; - }); + const activeTimers = getActiveTimers(); const shortTimer = activeTimers.find(function(handle) { - return handle._list.msecs === 10; + return handle._list.msecs === 1; }); const longTimers = activeTimers.filter(function(handle) { return handle._list.msecs === TIMEOUT; @@ -70,11 +55,18 @@ const handle1 = setTimeout(common.mustCall(function() { // Make sure our clearTimeout succeeded. One timer finished and // the other was canceled, so none should be active. - assert.equal(activeTimers.length, 3, 'There are 3 timers in the list.'); - assert(shortTimer instanceof Timer, 'The shorter timer is in the list.'); - assert.equal(longTimers.length, 2, 'Both longer timers are in the list.'); + assert.strictEqual(activeTimers.length, 3, + 'There should be 3 timers in the list.'); + assert(shortTimer instanceof Timer, 'The shorter timer is not in the list.'); + assert.strictEqual(longTimers.length, 2, + 'Both longer timers should be in the list.'); // When this callback completes, `listOnTimeout` should now look at the // correct list and refrain from removing the new TIMEOUT list which // contains the reference to the newer timer. }), TIMEOUT); + +function getActiveTimers() { + const activeHandles = process._getActiveHandles(); + return activeHandles.filter((handle) => handle instanceof Timer); +} From e60be9ccc36e9b5d15f46901f3c07cc3be7482d5 Mon Sep 17 00:00:00 2001 From: Emanuel Buholzer Date: Sun, 18 Dec 2016 03:04:37 +0100 Subject: [PATCH 078/169] test: refactor test-stdin-script-child - var -> const where possible - assert.equal -> assert.strictEqual - passed the setTimeout function a second parameter for readability - used assert.strictEqual for assert(!c) as it is expected to be 0 and not some other value PR-URL: https://github.com/nodejs/node/pull/10321 Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott Reviewed-By: Italo A. Casas --- test/parallel/test-stdin-script-child.js | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/test/parallel/test-stdin-script-child.js b/test/parallel/test-stdin-script-child.js index ad65734364e707..091c5cb29ad296 100644 --- a/test/parallel/test-stdin-script-child.js +++ b/test/parallel/test-stdin-script-child.js @@ -1,14 +1,14 @@ 'use strict'; -require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); -var spawn = require('child_process').spawn; -var child = spawn(process.execPath, [], { +const spawn = require('child_process').spawn; +const child = spawn(process.execPath, [], { env: Object.assign(process.env, { NODE_DEBUG: process.argv[2] }) }); -var wanted = child.pid + '\n'; +const wanted = child.pid + '\n'; var found = ''; child.stdout.setEncoding('utf8'); @@ -21,12 +21,12 @@ child.stderr.on('data', function(c) { console.error('> ' + c.trim().split(/\n/).join('\n> ')); }); -child.on('close', function(c) { - assert(!c); - assert.equal(found, wanted); +child.on('close', common.mustCall(function(c) { + assert.strictEqual(c, 0); + assert.strictEqual(found, wanted); console.log('ok'); -}); +})); setTimeout(function() { child.stdin.end('console.log(process.pid)'); -}); +}, 1); From 390cab8d1a5a4320cc6b516d2f8c9b4c7de3bb49 Mon Sep 17 00:00:00 2001 From: Daniel Sims Date: Thu, 1 Dec 2016 10:54:07 -0600 Subject: [PATCH 079/169] test: change var declarations, add mustCall check In this test, I changed the var declarations to be either a let or a const. For some of the callbacks, I added a mustCall check to ensure that the functions have run. I also changed assert.equal() to assert.strictEqual(). PR-URL: https://github.com/nodejs/node/pull/9962 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- test/parallel/test-cluster-net-send.js | 33 +++++++++++++------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-cluster-net-send.js b/test/parallel/test-cluster-net-send.js index fe536b5f2a43c3..d375920e91b18b 100644 --- a/test/parallel/test-cluster-net-send.js +++ b/test/parallel/test-cluster-net-send.js @@ -1,29 +1,29 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var fork = require('child_process').fork; -var net = require('net'); +const common = require('../common'); +const assert = require('assert'); +const fork = require('child_process').fork; +const net = require('net'); if (process.argv[2] !== 'child') { console.error('[%d] master', process.pid); - var worker = fork(__filename, ['child']); - var called = false; + const worker = fork(__filename, ['child']); + let called = false; - worker.once('message', function(msg, handle) { - assert.equal(msg, 'handle'); + worker.once('message', common.mustCall(function(msg, handle) { + assert.strictEqual(msg, 'handle'); assert.ok(handle); worker.send('got'); handle.on('data', function(data) { called = true; - assert.equal(data.toString(), 'hello'); + assert.strictEqual(data.toString(), 'hello'); }); handle.on('end', function() { worker.kill(); }); - }); + })); process.once('exit', function() { assert.ok(called); @@ -31,20 +31,21 @@ if (process.argv[2] !== 'child') { } else { console.error('[%d] worker', process.pid); - var socket; - var cbcalls = 0; + let socket; + let cbcalls = 0; function socketConnected() { if (++cbcalls === 2) process.send('handle', socket); } - var server = net.createServer(function(c) { - process.once('message', function(msg) { - assert.equal(msg, 'got'); + const server = net.createServer(function(c) { + process.once('message', common.mustCall(function(msg) { + assert.strictEqual(msg, 'got'); c.end('hello'); - }); + })); socketConnected(); }); + server.listen(common.PORT, function() { socket = net.connect(common.PORT, '127.0.0.1', socketConnected); }); From 781d04a1b3f7a5682eac7540c30fa1d74805bc79 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Sat, 17 Dec 2016 11:10:52 -0500 Subject: [PATCH 080/169] test: improve code in test-http-bind-twice.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use const instead of var for required modules * use assert.strictEqual instead of assert.equal PR-URL: https://github.com/nodejs/node/pull/10318 Reviewed-By: Colin Ihrig Reviewed-By: Michaël Zasso Reviewed-By: Italo A. Casas Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- test/parallel/test-http-bind-twice.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-http-bind-twice.js b/test/parallel/test-http-bind-twice.js index ccbd84b149f381..f90905d3260f8a 100644 --- a/test/parallel/test-http-bind-twice.js +++ b/test/parallel/test-http-bind-twice.js @@ -1,15 +1,15 @@ 'use strict'; const common = require('../common'); -var assert = require('assert'); -var http = require('http'); +const assert = require('assert'); +const http = require('http'); -var server1 = http.createServer(common.fail); +const server1 = http.createServer(common.fail); server1.listen(0, '127.0.0.1', common.mustCall(function() { - var server2 = http.createServer(common.fail); + const server2 = http.createServer(common.fail); server2.listen(this.address().port, '127.0.0.1', common.fail); server2.on('error', common.mustCall(function(e) { - assert.equal(e.code, 'EADDRINUSE'); + assert.strictEqual(e.code, 'EADDRINUSE'); server1.close(); })); })); From 6370cbe9dce61b403e01690bb1edf84c13214a2e Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 16 Dec 2016 10:42:36 -0500 Subject: [PATCH 081/169] test: refactor code in test-cluster-http-pipe * use common.mustCall to control the functions execution automatically * use const instead of var * use assert.strictEqual instead assert.equal * use assert.ifError instead of throw error PR-URL: https://github.com/nodejs/node/pull/10297 Reviewed-By: Colin Ihrig Reviewed-By: Minwoo Jung Reviewed-By: Santiago Gimeno Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- test/parallel/test-cluster-http-pipe.js | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-cluster-http-pipe.js b/test/parallel/test-cluster-http-pipe.js index 0d6cb422be80c2..6db581564a124c 100644 --- a/test/parallel/test-cluster-http-pipe.js +++ b/test/parallel/test-cluster-http-pipe.js @@ -13,28 +13,28 @@ if (common.isWindows) { if (cluster.isMaster) { common.refreshTmpDir(); - var worker = cluster.fork(); - worker.on('message', common.mustCall(function(msg) { - assert.equal(msg, 'DONE'); + const worker = cluster.fork(); + worker.on('message', common.mustCall((msg) => { + assert.strictEqual(msg, 'DONE'); })); - worker.on('exit', function() { - process.exit(); - }); + worker.on('exit', common.mustCall(() => {})); return; } -http.createServer(function(req, res) { - assert.equal(req.connection.remoteAddress, undefined); - assert.equal(req.connection.localAddress, undefined); // TODO common.PIPE? +http.createServer(common.mustCall((req, res) => { + assert.strictEqual(req.connection.remoteAddress, undefined); + assert.strictEqual(req.connection.localAddress, undefined); + // TODO common.PIPE? + res.writeHead(200); res.end('OK'); -}).listen(common.PIPE, function() { - http.get({ socketPath: common.PIPE, path: '/' }, function(res) { +})).listen(common.PIPE, common.mustCall(() => { + http.get({ socketPath: common.PIPE, path: '/' }, common.mustCall((res) => { res.resume(); - res.on('end', function(err) { - if (err) throw err; + res.on('end', common.mustCall((err) => { + assert.ifError(err); process.send('DONE'); process.exit(); - }); - }); -}); + })); + })); +})); From 54dec23aba9c87c574d90d5a67dfbe5f2c133846 Mon Sep 17 00:00:00 2001 From: Chase Starr Date: Fri, 16 Dec 2016 17:28:59 -0800 Subject: [PATCH 082/169] doc: clarify macosx-firewall suggestion BUILDING `./tools/macosx-firewall.sh` fails if run before build step. Since the suggestion comes before the build steps in the document, this change clarifies that the script should be run after building. PR-URL: https://github.com/nodejs/node/pull/10311 Reviewed-By: Myles Borins Reviewed-By: Jeremiah Senkpiel Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Gibson Fahnestock Reviewed-By: James M Snell --- BUILDING.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BUILDING.md b/BUILDING.md index b1962d53c2caf4..b98bb75d79b656 100644 --- a/BUILDING.md +++ b/BUILDING.md @@ -24,8 +24,8 @@ On OS X, you will also need: this under the menu `Xcode -> Preferences -> Downloads` * This step will install `gcc` and the related toolchain containing `make` -* You may want to setup [firewall rules](tools/macosx-firewall.sh) to avoid -popups asking to accept incoming network connections when running tests: +* After building, you may want to setup [firewall rules](tools/macosx-firewall.sh) +to avoid popups asking to accept incoming network connections when running tests: ```console $ sudo ./tools/macosx-firewall.sh From 12d86aba49ebe7bf2995ebd2a2c3b69045b1cddf Mon Sep 17 00:00:00 2001 From: "Sakthipriyan Vairamani (thefourtheye)" Date: Wed, 21 Dec 2016 15:58:00 +0530 Subject: [PATCH 083/169] test: refactor test-init.js 1. Lot of repeating code has been refactored to a function 2. Errors in async calls are properly asserted 3. Fail the test if the callbacks are not fired PR-URL: https://github.com/nodejs/node/pull/10384 Reviewed-By: James M Snell Reviewed-By: Anna Henningsen Reviewed-By: Julian Duque --- test/sequential/test-init.js | 58 ++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 32 deletions(-) diff --git a/test/sequential/test-init.js b/test/sequential/test-init.js index c8127e32a1c527..75ac39c35ae4cc 100644 --- a/test/sequential/test-init.js +++ b/test/sequential/test-init.js @@ -2,46 +2,40 @@ const common = require('../common'); const assert = require('assert'); const child = require('child_process'); -const util = require('util'); +const path = require('path'); + if (process.env['TEST_INIT']) { - util.print('Loaded successfully!'); -} else { - // change CWD as we do this test so its not dependant on current CWD - // being in the test folder - process.chdir(__dirname); + return process.stdout.write('Loaded successfully!'); +} + +process.env.TEST_INIT = 1; - // slow but simple - var envCopy = JSON.parse(JSON.stringify(process.env)); - envCopy.TEST_INIT = 1; +function test(file, expected) { + const path = `"${process.execPath}" ${file}`; + child.exec(path, {env: process.env}, common.mustCall((err, out) => { + assert.ifError(err); + assert.strictEqual(out, expected, `'node ${file}' failed!`); + })); +} - child.exec('"' + process.execPath + '" test-init', {env: envCopy}, - function(err, stdout, stderr) { - assert.equal(stdout, 'Loaded successfully!', - '`node test-init` failed!'); - }); - child.exec('"' + process.execPath + '" test-init.js', {env: envCopy}, - function(err, stdout, stderr) { - assert.equal(stdout, 'Loaded successfully!', - '`node test-init.js` failed!'); - }); +{ + // change CWD as we do this test so it's not dependent on current CWD + // being in the test folder + process.chdir(__dirname); + test('test-init', 'Loaded successfully!'); + test('test-init.js', 'Loaded successfully!'); +} +{ // test-init-index is in fixtures dir as requested by ry, so go there process.chdir(common.fixturesDir); + test('test-init-index', 'Loaded successfully!'); +} - child.exec('"' + process.execPath + '" test-init-index', {env: envCopy}, - function(err, stdout, stderr) { - assert.equal(stdout, 'Loaded successfully!', - '`node test-init-index failed!'); - }); - +{ // ensures that `node fs` does not mistakenly load the native 'fs' module // instead of the desired file and that the fs module loads as // expected in node - process.chdir(common.fixturesDir + '/test-init-native/'); - - child.exec('"' + process.execPath + '" fs', {env: envCopy}, - function(err, stdout, stderr) { - assert.equal(stdout, 'fs loaded successfully', - '`node fs` failed!'); - }); + process.chdir(path.join(common.fixturesDir, 'test-init-native')); + test('fs', 'fs loaded successfully'); } From 59aa4e9e2956b585c2a5aaaa578f9e2ed9808e64 Mon Sep 17 00:00:00 2001 From: Myles Borins Date: Wed, 21 Dec 2016 14:14:16 -0500 Subject: [PATCH 084/169] doc: consistent 'Returns:' part two Follow up from 8eb19c4. Lower case `return` was not updated PR-URL: https://github.com/nodejs/node/pull/10391 Ref: https://github.com/nodejs/node/pull/9554 Reviewed-By: Colin Ihrig Reviewed-By: Julian Duque Reviewed-By: Jeremiah Senkpiel Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca Reviewed-By: Roman Reiss Reviewed-By: James M Snell --- doc/api/child_process.md | 8 ++++---- doc/api/domain.md | 6 +++--- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/doc/api/child_process.md b/doc/api/child_process.md index 02f6a057e72585..4433e14ddc00fa 100644 --- a/doc/api/child_process.md +++ b/doc/api/child_process.md @@ -318,7 +318,7 @@ added: v0.1.90 `'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX, or `/s /c` on Windows. Defaults to `false` (no shell). -* return: {ChildProcess} +* Returns: {ChildProcess} The `child_process.spawn()` method spawns a new process using the given `command`, with command line arguments in `args`. If omitted, `args` defaults @@ -588,7 +588,7 @@ added: v0.11.12 * [`maxBuffer`][] {Number} largest amount of data (in bytes) allowed on stdout or stderr - if exceeded child process is killed * `encoding` {String} The encoding used for all stdio inputs and outputs. (Default: `'buffer'`) -* return: {Buffer|String} The stdout from the command +* Returns: {Buffer|String} The stdout from the command The `child_process.execFileSync()` method is generally identical to [`child_process.execFile()`][] with the exception that the method will not return @@ -631,7 +631,7 @@ added: v0.11.12 stdout or stderr - if exceeded child process is killed * `encoding` {String} The encoding used for all stdio inputs and outputs. (Default: `'buffer'`) -* return: {Buffer|String} The stdout from the command +* Returns: {Buffer|String} The stdout from the command The `child_process.execSync()` method is generally identical to [`child_process.exec()`][] with the exception that the method will not return until @@ -673,7 +673,7 @@ added: v0.11.12 `'/bin/sh'` on UNIX, and `'cmd.exe'` on Windows. A different shell can be specified as a string. The shell should understand the `-c` switch on UNIX, or `/s /c` on Windows. Defaults to `false` (no shell). -* return: {Object} +* Returns: {Object} * `pid` {Number} Pid of the child process * `output` {Array} Array of results from stdio output * `stdout` {Buffer|String} The contents of `output[1]` diff --git a/doc/api/domain.md b/doc/api/domain.md index e1dd65e05c45d3..86f5226d69e370 100644 --- a/doc/api/domain.md +++ b/doc/api/domain.md @@ -257,7 +257,7 @@ serverDomain.run(() => { ## domain.create() -* return: {Domain} +* Returns: {Domain} Returns a new Domain object. @@ -338,7 +338,7 @@ specified emitter. ### domain.bind(callback) * `callback` {Function} The callback function -* return: {Function} The bound function +* Returns: {Function} The bound function The returned function will be a wrapper around the supplied callback function. When the returned function is called, any errors that are @@ -366,7 +366,7 @@ d.on('error', (er) => { ### domain.intercept(callback) * `callback` {Function} The callback function -* return: {Function} The intercepted function +* Returns: {Function} The intercepted function This method is almost identical to [`domain.bind(callback)`][]. However, in addition to catching thrown errors, it will also intercept [`Error`][] From 75d6f111aaa6e8638cd90ce2c8e6bb21e95fa4d8 Mon Sep 17 00:00:00 2001 From: Troy Connor Date: Wed, 7 Dec 2016 11:06:30 -0500 Subject: [PATCH 085/169] benchmark: refactor buffer benchmarks Add configuration object createBenchmark object for buffer size & iteration in buffer-base64-encode & buffer-base64-decode.js. PR-URL: https://github.com/nodejs/node/pull/10175 Reviewed-By: James M Snell Reviewed-By: Brian White --- benchmark/buffers/buffer-base64-decode.js | 9 ++++++--- benchmark/buffers/buffer-base64-encode.js | 20 ++++++++++++-------- 2 files changed, 18 insertions(+), 11 deletions(-) diff --git a/benchmark/buffers/buffer-base64-decode.js b/benchmark/buffers/buffer-base64-decode.js index 01f7f1bc91bc4a..3d00e69b90764c 100644 --- a/benchmark/buffers/buffer-base64-decode.js +++ b/benchmark/buffers/buffer-base64-decode.js @@ -2,15 +2,18 @@ const assert = require('assert'); const common = require('../common.js'); -const bench = common.createBenchmark(main, {}); +const bench = common.createBenchmark(main, { + n: [32], +}); function main(conf) { + const n = +conf.n; const s = 'abcd'.repeat(8 << 20); s.match(/./); // Flatten string. assert.strictEqual(s.length % 4, 0); const b = Buffer.allocUnsafe(s.length / 4 * 3); b.write(s, 0, s.length, 'base64'); bench.start(); - for (var i = 0; i < 32; i += 1) b.base64Write(s, 0, s.length); - bench.end(32); + for (var i = 0; i < n; i += 1) b.base64Write(s, 0, s.length); + bench.end(n); } diff --git a/benchmark/buffers/buffer-base64-encode.js b/benchmark/buffers/buffer-base64-encode.js index 930dc82b6b9ab7..f618ba21ecfdc9 100644 --- a/benchmark/buffers/buffer-base64-encode.js +++ b/benchmark/buffers/buffer-base64-encode.js @@ -1,16 +1,20 @@ 'use strict'; var common = require('../common.js'); -var bench = common.createBenchmark(main, {}); +const bench = common.createBenchmark(main, { + len: [64 * 1024 * 1024], + n: [32] +}); function main(conf) { - var N = 64 * 1024 * 1024; - var b = Buffer.allocUnsafe(N); - var s = ''; - var i; + const n = +conf.n; + const len = +conf.len; + const b = Buffer.allocUnsafe(len); + let s = ''; + let i; for (i = 0; i < 256; ++i) s += String.fromCharCode(i); - for (i = 0; i < N; i += 256) b.write(s, i, 256, 'ascii'); + for (i = 0; i < len; i += 256) b.write(s, i, 256, 'ascii'); bench.start(); - for (i = 0; i < 32; ++i) b.toString('base64'); - bench.end(64); + for (i = 0; i < n; ++i) b.toString('base64'); + bench.end(n); } From 3f289a3efe42e03ced06937c7626a00d64e24610 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Wed, 21 Dec 2016 10:15:42 -0800 Subject: [PATCH 086/169] doc: improve common.mustCall() explanation PR-URL: https://github.com/nodejs/node/pull/10390 Reviewed-By: Colin Ihrig Reviewed-By: Julian Duque Reviewed-By: Luigi Pinca Reviewed-By: Italo A. Casas Reviewed-By: James M Snell --- test/README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/test/README.md b/test/README.md index 1c3303435db517..8d8cec44919720 100644 --- a/test/README.md +++ b/test/README.md @@ -290,8 +290,11 @@ Array of IPV6 hosts. ### mustCall(fn[, expected]) * fn [<Function>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) * expected [<Number>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) default = 1 +* return [<Function>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function) -Number of times `fn` should be called. +Returns a function that calls `fn`. If the returned function has not been called +exactly `expected` number of times when the test is complete, then the test will +fail. ### nodeProcessAborted(exitCode, signal) * `exitCode` [<Number>](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type) From 5f18f0c448a553209138b07853d1e04fd415b824 Mon Sep 17 00:00:00 2001 From: "Sakthipriyan Vairamani (thefourtheye)" Date: Wed, 21 Dec 2016 07:20:45 +0530 Subject: [PATCH 087/169] test: fix and improve debug-break-on-uncaught This test runs based on a expectation that the stderr will get the string 'Debugger listening on port'. But the actual message printed to stderr has changed to 'Debugger listening on host:port'. So the the actuals tests did not even start and eventually timeout. Apart from that, changed `var`s to `let`s or `const`s. Refs: https://github.com/nodejs/node/issues/10361 PR-URL: https://github.com/nodejs/node/pull/10370 Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott Reviewed-By: James M Snell Date: Mon, 12 Dec 2016 15:56:36 +0000 Subject: [PATCH 088/169] fs: cache non-symlinks in realpathSync. Extend `fs.realpathSync` to cache the results for paths that are not symlinks in addition to caching symlink mappings. PR-URL: https://github.com/nodejs/node/pull/10253 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- lib/fs.js | 1 + 1 file changed, 1 insertion(+) diff --git a/lib/fs.js b/lib/fs.js index e63e2c85800196..c3c6f0536e3ef3 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1662,6 +1662,7 @@ fs.realpathSync = function realpathSync(p, options) { var stat = fs.lstatSync(base); if (!stat.isSymbolicLink()) { knownHard[base] = true; + if (cache) cache.set(base, base); continue; } From f1075a1726092bbc40318b3fcc2d5e491188d5ca Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 23 Dec 2016 14:01:17 -0500 Subject: [PATCH 089/169] test: improve code in test-vm-symbols * use const instead of var * use assert.strictEqual instead of assert.equal PR-URL: https://github.com/nodejs/node/pull/10429 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- test/parallel/test-vm-symbols.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-vm-symbols.js b/test/parallel/test-vm-symbols.js index f80609c0101d51..0867c7253dcec4 100644 --- a/test/parallel/test-vm-symbols.js +++ b/test/parallel/test-vm-symbols.js @@ -1,11 +1,11 @@ 'use strict'; require('../common'); -var assert = require('assert'); +const assert = require('assert'); -var vm = require('vm'); +const vm = require('vm'); -var symbol = Symbol(); +const symbol = Symbol(); function Document() { this[symbol] = 'foo'; @@ -15,11 +15,11 @@ Document.prototype.getSymbolValue = function() { return this[symbol]; }; -var context = new Document(); +const context = new Document(); vm.createContext(context); -assert.equal(context.getSymbolValue(), 'foo', - 'should return symbol-keyed value from the outside'); +assert.strictEqual(context.getSymbolValue(), 'foo', + 'should return symbol-keyed value from the outside'); -assert.equal(vm.runInContext('this.getSymbolValue()', context), 'foo', - 'should return symbol-keyed value from the inside'); +assert.strictEqual(vm.runInContext('this.getSymbolValue()', context), 'foo', + 'should return symbol-keyed value from the inside'); From 3c642ee2ceb0d099360bfea147abecdd2bafa50c Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Tue, 20 Dec 2016 19:27:56 -0500 Subject: [PATCH 090/169] test: improve code in test-fs-readfile-error * use const instead of var * use common.mustCall to control the functions execution automatically * use assert.strictEqual instead of assert.equal * use assert.notStrictEqual instead of assert.notEqual * use arrow functions PR-URL: https://github.com/nodejs/node/pull/10367 Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Colin Ihrig Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- test/parallel/test-fs-readfile-error.js | 26 ++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/test/parallel/test-fs-readfile-error.js b/test/parallel/test-fs-readfile-error.js index 86a2be4e1bc020..827c84d7b7093c 100644 --- a/test/parallel/test-fs-readfile-error.js +++ b/test/parallel/test-fs-readfile-error.js @@ -1,8 +1,8 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var exec = require('child_process').exec; -var path = require('path'); +const common = require('../common'); +const assert = require('assert'); +const exec = require('child_process').exec; +const path = require('path'); // `fs.readFile('/')` does not fail on FreeBSD, because you can open and read // the directory there. @@ -12,23 +12,23 @@ if (process.platform === 'freebsd') { } function test(env, cb) { - var filename = path.join(common.fixturesDir, 'test-fs-readfile-error.js'); - var execPath = '"' + process.execPath + '" "' + filename + '"'; - var options = { env: Object.assign(process.env, env) }; - exec(execPath, options, function(err, stdout, stderr) { + const filename = path.join(common.fixturesDir, 'test-fs-readfile-error.js'); + const execPath = '"' + process.execPath + '" "' + filename + '"'; + const options = { env: Object.assign(process.env, env) }; + exec(execPath, options, common.mustCall((err, stdout, stderr) => { assert(err); - assert.equal(stdout, ''); - assert.notEqual(stderr, ''); + assert.strictEqual(stdout, ''); + assert.notStrictEqual(stderr, ''); cb('' + stderr); - }); + })); } -test({ NODE_DEBUG: '' }, common.mustCall(function(data) { +test({ NODE_DEBUG: '' }, common.mustCall((data) => { assert(/EISDIR/.test(data)); assert(!/test-fs-readfile-error/.test(data)); })); -test({ NODE_DEBUG: 'fs' }, common.mustCall(function(data) { +test({ NODE_DEBUG: 'fs' }, common.mustCall((data) => { assert(/EISDIR/.test(data)); assert(/test-fs-readfile-error/.test(data)); })); From d2ce3909b1b89900457cb9dc0c93b6f51f73c612 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Tue, 27 Dec 2016 12:12:07 -0500 Subject: [PATCH 091/169] test: improve the code in test-pipe.js * use const and let instead of var * use common.mustCall to control functions executions * use assert.strictEqual instead of assert.equal * use assert.ifError to handle errors * use arrow functions * remove console.log and process.stdout.write PR-URL: https://github.com/nodejs/node/pull/10452 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Brian White --- test/sequential/test-pipe.js | 94 +++++++++++++++--------------------- 1 file changed, 40 insertions(+), 54 deletions(-) diff --git a/test/sequential/test-pipe.js b/test/sequential/test-pipe.js index 36d40100a7fec6..75154bcdf5f360 100644 --- a/test/sequential/test-pipe.js +++ b/test/sequential/test-pipe.js @@ -1,110 +1,96 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var http = require('http'); -var net = require('net'); +const common = require('../common'); +const assert = require('assert'); +const http = require('http'); +const net = require('net'); -var webPort = common.PORT; -var tcpPort = webPort + 1; +const webPort = common.PORT; +const tcpPort = webPort + 1; +const bufferSize = 5 * 1024 * 1024; -var listenCount = 0; -var gotThanks = false; -var tcpLengthSeen = 0; -var bufferSize = 5 * 1024 * 1024; +let listenCount = 0; +let gotThanks = false; +let tcpLengthSeen = 0; /* * 5MB of random buffer. */ -var buffer = Buffer.allocUnsafe(bufferSize); -for (var i = 0; i < buffer.length; i++) { +const buffer = Buffer.allocUnsafe(bufferSize); +for (let i = 0; i < buffer.length; i++) { buffer[i] = parseInt(Math.random() * 10000) % 256; } -var web = http.Server(function(req, res) { +const web = http.Server(common.mustCall((req, res) => { web.close(); - console.log(req.headers); - - var socket = net.Stream(); + const socket = net.Stream(); socket.connect(tcpPort); - socket.on('connect', function() { - console.log('socket connected'); - }); + socket.on('connect', common.mustCall(() => {})); req.pipe(socket); - req.on('end', function() { + req.on('end', common.mustCall(() => { res.writeHead(200); res.write('thanks'); res.end(); - console.log('response with \'thanks\''); - }); + })); - req.connection.on('error', function(e) { - console.log('http server-side error: ' + e.message); - process.exit(1); + req.connection.on('error', (e) => { + assert.ifError(e); }); -}); +})); + web.listen(webPort, startClient); -var tcp = net.Server(function(s) { +const tcp = net.Server(common.mustCall((s) => { tcp.close(); - console.log('tcp server connection'); - - var i = 0; + let i = 0; - s.on('data', function(d) { - process.stdout.write('.'); + s.on('data', (d) => { tcpLengthSeen += d.length; - for (var j = 0; j < d.length; j++) { - assert.equal(buffer[i], d[j]); + for (let j = 0; j < d.length; j++) { + assert.strictEqual(buffer[i], d[j]); i++; } }); - s.on('end', function() { - console.log('tcp socket disconnect'); + s.on('end', common.mustCall(() => { s.end(); - }); + })); - s.on('error', function(e) { - console.log('tcp server-side error: ' + e.message); - process.exit(1); + s.on('error', (e) => { + assert.ifError(e); }); -}); -tcp.listen(tcpPort, startClient); +})); +tcp.listen(tcpPort, startClient); function startClient() { listenCount++; if (listenCount < 2) return; - console.log('Making request'); - - var req = http.request({ + const req = http.request({ port: common.PORT, method: 'GET', path: '/', headers: { 'content-length': buffer.length } - }, function(res) { - console.log('Got response'); + }, common.mustCall((res) => { res.setEncoding('utf8'); - res.on('data', function(string) { - assert.equal('thanks', string); + res.on('data', common.mustCall((string) => { + assert.strictEqual('thanks', string); gotThanks = true; - }); - }); + })); + })); req.write(buffer); req.end(); - console.error('ended request', req); } -process.on('exit', function() { +process.on('exit', () => { assert.ok(gotThanks); - assert.equal(bufferSize, tcpLengthSeen); + assert.strictEqual(bufferSize, tcpLengthSeen); }); From 809ae9da29cba1fb584cfe63263b1648132b3a10 Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Sun, 25 Dec 2016 19:57:12 +0200 Subject: [PATCH 092/169] doc: var -> const / let in the console.md PR-URL: https://github.com/nodejs/node/pull/10451 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- doc/api/console.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/console.md b/doc/api/console.md index e5d3957e5087dd..98a05d004f57c5 100644 --- a/doc/api/console.md +++ b/doc/api/console.md @@ -88,7 +88,7 @@ const errorOutput = fs.createWriteStream('./stderr.log'); // custom simple logger const logger = new Console(output, errorOutput); // use it like console -var count = 5; +const count = 5; logger.log('count: %d', count); // in stdout.log: count 5 ``` @@ -217,7 +217,7 @@ values similar to printf(3) (the arguments are all passed to [`util.format()`][]). ```js -var count = 5; +const count = 5; console.log('count: %d', count); // Prints: count: 5, to stdout console.log('count:', count); @@ -248,7 +248,7 @@ prints the result to `stdout`: ```js console.time('100-elements'); -for (var i = 0; i < 100; i++) { +for (let i = 0; i < 100; i++) { ; } console.timeEnd('100-elements'); From c2156fcba1e9b76c590e1907a0280b8050eb574c Mon Sep 17 00:00:00 2001 From: Vse Mozhet Byt Date: Sun, 25 Dec 2016 20:04:45 +0200 Subject: [PATCH 093/169] doc: more efficient example in the console.md Object.setPrototypeOf() -> Object.create() PR-URL: https://github.com/nodejs/node/pull/10451 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- doc/api/console.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/doc/api/console.md b/doc/api/console.md index 98a05d004f57c5..70b452bd84070f 100644 --- a/doc/api/console.md +++ b/doc/api/console.md @@ -135,15 +135,20 @@ the default behavior of `console` in Node.js. // Creates a simple extension of console with a // new impl for assert without monkey-patching. -const myConsole = Object.setPrototypeOf({ - assert(assertion, message, ...args) { - try { - console.assert(assertion, message, ...args); - } catch (err) { - console.error(err.stack); - } - } -}, console); +const myConsole = Object.create(console, { + assert: { + value: function assert(assertion, message, ...args) { + try { + console.assert(assertion, message, ...args); + } catch (err) { + console.error(err.stack); + } + }, + configurable: true, + enumerable: true, + writable: true, + }, +}); module.exports = myConsole; ``` From 1dc7b8918d61fa42115b0747687bb4c725de94a9 Mon Sep 17 00:00:00 2001 From: Fumiya KARASAWA Date: Fri, 23 Dec 2016 00:56:31 +0900 Subject: [PATCH 094/169] doc: fixup errors in stream.md When decodeStrings is false and given data is string, _write() function receives the string data not `Buffer`. PR-URL: https://github.com/nodejs/node/pull/10411 Reviewed-By: Matteo Collina Reviewed-By: James M Snell --- doc/api/stream.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/api/stream.md b/doc/api/stream.md index 6217e8e6dc02d2..121423095edd5d 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -1271,8 +1271,8 @@ If the `decodeStrings` property is set in the constructor options, then indicate the character encoding of the string. This is to support implementations that have an optimized handling for certain string data encodings. If the `decodeStrings` property is explicitly set to `false`, -the `encoding` argument can be safely ignored, and `chunk` will always be a -`Buffer`. +the `encoding` argument can be safely ignored, and `chunk` will remain the same +object that is passed to `.write()`. The `writable._write()` method is prefixed with an underscore because it is internal to the class that defines it, and should never be called directly by @@ -1501,9 +1501,9 @@ Implementers, and only from within the `readable._read()` method. It is recommended that errors occurring during the processing of the `readable._read()` method are emitted using the `'error'` event rather than being thrown. Throwing an Error from within `readable._read()` can result in -expected and inconsistent behavior depending on whether the stream is operating -in flowing or paused mode. Using the `'error'` event ensures consistent and -predictable handling of errors. +unexpected and inconsistent behavior depending on whether the stream is +operating in flowing or paused mode. Using the `'error'` event ensures +consistent and predictable handling of errors. ```js const Readable = require('stream').Readable; From d89587c1bfb8964d2fb0e85874905ea7b599bb44 Mon Sep 17 00:00:00 2001 From: Paul Graham Date: Wed, 7 Dec 2016 23:47:15 -0600 Subject: [PATCH 095/169] test: swap var for let/const throughout MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Swap var for let/const throughout the common.js module. Change a snake case variable to camel case starting on line 168. PR-URL: https://github.com/nodejs/node/pull/10177 Reviewed-By: Сковорода Никита Андреевич Reviewed-By: Sakthipriyan Vairamani Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- test/common.js | 49 +++++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/test/common.js b/test/common.js index 7224d878e88871..c15042c8ee89a4 100644 --- a/test/common.js +++ b/test/common.js @@ -38,8 +38,9 @@ exports.rootDir = exports.isWindows ? 'c:\\' : '/'; exports.buildType = process.config.target_defaults.default_configuration; function rimrafSync(p) { + let st; try { - var st = fs.lstatSync(p); + st = fs.lstatSync(p); } catch (e) { if (e.code === 'ENOENT') return; @@ -93,9 +94,9 @@ if (process.env.TEST_THREAD_ID) { } exports.tmpDir = path.join(testRoot, exports.tmpDirName); -var opensslCli = null; -var inFreeBSDJail = null; -var localhostIPv4 = null; +let opensslCli = null; +let inFreeBSDJail = null; +let localhostIPv4 = null; exports.localIPv6Hosts = ['localhost']; if (exports.isLinux) { @@ -165,8 +166,8 @@ Object.defineProperty(exports, 'opensslCli', {get: function() { if (exports.isWindows) opensslCli += '.exe'; - var openssl_cmd = child_process.spawnSync(opensslCli, ['version']); - if (openssl_cmd.status !== 0 || openssl_cmd.error !== undefined) { + const opensslCmd = child_process.spawnSync(opensslCli, ['version']); + if (opensslCmd.status !== 0 || opensslCmd.error !== undefined) { // openssl command cannot be executed opensslCli = false; } @@ -194,7 +195,7 @@ if (exports.isWindows) { exports.PIPE = exports.tmpDir + '/test.sock'; } -var ifaces = os.networkInterfaces(); +const ifaces = os.networkInterfaces(); exports.hasIPv6 = Object.keys(ifaces).some(function(name) { return /lo/.test(name) && ifaces[name].some(function(info) { return info.family === 'IPv6'; @@ -204,7 +205,7 @@ exports.hasIPv6 = Object.keys(ifaces).some(function(name) { exports.ddCommand = function(filename, kilobytes) { if (exports.isWindows) { - var p = path.resolve(exports.fixturesDir, 'create-file.js'); + const p = path.resolve(exports.fixturesDir, 'create-file.js'); return '"' + process.argv[0] + '" "' + p + '" "' + filename + '" ' + (kilobytes * 1024); } else { @@ -214,7 +215,7 @@ exports.ddCommand = function(filename, kilobytes) { exports.spawnCat = function(options) { - var spawn = require('child_process').spawn; + const spawn = require('child_process').spawn; if (exports.isWindows) { return spawn('more', [], options); @@ -225,7 +226,7 @@ exports.spawnCat = function(options) { exports.spawnSyncCat = function(options) { - var spawnSync = require('child_process').spawnSync; + const spawnSync = require('child_process').spawnSync; if (exports.isWindows) { return spawnSync('more', [], options); @@ -236,7 +237,7 @@ exports.spawnSyncCat = function(options) { exports.spawnPwd = function(options) { - var spawn = require('child_process').spawn; + const spawn = require('child_process').spawn; if (exports.isWindows) { return spawn('cmd.exe', ['/c', 'cd'], options); @@ -277,7 +278,7 @@ exports.platformTimeout = function(ms) { return ms; // ARMv8+ }; -var knownGlobals = [ +let knownGlobals = [ Buffer, clearImmediate, clearInterval, @@ -351,9 +352,9 @@ function allowGlobals(...whitelist) { exports.allowGlobals = allowGlobals; function leakedGlobals() { - var leaked = []; + const leaked = []; - for (var val in global) + for (const val in global) if (!knownGlobals.includes(global[val])) leaked.push(val); @@ -366,7 +367,7 @@ exports.globalCheck = true; process.on('exit', function() { if (!exports.globalCheck) return; - var leaked = leakedGlobals(); + const leaked = leakedGlobals(); if (leaked.length > 0) { console.error('Unknown globals: %s', leaked); fail('Unknown global found'); @@ -374,13 +375,13 @@ process.on('exit', function() { }); -var mustCallChecks = []; +const mustCallChecks = []; function runCallChecks(exitCode) { if (exitCode !== 0) return; - var failed = mustCallChecks.filter(function(context) { + const failed = mustCallChecks.filter(function(context) { return context.actual !== context.expected; }); @@ -399,7 +400,7 @@ function runCallChecks(exitCode) { exports.mustCall = function(fn, expected) { if (typeof expected !== 'number') expected = 1; - var context = { + const context = { expected: expected, actual: 0, stack: (new Error()).stack, @@ -418,9 +419,9 @@ exports.mustCall = function(fn, expected) { }; exports.hasMultiLocalhost = function hasMultiLocalhost() { - var TCP = process.binding('tcp_wrap').TCP; - var t = new TCP(); - var ret = t.bind('127.0.0.2', exports.PORT); + const TCP = process.binding('tcp_wrap').TCP; + const t = new TCP(); + const ret = t.bind('127.0.0.2', exports.PORT); t.close(); return ret === 0; }; @@ -466,7 +467,7 @@ ArrayStream.prototype.write = function() {}; exports.nodeProcessAborted = function nodeProcessAborted(exitCode, signal) { // Depending on the compiler used, node will exit with either // exit code 132 (SIGILL), 133 (SIGTRAP) or 134 (SIGABRT). - var expectedExitCodes = [132, 133, 134]; + let expectedExitCodes = [132, 133, 134]; // On platforms using KSH as the default shell (like SmartOS), // when a process aborts, KSH exits with an exit code that is @@ -495,8 +496,8 @@ exports.nodeProcessAborted = function nodeProcessAborted(exitCode, signal) { }; exports.busyLoop = function busyLoop(time) { - var startTime = Timer.now(); - var stopTime = startTime + time; + const startTime = Timer.now(); + const stopTime = startTime + time; while (Timer.now() < stopTime) {} }; From 4f18943810554a3e51a4cbc0262274aa7d7c57b0 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Sat, 24 Dec 2016 16:07:52 -0500 Subject: [PATCH 096/169] test: refactor the code in test-fs-chmod * use const and let instead of var * use common.mustCall to control functions executions * use assert.strictEqual instead of assert.equal * use assert.ifError to handle errors * use arrow functions * remove unnecessary variables PR-URL: https://github.com/nodejs/node/pull/10440 Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- test/parallel/test-fs-chmod.js | 117 ++++++++++++++------------------- 1 file changed, 51 insertions(+), 66 deletions(-) diff --git a/test/parallel/test-fs-chmod.js b/test/parallel/test-fs-chmod.js index 0e1d7898b6562d..2e5d839ae97720 100644 --- a/test/parallel/test-fs-chmod.js +++ b/test/parallel/test-fs-chmod.js @@ -1,12 +1,11 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var path = require('path'); -var fs = require('fs'); -var got_error = false; -var success_count = 0; -var mode_async; -var mode_sync; +const common = require('../common'); +const assert = require('assert'); +const path = require('path'); +const fs = require('fs'); + +let mode_async; +let mode_sync; // Need to hijack fs.open/close to make sure that things // get closed once they're opened. @@ -19,7 +18,7 @@ fs._closeSync = fs.closeSync; fs.close = close; fs.closeSync = closeSync; -var openCount = 0; +let openCount = 0; function open() { openCount++; @@ -54,57 +53,49 @@ if (common.isWindows) { const file1 = path.join(common.fixturesDir, 'a.js'); const file2 = path.join(common.fixturesDir, 'a1.js'); -fs.chmod(file1, mode_async.toString(8), function(err) { - if (err) { - got_error = true; +fs.chmod(file1, mode_async.toString(8), common.mustCall((err) => { + assert.ifError(err); + + console.log(fs.statSync(file1).mode); + + if (common.isWindows) { + assert.ok((fs.statSync(file1).mode & 0o777) & mode_async); } else { - console.log(fs.statSync(file1).mode); + assert.strictEqual(mode_async, fs.statSync(file1).mode & 0o777); + } + + fs.chmodSync(file1, mode_sync); + if (common.isWindows) { + assert.ok((fs.statSync(file1).mode & 0o777) & mode_sync); + } else { + assert.strictEqual(mode_sync, fs.statSync(file1).mode & 0o777); + } +})); + +fs.open(file2, 'a', common.mustCall((err, fd) => { + assert.ifError(err); + + fs.fchmod(fd, mode_async.toString(8), common.mustCall((err) => { + assert.ifError(err); + + console.log(fs.fstatSync(fd).mode); if (common.isWindows) { - assert.ok((fs.statSync(file1).mode & 0o777) & mode_async); + assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_async); } else { - assert.equal(mode_async, fs.statSync(file1).mode & 0o777); + assert.strictEqual(mode_async, fs.fstatSync(fd).mode & 0o777); } - fs.chmodSync(file1, mode_sync); + fs.fchmodSync(fd, mode_sync); if (common.isWindows) { - assert.ok((fs.statSync(file1).mode & 0o777) & mode_sync); + assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_sync); } else { - assert.equal(mode_sync, fs.statSync(file1).mode & 0o777); + assert.strictEqual(mode_sync, fs.fstatSync(fd).mode & 0o777); } - success_count++; - } -}); -fs.open(file2, 'a', function(err, fd) { - if (err) { - got_error = true; - console.error(err.stack); - return; - } - fs.fchmod(fd, mode_async.toString(8), function(err) { - if (err) { - got_error = true; - } else { - console.log(fs.fstatSync(fd).mode); - - if (common.isWindows) { - assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_async); - } else { - assert.equal(mode_async, fs.fstatSync(fd).mode & 0o777); - } - - fs.fchmodSync(fd, mode_sync); - if (common.isWindows) { - assert.ok((fs.fstatSync(fd).mode & 0o777) & mode_sync); - } else { - assert.equal(mode_sync, fs.fstatSync(fd).mode & 0o777); - } - success_count++; - fs.close(fd); - } - }); -}); + fs.close(fd); + })); +})); // lchmod if (fs.lchmod) { @@ -113,25 +104,19 @@ if (fs.lchmod) { common.refreshTmpDir(); fs.symlinkSync(file2, link); - fs.lchmod(link, mode_async, function(err) { - if (err) { - got_error = true; - } else { - console.log(fs.lstatSync(link).mode); - assert.equal(mode_async, fs.lstatSync(link).mode & 0o777); + fs.lchmod(link, mode_async, common.mustCall((err) => { + assert.ifError(err); - fs.lchmodSync(link, mode_sync); - assert.equal(mode_sync, fs.lstatSync(link).mode & 0o777); - success_count++; - } - }); -} else { - success_count++; + console.log(fs.lstatSync(link).mode); + assert.strictEqual(mode_async, fs.lstatSync(link).mode & 0o777); + + fs.lchmodSync(link, mode_sync); + assert.strictEqual(mode_sync, fs.lstatSync(link).mode & 0o777); + + })); } process.on('exit', function() { - assert.equal(3, success_count); - assert.equal(0, openCount); - assert.equal(false, got_error); + assert.strictEqual(0, openCount); }); From 8dbba48f702d93a63b46bb60251af98b5a95a8b8 Mon Sep 17 00:00:00 2001 From: William Kapke Date: Thu, 17 Nov 2016 06:27:07 +0000 Subject: [PATCH 097/169] doc: add Working Group dissolution text PR-URL: https://github.com/nodejs/node/pull/9656 Reviewed-By: Myles Borins Reviewed-By: Colin Ihrig Reviewed-By: Rich Trott Reviewed-By: Sakthipriyan Vairamani Reviewed-By: James M Snell Reviewed-By: Michael Dawson Reviewed-By: Anna Henningsen --- WORKING_GROUPS.md | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md index 694325a0bfcf95..1d2a77121e6184 100644 --- a/WORKING_GROUPS.md +++ b/WORKING_GROUPS.md @@ -12,9 +12,12 @@ Groups are not formed to *begin* a set of tasks but instead are formed once that work is already underway and the contributors think it would benefit from being done as an autonomous project. -If the work defined in a Working Group charter is completed the Working -Group should be dissolved and the responsibility for governance absorbed -back in to the CTC. +If the work defined in a Working Group's charter is complete, the charter +should be revoked. + +A Working Group's charter can be revoked either by consensus of the Working +Group's members or by a CTC vote. Once revoked, any future work that arises +becomes the responsibility of the CTC. ## Current Working Groups From 38d9c15edd6871ade6bc181d7093b5fe8a5bcd57 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Mon, 19 Dec 2016 19:41:27 -0500 Subject: [PATCH 098/169] test: refactor the code in test-dns-ipv4 * remove the manual control for functions execution * use common.mustCall to control the functions execution automatically * use let and const instead of var * use assert.strictEqual instead assert.equal PR-URL: https://github.com/nodejs/node/pull/10200 Reviewed-By: Italo A. Casas Reviewed-By: Sakthipriyan Vairamani --- test/internet/test-dns-ipv4.js | 143 ++++++++++++++++----------------- 1 file changed, 70 insertions(+), 73 deletions(-) diff --git a/test/internet/test-dns-ipv4.js b/test/internet/test-dns-ipv4.js index 06c1056a26fe43..a86c863cc443c9 100644 --- a/test/internet/test-dns-ipv4.js +++ b/test/internet/test-dns-ipv4.js @@ -1,18 +1,16 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const dns = require('dns'); const net = require('net'); const isIPv4 = net.isIPv4; -let expected = 0; -let completed = 0; let running = false; const queue = []; function TEST(f) { function next() { - var f = queue.shift(); + const f = queue.shift(); if (f) { running = true; console.log(f.name); @@ -22,11 +20,9 @@ function TEST(f) { function done() { running = false; - completed++; process.nextTick(next); } - expected++; queue.push(f); if (!running) { @@ -39,149 +35,150 @@ function checkWrap(req) { } TEST(function test_resolve4(done) { - var req = dns.resolve4('www.google.com', function(err, ips) { - if (err) throw err; + const req = dns.resolve4('www.google.com', + common.mustCall((err, ips) => { + assert.ifError(err); - assert.ok(ips.length > 0); + assert.ok(ips.length > 0); - for (var i = 0; i < ips.length; i++) { - assert.ok(isIPv4(ips[i])); - } + for (let i = 0; i < ips.length; i++) { + assert.ok(isIPv4(ips[i])); + } - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_reverse_ipv4(done) { - var req = dns.reverse('8.8.8.8', function(err, domains) { - if (err) throw err; + const req = dns.reverse('8.8.8.8', + common.mustCall((err, domains) => { + assert.ifError(err); - assert.ok(domains.length > 0); + assert.ok(domains.length > 0); - for (var i = 0; i < domains.length; i++) { - assert.ok(domains[i]); - assert.ok(typeof domains[i] === 'string'); - } + for (let i = 0; i < domains.length; i++) { + assert.ok(domains[i]); + assert.ok(typeof domains[i] === 'string'); + } - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_ipv4_explicit(done) { - var req = dns.lookup('www.google.com', 4, function(err, ip, family) { - if (err) throw err; - assert.ok(net.isIPv4(ip)); - assert.strictEqual(family, 4); + const req = dns.lookup('www.google.com', 4, + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.ok(net.isIPv4(ip)); + assert.strictEqual(family, 4); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_ipv4_implicit(done) { - var req = dns.lookup('www.google.com', function(err, ip, family) { - if (err) throw err; - assert.ok(net.isIPv4(ip)); - assert.strictEqual(family, 4); + const req = dns.lookup('www.google.com', + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.ok(net.isIPv4(ip)); + assert.strictEqual(family, 4); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_ipv4_explicit_object(done) { - var req = dns.lookup('www.google.com', { + const req = dns.lookup('www.google.com', { family: 4 - }, function(err, ip, family) { - if (err) throw err; + }, common.mustCall((err, ip, family) => { + assert.ifError(err); assert.ok(net.isIPv4(ip)); assert.strictEqual(family, 4); done(); - }); + })); checkWrap(req); }); TEST(function test_lookup_ipv4_hint_addrconfig(done) { - var req = dns.lookup('www.google.com', { + const req = dns.lookup('www.google.com', { hints: dns.ADDRCONFIG - }, function(err, ip, family) { - if (err) throw err; + }, common.mustCall((err, ip, family) => { + assert.ifError(err); assert.ok(net.isIPv4(ip)); assert.strictEqual(family, 4); done(); - }); + })); checkWrap(req); }); TEST(function test_lookup_ip_ipv4(done) { - var req = dns.lookup('127.0.0.1', function(err, ip, family) { - if (err) throw err; - assert.strictEqual(ip, '127.0.0.1'); - assert.strictEqual(family, 4); + const req = dns.lookup('127.0.0.1', + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.strictEqual(ip, '127.0.0.1'); + assert.strictEqual(family, 4); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_localhost_ipv4(done) { - var req = dns.lookup('localhost', 4, function(err, ip, family) { - if (err) throw err; - assert.strictEqual(ip, '127.0.0.1'); - assert.strictEqual(family, 4); + const req = dns.lookup('localhost', 4, + common.mustCall((err, ip, family) => { + assert.ifError(err); + assert.strictEqual(ip, '127.0.0.1'); + assert.strictEqual(family, 4); - done(); - }); + done(); + })); checkWrap(req); }); TEST(function test_lookup_all_ipv4(done) { - var req = dns.lookup( + const req = dns.lookup( 'www.google.com', {all: true, family: 4}, - function(err, ips) { - if (err) throw err; + common.mustCall((err, ips) => { + assert.ifError(err); assert.ok(Array.isArray(ips)); assert.ok(ips.length > 0); - ips.forEach(function(ip) { + ips.forEach((ip) => { assert.ok(isIPv4(ip.address)); assert.strictEqual(ip.family, 4); }); done(); } - ); + )); checkWrap(req); }); TEST(function test_lookupservice_ip_ipv4(done) { - var req = dns.lookupService('127.0.0.1', 80, function(err, host, service) { - if (err) throw err; - assert.equal(typeof host, 'string'); - assert(host); - assert(['http', 'www', '80'].includes(service)); - done(); - }); + const req = dns.lookupService('127.0.0.1', 80, + common.mustCall((err, host, service) => { + assert.ifError(err); + assert.strictEqual(typeof host, 'string'); + assert(host); + assert(['http', 'www', '80'].includes(service)); + done(); + })); checkWrap(req); }); - -process.on('exit', function() { - console.log(completed + ' tests completed'); - assert.equal(running, false); - assert.strictEqual(expected, completed); -}); From 99c9cda6d1e7644870cb2e73532b606f7c26615c Mon Sep 17 00:00:00 2001 From: Rob Adelmann Date: Sun, 18 Dec 2016 19:56:18 -0800 Subject: [PATCH 099/169] test: refactor test-stdin-from-file Remove console.log statement. Replace error check with assert.ifError(). PR-URL: https://github.com/nodejs/node/pull/10331 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- test/parallel/test-stdin-from-file.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/test/parallel/test-stdin-from-file.js b/test/parallel/test-stdin-from-file.js index f3a78192e5e5aa..9a847118bd670d 100644 --- a/test/parallel/test-stdin-from-file.js +++ b/test/parallel/test-stdin-from-file.js @@ -33,8 +33,7 @@ fs.writeFileSync(tmpFile, string); childProcess.exec(cmd, common.mustCall(function(err, stdout, stderr) { fs.unlinkSync(tmpFile); - if (err) throw err; - console.log(stdout); + assert.ifError(err); assert.strictEqual(stdout, 'hello world\r\n' + string); assert.strictEqual('', stderr); })); From 328c14512f07193c8bcff561535ffd593c221ec2 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Mon, 26 Dec 2016 09:43:06 -0500 Subject: [PATCH 100/169] test: refactor the code in test-http-connect * use common.mustCall to control the functions execution automatically * use let and const instead of var * use assert.strictEqual instead of assert.equal * use arrow functions * remove console.error and unnecessary variables PR-URL: https://github.com/nodejs/node/pull/10397 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- test/parallel/test-http-connect.js | 78 +++++++++++++----------------- 1 file changed, 33 insertions(+), 45 deletions(-) diff --git a/test/parallel/test-http-connect.js b/test/parallel/test-http-connect.js index 9da199b8ee9a0d..fa2d8aaa4f1ccf 100644 --- a/test/parallel/test-http-connect.js +++ b/test/parallel/test-http-connect.js @@ -1,85 +1,73 @@ 'use strict'; const common = require('../common'); -var assert = require('assert'); -var http = require('http'); +const assert = require('assert'); +const http = require('http'); -var serverGotConnect = false; -var clientGotConnect = false; +const server = http.createServer(common.fail); -var server = http.createServer(common.fail); -server.on('connect', function(req, socket, firstBodyChunk) { - assert.equal(req.method, 'CONNECT'); - assert.equal(req.url, 'google.com:443'); - console.error('Server got CONNECT request'); - serverGotConnect = true; +server.on('connect', common.mustCall((req, socket, firstBodyChunk) => { + assert.strictEqual(req.method, 'CONNECT'); + assert.strictEqual(req.url, 'google.com:443'); socket.write('HTTP/1.1 200 Connection established\r\n\r\n'); - var data = firstBodyChunk.toString(); - socket.on('data', function(buf) { + let data = firstBodyChunk.toString(); + socket.on('data', (buf) => { data += buf.toString(); }); - socket.on('end', function() { + + socket.on('end', common.mustCall(() => { socket.end(data); - }); -}); -server.listen(0, function() { - var req = http.request({ + })); +})); + +server.listen(0, common.mustCall(function() { + const req = http.request({ port: this.address().port, method: 'CONNECT', path: 'google.com:443' }, common.fail); - var clientRequestClosed = false; - req.on('close', function() { - clientRequestClosed = true; - }); - - req.on('connect', function(res, socket, firstBodyChunk) { - console.error('Client got CONNECT request'); - clientGotConnect = true; + req.on('close', common.mustCall(() => {})); + req.on('connect', common.mustCall((res, socket, firstBodyChunk) => { // Make sure this request got removed from the pool. - var name = 'localhost:' + server.address().port; + const name = 'localhost:' + server.address().port; assert(!http.globalAgent.sockets.hasOwnProperty(name)); assert(!http.globalAgent.requests.hasOwnProperty(name)); // Make sure this socket has detached. assert(!socket.ondata); assert(!socket.onend); - assert.equal(socket.listeners('connect').length, 0); - assert.equal(socket.listeners('data').length, 0); + assert.strictEqual(socket.listeners('connect').length, 0); + assert.strictEqual(socket.listeners('data').length, 0); // the stream.Duplex onend listener // allow 0 here, so that i can run the same test on streams1 impl assert(socket.listeners('end').length <= 1); - assert.equal(socket.listeners('free').length, 0); - assert.equal(socket.listeners('close').length, 0); - assert.equal(socket.listeners('error').length, 0); - assert.equal(socket.listeners('agentRemove').length, 0); + assert.strictEqual(socket.listeners('free').length, 0); + assert.strictEqual(socket.listeners('close').length, 0); + assert.strictEqual(socket.listeners('error').length, 0); + assert.strictEqual(socket.listeners('agentRemove').length, 0); - var data = firstBodyChunk.toString(); - socket.on('data', function(buf) { + let data = firstBodyChunk.toString(); + socket.on('data', (buf) => { data += buf.toString(); }); - socket.on('end', function() { - assert.equal(data, 'HeadBody'); - assert(clientRequestClosed); + + socket.on('end', common.mustCall(() => { + assert.strictEqual(data, 'HeadBody'); server.close(); - }); + })); + socket.write('Body'); socket.end(); - }); + })); // It is legal for the client to send some data intended for the server // before the "200 Connection established" (or any other success or // error code) is received. req.write('Head'); req.end(); -}); - -process.on('exit', function() { - assert.ok(serverGotConnect); - assert.ok(clientGotConnect); -}); +})); From 1a7ca46544ff891cf1b05e514d10bbb511c0f8f4 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Fri, 23 Dec 2016 12:54:32 -0800 Subject: [PATCH 101/169] test: fix flaky test-http-client-timeout-with-data test-http-client-timeout-with-data has failed here and there in CI on FreeBSD and OS X. The test has a socket timeout set to 50ms and a timer set for 100ms. However, they are not necessarily set in the same tick of the event loop and their ordering is therefore not guaranteed. Instead of using a timer, this change listens for an event on the listener to know when the socket timeout has occurred and then runs the code originally in the timer. Additional refactoring: Replaced `process.on('exit', ...)` checks with `common.mustCall()` and replaced usage of `assert.equal()` with `assert.strictEqual()`. PR-URL: https://github.com/nodejs/node/pull/10431 Reviewed-By: James M Snell --- .../test-http-client-timeout-with-data.js | 28 ++++++++----------- 1 file changed, 11 insertions(+), 17 deletions(-) rename test/{sequential => parallel}/test-http-client-timeout-with-data.js (54%) diff --git a/test/sequential/test-http-client-timeout-with-data.js b/test/parallel/test-http-client-timeout-with-data.js similarity index 54% rename from test/sequential/test-http-client-timeout-with-data.js rename to test/parallel/test-http-client-timeout-with-data.js index f5b2a60dc52a54..c82327beb295da 100644 --- a/test/sequential/test-http-client-timeout-with-data.js +++ b/test/parallel/test-http-client-timeout-with-data.js @@ -3,14 +3,8 @@ const common = require('../common'); const assert = require('assert'); const http = require('http'); -var ntimeouts = 0; var nchunks = 0; -process.on('exit', function() { - assert.equal(ntimeouts, 1); - assert.equal(nchunks, 2); -}); - const options = { method: 'GET', port: undefined, @@ -21,7 +15,7 @@ const options = { const server = http.createServer(function(req, res) { res.writeHead(200, {'Content-Length': '2'}); res.write('*'); - setTimeout(function() { res.end('*'); }, common.platformTimeout(100)); + server.once('timeout', common.mustCall(function() { res.end('*'); })); }); server.listen(0, options.host, function() { @@ -30,19 +24,19 @@ server.listen(0, options.host, function() { req.end(); function onresponse(res) { - req.setTimeout(50, function() { - assert.equal(nchunks, 1); // should have received the first chunk by now - ntimeouts++; - }); + req.setTimeout(50, common.mustCall(function() { + assert.strictEqual(nchunks, 1); // should have received the first chunk + server.emit('timeout'); + })); - res.on('data', function(data) { - assert.equal('' + data, '*'); + res.on('data', common.mustCall(function(data) { + assert.strictEqual('' + data, '*'); nchunks++; - }); + }, 2)); - res.on('end', function() { - assert.equal(nchunks, 2); + res.on('end', common.mustCall(function() { + assert.strictEqual(nchunks, 2); server.close(); - }); + })); } }); From 33c47a641553b0c829f8bd080f0a4a7d52667c28 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 27 Dec 2016 22:14:37 -0800 Subject: [PATCH 102/169] test: refactor test-tls-alert-handling MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * process.on('exit',...) checks -> common.mustCall() * remove unused function parameters * var -> const/let PR-URL: https://github.com/nodejs/node/pull/10482 Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- test/parallel/test-tls-alert-handling.js | 44 +++++++++--------------- 1 file changed, 17 insertions(+), 27 deletions(-) diff --git a/test/parallel/test-tls-alert-handling.js b/test/parallel/test-tls-alert-handling.js index 284a32ea0d11ac..699b1acfc453c4 100644 --- a/test/parallel/test-tls-alert-handling.js +++ b/test/parallel/test-tls-alert-handling.js @@ -1,6 +1,5 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); +const common = require('../common'); if (!common.opensslCli) { common.skip('node compiled without OpenSSL CLI.'); @@ -12,11 +11,9 @@ if (!common.hasCrypto) { return; } -var tls = require('tls'); -var net = require('net'); -var fs = require('fs'); - -var success = false; +const tls = require('tls'); +const net = require('net'); +const fs = require('fs'); function filenamePEM(n) { return require('path').join(common.fixturesDir, 'keys', n + '.pem'); @@ -26,17 +23,16 @@ function loadPEM(n) { return fs.readFileSync(filenamePEM(n)); } -var opts = { +const opts = { key: loadPEM('agent2-key'), cert: loadPEM('agent2-cert') }; +const max_iter = 20; +let iter = 0; -var max_iter = 20; -var iter = 0; - -var server = tls.createServer(opts, function(s) { +const server = tls.createServer(opts, function(s) { s.pipe(s); - s.on('error', function(e) { + s.on('error', function() { // ignore error }); }); @@ -47,10 +43,10 @@ server.listen(0, function() { function sendClient() { - var client = tls.connect(server.address().port, { + const client = tls.connect(server.address().port, { rejectUnauthorized: false }); - client.on('data', function(chunk) { + client.on('data', common.mustCall(function() { if (iter++ === 2) sendBADTLSRecord(); if (iter < max_iter) { client.write('a'); @@ -58,10 +54,9 @@ function sendClient() { } client.end(); server.close(); - success = true; - }); + }, max_iter)); client.write('a'); - client.on('error', function(e) { + client.on('error', function() { // ignore error }); client.on('close', function() { @@ -71,21 +66,16 @@ function sendClient() { function sendBADTLSRecord() { - var BAD_RECORD = Buffer.from([0xff, 0xff, 0xff, 0xff, 0xff, 0xff]); - var socket = net.connect(server.address().port); - var client = tls.connect({ + const BAD_RECORD = Buffer.from([0xff, 0xff, 0xff, 0xff, 0xff, 0xff]); + const socket = net.connect(server.address().port); + const client = tls.connect({ socket: socket, rejectUnauthorized: false }, function() { socket.write(BAD_RECORD); socket.end(); }); - client.on('error', function(e) { + client.on('error', function() { // ignore error }); } - -process.on('exit', function() { - assert.strictEqual(iter, max_iter); - assert(success); -}); From 19b301520140a167ebfe17a9a390a455d0994756 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 29 Dec 2016 21:19:36 -0800 Subject: [PATCH 103/169] test: refactor test-stream-pipe-error-handling * provide a RegExp for second argument to `assert.throws()` * remove unused function arguments * provide duration of 1 ms for `setTimeout()` calls that do not have a duration PR-URL: https://github.com/nodejs/node/pull/10530 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Colin Ihrig --- test/parallel/test-stream-pipe-error-handling.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/parallel/test-stream-pipe-error-handling.js b/test/parallel/test-stream-pipe-error-handling.js index 3b36768805c9ec..db79f6e5f36c70 100644 --- a/test/parallel/test-stream-pipe-error-handling.js +++ b/test/parallel/test-stream-pipe-error-handling.js @@ -50,8 +50,8 @@ const Stream = require('stream').Stream; assert(removed); assert.throws(function() { w.emit('error', new Error('fail')); - }); - })); + }, /^Error: fail$/); + }), 1); }); w.on('error', myOnError); @@ -59,7 +59,7 @@ const Stream = require('stream').Stream; w.removeListener('error', myOnError); removed = true; - function myOnError(er) { + function myOnError() { throw new Error('this should not happen'); } } @@ -76,10 +76,10 @@ const Stream = require('stream').Stream; setTimeout(common.mustCall(function() { assert(removed); w.emit('error', new Error('fail')); - })); + }), 1); }); - w.on('error', common.mustCall(function(er) {})); + w.on('error', common.mustCall(function() {})); w._write = function() {}; r.pipe(w); From 9cee6786f7b6fb8856896385ef45ae1438f2272d Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 29 Dec 2016 21:38:44 -0800 Subject: [PATCH 104/169] test: refactor test-stream-unshift-read-race * add RegExp as second argument to assert.throws() * replace process.on('exit', ...) boolean checks with common.mustCall() * assert.equal() -> assert.strictEqual() * add 1 ms duration as second argument to setTimeout() * var -> const PR-URL: https://github.com/nodejs/node/pull/10532 Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- .../parallel/test-stream-unshift-read-race.js | 67 +++++++++---------- 1 file changed, 30 insertions(+), 37 deletions(-) diff --git a/test/parallel/test-stream-unshift-read-race.js b/test/parallel/test-stream-unshift-read-race.js index c21bb60cc61f45..90d1539b525344 100644 --- a/test/parallel/test-stream-unshift-read-race.js +++ b/test/parallel/test-stream-unshift-read-race.js @@ -1,6 +1,6 @@ 'use strict'; -require('../common'); -var assert = require('assert'); +const common = require('../common'); +const assert = require('assert'); // This test verifies that: // 1. unshift() does not cause colliding _read() calls. @@ -9,19 +9,19 @@ var assert = require('assert'); // 3. push() after the EOF signaling null is an error. // 4. _read() is not called after pushing the EOF null chunk. -var stream = require('stream'); -var hwm = 10; -var r = stream.Readable({ highWaterMark: hwm }); -var chunks = 10; +const stream = require('stream'); +const hwm = 10; +const r = stream.Readable({ highWaterMark: hwm }); +const chunks = 10; -var data = Buffer.allocUnsafe(chunks * hwm + Math.ceil(hwm / 2)); -for (var i = 0; i < data.length; i++) { - var c = 'asdf'.charCodeAt(i % 4); +const data = Buffer.allocUnsafe(chunks * hwm + Math.ceil(hwm / 2)); +for (let i = 0; i < data.length; i++) { + const c = 'asdf'.charCodeAt(i % 4); data[i] = c; } -var pos = 0; -var pushedNull = false; +let pos = 0; +let pushedNull = false; r._read = function(n) { assert(!pushedNull, '_read after null push'); @@ -30,7 +30,7 @@ r._read = function(n) { function push(fast) { assert(!pushedNull, 'push() after null push'); - var c = pos >= data.length ? null : data.slice(pos, pos + n); + const c = pos >= data.length ? null : data.slice(pos, pos + n); pushedNull = c === null; if (fast) { pos += n; @@ -41,7 +41,7 @@ r._read = function(n) { pos += n; r.push(c); if (c === null) pushError(); - }); + }, 1); } } }; @@ -49,29 +49,26 @@ r._read = function(n) { function pushError() { assert.throws(function() { r.push(Buffer.allocUnsafe(1)); - }); + }, /^Error: stream.push\(\) after EOF$/); } -var w = stream.Writable(); -var written = []; +const w = stream.Writable(); +const written = []; w._write = function(chunk, encoding, cb) { written.push(chunk.toString()); cb(); }; -var ended = false; -r.on('end', function() { - assert(!ended, 'end emitted more than once'); +r.on('end', common.mustCall(function() { assert.throws(function() { r.unshift(Buffer.allocUnsafe(1)); - }); - ended = true; + }, /^Error: stream.unshift\(\) after end event$/); w.end(); -}); +})); r.on('readable', function() { - var chunk; + let chunk; while (null !== (chunk = r.read(10))) { w.write(chunk); if (chunk.length > 4) @@ -79,21 +76,19 @@ r.on('readable', function() { } }); -var finished = false; -w.on('finish', function() { - finished = true; +w.on('finish', common.mustCall(function() { // each chunk should start with 1234, and then be asfdasdfasdf... // The first got pulled out before the first unshift('1234'), so it's // lacking that piece. - assert.equal(written[0], 'asdfasdfas'); - var asdf = 'd'; + assert.strictEqual(written[0], 'asdfasdfas'); + let asdf = 'd'; console.error('0: %s', written[0]); - for (var i = 1; i < written.length; i++) { + for (let i = 1; i < written.length; i++) { console.error('%s: %s', i.toString(32), written[i]); - assert.equal(written[i].slice(0, 4), '1234'); - for (var j = 4; j < written[i].length; j++) { - var c = written[i].charAt(j); - assert.equal(c, asdf); + assert.strictEqual(written[i].slice(0, 4), '1234'); + for (let j = 4; j < written[i].length; j++) { + const c = written[i].charAt(j); + assert.strictEqual(c, asdf); switch (asdf) { case 'a': asdf = 's'; break; case 's': asdf = 'd'; break; @@ -102,11 +97,9 @@ w.on('finish', function() { } } } -}); +})); process.on('exit', function() { - assert.equal(written.length, 18); - assert(ended, 'stream ended'); - assert(finished, 'stream finished'); + assert.strictEqual(written.length, 18); console.log('ok'); }); From f3d1b7209d05215fda6a2540bd0b1b0d5fc5be4d Mon Sep 17 00:00:00 2001 From: cjihrig Date: Fri, 30 Dec 2016 11:46:21 -0500 Subject: [PATCH 105/169] test: s/ASSERT/assert/ This commit addresses an inconsistency with eight tests. These tests use the assert module, but named the variable ASSERT. This goes against the project's typical coding style, and negatively impacts global find and replace updates. PR-URL: https://github.com/nodejs/node/pull/10544 Reviewed-By: James M Snell Reviewed-By: Gibson Fahnestock Reviewed-By: Jackson Tian Reviewed-By: Prince John Wesley Reviewed-By: Luigi Pinca --- test/parallel/test-readdouble.js | 62 +++---- test/parallel/test-readfloat.js | 38 ++--- test/parallel/test-readint.js | 62 +++---- test/parallel/test-readuint.js | 40 ++--- test/parallel/test-writedouble.js | 270 +++++++++++++++--------------- test/parallel/test-writefloat.js | 142 ++++++++-------- test/parallel/test-writeint.js | 154 ++++++++--------- test/parallel/test-writeuint.js | 106 ++++++------ 8 files changed, 437 insertions(+), 437 deletions(-) diff --git a/test/parallel/test-readdouble.js b/test/parallel/test-readdouble.js index 6c55a65007aa88..a6fc91c351f089 100644 --- a/test/parallel/test-readdouble.js +++ b/test/parallel/test-readdouble.js @@ -3,7 +3,7 @@ * Tests to verify we're reading in doubles correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); /* * Test (64 bit) double @@ -19,8 +19,8 @@ function test(clazz) { buffer[5] = 0x55; buffer[6] = 0xd5; buffer[7] = 0x3f; - ASSERT.equal(1.1945305291680097e+103, buffer.readDoubleBE(0)); - ASSERT.equal(0.3333333333333333, buffer.readDoubleLE(0)); + assert.equal(1.1945305291680097e+103, buffer.readDoubleBE(0)); + assert.equal(0.3333333333333333, buffer.readDoubleLE(0)); buffer[0] = 1; buffer[1] = 0; @@ -30,18 +30,18 @@ function test(clazz) { buffer[5] = 0; buffer[6] = 0xf0; buffer[7] = 0x3f; - ASSERT.equal(7.291122019655968e-304, buffer.readDoubleBE(0)); - ASSERT.equal(1.0000000000000002, buffer.readDoubleLE(0)); + assert.equal(7.291122019655968e-304, buffer.readDoubleBE(0)); + assert.equal(1.0000000000000002, buffer.readDoubleLE(0)); buffer[0] = 2; - ASSERT.equal(4.778309726801735e-299, buffer.readDoubleBE(0)); - ASSERT.equal(1.0000000000000004, buffer.readDoubleLE(0)); + assert.equal(4.778309726801735e-299, buffer.readDoubleBE(0)); + assert.equal(1.0000000000000004, buffer.readDoubleLE(0)); buffer[0] = 1; buffer[6] = 0; buffer[7] = 0; - ASSERT.equal(7.291122019556398e-304, buffer.readDoubleBE(0)); - ASSERT.equal(5e-324, buffer.readDoubleLE(0)); + assert.equal(7.291122019556398e-304, buffer.readDoubleBE(0)); + assert.equal(5e-324, buffer.readDoubleLE(0)); buffer[0] = 0xff; buffer[1] = 0xff; @@ -51,13 +51,13 @@ function test(clazz) { buffer[5] = 0xff; buffer[6] = 0x0f; buffer[7] = 0x00; - ASSERT.ok(isNaN(buffer.readDoubleBE(0))); - ASSERT.equal(2.225073858507201e-308, buffer.readDoubleLE(0)); + assert.ok(isNaN(buffer.readDoubleBE(0))); + assert.equal(2.225073858507201e-308, buffer.readDoubleLE(0)); buffer[6] = 0xef; buffer[7] = 0x7f; - ASSERT.ok(isNaN(buffer.readDoubleBE(0))); - ASSERT.equal(1.7976931348623157e+308, buffer.readDoubleLE(0)); + assert.ok(isNaN(buffer.readDoubleBE(0))); + assert.equal(1.7976931348623157e+308, buffer.readDoubleLE(0)); buffer[0] = 0; buffer[1] = 0; @@ -67,42 +67,42 @@ function test(clazz) { buffer[5] = 0; buffer[6] = 0xf0; buffer[7] = 0x3f; - ASSERT.equal(3.03865e-319, buffer.readDoubleBE(0)); - ASSERT.equal(1, buffer.readDoubleLE(0)); + assert.equal(3.03865e-319, buffer.readDoubleBE(0)); + assert.equal(1, buffer.readDoubleLE(0)); buffer[6] = 0; buffer[7] = 0x40; - ASSERT.equal(3.16e-322, buffer.readDoubleBE(0)); - ASSERT.equal(2, buffer.readDoubleLE(0)); + assert.equal(3.16e-322, buffer.readDoubleBE(0)); + assert.equal(2, buffer.readDoubleLE(0)); buffer[7] = 0xc0; - ASSERT.equal(9.5e-322, buffer.readDoubleBE(0)); - ASSERT.equal(-2, buffer.readDoubleLE(0)); + assert.equal(9.5e-322, buffer.readDoubleBE(0)); + assert.equal(-2, buffer.readDoubleLE(0)); buffer[6] = 0x10; buffer[7] = 0; - ASSERT.equal(2.0237e-320, buffer.readDoubleBE(0)); - ASSERT.equal(2.2250738585072014e-308, buffer.readDoubleLE(0)); + assert.equal(2.0237e-320, buffer.readDoubleBE(0)); + assert.equal(2.2250738585072014e-308, buffer.readDoubleLE(0)); buffer[6] = 0; - ASSERT.equal(0, buffer.readDoubleBE(0)); - ASSERT.equal(0, buffer.readDoubleLE(0)); - ASSERT.equal(false, 1 / buffer.readDoubleLE(0) < 0); + assert.equal(0, buffer.readDoubleBE(0)); + assert.equal(0, buffer.readDoubleLE(0)); + assert.equal(false, 1 / buffer.readDoubleLE(0) < 0); buffer[7] = 0x80; - ASSERT.equal(6.3e-322, buffer.readDoubleBE(0)); - ASSERT.equal(0, buffer.readDoubleLE(0)); - ASSERT.equal(true, 1 / buffer.readDoubleLE(0) < 0); + assert.equal(6.3e-322, buffer.readDoubleBE(0)); + assert.equal(0, buffer.readDoubleLE(0)); + assert.equal(true, 1 / buffer.readDoubleLE(0) < 0); buffer[6] = 0xf0; buffer[7] = 0x7f; - ASSERT.equal(3.0418e-319, buffer.readDoubleBE(0)); - ASSERT.equal(Infinity, buffer.readDoubleLE(0)); + assert.equal(3.0418e-319, buffer.readDoubleBE(0)); + assert.equal(Infinity, buffer.readDoubleLE(0)); buffer[6] = 0xf0; buffer[7] = 0xff; - ASSERT.equal(3.04814e-319, buffer.readDoubleBE(0)); - ASSERT.equal(-Infinity, buffer.readDoubleLE(0)); + assert.equal(3.04814e-319, buffer.readDoubleBE(0)); + assert.equal(-Infinity, buffer.readDoubleLE(0)); } diff --git a/test/parallel/test-readfloat.js b/test/parallel/test-readfloat.js index 468faf76029613..533b7caa8f1047 100644 --- a/test/parallel/test-readfloat.js +++ b/test/parallel/test-readfloat.js @@ -3,7 +3,7 @@ * Tests to verify we're reading in floats correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); /* * Test (32 bit) float @@ -15,56 +15,56 @@ function test(clazz) { buffer[1] = 0; buffer[2] = 0x80; buffer[3] = 0x3f; - ASSERT.equal(4.600602988224807e-41, buffer.readFloatBE(0)); - ASSERT.equal(1, buffer.readFloatLE(0)); + assert.equal(4.600602988224807e-41, buffer.readFloatBE(0)); + assert.equal(1, buffer.readFloatLE(0)); buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0xc0; - ASSERT.equal(2.6904930515036488e-43, buffer.readFloatBE(0)); - ASSERT.equal(-2, buffer.readFloatLE(0)); + assert.equal(2.6904930515036488e-43, buffer.readFloatBE(0)); + assert.equal(-2, buffer.readFloatLE(0)); buffer[0] = 0xff; buffer[1] = 0xff; buffer[2] = 0x7f; buffer[3] = 0x7f; - ASSERT.ok(isNaN(buffer.readFloatBE(0))); - ASSERT.equal(3.4028234663852886e+38, buffer.readFloatLE(0)); + assert.ok(isNaN(buffer.readFloatBE(0))); + assert.equal(3.4028234663852886e+38, buffer.readFloatLE(0)); buffer[0] = 0xab; buffer[1] = 0xaa; buffer[2] = 0xaa; buffer[3] = 0x3e; - ASSERT.equal(-1.2126478207002966e-12, buffer.readFloatBE(0)); - ASSERT.equal(0.3333333432674408, buffer.readFloatLE(0)); + assert.equal(-1.2126478207002966e-12, buffer.readFloatBE(0)); + assert.equal(0.3333333432674408, buffer.readFloatLE(0)); buffer[0] = 0; buffer[1] = 0; buffer[2] = 0; buffer[3] = 0; - ASSERT.equal(0, buffer.readFloatBE(0)); - ASSERT.equal(0, buffer.readFloatLE(0)); - ASSERT.equal(false, 1 / buffer.readFloatLE(0) < 0); + assert.equal(0, buffer.readFloatBE(0)); + assert.equal(0, buffer.readFloatLE(0)); + assert.equal(false, 1 / buffer.readFloatLE(0) < 0); buffer[3] = 0x80; - ASSERT.equal(1.793662034335766e-43, buffer.readFloatBE(0)); - ASSERT.equal(0, buffer.readFloatLE(0)); - ASSERT.equal(true, 1 / buffer.readFloatLE(0) < 0); + assert.equal(1.793662034335766e-43, buffer.readFloatBE(0)); + assert.equal(0, buffer.readFloatLE(0)); + assert.equal(true, 1 / buffer.readFloatLE(0) < 0); buffer[0] = 0; buffer[1] = 0; buffer[2] = 0x80; buffer[3] = 0x7f; - ASSERT.equal(4.609571298396486e-41, buffer.readFloatBE(0)); - ASSERT.equal(Infinity, buffer.readFloatLE(0)); + assert.equal(4.609571298396486e-41, buffer.readFloatBE(0)); + assert.equal(Infinity, buffer.readFloatLE(0)); buffer[0] = 0; buffer[1] = 0; buffer[2] = 0x80; buffer[3] = 0xff; - ASSERT.equal(4.627507918739843e-41, buffer.readFloatBE(0)); - ASSERT.equal(-Infinity, buffer.readFloatLE(0)); + assert.equal(4.627507918739843e-41, buffer.readFloatBE(0)); + assert.equal(-Infinity, buffer.readFloatLE(0)); } diff --git a/test/parallel/test-readint.js b/test/parallel/test-readint.js index b3997f74f17721..c068ddcb6c554a 100644 --- a/test/parallel/test-readint.js +++ b/test/parallel/test-readint.js @@ -3,7 +3,7 @@ * Tests to verify we're reading in signed integers correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); /* * Test 8 bit signed integers @@ -12,19 +12,19 @@ function test8(clazz) { var data = new clazz(4); data[0] = 0x23; - ASSERT.equal(0x23, data.readInt8(0)); + assert.equal(0x23, data.readInt8(0)); data[0] = 0xff; - ASSERT.equal(-1, data.readInt8(0)); + assert.equal(-1, data.readInt8(0)); data[0] = 0x87; data[1] = 0xab; data[2] = 0x7c; data[3] = 0xef; - ASSERT.equal(-121, data.readInt8(0)); - ASSERT.equal(-85, data.readInt8(1)); - ASSERT.equal(124, data.readInt8(2)); - ASSERT.equal(-17, data.readInt8(3)); + assert.equal(-121, data.readInt8(0)); + assert.equal(-85, data.readInt8(1)); + assert.equal(124, data.readInt8(2)); + assert.equal(-17, data.readInt8(3)); } @@ -33,13 +33,13 @@ function test16(clazz) { buffer[0] = 0x16; buffer[1] = 0x79; - ASSERT.equal(0x1679, buffer.readInt16BE(0)); - ASSERT.equal(0x7916, buffer.readInt16LE(0)); + assert.equal(0x1679, buffer.readInt16BE(0)); + assert.equal(0x7916, buffer.readInt16LE(0)); buffer[0] = 0xff; buffer[1] = 0x80; - ASSERT.equal(-128, buffer.readInt16BE(0)); - ASSERT.equal(-32513, buffer.readInt16LE(0)); + assert.equal(-128, buffer.readInt16BE(0)); + assert.equal(-32513, buffer.readInt16LE(0)); /* test offset with weenix */ buffer[0] = 0x77; @@ -48,16 +48,16 @@ function test16(clazz) { buffer[3] = 0x6e; buffer[4] = 0x69; buffer[5] = 0x78; - ASSERT.equal(0x7765, buffer.readInt16BE(0)); - ASSERT.equal(0x6565, buffer.readInt16BE(1)); - ASSERT.equal(0x656e, buffer.readInt16BE(2)); - ASSERT.equal(0x6e69, buffer.readInt16BE(3)); - ASSERT.equal(0x6978, buffer.readInt16BE(4)); - ASSERT.equal(0x6577, buffer.readInt16LE(0)); - ASSERT.equal(0x6565, buffer.readInt16LE(1)); - ASSERT.equal(0x6e65, buffer.readInt16LE(2)); - ASSERT.equal(0x696e, buffer.readInt16LE(3)); - ASSERT.equal(0x7869, buffer.readInt16LE(4)); + assert.equal(0x7765, buffer.readInt16BE(0)); + assert.equal(0x6565, buffer.readInt16BE(1)); + assert.equal(0x656e, buffer.readInt16BE(2)); + assert.equal(0x6e69, buffer.readInt16BE(3)); + assert.equal(0x6978, buffer.readInt16BE(4)); + assert.equal(0x6577, buffer.readInt16LE(0)); + assert.equal(0x6565, buffer.readInt16LE(1)); + assert.equal(0x6e65, buffer.readInt16LE(2)); + assert.equal(0x696e, buffer.readInt16LE(3)); + assert.equal(0x7869, buffer.readInt16LE(4)); } @@ -68,15 +68,15 @@ function test32(clazz) { buffer[1] = 0x53; buffer[2] = 0x16; buffer[3] = 0x79; - ASSERT.equal(0x43531679, buffer.readInt32BE(0)); - ASSERT.equal(0x79165343, buffer.readInt32LE(0)); + assert.equal(0x43531679, buffer.readInt32BE(0)); + assert.equal(0x79165343, buffer.readInt32LE(0)); buffer[0] = 0xff; buffer[1] = 0xfe; buffer[2] = 0xef; buffer[3] = 0xfa; - ASSERT.equal(-69638, buffer.readInt32BE(0)); - ASSERT.equal(-84934913, buffer.readInt32LE(0)); + assert.equal(-69638, buffer.readInt32BE(0)); + assert.equal(-84934913, buffer.readInt32LE(0)); buffer[0] = 0x42; buffer[1] = 0xc3; @@ -84,12 +84,12 @@ function test32(clazz) { buffer[3] = 0xa9; buffer[4] = 0x36; buffer[5] = 0x17; - ASSERT.equal(0x42c395a9, buffer.readInt32BE(0)); - ASSERT.equal(-1013601994, buffer.readInt32BE(1)); - ASSERT.equal(-1784072681, buffer.readInt32BE(2)); - ASSERT.equal(-1449802942, buffer.readInt32LE(0)); - ASSERT.equal(917083587, buffer.readInt32LE(1)); - ASSERT.equal(389458325, buffer.readInt32LE(2)); + assert.equal(0x42c395a9, buffer.readInt32BE(0)); + assert.equal(-1013601994, buffer.readInt32BE(1)); + assert.equal(-1784072681, buffer.readInt32BE(2)); + assert.equal(-1449802942, buffer.readInt32LE(0)); + assert.equal(917083587, buffer.readInt32LE(1)); + assert.equal(389458325, buffer.readInt32LE(2)); } diff --git a/test/parallel/test-readuint.js b/test/parallel/test-readuint.js index 154af1841a98cd..9fcaf45603fd83 100644 --- a/test/parallel/test-readuint.js +++ b/test/parallel/test-readuint.js @@ -4,7 +4,7 @@ */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); /* * We need to check the following things: @@ -20,13 +20,13 @@ function test8(clazz) { data[1] = 23; data[2] = 23; data[3] = 23; - ASSERT.equal(23, data.readUInt8(0)); - ASSERT.equal(23, data.readUInt8(1)); - ASSERT.equal(23, data.readUInt8(2)); - ASSERT.equal(23, data.readUInt8(3)); + assert.equal(23, data.readUInt8(0)); + assert.equal(23, data.readUInt8(1)); + assert.equal(23, data.readUInt8(2)); + assert.equal(23, data.readUInt8(3)); data[0] = 255; /* If it became a signed int, would be -1 */ - ASSERT.equal(255, data.readUInt8(0)); + assert.equal(255, data.readUInt8(0)); } @@ -45,17 +45,17 @@ function test16(clazz) { data[1] = 0x23; data[2] = 0x42; data[3] = 0x3f; - ASSERT.equal(0x23, data.readUInt16BE(0)); - ASSERT.equal(0x2342, data.readUInt16BE(1)); - ASSERT.equal(0x423f, data.readUInt16BE(2)); - ASSERT.equal(0x2300, data.readUInt16LE(0)); - ASSERT.equal(0x4223, data.readUInt16LE(1)); - ASSERT.equal(0x3f42, data.readUInt16LE(2)); + assert.equal(0x23, data.readUInt16BE(0)); + assert.equal(0x2342, data.readUInt16BE(1)); + assert.equal(0x423f, data.readUInt16BE(2)); + assert.equal(0x2300, data.readUInt16LE(0)); + assert.equal(0x4223, data.readUInt16LE(1)); + assert.equal(0x3f42, data.readUInt16LE(2)); data[0] = 0xfe; data[1] = 0xfe; - ASSERT.equal(0xfefe, data.readUInt16BE(0)); - ASSERT.equal(0xfefe, data.readUInt16LE(0)); + assert.equal(0xfefe, data.readUInt16BE(0)); + assert.equal(0xfefe, data.readUInt16LE(0)); } @@ -75,12 +75,12 @@ function test32(clazz) { data[3] = 0x56; data[4] = 0x23; data[5] = 0xff; - ASSERT.equal(0x32654256, data.readUInt32BE(0)); - ASSERT.equal(0x65425623, data.readUInt32BE(1)); - ASSERT.equal(0x425623ff, data.readUInt32BE(2)); - ASSERT.equal(0x56426532, data.readUInt32LE(0)); - ASSERT.equal(0x23564265, data.readUInt32LE(1)); - ASSERT.equal(0xff235642, data.readUInt32LE(2)); + assert.equal(0x32654256, data.readUInt32BE(0)); + assert.equal(0x65425623, data.readUInt32BE(1)); + assert.equal(0x425623ff, data.readUInt32BE(2)); + assert.equal(0x56426532, data.readUInt32LE(0)); + assert.equal(0x23564265, data.readUInt32LE(1)); + assert.equal(0xff235642, data.readUInt32LE(2)); } diff --git a/test/parallel/test-writedouble.js b/test/parallel/test-writedouble.js index 4e86182137de29..107bf521342ef3 100644 --- a/test/parallel/test-writedouble.js +++ b/test/parallel/test-writedouble.js @@ -3,173 +3,173 @@ * Tests to verify we're writing doubles correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); function test(clazz) { var buffer = new clazz(16); buffer.writeDoubleBE(2.225073858507201e-308, 0); buffer.writeDoubleLE(2.225073858507201e-308, 8); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x0f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xff, buffer[8]); - ASSERT.equal(0xff, buffer[9]); - ASSERT.equal(0xff, buffer[10]); - ASSERT.equal(0xff, buffer[11]); - ASSERT.equal(0xff, buffer[12]); - ASSERT.equal(0xff, buffer[13]); - ASSERT.equal(0x0f, buffer[14]); - ASSERT.equal(0x00, buffer[15]); + assert.equal(0x00, buffer[0]); + assert.equal(0x0f, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0xff, buffer[3]); + assert.equal(0xff, buffer[4]); + assert.equal(0xff, buffer[5]); + assert.equal(0xff, buffer[6]); + assert.equal(0xff, buffer[7]); + assert.equal(0xff, buffer[8]); + assert.equal(0xff, buffer[9]); + assert.equal(0xff, buffer[10]); + assert.equal(0xff, buffer[11]); + assert.equal(0xff, buffer[12]); + assert.equal(0xff, buffer[13]); + assert.equal(0x0f, buffer[14]); + assert.equal(0x00, buffer[15]); buffer.writeDoubleBE(1.0000000000000004, 0); buffer.writeDoubleLE(1.0000000000000004, 8); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0xf0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x02, buffer[7]); - ASSERT.equal(0x02, buffer[8]); - ASSERT.equal(0x00, buffer[9]); - ASSERT.equal(0x00, buffer[10]); - ASSERT.equal(0x00, buffer[11]); - ASSERT.equal(0x00, buffer[12]); - ASSERT.equal(0x00, buffer[13]); - ASSERT.equal(0xf0, buffer[14]); - ASSERT.equal(0x3f, buffer[15]); + assert.equal(0x3f, buffer[0]); + assert.equal(0xf0, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x02, buffer[7]); + assert.equal(0x02, buffer[8]); + assert.equal(0x00, buffer[9]); + assert.equal(0x00, buffer[10]); + assert.equal(0x00, buffer[11]); + assert.equal(0x00, buffer[12]); + assert.equal(0x00, buffer[13]); + assert.equal(0xf0, buffer[14]); + assert.equal(0x3f, buffer[15]); buffer.writeDoubleBE(-2, 0); buffer.writeDoubleLE(-2, 8); - ASSERT.equal(0xc0, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[8]); - ASSERT.equal(0x00, buffer[9]); - ASSERT.equal(0x00, buffer[10]); - ASSERT.equal(0x00, buffer[11]); - ASSERT.equal(0x00, buffer[12]); - ASSERT.equal(0x00, buffer[13]); - ASSERT.equal(0x00, buffer[14]); - ASSERT.equal(0xc0, buffer[15]); + assert.equal(0xc0, buffer[0]); + assert.equal(0x00, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[8]); + assert.equal(0x00, buffer[9]); + assert.equal(0x00, buffer[10]); + assert.equal(0x00, buffer[11]); + assert.equal(0x00, buffer[12]); + assert.equal(0x00, buffer[13]); + assert.equal(0x00, buffer[14]); + assert.equal(0xc0, buffer[15]); buffer.writeDoubleBE(1.7976931348623157e+308, 0); buffer.writeDoubleLE(1.7976931348623157e+308, 8); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xef, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); - ASSERT.equal(0xff, buffer[8]); - ASSERT.equal(0xff, buffer[9]); - ASSERT.equal(0xff, buffer[10]); - ASSERT.equal(0xff, buffer[11]); - ASSERT.equal(0xff, buffer[12]); - ASSERT.equal(0xff, buffer[13]); - ASSERT.equal(0xef, buffer[14]); - ASSERT.equal(0x7f, buffer[15]); + assert.equal(0x7f, buffer[0]); + assert.equal(0xef, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0xff, buffer[3]); + assert.equal(0xff, buffer[4]); + assert.equal(0xff, buffer[5]); + assert.equal(0xff, buffer[6]); + assert.equal(0xff, buffer[7]); + assert.equal(0xff, buffer[8]); + assert.equal(0xff, buffer[9]); + assert.equal(0xff, buffer[10]); + assert.equal(0xff, buffer[11]); + assert.equal(0xff, buffer[12]); + assert.equal(0xff, buffer[13]); + assert.equal(0xef, buffer[14]); + assert.equal(0x7f, buffer[15]); buffer.writeDoubleBE(0 * -1, 0); buffer.writeDoubleLE(0 * -1, 8); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[8]); - ASSERT.equal(0x00, buffer[9]); - ASSERT.equal(0x00, buffer[10]); - ASSERT.equal(0x00, buffer[11]); - ASSERT.equal(0x00, buffer[12]); - ASSERT.equal(0x00, buffer[13]); - ASSERT.equal(0x00, buffer[14]); - ASSERT.equal(0x80, buffer[15]); + assert.equal(0x80, buffer[0]); + assert.equal(0x00, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[8]); + assert.equal(0x00, buffer[9]); + assert.equal(0x00, buffer[10]); + assert.equal(0x00, buffer[11]); + assert.equal(0x00, buffer[12]); + assert.equal(0x00, buffer[13]); + assert.equal(0x00, buffer[14]); + assert.equal(0x80, buffer[15]); buffer.writeDoubleBE(Infinity, 0); buffer.writeDoubleLE(Infinity, 8); - ASSERT.equal(0x7F, buffer[0]); - ASSERT.equal(0xF0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[8]); - ASSERT.equal(0x00, buffer[9]); - ASSERT.equal(0x00, buffer[10]); - ASSERT.equal(0x00, buffer[11]); - ASSERT.equal(0x00, buffer[12]); - ASSERT.equal(0x00, buffer[13]); - ASSERT.equal(0xF0, buffer[14]); - ASSERT.equal(0x7F, buffer[15]); - ASSERT.equal(Infinity, buffer.readDoubleBE(0)); - ASSERT.equal(Infinity, buffer.readDoubleLE(8)); + assert.equal(0x7F, buffer[0]); + assert.equal(0xF0, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[8]); + assert.equal(0x00, buffer[9]); + assert.equal(0x00, buffer[10]); + assert.equal(0x00, buffer[11]); + assert.equal(0x00, buffer[12]); + assert.equal(0x00, buffer[13]); + assert.equal(0xF0, buffer[14]); + assert.equal(0x7F, buffer[15]); + assert.equal(Infinity, buffer.readDoubleBE(0)); + assert.equal(Infinity, buffer.readDoubleLE(8)); buffer.writeDoubleBE(-Infinity, 0); buffer.writeDoubleLE(-Infinity, 8); - ASSERT.equal(0xFF, buffer[0]); - ASSERT.equal(0xF0, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - ASSERT.equal(0x00, buffer[8]); - ASSERT.equal(0x00, buffer[9]); - ASSERT.equal(0x00, buffer[10]); - ASSERT.equal(0x00, buffer[11]); - ASSERT.equal(0x00, buffer[12]); - ASSERT.equal(0x00, buffer[13]); - ASSERT.equal(0xF0, buffer[14]); - ASSERT.equal(0xFF, buffer[15]); - ASSERT.equal(-Infinity, buffer.readDoubleBE(0)); - ASSERT.equal(-Infinity, buffer.readDoubleLE(8)); + assert.equal(0xFF, buffer[0]); + assert.equal(0xF0, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[8]); + assert.equal(0x00, buffer[9]); + assert.equal(0x00, buffer[10]); + assert.equal(0x00, buffer[11]); + assert.equal(0x00, buffer[12]); + assert.equal(0x00, buffer[13]); + assert.equal(0xF0, buffer[14]); + assert.equal(0xFF, buffer[15]); + assert.equal(-Infinity, buffer.readDoubleBE(0)); + assert.equal(-Infinity, buffer.readDoubleLE(8)); buffer.writeDoubleBE(NaN, 0); buffer.writeDoubleLE(NaN, 8); // Darwin ia32 does the other kind of NaN. // Compiler bug. No one really cares. - ASSERT(0x7F === buffer[0] || 0xFF === buffer[0]); + assert(0x7F === buffer[0] || 0xFF === buffer[0]); // mips processors use a slightly different NaN - ASSERT(0xF8 === buffer[1] || 0xF7 === buffer[1]); - ASSERT(0x00 === buffer[2] || 0xFF === buffer[2]); - ASSERT(0x00 === buffer[3] || 0xFF === buffer[3]); - ASSERT(0x00 === buffer[4] || 0xFF === buffer[4]); - ASSERT(0x00 === buffer[5] || 0xFF === buffer[5]); - ASSERT(0x00 === buffer[6] || 0xFF === buffer[6]); - ASSERT(0x00 === buffer[7] || 0xFF === buffer[7]); - ASSERT(0x00 === buffer[8] || 0xFF === buffer[8]); - ASSERT(0x00 === buffer[9] || 0xFF === buffer[9]); - ASSERT(0x00 === buffer[10] || 0xFF === buffer[10]); - ASSERT(0x00 === buffer[11] || 0xFF === buffer[11]); - ASSERT(0x00 === buffer[12] || 0xFF === buffer[12]); - ASSERT(0x00 === buffer[13] || 0xFF === buffer[13]); - ASSERT(0xF8 === buffer[14] || 0xF7 === buffer[14]); + assert(0xF8 === buffer[1] || 0xF7 === buffer[1]); + assert(0x00 === buffer[2] || 0xFF === buffer[2]); + assert(0x00 === buffer[3] || 0xFF === buffer[3]); + assert(0x00 === buffer[4] || 0xFF === buffer[4]); + assert(0x00 === buffer[5] || 0xFF === buffer[5]); + assert(0x00 === buffer[6] || 0xFF === buffer[6]); + assert(0x00 === buffer[7] || 0xFF === buffer[7]); + assert(0x00 === buffer[8] || 0xFF === buffer[8]); + assert(0x00 === buffer[9] || 0xFF === buffer[9]); + assert(0x00 === buffer[10] || 0xFF === buffer[10]); + assert(0x00 === buffer[11] || 0xFF === buffer[11]); + assert(0x00 === buffer[12] || 0xFF === buffer[12]); + assert(0x00 === buffer[13] || 0xFF === buffer[13]); + assert(0xF8 === buffer[14] || 0xF7 === buffer[14]); // Darwin ia32 does the other kind of NaN. // Compiler bug. No one really cares. - ASSERT(0x7F === buffer[15] || 0xFF === buffer[15]); - ASSERT.ok(isNaN(buffer.readDoubleBE(0))); - ASSERT.ok(isNaN(buffer.readDoubleLE(8))); + assert(0x7F === buffer[15] || 0xFF === buffer[15]); + assert.ok(isNaN(buffer.readDoubleBE(0))); + assert.ok(isNaN(buffer.readDoubleLE(8))); } diff --git a/test/parallel/test-writefloat.js b/test/parallel/test-writefloat.js index 0cb748d603d0ff..2f76dd57c7b077 100644 --- a/test/parallel/test-writefloat.js +++ b/test/parallel/test-writefloat.js @@ -3,111 +3,111 @@ * Tests to verify we're writing floats correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); function test(clazz) { var buffer = new clazz(8); buffer.writeFloatBE(1, 0); buffer.writeFloatLE(1, 4); - ASSERT.equal(0x3f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x80, buffer[6]); - ASSERT.equal(0x3f, buffer[7]); + assert.equal(0x3f, buffer[0]); + assert.equal(0x80, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x80, buffer[6]); + assert.equal(0x3f, buffer[7]); buffer.writeFloatBE(1 / 3, 0); buffer.writeFloatLE(1 / 3, 4); - ASSERT.equal(0x3e, buffer[0]); - ASSERT.equal(0xaa, buffer[1]); - ASSERT.equal(0xaa, buffer[2]); - ASSERT.equal(0xab, buffer[3]); - ASSERT.equal(0xab, buffer[4]); - ASSERT.equal(0xaa, buffer[5]); - ASSERT.equal(0xaa, buffer[6]); - ASSERT.equal(0x3e, buffer[7]); + assert.equal(0x3e, buffer[0]); + assert.equal(0xaa, buffer[1]); + assert.equal(0xaa, buffer[2]); + assert.equal(0xab, buffer[3]); + assert.equal(0xab, buffer[4]); + assert.equal(0xaa, buffer[5]); + assert.equal(0xaa, buffer[6]); + assert.equal(0x3e, buffer[7]); buffer.writeFloatBE(3.4028234663852886e+38, 0); buffer.writeFloatLE(3.4028234663852886e+38, 4); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0xff, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0x7f, buffer[6]); - ASSERT.equal(0x7f, buffer[7]); + assert.equal(0x7f, buffer[0]); + assert.equal(0x7f, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0xff, buffer[3]); + assert.equal(0xff, buffer[4]); + assert.equal(0xff, buffer[5]); + assert.equal(0x7f, buffer[6]); + assert.equal(0x7f, buffer[7]); buffer.writeFloatLE(1.1754943508222875e-38, 0); buffer.writeFloatBE(1.1754943508222875e-38, 4); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x80, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[0]); + assert.equal(0x00, buffer[1]); + assert.equal(0x80, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x80, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); buffer.writeFloatBE(0 * -1, 0); buffer.writeFloatLE(0 * -1, 4); - ASSERT.equal(0x80, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x80, buffer[7]); + assert.equal(0x80, buffer[0]); + assert.equal(0x00, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x80, buffer[7]); buffer.writeFloatBE(Infinity, 0); buffer.writeFloatLE(Infinity, 4); - ASSERT.equal(0x7F, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x80, buffer[6]); - ASSERT.equal(0x7F, buffer[7]); - ASSERT.equal(Infinity, buffer.readFloatBE(0)); - ASSERT.equal(Infinity, buffer.readFloatLE(4)); + assert.equal(0x7F, buffer[0]); + assert.equal(0x80, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x80, buffer[6]); + assert.equal(0x7F, buffer[7]); + assert.equal(Infinity, buffer.readFloatBE(0)); + assert.equal(Infinity, buffer.readFloatLE(4)); buffer.writeFloatBE(-Infinity, 0); buffer.writeFloatLE(-Infinity, 4); // Darwin ia32 does the other kind of NaN. // Compiler bug. No one really cares. - ASSERT(0xFF === buffer[0] || 0x7F === buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x80, buffer[6]); - ASSERT.equal(0xFF, buffer[7]); - ASSERT.equal(-Infinity, buffer.readFloatBE(0)); - ASSERT.equal(-Infinity, buffer.readFloatLE(4)); + assert(0xFF === buffer[0] || 0x7F === buffer[0]); + assert.equal(0x80, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x80, buffer[6]); + assert.equal(0xFF, buffer[7]); + assert.equal(-Infinity, buffer.readFloatBE(0)); + assert.equal(-Infinity, buffer.readFloatLE(4)); buffer.writeFloatBE(NaN, 0); buffer.writeFloatLE(NaN, 4); // Darwin ia32 does the other kind of NaN. // Compiler bug. No one really cares. - ASSERT(0x7F === buffer[0] || 0xFF === buffer[0]); + assert(0x7F === buffer[0] || 0xFF === buffer[0]); // mips processors use a slightly different NaN - ASSERT(0xC0 === buffer[1] || 0xBF === buffer[1]); - ASSERT(0x00 === buffer[2] || 0xFF === buffer[2]); - ASSERT(0x00 === buffer[3] || 0xFF === buffer[3]); - ASSERT(0x00 === buffer[4] || 0xFF === buffer[4]); - ASSERT(0x00 === buffer[5] || 0xFF === buffer[5]); - ASSERT(0xC0 === buffer[6] || 0xBF === buffer[6]); + assert(0xC0 === buffer[1] || 0xBF === buffer[1]); + assert(0x00 === buffer[2] || 0xFF === buffer[2]); + assert(0x00 === buffer[3] || 0xFF === buffer[3]); + assert(0x00 === buffer[4] || 0xFF === buffer[4]); + assert(0x00 === buffer[5] || 0xFF === buffer[5]); + assert(0xC0 === buffer[6] || 0xBF === buffer[6]); // Darwin ia32 does the other kind of NaN. // Compiler bug. No one really cares. - ASSERT(0x7F === buffer[7] || 0xFF === buffer[7]); - ASSERT.ok(isNaN(buffer.readFloatBE(0))); - ASSERT.ok(isNaN(buffer.readFloatLE(4))); + assert(0x7F === buffer[7] || 0xFF === buffer[7]); + assert.ok(isNaN(buffer.readFloatBE(0))); + assert.ok(isNaN(buffer.readFloatLE(4))); } diff --git a/test/parallel/test-writeint.js b/test/parallel/test-writeint.js index d05a90d48b5ac6..43784fb390a1f9 100644 --- a/test/parallel/test-writeint.js +++ b/test/parallel/test-writeint.js @@ -3,7 +3,7 @@ * Tests to verify we're writing signed integers correctly */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); function test8(clazz) { var buffer = new clazz(2); @@ -11,14 +11,14 @@ function test8(clazz) { buffer.writeInt8(0x23, 0); buffer.writeInt8(-5, 1); - ASSERT.equal(0x23, buffer[0]); - ASSERT.equal(0xfb, buffer[1]); + assert.equal(0x23, buffer[0]); + assert.equal(0xfb, buffer[1]); /* Make sure we handle truncation correctly */ - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt8(0xabc, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt8(0xabc, 0); }); @@ -26,12 +26,12 @@ function test8(clazz) { buffer.writeInt8(0x7f, 0); buffer.writeInt8(-0x80, 1); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0x80, buffer[1]); - ASSERT.throws(function() { + assert.equal(0x7f, buffer[0]); + assert.equal(0x80, buffer[1]); + assert.throws(function() { buffer.writeInt8(0x7f + 1, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt8(-0x80 - 1, 0); }); } @@ -42,49 +42,49 @@ function test16(clazz) { buffer.writeInt16BE(0x0023, 0); buffer.writeInt16LE(0x0023, 2); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x23, buffer[1]); - ASSERT.equal(0x23, buffer[2]); - ASSERT.equal(0x00, buffer[3]); + assert.equal(0x00, buffer[0]); + assert.equal(0x23, buffer[1]); + assert.equal(0x23, buffer[2]); + assert.equal(0x00, buffer[3]); buffer.writeInt16BE(-5, 0); buffer.writeInt16LE(-5, 2); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xfb, buffer[1]); - ASSERT.equal(0xfb, buffer[2]); - ASSERT.equal(0xff, buffer[3]); + assert.equal(0xff, buffer[0]); + assert.equal(0xfb, buffer[1]); + assert.equal(0xfb, buffer[2]); + assert.equal(0xff, buffer[3]); buffer.writeInt16BE(-1679, 1); buffer.writeInt16LE(-1679, 3); - ASSERT.equal(0xf9, buffer[1]); - ASSERT.equal(0x71, buffer[2]); - ASSERT.equal(0x71, buffer[3]); - ASSERT.equal(0xf9, buffer[4]); + assert.equal(0xf9, buffer[1]); + assert.equal(0x71, buffer[2]); + assert.equal(0x71, buffer[3]); + assert.equal(0xf9, buffer[4]); /* Make sure we handle min/max correctly */ buffer.writeInt16BE(0x7fff, 0); buffer.writeInt16BE(-0x8000, 2); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0x80, buffer[2]); - ASSERT.equal(0x00, buffer[3]); - ASSERT.throws(function() { + assert.equal(0x7f, buffer[0]); + assert.equal(0xff, buffer[1]); + assert.equal(0x80, buffer[2]); + assert.equal(0x00, buffer[3]); + assert.throws(function() { buffer.writeInt16BE(0x7fff + 1, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt16BE(-0x8000 - 1, 0); }); buffer.writeInt16LE(0x7fff, 0); buffer.writeInt16LE(-0x8000, 2); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0x7f, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x80, buffer[3]); - ASSERT.throws(function() { + assert.equal(0xff, buffer[0]); + assert.equal(0x7f, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x80, buffer[3]); + assert.throws(function() { buffer.writeInt16LE(0x7fff + 1, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt16LE(-0x8000 - 1, 0); }); } @@ -95,69 +95,69 @@ function test32(clazz) { buffer.writeInt32BE(0x23, 0); buffer.writeInt32LE(0x23, 4); - ASSERT.equal(0x00, buffer[0]); - ASSERT.equal(0x00, buffer[1]); - ASSERT.equal(0x00, buffer[2]); - ASSERT.equal(0x23, buffer[3]); - ASSERT.equal(0x23, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); + assert.equal(0x00, buffer[0]); + assert.equal(0x00, buffer[1]); + assert.equal(0x00, buffer[2]); + assert.equal(0x23, buffer[3]); + assert.equal(0x23, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); buffer.writeInt32BE(-5, 0); buffer.writeInt32LE(-5, 4); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xfb, buffer[3]); - ASSERT.equal(0xfb, buffer[4]); - ASSERT.equal(0xff, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xff, buffer[7]); + assert.equal(0xff, buffer[0]); + assert.equal(0xff, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0xfb, buffer[3]); + assert.equal(0xfb, buffer[4]); + assert.equal(0xff, buffer[5]); + assert.equal(0xff, buffer[6]); + assert.equal(0xff, buffer[7]); buffer.writeInt32BE(-805306713, 0); buffer.writeInt32LE(-805306713, 4); - ASSERT.equal(0xcf, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xfe, buffer[2]); - ASSERT.equal(0xa7, buffer[3]); - ASSERT.equal(0xa7, buffer[4]); - ASSERT.equal(0xfe, buffer[5]); - ASSERT.equal(0xff, buffer[6]); - ASSERT.equal(0xcf, buffer[7]); + assert.equal(0xcf, buffer[0]); + assert.equal(0xff, buffer[1]); + assert.equal(0xfe, buffer[2]); + assert.equal(0xa7, buffer[3]); + assert.equal(0xa7, buffer[4]); + assert.equal(0xfe, buffer[5]); + assert.equal(0xff, buffer[6]); + assert.equal(0xcf, buffer[7]); /* Make sure we handle min/max correctly */ buffer.writeInt32BE(0x7fffffff, 0); buffer.writeInt32BE(-0x80000000, 4); - ASSERT.equal(0x7f, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0xff, buffer[3]); - ASSERT.equal(0x80, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x00, buffer[7]); - ASSERT.throws(function() { + assert.equal(0x7f, buffer[0]); + assert.equal(0xff, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0xff, buffer[3]); + assert.equal(0x80, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x00, buffer[7]); + assert.throws(function() { buffer.writeInt32BE(0x7fffffff + 1, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt32BE(-0x80000000 - 1, 0); }); buffer.writeInt32LE(0x7fffffff, 0); buffer.writeInt32LE(-0x80000000, 4); - ASSERT.equal(0xff, buffer[0]); - ASSERT.equal(0xff, buffer[1]); - ASSERT.equal(0xff, buffer[2]); - ASSERT.equal(0x7f, buffer[3]); - ASSERT.equal(0x00, buffer[4]); - ASSERT.equal(0x00, buffer[5]); - ASSERT.equal(0x00, buffer[6]); - ASSERT.equal(0x80, buffer[7]); - ASSERT.throws(function() { + assert.equal(0xff, buffer[0]); + assert.equal(0xff, buffer[1]); + assert.equal(0xff, buffer[2]); + assert.equal(0x7f, buffer[3]); + assert.equal(0x00, buffer[4]); + assert.equal(0x00, buffer[5]); + assert.equal(0x00, buffer[6]); + assert.equal(0x80, buffer[7]); + assert.throws(function() { buffer.writeInt32LE(0x7fffffff + 1, 0); }); - ASSERT.throws(function() { + assert.throws(function() { buffer.writeInt32LE(-0x80000000 - 1, 0); }); } diff --git a/test/parallel/test-writeuint.js b/test/parallel/test-writeuint.js index 20d9d7dcefe063..0cccd4bc150436 100644 --- a/test/parallel/test-writeuint.js +++ b/test/parallel/test-writeuint.js @@ -3,7 +3,7 @@ * A battery of tests to help us read a series of uints */ require('../common'); -var ASSERT = require('assert'); +const assert = require('assert'); /* * We need to check the following things: @@ -19,25 +19,25 @@ function test8(clazz) { data.writeUInt8(23, 1); data.writeUInt8(23, 2); data.writeUInt8(23, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); + assert.equal(23, data[0]); + assert.equal(23, data[1]); + assert.equal(23, data[2]); + assert.equal(23, data[3]); data.writeUInt8(23, 0); data.writeUInt8(23, 1); data.writeUInt8(23, 2); data.writeUInt8(23, 3); - ASSERT.equal(23, data[0]); - ASSERT.equal(23, data[1]); - ASSERT.equal(23, data[2]); - ASSERT.equal(23, data[3]); + assert.equal(23, data[0]); + assert.equal(23, data[1]); + assert.equal(23, data[2]); + assert.equal(23, data[3]); data.writeUInt8(255, 0); - ASSERT.equal(255, data[0]); + assert.equal(255, data[0]); data.writeUInt8(255, 0); - ASSERT.equal(255, data[0]); + assert.equal(255, data[0]); } @@ -46,37 +46,37 @@ function test16(clazz) { var data = new clazz(4); data.writeUInt16BE(value, 0); - ASSERT.equal(0x23, data[0]); - ASSERT.equal(0x43, data[1]); + assert.equal(0x23, data[0]); + assert.equal(0x43, data[1]); data.writeUInt16BE(value, 1); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[2]); + assert.equal(0x23, data[1]); + assert.equal(0x43, data[2]); data.writeUInt16BE(value, 2); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[3]); + assert.equal(0x23, data[2]); + assert.equal(0x43, data[3]); data.writeUInt16LE(value, 0); - ASSERT.equal(0x23, data[1]); - ASSERT.equal(0x43, data[0]); + assert.equal(0x23, data[1]); + assert.equal(0x43, data[0]); data.writeUInt16LE(value, 1); - ASSERT.equal(0x23, data[2]); - ASSERT.equal(0x43, data[1]); + assert.equal(0x23, data[2]); + assert.equal(0x43, data[1]); data.writeUInt16LE(value, 2); - ASSERT.equal(0x23, data[3]); - ASSERT.equal(0x43, data[2]); + assert.equal(0x23, data[3]); + assert.equal(0x43, data[2]); value = 0xff80; data.writeUInt16LE(value, 0); - ASSERT.equal(0xff, data[1]); - ASSERT.equal(0x80, data[0]); + assert.equal(0xff, data[1]); + assert.equal(0x80, data[0]); data.writeUInt16BE(value, 0); - ASSERT.equal(0xff, data[0]); - ASSERT.equal(0x80, data[1]); + assert.equal(0xff, data[0]); + assert.equal(0x80, data[1]); } @@ -85,40 +85,40 @@ function test32(clazz) { var value = 0xe7f90a6d; data.writeUInt32BE(value, 0); - ASSERT.equal(0xe7, data[0]); - ASSERT.equal(0xf9, data[1]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[3]); + assert.equal(0xe7, data[0]); + assert.equal(0xf9, data[1]); + assert.equal(0x0a, data[2]); + assert.equal(0x6d, data[3]); data.writeUInt32BE(value, 1); - ASSERT.equal(0xe7, data[1]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[4]); + assert.equal(0xe7, data[1]); + assert.equal(0xf9, data[2]); + assert.equal(0x0a, data[3]); + assert.equal(0x6d, data[4]); data.writeUInt32BE(value, 2); - ASSERT.equal(0xe7, data[2]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[4]); - ASSERT.equal(0x6d, data[5]); + assert.equal(0xe7, data[2]); + assert.equal(0xf9, data[3]); + assert.equal(0x0a, data[4]); + assert.equal(0x6d, data[5]); data.writeUInt32LE(value, 0); - ASSERT.equal(0xe7, data[3]); - ASSERT.equal(0xf9, data[2]); - ASSERT.equal(0x0a, data[1]); - ASSERT.equal(0x6d, data[0]); + assert.equal(0xe7, data[3]); + assert.equal(0xf9, data[2]); + assert.equal(0x0a, data[1]); + assert.equal(0x6d, data[0]); data.writeUInt32LE(value, 1); - ASSERT.equal(0xe7, data[4]); - ASSERT.equal(0xf9, data[3]); - ASSERT.equal(0x0a, data[2]); - ASSERT.equal(0x6d, data[1]); + assert.equal(0xe7, data[4]); + assert.equal(0xf9, data[3]); + assert.equal(0x0a, data[2]); + assert.equal(0x6d, data[1]); data.writeUInt32LE(value, 2); - ASSERT.equal(0xe7, data[5]); - ASSERT.equal(0xf9, data[4]); - ASSERT.equal(0x0a, data[3]); - ASSERT.equal(0x6d, data[2]); + assert.equal(0xe7, data[5]); + assert.equal(0xf9, data[4]); + assert.equal(0x0a, data[3]); + assert.equal(0x6d, data[2]); } @@ -129,10 +129,10 @@ function testUint(clazz) { // Test 0 to 5 bytes. for (var i = 0; i <= 5; i++) { const errmsg = `byteLength: ${i}`; - ASSERT.throws(function() { + assert.throws(function() { data.writeUIntBE(val, 0, i); }, /"value" argument is out of bounds/, errmsg); - ASSERT.throws(function() { + assert.throws(function() { data.writeUIntLE(val, 0, i); }, /"value" argument is out of bounds/, errmsg); val *= 0x100; From 3079ba6e78b3a3592f8353794fc0e1bf4d4592a9 Mon Sep 17 00:00:00 2001 From: William Kapke Date: Thu, 17 Nov 2016 05:49:49 +0000 Subject: [PATCH 106/169] doc: redirect 'Start a Working Group' to TSC repo PR-URL: https://github.com/nodejs/node/pull/9655 Reviewed-By: James M Snell Reviewed-By: Rich Trott Reviewed-By: Gibson Fahnestock --- WORKING_GROUPS.md | 222 +++------------------------------------------- 1 file changed, 10 insertions(+), 212 deletions(-) diff --git a/WORKING_GROUPS.md b/WORKING_GROUPS.md index 1d2a77121e6184..0126abeb54939a 100644 --- a/WORKING_GROUPS.md +++ b/WORKING_GROUPS.md @@ -19,6 +19,16 @@ A Working Group's charter can be revoked either by consensus of the Working Group's members or by a CTC vote. Once revoked, any future work that arises becomes the responsibility of the CTC. +## Joining a WG + +To find out how to join a working group, consult the GOVERNANCE.md in +the working group's repository, or in the working group's repository. + +## Starting A Core Working Group + +The process to start a Core Working Group is identical to [creating a +Top Level Working Group](https://github.com/nodejs/TSC/blob/master/WORKING_GROUPS.md#starting-a-wg). + ## Current Working Groups * [Website](#website) @@ -36,10 +46,6 @@ becomes the responsibility of the CTC. * [Documentation](#documentation) * [Testing](#testing) -#### Process: - -* [Starting a Working Group](#starting-a-wg) -* [Bootstrap Governance](#bootstrap-governance) ### [Website](https://github.com/nodejs/nodejs.org) @@ -289,211 +295,3 @@ Responsibilities include: * Working with the Build Working Group to improve continuous integration. * Improving tooling for testing. -## Joining a WG - -To find out how to join a working group, consult the GOVERNANCE.md in -the working group's repository, or simply open an issue there. - -## Starting a WG - -A Working Group is established by first defining a charter that can be -ratified by the TC. A charter is a *statement of purpose*, a -*list of responsibilities* and a *list of initial membership*. - -A working group needs 3 initial members. These should be individuals -already undertaking the work described in the charter. - -The list of responsibilities should be specific. Once established, these -responsibilities are no longer governed by the TC and therefore should -not be broad or subjective. The only recourse the TC has over the working -group is to revoke the entire charter and take on the work previously -done by the working group themselves. - -If the responsibilities described in the charter are currently -undertaken by another WG then the charter will additionally have to be -ratified by that WG. - -You can submit the WG charter for ratification by sending -a Pull Request to this document, which adds it to the -list of current Working Groups. Once ratified the list of -members should be maintained in the Working Group's -README. - -## Bootstrap Governance - -Once the TC ratifies a charter the WG inherits the following -documentation for governance, contribution, conduct and an MIT -LICENSE. The WG is free to change these documents through their own -governance process, hence the term "bootstrap." - -### *[insert WG name]* Working Group - -The Node.js *[insert WG name]* is jointly governed by a Working Group (WG) -that is responsible for high-level guidance of the project. - -The WG has final authority over this project including: - -* Technical direction -* Project governance and process (including this policy) -* Contribution policy -* GitHub repository hosting -* Conduct guidelines -* Maintaining the list of additional Collaborators - -For the current list of WG members, see the project -[README.md](./README.md#current-project-team-members). - -### Collaborators - -The *[insert WG name]* GitHub repository is -maintained by the WG and additional Collaborators who are added by the -WG on an ongoing basis. - -Individuals making significant and valuable contributions are made -Collaborators and given commit-access to the project. These -individuals are identified by the WG and their addition as -Collaborators is discussed during the weekly WG meeting. - -_Note:_ If you make a significant contribution and are not considered -for commit-access log an issue or contact a WG member directly and it -will be brought up in the next WG meeting. - -Modifications of the contents of the *[insert WG repo]* repository are made on -a collaborative basis. Anybody with a GitHub account may propose a -modification via pull request and it will be considered by the project -Collaborators. All pull requests must be reviewed and accepted by a -Collaborator with sufficient expertise who is able to take full -responsibility for the change. In the case of pull requests proposed -by an existing Collaborator, an additional Collaborator is required -for sign-off. Consensus should be sought if additional Collaborators -participate and there is disagreement around a particular -modification. See _Consensus Seeking Process_ below for further detail -on the consensus model used for governance. - -Collaborators may opt to elevate significant or controversial -modifications, or modifications that have not found consensus to the -WG for discussion by assigning the ***WG-agenda*** tag to a pull -request or issue. The WG should serve as the final arbiter where -required. - -For the current list of Collaborators, see the project -[README.md](./README.md#current-project-team-members). - -### WG Membership - -WG seats are not time-limited. There is no fixed size of the WG. -However, the expected target is between 6 and 12, to ensure adequate -coverage of important areas of expertise, balanced with the ability to -make decisions efficiently. - -There is no specific set of requirements or qualifications for WG -membership beyond these rules. - -The WG may add additional members to the WG by unanimous consensus. - -A WG member may be removed from the WG by voluntary resignation, or by -unanimous consensus of all other WG members. - -Changes to WG membership should be posted in the agenda, and may be -suggested as any other agenda item (see "WG Meetings" below). - -If an addition or removal is proposed during a meeting, and the full -WG is not in attendance to participate, then the addition or removal -is added to the agenda for the subsequent meeting. This is to ensure -that all members are given the opportunity to participate in all -membership decisions. If a WG member is unable to attend a meeting -where a planned membership decision is being made, then their consent -is assumed. - -No more than 1/3 of the WG members may be affiliated with the same -employer. If removal or resignation of a WG member, or a change of -employment by a WG member, creates a situation where more than 1/3 of -the WG membership shares an employer, then the situation must be -immediately remedied by the resignation or removal of one or more WG -members affiliated with the over-represented employer(s). - -### WG Meetings - -The WG meets weekly on a Google Hangout On Air. A designated moderator -approved by the WG runs the meeting. Each meeting should be -published to YouTube. - -Items are added to the WG agenda that are considered contentious or -are modifications of governance, contribution policy, WG membership, -or release process. - -The intention of the agenda is not to approve or review all patches; -that should happen continuously on GitHub and be handled by the larger -group of Collaborators. - -Any community member or contributor can ask that something be added to -the next meeting's agenda by logging a GitHub Issue. Any Collaborator, -WG member or the moderator can add the item to the agenda by adding -the ***WG-agenda*** tag to the issue. - -Prior to each WG meeting the moderator will share the Agenda with -members of the WG. WG members can add any items they like to the -agenda at the beginning of each meeting. The moderator and the WG -cannot veto or remove items. - -The WG may invite persons or representatives from certain projects to -participate in a non-voting capacity. - -The moderator is responsible for summarizing the discussion of each -agenda item and sends it as a pull request after the meeting. - -### Consensus Seeking Process - -The WG follows a -[Consensus Seeking](http://en.wikipedia.org/wiki/Consensus-seeking_decision-making) -decision-making model. - -When an agenda item has appeared to reach a consensus the moderator -will ask "Does anyone object?" as a final call for dissent from the -consensus. - -If an agenda item cannot reach a consensus a WG member can call for -either a closing vote or a vote to table the issue to the next -meeting. The call for a vote must be seconded by a majority of the WG -or else the discussion will continue. Simple majority wins. - -Note that changes to WG membership require unanimous consensus. See -"WG Membership" above. - - -## Developer's Certificate of Origin 1.1 - -By making a contribution to this project, I certify that: - -* (a) The contribution was created in whole or in part by me and I - have the right to submit it under the open source license - indicated in the file; or - -* (b) The contribution is based upon previous work that, to the best - of my knowledge, is covered under an appropriate open source - license and I have the right under that license to submit that - work with modifications, whether created in whole or in part - by me, under the same open source license (unless I am - permitted to submit under a different license), as indicated - in the file; or - -* (c) The contribution was provided directly to me by some other - person who certified (a), (b) or (c) and I have not modified - it. - -* (d) I understand and agree that this project and the contribution - are public and that a record of the contribution (including all - personal information I submit with it, including my sign-off) is - maintained indefinitely and may be redistributed consistent with - this project or the open source license(s) involved. - -### Moderation Policy - -The [Node.js Moderation Policy] applies to this WG. - -### Code of Conduct - -The [Node.js Code of Conduct][] applies to this WG. - -[Node.js Code of Conduct]: https://github.com/nodejs/node/blob/master/CODE_OF_CONDUCT.md -[Node.js Moderation Policy]: https://github.com/nodejs/TSC/blob/master/Moderation-Policy.md From b814b4cec7b4419cc377efe1beac3d2160364031 Mon Sep 17 00:00:00 2001 From: Tanuja-Sawant Date: Fri, 4 Nov 2016 21:11:10 +0530 Subject: [PATCH 107/169] doc: update writable.write return value stream.md is updated to explain the return value of writable.write(chunk) precisely. PR-URL: https://github.com/nodejs/node/pull/9468 Fixes: https://github.com/nodejs/node/issues/9247 Reviewed-By: James M Snell Reviewed-By: Ron Korving Reviewed-By: Roman Reiss --- doc/api/stream.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/doc/api/stream.md b/doc/api/stream.md index 121423095edd5d..55c1bb39780d95 100644 --- a/doc/api/stream.md +++ b/doc/api/stream.md @@ -440,10 +440,12 @@ occurs, the `callback` *may or may not* be called with the error as its first argument. To reliably detect write errors, add a listener for the `'error'` event. -The return value indicates whether the written `chunk` was buffered internally -and the buffer has exceeded the `highWaterMark` configured when the stream was -created. If `false` is returned, further attempts to write data to the stream -should be paused until the [`'drain'`][] event is emitted. +The return value is `true` if the internal buffer does not exceed +`highWaterMark` configured when the stream was created after admitting `chunk`. +If `false` is returned, further attempts to write data to the stream should +stop until the [`'drain'`][] event is emitted. However, the `false` return +value is only advisory and the writable stream will unconditionally accept and +buffer `chunk` even if it has not not been allowed to drain. A Writable stream in object mode will always ignore the `encoding` argument. From cc0c736bcc107ba5b362a5382a35a583914fe06a Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Fri, 13 May 2016 23:08:43 +0200 Subject: [PATCH 108/169] src,tools: speed up startup by 2.5% Use zero-copy external string resources for storing the built-in JS source code. Saves a few hundred kilobyte of memory and consistently speeds up `benchmark/misc/startup.js` by 2.5%. Everything old is new again! Commit 74954ce ("Add string class that uses ExternalAsciiStringResource.") from 2011 did the same thing but I removed that in 2013 in commit 34b0a36 ("src: don't use NewExternal() with unaligned strings") because of a limitation in the V8 API. V8 no longer requires that strings are aligned if they are one-byte strings so it should be safe to re-enable external strings again. PR-URL: https://github.com/nodejs/node/pull/5458 Reviewed-By: James M Snell Reviewed-By: Robert Jefe Lindstaedt --- src/node_javascript.cc | 49 +++++++----- tools/js2c.py | 164 ++++++++--------------------------------- 2 files changed, 62 insertions(+), 151 deletions(-) diff --git a/src/node_javascript.cc b/src/node_javascript.cc index 6f445f76df2407..3f6d6c82a85269 100644 --- a/src/node_javascript.cc +++ b/src/node_javascript.cc @@ -6,33 +6,46 @@ namespace node { -using v8::HandleScope; using v8::Local; using v8::NewStringType; using v8::Object; using v8::String; +// id##_data is defined in node_natives.h. +#define V(id) \ + static struct : public String::ExternalOneByteStringResource { \ + const char* data() const override { \ + return reinterpret_cast(id##_data); \ + } \ + size_t length() const override { return sizeof(id##_data); } \ + void Dispose() override { /* Default calls `delete this`. */ } \ + } id##_external_data; +NODE_NATIVES_MAP(V) +#undef V + Local MainSource(Environment* env) { - return String::NewFromUtf8( - env->isolate(), - reinterpret_cast(internal_bootstrap_node_native), - NewStringType::kNormal, - sizeof(internal_bootstrap_node_native)).ToLocalChecked(); + auto maybe_string = + String::NewExternalOneByte( + env->isolate(), + &internal_bootstrap_node_external_data); + return maybe_string.ToLocalChecked(); } void DefineJavaScript(Environment* env, Local target) { - HandleScope scope(env->isolate()); - - for (auto native : natives) { - if (native.source != internal_bootstrap_node_native) { - Local name = String::NewFromUtf8(env->isolate(), native.name); - Local source = - String::NewFromUtf8( - env->isolate(), reinterpret_cast(native.source), - NewStringType::kNormal, native.source_len).ToLocalChecked(); - target->Set(name, source); - } - } + auto context = env->context(); +#define V(id) \ + do { \ + auto key = \ + String::NewFromOneByte( \ + env->isolate(), id##_name, NewStringType::kNormal, \ + sizeof(id##_name)).ToLocalChecked(); \ + auto value = \ + String::NewExternalOneByte( \ + env->isolate(), &id##_external_data).ToLocalChecked(); \ + CHECK(target->Set(context, key, value).FromJust()); \ + } while (0); + NODE_NATIVES_MAP(V) +#undef V } } // namespace node diff --git a/tools/js2c.py b/tools/js2c.py index 40c30cc0325f61..4808c56813ce17 100755 --- a/tools/js2c.py +++ b/tools/js2c.py @@ -37,8 +37,11 @@ import string -def ToCArray(filename, lines): - return ','.join(str(ord(c)) for c in lines) +def ToCString(contents): + step = 20 + slices = (contents[i:i+step] for i in xrange(0, len(contents), step)) + slices = map(lambda s: ','.join(str(ord(c)) for c in s), slices) + return ',\n'.join(slices) def ReadFile(filename): @@ -61,21 +64,6 @@ def ReadLines(filename): return result -def LoadConfigFrom(name): - import ConfigParser - config = ConfigParser.ConfigParser() - config.read(name) - return config - - -def ParseValue(string): - string = string.strip() - if string.startswith('[') and string.endswith(']'): - return string.lstrip('[').rstrip(']').split() - else: - return string - - def ExpandConstants(lines, constants): for key, value in constants.items(): lines = lines.replace(key, str(value)) @@ -174,53 +162,37 @@ def ReadMacros(lines): HEADER_TEMPLATE = """\ -#ifndef node_natives_h -#define node_natives_h -namespace node { - -%(source_lines)s\ +#ifndef NODE_NATIVES_H_ +#define NODE_NATIVES_H_ -struct _native { - const char* name; - const unsigned char* source; - size_t source_len; -}; +#include -static const struct _native natives[] = { %(native_lines)s }; +#define NODE_NATIVES_MAP(V) \\ +{node_natives_map} -} -#endif -""" - - -NATIVE_DECLARATION = """\ - { "%(id)s", %(escaped_id)s_native, sizeof(%(escaped_id)s_native) }, -""" +namespace node {{ +{sources} +}} // namespace node -SOURCE_DECLARATION = """\ - const unsigned char %(escaped_id)s_native[] = { %(data)s }; +#endif // NODE_NATIVES_H_ """ -GET_DELAY_INDEX_CASE = """\ - if (strcmp(name, "%(id)s") == 0) return %(i)i; +NODE_NATIVES_MAP = """\ + V({escaped_id}) \\ """ -GET_DELAY_SCRIPT_SOURCE_CASE = """\ - if (index == %(i)i) return Vector(%(id)s, %(length)i); +SOURCES = """\ +static const uint8_t {escaped_id}_name[] = {{ +{name}}}; +static const uint8_t {escaped_id}_data[] = {{ +{data}}}; """ -GET_DELAY_SCRIPT_NAME_CASE = """\ - if (index == %(i)i) return Vector("%(name)s", %(length)i); -""" - def JS2C(source, target): - ids = [] - delay_ids = [] modules = [] - # Locate the macros file name. consts = {} macros = {} macro_lines = [] @@ -235,18 +207,14 @@ def JS2C(source, target): (consts, macros) = ReadMacros(macro_lines) # Build source code lines - source_lines = [ ] - source_lines_empty = [] - - native_lines = [] + node_natives_map = [] + sources = [] for s in modules: - delay = str(s).endswith('-delay.js') lines = ReadFile(str(s)) - lines = ExpandConstants(lines, consts) lines = ExpandMacros(lines, macros) - data = ToCArray(s, lines) + data = ToCString(lines) # On Windows, "./foo.bar" in the .gyp file is passed as "foo.bar" # so don't assume there is always a slash in the file path. @@ -258,89 +226,19 @@ def JS2C(source, target): if '.' in id: id = id.split('.', 1)[0] - if delay: id = id[:-6] - if delay: - delay_ids.append((id, len(lines))) - else: - ids.append((id, len(lines))) - + name = ToCString(id) escaped_id = id.replace('-', '_').replace('/', '_') - source_lines.append(SOURCE_DECLARATION % { - 'id': id, - 'escaped_id': escaped_id, - 'data': data - }) - source_lines_empty.append(SOURCE_DECLARATION % { - 'id': id, - 'escaped_id': escaped_id, - 'data': 0 - }) - native_lines.append(NATIVE_DECLARATION % { - 'id': id, - 'escaped_id': escaped_id - }) - - # Build delay support functions - get_index_cases = [ ] - get_script_source_cases = [ ] - get_script_name_cases = [ ] - - i = 0 - for (id, length) in delay_ids: - native_name = "native %s.js" % id - get_index_cases.append(GET_DELAY_INDEX_CASE % { 'id': id, 'i': i }) - get_script_source_cases.append(GET_DELAY_SCRIPT_SOURCE_CASE % { - 'id': id, - 'length': length, - 'i': i - }) - get_script_name_cases.append(GET_DELAY_SCRIPT_NAME_CASE % { - 'name': native_name, - 'length': len(native_name), - 'i': i - }); - i = i + 1 - - for (id, length) in ids: - native_name = "native %s.js" % id - get_index_cases.append(GET_DELAY_INDEX_CASE % { 'id': id, 'i': i }) - get_script_source_cases.append(GET_DELAY_SCRIPT_SOURCE_CASE % { - 'id': id, - 'length': length, - 'i': i - }) - get_script_name_cases.append(GET_DELAY_SCRIPT_NAME_CASE % { - 'name': native_name, - 'length': len(native_name), - 'i': i - }); - i = i + 1 + node_natives_map.append(NODE_NATIVES_MAP.format(**locals())) + sources.append(SOURCES.format(**locals())) + + node_natives_map = ''.join(node_natives_map) + sources = ''.join(sources) # Emit result output = open(str(target[0]), "w") - output.write(HEADER_TEMPLATE % { - 'builtin_count': len(ids) + len(delay_ids), - 'delay_count': len(delay_ids), - 'source_lines': "\n".join(source_lines), - 'native_lines': "\n".join(native_lines), - 'get_index_cases': "".join(get_index_cases), - 'get_script_source_cases': "".join(get_script_source_cases), - 'get_script_name_cases': "".join(get_script_name_cases) - }) + output.write(HEADER_TEMPLATE.format(**locals())) output.close() - if len(target) > 1: - output = open(str(target[1]), "w") - output.write(HEADER_TEMPLATE % { - 'builtin_count': len(ids) + len(delay_ids), - 'delay_count': len(delay_ids), - 'source_lines': "\n".join(source_lines_empty), - 'get_index_cases': "".join(get_index_cases), - 'get_script_source_cases': "".join(get_script_source_cases), - 'get_script_name_cases': "".join(get_script_name_cases) - }) - output.close() - def main(): natives = sys.argv[1] source_files = sys.argv[2:] From 8c6ecce7430e2149a93c5518f51115f8a39e5fee Mon Sep 17 00:00:00 2001 From: Adam Majer Date: Tue, 30 Aug 2016 13:16:27 +0200 Subject: [PATCH 109/169] crypto: Use reference count to manage cert_store Setting reference count at the time of setting cert_store instead of trying to manage it by modifying internal states in destructor. PR-URL: https://github.com/nodejs/node/pull/9409 Reviewed-By: Fedor Indutny Reviewed-By: Shigeki Ohtsu --- src/node_crypto.cc | 2 ++ src/node_crypto.h | 7 ------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index b83794a770d672..cf32bb967f364c 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -773,6 +773,8 @@ void SecureContext::AddRootCerts(const FunctionCallbackInfo& args) { } sc->ca_store_ = root_cert_store; + // Increment reference count so global store is not deleted along with CTX. + CRYPTO_add(&root_cert_store->references, 1, CRYPTO_LOCK_X509_STORE); SSL_CTX_set_cert_store(sc->ctx_, sc->ca_store_); } diff --git a/src/node_crypto.h b/src/node_crypto.h index 24ac77365cf455..fd3e2ce895f5cd 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -142,13 +142,6 @@ class SecureContext : public BaseObject { void FreeCTXMem() { if (ctx_) { env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize); - if (ctx_->cert_store == root_cert_store) { - // SSL_CTX_free() will attempt to free the cert_store as well. - // Since we want our root_cert_store to stay around forever - // we just clear the field. Hopefully OpenSSL will not modify this - // struct in future versions. - ctx_->cert_store = nullptr; - } SSL_CTX_free(ctx_); if (cert_ != nullptr) X509_free(cert_); From 4e1a5a71c1db8ab37046b91216b43ec11c2e126b Mon Sep 17 00:00:00 2001 From: Adam Langley Date: Sun, 30 Oct 2016 13:22:50 -0700 Subject: [PATCH 110/169] crypto: fix handling of root_cert_store. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SecureContext::AddRootCerts only parses the root certificates once and keeps the result in root_cert_store, a global X509_STORE. This change addresses the following issues: 1. SecureContext::AddCACert would add certificates to whatever X509_STORE was being used, even if that happened to be root_cert_store. Thus adding a CA certificate to a SecureContext would also cause it to be included in unrelated SecureContexts. 2. AddCRL would crash if neither AddRootCerts nor AddCACert had been called first. 3. Calling AddCACert without calling AddRootCerts first, and with an input that didn't contain any certificates, would leak an X509_STORE. 4. AddCRL would add the CRL to whatever X509_STORE was being used. Thus, like AddCACert, unrelated SecureContext objects could be affected. The following, non-obvious behaviour remains: calling AddRootCerts doesn't /add/ them, rather it sets the CA certs to be the root set and overrides any previous CA certificates. Points 1–3 are probably unimportant because the SecureContext is typically configured by `createSecureContext` in `lib/_tls_common.js`. This function either calls AddCACert or AddRootCerts and only calls AddCRL after setting up CA certificates. Point four could still apply in the unlikely case that someone configures a CRL without explicitly configuring the CAs. PR-URL: https://github.com/nodejs/node/pull/9409 Reviewed-By: Fedor Indutny Reviewed-By: Shigeki Ohtsu --- src/node_crypto.cc | 135 +++++++++++++++++++------------- src/node_crypto.h | 27 +++---- test/parallel/test-crypto.js | 4 + test/parallel/test-tls-addca.js | 62 +++++++++++++++ 4 files changed, 160 insertions(+), 68 deletions(-) create mode 100644 test/parallel/test-tls-addca.js diff --git a/src/node_crypto.cc b/src/node_crypto.cc index cf32bb967f364c..dcb0d38c47d346 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -121,6 +121,7 @@ const char* const root_certs[] = { }; X509_STORE* root_cert_store; +std::vector* root_certs_vector; // Just to generate static methods template class SSLWrap; @@ -402,8 +403,6 @@ void SecureContext::Init(const FunctionCallbackInfo& args) { SSL_SESS_CACHE_NO_AUTO_CLEAR); SSL_CTX_sess_set_get_cb(sc->ctx_, SSLWrap::GetSessionCallback); SSL_CTX_sess_set_new_cb(sc->ctx_, SSLWrap::NewSessionCallback); - - sc->ca_store_ = nullptr; } @@ -672,8 +671,52 @@ void SecureContext::SetCert(const FunctionCallbackInfo& args) { } +#if OPENSSL_VERSION_NUMBER < 0x10100000L && !defined(OPENSSL_IS_BORINGSSL) +// This section contains OpenSSL 1.1.0 functions reimplemented for OpenSSL +// 1.0.2 so that the following code can be written without lots of #if lines. + +static int X509_STORE_up_ref(X509_STORE* store) { + CRYPTO_add(&store->references, 1, CRYPTO_LOCK_X509_STORE); + return 1; +} + +static int X509_up_ref(X509* cert) { + CRYPTO_add(&cert->references, 1, CRYPTO_LOCK_X509); + return 1; +} +#endif // OPENSSL_VERSION_NUMBER < 0x10100000L && !OPENSSL_IS_BORINGSSL + + +static X509_STORE* NewRootCertStore() { + if (!root_certs_vector) { + root_certs_vector = new std::vector; + + for (size_t i = 0; i < arraysize(root_certs); i++) { + BIO* bp = NodeBIO::NewFixed(root_certs[i], strlen(root_certs[i])); + X509 *x509 = PEM_read_bio_X509(bp, nullptr, CryptoPemCallback, nullptr); + BIO_free(bp); + + if (x509 == nullptr) { + // Parse errors from the built-in roots are fatal. + abort(); + return nullptr; + } + + root_certs_vector->push_back(x509); + } + } + + X509_STORE* store = X509_STORE_new(); + for (auto& cert : *root_certs_vector) { + X509_up_ref(cert); + X509_STORE_add_cert(store, cert); + } + + return store; +} + + void SecureContext::AddCACert(const FunctionCallbackInfo& args) { - bool newCAStore = false; Environment* env = Environment::GetCurrent(args); SecureContext* sc; @@ -685,26 +728,24 @@ void SecureContext::AddCACert(const FunctionCallbackInfo& args) { return env->ThrowTypeError("CA certificate argument is mandatory"); } - if (!sc->ca_store_) { - sc->ca_store_ = X509_STORE_new(); - newCAStore = true; + BIO* bio = LoadBIO(env, args[0]); + if (!bio) { + return; } - unsigned cert_count = 0; - if (BIO* bio = LoadBIO(env, args[0])) { - while (X509* x509 = - PEM_read_bio_X509(bio, nullptr, CryptoPemCallback, nullptr)) { - X509_STORE_add_cert(sc->ca_store_, x509); - SSL_CTX_add_client_CA(sc->ctx_, x509); - X509_free(x509); - cert_count += 1; + X509_STORE* cert_store = SSL_CTX_get_cert_store(sc->ctx_); + while (X509* x509 = + PEM_read_bio_X509(bio, nullptr, CryptoPemCallback, nullptr)) { + if (cert_store == root_cert_store) { + cert_store = NewRootCertStore(); + SSL_CTX_set_cert_store(sc->ctx_, cert_store); } - BIO_free_all(bio); + X509_STORE_add_cert(cert_store, x509); + SSL_CTX_add_client_CA(sc->ctx_, x509); + X509_free(x509); } - if (cert_count > 0 && newCAStore) { - SSL_CTX_set_cert_store(sc->ctx_, sc->ca_store_); - } + BIO_free_all(bio); } @@ -725,57 +766,43 @@ void SecureContext::AddCRL(const FunctionCallbackInfo& args) { if (!bio) return; - X509_CRL *x509 = + X509_CRL* crl = PEM_read_bio_X509_CRL(bio, nullptr, CryptoPemCallback, nullptr); - if (x509 == nullptr) { + if (crl == nullptr) { + return env->ThrowError("Failed to parse CRL"); BIO_free_all(bio); return; } - X509_STORE_add_crl(sc->ca_store_, x509); - X509_STORE_set_flags(sc->ca_store_, X509_V_FLAG_CRL_CHECK | - X509_V_FLAG_CRL_CHECK_ALL); + X509_STORE* cert_store = SSL_CTX_get_cert_store(sc->ctx_); + if (cert_store == root_cert_store) { + cert_store = NewRootCertStore(); + SSL_CTX_set_cert_store(sc->ctx_, cert_store); + } + + X509_STORE_add_crl(cert_store, crl); + X509_STORE_set_flags(cert_store, + X509_V_FLAG_CRL_CHECK | X509_V_FLAG_CRL_CHECK_ALL); + BIO_free_all(bio); - X509_CRL_free(x509); + X509_CRL_free(crl); } - void SecureContext::AddRootCerts(const FunctionCallbackInfo& args) { SecureContext* sc; ASSIGN_OR_RETURN_UNWRAP(&sc, args.Holder()); ClearErrorOnReturn clear_error_on_return; (void) &clear_error_on_return; // Silence compiler warning. - CHECK_EQ(sc->ca_store_, nullptr); - if (!root_cert_store) { - root_cert_store = X509_STORE_new(); - - for (size_t i = 0; i < arraysize(root_certs); i++) { - BIO* bp = NodeBIO::NewFixed(root_certs[i], strlen(root_certs[i])); - if (bp == nullptr) { - return; - } - - X509 *x509 = PEM_read_bio_X509(bp, nullptr, CryptoPemCallback, nullptr); - if (x509 == nullptr) { - BIO_free_all(bp); - return; - } - - X509_STORE_add_cert(root_cert_store, x509); - - BIO_free_all(bp); - X509_free(x509); - } + root_cert_store = NewRootCertStore(); } - sc->ca_store_ = root_cert_store; // Increment reference count so global store is not deleted along with CTX. - CRYPTO_add(&root_cert_store->references, 1, CRYPTO_LOCK_X509_STORE); - SSL_CTX_set_cert_store(sc->ctx_, sc->ca_store_); + X509_STORE_up_ref(root_cert_store); + SSL_CTX_set_cert_store(sc->ctx_, root_cert_store); } @@ -985,6 +1012,8 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo& args) { sc->cert_ = nullptr; } + X509_STORE* cert_store = SSL_CTX_get_cert_store(sc->ctx_); + if (d2i_PKCS12_bio(in, &p12) && PKCS12_parse(p12, pass, &pkey, &cert, &extra_certs) && SSL_CTX_use_certificate_chain(sc->ctx_, @@ -997,11 +1026,11 @@ void SecureContext::LoadPKCS12(const FunctionCallbackInfo& args) { for (int i = 0; i < sk_X509_num(extra_certs); i++) { X509* ca = sk_X509_value(extra_certs, i); - if (!sc->ca_store_) { - sc->ca_store_ = X509_STORE_new(); - SSL_CTX_set_cert_store(sc->ctx_, sc->ca_store_); + if (cert_store == root_cert_store) { + cert_store = NewRootCertStore(); + SSL_CTX_set_cert_store(sc->ctx_, cert_store); } - X509_STORE_add_cert(sc->ca_store_, ca); + X509_STORE_add_cert(cert_store, ca); SSL_CTX_add_client_CA(sc->ctx_, ca); } ret = true; diff --git a/src/node_crypto.h b/src/node_crypto.h index fd3e2ce895f5cd..31cbb4e64f0120 100644 --- a/src/node_crypto.h +++ b/src/node_crypto.h @@ -76,7 +76,6 @@ class SecureContext : public BaseObject { static void Initialize(Environment* env, v8::Local target); - X509_STORE* ca_store_; SSL_CTX* ctx_; X509* cert_; X509* issuer_; @@ -131,7 +130,6 @@ class SecureContext : public BaseObject { SecureContext(Environment* env, v8::Local wrap) : BaseObject(env, wrap), - ca_store_(nullptr), ctx_(nullptr), cert_(nullptr), issuer_(nullptr) { @@ -140,20 +138,19 @@ class SecureContext : public BaseObject { } void FreeCTXMem() { - if (ctx_) { - env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize); - SSL_CTX_free(ctx_); - if (cert_ != nullptr) - X509_free(cert_); - if (issuer_ != nullptr) - X509_free(issuer_); - ctx_ = nullptr; - ca_store_ = nullptr; - cert_ = nullptr; - issuer_ = nullptr; - } else { - CHECK_EQ(ca_store_, nullptr); + if (!ctx_) { + return; } + + env()->isolate()->AdjustAmountOfExternalAllocatedMemory(-kExternalSize); + SSL_CTX_free(ctx_); + if (cert_ != nullptr) + X509_free(cert_); + if (issuer_ != nullptr) + X509_free(issuer_); + ctx_ = nullptr; + cert_ = nullptr; + issuer_ = nullptr; } }; diff --git a/test/parallel/test-crypto.js b/test/parallel/test-crypto.js index a79a6b247bd2bc..6d814e72e1575b 100644 --- a/test/parallel/test-crypto.js +++ b/test/parallel/test-crypto.js @@ -140,3 +140,7 @@ assert.throws(function() { // Make sure memory isn't released before being returned console.log(crypto.randomBytes(16)); + +assert.throws(function() { + tls.createSecureContext({ crl: 'not a CRL' }); +}, /Failed to parse CRL/); diff --git a/test/parallel/test-tls-addca.js b/test/parallel/test-tls-addca.js new file mode 100644 index 00000000000000..0e9571efdf0abf --- /dev/null +++ b/test/parallel/test-tls-addca.js @@ -0,0 +1,62 @@ +'use strict'; +const common = require('../common'); +const fs = require('fs'); + +if (!common.hasCrypto) { + common.skip('missing crypto'); + return; +} +const tls = require('tls'); + +function filenamePEM(n) { + return require('path').join(common.fixturesDir, 'keys', n + '.pem'); +} + +function loadPEM(n) { + return fs.readFileSync(filenamePEM(n)); +} + +const caCert = loadPEM('ca1-cert'); +const contextWithoutCert = tls.createSecureContext({}); +const contextWithCert = tls.createSecureContext({}); +// Adding a CA certificate to contextWithCert should not also add it to +// contextWithoutCert. This is tested by trying to connect to a server that +// depends on that CA using contextWithoutCert. +contextWithCert.context.addCACert(caCert); + +const serverOptions = { + key: loadPEM('agent1-key'), + cert: loadPEM('agent1-cert'), +}; +const server = tls.createServer(serverOptions, function() {}); + +const clientOptions = { + port: undefined, + ca: [caCert], + servername: 'agent1', + rejectUnauthorized: true, +}; + +function startTest() { + // This client should fail to connect because it doesn't trust the CA + // certificate. + clientOptions.secureContext = contextWithoutCert; + clientOptions.port = server.address().port; + const client = tls.connect(clientOptions, common.fail); + client.on('error', common.mustCall(() => { + client.destroy(); + + // This time it should connect because contextWithCert includes the needed + // CA certificate. + clientOptions.secureContext = contextWithCert; + const client2 = tls.connect(clientOptions, common.mustCall(() => { + client2.destroy(); + server.close(); + })); + client2.on('error', (e) => { + console.log(e); + }); + })); +} + +server.listen(0, startTest); From cfa1b5a9e706ea22c0320260cca63cc99a34ad5f Mon Sep 17 00:00:00 2001 From: Ben Noordhuis Date: Mon, 14 Nov 2016 13:39:40 +0100 Subject: [PATCH 111/169] src: fix memory leak introduced in 34febfbf4 Fix leaking the BIO in the error path. Introduced in commit 34febfbf4 ("crypto: fix handling of root_cert_store"). PR-URL: https://github.com/nodejs/node/pull/9604 Refs: https://github.com/nodejs/node/pull/9409 Reviewed-By: Anna Henningsen Reviewed-By: Colin Ihrig Reviewed-By: Fedor Indutny Reviewed-By: James M Snell Reviewed-By: Jeremiah Senkpiel Reviewed-By: Michael Dawson Reviewed-By: Rod Vagg --- src/node_crypto.cc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index dcb0d38c47d346..3fd71012351583 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -770,9 +770,8 @@ void SecureContext::AddCRL(const FunctionCallbackInfo& args) { PEM_read_bio_X509_CRL(bio, nullptr, CryptoPemCallback, nullptr); if (crl == nullptr) { - return env->ThrowError("Failed to parse CRL"); BIO_free_all(bio); - return; + return env->ThrowError("Failed to parse CRL"); } X509_STORE* cert_store = SSL_CTX_get_cert_store(sc->ctx_); From d532d7497a5620c53a088ae9ce7d1004fb6603e2 Mon Sep 17 00:00:00 2001 From: Trevor Norris Date: Wed, 21 Dec 2016 16:05:37 -0700 Subject: [PATCH 112/169] async_wrap: clear destroy_ids vector After processing all the callbacks in the destroy_ids vector make sure to clear() it otherwise the DestroyIdsCb() won't run again. PR-URL: https://github.com/nodejs/node/pull/10400 Fixes: b49b496 "async_wrap: call destroy() callback in uv_idle_t" Reviewed-By: Ben Noordhuis Reviewed-By: Anna Henningsen --- src/async-wrap.cc | 6 +++++- test/parallel/test-async-wrap-uid.js | 14 +++++++++++++- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/async-wrap.cc b/src/async-wrap.cc index 42463bd22b31f4..a0780566db72d8 100644 --- a/src/async-wrap.cc +++ b/src/async-wrap.cc @@ -199,7 +199,9 @@ void AsyncWrap::DestroyIdsCb(uv_idle_t* handle) { TryCatch try_catch(env->isolate()); - for (auto current_id : *env->destroy_ids_list()) { + std::vector destroy_ids_list; + destroy_ids_list.swap(*env->destroy_ids_list()); + for (auto current_id : destroy_ids_list) { // Want each callback to be cleaned up after itself, instead of cleaning // them all up after the while() loop completes. HandleScope scope(env->isolate()); @@ -212,6 +214,8 @@ void AsyncWrap::DestroyIdsCb(uv_idle_t* handle) { FatalException(env->isolate(), try_catch); } } + + env->destroy_ids_list()->clear(); } diff --git a/test/parallel/test-async-wrap-uid.js b/test/parallel/test-async-wrap-uid.js index 3497c3b0768ddd..19cb01cfa83c7a 100644 --- a/test/parallel/test-async-wrap-uid.js +++ b/test/parallel/test-async-wrap-uid.js @@ -5,8 +5,14 @@ const fs = require('fs'); const assert = require('assert'); const async_wrap = process.binding('async_wrap'); +// Give the event loop time to clear out the final uv_close(). +var si_cntr = 3; +process.on('beforeExit', () => { + if (--si_cntr > 0) setImmediate(() => {}); +}); + const storage = new Map(); -async_wrap.setupHooks({ init, pre, post }); +async_wrap.setupHooks({ init, pre, post, destroy }); async_wrap.enable(); function init(uid) { @@ -14,6 +20,7 @@ function init(uid) { init: true, pre: false, post: false, + destroy: false, }); } @@ -25,6 +32,10 @@ function post(uid) { storage.get(uid).post = true; } +function destroy(uid) { + storage.get(uid).destroy = true; +} + fs.access(__filename, function(err) { assert.ifError(err); }); @@ -46,6 +57,7 @@ process.once('exit', function() { init: true, pre: true, post: true, + destroy: true, }); } }); From 8bccd9ed67e26d77c6f43a62cd5d14d35a6693d0 Mon Sep 17 00:00:00 2001 From: Lance Ball Date: Fri, 2 Dec 2016 17:36:02 -0500 Subject: [PATCH 113/169] debugger: call `this.resume()` after `this.run()` When the debugger has started we need to call `this.resume` otherwise, the prompt won't appear. Fixes: https://github.com/nodejs/node/issues/9854 PR-URL: https://github.com/nodejs/node/pull/10099 Reviewed-By: Colin Ihrig Reviewed-By: Ben Noordhuis Reviewed-By: Rich Trott --- lib/_debugger.js | 2 +- test/parallel/test-debug-prompt.js | 13 +++++++++++++ 2 files changed, 14 insertions(+), 1 deletion(-) create mode 100644 test/parallel/test-debug-prompt.js diff --git a/lib/_debugger.js b/lib/_debugger.js index a87de734fb3ff6..d3bf1f9ffa2dab 100644 --- a/lib/_debugger.js +++ b/lib/_debugger.js @@ -839,7 +839,7 @@ function Interface(stdin, stdout, args) { // Run script automatically this.pause(); - setImmediate(() => { this.run(); }); + setImmediate(() => { this.run(() => this.resume()); }); } diff --git a/test/parallel/test-debug-prompt.js b/test/parallel/test-debug-prompt.js new file mode 100644 index 00000000000000..fdc3b4c27f4d45 --- /dev/null +++ b/test/parallel/test-debug-prompt.js @@ -0,0 +1,13 @@ +'use strict'; + +const assert = require('assert'); +const common = require('../common'); +const spawn = require('child_process').spawn; + +const proc = spawn(process.execPath, ['debug', 'foo']); +proc.stdout.setEncoding('utf8'); + +proc.stdout.once('data', common.mustCall((data) => { + assert.strictEqual(data, 'debug> '); + proc.kill(); +})); From 3ac9e01faaf4b16b63008b6e38243d4d5fa35a66 Mon Sep 17 00:00:00 2001 From: Axel Monroy Date: Tue, 6 Dec 2016 11:04:00 -0700 Subject: [PATCH 114/169] url: add a got host pattern in url.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Add a hostPattern variable for readable purposes PR-URL: https://github.com/nodejs/node/pull/9653 Reviewed-By: James M Snell Reviewed-By: Luigi Pinca Reviewed-By: Michaël Zasso Reviewed-By: Brian White --- lib/url.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/url.js b/lib/url.js index 106fb47f88a3dd..1437443e758d3b 100644 --- a/lib/url.js +++ b/lib/url.js @@ -38,6 +38,7 @@ function Url() { // compiled once on the first module load. const protocolPattern = /^([a-z0-9.+-]+:)/i; const portPattern = /:[0-9]*$/; +const hostPattern = /^\/\/[^@/]+@[^@/]+/; // Special case for a simple path URL const simplePathPattern = /^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/; @@ -200,7 +201,7 @@ Url.prototype.parse = function(url, parseQueryString, slashesDenoteHost) { // user@server is *always* interpreted as a hostname, and url // resolution will treat //foo/bar as host=foo,path=bar because that's // how the browser resolves relative URLs. - if (slashesDenoteHost || proto || /^\/\/[^@/]+@[^@/]+/.test(rest)) { + if (slashesDenoteHost || proto || hostPattern.test(rest)) { var slashes = rest.charCodeAt(0) === 47/*/*/ && rest.charCodeAt(1) === 47/*/*/; if (slashes && !(proto && hostlessProtocol[proto])) { From 90bd36bd151a2f822d98c8bea881826e6a3b6df6 Mon Sep 17 00:00:00 2001 From: Eugene Ostroukhov Date: Fri, 2 Dec 2016 11:02:44 -0800 Subject: [PATCH 115/169] inspector: check if connected before waiting Fixes: https://github.com/nodejs/node/issues/10093 PR-URL: https://github.com/nodejs/node/pull/10094 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis --- src/inspector_agent.cc | 10 ++++++---- test/inspector/test-inspector-stops-no-file.js | 15 +++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) create mode 100644 test/inspector/test-inspector-stops-no-file.js diff --git a/src/inspector_agent.cc b/src/inspector_agent.cc index 79bd71e24d0db2..60c11ea636cf0f 100644 --- a/src/inspector_agent.cc +++ b/src/inspector_agent.cc @@ -515,10 +515,12 @@ bool AgentImpl::IsStarted() { } void AgentImpl::WaitForDisconnect() { - shutting_down_ = true; - fprintf(stderr, "Waiting for the debugger to disconnect...\n"); - fflush(stderr); - inspector_->runMessageLoopOnPause(0); + if (state_ == State::kConnected) { + shutting_down_ = true; + fprintf(stderr, "Waiting for the debugger to disconnect...\n"); + fflush(stderr); + inspector_->runMessageLoopOnPause(0); + } } #define READONLY_PROPERTY(obj, str, var) \ diff --git a/test/inspector/test-inspector-stops-no-file.js b/test/inspector/test-inspector-stops-no-file.js new file mode 100644 index 00000000000000..d0f3a753464096 --- /dev/null +++ b/test/inspector/test-inspector-stops-no-file.js @@ -0,0 +1,15 @@ +'use strict'; +require('../common'); +const spawn = require('child_process').spawn; + +const child = spawn(process.execPath, + [ '--inspect', 'no-such-script.js' ], + { 'stdio': 'inherit' }); + +function signalHandler(value) { + child.kill(); + process.exit(1); +} + +process.on('SIGINT', signalHandler); +process.on('SIGTERM', signalHandler); From 25d6eed6540c87615156f396d3b56c4588eca4e1 Mon Sep 17 00:00:00 2001 From: Gregory Date: Thu, 1 Dec 2016 01:52:23 -0500 Subject: [PATCH 116/169] test: stream readableState readingMore state PR-URL: https://github.com/nodejs/node/pull/9868 Refs: https://github.com/nodejs/node/issues/8685 Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- ...est-stream-readable-reading-readingMore.js | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 test/parallel/test-stream-readable-reading-readingMore.js diff --git a/test/parallel/test-stream-readable-reading-readingMore.js b/test/parallel/test-stream-readable-reading-readingMore.js new file mode 100644 index 00000000000000..bee3a1c82a8678 --- /dev/null +++ b/test/parallel/test-stream-readable-reading-readingMore.js @@ -0,0 +1,65 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const Readable = require('stream').Readable; + +const readable = new Readable({ + read(size) {} +}); + +const state = readable._readableState; + +// Starting off with false initially. +assert.strictEqual(state.reading, false); +assert.strictEqual(state.readingMore, false); + +readable.on('data', common.mustCall((data) => { + // while in a flowing state, should try to read more. + if (state.flowing) + assert.strictEqual(state.readingMore, true); + + // reading as long as we've not ended + assert.strictEqual(state.reading, !state.ended); +}, 2)); + +function onStreamEnd() { + // End of stream; state.reading is false + // And so should be readingMore. + assert.strictEqual(state.readingMore, false); + assert.strictEqual(state.reading, false); +} + +readable.on('readable', common.mustCall(() => { + // 'readable' always gets called before 'end' + // since 'end' hasn't been emitted, more data could be incoming + assert.strictEqual(state.readingMore, true); + + // if the stream has ended, we shouldn't be reading + assert.strictEqual(state.ended, !state.reading); + + if (readable.read() === null) // reached end of stream + process.nextTick(common.mustCall(onStreamEnd, 1)); +}, 2)); + +readable.on('end', common.mustCall(onStreamEnd)); + +readable.push('pushed'); + +// stop emitting 'data' events +readable.pause(); + +// read() should only be called while operating in paused mode +readable.read(6); + +// reading +assert.strictEqual(state.reading, true); +assert.strictEqual(state.readingMore, true); + +// resume emitting 'data' events +readable.resume(); + +// add chunk to front +readable.unshift('unshifted'); + +// end +readable.push(null); From 99ba710bcadbdee6549d376436024f6a61f68d96 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 6 Dec 2016 18:23:13 +0100 Subject: [PATCH 117/169] test: fail for missing output files Instead of ignoring missing `.out` files for message/pseudo-tty tests, raise an error to indicate that something is not quite right. Ref: https://github.com/nodejs/node/pull/10037 PR-URL: https://github.com/nodejs/node/pull/10150 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Sakthipriyan Vairamani --- test/message/testcfg.py | 3 +-- test/pseudo-tty/testcfg.py | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/test/message/testcfg.py b/test/message/testcfg.py index 7183ab333d8274..3c668459079f0a 100644 --- a/test/message/testcfg.py +++ b/test/message/testcfg.py @@ -127,8 +127,7 @@ def ListTests(self, current_path, path, arch, mode): file_path = file_prefix + ".js" output_path = file_prefix + ".out" if not exists(output_path): - print "Could not find %s" % output_path - continue + raise Exception("Could not find %s" % output_path) result.append(MessageTestCase(test, file_path, output_path, arch, mode, self.context, self)) return result diff --git a/test/pseudo-tty/testcfg.py b/test/pseudo-tty/testcfg.py index 96b30253498857..40396db247e279 100644 --- a/test/pseudo-tty/testcfg.py +++ b/test/pseudo-tty/testcfg.py @@ -142,8 +142,7 @@ def ListTests(self, current_path, path, arch, mode): file_path = file_prefix + ".js" output_path = file_prefix + ".out" if not exists(output_path): - print "Could not find %s" % output_path - continue + raise Exception("Could not find %s" % output_path) result.append(TTYTestCase(test, file_path, output_path, arch, mode, self.context, self)) return result From 03f0d2ac21b169a7dfcd16b3dcc51f173e16ddf5 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 6 Dec 2016 02:19:57 +0100 Subject: [PATCH 118/169] buffer: handle UCS2 `.fill()` properly on BE There was a byte-order mismatch for `buffer#fill` on big-endian platforms. Weirdly, the tests seemed to expect that wrong behaviour. PR-URL: https://github.com/nodejs/node/pull/9837 Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis Reviewed-By: Trevor Norris --- src/node_buffer.cc | 3 +++ test/parallel/test-buffer-fill.js | 23 ++++++++++------------- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/node_buffer.cc b/src/node_buffer.cc index d2bf5ab1046f56..605ba3ddf76cf4 100644 --- a/src/node_buffer.cc +++ b/src/node_buffer.cc @@ -618,6 +618,9 @@ void Fill(const FunctionCallbackInfo& args) { } else if (enc == UCS2) { node::TwoByteValue str(env->isolate(), args[1]); + if (IsBigEndian()) + SwapBytes16(reinterpret_cast(&str[0]), str_length); + memcpy(ts_obj_data + start, *str, MIN(str_length, fill_length)); } else { diff --git a/test/parallel/test-buffer-fill.js b/test/parallel/test-buffer-fill.js index 4272d686940cc7..68b8bbd69c4566 100644 --- a/test/parallel/test-buffer-fill.js +++ b/test/parallel/test-buffer-fill.js @@ -2,13 +2,11 @@ require('../common'); const assert = require('assert'); -const os = require('os'); const SIZE = 28; const buf1 = Buffer.allocUnsafe(SIZE); const buf2 = Buffer.allocUnsafe(SIZE); - // Default encoding testBufs('abc'); testBufs('\u0222aa'); @@ -112,8 +110,7 @@ testBufs('\u0222aa', 8, 1, 'ucs2'); testBufs('a\u0234b\u0235c\u0236', 4, -1, 'ucs2'); testBufs('a\u0234b\u0235c\u0236', 4, 1, 'ucs2'); testBufs('a\u0234b\u0235c\u0236', 12, 1, 'ucs2'); -assert.strictEqual(Buffer.allocUnsafe(1).fill('\u0222', 'ucs2')[0], - os.endianness() === 'LE' ? 0x22 : 0x02); +assert.strictEqual(Buffer.allocUnsafe(1).fill('\u0222', 'ucs2')[0], 0x22); // HEX @@ -259,15 +256,6 @@ function writeToFill(string, offset, end, encoding) { } } while (offset < buf2.length); - // Correction for UCS2 operations. - if (os.endianness() === 'BE' && encoding === 'ucs2') { - for (var i = 0; i < buf2.length; i += 2) { - var tmp = buf2[i]; - buf2[i] = buf2[i + 1]; - buf2[i + 1] = tmp; - } - } - return buf2; } @@ -406,3 +394,12 @@ assert.throws(() => { }); buf.fill(''); }, /^RangeError: out of range index$/); + + +assert.deepStrictEqual( + Buffer.allocUnsafeSlow(16).fill('ab', 'utf16le'), + Buffer.from('61006200610062006100620061006200', 'hex')); + +assert.deepStrictEqual( + Buffer.allocUnsafeSlow(15).fill('ab', 'utf16le'), + Buffer.from('610062006100620061006200610062', 'hex')); From 40c7ec62e01f7ebbeafbe5d94af6462afacbaab0 Mon Sep 17 00:00:00 2001 From: Anna Henningsen Date: Tue, 29 Nov 2016 05:03:24 -0600 Subject: [PATCH 119/169] buffer: fix single-character string filling Fix the fast path for `buffer.fill()` with a single-character string. The fast path only works for strings that are equivalent to a single-byte buffer, but that condition was not checked properly for the `utf8` or `utf16le` encodings and is always true for the `latin1` encoding. This change fixes these problems. Fixes: https://github.com/nodejs/node/issues/9836 PR-URL: https://github.com/nodejs/node/pull/9837 Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis Reviewed-By: Trevor Norris --- lib/buffer.js | 26 +++++++++++++++----------- test/parallel/test-buffer-fill.js | 28 +++++++++++++++++++++++++++- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/lib/buffer.js b/lib/buffer.js index 9ebeb66a268981..b1c0fc702ec1d5 100644 --- a/lib/buffer.js +++ b/lib/buffer.js @@ -664,23 +664,27 @@ Buffer.prototype.fill = function fill(val, start, end, encoding) { encoding = end; end = this.length; } - if (val.length === 1) { - var code = val.charCodeAt(0); - if (code < 256) - val = code; - } - if (val.length === 0) { - // Previously, if val === '', the Buffer would not fill, - // which is rather surprising. - val = 0; - } + if (encoding !== undefined && typeof encoding !== 'string') { throw new TypeError('encoding must be a string'); } - if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + var normalizedEncoding = internalUtil.normalizeEncoding(encoding); + if (normalizedEncoding === undefined) { throw new TypeError('Unknown encoding: ' + encoding); } + if (val.length === 0) { + // Previously, if val === '', the Buffer would not fill, + // which is rather surprising. + val = 0; + } else if (val.length === 1) { + var code = val.charCodeAt(0); + if ((normalizedEncoding === 'utf8' && code < 128) || + normalizedEncoding === 'latin1') { + // Fast path: If `val` fits into a single byte, use that numeric value. + val = code; + } + } } else if (typeof val === 'number') { val = val & 255; } diff --git a/test/parallel/test-buffer-fill.js b/test/parallel/test-buffer-fill.js index 68b8bbd69c4566..eecb14abb06001 100644 --- a/test/parallel/test-buffer-fill.js +++ b/test/parallel/test-buffer-fill.js @@ -395,7 +395,6 @@ assert.throws(() => { buf.fill(''); }, /^RangeError: out of range index$/); - assert.deepStrictEqual( Buffer.allocUnsafeSlow(16).fill('ab', 'utf16le'), Buffer.from('61006200610062006100620061006200', 'hex')); @@ -403,3 +402,30 @@ assert.deepStrictEqual( assert.deepStrictEqual( Buffer.allocUnsafeSlow(15).fill('ab', 'utf16le'), Buffer.from('610062006100620061006200610062', 'hex')); + +assert.deepStrictEqual( + Buffer.allocUnsafeSlow(16).fill('ab', 'utf16le'), + Buffer.from('61006200610062006100620061006200', 'hex')); +assert.deepStrictEqual( + Buffer.allocUnsafeSlow(16).fill('a', 'utf16le'), + Buffer.from('61006100610061006100610061006100', 'hex')); + +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('a', 'utf16le').toString('utf16le'), + 'a'.repeat(8)); +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('a', 'latin1').toString('latin1'), + 'a'.repeat(16)); +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('a', 'utf8').toString('utf8'), + 'a'.repeat(16)); + +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('Љ', 'utf16le').toString('utf16le'), + 'Љ'.repeat(8)); +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('Љ', 'latin1').toString('latin1'), + '\t'.repeat(16)); +assert.strictEqual( + Buffer.allocUnsafeSlow(16).fill('Љ', 'utf8').toString('utf8'), + 'Љ'.repeat(8)); From 4b5587c5db756ad274c400e798671de0a88bd245 Mon Sep 17 00:00:00 2001 From: Siddhartha Sahai Date: Sat, 10 Dec 2016 02:05:10 +0530 Subject: [PATCH 120/169] test: refactor test-domain.js apply setTimeout duration, add const, remove unused var PR-URL: https://github.com/nodejs/node/pull/10207 Reviewed-By: Rich Trott Reviewed-By: Santiago Gimeno --- test/parallel/test-domain.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/test/parallel/test-domain.js b/test/parallel/test-domain.js index 69521108f6e47b..73ab3b96168930 100644 --- a/test/parallel/test-domain.js +++ b/test/parallel/test-domain.js @@ -2,10 +2,10 @@ // Simple tests of most basic domain functionality. require('../common'); -var assert = require('assert'); -var domain = require('domain'); -var events = require('events'); -var fs = require('fs'); +const assert = require('assert'); +const domain = require('domain'); +const events = require('events'); +const fs = require('fs'); var caught = 0; var expectCaught = 0; @@ -137,8 +137,8 @@ d.run(function() { // pretty common error. console.log(stat.isDirectory()); }); - }); - }); + }, 1); + }, 1); }); }); expectCaught++; @@ -148,7 +148,7 @@ expectCaught++; d.run(function() { setTimeout(function() { throw new Error('implicit timer'); - }); + }, 1); }); expectCaught++; @@ -162,7 +162,7 @@ expectCaught++; // get rid of the `if (er) return cb(er)` malarky, by intercepting // the cb functions to the domain, and using the intercepted function // as a callback instead. -function fn(er) { +function fn() { throw new Error('This function should never be called!'); } From c5ef631fdcf6b5b9bb114f3ebc13c4ea4d18583c Mon Sep 17 00:00:00 2001 From: Andy Chen Date: Fri, 9 Dec 2016 00:03:13 -0800 Subject: [PATCH 121/169] test: update test-domain-uncaught-exception.js file: test/parallel/test-domain-uncaught-exception.js 1. There are three setTimeout() in the file and they do not specify a duration (the second argument), so I change them to setImmediate() instead. 2. There are four callbacks that take an argument called `err` but that argument is never used, so I removed them. PR-URL: https://github.com/nodejs/node/pull/10193 Reviewed-By: Sam Roberts Reviewed-By: Anna Henningsen Reviewed-By: Luigi Pinca Reviewed-By: Michael Dawson --- test/parallel/test-domain-uncaught-exception.js | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/test/parallel/test-domain-uncaught-exception.js b/test/parallel/test-domain-uncaught-exception.js index 35632dbf537202..58df4ac59a7818 100644 --- a/test/parallel/test-domain-uncaught-exception.js +++ b/test/parallel/test-domain-uncaught-exception.js @@ -25,7 +25,7 @@ function test1() { d.run(function() { setTimeout(function onTimeout() { throw new Error('boom!'); - }); + }, 1); }); } @@ -59,7 +59,7 @@ function test3() { const d3 = domain.create(); const d4 = domain.create(); - d3.on('error', function onErrorInD3Domain(err) { + d3.on('error', function onErrorInD3Domain() { process.send('errorHandledByDomain'); }); @@ -88,7 +88,7 @@ function test4() { const d5 = domain.create(); const d6 = domain.create(); - d5.on('error', function onErrorInD2Domain(err) { + d5.on('error', function onErrorInD2Domain() { process.send('errorHandledByDomain'); }); @@ -96,7 +96,7 @@ function test4() { d6.run(function() { setTimeout(function onTimeout() { throw new Error('boom!'); - }); + }, 1); }); }); } @@ -115,7 +115,7 @@ function test5() { const d7 = domain.create(); const d8 = domain.create(); - d8.on('error', function onErrorInD3Domain(err) { + d8.on('error', function onErrorInD3Domain() { process.send('errorHandledByDomain'); }); @@ -139,7 +139,7 @@ function test6() { const d9 = domain.create(); const d10 = domain.create(); - d10.on('error', function onErrorInD2Domain(err) { + d10.on('error', function onErrorInD2Domain() { process.send('errorHandledByDomain'); }); @@ -147,7 +147,7 @@ function test6() { d10.run(function() { setTimeout(function onTimeout() { throw new Error('boom!'); - }); + }, 1); }); }); } From 8d2f722541960eab74c0a4621dd7085ff7699aeb Mon Sep 17 00:00:00 2001 From: weyj4 Date: Thu, 15 Dec 2016 13:26:15 -0500 Subject: [PATCH 122/169] test: clean up domain-no-error-handler test Added duration to setTimeout and removed extraneous callback args, as per Rich Trott's instructions PR-URL: https://github.com/nodejs/node/pull/10291 Reviewed-By: Italo A. Casas Reviewed-By: Rich Trott Reviewed-By: Santiago Gimeno --- .../test-domain-no-error-handler-abort-on-uncaught.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test/parallel/test-domain-no-error-handler-abort-on-uncaught.js b/test/parallel/test-domain-no-error-handler-abort-on-uncaught.js index 76ca3faad702b6..833e7374d7f2ab 100644 --- a/test/parallel/test-domain-no-error-handler-abort-on-uncaught.js +++ b/test/parallel/test-domain-no-error-handler-abort-on-uncaught.js @@ -36,7 +36,7 @@ const tests = [ d.run(function() { setTimeout(function() { throw new Error('boom!'); - }); + }, 1); }); }, @@ -65,7 +65,7 @@ const tests = [ d.run(function() { var fs = require('fs'); - fs.exists('/non/existing/file', function onExists(exists) { + fs.exists('/non/existing/file', function onExists() { throw new Error('boom!'); }); }); @@ -82,7 +82,7 @@ const tests = [ d2.run(function() { setTimeout(function() { throw new Error('boom!'); - }); + }, 1); }); }); }, @@ -129,7 +129,7 @@ const tests = [ d.run(function() { d2.run(function() { var fs = require('fs'); - fs.exists('/non/existing/file', function onExists(exists) { + fs.exists('/non/existing/file', function onExists() { throw new Error('boom!'); }); }); From 7897e7685fdda0a9220f24b0803686b8beb96b98 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Thu, 1 Dec 2016 15:22:25 -0800 Subject: [PATCH 123/169] src: fix string format mistake for 32 bit node MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit warning: format ‘%lx’ expects argument of type ‘long unsigned int’, but argument 3 has type ‘unsigned int’ [-Wformat=] BIO_printf(bio, "0x%lx", exponent_word); PR-URL: https://github.com/nodejs/node/pull/10082 Reviewed-By: Anna Henningsen Reviewed-By: Ben Noordhuis --- src/node_crypto.cc | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/src/node_crypto.cc b/src/node_crypto.cc index 3fd71012351583..70b8436067bde5 100644 --- a/src/node_crypto.cc +++ b/src/node_crypto.cc @@ -1489,9 +1489,14 @@ static Local X509ToObject(Environment* env, X509* cert) { String::kNormalString, mem->length)); (void) BIO_reset(bio); - BN_ULONG exponent_word = BN_get_word(rsa->e); - BIO_printf(bio, "0x%lx", exponent_word); - + uint64_t exponent_word = static_cast(BN_get_word(rsa->e)); + uint32_t lo = static_cast(exponent_word); + uint32_t hi = static_cast(exponent_word >> 32); + if (hi == 0) { + BIO_printf(bio, "0x%x", lo); + } else { + BIO_printf(bio, "0x%x%08x", hi, lo); + } BIO_get_mem_ptr(bio, &mem); info->Set(env->exponent_string(), String::NewFromUtf8(env->isolate(), mem->data, From 9a8416258db8c873e52ba078f733a92796fa90ab Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Tue, 13 Dec 2016 22:43:56 +0800 Subject: [PATCH 124/169] stream, test: test _readableState.emittedReadable Part of #8683, increase coverage of the internal state machine of streams. PR-URL: https://github.com/nodejs/node/pull/10249 See: https://github.com/nodejs/node/issues/8683 See: https://github.com/nodejs/node/issues/10230 Reviewed-By: Matteo Collina --- .../test-stream-readable-emittedReadable.js | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 test/parallel/test-stream-readable-emittedReadable.js diff --git a/test/parallel/test-stream-readable-emittedReadable.js b/test/parallel/test-stream-readable-emittedReadable.js new file mode 100644 index 00000000000000..65b6b5b15a5895 --- /dev/null +++ b/test/parallel/test-stream-readable-emittedReadable.js @@ -0,0 +1,70 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const Readable = require('stream').Readable; + +const readable = new Readable({ + read: () => {} +}); + +// Initialized to false. +assert.strictEqual(readable._readableState.emittedReadable, false); + +readable.on('readable', common.mustCall(() => { + // emittedReadable should be true when the readable event is emitted + assert.strictEqual(readable._readableState.emittedReadable, true); + readable.read(); + // emittedReadable is reset to false during read() + assert.strictEqual(readable._readableState.emittedReadable, false); +}, 4)); + +// When the first readable listener is just attached, +// emittedReadable should be false +assert.strictEqual(readable._readableState.emittedReadable, false); + +// Each one of these should trigger a readable event. +process.nextTick(common.mustCall(() => { + readable.push('foo'); +})); +process.nextTick(common.mustCall(() => { + readable.push('bar'); +})); +process.nextTick(common.mustCall(() => { + readable.push('quo'); +})); +process.nextTick(common.mustCall(() => { + readable.push(null); +})); + +const noRead = new Readable({ + read: () => {} +}); + +noRead.on('readable', common.mustCall(() => { + // emittedReadable should be true when the readable event is emitted + assert.strictEqual(noRead._readableState.emittedReadable, true); + noRead.read(0); + // emittedReadable is not reset during read(0) + assert.strictEqual(noRead._readableState.emittedReadable, true); +})); + +noRead.push('foo'); +noRead.push(null); + +const flowing = new Readable({ + read: () => {} +}); + +flowing.on('data', common.mustCall(() => { + // When in flowing mode, emittedReadable is always false. + assert.strictEqual(flowing._readableState.emittedReadable, false); + flowing.read(); + assert.strictEqual(flowing._readableState.emittedReadable, false); +}, 3)); + +flowing.push('foooo'); +flowing.push('bar'); +flowing.push('quo'); +process.nextTick(common.mustCall(() => { + flowing.push(null); +})); From a24a35f668a6afda2defe663b015d387289737d4 Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Tue, 13 Dec 2016 03:37:07 +0800 Subject: [PATCH 125/169] test: stream readable needReadable state PR-URL: https://github.com/nodejs/node/pull/10241 Ref: https://github.com/nodejs/node/issues/8683 Reviewed-By: Matteo Collina Reviewed-By: Italo A. Casas --- .../test-stream-readable-needReadable.js | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 test/parallel/test-stream-readable-needReadable.js diff --git a/test/parallel/test-stream-readable-needReadable.js b/test/parallel/test-stream-readable-needReadable.js new file mode 100644 index 00000000000000..48229edd202333 --- /dev/null +++ b/test/parallel/test-stream-readable-needReadable.js @@ -0,0 +1,96 @@ +'use strict'; +const common = require('../common'); +const assert = require('assert'); +const Readable = require('stream').Readable; + +const readable = new Readable({ + read: () => {} +}); + +// Initialized to false. +assert.strictEqual(readable._readableState.needReadable, false); + +readable.on('readable', common.mustCall(() => { + // When the readable event fires, needReadable is reset. + assert.strictEqual(readable._readableState.needReadable, false); + readable.read(); +})); + +// If a readable listener is attached, then a readable event is needed. +assert.strictEqual(readable._readableState.needReadable, true); + +readable.push('foo'); +readable.push(null); + +readable.on('end', common.mustCall(() => { + // No need to emit readable anymore when the stream ends. + assert.strictEqual(readable._readableState.needReadable, false); +})); + +const asyncReadable = new Readable({ + read: () => {} +}); + +asyncReadable.on('readable', common.mustCall(() => { + if (asyncReadable.read() !== null) { + // After each read(), the buffer is empty. + // If the stream doesn't end now, + // then we need to notify the reader on future changes. + assert.strictEqual(asyncReadable._readableState.needReadable, true); + } +}, 3)); + +process.nextTick(common.mustCall(() => { + asyncReadable.push('foooo'); +})); +process.nextTick(common.mustCall(() => { + asyncReadable.push('bar'); +})); +process.nextTick(common.mustCall(() => { + asyncReadable.push(null); +})); + +const flowing = new Readable({ + read: () => {} +}); + +// Notice this must be above the on('data') call. +flowing.push('foooo'); +flowing.push('bar'); +flowing.push('quo'); +process.nextTick(common.mustCall(() => { + flowing.push(null); +})); + +// When the buffer already has enough data, and the stream is +// in flowing mode, there is no need for the readable event. +flowing.on('data', common.mustCall(function(data) { + assert.strictEqual(flowing._readableState.needReadable, false); +}, 3)); + +const slowProducer = new Readable({ + read: () => {} +}); + +slowProducer.on('readable', common.mustCall(() => { + if (slowProducer.read(8) === null) { + // The buffer doesn't have enough data, and the stream is not ened, + // we need to notify the reader when data arrives. + assert.strictEqual(slowProducer._readableState.needReadable, true); + } else { + assert.strictEqual(slowProducer._readableState.needReadable, false); + } +}, 4)); + +process.nextTick(common.mustCall(() => { + slowProducer.push('foo'); +})); +process.nextTick(common.mustCall(() => { + slowProducer.push('foo'); +})); +process.nextTick(common.mustCall(() => { + slowProducer.push('foo'); +})); +process.nextTick(common.mustCall(() => { + slowProducer.push(null); +})); From c604016cb408a6fcb8d021c873504de9c8148ba3 Mon Sep 17 00:00:00 2001 From: AnnaMag Date: Wed, 14 Dec 2016 16:55:40 +0100 Subject: [PATCH 126/169] test: add known_issues test for #6287 Deleting property in the vm context has no effect as reported in https://github.com/nodejs/node/issues/6287 The test is moved to the known_issues and will be fixed with the 5.5 V8 API changes. PR-URL: https://github.com/nodejs/node/pull/10272 Reviewed-By: Jeremiah Senkpiel Reviewed-By: Colin Ihrig --- test/known_issues/test-vm-deleting-property.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 test/known_issues/test-vm-deleting-property.js diff --git a/test/known_issues/test-vm-deleting-property.js b/test/known_issues/test-vm-deleting-property.js new file mode 100644 index 00000000000000..cda3371a33bf16 --- /dev/null +++ b/test/known_issues/test-vm-deleting-property.js @@ -0,0 +1,15 @@ +'use strict'; +// Refs: https://github.com/nodejs/node/issues/6287 + +require('../common'); +const assert = require('assert'); +const vm = require('vm'); + +const context = vm.createContext(); +const res = vm.runInContext(` + this.x = 'prop'; + delete this.x; + Object.getOwnPropertyDescriptor(this, 'x'); +`, context); + +assert.strictEqual(res.value, undefined); From e6c74b37b3529624bef296b48526c4004886da59 Mon Sep 17 00:00:00 2001 From: Francis Gulotta Date: Tue, 13 Dec 2016 15:45:14 -0500 Subject: [PATCH 127/169] fs: remove needless assignment of null This line `pool = null;` isn't needed and has been around since the first iteration of streams. I can't find a good reason for it to exist, it's not more readable, nor does it seem to trick the compiler into any optimizations. PR-URL: https://github.com/nodejs/node/pull/10260 Reviewed-By: Anna Henningsen Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- lib/fs.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/fs.js b/lib/fs.js index c3c6f0536e3ef3..9140393ba68c3a 100644 --- a/lib/fs.js +++ b/lib/fs.js @@ -1961,7 +1961,6 @@ ReadStream.prototype._read = function(n) { if (!pool || pool.length - pool.used < kMinPoolSpace) { // discard the old pool. - pool = null; allocNewPool(this._readableState.highWaterMark); } From 959860f55ce930961a257b7ca79563a70778c5a5 Mon Sep 17 00:00:00 2001 From: "Italo A. Casas" Date: Thu, 15 Dec 2016 20:17:38 -0500 Subject: [PATCH 128/169] test: stream readable resumeScheduled state PR-URL: https://github.com/nodejs/node/pull/10299 Ref: https://github.com/nodejs/node/issues/8683 Reviewed-By: Anna Henningsen Reviewed-By: Matteo Collina Reviewed-By: Colin Ihrig --- .../test-stream-readable-resumeScheduled.js | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 test/parallel/test-stream-readable-resumeScheduled.js diff --git a/test/parallel/test-stream-readable-resumeScheduled.js b/test/parallel/test-stream-readable-resumeScheduled.js new file mode 100644 index 00000000000000..6d1bc913388f46 --- /dev/null +++ b/test/parallel/test-stream-readable-resumeScheduled.js @@ -0,0 +1,65 @@ +'use strict'; +const common = require('../common'); + +// Testing Readable Stream resumeScheduled state + +const assert = require('assert'); +const { Readable, Writable } = require('stream'); + +{ + // pipe() test case + const r = new Readable({ read() {} }); + const w = new Writable(); + + // resumeScheduled should start = `false`. + assert.strictEqual(r._readableState.resumeScheduled, false); + + // calling pipe() should change the state value = true. + r.pipe(w); + assert.strictEqual(r._readableState.resumeScheduled, true); + + process.nextTick(common.mustCall(() => { + assert.strictEqual(r._readableState.resumeScheduled, false); + })); +} + +{ + // 'data' listener test case + const r = new Readable({ read() {} }); + + // resumeScheduled should start = `false`. + assert.strictEqual(r._readableState.resumeScheduled, false); + + r.push(Buffer.from([1, 2, 3])); + + // adding 'data' listener should change the state value + r.on('data', common.mustCall(() => { + assert.strictEqual(r._readableState.resumeScheduled, false); + })); + assert.strictEqual(r._readableState.resumeScheduled, true); + + process.nextTick(common.mustCall(() => { + assert.strictEqual(r._readableState.resumeScheduled, false); + })); +} + +{ + // resume() test case + const r = new Readable({ read() {} }); + + // resumeScheduled should start = `false`. + assert.strictEqual(r._readableState.resumeScheduled, false); + + // Calling resume() should change the state value. + r.resume(); + assert.strictEqual(r._readableState.resumeScheduled, true); + + r.on('resume', common.mustCall(() => { + // The state value should be `false` again + assert.strictEqual(r._readableState.resumeScheduled, false); + })); + + process.nextTick(common.mustCall(() => { + assert.strictEqual(r._readableState.resumeScheduled, false); + })); +} From d37443ca8dfcc69d6252176de8973b94a7b89f06 Mon Sep 17 00:00:00 2001 From: AnnaMag Date: Sat, 17 Dec 2016 17:05:02 +0100 Subject: [PATCH 129/169] test: add known_issues test for #5350 PR-URL: https://github.com/nodejs/node/pull/10319 Reviewed-By: Colin Ihrig Reviewed-By: Jeremiah Senkpiel Reviewed-By: Franziska Hinkelmann --- .../test-vm-inherited_properties.js | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 test/known_issues/test-vm-inherited_properties.js diff --git a/test/known_issues/test-vm-inherited_properties.js b/test/known_issues/test-vm-inherited_properties.js new file mode 100644 index 00000000000000..f90cf3568ed9c5 --- /dev/null +++ b/test/known_issues/test-vm-inherited_properties.js @@ -0,0 +1,20 @@ +'use strict'; +// Ref: https://github.com/nodejs/node/issues/5350 + +require('../common'); +const vm = require('vm'); +const assert = require('assert'); + +const base = { + propBase: 1 +}; + +const sandbox = Object.create(base, { + propSandbox: {value: 3} +}); + +const context = vm.createContext(sandbox); + +const result = vm.runInContext('this.hasOwnProperty("propBase");', context); + +assert.strictEqual(result, false); From f7c0eb8ba6af6b9d70a274a3d075432097ffa68b Mon Sep 17 00:00:00 2001 From: Joyee Cheung Date: Sat, 10 Dec 2016 03:11:19 +0800 Subject: [PATCH 130/169] doc: clarify the review and landing process Adds/mentions: - Link to glossary - Commit squashing and CI run - 48/72 hour wait and PR review feature - Extra notes section - "Landed in " comment PR-URL: https://github.com/nodejs/node/pull/10202 Ref: https://github.com/nodejs/node/pull/10151 Reviewed-By: Anna Henningsen Reviewed-By: Evan Lucas Reviewed-By: Gibson Fahnestock --- CONTRIBUTING.md | 83 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 75 insertions(+), 8 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eb00977e92104f..6d419aa4954fde 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -248,18 +248,85 @@ If in doubt, you can always ask for guidance in the Pull Request or on [IRC in the #node-dev channel](https://webchat.freenode.net?channels=node-dev&uio=d4). Feel free to post a comment in the Pull Request to ping reviewers if you are -awaiting an answer on something. +awaiting an answer on something. If you encounter words or acronyms that +seem unfamiliar, check out this +[glossary](https://sites.google.com/a/chromium.org/dev/glossary). +Note that multiple commits often get squashed when they are landed (see the +notes about [commit squashing](#commit-squashing)). ### Step 8: Landing -Once your Pull Request has been reviewed and approved by at least one Node.js -Collaborators (often by saying LGTM, or Looks Good To Me), and as long as -there is consensus (no objections from a Collaborator), a -Collaborator can merge the Pull Request . GitHub often shows the Pull Request as - `Closed` at this point, but don't worry. If you look at the branch you raised - your Pull Request against (probably `master`), you should see a commit with - your name on it. Congratulations and thanks for your contribution! +In order to get landed, a Pull Request needs to be reviewed and +[approved](#getting-approvals-for-your-pull-request) by +at least one Node.js Collaborator and pass a +[CI (Continuous Integration) test run](#ci-testing). +After that, as long as there are no objections +from a Collaborator, the Pull Request can be merged. If you find your +Pull Request waiting longer than you expect, see the +[notes about the waiting time](#waiting-until-the-pull-request-gets-landed). + +When a collaborator lands your Pull Request, they will post +a comment to the Pull Request page mentioning the commit(s) it +landed as. GitHub often shows the Pull Request as `Closed` at this +point, but don't worry. If you look at the branch you raised your +Pull Request against (probably `master`), you should see a commit with +your name on it. Congratulations and thanks for your contribution! + +## Additional Notes + +### Commit Squashing + +When the commits in your Pull Request get landed, they will be squashed +into one commit per logical change, with metadata added to the commit +message (including links to the Pull Request, links to relevant issues, +and the names of the reviewers). The commit history of your Pull Request, +however, will stay intact on the Pull Request page. + +For the size of "one logical change", +[0b5191f](https://github.com/nodejs/node/commit/0b5191f15d0f311c804d542b67e2e922d98834f8) +can be a good example. It touches the implementation, the documentation, +and the tests, but is still one logical change. In general, the tests should +always pass when each individual commit lands on the master branch. + +### Getting Approvals for Your Pull Request + +A Pull Request is approved either by saying LGTM, which stands for +"Looks Good To Me", or by using GitHub's Approve button. +GitHub's Pull Request review feature can be used during the process. +For more information, check out +[the video tutorial](https://www.youtube.com/watch?v=HW0RPaJqm4g) +or [the official documentation](https://help.github.com/articles/reviewing-changes-in-pull-requests/). + +After you push new changes to your branch, you need to get +approval for these new changes again, even if GitHub shows "Approved" +because the reviewers have hit the buttons before. + +### CI Testing + +Every Pull Request needs to be tested +to make sure that it works on the platforms that Node.js +supports. This is done by running the code through the CI system. + +Only a Collaborator can request a CI run. Usually one of them will do it +for you as approvals for the Pull Request come in. +If not, you can ask a Collaborator to request a CI run. + +### Waiting Until the Pull Request Gets Landed + +A Pull Request needs to stay open for at least 48 hours (72 hours on a +weekend) from when it is submitted, even after it gets approved and +passes the CI. This is to make sure that everyone has a chance to +weigh in. If the changes are trivial, collaborators may decide it +doesn't need to wait. A Pull Request may well take longer to be +merged in. All these precautions are important because Node.js is +widely used, so don't be discouraged! + +### Check Out the Collaborator's Guide + +If you want to know more about the code review and the landing process, +you can take a look at the +[collaborator's guide](https://github.com/nodejs/node/blob/master/COLLABORATOR_GUIDE.md). ## Developer's Certificate of Origin 1.1 From 9eaf2e9517af9ee3fa09c670c96e0f9ffa08282e Mon Sep 17 00:00:00 2001 From: Bartosz Sosnowski Date: Mon, 12 Dec 2016 12:02:10 +0100 Subject: [PATCH 131/169] watchdog: add flag to mark handler as disabled Adds flags that marks WinCtrlCHandlerRoutine as disabled instead of removing it. Trying to remove the controller from the controller handle itself leads to deadlock. PR-URL: https://github.com/nodejs/node/pull/10248 Reviewed-By: Anna Henningsen --- src/node_watchdog.cc | 13 ++++++++++--- src/node_watchdog.h | 1 + 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/node_watchdog.cc b/src/node_watchdog.cc index 01b39123be5e7c..5d95c4132f1b3f 100644 --- a/src/node_watchdog.cc +++ b/src/node_watchdog.cc @@ -150,7 +150,8 @@ void SigintWatchdogHelper::HandleSignal(int signum) { // Windows starts a separate thread for executing the handler, so no extra // helper thread is required. BOOL WINAPI SigintWatchdogHelper::WinCtrlCHandlerRoutine(DWORD dwCtrlType) { - if (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT) { + if (!instance.watchdog_disabled_ && + (dwCtrlType == CTRL_C_EVENT || dwCtrlType == CTRL_BREAK_EVENT)) { InformWatchdogsAboutSignal(); // Return true because the signal has been handled. @@ -207,7 +208,11 @@ int SigintWatchdogHelper::Start() { RegisterSignalHandler(SIGINT, HandleSignal); #else - SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, TRUE); + if (watchdog_disabled_) { + watchdog_disabled_ = false; + } else { + SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, TRUE); + } #endif return 0; @@ -251,7 +256,7 @@ bool SigintWatchdogHelper::Stop() { RegisterSignalHandler(SIGINT, SignalExit, true); #else - SetConsoleCtrlHandler(WinCtrlCHandlerRoutine, FALSE); + watchdog_disabled_ = true; #endif had_pending_signal = has_pending_signal_; @@ -292,6 +297,8 @@ SigintWatchdogHelper::SigintWatchdogHelper() has_running_thread_ = false; stopping_ = false; CHECK_EQ(0, uv_sem_init(&sem_, 0)); +#else + watchdog_disabled_ = false; #endif } diff --git a/src/node_watchdog.h b/src/node_watchdog.h index dd97e4e735ccdf..2d55d782d0af5d 100644 --- a/src/node_watchdog.h +++ b/src/node_watchdog.h @@ -91,6 +91,7 @@ class SigintWatchdogHelper { static void* RunSigintWatchdog(void* arg); static void HandleSignal(int signum); #else + bool watchdog_disabled_; static BOOL WINAPI WinCtrlCHandlerRoutine(DWORD dwCtrlType); #endif }; From 57c4c6f5aedaa1eced2ef439853078b8a5c9471b Mon Sep 17 00:00:00 2001 From: Evan Lucas Date: Thu, 15 Dec 2016 17:24:17 -0600 Subject: [PATCH 132/169] repl: allow autocompletion for scoped packages Previously, autocompletion of scoped packages was not supported by the repl due to not including the `@` character in the regular expression. PR-URL: https://github.com/nodejs/node/pull/10296 Reviewed-By: Prince John Wesley Reviewed-By: Ben Noordhuis Reviewed-By: Colin Ihrig Reviewed-By: Jeremiah Senkpiel Reviewed-By: Anna Henningsen Reviewed-By: James M Snell --- lib/repl.js | 2 +- .../node_modules/@nodejsscope/index.js | 1 + test/parallel/test-repl-tab-complete.js | 21 ++++++++++++++++--- 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 test/fixtures/node_modules/@nodejsscope/index.js diff --git a/lib/repl.js b/lib/repl.js index 487dd880743b3a..760182ebe4ebba 100644 --- a/lib/repl.js +++ b/lib/repl.js @@ -795,7 +795,7 @@ ArrayStream.prototype.writable = true; ArrayStream.prototype.resume = function() {}; ArrayStream.prototype.write = function() {}; -const requireRE = /\brequire\s*\(['"](([\w./-]+\/)?([\w./-]*))/; +const requireRE = /\brequire\s*\(['"](([\w@./-]+\/)?([\w@./-]*))/; const simpleExpressionRE = /(([a-zA-Z_$](?:\w|\$)*)\.)*([a-zA-Z_$](?:\w|\$)*)\.?$/; diff --git a/test/fixtures/node_modules/@nodejsscope/index.js b/test/fixtures/node_modules/@nodejsscope/index.js new file mode 100644 index 00000000000000..b42ff442aee734 --- /dev/null +++ b/test/fixtures/node_modules/@nodejsscope/index.js @@ -0,0 +1 @@ +// Not used diff --git a/test/parallel/test-repl-tab-complete.js b/test/parallel/test-repl-tab-complete.js index e8fc5b1863caa3..dfda790c439d97 100644 --- a/test/parallel/test-repl-tab-complete.js +++ b/test/parallel/test-repl-tab-complete.js @@ -1,8 +1,14 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var repl = require('repl'); +const common = require('../common'); +const assert = require('assert'); + +// We have to change the directory to ../fixtures before requiring repl +// in order to make the tests for completion of node_modules work properly +// since repl modifies module.paths. +process.chdir(common.fixturesDir); + +const repl = require('repl'); function getNoResultsFunction() { return common.mustCall((err, data) => { @@ -196,6 +202,15 @@ testMe.complete('require(\'n', common.mustCall(function(error, data) { }); })); +{ + const expected = ['@nodejsscope', '@nodejsscope/']; + putIn.run(['.clear']); + testMe.complete('require(\'@nodejs', common.mustCall((err, data) => { + assert.strictEqual(err, null); + assert.deepStrictEqual(data, [expected, '@nodejs']); + })); +} + // Make sure tab completion works on context properties putIn.run(['.clear']); From 636335a1c356551bf2657830baa05ff1428dc6bc Mon Sep 17 00:00:00 2001 From: Vicente Jimenez Aguilar Date: Sun, 18 Dec 2016 17:21:29 +0100 Subject: [PATCH 133/169] doc: require() tries first core not native modules Change a single word in documentation with a more precise one. Native is a module compiled in machine "native" code. A module normally written in a compiled language, not in JavaScript. Core modules form Node's built-in "core" functionalities. You don't need to install them. They are included in every Node installation and documented in https://nodejs.org/api/ . PR-URL: https://github.com/nodejs/node/pull/10324 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Gibson Fahnestock Reviewed-By: Sam Roberts Reviewed-By: James M Snell --- doc/api/modules.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/doc/api/modules.md b/doc/api/modules.md index 8b8a5d65918ecf..e4bd745d7ed62a 100644 --- a/doc/api/modules.md +++ b/doc/api/modules.md @@ -368,11 +368,11 @@ example, then `require('./some-library')` would attempt to load: -If the module identifier passed to `require()` is not a native module, -and does not begin with `'/'`, `'../'`, or `'./'`, then Node.js starts at the -parent directory of the current module, and adds `/node_modules`, and -attempts to load the module from that location. Node will not append -`node_modules` to a path already ending in `node_modules`. +If the module identifier passed to `require()` is not a +[core](#modules_core_modules) module, and does not begin with `'/'`, `'../'`, or +`'./'`, then Node.js starts at the parent directory of the current module, and +adds `/node_modules`, and attempts to load the module from that location. Node +will not append `node_modules` to a path already ending in `node_modules`. If it is not found there, then it moves to the parent directory, and so on, until the root of the file system is reached. From b0adda03350c422a0ad9426768917adf2e552cb6 Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Wed, 21 Dec 2016 16:47:19 -0500 Subject: [PATCH 134/169] test: improve test-cluster-worker-constructor.js * use let and const instead of var * use assert.strictEqual instead assert.equal PR-URL: https://github.com/nodejs/node/pull/10396 Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Santiago Gimeno Reviewed-By: James M Snell --- test/parallel/test-cluster-worker-constructor.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/parallel/test-cluster-worker-constructor.js b/test/parallel/test-cluster-worker-constructor.js index f3ae7db73168a9..770d45c6a9edb7 100644 --- a/test/parallel/test-cluster-worker-constructor.js +++ b/test/parallel/test-cluster-worker-constructor.js @@ -3,9 +3,9 @@ // validates correct behavior of the cluster.Worker constructor require('../common'); -var assert = require('assert'); -var cluster = require('cluster'); -var worker; +const assert = require('assert'); +const cluster = require('cluster'); +let worker; worker = new cluster.Worker(); assert.strictEqual(worker.suicide, undefined); From 9546ad7d4da45d1139c052ac5ac1b49707805ac5 Mon Sep 17 00:00:00 2001 From: larissayvette Date: Thu, 22 Dec 2016 00:29:38 +0100 Subject: [PATCH 135/169] test: basic functionality of readUIntBE() PR-URL: https://github.com/nodejs/node/pull/10417 Reviewed-By: James M Snell Reviewed-By: Rich Trott Reviewed-By: Italo A. Casas Reviewed-By: Julian Duque --- test/parallel/test-buffer-readuintbe.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 test/parallel/test-buffer-readuintbe.js diff --git a/test/parallel/test-buffer-readuintbe.js b/test/parallel/test-buffer-readuintbe.js new file mode 100644 index 00000000000000..162e9fea27a14f --- /dev/null +++ b/test/parallel/test-buffer-readuintbe.js @@ -0,0 +1,24 @@ +'use strict'; +require('../common'); +const assert = require('assert'); + +// testing basic functionality of readUIntBE() + +const buf = Buffer.from([42, 84, 168, 127]); +const result = buf.readUIntBE(2); + +assert.strictEqual(result, 84); + +assert.throws( + () => { + buf.readUIntBE(5); + }, + /Index out of range/ +); + +assert.doesNotThrow( + () => { + buf.readUIntBE(5, 0, true); + }, + 'readUIntBE() should not throw if noAssert is true' +); From b1f2aeb8013e58a560a4c3fc49f1b4306b616ad8 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Wed, 21 Dec 2016 17:53:11 -0800 Subject: [PATCH 136/169] test: fix flaky test-https-timeout Remove `setTimeout()` in test and instead rely on `common.mustCall()` on a `timeout` event handler. The test was flaky on CI. The flakiness was replicable by running the test under load. This version, in contrast, is robust under load. Took the opportunity to do some `var` -> `const` while refactoring. PR-URL: https://github.com/nodejs/node/pull/10404 Reviewed-By: Santiago Gimeno Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: James M Snell --- test/parallel/test-https-timeout.js | 34 ++++++++++------------------- 1 file changed, 11 insertions(+), 23 deletions(-) diff --git a/test/parallel/test-https-timeout.js b/test/parallel/test-https-timeout.js index 865c15165e2460..ad8decc03cf474 100644 --- a/test/parallel/test-https-timeout.js +++ b/test/parallel/test-https-timeout.js @@ -1,24 +1,24 @@ 'use strict'; -var common = require('../common'); +const common = require('../common'); if (!common.hasCrypto) { common.skip('missing crypto'); return; } -var https = require('https'); +const https = require('https'); -var fs = require('fs'); +const fs = require('fs'); -var options = { +const options = { key: fs.readFileSync(common.fixturesDir + '/keys/agent1-key.pem'), cert: fs.readFileSync(common.fixturesDir + '/keys/agent1-cert.pem') }; // a server that never replies -var server = https.createServer(options, function() { +const server = https.createServer(options, function() { console.log('Got request. Doing nothing.'); -}).listen(0, function() { - var req = https.request({ +}).listen(0, common.mustCall(function() { + const req = https.request({ host: 'localhost', port: this.address().port, path: '/', @@ -28,26 +28,14 @@ var server = https.createServer(options, function() { req.setTimeout(10); req.end(); - req.on('response', function(res) { + req.on('response', function() { console.log('got response'); }); - req.on('socket', function() { - console.log('got a socket'); - - req.socket.on('connect', function() { - console.log('socket connected'); - }); - - setTimeout(function() { - throw new Error('Did not get timeout event'); - }, 200); - }); - - req.on('timeout', function() { + req.on('timeout', common.mustCall(function() { console.log('timeout occurred outside'); req.destroy(); server.close(); process.exit(0); - }); -}); + })); +})); From c9ca82e58e764ae541e98af344dee458639ff0a9 Mon Sep 17 00:00:00 2001 From: larissayvette Date: Tue, 20 Dec 2016 12:49:51 +0100 Subject: [PATCH 137/169] test: basic functionality of readUIntLE() PR-URL: https://github.com/nodejs/node/pull/10359 Reviewed-By: Julian Duque Reviewed-By: Rich Trott Reviewed-By: Italo A. Casas Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- test/parallel/test-buffer-readuintle.js | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 test/parallel/test-buffer-readuintle.js diff --git a/test/parallel/test-buffer-readuintle.js b/test/parallel/test-buffer-readuintle.js new file mode 100644 index 00000000000000..982adb8607eaa1 --- /dev/null +++ b/test/parallel/test-buffer-readuintle.js @@ -0,0 +1,24 @@ +'use strict'; +require('../common'); +const assert = require('assert'); + +// testing basic functionality of readUIntLE() + +const buf = Buffer.from([42, 84, 168, 127]); +const result = buf.readUIntLE(2); + +assert.strictEqual(result, 168); + +assert.throws( + () => { + buf.readUIntLE(5); + }, + /Index out of range/ +); + +assert.doesNotThrow( + () => { + buf.readUIntLE(5, 0, true); + }, + 'readUIntLE() should not throw if noAssert is true' +); From c5ccffd387324596b3b06cf6f84c7423a46180aa Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Fri, 23 Dec 2016 13:44:10 -0500 Subject: [PATCH 138/169] test: improve code in test-vm-preserves-property * use const instead of var * use assert.strictEqual instead assert.equal PR-URL https://github.com/nodejs/node/pull/10428 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell Reviewed-By: Luigi Pinca --- test/parallel/test-vm-preserves-property.js | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/test/parallel/test-vm-preserves-property.js b/test/parallel/test-vm-preserves-property.js index 9786ee54a7cffd..0ddc7b260a1393 100644 --- a/test/parallel/test-vm-preserves-property.js +++ b/test/parallel/test-vm-preserves-property.js @@ -1,25 +1,25 @@ 'use strict'; require('../common'); -var assert = require('assert'); +const assert = require('assert'); -var vm = require('vm'); +const vm = require('vm'); -var x = {}; +const x = {}; Object.defineProperty(x, 'prop', { configurable: false, enumerable: false, writable: false, value: 'val' }); -var o = vm.createContext(x); +const o = vm.createContext(x); -var code = 'Object.getOwnPropertyDescriptor(this, "prop")'; -var res = vm.runInContext(code, o, 'test'); +const code = 'Object.getOwnPropertyDescriptor(this, "prop")'; +const res = vm.runInContext(code, o, 'test'); assert(res); -assert.equal(typeof res, 'object'); -assert.equal(res.value, 'val'); -assert.equal(res.configurable, false, 'should not be configurable'); -assert.equal(res.enumerable, false, 'should not be enumerable'); -assert.equal(res.writable, false, 'should not be writable'); +assert.strictEqual(typeof res, 'object'); +assert.strictEqual(res.value, 'val'); +assert.strictEqual(res.configurable, false, 'should not be configurable'); +assert.strictEqual(res.enumerable, false, 'should not be enumerable'); +assert.strictEqual(res.writable, false, 'should not be writable'); From 017764018c19ced67c613153d50627c68109842d Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Sat, 24 Dec 2016 10:32:47 -0800 Subject: [PATCH 139/169] doc: use "Node.js" in V8 guide MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR-URL: https://github.com/nodejs/node/pull/10438 Reviewed-By: Michaël Zasso Reviewed-By: Gibson Fahnestock Reviewed-By: Luigi Pinca Reviewed-By: James M Snell --- doc/guides/maintaining-V8.md | 121 +++++++++++++++++++++++++---------- 1 file changed, 86 insertions(+), 35 deletions(-) diff --git a/doc/guides/maintaining-V8.md b/doc/guides/maintaining-V8.md index 82312cf6bcf4d1..19ee61fe20c5d7 100644 --- a/doc/guides/maintaining-V8.md +++ b/doc/guides/maintaining-V8.md @@ -1,10 +1,17 @@ -# Maintaining V8 in Node +# Maintaining V8 in Node.js # Background -V8 follows the Chromium release schedule. The support horizon for Chromium is very different from the support horizon that Node.js needs to provide to its users. As a result Node.js needs to support a version of V8 for quite a bit longer than what upstream needs to support. Since V8 doesn't have an LTS supported branch, there is no official process around how the V8 branches in Node are maintained. +V8 follows the Chromium release schedule. The support horizon for Chromium is +very different from the support horizon that Node.js needs to provide to its +users. As a result Node.js needs to support a version of V8 for quite a bit +longer than what upstream needs to support. Since V8 doesn't have an LTS +supported branch, there is no official process around how the V8 branches in +Node.js are maintained. -This document attempts to document the current processes and proposes a workflow for maintaining the V8 branches in Node.js LTS and Current releases and how the Node and V8 teams at Google can help. +This document attempts to document the current processes and proposes a workflow +for maintaining the V8 branches in Node.js LTS and Current releases and how the +Node.js and V8 teams at Google can help. # V8 Release Schedule @@ -16,7 +23,8 @@ For example, at the time of this writing: * **Beta**: V8 5.5 is currently in beta. It will be promoted to stable next; approximately 6 weeks after V8 5.4 shipped as stable. * **Master**: V8 tip-of-tree corresponds to V8 5.6. This branch gets regularly released as part of the Chromium **canary** builds. This branch will be promoted to beta next when V8 5.5 ships as stable. -All older branches are considered **abandoned**, and are not maintained by the V8 team. +All older branches are considered **abandoned**, and are not maintained by the +V8 team. ## V8 merge process overview @@ -29,9 +37,11 @@ The process for backporting bug fixes to active branches is officially documente * Merge requests to an abandoned branch will be rejected. * Only bug fixes are accepted for backporting. -# Node Support Requirements +# Node.js Support Requirements -At any given time Node needs to be maintaining a few different V8 branches for the various Current, LTS, and nightly releases. At present this list includes the following branches1: +At any given time Node.js needs to be maintaining a few different V8 branches +for the various Current, LTS, and nightly releases. At present this list +includes the following branches1: @@ -49,7 +59,7 @@ At any given time Node needs to be maintaining a few different V8 branches for t - @@ -63,7 +73,7 @@ At any given time Node needs to be maintaining a few different V8 branches for t - @@ -77,7 +87,7 @@ At any given time Node needs to be maintaining a few different V8 branches for t - @@ -107,17 +117,22 @@ At any given time Node needs to be maintaining a few different V8 branches for t
Node v4.x + Node.js v4.x 2015-10-01
Node v6.x + Node.js v6.x 2016-04-01
Node v7.x + Node.js v7.x 2016-10-01
-The versions of V8 used in Node v4.x and v6.x have already been abandoned by upstream V8. However, Node.js needs to continue supporting these branches for many months (Current branches) or several years (LTS branches). +The versions of V8 used in Node.js v4.x and v6.x have already been abandoned by +upstream V8. However, Node.js needs to continue supporting these branches for +many months (Current branches) or several years (LTS branches). # Maintenance Process -Once a bug in Node.js has been identified to be caused by V8, the first step is to identify the versions of Node and V8 affected. The bug may be present in multiple different locations, each of which follows a slightly different process. +Once a bug in Node.js has been identified to be caused by V8, the first step is +to identify the versions of Node.js and V8 affected. The bug may be present in +multiple different locations, each of which follows a slightly different +process. * Unfixed bugs. The bug exists in the V8 master branch. * Fixed, but needs backport. The bug may need porting to one or more branches. * Backporting to active branches. * Backporting to abandoned branches. -* Backports identified by the V8 team. Bugs identified by upstream V8 that we haven't encountered in Node yet. +* Backports identified by the V8 team. Bugs identified by upstream V8 that we haven't encountered in Node.js yet. ## Unfixed Upstream Bugs @@ -127,7 +142,7 @@ If the bug can be reproduced on the [`vee-eight-lkgr` branch](https://github.com * Make sure to include a link to the corresponding Node.js issue (if one exists). * If the fix is simple enough, you may fix it yourself; [contributions](https://github.com/v8/v8/wiki/Contributing) are welcome. * V8's build waterfall tests your change. -* Once the bug is fixed it may still need backporting, if it exists in other V8 branches that are still active or are branches that Node cares about. Follow the process for backporting below. +* Once the bug is fixed it may still need backporting, if it exists in other V8 branches that are still active or are branches that Node.js cares about. Follow the process for backporting below. ## Backporting to Active Branches @@ -142,23 +157,28 @@ If the bug exists in any of the active V8 branches, we may need to get the fix b * Attach *merge-request-x.x* labels to the bug for any active branches that still contain the bug. (e.g. merge-request-5.3, merge-request-5.4) * Add ofrobots-at-google.com to the cc list. * Once the merge has been approved, it should be merged using the [merge script documented in the V8 wiki](https://github.com/v8/v8/wiki/Merging%20&%20Patching). Merging requires commit access to the V8 repository. If you don't have commit access you can indicate someone on the V8 team can do the merge for you. -* It is possible that the merge request may not get approved, for example if it is considered to be a feature or otherwise too risky for V8 stable. In such cases we float the patch on the Node side. See the process on 'Backporting to Abandoned branches'. +* It is possible that the merge request may not get approved, for example if it is considered to be a feature or otherwise too risky for V8 stable. In such cases we float the patch on the Node.js side. See the process on 'Backporting to Abandoned branches'. * Once the fix has been merged upstream, it can be picked up during an update of the V8 branch, (see below). ## Backporting to Abandoned Branches -Abandoned V8 branches are supported in the Node.js V8 repository. The fix needs to be cherry-picked in the Node.js repository and V8-CI must test the change. +Abandoned V8 branches are supported in the Node.js V8 repository. The fix needs +to be cherry-picked in the Node.js repository and V8-CI must test the change. * For each abandoned V8 branch corresponding to an LTS branch that is affected by the bug: * Open a cherry-pick PR on nodejs/node targeting the appropriate *vY.x-staging* branch (e.g. *v6.x-staging* to fix an issue in V8-5.1). * Increase the patch level version in v8-version.h. This will not cause any problems with versioning because V8 will not publish other patches for this branch, so Node.js can effectively bump the patch version. * In some cases the patch may require extra effort to merge in case V8 has changed substantially. For important issues we may be able to lean on the V8 team to get help with reimplementing the patch. - * Run Node's [V8-CI](https://ci.nodejs.org/job/node-test-commit-v8-linux/) in addition to the [Node CI](https://ci.nodejs.org/job/node-test-pull-request/). + * Run the Node.js [V8-CI](https://ci.nodejs.org/job/node-test-commit-v8-linux/) in addition to the [Node.js CI](https://ci.nodejs.org/job/node-test-pull-request/). -An example for workflow how to cherry-pick consider the following bug: https://crbug.com/v8/5199. From the bug we can see that it was merged by V8 into 5.2 and 5.3, and not into V8 5.1 (since it was already abandoned). Since Node.js `v6.x` uses V8 5.1, the fix needed to cherry-picked. To cherry-pick, here's an example workflow: +An example for workflow how to cherry-pick consider the following bug: +https://crbug.com/v8/5199. From the bug we can see that it was merged by V8 into +5.2 and 5.3, and not into V8 5.1 (since it was already abandoned). Since Node.js +`v6.x` uses V8 5.1, the fix needed to cherry-picked. To cherry-pick, here's an +example workflow: * Download and apply the commit linked-to in the issue (in this case a51f429). `curl -L https://github.com/v8/v8/commit/a51f429.patch | git apply --directory=deps/v8`. If the branches have diverged significantly, this may not apply cleanly. It may help to try to cherry-pick the merge to the oldest branch that was done upstream in V8. In this example, this would be the patch from the merge to 5.2. The hope is that this would be closer to the V8 5.1, and has a better chance of applying cleanly. If you're stuck, feel free to ping @ofrobots for help. -* Modify the commit message to match the format we use for V8 backports. You may want to add extra description if necessary to indicate the impact of the fix on Node. In this case the original issue was descriptive enough. Example: +* Modify the commit message to match the format we use for V8 backports. You may want to add extra description if necessary to indicate the impact of the fix on Node.js. In this case the original issue was descriptive enough. Example: ``` deps: cherry-pick a51f429 from V8 upstream @@ -182,24 +202,38 @@ PR-URL: ## Backports Identified by the V8 team -For bugs found through the browser or other channels, the V8 team marks bugs that might be applicable to the abandoned branches in use by Node.js. This is done through manual tagging by the V8 team and through an automated process that tags any fix that gets backported to the stable branch (as it is likely candidate for backporting further). +For bugs found through the browser or other channels, the V8 team marks bugs +that might be applicable to the abandoned branches in use by Node.js. This is +done through manual tagging by the V8 team and through an automated process that +tags any fix that gets backported to the stable branch (as it is likely +candidate for backporting further). Such fixes are tagged with the following labels in the V8 issue tracker: -* `NodeJS-Backport-Review` ([V8](https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Review), [Chromium](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Review)): to be reviewed if this is applicable to abandoned branches in use by Node.js. This list if regularly reviewed by the node team at Google to determine applicability to Node.js. +* `NodeJS-Backport-Review` ([V8](https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Review), [Chromium](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Review)): to be reviewed if this is applicable to abandoned branches in use by Node.js. This list if regularly reviewed by the Node.js team at Google to determine applicability to Node.js. * `NodeJS-Backport-Approved` ([V8](https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Approved), [Chromium](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Approved)): marks bugs that are deemed relevant to Node.js and should be backported. * `NodeJS-Backport-Done` ([V8](https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Done), [Chromium](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Done)): Backport for Node.js has been performed already. * `NodeJS-Backport-Rejected` ([V8](https://bugs.chromium.org/p/v8/issues/list?can=1&q=label%3ANodeJS-Backport-Rejected), [Chromium](https://bugs.chromium.org/p/chromium/issues/list?can=1&q=label%3ANodeJS-Backport-Rejected)): Backport for Node.js is not desired. -The backlog of issues with such is regularly reviewed by the node-team at Google to shepherd through the backport process. External contributors are welcome to collaborate on the backport process as well. Note that some of the bugs may be security issues and will not be visible to external collaborators. +The backlog of issues with such is regularly reviewed by the node-team at Google +to shepherd through the backport process. External contributors are welcome to +collaborate on the backport process as well. Note that some of the bugs may be +security issues and will not be visible to external collaborators. # Updating V8 -Node keeps a vendored copy of V8 inside of deps/ directory. In addition Node may need to float patches that do not exist upstream. This means that some care may need to be taken to update the vendored copy of V8. +Node.js keeps a vendored copy of V8 inside of deps/ directory. In addition +Node.js may need to float patches that do not exist upstream. This means that +some care may need to be taken to update the vendored copy of V8. ## Minor updates (patch level) -Because there may be floating patches on the version of V8 in Node.js, it is safest to apply the patch level updates as a patch. For example, imagine that upstream V8 is at 5.0.71.47 and Node.js is at 5.0.71.32. It would be best to compute the diff between these tags on the V8 repository, and then apply that patch on the copy of V8 in Node.js. This should preserve the patches/backports that Node.js may be floating (or else cause a merge conflict). +Because there may be floating patches on the version of V8 in Node.js, it is +safest to apply the patch level updates as a patch. For example, imagine that +upstream V8 is at 5.0.71.47 and Node.js is at 5.0.71.32. It would be best to +compute the diff between these tags on the V8 repository, and then apply that +patch on the copy of V8 in Node.js. This should preserve the patches/backports +that Node.js may be floating (or else cause a merge conflict). The rough outline of the process is: @@ -216,14 +250,17 @@ curl -L https://github.com/v8/v8/compare/${V8_OLD_VERSION}...${V8_NEW_VERSION}.p # You may want to amend the commit message to describe the nature of the update ``` -V8 also keeps tags of the form *5.4-lkgr* which point to the *Last Known Good Revision* from the 5.4 branch that can be useful in the update process above. +V8 also keeps tags of the form *5.4-lkgr* which point to the *Last Known Good +Revision* from the 5.4 branch that can be useful in the update process above. ## Major Updates -We upgrade the version of V8 in Node.js master whenever a V8 release goes stable upstream, that is, whenever a new release of Chrome comes out. +We upgrade the version of V8 in Node.js master whenever a V8 release goes stable +upstream, that is, whenever a new release of Chrome comes out. -Upgrading major versions would be much harder to do with the patch mechanism above. A better strategy is to +Upgrading major versions would be much harder to do with the patch mechanism +above. A better strategy is to 1. Audit the current master branch and look at the patches that have been floated since the last major V8 update. 1. Replace the copy of V8 in Node.js with a fresh checkout of the latest stable V8 branch. Special care must be taken to recursively update the DEPS that V8 has a compile time dependency on (at the moment of this writing, these are only trace_event and gtest_prod.h) @@ -235,7 +272,7 @@ To audit for floating patches: git log --oneline deps/v8 ``` -To replace the copy of V8 in Node, use the '[update-v8](https://gist.github.com/targos/8da405e96e98fdff01a395bed365b816)' script2. For example, if you want to replace the copy of V8 in Node.js with the branch-head for V8 5.1 branch: +To replace the copy of V8 in Node.js, use the '[update-v8](https://gist.github.com/targos/8da405e96e98fdff01a395bed365b816)' script2. For example, if you want to replace the copy of V8 in Node.js with the branch-head for V8 5.1 branch: ```shell cd $NODE_DIR @@ -243,13 +280,17 @@ rm -rf deps/v8 path/to/update-v8 branch-heads/5.1 ``` -You may want to look at the commits created by the above scripts, and squash them once you have reviewed them. +You may want to look at the commits created by the above scripts, and squash +them once you have reviewed them. This should be followed up with manual refloating of all relevant patches. # Proposal: Using a fork repo to track upstream V8 -The fact that Node.js keeps a vendored, potentially edited copy of V8 in deps/ makes the above processes a bit complicated. An alternative proposal would be to create a fork of V8 at nodejs/v8 that would be used to maintain the V8 branches. This has several benefits: +The fact that Node.js keeps a vendored, potentially edited copy of V8 in deps/ +makes the above processes a bit complicated. An alternative proposal would be to +create a fork of V8 at nodejs/v8 that would be used to maintain the V8 branches. +This has several benefits: * The process to update the version of V8 in Node.js could be automated to track the tips of various V8 branches in nodejs/v8. * It would simplify cherry-picking and porting of fixes between branches as the version bumps in v8-version.h would happen as part of this update instead of on every change. @@ -259,17 +300,27 @@ The fact that Node.js keeps a vendored, potentially edited copy of V8 in deps/ m This would require some tooling to: -* A script that would update the V8 in a specific Node branch with V8 from upstream (dependent on branch abandoned vs. active). +* A script that would update the V8 in a specific Node.js branch with V8 from upstream (dependent on branch abandoned vs. active). * We need a script to bump V8 version numbers when a new version of V8 is promoted from nodejs/v8 to nodejs/node. * Enabled the V8-CI build in Jenkins to build from the nodejs/v8 fork. # Proposal: Dealing with the need to float patches to a stable/beta -Sometimes upstream V8 may not want to merge a fix to their stable branches, but we might. An example of this would be a fix for a performance regression that only affects Node.js and not the browser. At the moment we don't have a mechanism to deal with this situation. If we float a patch and bump the V8 version, we might run into a problem if upstream releases a fix with the same version number. - -One idea we have been kicking around is that we could move to a 5-place version number in V8, e.g.: 5.4.500.30.${embedder}. The ${embedder} represents the number of patches an embedder is floating on top of an official V8 version. This would also help with auditing the floating patches in the Node commit history. - -We are trying this out in https://github.com/nodejs/node/pull/9754. If this ends up working, we will investigate making this change upstream. +Sometimes upstream V8 may not want to merge a fix to their stable branches, but +we might. An example of this would be a fix for a performance regression that +only affects Node.js and not the browser. At the moment we don't have a +mechanism to deal with this situation. If we float a patch and bump the V8 +version, we might run into a problem if upstream releases a fix with the same +version number. + +One idea we have been kicking around is that we could move to a 5-place version +number in V8, e.g.: 5.4.500.30.${embedder}. The ${embedder} represents the +number of patches an embedder is floating on top of an official V8 version. This +would also help with auditing the floating patches in the Node.js commit +history. + +We are trying this out in https://github.com/nodejs/node/pull/9754. If this ends +up working, we will investigate making this change upstream. ## Notes From 7da06088eb86faae662a7b9d3b66b7b96daa38c5 Mon Sep 17 00:00:00 2001 From: Sam Roberts Date: Thu, 22 Dec 2016 10:31:36 -0800 Subject: [PATCH 140/169] src: describe what NODE_MODULE_VERSION is for Current comment described what to do with it when the ABI changes, but implied that Node.js would load modules with newer ABI numbers, which it will not. PR-URL: https://github.com/nodejs/node/pull/10414 Reviewed-By: Anna Henningsen Reviewed-By: Gibson Fahnestock Reviewed-By: Italo A. Casas Reviewed-By: James M Snell Reviewed-By: Santiago Gimeno Reviewed-By: Sakthipriyan Vairamani --- src/node_version.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node_version.h b/src/node_version.h index 6617a97d60950c..482ac0b4f68407 100644 --- a/src/node_version.h +++ b/src/node_version.h @@ -47,6 +47,9 @@ (minor) == NODE_MINOR_VERSION && (patch) <= NODE_PATCH_VERSION)) /** + * Node.js will refuse to load modules that weren't compiled against its own + * module ABI number, exposed as the process.versions.modules property. + * * When this version number is changed, node.js will refuse * to load older modules. This should be done whenever * an API is broken in the C++ side, including in v8 or From 7d519fa87c43056168227ddcd67f6de67f80b50e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Legan=C3=A9s-Combarro=20=27piranna?= Date: Mon, 26 Dec 2016 14:29:25 +0100 Subject: [PATCH 141/169] build: add (not) cross-compiled configure flags Adds --cross-compiling and --no-cross-compiling flags Fixes: https://github.com/nodejs/node/issues/10271 PR-URL: https://github.com/nodejs/node/pull/10287 Reviewed-By: Anna Henningsen Reviewed-By: James M Snell Reviewed-By: Ben Noordhuis --- configure | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/configure b/configure index d6672f2e25e046..821b8771bc8909 100755 --- a/configure +++ b/configure @@ -79,6 +79,17 @@ parser.add_option('--dest-cpu', choices=valid_arch, help='CPU architecture to build for ({0})'.format(', '.join(valid_arch))) +parser.add_option('--cross-compiling', + action='store_true', + dest='cross_compiling', + default=None, + help='force build to be considered as cross compiled') +parser.add_option('--no-cross-compiling', + action='store_false', + dest='cross_compiling', + default=None, + help='force build to be considered as NOT cross compiled') + parser.add_option('--dest-os', action='store', dest='dest_os', @@ -765,7 +776,9 @@ def configure_node(o): o['variables']['target_arch'] = target_arch o['variables']['node_byteorder'] = sys.byteorder - cross_compiling = target_arch != host_arch + cross_compiling = (options.cross_compiling + if options.cross_compiling is not None + else target_arch != host_arch) want_snapshots = not options.without_snapshot o['variables']['want_separate_host_toolset'] = int( cross_compiling and want_snapshots) From 3eb9373095ceca3246f62353378957eb57f05d65 Mon Sep 17 00:00:00 2001 From: jBarz Date: Mon, 12 Dec 2016 23:56:24 -0500 Subject: [PATCH 142/169] os: fix os.release() for aix and add test PR-URL: https://github.com/nodejs/node/pull/10245 Reviewed-By: Michael Dawson Reviewed-By: Gibson Fahnestock Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- src/node_os.cc | 7 +++++++ test/parallel/test-os.js | 3 +++ 2 files changed, 10 insertions(+) diff --git a/src/node_os.cc b/src/node_os.cc index d8276f463d6625..f8b53e45d8e669 100644 --- a/src/node_os.cc +++ b/src/node_os.cc @@ -85,7 +85,14 @@ static void GetOSRelease(const FunctionCallbackInfo& args) { if (uname(&info) < 0) { return env->ThrowErrnoException(errno, "uname"); } +# ifdef _AIX + char release[256]; + snprintf(release, sizeof(release), + "%s.%s", info.version, info.release); + rval = release; +# else rval = info.release; +# endif #else // Windows char release[256]; OSVERSIONINFOW info; diff --git a/test/parallel/test-os.js b/test/parallel/test-os.js index fa78b9dc988e8f..5a0a9f6ad14cbc 100644 --- a/test/parallel/test-os.js +++ b/test/parallel/test-os.js @@ -77,6 +77,9 @@ const release = os.release(); console.log('release = ', release); is.string(release); assert.ok(release.length > 0); +//TODO: Check format on more than just AIX +if (common.isAix) + assert.ok(/^\d+\.\d+$/.test(release)); const platform = os.platform(); console.log('platform = ', platform); From f1dea3fa4150ccaf272b81c0f5bbfd741d00fc51 Mon Sep 17 00:00:00 2001 From: Sarah Meyer Date: Thu, 1 Dec 2016 12:03:48 -0600 Subject: [PATCH 143/169] test: add test for SIGWINCH handling by stdio.js PR-URL: https://github.com/nodejs/node/pull/10063 Reviewed-By: James M Snell --- .../test-stderr-stdout-handle-sigwinch.js | 29 +++++++++++++++++++ .../test-stderr-stdout-handle-sigwinch.out | 2 ++ 2 files changed, 31 insertions(+) create mode 100644 test/pseudo-tty/test-stderr-stdout-handle-sigwinch.js create mode 100644 test/pseudo-tty/test-stderr-stdout-handle-sigwinch.out diff --git a/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.js b/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.js new file mode 100644 index 00000000000000..f1a95559b9dc92 --- /dev/null +++ b/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.js @@ -0,0 +1,29 @@ +'use strict'; +const common = require('../common'); + +const originalRefreshSizeStderr = process.stderr._refreshSize; +const originalRefreshSizeStdout = process.stdout._refreshSize; + +const wrap = (fn, ioStream, string) => { + return () => { + // The console.log() call prints a string that is in the .out file. In other + // words, the console.log() is part of the test, not extraneous debugging. + console.log(string); + try { + fn.call(ioStream); + } catch (e) { + // EINVAL happens on SmartOS if emulation is incomplete + if (!common.isSunOS || e.code !== 'EINVAL') + throw e; + } + }; +}; + +process.stderr._refreshSize = wrap(originalRefreshSizeStderr, + process.stderr, + 'calling stderr._refreshSize'); +process.stdout._refreshSize = wrap(originalRefreshSizeStdout, + process.stdout, + 'calling stdout._refreshSize'); + +process.emit('SIGWINCH'); diff --git a/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.out b/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.out new file mode 100644 index 00000000000000..dffbe030404487 --- /dev/null +++ b/test/pseudo-tty/test-stderr-stdout-handle-sigwinch.out @@ -0,0 +1,2 @@ +calling stdout._refreshSize +calling stderr._refreshSize From 683b0600508a75b7156d52ced0fb8cd347b1e578 Mon Sep 17 00:00:00 2001 From: Chris Story Date: Thu, 1 Dec 2016 11:47:26 -0600 Subject: [PATCH 144/169] test: refactor test-stream2-unpipe-drain - Change var to const - Remove dependency crypto PR-URL: https://github.com/nodejs/node/pull/10033 Reviewed-By: Colin Ihrig Reviewed-By: James M Snell --- test/parallel/test-stream2-unpipe-drain.js | 26 +++++++++------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-stream2-unpipe-drain.js b/test/parallel/test-stream2-unpipe-drain.js index 39c3b19069b444..b546e269c8c272 100644 --- a/test/parallel/test-stream2-unpipe-drain.js +++ b/test/parallel/test-stream2-unpipe-drain.js @@ -1,15 +1,9 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var stream = require('stream'); +require('../common'); +const assert = require('assert'); -if (!common.hasCrypto) { - common.skip('missing crypto'); - return; -} -var crypto = require('crypto'); - -var util = require('util'); +const stream = require('stream'); +const util = require('util'); function TestWriter() { stream.Writable.call(this); @@ -21,7 +15,7 @@ TestWriter.prototype._write = function(buffer, encoding, callback) { // super slow write stream (callback never called) }; -var dest = new TestWriter(); +const dest = new TestWriter(); function TestReader(id) { stream.Readable.call(this); @@ -31,11 +25,11 @@ util.inherits(TestReader, stream.Readable); TestReader.prototype._read = function(size) { this.reads += 1; - this.push(crypto.randomBytes(size)); + this.push(Buffer.alloc(size)); }; -var src1 = new TestReader(); -var src2 = new TestReader(); +const src1 = new TestReader(); +const src2 = new TestReader(); src1.pipe(dest); @@ -55,6 +49,6 @@ src1.once('readable', function() { process.on('exit', function() { - assert.equal(src1.reads, 2); - assert.equal(src2.reads, 2); + assert.strictEqual(src1.reads, 2); + assert.strictEqual(src2.reads, 2); }); From 9e763503729450126e6c8c83eacefba7bb955c8e Mon Sep 17 00:00:00 2001 From: Stewart X Addison Date: Tue, 13 Dec 2016 19:49:00 +0000 Subject: [PATCH 145/169] build: add /opt/freeware/... to AIX library path MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit To ease the use of the AIX binaries, add /opt/freeware/lib/pthread{/ppc64} into the search path encoded into the library, so that any version the user has installed from the common download locations will work out of the box without having to explicitly set LIBPATH in their environment. PR-URL: https://github.com/nodejs/node/pull/10128 Reviewed-By: Michael Dawson Reviewed-By: Johan Bergström Reviewed-By: Gibson Fahnestock Reviewed-By: Ben Noordhuis Reviewed-By: James M Snell --- node.gyp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/node.gyp b/node.gyp index 23a71cc96b9311..e23ce40758cfda 100644 --- a/node.gyp +++ b/node.gyp @@ -935,6 +935,16 @@ }, { 'type': 'executable', }], + ['target_arch=="ppc64"', { + 'ldflags': [ + '-Wl,-blibpath:/usr/lib:/lib:/opt/freeware/lib/pthread/ppc64' + ], + }], + ['target_arch=="ppc"', { + 'ldflags': [ + '-Wl,-blibpath:/usr/lib:/lib:/opt/freeware/lib/pthread' + ], + }] ], 'dependencies': ['<(node_core_target_name)', 'node_exp'], From 82f4a3335987b5e4d6dc3d204146e0323413ce92 Mon Sep 17 00:00:00 2001 From: Fabrice Tatieze Date: Tue, 27 Dec 2016 18:18:58 -0800 Subject: [PATCH 146/169] test: use strictEqual in test-http-server PR-URL: https://github.com/nodejs/node/pull/10478 Reviewed-By: James M Snell Reviewed-By: Italo A. Casas Reviewed-By: Colin Ihrig --- test/parallel/test-http-server.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/test/parallel/test-http-server.js b/test/parallel/test-http-server.js index 49283d621cecda..1870bcc7170726 100644 --- a/test/parallel/test-http-server.js +++ b/test/parallel/test-http-server.js @@ -16,23 +16,23 @@ var server = http.createServer(function(req, res) { req.id = request_number++; if (req.id === 0) { - assert.equal('GET', req.method); - assert.equal('/hello', url.parse(req.url).pathname); - assert.equal('world', qs.parse(url.parse(req.url).query).hello); - assert.equal('b==ar', qs.parse(url.parse(req.url).query).foo); + assert.strictEqual('GET', req.method); + assert.strictEqual('/hello', url.parse(req.url).pathname); + assert.strictEqual('world', qs.parse(url.parse(req.url).query).hello); + assert.strictEqual('b==ar', qs.parse(url.parse(req.url).query).foo); } if (req.id === 1) { - assert.equal('POST', req.method); - assert.equal('/quit', url.parse(req.url).pathname); + assert.strictEqual('POST', req.method); + assert.strictEqual('/quit', url.parse(req.url).pathname); } if (req.id === 2) { - assert.equal('foo', req.headers['x-x']); + assert.strictEqual('foo', req.headers['x-x']); } if (req.id === 3) { - assert.equal('bar', req.headers['x-x']); + assert.strictEqual('bar', req.headers['x-x']); this.close(); } @@ -75,7 +75,7 @@ server.on('listening', function() { // you set server.httpAllowHalfOpen=true, which we've done // above. c.end(); - assert.equal(c.readyState, 'readOnly'); + assert.strictEqual(c.readyState, 'readOnly'); requests_sent += 2; } @@ -86,19 +86,19 @@ server.on('listening', function() { }); c.on('close', function() { - assert.equal(c.readyState, 'closed'); + assert.strictEqual(c.readyState, 'closed'); }); }); process.on('exit', function() { - assert.equal(4, request_number); - assert.equal(4, requests_sent); + assert.strictEqual(4, request_number); + assert.strictEqual(4, requests_sent); var hello = new RegExp('/hello'); - assert.equal(true, hello.exec(server_response) != null); + assert.notStrictEqual(null, hello.exec(server_response)); var quit = new RegExp('/quit'); - assert.equal(true, quit.exec(server_response) != null); + assert.notStrictEqual(null, quit.exec(server_response)); - assert.equal(true, client_got_eof); + assert.strictEqual(true, client_got_eof); }); From aca927e92886b6f719024c5253e5e6df6022f361 Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Tue, 27 Dec 2016 22:33:08 -0800 Subject: [PATCH 147/169] test: refactor test-stream-pipe-after-end MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * replace `process.on('exit', ...)` checks with `common.mustCall()` * assert.equal() -> assert.strictEqual() * provide duration of 1ms to timer without a duration * remove unused function argument PR-URL: https://github.com/nodejs/node/pull/10483 Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas --- test/parallel/test-stream-pipe-after-end.js | 27 ++++++--------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/test/parallel/test-stream-pipe-after-end.js b/test/parallel/test-stream-pipe-after-end.js index 1193db21835cb1..79ebb2c0e0990d 100644 --- a/test/parallel/test-stream-pipe-after-end.js +++ b/test/parallel/test-stream-pipe-after-end.js @@ -1,5 +1,5 @@ 'use strict'; -require('../common'); +const common = require('../common'); const assert = require('assert'); const Readable = require('_stream_readable'); const Writable = require('_stream_writable'); @@ -13,7 +13,7 @@ function TestReadable(opt) { this._ended = false; } -TestReadable.prototype._read = function(n) { +TestReadable.prototype._read = function() { if (this._ended) this.emit('error', new Error('_read called twice')); this._ended = true; @@ -35,31 +35,18 @@ TestWritable.prototype._write = function(chunk, encoding, cb) { // this one should not emit 'end' until we read() from it later. const ender = new TestReadable(); -let enderEnded = false; // what happens when you pipe() a Readable that's already ended? const piper = new TestReadable(); // pushes EOF null, and length=0, so this will trigger 'end' piper.read(); -setTimeout(function() { - ender.on('end', function() { - enderEnded = true; - }); - assert(!enderEnded); +setTimeout(common.mustCall(function() { + ender.on('end', common.mustCall(function() {})); const c = ender.read(); - assert.equal(c, null); + assert.strictEqual(c, null); const w = new TestWritable(); - let writableFinished = false; - w.on('finish', function() { - writableFinished = true; - }); + w.on('finish', common.mustCall(function() {})); piper.pipe(w); - - process.on('exit', function() { - assert(enderEnded); - assert(writableFinished); - console.log('ok'); - }); -}); +}), 1); From 11d8f2439bacf61dd568fe7596449def093ed73c Mon Sep 17 00:00:00 2001 From: Rich Trott Date: Thu, 29 Dec 2016 16:16:37 -0800 Subject: [PATCH 148/169] doc: require two-factor authentication MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Collaborators have elevated privileges. The CTC now requires Collaborator accounts to have two-factor authentication. This changes wording in the onboarding documentation to make it clear that two-factor authentication is required and not merely recommended. PR-URL: https://github.com/nodejs/node/pull/10529 Reviewed-By: Colin Ihrig Reviewed-By: Evan Lucas Reviewed-By: Ali Ijaz Sheikh Reviewed-By: Сковорода Никита Андреевич Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Gibson Fahnestock Reviewed-By: Luigi Pinca Reviewed-By: Matteo Collina --- doc/onboarding.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/doc/onboarding.md b/doc/onboarding.md index 665890da968699..dbe3dfd569b7ae 100644 --- a/doc/onboarding.md +++ b/doc/onboarding.md @@ -5,14 +5,19 @@ onboarding session. ## One week before the onboarding session -* Ask the new Collaborator if they are using two-factor authentication on their - GitHub account. If they are not, suggest that they enable it as their account - will have elevated privileges in many of the Node.js repositories. +* Confirm that the new Collaborator is using two-factor authentication on their + GitHub account. Unless two-factor authentication is enabled, do not give an + account elevated privileges such as the ability to land code in the main + repository or to start continuous integration (CI) jobs. ## Fifteen minutes before the onboarding session -* Prior to the onboarding session, add the new Collaborators to -[the Collaborators team](https://github.com/orgs/nodejs/teams/collaborators). +* Prior to the onboarding session, add the new Collaborator to + [the Collaborators team](https://github.com/orgs/nodejs/teams/collaborators). + Note that this is the step that gives the account elevated privileges, so + do not perform this step (or any subsequent steps) unless two-factor + authentication is enabled on the new Collaborator's GitHub account. + ## Onboarding session From e067c48889cbe78f7c2ad71db7db111fe5eaff8e Mon Sep 17 00:00:00 2001 From: Adrian Estrada Date: Tue, 27 Dec 2016 21:43:44 -0500 Subject: [PATCH 149/169] test: improve test-fs-empty-readStream.js MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * use const instead of var * use common.mustCall to control functions execution * use assert.strictEqual instead of assert.equal * use arrow functions PR-URL: https://github.com/nodejs/node/pull/10479 Reviewed-By: James M Snell Reviewed-By: Michaël Zasso Reviewed-By: Colin Ihrig Reviewed-By: Italo A. Casas Reviewed-By: Luigi Pinca Reviewed-By: Brian White --- test/parallel/test-fs-empty-readStream.js | 32 +++++++++++------------ 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/test/parallel/test-fs-empty-readStream.js b/test/parallel/test-fs-empty-readStream.js index c5a016f9ea2c36..858d07e4f0b982 100644 --- a/test/parallel/test-fs-empty-readStream.js +++ b/test/parallel/test-fs-empty-readStream.js @@ -1,30 +1,30 @@ 'use strict'; -var common = require('../common'); -var assert = require('assert'); -var path = require('path'); -var fs = require('fs'); +const common = require('../common'); +const assert = require('assert'); +const path = require('path'); +const fs = require('fs'); -var emptyFile = path.join(common.fixturesDir, 'empty.txt'); +const emptyFile = path.join(common.fixturesDir, 'empty.txt'); -fs.open(emptyFile, 'r', function(error, fd) { +fs.open(emptyFile, 'r', common.mustCall((error, fd) => { assert.ifError(error); - var read = fs.createReadStream(emptyFile, { 'fd': fd }); + const read = fs.createReadStream(emptyFile, { 'fd': fd }); - read.once('data', function() { + read.once('data', () => { throw new Error('data event should not emit'); }); read.once('end', common.mustCall(function endEvent1() {})); -}); +})); -fs.open(emptyFile, 'r', function(error, fd) { +fs.open(emptyFile, 'r', common.mustCall((error, fd) => { assert.ifError(error); - var read = fs.createReadStream(emptyFile, { 'fd': fd }); + const read = fs.createReadStream(emptyFile, { 'fd': fd }); read.pause(); - read.once('data', function() { + read.once('data', () => { throw new Error('data event should not emit'); }); @@ -32,7 +32,7 @@ fs.open(emptyFile, 'r', function(error, fd) { throw new Error('end event should not emit'); }); - setTimeout(function() { - assert.equal(read.isPaused(), true); - }, common.platformTimeout(50)); -}); + setTimeout(common.mustCall(() => { + assert.strictEqual(read.isPaused(), true); + }), common.platformTimeout(50)); +})); From c3882f4d8b3ce2baeee667dc3ea2ed774fafcbbd Mon Sep 17 00:00:00 2001 From: Matthew Garrett Date: Mon, 26 Dec 2016 22:45:16 +0000 Subject: [PATCH 150/169] doc: warn about unvalidated input in child_process child_process.exec*() and child_process.spawn*() (if options.shell is true) allow trivial arbitrary command execution if code passes unsanitised user input to it. Add warnings in the docs to make that clear. PR-URL: https://github.com/nodejs/node/pull/10466 Reviewed-By: Gibson Fahnestock Reviewed-By: Sam Roberts Reviewed-By: James M Snell Reviewed-By: Colin Ihrig --- doc/api/child_process.md | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/doc/api/child_process.md b/doc/api/child_process.md index 4433e14ddc00fa..e83c5be6e1e8a1 100644 --- a/doc/api/child_process.md +++ b/doc/api/child_process.md @@ -149,6 +149,10 @@ added: v0.1.90 Spawns a shell then executes the `command` within that shell, buffering any generated output. +**Note: Never pass unsanitised user input to this function. Any input +containing shell metacharacters may be used to trigger arbitrary command +execution.** + ```js const exec = require('child_process').exec; exec('cat *.js bad_file | wc -l', (error, stdout, stderr) => { @@ -324,6 +328,10 @@ The `child_process.spawn()` method spawns a new process using the given `command`, with command line arguments in `args`. If omitted, `args` defaults to an empty array. +**Note: If the `shell` option is enabled, do not pass unsanitised user input to +this function. Any input containing shell metacharacters may be used to +trigger arbitrary command execution.** + A third argument may be used to specify additional options, with these defaults: ```js @@ -645,6 +653,10 @@ If the process times out, or has a non-zero exit code, this method ***will*** throw. The [`Error`][] object will contain the entire result from [`child_process.spawnSync()`][] +**Note: Never pass unsanitised user input to this function. Any input +containing shell metacharacters may be used to trigger arbitrary command +execution.** + ### child_process.spawnSync(command[, args][, options])

6Z< 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