Update from https://crrev.com/306901
Includes changes for https://crrev.com/306768
Review URL: https://codereview.chromium.org/783543003
diff --git a/DEPS b/DEPS
index 0a528b1..9c374a1 100644
--- a/DEPS
+++ b/DEPS
@@ -22,11 +22,11 @@
'libcxx_revision': '48198f9110397fff47fe7c37cbfa296be7d44d3d',
'libcxxabi_revision': '4ad1009ab3a59fa7a6896d74d5e4de5885697f95',
'sfntly_revision': '1bdaae8fc788a5ac8936d68bf24f37d977a13dac',
- 'skia_revision': '9da051ad417c13eb562c91ef6286f92dba2ae232',
+ 'skia_revision': '32fee2907e2109ef420c3fec5f44e655ebc55c2a',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling Skia
# and V8 without interference from each other.
- 'v8_revision': 'dfec52e2f3e073cfe28d0041f6d7c657d9b9486f',
+ 'v8_revision': '5e7bfaf5530837b94fa0c05189c0ab601e3a6355',
# Three lines of non-changing comments so that
# the commit queue can handle CLs rolling ANGLE
# and whatever else without interference from each other.
diff --git a/base/BUILD.gn b/base/BUILD.gn
index 9128488..fe03aac 100644
--- a/base/BUILD.gn
+++ b/base/BUILD.gn
@@ -1148,6 +1148,7 @@
"containers/stack_container_unittest.cc",
"cpu_unittest.cc",
"debug/crash_logging_unittest.cc",
+ "debug/debugger_unittest.cc",
"debug/leak_tracker_unittest.cc",
"debug/proc_maps_linux_unittest.cc",
"debug/stack_trace_unittest.cc",
diff --git a/base/base.gyp b/base/base.gyp
index 64f88db..ec5444a 100644
--- a/base/base.gyp
+++ b/base/base.gyp
@@ -479,6 +479,7 @@
'containers/stack_container_unittest.cc',
'cpu_unittest.cc',
'debug/crash_logging_unittest.cc',
+ 'debug/debugger_unittest.cc',
'debug/leak_tracker_unittest.cc',
'debug/proc_maps_linux_unittest.cc',
'debug/stack_trace_unittest.cc',
diff --git a/base/debug/debugger_unittest.cc b/base/debug/debugger_unittest.cc
new file mode 100644
index 0000000..0a5a039
--- /dev/null
+++ b/base/debug/debugger_unittest.cc
@@ -0,0 +1,43 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/debug/debugger.h"
+
+#include "build/build_config.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+#if defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+void CrashWithBreakDebugger() {
+ base::debug::SetSuppressDebugUI(false);
+ base::debug::BreakDebugger();
+
+#if defined(OS_WIN)
+ // This should not be executed.
+ _exit(125);
+#endif
+}
+#endif // defined(GTEST_HAS_DEATH_TEST)
+
+} // namespace
+
+// Death tests misbehave on Android.
+#if defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+
+TEST(Debugger, CrashAtBreakpoint) {
+ EXPECT_DEATH(CrashWithBreakDebugger(), "");
+}
+
+#if defined(OS_WIN)
+TEST(Debugger, DoesntExecuteBeyondBreakpoint) {
+ EXPECT_EXIT(CrashWithBreakDebugger(),
+ ::testing::ExitedWithCode(0x80000003), "");
+}
+#endif // defined(OS_WIN)
+
+#else // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
+TEST(Debugger, NoTest) {
+}
+#endif // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
diff --git a/base/debug/debugger_win.cc b/base/debug/debugger_win.cc
index ccc9c16..a1d86e4 100644
--- a/base/debug/debugger_win.cc
+++ b/base/debug/debugger_win.cc
@@ -17,10 +17,8 @@
void BreakDebugger() {
if (IsDebugUISuppressed())
_exit(1);
+
__debugbreak();
-#if defined(NDEBUG)
- _exit(1);
-#endif
}
} // namespace debug
diff --git a/base/mac/sdk_forward_declarations.h b/base/mac/sdk_forward_declarations.h
index fde0fcc..fa6df4d 100644
--- a/base/mac/sdk_forward_declarations.h
+++ b/base/mac/sdk_forward_declarations.h
@@ -332,7 +332,7 @@
@property (readonly, copy) NSString* activityType;
@property (copy) NSDictionary* userInfo;
-@property (copy) NSURL* webPageURL;
+@property (copy) NSURL* webpageURL;
@end
diff --git a/build/android/buildbot/bb_device_steps.py b/build/android/buildbot/bb_device_steps.py
index 49e6a48..e1858ce 100755
--- a/build/android/buildbot/bb_device_steps.py
+++ b/build/android/buildbot/bb_device_steps.py
@@ -78,13 +78,18 @@
'org.chromium.chrome.browser.sync',
'ChromeSyncShellTest',
None),
- I('ChromeDriverWebViewShell',
- 'ChromeDriverWebViewShell.apk',
- 'org.chromium.chromedriver_webview_shell',
- None,
- None),
])
+InstallablePackage = collections.namedtuple('InstallablePackage', [
+ 'name', 'apk', 'apk_package'])
+
+INSTALLABLE_PACKAGES = dict((package.name, package) for package in (
+ [InstallablePackage(i.name, i.apk, i.apk_package)
+ for i in INSTRUMENTATION_TESTS.itervalues()] +
+ [InstallablePackage('ChromeDriverWebViewShell',
+ 'ChromeDriverWebViewShell.apk',
+ 'org.chromium.chromedriver_webview_shell')]))
+
VALID_TESTS = set(['chromedriver', 'chrome_proxy', 'gpu',
'telemetry_unittests', 'telemetry_perf_unittests', 'ui',
'unit', 'webkit', 'webkit_layout', 'python_unittests'])
@@ -644,8 +649,8 @@
if options.install:
for i in options.install:
- test_obj = INSTRUMENTATION_TESTS[i]
- InstallApk(options, test_obj, print_step=True)
+ install_obj = INSTALLABLE_PACKAGES[i]
+ InstallApk(options, install_obj, print_step=True)
if options.test_filter:
bb_utils.RunSteps(options.test_filter, GetTestStepCmds(), options)
diff --git a/build/android/findbugs_filter/findbugs_exclude.xml b/build/android/findbugs_filter/findbugs_exclude.xml
index 06358d9..0fff636 100644
--- a/build/android/findbugs_filter/findbugs_exclude.xml
+++ b/build/android/findbugs_filter/findbugs_exclude.xml
@@ -80,6 +80,11 @@
<Bug code="Dm" />
</Match>
<Match>
+ <Class name="org.chromium.chrome.browser.preferences.Preferences" />
+ <Method name="onCreate" />
+ <Bug code="Dm" />
+ </Match>
+ <Match>
<Class name="~org\.chromium\.content\..*\.ChildProcessService.*" />
<Method name="run" />
<Bug code="Dm" />
diff --git a/build/android/pylib/device/adb_wrapper.py b/build/android/pylib/device/adb_wrapper.py
index 4981f28..e73d66c 100644
--- a/build/android/pylib/device/adb_wrapper.py
+++ b/build/android/pylib/device/adb_wrapper.py
@@ -8,6 +8,7 @@
should be delegated to a higher level (ex. DeviceUtils).
"""
+import collections
import errno
import logging
import os
@@ -36,6 +37,10 @@
raise IOError(errno.ENOENT, os.strerror(errno.ENOENT), path)
+DeviceStat = collections.namedtuple('DeviceStat',
+ ['st_mode', 'st_size', 'st_time'])
+
+
class AdbWrapper(object):
"""A wrapper around a local Android Debug Bridge executable."""
@@ -200,6 +205,38 @@
args, output, status, self._device_serial)
return output
+ def Ls(self, path, timeout=_DEFAULT_TIMEOUT, retries=_DEFAULT_RETRIES):
+ """List the contents of a directory on the device.
+
+ Args:
+ path: Path on the device filesystem.
+ timeout: (optional) Timeout per try in seconds.
+ retries: (optional) Number of retries to attempt.
+
+ Returns:
+ A list of pairs (filename, stat) for each file found in the directory,
+ where the stat object has the properties: st_mode, st_size, and st_time.
+
+ Raises:
+ AdbCommandFailedError if |path| does not specify a valid and accessible
+ directory in the device.
+ """
+ def ParseLine(line):
+ cols = line.split(None, 3)
+ filename = cols.pop()
+ stat = DeviceStat(*[int(num, base=16) for num in cols])
+ return (filename, stat)
+
+ cmd = ['ls', path]
+ lines = self._RunDeviceAdbCmd(
+ cmd, timeout=timeout, retries=retries).splitlines()
+ if lines:
+ return [ParseLine(line) for line in lines]
+ else:
+ raise device_errors.AdbCommandFailedError(
+ cmd, 'path does not specify an accessible directory in the device',
+ device_serial=self._device_serial)
+
def Logcat(self, filter_spec=None, timeout=_DEFAULT_TIMEOUT,
retries=_DEFAULT_RETRIES):
"""Get the logcat output.
diff --git a/build/android/pylib/device/adb_wrapper_test.py b/build/android/pylib/device/adb_wrapper_test.py
index 6a2581c..52ba2e3 100644
--- a/build/android/pylib/device/adb_wrapper_test.py
+++ b/build/android/pylib/device/adb_wrapper_test.py
@@ -44,11 +44,14 @@
with self.assertRaises(device_errors.AdbCommandFailedError):
self._adb.Shell('echo test', expect_status=1)
- def testPushPull(self):
+ def testPushLsPull(self):
path = self._MakeTempFile('foo')
device_path = '/data/local/tmp/testfile.txt'
local_tmpdir = os.path.dirname(path)
self._adb.Push(path, device_path)
+ files = dict(self._adb.Ls('/data/local/tmp'))
+ self.assertTrue('testfile.txt' in files)
+ self.assertEquals(3, files['testfile.txt'].st_size)
self.assertEqual(self._adb.Shell('cat %s' % device_path), 'foo')
self._adb.Pull(device_path, local_tmpdir)
with open(os.path.join(local_tmpdir, 'testfile.txt'), 'r') as f:
diff --git a/build/android/pylib/device/device_utils.py b/build/android/pylib/device/device_utils.py
index 0ff3a84..66a62fd 100644
--- a/build/android/pylib/device/device_utils.py
+++ b/build/android/pylib/device/device_utils.py
@@ -557,13 +557,14 @@
CommandTimeoutError on timeout.
DeviceUnreachableError on missing device.
"""
- package, old_intent = intent.action.rsplit('.', 1)
- if intent.extras is None:
- args = []
- else:
- args = ['-e %s%s' % (k, ' "%s"' % v if v else '')
- for k, v in intent.extras.items() if len(k) > 0]
- self.old_interface.BroadcastIntent(package, old_intent, *args)
+ cmd = ['am', 'broadcast', '-a', intent.action]
+ if intent.extras:
+ for key, value in intent.extras.iteritems():
+ if key:
+ cmd.extend(['-e', key])
+ if value:
+ cmd.append(str(value))
+ self.RunShellCommand(cmd, check_return=True)
@decorators.WithTimeoutAndRetriesFromInstance()
def GoHome(self, timeout=None, retries=None):
@@ -592,7 +593,7 @@
CommandTimeoutError on timeout.
DeviceUnreachableError on missing device.
"""
- self.old_interface.CloseApplication(package)
+ self.RunShellCommand(['am', 'force-stop', package], check_return=True)
@decorators.WithTimeoutAndRetriesFromInstance()
def ClearApplicationState(self, package, timeout=None, retries=None):
@@ -607,7 +608,10 @@
CommandTimeoutError on timeout.
DeviceUnreachableError on missing device.
"""
- self.old_interface.ClearApplicationState(package)
+ # Check that the package exists before clearing it. Necessary because
+ # calling pm clear on a package that doesn't exist may never return.
+ if self.GetApplicationPath(package):
+ self.RunShellCommand(['pm', 'clear', package], check_return=True)
@decorators.WithTimeoutAndRetriesFromInstance()
def SendKeyEvent(self, keycode, timeout=None, retries=None):
@@ -624,7 +628,8 @@
CommandTimeoutError on timeout.
DeviceUnreachableError on missing device.
"""
- self.old_interface.SendKeyEvent(keycode)
+ self.RunShellCommand(['input', 'keyevent', format(keycode, 'd')],
+ check_return=True)
PUSH_CHANGED_FILES_DEFAULT_TIMEOUT = 10 * _DEFAULT_TIMEOUT
PUSH_CHANGED_FILES_DEFAULT_RETRIES = _DEFAULT_RETRIES
@@ -938,13 +943,41 @@
retries: number of retries
Returns:
- The contents of the directory specified by |device_path|.
+ A list of pairs (filename, stat) for each file found in the directory,
+ where the stat object has the properties: st_mode, st_size, and st_time.
Raises:
+ AdbCommandFailedError if |device_path| does not specify a valid and
+ accessible directory in the device.
CommandTimeoutError on timeout.
DeviceUnreachableError on missing device.
"""
- return self.old_interface.ListPathContents(device_path)
+ return self.adb.Ls(device_path)
+
+ @decorators.WithTimeoutAndRetriesFromInstance()
+ def Stat(self, device_path, timeout=None, retries=None):
+ """Get the stat attributes of a file or directory on the device.
+
+ Args:
+ device_path: A string containing the path of from which to get attributes
+ on the device.
+ timeout: timeout in seconds
+ retries: number of retries
+
+ Returns:
+ A stat object with the properties: st_mode, st_size, and st_time
+
+ Raises:
+ CommandFailedError if device_path cannot be found on the device.
+ CommandTimeoutError on timeout.
+ DeviceUnreachableError on missing device.
+ """
+ dirname, target = device_path.rsplit('/', 1)
+ for filename, stat in self.adb.Ls(dirname):
+ if filename == target:
+ return stat
+ raise device_errors.CommandFailedError(
+ 'Cannot find file or directory: %r' % device_path, str(self))
@decorators.WithTimeoutAndRetriesFromInstance()
def SetJavaAsserts(self, enabled, timeout=None, retries=None):
diff --git a/build/android/pylib/device/device_utils_test.py b/build/android/pylib/device/device_utils_test.py
index 760e61f..5f2249d 100755
--- a/build/android/pylib/device/device_utils_test.py
+++ b/build/android/pylib/device/device_utils_test.py
@@ -943,33 +943,30 @@
finish=False, raw=False, extras={'foo': 'Foo', 'bar': 'Bar'})
-class DeviceUtilsBroadcastIntentTest(DeviceUtilsOldImplTest):
+class DeviceUtilsBroadcastIntentTest(DeviceUtilsNewImplTest):
def testBroadcastIntent_noExtras(self):
test_intent = intent.Intent(action='test.package.with.an.INTENT')
- with self.assertCalls(
- "adb -s 0123456789abcdef shell 'am broadcast "
- "-a test.package.with.an.INTENT '",
+ with self.assertCall(
+ self.call.adb.Shell('am broadcast -a test.package.with.an.INTENT'),
'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
self.device.BroadcastIntent(test_intent)
def testBroadcastIntent_withExtra(self):
test_intent = intent.Intent(action='test.package.with.an.INTENT',
- extras={'foo': 'bar'})
- with self.assertCalls(
- "adb -s 0123456789abcdef shell 'am broadcast "
- "-a test.package.with.an.INTENT "
- "-e foo \"bar\"'",
+ extras={'foo': 'bar value'})
+ with self.assertCall(
+ self.call.adb.Shell(
+ "am broadcast -a test.package.with.an.INTENT -e foo 'bar value'"),
'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
self.device.BroadcastIntent(test_intent)
def testBroadcastIntent_withExtra_noValue(self):
test_intent = intent.Intent(action='test.package.with.an.INTENT',
extras={'foo': None})
- with self.assertCalls(
- "adb -s 0123456789abcdef shell 'am broadcast "
- "-a test.package.with.an.INTENT "
- "-e foo'",
+ with self.assertCall(
+ self.call.adb.Shell(
+ 'am broadcast -a test.package.with.an.INTENT -e foo'),
'Broadcasting: Intent { act=test.package.with.an.INTENT } '):
self.device.BroadcastIntent(test_intent)
@@ -986,38 +983,36 @@
self.device.GoHome()
-class DeviceUtilsForceStopTest(DeviceUtilsOldImplTest):
+class DeviceUtilsForceStopTest(DeviceUtilsNewImplTest):
def testForceStop(self):
- with self.assertCalls(
- "adb -s 0123456789abcdef shell 'am force-stop this.is.a.test.package'",
+ with self.assertCall(
+ self.call.adb.Shell('am force-stop this.is.a.test.package'),
''):
self.device.ForceStop('this.is.a.test.package')
-class DeviceUtilsClearApplicationStateTest(DeviceUtilsOldImplTest):
+class DeviceUtilsClearApplicationStateTest(DeviceUtilsNewImplTest):
+
+ def testClearApplicationState_packageDoesntExist(self):
+ with self.assertCall(
+ self.call.device.GetApplicationPath('this.package.does.not.exist'),
+ None):
+ self.device.ClearApplicationState('this.package.does.not.exist')
def testClearApplicationState_packageExists(self):
with self.assertCalls(
- "adb -s 0123456789abcdef shell 'pm path this.package.does.not.exist'",
- ''):
- self.device.ClearApplicationState('this.package.does.not.exist')
-
- def testClearApplicationState_packageDoesntExist(self):
- with self.assertCallsSequence([
- ("adb -s 0123456789abcdef shell 'pm path this.package.exists'",
- 'package:/data/app/this.package.exists.apk'),
- ("adb -s 0123456789abcdef shell 'pm clear this.package.exists'",
- 'Success\r\n')]):
+ (self.call.device.GetApplicationPath('this.package.exists'),
+ '/data/app/this.package.exists.apk'),
+ (self.call.adb.Shell('pm clear this.package.exists'),
+ 'Success\r\n')):
self.device.ClearApplicationState('this.package.exists')
-class DeviceUtilsSendKeyEventTest(DeviceUtilsOldImplTest):
+class DeviceUtilsSendKeyEventTest(DeviceUtilsNewImplTest):
def testSendKeyEvent(self):
- with self.assertCalls(
- "adb -s 0123456789abcdef shell 'input keyevent 66'",
- ''):
+ with self.assertCall(self.call.adb.Shell('input keyevent 66'), ''):
self.device.SendKeyEvent(66)
@@ -1237,49 +1232,52 @@
self.device.WriteFile('/test/file', 'contents', as_root=True)
-class DeviceUtilsLsTest(DeviceUtilsOldImplTest):
-
- def testLs_nothing(self):
- with self.assertCallsSequence([
- ("adb -s 0123456789abcdef shell 'ls -lR /this/file/does.not.exist'",
- '/this/file/does.not.exist: No such file or directory\r\n'),
- ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]):
- self.assertEqual({}, self.device.Ls('/this/file/does.not.exist'))
-
- def testLs_file(self):
- with self.assertCallsSequence([
- ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.file'",
- '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'),
- ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]):
- self.assertEqual(
- {'test.file': (4096, datetime.datetime(1970, 1, 1))},
- self.device.Ls('/this/is/a/test.file'))
+class DeviceUtilsLsTest(DeviceUtilsNewImplTest):
def testLs_directory(self):
- with self.assertCallsSequence([
- ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'",
- '\r\n'
- '/this/is/a/test.directory:\r\n'
- '-rw-rw---- testuser testgroup 4096 1970-01-01 18:19 test.file\r\n'),
- ("adb -s 0123456789abcdef shell 'date +%z'", '+0000')]):
- self.assertEqual(
- {'test.file': (4096, datetime.datetime(1970, 1, 1, 18, 19))},
- self.device.Ls('/this/is/a/test.directory'))
+ result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
+ ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
+ ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
+ with self.assertCalls(
+ (self.call.adb.Ls('/data/local/tmp'), result)):
+ self.assertEquals(result,
+ self.device.Ls('/data/local/tmp'))
- def testLs_directories(self):
- with self.assertCallsSequence([
- ("adb -s 0123456789abcdef shell 'ls -lR /this/is/a/test.directory'",
- '\r\n'
- '/this/is/a/test.directory:\r\n'
- 'drwxr-xr-x testuser testgroup 1970-01-01 00:00 test.subdirectory\r\n'
- '\r\n'
- '/this/is/a/test.directory/test.subdirectory:\r\n'
- '-rw-rw---- testuser testgroup 4096 1970-01-01 00:00 test.file\r\n'),
- ("adb -s 0123456789abcdef shell 'date +%z'", '-0700')]):
- self.assertEqual(
- {'test.subdirectory/test.file':
- (4096, datetime.datetime(1970, 1, 1, 7, 0, 0))},
- self.device.Ls('/this/is/a/test.directory'))
+ def testLs_nothing(self):
+ with self.assertCalls(
+ (self.call.adb.Ls('/data/local/tmp/testfile.txt'), [])):
+ self.assertEquals([],
+ self.device.Ls('/data/local/tmp/testfile.txt'))
+
+
+class DeviceUtilsStatTest(DeviceUtilsNewImplTest):
+
+ def testStat_file(self):
+ result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
+ ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
+ ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
+ with self.assertCalls(
+ (self.call.adb.Ls('/data/local/tmp'), result)):
+ self.assertEquals(adb_wrapper.DeviceStat(33206, 3, 1417436122),
+ self.device.Stat('/data/local/tmp/testfile.txt'))
+
+ def testStat_directory(self):
+ result = [('.', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
+ ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
+ ('tmp', adb_wrapper.DeviceStat(16889, 4096, 1417436123))]
+ with self.assertCalls(
+ (self.call.adb.Ls('/data/local'), result)):
+ self.assertEquals(adb_wrapper.DeviceStat(16889, 4096, 1417436123),
+ self.device.Stat('/data/local/tmp'))
+
+ def testStat_doesNotExist(self):
+ result = [('.', adb_wrapper.DeviceStat(16889, 4096, 1417436123)),
+ ('..', adb_wrapper.DeviceStat(16873, 4096, 12382237)),
+ ('testfile.txt', adb_wrapper.DeviceStat(33206, 3, 1417436122))]
+ with self.assertCalls(
+ (self.call.adb.Ls('/data/local/tmp'), result)):
+ with self.assertRaises(device_errors.CommandFailedError):
+ self.device.Stat('/data/local/tmp/does.not.exist.txt')
class DeviceUtilsSetJavaAssertsTest(DeviceUtilsOldImplTest):
diff --git a/build/config/BUILD.gn b/build/config/BUILD.gn
index bd803ef..f32797c 100644
--- a/build/config/BUILD.gn
+++ b/build/config/BUILD.gn
@@ -6,6 +6,7 @@
import("//build/config/crypto.gni")
import("//build/config/features.gni")
import("//build/config/ui.gni")
+import("//build/module_args/v8.gni")
declare_args() {
# When set, turns off the (normally-on) iterator debugging and related stuff
@@ -207,6 +208,9 @@
if (enable_hangout_services_extension) {
defines += [ "ENABLE_HANGOUT_SERVICES_EXTENSION=1" ]
}
+ if (v8_use_external_startup_data) {
+ defines += [ "V8_USE_EXTERNAL_STARTUP_DATA" ]
+ }
}
# Debug/release ----------------------------------------------------------------
diff --git a/build/get_syzygy_binaries.py b/build/get_syzygy_binaries.py
index b5424c2..08460e9 100755
--- a/build/get_syzygy_binaries.py
+++ b/build/get_syzygy_binaries.py
@@ -24,8 +24,8 @@
_LOGGER = logging.getLogger(os.path.basename(__file__))
# The URL where official builds are archived.
-_SYZYGY_ARCHIVE_URL = ('http://syzygy-archive.commondatastorage.googleapis.com/'
- 'builds/official/%(revision)s')
+_SYZYGY_ARCHIVE_URL = ('https://syzygy-archive.commondatastorage.googleapis.com'
+ '/builds/official/%(revision)s')
# A JSON file containing the state of the download directory. If this file and
# directory state do not agree, then the binaries will be downloaded and
diff --git a/build/module_args/v8.gni b/build/module_args/v8.gni
new file mode 100644
index 0000000..5825530
--- /dev/null
+++ b/build/module_args/v8.gni
@@ -0,0 +1,12 @@
+# Copyright 2014 The Chromium Authors. All rights reserved.
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+
+if (is_android) {
+ import("//build/config/android/config.gni")
+}
+
+# TODO(baixo) enable this once this lands:
+# https://codereview.chromium.org/749213004
+# v8_use_external_startup_data = is_android && !is_android_webview_build
+v8_use_external_startup_data = false
diff --git a/build/win/asan.gyp b/build/win/asan.gyp
index 9107db3..97fcb6f 100644
--- a/build/win/asan.gyp
+++ b/build/win/asan.gyp
@@ -19,7 +19,7 @@
'destination': '<(PRODUCT_DIR)',
'files': [
# Path is relative to this GYP file.
- '<(DEPTH)/<(make_clang_dir)/bin/clang_rt.asan_dynamic-i386.dll',
+ '<(DEPTH)/<(make_clang_dir)/lib/clang/3.6.0/lib/windows/clang_rt.asan_dynamic-i386.dll',
],
},
],
diff --git a/cc/BUILD.gn b/cc/BUILD.gn
index 7e66bd9..7402509 100644
--- a/cc/BUILD.gn
+++ b/cc/BUILD.gn
@@ -62,6 +62,7 @@
"base/swap_promise_monitor.h",
"base/switches.cc",
"base/switches.h",
+ "base/synced_property.h",
"base/tiling_data.cc",
"base/tiling_data.h",
"base/time_util.h",
diff --git a/cc/base/switches.cc b/cc/base/switches.cc
index 27e63b5..d34821e 100644
--- a/cc/base/switches.cc
+++ b/cc/base/switches.cc
@@ -27,9 +27,6 @@
const char kEnableTopControlsPositionCalculation[] =
"enable-top-controls-position-calculation";
-// The height of the movable top controls.
-const char kTopControlsHeight[] = "top-controls-height";
-
// Percentage of the top controls need to be hidden before they will auto hide.
const char kTopControlsHideThreshold[] = "top-controls-hide-threshold";
diff --git a/cc/base/switches.h b/cc/base/switches.h
index bbf680e..611f0da 100644
--- a/cc/base/switches.h
+++ b/cc/base/switches.h
@@ -22,7 +22,6 @@
CC_EXPORT extern const char kEnableMainFrameBeforeActivation[];
CC_EXPORT extern const char kEnableTopControlsPositionCalculation[];
CC_EXPORT extern const char kJankInsteadOfCheckerboard[];
-CC_EXPORT extern const char kTopControlsHeight[];
CC_EXPORT extern const char kTopControlsHideThreshold[];
CC_EXPORT extern const char kTopControlsShowThreshold[];
CC_EXPORT extern const char kSlowDownRasterScaleFactor[];
diff --git a/cc/base/synced_property.h b/cc/base/synced_property.h
new file mode 100644
index 0000000..5c47932
--- /dev/null
+++ b/cc/base/synced_property.h
@@ -0,0 +1,172 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CC_BASE_SYNCED_PROPERTY_H_
+#define CC_BASE_SYNCED_PROPERTY_H_
+
+#include "base/memory/ref_counted.h"
+
+namespace cc {
+
+// This class is the basic primitive used for impl-thread scrolling. Its job is
+// to sanely resolve the case where both the main and impl thread are
+// concurrently updating the same value (for example, when Javascript sets the
+// scroll offset during an ongoing impl-side scroll).
+//
+// There are three trees (main, pending, and active) and therefore also three
+// places with their own idea of the scroll offsets (and analogous properties
+// like page scale). Objects of this class are meant to be held on the Impl
+// side, and contain the canonical reference for the pending and active trees,
+// as well as keeping track of the latest delta sent to the main thread (which
+// is necessary for conflict resolution).
+
+template <typename T>
+class SyncedProperty : public base::RefCounted<SyncedProperty<T>> {
+ public:
+ SyncedProperty() {}
+
+ // Returns the canonical value for the specified tree, including the sum of
+ // all deltas. The pending tree should use this for activation purposes and
+ // the active tree should use this for drawing.
+ typename T::ValueType Current(bool is_active_tree) const {
+ if (is_active_tree)
+ return active_base_.Combine(active_delta_).get();
+ else
+ return pending_base_.Combine(PendingDelta()).get();
+ }
+
+ // Sets the value on the impl thread, due to an impl-thread-originating
+ // action. Returns true if this had any effect. This will remain
+ // impl-thread-only information at first, and will get pulled back to the main
+ // thread on the next call of PullDeltaToMainThread (which happens right
+ // before the commit).
+ bool SetCurrent(typename T::ValueType current) {
+ T delta = T(current).InverseCombine(active_base_);
+ if (active_delta_.get() == delta.get())
+ return false;
+
+ active_delta_ = delta;
+ return true;
+ }
+
+ // Returns the difference between the last value that was committed and
+ // activated from the main thread, and the current total value.
+ typename T::ValueType Delta() const { return active_delta_.get(); }
+
+ // Returns the latest active tree delta and also makes a note that this value
+ // was sent to the main thread.
+ typename T::ValueType PullDeltaForMainThread() {
+ sent_delta_ = active_delta_;
+ return active_delta_.get();
+ }
+
+ // Push the latest value from the main thread onto pending tree-associated
+ // state. Returns true if this had any effect.
+ bool PushFromMainThread(typename T::ValueType main_thread_value) {
+ if (pending_base_.get() == main_thread_value)
+ return false;
+
+ pending_base_ = T(main_thread_value);
+
+ return true;
+ }
+
+ // Push the value associated with the pending tree to be the active base
+ // value. As part of this, subtract the last sent value from the active tree
+ // delta (which will make the delta zero at steady state, or make it contain
+ // only the difference since the last send).
+ bool PushPendingToActive() {
+ if (active_base_.get() == pending_base_.get() &&
+ sent_delta_.get() == T::Identity().get())
+ return false;
+
+ active_base_ = pending_base_;
+ active_delta_ = PendingDelta();
+ sent_delta_ = T::Identity();
+
+ return true;
+ }
+
+ // This simulates the consequences of the sent value getting committed and
+ // activated. The value sent to the main thread ends up combined with the
+ // active value, and the sent_delta is subtracted from the delta.
+ void AbortCommit() {
+ active_base_ = active_base_.Combine(sent_delta_);
+ active_delta_ = PendingDelta();
+ sent_delta_ = T::Identity();
+ }
+
+ private:
+ // The new delta we would use if we decide to activate now. This delta
+ // excludes the amount that we expect the main thread to reflect back at the
+ // impl thread during the commit.
+ T PendingDelta() const { return active_delta_.InverseCombine(sent_delta_); }
+
+ // Value last committed to the pending tree.
+ T pending_base_;
+ // Value last committed to the active tree (on the last activation).
+ T active_base_;
+ // The difference between the active_base_ and the user-perceived value.
+ T active_delta_;
+ // The value sent to the main thread (on the last BeginFrame); this is always
+ // identity outside of the BeginFrame-to-activation interval.
+ T sent_delta_;
+
+ friend class base::RefCounted<SyncedProperty<T>>;
+ ~SyncedProperty() {}
+};
+
+// SyncedProperty's delta-based conflict resolution logic makes sense for any
+// mathematical group. In practice, there are two that are useful:
+// 1. Numbers/vectors with addition and identity = 0 (like scroll offsets)
+// 2. Real numbers with multiplication and identity = 1 (like page scale)
+
+template <class V>
+class AdditionGroup {
+ public:
+ typedef V ValueType;
+
+ AdditionGroup() : value_(Identity().get()) {}
+ explicit AdditionGroup(V value) : value_(value) {}
+
+ V& get() { return value_; }
+ const V& get() const { return value_; }
+
+ static AdditionGroup<V> Identity() { return AdditionGroup(V()); } // zero
+ AdditionGroup<V> Combine(AdditionGroup<V> p) const {
+ return AdditionGroup<V>(value_ + p.value_);
+ }
+ AdditionGroup<V> InverseCombine(AdditionGroup<V> p) const {
+ return AdditionGroup<V>(value_ - p.value_);
+ }
+
+ private:
+ V value_;
+};
+
+class ScaleGroup {
+ public:
+ typedef float ValueType;
+
+ ScaleGroup() : value_(Identity().get()) {}
+ explicit ScaleGroup(float value) : value_(value) {}
+
+ float& get() { return value_; }
+ const float& get() const { return value_; }
+
+ static ScaleGroup Identity() { return ScaleGroup(1.f); }
+ ScaleGroup Combine(ScaleGroup p) const {
+ return ScaleGroup(value_ * p.value_);
+ }
+ ScaleGroup InverseCombine(ScaleGroup p) const {
+ return ScaleGroup(value_ / p.value_);
+ }
+
+ private:
+ float value_;
+};
+
+} // namespace cc
+
+#endif // CC_BASE_SYNCED_PROPERTY_H_
diff --git a/cc/blink/web_external_texture_layer_impl.cc b/cc/blink/web_external_texture_layer_impl.cc
index 85aac10..30e0ce6 100644
--- a/cc/blink/web_external_texture_layer_impl.cc
+++ b/cc/blink/web_external_texture_layer_impl.cc
@@ -62,6 +62,11 @@
static_cast<TextureLayer*>(layer_->layer())->SetRateLimitContext(rate_limit);
}
+void WebExternalTextureLayerImpl::setNearestNeighbor(bool nearest_neighbor) {
+ static_cast<TextureLayer*>(layer_->layer())
+ ->SetNearestNeighbor(nearest_neighbor);
+}
+
bool WebExternalTextureLayerImpl::PrepareTextureMailbox(
cc::TextureMailbox* mailbox,
scoped_ptr<cc::SingleReleaseCallback>* release_callback,
@@ -85,6 +90,7 @@
cc::TextureMailbox(name, GL_TEXTURE_2D, client_mailbox.syncPoint);
}
mailbox->set_allow_overlay(client_mailbox.allowOverlay);
+ mailbox->set_nearest_neighbor(client_mailbox.nearestNeighbor);
if (mailbox->IsValid()) {
*release_callback = cc::SingleReleaseCallback::Create(
diff --git a/cc/blink/web_external_texture_layer_impl.h b/cc/blink/web_external_texture_layer_impl.h
index 853b1a0..a12a00b 100644
--- a/cc/blink/web_external_texture_layer_impl.h
+++ b/cc/blink/web_external_texture_layer_impl.h
@@ -13,6 +13,7 @@
#include "third_party/WebKit/public/platform/WebExternalTextureLayer.h"
namespace blink {
+class WebExternalTextureLayerClient;
struct WebFloatRect;
struct WebExternalTextureMailbox;
}
@@ -43,6 +44,7 @@
virtual void setPremultipliedAlpha(bool premultiplied);
virtual void setBlendBackgroundColor(bool blend);
virtual void setRateLimitContext(bool rate_limit);
+ virtual void setNearestNeighbor(bool nearest_neighbor);
// TextureLayerClient implementation.
bool PrepareTextureMailbox(
diff --git a/cc/cc.gyp b/cc/cc.gyp
index 3374251..732bc0d 100644
--- a/cc/cc.gyp
+++ b/cc/cc.gyp
@@ -88,6 +88,7 @@
'base/swap_promise.h',
'base/swap_promise_monitor.cc',
'base/swap_promise_monitor.h',
+ 'base/synced_property.h',
'base/switches.cc',
'base/switches.h',
'base/tiling_data.cc',
diff --git a/cc/input/top_controls_manager.cc b/cc/input/top_controls_manager.cc
index ddde672..1615d7f 100644
--- a/cc/input/top_controls_manager.cc
+++ b/cc/input/top_controls_manager.cc
@@ -26,29 +26,24 @@
// static
scoped_ptr<TopControlsManager> TopControlsManager::Create(
TopControlsManagerClient* client,
- float top_controls_height,
float top_controls_show_threshold,
float top_controls_hide_threshold) {
return make_scoped_ptr(new TopControlsManager(client,
- top_controls_height,
top_controls_show_threshold,
top_controls_hide_threshold));
}
TopControlsManager::TopControlsManager(TopControlsManagerClient* client,
- float top_controls_height,
float top_controls_show_threshold,
float top_controls_hide_threshold)
: client_(client),
animation_direction_(NO_ANIMATION),
permitted_state_(BOTH),
- top_controls_height_(top_controls_height),
+ top_controls_height_(0.f),
current_scroll_delta_(0.f),
controls_scroll_begin_offset_(0.f),
- top_controls_show_height_(
- top_controls_height * top_controls_hide_threshold),
- top_controls_hide_height_(
- top_controls_height * (1.f - top_controls_show_threshold)),
+ top_controls_show_threshold_(top_controls_hide_threshold),
+ top_controls_hide_threshold_(top_controls_show_threshold),
pinch_gesture_active_(false) {
CHECK(client_);
}
@@ -163,6 +158,19 @@
client_->DidChangeTopControlsPosition();
}
+void TopControlsManager::SetTopControlsHeight(float top_controls_height) {
+ DCHECK_GE(top_controls_height, 0);
+
+ if (top_controls_height == top_controls_height_)
+ return;
+
+ ResetAnimations();
+ float top_controls_offset = client_->ControlsTopOffset();
+ top_controls_height_ = top_controls_height;
+ SetControlsTopOffset(top_controls_offset);
+ StartAnimationIfNecessary();
+}
+
gfx::Vector2dF TopControlsManager::Animate(base::TimeTicks monotonic_time) {
if (!top_controls_animation_ || !client_->HaveRootScrollLayer())
return gfx::Vector2dF();
@@ -217,10 +225,14 @@
&& client_->ControlsTopOffset() != -top_controls_height_) {
AnimationDirection show_controls = NO_ANIMATION;
- if (client_->ControlsTopOffset() >= -top_controls_show_height_) {
+ float top_controls_show_height =
+ top_controls_height_ * top_controls_hide_threshold_;
+ float top_controls_hide_height =
+ top_controls_height_ * (1.f - top_controls_show_threshold_);
+ if (client_->ControlsTopOffset() >= -top_controls_show_height) {
// If we're showing so much that the hide threshold won't trigger, show.
show_controls = SHOWING_CONTROLS;
- } else if (client_->ControlsTopOffset() <= -top_controls_hide_height_) {
+ } else if (client_->ControlsTopOffset() <= -top_controls_hide_height) {
// If we're showing so little that the show threshold won't trigger, hide.
show_controls = HIDING_CONTROLS;
} else {
diff --git a/cc/input/top_controls_manager.h b/cc/input/top_controls_manager.h
index a90d33d..69408ae 100644
--- a/cc/input/top_controls_manager.h
+++ b/cc/input/top_controls_manager.h
@@ -34,12 +34,10 @@
static scoped_ptr<TopControlsManager> Create(
TopControlsManagerClient* client,
- float top_controls_height,
float top_controls_show_threshold,
float top_controls_hide_threshold);
virtual ~TopControlsManager();
- float controls_height() { return top_controls_height_; }
float ControlsTopOffset();
float ContentTopOffset();
@@ -63,11 +61,11 @@
gfx::Vector2dF Animate(base::TimeTicks monotonic_time);
void SetControlsTopOffset(float offset);
+ void SetTopControlsHeight(float top_controls_height);
float top_controls_height() { return top_controls_height_; }
protected:
TopControlsManager(TopControlsManagerClient* client,
- float top_controls_height,
float top_controls_show_threshold,
float top_controls_hide_threshold);
@@ -88,13 +86,13 @@
float current_scroll_delta_;
float controls_scroll_begin_offset_;
- // The height of the visible top control such that it must be shown when
- // the user stops the scroll.
- float top_controls_show_height_;
+ // The percent height of the visible top control such that it must be shown
+ // when the user stops the scroll.
+ float top_controls_show_threshold_;
- // The height of the visible top control such that it must be hidden when
- // the user stops the scroll.
- float top_controls_hide_height_;
+ // The percent height of the visible top control such that it must be hidden
+ // when the user stops the scroll.
+ float top_controls_hide_threshold_;
bool pinch_gesture_active_;
diff --git a/cc/input/top_controls_manager_unittest.cc b/cc/input/top_controls_manager_unittest.cc
index 77b40c9..a209012 100644
--- a/cc/input/top_controls_manager_unittest.cc
+++ b/cc/input/top_controls_manager_unittest.cc
@@ -19,19 +19,20 @@
namespace cc {
namespace {
-static const float kTopControlsHeight = 100;
-
class MockTopControlsManagerClient : public TopControlsManagerClient {
public:
- MockTopControlsManagerClient(float top_controls_show_threshold,
+ MockTopControlsManagerClient(float top_controls_height,
+ float top_controls_show_threshold,
float top_controls_hide_threshold)
: host_impl_(&proxy_, &shared_bitmap_manager_),
redraw_needed_(false),
update_draw_properties_needed_(false),
top_controls_top_offset_(0.f),
+ top_controls_height_(top_controls_height),
top_controls_show_threshold_(top_controls_show_threshold),
top_controls_hide_threshold_(top_controls_hide_threshold) {
- active_tree_ = LayerTreeImpl::create(&host_impl_);
+ active_tree_ =
+ LayerTreeImpl::create(&host_impl_, new SyncedProperty<ScaleGroup>);
root_scroll_layer_ = LayerImpl::Create(active_tree_.get(), 1);
}
@@ -57,9 +58,9 @@
TopControlsManager* manager() {
if (!manager_) {
manager_ = TopControlsManager::Create(this,
- kTopControlsHeight,
top_controls_show_threshold_,
top_controls_hide_threshold_);
+ manager_->SetTopControlsHeight(top_controls_height_);
}
return manager_.get();
}
@@ -75,12 +76,13 @@
bool update_draw_properties_needed_;
float top_controls_top_offset_;
+ float top_controls_height_;
float top_controls_show_threshold_;
float top_controls_hide_threshold_;
};
TEST(TopControlsManagerTest, EnsureScrollThresholdApplied) {
- MockTopControlsManagerClient client(0.5f, 0.5f);
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
@@ -124,7 +126,7 @@
}
TEST(TopControlsManagerTest, PartialShownHideAnimation) {
- MockTopControlsManagerClient client(0.5f, 0.5f);
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
@@ -154,7 +156,7 @@
}
TEST(TopControlsManagerTest, PartialShownShowAnimation) {
- MockTopControlsManagerClient client(0.5f, 0.5f);
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
@@ -184,7 +186,7 @@
}
TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdShows) {
- MockTopControlsManagerClient client(0.25f, 0.25f);
+ MockTopControlsManagerClient client(100.f, 0.25f, 0.25f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
@@ -210,7 +212,7 @@
}
TEST(TopControlsManagerTest, PartialHiddenWithAmbiguousThresholdHides) {
- MockTopControlsManagerClient client(0.25f, 0.25f);
+ MockTopControlsManagerClient client(100.f, 0.25f, 0.25f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
@@ -236,7 +238,7 @@
}
TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdHides) {
- MockTopControlsManagerClient client(0.25f, 0.25f);
+ MockTopControlsManagerClient client(100.f, 0.25f, 0.25f);
TopControlsManager* manager = client.manager();
manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
@@ -266,7 +268,7 @@
}
TEST(TopControlsManagerTest, PartialShownWithAmbiguousThresholdShows) {
- MockTopControlsManagerClient client(0.25f, 0.25f);
+ MockTopControlsManagerClient client(100.f, 0.25f, 0.25f);
TopControlsManager* manager = client.manager();
manager->ScrollBy(gfx::Vector2dF(0.f, 200.f));
@@ -296,7 +298,7 @@
}
TEST(TopControlsManagerTest, PinchIgnoresScroll) {
- MockTopControlsManagerClient client(0.5f, 0.5f);
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
TopControlsManager* manager = client.manager();
// Hide the controls.
@@ -325,7 +327,7 @@
}
TEST(TopControlsManagerTest, PinchBeginStartsAnimationIfNecessary) {
- MockTopControlsManagerClient client(0.5f, 0.5f);
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
TopControlsManager* manager = client.manager();
manager->ScrollBegin();
@@ -378,5 +380,80 @@
EXPECT_EQ(0.f, manager->ControlsTopOffset());
}
+TEST(TopControlsManagerTest, HeightChangeMaintainsFullyVisibleControls) {
+ MockTopControlsManagerClient client(0.f, 0.5f, 0.5f);
+ TopControlsManager* manager = client.manager();
+
+ EXPECT_EQ(0.f, manager->top_controls_height());
+ EXPECT_EQ(0.f, manager->ControlsTopOffset());
+
+ manager->SetTopControlsHeight(100.f);
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(100.f, manager->top_controls_height());
+ EXPECT_EQ(0, manager->ControlsTopOffset());
+
+ manager->SetTopControlsHeight(50.f);
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(50.f, manager->top_controls_height());
+ EXPECT_EQ(0.f, manager->ControlsTopOffset());
+}
+
+TEST(TopControlsManagerTest, ShrinkingHeightKeepsTopControlsHidden) {
+ MockTopControlsManagerClient client(100.f, 0.5f, 0.5f);
+ TopControlsManager* manager = client.manager();
+
+ manager->ScrollBegin();
+ manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
+ EXPECT_EQ(-100.f, manager->ControlsTopOffset());
+ EXPECT_EQ(0.f, manager->ContentTopOffset());
+ manager->ScrollEnd();
+
+ manager->SetTopControlsHeight(50.f);
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(-50.f, manager->ControlsTopOffset());
+ EXPECT_EQ(0.f, manager->ContentTopOffset());
+
+ manager->SetTopControlsHeight(0.f);
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(0.f, manager->ControlsTopOffset());
+ EXPECT_EQ(0.f, manager->ContentTopOffset());
+}
+
+TEST(TopControlsManagerTest, HiddenTopControlsReadjustOnIncreasedHeight) {
+ MockTopControlsManagerClient client(10.f, 0.5f, 0.5f);
+ TopControlsManager* manager = client.manager();
+
+ manager->ScrollBegin();
+ manager->ScrollBy(gfx::Vector2dF(0.f, 300.f));
+ EXPECT_EQ(-10.f, manager->ControlsTopOffset());
+ EXPECT_EQ(0.f, manager->ContentTopOffset());
+ manager->ScrollEnd();
+
+ manager->SetTopControlsHeight(15.f);
+ EXPECT_TRUE(manager->animation());
+ base::TimeTicks time = base::TimeTicks::Now();
+ float previous_offset = manager->ControlsTopOffset();
+ while (manager->animation()) {
+ time = base::TimeDelta::FromMicroseconds(100) + time;
+ manager->Animate(time);
+ EXPECT_LT(manager->ControlsTopOffset(), previous_offset);
+ previous_offset = manager->ControlsTopOffset();
+ }
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(-15.f, manager->ControlsTopOffset());
+
+ manager->SetTopControlsHeight(35.f);
+ EXPECT_TRUE(manager->animation());
+ time = base::TimeTicks::Now();
+ previous_offset = manager->ControlsTopOffset();
+ while (manager->animation()) {
+ time = base::TimeDelta::FromMicroseconds(100) + time;
+ manager->Animate(time);
+ EXPECT_GT(manager->ControlsTopOffset(), previous_offset);
+ previous_offset = manager->ControlsTopOffset();
+ }
+ EXPECT_FALSE(manager->animation());
+ EXPECT_EQ(0.f, manager->ControlsTopOffset());
+}
} // namespace
} // namespace cc
diff --git a/cc/layers/delegated_frame_provider_unittest.cc b/cc/layers/delegated_frame_provider_unittest.cc
index 454bf7d..fe8117e 100644
--- a/cc/layers/delegated_frame_provider_unittest.cc
+++ b/cc/layers/delegated_frame_provider_unittest.cc
@@ -59,6 +59,7 @@
gfx::PointF(1.f, 1.f),
SK_ColorTRANSPARENT,
vertex_opacity,
+ false,
false);
}
diff --git a/cc/layers/heads_up_display_layer_impl.cc b/cc/layers/heads_up_display_layer_impl.cc
index ea9e713..0038b49 100644
--- a/cc/layers/heads_up_display_layer_impl.cc
+++ b/cc/layers/heads_up_display_layer_impl.cc
@@ -149,6 +149,7 @@
gfx::PointF uv_bottom_right(1.f, 1.f);
const float vertex_opacity[] = { 1.f, 1.f, 1.f, 1.f };
bool flipped = false;
+ bool nearest_neighbor = false;
TextureDrawQuad* quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
quad->SetNew(shared_quad_state,
@@ -161,7 +162,8 @@
uv_bottom_right,
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
void HeadsUpDisplayLayerImpl::UpdateHudTexture(
diff --git a/cc/layers/layer_impl.cc b/cc/layers/layer_impl.cc
index a99ede8..066d26c 100644
--- a/cc/layers/layer_impl.cc
+++ b/cc/layers/layer_impl.cc
@@ -621,9 +621,6 @@
if (!scroll_clip_layer_)
return gfx::Vector2dF();
- float scale_delta = layer_tree_impl()->page_scale_delta();
- float scale = layer_tree_impl()->page_scale_factor();
-
gfx::Vector2dF delta_from_scroll = scroll_clip_layer_->bounds_delta();
// In virtual-viewport mode, we don't need to compensate for pinch zoom or
@@ -632,6 +629,10 @@
if (layer_tree_impl()->settings().use_pinch_virtual_viewport)
return delta_from_scroll;
+ float scale_delta = layer_tree_impl()->page_scale_delta();
+ float scale = layer_tree_impl()->current_page_scale_factor() /
+ layer_tree_impl()->page_scale_delta();
+
delta_from_scroll.Scale(1.f / scale);
// The delta-from-pinch component requires some explanation: A viewport of
@@ -1213,7 +1214,7 @@
const gfx::Transform& layer_transform = current_layer->transform();
if (current_layer == page_scale_layer) {
DCHECK(layer_transform.IsIdentity());
- current_layer_scale = layer_tree_impl()->total_page_scale_factor();
+ current_layer_scale = layer_tree_impl()->current_page_scale_factor();
} else {
// TODO(wjmaclean) Should we allow for translation too?
DCHECK(layer_transform.IsScale2d());
@@ -1230,7 +1231,7 @@
// page scale layer may coincide with the clip layer, and so this is
// necessary.
if (page_scale_layer == scroll_clip_layer_)
- scale_factor *= layer_tree_impl()->total_page_scale_factor();
+ scale_factor *= layer_tree_impl()->current_page_scale_factor();
scaled_scroll_bounds.SetSize(scale_factor * scaled_scroll_bounds.width(),
scale_factor * scaled_scroll_bounds.height());
@@ -1289,7 +1290,7 @@
const gfx::Transform& layer_transform = current_layer->transform();
if (current_layer == page_scale_layer) {
DCHECK(layer_transform.IsIdentity());
- float scale_factor = layer_tree_impl()->total_page_scale_factor();
+ float scale_factor = layer_tree_impl()->current_page_scale_factor();
current_offset.Scale(scale_factor);
scroll_rect.Scale(scale_factor);
} else {
@@ -1307,8 +1308,8 @@
// page scale layer may coincide with the clip layer, and so this is
// necessary.
if (page_scale_layer == scrollbar_clip_layer) {
- scroll_rect.Scale(layer_tree_impl()->total_page_scale_factor());
- current_offset.Scale(layer_tree_impl()->total_page_scale_factor());
+ scroll_rect.Scale(layer_tree_impl()->current_page_scale_factor());
+ current_offset.Scale(layer_tree_impl()->current_page_scale_factor());
}
bool scrollbar_needs_animation = false;
@@ -1343,7 +1344,7 @@
// Non-overlay scrollbars also shouldn't trigger animations.
bool is_animatable_scrollbar =
scrollbar_layer->is_overlay_scrollbar() &&
- ((layer_tree_impl()->total_page_scale_factor() >
+ ((layer_tree_impl()->current_page_scale_factor() >
layer_tree_impl()->min_page_scale_factor()) ||
!layer_tree_impl()->settings().use_pinch_zoom_scrollbars);
if (is_animatable_scrollbar)
diff --git a/cc/layers/nine_patch_layer_impl.cc b/cc/layers/nine_patch_layer_impl.cc
index 0dd2b6f..82ba480 100644
--- a/cc/layers/nine_patch_layer_impl.cc
+++ b/cc/layers/nine_patch_layer_impl.cc
@@ -102,6 +102,7 @@
return;
static const bool flipped = false;
+ static const bool nearest_neighbor = false;
static const bool premultiplied_alpha = true;
DCHECK(!bounds().IsEmpty());
@@ -228,7 +229,8 @@
uv_top_left.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -247,7 +249,8 @@
uv_top_right.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -266,7 +269,8 @@
uv_bottom_left.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -285,7 +289,8 @@
uv_bottom_right.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect = occlusion_in_content_space.GetUnoccludedContentRect(layer_top);
@@ -303,7 +308,8 @@
uv_top.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -322,7 +328,8 @@
uv_left.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -341,7 +348,8 @@
uv_right.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
visible_rect =
@@ -360,7 +368,8 @@
uv_bottom.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
if (fill_center_) {
@@ -380,7 +389,8 @@
uv_center.bottom_right(),
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
}
}
diff --git a/cc/layers/painted_scrollbar_layer_impl.cc b/cc/layers/painted_scrollbar_layer_impl.cc
index ea48086..152f14d 100644
--- a/cc/layers/painted_scrollbar_layer_impl.cc
+++ b/cc/layers/painted_scrollbar_layer_impl.cc
@@ -73,6 +73,7 @@
AppendQuadsData* append_quads_data) {
bool premultipled_alpha = true;
bool flipped = false;
+ bool nearest_neighbor = false;
gfx::PointF uv_top_left(0.f, 0.f);
gfx::PointF uv_bottom_right(1.f, 1.f);
gfx::Rect bounds_rect(bounds());
@@ -109,7 +110,8 @@
uv_bottom_right,
SK_ColorTRANSPARENT,
opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
gfx::Rect track_quad_rect = content_bounds_rect;
@@ -130,7 +132,8 @@
uv_bottom_right,
SK_ColorTRANSPARENT,
opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
}
}
diff --git a/cc/layers/picture_layer_impl.cc b/cc/layers/picture_layer_impl.cc
index 1827bea..eb90e95 100644
--- a/cc/layers/picture_layer_impl.cc
+++ b/cc/layers/picture_layer_impl.cc
@@ -1048,8 +1048,12 @@
if (maximum_scale) {
gfx::Size bounds_at_maximum_scale = gfx::ToCeiledSize(
gfx::ScaleSize(raster_source_->GetSize(), maximum_scale));
- if (bounds_at_maximum_scale.GetArea() <=
- layer_tree_impl()->device_viewport_size().GetArea())
+ int64 maximum_area = static_cast<int64>(bounds_at_maximum_scale.width()) *
+ static_cast<int64>(bounds_at_maximum_scale.height());
+ gfx::Size viewport = layer_tree_impl()->device_viewport_size();
+ int64 viewport_area = static_cast<int64>(viewport.width()) *
+ static_cast<int64>(viewport.height());
+ if (maximum_area <= viewport_area)
can_raster_at_maximum_scale = true;
}
// Use the computed scales for the raster scale directly, do not try to use
diff --git a/cc/layers/picture_layer_impl_unittest.cc b/cc/layers/picture_layer_impl_unittest.cc
index ce66675..7c2dbcb 100644
--- a/cc/layers/picture_layer_impl_unittest.cc
+++ b/cc/layers/picture_layer_impl_unittest.cc
@@ -134,7 +134,7 @@
void SetupPendingTree(scoped_refptr<RasterSource> raster_source) {
host_impl_.CreatePendingTree();
- host_impl_.pending_tree()->SetPageScaleFactorAndLimits(1.f, 0.25f, 100.f);
+ host_impl_.pending_tree()->PushPageScaleFromMainThread(1.f, 0.25f, 100.f);
LayerTreeImpl* pending_tree = host_impl_.pending_tree();
// Steal from the recycled tree.
diff --git a/cc/layers/texture_layer.cc b/cc/layers/texture_layer.cc
index d53cfbe..cf1149b 100644
--- a/cc/layers/texture_layer.cc
+++ b/cc/layers/texture_layer.cc
@@ -27,6 +27,7 @@
: Layer(),
client_(client),
flipped_(true),
+ nearest_neighbor_(false),
uv_top_left_(0.f, 0.f),
uv_bottom_right_(1.f, 1.f),
premultiplied_alpha_(true),
@@ -65,6 +66,13 @@
SetNeedsCommit();
}
+void TextureLayer::SetNearestNeighbor(bool nearest_neighbor) {
+ if (nearest_neighbor_ == nearest_neighbor)
+ return;
+ nearest_neighbor_ = nearest_neighbor;
+ SetNeedsCommit();
+}
+
void TextureLayer::SetUV(const gfx::PointF& top_left,
const gfx::PointF& bottom_right) {
if (uv_top_left_ == top_left && uv_bottom_right_ == bottom_right)
@@ -238,6 +246,7 @@
TextureLayerImpl* texture_layer = static_cast<TextureLayerImpl*>(layer);
texture_layer->SetFlipped(flipped_);
+ texture_layer->SetNearestNeighbor(nearest_neighbor_);
texture_layer->SetUVTopLeft(uv_top_left_);
texture_layer->SetUVBottomRight(uv_bottom_right_);
texture_layer->SetVertexOpacity(vertex_opacity_);
diff --git a/cc/layers/texture_layer.h b/cc/layers/texture_layer.h
index fa52a8c..15c9aa0 100644
--- a/cc/layers/texture_layer.h
+++ b/cc/layers/texture_layer.h
@@ -100,6 +100,10 @@
// true.
void SetFlipped(bool flipped);
+ // Sets whether this texture should use nearest neighbor interpolation as
+ // opposed to bilinear. Defaults to false.
+ void SetNearestNeighbor(bool nearest_neighbor);
+
// Sets a UV transform to be used at draw time. Defaults to (0, 0) and (1, 1).
void SetUV(const gfx::PointF& top_left, const gfx::PointF& bottom_right);
@@ -156,6 +160,7 @@
TextureLayerClient* client_;
bool flipped_;
+ bool nearest_neighbor_;
gfx::PointF uv_top_left_;
gfx::PointF uv_bottom_right_;
// [bottom left, top left, top right, bottom right]
diff --git a/cc/layers/texture_layer_impl.cc b/cc/layers/texture_layer_impl.cc
index bcde7cd..b174348 100644
--- a/cc/layers/texture_layer_impl.cc
+++ b/cc/layers/texture_layer_impl.cc
@@ -23,6 +23,7 @@
premultiplied_alpha_(true),
blend_background_color_(false),
flipped_(true),
+ nearest_neighbor_(false),
uv_top_left_(0.f, 0.f),
uv_bottom_right_(1.f, 1.f),
own_mailbox_(false),
@@ -62,6 +63,7 @@
texture_layer->SetVertexOpacity(vertex_opacity_);
texture_layer->SetPremultipliedAlpha(premultiplied_alpha_);
texture_layer->SetBlendBackgroundColor(blend_background_color_);
+ texture_layer->SetNearestNeighbor(nearest_neighbor_);
if (own_mailbox_) {
texture_layer->SetTextureMailbox(texture_mailbox_,
release_callback_.Pass());
@@ -176,7 +178,8 @@
uv_bottom_right_,
bg_color,
vertex_opacity_,
- flipped_);
+ flipped_,
+ nearest_neighbor_);
}
SimpleEnclosedRegion TextureLayerImpl::VisibleContentOpaqueRegion() const {
@@ -211,6 +214,11 @@
SetNeedsPushProperties();
}
+void TextureLayerImpl::SetNearestNeighbor(bool nearest_neighbor) {
+ nearest_neighbor_ = nearest_neighbor;
+ SetNeedsPushProperties();
+}
+
void TextureLayerImpl::SetUVTopLeft(const gfx::PointF top_left) {
uv_top_left_ = top_left;
SetNeedsPushProperties();
diff --git a/cc/layers/texture_layer_impl.h b/cc/layers/texture_layer_impl.h
index 6d38ae1..64de268 100644
--- a/cc/layers/texture_layer_impl.h
+++ b/cc/layers/texture_layer_impl.h
@@ -41,6 +41,7 @@
void SetPremultipliedAlpha(bool premultiplied_alpha);
void SetBlendBackgroundColor(bool blend);
void SetFlipped(bool flipped);
+ void SetNearestNeighbor(bool nearest_neighbor);
void SetUVTopLeft(const gfx::PointF top_left);
void SetUVBottomRight(const gfx::PointF bottom_right);
@@ -63,6 +64,7 @@
bool premultiplied_alpha_;
bool blend_background_color_;
bool flipped_;
+ bool nearest_neighbor_;
gfx::PointF uv_top_left_;
gfx::PointF uv_bottom_right_;
float vertex_opacity_[4];
diff --git a/cc/layers/texture_layer_unittest.cc b/cc/layers/texture_layer_unittest.cc
index f2ee269..4e2f675 100644
--- a/cc/layers/texture_layer_unittest.cc
+++ b/cc/layers/texture_layer_unittest.cc
@@ -205,6 +205,7 @@
// Test properties that should call SetNeedsCommit. All properties need to
// be set to new values in order for SetNeedsCommit to be called.
EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetFlipped(false));
+ EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetNearestNeighbor(true));
EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetUV(
gfx::PointF(0.25f, 0.25f), gfx::PointF(0.75f, 0.75f)));
EXPECT_SET_NEEDS_COMMIT(1, test_layer->SetVertexOpacity(
diff --git a/cc/layers/ui_resource_layer_impl.cc b/cc/layers/ui_resource_layer_impl.cc
index 35d242b..c7653e7 100644
--- a/cc/layers/ui_resource_layer_impl.cc
+++ b/cc/layers/ui_resource_layer_impl.cc
@@ -112,6 +112,7 @@
return;
static const bool flipped = false;
+ static const bool nearest_neighbor = false;
static const bool premultiplied_alpha = true;
DCHECK(!bounds().IsEmpty());
@@ -138,7 +139,8 @@
uv_bottom_right_,
SK_ColorTRANSPARENT,
vertex_opacity_,
- flipped);
+ flipped,
+ nearest_neighbor);
}
const char* UIResourceLayerImpl::LayerTypeAsString() const {
diff --git a/cc/layers/video_layer_impl.cc b/cc/layers/video_layer_impl.cc
index a7e1bde..8401bd2 100644
--- a/cc/layers/video_layer_impl.cc
+++ b/cc/layers/video_layer_impl.cc
@@ -200,6 +200,7 @@
gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = false;
+ bool nearest_neighbor = false;
TextureDrawQuad* texture_quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
texture_quad->SetNew(shared_quad_state,
@@ -212,7 +213,8 @@
uv_bottom_right,
SK_ColorTRANSPARENT,
opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
break;
}
case VideoFrameExternalResources::YUV_RESOURCE: {
@@ -249,6 +251,7 @@
gfx::PointF uv_bottom_right(tex_width_scale, tex_height_scale);
float opacity[] = {1.0f, 1.0f, 1.0f, 1.0f};
bool flipped = false;
+ bool nearest_neighbor = false;
TextureDrawQuad* texture_quad =
render_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
texture_quad->SetNew(shared_quad_state,
@@ -261,7 +264,8 @@
uv_bottom_right,
SK_ColorTRANSPARENT,
opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
break;
}
case VideoFrameExternalResources::STREAM_TEXTURE_RESOURCE: {
diff --git a/cc/output/gl_renderer.cc b/cc/output/gl_renderer.cc
index 49af1c3..13cda6e 100644
--- a/cc/output/gl_renderer.cc
+++ b/cc/output/gl_renderer.cc
@@ -2053,8 +2053,10 @@
GLC(gl_, gl_->Uniform1i(draw_cache_.sampler_location, 0));
// Assume the current active textures is 0.
- ResourceProvider::ScopedReadLockGL locked_quad(resource_provider_,
- draw_cache_.resource_id);
+ ResourceProvider::ScopedSamplerGL locked_quad(
+ resource_provider_,
+ draw_cache_.resource_id,
+ draw_cache_.nearest_neighbor ? GL_NEAREST : GL_LINEAR);
DCHECK_EQ(GL_TEXTURE0, GetActiveTextureUnit(gl_));
GLC(gl_, gl_->BindTexture(GL_TEXTURE_2D, locked_quad.texture_id()));
@@ -2132,12 +2134,14 @@
if (draw_cache_.program_id != binding.program_id ||
draw_cache_.resource_id != resource_id ||
draw_cache_.needs_blending != quad->ShouldDrawWithBlending() ||
+ draw_cache_.nearest_neighbor != quad->nearest_neighbor ||
draw_cache_.background_color != quad->background_color ||
draw_cache_.matrix_data.size() >= 8) {
FlushTextureQuadCache();
draw_cache_.program_id = binding.program_id;
draw_cache_.resource_id = resource_id;
draw_cache_.needs_blending = quad->ShouldDrawWithBlending();
+ draw_cache_.nearest_neighbor = quad->nearest_neighbor;
draw_cache_.background_color = quad->background_color;
draw_cache_.uv_xform_location = binding.tex_transform_location;
diff --git a/cc/output/gl_renderer_draw_cache.cc b/cc/output/gl_renderer_draw_cache.cc
index a0004f2..91581f4 100644
--- a/cc/output/gl_renderer_draw_cache.cc
+++ b/cc/output/gl_renderer_draw_cache.cc
@@ -10,6 +10,7 @@
: program_id(-1),
resource_id(-1),
needs_blending(false),
+ nearest_neighbor(false),
background_color(0),
uv_xform_location(-1),
background_color_location(-1),
diff --git a/cc/output/gl_renderer_draw_cache.h b/cc/output/gl_renderer_draw_cache.h
index f828418..a16c8a5 100644
--- a/cc/output/gl_renderer_draw_cache.h
+++ b/cc/output/gl_renderer_draw_cache.h
@@ -33,6 +33,7 @@
int program_id;
int resource_id;
bool needs_blending;
+ bool nearest_neighbor;
SkColor background_color;
// Information about the program binding that is required to draw.
diff --git a/cc/output/overlay_unittest.cc b/cc/output/overlay_unittest.cc
index 33c6f4a..bb7451d 100644
--- a/cc/output/overlay_unittest.cc
+++ b/cc/output/overlay_unittest.cc
@@ -152,6 +152,7 @@
ResourceProvider::ResourceId resource_id = CreateResource(resource_provider);
bool premultiplied_alpha = false;
bool flipped = false;
+ bool nearest_neighbor = false;
float vertex_opacity[4] = {1.0f, 1.0f, 1.0f, 1.0f};
TextureDrawQuad* overlay_quad =
@@ -166,7 +167,8 @@
kUVBottomRight,
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
return overlay_quad;
}
diff --git a/cc/output/renderer_pixeltest.cc b/cc/output/renderer_pixeltest.cc
index d112ed1..cb14db3 100644
--- a/cc/output/renderer_pixeltest.cc
+++ b/cc/output/renderer_pixeltest.cc
@@ -151,7 +151,8 @@
gfx::PointF(1.0f, 1.0f), // uv_bottom_right
background_color,
vertex_opacity,
- false); // flipped
+ false, // flipped
+ false); // nearest_neighbor
}
typedef ::testing::Types<GLRenderer,
@@ -1955,7 +1956,8 @@
this->device_viewport_size_.height() / texture_rect.height()),
SK_ColorWHITE,
vertex_opacity,
- false); // flipped
+ false, // flipped
+ false); // nearest_neighbor
RenderPassList pass_list;
pass_list.push_back(pass.Pass());
diff --git a/cc/quads/draw_quad_unittest.cc b/cc/quads/draw_quad_unittest.cc
index 5755ea8..95c646b 100644
--- a/cc/quads/draw_quad_unittest.cc
+++ b/cc/quads/draw_quad_unittest.cc
@@ -332,6 +332,14 @@
} \
SETUP_AND_COPY_QUAD_ALL(Type, quad_all);
+#define CREATE_QUAD_10_NEW(Type, a, b, c, d, e, f, g, h, i, j) \
+ Type* quad_new = render_pass->CreateAndAppendDrawQuad<Type>(); \
+ { \
+ QUAD_DATA quad_new->SetNew( \
+ shared_state, quad_rect, a, b, c, d, e, f, g, h, i, j); \
+ } \
+ SETUP_AND_COPY_QUAD_NEW(Type, quad_new);
+
#define CREATE_QUAD_ALL_RP(Type, a, b, c, d, e, f, g, copy_a) \
Type* quad_all = render_pass->CreateAndAppendDrawQuad<Type>(); \
{ \
@@ -541,18 +549,20 @@
gfx::PointF uv_bottom_right(51.5f, 260.f);
const float vertex_opacity[] = { 1.0f, 1.0f, 1.0f, 1.0f };
bool flipped = true;
+ bool nearest_neighbor = true;
CREATE_SHARED_STATE();
- CREATE_QUAD_9_NEW(TextureDrawQuad,
- opaque_rect,
- visible_rect,
- resource_id,
- premultiplied_alpha,
- uv_top_left,
- uv_bottom_right,
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped);
+ CREATE_QUAD_10_NEW(TextureDrawQuad,
+ opaque_rect,
+ visible_rect,
+ resource_id,
+ premultiplied_alpha,
+ uv_top_left,
+ uv_bottom_right,
+ SK_ColorTRANSPARENT,
+ vertex_opacity,
+ flipped,
+ nearest_neighbor);
EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, copy_quad->material);
EXPECT_RECT_EQ(visible_rect, copy_quad->visible_rect);
EXPECT_RECT_EQ(opaque_rect, copy_quad->opaque_rect);
@@ -562,15 +572,17 @@
EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right);
EXPECT_FLOAT_ARRAY_EQ(vertex_opacity, copy_quad->vertex_opacity, 4);
EXPECT_EQ(flipped, copy_quad->flipped);
+ EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor);
- CREATE_QUAD_7_ALL(TextureDrawQuad,
+ CREATE_QUAD_8_ALL(TextureDrawQuad,
resource_id,
premultiplied_alpha,
uv_top_left,
uv_bottom_right,
SK_ColorTRANSPARENT,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
EXPECT_EQ(DrawQuad::TEXTURE_CONTENT, copy_quad->material);
EXPECT_EQ(resource_id, copy_quad->resource_id);
EXPECT_EQ(premultiplied_alpha, copy_quad->premultiplied_alpha);
@@ -578,6 +590,7 @@
EXPECT_EQ(uv_bottom_right, copy_quad->uv_bottom_right);
EXPECT_FLOAT_ARRAY_EQ(vertex_opacity, copy_quad->vertex_opacity, 4);
EXPECT_EQ(flipped, copy_quad->flipped);
+ EXPECT_EQ(nearest_neighbor, copy_quad->nearest_neighbor);
}
TEST(DrawQuadTest, CopyTileDrawQuad) {
@@ -832,18 +845,20 @@
gfx::PointF uv_bottom_right(51.5f, 260.f);
const float vertex_opacity[] = { 1.0f, 1.0f, 1.0f, 1.0f };
bool flipped = true;
+ bool nearest_neighbor = true;
CREATE_SHARED_STATE();
- CREATE_QUAD_9_NEW(TextureDrawQuad,
- opaque_rect,
- visible_rect,
- resource_id,
- premultiplied_alpha,
- uv_top_left,
- uv_bottom_right,
- SK_ColorTRANSPARENT,
- vertex_opacity,
- flipped);
+ CREATE_QUAD_10_NEW(TextureDrawQuad,
+ opaque_rect,
+ visible_rect,
+ resource_id,
+ premultiplied_alpha,
+ uv_top_left,
+ uv_bottom_right,
+ SK_ColorTRANSPARENT,
+ vertex_opacity,
+ flipped,
+ nearest_neighbor);
EXPECT_EQ(resource_id, quad_new->resource_id);
EXPECT_EQ(1, IterateAndCount(quad_new));
EXPECT_EQ(resource_id + 1, quad_new->resource_id);
diff --git a/cc/quads/texture_draw_quad.cc b/cc/quads/texture_draw_quad.cc
index 9ff9744..d430c72 100644
--- a/cc/quads/texture_draw_quad.cc
+++ b/cc/quads/texture_draw_quad.cc
@@ -16,7 +16,8 @@
: resource_id(0),
premultiplied_alpha(false),
background_color(SK_ColorTRANSPARENT),
- flipped(false) {
+ flipped(false),
+ nearest_neighbor(false) {
this->vertex_opacity[0] = 0.f;
this->vertex_opacity[1] = 0.f;
this->vertex_opacity[2] = 0.f;
@@ -33,7 +34,8 @@
const gfx::PointF& uv_bottom_right,
SkColor background_color,
const float vertex_opacity[4],
- bool flipped) {
+ bool flipped,
+ bool nearest_neighbor) {
bool needs_blending = vertex_opacity[0] != 1.0f || vertex_opacity[1] != 1.0f
|| vertex_opacity[2] != 1.0f || vertex_opacity[3] != 1.0f;
DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect,
@@ -48,18 +50,22 @@
this->vertex_opacity[2] = vertex_opacity[2];
this->vertex_opacity[3] = vertex_opacity[3];
this->flipped = flipped;
+ this->nearest_neighbor = nearest_neighbor;
}
void TextureDrawQuad::SetAll(const SharedQuadState* shared_quad_state,
const gfx::Rect& rect,
const gfx::Rect& opaque_rect,
- const gfx::Rect& visible_rect, bool needs_blending,
- unsigned resource_id, bool premultiplied_alpha,
+ const gfx::Rect& visible_rect,
+ bool needs_blending,
+ unsigned resource_id,
+ bool premultiplied_alpha,
const gfx::PointF& uv_top_left,
const gfx::PointF& uv_bottom_right,
SkColor background_color,
const float vertex_opacity[4],
- bool flipped) {
+ bool flipped,
+ bool nearest_neighbor) {
DrawQuad::SetAll(shared_quad_state, DrawQuad::TEXTURE_CONTENT, rect,
opaque_rect, visible_rect, needs_blending);
this->resource_id = resource_id;
@@ -72,6 +78,7 @@
this->vertex_opacity[2] = vertex_opacity[2];
this->vertex_opacity[3] = vertex_opacity[3];
this->flipped = flipped;
+ this->nearest_neighbor = nearest_neighbor;
}
void TextureDrawQuad::IterateResources(
@@ -103,6 +110,7 @@
value->EndArray();
value->SetBoolean("flipped", flipped);
+ value->SetBoolean("nearest_neighbor", nearest_neighbor);
}
} // namespace cc
diff --git a/cc/quads/texture_draw_quad.h b/cc/quads/texture_draw_quad.h
index 9137d51..990b276 100644
--- a/cc/quads/texture_draw_quad.h
+++ b/cc/quads/texture_draw_quad.h
@@ -26,7 +26,8 @@
const gfx::PointF& uv_bottom_right,
SkColor background_color,
const float vertex_opacity[4],
- bool flipped);
+ bool flipped,
+ bool nearest_neighbor);
void SetAll(const SharedQuadState* shared_quad_state,
const gfx::Rect& rect,
@@ -39,7 +40,8 @@
const gfx::PointF& uv_bottom_right,
SkColor background_color,
const float vertex_opacity[4],
- bool flipped);
+ bool flipped,
+ bool nearest_neighbor);
unsigned resource_id;
bool premultiplied_alpha;
@@ -48,6 +50,7 @@
SkColor background_color;
float vertex_opacity[4];
bool flipped;
+ bool nearest_neighbor;
void IterateResources(const ResourceIteratorCallback& callback) override;
diff --git a/cc/resources/resource_provider.cc b/cc/resources/resource_provider.cc
index fe7cc00..c0e8f1b 100644
--- a/cc/resources/resource_provider.cc
+++ b/cc/resources/resource_provider.cc
@@ -615,7 +615,7 @@
gfx::Size(),
Resource::External,
mailbox.target(),
- GL_LINEAR,
+ mailbox.nearest_neighbor() ? GL_NEAREST : GL_LINEAR,
0,
GL_CLAMP_TO_EDGE,
TextureHintImmutable,
diff --git a/cc/resources/resource_provider_unittest.cc b/cc/resources/resource_provider_unittest.cc
index 34b604a..2c8ed58 100644
--- a/cc/resources/resource_provider_unittest.cc
+++ b/cc/resources/resource_provider_unittest.cc
@@ -2603,89 +2603,156 @@
EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
}
-TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D) {
+class ResourceProviderTestTextureMailboxGLFilters
+ : public ResourceProviderTest {
+ public:
+ static void RunTest(TestSharedBitmapManager* shared_bitmap_manager,
+ TestGpuMemoryBufferManager* gpu_memory_buffer_manager,
+ BlockingTaskRunner* main_thread_task_runner,
+ bool mailbox_nearest_neighbor,
+ GLenum sampler_filter) {
+ scoped_ptr<TextureStateTrackingContext> context_owned(
+ new TextureStateTrackingContext);
+ TextureStateTrackingContext* context = context_owned.get();
+
+ FakeOutputSurfaceClient output_surface_client;
+ scoped_ptr<OutputSurface> output_surface(
+ FakeOutputSurface::Create3d(context_owned.Pass()));
+ CHECK(output_surface->BindToClient(&output_surface_client));
+
+ scoped_ptr<ResourceProvider> resource_provider(
+ ResourceProvider::Create(output_surface.get(),
+ shared_bitmap_manager,
+ gpu_memory_buffer_manager,
+ main_thread_task_runner,
+ 0,
+ false,
+ 1));
+
+ unsigned texture_id = 1;
+ uint32 sync_point = 30;
+ unsigned target = GL_TEXTURE_2D;
+
+ EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
+ EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
+ EXPECT_CALL(*context, insertSyncPoint()).Times(0);
+ EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
+ EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
+
+ gpu::Mailbox gpu_mailbox;
+ memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
+ uint32 release_sync_point = 0;
+ bool lost_resource = false;
+ BlockingTaskRunner* mailbox_task_runner = NULL;
+ scoped_ptr<SingleReleaseCallbackImpl> callback =
+ SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback,
+ &release_sync_point,
+ &lost_resource,
+ &mailbox_task_runner));
+
+ TextureMailbox mailbox(gpu_mailbox, target, sync_point);
+ mailbox.set_nearest_neighbor(mailbox_nearest_neighbor);
+
+ ResourceProvider::ResourceId id =
+ resource_provider->CreateResourceFromTextureMailbox(mailbox,
+ callback.Pass());
+ EXPECT_NE(0u, id);
+
+ Mock::VerifyAndClearExpectations(context);
+
+ {
+ // Mailbox sync point WaitSyncPoint before using the texture.
+ EXPECT_CALL(*context, waitSyncPoint(sync_point));
+ resource_provider->WaitSyncPointIfNeeded(id);
+ Mock::VerifyAndClearExpectations(context);
+
+ // Using the texture does a consume of the mailbox.
+ EXPECT_CALL(*context, bindTexture(target, texture_id)).Times(2);
+ EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _));
+
+ EXPECT_CALL(*context, insertSyncPoint()).Times(0);
+ EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
+
+ // The sampler will reset these if |mailbox_nearest_neighbor| does not
+ // match |sampler_filter|.
+ if (mailbox_nearest_neighbor != (sampler_filter == GL_NEAREST)) {
+ EXPECT_CALL(*context, texParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, sampler_filter));
+ EXPECT_CALL(*context, texParameteri(
+ GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, sampler_filter));
+ }
+
+ ResourceProvider::ScopedSamplerGL lock(
+ resource_provider.get(), id, sampler_filter);
+ Mock::VerifyAndClearExpectations(context);
+
+ // When done with it, a sync point should be inserted, but no produce is
+ // necessary.
+ EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
+ EXPECT_CALL(*context, insertSyncPoint());
+ EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
+
+ EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
+ EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
+ }
+
+ resource_provider->DeleteResource(id);
+ EXPECT_EQ(0u, release_sync_point);
+ EXPECT_FALSE(lost_resource);
+ EXPECT_EQ(main_thread_task_runner, mailbox_task_runner);
+ }
+};
+
+TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D_LinearToLinear) {
// Mailboxing is only supported for GL textures.
if (GetParam() != ResourceProvider::GLTexture)
return;
- scoped_ptr<TextureStateTrackingContext> context_owned(
- new TextureStateTrackingContext);
- TextureStateTrackingContext* context = context_owned.get();
+ ResourceProviderTestTextureMailboxGLFilters::RunTest(
+ shared_bitmap_manager_.get(),
+ gpu_memory_buffer_manager_.get(),
+ main_thread_task_runner_.get(),
+ false,
+ GL_LINEAR);
+}
- FakeOutputSurfaceClient output_surface_client;
- scoped_ptr<OutputSurface> output_surface(
- FakeOutputSurface::Create3d(context_owned.Pass()));
- CHECK(output_surface->BindToClient(&output_surface_client));
+TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D_NearestToNearest) {
+ // Mailboxing is only supported for GL textures.
+ if (GetParam() != ResourceProvider::GLTexture)
+ return;
- scoped_ptr<ResourceProvider> resource_provider(
- ResourceProvider::Create(output_surface.get(),
- shared_bitmap_manager_.get(),
- gpu_memory_buffer_manager_.get(),
- main_thread_task_runner_.get(),
- 0,
- false,
- 1));
+ ResourceProviderTestTextureMailboxGLFilters::RunTest(
+ shared_bitmap_manager_.get(),
+ gpu_memory_buffer_manager_.get(),
+ main_thread_task_runner_.get(),
+ true,
+ GL_NEAREST);
+}
- unsigned texture_id = 1;
- uint32 sync_point = 30;
- unsigned target = GL_TEXTURE_2D;
+TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D_NearestToLinear) {
+ // Mailboxing is only supported for GL textures.
+ if (GetParam() != ResourceProvider::GLTexture)
+ return;
- EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
- EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
- EXPECT_CALL(*context, insertSyncPoint()).Times(0);
- EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
- EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
+ ResourceProviderTestTextureMailboxGLFilters::RunTest(
+ shared_bitmap_manager_.get(),
+ gpu_memory_buffer_manager_.get(),
+ main_thread_task_runner_.get(),
+ true,
+ GL_LINEAR);
+}
- gpu::Mailbox gpu_mailbox;
- memcpy(gpu_mailbox.name, "Hello world", strlen("Hello world") + 1);
- uint32 release_sync_point = 0;
- bool lost_resource = false;
- BlockingTaskRunner* main_thread_task_runner = NULL;
- scoped_ptr<SingleReleaseCallbackImpl> callback =
- SingleReleaseCallbackImpl::Create(base::Bind(&ReleaseCallback,
- &release_sync_point,
- &lost_resource,
- &main_thread_task_runner));
+TEST_P(ResourceProviderTest, TextureMailbox_GLTexture2D_LinearToNearest) {
+ // Mailboxing is only supported for GL textures.
+ if (GetParam() != ResourceProvider::GLTexture)
+ return;
- TextureMailbox mailbox(gpu_mailbox, target, sync_point);
-
- ResourceProvider::ResourceId id =
- resource_provider->CreateResourceFromTextureMailbox(
- mailbox, callback.Pass());
- EXPECT_NE(0u, id);
-
- Mock::VerifyAndClearExpectations(context);
-
- {
- // Mailbox sync point WaitSyncPoint before using the texture.
- EXPECT_CALL(*context, waitSyncPoint(sync_point));
- resource_provider->WaitSyncPointIfNeeded(id);
- Mock::VerifyAndClearExpectations(context);
-
- // Using the texture does a consume of the mailbox.
- EXPECT_CALL(*context, bindTexture(target, texture_id));
- EXPECT_CALL(*context, consumeTextureCHROMIUM(target, _));
-
- EXPECT_CALL(*context, insertSyncPoint()).Times(0);
- EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
-
- ResourceProvider::ScopedReadLockGL lock(resource_provider.get(), id);
- Mock::VerifyAndClearExpectations(context);
-
- // When done with it, a sync point should be inserted, but no produce is
- // necessary.
- EXPECT_CALL(*context, bindTexture(_, _)).Times(0);
- EXPECT_CALL(*context, insertSyncPoint());
- EXPECT_CALL(*context, produceTextureCHROMIUM(_, _)).Times(0);
-
- EXPECT_CALL(*context, waitSyncPoint(_)).Times(0);
- EXPECT_CALL(*context, consumeTextureCHROMIUM(_, _)).Times(0);
- }
-
- resource_provider->DeleteResource(id);
- EXPECT_EQ(0u, release_sync_point);
- EXPECT_FALSE(lost_resource);
- EXPECT_EQ(main_thread_task_runner_.get(), main_thread_task_runner);
+ ResourceProviderTestTextureMailboxGLFilters::RunTest(
+ shared_bitmap_manager_.get(),
+ gpu_memory_buffer_manager_.get(),
+ main_thread_task_runner_.get(),
+ false,
+ GL_NEAREST);
}
TEST_P(ResourceProviderTest, TextureMailbox_GLTextureExternalOES) {
diff --git a/cc/resources/texture_mailbox.cc b/cc/resources/texture_mailbox.cc
index 92736f4..07cbec0 100644
--- a/cc/resources/texture_mailbox.cc
+++ b/cc/resources/texture_mailbox.cc
@@ -14,20 +14,23 @@
TextureMailbox::TextureMailbox(const gpu::MailboxHolder& mailbox_holder)
: mailbox_holder_(mailbox_holder),
shared_memory_(NULL),
- allow_overlay_(false) {}
+ allow_overlay_(false),
+ nearest_neighbor_(false) {}
TextureMailbox::TextureMailbox(const gpu::Mailbox& mailbox,
uint32 target,
uint32 sync_point)
: mailbox_holder_(mailbox, target, sync_point),
shared_memory_(NULL),
- allow_overlay_(false) {}
+ allow_overlay_(false),
+ nearest_neighbor_(false) {}
TextureMailbox::TextureMailbox(base::SharedMemory* shared_memory,
const gfx::Size& size)
: shared_memory_(shared_memory),
shared_memory_size_(size),
- allow_overlay_(false) {
+ allow_overlay_(false),
+ nearest_neighbor_(false) {
// If an embedder of cc gives an invalid TextureMailbox, we should crash
// here to identify the offender.
CHECK(SharedBitmap::VerifySizeInBytes(shared_memory_size_));
diff --git a/cc/resources/texture_mailbox.h b/cc/resources/texture_mailbox.h
index 4a0b76a..9bf41e1 100644
--- a/cc/resources/texture_mailbox.h
+++ b/cc/resources/texture_mailbox.h
@@ -41,6 +41,10 @@
bool allow_overlay() const { return allow_overlay_; }
void set_allow_overlay(bool allow_overlay) { allow_overlay_ = allow_overlay; }
+ bool nearest_neighbor() const { return nearest_neighbor_; }
+ void set_nearest_neighbor(bool nearest_neighbor) {
+ nearest_neighbor_ = nearest_neighbor;
+ }
base::SharedMemory* shared_memory() const { return shared_memory_; }
gfx::Size shared_memory_size() const { return shared_memory_size_; }
@@ -51,6 +55,7 @@
base::SharedMemory* shared_memory_;
gfx::Size shared_memory_size_;
bool allow_overlay_;
+ bool nearest_neighbor_;
};
} // namespace cc
diff --git a/cc/surfaces/surface_aggregator_unittest.cc b/cc/surfaces/surface_aggregator_unittest.cc
index 1daff52..3e48311 100644
--- a/cc/surfaces/surface_aggregator_unittest.cc
+++ b/cc/surfaces/surface_aggregator_unittest.cc
@@ -1275,6 +1275,7 @@
SkColor background_color = SK_ColorGREEN;
const float vertex_opacity[4] = {0.f, 0.f, 1.f, 1.f};
bool flipped = false;
+ bool nearest_neighbor = false;
quad->SetAll(sqs,
rect,
opaque_rect,
@@ -1286,7 +1287,8 @@
uv_bottom_right,
background_color,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
quad->shared_quad_state = sqs;
}
diff --git a/cc/test/fake_layer_tree_host_impl.cc b/cc/test/fake_layer_tree_host_impl.cc
index 305b856..bfac501 100644
--- a/cc/test/fake_layer_tree_host_impl.cc
+++ b/cc/test/fake_layer_tree_host_impl.cc
@@ -52,7 +52,7 @@
void FakeLayerTreeHostImpl::CreatePendingTree() {
LayerTreeHostImpl::CreatePendingTree();
float arbitrary_large_page_scale = 100000.f;
- pending_tree()->SetPageScaleFactorAndLimits(
+ pending_tree()->PushPageScaleFromMainThread(
1.f, 1.f / arbitrary_large_page_scale, arbitrary_large_page_scale);
}
diff --git a/cc/test/render_pass_test_common.cc b/cc/test/render_pass_test_common.cc
index a667dce..b79fc1f 100644
--- a/cc/test/render_pass_test_common.cc
+++ b/cc/test/render_pass_test_common.cc
@@ -171,6 +171,7 @@
gfx::PointF(1.f, 1.f),
SK_ColorTRANSPARENT,
vertex_opacity,
+ false,
false);
TextureDrawQuad* mailbox_texture_quad =
@@ -185,6 +186,7 @@
gfx::PointF(1.f, 1.f),
SK_ColorTRANSPARENT,
vertex_opacity,
+ false,
false);
TileDrawQuad* scaled_tile_quad =
diff --git a/cc/trees/layer_tree_host.cc b/cc/trees/layer_tree_host.cc
index 6c7cfe0..361fae1 100644
--- a/cc/trees/layer_tree_host.cc
+++ b/cc/trees/layer_tree_host.cc
@@ -117,7 +117,8 @@
num_failed_recreate_attempts_(0),
settings_(settings),
debug_state_(settings.initial_debug_state),
- top_controls_layout_height_(0.f),
+ top_controls_shrink_blink_size_(false),
+ top_controls_height_(0.f),
top_controls_content_offset_(0.f),
device_scale_factor_(1.f),
visible_(true),
@@ -360,20 +361,24 @@
sync_tree->RegisterSelection(selection_start_, selection_end_);
- float page_scale_delta =
- sync_tree->page_scale_delta() / sync_tree->sent_page_scale_delta();
- sync_tree->SetPageScaleValues(page_scale_factor_,
- min_page_scale_factor_,
- max_page_scale_factor_,
- page_scale_delta);
- sync_tree->set_sent_page_scale_delta(1.f);
+ sync_tree->PushPageScaleFromMainThread(
+ page_scale_factor_, min_page_scale_factor_, max_page_scale_factor_);
sync_tree->PassSwapPromises(&swap_promise_list_);
- sync_tree->set_top_controls_layout_height(top_controls_layout_height_);
+ // Track the change in top controls height to offset the top_controls_delta
+ // properly. This is so that the top controls offset will be maintained
+ // across height changes.
+ float top_controls_height_delta =
+ sync_tree->top_controls_height() - top_controls_height_;
+
+ sync_tree->set_top_controls_shrink_blink_size(
+ top_controls_shrink_blink_size_);
+ sync_tree->set_top_controls_height(top_controls_height_);
sync_tree->set_top_controls_content_offset(top_controls_content_offset_);
sync_tree->set_top_controls_delta(sync_tree->top_controls_delta() -
- sync_tree->sent_top_controls_delta());
+ sync_tree->sent_top_controls_delta() -
+ top_controls_height_delta);
sync_tree->set_sent_top_controls_delta(0.f);
host_impl->SetUseGpuRasterization(UseGpuRasterization());
@@ -673,11 +678,19 @@
SetNeedsCommit();
}
-void LayerTreeHost::SetTopControlsLayoutHeight(float height) {
- if (top_controls_layout_height_ == height)
+void LayerTreeHost::SetTopControlsShrinkBlinkSize(bool shrink) {
+ if (top_controls_shrink_blink_size_ == shrink)
return;
- top_controls_layout_height_ = height;
+ top_controls_shrink_blink_size_ = shrink;
+ SetNeedsCommit();
+}
+
+void LayerTreeHost::SetTopControlsHeight(float height) {
+ if (top_controls_height_ == height)
+ return;
+
+ top_controls_height_ = height;
SetNeedsCommit();
}
diff --git a/cc/trees/layer_tree_host.h b/cc/trees/layer_tree_host.h
index 0ad4c6f..9d758c8 100644
--- a/cc/trees/layer_tree_host.h
+++ b/cc/trees/layer_tree_host.h
@@ -212,7 +212,8 @@
GpuRasterizationStatus GetGpuRasterizationStatus() const;
void SetViewportSize(const gfx::Size& device_viewport_size);
- void SetTopControlsLayoutHeight(float height);
+ void SetTopControlsShrinkBlinkSize(bool shrink);
+ void SetTopControlsHeight(float height);
void SetTopControlsContentOffset(float offset);
gfx::Size device_viewport_size() const { return device_viewport_size_; }
@@ -415,7 +416,8 @@
LayerTreeDebugState debug_state_;
gfx::Size device_viewport_size_;
- float top_controls_layout_height_;
+ bool top_controls_shrink_blink_size_;
+ float top_controls_height_;
float top_controls_content_offset_;
float device_scale_factor_;
diff --git a/cc/trees/layer_tree_host_common_perftest.cc b/cc/trees/layer_tree_host_common_perftest.cc
index 39bcbe6..2fd2146 100644
--- a/cc/trees/layer_tree_host_common_perftest.cc
+++ b/cc/trees/layer_tree_host_common_perftest.cc
@@ -147,7 +147,7 @@
LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
active_tree->root_layer(), active_tree->DrawViewportSize(),
host_impl->DrawTransform(), active_tree->device_scale_factor(),
- active_tree->total_page_scale_factor(),
+ active_tree->current_page_scale_factor(),
active_tree->InnerViewportContainerLayer(), max_texture_size,
host_impl->settings().can_use_lcd_text,
host_impl->settings().layers_always_allowed_lcd_text,
diff --git a/cc/trees/layer_tree_host_impl.cc b/cc/trees/layer_tree_host_impl.cc
index 0a45cb7..566fb57 100644
--- a/cc/trees/layer_tree_host_impl.cc
+++ b/cc/trees/layer_tree_host_impl.cc
@@ -237,22 +237,16 @@
SetDebugState(settings.initial_debug_state);
// LTHI always has an active tree.
- active_tree_ = LayerTreeImpl::create(this);
+ active_tree_ = LayerTreeImpl::create(this, new SyncedProperty<ScaleGroup>());
+
TRACE_EVENT_OBJECT_CREATED_WITH_ID(
TRACE_DISABLED_BY_DEFAULT("cc.debug"), "cc::LayerTreeHostImpl", id_);
if (settings.calculate_top_controls_position) {
top_controls_manager_ =
TopControlsManager::Create(this,
- settings.top_controls_height,
settings.top_controls_show_threshold,
settings.top_controls_hide_threshold);
-
- // TODO(bokan): This is a quick fix. The browser should lock the top
- // controls to shown on creation but this appears not to work. Tracked
- // in crbug.com/417680.
- // Initialize with top controls showing.
- SetControlsTopOffset(0.f);
}
}
@@ -417,12 +411,10 @@
CubicBezierTimingFunction::Create(.8, 0, .3, .9);
// TODO(miletus) : Pass in ScrollOffset.
- page_scale_animation_ =
- PageScaleAnimation::Create(ScrollOffsetToVector2dF(scroll_total),
- active_tree_->total_page_scale_factor(),
- viewport_size,
- scaled_scrollable_size,
- timing_function.Pass());
+ page_scale_animation_ = PageScaleAnimation::Create(
+ ScrollOffsetToVector2dF(scroll_total),
+ active_tree_->current_page_scale_factor(), viewport_size,
+ scaled_scrollable_size, timing_function.Pass());
if (anchor_point) {
gfx::Vector2dF anchor(target_offset);
@@ -675,6 +667,7 @@
overhang_resource_scaled_size.height()),
screen_background_color,
vertex_opacity,
+ false,
false);
}
}
@@ -1108,7 +1101,8 @@
void LayerTreeHostImpl::ResetTreesForTesting() {
if (active_tree_)
active_tree_->DetachLayerTree();
- active_tree_ = LayerTreeImpl::create(this);
+ active_tree_ =
+ LayerTreeImpl::create(this, active_tree()->page_scale_factor());
if (pending_tree_)
pending_tree_->DetachLayerTree();
pending_tree_ = nullptr;
@@ -1432,7 +1426,7 @@
CompositorFrameMetadata LayerTreeHostImpl::MakeCompositorFrameMetadata() const {
CompositorFrameMetadata metadata;
metadata.device_scale_factor = device_scale_factor_;
- metadata.page_scale_factor = active_tree_->total_page_scale_factor();
+ metadata.page_scale_factor = active_tree_->current_page_scale_factor();
metadata.scrollable_viewport_size = active_tree_->ScrollableViewportSize();
metadata.root_layer_size = active_tree_->ScrollableSize();
metadata.min_page_scale_factor = active_tree_->min_page_scale_factor();
@@ -1661,9 +1655,13 @@
// Adjust the inner viewport by shrinking/expanding the container to account
// for the change in top controls height since the last Resize from Blink.
+ float top_controls_layout_height =
+ active_tree_->top_controls_shrink_blink_size()
+ ? active_tree_->top_controls_height()
+ : 0.f;
inner_container->SetBoundsDelta(
- gfx::Vector2dF(0, active_tree_->top_controls_layout_height() -
- active_tree_->total_top_controls_content_offset()));
+ gfx::Vector2dF(0, top_controls_layout_height -
+ active_tree_->total_top_controls_content_offset()));
if (!outer_container || outer_container->BoundsForScrolling().IsEmpty())
return;
@@ -1686,15 +1684,6 @@
anchor.ResetViewportToAnchoredPosition();
}
-void LayerTreeHostImpl::SetTopControlsLayoutHeight(float height) {
- if (active_tree_->top_controls_layout_height() == height)
- return;
-
- active_tree_->set_top_controls_layout_height(height);
- UpdateViewportContainerSizes();
- SetFullRootLayerDamage();
-}
-
void LayerTreeHostImpl::SynchronouslyInitializeAllTiles() {
// Only valid for the single-threaded non-scheduled/synchronous case
// using the zero copy raster worker pool.
@@ -1758,17 +1747,16 @@
if (recycle_tree_)
recycle_tree_.swap(pending_tree_);
else
- pending_tree_ = LayerTreeImpl::create(this);
+ pending_tree_ =
+ LayerTreeImpl::create(this, active_tree()->page_scale_factor());
// Update the delta from the active tree, which may have
// adjusted its delta prior to the pending tree being created.
- DCHECK_EQ(1.f, pending_tree_->sent_page_scale_delta());
DCHECK_EQ(0.f, pending_tree_->sent_top_controls_delta());
- pending_tree_->SetPageScaleDelta(active_tree_->page_scale_delta() /
- active_tree_->sent_page_scale_delta());
pending_tree_->set_top_controls_delta(
active_tree_->top_controls_delta() -
active_tree_->sent_top_controls_delta());
+ pending_tree_->set_top_controls_height(active_tree_->top_controls_height());
client_->OnCanDrawStateChanged(CanDraw());
TRACE_EVENT_ASYNC_BEGIN0("cc", "PendingTree:waiting", pending_tree_.get());
@@ -1805,9 +1793,11 @@
root_layer_scroll_offset_delegate_);
if (top_controls_manager_) {
+ top_controls_manager_->SetTopControlsHeight(
+ active_tree_->top_controls_height());
top_controls_manager_->SetControlsTopOffset(
active_tree_->total_top_controls_content_offset() -
- top_controls_manager_->top_controls_height());
+ active_tree_->top_controls_height());
}
UpdateViewportContainerSizes();
@@ -2232,6 +2222,10 @@
SetFullRootLayerDamage();
}
+void LayerTreeHostImpl::SetPageScaleOnActiveTree(float page_scale_factor) {
+ active_tree_->SetPageScaleOnActiveTree(page_scale_factor);
+}
+
const gfx::Rect LayerTreeHostImpl::ViewportRectForTilePriority() const {
if (viewport_rect_for_tile_priority_.IsEmpty())
return DeviceViewport();
@@ -2271,13 +2265,13 @@
void LayerTreeHostImpl::SetControlsTopOffset(float offset) {
float current_top_offset = active_tree_->top_controls_content_offset() -
- top_controls_manager_->top_controls_height();
+ active_tree_->top_controls_height();
active_tree_->set_top_controls_delta(offset - current_top_offset);
}
float LayerTreeHostImpl::ControlsTopOffset() const {
return active_tree_->total_top_controls_content_offset() -
- top_controls_manager_->top_controls_height();
+ active_tree_->top_controls_height();
}
void LayerTreeHostImpl::BindToClient(InputHandlerClient* client) {
@@ -2647,7 +2641,7 @@
viewport_point, pending_delta);
} else {
applied_delta = ScrollLayerWithLocalDelta(
- layer_impl, pending_delta, active_tree_->total_page_scale_factor());
+ layer_impl, pending_delta, active_tree_->current_page_scale_factor());
}
const float kEpsilon = 0.1f;
@@ -2951,18 +2945,15 @@
// Keep the center-of-pinch anchor specified by (x, y) in a stable
// position over the course of the magnify.
- float page_scale_delta = active_tree_->page_scale_delta();
- gfx::PointF previous_scale_anchor =
- gfx::ScalePoint(anchor, 1.f / page_scale_delta);
- active_tree_->SetPageScaleDelta(page_scale_delta * magnify_delta);
- page_scale_delta = active_tree_->page_scale_delta();
- gfx::PointF new_scale_anchor =
- gfx::ScalePoint(anchor, 1.f / page_scale_delta);
+ float page_scale = active_tree_->current_page_scale_factor();
+ gfx::PointF previous_scale_anchor = gfx::ScalePoint(anchor, 1.f / page_scale);
+ active_tree_->SetPageScaleOnActiveTree(page_scale * magnify_delta);
+ page_scale = active_tree_->current_page_scale_factor();
+ gfx::PointF new_scale_anchor = gfx::ScalePoint(anchor, 1.f / page_scale);
gfx::Vector2dF move = previous_scale_anchor - new_scale_anchor;
previous_pinch_anchor_ = anchor;
- move.Scale(1 / active_tree_->page_scale_factor());
// If clamping the inner viewport scroll offset causes a change, it should
// be accounted for from the intended move.
move -= InnerViewportScrollLayer()->ClampScrollToMaxScrollOffset();
@@ -3029,8 +3020,8 @@
scoped_ptr<ScrollAndScaleSet> scroll_info(new ScrollAndScaleSet());
CollectScrollDeltas(scroll_info.get(), active_tree_->root_layer());
- scroll_info->page_scale_delta = active_tree_->page_scale_delta();
- active_tree_->set_sent_page_scale_delta(scroll_info->page_scale_delta);
+ scroll_info->page_scale_delta =
+ active_tree_->page_scale_factor()->PullDeltaForMainThread();
scroll_info->swap_promises.swap(swap_promises_for_main_thread_scroll_update_);
scroll_info->top_controls_delta = active_tree()->top_controls_delta();
active_tree_->set_sent_top_controls_delta(scroll_info->top_controls_delta);
@@ -3072,9 +3063,8 @@
if (!page_scale_animation_->IsAnimationStarted())
page_scale_animation_->StartAnimation(monotonic_time);
- active_tree_->SetPageScaleDelta(
- page_scale_animation_->PageScaleFactorAtTime(monotonic_time) /
- active_tree_->page_scale_factor());
+ active_tree_->SetPageScaleOnActiveTree(
+ page_scale_animation_->PageScaleFactorAtTime(monotonic_time));
gfx::ScrollOffset next_scroll = gfx::ScrollOffset(
page_scale_animation_->ScrollOffsetAtTime(monotonic_time));
@@ -3106,7 +3096,7 @@
return;
ScrollViewportBy(gfx::ScaleVector2d(
- scroll, 1.f / active_tree_->total_page_scale_factor()));
+ scroll, 1.f / active_tree_->current_page_scale_factor()));
SetNeedsRedraw();
client_->SetNeedsCommitOnImplThread();
client_->RenewTreePriority();
diff --git a/cc/trees/layer_tree_host_impl.h b/cc/trees/layer_tree_host_impl.h
index c248a21..1702e09 100644
--- a/cc/trees/layer_tree_host_impl.h
+++ b/cc/trees/layer_tree_host_impl.h
@@ -18,6 +18,7 @@
#include "cc/animation/animation_registrar.h"
#include "cc/animation/scrollbar_animation_controller.h"
#include "cc/base/cc_export.h"
+#include "cc/base/synced_property.h"
#include "cc/debug/micro_benchmark_controller_impl.h"
#include "cc/input/input_handler.h"
#include "cc/input/layer_scroll_offset_delegate.h"
@@ -359,6 +360,8 @@
void SetDeviceScaleFactor(float device_scale_factor);
float device_scale_factor() const { return device_scale_factor_; }
+ void SetPageScaleOnActiveTree(float page_scale_factor);
+
const gfx::Transform& DrawTransform() const;
scoped_ptr<ScrollAndScaleSet> ProcessScrollDeltas();
@@ -489,8 +492,6 @@
void GetPictureLayerImplPairs(std::vector<PictureLayerImpl::Pair>* layers,
bool need_valid_tile_priorities) const;
- void SetTopControlsLayoutHeight(float height);
-
void SetRequiresHighResToDraw() { requires_high_res_to_draw_ = true; }
void ResetRequiresHighResToDraw() { requires_high_res_to_draw_ = false; }
bool RequiresHighResToDraw() const { return requires_high_res_to_draw_; }
diff --git a/cc/trees/layer_tree_host_impl_unittest.cc b/cc/trees/layer_tree_host_impl_unittest.cc
index 4e070e2..934946b 100644
--- a/cc/trees/layer_tree_host_impl_unittest.cc
+++ b/cc/trees/layer_tree_host_impl_unittest.cc
@@ -155,8 +155,8 @@
reduce_memory_result_ = reduce_memory_result;
}
- bool CreateHostImpl(const LayerTreeSettings& settings,
- scoped_ptr<OutputSurface> output_surface) {
+ virtual bool CreateHostImpl(const LayerTreeSettings& settings,
+ scoped_ptr<OutputSurface> output_surface) {
host_impl_ = LayerTreeHostImpl::Create(settings,
this,
&proxy_,
@@ -919,9 +919,9 @@
// The impl-based pinch zoom should adjust the max scroll position.
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(
+ host_impl_->active_tree()->PushPageScaleFromMainThread(
page_scale_factor, min_page_scale, max_page_scale);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->SetPageScaleOnActiveTree(page_scale_factor);
scroll_layer->SetScrollDelta(gfx::Vector2d());
float page_scale_delta = 2.f;
@@ -947,9 +947,9 @@
// Scrolling after a pinch gesture should always be in local space. The
// scroll deltas have the page scale factor applied.
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(
+ host_impl_->active_tree()->PushPageScaleFromMainThread(
page_scale_factor, min_page_scale, max_page_scale);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->SetPageScaleOnActiveTree(page_scale_factor);
scroll_layer->SetScrollDelta(gfx::Vector2d());
float page_scale_delta = 2.f;
@@ -1004,8 +1004,7 @@
// Basic pinch zoom in gesture
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollDelta(gfx::Vector2d());
@@ -1026,8 +1025,7 @@
// Zoom-in clamping
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollDelta(gfx::Vector2d());
float page_scale_delta = 10.f;
@@ -1045,8 +1043,7 @@
// Zoom-out clamping
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollDelta(gfx::Vector2d());
scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
@@ -1067,8 +1064,7 @@
// Two-finger panning should not happen based on pinch events only
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollDelta(gfx::Vector2d());
scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20));
@@ -1089,8 +1085,7 @@
// Two-finger panning should work with interleaved scroll events
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollDelta(gfx::Vector2d());
scroll_layer->SetScrollOffset(gfx::ScrollOffset(20, 20));
@@ -1112,9 +1107,7 @@
// Two-finger panning should work when starting fully zoomed out.
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(0.5f,
- 0.5f,
- 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(0.5f, 0.5f, 4.f);
scroll_layer->SetScrollDelta(gfx::Vector2d());
scroll_layer->SetScrollOffset(gfx::ScrollOffset(0, 0));
@@ -1152,8 +1145,7 @@
// Non-anchor zoom-in
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
@@ -1196,8 +1188,7 @@
// Anchor zoom-out
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
@@ -1253,8 +1244,7 @@
// Anchor zoom with unchanged page scale should not change scroll or scale.
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
scroll_layer->SetScrollOffset(gfx::ScrollOffset(50, 50));
@@ -1291,8 +1281,7 @@
float min_page_scale = 0.5f;
float max_page_scale = 4.f;
- host_impl_->sync_tree()->SetPageScaleFactorAndLimits(1.f,
- min_page_scale,
+ host_impl_->sync_tree()->PushPageScaleFromMainThread(1.f, min_page_scale,
max_page_scale);
host_impl_->ActivateSyncTree();
@@ -1522,7 +1511,7 @@
base::TimeTicks fake_now = gfx::FrameTime::Now();
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 1.f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, 4.f);
EXPECT_EQ(base::TimeDelta(), requested_scrollbar_animation_delay_);
EXPECT_FALSE(did_request_animate_);
@@ -1549,7 +1538,7 @@
EXPECT_FALSE(did_request_animate_);
// Make page scale > min so that subsequent scrolls will trigger fades.
- host_impl_->active_tree()->SetPageScaleDelta(1.1f);
+ host_impl_->SetPageScaleOnActiveTree(1.1f);
// After a scroll, a fade animation should be scheduled about 20ms from now.
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Wheel);
@@ -1664,7 +1653,7 @@
TEST_F(LayerTreeHostImplTest, CompositorFrameMetadata) {
SetupScrollAndContentsLayers(gfx::Size(100, 100));
host_impl_->SetViewportSize(gfx::Size(50, 50));
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
DrawFrame();
{
CompositorFrameMetadata metadata =
@@ -1712,8 +1701,8 @@
// Likewise if set from the main thread.
host_impl_->ProcessScrollDeltas();
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(4.f, 0.5f, 4.f);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(4.f, 0.5f, 4.f);
+ host_impl_->SetPageScaleOnActiveTree(4.f);
{
CompositorFrameMetadata metadata =
host_impl_->MakeCompositorFrameMetadata();
@@ -2265,14 +2254,27 @@
// Make the clip size the same as the layer (content) size so the layer is
// non-scrollable.
: layer_size_(10, 10),
- clip_size_(layer_size_) {
+ clip_size_(layer_size_),
+ top_controls_height_(50) {
settings_.calculate_top_controls_position = true;
- settings_.top_controls_height = 50;
settings_.use_pinch_virtual_viewport = true;
- viewport_size_ =
- gfx::Size(clip_size_.width(),
- clip_size_.height() + settings_.top_controls_height);
+ viewport_size_ = gfx::Size(clip_size_.width(),
+ clip_size_.height() + top_controls_height_);
+ }
+
+ bool CreateHostImpl(const LayerTreeSettings& settings,
+ scoped_ptr<OutputSurface> output_surface) override {
+ bool init =
+ LayerTreeHostImplTest::CreateHostImpl(settings, output_surface.Pass());
+ if (init && settings.calculate_top_controls_position) {
+ host_impl_->active_tree()->set_top_controls_height(top_controls_height_);
+ host_impl_->active_tree()->set_top_controls_delta(top_controls_height_);
+ host_impl_->top_controls_manager()->SetTopControlsHeight(
+ top_controls_height_);
+ host_impl_->DidChangeTopControlsPosition();
+ }
+ return init;
}
void SetupTopControlsAndScrollLayer() {
@@ -2297,8 +2299,9 @@
// Set a viewport size that is large enough to contain both the top controls
// and some content.
host_impl_->SetViewportSize(viewport_size_);
- host_impl_->SetTopControlsLayoutHeight(
- settings_.top_controls_height);
+ host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
+
+ host_impl_->DidChangeTopControlsPosition();
host_impl_->CreatePendingTree();
root =
@@ -2322,8 +2325,8 @@
// Set a viewport size that is large enough to contain both the top controls
// and some content.
host_impl_->SetViewportSize(viewport_size_);
- host_impl_->sync_tree()->set_top_controls_layout_height(
- settings_.top_controls_height);
+ host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
+ host_impl_->DidChangeTopControlsPosition();
}
void SetupTopControlsAndScrollLayerWithVirtualViewport(
@@ -2331,8 +2334,8 @@
const gfx::Size& outer_viewport_size,
const gfx::Size& scroll_layer_size) {
CreateHostImpl(settings_, CreateOutputSurface());
- host_impl_->SetTopControlsLayoutHeight(
- settings_.top_controls_height);
+ host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
+ host_impl_->DidChangeTopControlsPosition();
scoped_ptr<LayerImpl> root =
LayerImpl::Create(host_impl_->active_tree(), 1);
@@ -2385,6 +2388,7 @@
gfx::Size layer_size_;
gfx::Size clip_size_;
gfx::Size viewport_size_;
+ float top_controls_height_;
LayerTreeSettings settings_;
}; // class LayerTreeHostImplTopControlsTest
@@ -2433,7 +2437,7 @@
// Need SetDrawsContent so ScrollBegin's hit test finds an actual layer.
outer_scroll->SetDrawsContent(true);
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(2.f, 1.f, 2.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(2.f, 1.f, 2.f);
EXPECT_EQ(InputHandler::ScrollStarted,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
@@ -2496,13 +2500,12 @@
DrawFrame();
float page_scale = 1.5f;
- float top_controls_height = settings_.top_controls_height;
LayerImpl* outer_viewport_scroll_layer =
host_impl_->active_tree()->OuterViewportScrollLayer();
// Zoom in, since the fixed container is the outer viewport, the delta should
// not be scaled.
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale, 1.f, 2.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f, 2.f);
EXPECT_EQ(InputHandler::ScrollStarted,
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
@@ -2512,7 +2515,7 @@
gfx::Vector2dF top_controls_scroll_delta(0.f, 20.f);
host_impl_->top_controls_manager()->ScrollBegin();
host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
- EXPECT_EQ(top_controls_height - top_controls_scroll_delta.y(),
+ EXPECT_EQ(top_controls_height_ - top_controls_scroll_delta.y(),
host_impl_->top_controls_manager()->ContentTopOffset());
EXPECT_VECTOR_EQ(top_controls_scroll_delta,
outer_viewport_scroll_layer->FixedContainerSizeDelta());
@@ -2525,7 +2528,7 @@
host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
host_impl_->top_controls_manager()->ScrollBy(top_controls_scroll_delta);
EXPECT_EQ(0.f, host_impl_->top_controls_manager()->ContentTopOffset());
- EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height),
+ EXPECT_VECTOR_EQ(gfx::Vector2dF(0, top_controls_height_),
outer_viewport_scroll_layer->FixedContainerSizeDelta());
host_impl_->ScrollEnd();
@@ -2535,7 +2538,7 @@
EXPECT_EQ(top_controls_scroll_delta.y(),
host_impl_->top_controls_manager()->ContentTopOffset());
EXPECT_VECTOR_EQ(
- gfx::Vector2dF(0, top_controls_height - top_controls_scroll_delta.y()),
+ gfx::Vector2dF(0, top_controls_height_ - top_controls_scroll_delta.y()),
outer_viewport_scroll_layer->FixedContainerSizeDelta());
host_impl_->top_controls_manager()->ScrollEnd();
}
@@ -2606,12 +2609,11 @@
SetupTopControlsAndScrollLayer();
DrawFrame();
- host_impl_->sync_tree()->set_top_controls_content_offset(15.f);
- host_impl_->sync_tree()->set_top_controls_layout_height(15.f);
+ host_impl_->sync_tree()->set_top_controls_content_offset(50.f);
+ host_impl_->sync_tree()->set_top_controls_shrink_blink_size(true);
- host_impl_->active_tree()->set_top_controls_content_offset(20.f);
- host_impl_->active_tree()->set_top_controls_delta(-20.f);
- host_impl_->active_tree()->set_sent_top_controls_delta(-5.f);
+ host_impl_->active_tree()->set_top_controls_content_offset(50.f);
+ host_impl_->active_tree()->set_top_controls_delta(-50.f);
host_impl_->DidChangeTopControlsPosition();
LayerImpl* root_clip_ptr = host_impl_->active_tree()->root_layer();
@@ -2620,7 +2622,7 @@
host_impl_->sync_tree()->root_layer()->SetBounds(
gfx::Size(root_clip_ptr->bounds().width(),
- root_clip_ptr->bounds().height() - 15.f));
+ root_clip_ptr->bounds().height() - 50.f));
host_impl_->ActivateSyncTree();
@@ -2631,14 +2633,14 @@
// account for the difference between the layout height and the current
// top controls offset.
EXPECT_EQ(viewport_size_, root_clip_ptr->bounds());
- EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 15.f), root_clip_ptr->bounds_delta());
+ EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 50.f), root_clip_ptr->bounds_delta());
host_impl_->active_tree()->set_top_controls_delta(0.f);
host_impl_->DidChangeTopControlsPosition();
- EXPECT_EQ(15.f, host_impl_->top_controls_manager()->ContentTopOffset());
+ EXPECT_EQ(50.f, host_impl_->top_controls_manager()->ContentTopOffset());
EXPECT_VECTOR_EQ(gfx::Vector2dF(0.f, 0.f), root_clip_ptr->bounds_delta());
- EXPECT_EQ(gfx::Size(viewport_size_.width(), viewport_size_.height()-15.f),
+ EXPECT_EQ(gfx::Size(viewport_size_.width(), viewport_size_.height() - 50.f),
root_clip_ptr->bounds());
}
@@ -2650,7 +2652,7 @@
gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
DrawFrame();
- EXPECT_EQ(settings_.top_controls_height,
+ EXPECT_EQ(top_controls_height_,
host_impl_->active_tree()->total_top_controls_content_offset());
LayerImpl* outer_scroll = host_impl_->OuterViewportScrollLayer();
@@ -2672,7 +2674,7 @@
// scrolling down at the max extents no longer hides the top controls
EXPECT_EQ(0.f,
- settings_.top_controls_height -
+ top_controls_height_ -
host_impl_->active_tree()->total_top_controls_content_offset());
// forcefully hide the top controls by 25px
@@ -2680,7 +2682,7 @@
host_impl_->ScrollEnd();
EXPECT_EQ(scroll_delta.y(),
- settings_.top_controls_height -
+ top_controls_height_ -
host_impl_->active_tree()->total_top_controls_content_offset());
inner_scroll->ClampScrollToMaxScrollOffset();
@@ -2717,7 +2719,7 @@
gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
DrawFrame();
- EXPECT_EQ(settings_.top_controls_height,
+ EXPECT_EQ(top_controls_height_,
host_impl_->active_tree()->total_top_controls_content_offset());
gfx::Vector2dF scroll_delta(0.f, 25.f);
@@ -2727,7 +2729,7 @@
host_impl_->ScrollEnd();
EXPECT_EQ(scroll_delta.y(),
- settings_.top_controls_height -
+ top_controls_height_ -
host_impl_->active_tree()->total_top_controls_content_offset());
// Top controls were hidden by 25px so the inner viewport should have expanded
@@ -2753,7 +2755,7 @@
gfx::Size(100, 100), gfx::Size(200, 200), gfx::Size(200, 400));
DrawFrame();
- EXPECT_EQ(settings_.top_controls_height,
+ EXPECT_EQ(top_controls_height_,
host_impl_->active_tree()->total_top_controls_content_offset());
// Send a gesture scroll that will scroll the outer viewport, make sure the
@@ -2767,7 +2769,7 @@
host_impl_->ScrollEnd();
EXPECT_EQ(scroll_delta.y(),
- settings_.top_controls_height -
+ top_controls_height_ -
host_impl_->active_tree()->total_top_controls_content_offset());
scroll_delta = gfx::Vector2dF(0.f, 50.f);
@@ -2791,11 +2793,11 @@
host_impl_->ScrollBegin(gfx::Point(), InputHandler::Gesture));
host_impl_->ScrollBy(gfx::Point(), scroll_delta);
- EXPECT_EQ(settings_.top_controls_height,
+ EXPECT_EQ(top_controls_height_,
host_impl_->active_tree()->total_top_controls_content_offset());
- EXPECT_EQ(inner_viewport_offset.y() +
- (scroll_delta.y() + settings_.top_controls_height),
- host_impl_->InnerViewportScrollLayer()->ScrollDelta().y());
+ EXPECT_EQ(
+ inner_viewport_offset.y() + (scroll_delta.y() + top_controls_height_),
+ host_impl_->InnerViewportScrollLayer()->ScrollDelta().y());
host_impl_->ScrollEnd();
}
@@ -3017,8 +3019,7 @@
host_impl_->ScrollEnd();
// Set new page scale from main thread.
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale,
- page_scale,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, page_scale,
page_scale);
scoped_ptr<ScrollAndScaleSet> scroll_info = host_impl_->ProcessScrollDeltas();
@@ -3052,7 +3053,7 @@
Layer::INVALID_ID);
host_impl_->active_tree()->DidBecomeActive();
host_impl_->SetViewportSize(viewport_size);
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 1.f, page_scale);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 1.f, page_scale);
DrawFrame();
LayerImpl* root_scroll =
@@ -3084,7 +3085,7 @@
EXPECT_EQ(expected_max_scroll, root_scroll->MaxScrollOffset());
// The page scale delta should match the new scale on the impl side.
- EXPECT_EQ(page_scale, host_impl_->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(page_scale, host_impl_->active_tree()->current_page_scale_factor());
}
TEST_F(LayerTreeHostImplTest, PageScaleDeltaAppliedToRootScrollLayerOnly) {
@@ -3180,8 +3181,7 @@
host_impl_->ScrollEnd();
float page_scale = 2.f;
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(page_scale,
- 1.f,
+ host_impl_->active_tree()->PushPageScaleFromMainThread(page_scale, 1.f,
page_scale);
DrawOneFrame();
@@ -3336,8 +3336,8 @@
// Scrolling should be adjusted from viewport space.
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(2.f, 2.f, 2.f);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(2.f, 2.f, 2.f);
+ host_impl_->SetPageScaleOnActiveTree(2.f);
scroll_delta = gfx::Vector2d(0, -2);
EXPECT_EQ(InputHandler::ScrollStarted,
@@ -3611,7 +3611,7 @@
host_impl_->active_tree()->InnerViewportContainerLayer()->SetBounds(
gfx::Size(width * scale - 1, height * scale));
host_impl_->SetDeviceScaleFactor(scale);
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
LayerImpl* inner_viewport_scroll_layer =
host_impl_->active_tree()->InnerViewportScrollLayer();
@@ -3712,16 +3712,16 @@
EXPECT_EQ(0.f, scroll_delegate.max_page_scale_factor());
// Updating page scale immediately updates the delegate.
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(2.f, 0.5f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(2.f, 0.5f, 4.f);
EXPECT_EQ(2.f, scroll_delegate.page_scale_factor());
EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor());
EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor());
- host_impl_->active_tree()->SetPageScaleDelta(1.5f);
+ host_impl_->SetPageScaleOnActiveTree(2.f * 1.5f);
EXPECT_EQ(3.f, scroll_delegate.page_scale_factor());
EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor());
EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor());
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
+ host_impl_->SetPageScaleOnActiveTree(2.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
EXPECT_EQ(1.f, scroll_delegate.page_scale_factor());
EXPECT_EQ(0.5f, scroll_delegate.min_page_scale_factor());
EXPECT_EQ(4.f, scroll_delegate.max_page_scale_factor());
@@ -3818,7 +3818,7 @@
InputHandlerScrollResult scroll_result;
SetupScrollAndContentsLayers(gfx::Size(100, 100));
host_impl_->SetViewportSize(gfx::Size(50, 50));
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
DrawFrame();
EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll());
@@ -4037,7 +4037,7 @@
LayerImpl* clip_layer = scroll_layer->parent()->parent();
clip_layer->SetBounds(gfx::Size(50, 50));
host_impl_->SetViewportSize(gfx::Size(50, 50));
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(1.f, 0.5f, 4.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(1.f, 0.5f, 4.f);
DrawFrame();
EXPECT_EQ(gfx::Vector2dF(), host_impl_->accumulated_root_overscroll());
@@ -4060,9 +4060,9 @@
scoped_ptr<LayerImpl> child =
CreateScrollableLayer(2, content_size, root_clip.get());
root->scroll_clip_layer()->SetBounds(gfx::Size(320, 469));
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(
- 0.326531f, 0.326531f, 5.f);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->active_tree()->PushPageScaleFromMainThread(0.326531f, 0.326531f,
+ 5.f);
+ host_impl_->SetPageScaleOnActiveTree(0.326531f);
child->SetScrollClipLayer(Layer::INVALID_ID);
root->AddChild(child.Pass());
root_clip->AddChild(root.Pass());
@@ -6142,8 +6142,8 @@
host_impl_->SetViewportSize(device_viewport_size);
host_impl_->CreatePendingTree();
- host_impl_->pending_tree()
- ->SetPageScaleFactorAndLimits(1.f, 1.f / 16.f, 16.f);
+ host_impl_->pending_tree()->PushPageScaleFromMainThread(1.f, 1.f / 16.f,
+ 16.f);
scoped_ptr<LayerImpl> scoped_root =
LayerImpl::Create(host_impl_->pending_tree(), 1);
@@ -7166,8 +7166,11 @@
void SetUp() override {
LayerTreeSettings settings = DefaultSettings();
settings.calculate_top_controls_position = true;
- settings.top_controls_height = top_controls_height_;
CreateHostImpl(settings, CreateOutputSurface());
+ host_impl_->active_tree()->set_top_controls_height(top_controls_height_);
+ host_impl_->active_tree()->set_top_controls_delta(top_controls_height_);
+ host_impl_->top_controls_manager()->SetTopControlsHeight(
+ top_controls_height_);
}
protected:
@@ -7183,6 +7186,31 @@
EXPECT_FALSE(did_request_redraw_);
}
+TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsHeightIsCommitted) {
+ SetupScrollAndContentsLayers(gfx::Size(100, 100));
+ EXPECT_FALSE(did_request_redraw_);
+ host_impl_->CreatePendingTree();
+ host_impl_->sync_tree()->set_top_controls_height(100);
+ host_impl_->ActivateSyncTree();
+ EXPECT_EQ(100, host_impl_->top_controls_manager()->top_controls_height());
+}
+
+TEST_F(LayerTreeHostImplWithTopControlsTest,
+ TopControlsStayFullyVisibleOnHeightChange) {
+ SetupScrollAndContentsLayers(gfx::Size(100, 100));
+ EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
+
+ host_impl_->CreatePendingTree();
+ host_impl_->sync_tree()->set_top_controls_height(0);
+ host_impl_->ActivateSyncTree();
+ EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
+
+ host_impl_->CreatePendingTree();
+ host_impl_->sync_tree()->set_top_controls_height(50);
+ host_impl_->ActivateSyncTree();
+ EXPECT_EQ(0.f, host_impl_->ControlsTopOffset());
+}
+
TEST_F(LayerTreeHostImplWithTopControlsTest, TopControlsAnimationScheduling) {
SetupScrollAndContentsLayers(gfx::Size(100, 100))
->SetScrollOffset(gfx::ScrollOffset(0, 10));
@@ -7812,9 +7840,9 @@
// The scroll deltas should have the page scale factor applied.
{
- host_impl_->active_tree()->SetPageScaleFactorAndLimits(
+ host_impl_->active_tree()->PushPageScaleFromMainThread(
page_scale_factor, min_page_scale, max_page_scale);
- host_impl_->active_tree()->SetPageScaleDelta(1.f);
+ host_impl_->SetPageScaleOnActiveTree(page_scale_factor);
scroll_layer->SetScrollDelta(gfx::Vector2d());
float page_scale_delta = 2.f;
diff --git a/cc/trees/layer_tree_host_unittest.cc b/cc/trees/layer_tree_host_unittest.cc
index 51c5d7e..c029c78 100644
--- a/cc/trees/layer_tree_host_unittest.cc
+++ b/cc/trees/layer_tree_host_unittest.cc
@@ -1039,14 +1039,14 @@
// until the second draw.
switch (impl->active_tree()->source_frame_number()) {
case 0:
- EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor());
+ EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
// We'll start an animation when we get back to the main thread.
break;
case 1:
- EXPECT_EQ(1.f, impl->active_tree()->page_scale_factor());
+ EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
break;
case 2:
- EXPECT_EQ(1.25f, impl->active_tree()->page_scale_factor());
+ EXPECT_EQ(1.25f, impl->active_tree()->current_page_scale_factor());
EndTest();
break;
default:
@@ -5547,7 +5547,7 @@
switch (frame_) {
case 1:
// Drew at page scale 1 before any pinching.
- EXPECT_EQ(1.f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f, quad_scale_delta);
PostNextAfterDraw(host_impl);
break;
@@ -5555,7 +5555,7 @@
if (quad_scale_delta != 1.f)
break;
// Drew at page scale 1.5 after pinching in.
- EXPECT_EQ(1.5f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.5f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f, quad_scale_delta);
PostNextAfterDraw(host_impl);
break;
@@ -5566,7 +5566,7 @@
if (frame_data->has_no_damage)
break;
// Drew at page scale 1 with the 1.5 tiling while pinching out.
- EXPECT_EQ(1.f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.5f, quad_scale_delta);
// We don't PostNextAfterDraw here, instead we wait for the new tiling
// to finish rastering so we don't get any noise in further steps.
@@ -5574,7 +5574,7 @@
case 4:
// Drew at page scale 1 with the 1.5 tiling after pinching out completed
// while waiting for texture uploads to complete.
- EXPECT_EQ(1.f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.f, host_impl->active_tree()->current_page_scale_factor());
// This frame will not have any damage, since it's actually the same as
// the last frame, and should contain no incomplete tiles. We just want
// to make sure we drew here at least once after the pinch ended to be
@@ -5586,7 +5586,7 @@
if (quad_scale_delta != 1.f)
break;
// Drew at scale 1 after texture uploads are done.
- EXPECT_EQ(1.f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f, quad_scale_delta);
EndTest();
break;
@@ -5757,19 +5757,19 @@
switch (step_) {
case 1:
// Drew at scale 1 before any pinching.
- EXPECT_EQ(1.f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f, quad_scale_delta);
break;
case 2:
if (quad_scale_delta != 1.f / 1.5f)
break;
// Drew at scale 1 still though the ideal is 1.5.
- EXPECT_EQ(1.5f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.5f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f / 1.5f, quad_scale_delta);
break;
case 3:
// Continuous draws are attempted.
- EXPECT_EQ(1.5f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.5f, host_impl->active_tree()->current_page_scale_factor());
if (!frame_data->has_no_damage)
EXPECT_EQ(1.f / 1.5f, quad_scale_delta);
break;
@@ -5777,7 +5777,7 @@
if (quad_scale_delta != 1.f)
break;
// Drew at scale 1.5 when all the tiles completed.
- EXPECT_EQ(1.5f, host_impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(1.5f, host_impl->active_tree()->current_page_scale_factor());
EXPECT_EQ(1.f, quad_scale_delta);
break;
case 5:
diff --git a/cc/trees/layer_tree_host_unittest_delegated.cc b/cc/trees/layer_tree_host_unittest_delegated.cc
index 3aabeff..a504b2f 100644
--- a/cc/trees/layer_tree_host_unittest_delegated.cc
+++ b/cc/trees/layer_tree_host_unittest_delegated.cc
@@ -113,6 +113,7 @@
SkColor background_color = 0;
float vertex_opacity[4] = {1.f, 1.f, 1.f, 1.f};
bool flipped = false;
+ bool nearest_neighbor = false;
TextureDrawQuad* invalid_draw_quad =
root_pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
@@ -126,7 +127,8 @@
uv_bottom_right,
background_color,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
frame->render_pass_list.push_back(root_pass.Pass());
return frame.Pass();
@@ -162,6 +164,7 @@
gfx::PointF(1.f, 1.f),
SK_ColorTRANSPARENT,
vertex_opacity,
+ false,
false);
}
diff --git a/cc/trees/layer_tree_host_unittest_scroll.cc b/cc/trees/layer_tree_host_unittest_scroll.cc
index 8015bda..bd09d6a 100644
--- a/cc/trees/layer_tree_host_unittest_scroll.cc
+++ b/cc/trees/layer_tree_host_unittest_scroll.cc
@@ -306,10 +306,10 @@
EXPECT_VECTOR_EQ(root_scroll_layer->scroll_offset(), initial_scroll_);
EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
- EXPECT_EQ(1.f, impl->active_tree()->total_page_scale_factor());
- impl->active_tree()->SetPageScaleDelta(impl_scale_);
+ EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
+ impl->SetPageScaleOnActiveTree(impl_scale_);
EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta());
- EXPECT_EQ(impl_scale_, impl->active_tree()->total_page_scale_factor());
+ EXPECT_EQ(impl_scale_, impl->active_tree()->current_page_scale_factor());
// To simplify the testing flow, don't redraw here, just commit.
impl->SetNeedsCommit();
@@ -326,11 +326,11 @@
gfx::ScrollOffsetWithDelta(initial_scroll_, impl_scroll_));
EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
- EXPECT_EQ(impl_scale_, impl->active_tree()->total_page_scale_factor());
- impl->active_tree()->SetPageScaleDelta(impl_scale_);
+ EXPECT_EQ(impl_scale_, impl->active_tree()->current_page_scale_factor());
+ impl->SetPageScaleOnActiveTree(impl_scale_ * impl_scale_);
EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta());
EXPECT_EQ(impl_scale_ * impl_scale_,
- impl->active_tree()->total_page_scale_factor());
+ impl->active_tree()->current_page_scale_factor());
impl->SetNeedsCommit();
} else if (impl->active_tree()->source_frame_number() == 1) {
@@ -897,7 +897,7 @@
: public ImplSidePaintingScrollTest {
public:
ImplSidePaintingScrollTestImplOnlyScroll()
- : initial_scroll_(20, 10), impl_thread_scroll_(-2, 3) {}
+ : initial_scroll_(20, 10), impl_thread_scroll_(-2, 3), impl_scale_(2.f) {}
void SetupTree() override {
LayerTreeHostScrollTest::SetupTree();
@@ -943,6 +943,7 @@
ASSERT_TRUE(active_root);
ASSERT_TRUE(active_scroll_layer);
active_scroll_layer->ScrollBy(impl_thread_scroll_);
+ impl->SetPageScaleOnActiveTree(impl_scale_);
}
}
@@ -990,7 +991,6 @@
EXPECT_VECTOR_EQ(pending_scroll_layer->ScrollDelta(), gfx::Vector2d());
EXPECT_VECTOR_EQ(pending_scroll_layer->sent_scroll_delta(),
gfx::Vector2d());
- EndTest();
break;
}
}
@@ -1006,14 +1006,25 @@
EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), gfx::Vector2d());
EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
+ EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
+ EXPECT_EQ(1.f, impl->active_tree()->current_page_scale_factor());
PostSetNeedsCommitToMainThread();
break;
case 1:
EXPECT_VECTOR_EQ(scroll_layer->scroll_offset(), initial_scroll_);
EXPECT_VECTOR_EQ(scroll_layer->ScrollDelta(), impl_thread_scroll_);
EXPECT_VECTOR_EQ(scroll_layer->sent_scroll_delta(), gfx::Vector2d());
+ EXPECT_EQ(impl_scale_, impl->active_tree()->page_scale_delta());
+ EXPECT_EQ(impl_scale_,
+ impl->active_tree()->current_page_scale_factor());
PostSetNeedsCommitToMainThread();
break;
+ case 2:
+ EXPECT_EQ(1.f, impl->active_tree()->page_scale_delta());
+ EXPECT_EQ(impl_scale_,
+ impl->active_tree()->current_page_scale_factor());
+ EndTest();
+ break;
}
}
@@ -1022,6 +1033,7 @@
private:
gfx::ScrollOffset initial_scroll_;
gfx::Vector2dF impl_thread_scroll_;
+ float impl_scale_;
};
MULTI_THREAD_TEST_F(ImplSidePaintingScrollTestImplOnlyScroll);
diff --git a/cc/trees/layer_tree_impl.cc b/cc/trees/layer_tree_impl.cc
index a278fbf..3a4d36d 100644
--- a/cc/trees/layer_tree_impl.cc
+++ b/cc/trees/layer_tree_impl.cc
@@ -14,6 +14,7 @@
#include "cc/animation/scrollbar_animation_controller_linear_fade.h"
#include "cc/animation/scrollbar_animation_controller_thinning.h"
#include "cc/base/math_util.h"
+#include "cc/base/synced_property.h"
#include "cc/base/util.h"
#include "cc/debug/devtools_instrumentation.h"
#include "cc/debug/traced_value.h"
@@ -72,7 +73,9 @@
gfx::ScrollOffset last_set_scroll_offset_;
};
-LayerTreeImpl::LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl)
+LayerTreeImpl::LayerTreeImpl(
+ LayerTreeHostImpl* layer_tree_host_impl,
+ scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor)
: layer_tree_host_impl_(layer_tree_host_impl),
source_frame_number_(-1),
hud_layer_(0),
@@ -83,9 +86,7 @@
page_scale_layer_(NULL),
inner_viewport_scroll_layer_(NULL),
outer_viewport_scroll_layer_(NULL),
- page_scale_factor_(1),
- page_scale_delta_(1),
- sent_page_scale_delta_(1),
+ page_scale_factor_(page_scale_factor),
min_page_scale_factor_(0),
max_page_scale_factor_(0),
scrolling_layer_id_from_previous_tree_(0),
@@ -96,7 +97,8 @@
next_activation_forces_redraw_(false),
has_ever_been_drawn_(false),
render_surface_layer_list_id_(0),
- top_controls_layout_height_(0),
+ top_controls_shrink_blink_size_(false),
+ top_controls_height_(0),
top_controls_content_offset_(0),
top_controls_delta_(0),
sent_top_controls_delta_(0) {
@@ -209,17 +211,25 @@
target_tree->PassSwapPromises(&swap_promise_list_);
- target_tree->top_controls_layout_height_ = top_controls_layout_height_;
+ // Track the change in top controls height to offset the top_controls_delta
+ // properly. This is so that the top controls offset will be maintained
+ // across height changes.
+ float top_controls_height_delta =
+ target_tree->top_controls_height_ - top_controls_height_;
+
+ target_tree->top_controls_shrink_blink_size_ =
+ top_controls_shrink_blink_size_;
+ target_tree->top_controls_height_ = top_controls_height_;
target_tree->top_controls_content_offset_ = top_controls_content_offset_;
- target_tree->top_controls_delta_ =
- target_tree->top_controls_delta_ -
- target_tree->sent_top_controls_delta_;
+ target_tree->top_controls_delta_ = target_tree->top_controls_delta_ -
+ target_tree->sent_top_controls_delta_ -
+ top_controls_height_delta;
target_tree->sent_top_controls_delta_ = 0.f;
- target_tree->SetPageScaleValues(
- page_scale_factor(), min_page_scale_factor(), max_page_scale_factor(),
- target_tree->page_scale_delta() / target_tree->sent_page_scale_delta());
- target_tree->set_sent_page_scale_delta(1);
+ // Active tree already shares the page_scale_factor object with pending
+ // tree so only the limits need to be provided.
+ target_tree->PushPageScaleFactorAndLimits(nullptr, min_page_scale_factor(),
+ max_page_scale_factor());
target_tree->pending_page_scale_animation_ =
pending_page_scale_animation_.Pass();
@@ -312,72 +322,91 @@
} // namespace
-void LayerTreeImpl::SetPageScaleFactorAndLimits(float page_scale_factor,
- float min_page_scale_factor, float max_page_scale_factor) {
- SetPageScaleValues(page_scale_factor, min_page_scale_factor,
- max_page_scale_factor, page_scale_delta_);
+float LayerTreeImpl::ClampPageScaleFactorToLimits(
+ float page_scale_factor) const {
+ if (min_page_scale_factor_ && page_scale_factor < min_page_scale_factor_)
+ page_scale_factor = min_page_scale_factor_;
+ else if (max_page_scale_factor_ && page_scale_factor > max_page_scale_factor_)
+ page_scale_factor = max_page_scale_factor_;
+ return page_scale_factor;
}
-void LayerTreeImpl::SetPageScaleDelta(float delta) {
- SetPageScaleValues(page_scale_factor_, min_page_scale_factor_,
- max_page_scale_factor_, delta);
+void LayerTreeImpl::SetPageScaleOnActiveTree(float active_page_scale) {
+ DCHECK(IsActiveTree());
+ if (page_scale_factor()->SetCurrent(
+ ClampPageScaleFactorToLimits(active_page_scale)))
+ DidUpdatePageScale();
}
-void LayerTreeImpl::SetPageScaleValues(float page_scale_factor,
- float min_page_scale_factor, float max_page_scale_factor,
- float page_scale_delta) {
- bool page_scale_changed =
- min_page_scale_factor != min_page_scale_factor_ ||
- max_page_scale_factor != max_page_scale_factor_ ||
- page_scale_factor != page_scale_factor_;
+void LayerTreeImpl::PushPageScaleFromMainThread(float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) {
+ PushPageScaleFactorAndLimits(&page_scale_factor, min_page_scale_factor,
+ max_page_scale_factor);
+}
+
+void LayerTreeImpl::PushPageScaleFactorAndLimits(const float* page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor) {
+ DCHECK(page_scale_factor || IsActiveTree());
+ bool changed_page_scale = false;
+ if (page_scale_factor) {
+ DCHECK(!IsActiveTree() || !layer_tree_host_impl_->pending_tree());
+ changed_page_scale |=
+ page_scale_factor_->PushFromMainThread(*page_scale_factor);
+ }
+ if (IsActiveTree())
+ changed_page_scale |= page_scale_factor_->PushPendingToActive();
+ changed_page_scale |=
+ SetPageScaleFactorLimits(min_page_scale_factor, max_page_scale_factor);
+
+ if (changed_page_scale)
+ DidUpdatePageScale();
+}
+
+bool LayerTreeImpl::SetPageScaleFactorLimits(float min_page_scale_factor,
+ float max_page_scale_factor) {
+ if (min_page_scale_factor == min_page_scale_factor_ &&
+ max_page_scale_factor == max_page_scale_factor_)
+ return false;
min_page_scale_factor_ = min_page_scale_factor;
max_page_scale_factor_ = max_page_scale_factor;
- page_scale_factor_ = page_scale_factor;
- float total = page_scale_factor_ * page_scale_delta;
- if (min_page_scale_factor_ && total < min_page_scale_factor_)
- page_scale_delta = min_page_scale_factor_ / page_scale_factor_;
- else if (max_page_scale_factor_ && total > max_page_scale_factor_)
- page_scale_delta = max_page_scale_factor_ / page_scale_factor_;
+ return true;
+}
- if (page_scale_delta_ == page_scale_delta && !page_scale_changed)
- return;
+void LayerTreeImpl::DidUpdatePageScale() {
+ if (IsActiveTree())
+ page_scale_factor()->SetCurrent(
+ ClampPageScaleFactorToLimits(current_page_scale_factor()));
- if (page_scale_delta_ != page_scale_delta) {
- page_scale_delta_ = page_scale_delta;
-
- if (IsActiveTree()) {
- LayerTreeImpl* pending_tree = layer_tree_host_impl_->pending_tree();
- if (pending_tree) {
- DCHECK_EQ(1, pending_tree->sent_page_scale_delta());
- pending_tree->SetPageScaleDelta(
- page_scale_delta_ / sent_page_scale_delta_);
- }
- }
-
- set_needs_update_draw_properties();
- }
+ set_needs_update_draw_properties();
if (root_layer_scroll_offset_delegate_) {
root_layer_scroll_offset_delegate_->UpdateRootLayerState(
- TotalScrollOffset(),
- TotalMaxScrollOffset(),
- ScrollableSize(),
- total_page_scale_factor(),
- min_page_scale_factor_,
+ TotalScrollOffset(), TotalMaxScrollOffset(), ScrollableSize(),
+ current_page_scale_factor(), min_page_scale_factor_,
max_page_scale_factor_);
}
ForceScrollbarParameterUpdateAfterScaleChange(page_scale_layer());
}
+SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() {
+ return page_scale_factor_.get();
+}
+
+const SyncedProperty<ScaleGroup>* LayerTreeImpl::page_scale_factor() const {
+ return page_scale_factor_.get();
+}
+
gfx::SizeF LayerTreeImpl::ScrollableViewportSize() const {
if (!InnerViewportContainerLayer())
return gfx::SizeF();
return gfx::ScaleSize(InnerViewportContainerLayer()->BoundsForScrolling(),
- 1.0f / total_page_scale_factor());
+ 1.0f / current_page_scale_factor());
}
gfx::Rect LayerTreeImpl::RootScrollLayerDeviceViewportBounds() const {
@@ -398,9 +427,7 @@
void LayerTreeImpl::ApplySentScrollAndScaleDeltasFromAbortedCommit() {
DCHECK(IsActiveTree());
- page_scale_factor_ *= sent_page_scale_delta_;
- page_scale_delta_ /= sent_page_scale_delta_;
- sent_page_scale_delta_ = 1.f;
+ page_scale_factor()->AbortCommit();
top_controls_content_offset_ += sent_top_controls_delta_;
top_controls_delta_ -= sent_top_controls_delta_;
@@ -496,7 +523,7 @@
LayerTreeHostCommon::CalcDrawPropsImplInputs inputs(
root_layer(), DrawViewportSize(),
layer_tree_host_impl_->DrawTransform(), device_scale_factor(),
- total_page_scale_factor(), page_scale_layer,
+ current_page_scale_factor(), page_scale_layer,
resource_provider()->max_texture_size(), settings().can_use_lcd_text,
settings().layers_always_allowed_lcd_text,
can_render_to_separate_surface,
@@ -910,11 +937,8 @@
if (root_layer_scroll_offset_delegate_) {
root_layer_scroll_offset_delegate_->UpdateRootLayerState(
- TotalScrollOffset(),
- TotalMaxScrollOffset(),
- ScrollableSize(),
- total_page_scale_factor(),
- min_page_scale_factor(),
+ TotalScrollOffset(), TotalMaxScrollOffset(), ScrollableSize(),
+ current_page_scale_factor(), min_page_scale_factor(),
max_page_scale_factor());
if (inner_viewport_scroll_layer_) {
@@ -962,11 +986,8 @@
offset += outer_viewport_scroll_delegate_proxy_->last_set_scroll_offset();
root_layer_scroll_offset_delegate_->UpdateRootLayerState(
- offset,
- TotalMaxScrollOffset(),
- ScrollableSize(),
- total_page_scale_factor(),
- min_page_scale_factor(),
+ offset, TotalMaxScrollOffset(), ScrollableSize(),
+ current_page_scale_factor(), min_page_scale_factor(),
max_page_scale_factor());
}
diff --git a/cc/trees/layer_tree_impl.h b/cc/trees/layer_tree_impl.h
index ef4f877..d16234b 100644
--- a/cc/trees/layer_tree_impl.h
+++ b/cc/trees/layer_tree_impl.h
@@ -14,6 +14,7 @@
#include "base/values.h"
#include "cc/base/scoped_ptr_vector.h"
#include "cc/base/swap_promise.h"
+#include "cc/base/synced_property.h"
#include "cc/layers/layer_impl.h"
#include "cc/output/renderer.h"
#include "cc/resources/ui_resource_client.h"
@@ -53,8 +54,10 @@
class CC_EXPORT LayerTreeImpl {
public:
static scoped_ptr<LayerTreeImpl> create(
- LayerTreeHostImpl* layer_tree_host_impl) {
- return make_scoped_ptr(new LayerTreeImpl(layer_tree_host_impl));
+ LayerTreeHostImpl* layer_tree_host_impl,
+ scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor) {
+ return make_scoped_ptr(
+ new LayerTreeImpl(layer_tree_host_impl, page_scale_factor));
}
virtual ~LayerTreeImpl();
@@ -161,23 +164,20 @@
has_transparent_background_ = transparent;
}
- void SetPageScaleFactorAndLimits(float page_scale_factor,
- float min_page_scale_factor, float max_page_scale_factor);
- void SetPageScaleDelta(float delta);
- void SetPageScaleValues(float page_scale_factor,
- float min_page_scale_factor, float max_page_scale_factor,
- float page_scale_delta);
- float total_page_scale_factor() const {
- return page_scale_factor_ * page_scale_delta_;
+ void SetPageScaleOnActiveTree(float active_page_scale);
+ void PushPageScaleFromMainThread(float page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor);
+ float current_page_scale_factor() const {
+ return page_scale_factor()->Current(IsActiveTree());
}
- float page_scale_factor() const { return page_scale_factor_; }
float min_page_scale_factor() const { return min_page_scale_factor_; }
float max_page_scale_factor() const { return max_page_scale_factor_; }
- float page_scale_delta() const { return page_scale_delta_; }
- void set_sent_page_scale_delta(float delta) {
- sent_page_scale_delta_ = delta;
- }
- float sent_page_scale_delta() const { return sent_page_scale_delta_; }
+
+ float page_scale_delta() const { return page_scale_factor()->Delta(); }
+
+ SyncedProperty<ScaleGroup>* page_scale_factor();
+ const SyncedProperty<ScaleGroup>* page_scale_factor() const;
// Updates draw properties and render surface layer list, as well as tile
// priorities. Returns false if it was unable to update.
@@ -287,9 +287,10 @@
void RegisterPictureLayerImpl(PictureLayerImpl* layer);
void UnregisterPictureLayerImpl(PictureLayerImpl* layer);
- void set_top_controls_layout_height(float height) {
- top_controls_layout_height_ = height;
+ void set_top_controls_shrink_blink_size(bool shrink) {
+ top_controls_shrink_blink_size_ = shrink;
}
+ void set_top_controls_height(float height) { top_controls_height_ = height; }
void set_top_controls_content_offset(float offset) {
top_controls_content_offset_ = offset;
}
@@ -300,9 +301,10 @@
sent_top_controls_delta_ = sent_delta;
}
- float top_controls_layout_height() const {
- return top_controls_layout_height_;
+ bool top_controls_shrink_blink_size() const {
+ return top_controls_shrink_blink_size_;
}
+ float top_controls_height() const { return top_controls_height_; }
float top_controls_content_offset() const {
return top_controls_content_offset_;
}
@@ -321,8 +323,17 @@
scoped_ptr<PendingPageScaleAnimation> TakePendingPageScaleAnimation();
protected:
- explicit LayerTreeImpl(LayerTreeHostImpl* layer_tree_host_impl);
+ explicit LayerTreeImpl(
+ LayerTreeHostImpl* layer_tree_host_impl,
+ scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor);
void ReleaseResourcesRecursive(LayerImpl* current);
+ float ClampPageScaleFactorToLimits(float page_scale_factor) const;
+ void PushPageScaleFactorAndLimits(const float* page_scale_factor,
+ float min_page_scale_factor,
+ float max_page_scale_factor);
+ bool SetPageScaleFactorLimits(float min_page_scale_factor,
+ float max_page_scale_factor);
+ void DidUpdatePageScale();
LayerTreeHostImpl* layer_tree_host_impl_;
int source_frame_number_;
@@ -345,9 +356,7 @@
LayerSelectionBound selection_start_;
LayerSelectionBound selection_end_;
- float page_scale_factor_;
- float page_scale_delta_;
- float sent_page_scale_delta_;
+ scoped_refptr<SyncedProperty<ScaleGroup>> page_scale_factor_;
float min_page_scale_factor_;
float max_page_scale_factor_;
@@ -380,10 +389,11 @@
int render_surface_layer_list_id_;
- // The top controls content offset at the time of the last layout (and thus,
- // viewport resize) in Blink. i.e. How much the viewport was shrunk by the top
- // controls.
- float top_controls_layout_height_;
+ // Whether or not Blink's viewport size was shrunk by the height of the top
+ // controls at the time of the last layout.
+ bool top_controls_shrink_blink_size_;
+
+ float top_controls_height_;
// The up-to-date content offset of the top controls, i.e. the amount that the
// web contents have been shifted down from the top of the device viewport.
diff --git a/cc/trees/layer_tree_impl_unittest.cc b/cc/trees/layer_tree_impl_unittest.cc
index 52f8e0a..2131d4c 100644
--- a/cc/trees/layer_tree_impl_unittest.cc
+++ b/cc/trees/layer_tree_impl_unittest.cc
@@ -1795,8 +1795,9 @@
host_impl().SetViewportSize(scaled_bounds_for_root);
host_impl().SetDeviceScaleFactor(device_scale_factor);
- host_impl().active_tree()->SetPageScaleFactorAndLimits(
+ host_impl().active_tree()->PushPageScaleFromMainThread(
page_scale_factor, page_scale_factor, page_scale_factor);
+ host_impl().SetPageScaleOnActiveTree(page_scale_factor);
host_impl().active_tree()->SetRootLayer(root.Pass());
host_impl().active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 1,
Layer::INVALID_ID);
@@ -2299,8 +2300,9 @@
host_impl().SetViewportSize(scaled_bounds_for_root);
host_impl().SetDeviceScaleFactor(device_scale_factor);
- host_impl().active_tree()->SetPageScaleFactorAndLimits(
+ host_impl().active_tree()->PushPageScaleFromMainThread(
page_scale_factor, page_scale_factor, page_scale_factor);
+ host_impl().SetPageScaleOnActiveTree(page_scale_factor);
host_impl().active_tree()->SetRootLayer(root.Pass());
host_impl().active_tree()->SetViewportLayersFromIds(Layer::INVALID_ID, 1, 1,
Layer::INVALID_ID);
diff --git a/cc/trees/layer_tree_settings.cc b/cc/trees/layer_tree_settings.cc
index 0771eb8..ab44a66 100644
--- a/cc/trees/layer_tree_settings.cc
+++ b/cc/trees/layer_tree_settings.cc
@@ -41,7 +41,6 @@
layers_always_allowed_lcd_text(false),
minimum_contents_scale(0.0625f),
low_res_contents_scale_factor(0.25f),
- top_controls_height(0.f),
top_controls_show_threshold(0.5f),
top_controls_hide_threshold(0.5f),
background_animation_rate(1.0),
diff --git a/cc/trees/layer_tree_settings.h b/cc/trees/layer_tree_settings.h
index 438344b..2660dae 100644
--- a/cc/trees/layer_tree_settings.h
+++ b/cc/trees/layer_tree_settings.h
@@ -54,7 +54,6 @@
bool layers_always_allowed_lcd_text;
float minimum_contents_scale;
float low_res_contents_scale_factor;
- float top_controls_height;
float top_controls_show_threshold;
float top_controls_hide_threshold;
double background_animation_rate;
diff --git a/crypto/p224_spake.cc b/crypto/p224_spake.cc
index 31109a4..f20b10c 100644
--- a/crypto/p224_spake.cc
+++ b/crypto/p224_spake.cc
@@ -240,8 +240,16 @@
return error_;
}
-const std::string& P224EncryptedKeyExchange::GetKey() {
+const std::string& P224EncryptedKeyExchange::GetKey() const {
DCHECK_EQ(state_, kStateDone);
+ return GetUnverifiedKey();
+}
+
+const std::string& P224EncryptedKeyExchange::GetUnverifiedKey() const {
+ // Key is already final when state is kStateSendHash. Subsequent states are
+ // used only for verification of the key. Some users may combine verification
+ // with sending verifiable data instead of |expected_authenticator_|.
+ DCHECK_GE(state_, kStateSendHash);
return key_;
}
diff --git a/crypto/p224_spake.h b/crypto/p224_spake.h
index 6905ef2..61451a3 100644
--- a/crypto/p224_spake.h
+++ b/crypto/p224_spake.h
@@ -68,7 +68,11 @@
// The key established as result of the key exchange. Must be called
// at then end after ProcessMessage() returns kResultSuccess.
- const std::string& GetKey();
+ const std::string& GetKey() const;
+
+ // The key established as result of the key exchange. Can be called after
+ // the first ProcessMessage()
+ const std::string& GetUnverifiedKey() const;
private:
// The authentication state machine is very simple and each party proceeds
diff --git a/crypto/p224_spake_unittest.cc b/crypto/p224_spake_unittest.cc
index 589cdbf..6651c8d 100644
--- a/crypto/p224_spake_unittest.cc
+++ b/crypto/p224_spake_unittest.cc
@@ -13,7 +13,8 @@
namespace {
bool RunExchange(P224EncryptedKeyExchange* client,
- P224EncryptedKeyExchange* server) {
+ P224EncryptedKeyExchange* server,
+ bool is_password_same) {
for (;;) {
std::string client_message, server_message;
client_message = client->GetMessage();
@@ -24,23 +25,24 @@
server_result = server->ProcessMessage(client_message);
// Check that we never hit the case where only one succeeds.
- if ((client_result == P224EncryptedKeyExchange::kResultSuccess) ^
- (server_result == P224EncryptedKeyExchange::kResultSuccess)) {
- CHECK(false) << "Parties differ on whether authentication was successful";
- }
+ EXPECT_EQ(client_result == P224EncryptedKeyExchange::kResultSuccess,
+ server_result == P224EncryptedKeyExchange::kResultSuccess);
if (client_result == P224EncryptedKeyExchange::kResultFailed ||
server_result == P224EncryptedKeyExchange::kResultFailed) {
return false;
}
+ EXPECT_EQ(is_password_same,
+ client->GetUnverifiedKey() == server->GetUnverifiedKey());
+
if (client_result == P224EncryptedKeyExchange::kResultSuccess &&
server_result == P224EncryptedKeyExchange::kResultSuccess) {
return true;
}
- CHECK_EQ(P224EncryptedKeyExchange::kResultPending, client_result);
- CHECK_EQ(P224EncryptedKeyExchange::kResultPending, server_result);
+ EXPECT_EQ(P224EncryptedKeyExchange::kResultPending, client_result);
+ EXPECT_EQ(P224EncryptedKeyExchange::kResultPending, server_result);
}
}
@@ -54,7 +56,7 @@
P224EncryptedKeyExchange server(
P224EncryptedKeyExchange::kPeerTypeServer, kPassword);
- EXPECT_TRUE(RunExchange(&client, &server));
+ EXPECT_TRUE(RunExchange(&client, &server, true));
EXPECT_EQ(client.GetKey(), server.GetKey());
}
@@ -66,7 +68,7 @@
P224EncryptedKeyExchange::kPeerTypeServer,
"wrongpassword");
- EXPECT_FALSE(RunExchange(&client, &server));
+ EXPECT_FALSE(RunExchange(&client, &server, false));
}
TEST(MutualAuth, Fuzz) {
diff --git a/examples/surfaces_app/child_gl_impl.cc b/examples/surfaces_app/child_gl_impl.cc
index fe4f232..8b8e942 100644
--- a/examples/surfaces_app/child_gl_impl.cc
+++ b/examples/surfaces_app/child_gl_impl.cc
@@ -158,17 +158,21 @@
TextureDrawQuad* texture_quad =
pass->CreateAndAppendDrawQuad<TextureDrawQuad>();
float vertex_opacity[4] = {1.0f, 1.0f, 0.2f, 1.0f};
+ const bool premultiplied_alpha = true;
+ const bool flipped = false;
+ const bool nearest_neighbor = false;
texture_quad->SetNew(pass->shared_quad_state_list.back(),
rect,
rect,
rect,
resource.id,
- true,
+ premultiplied_alpha,
gfx::PointF(),
gfx::PointF(1.f, 1.f),
SK_ColorBLUE,
vertex_opacity,
- false);
+ flipped,
+ nearest_neighbor);
scoped_ptr<DelegatedFrameData> delegated_frame_data(new DelegatedFrameData);
delegated_frame_data->render_pass_list.push_back(pass.Pass());
diff --git a/gpu/GLES2/OWNERS b/gpu/GLES2/OWNERS
new file mode 100644
index 0000000..cd07f4d
--- /dev/null
+++ b/gpu/GLES2/OWNERS
@@ -0,0 +1,5 @@
+piman@chromium.org
+jbauman@chromium.org
+bajones@chromium.org
+zmo@chromium.org
+vmiura@chromium.org
diff --git a/gpu/command_buffer/service/shader_translator.cc b/gpu/command_buffer/service/shader_translator.cc
index f719f7d..576c7c8 100644
--- a/gpu/command_buffer/service/shader_translator.cc
+++ b/gpu/command_buffer/service/shader_translator.cc
@@ -9,10 +9,12 @@
#include <algorithm>
#include "base/at_exit.h"
+#include "base/command_line.h"
#include "base/debug/trace_event.h"
#include "base/lazy_instance.h"
#include "base/logging.h"
#include "base/strings/string_number_conversions.h"
+#include "ui/gl/gl_switches.h"
namespace gpu {
namespace gles2 {
@@ -133,6 +135,10 @@
SH_LIMIT_EXPRESSION_COMPLEXITY | SH_LIMIT_CALL_STACK_DEPTH |
SH_CLAMP_INDIRECT_ARRAY_BOUNDS;
+ if (CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kGLShaderIntermOutput))
+ compile_options |= SH_INTERMEDIATE_TREE;
+
compile_options |= driver_bug_workarounds_;
return compile_options;
diff --git a/mojo/converters/surfaces/surfaces_type_converters.cc b/mojo/converters/surfaces/surfaces_type_converters.cc
index a8e5911..1a6ab99 100644
--- a/mojo/converters/surfaces/surfaces_type_converters.cc
+++ b/mojo/converters/surfaces/surfaces_type_converters.cc
@@ -140,7 +140,8 @@
texture_quad_state->uv_bottom_right.To<gfx::PointF>(),
texture_quad_state->background_color.To<SkColor>(),
&texture_quad_state->vertex_opacity.storage()[0],
- texture_quad_state->flipped);
+ texture_quad_state->flipped,
+ texture_quad_state->nearest_neighbor);
break;
}
case MATERIAL_TILED_CONTENT: {
diff --git a/mojo/converters/surfaces/tests/surface_unittest.cc b/mojo/converters/surfaces/tests/surface_unittest.cc
index 4b1fd21..cdfb9cb 100644
--- a/mojo/converters/surfaces/tests/surface_unittest.cc
+++ b/mojo/converters/surfaces/tests/surface_unittest.cc
@@ -108,6 +108,7 @@
SkColor background_color = SK_ColorYELLOW;
float vertex_opacity[4] = {0.1f, 0.5f, 0.4f, 0.8f};
bool flipped = false;
+ bool nearest_neighbor = false;
texture_quad->SetAll(sqs,
rect,
opaque_rect,
@@ -119,7 +120,8 @@
uv_bottom_right,
background_color,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
QuadPtr mojo_quad = Quad::From<cc::DrawQuad>(*texture_quad);
ASSERT_FALSE(mojo_quad.is_null());
@@ -267,6 +269,7 @@
SkColor background_color = SK_ColorYELLOW;
float vertex_opacity[4] = {0.1f, 0.5f, 0.4f, 0.8f};
bool flipped = false;
+ bool nearest_neighbor = false;
texture_quad->SetAll(sqs,
rect,
opaque_rect,
@@ -278,7 +281,8 @@
uv_bottom_right,
background_color,
vertex_opacity,
- flipped);
+ flipped,
+ nearest_neighbor);
PassPtr mojo_pass = Pass::From(*pass);
ASSERT_FALSE(mojo_pass.is_null());
diff --git a/mojo/services/public/interfaces/surfaces/quads.mojom b/mojo/services/public/interfaces/surfaces/quads.mojom
index d635239..61115f7 100644
--- a/mojo/services/public/interfaces/surfaces/quads.mojom
+++ b/mojo/services/public/interfaces/surfaces/quads.mojom
@@ -64,6 +64,7 @@
Color background_color;
array<float, 4> vertex_opacity;
bool flipped;
+ bool nearest_neighbor;
};
struct TileQuadState {
diff --git a/net/BUILD.gn b/net/BUILD.gn
index 271edcc..4cecaef 100644
--- a/net/BUILD.gn
+++ b/net/BUILD.gn
@@ -542,15 +542,17 @@
}
if (false) {
- static_library("extras") {
- sources = gypi_values.net_extras_sources
- configs += [ "//build/config/compiler:wexit_time_destructors" ]
- deps = [
- ":net",
- "//sql:sql",
- ]
- }
-} # if (false)
+
+static_library("extras") {
+ sources = gypi_values.net_extras_sources
+ configs += [ "//build/config/compiler:wexit_time_destructors" ]
+ deps = [
+ ":net",
+ "//sql:sql",
+ ]
+}
+
+} # if (false)
static_library("http_server") {
sources = [
@@ -1126,7 +1128,9 @@
test("net_unittests") {
sources = gypi_values.net_test_sources
- sources -= [ "extras/sqlite/sqlite_channel_id_store_unittest.cc" ]
+ sources -= [
+ "extras/sqlite/sqlite_channel_id_store_unittest.cc",
+ ]
configs += [ ":net_win_size_truncation" ]
defines = []
diff --git a/net/http/transport_security_state_static.h b/net/http/transport_security_state_static.h
index 79fa777..4c09bec 100644
--- a/net/http/transport_security_state_static.h
+++ b/net/http/transport_security_state_static.h
@@ -709,1593 +709,1648 @@
// value has the MSB set then it represents a literal leaf value. Otherwise
// it's a pointer to the n'th element of the array.
static const uint8 kHSTSHuffmanTree[] = {
- 0xf0, 0xf7, 0x00, 0xec, 0x01, 0x80, 0xe7, 0xe1,
- 0xb9, 0xb6, 0x04, 0xb8, 0xb7, 0x05, 0xb5, 0x06,
- 0x07, 0xf1, 0xb1, 0xb0, 0xb2, 0x09, 0x08, 0x0a,
- 0x0b, 0xfa, 0xf6, 0x0c, 0xeb, 0x0d, 0xed, 0x0e,
- 0xae, 0xe3, 0x0f, 0x10, 0x03, 0x11, 0x02, 0x12,
- 0xe2, 0xe8, 0x14, 0xf3, 0x15, 0xe5, 0xff, 0x16,
- 0xee, 0xf4, 0x18, 0xef, 0xb3, 0xb4, 0x1a, 0xea,
- 0xf8, 0x1b, 0xad, 0x1c, 0x1d, 0xe4, 0xe6, 0xf9,
- 0x1f, 0xf5, 0x1e, 0x20, 0xe9, 0xf2, 0x21, 0x22,
- 0x19, 0x23, 0x17, 0x24, 0x13, 0x25,
+ 0xf2, 0xec, 0x00, 0x80, 0xe7, 0xe1, 0xb9, 0xb6,
+ 0x03, 0xb8, 0xb7, 0x04, 0xb5, 0x05, 0x06, 0xf1,
+ 0xb1, 0xb0, 0xb2, 0x08, 0x07, 0x09, 0x0a, 0xfa,
+ 0xf6, 0x0b, 0xeb, 0x0c, 0xed, 0x0d, 0xae, 0xe3,
+ 0x0e, 0x0f, 0x02, 0x10, 0x01, 0x11, 0xe2, 0xe8,
+ 0xf3, 0x13, 0x14, 0xe5, 0xff, 0x15, 0xf4, 0xee,
+ 0x17, 0xef, 0xb3, 0xb4, 0x19, 0xea, 0xf8, 0x1a,
+ 0xad, 0x1b, 0x1c, 0xe4, 0xe6, 0xf9, 0x1e, 0xf5,
+ 0x1d, 0x1f, 0xf7, 0xf0, 0xe9, 0x21, 0x20, 0x22,
+ 0x18, 0x23, 0x16, 0x24, 0x12, 0x25,
};
static const uint8 kPreloadedHSTSData[] = {
0xfe, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x25, 0x9f,
- 0x0a, 0x6e, 0xa1, 0xa2, 0x2d, 0x9a, 0xe9, 0x2a,
- 0x4a, 0x54, 0x80, 0x26, 0x94, 0x02, 0xd3, 0xfb,
- 0x36, 0x20, 0x67, 0xaa, 0x53, 0x8d, 0x34, 0xfc,
- 0xfc, 0x79, 0xb5, 0xb4, 0x74, 0x29, 0xf9, 0x6a,
- 0x14, 0x9d, 0x69, 0x86, 0xf1, 0x43, 0xb6, 0x7f,
- 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x51, 0x4f, 0xff,
- 0x63, 0xd8, 0x77, 0x4b, 0xba, 0x39, 0x5b, 0xe4,
- 0xe9, 0xf0, 0xa6, 0xea, 0x1a, 0x2b, 0xd9, 0xf7,
- 0x9b, 0xd3, 0xba, 0x0e, 0x93, 0xac, 0xf7, 0x04,
- 0xc2, 0x7f, 0xe7, 0x6b, 0xdd, 0x62, 0x9b, 0xa8,
- 0x68, 0x91, 0xa7, 0xff, 0x39, 0x9a, 0xf7, 0x58,
- 0xa6, 0xea, 0x1a, 0x27, 0x89, 0xff, 0xce, 0x66,
- 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0xfe, 0x7f,
- 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2,
- 0x86, 0x9f, 0xfc, 0xe6, 0x6b, 0xdd, 0x62, 0x9b,
- 0xa8, 0x68, 0xa2, 0x27, 0xfd, 0xaf, 0x75, 0x8a,
- 0x6e, 0xa1, 0xa2, 0x91, 0x9f, 0xff, 0xaf, 0x9c,
- 0x2f, 0x57, 0x67, 0xfa, 0x0a, 0xd5, 0x40, 0x54,
- 0x9c, 0xc4, 0x51, 0xf1, 0x23, 0x4f, 0xfc, 0xed,
- 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x12, 0x84, 0x50,
- 0xba, 0x70, 0xf8, 0xd2, 0x10, 0xc7, 0x8e, 0x76,
- 0x30, 0xaf, 0x61, 0x36, 0x13, 0x00, 0xa4, 0xdc,
- 0xa9, 0x55, 0x4b, 0xb8, 0x7a, 0xb7, 0x96, 0x4f,
+ 0x0a, 0x6e, 0xa1, 0xa2, 0x2d, 0x9a, 0xeb, 0x2a,
+ 0x4a, 0x54, 0xbf, 0x13, 0x4b, 0xf8, 0xb4, 0xfe,
+ 0xc5, 0x8f, 0xec, 0xf5, 0x0a, 0x71, 0xa8, 0x9f,
+ 0x9f, 0x9f, 0x36, 0xb6, 0x8e, 0x85, 0x3f, 0x3d,
+ 0x43, 0x9f, 0xe0, 0x5c, 0xf9, 0x15, 0x9e, 0x3a,
+ 0x4e, 0xb4, 0xd1, 0xb8, 0xa1, 0xe1, 0xd4, 0x82,
+ 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x51, 0x4f,
+ 0xff, 0x67, 0xd9, 0x77, 0x4b, 0xba, 0xb9, 0x5b,
+ 0xe4, 0xe9, 0xf0, 0xa6, 0xea, 0x1a, 0x2b, 0xd9,
+ 0xf7, 0x9b, 0xd3, 0xba, 0x8e, 0x93, 0xac, 0xf7,
+ 0x04, 0xc2, 0x7f, 0xe7, 0x6b, 0xdd, 0x62, 0x9b,
+ 0xa8, 0x68, 0x91, 0xa7, 0xff, 0x39, 0x9a, 0xf7,
+ 0x58, 0xa6, 0xea, 0x1a, 0x27, 0x89, 0xff, 0xce,
+ 0x66, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0xfe,
+ 0x7f, 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e, 0xa1,
+ 0xa2, 0x86, 0x9f, 0xfc, 0xe6, 0x6b, 0xdd, 0x62,
+ 0x9b, 0xa8, 0x68, 0xa2, 0x27, 0xfd, 0xaf, 0x75,
+ 0x8a, 0x6e, 0xa1, 0xa2, 0x91, 0x9f, 0xff, 0xaf,
+ 0x9c, 0xaf, 0x57, 0x60, 0x37, 0xfa, 0x51, 0x7f,
+ 0x2a, 0x4e, 0x62, 0x29, 0x38, 0x91, 0xa7, 0xfe,
+ 0x76, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0x42,
+ 0x2a, 0x5d, 0x81, 0x7c, 0x70, 0x28, 0x81, 0xc7,
+ 0x3b, 0x18, 0x57, 0xb0, 0x9b, 0x29, 0x9f, 0xa9,
+ 0x37, 0x2a, 0x54, 0x52, 0xee, 0x1e, 0xcd, 0xe5,
+ 0x93, 0xff, 0x9c, 0xcd, 0x7b, 0xac, 0x53, 0x75,
+ 0x0d, 0x13, 0x9c, 0xff, 0xe7, 0x33, 0x5e, 0xeb,
+ 0x14, 0xdd, 0x43, 0x45, 0x13, 0x3f, 0xf0, 0xbd,
+ 0xd9, 0xf5, 0x1a, 0x7f, 0xbf, 0x3a, 0x05, 0x1d,
+ 0x74, 0x52, 0xed, 0x4a, 0x7f, 0x3a, 0xc5, 0x37,
+ 0x50, 0xd1, 0x0e, 0x4f, 0x85, 0x37, 0x50, 0xd1,
+ 0x17, 0xcf, 0xea, 0x5f, 0x39, 0xbf, 0xf4, 0xe9,
+ 0xf6, 0xe1, 0xeb, 0xd0, 0xa9, 0x3a, 0xd1, 0x16,
+ 0xd1, 0x80, 0x19, 0xcf, 0xfe, 0x73, 0x35, 0xee,
+ 0xb1, 0x4d, 0xd4, 0x34, 0x4c, 0x93, 0xf9, 0xd6,
+ 0x29, 0xba, 0x86, 0x8b, 0x7a, 0x7f, 0xf3, 0x99,
+ 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x93, 0x85,
+ 0x4f, 0x69, 0xf0, 0xc6, 0xb3, 0x5a, 0x29, 0x36,
+ 0x3b, 0x9f, 0xce, 0xb1, 0x4d, 0xd4, 0x34, 0x43,
+ 0xb3, 0xff, 0x9c, 0xcd, 0x7b, 0xac, 0x53, 0x75,
+ 0x0d, 0x12, 0xc4, 0xfe, 0x75, 0x8a, 0x6e, 0xa1,
+ 0xa2, 0x30, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0x3d,
+ 0x9e, 0xa6, 0xd6, 0xd8, 0xe9, 0xe7, 0x6b, 0xdd,
+ 0x67, 0xa9, 0x83, 0x09, 0xfc, 0xeb, 0x14, 0xdd,
+ 0x43, 0x45, 0x87, 0x3f, 0x9d, 0x62, 0x9b, 0xa8,
+ 0x68, 0xb9, 0xe1, 0x53, 0xca, 0xa8, 0xed, 0xea,
+ 0x5e, 0x84, 0x7b, 0x0e, 0x30, 0x77, 0x3f, 0x9d,
+ 0x62, 0x9b, 0xa8, 0x68, 0x87, 0xa7, 0xc2, 0x9b,
+ 0xa8, 0x68, 0x89, 0xa6, 0xc3, 0x0e, 0x9f, 0xfd,
+ 0x79, 0xeb, 0x55, 0x17, 0xd5, 0xe1, 0x58, 0x74,
+ 0x56, 0x7c, 0x79, 0x16, 0x9e, 0xc7, 0x7b, 0xd4,
+ 0xd1, 0x0b, 0xc9, 0xd6, 0x8e, 0x7a, 0x42, 0x4f,
+ 0xb2, 0x39, 0xbb, 0xc9, 0xd3, 0xd8, 0xcf, 0xb0,
+ 0x74, 0xff, 0xef, 0x34, 0xfb, 0xad, 0xfc, 0x19,
+ 0xba, 0x07, 0x4d, 0xad, 0xe7, 0x49, 0xba, 0xb4,
+ 0x43, 0x64, 0x8b, 0x53, 0x27, 0xd9, 0xdc, 0x6b,
+ 0xce, 0x9e, 0xf5, 0x3d, 0xf9, 0xd3, 0xbe, 0xfb,
+ 0xe2, 0xa7, 0xda, 0x18, 0xcd, 0x94, 0xe2, 0xfe,
+ 0x7d, 0xb8, 0x6a, 0xf0, 0x74, 0x72, 0x89, 0xdf,
+ 0xd0, 0x80, 0xd2, 0x7f, 0xef, 0xfc, 0xd7, 0x0c,
+ 0xaf, 0x87, 0xbe, 0x39, 0xd3, 0xfe, 0xf7, 0x45,
+ 0x05, 0xa2, 0xf9, 0x87, 0x4f, 0xd6, 0xdb, 0xb7,
+ 0xdd, 0x0e, 0x9e, 0xbe, 0x6e, 0xa3, 0xa2, 0xd3,
+ 0xd0, 0xf4, 0x30, 0xda, 0x31, 0xca, 0x68, 0x1f,
+ 0x60, 0xbe, 0x7e, 0xbf, 0x96, 0xf9, 0xf1, 0xd3,
+ 0xff, 0xff, 0x80, 0x2b, 0x5e, 0x81, 0x7c, 0xe7,
+ 0xcd, 0x70, 0xa5, 0xd6, 0xf1, 0xbf, 0x8e, 0x9f,
+ 0x7b, 0x1d, 0xad, 0x47, 0x4f, 0xea, 0xdf, 0x4e,
+ 0x9d, 0xad, 0x67, 0x4f, 0xed, 0xfb, 0xb6, 0x97,
+ 0x1a, 0x74, 0x78, 0xfb, 0x00, 0xe2, 0x15, 0x33,
+ 0x3b, 0x7d, 0x18, 0x4a, 0xcd, 0xdb, 0xce, 0x9d,
+ 0xb8, 0xa1, 0xd3, 0x77, 0x51, 0xd3, 0xca, 0x18,
+ 0x69, 0xe6, 0xcc, 0x46, 0xe7, 0xff, 0xdd, 0xae,
+ 0x38, 0x07, 0x6d, 0xfc, 0x2f, 0x1c, 0x57, 0x83,
+ 0xa7, 0xfe, 0xca, 0xf4, 0xe1, 0x80, 0xdc, 0x2e,
+ 0x0e, 0x9f, 0xdc, 0x2b, 0x7f, 0xb3, 0xdb, 0x0e,
+ 0x8f, 0xcf, 0xf8, 0x11, 0xa7, 0xfc, 0x2d, 0x70,
+ 0xa2, 0xfa, 0xad, 0xc1, 0xd0, 0xa7, 0xc7, 0xd9,
+ 0x14, 0xff, 0xff, 0xf7, 0x61, 0x41, 0x05, 0x6b,
+ 0x87, 0x5c, 0x79, 0xf7, 0x5e, 0x2d, 0xb0, 0x5d,
+ 0x0e, 0x92, 0x9d, 0x3f, 0x9f, 0xa3, 0xea, 0x2d,
+ 0x67, 0x4f, 0xff, 0xff, 0xef, 0x7f, 0x40, 0xbd,
+ 0xaf, 0x87, 0x39, 0xef, 0x80, 0x5d, 0x6f, 0xbe,
+ 0xea, 0x0b, 0xda, 0xce, 0x9d, 0xba, 0x86, 0x8a,
+ 0x62, 0x2d, 0x17, 0xa9, 0x09, 0x79, 0xff, 0x58,
+ 0x56, 0xfa, 0x61, 0x45, 0xa3, 0xa7, 0xd5, 0x85,
+ 0xb6, 0xb3, 0xa3, 0xc7, 0xcd, 0xa7, 0xd3, 0xfd,
+ 0xac, 0xe7, 0x2b, 0x55, 0xfc, 0x74, 0xff, 0xfe,
+ 0x0b, 0x4c, 0x61, 0x71, 0x46, 0x82, 0xfe, 0xe0,
+ 0xad, 0xd8, 0xe9, 0xff, 0x22, 0xb3, 0x37, 0x4b,
+ 0xf0, 0x1d, 0x0a, 0x8a, 0x2c, 0xb3, 0xcf, 0x85,
+ 0x5b, 0x28, 0x9d, 0x3f, 0x68, 0x70, 0xe5, 0x40,
+ 0xe8, 0xb3, 0xf5, 0xf1, 0x17, 0x64, 0xd1, 0x52,
+ 0xec, 0x97, 0x29, 0x5d, 0x0d, 0xd2, 0x34, 0x1a,
+ 0xc8, 0xbd, 0x08, 0x36, 0x83, 0xc6, 0x1d, 0xec,
+ 0x84, 0x60, 0x10, 0xe2, 0x35, 0x19, 0xff, 0x74,
+ 0x1d, 0xfb, 0x86, 0xf3, 0xb5, 0x1d, 0x3d, 0x61,
+ 0xd3, 0x8e, 0x74, 0xff, 0xff, 0xfb, 0x3e, 0xc6,
+ 0x6c, 0x55, 0xb7, 0x06, 0x76, 0xdf, 0xc2, 0xeb,
+ 0x7d, 0xf6, 0x1f, 0xd0, 0xe9, 0x63, 0xc8, 0xb5,
+ 0xa1, 0x34, 0xff, 0xfa, 0xef, 0x3e, 0x4c, 0xdf,
+ 0x0a, 0x77, 0x95, 0xe3, 0x9d, 0x3f, 0xfd, 0x8c,
+ 0xdf, 0xfc, 0x18, 0xb7, 0x8e, 0x6c, 0x0e, 0x9f,
+ 0xea, 0xf8, 0x31, 0x6c, 0x31, 0xc4, 0x74, 0xa9,
+ 0x68, 0x8e, 0xd5, 0x19, 0x78, 0x13, 0x0f, 0xc4,
+ 0x3a, 0x27, 0xcf, 0x5a, 0xdf, 0x43, 0xa7, 0xff,
+ 0xff, 0xfd, 0x61, 0xd3, 0x87, 0xb3, 0xdb, 0x9a,
+ 0xf6, 0x15, 0x81, 0xbd, 0x33, 0xe7, 0x5e, 0x6b,
+ 0xfd, 0x79, 0x2a, 0x7f, 0xff, 0xe4, 0xf7, 0xdc,
+ 0xf6, 0x3c, 0x3b, 0x5a, 0xa8, 0x99, 0xef, 0x35,
+ 0xef, 0xc7, 0x4d, 0xdd, 0x55, 0xa6, 0x8f, 0xe2,
+ 0x8a, 0x42, 0x92, 0x15, 0x57, 0x96, 0x63, 0x38,
+ 0x08, 0xdd, 0x67, 0xff, 0x31, 0x38, 0x67, 0x5f,
+ 0x6c, 0xd0, 0xfc, 0xe9, 0xff, 0xf7, 0x83, 0x19,
+ 0xb6, 0xfc, 0x35, 0x7c, 0x7d, 0x0f, 0xce, 0x9f,
+ 0xf9, 0x42, 0xa0, 0xb6, 0xd4, 0xed, 0x6b, 0x3a,
+ 0x28, 0x8a, 0x2e, 0xd7, 0x27, 0xaf, 0x16, 0xdc,
+ 0x9d, 0x3b, 0x8a, 0xf2, 0x74, 0xd7, 0xc9, 0xd1,
+ 0x52, 0x6d, 0x2f, 0x87, 0x65, 0x09, 0x30, 0x4a,
+ 0xd8, 0x7a, 0x7d, 0xec, 0x52, 0xff, 0x3a, 0x7e,
+ 0xe5, 0x43, 0x3a, 0xf3, 0xa7, 0x2f, 0x2a, 0x74,
+ 0xfc, 0xfb, 0xc5, 0x35, 0xae, 0x07, 0x8e, 0xc2,
+ 0xc8, 0x7a, 0x2d, 0x9a, 0x6f, 0x9f, 0x9b, 0xf3,
+ 0xbc, 0x75, 0xfc, 0xe9, 0xfc, 0x2d, 0x05, 0xe7,
+ 0x70, 0x74, 0x59, 0xf2, 0xf8, 0xd2, 0x7e, 0x5f,
+ 0xef, 0x1d, 0x6a, 0x3a, 0x1e, 0x7a, 0x20, 0x43,
+ 0x3f, 0xff, 0xec, 0x06, 0xff, 0x4a, 0xaf, 0xc1,
+ 0x80, 0xb6, 0xdc, 0x29, 0xf0, 0x1d, 0x3f, 0xef,
+ 0x5b, 0x5c, 0x28, 0xb9, 0xde, 0x39, 0xd3, 0xfb,
+ 0x6b, 0xa6, 0x6f, 0x44, 0xe8, 0xe4, 0xfd, 0x70,
+ 0x89, 0x26, 0x1d, 0x38, 0x2f, 0x93, 0xa1, 0x4d,
+ 0x5d, 0x62, 0x13, 0xf5, 0x74, 0xbb, 0x0e, 0x87,
+ 0x4f, 0x33, 0xaa, 0xfe, 0x74, 0x59, 0xe9, 0x78,
+ 0xba, 0x15, 0x3c, 0x7b, 0x87, 0x2f, 0x93, 0x85,
+ 0xce, 0x7f, 0x63, 0xd5, 0x5e, 0x7b, 0xc1, 0xd2,
+ 0x68, 0xe9, 0xfa, 0xfb, 0xbc, 0xa5, 0x47, 0x4d,
+ 0x75, 0xa9, 0xbe, 0xa0, 0x8c, 0xfd, 0x9d, 0x7b,
+ 0x07, 0xc7, 0x4f, 0xbd, 0xf8, 0xdd, 0x67, 0x47,
+ 0x44, 0x79, 0xf9, 0xcf, 0xf2, 0xce, 0xcb, 0x27,
+ 0xff, 0xe1, 0x7e, 0x6d, 0xac, 0xa8, 0x74, 0x0b,
+ 0xc6, 0x7b, 0x3a, 0x7f, 0xff, 0x7a, 0xeb, 0x7d,
+ 0x31, 0x95, 0x62, 0xfb, 0x9e, 0x0a, 0xdd, 0x8e,
+ 0x9f, 0xff, 0xff, 0x76, 0x1c, 0x3e, 0xda, 0xde,
+ 0x3b, 0xff, 0x0a, 0x76, 0xb5, 0xe6, 0xfc, 0x17,
+ 0xd0, 0xe9, 0xff, 0xf7, 0x62, 0x37, 0x8a, 0x67,
+ 0xd7, 0xc3, 0x3f, 0xa9, 0xd1, 0x68, 0xe3, 0xcc,
+ 0x23, 0x27, 0xff, 0x9e, 0xdf, 0x9b, 0x50, 0x68,
+ 0x2f, 0x14, 0xd3, 0xa7, 0xff, 0xdc, 0xdb, 0x38,
+ 0x37, 0xe1, 0x68, 0xd3, 0xf4, 0x6a, 0x3a, 0x7f,
+ 0xac, 0x2a, 0xe1, 0xfe, 0xeb, 0x47, 0x4f, 0xf0,
+ 0xd4, 0xb5, 0x55, 0xd8, 0xd4, 0x74, 0xff, 0x76,
+ 0x1c, 0x29, 0xdf, 0x17, 0x62, 0x74, 0x29, 0xfe,
+ 0x50, 0xf2, 0x7f, 0xf5, 0x5c, 0x29, 0x9e, 0xf8,
+ 0x62, 0x94, 0x51, 0x3a, 0x7f, 0xff, 0xd7, 0x5d,
+ 0x3d, 0x7f, 0x70, 0xcd, 0xe2, 0x97, 0x57, 0x0b,
+ 0xf7, 0x27, 0x45, 0xa3, 0x0f, 0xca, 0x11, 0x52,
+ 0xbd, 0xd4, 0x8d, 0x36, 0xb2, 0x7f, 0x28, 0x31,
+ 0x72, 0x90, 0xb7, 0xc4, 0x39, 0x27, 0xfd, 0xa3,
+ 0x9b, 0xc2, 0x87, 0xbf, 0x3a, 0x7f, 0xaf, 0xea,
+ 0xdf, 0x4e, 0x18, 0xf1, 0xd3, 0xff, 0xfe, 0x54,
+ 0x56, 0x70, 0x6b, 0x3e, 0x0e, 0x78, 0x75, 0x40,
+ 0xbc, 0xd9, 0xd0, 0x88, 0xe9, 0x03, 0xc6, 0xf3,
+ 0xd9, 0xef, 0x63, 0xca, 0x74, 0xff, 0xff, 0xfd,
+ 0x85, 0x60, 0x7b, 0xa6, 0x75, 0xae, 0x01, 0xdb,
+ 0x7f, 0x0b, 0xad, 0xf7, 0xd8, 0x7f, 0x43, 0xa1,
+ 0xe8, 0xb6, 0xf1, 0x0c, 0x2a, 0xf5, 0x1d, 0xce,
+ 0x1c, 0xfa, 0x36, 0x0d, 0x87, 0x3c, 0xf6, 0x29,
+ 0xbf, 0x9d, 0x3f, 0xf6, 0x7d, 0xc3, 0xc3, 0xdd,
+ 0x5a, 0x28, 0x74, 0xf7, 0xb3, 0xb5, 0x1d, 0x3f,
+ 0x63, 0x44, 0x2b, 0xf1, 0xd1, 0x68, 0xb6, 0xe8,
+ 0x44, 0x88, 0xd8, 0x22, 0x9e, 0xeb, 0xde, 0xd0,
+ 0xe9, 0xff, 0xfb, 0xc3, 0xc2, 0xfd, 0x61, 0xd3,
+ 0x3e, 0xb6, 0x5a, 0x1d, 0x3f, 0xff, 0xde, 0xa8,
+ 0x55, 0x94, 0xed, 0x78, 0x28, 0xaf, 0x39, 0x56,
+ 0x1d, 0x16, 0x8c, 0x31, 0x5b, 0x9f, 0xff, 0xfc,
+ 0x23, 0xea, 0xb8, 0x66, 0xf0, 0x0a, 0xd6, 0x6e,
+ 0xa5, 0xaf, 0x1d, 0xa1, 0xd3, 0xff, 0xff, 0x2f,
+ 0x4c, 0xaf, 0x00, 0xbe, 0xfa, 0x70, 0xad, 0xf4,
+ 0xf0, 0x75, 0x5a, 0x8e, 0x9f, 0x57, 0x4f, 0x58,
+ 0x1d, 0x16, 0x8a, 0x4e, 0xdf, 0x63, 0xc9, 0xa1,
+ 0x66, 0x31, 0xf9, 0xff, 0x9f, 0x4f, 0x74, 0xca,
+ 0xfa, 0xa5, 0xe8, 0x74, 0xff, 0x07, 0x6d, 0x05,
+ 0xe7, 0x70, 0x74, 0xff, 0x73, 0x95, 0xfb, 0x9c,
+ 0xeb, 0x0e, 0x9f, 0xff, 0xed, 0x1c, 0xde, 0x3d,
+ 0x61, 0x55, 0x16, 0xc3, 0x9c, 0xa9, 0xd3, 0xd8,
+ 0xe1, 0x50, 0x9d, 0x15, 0xa2, 0x1f, 0x58, 0xe7,
+ 0xe6, 0xab, 0x7f, 0x6b, 0x83, 0xa7, 0xfb, 0x3a,
+ 0xc0, 0xbc, 0xee, 0x0e, 0x9e, 0xb1, 0xff, 0xe3,
+ 0xa1, 0x51, 0x11, 0x43, 0x0c, 0x1b, 0x4f, 0xd7,
+ 0x81, 0x1b, 0x79, 0xd3, 0xf0, 0x5e, 0x42, 0xd0,
+ 0xe9, 0xe0, 0xba, 0x70, 0x68, 0xf4, 0xf0, 0x55,
+ 0x1c, 0xae, 0x1c, 0x24, 0x6c, 0x75, 0x95, 0x79,
+ 0x24, 0x4e, 0x33, 0x0c, 0x2c, 0x42, 0xad, 0xb4,
+ 0x20, 0xa7, 0xfe, 0x00, 0xbe, 0x03, 0x79, 0x0b,
+ 0x68, 0xe8, 0x55, 0xde, 0xcb, 0x9d, 0x1f, 0xd8,
+ 0x45, 0xcf, 0x81, 0x59, 0xbc, 0x9d, 0x3f, 0xad,
+ 0xac, 0xde, 0x17, 0x93, 0xa7, 0xff, 0xff, 0xb3,
+ 0x78, 0xa6, 0xb5, 0xc0, 0x2e, 0xb7, 0xdf, 0x75,
+ 0x05, 0xf3, 0x9f, 0x34, 0x74, 0xdd, 0xf4, 0x3a,
+ 0x05, 0x13, 0x98, 0x84, 0x1c, 0xfd, 0x75, 0x05,
+ 0xd7, 0x43, 0xa7, 0xff, 0x0d, 0x6f, 0xa5, 0xb2,
+ 0xb5, 0xce, 0x54, 0xe9, 0x50, 0xe8, 0xec, 0xf6,
+ 0xba, 0xa5, 0x4f, 0xe5, 0x60, 0x5e, 0x77, 0x07,
+ 0x4f, 0x70, 0x4a, 0xbe, 0x3a, 0x7f, 0xff, 0xd8,
+ 0x05, 0xfe, 0xb7, 0xd3, 0xb5, 0xc0, 0x5f, 0x3e,
+ 0xb1, 0x68, 0xe8, 0xf2, 0xa8, 0xb6, 0x89, 0xb6,
+ 0x19, 0xe0, 0x4f, 0x48, 0x43, 0xf6, 0x4a, 0xd8,
+ 0xc3, 0xa9, 0x2c, 0xf9, 0xfe, 0x1b, 0xac, 0xe9,
+ 0xf5, 0xd2, 0xab, 0xf8, 0xe8, 0xac, 0xf3, 0xf2,
+ 0x4f, 0x3f, 0xfe, 0xf5, 0x56, 0x9c, 0xe7, 0xd7,
+ 0xd3, 0x87, 0x4e, 0xd4, 0xe9, 0xe6, 0xfc, 0x5e,
+ 0x4e, 0x9f, 0xff, 0xf9, 0xbe, 0xb7, 0xed, 0x7c,
+ 0x03, 0xb6, 0xfe, 0x17, 0x5b, 0xef, 0xb0, 0xfe,
+ 0x87, 0x45, 0x48, 0xa5, 0xb2, 0x49, 0xff, 0xff,
+ 0xf2, 0xd7, 0x4e, 0xd6, 0xbe, 0x19, 0xbe, 0x78,
+ 0x05, 0xf7, 0xd3, 0x85, 0x3f, 0xff, 0xd8, 0x3a,
+ 0x7c, 0xa1, 0x5e, 0xd4, 0x74, 0xff, 0xff, 0xff,
+ 0xeb, 0x65, 0xa2, 0xe5, 0x59, 0x8b, 0xa5, 0x14,
+ 0x45, 0x42, 0xea, 0xbe, 0xe9, 0xdb, 0x40, 0xac,
+ 0x3a, 0x7f, 0xbf, 0xbe, 0x42, 0xf3, 0xb8, 0x3a,
+ 0x7f, 0x55, 0xda, 0xe1, 0x9e, 0xc1, 0xd3, 0xfe,
+ 0x5e, 0x8d, 0xfd, 0xd8, 0x35, 0xd5, 0x87, 0x45,
+ 0x9f, 0xdd, 0x66, 0xb3, 0xff, 0xd7, 0x8e, 0x6e,
+ 0xff, 0xa7, 0x01, 0xa7, 0x34, 0x3a, 0x7a, 0xaf,
+ 0x06, 0x0e, 0x85, 0x57, 0xd9, 0x64, 0x7e, 0x8c,
+ 0x08, 0x48, 0xd9, 0x09, 0x2c, 0x93, 0xec, 0x28,
+ 0x42, 0x16, 0x74, 0x22, 0xed, 0x4e, 0x77, 0x3c,
+ 0x1a, 0x3a, 0x7f, 0xfa, 0xb7, 0x82, 0xf0, 0x60,
+ 0x2f, 0x4c, 0x7a, 0xa3, 0xa2, 0xcf, 0xd3, 0xc4,
+ 0x13, 0xf5, 0x4d, 0x3f, 0x8d, 0x1a, 0x8e, 0x9f,
+ 0x33, 0xdc, 0xdf, 0x27, 0x49, 0xa3, 0xa6, 0x56,
+ 0x1d, 0x2c, 0x1d, 0x02, 0x69, 0x74, 0x56, 0x39,
+ 0x3d, 0x5c, 0x9b, 0x4f, 0x62, 0x9b, 0x59, 0xd3,
+ 0x35, 0xa7, 0x4f, 0xec, 0xf8, 0x6b, 0x78, 0x29,
+ 0xd0, 0xdd, 0xd3, 0x40, 0x53, 0x5b, 0x7e, 0xf1,
+ 0x1b, 0x08, 0xbb, 0x16, 0x9f, 0xd4, 0xf5, 0x7f,
+ 0x68, 0x7e, 0x74, 0xff, 0xf9, 0x45, 0x52, 0xd8,
+ 0xa8, 0xff, 0x53, 0xb6, 0x1d, 0x0d, 0x22, 0x1f,
+ 0x88, 0xd6, 0x70, 0x6b, 0x0e, 0x9b, 0xf5, 0x3a,
+ 0x3c, 0x6c, 0x00, 0x6a, 0x4e, 0xe3, 0x1d, 0x76,
+ 0x97, 0x1b, 0x09, 0xd5, 0x94, 0x13, 0x52, 0xe7,
+ 0x31, 0xb0, 0x5c, 0xee, 0x2f, 0x48, 0x5c, 0xa4,
+ 0xbe, 0xaa, 0xe3, 0xa5, 0xf4, 0x61, 0x2d, 0x43,
+ 0x68, 0x63, 0xe8, 0x64, 0x66, 0x79, 0x9e, 0xe4,
+ 0xd8, 0xc1, 0x82, 0x78, 0xa6, 0x92, 0xb2, 0x31,
+ 0x39, 0x78, 0xda, 0x31, 0x2e, 0x28, 0xd8, 0x7a,
+ 0xc3, 0x91, 0xbd, 0x5e, 0x7f, 0x3a, 0xc5, 0x37,
+ 0x50, 0xd1, 0x4e, 0xcf, 0x85, 0x37, 0x50, 0xd1,
+ 0x51, 0xcf, 0xfb, 0x5e, 0xeb, 0x14, 0xdd, 0x43,
+ 0x44, 0xd1, 0x27, 0x59, 0xfb, 0x30, 0xc2, 0x7f,
+ 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x57, 0xcf, 0x85,
+ 0x37, 0x50, 0xd1, 0x5b, 0x4f, 0xf3, 0xdd, 0x62,
+ 0x9b, 0xa8, 0x68, 0x90, 0x64, 0xeb, 0x3f, 0x1d,
+ 0x30, 0x9f, 0xf9, 0xda, 0xf7, 0x58, 0xa6, 0xea,
+ 0x1a, 0x24, 0x39, 0xf0, 0xa6, 0xea, 0x1a, 0x2c,
+ 0x49, 0xf5, 0x8a, 0x87, 0x43, 0xa7, 0xf6, 0x57,
+ 0xaf, 0x15, 0x8a, 0x9d, 0x3f, 0xf2, 0xdd, 0x2c,
+ 0x39, 0xf7, 0xea, 0x07, 0x4e, 0x05, 0xa8, 0xe9,
+ 0x3c, 0x0f, 0x77, 0xb4, 0x29, 0xdc, 0x5e, 0xfc,
+ 0xe9, 0xf7, 0x9b, 0x77, 0xb4, 0x3a, 0x70, 0xab,
+ 0xce, 0x9f, 0xd6, 0x2f, 0xfe, 0xed, 0xa3, 0xa7,
+ 0xda, 0xfe, 0xb9, 0x53, 0xa7, 0xea, 0x50, 0x7d,
+ 0xf7, 0x1c, 0xe8, 0x54, 0x46, 0x78, 0xcb, 0x4a,
+ 0x27, 0xff, 0x9e, 0xac, 0x57, 0xf2, 0x0b, 0x9d,
+ 0xb1, 0x3a, 0x7f, 0x20, 0x5b, 0x60, 0xba, 0x1d,
+ 0x15, 0x9f, 0xee, 0x53, 0x27, 0xf7, 0xeb, 0x78,
+ 0xf0, 0x7c, 0x54, 0xff, 0xa9, 0x63, 0x9d, 0xf5,
+ 0x3c, 0xd8, 0xe9, 0xff, 0x02, 0xfb, 0x9c, 0x06,
+ 0xd7, 0x43, 0xa2, 0xd5, 0xbf, 0x74, 0x30, 0x42,
+ 0x6a, 0xe1, 0x25, 0xe2, 0x86, 0x88, 0x04, 0xab,
+ 0x30, 0xa6, 0xd8, 0x55, 0xfe, 0x47, 0x43, 0x3e,
+ 0xa7, 0xf3, 0xff, 0x67, 0xcb, 0x8c, 0xef, 0x4b,
+ 0x0f, 0xce, 0x9f, 0xfe, 0xba, 0xdf, 0x8e, 0xea,
+ 0x76, 0x75, 0x9e, 0xa1, 0xd3, 0x65, 0xd6, 0x89,
+ 0x80, 0x45, 0x87, 0x26, 0xfc, 0xb1, 0xa8, 0xcf,
+ 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x2c, 0xd9, 0xff,
+ 0xce, 0x66, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x8a,
+ 0x02, 0x6e, 0xf2, 0x74, 0xfe, 0x0b, 0xc7, 0xfd,
+ 0x41, 0xa3, 0xa6, 0xe1, 0x43, 0xa7, 0x93, 0x75,
+ 0x0d, 0x16, 0xfc, 0xfd, 0xd7, 0x1a, 0x9a, 0x27,
+ 0x40, 0x9e, 0xbf, 0xe5, 0x73, 0xec, 0x3e, 0x9d,
+ 0x68, 0x74, 0xfe, 0x56, 0xdd, 0x70, 0x0b, 0xf9,
+ 0xd3, 0xdb, 0xe0, 0xc1, 0xd3, 0xfb, 0xba, 0xe8,
+ 0xa9, 0x6c, 0x3a, 0x7b, 0x3d, 0x39, 0x61, 0xd3,
+ 0x5b, 0xce, 0x8b, 0x37, 0x40, 0x4b, 0x27, 0x71,
+ 0x89, 0xf4, 0xa8, 0xbb, 0xcd, 0x6d, 0xbc, 0x48,
+ 0xb2, 0x55, 0xf9, 0xb0, 0x10, 0x61, 0xb6, 0x7f,
+ 0xda, 0xf7, 0x58, 0xa6, 0xea, 0x1a, 0x29, 0x49,
+ 0xfe, 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x12, 0x74,
+ 0x9c, 0xc4, 0x43, 0xea, 0x34, 0x2b, 0xbc, 0xb6,
+ 0xaa, 0x32, 0x2e, 0x6d, 0x78, 0x6d, 0xc7, 0x80,
+ 0x90, 0xb1, 0xf1, 0x3f, 0x1e, 0x15, 0x8d, 0x13,
+ 0x32, 0x75, 0x23, 0x25, 0x3f, 0x9d, 0xd2, 0x51,
+ 0xdb, 0x68, 0xc3, 0xa7, 0xc2, 0x9b, 0xa8, 0x68,
+ 0x87, 0xe7, 0xfd, 0xaf, 0x75, 0x8a, 0x6e, 0xa1,
+ 0xa2, 0x53, 0x93, 0xac, 0xfd, 0x98, 0x61, 0x3f,
+ 0x9d, 0x62, 0x9b, 0xa8, 0x68, 0x89, 0xe7, 0xf3,
+ 0xac, 0x53, 0x75, 0x0d, 0x11, 0x8c, 0xff, 0xe7,
+ 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0xf3,
+ 0x0a, 0x8e, 0xfa, 0x89, 0xde, 0x77, 0x93, 0xb9,
+ 0xf0, 0xa6, 0xea, 0x1a, 0x22, 0x09, 0xff, 0x6b,
+ 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x95, 0x24, 0xeb,
+ 0x3f, 0x66, 0x18, 0x4f, 0xe7, 0x58, 0xa6, 0xea,
+ 0x1a, 0x22, 0x89, 0xfc, 0xeb, 0x14, 0xdd, 0x43,
+ 0x44, 0x65, 0x3f, 0xf9, 0xcc, 0xd7, 0xba, 0xc5,
+ 0x37, 0x50, 0xd1, 0x32, 0xcf, 0xe7, 0x58, 0xa6,
+ 0xea, 0x1a, 0x2a, 0x49, 0xfc, 0xeb, 0x14, 0xdd,
+ 0x43, 0x45, 0x75, 0x3f, 0x9d, 0x62, 0x9b, 0xa8,
+ 0x68, 0xb1, 0x67, 0xfe, 0x66, 0xbd, 0xd6, 0x29,
+ 0xba, 0x86, 0x89, 0xea, 0x7f, 0xbe, 0x76, 0xaf,
+ 0xb8, 0xbc, 0xde, 0x74, 0x39, 0x11, 0x6a, 0x99,
+ 0x3f, 0x37, 0x15, 0xe3, 0xdd, 0xd0, 0xe9, 0xe1,
+ 0x66, 0x2b, 0x3a, 0x72, 0x5e, 0x4a, 0x9f, 0xff,
+ 0xb2, 0x1b, 0xd3, 0xc2, 0xaf, 0x7d, 0xd3, 0xff,
+ 0xd4, 0xe9, 0xff, 0xf8, 0x7c, 0xdf, 0xac, 0x72,
+ 0x88, 0xf9, 0xbd, 0x3b, 0xa8, 0xe9, 0xf2, 0x7b,
+ 0x3d, 0x58, 0x74, 0xff, 0xed, 0xa0, 0x5f, 0xee,
+ 0xcf, 0x93, 0x44, 0xe9, 0xf6, 0x32, 0xac, 0x43,
+ 0xa7, 0xff, 0x07, 0x05, 0x50, 0x56, 0x70, 0xe1,
+ 0x9e, 0x23, 0xa6, 0xda, 0xce, 0x9f, 0xdb, 0x4d,
+ 0xcf, 0x61, 0x51, 0xd0, 0x07, 0x93, 0xd8, 0xb4,
+ 0x79, 0x50, 0x68, 0xae, 0x31, 0x83, 0x25, 0x20,
+ 0x8f, 0x82, 0x66, 0xf8, 0x4c, 0xce, 0x0d, 0xc1,
+ 0xaa, 0x16, 0x9c, 0x1e, 0xa1, 0xd2, 0xf9, 0xba,
+ 0x3c, 0x25, 0x27, 0x9e, 0x16, 0xda, 0xc3, 0xa2,
+ 0xcf, 0x3f, 0xc5, 0xb3, 0xfe, 0xf6, 0x77, 0x0a,
+ 0xd5, 0x3c, 0xc3, 0xa7, 0xc1, 0xd3, 0xd7, 0x43,
+ 0xa7, 0xfe, 0xbf, 0xb7, 0xfb, 0x4c, 0xef, 0xf4,
+ 0x3a, 0x3c, 0x7d, 0x80, 0x51, 0x39, 0x8b, 0x93,
+ 0xa7, 0x83, 0x9e, 0x1d, 0x0e, 0x9f, 0xae, 0x9f,
+ 0x68, 0x54, 0x74, 0x59, 0xf7, 0x68, 0xd8, 0x13,
+ 0x4f, 0xbb, 0xe9, 0x4e, 0x54, 0xe8, 0xb4, 0x73,
+ 0x7a, 0x11, 0xf9, 0x2c, 0x9f, 0xff, 0xfd, 0x95,
+ 0xf0, 0x8a, 0xf5, 0xc7, 0x83, 0xb7, 0xdd, 0x39,
+ 0xef, 0x45, 0xe7, 0x4f, 0xaa, 0xe4, 0x7d, 0xf1,
+ 0xd3, 0xf7, 0x3a, 0x3f, 0xf1, 0x59, 0xd3, 0xfe,
+ 0x0f, 0x3f, 0x19, 0xb1, 0xf5, 0x0e, 0x9f, 0xf6,
+ 0xdf, 0xea, 0x1b, 0xcd, 0xf4, 0x3a, 0x1e, 0x7f,
+ 0x7f, 0x9e, 0xcf, 0xfe, 0x5b, 0xaf, 0x19, 0x5c,
+ 0x02, 0xff, 0x43, 0xa7, 0x53, 0x2c, 0x3a, 0x30,
+ 0x7c, 0xbd, 0xa4, 0xcf, 0xdd, 0xd3, 0x14, 0xbc,
+ 0x1d, 0x3b, 0xef, 0xbe, 0x2a, 0x7f, 0xf6, 0x3d,
+ 0x8a, 0x67, 0xdc, 0x5d, 0x45, 0x5e, 0x53, 0x8b,
+ 0xf8, 0xf2, 0x2a, 0xfb, 0x4d, 0x87, 0xaa, 0xc8,
+ 0xb7, 0x9f, 0x15, 0x0c, 0x2a, 0xc2, 0x11, 0x18,
+ 0x86, 0x74, 0xdd, 0x2c, 0xe9, 0xf7, 0xd8, 0x5a,
+ 0xfe, 0x3a, 0x7f, 0x2e, 0x8e, 0x7e, 0xde, 0x4a,
+ 0x9b, 0xef, 0x8a, 0x8e, 0x4f, 0x2b, 0xe3, 0x29,
+ 0xea, 0x63, 0xdc, 0x72, 0x9c, 0x69, 0x26, 0xfa,
+ 0x87, 0x4a, 0xce, 0x95, 0x76, 0x69, 0xb0, 0x2f,
+ 0x3f, 0xf5, 0x29, 0xc8, 0x2f, 0x39, 0x5c, 0x50,
+ 0xe8, 0x53, 0xec, 0xec, 0x9e, 0x7f, 0xd8, 0xf0,
+ 0xef, 0xed, 0xf8, 0xbc, 0x9d, 0x0f, 0x3e, 0x3f,
+ 0x11, 0x4f, 0x55, 0x7e, 0x13, 0xa7, 0xfc, 0xb5,
+ 0xe5, 0x58, 0x99, 0xf3, 0x47, 0x45, 0x9f, 0x00,
+ 0x90, 0xcf, 0xd8, 0x51, 0xe6, 0xc0, 0xe9, 0xfd,
+ 0xce, 0x54, 0x3e, 0xda, 0xce, 0x9f, 0xfb, 0xdc,
+ 0xe5, 0x51, 0x7f, 0xd0, 0xfc, 0xe9, 0xff, 0xff,
+ 0x79, 0x9a, 0x15, 0xbd, 0xdf, 0x5f, 0x9b, 0x58,
+ 0x5f, 0x3a, 0xf3, 0xc5, 0xeb, 0x0a, 0x98, 0xf6,
+ 0x95, 0xd0, 0xd3, 0xb4, 0x49, 0xff, 0xeb, 0xc5,
+ 0x2d, 0xac, 0xab, 0x6b, 0xce, 0x54, 0xe9, 0xff,
+ 0xff, 0xf7, 0xae, 0xba, 0x7a, 0xfe, 0xe1, 0x75,
+ 0xbe, 0x9e, 0xc5, 0x3d, 0x5f, 0x3c, 0xf7, 0x51,
+ 0xd0, 0x08, 0xdf, 0xc2, 0x84, 0xdb, 0xc9, 0xd3,
+ 0xf0, 0xed, 0x33, 0xaf, 0x3a, 0x55, 0x9d, 0x37,
+ 0xbe, 0x3a, 0x6e, 0xbf, 0x9d, 0x0d, 0x1b, 0x0f,
+ 0xc5, 0xe7, 0x3f, 0x79, 0x3a, 0x6f, 0xbe, 0x3a,
+ 0x1e, 0x8d, 0x9b, 0x16, 0x42, 0xbf, 0x20, 0xd0,
+ 0x8f, 0xe1, 0xc9, 0xd8, 0xeb, 0xf9, 0x4e, 0x3d,
+ 0x69, 0xff, 0xff, 0xd8, 0x5e, 0x73, 0xde, 0xf4,
+ 0x66, 0xf3, 0x76, 0x1d, 0x29, 0x4b, 0x0f, 0xce,
+ 0x8a, 0xd1, 0x59, 0xe3, 0x09, 0xfe, 0xbc, 0x65,
+ 0x47, 0x16, 0x87, 0x4e, 0x51, 0x68, 0xe8, 0xb5,
+ 0x4e, 0x3b, 0x1f, 0xe8, 0x12, 0x71, 0x1a, 0xce,
+ 0xa6, 0xb4, 0x74, 0xf5, 0xe3, 0x5b, 0xce, 0x8a,
+ 0xcd, 0xf8, 0x0e, 0x4f, 0xfd, 0x62, 0x36, 0xd6,
+ 0x6e, 0x9a, 0x07, 0x4f, 0xe0, 0x51, 0xed, 0x32,
+ 0xa7, 0x4f, 0xbd, 0xd3, 0x3a, 0xf3, 0xa7, 0xef,
+ 0x2b, 0x2a, 0xbf, 0x8e, 0x9b, 0xef, 0x8e, 0x84,
+ 0x3e, 0xf1, 0x29, 0xf8, 0xba, 0x7f, 0xad, 0xad,
+ 0x6b, 0x6b, 0x7d, 0x0a, 0x71, 0xae, 0x9f, 0xfd,
+ 0x61, 0xfd, 0xe7, 0xd5, 0xd3, 0x3d, 0xd0, 0xe9,
+ 0xf8, 0x37, 0xfe, 0x6c, 0x0e, 0x9f, 0x99, 0xee,
+ 0x2b, 0x1e, 0x87, 0x4e, 0xfb, 0xef, 0x8a, 0x9f,
+ 0xf9, 0x44, 0x3b, 0xde, 0xb6, 0xd2, 0xb0, 0xe7,
+ 0x17, 0xf1, 0xc7, 0x54, 0x64, 0xd4, 0x33, 0x68,
+ 0x95, 0x84, 0xce, 0xcb, 0x3e, 0x50, 0x9d, 0xa3,
+ 0x51, 0xe4, 0x12, 0x9e, 0x7d, 0xd6, 0xf3, 0xc8,
+ 0x25, 0x3a, 0x9e, 0xe4, 0xf2, 0x09, 0x4d, 0xf7,
+ 0xc7, 0x90, 0x4a, 0x11, 0x14, 0xcd, 0x14, 0x60,
+ 0xbf, 0xe2, 0xa9, 0xb7, 0x05, 0x90, 0x48, 0xe3,
+ 0x7d, 0x3f, 0x5e, 0x6e, 0xc3, 0xa1, 0xd3, 0xb4,
+ 0x3f, 0x03, 0xdf, 0xc1, 0x9c, 0xf7, 0x15, 0xee,
+ 0x4e, 0x95, 0xf1, 0xcf, 0x57, 0xf3, 0x29, 0xfc,
+ 0xd3, 0xfb, 0xab, 0x1e, 0xa8, 0xa9, 0xfd, 0xe7,
+ 0xf7, 0xb4, 0xcf, 0x8e, 0x93, 0xca, 0x9d, 0xa3,
+ 0x51, 0x50, 0x54, 0x29, 0xb5, 0x41, 0x06, 0x0d,
+ 0xcf, 0x02, 0xfe, 0x85, 0x38, 0xd6, 0x42, 0xa3,
+ 0x16, 0xe1, 0x2b, 0x3d, 0xde, 0x8b, 0xce, 0x93,
+ 0x0e, 0x9a, 0xdf, 0xc9, 0xb1, 0x68, 0x86, 0x7d,
+ 0xf5, 0xb5, 0xe6, 0x1d, 0x3f, 0x22, 0xb4, 0xf5,
+ 0xfc, 0xa9, 0x78, 0xe9, 0xfe, 0xab, 0xb7, 0xf3,
+ 0x9e, 0xf4, 0x0e, 0x9f, 0xbc, 0xac, 0xaa, 0xfe,
+ 0x3a, 0x7d, 0x75, 0x32, 0xd8, 0x74, 0xea, 0x78,
+ 0x4e, 0x80, 0x3c, 0x2c, 0x13, 0xcf, 0xc1, 0xbf,
+ 0xff, 0xdd, 0x0e, 0x9f, 0xbd, 0xd3, 0xaa, 0xb1,
+ 0xdc, 0xa6, 0x19, 0x62, 0x02, 0x79, 0x47, 0x0c,
+ 0x10, 0xc5, 0xa7, 0xa7, 0xe2, 0x90, 0x8c, 0xe6,
+ 0x78, 0x2e, 0xae, 0xce, 0x87, 0xab, 0xd8, 0xb2,
+ 0xcc, 0xc3, 0xf4, 0x15, 0xe9, 0x28, 0x07, 0x06,
+ 0xb3, 0xff, 0xea, 0x84, 0x6f, 0x9d, 0x66, 0x77,
+ 0x00, 0xad, 0x1d, 0x3f, 0xff, 0xfb, 0xb1, 0xed,
+ 0xa0, 0xdf, 0xe9, 0x4b, 0xe9, 0x7d, 0x8e, 0xf2,
+ 0xb9, 0x53, 0xa7, 0x7d, 0xf7, 0xc5, 0x4c, 0xf5,
+ 0x29, 0xc5, 0xfc, 0x2a, 0x62, 0x55, 0x2a, 0x0c,
+ 0x26, 0xa7, 0xea, 0x9a, 0x7f, 0x1a, 0x35, 0x1d,
+ 0x3d, 0x9d, 0xaf, 0xe3, 0xa7, 0xd5, 0x0f, 0x95,
+ 0x87, 0x4f, 0xff, 0x2f, 0x5c, 0x02, 0xff, 0xb8,
+ 0xff, 0xa8, 0x3c, 0xe8, 0x6e, 0xe8, 0xd2, 0xf1,
+ 0xae, 0x91, 0xe0, 0x9e, 0x73, 0xfc, 0x07, 0x4f,
+ 0xd8, 0x56, 0x83, 0xba, 0x1d, 0x0f, 0x3c, 0x9c,
+ 0x0d, 0xce, 0xef, 0xb6, 0xe4, 0xe9, 0xb5, 0xdc,
+ 0x63, 0x77, 0xda, 0xdc, 0x0d, 0x5b, 0x8c, 0x22,
+ 0x59, 0x44, 0xf5, 0x43, 0xf5, 0xe4, 0x3c, 0xc7,
+ 0x23, 0x72, 0xbf, 0x3a, 0x32, 0xa0, 0xbf, 0xa1,
+ 0x30, 0xd4, 0x65, 0x63, 0x08, 0x26, 0x46, 0x7d,
+ 0x99, 0x71, 0xbb, 0x08, 0x40, 0x21, 0xa4, 0xa7,
+ 0x2c, 0x4e, 0xea, 0xf7, 0x1b, 0xaf, 0x14, 0x60,
+ 0xfd, 0x61, 0x16, 0xde, 0x45, 0x3f, 0xf9, 0xcc,
+ 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x45, 0x4f,
+ 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x2e, 0x89, 0xff,
+ 0x9d, 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x4b,
+ 0x9f, 0xce, 0xb1, 0x4d, 0xd4, 0x34, 0x5e, 0x50,
+ 0xae, 0x84, 0x26, 0xa2, 0x77, 0x9d, 0xd9, 0xda,
+ 0x29, 0x34, 0x76, 0xc3, 0xbc, 0xc3, 0x18, 0x2b,
+ 0xc0, 0xfa, 0x47, 0x77, 0x85, 0x2e, 0xce, 0xdb,
+ 0x26, 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d,
+ 0xd4, 0x34, 0x4b, 0x33, 0x77, 0x93, 0xa7, 0x93,
+ 0x75, 0x0d, 0x11, 0x9c, 0xfd, 0xe5, 0x65, 0x57,
+ 0xf1, 0xd3, 0x03, 0xce, 0x93, 0x0e, 0x9f, 0x78,
+ 0x73, 0xae, 0x13, 0xd3, 0x61, 0x77, 0x51, 0x59,
+ 0xfb, 0x5f, 0xe1, 0xd1, 0x3a, 0x75, 0x16, 0xb3,
+ 0xa0, 0x53, 0x10, 0x63, 0xf0, 0x26, 0x60, 0xaa,
+ 0x7f, 0xec, 0x78, 0x77, 0xfe, 0x15, 0xbd, 0x58,
+ 0x74, 0xf8, 0x15, 0xf4, 0xd3, 0xa3, 0xc7, 0xd8,
+ 0xd9, 0x1e, 0x76, 0xf5, 0x79, 0xd3, 0xff, 0xf7,
+ 0xb9, 0xef, 0x14, 0xad, 0xea, 0x1f, 0xd3, 0x87,
+ 0x60, 0x74, 0xff, 0xd6, 0xcc, 0x7b, 0xea, 0x2e,
+ 0x77, 0x8e, 0x74, 0xff, 0xb2, 0xbe, 0xcf, 0x94,
+ 0x1a, 0xec, 0xe9, 0x3b, 0x8c, 0x55, 0xf3, 0x71,
+ 0x93, 0xb5, 0x0a, 0x8c, 0x92, 0x68, 0xe8, 0x31,
+ 0x51, 0x22, 0x7f, 0xf3, 0x99, 0xaf, 0x75, 0x8a,
+ 0x6e, 0xa1, 0xa2, 0x69, 0x9f, 0xfc, 0xe6, 0x6b,
+ 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x9c, 0x67, 0xff,
+ 0x39, 0x9a, 0xf7, 0x58, 0xa6, 0xea, 0x1a, 0x28,
+ 0x19, 0xf0, 0xa6, 0xea, 0x1a, 0x2e, 0x09, 0x97,
+ 0xc7, 0x4f, 0xe0, 0x7a, 0xfb, 0x9b, 0x61, 0xd2,
+ 0x75, 0x9f, 0xbe, 0x4c, 0x3b, 0x15, 0x9f, 0xde,
+ 0x77, 0x55, 0xfe, 0xfe, 0x3a, 0x7f, 0x9e, 0xeb,
+ 0x14, 0xdd, 0x43, 0x44, 0x93, 0x27, 0x64, 0xfd,
+ 0xf4, 0xda, 0x2a, 0x5e, 0x05, 0x7c, 0xb4, 0xb4,
+ 0x7a, 0x69, 0x4b, 0xf5, 0x2a, 0x43, 0x27, 0x10,
+ 0xac, 0x9f, 0xf7, 0x4d, 0x75, 0x8a, 0x6e, 0xa1,
+ 0xa2, 0xd4, 0x9f, 0xf6, 0xbd, 0xd6, 0x29, 0xba,
+ 0x86, 0x89, 0x56, 0x0e, 0x93, 0xba, 0x22, 0x61,
+ 0x89, 0x0d, 0xe8, 0xd3, 0xf9, 0xd6, 0x29, 0xba,
+ 0x86, 0x88, 0xa6, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
+ 0xd1, 0x1a, 0x4d, 0xde, 0x4e, 0x9f, 0x0a, 0x6e,
+ 0xa1, 0xa2, 0x9f, 0x93, 0xb8, 0xc3, 0xc7, 0xb1,
+ 0x79, 0xff, 0xce, 0x66, 0xbd, 0xd6, 0x29, 0xba,
+ 0x86, 0x89, 0xaa, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
+ 0xd1, 0x5d, 0xcf, 0x26, 0xea, 0x1a, 0x2b, 0xe9,
+ 0xdf, 0x7d, 0xf1, 0x52, 0x02, 0x9c, 0x5f, 0xc0,
+ 0x9f, 0x43, 0x12, 0xa7, 0x3d, 0x6b, 0x3a, 0x7f,
+ 0xd7, 0x9f, 0xb7, 0x14, 0x5b, 0xa8, 0xe9, 0x60,
+ 0xe9, 0xfe, 0xf0, 0xdd, 0x5e, 0x7d, 0xf2, 0x74,
+ 0x09, 0xe4, 0xe8, 0x84, 0x9d, 0x68, 0xe4, 0x68,
+ 0x84, 0x07, 0x29, 0x08, 0x79, 0xff, 0xce, 0x66,
+ 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0xee, 0x7f,
+ 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x70, 0xcf, 0xfc,
+ 0xed, 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x12, 0x7c,
+ 0x2a, 0xe0, 0xed, 0x47, 0x6f, 0x3b, 0xe9, 0x08,
+ 0x24, 0x2c, 0x69, 0x48, 0x63, 0x87, 0xca, 0x3d,
+ 0x14, 0x9b, 0x1d, 0xcf, 0xe7, 0x58, 0xa6, 0xea,
+ 0x1a, 0x22, 0xa9, 0xfc, 0xeb, 0x14, 0xdd, 0x43,
+ 0x45, 0x33, 0x3f, 0xf9, 0xcc, 0xd7, 0xba, 0xc5,
+ 0x37, 0x50, 0xd1, 0x33, 0xcf, 0xfe, 0x73, 0x35,
+ 0xee, 0xb1, 0x4d, 0xd4, 0x34, 0x51, 0xb1, 0x52,
+ 0x63, 0x5c, 0x9d, 0xf4, 0x3b, 0xc2, 0x94, 0xff,
+ 0xce, 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x1d,
+ 0x4d, 0xde, 0x4e, 0x9f, 0xbd, 0x61, 0xcd, 0xd4,
+ 0x74, 0xf8, 0x53, 0x75, 0x0d, 0x14, 0xd4, 0xff,
+ 0xcf, 0xcf, 0x82, 0xaa, 0x76, 0xa2, 0xd1, 0xd3,
+ 0x2f, 0x43, 0xa7, 0xef, 0x2b, 0x2a, 0xbf, 0x8e,
+ 0x9f, 0xfe, 0xbc, 0x66, 0xde, 0x3a, 0x18, 0xce,
+ 0xbc, 0xe9, 0x97, 0xf3, 0xa7, 0xf6, 0xd6, 0xa9,
+ 0xe4, 0x70, 0xa2, 0x40, 0x0b, 0xba, 0xa6, 0x46,
+ 0x51, 0xfd, 0x48, 0x53, 0xc9, 0xdc, 0x62, 0x7c,
+ 0x1c, 0x8b, 0xd9, 0x6d, 0x66, 0x18, 0x8d, 0x12,
+ 0x7c, 0x29, 0xba, 0x86, 0x8a, 0xaa, 0x7f, 0xda,
+ 0xf7, 0x58, 0xa6, 0xea, 0x1a, 0x26, 0xd9, 0x3a,
+ 0xcf, 0xd9, 0x86, 0x13, 0xf9, 0xd6, 0x29, 0xba,
+ 0x86, 0x8a, 0xfe, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
+ 0xd1, 0x63, 0x4f, 0x85, 0x37, 0x50, 0xd1, 0x6a,
+ 0xcf, 0xfb, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x45,
+ 0x05, 0x27, 0x59, 0xfb, 0x30, 0xc2, 0x7c, 0x29,
+ 0xba, 0x86, 0x8b, 0x8a, 0x79, 0xbd, 0xbf, 0xc8,
+ 0x74, 0xfe, 0x56, 0x6b, 0x65, 0x16, 0xf3, 0xa4,
+ 0xeb, 0x44, 0x66, 0x98, 0x60, 0x9e, 0x7f, 0x3a,
+ 0xc5, 0x37, 0x50, 0xd1, 0x74, 0xcf, 0xff, 0xe5,
+ 0xc8, 0x77, 0xbc, 0x7b, 0x7e, 0x6f, 0xa5, 0xf2,
+ 0xd7, 0x67, 0x4f, 0xf9, 0xf6, 0x23, 0xaf, 0xaa,
+ 0xfe, 0x3a, 0x70, 0x6b, 0x85, 0x14, 0xb8, 0x68,
+ 0x9f, 0xf0, 0xad, 0x79, 0xda, 0x61, 0x7e, 0x3a,
+ 0x6e, 0xf2, 0x74, 0xfc, 0xdd, 0x05, 0xe7, 0x70,
+ 0x74, 0xfd, 0xfe, 0xb4, 0xff, 0x60, 0xe9, 0xff,
+ 0xff, 0x74, 0x5e, 0x73, 0x75, 0xe0, 0x37, 0x3f,
+ 0xed, 0x29, 0xa2, 0x87, 0x4f, 0x26, 0xea, 0x1a,
+ 0x24, 0xc9, 0xfe, 0x1b, 0xaf, 0x18, 0xd7, 0xd0,
+ 0xe8, 0x13, 0xe3, 0x61, 0x5c, 0xfd, 0xcf, 0xed,
+ 0xd5, 0x3f, 0xe2, 0x3a, 0x7f, 0xf6, 0x7d, 0x8a,
+ 0xd3, 0xc3, 0x46, 0x97, 0x4e, 0x9f, 0x5e, 0x3c,
+ 0xcd, 0x3a, 0x7f, 0xfd, 0xa8, 0x2b, 0x90, 0xbc,
+ 0x5b, 0xbe, 0xfb, 0xe2, 0xa1, 0xe7, 0xf5, 0x82,
+ 0x69, 0xf9, 0x13, 0xb4, 0x05, 0x3a, 0x7f, 0xf7,
+ 0x61, 0xb8, 0x51, 0xa6, 0x54, 0x30, 0x74, 0xef,
+ 0xbe, 0xf8, 0xa9, 0xf8, 0x76, 0xa6, 0x7a, 0x85,
+ 0x38, 0xbf, 0x9f, 0x5b, 0x06, 0xf8, 0xe7, 0x4f,
+ 0xbd, 0x8a, 0xaf, 0xe3, 0xa7, 0xf9, 0x53, 0x21,
+ 0xde, 0x16, 0x87, 0x4f, 0xff, 0xb1, 0x9b, 0x7f,
+ 0x04, 0xcf, 0xb1, 0x5a, 0x78, 0x4e, 0x81, 0x45,
+ 0xbb, 0x0a, 0x40, 0xde, 0x7f, 0xaf, 0x7f, 0xe1,
+ 0x7c, 0xeb, 0xce, 0x9f, 0xfd, 0xb5, 0x67, 0xca,
+ 0x16, 0xd7, 0x87, 0xc7, 0x45, 0xa2, 0xc7, 0x05,
+ 0xdf, 0x1d, 0x4f, 0x82, 0xf3, 0xb8, 0x3a, 0x7f,
+ 0xcf, 0x50, 0xab, 0xa8, 0x87, 0x6f, 0x3a, 0x38,
+ 0xe7, 0xca, 0xd1, 0x2c, 0xf6, 0x2a, 0xbe, 0x4e,
+ 0x9f, 0xef, 0x74, 0xea, 0x3f, 0xb3, 0xd4, 0x3a,
+ 0x1a, 0x3e, 0x1e, 0x22, 0x39, 0xdf, 0x7d, 0xf1,
+ 0xd3, 0xff, 0xeb, 0x66, 0x01, 0x7f, 0xbe, 0x69,
+ 0x6c, 0x54, 0x29, 0xc5, 0xfc, 0x5a, 0x65, 0xfe,
+ 0x84, 0x46, 0x51, 0x67, 0xec, 0xaf, 0x04, 0xf5,
+ 0x47, 0x4f, 0xc3, 0xa2, 0x0a, 0xf3, 0xa3, 0x93,
+ 0xd8, 0x12, 0xf9, 0x9e, 0xee, 0x31, 0x7d, 0x5b,
+ 0x8d, 0x17, 0x53, 0x07, 0x97, 0xdc, 0x34, 0x3a,
+ 0x10, 0xa1, 0xcd, 0x70, 0xc4, 0xf1, 0x13, 0x45,
+ 0x5a, 0xcc, 0x07, 0x94, 0x8e, 0x47, 0x11, 0xe2,
+ 0x75, 0x84, 0x6c, 0xff, 0xe1, 0xbf, 0xb9, 0xcd,
+ 0xb4, 0x16, 0x2f, 0x3a, 0x70, 0xdf, 0x1c, 0xe9,
+ 0x58, 0x9f, 0x3b, 0x12, 0x67, 0xfe, 0xbc, 0x82,
+ 0xd5, 0xd7, 0x39, 0xde, 0x39, 0xd3, 0xf6, 0xa3,
+ 0xbe, 0xfb, 0xe3, 0xa4, 0xe4, 0x64, 0xe6, 0x09,
+ 0x96, 0xcf, 0xca, 0x04, 0x6d, 0x14, 0x26, 0x6c,
+ 0x93, 0x0f, 0x6c, 0x04, 0xb9, 0x94, 0x59, 0x5c,
+ 0x34, 0xc4, 0x9d, 0x87, 0x7f, 0xc2, 0xc6, 0x90,
+ 0xb3, 0xc1, 0xa7, 0x74, 0xaa, 0xc9, 0xfc, 0xeb,
+ 0x14, 0xdd, 0x43, 0x44, 0x6b, 0x3e, 0x14, 0xdd,
+ 0x43, 0x45, 0x4b, 0x36, 0xa1, 0xa2, 0x1a, 0x93,
+ 0xac, 0xf4, 0x74, 0xc2, 0x7f, 0xe7, 0x6b, 0xdd,
+ 0x62, 0x9b, 0xa8, 0x68, 0x8f, 0xa7, 0xf3, 0xac,
+ 0x53, 0x75, 0x0d, 0x16, 0x3c, 0xe6, 0xe3, 0xb3,
+ 0xa1, 0xd3, 0xf3, 0x74, 0x17, 0x9d, 0xc1, 0xd3,
+ 0xfc, 0x1b, 0xfd, 0x37, 0x18, 0xd3, 0xa7, 0xbf,
+ 0x67, 0x84, 0xe9, 0xff, 0xfe, 0x51, 0x0b, 0xe6,
+ 0xf3, 0x9f, 0x26, 0x7d, 0x8a, 0x6d, 0x67, 0x47,
+ 0x91, 0x0f, 0x92, 0x29, 0xdb, 0xa8, 0x68, 0xb4,
+ 0x27, 0xfd, 0xbf, 0x37, 0xa6, 0x8d, 0x57, 0xf1,
+ 0xd0, 0x87, 0xce, 0x24, 0xd3, 0xff, 0xff, 0xde,
+ 0x1c, 0xe8, 0x79, 0x71, 0xec, 0xad, 0x33, 0x74,
+ 0x1b, 0x4b, 0xc1, 0xd0, 0x28, 0x98, 0xc9, 0x04,
+ 0xfc, 0xdb, 0xae, 0x01, 0x7f, 0x3a, 0x7c, 0xb8,
+ 0xbc, 0xa9, 0xd3, 0xff, 0xd7, 0x8a, 0x5b, 0x59,
+ 0x56, 0xd7, 0x9c, 0xa9, 0xd1, 0x51, 0xfa, 0x81,
+ 0x2c, 0x2a, 0x32, 0x2e, 0x14, 0xd3, 0xfe, 0xfd,
+ 0x53, 0x3e, 0x6b, 0x76, 0xa3, 0xa7, 0xfe, 0xba,
+ 0x7b, 0xb0, 0x78, 0xad, 0xf2, 0x74, 0xfb, 0x19,
+ 0xd0, 0xe8, 0x74, 0xff, 0x07, 0x75, 0x73, 0x9b,
+ 0x05, 0x3a, 0x60, 0xbb, 0x3e, 0x14, 0x28, 0x9f,
+ 0xd7, 0x96, 0xbd, 0x9f, 0x30, 0xe9, 0xfc, 0xfb,
+ 0x1a, 0x02, 0xd4, 0x74, 0xeb, 0xce, 0x9d, 0x3e,
+ 0x6b, 0x9e, 0xfb, 0x03, 0xa3, 0x93, 0xc5, 0xd1,
+ 0xa9, 0xfe, 0xbb, 0xfa, 0xd1, 0x2f, 0xe3, 0xa2,
+ 0xd3, 0x02, 0xac, 0xd3, 0x5d, 0xa8, 0x45, 0x3d,
+ 0x79, 0xdc, 0x1d, 0x3f, 0xba, 0x78, 0x3b, 0x7d,
+ 0xd0, 0xe9, 0x3b, 0x8c, 0x5d, 0xe7, 0xe3, 0x49,
+ 0x94, 0xc3, 0x98, 0x5f, 0x5c, 0x64, 0x59, 0x87,
+ 0x57, 0xe4, 0xc0, 0x7f, 0x48, 0x52, 0x62, 0x32,
+ 0xce, 0x23, 0xde, 0xa4, 0x13, 0xf3, 0x7f, 0xb9,
+ 0x05, 0x68, 0xe9, 0xeb, 0xce, 0xe0, 0xe9, 0x37,
+ 0x56, 0x7a, 0x20, 0x63, 0x3e, 0x14, 0xdd, 0x43,
+ 0x45, 0xad, 0x3f, 0xed, 0x7b, 0xac, 0x53, 0x75,
+ 0x0d, 0x14, 0x1c, 0x9d, 0xc6, 0xa2, 0x86, 0xca,
+ 0xd8, 0x61, 0x3f, 0xf9, 0xcc, 0xd7, 0xba, 0xc5,
+ 0x37, 0x50, 0xd1, 0x45, 0xcf, 0xe7, 0x58, 0xa6,
+ 0xea, 0x1a, 0x2e, 0xa8, 0x7b, 0x26, 0xc1, 0x21,
+ 0x19, 0xe2, 0x66, 0x26, 0x66, 0x78, 0x8b, 0xf8,
+ 0xf2, 0x68, 0x75, 0x85, 0x29, 0xf0, 0xa6, 0xea,
+ 0x1a, 0x22, 0x19, 0xd9, 0xbe, 0x4e, 0x93, 0xac,
+ 0xf3, 0x2b, 0x30, 0x9f, 0xce, 0xb1, 0x4d, 0xd4,
+ 0x34, 0x46, 0xd3, 0xf9, 0xd6, 0x29, 0xba, 0x86,
+ 0x8a, 0x6e, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1,
+ 0x50, 0x4f, 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x2a,
+ 0x69, 0xf0, 0xa6, 0xea, 0x1a, 0x2b, 0x09, 0xf7,
+ 0xbe, 0xe7, 0xb1, 0x3a, 0x7f, 0x9e, 0xeb, 0x14,
+ 0xdd, 0x43, 0x44, 0x7f, 0x3a, 0xd6, 0xa3, 0xa4,
+ 0xeb, 0x45, 0xb2, 0x18, 0x69, 0x50, 0x20, 0xcf,
0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d, 0xd4, 0x34,
- 0x4e, 0x73, 0xff, 0x9c, 0xcd, 0x7b, 0xac, 0x53,
- 0x75, 0x0d, 0x14, 0x4c, 0xff, 0xc2, 0xf7, 0x63,
- 0xd5, 0x69, 0xfe, 0x01, 0xd0, 0x28, 0xea, 0xaa,
- 0x97, 0x6a, 0x53, 0xf9, 0xd6, 0x29, 0xba, 0x86,
- 0x88, 0x72, 0x7c, 0x29, 0xba, 0x86, 0x88, 0xbe,
- 0x7d, 0xb9, 0x7a, 0xf4, 0x2a, 0x4e, 0xb3, 0xd8,
- 0xf9, 0x84, 0xff, 0xe7, 0x33, 0x5e, 0xeb, 0x14,
- 0xdd, 0x43, 0x44, 0xc9, 0x3f, 0x9d, 0x62, 0x9b,
- 0xa8, 0x68, 0xb7, 0xa7, 0xff, 0x39, 0x9a, 0xf7,
- 0x58, 0xa6, 0xea, 0x1a, 0x29, 0x38, 0x54, 0xe6,
- 0x5f, 0x09, 0x3b, 0x27, 0xaa, 0x93, 0x63, 0xb9,
- 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0x3b, 0x3f,
- 0xf9, 0xcc, 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1,
- 0x2c, 0x4f, 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x23,
- 0x09, 0xf0, 0xa6, 0xea, 0x1a, 0x23, 0xd9, 0xea,
- 0xed, 0x2d, 0x8e, 0x9e, 0x76, 0xbd, 0xd6, 0x7a,
- 0x99, 0x30, 0x9f, 0xce, 0xb1, 0x4d, 0xd4, 0x34,
- 0x58, 0x73, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b,
- 0x9e, 0x15, 0x3c, 0xaa, 0x0e, 0xde, 0xa5, 0xe8,
- 0x47, 0xb0, 0xe3, 0x27, 0x73, 0xf9, 0xd6, 0x29,
- 0xba, 0x86, 0x88, 0x7a, 0x7c, 0x29, 0xba, 0x86,
- 0x88, 0x9a, 0x6c, 0xb0, 0xe9, 0xff, 0xd7, 0x8e,
- 0xb4, 0x55, 0x7d, 0x4e, 0x55, 0x87, 0x45, 0x27,
- 0xc7, 0x81, 0x69, 0xec, 0xf7, 0xbd, 0x4d, 0x10,
- 0xbc, 0x9d, 0x68, 0xe7, 0xac, 0x24, 0xfb, 0x23,
- 0x9b, 0xbc, 0x1d, 0x3d, 0x9c, 0x7b, 0x27, 0x4f,
- 0xfe, 0xf3, 0x4f, 0xba, 0x5f, 0xc1, 0x9b, 0xbf,
- 0x3a, 0x6d, 0x6f, 0x3a, 0x4d, 0xd5, 0xa2, 0x1f,
- 0x04, 0x5a, 0x9b, 0x3e, 0xc6, 0xe7, 0x5e, 0x74,
- 0xf7, 0xab, 0xe0, 0x1d, 0x38, 0x21, 0x09, 0x53,
- 0xed, 0xfe, 0x71, 0x65, 0x38, 0xbc, 0x9f, 0x6e,
- 0x5a, 0xbc, 0x9d, 0x1c, 0xa2, 0x68, 0x07, 0xdf,
- 0x35, 0x9f, 0xf8, 0x1e, 0x6b, 0x86, 0x17, 0xc3,
- 0xdf, 0x1c, 0xe9, 0xff, 0x7b, 0xa2, 0xfd, 0x6a,
- 0xbe, 0x61, 0xd3, 0xf5, 0xb6, 0xed, 0xf7, 0x53,
- 0xa7, 0xaf, 0x9b, 0xa0, 0xe8, 0xb4, 0xf3, 0x7d,
- 0x0c, 0x06, 0x8c, 0x70, 0x99, 0xf3, 0xfc, 0x97,
- 0xcf, 0xd6, 0x15, 0xbe, 0x7c, 0x74, 0xff, 0xff,
- 0xef, 0xfe, 0x95, 0xe9, 0xfb, 0xe7, 0x1e, 0x6b,
- 0x85, 0x6e, 0x97, 0x8d, 0x84, 0xe9, 0xf7, 0xb3,
- 0xda, 0xd0, 0x74, 0xfe, 0xa5, 0xf5, 0xe9, 0xda,
- 0xd2, 0x74, 0xfe, 0xd0, 0xf6, 0xd2, 0xe7, 0x4e,
- 0x8f, 0x1f, 0x5f, 0xce, 0x21, 0x53, 0x35, 0xb7,
- 0xf1, 0x84, 0xa4, 0xdd, 0xbc, 0xe9, 0xdb, 0x9a,
- 0x9d, 0x37, 0x74, 0x1d, 0x3c, 0xbf, 0xcb, 0x4f,
- 0x36, 0x62, 0x37, 0x3f, 0xfe, 0xed, 0x73, 0xc3,
- 0xfd, 0xb7, 0xf0, 0xbc, 0xf1, 0x5e, 0x4e, 0x9f,
- 0xfb, 0x0b, 0xd3, 0x86, 0x7f, 0xb9, 0x5c, 0x9d,
- 0x3f, 0xb8, 0x52, 0xff, 0x63, 0xb6, 0x1d, 0x00,
- 0x3f, 0xff, 0xa3, 0xcf, 0xf8, 0x5a, 0xe1, 0x55,
- 0xf5, 0x1b, 0x93, 0xa1, 0x4f, 0x8f, 0xb2, 0x29,
- 0xff, 0xff, 0xee, 0xff, 0x51, 0xfa, 0xb5, 0xc3,
- 0xae, 0x7c, 0xfb, 0xa7, 0x36, 0xdb, 0xf7, 0x53,
- 0xa4, 0xa7, 0x4f, 0xe7, 0xe8, 0xfa, 0xab, 0x49,
- 0xd3, 0xff, 0xff, 0xfb, 0xc0, 0xaf, 0xef, 0x69,
- 0xe1, 0xce, 0x3b, 0xe1, 0xfb, 0xa5, 0xf7, 0xdd,
- 0x1f, 0xbd, 0xa4, 0xe9, 0xdb, 0xa8, 0x68, 0xa6,
- 0x22, 0xd1, 0x7e, 0x90, 0x99, 0x9f, 0xf5, 0xfe,
- 0x97, 0xd7, 0x2a, 0x2d, 0x1d, 0x3e, 0xa7, 0xf6,
- 0xda, 0xce, 0x8f, 0x1f, 0x46, 0x9f, 0xcf, 0xf6,
- 0xb3, 0x9c, 0x2d, 0x16, 0x13, 0xa7, 0xff, 0xf7,
- 0xed, 0x33, 0x95, 0xcd, 0x5a, 0xfd, 0x87, 0x82,
- 0xb7, 0x63, 0xa7, 0xfc, 0x8a, 0xcc, 0x5d, 0x6f,
- 0xdf, 0x3a, 0x15, 0x14, 0x98, 0x68, 0x9f, 0x0a,
- 0xb6, 0x51, 0x3a, 0x7e, 0xdf, 0xf0, 0xe5, 0x7e,
- 0x74, 0x59, 0xfb, 0xf8, 0x8b, 0xb2, 0x68, 0xa1,
- 0x76, 0x7f, 0x94, 0xae, 0x87, 0x09, 0x1a, 0x1d,
- 0x24, 0x5e, 0x84, 0x33, 0x41, 0xe3, 0x0f, 0x16,
- 0x42, 0x3b, 0xe4, 0x39, 0x8d, 0x52, 0x7f, 0xdd,
- 0x07, 0x43, 0xc3, 0x79, 0xda, 0x0e, 0x9e, 0xbf,
- 0xf4, 0xe3, 0x9d, 0x3f, 0xff, 0xfe, 0xc7, 0xb3,
- 0x8b, 0x15, 0x6d, 0xc1, 0x9d, 0xb7, 0xf0, 0xba,
- 0x5f, 0x7d, 0xfc, 0x15, 0x3a, 0x59, 0xf2, 0x2d,
- 0xaa, 0x4f, 0x3f, 0xfe, 0xbb, 0xc7, 0x93, 0x17,
- 0xc2, 0xbd, 0xe1, 0x78, 0xe7, 0x4f, 0xff, 0x67,
- 0x16, 0x0e, 0x0c, 0x5b, 0xcf, 0x37, 0xf3, 0xa7,
- 0xfa, 0x9e, 0x0c, 0x5b, 0xfe, 0x78, 0x8e, 0x95,
- 0x6d, 0x11, 0xfa, 0xa3, 0x2f, 0x7d, 0x31, 0x0c,
- 0xc3, 0xa6, 0x7c, 0xf5, 0xa5, 0xf5, 0x3a, 0x7f,
- 0xff, 0xff, 0xd7, 0xfe, 0x9c, 0x3d, 0x8e, 0xdc,
- 0xd7, 0xb2, 0xac, 0xfe, 0xf4, 0xc7, 0x9d, 0x78,
- 0xa4, 0x0b, 0xc9, 0x53, 0xff, 0xff, 0x27, 0x83,
- 0xcf, 0x63, 0xc3, 0xb5, 0xa2, 0xa9, 0x8e, 0xf1,
- 0x4e, 0x84, 0xe9, 0xbb, 0xa2, 0x94, 0xd1, 0xbc,
- 0x51, 0x58, 0x52, 0xc2, 0xaa, 0xf3, 0xc4, 0x67,
- 0x3f, 0x8d, 0xd6, 0x7f, 0xf3, 0x13, 0x86, 0x35,
- 0xf6, 0xcd, 0xf8, 0x0e, 0x9f, 0xff, 0x7b, 0xf9,
- 0xc5, 0xb7, 0xe5, 0xab, 0xe3, 0xef, 0xc0, 0x74,
- 0xff, 0xcb, 0xfa, 0x3f, 0x6d, 0xab, 0xda, 0xd2,
- 0x74, 0x55, 0x14, 0xbd, 0xae, 0xcf, 0x5e, 0x6d,
- 0xb9, 0x3a, 0x77, 0x15, 0xe0, 0xe9, 0xaf, 0x93,
- 0xa2, 0x84, 0xdb, 0x1f, 0x0e, 0xfa, 0x92, 0x64,
- 0x95, 0xb0, 0xf4, 0xfd, 0xca, 0xff, 0x1a, 0xf3,
- 0xa7, 0x2f, 0x2a, 0x74, 0xfe, 0x69, 0xf7, 0x9a,
- 0xeb, 0x5c, 0x0f, 0x21, 0x85, 0xb3, 0xf3, 0x7e,
- 0x37, 0x8e, 0xa0, 0x3a, 0x7f, 0x0b, 0x5f, 0xbc,
- 0x6e, 0x4e, 0x8b, 0x3e, 0x5f, 0x19, 0xcf, 0xca,
- 0x0b, 0xcf, 0x5a, 0x0e, 0x87, 0x9e, 0x87, 0xc8,
- 0x67, 0xff, 0xfd, 0x9f, 0xe8, 0x2b, 0x45, 0xfb,
- 0xf9, 0xfd, 0xb6, 0xe1, 0x50, 0xfc, 0xe9, 0xff,
- 0x7a, 0xda, 0xe1, 0x55, 0xc6, 0xf1, 0xce, 0x9f,
- 0xdb, 0x4d, 0x71, 0x7a, 0x27, 0x47, 0x27, 0xeb,
- 0x94, 0x49, 0x30, 0xe9, 0xdf, 0xbe, 0x4e, 0x85,
- 0x35, 0x94, 0x88, 0x4f, 0xd4, 0xd6, 0xef, 0xfd,
- 0x0e, 0x9e, 0x67, 0x55, 0x01, 0xd1, 0x67, 0xa5,
- 0xe2, 0xf8, 0x54, 0xf2, 0xae, 0x1c, 0xfe, 0x4f,
- 0x17, 0x39, 0xfd, 0x9f, 0x51, 0x78, 0xef, 0x27,
- 0x4f, 0x5d, 0x2a, 0xd1, 0xd3, 0xf6, 0x35, 0xec,
- 0x1f, 0x1d, 0x3e, 0xf0, 0x06, 0xe9, 0x3a, 0x3a,
- 0x22, 0xab, 0xc6, 0xa0, 0x22, 0xec, 0xb2, 0x7f,
- 0xfe, 0x17, 0xe2, 0xda, 0xc2, 0xff, 0xa7, 0xef,
- 0x38, 0xec, 0xe9, 0xff, 0xfd, 0xeb, 0xa5, 0xf5,
- 0xce, 0x15, 0x8b, 0xee, 0x78, 0x2b, 0x76, 0x3a,
- 0x7f, 0xff, 0xfd, 0xdf, 0xf8, 0x07, 0x69, 0x78,
- 0xe8, 0x38, 0x57, 0xb5, 0xa7, 0x17, 0xef, 0xdf,
- 0x43, 0xa7, 0xff, 0xdd, 0x88, 0xde, 0x6b, 0x8f,
- 0x5f, 0x0c, 0x01, 0x4e, 0x8b, 0x47, 0x16, 0x21,
- 0x19, 0x3f, 0xfc, 0xf6, 0xfc, 0x5a, 0xfd, 0xaf,
- 0xde, 0x6b, 0xa7, 0x4f, 0xff, 0xb9, 0xb6, 0x70,
- 0x6f, 0xca, 0xd5, 0xa7, 0xe8, 0xd0, 0x74, 0xff,
- 0x5f, 0xe8, 0xe0, 0x0d, 0xd6, 0x8e, 0x9f, 0xf5,
- 0x7b, 0xff, 0x0a, 0xf7, 0xc5, 0xd8, 0x9d, 0x3f,
- 0xfa, 0x8e, 0x15, 0xc7, 0x7c, 0x33, 0x5a, 0xa8,
- 0x9d, 0x3f, 0xff, 0xeb, 0xa6, 0xbe, 0xb0, 0xf0,
- 0xc5, 0xe6, 0xb7, 0x47, 0x0b, 0xf7, 0x27, 0x45,
- 0xa3, 0x0b, 0xca, 0x11, 0x42, 0xb8, 0x74, 0x8d,
- 0x32, 0x92, 0x7f, 0x29, 0x31, 0x72, 0xa7, 0x79,
- 0x8c, 0x26, 0x7f, 0xda, 0x38, 0xbc, 0xaf, 0xfc,
- 0x03, 0xa7, 0xfa, 0xc3, 0x4b, 0xeb, 0xc3, 0x3e,
- 0x3a, 0x7f, 0xff, 0xca, 0x8a, 0xce, 0x0d, 0x63,
- 0xdf, 0xe7, 0x87, 0x54, 0xfd, 0xe2, 0xce, 0x84,
- 0x47, 0x57, 0xcf, 0x1b, 0xcf, 0x27, 0xbd, 0x9f,
- 0x29, 0xd3, 0xff, 0xff, 0xf6, 0x55, 0x9f, 0xf7,
- 0x4c, 0x6b, 0x5c, 0x3f, 0xdb, 0x7f, 0x0b, 0xa5,
- 0xf7, 0xdf, 0xc1, 0x53, 0xa1, 0xe8, 0xb8, 0xf1,
- 0x0c, 0x2a, 0xf2, 0x7d, 0xcb, 0xe5, 0xf4, 0x6b,
- 0xbb, 0x0e, 0xa9, 0xec, 0xd7, 0x40, 0x74, 0xff,
- 0xd8, 0xf7, 0x0f, 0x0f, 0x74, 0x68, 0xa1, 0xd3,
- 0xde, 0xc6, 0xd0, 0x74, 0xfd, 0x9d, 0x1f, 0xd3,
- 0xe3, 0xa2, 0xd1, 0x6d, 0xd0, 0x85, 0x11, 0xb2,
- 0x45, 0x3d, 0xd7, 0xbd, 0xa9, 0xd3, 0xff, 0xf7,
- 0x87, 0x85, 0xfa, 0xff, 0xd3, 0x1e, 0xb6, 0x5a,
- 0x1d, 0x3f, 0xff, 0xde, 0xa0, 0x55, 0x95, 0xed,
- 0x78, 0x28, 0xaf, 0x38, 0x56, 0x1d, 0x16, 0x8c,
- 0x41, 0x5c, 0x9f, 0xff, 0xfc, 0x23, 0xea, 0x38,
- 0x62, 0xf3, 0xf5, 0x6b, 0x17, 0x42, 0xd3, 0x9e,
- 0xd0, 0xe9, 0xff, 0xff, 0x97, 0xa6, 0x17, 0x87,
- 0xef, 0xbe, 0x9c, 0x29, 0x7d, 0x7d, 0xfe, 0xab,
- 0x41, 0xd3, 0xea, 0x6b, 0xeb, 0xf9, 0xd1, 0x68,
- 0xa7, 0xed, 0xfe, 0x3c, 0x9a, 0x36, 0x23, 0x23,
- 0x9f, 0xf9, 0xf5, 0xf7, 0x4c, 0x2f, 0xa8, 0x5e,
- 0x87, 0x4f, 0xf7, 0xfb, 0x6b, 0xf7, 0x8d, 0xc9,
- 0xd3, 0xfd, 0xce, 0x14, 0x3c, 0xe3, 0x58, 0x74,
- 0xff, 0xff, 0x68, 0xe2, 0xf3, 0xeb, 0xfd, 0x15,
- 0x5b, 0xff, 0x38, 0x53, 0xa7, 0xb3, 0xc2, 0x81,
- 0x3a, 0x29, 0x44, 0x4e, 0xb2, 0xcf, 0xcd, 0x52,
- 0xfe, 0xd7, 0x27, 0x4f, 0xf6, 0x35, 0x9f, 0xbc,
- 0x6e, 0x4e, 0x9e, 0xb1, 0x00, 0x4e, 0x85, 0x44,
- 0x3d, 0x4c, 0x32, 0x6f, 0x3f, 0x5e, 0x44, 0x6d,
- 0xe7, 0x4f, 0xdf, 0xbc, 0x7e, 0xd0, 0xe9, 0xef,
- 0xdd, 0x78, 0x34, 0x7a, 0xb9, 0x2a, 0x8e, 0x57,
- 0x10, 0x52, 0x36, 0x7a, 0x4a, 0xbc, 0x92, 0x27,
- 0x58, 0x86, 0x1e, 0x61, 0x54, 0xda, 0x10, 0x93,
- 0xff, 0x7f, 0xf7, 0xc0, 0x6f, 0x1f, 0xb6, 0x8e,
- 0x85, 0x5d, 0xf9, 0xb9, 0xd2, 0x9d, 0x84, 0x5c,
- 0xfb, 0xea, 0xcd, 0xe4, 0xe9, 0xfd, 0x6d, 0x62,
- 0xf2, 0xbc, 0x9d, 0x3f, 0xff, 0xfd, 0x8b, 0xcd,
- 0x75, 0xae, 0x1f, 0xba, 0x5f, 0x7d, 0xd1, 0xfb,
- 0xe7, 0x1e, 0x68, 0xe9, 0xbb, 0xe8, 0x74, 0x0a,
- 0x27, 0xb3, 0x08, 0x59, 0xfa, 0xe8, 0xfd, 0xd3,
- 0x53, 0xa7, 0xff, 0x0d, 0x2f, 0xad, 0xb2, 0x95,
- 0xc6, 0x14, 0xe9, 0x54, 0xe8, 0xec, 0xf6, 0xba,
- 0xa5, 0x4f, 0xe5, 0x67, 0xef, 0x1b, 0x93, 0xa7,
- 0xff, 0xfd, 0x9f, 0xa8, 0x29, 0x7d, 0x7b, 0x5c,
- 0xfe, 0xf9, 0xf5, 0x8b, 0x47, 0x47, 0x95, 0x36,
- 0x34, 0x4f, 0xb0, 0xd1, 0xf9, 0x3d, 0x61, 0x11,
- 0xd9, 0x2f, 0x53, 0x19, 0xf3, 0xfc, 0x37, 0x49,
- 0xd3, 0xeb, 0xad, 0x16, 0x13, 0xa2, 0x93, 0xce,
- 0xc1, 0x3c, 0xff, 0xfb, 0xd4, 0x5a, 0x73, 0x8f,
- 0x5f, 0x4e, 0x1d, 0x3b, 0x53, 0xa7, 0x9b, 0xf3,
- 0x78, 0x3a, 0x7f, 0xff, 0xe6, 0xfa, 0x5f, 0xb4,
- 0xf0, 0xff, 0x6d, 0xfc, 0x2e, 0x97, 0xdf, 0x7f,
- 0x05, 0x4e, 0x8a, 0x11, 0x4d, 0x64, 0x93, 0xff,
- 0xff, 0xe5, 0xa6, 0xbd, 0xad, 0x3c, 0x31, 0x7c,
- 0xf0, 0xfd, 0xf7, 0xd3, 0x85, 0x40, 0x0f, 0x64,
- 0xe9, 0xf2, 0xfe, 0x9d, 0xa0, 0xe9, 0xff, 0xff,
- 0xff, 0xd6, 0xcb, 0x45, 0xc2, 0xb3, 0x37, 0x5a,
- 0xa8, 0x8a, 0xfe, 0xe8, 0xbe, 0xeb, 0xdb, 0x5f,
- 0x56, 0x1d, 0x3f, 0xc0, 0xbe, 0x7f, 0x78, 0xdc,
- 0x9d, 0x3f, 0xa8, 0xed, 0x72, 0xcf, 0x64, 0xe9,
- 0xff, 0x2f, 0x46, 0xfe, 0xef, 0xed, 0x75, 0x61,
- 0xd1, 0x67, 0xf9, 0x49, 0xac, 0xff, 0xf5, 0xe7,
- 0x9b, 0xb0, 0x57, 0x80, 0xd7, 0x9a, 0x9d, 0x3d,
- 0x47, 0xbf, 0x93, 0xa1, 0x55, 0xf8, 0x59, 0x1f,
- 0xa3, 0x03, 0x12, 0x36, 0x42, 0x47, 0x05, 0x1b,
- 0x0a, 0x3f, 0xc2, 0xd2, 0xa4, 0x5d, 0xa9, 0x4e,
- 0xe7, 0x83, 0x47, 0x4f, 0xff, 0x52, 0xff, 0xaf,
- 0x06, 0x7d, 0x7a, 0x67, 0xd4, 0x1d, 0x16, 0x7e,
- 0xde, 0x20, 0x9f, 0xa8, 0x69, 0xfc, 0x68, 0xd0,
- 0x74, 0xf9, 0x9e, 0xe6, 0xf9, 0x3a, 0x4d, 0x1d,
- 0x32, 0xb0, 0xe9, 0x64, 0xe8, 0x13, 0x4b, 0xa2,
- 0xb1, 0xc9, 0xea, 0xe0, 0xda, 0x7b, 0x35, 0xda,
- 0x4e, 0x99, 0xad, 0x3a, 0x7f, 0x63, 0xc3, 0x4b,
- 0xfe, 0xa7, 0x43, 0x77, 0x4d, 0x05, 0x4d, 0x6d,
- 0xfb, 0xc4, 0x6c, 0x22, 0xec, 0x5a, 0x7f, 0x57,
- 0xd4, 0x87, 0x7e, 0x03, 0xa7, 0xff, 0xca, 0x2a,
- 0x96, 0xc5, 0x47, 0xfa, 0xbd, 0xb0, 0xe8, 0x69,
- 0x10, 0xdc, 0x46, 0x93, 0xbf, 0xac, 0x3a, 0x60,
- 0x29, 0xd1, 0xe3, 0x61, 0xf1, 0xb9, 0x3b, 0x8c,
- 0x75, 0xbd, 0x9c, 0x6c, 0x27, 0x96, 0x50, 0x35,
- 0x0b, 0xbc, 0xc6, 0xc3, 0x73, 0xba, 0x5d, 0x21,
- 0x74, 0x92, 0xfa, 0xe9, 0x8e, 0xa7, 0xd0, 0x9b,
- 0x6a, 0x30, 0x31, 0x8f, 0xb1, 0x90, 0xea, 0xc4,
- 0xf4, 0x7e, 0xc6, 0x0b, 0xf9, 0xe3, 0x6a, 0xca,
- 0xa9, 0xcc, 0xe5, 0x8b, 0x68, 0xc5, 0x78, 0xa3,
- 0x62, 0xeb, 0x0e, 0x36, 0xf5, 0x79, 0xfc, 0xeb,
- 0x14, 0xdd, 0x43, 0x45, 0x3b, 0x3e, 0x14, 0xdd,
- 0x43, 0x45, 0x47, 0x3f, 0xed, 0x7b, 0xac, 0x53,
- 0x75, 0x0d, 0x13, 0x44, 0x9d, 0x67, 0xec, 0xc3,
- 0x09, 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0x5f,
- 0x3e, 0x14, 0xdd, 0x43, 0x45, 0x6d, 0x3f, 0xcf,
- 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x41, 0x93, 0xac,
- 0xfc, 0x74, 0xc2, 0x7f, 0xe7, 0x6b, 0xdd, 0x62,
- 0x9b, 0xa8, 0x68, 0x90, 0xe7, 0xc2, 0x9b, 0xa8,
- 0x68, 0xb1, 0x27, 0xd6, 0x2b, 0xfe, 0x87, 0x4f,
- 0xec, 0x2f, 0x5e, 0x2b, 0x15, 0x3a, 0x7f, 0xe5,
- 0xba, 0xdf, 0xf9, 0xf0, 0x17, 0xe7, 0x4e, 0xfa,
- 0xd0, 0x74, 0x9f, 0xf3, 0xdf, 0xed, 0x0e, 0x77,
- 0x17, 0x80, 0x74, 0xfb, 0xcd, 0xbb, 0xda, 0x9d,
- 0x38, 0x55, 0xe7, 0x4f, 0xeb, 0x17, 0x82, 0xed,
- 0xa3, 0xa7, 0xda, 0xfe, 0xb8, 0x53, 0xa7, 0xea,
- 0xd4, 0x7c, 0x1e, 0x39, 0xd0, 0xa8, 0x8a, 0xf1,
- 0x8e, 0x94, 0x4f, 0xff, 0x3d, 0x58, 0xaf, 0xe7,
- 0xeb, 0x8d, 0xb1, 0x3a, 0x7f, 0x27, 0xed, 0xb7,
- 0xee, 0xa7, 0x45, 0x28, 0x80, 0xc2, 0x6c, 0xfe,
- 0x02, 0xde, 0x7d, 0xf0, 0x95, 0x16, 0xac, 0x17,
- 0xa1, 0x82, 0x13, 0xd3, 0x09, 0x4f, 0x14, 0xb4,
- 0x3e, 0x25, 0x58, 0x85, 0x26, 0xc2, 0xb8, 0x04,
- 0x93, 0xff, 0x63, 0xcb, 0x9c, 0x6f, 0x4b, 0xf8,
- 0x0e, 0x9f, 0xfe, 0xba, 0x5f, 0x9e, 0xe8, 0x76,
- 0x35, 0x9e, 0xa9, 0xd3, 0x61, 0xd6, 0x89, 0x8f,
- 0xa2, 0xc3, 0x93, 0x62, 0x58, 0xcd, 0x27, 0xf3,
- 0xac, 0x53, 0x75, 0x0d, 0x16, 0x6c, 0xff, 0xe7,
- 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0x01,
- 0x37, 0x78, 0x3a, 0x7f, 0x7e, 0xf2, 0x0e, 0xbf,
- 0x68, 0xe9, 0xb8, 0x54, 0xe9, 0xe4, 0xdd, 0x43,
- 0x45, 0xbf, 0x3f, 0x75, 0xce, 0xa6, 0x89, 0xd0,
- 0x27, 0xae, 0x02, 0xb9, 0xf6, 0x5f, 0x5e, 0xb5,
- 0x3a, 0x7f, 0x2b, 0x6e, 0xb9, 0xfa, 0x80, 0xe9,
- 0xed, 0xf7, 0xf2, 0x74, 0xfe, 0xee, 0x9a, 0xaa,
- 0x5b, 0x0e, 0x9e, 0xc7, 0x4e, 0x58, 0x74, 0xd6,
- 0xf3, 0xa2, 0xcd, 0xd7, 0xc9, 0x64, 0xee, 0x31,
- 0x3e, 0xb5, 0x17, 0x79, 0xb5, 0xb7, 0x89, 0x0e,
- 0x0a, 0x80, 0x6d, 0xf2, 0x1c, 0xb6, 0xcf, 0xfb,
- 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0x29, 0x3f,
- 0xcf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x4e, 0x93,
- 0x98, 0x88, 0x7d, 0x46, 0x85, 0x77, 0x67, 0xb4,
- 0x46, 0x45, 0xcd, 0xae, 0x27, 0xb8, 0xf0, 0x12,
- 0x16, 0x3e, 0x27, 0xe3, 0xc2, 0xb1, 0xa2, 0x66,
- 0x4e, 0x59, 0xe0, 0xa4, 0x07, 0x75, 0x94, 0x7a,
- 0xda, 0x30, 0xe9, 0xf0, 0xa6, 0xea, 0x1a, 0x21,
- 0xf9, 0xff, 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68,
- 0x94, 0xe4, 0xeb, 0x3f, 0x66, 0x18, 0x4f, 0xe7,
- 0x58, 0xa6, 0xea, 0x1a, 0x22, 0x79, 0xfc, 0xeb,
- 0x14, 0xdd, 0x43, 0x44, 0x63, 0x3f, 0xf9, 0xcc,
- 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x3c, 0xc2,
- 0xa3, 0xbe, 0x82, 0x77, 0x9d, 0xe0, 0xee, 0x7c,
- 0x29, 0xba, 0x86, 0x88, 0x82, 0x7f, 0xda, 0xf7,
- 0x58, 0xa6, 0xea, 0x1a, 0x25, 0x49, 0x3a, 0xcf,
- 0xd9, 0x86, 0x13, 0xf9, 0xd6, 0x29, 0xba, 0x86,
- 0x88, 0xa2, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1,
- 0x19, 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d,
- 0xd4, 0x34, 0x4c, 0xb3, 0xf9, 0xd6, 0x29, 0xba,
- 0x86, 0x8a, 0x92, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
- 0xd1, 0x5d, 0x4f, 0xe7, 0x58, 0xa6, 0xea, 0x1a,
- 0x2c, 0x59, 0xff, 0x99, 0xaf, 0x75, 0x8a, 0x6e,
- 0xa1, 0xa2, 0x7a, 0x9f, 0xe0, 0xbb, 0x57, 0xdc,
- 0x5e, 0x6f, 0x3a, 0x1c, 0x88, 0xa5, 0x4c, 0x9f,
- 0x9b, 0x8a, 0xf3, 0xee, 0xea, 0x74, 0xf0, 0xb3,
- 0x34, 0x9d, 0x39, 0x2f, 0x05, 0x4f, 0xff, 0xd8,
- 0xfe, 0xf4, 0xf0, 0xab, 0xdf, 0x75, 0x00, 0x14,
- 0xe9, 0xff, 0xf8, 0x7c, 0xdf, 0xac, 0x72, 0x88,
- 0xf9, 0xbd, 0x3b, 0xa0, 0xe9, 0xf2, 0x7b, 0x1d,
- 0x58, 0x74, 0xff, 0xed, 0xaf, 0xec, 0x0e, 0xc7,
- 0x93, 0x44, 0xe9, 0xf6, 0x70, 0xac, 0x43, 0xa7,
- 0xff, 0x7f, 0x82, 0xaf, 0xd5, 0x9c, 0x38, 0x63,
- 0x88, 0xe9, 0xb6, 0x93, 0xa7, 0xf6, 0xd7, 0x71,
- 0xdf, 0xe8, 0x3a, 0x3e, 0x79, 0x5d, 0x8b, 0x47,
- 0x95, 0x08, 0x0a, 0xdb, 0x18, 0x30, 0x53, 0xf4,
- 0x7c, 0x93, 0x37, 0xc2, 0x72, 0x77, 0xf7, 0x26,
- 0xa8, 0x5a, 0x77, 0xfd, 0x53, 0xa4, 0x16, 0xe8,
- 0xf1, 0x14, 0xa2, 0x78, 0x5b, 0x6b, 0x0e, 0x8b,
- 0x3c, 0xef, 0x16, 0x4f, 0xfb, 0xd8, 0xdc, 0xab,
- 0x55, 0xf3, 0x0e, 0x9f, 0x7f, 0xa7, 0xae, 0xa7,
- 0x4f, 0xfd, 0x61, 0xd0, 0x5a, 0x63, 0x41, 0x53,
- 0xa3, 0xc7, 0xd5, 0xf2, 0x99, 0xef, 0xf3, 0xc3,
- 0xa1, 0xd3, 0xf5, 0xd4, 0x3b, 0xfa, 0x0e, 0x8d,
- 0x3d, 0x4f, 0x93, 0xcf, 0xbb, 0xe9, 0x5e, 0x54,
- 0xe8, 0xb4, 0x61, 0x79, 0xdb, 0x04, 0x33, 0xff,
- 0xff, 0xb0, 0xbe, 0x11, 0x5e, 0xb9, 0xf7, 0xfb,
- 0x7d, 0xd7, 0x9e, 0xf4, 0x5e, 0x74, 0xfa, 0x8e,
- 0x47, 0xc1, 0x3a, 0x7e, 0xe7, 0x44, 0x1c, 0x56,
- 0x74, 0xff, 0xbf, 0xe7, 0xe7, 0x16, 0x3e, 0xa9,
- 0xd3, 0xfe, 0xdb, 0x02, 0xff, 0x79, 0xbe, 0x87,
- 0x43, 0xcf, 0xf0, 0x07, 0xd3, 0xff, 0x96, 0xe9,
- 0xce, 0x17, 0x3f, 0x50, 0x54, 0xe9, 0xd5, 0xc3,
- 0x0e, 0x8c, 0x9f, 0x2f, 0x69, 0x33, 0xf7, 0x75,
- 0xcd, 0x6f, 0x27, 0x4e, 0x08, 0x42, 0x54, 0xff,
- 0xec, 0xfb, 0x35, 0xc7, 0xb8, 0xba, 0x8a, 0xbc,
- 0xa7, 0x17, 0x91, 0xe4, 0x54, 0x76, 0x95, 0x0f,
- 0x55, 0x89, 0x6f, 0x5e, 0x29, 0x18, 0x55, 0xfe,
- 0x10, 0xf9, 0x86, 0x5c, 0xdd, 0x2c, 0xe9, 0xf0,
- 0x72, 0xb4, 0x84, 0xe9, 0xfc, 0xba, 0x38, 0x0e,
- 0xf2, 0x54, 0xc1, 0x09, 0x51, 0xc9, 0xe3, 0x84,
- 0xc6, 0x7a, 0xb9, 0xf7, 0x1c, 0xa7, 0x1a, 0x39,
- 0x83, 0x53, 0xa5, 0x67, 0x4a, 0x9b, 0x34, 0xb9,
- 0x16, 0x9f, 0xfa, 0xb5, 0xe7, 0xeb, 0xce, 0x17,
- 0x35, 0x3a, 0x14, 0xfb, 0x7b, 0x27, 0x9f, 0xf6,
- 0x7c, 0x3a, 0x06, 0xfc, 0xde, 0x0e, 0x87, 0x9f,
- 0x17, 0x88, 0xa7, 0xa8, 0xbf, 0x09, 0xd3, 0xfe,
- 0x5a, 0x70, 0xac, 0x4c, 0x79, 0xa3, 0xa2, 0xcf,
- 0x80, 0x48, 0x67, 0xec, 0xa8, 0xf3, 0x7f, 0x3a,
- 0x7f, 0x73, 0x85, 0xf8, 0x76, 0x93, 0xa7, 0xfe,
- 0xf7, 0x38, 0x54, 0x50, 0x6f, 0xc0, 0x74, 0xff,
- 0xff, 0xbc, 0xcd, 0xfd, 0x2f, 0x70, 0x6f, 0xcd,
- 0xaf, 0xf7, 0xce, 0xbc, 0xf1, 0x7a, 0xc2, 0xa6,
- 0x3f, 0xa5, 0x95, 0x34, 0xed, 0x0e, 0x7f, 0xfa,
- 0xf3, 0x5b, 0x6b, 0x0a, 0xda, 0xf1, 0x85, 0x3a,
- 0x7f, 0xff, 0xfd, 0xeb, 0xa6, 0xbe, 0xb0, 0xf0,
- 0xba, 0x5f, 0x5f, 0x66, 0xbe, 0xa7, 0x9e, 0x7b,
- 0xa0, 0xe8, 0xfa, 0x37, 0xb2, 0xa1, 0x37, 0x82,
- 0x74, 0xdd, 0x40, 0x74, 0x34, 0x6b, 0x80, 0x2d,
- 0x39, 0xfb, 0xc9, 0xd3, 0x04, 0x27, 0x47, 0x8f,
- 0x52, 0xa4, 0x41, 0x1c, 0x9d, 0x9e, 0xa0, 0x29,
- 0xc6, 0xbe, 0x7f, 0xff, 0xf6, 0x57, 0x9c, 0x77,
- 0xbd, 0x19, 0xbc, 0xdd, 0xff, 0xa5, 0x6b, 0x7f,
- 0x01, 0xd1, 0x4a, 0x2a, 0xfc, 0x5d, 0x3f, 0xd7,
- 0x9c, 0x28, 0xe6, 0xd0, 0xe9, 0xca, 0x2d, 0x1d,
- 0x16, 0x9f, 0x9e, 0xc6, 0xff, 0xf2, 0x4e, 0x23,
- 0x59, 0xf7, 0xef, 0x3a, 0xde, 0x74, 0xff, 0xd6,
- 0x23, 0x6d, 0x62, 0xeb, 0xbf, 0x3a, 0x7f, 0x7d,
- 0x47, 0xb4, 0xc2, 0x9d, 0x3e, 0xf7, 0x4c, 0x6b,
- 0xce, 0x9f, 0xbc, 0xac, 0xa2, 0xc2, 0x74, 0xc1,
- 0x09, 0xd0, 0x87, 0xd8, 0x25, 0x21, 0x2d, 0x9f,
- 0xeb, 0x6b, 0x5a, 0xda, 0x5f, 0x52, 0x9c, 0x6b,
- 0x67, 0xff, 0x5f, 0xc1, 0x78, 0xf5, 0x35, 0xc7,
- 0x75, 0x3a, 0x7e, 0xfe, 0x83, 0x9b, 0xf9, 0xd3,
- 0xf3, 0x3d, 0xc5, 0x63, 0xd0, 0xe9, 0xc1, 0x08,
- 0x4a, 0x9f, 0xf9, 0x47, 0xfd, 0xef, 0x5b, 0x69,
- 0x58, 0x73, 0x8b, 0xc8, 0xe3, 0xaa, 0x2e, 0x6a,
- 0x19, 0x55, 0x4a, 0xca, 0x67, 0x65, 0xa1, 0x4d,
- 0x9d, 0xa3, 0x41, 0xe4, 0x12, 0x9e, 0x7d, 0xd2,
- 0xf3, 0xc8, 0x25, 0x3a, 0xbe, 0xe4, 0xf2, 0x09,
- 0x4c, 0x10, 0x9e, 0x41, 0x28, 0x44, 0x52, 0x34,
- 0x51, 0x92, 0xf0, 0x95, 0x4d, 0xb9, 0x2c, 0x82,
- 0x47, 0x1b, 0xd9, 0xfa, 0xf1, 0x77, 0xfe, 0x87,
- 0x4e, 0xdf, 0x83, 0xe7, 0xc1, 0x93, 0x39, 0xee,
- 0x2b, 0xdc, 0x1d, 0x2b, 0xe3, 0x9e, 0xb0, 0x0c,
- 0xe7, 0xf3, 0x4f, 0xee, 0x8c, 0xfa, 0x82, 0xa7,
- 0xf7, 0x9f, 0xde, 0xd7, 0x1e, 0x3a, 0x4f, 0x2a,
- 0x76, 0x8d, 0x05, 0x41, 0x50, 0xa6, 0xd5, 0x04,
- 0x18, 0x37, 0x3d, 0xf5, 0x02, 0x14, 0xe3, 0x59,
- 0x0a, 0x8c, 0x5b, 0x84, 0xac, 0xf7, 0x7a, 0x2f,
- 0x3a, 0x4c, 0x3a, 0x6b, 0x7f, 0x26, 0xc5, 0xa2,
- 0x19, 0xf0, 0x6d, 0xaf, 0x30, 0xe9, 0xf9, 0x15,
- 0xa7, 0xa8, 0x0a, 0x97, 0x8e, 0x9f, 0xea, 0x3b,
- 0x7f, 0x38, 0xef, 0x7e, 0x74, 0xfd, 0xe5, 0x65,
- 0x16, 0x13, 0xa7, 0xd7, 0x43, 0x2d, 0x87, 0x4e,
- 0xaf, 0x84, 0xe8, 0xf9, 0xe1, 0x64, 0x9e, 0x7e,
- 0xfe, 0x80, 0x1d, 0xd4, 0xe9, 0xfb, 0xdd, 0x3a,
- 0xab, 0x1d, 0xca, 0x61, 0x96, 0x20, 0x27, 0xb5,
- 0x6f, 0xc9, 0x14, 0x5a, 0x7a, 0x3e, 0x28, 0xfc,
- 0x67, 0x13, 0xdf, 0xba, 0x3b, 0x3a, 0x1e, 0xaf,
- 0x5e, 0xca, 0xf1, 0x0f, 0xdf, 0xab, 0xd6, 0x3f,
- 0xfc, 0x9b, 0x4f, 0xff, 0xa8, 0x11, 0xbe, 0x75,
- 0x98, 0xdc, 0xfd, 0x5a, 0x3a, 0x70, 0x42, 0x12,
- 0xa6, 0x7a, 0x94, 0xe2, 0xf2, 0x15, 0x12, 0xa2,
- 0xe3, 0x3f, 0x50, 0xd3, 0xf8, 0xd1, 0xa0, 0xe9,
- 0xec, 0x6d, 0x21, 0x3a, 0x7d, 0x40, 0xf9, 0x58,
- 0x74, 0xff, 0xf2, 0xf5, 0xcf, 0xd4, 0x1b, 0x90,
- 0x75, 0xfb, 0xce, 0x86, 0xee, 0x8d, 0x1f, 0x1a,
- 0xe9, 0x16, 0x49, 0xe7, 0x3f, 0xdf, 0x3a, 0x7e,
- 0xca, 0xb5, 0xfe, 0xea, 0x74, 0x3c, 0xf2, 0xf2,
- 0x39, 0x3b, 0xbe, 0xdb, 0x93, 0xa6, 0xd7, 0x71,
- 0x8d, 0xd3, 0x93, 0x70, 0x35, 0x6e, 0x30, 0x89,
- 0x65, 0x15, 0x51, 0x0f, 0xf7, 0x90, 0xf3, 0x1b,
- 0x5d, 0xca, 0xf3, 0xe8, 0xcc, 0x82, 0xfe, 0x84,
- 0x93, 0x51, 0x95, 0x0c, 0x20, 0x99, 0x19, 0xfe,
- 0x25, 0x87, 0x6a, 0x2f, 0xca, 0x6b, 0x29, 0xbf,
- 0x33, 0xba, 0x5d, 0xc3, 0xe3, 0x8a, 0x1e, 0x5d,
- 0x61, 0x1a, 0xde, 0x45, 0x3f, 0xf9, 0xcc, 0xd7,
- 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x45, 0x4f, 0xe7,
- 0x58, 0xa6, 0xea, 0x1a, 0x2e, 0x89, 0xff, 0x9d,
- 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x4b, 0x9f,
- 0xce, 0xb1, 0x4d, 0xd4, 0x34, 0x5e, 0x50, 0xad,
- 0xfc, 0x3d, 0x04, 0xef, 0x3b, 0xb3, 0xb4, 0x52,
- 0x68, 0xed, 0x87, 0x78, 0x86, 0x2f, 0xeb, 0xa9,
- 0x4a, 0xc7, 0x6b, 0x95, 0x2e, 0xce, 0xdb, 0x26,
- 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d, 0xd4,
- 0x34, 0x4b, 0x33, 0x77, 0x83, 0xa7, 0x93, 0x75,
- 0x0d, 0x11, 0x9c, 0xfd, 0xe5, 0x65, 0x16, 0x13,
- 0xa6, 0xfb, 0xce, 0x93, 0x0e, 0x9f, 0x78, 0x71,
- 0xae, 0x13, 0xd3, 0x61, 0x6f, 0x51, 0x69, 0xfb,
- 0x5f, 0xe1, 0xd1, 0x3a, 0x75, 0x56, 0x93, 0xa0,
- 0x53, 0x10, 0x63, 0xf7, 0xd3, 0x32, 0x55, 0x3f,
- 0xf6, 0x7c, 0x3a, 0x0e, 0x14, 0xbd, 0x58, 0x74,
- 0xfb, 0xea, 0xfa, 0xe9, 0xd1, 0xe3, 0xec, 0x6c,
- 0x8d, 0x3b, 0x7a, 0xbc, 0xe9, 0xff, 0xfb, 0xdc,
- 0xf7, 0x9a, 0xd2, 0xf5, 0xf8, 0x2b, 0xc3, 0xbf,
- 0x9d, 0x3f, 0xf5, 0xb3, 0x3e, 0x0d, 0x57, 0x1b,
- 0xc7, 0x3a, 0x7f, 0xd8, 0x5f, 0x63, 0xcb, 0xf6,
- 0xbb, 0x3a, 0x4e, 0xe3, 0x15, 0x7d, 0xdc, 0x64,
- 0xed, 0x42, 0xa7, 0x04, 0x9a, 0x3b, 0xf6, 0x3a,
- 0xa3, 0xcf, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d,
- 0xd4, 0x34, 0x4d, 0x33, 0xff, 0x9c, 0xcd, 0x7b,
- 0xac, 0x53, 0x75, 0x0d, 0x13, 0x8c, 0xff, 0xe7,
- 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0x03,
- 0x3e, 0x14, 0xdd, 0x43, 0x45, 0xc1, 0x32, 0xf8,
- 0xe9, 0xfd, 0xf7, 0xaf, 0xb9, 0xb6, 0x1d, 0x27,
- 0x59, 0xfc, 0x60, 0xc3, 0xb1, 0x59, 0xfd, 0xe7,
- 0x75, 0x50, 0x58, 0x4e, 0x9f, 0xe7, 0xba, 0xc5,
- 0x37, 0x50, 0xd1, 0x24, 0xc9, 0xd8, 0x3f, 0x5d,
- 0x34, 0x8a, 0x17, 0x81, 0xdf, 0x2d, 0x35, 0x1e,
- 0xda, 0x52, 0x02, 0x95, 0x61, 0x95, 0x98, 0x55,
- 0x4f, 0xfb, 0xa6, 0xba, 0xc5, 0x37, 0x50, 0xd1,
- 0x6a, 0x4f, 0xfb, 0x5e, 0xeb, 0x14, 0xdd, 0x43,
- 0x44, 0xab, 0x07, 0x49, 0xdd, 0x11, 0x30, 0xc4,
- 0x86, 0xf4, 0x69, 0xfc, 0xeb, 0x14, 0xdd, 0x43,
- 0x44, 0x53, 0x3f, 0x9d, 0x62, 0x9b, 0xa8, 0x68,
- 0x8d, 0x26, 0xef, 0x07, 0x4f, 0x85, 0x37, 0x50,
- 0xd1, 0x4f, 0xc9, 0xdc, 0x61, 0xe3, 0xd8, 0xbc,
- 0xff, 0xe7, 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43,
- 0x44, 0xd5, 0x3f, 0x9d, 0x62, 0x9b, 0xa8, 0x68,
- 0xae, 0xe7, 0x93, 0x75, 0x0d, 0x15, 0xf4, 0xe0,
- 0x84, 0x25, 0x4b, 0xe5, 0x38, 0xbc, 0x81, 0x3e,
- 0x66, 0x23, 0xce, 0x7a, 0xd2, 0x74, 0xff, 0xaf,
- 0x01, 0xdc, 0xd5, 0x6e, 0x83, 0xa5, 0x93, 0xa7,
- 0xfb, 0xc3, 0x74, 0x79, 0xf7, 0xc9, 0xd0, 0x27,
- 0x93, 0xa2, 0x12, 0x75, 0xa3, 0x8d, 0xa2, 0x1f,
- 0x8e, 0x56, 0x10, 0xd3, 0xff, 0x9c, 0xcd, 0x7b,
- 0xac, 0x53, 0x75, 0x0d, 0x13, 0xdc, 0xfe, 0x75,
- 0x8a, 0x6e, 0xa1, 0xa2, 0xe1, 0x9f, 0xf9, 0xda,
- 0xf7, 0x58, 0xa6, 0xea, 0x1a, 0x24, 0xf8, 0x55,
- 0xc1, 0xba, 0x0e, 0xde, 0x77, 0xd2, 0x10, 0x48,
- 0x58, 0xd2, 0x90, 0xc7, 0x09, 0x84, 0x8a, 0xa9,
- 0x36, 0x3b, 0x9f, 0xce, 0xb1, 0x4d, 0xd4, 0x34,
- 0x45, 0x53, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8a,
- 0x66, 0x7f, 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e,
- 0xa1, 0xa2, 0x67, 0x9f, 0xfc, 0xe6, 0x6b, 0xdd,
- 0x62, 0x9b, 0xa8, 0x68, 0xa3, 0x62, 0x84, 0xc6,
- 0xb9, 0x3b, 0xe8, 0x77, 0x95, 0x29, 0xff, 0x9d,
- 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x3a, 0x9b,
- 0xbc, 0x1d, 0x3f, 0x7a, 0xff, 0xcd, 0xd0, 0x74,
- 0xf8, 0x53, 0x75, 0x0d, 0x14, 0xd4, 0xff, 0xcf,
- 0xc7, 0xbf, 0x45, 0x7b, 0x51, 0x68, 0xe9, 0xfb,
- 0xca, 0xca, 0x2c, 0x27, 0x4f, 0xff, 0x5e, 0x71,
- 0x6f, 0x1d, 0xfe, 0x71, 0xaf, 0x3a, 0x65, 0x01,
- 0xd3, 0xfd, 0x5d, 0xa5, 0x53, 0xc8, 0xe1, 0x44,
- 0x7f, 0xcb, 0x7a, 0xa6, 0xc9, 0xdc, 0x62, 0x75,
- 0x3c, 0x8b, 0xd9, 0x75, 0x26, 0x19, 0x86, 0xb4,
- 0xf8, 0x53, 0x75, 0x0d, 0x15, 0x54, 0xff, 0xb5,
- 0xee, 0xb1, 0x4d, 0xd4, 0x34, 0x4d, 0xb2, 0x75,
- 0x9f, 0xb3, 0x0c, 0x27, 0xf3, 0xac, 0x53, 0x75,
- 0x0d, 0x15, 0xfc, 0xfe, 0x75, 0x8a, 0x6e, 0xa1,
- 0xa2, 0xc6, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0xd5,
- 0x9f, 0xf6, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x8a,
- 0x0a, 0x4e, 0xb3, 0xf6, 0x61, 0x84, 0xf8, 0x53,
- 0x75, 0x0d, 0x17, 0x14, 0xf3, 0x7b, 0x7f, 0x90,
- 0xe9, 0xfc, 0xac, 0xd6, 0xca, 0x2d, 0xe7, 0x49,
- 0xd6, 0x88, 0xcd, 0x30, 0xc9, 0x3c, 0xfe, 0x75,
- 0x8a, 0x6e, 0xa1, 0xa2, 0xe9, 0x9f, 0xff, 0xcb,
- 0x8f, 0xf7, 0xbc, 0x7b, 0x7e, 0x2f, 0xa5, 0xf2,
- 0xd7, 0x67, 0x4f, 0xf9, 0xf6, 0x23, 0xaf, 0xa2,
- 0xc2, 0x74, 0xef, 0xeb, 0x85, 0x14, 0xb9, 0x69,
- 0x9f, 0xf0, 0xad, 0x38, 0xda, 0xe5, 0x42, 0x74,
- 0xdd, 0xe0, 0xe9, 0xf9, 0xba, 0xfd, 0xe3, 0x72,
- 0x74, 0xfc, 0x0d, 0x69, 0xfe, 0xc9, 0xd3, 0xff,
- 0xfe, 0xe8, 0xbc, 0xe2, 0xe9, 0xcf, 0xf7, 0x00,
- 0xda, 0xd7, 0x45, 0x0e, 0x9e, 0x4d, 0xd4, 0x34,
- 0x49, 0x93, 0xfc, 0x37, 0x4e, 0x73, 0xaf, 0xa9,
- 0xd0, 0x27, 0xc6, 0xc2, 0xb9, 0xfb, 0x90, 0x37,
- 0x55, 0x07, 0x11, 0xd3, 0xff, 0xb1, 0xec, 0xd2,
- 0x9e, 0x1a, 0xb4, 0xba, 0x74, 0xfa, 0xf3, 0xe6,
- 0x69, 0xd3, 0xff, 0xed, 0x41, 0x5c, 0x7e, 0xf3,
- 0x6e, 0x08, 0x42, 0x54, 0x3c, 0xfe, 0x32, 0x4d,
- 0x3f, 0x22, 0x76, 0x9f, 0x53, 0xa7, 0xff, 0x77,
- 0xfd, 0xca, 0x8d, 0x70, 0xbf, 0xc9, 0xd3, 0x82,
- 0x10, 0x95, 0x3f, 0x0e, 0xd0, 0xcf, 0x54, 0xa7,
- 0x17, 0x93, 0xeb, 0x60, 0xdf, 0x1c, 0xe9, 0xf7,
- 0xb3, 0x45, 0x84, 0xe9, 0xfe, 0x54, 0xc7, 0xfb,
- 0xca, 0xd4, 0xe8, 0x13, 0xe0, 0x61, 0x44, 0xff,
- 0x5e, 0x83, 0x85, 0xf3, 0xaf, 0x3a, 0x7f, 0xf6,
- 0xd1, 0x8f, 0x2f, 0xed, 0xaf, 0x0f, 0x8e, 0x8b,
- 0x45, 0x26, 0x48, 0x42, 0x73, 0x3e, 0xfd, 0xe3,
- 0x72, 0x74, 0xff, 0x9e, 0xbf, 0xa3, 0xa8, 0xff,
- 0xb7, 0x9d, 0x1c, 0x73, 0xe8, 0x68, 0x9a, 0x7b,
- 0x34, 0x5f, 0x27, 0x4f, 0xf7, 0xba, 0x75, 0x10,
- 0x33, 0xd5, 0x3a, 0x1a, 0x3e, 0x0e, 0x22, 0x39,
- 0xc1, 0x08, 0x4e, 0x9f, 0xff, 0x5b, 0x33, 0xf5,
- 0x05, 0xf3, 0x5b, 0x62, 0xa1, 0x4e, 0x2f, 0x22,
- 0xd3, 0x2b, 0xf4, 0x21, 0xf0, 0x85, 0x3f, 0x61,
- 0x78, 0x27, 0xa8, 0x3a, 0x7e, 0x1d, 0x1f, 0xab,
- 0xce, 0x8e, 0x4f, 0x64, 0x4b, 0xe6, 0x7b, 0xb8,
- 0xc5, 0xee, 0xde, 0x34, 0x5d, 0x4c, 0x5e, 0x5d,
- 0x70, 0xd0, 0xe8, 0x42, 0x86, 0xf4, 0xc3, 0x0b,
- 0xc4, 0x4d, 0x15, 0xeb, 0x2f, 0xcf, 0x2b, 0x19,
- 0x6e, 0x63, 0xc2, 0xeb, 0x08, 0xe9, 0xff, 0xc3,
- 0x61, 0xe7, 0x16, 0xd7, 0xec, 0x5e, 0x74, 0xe1,
- 0xbe, 0x39, 0xd2, 0xb1, 0x3e, 0x76, 0x24, 0xcf,
- 0xfd, 0x78, 0xfa, 0xd1, 0xd7, 0x18, 0xde, 0x39,
- 0xd3, 0xf6, 0xa3, 0x82, 0x10, 0x9d, 0x27, 0x23,
- 0x25, 0x88, 0x4c, 0xf6, 0x7c, 0xab, 0xf1, 0xb4,
- 0xd4, 0x99, 0xb2, 0x54, 0x3d, 0x9e, 0xe3, 0xcc,
- 0x7e, 0xb4, 0xc3, 0x48, 0x49, 0xd8, 0x76, 0x08,
- 0x58, 0xd6, 0x16, 0x79, 0x34, 0xee, 0x94, 0x85,
- 0x3f, 0x9d, 0x62, 0x9b, 0xa8, 0x68, 0x8d, 0x67,
- 0xc2, 0x9b, 0xa8, 0x68, 0xa9, 0x66, 0xd4, 0x34,
- 0x43, 0x52, 0x75, 0x9e, 0x8e, 0x98, 0x4f, 0xfc,
- 0xed, 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x11, 0xf4,
- 0xfe, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0xc7, 0x9c,
- 0xdc, 0x76, 0x74, 0x3a, 0x7e, 0x6e, 0xbf, 0x78,
- 0xdc, 0x9d, 0x3f, 0xdf, 0xd0, 0x57, 0x73, 0x9d,
- 0x3a, 0x78, 0x0c, 0xf0, 0x9d, 0x3f, 0xff, 0xca,
- 0x3f, 0xbe, 0x6f, 0x18, 0xf2, 0x63, 0xd9, 0xae,
- 0xd2, 0x74, 0x79, 0x10, 0xf8, 0x21, 0x9d, 0xba,
- 0x86, 0x8b, 0x42, 0x7f, 0xda, 0x16, 0xf4, 0xd1,
- 0xa2, 0xc2, 0x74, 0x85, 0x0f, 0x94, 0x49, 0xa7,
- 0xe6, 0xdd, 0x73, 0xf5, 0x01, 0xd3, 0xe5, 0xcd,
- 0xe1, 0x4e, 0x9f, 0xfe, 0xbc, 0xd6, 0xda, 0xc2,
- 0xb6, 0xbc, 0x61, 0x4e, 0x8a, 0x0f, 0xd7, 0xe4,
- 0xb0, 0xa8, 0xc9, 0xb8, 0x53, 0x4f, 0xf8, 0x0a,
- 0x98, 0xf3, 0x5b, 0xb4, 0x1d, 0x3f, 0xf5, 0xd7,
- 0xdd, 0xfd, 0xe2, 0xb7, 0xc9, 0xd3, 0xec, 0xe3,
- 0x7f, 0xd0, 0xe9, 0xfe, 0xff, 0x74, 0x73, 0x8b,
- 0xfa, 0x9d, 0x37, 0xee, 0xcf, 0x91, 0x0a, 0x67,
- 0xf5, 0xe1, 0xaf, 0x63, 0xcc, 0x3a, 0x7f, 0x3e,
- 0xc6, 0xbf, 0x5a, 0x0e, 0x9d, 0x78, 0xd3, 0xa7,
- 0xcd, 0x73, 0xdf, 0x7f, 0x3a, 0x39, 0x3c, 0x6d,
- 0x1a, 0x9f, 0xeb, 0xb0, 0xda, 0x25, 0x84, 0xe8,
- 0xb4, 0xc0, 0xa9, 0x34, 0xd7, 0x8a, 0x91, 0x4f,
- 0x5e, 0x37, 0x27, 0x4f, 0xee, 0x9e, 0xff, 0x6f,
- 0xba, 0x9d, 0x27, 0x71, 0x8b, 0xaa, 0xfc, 0x69,
- 0x32, 0x98, 0xf3, 0x0b, 0xeb, 0x84, 0x46, 0x21,
- 0xdc, 0x02, 0x6f, 0x9f, 0x56, 0x15, 0x19, 0x8c,
- 0xb7, 0x88, 0xf7, 0xa9, 0x04, 0xfc, 0xdf, 0xee,
- 0x7e, 0xad, 0x1d, 0x3d, 0x78, 0xdc, 0x9d, 0x26,
- 0xea, 0xcf, 0x4b, 0xe6, 0x53, 0xe1, 0x4d, 0xd4,
- 0x34, 0x5a, 0xd3, 0xfe, 0xd7, 0xba, 0xc5, 0x37,
- 0x50, 0xd1, 0x41, 0xc9, 0xdc, 0x6a, 0x28, 0xac,
- 0xb1, 0x86, 0x13, 0xff, 0x9c, 0xcd, 0x7b, 0xac,
- 0x53, 0x75, 0x0d, 0x14, 0x5c, 0xfe, 0x75, 0x8a,
- 0x6e, 0xa1, 0xa2, 0xea, 0x87, 0xb2, 0x48, 0x52,
- 0x11, 0x9e, 0x26, 0x62, 0x66, 0x27, 0x64, 0x81,
- 0x1e, 0x55, 0x4e, 0xb2, 0xa5, 0x3e, 0x14, 0xdd,
- 0x43, 0x44, 0x43, 0x3b, 0x17, 0xc9, 0xd2, 0x75,
- 0x9e, 0x65, 0x26, 0x13, 0xf9, 0xd6, 0x29, 0xba,
- 0x86, 0x88, 0xda, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
- 0xd1, 0x4d, 0xcf, 0xe7, 0x58, 0xa6, 0xea, 0x1a,
- 0x2a, 0x09, 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x45,
- 0x4d, 0x3e, 0x14, 0xdd, 0x43, 0x45, 0x61, 0x3e,
- 0xf0, 0x79, 0xec, 0x4e, 0x9f, 0xe7, 0xba, 0xc5,
- 0x37, 0x50, 0xd1, 0x1f, 0xce, 0xb5, 0xa0, 0xe9,
- 0x3a, 0xd1, 0x6a, 0x86, 0x1a, 0x53, 0xf4, 0x19,
- 0xff, 0xce, 0x66, 0xbd, 0xd6, 0x29, 0xba, 0x86,
- 0x89, 0xbe, 0x7f, 0xe6, 0x6b, 0xdd, 0x62, 0x9b,
- 0xa8, 0x68, 0x9f, 0xa7, 0xcd, 0xdd, 0xba, 0xe2,
- 0xba, 0x4e, 0x96, 0x0e, 0x86, 0xec, 0x78, 0xdd,
- 0x9b, 0x4f, 0xff, 0x2a, 0xaa, 0xaa, 0xaa, 0xaa,
- 0xd3, 0x53, 0xa7, 0xc3, 0xea, 0x35, 0x85, 0x4c,
- 0x10, 0x95, 0x16, 0x6f, 0x42, 0x4f, 0x2e, 0xca,
- 0x71, 0xa0, 0x85, 0x46, 0x3d, 0x61, 0x4d, 0x3f,
- 0x0e, 0xa6, 0x3c, 0x27, 0x4f, 0x50, 0xcf, 0x3c,
- 0xe9, 0xf5, 0x7f, 0xde, 0xbc, 0xe9, 0xfd, 0x85,
- 0x63, 0x80, 0x05, 0x3a, 0x42, 0xa7, 0xfb, 0x64,
- 0x7e, 0x28, 0x9f, 0xf2, 0xd3, 0xcf, 0x55, 0xe3,
- 0xe3, 0xba, 0x9d, 0x38, 0x15, 0xb3, 0xa7, 0xfe,
- 0xe5, 0x73, 0xb5, 0xbc, 0x63, 0xcc, 0x3a, 0x76,
- 0x7c, 0xd1, 0xd0, 0xa7, 0xc3, 0x54, 0x48, 0x54,
- 0xf9, 0x3c, 0x4e, 0x30, 0xa7, 0x61, 0x97, 0xd1,
- 0xf2, 0xf9, 0x3d, 0xad, 0x75, 0x61, 0xd3, 0x6f,
- 0xce, 0x81, 0x37, 0x2c, 0x24, 0x9c, 0x10, 0x84,
- 0xe9, 0xea, 0x3f, 0xe5, 0x29, 0xc5, 0xe4, 0xf5,
- 0x39, 0xf2, 0x1d, 0x0a, 0x88, 0xfc, 0x1e, 0x76,
- 0x63, 0x3f, 0xf5, 0x1d, 0x82, 0xff, 0xdb, 0x4b,
- 0x9d, 0x3a, 0x79, 0x73, 0x54, 0x34, 0x41, 0xd3,
- 0xf6, 0xe1, 0x78, 0xfd, 0xbc, 0xe8, 0x14, 0x52,
- 0xe5, 0x1d, 0xb1, 0x6c, 0xc3, 0xc9, 0xd3, 0x04,
- 0x27, 0x43, 0xcd, 0x60, 0x45, 0xa7, 0xaa, 0xbe,
- 0x6c, 0x53, 0x8d, 0x0c, 0xfa, 0xbd, 0x79, 0x05,
- 0x4e, 0x8f, 0x1e, 0xf7, 0x53, 0x39, 0xc1, 0x08,
- 0x4a, 0x82, 0x9c, 0x5e, 0x4f, 0x78, 0x3e, 0x68,
- 0xa8, 0x43, 0x79, 0xe1, 0x98, 0xf2, 0x6f, 0x18,
- 0x86, 0xe7, 0xdf, 0x27, 0x7f, 0xd5, 0x3a, 0x7b,
- 0x9d, 0xf8, 0x0e, 0x9f, 0xf9, 0x7e, 0x0f, 0xad,
- 0x2d, 0x2f, 0xc0, 0x74, 0x79, 0x10, 0x60, 0x1c,
- 0xa9, 0x14, 0xf9, 0x6c, 0x71, 0xe3, 0xa7, 0xb9,
- 0xb6, 0x71, 0xce, 0x86, 0x8f, 0x2d, 0xb1, 0x2c,
- 0xfd, 0x9b, 0x6b, 0xea, 0xc3, 0xc4, 0x05, 0x3e,
- 0xdf, 0xf3, 0x85, 0x34, 0x40, 0x4e, 0x37, 0x53,
- 0xfc, 0xa3, 0x47, 0x0b, 0x6b, 0xcc, 0x3a, 0x7c,
- 0xa0, 0xf5, 0x35, 0x3a, 0x7f, 0x0b, 0x55, 0xf7,
- 0xf3, 0xe3, 0xa7, 0xa9, 0x00, 0xa9, 0x53, 0x04,
- 0x25, 0x42, 0x9b, 0x70, 0x90, 0xcf, 0xda, 0x2f,
- 0x7f, 0xfc, 0x53, 0x8d, 0x04, 0x2a, 0xa4, 0x8b,
- 0x7b, 0xf2, 0xfe, 0x11, 0x3e, 0x77, 0x92, 0x8e,
- 0xe1, 0x17, 0x3e, 0xef, 0x3d, 0xef, 0x53, 0x44,
- 0x0f, 0x3f, 0xec, 0x77, 0x42, 0xf0, 0x5c, 0xaf,
- 0x27, 0x4e, 0xd1, 0xa0, 0xe9, 0x82, 0x13, 0xa7,
- 0xf0, 0xfa, 0xdb, 0x75, 0x7b, 0x90, 0xd8, 0x84,
- 0x6e, 0x39, 0x45, 0xf8, 0xb9, 0xcf, 0xfd, 0xfb,
- 0xe9, 0x8d, 0x7f, 0x5d, 0xa5, 0x4e, 0x85, 0x3e,
- 0xab, 0x23, 0x9f, 0xfd, 0x6c, 0x66, 0xbe, 0xc5,
- 0x37, 0x50, 0xd1, 0x0c, 0x46, 0x0f, 0xc7, 0xe4,
- 0x13, 0xf5, 0x8a, 0x6e, 0xa1, 0xa2, 0x0a, 0x9e,
- 0xcd, 0x54, 0x05, 0x4e, 0xd1, 0xa0, 0xa9, 0xee,
- 0xff, 0xbd, 0x0a, 0x9f, 0xde, 0xa2, 0xf3, 0x55,
- 0x01, 0x50, 0x54, 0xfd, 0x68, 0xb8, 0x56, 0x15,
- 0x30, 0x42, 0x54, 0xfd, 0xf5, 0xfd, 0x1e, 0x12,
- 0xa2, 0xd3, 0x0a, 0x42, 0x16, 0x0d, 0xe0, 0x90,
- 0x06, 0x7f, 0x0a, 0x09, 0x57, 0x51, 0x69, 0xbc,
- 0x25, 0x38, 0xfc, 0xa5, 0xaf, 0x4f, 0x5f, 0x11,
- 0xd8, 0xcf, 0xf9, 0x5f, 0xbf, 0xba, 0x8a, 0xd4,
- 0xe9, 0xfe, 0xce, 0x15, 0xb7, 0x2a, 0x05, 0x3a,
- 0x7f, 0x96, 0x97, 0xf1, 0x2a, 0x5b, 0x0e, 0x85,
- 0x3f, 0x4c, 0x1d, 0x4f, 0xff, 0xcd, 0x6e, 0xbf,
- 0x71, 0xc2, 0xe8, 0xef, 0x3d, 0xef, 0x53, 0x45,
- 0xf7, 0x3e, 0xf6, 0x7f, 0x6f, 0x3a, 0x7f, 0xdf,
- 0xf3, 0xf3, 0x8b, 0x1f, 0x54, 0xe9, 0xfd, 0x90,
- 0x75, 0xfb, 0xf1, 0x67, 0x88, 0x06, 0x76, 0x8b,
- 0xcf, 0x10, 0x0c, 0x59, 0xf4, 0xf6, 0x85, 0x36,
- 0xbc, 0xf1, 0x00, 0xcf, 0x6f, 0xe9, 0x79, 0xe2,
- 0x01, 0x9f, 0xde, 0x4c, 0x58, 0x00, 0xa7, 0x88,
- 0x06, 0x77, 0xbf, 0xc9, 0xe2, 0x01, 0x8e, 0x51,
- 0x72, 0xc2, 0x2c, 0x17, 0xb6, 0x3e, 0x9c, 0x2b,
- 0x93, 0xc4, 0x03, 0x07, 0x88, 0x06, 0x65, 0x61,
- 0xe2, 0x01, 0x8e, 0x4d, 0xcf, 0x85, 0xe7, 0xbc,
- 0xce, 0x54, 0xf1, 0x00, 0xce, 0xce, 0xa1, 0xe2,
- 0x01, 0x9f, 0xf7, 0xf5, 0xee, 0xc7, 0x93, 0x44,
- 0xf1, 0x00, 0xcd, 0xbc, 0x9e, 0x20, 0x19, 0xfd,
- 0xfd, 0x0d, 0x6a, 0xa0, 0x3c, 0x40, 0x33, 0xef,
- 0x74, 0xdf, 0x80, 0xf1, 0x00, 0xcd, 0xea, 0x9e,
- 0x20, 0x18, 0x13, 0xd9, 0xc9, 0xb4, 0xfb, 0x3f,
- 0x5a, 0x5e, 0x68, 0x80, 0x66, 0x02, 0x9e, 0x20,
- 0x17, 0x1b, 0x59, 0xf7, 0x95, 0x9b, 0xc9, 0xe2,
- 0x01, 0x9e, 0xef, 0x7e, 0x87, 0x88, 0x06, 0x72,
- 0x8a, 0x1e, 0x20, 0x19, 0xff, 0x5d, 0x35, 0xe5,
- 0x6f, 0xe0, 0xa9, 0xe2, 0x01, 0x9f, 0x77, 0xaf,
- 0x7a, 0x9e, 0x20, 0x18, 0xb4, 0x40, 0x61, 0x32,
- 0x61, 0x01, 0xe2, 0x01, 0x87, 0xaa, 0x8f, 0xe4,
- 0x8e, 0xe1, 0x31, 0xe5, 0x6c, 0x19, 0x00, 0xd2,
- 0xa5, 0xd9, 0x85, 0x37, 0x64, 0x53, 0xeb, 0xcd,
- 0x76, 0x93, 0xc4, 0x03, 0x3f, 0xb9, 0x54, 0x68,
- 0x57, 0x27, 0x88, 0x07, 0x93, 0x69, 0x38, 0x54,
- 0x27, 0x88, 0x06, 0x10, 0xfd, 0xc5, 0x42, 0x7b,
- 0xdf, 0x7d, 0x4f, 0x10, 0x0c, 0xfd, 0xad, 0x3e,
- 0xe9, 0x79, 0xe2, 0x01, 0x8b, 0x44, 0x50, 0x08,
- 0x3b, 0x2f, 0x9f, 0xec, 0x2d, 0x5d, 0x5e, 0xc4,
- 0x07, 0x88, 0x06, 0x5e, 0x3c, 0x40, 0x33, 0x6d,
- 0x1c, 0x9f, 0x1e, 0x11, 0xa6, 0x10, 0x1e, 0x20,
- 0x19, 0xf6, 0xe6, 0xbe, 0xa4, 0xf1, 0x00, 0xcf,
- 0xde, 0xff, 0x6f, 0xba, 0x9e, 0x20, 0x18, 0x54,
- 0x49, 0x7c, 0x8b, 0x26, 0xb1, 0xcb, 0x20, 0x3a,
- 0xe1, 0xb6, 0xd2, 0x00, 0xb0, 0x60, 0x8b, 0x4b,
- 0xc0, 0x4f, 0x59, 0x5b, 0x19, 0x8f, 0x03, 0x8a,
- 0x12, 0x7d, 0x61, 0x83, 0x3b, 0x75, 0x0d, 0x10,
- 0x0b, 0x91, 0x79, 0x3d, 0xd1, 0xb8, 0x72, 0xc3,
- 0xa6, 0x02, 0x95, 0x2e, 0x85, 0x4e, 0xc2, 0xd0,
- 0x74, 0xc1, 0x09, 0x51, 0xe3, 0xd9, 0xe3, 0x8a,
- 0xb4, 0x24, 0x11, 0xc9, 0xcc, 0xf5, 0x4a, 0x71,
- 0xe0, 0xcf, 0x66, 0xad, 0xfd, 0x9d, 0x14, 0x32,
- 0xba, 0x1e, 0x4e, 0x94, 0x97, 0x1f, 0x1c, 0x02,
- 0x18, 0xbd, 0x4b, 0x67, 0xe1, 0x69, 0xea, 0x34,
- 0x1d, 0x3f, 0xe7, 0xd7, 0x87, 0xed, 0x8a, 0x3d,
- 0x0e, 0x9f, 0xf8, 0x71, 0xb6, 0xf5, 0x10, 0x75,
- 0x61, 0xd3, 0xf7, 0x50, 0x8f, 0xaf, 0x05, 0x4f,
- 0x35, 0x8d, 0x68, 0xe9, 0xf5, 0xb4, 0xf5, 0xa4,
- 0xe9, 0xeb, 0xfa, 0xbc, 0xa8, 0x13, 0xeb, 0xf9,
- 0x1b, 0x79, 0x44, 0x2a, 0x6f, 0x76, 0x5b, 0xe4,
- 0x1c, 0x21, 0xec, 0x26, 0x67, 0xbd, 0xfc, 0xd4,
- 0xe9, 0xdd, 0xb7, 0x35, 0x3a, 0x7f, 0xe0, 0x32,
- 0xd3, 0x1e, 0xe7, 0x1d, 0xf4, 0x3a, 0x7f, 0xec,
- 0xd6, 0xf9, 0x5a, 0x6b, 0x74, 0xe4, 0xe9, 0xfc,
- 0xfb, 0xaf, 0x5a, 0xe6, 0xce, 0x85, 0x47, 0x27,
- 0x88, 0xb5, 0x23, 0xb4, 0x69, 0xf6, 0xb6, 0xe7,
- 0x95, 0x3a, 0x6a, 0xd4, 0xe9, 0xc1, 0x08, 0x4e,
- 0x98, 0x1a, 0x53, 0x8b, 0xc8, 0x13, 0xd6, 0xa9,
- 0x94, 0xed, 0x05, 0x95, 0x0f, 0x45, 0xdb, 0x21,
- 0x01, 0xc4, 0x43, 0x3f, 0xb3, 0xfb, 0xa4, 0x1d,
- 0x5e, 0x74, 0xff, 0x7e, 0xdb, 0x5b, 0x82, 0x10,
- 0x95, 0x39, 0x9b, 0x93, 0xa3, 0x07, 0xaa, 0xd8,
- 0xea, 0x7d, 0x6d, 0x3d, 0x5e, 0x74, 0x2a, 0x61,
- 0xde, 0x38, 0xd8, 0x45, 0xe4, 0x92, 0x7f, 0xf5,
- 0xf3, 0xac, 0xba, 0x5f, 0x60, 0xbe, 0x4e, 0x9b,
- 0x1a, 0x74, 0xcd, 0x54, 0xe9, 0xf5, 0xb6, 0xf7,
- 0xf9, 0xb3, 0x59, 0xd4, 0x56, 0x38, 0x22, 0xe1,
- 0xce, 0xd3, 0xdc, 0xde, 0x34, 0xe9, 0xff, 0x96,
- 0xfe, 0xfc, 0x5f, 0xfe, 0xa1, 0x3a, 0x5e, 0x14,
- 0x44, 0x7c, 0x97, 0x24, 0x31, 0x43, 0x6e, 0x28,
- 0xf8, 0xf4, 0xb9, 0x8f, 0xe7, 0xa1, 0x7a, 0x42,
- 0xbf, 0xc4, 0x23, 0x4b, 0x56, 0xc4, 0x7c, 0xc0,
- 0x4d, 0xfc, 0x60, 0xd9, 0x94, 0x0a, 0xda, 0x38,
- 0x19, 0xfe, 0xb1, 0xfa, 0xe5, 0xf7, 0x83, 0xa7,
- 0xef, 0x82, 0xf9, 0xd7, 0x9d, 0x3e, 0xea, 0xd3,
- 0xd7, 0x8e, 0x54, 0x2a, 0x24, 0x6c, 0xdb, 0xa9,
- 0x6c, 0xff, 0xe1, 0xe9, 0xfe, 0xf7, 0xad, 0xd7,
- 0xcb, 0xf3, 0xa5, 0xd4, 0xd1, 0x02, 0xcb, 0x26,
- 0xa0, 0x52, 0x5e, 0xc9, 0xbc, 0x08, 0xfc, 0xff,
- 0xbd, 0xc5, 0x8f, 0x75, 0x70, 0x00, 0xa5, 0x4f,
- 0xfe, 0xcd, 0x76, 0x9e, 0x0c, 0x5b, 0xfe, 0x78,
- 0x8e, 0x85, 0x44, 0x9f, 0x91, 0x27, 0xff, 0xf8,
- 0x68, 0xbf, 0x35, 0xba, 0xfa, 0xab, 0x39, 0xc2,
- 0xfd, 0x0e, 0x9d, 0x47, 0xde, 0x74, 0x2a, 0x7d,
- 0x0c, 0x84, 0x4e, 0x21, 0x75, 0xa4, 0x5d, 0xb3,
- 0x4f, 0xe7, 0xb5, 0x7f, 0xdc, 0x59, 0xd3, 0xff,
- 0x85, 0x3f, 0x6d, 0xbf, 0x6a, 0x2b, 0x53, 0xa7,
- 0xf6, 0xb5, 0x8b, 0x65, 0xd4, 0xe8, 0xb3, 0xf9,
- 0x6c, 0x8f, 0x3f, 0x7b, 0xa6, 0x6e, 0xd8, 0x74,
- 0xfa, 0xf9, 0xf0, 0xd4, 0xe9, 0xff, 0xea, 0xe6,
- 0x94, 0xf6, 0x38, 0x37, 0xde, 0x3c, 0xc3, 0xa4,
- 0xb4, 0x1f, 0xe8, 0x49, 0xe3, 0xc8, 0xf6, 0xc1,
- 0x1e, 0x61, 0x57, 0x3f, 0xef, 0xfb, 0xad, 0x36,
- 0xda, 0x95, 0xea, 0x74, 0xee, 0x74, 0x4e, 0x9f,
- 0x03, 0x7f, 0x6d, 0xe7, 0x42, 0x9e, 0x27, 0x63,
- 0x73, 0xca, 0xca, 0x5a, 0x3a, 0x15, 0x55, 0x2b,
- 0xe3, 0xa1, 0xb3, 0x5a, 0xc2, 0x2b, 0x24, 0x53,
- 0xe5, 0xa1, 0x5b, 0xd4, 0xe9, 0xfb, 0xbe, 0xb8,
- 0xba, 0x6a, 0x74, 0xf0, 0x36, 0x9a, 0x9d, 0x30,
- 0x42, 0x74, 0x54, 0xdc, 0x04, 0x8a, 0x7d, 0xec,
- 0x6d, 0xe0, 0xa7, 0x1a, 0x18, 0xc2, 0x3a, 0x5b,
- 0x92, 0x9a, 0xc2, 0x2a, 0x70, 0x42, 0x12, 0xa7,
- 0x9f, 0x9b, 0x42, 0x9c, 0x5e, 0x4f, 0xaf, 0x9f,
- 0x02, 0xa7, 0xd3, 0xfa, 0x5a, 0x27, 0xc9, 0xf2,
- 0xf9, 0xfb, 0xf4, 0xd5, 0xab, 0xc9, 0xd3, 0xff,
- 0xdf, 0xcb, 0x56, 0x37, 0xac, 0x5c, 0x7b, 0x93,
- 0xa7, 0xd4, 0x71, 0xfd, 0x74, 0x9d, 0x3e, 0xf5,
- 0x56, 0x86, 0x1f, 0x2f, 0xd9, 0xf2, 0xe8, 0x83,
- 0xb3, 0xe5, 0xfb, 0x36, 0xbc, 0xf9, 0x7e, 0xcf,
- 0x76, 0xfb, 0xa9, 0xf2, 0xfd, 0x8e, 0x4f, 0x47,
- 0xe4, 0x53, 0xe5, 0xba, 0xdf, 0xcf, 0x97, 0xec,
- 0x1f, 0x2f, 0xd9, 0xb7, 0x27, 0xcb, 0xf5, 0x85,
- 0xbc, 0x9f, 0xf3, 0xfa, 0xed, 0x26, 0x7a, 0xf8,
- 0xbc, 0x03, 0xe5, 0xfb, 0x07, 0xcb, 0xf6, 0x60,
- 0x29, 0xf2, 0xfd, 0x9f, 0xeb, 0x06, 0x8d, 0xb6,
- 0xbe, 0x4f, 0x97, 0xec, 0xfd, 0x78, 0xf5, 0x7b,
- 0xa0, 0xf9, 0x7e, 0xc0, 0x11, 0x47, 0xf2, 0x2a,
- 0xa2, 0xcf, 0x0d, 0x0b, 0x93, 0xe5, 0xfb, 0x07,
- 0xcb, 0xf6, 0xcd, 0x74, 0xc1, 0x09, 0xf2, 0xfd,
- 0x87, 0xab, 0x11, 0xe4, 0xd6, 0xe1, 0x09, 0x4c,
- 0x27, 0x44, 0xa5, 0x86, 0x35, 0x85, 0xd6, 0x57,
- 0x82, 0x4d, 0x3d, 0x6f, 0x5e, 0x85, 0xcb, 0xf4,
- 0xe4, 0x47, 0xcf, 0xfa, 0xd3, 0x9b, 0x10, 0xee,
- 0x1a, 0x3a, 0x67, 0xd0, 0x54, 0x50, 0x89, 0x6a,
- 0x50, 0xbe, 0x7b, 0x02, 0xb9, 0x2b, 0xb3, 0x8c,
- 0x73, 0xff, 0xf5, 0x2f, 0x15, 0x6d, 0xad, 0x2f,
- 0x38, 0x56, 0x6b, 0x47, 0x42, 0xae, 0xe1, 0xd9,
- 0x37, 0x8b, 0xf6, 0x73, 0x93, 0xb2, 0xc9, 0xff,
- 0x74, 0x5a, 0x7e, 0xb8, 0xc7, 0x68, 0x74, 0xfd,
- 0xfd, 0xe9, 0x8d, 0x79, 0xd3, 0x82, 0x10, 0x95,
- 0x3b, 0xaa, 0x80, 0xa7, 0x17, 0x93, 0xfe, 0xfe,
- 0xbf, 0xa8, 0xdb, 0x6d, 0x13, 0xa7, 0xfb, 0xfa,
- 0x0e, 0x0f, 0x50, 0x52, 0x74, 0x72, 0x99, 0x8b,
- 0x10, 0x40, 0x95, 0xf2, 0xcc, 0x9f, 0xcf, 0xfb,
- 0xff, 0xf7, 0x6d, 0xcd, 0x78, 0x97, 0x27, 0x4e,
- 0x08, 0x42, 0x58, 0x84, 0x13, 0xe1, 0x4d, 0xd4,
- 0x2c, 0x42, 0x07, 0x1a, 0xa9, 0xc1, 0x08, 0x4b,
- 0x10, 0x7a, 0x0b, 0x10, 0x79, 0xc6, 0xaa, 0x65,
- 0x65, 0xa2, 0x4d, 0x1a, 0xe7, 0xd9, 0x5c, 0xab,
- 0x0e, 0x9e, 0xff, 0x97, 0xa1, 0xd3, 0xba, 0xa8,
- 0x0e, 0x8a, 0x0f, 0x01, 0x84, 0x73, 0xe4, 0x5c,
- 0x2b, 0x0a, 0x9f, 0x7f, 0x7f, 0xfb, 0x2a, 0x6b,
- 0x42, 0xa6, 0x08, 0x4a, 0x8b, 0x3f, 0x5a, 0x92,
- 0xe4, 0x98, 0x22, 0x93, 0xfb, 0xfd, 0x54, 0x18,
- 0xb6, 0xf2, 0x9c, 0x6e, 0xe1, 0x53, 0x80, 0xf3,
- 0x36, 0xc3, 0x4e, 0x7f, 0xf6, 0x14, 0x15, 0xbb,
- 0xe7, 0x7f, 0xbd, 0x0e, 0x9f, 0xd5, 0xea, 0xca,
- 0x87, 0x69, 0x3a, 0x15, 0x5d, 0x8d, 0xa6, 0x7a,
- 0x30, 0x51, 0x8e, 0xb3, 0x4d, 0x2a, 0x95, 0x38,
- 0x21, 0x09, 0x53, 0xe7, 0x83, 0x7f, 0xc9, 0x4e,
- 0x2f, 0x27, 0xff, 0xbf, 0x4f, 0x0a, 0x40, 0xbf,
- 0x4d, 0xa3, 0xfa, 0x74, 0xff, 0xf5, 0xab, 0xb9,
- 0xfa, 0xf6, 0x97, 0xd3, 0xc2, 0x74, 0xf3, 0x7e,
- 0x00, 0xd8, 0xe8, 0x79, 0xfb, 0xea, 0x84, 0xff,
- 0xe7, 0xd8, 0x81, 0x9e, 0xaf, 0x5a, 0xad, 0x9d,
- 0x3d, 0xee, 0x6d, 0x87, 0x42, 0xa7, 0x1c, 0xf3,
- 0x7d, 0x86, 0x57, 0xc8, 0x7b, 0x4a, 0x9f, 0xb8,
- 0xf5, 0xf7, 0xe9, 0x79, 0xd3, 0xfe, 0xd1, 0xe2,
- 0xf6, 0x2f, 0x69, 0x01, 0xd3, 0xfe, 0xad, 0x54,
- 0x72, 0xae, 0xe7, 0xc7, 0x4f, 0xfb, 0xfa, 0xd6,
- 0x34, 0x47, 0xdc, 0x9d, 0x16, 0x8e, 0xf4, 0x33,
- 0xf2, 0x03, 0x0f, 0xa7, 0x9f, 0xd6, 0xda, 0x3a,
- 0x7c, 0x3c, 0xdd, 0xfc, 0xe9, 0xff, 0xb8, 0xfe,
- 0xbc, 0x2b, 0x6a, 0xe1, 0x69, 0x3a, 0x34, 0xfc,
- 0x2a, 0x4d, 0x3f, 0xfd, 0x79, 0xad, 0xb5, 0x85,
- 0x6d, 0x78, 0xc2, 0x9d, 0x3f, 0xb2, 0xdd, 0x9a,
- 0xff, 0x19, 0x47, 0x67, 0x47, 0x28, 0xb3, 0xf9,
- 0x0e, 0x54, 0x27, 0xff, 0xbd, 0x5b, 0xe7, 0x35,
- 0xf7, 0x4c, 0x6f, 0xfc, 0x74, 0xff, 0xfe, 0xfe,
- 0x6f, 0x1e, 0x5c, 0xf8, 0x0a, 0xf7, 0x04, 0x21,
- 0x2a, 0x7b, 0x9b, 0xbe, 0x85, 0x4f, 0x68, 0x37,
- 0x27, 0x4e, 0x7f, 0xfb, 0x34, 0x43, 0x33, 0x82,
- 0x10, 0x95, 0x3a, 0xfe, 0x85, 0x38, 0xbc, 0x9f,
- 0xf5, 0xd1, 0x7c, 0xeb, 0xfe, 0xb4, 0x1d, 0x00,
- 0x3e, 0x8f, 0x94, 0xcf, 0xe7, 0xfe, 0xf3, 0x9e,
- 0xe8, 0x3a, 0x15, 0x3a, 0x9a, 0x18, 0x79, 0x23,
- 0xa4, 0x80, 0x61, 0x5d, 0xa4, 0x53, 0xde, 0xcf,
- 0x94, 0xe9, 0xfd, 0xdd, 0x88, 0x01, 0xef, 0x9d,
- 0x3f, 0xfe, 0x57, 0xfb, 0x9c, 0x75, 0xad, 0x8a,
- 0x6e, 0xa1, 0xa2, 0x0c, 0x8c, 0x22, 0x53, 0x26,
- 0x73, 0xea, 0x8f, 0x83, 0xc7, 0x3a, 0x7f, 0x71,
- 0x5d, 0x78, 0xac, 0x54, 0xe8, 0x7a, 0x67, 0x3e,
- 0x85, 0xad, 0x48, 0xf2, 0x57, 0x3f, 0xfc, 0xbf,
- 0xa3, 0x83, 0x5e, 0xfd, 0xf3, 0x7f, 0xe8, 0x74,
- 0xe5, 0x16, 0x8e, 0x85, 0x5d, 0xf9, 0xe4, 0xee,
- 0xe3, 0x47, 0x43, 0x1f, 0x47, 0xf9, 0xb1, 0xcb,
- 0x76, 0x87, 0xc4, 0xad, 0x3e, 0xd6, 0x6d, 0xd4,
- 0xe9, 0xff, 0xe4, 0x5a, 0xd5, 0x59, 0x79, 0xf5,
- 0x71, 0xa7, 0x4f, 0xef, 0xfd, 0x5e, 0xc5, 0xf1,
- 0xd3, 0xfb, 0x3e, 0x6d, 0xec, 0xbd, 0x4a, 0x93,
- 0x0e, 0x9f, 0xaf, 0xfd, 0x05, 0x5d, 0xe3, 0xc5,
- 0xea, 0x6b, 0x16, 0x98, 0x5f, 0x93, 0x6a, 0xef,
- 0x3c, 0x3d, 0xd2, 0xf3, 0xa7, 0xf7, 0xdf, 0xfb,
- 0x62, 0xa1, 0xd3, 0x99, 0xcd, 0x9d, 0x0a, 0x7e,
- 0x16, 0x47, 0xa6, 0x33, 0xb3, 0xea, 0x0e, 0x9f,
- 0xf7, 0x79, 0xaf, 0x51, 0x03, 0x3d, 0x53, 0xa7,
- 0xfe, 0x5f, 0xee, 0x14, 0x0e, 0x1a, 0xd4, 0xa8,
- 0xe5, 0x10, 0x8c, 0x42, 0x9f, 0x63, 0xde, 0xa6,
- 0xa7, 0x41, 0x53, 0xf5, 0x7a, 0xa8, 0xab, 0x0a,
- 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x87, 0x9e, 0xff,
- 0x82, 0x80, 0x5b, 0xd8, 0x57, 0x10, 0x53, 0x78,
- 0x54, 0xd8, 0xb2, 0xa7, 0xed, 0xdc, 0xb4, 0xac,
- 0x2b, 0x81, 0x6b, 0x26, 0xe4, 0xa8, 0x2a, 0x0a,
- 0x87, 0x96, 0x9e, 0x0a, 0x82, 0xa0, 0xa8, 0x2a,
- 0x0a, 0x82, 0xa0, 0xa8, 0xa0, 0xde, 0x72, 0x15,
- 0xe0, 0xa0, 0x05, 0x54, 0x29, 0xb0, 0x54, 0x15,
- 0x05, 0x43, 0xcb, 0x4a, 0x85, 0x41, 0x50, 0x54,
- 0x15, 0x05, 0x43, 0xcd, 0x40, 0x02, 0xb2, 0x14,
- 0xde, 0x15, 0x05, 0x41, 0x50, 0x54, 0x15, 0x14,
- 0x1a, 0x8e, 0x81, 0x42, 0x15, 0x80, 0xa9, 0x74,
- 0x2a, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x39, 0x35,
- 0x14, 0x85, 0x00, 0x2b, 0xb0, 0xa8, 0x2a, 0x0a,
- 0x82, 0xa7, 0xd8, 0x50, 0x56, 0xca, 0x82, 0xa1,
- 0xe7, 0x9c, 0x81, 0x58, 0x0a, 0xd0, 0xa0, 0x13,
- 0x49, 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x87,
- 0x9a, 0x8a, 0x42, 0xbc, 0x14, 0xd8, 0x2a, 0x0a,
- 0x82, 0xa0, 0xa8, 0x2a, 0x1e, 0x6a, 0x39, 0x0a,
- 0xc0, 0x57, 0xc2, 0xa5, 0x82, 0xa0, 0xa8, 0x2a,
- 0x4f, 0x2a, 0x0a, 0xa4, 0xb0, 0x82, 0xa0, 0xa8,
- 0x2a, 0x0a, 0x8a, 0x0f, 0x99, 0xe1, 0x5d, 0x06,
- 0x90, 0x69, 0xa0, 0xa0, 0x05, 0x64, 0x2a, 0x56,
- 0x54, 0x15, 0x05, 0x49, 0xe5, 0x41, 0x54, 0x96,
- 0x10, 0x54, 0x15, 0x0a, 0x7a, 0x4f, 0x0a, 0xf0,
- 0xd0, 0x8d, 0x30, 0x2a, 0x0a, 0x82, 0xa0, 0xa8,
- 0x2a, 0x0a, 0x85, 0x36, 0x54, 0x85, 0x08, 0x53,
- 0x02, 0xbe, 0x15, 0x05, 0x41, 0x50, 0x54, 0x09,
- 0x7d, 0x50, 0xac, 0x85, 0x41, 0x50, 0x54, 0x15,
- 0x0c, 0x2f, 0xbe, 0x15, 0x90, 0xa9, 0x30, 0xa8,
- 0x2a, 0x0a, 0x80, 0x16, 0x9d, 0x85, 0x41, 0x50,
- 0x54, 0x15, 0x05, 0x42, 0x9a, 0x86, 0x82, 0xb0,
- 0x15, 0xd8, 0x54, 0x2a, 0xfd, 0x6d, 0x0e, 0x4f,
- 0x3d, 0xe4, 0xa6, 0xd7, 0x11, 0xb6, 0x94, 0x8f,
- 0x33, 0x71, 0xcf, 0x5a, 0x3a, 0x18, 0x46, 0x31,
- 0x1f, 0x06, 0xfa, 0xcc, 0x03, 0xcf, 0xbb, 0x55,
- 0x9b, 0x2c, 0x3d, 0xbc, 0xb6, 0x65, 0x0a, 0x57,
- 0x11, 0x6f, 0x52, 0x46, 0xf4, 0x99, 0xf3, 0xfe,
- 0xb7, 0x52, 0x9c, 0x9a, 0xbc, 0xef, 0x2b, 0x0a,
- 0x9e, 0xf2, 0x68, 0x9d, 0x3b, 0xdc, 0xd9, 0xd3,
- 0x97, 0xab, 0xa9, 0x44, 0x78, 0x9c, 0xe0, 0x6f,
- 0x23, 0xf3, 0xfb, 0x1e, 0x0f, 0x22, 0xb4, 0x1d,
- 0x14, 0xa2, 0x11, 0xa5, 0x09, 0x80, 0xa7, 0x4f,
- 0xc3, 0xbf, 0xea, 0xa0, 0x3a, 0x6d, 0x13, 0xa5,
- 0xe3, 0x90, 0xb4, 0x92, 0x1d, 0x26, 0x1d, 0x3a,
- 0xf8, 0x9d, 0xe4, 0x49, 0x88, 0xae, 0x10, 0x74,
- 0x7b, 0xa8, 0x7c, 0xff, 0xfb, 0xb5, 0xe1, 0xa2,
- 0x3a, 0x05, 0x70, 0x42, 0x13, 0xa2, 0x86, 0x76,
- 0x5b, 0xe3, 0x30, 0xe6, 0x14, 0x08, 0x59, 0xe8,
- 0x50, 0xb4, 0x49, 0xb4, 0xa9, 0xff, 0xc2, 0xe3,
- 0x2b, 0xd3, 0xf9, 0x7f, 0x9d, 0xff, 0x76, 0x74,
- 0xfc, 0xff, 0xf9, 0xf8, 0xb3, 0xa7, 0xd4, 0x78,
- 0x55, 0xe7, 0x40, 0x9e, 0xa7, 0xcb, 0x67, 0xfd,
- 0x85, 0x10, 0x7e, 0xc3, 0xa0, 0x3a, 0x75, 0xdb,
- 0x47, 0x4a, 0xf0, 0x7a, 0xe0, 0x3c, 0x9e, 0x62,
- 0xdd, 0x07, 0x4f, 0xad, 0xb7, 0xd6, 0x93, 0xa3,
- 0xc7, 0x95, 0x52, 0x19, 0xe5, 0xfe, 0x50, 0xe9,
- 0x2d, 0xa6, 0x57, 0xf7, 0x8c, 0xb8, 0xf1, 0x11,
- 0x4f, 0x77, 0xa2, 0xf3, 0xa7, 0x97, 0xb6, 0xe6,
- 0xa5, 0x4f, 0x9e, 0xe0, 0x84, 0x27, 0x47, 0xcf,
- 0x3f, 0xb2, 0x78, 0xe5, 0x12, 0x76, 0xe1, 0x0c,
- 0x55, 0x58, 0x08, 0xec, 0x7b, 0x86, 0xc4, 0xfc,
- 0x3d, 0x82, 0xfe, 0x87, 0x4f, 0xf5, 0x1f, 0xb7,
- 0xe2, 0xc1, 0x53, 0xa7, 0xb9, 0xe5, 0x5b, 0x1d,
- 0x3f, 0xfe, 0x5c, 0x2b, 0x11, 0x73, 0x62, 0x9b,
- 0xa8, 0x68, 0xbe, 0x27, 0xf0, 0x77, 0x35, 0x5b,
- 0xa0, 0xe9, 0xff, 0xfa, 0xf3, 0xd5, 0xea, 0xdb,
- 0xdf, 0x00, 0xf9, 0x59, 0x65, 0x4d, 0x9b, 0x3a,
- 0x7c, 0x3e, 0xa3, 0x58, 0x69, 0x84, 0xe7, 0xb3,
- 0xda, 0xe9, 0xa6, 0x13, 0x98, 0x0a, 0x6a, 0x04,
- 0xe7, 0xf7, 0xf7, 0xa6, 0x54, 0x40, 0x6a, 0x04,
- 0xe7, 0xf5, 0x6f, 0x1e, 0xaf, 0x74, 0x1a, 0x61,
- 0x39, 0xaf, 0x93, 0x4c, 0x27, 0x30, 0x42, 0x79,
- 0x84, 0xe2, 0xd3, 0x4c, 0xa4, 0xd3, 0xc5, 0xcc,
- 0x22, 0xaa, 0x03, 0x64, 0x20, 0x91, 0xcb, 0x25,
- 0x98, 0x4c, 0xe3, 0xe7, 0x97, 0xa9, 0x4f, 0xdc,
- 0x31, 0xe4, 0x45, 0x55, 0x42, 0xe6, 0x52, 0xa4,
- 0xff, 0xf7, 0xee, 0xa2, 0xbd, 0xe7, 0xfe, 0x6d,
- 0xd5, 0x87, 0x42, 0xab, 0xf0, 0xe4, 0xe5, 0x09,
- 0x70, 0xb7, 0x99, 0x56, 0xed, 0x8b, 0x27, 0xdc,
- 0xd8, 0xfb, 0xa1, 0xd3, 0xef, 0xdf, 0x5b, 0x68,
- 0xe9, 0xfe, 0xc6, 0xb3, 0x1e, 0x5a, 0x5e, 0x74,
- 0xfd, 0xd7, 0xef, 0xe2, 0xda, 0x0e, 0x8f, 0x1f,
- 0x60, 0x0e, 0x63, 0xe8, 0xb7, 0xcc, 0x25, 0x61,
- 0x57, 0x61, 0x6e, 0x70, 0x73, 0xcc, 0x3b, 0x0e,
- 0x09, 0xff, 0xcc, 0xcd, 0x7d, 0xfa, 0x5f, 0x9f,
- 0x57, 0xc7, 0x4f, 0xff, 0xef, 0xdd, 0x37, 0x5d,
- 0xfe, 0x3c, 0xb9, 0xc7, 0x7a, 0xc3, 0xa7, 0xef,
- 0xf6, 0xcf, 0x61, 0x4e, 0x9f, 0xff, 0x6f, 0xf3,
- 0xbb, 0x8f, 0xae, 0x6a, 0x1b, 0xc1, 0xd3, 0x86,
- 0xb5, 0x3c, 0x40, 0x73, 0xff, 0xdd, 0x45, 0x70,
- 0xbc, 0x2c, 0x53, 0x75, 0x0d, 0x10, 0x1b, 0x8d,
- 0x44, 0x01, 0x1c, 0xb9, 0x7b, 0x8b, 0x4c, 0xdb,
- 0xd1, 0x89, 0xcf, 0xff, 0xed, 0x7d, 0xd7, 0xc2,
- 0x3e, 0x67, 0x5c, 0xe2, 0xc3, 0x93, 0xa7, 0xff,
- 0xfb, 0x5f, 0x7f, 0x69, 0xf7, 0x4b, 0xfa, 0xa8,
- 0x1c, 0x10, 0x84, 0xa8, 0xc2, 0x32, 0xfe, 0xc3,
- 0x3f, 0x96, 0xc5, 0x37, 0x50, 0xd1, 0x04, 0xcf,
- 0xf2, 0xe6, 0xc5, 0x37, 0x50, 0xd1, 0x7c, 0xcf,
- 0xbc, 0xdb, 0xf7, 0x5e, 0x4f, 0xe9, 0x0e, 0xa7,
- 0xfd, 0x46, 0xd3, 0xc5, 0x79, 0xfe, 0xb6, 0x3a,
- 0x70, 0x42, 0x12, 0xa7, 0xec, 0xe2, 0xd3, 0x44,
- 0xa7, 0x17, 0x91, 0x42, 0x26, 0x7e, 0xc1, 0x3f,
- 0xf5, 0x0c, 0x5a, 0x6b, 0xfb, 0xa3, 0xab, 0xce,
- 0x9f, 0xfe, 0xeb, 0x4f, 0xf8, 0x26, 0x3c, 0x00,
- 0x28, 0xbc, 0xe9, 0xc1, 0x08, 0x4a, 0x9f, 0xdd,
- 0x40, 0xbf, 0xba, 0x72, 0x53, 0x8b, 0xc9, 0xff,
- 0xf9, 0xb9, 0xe0, 0x98, 0xf7, 0x3c, 0xd8, 0x78,
- 0x66, 0xb7, 0x41, 0xd2, 0xdc, 0x22, 0xaf, 0xb4,
- 0x48, 0x7a, 0xa8, 0xbf, 0x43, 0x68, 0x49, 0x18,
- 0x93, 0x98, 0xc6, 0xe7, 0xd8, 0xbc, 0xb4, 0xf3,
- 0xa7, 0xfd, 0x79, 0x51, 0xae, 0x17, 0xf9, 0x3c,
- 0x41, 0x13, 0xf9, 0x6c, 0x53, 0x75, 0x0d, 0x10,
- 0x43, 0x8f, 0x26, 0x7e, 0xdc, 0x08, 0xf8, 0x27,
- 0x4f, 0xdc, 0x7e, 0x43, 0xbf, 0x79, 0xd1, 0xf3,
- 0xdd, 0xec, 0xae, 0x30, 0x99, 0xe0, 0x1c, 0x7f,
- 0x0a, 0x89, 0xfe, 0x5f, 0xe7, 0xad, 0xe3, 0x69,
- 0x3a, 0x7f, 0xfb, 0x43, 0x9b, 0xc2, 0xfb, 0x3f,
- 0xbc, 0x78, 0xe8, 0x7a, 0x22, 0x3e, 0x75, 0x3f,
- 0xb3, 0xd5, 0x95, 0x0e, 0xd2, 0x74, 0xf7, 0x9a,
- 0xf0, 0x4e, 0x9f, 0xff, 0x77, 0x47, 0xd6, 0xf0,
- 0xe5, 0xcd, 0xe3, 0xb1, 0x3a, 0x7d, 0x79, 0xaf,
- 0x5a, 0xf2, 0x7f, 0x3d, 0x48, 0xe7, 0xe4, 0xc7,
- 0xb8, 0xbd, 0xd0, 0xe9, 0xf9, 0x8b, 0xc7, 0xc5,
- 0xd0, 0x74, 0xff, 0xff, 0xf7, 0xb3, 0xac, 0xdf,
- 0x81, 0xfe, 0xaf, 0x6c, 0xc7, 0x97, 0x38, 0xef,
- 0x58, 0x74, 0x72, 0x8e, 0x3f, 0x19, 0x69, 0x8c,
- 0xe1, 0xeb, 0x53, 0xa7, 0xfd, 0xbf, 0x4b, 0x14,
- 0xdd, 0x43, 0x44, 0x23, 0x0a, 0x7c, 0x5d, 0x8e,
- 0xcf, 0xfe, 0x5b, 0xa7, 0xae, 0x7d, 0xfe, 0xdf,
- 0x75, 0x3a, 0x7f, 0xfb, 0x76, 0x8e, 0xb7, 0x8d,
- 0x63, 0x82, 0x10, 0x9d, 0x2b, 0xe5, 0x13, 0xcd,
- 0x26, 0xce, 0x08, 0x42, 0x54, 0xff, 0x58, 0x34,
- 0x6d, 0xb5, 0xf2, 0x53, 0x8b, 0xc9, 0x82, 0x12,
- 0xa7, 0x04, 0x21, 0x2a, 0x7e, 0xda, 0x39, 0xc2,
- 0xd4, 0xa7, 0x17, 0x91, 0xf4, 0x5b, 0x05, 0x1f,
- 0x88, 0xca, 0x7c, 0x9e, 0xe7, 0xab, 0x0a, 0x71,
- 0xb3, 0x9c, 0x10, 0x84, 0xa9, 0xd5, 0x51, 0x29,
- 0xc5, 0xe4, 0x81, 0xe3, 0xff, 0xca, 0xb4, 0xfd,
- 0xcf, 0xd5, 0xfa, 0x87, 0x4f, 0xee, 0xa3, 0xcf,
- 0x9b, 0x2f, 0x27, 0x4f, 0xec, 0xe2, 0xdb, 0x5e,
- 0x6a, 0x74, 0x0a, 0x26, 0x30, 0x59, 0xf3, 0x88,
- 0x54, 0x77, 0xdc, 0x30, 0x27, 0x52, 0xdc, 0x4d,
- 0xd8, 0xe9, 0xff, 0xd7, 0xc7, 0xdf, 0x82, 0xd1,
- 0x70, 0xac, 0x3a, 0x7e, 0x4f, 0x57, 0x1e, 0x68,
- 0xa9, 0xfd, 0xfb, 0xa5, 0xf5, 0xf7, 0x43, 0xa7,
- 0xb7, 0x47, 0xa1, 0xd1, 0xc0, 0xf5, 0xe8, 0x36,
- 0x9e, 0x5d, 0x63, 0x62, 0xa7, 0x04, 0x21, 0x2a,
- 0x7f, 0xfb, 0xaa, 0x82, 0xef, 0xf9, 0xc7, 0x97,
- 0xf4, 0x14, 0xe2, 0xf2, 0x56, 0x88, 0x9e, 0x61,
- 0xf4, 0x2a, 0x7c, 0x6f, 0x2a, 0xa5, 0x2b, 0xd0,
- 0x85, 0xc4, 0x30, 0xe7, 0xff, 0xcc, 0xb4, 0x5f,
- 0xee, 0x6b, 0xcf, 0x7a, 0x2f, 0x3a, 0x7c, 0xb9,
- 0xab, 0x6b, 0x3a, 0x14, 0xff, 0x32, 0xa9, 0x3f,
- 0xfd, 0xe6, 0xd7, 0xfe, 0x7f, 0xa1, 0xbf, 0xef,
- 0x43, 0xa7, 0xff, 0xfb, 0x9c, 0x78, 0x36, 0xdf,
- 0xe6, 0x6e, 0x6b, 0xdb, 0xee, 0x9c, 0x9d, 0x16,
- 0x8c, 0x0d, 0x53, 0x85, 0x6c, 0x85, 0x28, 0x4d,
- 0x7c, 0x72, 0xfc, 0xc3, 0xd2, 0xe5, 0x94, 0x7a,
- 0x39, 0x26, 0xa1, 0x7c, 0x24, 0x6c, 0x85, 0x7e,
- 0x23, 0x27, 0x04, 0x24, 0xbf, 0x0c, 0x0a, 0xca,
- 0x9d, 0xcc, 0xa0, 0x9e, 0xe1, 0xa2, 0x18, 0x70,
- 0xce, 0x6c, 0xbf, 0x3a, 0x7f, 0xfa, 0xfe, 0xec,
- 0xf4, 0xf5, 0x35, 0xc5, 0x83, 0x4e, 0x95, 0x2f,
- 0x3e, 0xfe, 0x47, 0x67, 0xec, 0x35, 0xec, 0x79,
- 0x87, 0x4f, 0xfb, 0xeb, 0x9c, 0x68, 0x36, 0x9a,
- 0x9d, 0x39, 0xae, 0xc4, 0xe9, 0xff, 0x6f, 0x86,
- 0xe9, 0x70, 0x42, 0x13, 0xa3, 0x4f, 0x6e, 0xa3,
- 0xb3, 0xff, 0xdf, 0x57, 0xf0, 0xeb, 0x9f, 0x7f,
- 0xb7, 0xdd, 0x4e, 0x8b, 0x4c, 0xf9, 0x0b, 0xf1,
- 0x09, 0x90, 0x10, 0xcf, 0xe5, 0xfb, 0xff, 0x76,
- 0x03, 0xa7, 0xf3, 0xec, 0x6b, 0xf5, 0xa0, 0xe9,
- 0xff, 0xe5, 0x6c, 0xa2, 0xee, 0xb9, 0xfd, 0xd1,
- 0xe1, 0x3d, 0xde, 0xf3, 0xff, 0xd7, 0x95, 0xfa,
- 0x5e, 0x71, 0xe1, 0x02, 0x1d, 0x3e, 0xda, 0xdf,
- 0xf2, 0x74, 0xec, 0xef, 0x1c, 0xe9, 0xfd, 0x9c,
- 0x79, 0xc0, 0xdf, 0x1d, 0x14, 0x26, 0x47, 0xca,
- 0xff, 0xd3, 0x32, 0x4d, 0xd8, 0xfc, 0xfe, 0xec,
- 0x0b, 0x8f, 0x6b, 0xce, 0x9f, 0xff, 0xbf, 0x75,
- 0xef, 0x85, 0xe3, 0x7f, 0x6d, 0x3d, 0x69, 0x3a,
- 0x7f, 0xd7, 0x5e, 0xec, 0x53, 0x75, 0x0d, 0x10,
- 0x34, 0xfa, 0xf3, 0x8d, 0x7f, 0x04, 0x52, 0xfd,
- 0x7a, 0x7f, 0xff, 0xfe, 0xbc, 0xe3, 0x7f, 0xd3,
- 0x85, 0x47, 0x77, 0x2d, 0xaf, 0x9e, 0x16, 0xcd,
- 0xfd, 0x2f, 0x3c, 0x41, 0x73, 0xfe, 0xdd, 0xe8,
- 0x9b, 0xcf, 0x0e, 0x81, 0x3c, 0x41, 0x73, 0xff,
- 0x63, 0xd8, 0xf2, 0xff, 0x3c, 0x3a, 0x04, 0xf1,
- 0x05, 0xcf, 0xe5, 0xf7, 0xf3, 0xc3, 0xa0, 0x4f,
- 0x10, 0x5c, 0xfc, 0xcb, 0xe7, 0x87, 0x40, 0x9e,
- 0x20, 0xb9, 0xff, 0xfe, 0xdf, 0xff, 0xcc, 0xe1,
- 0x54, 0xc7, 0x87, 0xdd, 0x28, 0xb0, 0x9e, 0x20,
- 0xb9, 0xa9, 0xe1, 0xca, 0x74, 0x28, 0xa0, 0x2a,
- 0xda, 0x89, 0xf3, 0xf8, 0xc2, 0xa9, 0x6f, 0xca,
- 0x3e, 0x9e, 0xd1, 0x06, 0x9d, 0x3f, 0xf6, 0x3d,
- 0x8f, 0x2f, 0xf3, 0xc3, 0xa0, 0x4f, 0x10, 0x5c,
- 0xff, 0x35, 0x54, 0xf5, 0x1c, 0x3a, 0x04, 0xf1,
- 0x05, 0xcf, 0xb3, 0x55, 0x67, 0x04, 0x45, 0x17,
- 0x55, 0x69, 0xff, 0xdc, 0x13, 0x1e, 0x45, 0xcd,
- 0x78, 0x74, 0x09, 0xe2, 0x0b, 0x9f, 0xff, 0xfb,
- 0xff, 0xf3, 0x38, 0x77, 0x7c, 0x2a, 0x98, 0xf0,
- 0xfb, 0xa5, 0x16, 0x13, 0xc4, 0x17, 0x16, 0x99,
- 0x35, 0x28, 0x7a, 0xb9, 0x3f, 0xd8, 0xf0, 0xfb,
- 0xa5, 0x16, 0x13, 0xc4, 0x17, 0x3f, 0xfd, 0xbb,
- 0x4b, 0xeb, 0x8f, 0x73, 0xca, 0x8a, 0x95, 0x3f,
- 0xeb, 0x7b, 0xfb, 0xa8, 0xfe, 0x8e, 0x23, 0xc4,
- 0x17, 0x08, 0x8e, 0x81, 0x48, 0xaa, 0x84, 0xff,
- 0x93, 0xc3, 0x9d, 0x05, 0x78, 0x04, 0xf1, 0x05,
- 0xcf, 0xd8, 0xf6, 0x31, 0xe0, 0x1a, 0x00, 0xb9,
- 0xf5, 0x83, 0x87, 0x40, 0x9e, 0x20, 0xb9, 0xaf,
- 0x28, 0x7e, 0x78, 0x3b, 0x8a, 0x51, 0xd7, 0x58,
- 0x5f, 0xcf, 0xcc, 0xbe, 0x78, 0x74, 0x09, 0xe2,
- 0x0b, 0x9f, 0xf2, 0x63, 0xc3, 0xee, 0x94, 0x58,
- 0x4f, 0x10, 0x5c, 0xd7, 0xc3, 0x51, 0x19, 0x53,
- 0xf9, 0xfd, 0xdf, 0x99, 0xbf, 0xa5, 0xe7, 0x88,
- 0x2e, 0x7f, 0xd7, 0xe6, 0xd7, 0xfb, 0xe7, 0x5e,
- 0x78, 0x82, 0xd8, 0x78, 0x51, 0xca, 0xee, 0x38,
- 0x0b, 0x3f, 0x1f, 0x3d, 0x63, 0x18, 0xcc, 0x63,
- 0x3d, 0xc2, 0xd4, 0x2e, 0x33, 0xe0, 0x54, 0x00,
- 0x53, 0x44, 0x16, 0xe4, 0x40, 0x4f, 0xfa, 0xdf,
- 0x8d, 0x7b, 0x7b, 0x7f, 0x74, 0x1d, 0x3f, 0x87,
- 0xf7, 0xce, 0x3b, 0x09, 0xd3, 0xea, 0x73, 0xa2,
- 0x03, 0xa7, 0xeb, 0xa3, 0x70, 0xbc, 0x73, 0xa3,
- 0xc8, 0x8b, 0xd3, 0x4f, 0x93, 0xce, 0xd1, 0xa0,
- 0xe9, 0x80, 0xa7, 0x4f, 0x79, 0x59, 0x67, 0x41,
- 0xd3, 0xf6, 0xf4, 0xca, 0x88, 0x0e, 0x8e, 0x4d,
- 0xbf, 0xc2, 0xa7, 0xff, 0xf2, 0xfb, 0x9f, 0xaf,
- 0x69, 0x9b, 0x4e, 0x55, 0x3a, 0xb0, 0xe9, 0x80,
- 0xa7, 0x4c, 0xbd, 0x0e, 0x9f, 0xeb, 0xcd, 0x55,
- 0x9d, 0x6d, 0xa3, 0xa7, 0xf5, 0x6f, 0x1e, 0xaf,
- 0x74, 0x1d, 0x30, 0x42, 0x54, 0xff, 0x7e, 0xdb,
- 0x6b, 0xeb, 0xee, 0x4e, 0x84, 0x4f, 0xdf, 0xc3,
- 0x62, 0x2a, 0xc5, 0x7c, 0x11, 0x01, 0x89, 0xb9,
- 0x15, 0xf8, 0xbd, 0x4e, 0x82, 0x6b, 0xd4, 0x5a,
- 0x70, 0x42, 0x12, 0xa4, 0xc2, 0x9c, 0x5e, 0x4f,
- 0xb5, 0xad, 0xd1, 0x29, 0xc8, 0xd9, 0xeb, 0x0b,
- 0xa9, 0xfd, 0x4e, 0x56, 0xf1, 0x74, 0x1d, 0x0a,
- 0xd9, 0x03, 0xdc, 0x6d, 0x1d, 0x10, 0x69, 0x31,
- 0xf4, 0x6a, 0xa2, 0x9d, 0x88, 0x6c, 0x6d, 0x24,
- 0x7b, 0xe8, 0xd5, 0x86, 0x8f, 0x72, 0xbf, 0xdb,
- 0x25, 0xcf, 0x5a, 0x2e, 0x4e, 0x9e, 0xb6, 0x5e,
- 0x4e, 0x9e, 0xda, 0x3a, 0xbc, 0xe8, 0x53, 0xe3,
- 0xa4, 0x7d, 0xbc, 0x82, 0x7e, 0xff, 0x7c, 0xb3,
- 0x5e, 0x74, 0xff, 0xf5, 0x2f, 0xfa, 0xf0, 0x67,
- 0xd7, 0xa6, 0x7d, 0x41, 0xd3, 0xfa, 0xb9, 0x6d,
- 0x7f, 0xbe, 0x4e, 0x85, 0x45, 0xd7, 0x8b, 0xf5,
- 0x5a, 0x76, 0xf0, 0xea, 0x74, 0xff, 0xf7, 0xdf,
- 0xc2, 0xf9, 0xf5, 0x69, 0xcf, 0x7b, 0x53, 0xa3,
- 0x81, 0xfa, 0x58, 0xfc, 0xfd, 0x43, 0x4f, 0xe3,
- 0x46, 0x83, 0xa6, 0x7d, 0x07, 0x4f, 0xb1, 0x7e,
- 0x7d, 0x4e, 0x9f, 0xfe, 0xc2, 0xf5, 0x76, 0x7f,
- 0xa0, 0xad, 0x54, 0x05, 0x4f, 0xe0, 0x58, 0xa6,
- 0xea, 0x1e, 0x20, 0x48, 0x7a, 0x2c, 0xf9, 0x27,
- 0x15, 0x19, 0x9b, 0xde, 0x74, 0xf6, 0x68, 0xdf,
- 0x9d, 0x3d, 0x4d, 0x77, 0x27, 0x45, 0x07, 0xbb,
- 0x63, 0x38, 0x22, 0x9f, 0xdf, 0xd0, 0xd6, 0xaa,
- 0x03, 0xa7, 0x04, 0x21, 0x3e, 0x1f, 0x53, 0xb7,
- 0xfc, 0x97, 0x0f, 0xa3, 0x8d, 0x4c, 0x72, 0x89,
- 0x50, 0x2d, 0xcf, 0xff, 0xaf, 0xfe, 0xe8, 0xea,
- 0xe7, 0x1d, 0xeb, 0xde, 0xa7, 0x45, 0x07, 0xf9,
- 0xd0, 0x92, 0x1b, 0xba, 0xaf, 0x17, 0x9a, 0xdc,
- 0x32, 0xbd, 0x08, 0xdd, 0x8d, 0x02, 0x7d, 0xec,
- 0xae, 0x6a, 0x54, 0xf2, 0x2e, 0x6a, 0x54, 0xc1,
- 0x09, 0x50, 0xf3, 0xdd, 0xb2, 0x70, 0x90, 0x4d,
- 0x61, 0x29, 0xc6, 0xba, 0x7f, 0xfd, 0x79, 0x54,
- 0xbb, 0xfe, 0x71, 0xe5, 0xfd, 0x07, 0x40, 0x0f,
- 0xe0, 0x24, 0xb3, 0xff, 0xf9, 0x5b, 0x7b, 0xe0,
- 0xe1, 0x9a, 0xda, 0x63, 0x7f, 0x9a, 0x9d, 0x3f,
- 0x9a, 0xa5, 0xf8, 0xed, 0x44, 0xe9, 0xcf, 0xd1,
- 0x3a, 0x7c, 0xfb, 0xcd, 0xf2, 0x54, 0xbc, 0xd1,
- 0xe0, 0xe4, 0x6a, 0x7b, 0x3d, 0x2f, 0x07, 0x4c,
- 0x05, 0x3a, 0x60, 0x29, 0xd3, 0xee, 0xdf, 0x7f,
- 0x77, 0x8d, 0x50, 0x05, 0x61, 0x51, 0x19, 0xf4,
- 0xd9, 0xff, 0xb3, 0x8b, 0x67, 0x55, 0x05, 0xd3,
- 0x93, 0xa7, 0xf5, 0x29, 0xe1, 0xea, 0xbc, 0x9d,
- 0x3c, 0x06, 0x6b, 0xea, 0x7f, 0x79, 0x46, 0x9d,
- 0xc5, 0x74, 0x9d, 0x0a, 0x7b, 0x1a, 0x73, 0x3d,
- 0x5e, 0xe9, 0xc9, 0xd3, 0x82, 0x10, 0x95, 0x3e,
- 0xbe, 0x9f, 0xee, 0xa5, 0x38, 0xbc, 0x9f, 0x5b,
- 0x82, 0x10, 0x9d, 0x0a, 0x7c, 0x19, 0x39, 0x9e,
- 0x0e, 0xfd, 0xe7, 0x4c, 0x98, 0x3a, 0x70, 0x42,
- 0x12, 0xa7, 0xef, 0x6f, 0x4c, 0x7b, 0x25, 0x38,
- 0xbc, 0x9f, 0x58, 0x2e, 0xda, 0x3a, 0x55, 0xe0,
- 0x89, 0x51, 0x31, 0xf9, 0xf4, 0xf7, 0xbf, 0xdb,
- 0xf9, 0x47, 0x6d, 0xc2, 0xda, 0x15, 0x72, 0xd5,
- 0xe4, 0x56, 0xc9, 0xd1, 0xd8, 0x61, 0x6b, 0x88,
- 0x7a, 0xe9, 0x05, 0x61, 0x41, 0x98, 0xc3, 0xa7,
- 0xe5, 0x60, 0x8e, 0xe4, 0xe9, 0xff, 0xef, 0x32,
- 0x97, 0xd7, 0x85, 0xff, 0xf7, 0xe0, 0x1d, 0x18,
- 0x3f, 0xdc, 0x95, 0x49, 0xdc, 0x64, 0x22, 0x3e,
- 0x56, 0x56, 0xa5, 0x11, 0x91, 0xbe, 0x52, 0x6f,
- 0x32, 0xc0, 0x6e, 0xb7, 0x7e, 0xe9, 0x1b, 0x92,
- 0x4a, 0x18, 0xa6, 0x57, 0xcf, 0xa3, 0x3e, 0x6a,
- 0x79, 0xf4, 0x67, 0x4d, 0x59, 0x28, 0x2f, 0x13,
- 0xe6, 0xfb, 0x4f, 0x52, 0x04, 0xb4, 0xdf, 0xce,
- 0xe1, 0xd6, 0xb2, 0x5e, 0xcd, 0x67, 0x3f, 0xdc,
- 0x66, 0xad, 0xa1, 0xd8, 0x18, 0x51, 0x71, 0x4b,
- 0x14, 0xeb, 0x3c, 0x30, 0xdf, 0x18, 0x8c, 0x3a,
- 0x11, 0x74, 0xef, 0xc4, 0x4c, 0x5c, 0xfe, 0x75,
- 0x8a, 0x6e, 0xa1, 0xa2, 0xe3, 0x9f, 0xce, 0xb1,
- 0x4d, 0xd4, 0x34, 0x5d, 0x73, 0xff, 0x3b, 0x5e,
- 0xeb, 0x14, 0xdd, 0x43, 0x44, 0xa3, 0x0b, 0x08,
- 0xef, 0xc7, 0x94, 0x72, 0x77, 0xd0, 0xed, 0x0e,
- 0xfd, 0x0f, 0x0e, 0x3a, 0x06, 0xe2, 0x2f, 0xe6,
- 0xa7, 0x19, 0x3b, 0x6f, 0x3b, 0x9f, 0xfc, 0xe6,
- 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x96, 0xa7,
- 0xc2, 0x9b, 0xa8, 0x68, 0x8d, 0xe7, 0xfd, 0xaf,
- 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x5f, 0x93, 0xac,
- 0xfd, 0x98, 0x61, 0x3f, 0x9d, 0x62, 0x9b, 0xa8,
- 0x68, 0xaa, 0xe7, 0xfb, 0xa5, 0xfe, 0xe9, 0xce,
- 0xb0, 0xe9, 0xb9, 0xf1, 0xd3, 0xf5, 0x8a, 0x6e,
- 0xa1, 0xa2, 0x40, 0x8e, 0x07, 0x98, 0xe1, 0x79,
- 0xf5, 0x77, 0xfb, 0x49, 0xd0, 0xf3, 0xcb, 0xa4,
- 0x92, 0x3a, 0x23, 0xd3, 0x61, 0xa3, 0x3f, 0xf7,
- 0xee, 0x87, 0x71, 0x2f, 0xff, 0x79, 0x3a, 0x1c,
- 0x7e, 0x02, 0x53, 0x3f, 0x9d, 0x62, 0x9b, 0xa8,
- 0x68, 0xb2, 0x27, 0xf3, 0xac, 0x53, 0x75, 0x0d,
- 0x16, 0xbc, 0xfe, 0x75, 0x8a, 0x6e, 0xa1, 0xa2,
- 0xe4, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0xec, 0x9f,
- 0xf6, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x8a, 0x3a,
- 0x4e, 0xb3, 0xf6, 0x61, 0x84, 0xf8, 0x53, 0x75,
- 0x0d, 0x14, 0xac, 0xff, 0xff, 0xf6, 0x16, 0x85,
- 0xc7, 0x9b, 0x6f, 0x38, 0xf3, 0x93, 0x1e, 0x6b,
- 0x0b, 0x45, 0x9d, 0x3e, 0x73, 0x35, 0xee, 0xb4,
- 0x59, 0x34, 0x61, 0x14, 0x2e, 0x77, 0xbe, 0x19,
- 0x14, 0x93, 0xfa, 0x39, 0xf6, 0x10, 0x80, 0xee,
- 0xa7, 0x79, 0x85, 0x8b, 0x68, 0x6c, 0xcf, 0xf3,
- 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x8e, 0x27, 0xfb,
- 0xce, 0xb1, 0x4d, 0xd4, 0x34, 0x56, 0xb2, 0x76,
- 0xa2, 0x0b, 0x28, 0x33, 0xff, 0x9c, 0xcd, 0x7b,
- 0xac, 0x53, 0x75, 0x0d, 0x12, 0xdc, 0xd7, 0x49,
- 0xd3, 0xfb, 0x9b, 0x63, 0x17, 0xd5, 0x3a, 0x29,
- 0x3c, 0x9f, 0x0b, 0x4e, 0xc7, 0x2f, 0x3a, 0x73,
- 0xd8, 0x87, 0x4f, 0xff, 0xd8, 0xda, 0x41, 0xce,
- 0x35, 0xf7, 0x5f, 0xf7, 0xbd, 0x4e, 0x83, 0x44,
- 0x37, 0x3f, 0xed, 0x7b, 0xac, 0x53, 0x75, 0x0d,
- 0x13, 0x04, 0xe1, 0xec, 0x05, 0x4f, 0xef, 0xde,
- 0x72, 0xa3, 0x53, 0xa4, 0xe5, 0x4d, 0x92, 0x82,
- 0x3e, 0x47, 0x6c, 0x6d, 0x17, 0xd8, 0x2f, 0x94,
- 0x6e, 0xa3, 0x93, 0x99, 0xd8, 0x95, 0x3f, 0xed,
- 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x13, 0x1c, 0x9d,
- 0xe3, 0xe2, 0x60, 0xe4, 0xfc, 0xb5, 0xe1, 0x9b,
- 0xc1, 0xd3, 0xff, 0xff, 0xcf, 0xae, 0x2f, 0xb0,
- 0xd7, 0x16, 0x97, 0x5e, 0x17, 0x4b, 0xeb, 0xef,
- 0xf8, 0xe9, 0xe4, 0xdd, 0x43, 0x45, 0x63, 0x3f,
- 0xee, 0x2b, 0xcf, 0xef, 0xb5, 0xfe, 0x4e, 0x8e,
- 0x89, 0x8d, 0xd2, 0x5c, 0x30, 0x81, 0xc9, 0x5c,
- 0xff, 0xe5, 0xfe, 0x7a, 0x76, 0xbf, 0xb4, 0x51,
- 0x3a, 0x7f, 0xd7, 0xce, 0x2e, 0xb4, 0xbd, 0x70,
- 0x74, 0xff, 0xaf, 0x91, 0xf7, 0x74, 0x02, 0xaf,
- 0x3a, 0x7f, 0xff, 0xef, 0xf7, 0x45, 0xa7, 0x0f,
- 0xf6, 0xdf, 0xc2, 0xe9, 0x7d, 0xf7, 0xf0, 0x54,
- 0xe9, 0xfc, 0xdd, 0xe8, 0x69, 0xfc, 0x68, 0xd0,
- 0x74, 0xec, 0x79, 0xd6, 0x9e, 0x6a, 0x22, 0xe1,
- 0x27, 0xe7, 0xf9, 0x41, 0xe2, 0x7e, 0x9b, 0xb6,
- 0x8e, 0x9f, 0x6f, 0xe8, 0xee, 0xa7, 0x47, 0xcf,
- 0x06, 0xa3, 0x13, 0xe6, 0x5f, 0xd5, 0xe7, 0x4f,
- 0x28, 0xef, 0xce, 0x9e, 0xad, 0x54, 0x07, 0x42,
- 0x9f, 0x36, 0x09, 0x82, 0x3f, 0x3e, 0x57, 0x83,
- 0xb7, 0x9d, 0x39, 0x7e, 0xf3, 0xa1, 0xa3, 0xc3,
- 0xc9, 0x44, 0xfc, 0xac, 0xbf, 0xfb, 0xa1, 0xd2,
- 0xa9, 0xd1, 0xe3, 0x7d, 0xa5, 0xd3, 0x01, 0x4a,
- 0x98, 0x21, 0x2a, 0x3c, 0x6a, 0xc2, 0x2b, 0x3f,
- 0xb5, 0xff, 0xbc, 0xe3, 0xc5, 0x38, 0xd0, 0xcf,
- 0x73, 0xb4, 0xd4, 0xe9, 0xcb, 0xf6, 0x8e, 0x9b,
- 0xea, 0x74, 0x34, 0x6c, 0x44, 0x72, 0x78, 0x41,
- 0x6d, 0xe7, 0x4b, 0xa1, 0xd3, 0x0f, 0x43, 0xa3,
- 0xc6, 0xa7, 0xa8, 0x94, 0x2a, 0x39, 0x2d, 0x53,
- 0xc4, 0x38, 0x4c, 0x9b, 0x19, 0x3a, 0x7e, 0x02,
- 0xe2, 0xdb, 0x69, 0xd3, 0x82, 0x10, 0x95, 0x3f,
- 0xf5, 0xa7, 0x2b, 0x47, 0x5b, 0xc6, 0xd2, 0x53,
- 0x8b, 0xc9, 0xef, 0x0b, 0x7f, 0x27, 0x48, 0x4e,
- 0x9f, 0x33, 0xd9, 0x06, 0x9d, 0x14, 0x1e, 0xdf,
- 0x1c, 0x97, 0xb0, 0xf9, 0xfc, 0x9e, 0xaf, 0xed,
- 0xb6, 0x9d, 0x35, 0xe4, 0xe8, 0xa4, 0xf2, 0x30,
- 0x67, 0x3d, 0x9f, 0xdb, 0xce, 0x9f, 0xfd, 0xea,
- 0xe2, 0xf9, 0xfd, 0xb6, 0xfd, 0xd4, 0xe8, 0x13,
- 0xed, 0xc9, 0x0c, 0x9c, 0xab, 0xac, 0x9c, 0xc2,
- 0x22, 0xdc, 0x45, 0x85, 0x8d, 0x98, 0x8c, 0x9b,
- 0x4e, 0xc0, 0x2d, 0xf4, 0x9a, 0xc2, 0xc3, 0x2f,
- 0xbd, 0x61, 0x21, 0x3e, 0x14, 0xdd, 0x43, 0x45,
- 0x6f, 0x3f, 0xed, 0x7b, 0xac, 0x53, 0x75, 0x0d,
- 0x13, 0x84, 0x9d, 0x67, 0xec, 0xc3, 0x09, 0xbb,
- 0xc1, 0xd3, 0xe1, 0x4d, 0xd4, 0x34, 0x5a, 0x33,
- 0x7b, 0xa1, 0xd3, 0xff, 0x61, 0x69, 0xde, 0x3e,
- 0x3f, 0xbc, 0x7a, 0x0e, 0x95, 0xb4, 0x7c, 0xb5,
- 0x18, 0x93, 0xb8, 0xc4, 0x6a, 0x58, 0xbe, 0x21,
- 0x2b, 0x3c, 0x9b, 0xa8, 0x68, 0xb6, 0xa7, 0xec,
- 0x2b, 0x17, 0xdc, 0x9d, 0x33, 0xac, 0x4f, 0x63,
- 0x25, 0x73, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b,
- 0x96, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x76,
- 0xc2, 0xb3, 0xe3, 0xa8, 0x28, 0x7c, 0x7f, 0xfc,
- 0xc3, 0x6f, 0xa4, 0xb1, 0x0f, 0x4f, 0x08, 0x71,
- 0xe3, 0x38, 0xc4, 0x3e, 0xff, 0x09, 0x7a, 0x96,
- 0x64, 0xee, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1,
- 0x53, 0xcf, 0x26, 0xea, 0x1a, 0x2b, 0x99, 0xfc,
- 0xeb, 0x14, 0xdd, 0x43, 0x45, 0x9d, 0x02, 0x7c,
- 0xd8, 0x2b, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0x42,
- 0x9f, 0xef, 0x53, 0x5c, 0xfd, 0x59, 0x53, 0xa6,
- 0x7b, 0xac, 0xfa, 0x80, 0x61, 0x3d, 0xc6, 0x61,
- 0x58, 0x74, 0xfe, 0xbc, 0x56, 0xb6, 0x34, 0x1d,
- 0x27, 0x5a, 0x62, 0x1b, 0x08, 0xba, 0x96, 0xe4,
- 0x9a, 0x7f, 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e,
- 0xa1, 0xa2, 0x7c, 0x84, 0x54, 0x95, 0xc7, 0x8e,
- 0xc7, 0x08, 0xf3, 0xe1, 0x4d, 0xd4, 0x34, 0x56,
- 0x53, 0xfe, 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1,
- 0x37, 0x4d, 0xe7, 0x59, 0xfb, 0x30, 0xc2, 0x7c,
- 0x29, 0xba, 0x86, 0x89, 0x5a, 0x7f, 0xba, 0x63,
- 0xdc, 0x3b, 0x4b, 0xa9, 0xd3, 0xe7, 0x33, 0x5e,
- 0xeb, 0x3e, 0xdd, 0x30, 0x9f, 0x0a, 0x6e, 0xa1,
- 0xa2, 0x5c, 0x9f, 0xef, 0x6b, 0xf3, 0xf5, 0x65,
- 0x4e, 0x9e, 0x6d, 0xef, 0xa9, 0xd3, 0xe7, 0x33,
- 0x5e, 0xeb, 0x44, 0x5e, 0x0c, 0x34, 0xe2, 0x7f,
- 0xe7, 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x8e,
- 0xe7, 0xfb, 0x38, 0xb7, 0xbb, 0x7f, 0x53, 0xa7,
- 0xee, 0x37, 0xea, 0x97, 0xf3, 0xa6, 0xef, 0x07,
- 0x4f, 0xcd, 0xd7, 0xef, 0x1b, 0x93, 0xa7, 0xc2,
- 0x9b, 0xa8, 0x68, 0xa8, 0x67, 0xd7, 0x8c, 0xdd,
- 0x07, 0x4f, 0xff, 0xf7, 0x7b, 0xc7, 0xf5, 0x18,
- 0xdf, 0x65, 0x71, 0xec, 0xd6, 0xf9, 0x3a, 0x4e,
- 0x6e, 0x93, 0x3c, 0xe3, 0x0c, 0x38, 0xd1, 0x7b,
- 0x31, 0xc9, 0x87, 0x11, 0x3c, 0xf8, 0x53, 0x75,
- 0x0d, 0x15, 0x44, 0xff, 0xb5, 0xee, 0xb1, 0x4d,
- 0xd4, 0x34, 0x4d, 0x72, 0x75, 0x9f, 0xb3, 0x0c,
- 0x27, 0xf3, 0xac, 0x53, 0x75, 0x0d, 0x15, 0x64,
- 0xff, 0xce, 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1,
- 0x22, 0x4f, 0x85, 0x37, 0x50, 0xd1, 0x69, 0x4f,
- 0xfb, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0xfb,
- 0x27, 0x59, 0xfb, 0x30, 0xc2, 0x7f, 0xf3, 0x99,
- 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x84, 0x9f,
- 0x63, 0xd4, 0x28, 0x9d, 0x3e, 0x14, 0xdd, 0x43,
- 0x45, 0x1f, 0x3f, 0xff, 0x5f, 0x38, 0x5e, 0xae,
- 0xcf, 0xf4, 0x15, 0xaa, 0x80, 0xa9, 0xf3, 0x99,
- 0xaf, 0x72, 0xa2, 0xd2, 0xc9, 0xf8, 0x8c, 0x21,
- 0x57, 0x95, 0xe8, 0x86, 0x43, 0xd2, 0xed, 0x33,
- 0xa4, 0x6e, 0x89, 0x0e, 0x5a, 0x49, 0xda, 0x3b,
- 0xc4, 0x30, 0x80, 0x4f, 0x98, 0xc1, 0xa7, 0xf3,
- 0xac, 0x53, 0x75, 0x0d, 0x11, 0x14, 0xfd, 0x62,
- 0x9b, 0xa8, 0x68, 0x8a, 0xe7, 0xfb, 0x8e, 0xeb,
- 0x14, 0xdd, 0x43, 0x45, 0x71, 0x0e, 0x3f, 0xad,
- 0x35, 0x9e, 0xbc, 0x6e, 0x4e, 0x9f, 0xd7, 0xe1,
- 0x00, 0x3b, 0xa9, 0xd2, 0x6e, 0xbe, 0x7a, 0x75,
- 0x20, 0x9f, 0xfb, 0x7c, 0xff, 0x7f, 0x3d, 0xe0,
- 0x6c, 0xe9, 0xf5, 0xfb, 0x91, 0xb3, 0xa7, 0x66,
- 0xbe, 0xc1, 0xf5, 0x65, 0x12, 0x7c, 0x29, 0xba,
- 0x86, 0x8a, 0x7a, 0x38, 0xd4, 0x7d, 0xac, 0x25,
- 0xec, 0xd2, 0x7f, 0xf6, 0xbd, 0xdc, 0xff, 0x43,
- 0x5a, 0xa8, 0x0e, 0x87, 0x22, 0x0b, 0x93, 0x89,
- 0xce, 0xe6, 0xce, 0x9f, 0x2b, 0xc1, 0xdb, 0xce,
- 0x9e, 0x4d, 0xd4, 0x34, 0x56, 0x70, 0xd1, 0xe9,
- 0x89, 0x44, 0xfd, 0x43, 0x17, 0xef, 0xa9, 0xd3,
- 0x96, 0x8f, 0x1d, 0x3e, 0xc8, 0x3a, 0xfd, 0xe7,
- 0x4e, 0xef, 0x6a, 0x74, 0xfa, 0xda, 0xa3, 0xb0,
- 0x1d, 0x27, 0x5a, 0x37, 0x04, 0x8b, 0x05, 0xda,
- 0x39, 0xf2, 0xae, 0xa3, 0x93, 0xff, 0x3b, 0x5e,
- 0xeb, 0x14, 0xdd, 0x43, 0x44, 0x8b, 0x3f, 0x9d,
- 0x62, 0x9b, 0xa8, 0x68, 0xb2, 0x67, 0xf3, 0xac,
- 0x53, 0x75, 0x0d, 0x16, 0xc4, 0xeb, 0xad, 0x9d,
- 0x3e, 0x14, 0xdd, 0x43, 0x45, 0xb7, 0x27, 0x3c,
- 0xf2, 0xac, 0x6a, 0x7f, 0xdc, 0x6f, 0x1a, 0xdc,
- 0x33, 0x8b, 0xfa, 0x80, 0xe9, 0xf9, 0x7e, 0xfe,
- 0x7b, 0x61, 0xd3, 0xe1, 0x4d, 0xd4, 0x34, 0x5e,
- 0x13, 0xd9, 0xe2, 0xbc, 0x1d, 0x3f, 0xf2, 0xf5,
- 0x65, 0x2f, 0xcd, 0xff, 0x35, 0x3a, 0x7d, 0x7f,
- 0x03, 0x7a, 0x9d, 0x3e, 0x5e, 0xbd, 0xed, 0x4e,
- 0x9d, 0x95, 0x01, 0xd2, 0x73, 0x71, 0xa9, 0xc2,
- 0xd0, 0x9d, 0x65, 0xf4, 0x98, 0x60, 0x90, 0x08,
- 0xff, 0x29, 0xc9, 0x4c, 0xef, 0x5d, 0x27, 0x4f,
- 0x85, 0x37, 0x50, 0xd1, 0x7a, 0x4f, 0xfb, 0xfb,
- 0x97, 0xaf, 0x4c, 0xfa, 0x83, 0xa7, 0xd6, 0xcc,
- 0x6f, 0x27, 0x49, 0xdc, 0xa2, 0xd2, 0xc7, 0x3a,
- 0x98, 0x37, 0xa0, 0xc2, 0xb2, 0x29, 0xe8, 0x85,
- 0xad, 0xc7, 0xe2, 0x84, 0x9e, 0x8d, 0x2c, 0x57,
- 0x18, 0x98, 0x03, 0xbf, 0xc2, 0x17, 0xb8, 0xeb,
- 0x03, 0x19, 0xb4, 0xdd, 0xe0, 0xe9, 0xeb, 0xc6,
- 0xe4, 0xe9, 0xfd, 0x7e, 0x10, 0x03, 0xba, 0x9d,
- 0x26, 0xeb, 0xe7, 0xa7, 0x52, 0x09, 0xf0, 0xa6,
- 0xea, 0x1a, 0x22, 0x39, 0xff, 0xec, 0x77, 0x5a,
- 0xdb, 0x3f, 0x6d, 0xb8, 0x2b, 0x76, 0x3a, 0x7f,
- 0xcf, 0x5a, 0x06, 0xf3, 0x9f, 0x64, 0xe9, 0xff,
- 0xfe, 0x5c, 0x6f, 0xb2, 0xb8, 0xfd, 0xe7, 0x1e,
- 0xc5, 0xf8, 0x27, 0x4d, 0x43, 0x0a, 0x98, 0x21,
- 0x2a, 0x7f, 0xe7, 0xb9, 0x31, 0xe6, 0xb0, 0xb4,
- 0x38, 0x06, 0xb4, 0x22, 0xf3, 0xfa, 0xf8, 0xff,
- 0xbc, 0x6e, 0x4e, 0x9f, 0xff, 0x91, 0xc3, 0xbf,
- 0xf6, 0x5c, 0x2b, 0x9f, 0xe8, 0x0e, 0x8e, 0x31,
- 0x56, 0xdf, 0x1a, 0xd5, 0x65, 0xa8, 0x61, 0x4a,
- 0xd0, 0x9f, 0x6c, 0x24, 0xb2, 0xba, 0xd8, 0xd6,
- 0x7c, 0x29, 0xba, 0x86, 0x88, 0xba, 0x7d, 0x90,
- 0x75, 0xfb, 0xcb, 0x67, 0xb2, 0x4e, 0xb3, 0xe8,
- 0xd3, 0x08, 0x72, 0x63, 0x8f, 0x87, 0xb4, 0xff,
- 0xcc, 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x33,
- 0x4e, 0xa5, 0x6a, 0x74, 0xe4, 0xf3, 0x0e, 0x9b,
- 0x89, 0xbb, 0x9d, 0x3f, 0x66, 0xe8, 0xb0, 0x34,
- 0x74, 0x37, 0x73, 0xcd, 0x68, 0x7e, 0x7c, 0x9b,
- 0x8f, 0x34, 0x74, 0xff, 0xcd, 0xfe, 0xcf, 0x93,
- 0xdc, 0xe6, 0xd0, 0xe9, 0xff, 0xfe, 0xef, 0x7e,
- 0x9f, 0xbe, 0x71, 0xdf, 0x0c, 0x2b, 0xc5, 0x68,
- 0x3a, 0x2d, 0x16, 0x38, 0x47, 0x9f, 0xff, 0x73,
- 0xef, 0xd1, 0x75, 0xf6, 0xe1, 0xc1, 0x08, 0x4a,
- 0x9e, 0x4d, 0xd4, 0x34, 0x59, 0xf3, 0xfe, 0xf6,
- 0x15, 0xfe, 0xca, 0xe6, 0xa7, 0x4f, 0xff, 0x78,
- 0x71, 0xbc, 0x2d, 0xb7, 0xee, 0xb7, 0xf3, 0xa7,
- 0x04, 0x21, 0x2a, 0x7f, 0xda, 0xfa, 0xfe, 0xd3,
- 0x9b, 0x12, 0x9c, 0x5e, 0x4f, 0xf2, 0xe3, 0xdc,
- 0xff, 0x75, 0xa3, 0xa7, 0xfb, 0xdf, 0xe7, 0xaf,
- 0x3d, 0xe6, 0xa7, 0x42, 0x27, 0xe2, 0x2b, 0x0c,
- 0x2b, 0xc1, 0xf0, 0x1b, 0x72, 0x96, 0xd8, 0xe6,
- 0x7f, 0x87, 0x43, 0x8f, 0x28, 0xa9, 0xd3, 0xff,
- 0xff, 0xf5, 0xd8, 0x2b, 0x77, 0xfe, 0x9d, 0x47,
- 0xeb, 0x78, 0x75, 0x7f, 0x74, 0x32, 0xd8, 0x74,
- 0xea, 0xad, 0x07, 0x4e, 0xe2, 0xbc, 0x1d, 0x0f,
- 0x46, 0x25, 0x61, 0x15, 0x91, 0xc9, 0xea, 0x41,
- 0xda, 0x1d, 0x3e, 0xc7, 0xd6, 0xc4, 0xc9, 0xff,
- 0x78, 0x5f, 0x63, 0x47, 0x7b, 0xc9, 0xa2, 0x0d,
- 0x71, 0xa5, 0x9f, 0x6a, 0x79, 0x8a, 0x74, 0xfc,
- 0xfc, 0x7f, 0x69, 0xc9, 0xd2, 0xb4, 0x3d, 0x3f,
- 0x92, 0xcf, 0xff, 0xfb, 0x43, 0x9b, 0xc6, 0x56,
- 0xff, 0x4e, 0x6c, 0x7d, 0x46, 0xb0, 0xe8, 0x7a,
- 0x68, 0x17, 0x0a, 0xff, 0x93, 0x4f, 0xc3, 0x7c,
- 0xd7, 0x0a, 0x74, 0xff, 0xfe, 0xef, 0xfb, 0xd3,
- 0x87, 0x5f, 0xee, 0x6b, 0xea, 0x71, 0xe0, 0x9d,
- 0x3f, 0xff, 0xd5, 0xaa, 0x8e, 0x55, 0xcc, 0xbc,
- 0xd7, 0xad, 0x75, 0xf6, 0x74, 0xf6, 0x2f, 0xcd,
- 0x8e, 0x8f, 0x22, 0x27, 0x0c, 0xd3, 0x31, 0xba,
- 0x34, 0x5f, 0x93, 0xff, 0x3f, 0x3d, 0xbd, 0xec,
- 0xce, 0x55, 0x87, 0x4f, 0xfd, 0xeb, 0xfd, 0xdd,
- 0x78, 0x3e, 0xac, 0x3a, 0x29, 0x44, 0x5d, 0x51,
- 0xa6, 0xf3, 0x47, 0x4e, 0xcf, 0xa8, 0x3a, 0x77,
- 0xd5, 0x0e, 0x8e, 0x07, 0x9c, 0xc1, 0x7f, 0x8e,
- 0xc2, 0xa6, 0xf3, 0xc9, 0x1d, 0xc2, 0xcf, 0x5c,
- 0xa7, 0xff, 0xfe, 0x6f, 0x5c, 0x79, 0x8e, 0x69,
- 0xfa, 0x3d, 0x71, 0xea, 0x6a, 0x9e, 0xa0, 0xe9,
- 0xe0, 0xed, 0xd4, 0xe9, 0xfe, 0x7b, 0x35, 0xf9,
- 0xaa, 0xf4, 0x3a, 0x14, 0xf6, 0xb4, 0x82, 0x7a,
- 0xeb, 0xef, 0x9d, 0x1f, 0x3c, 0x1e, 0xc8, 0x27,
- 0xba, 0xf7, 0xb5, 0x3a, 0x7f, 0xd9, 0xa8, 0x3d,
- 0x4d, 0x2f, 0xbc, 0x9d, 0x0a, 0x7c, 0xb6, 0x49,
- 0x33, 0x5d, 0x9d, 0x26, 0x1d, 0x14, 0x9a, 0x86,
- 0xe4, 0x62, 0x7f, 0xff, 0xd8, 0xf5, 0x39, 0xba,
- 0x72, 0x22, 0xb9, 0x07, 0x5f, 0xbf, 0x16, 0x74,
- 0xe0, 0x84, 0x25, 0x4f, 0x73, 0xce, 0xfc, 0xa7,
- 0x17, 0x93, 0xfe, 0xdc, 0x27, 0xb7, 0x85, 0x77,
- 0x07, 0x42, 0xa6, 0x44, 0x84, 0xfe, 0x84, 0x5e,
- 0x0c, 0xa7, 0xfe, 0xbf, 0xd3, 0x9b, 0x1f, 0x51,
- 0xac, 0x3a, 0x7d, 0x79, 0x7b, 0x30, 0x74, 0x29,
- 0xf5, 0xd5, 0x12, 0x60, 0x60, 0xe9, 0xfa, 0x86,
- 0x9f, 0xc6, 0x8d, 0x07, 0x4f, 0xee, 0x98, 0xbc,
- 0xe3, 0xd9, 0x3a, 0x6f, 0x09, 0xd0, 0xdd, 0xcf,
- 0xff, 0xc6, 0xb8, 0x35, 0x9f, 0xfb, 0x95, 0xe4,
- 0x57, 0x3e, 0x4f, 0x72, 0x74, 0xfd, 0x8e, 0xe8,
- 0x6b, 0x1e, 0x3a, 0x39, 0x3f, 0x6c, 0x22, 0xc9,
- 0xdc, 0x63, 0x3b, 0xe1, 0xb8, 0x0e, 0x2b, 0x45,
- 0x05, 0x3c, 0xc3, 0x62, 0xe5, 0x09, 0xf4, 0x65,
- 0xa6, 0x1f, 0x3e, 0x35, 0x6a, 0x38, 0x81, 0x35,
- 0x61, 0x66, 0x25, 0x36, 0x6a, 0x08, 0x23, 0x15,
- 0xfc, 0x22, 0x2b, 0x1b, 0x56, 0x61, 0x58, 0x12,
- 0x1e, 0x28, 0x4a, 0xf5, 0x85, 0x5c, 0x39, 0xb0,
- 0xb8, 0xc5, 0x3d, 0x12, 0x7f, 0xf3, 0x99, 0xaf,
- 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x6c, 0x9f, 0xce,
- 0xb1, 0x4d, 0xd4, 0x34, 0x55, 0xb3, 0xf9, 0xef,
- 0xef, 0x3f, 0x57, 0x9d, 0x3d, 0x78, 0xdc, 0x9d,
- 0x26, 0xea, 0xcf, 0x53, 0xe6, 0x93, 0xe1, 0x4d,
- 0xd4, 0x34, 0x56, 0x93, 0xff, 0xc8, 0xa3, 0x60,
- 0xd6, 0x6b, 0xd7, 0xc8, 0x74, 0xff, 0xf3, 0xeb,
- 0x7f, 0x56, 0x6d, 0xe7, 0x2a, 0xc3, 0xa6, 0xce,
- 0x55, 0x12, 0xfa, 0x95, 0x3f, 0x95, 0xb7, 0x5c,
- 0xfd, 0x40, 0x74, 0xfd, 0x45, 0xe3, 0xd6, 0xc3,
- 0xa7, 0xfa, 0xdb, 0xfe, 0xa1, 0xa5, 0xf5, 0x3a,
- 0x7f, 0x3e, 0xf3, 0xbf, 0x07, 0x67, 0x49, 0xdc,
- 0x6a, 0x7e, 0x56, 0x59, 0xe8, 0x63, 0xe0, 0xb7,
- 0x4d, 0xbe, 0x5b, 0x93, 0xc9, 0xfc, 0xeb, 0x14,
- 0xdd, 0x43, 0x45, 0x81, 0x3e, 0x14, 0xdd, 0x43,
- 0x44, 0xeb, 0x3f, 0xff, 0xb0, 0xb4, 0x73, 0x6c,
- 0x75, 0x6b, 0x78, 0xf5, 0x7b, 0xa0, 0xe9, 0xf3,
- 0x99, 0xaf, 0x75, 0xa2, 0x55, 0xa3, 0x09, 0xf0,
- 0xa6, 0xea, 0x1a, 0x2d, 0x99, 0xff, 0x01, 0x6a,
- 0xec, 0x79, 0x34, 0x4e, 0x93, 0xac, 0xfb, 0x34,
- 0xc2, 0x79, 0x37, 0x50, 0xd1, 0x73, 0x49, 0x87,
- 0x4c, 0xeb, 0x13, 0x76, 0x12, 0xb9, 0xfc, 0xeb,
- 0x14, 0xdd, 0x43, 0x45, 0xdf, 0x3c, 0xee, 0x9c,
- 0x80, 0xe8, 0x56, 0xdb, 0x02, 0xeb, 0x0e, 0x14,
- 0x31, 0xa5, 0x4b, 0xd2, 0xa0, 0x45, 0xcd, 0x90,
- 0xd0, 0x04, 0x2b, 0x2a, 0xc3, 0x92, 0xbe, 0xa7,
- 0x73, 0xfe, 0xfe, 0xb9, 0x6b, 0x56, 0x6b, 0xce,
- 0x9f, 0xdf, 0xa2, 0xdb, 0xf2, 0xbd, 0x0e, 0x9f,
- 0x0a, 0x6e, 0xa1, 0xa2, 0x57, 0x9f, 0xf7, 0xf4,
- 0x3c, 0xe1, 0x68, 0xb0, 0x9d, 0x3d, 0xde, 0x8b,
- 0xce, 0x9f, 0xff, 0xde, 0xce, 0xb3, 0x7e, 0x0c,
- 0x07, 0x7f, 0x42, 0x7a, 0x83, 0xa3, 0x94, 0x41,
- 0xe9, 0x0c, 0x72, 0x8e, 0x5c, 0x43, 0x0a, 0x76,
- 0xbd, 0xca, 0x9b, 0xb5, 0x9c, 0x56, 0x31, 0x59,
- 0xd9, 0x5e, 0x4a, 0x9f, 0xfd, 0x8d, 0xf6, 0x55,
- 0xfe, 0x1a, 0x3b, 0x01, 0x53, 0xfb, 0x51, 0xdc,
- 0x8b, 0x72, 0xe5, 0x3e, 0x7a, 0x8e, 0x49, 0xc8,
- 0xaa, 0xb9, 0x91, 0xd9, 0xb6, 0x85, 0x6c, 0xff,
- 0xe7, 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44,
- 0xc3, 0x3f, 0xff, 0x5b, 0xba, 0x8e, 0x81, 0xdd,
- 0x32, 0xf0, 0xad, 0x5e, 0x74, 0xff, 0xcd, 0xd5,
- 0xd2, 0xfe, 0xf7, 0x3f, 0x57, 0x9d, 0x3f, 0x97,
- 0x68, 0xcf, 0x4d, 0x13, 0xa7, 0xda, 0x2f, 0xd6,
- 0x1d, 0x1f, 0x3d, 0x8e, 0xcc, 0xe7, 0xe6, 0x2d,
- 0xff, 0x3c, 0x47, 0x4f, 0x96, 0xff, 0x9e, 0x23,
- 0xa7, 0xec, 0x7b, 0x35, 0xda, 0x78, 0x1e, 0xc3,
- 0x0b, 0xe7, 0xff, 0xfd, 0xfb, 0x0b, 0x7e, 0x6f,
- 0x1c, 0x3f, 0x74, 0x7a, 0xff, 0x4b, 0xea, 0x74,
- 0xfc, 0xdb, 0xae, 0x7e, 0xa0, 0x3a, 0x7f, 0xf2,
- 0xe4, 0x0a, 0xfb, 0xa7, 0x34, 0x76, 0x13, 0xa1,
- 0x4f, 0xf7, 0xc6, 0x33, 0xf5, 0x7d, 0xd1, 0x9b,
- 0x93, 0xa7, 0xff, 0xfc, 0x36, 0xd9, 0x7f, 0x9e,
- 0x1d, 0x7e, 0xb8, 0xdf, 0x65, 0x73, 0x53, 0xa5,
- 0x74, 0xa2, 0x7c, 0x4b, 0xe7, 0xbe, 0xa0, 0xea,
- 0x74, 0xf6, 0xf5, 0xe6, 0xce, 0x93, 0xb8, 0xd5,
- 0x70, 0x7c, 0xc2, 0x89, 0x1e, 0xda, 0x48, 0xc4,
- 0x3c, 0x3f, 0x0c, 0x0c, 0x94, 0x76, 0x47, 0x3e,
- 0x14, 0xdd, 0x43, 0x45, 0x5d, 0x3f, 0xcf, 0x75,
- 0x8a, 0x6e, 0xa1, 0xa2, 0x3c, 0x93, 0xac, 0xfc,
- 0x74, 0xc2, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1,
- 0x60, 0xcf, 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x2c,
- 0xa9, 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0xa7,
- 0x3c, 0x9b, 0xa8, 0x68, 0xb7, 0x27, 0xfe, 0x5b,
- 0x1b, 0xff, 0x0c, 0x5d, 0x21, 0x3a, 0x04, 0xfb,
- 0xea, 0x57, 0x3f, 0xcb, 0xfe, 0xd8, 0xb5, 0xcf,
- 0x8e, 0x9f, 0xf6, 0xbd, 0xd6, 0x29, 0xba, 0x86,
- 0x8a, 0x1e, 0x7f, 0xe6, 0x6f, 0x2b, 0xce, 0x3d,
- 0xff, 0x30, 0xe9, 0xfa, 0xbb, 0x4d, 0x73, 0xe3,
- 0xa7, 0xef, 0xf1, 0xb6, 0x2b, 0x53, 0xa7, 0xff,
- 0xeb, 0xe7, 0x0b, 0xd5, 0xd9, 0xfe, 0x82, 0xb5,
- 0x50, 0x15, 0x27, 0x5a, 0x74, 0x3e, 0x21, 0x61,
- 0xce, 0xa3, 0x65, 0x1b, 0xb2, 0xee, 0x23, 0x09,
- 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x45, 0xe7, 0x0a,
- 0xc9, 0x06, 0x7a, 0x27, 0x2a, 0x57, 0x2f, 0x86,
- 0x98, 0xc0, 0x04, 0x99, 0x87, 0x78, 0x3b, 0xfc,
- 0xa4, 0xb6, 0xcd, 0xb3, 0xf9, 0xd6, 0x29, 0xba,
- 0x86, 0x8a, 0x5a, 0x7f, 0x3a, 0xc5, 0x37, 0x50,
- 0xd1, 0x61, 0x4f, 0xe7, 0x58, 0xa6, 0xea, 0x1a,
- 0x2c, 0xb9, 0xe7, 0x74, 0x6e, 0x3b, 0x76, 0x3a,
- 0x73, 0xba, 0xb0, 0xe9, 0xe4, 0x72, 0xd5, 0x0f,
- 0x43, 0xb3, 0x29, 0xff, 0xce, 0x66, 0xbd, 0xd6,
- 0x29, 0xba, 0x86, 0x8a, 0x32, 0x7f, 0x39, 0x5b,
- 0x28, 0xa8, 0x0e, 0x87, 0xa7, 0x7a, 0x27, 0x6c,
- 0x3b, 0xd8, 0x45, 0xd4, 0xe3, 0x2a, 0x53, 0xff,
- 0x3b, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0x73,
- 0x3f, 0xf9, 0xcc, 0xd7, 0xba, 0xc5, 0x37, 0x50,
- 0xd1, 0x39, 0x4f, 0xe7, 0x58, 0xa6, 0xea, 0x1a,
- 0x2c, 0xc9, 0xff, 0x9c, 0xa0, 0x15, 0xce, 0x36,
- 0x97, 0x9d, 0x3f, 0x9d, 0x62, 0x9b, 0xa8, 0x68,
- 0xb7, 0x67, 0xff, 0x39, 0x9a, 0xf7, 0x58, 0xa6,
- 0xea, 0x1a, 0x29, 0x09, 0xff, 0x9d, 0xaf, 0x75,
- 0x8a, 0x6e, 0xa1, 0xa2, 0x52, 0x8a, 0x13, 0xf5,
- 0x69, 0x31, 0x8a, 0x40, 0x3b, 0xfa, 0x1e, 0x4e,
- 0xdb, 0xd4, 0xa7, 0xfd, 0xaf, 0x75, 0x8a, 0x6e,
- 0xa1, 0xa2, 0x76, 0x9f, 0xff, 0x7b, 0x9e, 0xd8,
- 0xad, 0xfb, 0xcf, 0xd7, 0xf6, 0x87, 0x49, 0xcc,
- 0x44, 0xfe, 0xa3, 0x4f, 0xfd, 0xac, 0xc5, 0xa6,
- 0xe1, 0x7a, 0xbc, 0xe9, 0xff, 0xbf, 0x78, 0xda,
- 0x2e, 0xbf, 0xda, 0x4e, 0x9b, 0x89, 0xdc, 0xa2,
- 0x1e, 0xa8, 0x70, 0xc4, 0x71, 0x71, 0x42, 0xbe,
- 0x7c, 0x29, 0xba, 0x86, 0x88, 0xb2, 0x7f, 0xda,
- 0xf7, 0x58, 0xa6, 0xea, 0x1a, 0x25, 0xd9, 0xff,
- 0xfa, 0xf9, 0xc2, 0xf5, 0x76, 0x7f, 0xa0, 0xad,
- 0x54, 0x05, 0x49, 0xd6, 0x8d, 0x36, 0x18, 0x71,
- 0x23, 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d,
- 0xd4, 0x34, 0x4c, 0x53, 0xf5, 0x8a, 0x6e, 0xa1,
- 0xa2, 0xa9, 0x9f, 0xff, 0xfc, 0x3b, 0x8a, 0x5f,
- 0x79, 0x76, 0x36, 0xa3, 0xe0, 0xe7, 0x1e, 0x17,
- 0x9d, 0x0e, 0x45, 0x66, 0x9a, 0xcf, 0xfe, 0x73,
- 0x35, 0xee, 0xb1, 0x4d, 0xd4, 0x34, 0x4e, 0x93,
- 0xfb, 0xda, 0x2a, 0xfd, 0x6c, 0x74, 0xf9, 0xa5,
- 0x69, 0x6a, 0x74, 0xfc, 0x1b, 0xf3, 0x6b, 0xf9,
- 0xd3, 0xde, 0xc2, 0xbb, 0xc7, 0xad, 0x52, 0x89,
- 0xff, 0xbb, 0xae, 0x56, 0x97, 0x76, 0xd7, 0x98,
- 0x74, 0x31, 0x10, 0x58, 0x39, 0x9f, 0xf6, 0xbd,
- 0xd6, 0x29, 0xba, 0x86, 0x89, 0xde, 0x7d, 0x9e,
- 0xf5, 0x9e, 0x2a, 0x4e, 0xe5, 0x39, 0xbb, 0x8c,
- 0x29, 0x84, 0x7a, 0x8d, 0x3f, 0xf9, 0xcc, 0xd7,
- 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x42, 0xcf, 0xfe,
- 0x73, 0x35, 0xee, 0xb1, 0x4d, 0xd4, 0x34, 0x52,
- 0x53, 0xff, 0xfa, 0xea, 0xee, 0xb6, 0xd6, 0x35,
- 0x99, 0xc2, 0xe7, 0xb6, 0x1d, 0x14, 0x2e, 0x4b,
- 0x3c, 0xe1, 0x21, 0xfc, 0x24, 0x4c, 0x8f, 0xb4,
- 0x09, 0x3d, 0xa9, 0x71, 0x29, 0x4f, 0xe7, 0x58,
- 0xa6, 0xea, 0x1a, 0x22, 0x49, 0xff, 0xce, 0x66,
- 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0x7a, 0x7f,
- 0xf0, 0xeb, 0x55, 0x56, 0xdb, 0x85, 0xa5, 0xa3,
- 0xa7, 0xfb, 0xdb, 0xfe, 0xf2, 0xd2, 0xf4, 0x3a,
- 0x7c, 0x29, 0xba, 0x86, 0x8a, 0x5e, 0x7f, 0xf5,
- 0xbd, 0x41, 0x51, 0x5a, 0x5f, 0xe6, 0x1d, 0x3e,
- 0x6f, 0xf3, 0x16, 0xa7, 0x4f, 0xb5, 0xb5, 0x8d,
- 0x4e, 0x92, 0xf2, 0x7a, 0x2c, 0x2a, 0x93, 0x95,
- 0x37, 0xae, 0x53, 0x2c, 0xf1, 0xa3, 0x0c, 0xc2,
- 0x6a, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x4e,
- 0x4f, 0xfb, 0xc3, 0xb5, 0xc5, 0xdf, 0xd0, 0xe9,
- 0xff, 0x5e, 0x14, 0x6d, 0xc1, 0x08, 0x4a, 0x9b,
- 0xc1, 0x3a, 0x6a, 0x1d, 0xca, 0x23, 0x78, 0x8e,
- 0xdb, 0xcf, 0x27, 0xc2, 0x9b, 0xa8, 0x68, 0xaf,
- 0x27, 0xff, 0xeb, 0xe7, 0x0b, 0xd5, 0xd9, 0xfe,
- 0x82, 0xb5, 0x50, 0x15, 0x27, 0x5a, 0x23, 0x78,
- 0x8c, 0x27, 0xfe, 0x76, 0xbd, 0xd6, 0x29, 0xba,
- 0x86, 0x89, 0x1e, 0x77, 0x80, 0xa7, 0x4e, 0x4b,
- 0x61, 0x4e, 0x2e, 0xe7, 0xc2, 0x9b, 0xa8, 0x68,
- 0x92, 0x27, 0x9d, 0xaf, 0x72, 0x9e, 0xcd, 0x94,
+ 0x4d, 0xf3, 0xff, 0x33, 0x5e, 0xeb, 0x14, 0xdd,
+ 0x43, 0x44, 0xfd, 0x3e, 0x6e, 0xed, 0xd7, 0x15,
+ 0xd6, 0x74, 0xb2, 0x74, 0x37, 0x63, 0xc6, 0xec,
+ 0xda, 0x7f, 0xf9, 0x55, 0x55, 0x55, 0x55, 0x56,
+ 0xba, 0x1d, 0x3e, 0x1f, 0x55, 0xac, 0x2a, 0x6f,
+ 0xbe, 0x2a, 0x2c, 0xdf, 0xfc, 0x4f, 0x2e, 0xca,
+ 0x71, 0xa1, 0x85, 0x46, 0x55, 0x21, 0x53, 0x3f,
+ 0x0e, 0xa6, 0x7c, 0x27, 0x4f, 0x54, 0xcf, 0x3c,
+ 0xe9, 0xf5, 0x03, 0xbd, 0x79, 0xd3, 0xfb, 0x2a,
+ 0xc7, 0x7f, 0xfa, 0x9d, 0x21, 0x53, 0xfe, 0xb2,
+ 0x3f, 0x13, 0xcf, 0xf9, 0x6b, 0xe7, 0xaa, 0xf1,
+ 0xf3, 0xdd, 0x0e, 0x9d, 0xfd, 0x2c, 0xe9, 0xff,
+ 0xb9, 0x5c, 0x6d, 0x2f, 0x39, 0xf3, 0x0e, 0x9d,
+ 0x8f, 0x34, 0x74, 0x29, 0xf0, 0xd1, 0x12, 0x15,
+ 0x3e, 0x6f, 0x13, 0x8c, 0x2a, 0x18, 0x64, 0x08,
+ 0xf8, 0x7d, 0x9e, 0xd6, 0xba, 0xb0, 0xe9, 0xb4,
+ 0x0e, 0x81, 0x37, 0x0c, 0x24, 0x9d, 0xf7, 0xdf,
+ 0x1d, 0x3d, 0x50, 0x79, 0x4a, 0x71, 0x7f, 0x35,
+ 0x6f, 0x3a, 0x6f, 0x21, 0xd2, 0xad, 0x4d, 0x66,
+ 0x05, 0xe1, 0x51, 0x85, 0x93, 0xfe, 0xd7, 0x27,
+ 0xfe, 0xab, 0xbf, 0xec, 0x3b, 0x69, 0x71, 0xa7,
+ 0x4f, 0x2e, 0x28, 0x86, 0x88, 0x3a, 0x7e, 0xdc,
+ 0xaf, 0x1f, 0xb7, 0x9d, 0x02, 0x8a, 0x5c, 0x23,
+ 0xb6, 0x2d, 0x98, 0x79, 0x3a, 0x6f, 0xbe, 0x3a,
+ 0x1e, 0x6b, 0xbe, 0x16, 0x9e, 0xa2, 0xf9, 0xb1,
+ 0x4e, 0x34, 0x53, 0xea, 0x75, 0xe7, 0xfa, 0x1d,
+ 0x1e, 0x3d, 0xfe, 0xa6, 0x73, 0xbe, 0xfb, 0xe2,
+ 0xa0, 0xa7, 0x17, 0xf3, 0xde, 0xfb, 0xcd, 0x15,
+ 0x08, 0x6f, 0x7c, 0x33, 0x1e, 0x4e, 0x03, 0x30,
+ 0xe0, 0x08, 0x40, 0x4e, 0x0f, 0x50, 0xe9, 0xee,
+ 0x74, 0x3f, 0x3a, 0x7f, 0xe5, 0x0f, 0xc1, 0x6b,
+ 0x69, 0x43, 0xf3, 0xa3, 0xc8, 0x81, 0xfc, 0x6e,
+ 0x84, 0x53, 0xe5, 0xb1, 0xcf, 0x8e, 0x9e, 0xe6,
+ 0xd9, 0xc7, 0x3a, 0x1a, 0x3c, 0xb6, 0xc4, 0xb3,
+ 0xf6, 0x2d, 0xa0, 0x56, 0x1e, 0x20, 0x29, 0xf6,
+ 0x87, 0x39, 0x53, 0x44, 0x04, 0xe3, 0x73, 0x3f,
+ 0xca, 0x35, 0x70, 0xb6, 0xbc, 0xc3, 0xa7, 0x98,
+ 0xb6, 0xc3, 0xa7, 0xcb, 0xff, 0xab, 0xa1, 0xd3,
+ 0xf8, 0x5a, 0xa7, 0x83, 0x1e, 0x3a, 0x7a, 0xbf,
+ 0xc5, 0x4a, 0x9b, 0xef, 0x8a, 0x85, 0x37, 0x5f,
+ 0x11, 0x4f, 0xda, 0x2f, 0x78, 0x78, 0xa7, 0x1a,
+ 0x18, 0x55, 0x4d, 0x56, 0xf9, 0xe5, 0xec, 0xa1,
+ 0xe9, 0xd8, 0x10, 0x60, 0xa7, 0xb8, 0x47, 0x4f,
+ 0xbb, 0xc7, 0x7b, 0xd4, 0xd1, 0x03, 0xcf, 0xfb,
+ 0x3d, 0xd4, 0xbc, 0x17, 0x0b, 0xc9, 0xd3, 0xb4,
+ 0x6a, 0x3a, 0x6f, 0xbe, 0x3a, 0x7f, 0x0f, 0xad,
+ 0xb7, 0x57, 0xb9, 0x0d, 0x9f, 0xc3, 0x71, 0xca,
+ 0x30, 0x85, 0xd6, 0x7f, 0xe0, 0xbe, 0x99, 0xd7,
+ 0xf5, 0xda, 0xd4, 0xe8, 0x53, 0xe9, 0xb2, 0x39,
+ 0xff, 0xd6, 0xc6, 0x6b, 0xec, 0x53, 0x75, 0x0d,
+ 0x10, 0xc4, 0x64, 0xfc, 0x40, 0x82, 0x7e, 0xb1,
+ 0x4d, 0xd4, 0x34, 0x41, 0x53, 0xd8, 0xa2, 0xfe,
+ 0x54, 0xed, 0x1a, 0x8a, 0x9e, 0xec, 0x37, 0xa1,
+ 0x53, 0xfb, 0xd5, 0x5e, 0x28, 0xbf, 0x95, 0x05,
+ 0x4f, 0xd6, 0x8b, 0x95, 0x61, 0x53, 0x7d, 0xf1,
+ 0x53, 0xf0, 0x28, 0x55, 0xe1, 0x2a, 0x2d, 0x30,
+ 0xb4, 0x22, 0x60, 0xde, 0x48, 0xff, 0x34, 0x00,
+ 0xaf, 0x8a, 0xba, 0x8c, 0x4d, 0xe1, 0x29, 0xc7,
+ 0xe7, 0x2d, 0x7a, 0x7b, 0x39, 0x8e, 0xce, 0x7f,
+ 0xca, 0xfd, 0x0b, 0xa0, 0xad, 0x0e, 0x9f, 0xec,
+ 0x65, 0x5b, 0x72, 0xbf, 0xa9, 0xd3, 0xfc, 0xb5,
+ 0xbf, 0x89, 0x52, 0xd8, 0x74, 0x29, 0xfa, 0xe4,
+ 0xee, 0x7f, 0xfe, 0x6b, 0x75, 0xfb, 0x9e, 0x17,
+ 0x57, 0x78, 0xef, 0x7a, 0x9a, 0x2f, 0xb9, 0xf7,
+ 0xb0, 0x16, 0xf3, 0xa7, 0xfc, 0x1e, 0x7e, 0x33,
+ 0x63, 0xea, 0x1d, 0x3f, 0xb1, 0xff, 0x50, 0x7e,
+ 0x6c, 0xf1, 0x00, 0xce, 0xd1, 0x79, 0xe2, 0x01,
+ 0x8b, 0x3e, 0x9e, 0xd0, 0xa6, 0xd7, 0x9e, 0x20,
+ 0x19, 0xed, 0x0a, 0xde, 0x78, 0x80, 0x67, 0xf7,
+ 0x93, 0x37, 0xff, 0xea, 0x78, 0x80, 0x67, 0x78,
+ 0x39, 0x3c, 0x40, 0x31, 0xca, 0x2e, 0x58, 0x45,
+ 0x92, 0xe6, 0xc8, 0x13, 0x85, 0x70, 0x78, 0x80,
+ 0x60, 0xf1, 0x00, 0xcc, 0xac, 0x3c, 0x40, 0x31,
+ 0xc9, 0xb9, 0xf0, 0xbc, 0xf7, 0x99, 0xca, 0x9e,
+ 0x20, 0x19, 0xd8, 0xd4, 0x3c, 0x40, 0x33, 0xfe,
+ 0x0d, 0x7b, 0xb3, 0xe4, 0xd1, 0x3c, 0x40, 0x33,
+ 0x6f, 0x27, 0x88, 0x06, 0x7f, 0x06, 0xfd, 0x4a,
+ 0x2f, 0xe7, 0x88, 0x06, 0x7d, 0xee, 0x9a, 0x1f,
+ 0x9e, 0x20, 0x19, 0xbd, 0x43, 0xc4, 0x03, 0x02,
+ 0x7b, 0x38, 0x36, 0x9f, 0x60, 0x16, 0xb7, 0x9a,
+ 0x20, 0x19, 0xbf, 0x53, 0xc4, 0x02, 0xe3, 0x69,
+ 0x3e, 0xf2, 0xb3, 0x79, 0x3c, 0x40, 0x33, 0xdd,
+ 0xe8, 0x21, 0xe2, 0x01, 0x9c, 0xa2, 0x87, 0x88,
+ 0x06, 0x7f, 0xd7, 0x5d, 0x39, 0x5b, 0x0f, 0xe8,
+ 0x78, 0x80, 0x67, 0xdd, 0xeb, 0xde, 0xa7, 0x88,
+ 0x06, 0x2d, 0x10, 0x19, 0x4c, 0x98, 0x7f, 0x3c,
+ 0x40, 0x30, 0xf5, 0x52, 0x1c, 0x91, 0xdc, 0x26,
+ 0x7c, 0xab, 0x93, 0x3f, 0xcd, 0x28, 0x5b, 0x88,
+ 0x53, 0x76, 0x45, 0x3e, 0xbc, 0x53, 0x6b, 0x3c,
+ 0x40, 0x33, 0xfb, 0x95, 0x46, 0x85, 0x70, 0x78,
+ 0x80, 0x79, 0x36, 0x93, 0x85, 0x7e, 0x3c, 0x40,
+ 0x30, 0x87, 0xf0, 0x2a, 0x13, 0xde, 0x07, 0xd0,
+ 0xf1, 0x00, 0xcf, 0xda, 0xd3, 0xee, 0xb7, 0x9e,
+ 0x20, 0x18, 0xb4, 0x44, 0xfe, 0x41, 0xd9, 0x74,
+ 0xff, 0x65, 0x68, 0xea, 0x76, 0x3f, 0x9e, 0x20,
+ 0x19, 0x78, 0xf1, 0x00, 0xcd, 0xb5, 0x72, 0x7c,
+ 0x99, 0x47, 0x98, 0x7f, 0x3c, 0x40, 0x33, 0xed,
+ 0xc5, 0x3d, 0x59, 0xe2, 0x01, 0x9f, 0xbc, 0x1d,
+ 0xbe, 0xe8, 0x78, 0x80, 0x61, 0x51, 0x24, 0x04,
+ 0x78, 0x35, 0x8e, 0x59, 0x02, 0x17, 0x0d, 0xb6,
+ 0x90, 0x05, 0x83, 0x24, 0x5a, 0x5f, 0xf9, 0x3d,
+ 0x25, 0x6c, 0x62, 0x3c, 0x1e, 0x28, 0x4a, 0xf5,
+ 0x86, 0x0c, 0xed, 0xd4, 0x34, 0x40, 0x2e, 0x45,
+ 0xec, 0xf7, 0x46, 0xe1, 0xcb, 0x0e, 0x9b, 0xf5,
+ 0x2a, 0x5d, 0x0a, 0x9d, 0x95, 0xa8, 0xe9, 0xbe,
+ 0xf8, 0xa8, 0xf1, 0xee, 0x71, 0xc5, 0x9a, 0x12,
+ 0xf8, 0x72, 0x73, 0x3d, 0x42, 0x9c, 0x78, 0x53,
+ 0xd8, 0xa3, 0x7f, 0x67, 0x45, 0x4c, 0xae, 0xd7,
+ 0x93, 0x25, 0x25, 0xcf, 0xc7, 0x1f, 0xc3, 0x27,
+ 0xa9, 0x6c, 0xfc, 0x2d, 0x3d, 0x46, 0xa3, 0xa7,
+ 0xfc, 0xfa, 0x70, 0x0b, 0x62, 0x8f, 0x43, 0xa7,
+ 0xfe, 0x1c, 0xed, 0xbd, 0x47, 0xfe, 0xac, 0x3a,
+ 0x7e, 0xeb, 0xf0, 0xfa, 0xf2, 0x54, 0xf3, 0x59,
+ 0xd6, 0x8e, 0x9f, 0x5b, 0x4f, 0x5a, 0xce, 0x9e,
+ 0xb0, 0x57, 0x95, 0x02, 0x7d, 0x40, 0x46, 0xde,
+ 0x51, 0x0a, 0x9b, 0xd5, 0x96, 0xf9, 0x03, 0x28,
+ 0x9b, 0x09, 0x99, 0xef, 0x06, 0x28, 0x74, 0xee,
+ 0xdb, 0x9a, 0x1d, 0x3f, 0xf7, 0xec, 0xb4, 0xcf,
+ 0xb9, 0xcf, 0x7d, 0x0e, 0x9f, 0xdc, 0xad, 0x74,
+ 0xba, 0xf0, 0x74, 0xff, 0x2e, 0x3c, 0x9e, 0xe5,
+ 0x70, 0x74, 0xd8, 0xa5, 0x9f, 0x68, 0x9a, 0xcf,
+ 0xe7, 0xdd, 0x3a, 0xd3, 0x16, 0x74, 0x2a, 0x67,
+ 0x1e, 0x22, 0xd8, 0x5b, 0x76, 0x59, 0x3e, 0xd6,
+ 0xdc, 0xf2, 0xa7, 0x4d, 0x4a, 0x1d, 0x3b, 0xef,
+ 0xbe, 0x3a, 0x6f, 0xf4, 0xa7, 0x17, 0xf0, 0x27,
+ 0xb5, 0x43, 0x59, 0xdb, 0xfd, 0x95, 0x0f, 0x46,
+ 0x03, 0x21, 0x09, 0xc4, 0x43, 0x3f, 0xb0, 0x17,
+ 0x5f, 0xfd, 0x5e, 0x74, 0xff, 0x05, 0xb6, 0xb7,
+ 0x7d, 0xf7, 0xc5, 0x4e, 0x66, 0xe0, 0xe8, 0xc9,
+ 0xeb, 0xb6, 0x3c, 0x9f, 0x5b, 0x4f, 0x57, 0x9d,
+ 0x0a, 0x98, 0x87, 0x8e, 0x36, 0x11, 0xb8, 0x24,
+ 0x9f, 0xfd, 0x7c, 0xeb, 0x2e, 0xb7, 0xdf, 0xf7,
+ 0xc9, 0xd3, 0x67, 0x4e, 0x99, 0xaa, 0x1d, 0x3e,
+ 0xb6, 0xde, 0x0e, 0x6c, 0xd6, 0x75, 0x15, 0x8e,
+ 0x08, 0xb8, 0x73, 0xbc, 0xf7, 0x37, 0x9d, 0x3a,
+ 0x7f, 0xe5, 0xb0, 0x7e, 0x6c, 0x01, 0x7e, 0x3a,
+ 0x5e, 0x14, 0x43, 0x01, 0x2e, 0x08, 0x62, 0xa6,
+ 0xdd, 0xe5, 0xf1, 0xea, 0x73, 0x1f, 0xd7, 0x42,
+ 0xf4, 0x85, 0x7f, 0x88, 0x46, 0x96, 0xb7, 0x98,
+ 0xf9, 0xbf, 0x4d, 0x08, 0xd6, 0x71, 0x28, 0x49,
+ 0xb4, 0x6f, 0xf3, 0xfd, 0x62, 0x0b, 0x87, 0xde,
+ 0x4e, 0x9f, 0x83, 0xfb, 0xe7, 0x5e, 0x74, 0xfb,
+ 0xab, 0x4f, 0x5e, 0x39, 0x50, 0xa8, 0x90, 0xb3,
+ 0x5e, 0xa5, 0xb3, 0xff, 0x87, 0xa0, 0x77, 0xbd,
+ 0x6e, 0x9e, 0x50, 0x3a, 0x5d, 0x4d, 0x10, 0x2c,
+ 0xb0, 0x6a, 0x05, 0x25, 0xec, 0x1b, 0xcf, 0x87,
+ 0xe7, 0xfd, 0xee, 0x2c, 0xfb, 0xab, 0xbf, 0xfd,
+ 0x4a, 0x9f, 0xfd, 0x8a, 0x6d, 0x7c, 0x18, 0xb6,
+ 0x18, 0xe2, 0x3a, 0x15, 0x12, 0x9e, 0x46, 0x9f,
+ 0xff, 0xe1, 0xaa, 0xfc, 0xd6, 0xeb, 0xe8, 0xac,
+ 0xe7, 0x2a, 0x08, 0x74, 0xea, 0x81, 0xe7, 0x42,
+ 0xa7, 0xcc, 0xc8, 0x43, 0xe6, 0x17, 0x9a, 0x45,
+ 0xdb, 0x2c, 0xfe, 0x7b, 0x56, 0x1b, 0x9b, 0x3a,
+ 0x7f, 0xf0, 0xa0, 0x5b, 0x60, 0xb5, 0x15, 0xa1,
+ 0xd3, 0xfb, 0x5a, 0xcd, 0xb2, 0xe8, 0x74, 0x59,
+ 0xfb, 0xb6, 0x45, 0x9f, 0xbd, 0xd3, 0x17, 0x6c,
+ 0x3a, 0x7d, 0x7c, 0xf8, 0x68, 0x74, 0xff, 0xf5,
+ 0x31, 0x5a, 0x7b, 0x3c, 0x1b, 0xef, 0x3e, 0x61,
+ 0xd2, 0x5a, 0x8f, 0xf7, 0xe2, 0x78, 0xf2, 0x3d,
+ 0xf2, 0x47, 0x88, 0x55, 0xcf, 0xf8, 0x3d, 0xd6,
+ 0xbb, 0x6d, 0x5a, 0xf5, 0x3a, 0x77, 0x3a, 0x27,
+ 0x4f, 0xbf, 0xd0, 0xb6, 0xf3, 0xa1, 0x4f, 0x13,
+ 0xb1, 0xb9, 0xe5, 0x65, 0x6d, 0x1d, 0x0a, 0xaa,
+ 0x89, 0xf1, 0xcf, 0xd9, 0xad, 0x21, 0x13, 0x82,
+ 0x29, 0xf2, 0xd4, 0xad, 0xea, 0x74, 0xfd, 0xdf,
+ 0x5c, 0xdd, 0x74, 0x3a, 0x7b, 0xfd, 0xae, 0x87,
+ 0x4d, 0xf7, 0xc7, 0x45, 0x0d, 0xdf, 0xc4, 0x73,
+ 0xef, 0x67, 0x6f, 0x25, 0x38, 0xd1, 0x46, 0x51,
+ 0xda, 0xdc, 0x94, 0xd2, 0x11, 0xd3, 0xbe, 0xfb,
+ 0xe2, 0xa7, 0x9f, 0x8b, 0x42, 0x9c, 0x5f, 0xcf,
+ 0xaf, 0x9f, 0x7f, 0x43, 0xe9, 0xfd, 0x2d, 0x13,
+ 0xe5, 0x02, 0xf9, 0xf8, 0x2b, 0xa3, 0x57, 0x83,
+ 0xa7, 0xff, 0x83, 0x0d, 0x58, 0xde, 0xb1, 0x73,
+ 0xee, 0x4e, 0x9f, 0x55, 0xc7, 0xf5, 0xd6, 0x74,
+ 0xfb, 0xd4, 0x5a, 0x98, 0x7c, 0xbf, 0x67, 0xcb,
+ 0xa3, 0xff, 0x67, 0xcb, 0xf6, 0x6d, 0x79, 0xf2,
+ 0xfd, 0x9e, 0xed, 0xf7, 0x43, 0xe5, 0xfb, 0x1c,
+ 0x9e, 0x88, 0x11, 0x4f, 0x96, 0xe9, 0x60, 0x7c,
+ 0xbf, 0x60, 0xf9, 0x7e, 0xcd, 0xb8, 0x3e, 0x5f,
+ 0xac, 0x2d, 0xe4, 0xf0, 0x3f, 0x9e, 0xd2, 0x27,
+ 0xaf, 0x8b, 0xdf, 0x9f, 0x2f, 0xd8, 0x3e, 0x5f,
+ 0xb3, 0x7e, 0xa7, 0xcb, 0xf6, 0x7f, 0xaf, 0xfd,
+ 0x1b, 0x6d, 0x7c, 0x9f, 0x2f, 0xd9, 0xfa, 0xf3,
+ 0xea, 0x77, 0x51, 0xf2, 0xfd, 0x8f, 0xd1, 0x4a,
+ 0x04, 0x74, 0x46, 0x9e, 0x1a, 0x97, 0x07, 0xcb,
+ 0xf6, 0x0f, 0x97, 0xed, 0x9a, 0xe9, 0xbe, 0xf8,
+ 0xf9, 0x7e, 0xc3, 0xd5, 0x8a, 0x72, 0x6b, 0x70,
+ 0x85, 0xae, 0x13, 0x62, 0x50, 0xc3, 0x2a, 0x42,
+ 0xf3, 0x0b, 0xdf, 0x13, 0x4f, 0x5b, 0xd7, 0xa1,
+ 0x72, 0xfd, 0x39, 0x12, 0x13, 0xfe, 0xb4, 0xe6,
+ 0xc7, 0xed, 0xcb, 0x47, 0x4c, 0xfa, 0x8a, 0x8a,
+ 0x91, 0x2f, 0x5a, 0x10, 0x1f, 0x40, 0xae, 0x4c,
+ 0xec, 0xe3, 0x44, 0xff, 0xfd, 0x5b, 0xc5, 0x5b,
+ 0x6b, 0x4b, 0xce, 0x55, 0x9a, 0xd1, 0xd0, 0xab,
+ 0xb8, 0x96, 0x4b, 0xe2, 0xed, 0x9c, 0xe7, 0xec,
+ 0xb2, 0x7f, 0xdd, 0x16, 0xb0, 0x5c, 0xe7, 0xb4,
+ 0x3a, 0x7e, 0x0d, 0xe9, 0x9d, 0x79, 0xd3, 0xbe,
+ 0xfb, 0xe2, 0xa7, 0x75, 0x5f, 0xca, 0x71, 0x7f,
+ 0x3f, 0xe0, 0xd7, 0xf5, 0x1b, 0x6d, 0xa2, 0x74,
+ 0xff, 0x06, 0xff, 0xc1, 0xeb, 0xfd, 0x67, 0x47,
+ 0x29, 0x99, 0xb1, 0x03, 0xf4, 0xc0, 0x2d, 0xc1,
+ 0xf4, 0xff, 0x80, 0x3d, 0xdb, 0x73, 0x4e, 0x25,
+ 0xc1, 0xd3, 0xbe, 0xfb, 0xe2, 0xc4, 0x20, 0x9f,
+ 0x0a, 0x6e, 0xa1, 0x62, 0x10, 0x38, 0xd6, 0xce,
+ 0xfb, 0xef, 0x8b, 0x10, 0x7a, 0x0b, 0x10, 0x79,
+ 0xc6, 0xb6, 0x65, 0x65, 0xa2, 0x59, 0x1b, 0xa7,
+ 0xd8, 0x5c, 0x2b, 0x0e, 0x9e, 0x0f, 0x2f, 0x43,
+ 0xa7, 0x75, 0x5f, 0xce, 0x8a, 0x8f, 0x01, 0x84,
+ 0x53, 0xe4, 0x5c, 0xab, 0x0a, 0x9f, 0x06, 0x80,
+ 0x59, 0x53, 0x5a, 0x15, 0x37, 0xdf, 0x15, 0x16,
+ 0x7e, 0x94, 0x25, 0xc1, 0x1f, 0xc2, 0x93, 0xf8,
+ 0x3a, 0xaf, 0xf9, 0xb6, 0xf2, 0x9c, 0x6f, 0x21,
+ 0x53, 0x80, 0xf3, 0x36, 0xc3, 0x4e, 0x7f, 0xf6,
+ 0x57, 0xfa, 0x5d, 0xf3, 0xa1, 0xbd, 0x0e, 0x9f,
+ 0xd4, 0xea, 0xca, 0x7d, 0xb5, 0x9d, 0x0a, 0xae,
+ 0xda, 0xd3, 0x3d, 0x18, 0x48, 0xc7, 0x59, 0xa6,
+ 0x94, 0x4a, 0x9d, 0xf7, 0xdf, 0x15, 0x3e, 0x7f,
+ 0xfa, 0x1c, 0x94, 0xe2, 0xfe, 0x7f, 0xf8, 0x2b,
+ 0xe1, 0x5f, 0xea, 0x09, 0xb5, 0x06, 0x9d, 0x3f,
+ 0xff, 0xff, 0xd8, 0xa7, 0x5a, 0x70, 0xce, 0xfb,
+ 0x1e, 0xca, 0x7b, 0x83, 0xfd, 0x9d, 0x0c, 0x3e,
+ 0xc6, 0xce, 0x9f, 0xfe, 0xb5, 0x77, 0x20, 0xbd,
+ 0xa5, 0xf4, 0xf0, 0x9d, 0x3c, 0xdf, 0x9f, 0xdb,
+ 0x1d, 0x0f, 0x3f, 0x7d, 0x4f, 0x9f, 0xfc, 0xfb,
+ 0x1f, 0xd9, 0xea, 0x75, 0xa2, 0xd9, 0xd3, 0xde,
+ 0xe6, 0xd8, 0x74, 0x2a, 0xa2, 0x67, 0x9b, 0xda,
+ 0x8e, 0xc6, 0x20, 0x04, 0x3d, 0xa5, 0xcf, 0xdc,
+ 0x7a, 0x78, 0x2b, 0x79, 0xd3, 0xfe, 0xd1, 0xe2,
+ 0xf6, 0x6f, 0x6b, 0xfc, 0xe9, 0xff, 0x52, 0x8a,
+ 0x38, 0x57, 0x73, 0xe3, 0xa7, 0xfc, 0x1a, 0xd6,
+ 0x74, 0x47, 0xdc, 0x9d, 0x16, 0x8e, 0xe4, 0x32,
+ 0xf2, 0x0b, 0x0f, 0xa7, 0x9f, 0xd6, 0xda, 0x3a,
+ 0x7c, 0x3c, 0xdd, 0x81, 0xd3, 0xff, 0x71, 0xfd,
+ 0x79, 0x56, 0xd4, 0xca, 0xd6, 0x74, 0x69, 0xf7,
+ 0xd0, 0x96, 0x7f, 0xfa, 0xf1, 0x4b, 0x6b, 0x2a,
+ 0xda, 0xf3, 0x95, 0x3a, 0x7f, 0x61, 0xbb, 0x34,
+ 0x1c, 0x65, 0x5d, 0x9d, 0x1c, 0xa2, 0xc8, 0x08,
+ 0x70, 0xa1, 0x3f, 0xfd, 0xea, 0x5f, 0x38, 0xa7,
+ 0xba, 0x67, 0x43, 0xc7, 0x4f, 0xff, 0xe0, 0xc5,
+ 0xe7, 0xcb, 0x8f, 0x7e, 0xaf, 0x77, 0xdf, 0x7c,
+ 0x54, 0xf7, 0x37, 0x7d, 0x0a, 0x9e, 0xdf, 0xf7,
+ 0x07, 0x4e, 0x78, 0x76, 0x68, 0x86, 0x67, 0x7d,
+ 0xf7, 0xc5, 0x4e, 0xb0, 0x42, 0x9c, 0x5f, 0xcf,
+ 0xfa, 0xea, 0xbe, 0x75, 0xe0, 0xb5, 0x1d, 0x1f,
+ 0x9f, 0x30, 0x14, 0x4f, 0xe7, 0x85, 0xe3, 0x1d,
+ 0xd4, 0x74, 0x2a, 0x75, 0x95, 0x32, 0x72, 0x47,
+ 0x59, 0x08, 0xc2, 0xbb, 0x48, 0xa7, 0xbd, 0x8f,
+ 0x29, 0xd3, 0xfb, 0xbb, 0x1f, 0xff, 0xf0, 0x1d,
+ 0x3f, 0xfc, 0xff, 0x73, 0x9e, 0xb4, 0xb1, 0x4d,
+ 0xd4, 0x34, 0x41, 0x93, 0xff, 0x87, 0x5b, 0x58,
+ 0x26, 0x7d, 0xff, 0x5c, 0x1d, 0x0a, 0x8a, 0x8e,
+ 0xd7, 0x23, 0x28, 0xff, 0xc4, 0x37, 0x26, 0xcf,
+ 0x67, 0x4f, 0x0f, 0xbe, 0xe3, 0x9d, 0x1e, 0x37,
+ 0xb4, 0x17, 0x9f, 0xdc, 0x57, 0x4e, 0x2b, 0x15,
+ 0x3a, 0x1e, 0x9e, 0xe7, 0xa3, 0x20, 0xa3, 0x2e,
+ 0x08, 0x67, 0xff, 0x94, 0x2a, 0xe0, 0xd7, 0x82,
+ 0xf9, 0xb0, 0xe8, 0x74, 0xe5, 0x16, 0x8e, 0x85,
+ 0x5e, 0x99, 0xe4, 0xee, 0xe3, 0x45, 0x43, 0x0f,
+ 0x47, 0xfd, 0xb2, 0x8e, 0x7b, 0x44, 0xe2, 0x53,
+ 0x9f, 0x6b, 0x36, 0xe8, 0x74, 0xff, 0xf2, 0x2d,
+ 0x28, 0xac, 0xbc, 0x7a, 0x99, 0xd3, 0xa7, 0xf0,
+ 0x02, 0xbd, 0x8b, 0xe3, 0xa7, 0xf6, 0x3c, 0xdb,
+ 0xd8, 0x7a, 0x95, 0x26, 0x1d, 0x3f, 0x58, 0x74,
+ 0x15, 0x77, 0x8f, 0x17, 0xa9, 0xac, 0x5a, 0x61,
+ 0x1e, 0x4d, 0xa3, 0xac, 0xf0, 0xf7, 0x5b, 0xce,
+ 0x9f, 0xc0, 0xf0, 0xb6, 0x2a, 0x1d, 0x39, 0x9c,
+ 0xd9, 0xd0, 0xa7, 0xdd, 0x64, 0x7a, 0x5f, 0x3b,
+ 0x1e, 0xa8, 0xe9, 0xff, 0x77, 0x8a, 0x75, 0x1f,
+ 0xd9, 0xea, 0x1d, 0x3f, 0xf2, 0x86, 0xe5, 0x7f,
+ 0x70, 0xd2, 0x85, 0x47, 0x28, 0x85, 0x62, 0x1c,
+ 0xfb, 0x3e, 0xf5, 0x74, 0x3a, 0x0a, 0x9f, 0xa9,
+ 0xd5, 0x45, 0x58, 0x54, 0x15, 0x05, 0x41, 0x50,
+ 0x54, 0x3c, 0xf7, 0xfc, 0x15, 0xf9, 0x6f, 0x61,
+ 0x5c, 0x41, 0x4d, 0xe1, 0x53, 0x66, 0xca, 0x9f,
+ 0xb7, 0x70, 0xd2, 0xb0, 0xae, 0x05, 0xac, 0x9b,
+ 0x92, 0xa0, 0xa8, 0x2a, 0x1e, 0x5a, 0x78, 0x2a,
+ 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x82, 0xa2,
+ 0xa3, 0x79, 0xc8, 0x57, 0x82, 0xbf, 0x0a, 0xa0,
+ 0x53, 0x60, 0xa8, 0x2a, 0x0a, 0x87, 0x96, 0x94,
+ 0x0a, 0x82, 0xa0, 0xa8, 0x2a, 0x0a, 0x87, 0x9a,
+ 0x8f, 0xc2, 0xb0, 0x14, 0xde, 0x15, 0x05, 0x41,
+ 0x50, 0x54, 0x15, 0x15, 0x1a, 0x8e, 0x81, 0x42,
+ 0x15, 0x90, 0xa9, 0x74, 0x2a, 0x0a, 0x82, 0xa0,
+ 0xa8, 0x2a, 0x39, 0x35, 0x15, 0x85, 0x7e, 0x15,
+ 0xd8, 0x54, 0x15, 0x05, 0x41, 0x53, 0xec, 0xaf,
+ 0xf4, 0xb2, 0xa0, 0xa8, 0x79, 0xe7, 0xa0, 0x56,
+ 0x42, 0xb4, 0x2b, 0xf2, 0x79, 0x21, 0x50, 0x54,
+ 0x15, 0x05, 0x41, 0x50, 0xf3, 0x51, 0x58, 0x57,
+ 0x82, 0x9b, 0x05, 0x41, 0x50, 0x54, 0x15, 0x05,
+ 0x43, 0xcd, 0x47, 0x21, 0x59, 0x0a, 0x00, 0xa9,
+ 0x64, 0xa8, 0x2a, 0x0a, 0x93, 0xca, 0x82, 0xab,
+ 0x2c, 0x20, 0xa8, 0x2a, 0x0a, 0x82, 0xa2, 0xa3,
+ 0xe6, 0x78, 0x57, 0x41, 0xa4, 0x1a, 0x68, 0x2b,
+ 0xf0, 0xac, 0x05, 0x4a, 0xca, 0x82, 0xa0, 0xa9,
+ 0x3c, 0xa8, 0x2a, 0xb2, 0xc2, 0x0a, 0x82, 0xa1,
+ 0x4f, 0x49, 0xe1, 0x5e, 0x1a, 0x11, 0xa6, 0x05,
+ 0x41, 0x50, 0x54, 0x15, 0x05, 0x41, 0x50, 0xa6,
+ 0xca, 0xb0, 0xa1, 0x0a, 0x60, 0x50, 0x05, 0x41,
+ 0x50, 0x54, 0x15, 0x02, 0x5f, 0x50, 0x2b, 0x01,
+ 0x50, 0x54, 0x15, 0x05, 0x43, 0x0b, 0xe0, 0x0a,
+ 0xc0, 0x54, 0x98, 0x54, 0x15, 0x05, 0x47, 0xe5,
+ 0xa7, 0x61, 0x50, 0x54, 0x15, 0x05, 0x41, 0x50,
+ 0xa6, 0xa1, 0xa0, 0xac, 0x85, 0x76, 0x15, 0x0a,
+ 0xbf, 0x65, 0x53, 0x9b, 0xcf, 0x79, 0x29, 0xb5,
+ 0xc4, 0x6e, 0xad, 0x23, 0xcc, 0xfc, 0x73, 0xd6,
+ 0x8e, 0x86, 0x11, 0xcc, 0x48, 0xc9, 0xbe, 0xb3,
+ 0x7e, 0x76, 0x0e, 0xd4, 0x67, 0xc3, 0x0f, 0x6f,
+ 0x2d, 0x99, 0x3e, 0x4a, 0xe2, 0x2c, 0xea, 0x48,
+ 0xde, 0x95, 0x3e, 0x78, 0x2d, 0xd0, 0xa7, 0x26,
+ 0xb1, 0x3b, 0xca, 0xc2, 0xa7, 0xbc, 0x9a, 0x27,
+ 0x4e, 0xf7, 0x36, 0x74, 0xe5, 0xea, 0xea, 0xd1,
+ 0x1c, 0x27, 0x19, 0x1b, 0xc0, 0xfc, 0xfe, 0xcf,
+ 0xbe, 0xe4, 0x56, 0xa3, 0xa2, 0xb4, 0x42, 0xb4,
+ 0xa1, 0x37, 0xea, 0x74, 0xfc, 0x3a, 0x1d, 0x57,
+ 0xf3, 0xa6, 0xd1, 0x3a, 0x5e, 0x39, 0x0b, 0x49,
+ 0x21, 0xd2, 0x61, 0xd3, 0xaf, 0x89, 0xde, 0x44,
+ 0xa0, 0x8b, 0x65, 0x07, 0x47, 0xba, 0x87, 0xcf,
+ 0xcc, 0xf7, 0x16, 0x87, 0xe7, 0x4f, 0xff, 0x2f,
+ 0x0d, 0x11, 0xdf, 0xd5, 0xdf, 0x7d, 0xf1, 0xd0,
+ 0xa8, 0x82, 0xec, 0xc2, 0x2a, 0x67, 0x8f, 0x3e,
+ 0x32, 0xde, 0x61, 0x3c, 0x85, 0x9e, 0x85, 0x13,
+ 0x44, 0x9b, 0x4a, 0xa5, 0x08, 0x5c, 0xe2, 0x1c,
+ 0x13, 0xf9, 0x43, 0x1a, 0x1d, 0xd9, 0xd3, 0xf3,
+ 0xc3, 0xcf, 0xcd, 0x9d, 0x3e, 0xab, 0xc2, 0xaf,
+ 0x3a, 0x04, 0xf4, 0xc0, 0xb2, 0x7f, 0xd9, 0x51,
+ 0xfc, 0x2f, 0xed, 0xfc, 0xe9, 0xd7, 0x6d, 0x1d,
+ 0x2b, 0xc9, 0xec, 0xfe, 0x7d, 0x3c, 0xc5, 0xba,
+ 0x8e, 0x9f, 0x5b, 0x60, 0x5a, 0xce, 0x8f, 0x1e,
+ 0x4d, 0x08, 0x67, 0x94, 0x30, 0x87, 0x49, 0x6d,
+ 0x32, 0xb0, 0x79, 0xc3, 0x8f, 0x11, 0x14, 0xf7,
+ 0x7a, 0x2f, 0x3a, 0x79, 0x7b, 0x6e, 0x68, 0x54,
+ 0xf9, 0xee, 0xfb, 0xef, 0x8e, 0x80, 0x3d, 0x2e,
+ 0xc9, 0xe3, 0x94, 0x4a, 0xdb, 0x9c, 0x31, 0x55,
+ 0x57, 0xf1, 0xd7, 0x77, 0x0d, 0x99, 0xf8, 0x7b,
+ 0xfe, 0xc1, 0x0e, 0x9f, 0xea, 0x82, 0xdf, 0x9b,
+ 0xfe, 0x87, 0x4f, 0x73, 0xca, 0xb6, 0x3a, 0x7f,
+ 0xfc, 0xb9, 0x56, 0x22, 0xe2, 0xc5, 0x37, 0x50,
+ 0xd1, 0x7c, 0x4f, 0xef, 0xb7, 0x14, 0x5b, 0xa8,
+ 0xe9, 0xff, 0xfa, 0xf1, 0xd5, 0xea, 0xdb, 0xc1,
+ 0xf8, 0xf9, 0x59, 0x65, 0x4d, 0x8b, 0x3a, 0x7c,
+ 0x3e, 0xab, 0x58, 0x69, 0x84, 0xe7, 0xb1, 0xda,
+ 0xe9, 0xa6, 0x13, 0x9b, 0xf5, 0x35, 0x02, 0x73,
+ 0xf8, 0x37, 0xa6, 0x14, 0x7f, 0x35, 0x02, 0x73,
+ 0xfa, 0x97, 0x9f, 0x53, 0xba, 0x8d, 0x30, 0x9c,
+ 0xd7, 0xc9, 0xa6, 0x13, 0x9b, 0xef, 0x8f, 0x30,
+ 0x9c, 0x5a, 0x69, 0xf5, 0x9a, 0x78, 0xb9, 0x84,
+ 0x74, 0x40, 0x6c, 0x85, 0xf1, 0x1c, 0xb0, 0x59,
+ 0x84, 0xce, 0x3e, 0x89, 0x7a, 0xb4, 0xfe, 0xfe,
+ 0x8f, 0x32, 0x28, 0xaa, 0x2b, 0x12, 0x96, 0x27,
+ 0xff, 0x82, 0xe8, 0x2b, 0xde, 0x03, 0xcd, 0xba,
+ 0xb0, 0xe8, 0x55, 0x7e, 0x9c, 0x9c, 0xa1, 0x2e,
+ 0x56, 0xf1, 0x2a, 0xf5, 0xb1, 0x64, 0xfb, 0x9b,
+ 0x1f, 0x74, 0x3a, 0x7c, 0x17, 0xd6, 0xda, 0x3a,
+ 0x7f, 0xb3, 0xac, 0xcf, 0x96, 0xb7, 0x9d, 0x3f,
+ 0x75, 0x07, 0xf1, 0x6d, 0x47, 0x47, 0x8f, 0xaf,
+ 0xf3, 0x98, 0x04, 0x5b, 0x62, 0x12, 0x73, 0xfe,
+ 0xbd, 0xcb, 0x5e, 0x0c, 0xdd, 0x67, 0x42, 0xae,
+ 0xe2, 0xdc, 0xe1, 0x07, 0x98, 0x76, 0x1b, 0xe0,
+ 0x4f, 0x3f, 0xf9, 0x98, 0xa7, 0x82, 0xb7, 0xe3,
+ 0xd4, 0xf1, 0xd3, 0xff, 0xf8, 0x2e, 0xbb, 0xa6,
+ 0x86, 0x7c, 0xb8, 0xcf, 0x7a, 0xc3, 0xa7, 0xe0,
+ 0xed, 0x9e, 0xca, 0x9d, 0x3f, 0xfe, 0xd0, 0xc6,
+ 0xee, 0x41, 0x71, 0x4f, 0xaf, 0x27, 0x4e, 0x1a,
+ 0x50, 0xf1, 0x01, 0xcf, 0xff, 0x75, 0x15, 0xca,
+ 0xf0, 0xb1, 0x4d, 0xd4, 0x34, 0x40, 0x6e, 0x35,
+ 0x11, 0xfa, 0x39, 0x30, 0xf5, 0x16, 0x99, 0xaf,
+ 0xa3, 0x11, 0x9e, 0x0c, 0x7f, 0xd9, 0xd3, 0xff,
+ 0xf3, 0xee, 0x9e, 0x11, 0xf3, 0x3a, 0xe3, 0x37,
+ 0xf6, 0x0e, 0x8b, 0x44, 0x06, 0x91, 0xcf, 0xff,
+ 0xf6, 0xbe, 0xc1, 0xa7, 0xdd, 0x6f, 0xea, 0xbf,
+ 0xbb, 0xef, 0xbe, 0x2a, 0x32, 0x88, 0xe0, 0x21,
+ 0x9f, 0xcb, 0x62, 0x9b, 0xa8, 0x68, 0x82, 0x67,
+ 0xf9, 0x71, 0x62, 0x9b, 0xa8, 0x68, 0xbe, 0x67,
+ 0xde, 0x6c, 0x17, 0x4e, 0x4f, 0xe9, 0x0e, 0xa7,
+ 0xf7, 0x79, 0xe2, 0xcf, 0x93, 0x27, 0x4f, 0xfa,
+ 0xad, 0xaf, 0x8a, 0xf0, 0x1a, 0xd8, 0xe9, 0xdf,
+ 0x7d, 0xf1, 0x53, 0xf6, 0x33, 0x69, 0xa2, 0x53,
+ 0x8b, 0xf8, 0xa9, 0x13, 0x60, 0xc5, 0x3f, 0xf5,
+ 0x4c, 0x5a, 0xe8, 0x17, 0x57, 0x57, 0x9d, 0x3f,
+ 0xfd, 0xd6, 0xb0, 0xe0, 0x99, 0xf7, 0xff, 0xa8,
+ 0xbc, 0xe9, 0xdf, 0x7d, 0xf1, 0x53, 0xfb, 0xaf,
+ 0xea, 0x17, 0x5e, 0x0a, 0x71, 0x7f, 0x3f, 0xff,
+ 0x37, 0x3c, 0x13, 0x3e, 0xe7, 0x9b, 0xfb, 0x86,
+ 0x29, 0x75, 0x1d, 0x2d, 0xca, 0x2b, 0x3b, 0x44,
+ 0x87, 0xaa, 0xc6, 0xe5, 0x03, 0xd0, 0xd2, 0x12,
+ 0x36, 0x24, 0x62, 0x32, 0x09, 0xf6, 0x6f, 0x0d,
+ 0x3c, 0xe9, 0xff, 0x5e, 0x14, 0x69, 0x95, 0x0c,
+ 0x1e, 0x20, 0x89, 0xfc, 0xb6, 0x29, 0xba, 0x86,
+ 0x88, 0x21, 0xc7, 0x91, 0x3f, 0x6e, 0x44, 0x7d,
+ 0xf1, 0xd3, 0xf7, 0x1f, 0x9f, 0xb4, 0x1e, 0x74,
+ 0x01, 0xef, 0x76, 0x59, 0x19, 0x4c, 0xef, 0xf7,
+ 0x00, 0x85, 0x4c, 0xff, 0x28, 0x63, 0xad, 0xe7,
+ 0x6b, 0x3a, 0x7f, 0xfb, 0x7e, 0xc5, 0xe5, 0x7d,
+ 0x80, 0xbc, 0xf8, 0xe8, 0x7a, 0x21, 0xc0, 0xe6,
+ 0x7f, 0x63, 0xab, 0x29, 0xf6, 0xd6, 0x74, 0xf7,
+ 0x9a, 0xf7, 0xc7, 0x4f, 0xff, 0xbb, 0xa8, 0x16,
+ 0xf2, 0xe5, 0xc5, 0xe7, 0xb1, 0x3a, 0x7d, 0x78,
+ 0xa7, 0x5a, 0x72, 0x7f, 0x3d, 0x49, 0x27, 0xe4,
+ 0xcf, 0xb8, 0xbd, 0xd0, 0xe9, 0xf9, 0x8b, 0xc7,
+ 0xcd, 0xd4, 0x74, 0xff, 0xff, 0xf7, 0xb1, 0xac,
+ 0xd0, 0xfd, 0xfe, 0xa7, 0x6c, 0xcf, 0x97, 0x19,
+ 0xef, 0x58, 0x74, 0x72, 0x8e, 0x3f, 0x19, 0x69,
+ 0x8c, 0xe1, 0xeb, 0x43, 0xa7, 0xfd, 0xa0, 0x96,
+ 0x29, 0xba, 0x86, 0x88, 0x46, 0x14, 0xf8, 0x7b,
+ 0x1d, 0x9f, 0xfc, 0xb7, 0x5f, 0x5c, 0x78, 0x3b,
+ 0x7d, 0xd0, 0xe9, 0xff, 0xed, 0xda, 0xba, 0xde,
+ 0x75, 0x8e, 0xfb, 0xef, 0x8e, 0x95, 0xf2, 0x8a,
+ 0x06, 0x93, 0x27, 0x7d, 0xf7, 0xc5, 0x4f, 0xf5,
+ 0xff, 0xa3, 0x6d, 0xaf, 0x92, 0x9c, 0x5f, 0xcd,
+ 0xf7, 0xc5, 0x4e, 0xfb, 0xef, 0x8a, 0x9f, 0xb6,
+ 0xae, 0x72, 0xb4, 0x29, 0xc5, 0xfc, 0x02, 0x2f,
+ 0x3e, 0x48, 0xe2, 0x37, 0x9f, 0x27, 0xb9, 0xea,
+ 0xc2, 0x9c, 0x6c, 0xe7, 0x7d, 0xf7, 0xc5, 0x4e,
+ 0xa2, 0x89, 0x4e, 0x2f, 0xe5, 0xff, 0x91, 0x05,
+ 0x85, 0x99, 0xfb, 0x90, 0x57, 0xea, 0x1d, 0x3f,
+ 0xba, 0x8f, 0x3e, 0x6c, 0xbc, 0x9d, 0x3f, 0xb1,
+ 0x9b, 0x6d, 0x78, 0xa1, 0xd0, 0x28, 0x97, 0xc9,
+ 0x58, 0x1c, 0x42, 0xa3, 0xbe, 0xe1, 0x83, 0x3a,
+ 0xb6, 0xe2, 0x6e, 0xc7, 0x4f, 0xfe, 0xbe, 0x3e,
+ 0x87, 0xf6, 0x8b, 0x95, 0x61, 0xd3, 0xf2, 0x7a,
+ 0x99, 0xf3, 0x45, 0x4f, 0xe0, 0xba, 0xdf, 0x4f,
+ 0x74, 0x3a, 0x7b, 0x74, 0x7a, 0x1d, 0x1c, 0x0f,
+ 0x5a, 0xa3, 0x59, 0xe5, 0xd6, 0x36, 0x2a, 0x77,
+ 0xdf, 0x7c, 0x54, 0xff, 0xf7, 0x55, 0xfe, 0xec,
+ 0x31, 0x9f, 0x28, 0x54, 0x53, 0x8b, 0xf9, 0x5a,
+ 0x22, 0x81, 0x88, 0x30, 0xa9, 0xf2, 0x3c, 0xaa,
+ 0xb4, 0xaf, 0x42, 0x13, 0x30, 0xc5, 0x9f, 0xff,
+ 0x32, 0xd1, 0x43, 0x71, 0x4e, 0x7b, 0xd1, 0x79,
+ 0xd3, 0xe5, 0xc5, 0x1b, 0x59, 0xd0, 0xa7, 0xf7,
+ 0x85, 0x39, 0xff, 0xef, 0x36, 0xb0, 0xe4, 0x37,
+ 0xeb, 0x0d, 0xe8, 0x74, 0xff, 0xff, 0x73, 0x9f,
+ 0x7d, 0x6d, 0xfe, 0x66, 0xe2, 0x9d, 0xbe, 0xeb,
+ 0xc1, 0xd1, 0x68, 0xbf, 0xd5, 0x18, 0x56, 0xca,
+ 0x96, 0xa4, 0xc7, 0xc7, 0x29, 0xcc, 0x66, 0xf7,
+ 0x2d, 0x8b, 0xd1, 0xcf, 0xb5, 0x0b, 0xd1, 0x22,
+ 0x64, 0x2c, 0x33, 0x19, 0x3f, 0xf0, 0x91, 0x08,
+ 0x61, 0x52, 0x55, 0x4e, 0x25, 0x05, 0x77, 0x0d,
+ 0x0f, 0xa1, 0xc1, 0x39, 0xb2, 0x81, 0xd3, 0xff,
+ 0xd6, 0x0e, 0xc7, 0x4f, 0x57, 0x4c, 0xdf, 0xfa,
+ 0x74, 0xab, 0x79, 0xf7, 0x72, 0x39, 0x3f, 0x65,
+ 0xaf, 0x67, 0xcc, 0x3a, 0x7f, 0xc0, 0xb8, 0xce,
+ 0xff, 0xb5, 0xd0, 0xe9, 0xcd, 0x76, 0x27, 0x4f,
+ 0xfb, 0x7c, 0x37, 0x5b, 0xbe, 0xfb, 0xe3, 0xa3,
+ 0x4f, 0x7a, 0x83, 0xb3, 0xff, 0xc0, 0xaf, 0xe1,
+ 0xd7, 0x1e, 0x0e, 0xdf, 0x74, 0x3a, 0x2d, 0x33,
+ 0xf4, 0x2f, 0xcc, 0x27, 0x3f, 0x21, 0x9f, 0xca,
+ 0x0f, 0x0b, 0xbf, 0xce, 0x9f, 0xcf, 0xb1, 0xa0,
+ 0x2d, 0x47, 0x4f, 0xff, 0x2b, 0x65, 0x17, 0x75,
+ 0xc0, 0x5d, 0x5e, 0x13, 0xdd, 0xef, 0x3f, 0xfd,
+ 0x78, 0x50, 0x4b, 0xc6, 0x7c, 0x3f, 0xa1, 0xd3,
+ 0xed, 0xa5, 0x86, 0x0e, 0x9d, 0x8d, 0xe3, 0x9d,
+ 0x3f, 0xb1, 0x9f, 0x3b, 0xfd, 0xf1, 0xd1, 0x52,
+ 0x64, 0x5c, 0xaf, 0x02, 0x66, 0x09, 0x7b, 0x1f,
+ 0x9f, 0xdd, 0xfe, 0xb9, 0xf6, 0xbc, 0xe9, 0xff,
+ 0xf8, 0x2e, 0x9d, 0xf0, 0xbc, 0xe8, 0x5b, 0x4f,
+ 0x5a, 0xce, 0x9f, 0xf5, 0xd3, 0xbb, 0x14, 0xdd,
+ 0x43, 0x44, 0x0d, 0x3e, 0xbc, 0x67, 0x5f, 0xc1,
+ 0x14, 0x60, 0xb9, 0x3f, 0xed, 0x1b, 0x0f, 0xe9,
+ 0x8a, 0x56, 0x74, 0xff, 0xff, 0xfd, 0x78, 0xce,
+ 0x87, 0x4e, 0x14, 0x1d, 0xdc, 0x36, 0xbe, 0x78,
+ 0x5b, 0x34, 0x2b, 0x79, 0xe2, 0x0b, 0x9f, 0xf6,
+ 0xef, 0x44, 0xde, 0x78, 0x74, 0xf8, 0xf1, 0x05,
+ 0xcf, 0xfd, 0x9f, 0x67, 0xca, 0x18, 0xe1, 0xd3,
+ 0xe3, 0xc4, 0x17, 0x3f, 0x97, 0xc1, 0x8e, 0x1d,
+ 0x3e, 0x3c, 0x41, 0x73, 0xf3, 0x2f, 0x9e, 0x1d,
+ 0x3e, 0x3c, 0x41, 0x73, 0xff, 0xfd, 0xa0, 0x1e,
+ 0x67, 0x0a, 0x26, 0x7c, 0x3e, 0xe9, 0x55, 0xfc,
+ 0x78, 0x82, 0xe6, 0xaf, 0x87, 0x29, 0xd1, 0x22,
+ 0x88, 0xab, 0x6a, 0x20, 0x20, 0x42, 0xaa, 0xd2,
+ 0xc9, 0xf0, 0x4a, 0x3d, 0x9e, 0xd1, 0xff, 0x4e,
+ 0x9f, 0xfb, 0x3e, 0xcf, 0x94, 0x31, 0xc3, 0xa7,
+ 0xc7, 0x88, 0x2e, 0x7f, 0x9a, 0xa2, 0x7a, 0xae,
+ 0x1d, 0x3e, 0x3c, 0x41, 0x73, 0xec, 0x51, 0x59,
+ 0xc1, 0x11, 0x47, 0xd5, 0x5a, 0x7f, 0xf7, 0x04,
+ 0xcf, 0x91, 0x71, 0x4e, 0x1d, 0x3e, 0x3c, 0x41,
+ 0x73, 0xff, 0xff, 0x00, 0x79, 0x9c, 0x3b, 0xbe,
+ 0x14, 0x4c, 0xf8, 0x7d, 0xd2, 0xab, 0xf8, 0xf1,
+ 0x05, 0xc5, 0xa6, 0x4d, 0x5a, 0x1e, 0xae, 0xcf,
+ 0xf6, 0x7c, 0x3e, 0xe9, 0x55, 0xfc, 0x78, 0x82,
+ 0xe7, 0xff, 0xb7, 0x6b, 0x7d, 0x33, 0xee, 0x79,
+ 0x51, 0x52, 0xa7, 0xfd, 0x6f, 0x7f, 0x74, 0x10,
+ 0xab, 0x88, 0xf1, 0x05, 0xc2, 0x23, 0xa0, 0x52,
+ 0x68, 0xa1, 0x3f, 0xe4, 0xf0, 0xe3, 0x7f, 0xa7,
+ 0x0f, 0x8f, 0x10, 0x5c, 0xfd, 0x9f, 0x67, 0x3e,
+ 0xfc, 0xd0, 0x05, 0xcf, 0xaf, 0xfe, 0x1d, 0x3e,
+ 0x3c, 0x41, 0x73, 0x5e, 0x10, 0xfd, 0xb2, 0x79,
+ 0x15, 0xa3, 0xc2, 0x90, 0xc4, 0x9f, 0x99, 0x7c,
+ 0xf0, 0xe9, 0xf1, 0xe2, 0x0b, 0x9f, 0xf2, 0x67,
+ 0xc3, 0xee, 0x95, 0x5f, 0xc7, 0x88, 0x2e, 0x6b,
+ 0xe1, 0xa8, 0x8e, 0xa2, 0x04, 0xfe, 0xef, 0xcc,
+ 0xd0, 0xad, 0xe7, 0x88, 0x2e, 0x7f, 0xd7, 0xe6,
+ 0xd6, 0x17, 0xce, 0xbc, 0xf1, 0x05, 0xb0, 0xf0,
+ 0x63, 0x95, 0xdd, 0x9f, 0xcd, 0xc2, 0x3e, 0x9a,
+ 0x46, 0x31, 0x88, 0xc7, 0xbb, 0x85, 0xbf, 0xce,
+ 0x13, 0xef, 0xe9, 0xff, 0xea, 0x68, 0x82, 0xdc,
+ 0x88, 0x19, 0xff, 0x5b, 0xf3, 0xaf, 0x6f, 0x6f,
+ 0xee, 0xa3, 0xa7, 0xf0, 0x85, 0xf3, 0x9e, 0xfe,
+ 0x3a, 0x7d, 0x5e, 0x34, 0x7f, 0x3a, 0x7e, 0xba,
+ 0xb7, 0x2b, 0xc7, 0x3a, 0x3c, 0x88, 0xcd, 0x34,
+ 0x02, 0x89, 0xda, 0x35, 0x1d, 0x37, 0xea, 0x74,
+ 0xf7, 0x95, 0x96, 0x74, 0x1d, 0x3f, 0x6f, 0x4c,
+ 0x28, 0xfe, 0x74, 0x72, 0x6e, 0x00, 0x2a, 0x7f,
+ 0xff, 0x2f, 0xb9, 0x05, 0xed, 0x31, 0x69, 0xca,
+ 0xa7, 0x56, 0x1d, 0x37, 0xea, 0x74, 0xcb, 0xd0,
+ 0xe9, 0xfe, 0xbc, 0x51, 0x59, 0xd6, 0xda, 0x3a,
+ 0x7f, 0x52, 0xf3, 0xea, 0x77, 0x51, 0xd3, 0x7d,
+ 0xf1, 0x53, 0xfc, 0x16, 0xdb, 0x5f, 0x4f, 0x72,
+ 0x74, 0x22, 0x7f, 0x3e, 0x1b, 0x11, 0x66, 0x2c,
+ 0x64, 0x87, 0xf6, 0x16, 0xe4, 0x58, 0x05, 0xe8,
+ 0x75, 0xf1, 0xaf, 0x51, 0x89, 0xdf, 0x7d, 0xf1,
+ 0x52, 0x61, 0x4e, 0x2f, 0xe7, 0xda, 0xd6, 0xe8,
+ 0x94, 0xe4, 0x6e, 0xf5, 0x85, 0xf4, 0xfe, 0xaf,
+ 0x0b, 0x79, 0xba, 0x8e, 0x85, 0x6c, 0x96, 0xee,
+ 0x36, 0x9e, 0x88, 0x55, 0x98, 0x7a, 0x35, 0x31,
+ 0x4d, 0xcc, 0x35, 0xf6, 0x92, 0xd8, 0x09, 0x34,
+ 0x86, 0x97, 0x72, 0xc1, 0x1b, 0x25, 0xcf, 0x5a,
+ 0x2e, 0x0e, 0x9e, 0xb6, 0x5e, 0x0e, 0x9e, 0xda,
+ 0xba, 0xbc, 0xe8, 0x53, 0xe3, 0xac, 0x7d, 0xbc,
+ 0x82, 0x7e, 0x0e, 0xf9, 0x66, 0xbc, 0xe9, 0xff,
+ 0xea, 0xde, 0x0b, 0xc1, 0x80, 0xbd, 0x31, 0xea,
+ 0x8e, 0x9f, 0xd4, 0xc3, 0x6b, 0x0b, 0xe4, 0xe8,
+ 0x54, 0x5b, 0x78, 0xbb, 0x55, 0x27, 0x6f, 0x0e,
+ 0xa7, 0x4f, 0xff, 0x03, 0xf8, 0x5f, 0x3e, 0xa5,
+ 0x78, 0xef, 0x68, 0x74, 0x70, 0x3f, 0x3b, 0x1f,
+ 0x9f, 0xaa, 0x69, 0xfc, 0x68, 0xd4, 0x74, 0xcf,
+ 0xa8, 0xe9, 0xf6, 0x6f, 0xcf, 0xa1, 0xd3, 0xff,
+ 0xd9, 0x5e, 0xae, 0xc0, 0x6f, 0xf4, 0xa2, 0xfe,
+ 0x54, 0xfe, 0xfe, 0xc5, 0x37, 0x50, 0xf1, 0x02,
+ 0x4e, 0xc7, 0xaa, 0x3a, 0x1e, 0x8d, 0x2e, 0x49,
+ 0xc5, 0x49, 0x87, 0x93, 0x37, 0xbc, 0xe9, 0xec,
+ 0x55, 0xa0, 0x74, 0xf5, 0x74, 0xdc, 0x1d, 0x15,
+ 0x1e, 0xe5, 0x8c, 0xe4, 0x86, 0x7f, 0x06, 0xfd,
+ 0x4a, 0x2f, 0xe7, 0x4e, 0xfb, 0xef, 0x8f, 0x87,
+ 0xd4, 0xed, 0x0e, 0x4b, 0x87, 0xd1, 0xc6, 0xb2,
+ 0x39, 0x44, 0xc7, 0xeb, 0xf3, 0xff, 0xeb, 0x0f,
+ 0x74, 0x75, 0x31, 0x9e, 0xf5, 0xef, 0x53, 0xa2,
+ 0xa3, 0xfc, 0xe8, 0x4b, 0x0d, 0xdd, 0x58, 0xfb,
+ 0xcd, 0x6e, 0x1d, 0x3e, 0x84, 0xce, 0xc6, 0x87,
+ 0x3e, 0xf6, 0x17, 0x14, 0x2a, 0x79, 0x17, 0x14,
+ 0x2a, 0x6f, 0xbe, 0x2a, 0x1e, 0x7b, 0xf6, 0x4f,
+ 0xf1, 0x04, 0xd7, 0xf1, 0x4e, 0x35, 0xf3, 0xff,
+ 0xeb, 0xc2, 0xa5, 0xd8, 0x63, 0x3e, 0x50, 0xa8,
+ 0xe8, 0xfc, 0xfd, 0xfe, 0x26, 0x9f, 0xff, 0xca,
+ 0xdb, 0xc1, 0xff, 0x0c, 0x52, 0xd3, 0x3a, 0x18,
+ 0xa1, 0xd3, 0xf9, 0xaa, 0xdf, 0x9e, 0xd4, 0x4e,
+ 0x9c, 0xfd, 0x13, 0xa7, 0xcf, 0xbc, 0x5f, 0x25,
+ 0x4b, 0xcd, 0x1e, 0x0e, 0x06, 0xa7, 0xb1, 0xd2,
+ 0xf2, 0x74, 0xdf, 0xa9, 0xd3, 0x7e, 0xa7, 0x4f,
+ 0xbb, 0x7d, 0x83, 0xbc, 0x6b, 0x3f, 0x16, 0x85,
+ 0x44, 0x70, 0x27, 0xcf, 0xfd, 0x8c, 0xdb, 0x3a,
+ 0xaf, 0xf7, 0x5e, 0x0e, 0x9f, 0xd5, 0xa7, 0x87,
+ 0xaa, 0xf2, 0x74, 0xf7, 0xec, 0xd7, 0xd0, 0xff,
+ 0x30, 0x8f, 0x3b, 0x8a, 0xeb, 0x3a, 0x14, 0xf6,
+ 0x74, 0xea, 0x7a, 0x9d, 0xd7, 0x83, 0xa7, 0x7d,
+ 0xf7, 0xc5, 0x4f, 0xaf, 0xa0, 0x77, 0x42, 0x9c,
+ 0x5f, 0xcf, 0xad, 0xdf, 0x7d, 0xf1, 0xd0, 0xa7,
+ 0xc5, 0x83, 0x89, 0xef, 0xb4, 0x1e, 0x74, 0xc9,
+ 0x93, 0xa7, 0x7d, 0xf7, 0xc5, 0x4f, 0xde, 0xde,
+ 0x99, 0xf6, 0x0a, 0x71, 0x7f, 0x3e, 0xbf, 0xee,
+ 0xda, 0x3a, 0x54, 0xe0, 0x89, 0x91, 0x34, 0x03,
+ 0xe9, 0xef, 0x07, 0x6f, 0xe5, 0x1e, 0x17, 0x0b,
+ 0xa8, 0x55, 0xcc, 0x07, 0x92, 0x5b, 0x1f, 0x47,
+ 0x61, 0x85, 0xbe, 0x61, 0xed, 0xa4, 0x14, 0x85,
+ 0x2e, 0x23, 0x11, 0x9f, 0x95, 0x82, 0x3b, 0x83,
+ 0xa7, 0xff, 0xbc, 0xca, 0xdf, 0x4e, 0x16, 0x01,
+ 0x7e, 0xfc, 0xe8, 0xc9, 0xfe, 0x60, 0xaa, 0x4e,
+ 0xe3, 0x21, 0x19, 0xb2, 0xb2, 0xb6, 0x6a, 0x8d,
+ 0x51, 0xf2, 0x95, 0x79, 0x96, 0x4b, 0x75, 0xbf,
+ 0x77, 0x48, 0xdc, 0x52, 0x50, 0xb5, 0x72, 0xbd,
+ 0xbd, 0x1a, 0x13, 0x53, 0xd0, 0x43, 0x3a, 0x78,
+ 0xc9, 0x54, 0xd9, 0x9f, 0xe3, 0xda, 0x7d, 0x37,
+ 0xf2, 0xd3, 0xc2, 0x78, 0x12, 0x95, 0x97, 0xde,
+ 0x2b, 0x3f, 0x4e, 0xe3, 0x34, 0x6d, 0x0e, 0x8f,
+ 0xa1, 0x43, 0xc5, 0x2d, 0x0b, 0xac, 0xf1, 0x2b,
+ 0x7c, 0x62, 0x10, 0xe8, 0x47, 0xc4, 0x3f, 0x11,
+ 0xad, 0x73, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b,
+ 0x8e, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x75,
0xcf, 0xfc, 0xed, 0x7b, 0xac, 0x53, 0x75, 0x0d,
- 0x12, 0x54, 0xf8, 0x53, 0x75, 0x0d, 0x17, 0x8c,
- 0xfd, 0xdf, 0xe9, 0xda, 0x6a, 0x74, 0xfa, 0xb5,
- 0xcd, 0xa1, 0xd3, 0xfc, 0xf7, 0x58, 0xa6, 0xea,
- 0x1a, 0x24, 0xd9, 0x3a, 0xd1, 0x8f, 0x49, 0x80,
- 0x98, 0x69, 0x34, 0x2a, 0xf3, 0x65, 0x07, 0x6f,
- 0x8f, 0x33, 0x95, 0x6f, 0x43, 0x21, 0xa8, 0x68,
- 0xb0, 0xaf, 0x10, 0xc0, 0xc9, 0xbf, 0x71, 0x89,
- 0xc2, 0xc7, 0x01, 0x99, 0x44, 0x75, 0xcf, 0x8f,
- 0x27, 0x99, 0x43, 0x57, 0x6e, 0xe6, 0xba, 0x4a,
- 0x59, 0x4b, 0x40, 0x75, 0x4c, 0xf6, 0xaf, 0xa7,
- 0x4b, 0x38, 0xf1, 0xdb, 0x35, 0x4f, 0xb3, 0x1a,
- 0x4e, 0x1b, 0x31, 0x1f, 0x9f, 0x89, 0xda, 0x8d,
- 0xac, 0x2a, 0x81, 0x2c, 0x5d, 0xb9, 0x85, 0x8f,
- 0xe7, 0xbc, 0x6b, 0x49, 0x5f, 0xcd, 0x76, 0xe7,
- 0xdd, 0x31, 0xad, 0xb4, 0xa6, 0x10, 0xca, 0x50,
- 0xe2, 0x8f, 0xaf, 0xac, 0xec, 0xa3, 0x7c, 0xf7,
- 0x74, 0x00,
+ 0x12, 0x8c, 0x2c, 0x24, 0xb7, 0x5e, 0x51, 0xc9,
+ 0xdf, 0x43, 0xb4, 0x3b, 0xf4, 0x3c, 0x78, 0xe7,
+ 0xfb, 0x88, 0xfd, 0xaa, 0x1c, 0x60, 0xed, 0xbc,
+ 0xee, 0x7f, 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e,
+ 0xa1, 0xa2, 0x5a, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2,
+ 0x37, 0x9f, 0xf6, 0xbd, 0xd6, 0x29, 0xba, 0x86,
+ 0x89, 0x7e, 0x4e, 0xb3, 0xf6, 0x61, 0x84, 0xfe,
+ 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0xab, 0x9f, 0xee,
+ 0x96, 0x17, 0x5e, 0x35, 0x87, 0x4d, 0xcf, 0x8e,
+ 0x9f, 0xac, 0x53, 0x75, 0x0d, 0x12, 0x04, 0x70,
+ 0x3c, 0xc7, 0x0b, 0xcf, 0xa9, 0xa1, 0xb5, 0x9d,
+ 0x0f, 0x3c, 0xaa, 0xc9, 0x27, 0xff, 0x5b, 0x59,
+ 0xd6, 0x63, 0x2b, 0x8e, 0xd8, 0x74, 0x74, 0x4c,
+ 0xf7, 0x61, 0x9f, 0xd4, 0x8e, 0x7f, 0xe0, 0xba,
+ 0x9d, 0xc4, 0xa0, 0x17, 0x83, 0xa1, 0xc7, 0xfa,
+ 0x27, 0x33, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b,
+ 0x22, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x6b,
+ 0xcf, 0xe7, 0x58, 0xa6, 0xea, 0x1a, 0x2e, 0x49,
+ 0xf0, 0xa6, 0xea, 0x1a, 0x2e, 0xc9, 0xff, 0x6b,
+ 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0xa3, 0xa4, 0xeb,
+ 0x3f, 0x66, 0x18, 0x4f, 0x85, 0x37, 0x50, 0xd1,
+ 0x4a, 0xcf, 0xff, 0xff, 0x65, 0x6a, 0x5c, 0xf9,
+ 0xb6, 0xf3, 0x9f, 0x39, 0x33, 0xe6, 0xb2, 0xb5,
+ 0x59, 0xd3, 0xe7, 0x33, 0x5e, 0xeb, 0x45, 0x93,
+ 0x46, 0x11, 0x52, 0xea, 0x2b, 0xe1, 0x91, 0x59,
+ 0x3f, 0xa3, 0xf5, 0x61, 0x0f, 0xe7, 0x74, 0x3b,
+ 0xc4, 0x2c, 0x5b, 0x43, 0x66, 0x7f, 0x9e, 0xeb,
+ 0x14, 0xdd, 0x43, 0x44, 0x71, 0x3f, 0xde, 0x75,
+ 0x8a, 0x6e, 0xa1, 0xa2, 0xb5, 0x93, 0xb5, 0x10,
+ 0x58, 0x41, 0x9f, 0xfc, 0xe6, 0x6b, 0xdd, 0x62,
+ 0x9b, 0xa8, 0x68, 0x96, 0xe6, 0xba, 0xce, 0x9f,
+ 0xdc, 0xdb, 0x18, 0xbe, 0xa1, 0xd1, 0x59, 0xe4,
+ 0xf8, 0x5a, 0x76, 0x79, 0x79, 0xd3, 0x9e, 0xc4,
+ 0x3a, 0x7f, 0xfe, 0xce, 0xd7, 0xff, 0x39, 0xd7,
+ 0xdd, 0x03, 0xbd, 0xea, 0x74, 0x1a, 0x21, 0xb9,
+ 0xff, 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x98,
+ 0x27, 0x0f, 0x7f, 0x95, 0x3f, 0x82, 0xf1, 0x85,
+ 0x1a, 0x1d, 0x27, 0x2a, 0x6c, 0x95, 0x11, 0xf2,
+ 0x3b, 0x63, 0x68, 0xbe, 0xc1, 0x7c, 0x23, 0x75,
+ 0x1d, 0x9c, 0xce, 0xc4, 0xa9, 0xff, 0x6b, 0xdd,
+ 0x62, 0x9b, 0xa8, 0x68, 0x98, 0xe4, 0xef, 0x1f,
+ 0x13, 0x07, 0x27, 0xe5, 0xa7, 0x0c, 0x5e, 0x4e,
+ 0x9c, 0xa1, 0x51, 0xd3, 0xff, 0xff, 0xcf, 0xa6,
+ 0x6f, 0xbf, 0xa9, 0x9b, 0x4b, 0xa7, 0x0b, 0xad,
+ 0xf4, 0xf0, 0x78, 0xe9, 0xe4, 0xdd, 0x43, 0x45,
+ 0x63, 0x3f, 0xee, 0x2b, 0xc0, 0x5f, 0x6a, 0x18,
+ 0x3a, 0x3a, 0x26, 0x68, 0x85, 0xd5, 0x8d, 0x8c,
+ 0x20, 0x70, 0x57, 0x3f, 0xf9, 0x43, 0x1d, 0x3b,
+ 0x50, 0xb4, 0x51, 0x3a, 0x7f, 0xb9, 0xcd, 0xd2,
+ 0xb7, 0xae, 0x4e, 0x9f, 0xe5, 0xad, 0xed, 0x3f,
+ 0x46, 0xa3, 0xa2, 0xcf, 0xd3, 0xc7, 0x53, 0xfe,
+ 0xbe, 0x47, 0xdd, 0xd5, 0xfd, 0x1e, 0x74, 0xff,
+ 0xff, 0xc1, 0xdd, 0x56, 0x9c, 0x03, 0xb6, 0xfe,
+ 0x17, 0x5b, 0xef, 0xb0, 0xfe, 0x87, 0x4f, 0xe6,
+ 0xef, 0x53, 0x4f, 0xe3, 0x46, 0xa3, 0xa7, 0xff,
+ 0x5b, 0x59, 0xd6, 0x63, 0x2b, 0x8e, 0xd8, 0x74,
+ 0xec, 0xf9, 0xd6, 0xa9, 0xdd, 0x14, 0x73, 0x0b,
+ 0xb0, 0x21, 0xc2, 0x17, 0x13, 0xe7, 0x54, 0x19,
+ 0xbb, 0x68, 0xe9, 0xf6, 0x85, 0x5d, 0xd0, 0xe8,
+ 0x03, 0xc0, 0xa0, 0xc4, 0xfb, 0xba, 0xea, 0x5e,
+ 0x87, 0x4f, 0x99, 0x60, 0xaf, 0x3a, 0x79, 0x47,
+ 0x40, 0xe9, 0xea, 0x51, 0x7f, 0x3a, 0x14, 0xf9,
+ 0x72, 0x4b, 0xf0, 0xf4, 0xf9, 0x5f, 0xff, 0x6f,
+ 0x3a, 0x72, 0x83, 0xce, 0x86, 0x8f, 0x0f, 0x05,
+ 0x33, 0xb3, 0xd5, 0x87, 0x4f, 0xca, 0xcb, 0x0f,
+ 0x74, 0x3a, 0x54, 0x3a, 0x3c, 0x6f, 0x74, 0xb6,
+ 0x6f, 0xd4, 0xa9, 0xbe, 0xf8, 0xa8, 0xf1, 0xae,
+ 0xf8, 0x5a, 0x7f, 0x6b, 0xc2, 0xf1, 0x9f, 0x14,
+ 0xe3, 0x45, 0x3d, 0xce, 0xd7, 0x43, 0xa7, 0x28,
+ 0x34, 0x74, 0xc0, 0xa7, 0x43, 0x46, 0xbc, 0x46,
+ 0xe7, 0x87, 0xfb, 0x6f, 0x3a, 0x5d, 0x0e, 0x98,
+ 0x7a, 0x1d, 0x1e, 0x35, 0x3d, 0x44, 0xa1, 0x51,
+ 0xc7, 0x6a, 0x5e, 0x21, 0xca, 0x6c, 0xd9, 0xc1,
+ 0xd3, 0xf7, 0xeb, 0x9b, 0x6d, 0xa7, 0x4e, 0xfb,
+ 0xef, 0x8a, 0x9f, 0xfa, 0xd3, 0x95, 0xab, 0xad,
+ 0xe7, 0x6b, 0x29, 0xc5, 0xfc, 0xf7, 0x85, 0xbf,
+ 0x93, 0xa4, 0x27, 0x4f, 0x99, 0xec, 0x7f, 0xa7,
+ 0x45, 0x47, 0xb9, 0xc7, 0x25, 0xec, 0x3e, 0x7f,
+ 0x27, 0xa8, 0x16, 0xdb, 0x4e, 0x9a, 0xf0, 0x74,
+ 0x56, 0x78, 0xf9, 0x32, 0x9e, 0xc0, 0x5b, 0xce,
+ 0x9f, 0xfd, 0xea, 0x66, 0xf9, 0x0b, 0x6c, 0x17,
+ 0x43, 0xa0, 0x4f, 0xab, 0x04, 0x12, 0x72, 0xae,
+ 0xd7, 0xd4, 0x43, 0xcc, 0x24, 0x6d, 0xcb, 0xc4,
+ 0x62, 0xb6, 0xc7, 0x0c, 0xc6, 0x49, 0xa7, 0x7f,
+ 0x8b, 0x02, 0x6d, 0x21, 0x63, 0x87, 0xce, 0xb0,
+ 0x8d, 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0xb7, 0x9f,
+ 0xf6, 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0xc2,
+ 0x4e, 0xb3, 0xf6, 0x61, 0x84, 0xdd, 0xe4, 0xe9,
+ 0xf0, 0xa6, 0xea, 0x1a, 0x2d, 0x19, 0xbd, 0xd0,
+ 0xe9, 0xff, 0xb2, 0xb5, 0xef, 0x1f, 0x21, 0xbc,
+ 0x7a, 0x8e, 0x95, 0xb4, 0x7c, 0x94, 0x18, 0x93,
+ 0xb8, 0xc4, 0x69, 0xd8, 0xbe, 0x61, 0x29, 0x3c,
+ 0x9b, 0xa8, 0x68, 0xb6, 0xa7, 0xec, 0xab, 0x17,
+ 0xdc, 0x9d, 0x33, 0xac, 0x4f, 0x63, 0x05, 0x73,
+ 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b, 0x96, 0x7f,
+ 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x76, 0xc2, 0xb6,
+ 0x19, 0x35, 0x14, 0x3e, 0x3f, 0xfe, 0x61, 0xb7,
+ 0xd2, 0x5e, 0x9f, 0xa7, 0x9b, 0xb8, 0xf1, 0xa9,
+ 0xe6, 0x1f, 0x41, 0x09, 0x7a, 0x16, 0x60, 0xee,
+ 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x53, 0xcf,
+ 0x26, 0xea, 0x1a, 0x2b, 0x99, 0xfc, 0xeb, 0x14,
+ 0xdd, 0x43, 0x45, 0x9d, 0x02, 0x7c, 0xd9, 0x2b,
+ 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0x42, 0x9f, 0xef,
+ 0x57, 0x4c, 0x02, 0xb2, 0x87, 0x4c, 0xf7, 0x59,
+ 0xf4, 0xfe, 0x61, 0x3d, 0xc6, 0x65, 0x58, 0x74,
+ 0xfe, 0xbc, 0xd2, 0x96, 0x35, 0x1d, 0x27, 0x5a,
+ 0x62, 0x1b, 0x08, 0xaa, 0x17, 0x60, 0x9a, 0x7f,
+ 0xf3, 0x99, 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2,
+ 0x7c, 0x84, 0x54, 0x95, 0xc7, 0x8e, 0xc7, 0x28,
+ 0xf3, 0xe1, 0x4d, 0xd4, 0x34, 0x56, 0x53, 0xfe,
+ 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x37, 0x4d,
+ 0xe7, 0x59, 0xfb, 0x30, 0xc2, 0x7c, 0x29, 0xba,
+ 0x86, 0x89, 0x5a, 0x7f, 0xba, 0x67, 0xdc, 0x3b,
+ 0x4b, 0xa1, 0xd3, 0xe7, 0x33, 0x5e, 0xeb, 0x3e,
+ 0xdd, 0x30, 0x9f, 0xef, 0x02, 0x8d, 0xb6, 0xd6,
+ 0x1d, 0x3e, 0x14, 0xdd, 0x43, 0x44, 0xb9, 0x3f,
+ 0xde, 0xd7, 0xe0, 0x15, 0x94, 0x3a, 0x79, 0xb7,
+ 0x81, 0x4e, 0x9f, 0x39, 0x9a, 0xf7, 0x2a, 0x30,
+ 0x2c, 0xdf, 0x26, 0x1a, 0x6f, 0x3f, 0xf3, 0xb5,
+ 0xee, 0xb1, 0x4d, 0xd4, 0x34, 0x47, 0x73, 0xfd,
+ 0x8c, 0xdb, 0xdd, 0xa1, 0x43, 0xa7, 0xee, 0x34,
+ 0x15, 0x2c, 0x0e, 0x9b, 0xbc, 0x9d, 0x3f, 0x37,
+ 0x41, 0x79, 0xdc, 0x1d, 0x3e, 0x14, 0xdd, 0x43,
+ 0x45, 0x43, 0x3d, 0x9c, 0x5d, 0x47, 0x4f, 0xae,
+ 0xad, 0x06, 0xc7, 0x4f, 0xff, 0xff, 0xe5, 0x7f,
+ 0x0c, 0x67, 0xcb, 0x4e, 0x17, 0xda, 0x2b, 0x6e,
+ 0x16, 0x23, 0x6d, 0xbb, 0xdc, 0x9d, 0x16, 0x8e,
+ 0x00, 0x22, 0xa1, 0x44, 0xff, 0xff, 0x77, 0xbc,
+ 0x7f, 0x55, 0x9d, 0xf6, 0x17, 0x3e, 0xc5, 0x2f,
+ 0x93, 0xa4, 0xe6, 0xe9, 0x51, 0x07, 0x18, 0x5d,
+ 0xc6, 0x8b, 0xd9, 0x86, 0x23, 0x10, 0xe2, 0x2e,
+ 0x9f, 0x0a, 0x6e, 0xa1, 0xa2, 0xa8, 0x9f, 0xf6,
+ 0xbd, 0xd6, 0x29, 0xba, 0x86, 0x89, 0xae, 0x4e,
+ 0xb3, 0xf6, 0x61, 0x84, 0xfe, 0x75, 0x8a, 0x6e,
+ 0xa1, 0xa2, 0xac, 0x9f, 0xf9, 0xda, 0xf7, 0x58,
+ 0xa6, 0xea, 0x1a, 0x24, 0x49, 0xf0, 0xa6, 0xea,
+ 0x1a, 0x2d, 0x29, 0xff, 0x6b, 0xdd, 0x62, 0x9b,
+ 0xa8, 0x68, 0x9f, 0x64, 0xeb, 0x3f, 0x66, 0x18,
+ 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d, 0xd4,
+ 0x34, 0x50, 0x93, 0xec, 0xfa, 0xa5, 0x13, 0xa7,
+ 0xc2, 0x9b, 0xa8, 0x68, 0xa3, 0xe7, 0xfc, 0x0a,
+ 0xd2, 0x82, 0xb5, 0x95, 0x3a, 0x7f, 0xfe, 0xbe,
+ 0x72, 0xbd, 0x5d, 0x80, 0xdf, 0xe9, 0x45, 0xfc,
+ 0xa9, 0xf3, 0x99, 0xaf, 0x72, 0xa3, 0xc6, 0xc9,
+ 0xf0, 0x61, 0xc4, 0x79, 0x0a, 0xbf, 0x99, 0x54,
+ 0x3f, 0x5e, 0xaf, 0x69, 0x9d, 0x25, 0x2b, 0xa4,
+ 0x3b, 0x2b, 0x27, 0x68, 0xef, 0x30, 0xc2, 0xfc,
+ 0x9f, 0x11, 0xa1, 0xcf, 0xe7, 0x58, 0xa6, 0xea,
+ 0x1a, 0x22, 0x29, 0xfa, 0xc5, 0x37, 0x50, 0xd1,
+ 0x15, 0xcf, 0xf7, 0x1d, 0xd6, 0x29, 0xba, 0x86,
+ 0x8a, 0xe2, 0x1c, 0x7f, 0x5a, 0x6b, 0x3d, 0x79,
+ 0xdc, 0x1d, 0x3f, 0xaf, 0xc3, 0xff, 0xfd, 0xd0,
+ 0xe9, 0x37, 0x40, 0x7a, 0xb4, 0x20, 0x9f, 0xfb,
+ 0x7c, 0xff, 0x06, 0x3b, 0xc8, 0xd9, 0xd3, 0xeb,
+ 0xf7, 0x23, 0x67, 0x4e, 0xc5, 0x3d, 0x93, 0xe9,
+ 0xc2, 0x1c, 0xf8, 0x53, 0x75, 0x0d, 0x14, 0xf4,
+ 0xfd, 0x74, 0xe0, 0x1a, 0xf3, 0xa3, 0x8d, 0x4c,
+ 0x99, 0x61, 0x2b, 0x66, 0x80, 0x61, 0x3f, 0xfb,
+ 0x5e, 0xee, 0x43, 0x7e, 0xa5, 0x17, 0xf3, 0xa1,
+ 0xc8, 0x90, 0xe5, 0x16, 0x73, 0xb9, 0xb3, 0xa7,
+ 0xca, 0xff, 0xfb, 0x79, 0xd3, 0xc9, 0xba, 0x86,
+ 0x8a, 0xce, 0x1a, 0x3d, 0x41, 0x29, 0x9f, 0xaa,
+ 0x62, 0x83, 0xe8, 0x74, 0xe5, 0xab, 0xc7, 0x4f,
+ 0xb1, 0xff, 0x50, 0x79, 0xd3, 0xbb, 0xda, 0x1d,
+ 0x3e, 0xb6, 0xaa, 0xef, 0xf3, 0xa4, 0xeb, 0x46,
+ 0xe0, 0x91, 0x64, 0xb7, 0x47, 0x00, 0xab, 0xa8,
+ 0xe4, 0xff, 0xce, 0xd7, 0xba, 0xc5, 0x37, 0x50,
+ 0xd1, 0x22, 0xcf, 0xe7, 0x58, 0xa6, 0xea, 0x1a,
+ 0x2c, 0x99, 0xfc, 0xeb, 0x14, 0xdd, 0x43, 0x45,
+ 0xb1, 0x3a, 0xe9, 0x67, 0x4f, 0x85, 0x37, 0x50,
+ 0xd1, 0x6d, 0xc9, 0xcf, 0x3c, 0xab, 0x1a, 0x9d,
+ 0x56, 0x7c, 0x74, 0xff, 0xb8, 0xde, 0x35, 0xb8,
+ 0x63, 0x36, 0x0b, 0xf9, 0xd3, 0xf2, 0x83, 0xf9,
+ 0xed, 0x87, 0x4f, 0x85, 0x37, 0x50, 0xd1, 0x78,
+ 0x4f, 0x63, 0x8a, 0xf2, 0x74, 0xff, 0xcb, 0xd5,
+ 0x95, 0xbf, 0x16, 0x18, 0xa1, 0xd3, 0xeb, 0x0f,
+ 0xdb, 0xd4, 0xe9, 0xf2, 0xf5, 0xef, 0x68, 0x74,
+ 0xec, 0x2f, 0xe7, 0x49, 0xdc, 0x6a, 0x74, 0x2d,
+ 0xc6, 0x8e, 0xd4, 0x9d, 0x65, 0xd5, 0x98, 0x64,
+ 0x93, 0xf4, 0x60, 0x29, 0xc1, 0x4c, 0xef, 0x5d,
+ 0x67, 0x4f, 0x85, 0x37, 0x50, 0xd1, 0x7a, 0x4f,
+ 0xf8, 0x37, 0x0f, 0x5e, 0x98, 0xf5, 0x47, 0x4f,
+ 0xad, 0x99, 0xde, 0x4e, 0x93, 0xb9, 0x45, 0x9d,
+ 0x8e, 0x75, 0x30, 0x6f, 0x40, 0x85, 0x64, 0x87,
+ 0xd5, 0x0b, 0x5b, 0x94, 0x58, 0x84, 0x9e, 0x8d,
+ 0x30, 0x56, 0xd8, 0x99, 0xf9, 0xd8, 0x42, 0x17,
+ 0xb8, 0xf2, 0x3e, 0x8d, 0x1e, 0x6e, 0xf2, 0x74,
+ 0xf5, 0xe7, 0x70, 0x74, 0xfe, 0xbf, 0x0f, 0xff,
+ 0xf7, 0x43, 0xa4, 0xdd, 0x01, 0xea, 0xd0, 0x82,
+ 0x7d, 0xec, 0x2d, 0x75, 0x1d, 0x3e, 0x14, 0xdd,
+ 0x43, 0x44, 0x47, 0x3f, 0xfd, 0x9e, 0xe9, 0x4b,
+ 0x60, 0x5b, 0x6e, 0x0a, 0xdd, 0x8e, 0x9f, 0xf3,
+ 0xd6, 0xa1, 0xbc, 0x63, 0xd8, 0x3a, 0x7f, 0xff,
+ 0x97, 0x3b, 0xec, 0x2e, 0x42, 0xf1, 0x9f, 0x66,
+ 0xfd, 0xf1, 0xd3, 0x54, 0xc2, 0xa6, 0xfb, 0xe2,
+ 0xa7, 0xfe, 0x7b, 0x93, 0x3e, 0x6b, 0x2b, 0x53,
+ 0xbf, 0x35, 0xff, 0x0b, 0xcf, 0xeb, 0xe3, 0x85,
+ 0xe7, 0x70, 0x74, 0xff, 0xfc, 0x8e, 0x1d, 0x0f,
+ 0x61, 0xc2, 0xb8, 0x0d, 0xfc, 0xe8, 0xe3, 0x15,
+ 0x83, 0x71, 0xad, 0x8a, 0x59, 0x65, 0x28, 0x61,
+ 0x5a, 0xc8, 0x9f, 0x6c, 0x25, 0x30, 0xbe, 0xd8,
+ 0xd2, 0x7c, 0x29, 0xba, 0x86, 0x88, 0xba, 0x7d,
+ 0x8f, 0xfa, 0x83, 0xcb, 0x67, 0xb2, 0x4e, 0xb3,
+ 0xe8, 0xd3, 0x08, 0x72, 0x65, 0x0f, 0x8c, 0x0a,
+ 0x7f, 0xe6, 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68,
+ 0x99, 0xa7, 0x56, 0xb4, 0x3a, 0x72, 0x79, 0x87,
+ 0x4d, 0xc4, 0xdd, 0xce, 0x9f, 0xb1, 0x75, 0x5f,
+ 0xed, 0x1d, 0x0d, 0xdc, 0xf3, 0x9a, 0x1f, 0x9f,
+ 0x26, 0xe7, 0xcd, 0x1d, 0x3f, 0xf3, 0x7f, 0xb1,
+ 0xe4, 0xf7, 0x38, 0xb4, 0x3a, 0x7f, 0xff, 0xbb,
+ 0xd0, 0x40, 0xbe, 0x73, 0xdf, 0x0c, 0xab, 0xc5,
+ 0x6a, 0x3a, 0x2d, 0x15, 0xf9, 0x47, 0x9f, 0xff,
+ 0x73, 0xe0, 0xaa, 0xe9, 0xed, 0xcb, 0xbe, 0xfb,
+ 0xe2, 0xa7, 0x93, 0x75, 0x0d, 0x16, 0x7c, 0xff,
+ 0xbd, 0x95, 0x7f, 0xb0, 0xb8, 0xa1, 0xd3, 0xff,
+ 0xde, 0x1c, 0xef, 0x0b, 0x6c, 0x17, 0x4b, 0x03,
+ 0xa7, 0x7d, 0xf7, 0xc5, 0x4f, 0xfb, 0x5f, 0x40,
+ 0xb4, 0xe6, 0xc4, 0xa7, 0x17, 0xf3, 0xfc, 0xb9,
+ 0xf7, 0x21, 0xba, 0xd1, 0xd3, 0xfd, 0xe0, 0xe7,
+ 0xaf, 0x3d, 0xe2, 0x87, 0x42, 0x27, 0xe2, 0x2b,
+ 0x4c, 0x2b, 0xc9, 0xf7, 0xed, 0xd8, 0x4a, 0x6c,
+ 0x71, 0x3f, 0xc3, 0xbf, 0x67, 0xca, 0x2a, 0x74,
+ 0xff, 0xff, 0xfd, 0x77, 0xfd, 0x2e, 0xc3, 0xa7,
+ 0x51, 0x05, 0xbc, 0xba, 0x81, 0x75, 0x32, 0xd8,
+ 0x74, 0xea, 0x2d, 0x47, 0x4e, 0xe2, 0xbc, 0x9d,
+ 0x0f, 0x46, 0x15, 0x21, 0x11, 0x81, 0xc9, 0xea,
+ 0xff, 0xed, 0x0e, 0x9f, 0x64, 0x16, 0xc4, 0xc9,
+ 0xff, 0x78, 0x5f, 0x63, 0x57, 0x7b, 0xc9, 0xa2,
+ 0x0d, 0x71, 0xa4, 0x9f, 0x6a, 0x79, 0x8a, 0x74,
+ 0xfc, 0xfc, 0x86, 0xd7, 0x83, 0xa5, 0x68, 0x7a,
+ 0x40, 0x4b, 0x3f, 0xff, 0xed, 0xfb, 0x17, 0x9c,
+ 0x2d, 0x85, 0x78, 0xb1, 0xf5, 0x5a, 0xc3, 0xa1,
+ 0xe9, 0x9f, 0x5c, 0x2b, 0x80, 0x96, 0x7e, 0x1b,
+ 0xe6, 0x99, 0x53, 0xa7, 0xff, 0xf7, 0x61, 0xbd,
+ 0x38, 0x75, 0x0d, 0xc5, 0x3d, 0x5e, 0x7d, 0xf1,
+ 0xd3, 0xff, 0xfd, 0x4a, 0x28, 0xe1, 0x5c, 0xcb,
+ 0xc5, 0x3a, 0xd3, 0x5f, 0x67, 0x4f, 0x66, 0xfc,
+ 0xd8, 0xe8, 0xf2, 0x22, 0x72, 0xcd, 0x33, 0x1b,
+ 0xa3, 0x45, 0xf9, 0x3f, 0xf3, 0xf1, 0xdb, 0xde,
+ 0xcc, 0x61, 0x58, 0x74, 0xff, 0xde, 0xb0, 0xbb,
+ 0xa7, 0x07, 0xd1, 0x87, 0x45, 0x68, 0x8a, 0xa2,
+ 0x34, 0xde, 0x68, 0xe9, 0xd8, 0xf5, 0x47, 0x4e,
+ 0x05, 0x43, 0xa3, 0x81, 0xe6, 0xb0, 0x5c, 0x07,
+ 0x61, 0x53, 0x76, 0xe4, 0x8e, 0xe1, 0x65, 0xae,
+ 0x33, 0xff, 0xff, 0x37, 0xae, 0x7c, 0xc7, 0x34,
+ 0xfd, 0x1e, 0xb9, 0xf5, 0x74, 0x4f, 0x54, 0x74,
+ 0xf7, 0xdb, 0x74, 0x3a, 0x7f, 0x9e, 0xcd, 0x7e,
+ 0x28, 0xbd, 0x0e, 0x85, 0x3d, 0xbd, 0x21, 0x9e,
+ 0xba, 0x78, 0x0e, 0x80, 0x3c, 0x0e, 0xc8, 0x27,
+ 0xba, 0xf7, 0xb4, 0x3a, 0x7f, 0xd8, 0xa7, 0xfe,
+ 0xae, 0xb7, 0xde, 0x0e, 0x85, 0x3e, 0x6b, 0x24,
+ 0x99, 0xae, 0xce, 0x93, 0x0e, 0x8a, 0xcd, 0x43,
+ 0x72, 0x31, 0x3f, 0xb7, 0x6b, 0x78, 0x2f, 0x27,
+ 0x4f, 0xff, 0xfb, 0x3e, 0xaf, 0x17, 0x5e, 0x04,
+ 0x57, 0x1f, 0xf5, 0x07, 0xe6, 0xce, 0x9d, 0xf7,
+ 0xdf, 0x15, 0x3d, 0xcf, 0x3a, 0x05, 0x38, 0xbf,
+ 0x9f, 0xf6, 0xe5, 0x3d, 0xbc, 0x29, 0xb9, 0x3a,
+ 0x15, 0x35, 0x6e, 0x49, 0xd0, 0xcb, 0xd0, 0x8e,
+ 0xc9, 0x8c, 0xff, 0xd6, 0x15, 0xe2, 0xc7, 0xd5,
+ 0x6b, 0x0e, 0x9f, 0x5e, 0x1e, 0xcc, 0x9d, 0x3e,
+ 0xae, 0x80, 0xac, 0x3a, 0x15, 0x12, 0x34, 0x43,
+ 0xec, 0x9e, 0x6f, 0xf2, 0x74, 0xfd, 0x53, 0x4f,
+ 0xe3, 0x46, 0xa3, 0xa7, 0xf7, 0x4c, 0xde, 0x33,
+ 0xec, 0x1d, 0x37, 0x84, 0xe8, 0x6e, 0xe7, 0xff,
+ 0xe3, 0x5c, 0x9a, 0xcf, 0xfd, 0xca, 0xf2, 0x2b,
+ 0x8f, 0x27, 0xb9, 0x3a, 0x7e, 0xcf, 0x75, 0x35,
+ 0x9f, 0x1d, 0x1c, 0x9f, 0xb6, 0x51, 0x64, 0xee,
+ 0x31, 0x9e, 0xd0, 0xdc, 0x07, 0x15, 0xa6, 0xa2,
+ 0x9e, 0x61, 0xad, 0x72, 0x84, 0xfa, 0x33, 0x57,
+ 0x0f, 0x8f, 0x1a, 0xb5, 0x1c, 0x30, 0x9a, 0x30,
+ 0xb3, 0x32, 0x9a, 0x35, 0x07, 0xf8, 0xc5, 0x42,
+ 0x11, 0x14, 0x8e, 0x7b, 0x10, 0xe0, 0xf8, 0xc3,
+ 0x8a, 0x12, 0xdd, 0x61, 0x57, 0x0e, 0x6c, 0x4a,
+ 0x73, 0x4f, 0xb4, 0x9f, 0xfc, 0xe6, 0x6b, 0xdd,
+ 0x62, 0x9b, 0xa8, 0x68, 0x9b, 0x27, 0xf3, 0xac,
+ 0x53, 0x75, 0x0d, 0x15, 0x6c, 0xfe, 0x7b, 0xfb,
+ 0xc0, 0x2b, 0xce, 0x9e, 0xbc, 0xee, 0x0e, 0x93,
+ 0x75, 0x67, 0xa6, 0x06, 0x73, 0xe1, 0x4d, 0xd4,
+ 0x34, 0x56, 0x93, 0xff, 0xc8, 0xa3, 0x7f, 0xeb,
+ 0x35, 0xeb, 0xe4, 0x3a, 0x7f, 0xf9, 0xf4, 0xb0,
+ 0x56, 0x6d, 0xe3, 0x0a, 0xc3, 0xa6, 0xc6, 0x15,
+ 0x12, 0xfa, 0x97, 0x3f, 0x95, 0xb7, 0x5c, 0x02,
+ 0xfe, 0x74, 0xfd, 0x55, 0xe7, 0xd6, 0xc3, 0xa7,
+ 0xfa, 0xdb, 0xc1, 0x7e, 0xad, 0xf4, 0x3a, 0x7f,
+ 0x3e, 0xf1, 0xa1, 0xff, 0x67, 0x49, 0xdc, 0x6a,
+ 0x7e, 0x36, 0x57, 0xe8, 0x63, 0xe4, 0xb7, 0x4d,
+ 0x80, 0xb7, 0x07, 0x93, 0xf9, 0xd6, 0x29, 0xba,
+ 0x86, 0x8b, 0x02, 0x7c, 0x29, 0xba, 0x86, 0x89,
+ 0xd6, 0x7f, 0xff, 0x65, 0x6a, 0xe6, 0xd8, 0xea,
+ 0x52, 0xf3, 0xea, 0x77, 0x51, 0xd3, 0xe7, 0x33,
+ 0x5e, 0xeb, 0x44, 0xab, 0x46, 0x13, 0xe1, 0x4d,
+ 0xd4, 0x34, 0x5b, 0x33, 0xfe, 0xfd, 0x68, 0xec,
+ 0xf9, 0x34, 0x4e, 0x93, 0xac, 0xfb, 0x74, 0xc2,
+ 0x79, 0x37, 0x50, 0xd1, 0x73, 0x49, 0x87, 0x4c,
+ 0xeb, 0x13, 0x77, 0xf1, 0x5c, 0xfe, 0x75, 0x8a,
+ 0x6e, 0xa1, 0xa2, 0xef, 0x9e, 0x77, 0x4e, 0x7f,
+ 0x3a, 0x15, 0xb7, 0x32, 0xba, 0xc5, 0x4d, 0x0c,
+ 0x6b, 0x52, 0xf4, 0xa7, 0xf1, 0x72, 0x64, 0x34,
+ 0x3f, 0x85, 0x6d, 0x18, 0x70, 0x59, 0xd4, 0xee,
+ 0x7f, 0xc1, 0xae, 0x5a, 0x51, 0x9a, 0xf3, 0xa7,
+ 0xf0, 0x55, 0x6d, 0xf8, 0x5e, 0x87, 0x4f, 0x85,
+ 0x37, 0x50, 0xd1, 0x2b, 0xcf, 0xf8, 0x37, 0xee,
+ 0x72, 0xb5, 0x5f, 0xc7, 0x4f, 0x77, 0xa2, 0xf3,
+ 0xa7, 0xff, 0xf7, 0xb1, 0xac, 0xd0, 0xff, 0x3f,
+ 0x68, 0x54, 0x9e, 0xa8, 0xe8, 0xe5, 0x10, 0x7a,
+ 0x43, 0x1c, 0xa3, 0x9b, 0x30, 0xc3, 0x9d, 0xaf,
+ 0x72, 0xa6, 0xed, 0x66, 0xf4, 0x8c, 0x5a, 0x76,
+ 0x17, 0x92, 0xa7, 0xff, 0x67, 0x7d, 0x85, 0x7f,
+ 0x86, 0xae, 0xff, 0x2a, 0x7f, 0x6a, 0x3b, 0x91,
+ 0x6e, 0x5c, 0xa7, 0xd1, 0x41, 0xc9, 0x39, 0x15,
+ 0x57, 0x32, 0x3b, 0x26, 0xd0, 0xae, 0x9f, 0xfc,
+ 0xe6, 0x6b, 0xdd, 0x62, 0x9b, 0xa8, 0x68, 0x98,
+ 0x67, 0xff, 0xeb, 0x77, 0x51, 0xdf, 0xdd, 0xd3,
+ 0x0f, 0xf9, 0x68, 0xf3, 0xa7, 0xfe, 0x6e, 0xae,
+ 0xb7, 0xf7, 0xb8, 0x05, 0x79, 0xd3, 0xf9, 0x76,
+ 0xac, 0x74, 0xd1, 0x3a, 0x7d, 0xa2, 0xfd, 0x61,
+ 0xd0, 0x07, 0xb1, 0xd9, 0x9c, 0xfc, 0xc5, 0xb0,
+ 0xc7, 0x11, 0xd3, 0xe5, 0xb0, 0xc7, 0x11, 0xd3,
+ 0xf6, 0x7d, 0x8a, 0x6d, 0x7c, 0x0f, 0x59, 0x85,
+ 0xd3, 0xff, 0xfe, 0x0b, 0xf9, 0xbf, 0x17, 0x9e,
+ 0x01, 0x75, 0x7a, 0xc2, 0xb7, 0xd0, 0xe9, 0xf9,
+ 0xb7, 0x5c, 0x02, 0xfe, 0x74, 0xff, 0xe5, 0xc7,
+ 0xea, 0xfb, 0xaf, 0x15, 0x77, 0xf1, 0xd0, 0xa7,
+ 0xff, 0xe3, 0x19, 0xfa, 0x9e, 0xe8, 0xcd, 0xc1,
+ 0xd3, 0xff, 0xfe, 0x1b, 0x6c, 0xa1, 0x8e, 0x1d,
+ 0x41, 0x73, 0xbe, 0xc2, 0xe2, 0x87, 0x4a, 0xeb,
+ 0x44, 0xe8, 0x97, 0xcf, 0xff, 0xb2, 0x17, 0x8c,
+ 0xfa, 0xeb, 0xc5, 0xb6, 0x5a, 0x1d, 0x39, 0x7f,
+ 0xea, 0x74, 0x59, 0xfa, 0x02, 0xb4, 0xf6, 0xf5,
+ 0xe6, 0xce, 0x93, 0xb8, 0xd5, 0x7d, 0xdc, 0xc2,
+ 0x85, 0x1e, 0x1a, 0x48, 0xcc, 0x3c, 0x02, 0x17,
+ 0xd8, 0x84, 0xe7, 0x64, 0x13, 0xe1, 0x4d, 0xd4,
+ 0x34, 0x55, 0xd3, 0xfc, 0xf7, 0x58, 0xa6, 0xea,
+ 0x1a, 0x23, 0xc9, 0x3a, 0xcf, 0xc7, 0x4c, 0x27,
+ 0xf3, 0xac, 0x53, 0x75, 0x0d, 0x16, 0x0c, 0xfe,
+ 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0xca, 0x9f, 0xce,
+ 0xb1, 0x4d, 0xd4, 0x34, 0x5a, 0x73, 0xc9, 0xba,
+ 0x86, 0x8b, 0x72, 0x7f, 0xe5, 0xb1, 0xb0, 0xe1,
+ 0x9b, 0xaf, 0xe3, 0xa0, 0x4f, 0xbe, 0x85, 0x73,
+ 0xfc, 0xa1, 0xdb, 0x16, 0x98, 0xf1, 0xd3, 0xfe,
+ 0xd7, 0xba, 0xc5, 0x37, 0x50, 0xd1, 0x43, 0xcf,
+ 0xfc, 0xcd, 0xe5, 0x79, 0xcf, 0x83, 0xcc, 0x3a,
+ 0x7f, 0xdd, 0x8f, 0xe3, 0xa1, 0x8b, 0xfc, 0xe9,
+ 0xfa, 0x9b, 0x5d, 0x31, 0xe3, 0xa7, 0xe0, 0xe3,
+ 0x6c, 0x56, 0x87, 0x4f, 0xff, 0xd7, 0xce, 0x57,
+ 0xab, 0xb0, 0x1b, 0xfd, 0x28, 0xbf, 0x95, 0x27,
+ 0x5a, 0x7b, 0xbe, 0x21, 0x61, 0xc6, 0xa3, 0x51,
+ 0x17, 0x07, 0xdd, 0x97, 0x71, 0x17, 0xcf, 0xe7,
+ 0x58, 0xa6, 0xea, 0x1a, 0x2f, 0x38, 0x56, 0x4e,
+ 0x03, 0xd1, 0x39, 0x52, 0xb9, 0xc4, 0xea, 0xe3,
+ 0x04, 0x12, 0x66, 0x1d, 0xe4, 0xec, 0x25, 0x43,
+ 0xb6, 0x7a, 0x9f, 0xce, 0xb1, 0x4d, 0xd4, 0x34,
+ 0x52, 0xd3, 0xf9, 0xd6, 0x29, 0xba, 0x86, 0x8b,
+ 0x0a, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x65,
+ 0xcf, 0x3b, 0xa3, 0x71, 0xdb, 0xb1, 0xd3, 0x9d,
+ 0xd5, 0x87, 0x4f, 0x23, 0x96, 0x88, 0x7a, 0x1d,
+ 0x99, 0x4f, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d,
+ 0xd4, 0x34, 0x51, 0x93, 0xf9, 0xca, 0xd9, 0x45,
+ 0x7f, 0x3a, 0x1e, 0x9d, 0xf0, 0x9d, 0xb0, 0xef,
+ 0x61, 0x17, 0x43, 0x8c, 0x29, 0x4f, 0xfc, 0xed,
+ 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x11, 0xcc, 0xff,
+ 0xe7, 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44,
+ 0xe5, 0x3f, 0x9d, 0x62, 0x9b, 0xa8, 0x68, 0xb3,
+ 0x27, 0xfe, 0x72, 0xfe, 0x2b, 0x8c, 0xed, 0x6f,
+ 0x3a, 0x7f, 0x3a, 0xc5, 0x37, 0x50, 0xd1, 0x6e,
+ 0xcf, 0xfe, 0x73, 0x35, 0xee, 0xb1, 0x4d, 0xd4,
+ 0x34, 0x52, 0x13, 0xff, 0x3b, 0x5e, 0xeb, 0x14,
+ 0xdd, 0x43, 0x44, 0xa5, 0x15, 0x27, 0xec, 0xd2,
+ 0x63, 0x14, 0xbf, 0x3b, 0x04, 0x4c, 0x1d, 0xb7,
+ 0xa9, 0x4f, 0xfb, 0x5e, 0xeb, 0x14, 0xdd, 0x43,
+ 0x44, 0xed, 0x3f, 0xfe, 0xf7, 0x3d, 0xb1, 0x5b,
+ 0xf7, 0x90, 0x50, 0xb4, 0x3a, 0x4e, 0x62, 0x27,
+ 0x75, 0x1a, 0x7f, 0xed, 0x66, 0x6d, 0x37, 0x2b,
+ 0xd5, 0xe7, 0x4f, 0xfc, 0x17, 0x9d, 0xaa, 0xe8,
+ 0x1b, 0x59, 0xd3, 0x71, 0x3b, 0x94, 0x42, 0xd1,
+ 0x0e, 0x18, 0x8e, 0x0e, 0x28, 0x56, 0xcf, 0x85,
+ 0x37, 0x50, 0xd1, 0x16, 0x4f, 0xfb, 0x5e, 0xeb,
+ 0x14, 0xdd, 0x43, 0x44, 0xbb, 0x3f, 0xff, 0x5f,
+ 0x39, 0x5e, 0xae, 0xc0, 0x6f, 0xf4, 0xa2, 0xfe,
+ 0x54, 0x9d, 0x68, 0xd4, 0x61, 0x87, 0x12, 0x34,
+ 0xff, 0xe7, 0x33, 0x5e, 0xeb, 0x14, 0xdd, 0x43,
+ 0x44, 0xc5, 0x3f, 0x58, 0xa6, 0xea, 0x1a, 0x2a,
+ 0x99, 0xff, 0xff, 0xc3, 0xb9, 0xad, 0xf7, 0x87,
+ 0x67, 0x68, 0x3e, 0xfb, 0x19, 0xf0, 0xbc, 0xe8,
+ 0x72, 0x2b, 0x74, 0xd6, 0x7f, 0xf3, 0x99, 0xaf,
+ 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x74, 0x9f, 0xde,
+ 0xd1, 0x57, 0xeb, 0x63, 0xa7, 0xcd, 0x2b, 0x4b,
+ 0x43, 0xa7, 0xef, 0xaf, 0xcd, 0xac, 0x0e, 0x9e,
+ 0xf6, 0x55, 0xde, 0x3d, 0x6a, 0x14, 0x4f, 0xfd,
+ 0xdd, 0x30, 0xb5, 0xbb, 0xb6, 0xbc, 0xc3, 0xa1,
+ 0x88, 0x82, 0xc9, 0xcc, 0xff, 0xb5, 0xee, 0xb1,
+ 0x4d, 0xd4, 0x34, 0x4e, 0xf3, 0xec, 0x77, 0xac,
+ 0xf1, 0x52, 0x77, 0x29, 0xcd, 0xdc, 0x61, 0x4c,
+ 0x23, 0xd4, 0x69, 0xff, 0xce, 0x66, 0xbd, 0xd6,
+ 0x29, 0xba, 0x86, 0x8a, 0x16, 0x7f, 0xf3, 0x99,
+ 0xaf, 0x75, 0x8a, 0x6e, 0xa1, 0xa2, 0x92, 0x9f,
+ 0xff, 0xd7, 0x47, 0x75, 0xb6, 0xb3, 0xac, 0xc6,
+ 0x57, 0x1d, 0xb0, 0xe8, 0xa9, 0x72, 0x5d, 0xe7,
+ 0x09, 0x0f, 0xf1, 0x22, 0x64, 0x7d, 0xbf, 0xa4,
+ 0xf6, 0xa5, 0xc4, 0xa5, 0x3f, 0x9d, 0x62, 0x9b,
+ 0xa8, 0x68, 0x89, 0x27, 0xff, 0x39, 0x9a, 0xf7,
+ 0x58, 0xa6, 0xea, 0x1a, 0x25, 0xe9, 0xf0, 0xfe,
+ 0xcf, 0x50, 0xe9, 0xdf, 0xae, 0x0e, 0x9f, 0xfb,
+ 0x5a, 0xa2, 0xb6, 0xdc, 0xad, 0x6d, 0x1d, 0x1e,
+ 0x44, 0x5b, 0x45, 0x02, 0x39, 0x3f, 0xde, 0xd0,
+ 0xef, 0x0d, 0x2f, 0x43, 0xa7, 0xc2, 0x9b, 0xa8,
+ 0x68, 0xa5, 0xe7, 0xff, 0x5b, 0xd7, 0xfa, 0x0a,
+ 0xd6, 0xff, 0x30, 0xe9, 0xf3, 0x7f, 0x98, 0xb4,
+ 0x3a, 0x7d, 0xad, 0xac, 0x68, 0x74, 0x97, 0x93,
+ 0xd1, 0x61, 0x54, 0x9c, 0xa9, 0xaf, 0x72, 0x61,
+ 0x67, 0x6d, 0x18, 0x62, 0x13, 0x73, 0xf9, 0xd6,
+ 0x29, 0xba, 0x86, 0x8a, 0x72, 0x7f, 0xde, 0x1d,
+ 0xa6, 0x6e, 0xc1, 0x0e, 0x9f, 0xf5, 0xe5, 0x46,
+ 0xdd, 0xf7, 0xdf, 0x15, 0x37, 0xbe, 0x3a, 0x6a,
+ 0x9d, 0xca, 0x24, 0x38, 0x8e, 0x9b, 0xcf, 0xe7,
+ 0xc2, 0x9b, 0xa8, 0x68, 0xaf, 0x27, 0xff, 0xeb,
+ 0xe7, 0x2b, 0xd5, 0xd8, 0x0d, 0xfe, 0x94, 0x5f,
+ 0xca, 0x93, 0xad, 0x11, 0xdc, 0x46, 0x13, 0xff,
+ 0x3b, 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0x8f,
+ 0x3b, 0xdf, 0xa9, 0xd3, 0x92, 0xd8, 0x53, 0x8b,
+ 0xc9, 0xf0, 0xa6, 0xea, 0x1a, 0x24, 0x89, 0xe7,
+ 0x6b, 0xdc, 0xa7, 0xb3, 0x65, 0x33, 0xff, 0x3b,
+ 0x5e, 0xeb, 0x14, 0xdd, 0x43, 0x44, 0x95, 0x3e,
+ 0x14, 0xdd, 0x43, 0x45, 0xe3, 0x3f, 0x76, 0x15,
+ 0xed, 0x74, 0x3a, 0x7d, 0x4a, 0x62, 0xd0, 0xe9,
+ 0xfe, 0x7b, 0xac, 0x53, 0x75, 0x0d, 0x12, 0x6c,
+ 0x9d, 0x68, 0xc6, 0xac, 0xc0, 0x4b, 0xf4, 0x9a,
+ 0x15, 0x7b, 0x7e, 0xa3, 0xb7, 0xca, 0x3b, 0xe5,
+ 0x5b, 0xd0, 0xcb, 0x6a, 0x1a, 0x4c, 0x2b, 0xcc,
+ 0x30, 0x70, 0x6f, 0xdc, 0x62, 0x50, 0xb1, 0xc7,
+ 0x36, 0xd5, 0x1d, 0x83, 0xe5, 0x05, 0x73, 0x28,
+ 0x6a, 0xed, 0xe8, 0x9f, 0x49, 0x4b, 0x49, 0x68,
+ 0x6f, 0x2b, 0x9e, 0xd3, 0xf4, 0xe9, 0x7f, 0x1e,
+ 0x3b, 0x66, 0xab, 0x05, 0x41, 0xa5, 0x2a, 0xb3,
+ 0x12, 0x76, 0x39, 0x9d, 0xfe, 0xda, 0xc7, 0x9b,
+ 0xf9, 0x62, 0xed, 0xcc, 0x2c, 0x42, 0x90, 0xcd,
+ 0x4a, 0x4e, 0x4e, 0x2b, 0xc1, 0xee, 0xe9, 0xa4,
+ 0xcd, 0xa5, 0x31, 0x7d, 0x29, 0x47, 0x8a, 0x3e,
+ 0x7e, 0xb3, 0xb2, 0xcd, 0xf3, 0xec, 0x50,
};
-static const unsigned kPreloadedHSTSBits = 100424;
+static const unsigned kPreloadedHSTSBits = 103990;
-static const unsigned kHSTSRootPosition = 99844;
+static const unsigned kHSTSRootPosition = 103406;
#endif // NET_HTTP_TRANSPORT_SECURITY_STATE_STATIC_H_
diff --git a/net/http/transport_security_state_static.json b/net/http/transport_security_state_static.json
index cc830c0..a8a5bf1 100644
--- a/net/http/transport_security_state_static.json
+++ b/net/http/transport_security_state_static.json
@@ -1564,7 +1564,55 @@
{ "name": "souvik.me", "include_subdomains": true, "mode": "force-https" },
{ "name": "topodin.com", "include_subdomains": true, "mode": "force-https" },
{ "name": "wpletter.de", "include_subdomains": true, "mode": "force-https" },
- { "name": "yahvehyireh.com", "include_subdomains": true, "mode": "force-https" }
+ { "name": "yahvehyireh.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "anadoluefessporkulubu.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "ankarakart.com.tr", "include_subdomains": true, "mode": "force-https" },
+ { "name": "bgneuesheim.de", "include_subdomains": true, "mode": "force-https" },
+ { "name": "bhatia.at", "include_subdomains": true, "mode": "force-https" },
+ { "name": "bitmex.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "blockchain.info", "include_subdomains": true, "mode": "force-https" },
+ { "name": "blubbablasen.de", "include_subdomains": true, "mode": "force-https" },
+ { "name": "brage.info", "include_subdomains": true, "mode": "force-https" },
+ { "name": "chahub.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "cor-ser.es", "include_subdomains": true, "mode": "force-https" },
+ { "name": "darchoods.net", "include_subdomains": true, "mode": "force-https" },
+ { "name": "electronic-ignition-system.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "fabhub.io", "include_subdomains": true, "mode": "force-https" },
+ { "name": "fant.dk", "include_subdomains": true, "mode": "force-https" },
+ { "name": "henriknoerr.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "imaginary.ca", "include_subdomains": true, "mode": "force-https" },
+ { "name": "inb4.us", "include_subdomains": true, "mode": "force-https" },
+ { "name": "kosho.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "lighting-centres.co.uk", "include_subdomains": true, "mode": "force-https" },
+ { "name": "marshut.net", "include_subdomains": true, "mode": "force-https" },
+ { "name": "meamod.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "movelaria.com.br", "include_subdomains": true, "mode": "force-https" },
+ { "name": "myni.io", "include_subdomains": true, "mode": "force-https" },
+ { "name": "nameid.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "nginxnudes.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "nouvelle-vague-saint-cast.fr", "include_subdomains": true, "mode": "force-https" },
+ { "name": "opendesk.cc", "include_subdomains": true, "mode": "force-https" },
+ { "name": "pestici.de", "include_subdomains": true, "mode": "force-https" },
+ { "name": "petrolplus.ru", "include_subdomains": true, "mode": "force-https" },
+ { "name": "proximato.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "savetheinternet.eu", "include_subdomains": true, "mode": "force-https" },
+ { "name": "shortdiary.me", "include_subdomains": true, "mode": "force-https" },
+ { "name": "simplia.cz", "include_subdomains": true, "mode": "force-https" },
+ { "name": "tadigitalstore.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "tapka.cz", "include_subdomains": true, "mode": "force-https" },
+ { "name": "tegelsensanitaironline.nl", "include_subdomains": true, "mode": "force-https" },
+ { "name": "typingrevolution.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "unison.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "uptrends.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "visionless.me", "include_subdomains": true, "mode": "force-https" },
+ { "name": "vrobert.fr", "include_subdomains": true, "mode": "force-https" },
+ { "name": "wbg-vs.de", "include_subdomains": true, "mode": "force-https" },
+ { "name": "hstspreload.appspot.com", "include_subdomains": true, "mode": "force-https" },
+ { "name": "hg.python.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "doc.python.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "console.python.org", "include_subdomains": true, "mode": "force-https" },
+ { "name": "mutantmonkey.in", "include_subdomains": true, "mode": "force-https" },
+ { "name": "mutantmonkey.info", "include_subdomains": true, "mode": "force-https" }
],
// |ReportUMAOnPinFailure| uses these to report which domain was associated
diff --git a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
index 2d3e7de..7707953 100644
--- a/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
+++ b/sandbox/linux/seccomp-bpf-helpers/syscall_parameters_restrictions.cc
@@ -40,6 +40,16 @@
#define F_DUPFD_CLOEXEC (F_LINUX_SPECIFIC_BASE + 6)
#endif
+// https://android.googlesource.com/platform/bionic/+/lollipop-release/libc/private/bionic_prctl.h
+#if !defined(PR_SET_VMA)
+#define PR_SET_VMA 0x53564d41
+#endif
+
+// https://android.googlesource.com/platform/system/core/+/lollipop-release/libcutils/sched_policy.c
+#if !defined(PR_SET_TIMERSLACK_PID)
+#define PR_SET_TIMERSLACK_PID 41
+#endif
+
#endif // defined(OS_ANDROID)
#if defined(__arm__) && !defined(MAP_STACK)
@@ -129,6 +139,9 @@
return Switch(option)
.CASES((PR_GET_NAME, PR_SET_NAME, PR_GET_DUMPABLE, PR_SET_DUMPABLE),
Allow())
+#if defined(OS_ANDROID)
+ .CASES((PR_SET_VMA, PR_SET_TIMERSLACK_PID), Allow())
+#endif
.Default(CrashSIGSYSPrctl());
}
diff --git a/testing/buildbot/chromium.win.json b/testing/buildbot/chromium.win.json
index 0910b9f..f1cab46 100644
--- a/testing/buildbot/chromium.win.json
+++ b/testing/buildbot/chromium.win.json
@@ -210,6 +210,7 @@
"Win7 Tests (1)": {
"gtest_tests": [
"app_installer_unittests",
+ "app_list_unittests",
"accessibility_unittests",
{
"test": "ash_unittests",
@@ -238,6 +239,7 @@
"cc_unittests",
"chromedriver_unittests",
"chrome_elf_unittests",
+ "components_browsertests",
"components_unittests",
"compositor_unittests",
{
@@ -254,6 +256,7 @@
},
"courgette_unittests",
"crypto_unittests",
+ "device_unittests",
"events_unittests",
"extensions_unittests",
"gcm_unit_tests",
@@ -270,7 +273,9 @@
},
"ipc_tests",
"jingle_unittests",
+ "keyboard_unittests",
"media_unittests",
+ "message_center_unittests",
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
@@ -339,15 +344,25 @@
"shards": 6
}
},
+ "app_installer_unittests",
"app_list_unittests",
"app_shell_browsertests",
"app_shell_unittests",
+ {
+ "test": "ash_unittests",
+ "swarming": {
+ "can_use_on_swarming_builders": true
+ }
+ },
+ "aura_unittests",
"cacheinvalidation_unittests",
"cast_unittests",
"cc_unittests",
"chromedriver_unittests",
"chrome_elf_unittests",
+ "components_browsertests",
"components_unittests",
+ "compositor_unittests",
{
"test": "content_browsertests",
"swarming": {
@@ -362,6 +377,8 @@
},
"courgette_unittests",
"crypto_unittests",
+ "device_unittests",
+ "events_unittests",
"extensions_unittests",
"gcm_unit_tests",
"gfx_unittests",
@@ -377,7 +394,9 @@
},
"ipc_tests",
"jingle_unittests",
+ "keyboard_unittests",
"media_unittests",
+ "message_center_unittests",
"mojo_common_unittests",
"mojo_public_bindings_unittests",
"mojo_public_environment_unittests",
@@ -395,6 +414,7 @@
"remoting_unittests",
"sbox_unittests",
"sbox_integration_tests",
+ "sbox_validation_tests",
{
"test": "sync_integration_tests",
"swarming": {
@@ -420,6 +440,10 @@
"script": "telemetry_unittests.py"
},
{
+ "name": "telemetry_perf_unittests",
+ "script": "telemetry_perf_unittests.py"
+ },
+ {
"name": "nacl_integration",
"script": "nacl_integration.py"
}
diff --git a/tools/clang/scripts/update.py b/tools/clang/scripts/update.py
index 041087f..172f969 100755
--- a/tools/clang/scripts/update.py
+++ b/tools/clang/scripts/update.py
@@ -216,11 +216,6 @@
'-DLLVM_ENABLE_ASSERTIONS=ON', LLVM_DIR])
RunCommand(GetVSVersion().SetupScript('x86') + ['&&', 'ninja', 'compiler-rt'])
- asan_rt_bin_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'bin')
- asan_rt_bin_dst_dir = os.path.join(LLVM_BUILD_DIR, 'bin')
- CopyDirectoryContents(asan_rt_bin_src_dir, asan_rt_bin_dst_dir,
- r'^.*-i386\.dll$')
-
# TODO(hans): Make this (and the .gypi file) version number independent.
asan_rt_lib_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'lib', 'clang',
'3.6.0', 'lib', 'windows')
@@ -229,6 +224,15 @@
CopyDirectoryContents(asan_rt_lib_src_dir, asan_rt_lib_dst_dir,
r'^.*-i386\.lib$')
+ # TODO(hans): Remove when LLVM_WIN_REVISION is updated.
+ # Old versions of compiler-rt will leave the asan dll in bin/
+ asan_rt_bin_src_dir = os.path.join(COMPILER_RT_BUILD_DIR, 'bin')
+ CopyDirectoryContents(asan_rt_bin_src_dir, asan_rt_lib_dst_dir,
+ r'^.*-i386\.dll$')
+
+ CopyDirectoryContents(asan_rt_lib_src_dir, asan_rt_lib_dst_dir,
+ r'^.*-i386\.dll$')
+
CopyFile(os.path.join(asan_rt_lib_src_dir, '..', '..', 'asan_blacklist.txt'),
os.path.join(asan_rt_lib_dst_dir, '..', '..'))
diff --git a/tools/gritsettings/resource_ids b/tools/gritsettings/resource_ids
index f80cdd0..42cc710 100644
--- a/tools/gritsettings/resource_ids
+++ b/tools/gritsettings/resource_ids
@@ -234,6 +234,9 @@
"third_party/WebKit/public/blink_resources.grd": {
"includes": [30500],
},
+ "chrome/browser/devtools/device/webrtc/resources.grd": {
+ "includes": [30800],
+ },
# These files don't need to reserve resource ids, but are listed here so that
# translation scripts know of their existence.
diff --git a/tools/valgrind/memcheck/suppressions.txt b/tools/valgrind/memcheck/suppressions.txt
index 299cab2..3f1ea1b 100644
--- a/tools/valgrind/memcheck/suppressions.txt
+++ b/tools/valgrind/memcheck/suppressions.txt
@@ -2412,6 +2412,16 @@
fun:_ZN18chrome_browser_net27HttpServerPropertiesManager24UpdatePrefsFromCacheOnIOEv
}
{
+ bug_290407
+ Memcheck:Leak
+ fun:calloc
+ fun:_swrast_new_soft_renderbuffer
+ fun:_mesa_BindRenderbufferEXT
+ fun:shared_dispatch_stub_939
+ fun:_ZN3gfx9GLApiBase23glBindRenderbufferEXTFnEjj
+ fun:_ZN3gpu5gles216GLES2DecoderImpl18DoBindRenderbufferEjj
+}
+{
bug_293024_b
Memcheck:Leak
fun:malloc
@@ -3377,8 +3387,6 @@
fun:_ZN5blink19ImageFrameGenerator14decodeAndScaleERK11SkImageInfomPvm
fun:_ZN5blink22DecodingImageGenerator11onGetPixelsERK11SkImageInfoPvmPjPi
fun:_ZN16SkImageGenerator9getPixelsERK11SkImageInfoPvmPjPi
- ...
- fun:_ZNK6SkDraw10drawBitmapERK8SkBitmapRK8SkMatrixRK7SkPaint
}
{
bug_424056a
diff --git a/tools/valgrind/memcheck/suppressions_linux.txt b/tools/valgrind/memcheck/suppressions_linux.txt
index dae3936..0e75ee1 100644
--- a/tools/valgrind/memcheck/suppressions_linux.txt
+++ b/tools/valgrind/memcheck/suppressions_linux.txt
@@ -28,7 +28,7 @@
fun:_ZN7content14WebPreferencesaSERKS0_
fun:_ZN7content14RenderViewImpl22OnUpdateWebPreferencesERKNS_14WebPreferencesE
fun:_ZN7content14RenderViewImpl20SetWebkitPreferencesERKNS_14WebPreferencesE
- fun:_ZThn784_N7content14RenderViewImpl20SetWebkitPreferencesERKNS_14WebPreferencesE
+ fun:_ZThn*_N7content14RenderViewImpl20SetWebkitPreferencesERKNS_14WebPreferencesE
fun:_ZN7content16WebKitTestRunner5ResetEv
}
{
diff --git a/ui/gl/gl_surface_ozone.cc b/ui/gl/gl_surface_ozone.cc
index 333290f..67ab131 100644
--- a/ui/gl/gl_surface_ozone.cc
+++ b/ui/gl/gl_surface_ozone.cc
@@ -123,7 +123,7 @@
}
virtual bool SwapBuffers() override {
// TODO: this should be replaced by a fence when supported by the driver.
- glFinish();
+ glFlush();
return ozone_surface_->OnSwapBuffers();
}
virtual bool ScheduleOverlayPlane(int z_order,
diff --git a/ui/gl/gl_switches.cc b/ui/gl/gl_switches.cc
index 334a297..936daf6 100644
--- a/ui/gl/gl_switches.cc
+++ b/ui/gl/gl_switches.cc
@@ -58,6 +58,10 @@
// On Windows only: use the WARP software rasterizer in the GPU process.
const char kUseWarp[] = "use-warp";
+// Include ANGLE's intermediate representation (AST) output in shader
+// compilation info logs.
+const char kGLShaderIntermOutput[] = "gl-shader-interm-output";
+
// Disables GL drawing operations which produce pixel output. With this
// the GL output will not be correct but tests will run faster.
const char kDisableGLDrawingForTests[] = "disable-gl-drawing-for-tests";
@@ -77,7 +81,8 @@
kGpuNoContextLost,
kDisableGLDrawingForTests,
kOverrideUseGLWithOSMesaForTests,
- kUseWarp
+ kUseWarp,
+ kGLShaderIntermOutput
};
const int kGLSwitchesCopiedFromGpuProcessHostNumSwitches =
arraysize(kGLSwitchesCopiedFromGpuProcessHost);
diff --git a/ui/gl/gl_switches.h b/ui/gl/gl_switches.h
index ce27df0..115ee36 100644
--- a/ui/gl/gl_switches.h
+++ b/ui/gl/gl_switches.h
@@ -37,6 +37,8 @@
GL_EXPORT extern const char kUseGpuInTests[];
GL_EXPORT extern const char kUseWarp[];
+GL_EXPORT extern const char kGLShaderIntermOutput[];
+
// These flags are used by the test harness code, not passed in by users.
GL_EXPORT extern const char kDisableGLDrawingForTests[];
GL_EXPORT extern const char kOverrideUseGLWithOSMesaForTests[];
diff --git a/url/url_util.cc b/url/url_util.cc
index 8ab889f..008a5e4 100644
--- a/url/url_util.cc
+++ b/url/url_util.cc
@@ -238,15 +238,16 @@
Parsed base_parsed_authority;
ParseStandardURL(base_spec, base_spec_len, &base_parsed_authority);
if (base_parsed_authority.host.is_nonempty()) {
+ RawCanonOutputT<char> temporary_output;
bool did_resolve_succeed =
ResolveRelativeURL(base_spec, base_parsed_authority, false, relative,
- relative_component, charset_converter, output,
- output_parsed);
+ relative_component, charset_converter,
+ &temporary_output, output_parsed);
// The output_parsed is incorrect at this point (because it was built
// based on base_parsed_authority instead of base_parsed) and needs to be
// re-created.
- ParsePathURL(output->data(), output->length(), true,
- output_parsed);
+ DoCanonicalize(temporary_output.data(), temporary_output.length(), true,
+ charset_converter, output, output_parsed);
return did_resolve_succeed;
}
} else if (is_relative) {
diff --git a/url/url_util_unittest.cc b/url/url_util_unittest.cc
index aba44e4..17c1b0f 100644
--- a/url/url_util_unittest.cc
+++ b/url/url_util_unittest.cc
@@ -295,4 +295,25 @@
}
}
+TEST(URLUtilTest, TestNoRefComponent) {
+ // The hash-mark must be ignored when mailto: scheme is
+ // parsed, even if the url has a base and relative part.
+ const char* base = "mailto://to/";
+ const char* rel = "any#body";
+
+ Parsed base_parsed;
+ ParsePathURL(base, strlen(base), false, &base_parsed);
+
+ std::string resolved;
+ StdStringCanonOutput output(&resolved);
+ Parsed resolved_parsed;
+
+ bool valid = ResolveRelative(base, strlen(base),
+ base_parsed, rel,
+ strlen(rel), NULL, &output,
+ &resolved_parsed);
+ EXPECT_TRUE(valid);
+ EXPECT_FALSE(resolved_parsed.ref.is_valid());
+}
+
} // namespace url