diff --git a/Cargo.lock b/Cargo.lock index 086c75136f6..74cddc2ab96 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -916,8 +916,6 @@ version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fe6d2e5af09e8c8ad56c969f2157a3d4238cebc7c55f0a517728c38f7b200f81" dependencies = [ - "serde", - "termcolor", "unicode-width 0.2.0", ] @@ -1854,7 +1852,7 @@ dependencies = [ [[package]] name = "error-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "error-support-macros", "lazy_static", @@ -1866,7 +1864,7 @@ dependencies = [ [[package]] name = "error-support-macros" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "proc-macro2", "quote", @@ -1983,7 +1981,7 @@ dependencies = [ [[package]] name = "firefox-versioning" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "serde_json", "thiserror 1.999.999", @@ -3320,7 +3318,7 @@ dependencies = [ [[package]] name = "interrupt-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "lazy_static", "parking_lot", @@ -3452,6 +3450,7 @@ dependencies = [ "firefox-on-glean", "log", "mozbuild", + "nserror", "nsstring", "once_cell", "serde", @@ -4587,11 +4586,12 @@ checksum = "a2983372caf4480544083767bf2d27defafe32af49ab4df3a0b7fc90793a3664" [[package]] name = "naga" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "arrayvec", "bit-set", "bitflags 2.9.0", + "cfg-if", "cfg_aliases", "codespan-reporting", "half 2.5.0", @@ -4604,7 +4604,7 @@ dependencies = [ "rustc-hash 1.999.999", "serde", "spirv", - "strum 0.26.999", + "strum 0.27.1", "thiserror 2.0.9", "unicode-ident", ] @@ -5035,7 +5035,7 @@ checksum = "d01a5bd0424d00070b0098dd17ebca6f961a959dead1dbcbbbc1d1cd8d3deeba" [[package]] name = "payload-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "serde", "serde_derive", @@ -5474,9 +5474,9 @@ dependencies = [ [[package]] name = "raw-window-handle" -version = "0.6.0" +version = "0.6.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "42a9830a0e1b9fb145ebb365b8bc4ccd75f290f98c0247deafbbe2c75cefb544" +checksum = "20675572f6f24e9e76ef639bc5552774ed45f1c30e2951e1e99c59888861c539" [[package]] name = "rayon" @@ -5538,7 +5538,7 @@ checksum = "dbb5fb1acd8a1a18b3dd5be62d25485eb770e05afb408a9627d14d451bae12da" [[package]] name = "relevancy" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "base64 0.21.999", @@ -5563,7 +5563,7 @@ dependencies = [ [[package]] name = "remote_settings" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "camino", @@ -5692,13 +5692,6 @@ dependencies = [ "serde", ] -[[package]] -name = "ron" -version = "0.9.999" -dependencies = [ - "ron 0.10.1", -] - [[package]] name = "ron" version = "0.10.1" @@ -5911,7 +5904,7 @@ dependencies = [ [[package]] name = "search" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "error-support", "firefox-versioning", @@ -6202,7 +6195,7 @@ dependencies = [ [[package]] name = "sql-support" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "interrupt-support", "lazy_static", @@ -6408,7 +6401,7 @@ checksum = "81cdd64d312baedb58e21336b31bc043b77e01cc99033ce76ef539f78e965ebc" [[package]] name = "suggest" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "chrono", @@ -6460,7 +6453,7 @@ dependencies = [ [[package]] name = "sync-guid" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "base64 0.21.999", "rand", @@ -6471,7 +6464,7 @@ dependencies = [ [[package]] name = "sync15" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "error-support", @@ -6511,7 +6504,7 @@ dependencies = [ [[package]] name = "tabs" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "error-support", @@ -6855,7 +6848,7 @@ checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" [[package]] name = "types" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "rusqlite 0.33.0", "serde", @@ -7237,7 +7230,7 @@ checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" [[package]] name = "viaduct" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "ffi-support", "log", @@ -7407,7 +7400,7 @@ dependencies = [ [[package]] name = "webext-storage" version = "0.1.0" -source = "git+https://github.com/mozilla/application-services?rev=41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8#41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" +source = "git+https://github.com/mozilla/application-services?rev=280db3a3a06a8f517151ff0b84b5ce67fcc7afd6#280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" dependencies = [ "anyhow", "error-support", @@ -7452,7 +7445,7 @@ dependencies = [ "peek-poke", "plane-split", "rayon", - "ron 0.10.1", + "ron", "serde", "smallvec", "svg_fmt", @@ -7546,7 +7539,7 @@ dependencies = [ [[package]] name = "wgpu-core" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "arrayvec", "bit-set", @@ -7562,7 +7555,7 @@ dependencies = [ "once_cell", "parking_lot", "profiling", - "ron 0.9.999", + "ron", "rustc-hash 1.999.999", "serde", "smallvec", @@ -7576,7 +7569,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-apple" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "wgpu-hal", ] @@ -7584,7 +7577,7 @@ dependencies = [ [[package]] name = "wgpu-core-deps-windows-linux-android" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "wgpu-hal", ] @@ -7592,7 +7585,7 @@ dependencies = [ [[package]] name = "wgpu-hal" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "android_system_properties", "arrayvec", @@ -7628,7 +7621,7 @@ dependencies = [ [[package]] name = "wgpu-types" version = "25.0.0" -source = "git+https://github.com/gfx-rs/wgpu?rev=f1c496523ff0aa10c162fd01ad606960e925a5a4#f1c496523ff0aa10c162fd01ad606960e925a5a4" +source = "git+https://github.com/gfx-rs/wgpu?rev=35f131ff10153e48b790e1f156c864734063ce71#35f131ff10153e48b790e1f156c864734063ce71" dependencies = [ "bitflags 2.9.0", "bytemuck", diff --git a/Cargo.toml b/Cargo.toml index 2043c9181fb..8c6b99bc629 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -214,9 +214,6 @@ half = { path = "build/rust/half" } # Upgrade `rusqlite` 0.31 to 0.33. rusqlite = { path = "build/rust/rusqlite" } -# Patch `ron` 0.9.* to 0.10. -ron = { path = "build/rust/ron" } - # Patch `strum` 0.26.* to 0.27. strum = { path = "build/rust/strum" } @@ -263,14 +260,14 @@ malloc_size_of_derive = { path = "xpcom/rust/malloc_size_of_derive" } objc = { git = "https://github.com/glandium/rust-objc", rev = "4de89f5aa9851ceca4d40e7ac1e2759410c04324" } # application-services overrides to make updating them all simpler. -interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -relevancy = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -search = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -sql-support = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -suggest = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -sync15 = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -tabs = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -viaduct = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } -webext-storage = { git = "https://github.com/mozilla/application-services", rev = "41e0b8f5679977ff2f551eb60fa9b3288ce1f2d8" } +interrupt-support = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +relevancy = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +search = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +sql-support = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +suggest = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +sync15 = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +tabs = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +viaduct = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } +webext-storage = { git = "https://github.com/mozilla/application-services", rev = "280db3a3a06a8f517151ff0b84b5ce67fcc7afd6" } allocator-api2 = { path = "third_party/rust/allocator-api2" } diff --git a/accessible/android/SessionAccessibility.cpp b/accessible/android/SessionAccessibility.cpp index ea7713537a0..a57ae04d36e 100644 --- a/accessible/android/SessionAccessibility.cpp +++ b/accessible/android/SessionAccessibility.cpp @@ -63,9 +63,7 @@ class Settings final SessionAccessibility::SessionAccessibility( jni::NativeWeakPtr aWindow, java::SessionAccessibility::NativeProvider::Param aSessionAccessibility) - : mWindow(aWindow), mSessionAccessibility(aSessionAccessibility) { - SetAttached(true, nullptr); -} + : mWindow(aWindow), mSessionAccessibility(aSessionAccessibility) {} void SessionAccessibility::SetAttached(bool aAttached, already_AddRefed aRunnable) { diff --git a/accessible/base/ARIAMap.cpp b/accessible/base/ARIAMap.cpp index b097f28748a..8bdb102002e 100644 --- a/accessible/base/ARIAMap.cpp +++ b/accessible/base/ARIAMap.cpp @@ -1612,6 +1612,22 @@ bool aria::IsValidARIAHidden(nsIContent* aContent) { !ShouldIgnoreARIAHidden(aContent); } +bool aria::IsValidARIAHidden(DocAccessible* aDocAcc) { + nsCOMPtr docContent = aDocAcc->GetContent(); + // First, check if our Doc Accessible has aria-hidden set on its content + bool isValid = IsValidARIAHidden(docContent); + + // If our Doc Accessible was created using an element other than the + // root element, we need to verify the validity of any aria-hidden on + // the root element as well. + auto* rootElement = aDocAcc->DocumentNode()->GetRootElement(); + if (docContent != rootElement) { + isValid |= IsValidARIAHidden(rootElement); + } + + return isValid; +} + bool aria::ShouldIgnoreARIAHidden(nsIContent* aContent) { if (!aContent) { return false; diff --git a/accessible/base/ARIAMap.h b/accessible/base/ARIAMap.h index e0e04cca07a..674af21b104 100644 --- a/accessible/base/ARIAMap.h +++ b/accessible/base/ARIAMap.h @@ -10,6 +10,7 @@ #include "ARIAStateMap.h" #include "mozilla/a11y/AccTypes.h" +#include "mozilla/a11y/DocAccessible.h" #include "mozilla/a11y/Role.h" #include "nsAtom.h" @@ -310,6 +311,14 @@ uint8_t AttrCharacteristicsFor(nsAtom* aAtom); */ bool IsValidARIAHidden(nsIContent* aContent); +/** + * This function calls into the function above. It verifies the validity + * of any `aria-hidden` specified on the given Doc Accessible's + * mContent, as well as on the root element of mContent's owner + * doc. + */ +bool IsValidARIAHidden(DocAccessible* aDocAcc); + /** * Return true if the element should render its subtree * regardless of the presence of aria-hidden. diff --git a/accessible/base/EventQueue.cpp b/accessible/base/EventQueue.cpp index cbb0b81ad9a..2bcbd0aab61 100644 --- a/accessible/base/EventQueue.cpp +++ b/accessible/base/EventQueue.cpp @@ -38,6 +38,26 @@ bool EventQueue::PushEvent(AccEvent* aEvent) { return true; } + if (aEvent->mEventRule == AccEvent::eRemoveDupes && !mEvents.IsEmpty()) { + // Check for duplicate events. If aEvent is identical to an older event, do + // not append aEvent. We do this here rather than in CoalesceEvents because + // CoalesceEvents never *removes* events; it only sets them to eDoNotEmit. + // If there are many duplicate events and we appended them, this would + // result in a massive event queue and coalescing would become increasingly + // slow with each event queued. Doing it here, we avoid appending a + // duplicate event in the first place. + uint32_t last = mEvents.Length() - 1; + for (uint32_t index = last; index <= last; --index) { + AccEvent* checkEvent = mEvents[index]; + if (checkEvent->mEventType == aEvent->mEventType && + checkEvent->mEventRule == aEvent->mEventRule && + checkEvent->mAccessible == aEvent->mAccessible) { + aEvent->mEventRule = AccEvent::eDoNotEmit; + return true; + } + } + } + // XXX(Bug 1631371) Check if this should use a fallible operation as it // pretended earlier, or change the return type to void. mEvents.AppendElement(aEvent); @@ -45,10 +65,10 @@ bool EventQueue::PushEvent(AccEvent* aEvent) { // Filter events. CoalesceEvents(); - if (aEvent->mEventRule != AccEvent::eDoNotEmit && - (aEvent->mEventType == nsIAccessibleEvent::EVENT_NAME_CHANGE || - aEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_REMOVED || - aEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_INSERTED)) { + if (aEvent->mEventType == nsIAccessibleEvent::EVENT_NAME_CHANGE || + aEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_REMOVED || + aEvent->mEventType == nsIAccessibleEvent::EVENT_TEXT_INSERTED) { + MOZ_ASSERT(aEvent->mEventRule != AccEvent::eDoNotEmit); PushNameOrDescriptionChange(aEvent); } return true; @@ -258,23 +278,9 @@ void EventQueue::CoalesceEvents() { break; // eCoalesceTextSelChange } - case AccEvent::eRemoveDupes: { - // Check for repeat events, coalesce newly appended event by more older - // event. - for (uint32_t index = tail - 1; index < tail; index--) { - AccEvent* accEvent = mEvents[index]; - if (accEvent->mEventType == tailEvent->mEventType && - accEvent->mEventRule == tailEvent->mEventRule && - accEvent->mAccessible == tailEvent->mAccessible) { - tailEvent->mEventRule = AccEvent::eDoNotEmit; - return; - } - } - break; // case eRemoveDupes - } - default: - break; // case eAllowDupes, eDoNotEmit + // eRemoveDupes is handled in PushEvent. + break; // case eRemoveDupes, eAllowDupes, eDoNotEmit } // switch } diff --git a/accessible/base/TreeWalker.cpp b/accessible/base/TreeWalker.cpp index de6dd144b51..0d84680c78e 100644 --- a/accessible/base/TreeWalker.cpp +++ b/accessible/base/TreeWalker.cpp @@ -5,6 +5,7 @@ #include "TreeWalker.h" +#include "ARIAMap.h" #include "nsAccessibilityService.h" #include "DocAccessible.h" @@ -323,7 +324,8 @@ LocalAccessible* TreeWalker::AccessibleFor(nsIContent* aNode, uint32_t aFlags, } // Create an accessible if allowed. - if (!(aFlags & eWalkCache) && mContext->IsAcceptableChild(aNode)) { + if (!(aFlags & eWalkCache) && mContext->IsAcceptableChild(aNode) && + !aria::IsValidARIAHidden(mDoc)) { mDoc->RelocateARIAOwnedIfNeeded(aNode); return GetAccService()->CreateAccessible(aNode, mContext, aSkipSubtree); } diff --git a/accessible/tests/browser/events/browser_focus_document.js b/accessible/tests/browser/events/browser_focus_document.js index 93228453500..ad54e2f4c2a 100644 --- a/accessible/tests/browser/events/browser_focus_document.js +++ b/accessible/tests/browser/events/browser_focus_document.js @@ -49,3 +49,39 @@ addAccessibleTask( }, { chrome: true, topLevel: false } ); + +/** + * Test that switching from a non-remote document to a remote document fires + * focus correctly. + */ +addAccessibleTask( + ``, + async function testLocalThenRemoteWithAutofocus(browser) { + info("Loading example.com with autofocus into same tab"); + // The accessibility test harness removes maychangeremoteness when we run a + // chrome test, but we explicitly want to change remoteness now. + browser.setAttribute("maychangeremoteness", "true"); + const url = + "https://example.com/document-builder.sjs?html=" + + encodeURIComponent(``); + let loaded = BrowserTestUtils.browserLoaded(browser); + browser.loadURI(Services.io.newURI(url), { + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); + await loaded; + is(Services.focus.focusedElement, browser, " should be focused"); + is( + Services.focus.focusedWindow, + window, + "window should be properly focused" + ); + await SpecialPowers.spawn(browser, [], async () => { + is( + content.windowUtils.IMEStatus, + content.windowUtils.IME_STATUS_ENABLED, + "IME should be enabled" + ); + }); + }, + { chrome: true, topLevel: false } +); diff --git a/accessible/tests/browser/tree/browser.toml b/accessible/tests/browser/tree/browser.toml index 59c408d4679..a129828271c 100644 --- a/accessible/tests/browser/tree/browser.toml +++ b/accessible/tests/browser/tree/browser.toml @@ -30,6 +30,10 @@ skip-if = [ ["browser_test_aria_hidden.js"] +["browser_test_aria_hidden_iframe.js"] + +["browser_test_aria_hidden_svg.js"] + ["browser_searchbar.js"] ["browser_select.js"] diff --git a/accessible/tests/browser/tree/browser_test_aria_hidden.js b/accessible/tests/browser/tree/browser_test_aria_hidden.js index 4a7ee2036d7..07d8e386e22 100644 --- a/accessible/tests/browser/tree/browser_test_aria_hidden.js +++ b/accessible/tests/browser/tree/browser_test_aria_hidden.js @@ -7,11 +7,37 @@ loadScripts({ name: "role.js", dir: MOCHITESTS_DIR }); /** - * Verify loading a root doc with aria-hidden renders the document. - * Non-root doc elements, like embedded iframes, should continue + * Verify loading a tab document with aria-hidden specified on the root element + * correctly renders the root element and its content. This test is meaninfully + * different from testTabDocument which tests aria-hidden specified on the + * body element. + */ +addAccessibleTask( + `hello world`, + async function testTabRootDocument(_, accDoc) { + const tree = { + DOCUMENT: [ + { + TEXT_LEAF: [], + }, + ], + }; + testAccessibleTree(accDoc, tree); + }, + { + chrome: true, + topLevel: true, + iframe: false, + remoteIframe: false, + } +); + +/** + * Verify loading a tab doc with aria-hidden on the body renders the document. + * Body elements inside of embedded iframes, should continue * to respect aria-hidden when present. This test ONLY tests * tab documents, it should not run in iframes. There is a separate - * test for iframes below. + * test for iframes in browser_test_aria_hidden_iframe.js. */ addAccessibleTask( ` @@ -35,7 +61,7 @@ addAccessibleTask( * Non-root doc elements, like embedded iframes, should continue * to respect aria-hidden when applied. This test ONLY tests * tab documents, it should not run in iframes. There is a separate - * test for iframes below. + * test for iframes in browser_test_aria_hidden_iframe.js. */ addAccessibleTask( ` @@ -56,274 +82,3 @@ addAccessibleTask( }, { chrome: true, topLevel: true, iframe: false, remoteIframe: false } ); - -/** - * Verify loading an iframe doc with aria-hidden doesn't render the document. - * This test ONLY tests iframe documents, it should not run in tab docs. - * There is a separate test for tab docs above. - */ -addAccessibleTask( - ` -

I am some content in a document

- `, - async function testIframeDocument(browser, docAcc, topLevel) { - const originalTree = { DOCUMENT: [{ INTERNAL_FRAME: [{ DOCUMENT: [] }] }] }; - testAccessibleTree(topLevel, originalTree); - }, - { - chrome: false, - topLevel: false, - iframe: true, - remoteIframe: true, - iframeDocBodyAttrs: { "aria-hidden": "true" }, - } -); - -/** - * Verify adding aria-hidden to iframe doc elements removes - * their subtree. This test ONLY tests iframe documents, it - * should not run in tab documents. There is a separate test for - * tab documents above. - */ -addAccessibleTask( - ` -

I am some content in a document

- `, - async function testIframeDocumentMutation(browser, docAcc, topLevel) { - const originalTree = { - DOCUMENT: [ - { - INTERNAL_FRAME: [ - { - DOCUMENT: [ - { - PARAGRAPH: [ - { - TEXT_LEAF: [], - }, - ], - }, - ], - }, - ], - }, - ], - }; - - testAccessibleTree(topLevel, originalTree); - info("Adding aria-hidden=true to content doc"); - await contentSpawnMutation( - browser, - { expected: [[EVENT_REORDER, docAcc]] }, - function () { - const b = content.document.body; - b.setAttribute("aria-hidden", "true"); - } - ); - const newTree = { - DOCUMENT: [ - { - INTERNAL_FRAME: [ - { - DOCUMENT: [], - }, - ], - }, - ], - }; - testAccessibleTree(topLevel, newTree); - }, - { chrome: false, topLevel: false, iframe: true, remoteIframe: true } -); - -// // /////////////////////////////// -// // //////////////////// SVG Tests -// // ////////////////////////////// - -const SVG_DOCUMENT_ID = "rootSVG"; -const HIDDEN_SVG_URI = - "data:image/svg+xml,%3Csvg%20id%3D%22rootSVG%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20aria-hidden%3D%22true%22%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20font-size%3D%2230%22%20id%3D%22textSVG%22%3EMy%20SVG%3C%2Ftext%3E%3C%2Fsvg%3E"; -const SVG_URI = - "data:image/svg+xml,%3Csvg%20id%3D%22rootSVG%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20font-size%3D%2230%22%20id%3D%22textSVG%22%3EMy%20SVG%3C%2Ftext%3E%3C%2Fsvg%3E"; - -/** - * Verify loading an SVG document with aria-hidden=true renders the - * entire document subtree. - * Non-root svg elements, like those in embedded iframes, should - * continue to respect aria-hidden when applied. - */ -addAccessibleTask( - `hello world`, - async function testSVGDocument(browser) { - let loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); - info("Loading SVG"); - browser.loadURI(Services.io.newURI(HIDDEN_SVG_URI), { - triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), - }); - await loaded; - - const tree = { - DOCUMENT: [ - { - TEXT_CONTAINER: [ - { - TEXT_LEAF: [], - }, - ], - }, - ], - }; - const root = getRootAccessible(document); - const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); - testAccessibleTree(svgRoot, tree); - }, - { chrome: true, topLevel: true, iframe: false, remoteIframe: false } -); - -/////////// -///// TODO: Bug 1960416 -////////// -// /** -// * Verify loading an SVG document with aria-hidden=true -// * in an iframe does not render the document subtree. -// */ -// addAccessibleTask( -// `hello world`, -// async function testSVGIframeDocument(browser) { -// info("Loading SVG"); -// const loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); -// await SpecialPowers.spawn(browser, [DEFAULT_IFRAME_ID, HIDDEN_SVG_URI], (_id,_uri) => { -// content.document.getElementById(_id).src = _uri; -// }); -// await loaded; - -// const tree = { -// DOCUMENT: [], -// }; -// const root = getRootAccessible(document); -// const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); -// testAccessibleTree(svgRoot, tree); -// }, -// { chrome: false, topLevel: false, iframe: true, remoteIframe: true } -// ); - -/** - * Verify adding aria-hidden to root svg elements has no effect. - * Non-root svg elements, like those in embedded iframes, should - * continue to respect aria-hidden when applied. - */ -addAccessibleTask( - `hello world`, - async function testSVGDocumentMutation(browser) { - let loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); - info("Loading SVG"); - browser.loadURI(Services.io.newURI(SVG_URI), { - triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), - }); - await loaded; - - const originalTree = { - DOCUMENT: [ - { - TEXT_CONTAINER: [ - { - TEXT_LEAF: [], - }, - ], - }, - ], - }; - const root = getRootAccessible(document); - const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); - testAccessibleTree(svgRoot, originalTree); - info("Adding aria-hidden=true to svg"); - // XXX Bug 1959547: We incorrectly get a reorder - // here. The tree should be unaffected by this attribute, - // but it seems like it isn't! Below we'll verify that - // the tree isn't removed, despite this reorder. - const unexpectedEvents = { expected: [[EVENT_REORDER, SVG_DOCUMENT_ID]] }; - info("Adding aria-hidden"); - await contentSpawnMutation( - browser, - unexpectedEvents, - function (_id) { - const d = content.document.getElementById(_id); - d.setAttribute("aria-hidden", "true"); - }, - [SVG_DOCUMENT_ID] - ); - // XXX Bug 1959547: We end up with an extra node in the - // tree after adding aria-hidden. It seems like SVG root - // element is splitting off / no longer behaves as the - // document...? - const newTree = { - DOCUMENT: [ - { - DIAGRAM: [ - { - TEXT_CONTAINER: [ - { - TEXT_LEAF: [], - }, - ], - }, - ], - }, - ], - }; - testAccessibleTree(svgRoot, newTree); - }, - { chrome: true, topLevel: true, iframe: false, remoteIframe: false } -); - -/** - * Verify adding aria-hidden to root svg elements in iframes removes - * the svg subtree. - */ -addAccessibleTask( - `hello world`, - async function testSVGIframeDocumentMutation(browser) { - info("Loading SVG"); - const loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); - await SpecialPowers.spawn( - browser, - [DEFAULT_IFRAME_ID, SVG_URI], - (contentId, _uri) => { - content.document.getElementById(contentId).src = _uri; - } - ); - await loaded; - const originalTree = { - DOCUMENT: [ - { - TEXT_CONTAINER: [ - { - TEXT_LEAF: [], - }, - ], - }, - ], - }; - const svgRoot = findAccessibleChildByID( - getRootAccessible(document), - SVG_DOCUMENT_ID - ); - testAccessibleTree(svgRoot, originalTree); - - info("Adding aria-hidden=true to svg"); - const events = { expected: [[EVENT_REORDER, SVG_DOCUMENT_ID]] }; - await contentSpawnMutation( - browser, - events, - function (_id) { - const d = content.document.getElementById(_id); - d.setAttribute("aria-hidden", "true"); - }, - [SVG_DOCUMENT_ID] - ); - - const newTree = { DOCUMENT: [] }; - testAccessibleTree(svgRoot, newTree); - }, - { chrome: false, topLevel: false, iframe: true, remoteIframe: true } -); diff --git a/accessible/tests/browser/tree/browser_test_aria_hidden_iframe.js b/accessible/tests/browser/tree/browser_test_aria_hidden_iframe.js new file mode 100644 index 00000000000..19f74da24af --- /dev/null +++ b/accessible/tests/browser/tree/browser_test_aria_hidden_iframe.js @@ -0,0 +1,127 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* import-globals-from ../../mochitest/role.js */ +loadScripts({ name: "role.js", dir: MOCHITESTS_DIR }); + +/** + * Verify loading an iframe document with aria-hidden specified on the root element + * correctly hides the root element and its content. This test is meaninfully + * different from testIframeDocument which tests aria-hidden specified on the + * body element. + */ +addAccessibleTask( + `hello world`, + async function testIframeRootDocument(browser) { + info("Loading iframe document"); + const HIDDEN_IFRAME_URI = + "data:text/html,hello world"; + const loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, "iframeBody"); + await SpecialPowers.spawn( + browser, + [DEFAULT_IFRAME_ID, HIDDEN_IFRAME_URI], + (_id, _uri) => { + content.document.getElementById(_id).src = _uri; + } + ); + await loaded; + + const tree = { + INTERNAL_FRAME: [ + { + DOCUMENT: [], + }, + ], + }; + const root = getRootAccessible(document); + const iframeDoc = findAccessibleChildByID(root, DEFAULT_IFRAME_ID); + testAccessibleTree(iframeDoc, tree); + }, + { + chrome: false, + topLevel: false, + iframe: true, + remoteIframe: true, + } +); + +/** + * Verify loading an iframe doc with aria-hidden doesn't render the document. + * This test ONLY tests iframe documents, it should not run in tab docs. + * There is a separate test for tab docs in browser_test_aria_hidden.js. + */ +addAccessibleTask( + ` +

I am some content in a document

+ `, + async function testIframeDocument(browser, docAcc, topLevel) { + const originalTree = { DOCUMENT: [{ INTERNAL_FRAME: [{ DOCUMENT: [] }] }] }; + testAccessibleTree(topLevel, originalTree); + }, + { + chrome: false, + topLevel: false, + iframe: true, + remoteIframe: true, + iframeDocBodyAttrs: { "aria-hidden": "true" }, + } +); + +/** + * Verify adding aria-hidden to iframe doc elements removes + * their subtree. This test ONLY tests iframe documents, it + * should not run in tab documents. There is a separate test for + * tab documents in browser_test_aria_hidden.js. + */ +addAccessibleTask( + ` +

I am some content in a document

+ `, + async function testIframeDocumentMutation(browser, docAcc, topLevel) { + const originalTree = { + DOCUMENT: [ + { + INTERNAL_FRAME: [ + { + DOCUMENT: [ + { + PARAGRAPH: [ + { + TEXT_LEAF: [], + }, + ], + }, + ], + }, + ], + }, + ], + }; + + testAccessibleTree(topLevel, originalTree); + info("Adding aria-hidden=true to content doc"); + await contentSpawnMutation( + browser, + { expected: [[EVENT_REORDER, docAcc]] }, + function () { + const b = content.document.body; + b.setAttribute("aria-hidden", "true"); + } + ); + const newTree = { + DOCUMENT: [ + { + INTERNAL_FRAME: [ + { + DOCUMENT: [], + }, + ], + }, + ], + }; + testAccessibleTree(topLevel, newTree); + }, + { chrome: false, topLevel: false, iframe: true, remoteIframe: true } +); diff --git a/accessible/tests/browser/tree/browser_test_aria_hidden_svg.js b/accessible/tests/browser/tree/browser_test_aria_hidden_svg.js new file mode 100644 index 00000000000..31b7f1d453f --- /dev/null +++ b/accessible/tests/browser/tree/browser_test_aria_hidden_svg.js @@ -0,0 +1,197 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/* import-globals-from ../../mochitest/role.js */ +loadScripts({ name: "role.js", dir: MOCHITESTS_DIR }); + +const SVG_DOCUMENT_ID = "rootSVG"; +const HIDDEN_SVG_URI = + "data:image/svg+xml,%3Csvg%20id%3D%22rootSVG%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20aria-hidden%3D%22true%22%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20font-size%3D%2230%22%20id%3D%22textSVG%22%3EMy%20SVG%3C%2Ftext%3E%3C%2Fsvg%3E"; +const SVG_URI = + "data:image/svg+xml,%3Csvg%20id%3D%22rootSVG%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Ctext%20x%3D%2210%22%20y%3D%2250%22%20font-size%3D%2230%22%20id%3D%22textSVG%22%3EMy%20SVG%3C%2Ftext%3E%3C%2Fsvg%3E"; + +/** + * Verify loading an SVG document with aria-hidden=true renders the + * entire document subtree. + * Non-root svg elements, like those in embedded iframes, should + * continue to respect aria-hidden when applied. + */ +addAccessibleTask( + `hello world`, + async function testSVGDocument(browser) { + let loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); + info("Loading SVG"); + browser.loadURI(Services.io.newURI(HIDDEN_SVG_URI), { + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); + await loaded; + + const tree = { + DOCUMENT: [ + { + TEXT_CONTAINER: [ + { + TEXT_LEAF: [], + }, + ], + }, + ], + }; + const root = getRootAccessible(document); + const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); + testAccessibleTree(svgRoot, tree); + }, + { chrome: true, topLevel: true, iframe: false, remoteIframe: false } +); + +/** + * Verify loading an SVG document with aria-hidden=true + * in an iframe does not render the document subtree. + */ +addAccessibleTask( + `hello world`, + async function testSVGIframeDocument(browser) { + info("Loading SVG"); + const loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); + await SpecialPowers.spawn( + browser, + [DEFAULT_IFRAME_ID, HIDDEN_SVG_URI], + (_id, _uri) => { + content.document.getElementById(_id).src = _uri; + } + ); + await loaded; + + const tree = { + DOCUMENT: [], + }; + + const root = getRootAccessible(document); + const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); + testAccessibleTree(svgRoot, tree); + }, + { chrome: false, topLevel: false, iframe: true, remoteIframe: true } +); + +/** + * Verify adding aria-hidden to root svg elements has no effect. + * Non-root svg elements, like those in embedded iframes, should + * continue to respect aria-hidden when applied. + */ +addAccessibleTask( + `hello world`, + async function testSVGDocumentMutation(browser) { + let loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); + info("Loading SVG"); + browser.loadURI(Services.io.newURI(SVG_URI), { + triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal(), + }); + await loaded; + + const originalTree = { + DOCUMENT: [ + { + TEXT_CONTAINER: [ + { + TEXT_LEAF: [], + }, + ], + }, + ], + }; + const root = getRootAccessible(document); + const svgRoot = findAccessibleChildByID(root, SVG_DOCUMENT_ID); + testAccessibleTree(svgRoot, originalTree); + info("Adding aria-hidden=true to svg"); + // XXX Bug 1959547: We incorrectly get a reorder + // here. The tree should be unaffected by this attribute, + // but it seems like it isn't! Below we'll verify that + // the tree isn't removed, despite this reorder. + const unexpectedEvents = { expected: [[EVENT_REORDER, SVG_DOCUMENT_ID]] }; + info("Adding aria-hidden"); + await contentSpawnMutation( + browser, + unexpectedEvents, + function (_id) { + const d = content.document.getElementById(_id); + d.setAttribute("aria-hidden", "true"); + }, + [SVG_DOCUMENT_ID] + ); + // XXX Bug 1959547: We end up with an extra node in the + // tree after adding aria-hidden. It seems like SVG root + // element is splitting off / no longer behaves as the + // document...? + const newTree = { + DOCUMENT: [ + { + DIAGRAM: [ + { + TEXT_CONTAINER: [ + { + TEXT_LEAF: [], + }, + ], + }, + ], + }, + ], + }; + testAccessibleTree(svgRoot, newTree); + }, + { chrome: true, topLevel: true, iframe: false, remoteIframe: false } +); + +/** + * Verify adding aria-hidden to root svg elements in iframes removes + * the svg subtree. + */ +addAccessibleTask( + `hello world`, + async function testSVGIframeDocumentMutation(browser) { + info("Loading SVG"); + const loaded = waitForEvent(EVENT_DOCUMENT_LOAD_COMPLETE, SVG_DOCUMENT_ID); + await SpecialPowers.spawn( + browser, + [DEFAULT_IFRAME_ID, SVG_URI], + (contentId, _uri) => { + content.document.getElementById(contentId).src = _uri; + } + ); + await loaded; + const originalTree = { + DOCUMENT: [ + { + TEXT_CONTAINER: [ + { + TEXT_LEAF: [], + }, + ], + }, + ], + }; + const svgRoot = findAccessibleChildByID( + getRootAccessible(document), + SVG_DOCUMENT_ID + ); + testAccessibleTree(svgRoot, originalTree); + + info("Adding aria-hidden=true to svg"); + const events = { expected: [[EVENT_REORDER, SVG_DOCUMENT_ID]] }; + await contentSpawnMutation( + browser, + events, + function (_id) { + const d = content.document.getElementById(_id); + d.setAttribute("aria-hidden", "true"); + }, + [SVG_DOCUMENT_ID] + ); + + const newTree = { DOCUMENT: [] }; + testAccessibleTree(svgRoot, newTree); + }, + { chrome: false, topLevel: false, iframe: true, remoteIframe: true } +); diff --git a/aclocal.m4 b/aclocal.m4 deleted file mode 100644 index e365a9a22b9..00000000000 --- a/aclocal.m4 +++ /dev/null @@ -1,14 +0,0 @@ -dnl -dnl Local autoconf macros used with mozilla -dnl The contents of this file are under the Public Domain. -dnl - -builtin(include, build/autoconf/hooks.m4)dnl -builtin(include, build/autoconf/config.status.m4)dnl -builtin(include, build/autoconf/altoptions.m4)dnl - -# Read the user's .mozconfig script. We can't do this in -# configure.in: autoconf puts the argument parsing code above anything -# expanded from configure.in, and we need to get the configure options -# from .mozconfig in place before that argument parsing code. -MOZ_READ_MOZCONFIG(.) diff --git a/browser/actors/SearchSERPTelemetryChild.sys.mjs b/browser/actors/SearchSERPTelemetryChild.sys.mjs index 50147eba83b..24418e6bfe3 100644 --- a/browser/actors/SearchSERPTelemetryChild.sys.mjs +++ b/browser/actors/SearchSERPTelemetryChild.sys.mjs @@ -1650,7 +1650,7 @@ export class SearchSERPTelemetryChild extends JSWindowActorChild { * @param {object} event The event details. */ handleEvent(event) { - if (!this.#urlIsSERP(this.document.documentURI)) { + if (!this.#urlIsSERP()) { return; } switch (event.type) { @@ -1719,7 +1719,7 @@ export class SearchSERPTelemetryChild extends JSWindowActorChild { documentToSubmitMap.delete(this.document); } - #urlIsSERP(url) { + #urlIsSERP() { let provider = this._getProviderInfoForUrl(this.document.documentURI); if (provider) { // Some URLs can match provider info but also be the provider's homepage @@ -1727,7 +1727,7 @@ export class SearchSERPTelemetryChild extends JSWindowActorChild { // e.g. https://example.com/ vs. https://example.com/?foo=bar // To check this, we look for the presence of the query parameter // that contains a search term. - let queries = new URLSearchParams(url.split("#")[0].split("?")[1]); + let queries = URL.fromURI(this.document.documentURIObject).searchParams; for (let queryParamName of provider.queryParamNames) { if (queries.get(queryParamName)) { return true; diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 96cef75b077..01142b62de0 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -208,19 +208,6 @@ pref("app.update.langpack.enabled", true); pref("app.update.noWindowAutoRestart.delayMs", 300000); #endif -// The Multi Session Install Lockout prevents updates from being installed at -// startup when they normally would be if there are other instances using the -// installation. We only do this for a limited amount of time before we go ahead -// and apply the update anyways. -// Hopefully, at some point, updating Firefox while it is running will not break -// things and this mechanism can be removed. -// Note that these prefs are bit dangerous because having different values in -// different profiles could cause erratic behavior. -// This feature is also affected by -// `app.update.multiSessionInstallLockout.timeoutMs`, which is in the branding -// section. -pref("app.update.multiSessionInstallLockout.enabled", false); - #if defined(MOZ_BACKGROUNDTASKS) // The amount of time, in seconds, before background tasks time out and exit. // Tasks can override this default (10 minutes). @@ -388,21 +375,12 @@ pref("browser.overlink-delay", 80); pref("browser.taskbarTabs.enabled", false); -pref("browser.theme.colorway-closet", true); - #if defined(MOZ_WIDGET_GTK) pref("browser.theme.native-theme", true); #else pref("browser.theme.native-theme", false); #endif -// Whether expired built-in colorways themes that are active or retained -// should be allowed to check for updates and be updated to an AMO hosted -// theme with the same id (as part of preparing to remove from mozilla-central -// all the expired built-in colorways themes, after existing users have been -// migrated to colorways themes hosted on AMO). -pref("browser.theme.colorway-migration", true); - // Whether using `ctrl` when hitting return/enter in the URL bar // (or clicking 'go') should prefix 'www.' and suffix // browser.fixup.alternate.suffix to the URL bar value prior to @@ -1063,6 +1041,9 @@ pref("browser.tabs.groups.smart.enabled", true); pref("browser.tabs.groups.smart.enabled", false); #endif +// KMEANS_WITH_ANCHOR or NEAREST_NEIGHBOR +pref("browser.tabs.groups.smart.suggestOtherTabsMethod", "NEAREST_NEIGHBOR"); + pref("browser.tabs.groups.smart.optin", false); pref("browser.tabs.dragDrop.createGroup.delayMS", 240); @@ -1869,8 +1850,7 @@ pref("browser.newtabpage.activity-stream.newNewtabExperience.colors", "#004CA4,# pref("browser.newtabpage.activity-stream.newtabLayouts.variant-a", false); pref("browser.newtabpage.activity-stream.newtabLayouts.variant-b", true); -// Shortcuts experiment -pref("browser.newtabpage.activity-stream.newtabShortcuts.refresh", false); +pref("browser.newtabpage.activity-stream.newtabShortcuts.refresh", true); // Discovery stream ad size experiment pref("browser.newtabpage.activity-stream.newtabAdSize.variant-a", false); @@ -1991,7 +1971,12 @@ pref("browser.newtabpage.activity-stream.discoverystream.sections.locale-content pref("browser.newtabpage.activity-stream.discoverystream.sections.region-content-config", ""); pref("browser.newtabpage.activity-stream.discoverystream.sections.cards.enabled", true); -pref("browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.enabled", false); + +// List of regions that use inferred personalization. +pref("browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.region-config", ""); +// List of locales that use inferred personalization. +pref("browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.locale-config", "en-US,en-GB,en-CA"); + pref("browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.user.enabled", true); pref("browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.blocked", false); @@ -2152,6 +2137,7 @@ pref("browser.ml.linkPreview.allowedLanguages", "en"); pref("browser.ml.linkPreview.enabled", false); pref("browser.ml.linkPreview.outputSentences", 3); pref("browser.ml.linkPreview.blockListEnabled", true); +pref("browser.ml.linkPreview.noKeyPointsRegions", "AD,AT,BE,BG,CH,CY,CZ,DE,DK,EE,ES,FI,FR,GR,HR,HU,IE,IS,IT,LI,LT,LU,LV,MT,NL,NO,PL,PT,RO,SE,SI,SK"); // Block insecure active content on https pages pref("security.mixed_content.block_active_content", true); diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js index 847294209c5..a7f054f8df4 100644 --- a/browser/base/content/browser.js +++ b/browser/base/content/browser.js @@ -67,6 +67,8 @@ ChromeUtils.defineESModuleGetters(this, { PopupBlockerObserver: "resource:///modules/PopupBlockerObserver.sys.mjs", PrivateBrowsingUtils: "resource://gre/modules/PrivateBrowsingUtils.sys.mjs", ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.sys.mjs", + ProfilesDatastoreService: + "resource:///modules/profiles/ProfilesDatastoreService.sys.mjs", PromptUtils: "resource://gre/modules/PromptUtils.sys.mjs", ReaderMode: "moz-src:///toolkit/components/reader/ReaderMode.sys.mjs", ResetPBMPanel: "resource:///modules/ResetPBMPanel.sys.mjs", @@ -75,6 +77,8 @@ ChromeUtils.defineESModuleGetters(this, { SaveToPocket: "chrome://pocket/content/SaveToPocket.sys.mjs", ScreenshotsUtils: "resource:///modules/ScreenshotsUtils.sys.mjs", SearchUIUtils: "moz-src:///browser/components/search/SearchUIUtils.sys.mjs", + SelectableProfileService: + "resource:///modules/profiles/SelectableProfileService.sys.mjs", SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs", SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs", SharingUtils: "resource:///modules/SharingUtils.sys.mjs", @@ -111,17 +115,6 @@ ChromeUtils.defineESModuleGetters(this, { ZoomUI: "resource:///modules/ZoomUI.sys.mjs", }); -// Bug 1894239: We will move this up to ChromeUtils.defineESModuleGetters once -// the MOZ_SELECTABLE_PROFILES flag is removed -ChromeUtils.defineLazyGetter(this, "SelectableProfileService", () => { - if (!AppConstants.MOZ_SELECTABLE_PROFILES) { - return null; - } - return ChromeUtils.importESModule( - "resource:///modules/profiles/SelectableProfileService.sys.mjs" - ).SelectableProfileService; -}); - ChromeUtils.defineLazyGetter(this, "fxAccounts", () => { return ChromeUtils.importESModule( "resource://gre/modules/FxAccounts.sys.mjs" diff --git a/browser/base/content/browser.js.globals b/browser/base/content/browser.js.globals index 0e7de474470..ae1a289fb47 100644 --- a/browser/base/content/browser.js.globals +++ b/browser/base/content/browser.js.globals @@ -256,5 +256,6 @@ "gFindBarPromise", "SelectableProfileService", "ActionsProviderContextualSearch", - "ToolbarDropHandler" + "ToolbarDropHandler", + "ProfilesDatastoreService" ] diff --git a/browser/base/content/contentTheme.js b/browser/base/content/contentTheme.js index de6bf3131be..0654ebc4d9d 100644 --- a/browser/base/content/contentTheme.js +++ b/browser/base/content/contentTheme.js @@ -32,6 +32,12 @@ lwtProperty: "ntp_card_background", }, ], + [ + "--newtab-background-card", + { + lwtProperty: "ntp_card_background", + }, + ], [ "--newtab-text-primary-color", { diff --git a/browser/base/content/main-popupset.js b/browser/base/content/main-popupset.js index 9763f946256..3d061c412a7 100644 --- a/browser/base/content/main-popupset.js +++ b/browser/base/content/main-popupset.js @@ -148,7 +148,7 @@ document.addEventListener( { let { tabGroupId } = event.target.parentElement.triggerNode.dataset; SessionStore.openSavedTabGroup(tabGroupId, window, { - source: lazy.TabMetrics.METRIC_SOURCE.RECENT_TABS, + source: lazy.TabMetrics.METRIC_SOURCE.TAB_OVERFLOW_MENU, }); } break; @@ -157,7 +157,7 @@ document.addEventListener( // TODO Bug 1940112: "Open Group in New Window" should directly restore saved tab groups into a new window let { tabGroupId } = event.target.parentElement.triggerNode.dataset; let tabGroup = SessionStore.openSavedTabGroup(tabGroupId, window, { - source: lazy.TabMetrics.METRIC_SOURCE.RECENT_TABS, + source: lazy.TabMetrics.METRIC_SOURCE.TAB_OVERFLOW_MENU, }); gBrowser.replaceGroupWithWindow(tabGroup); } diff --git a/browser/base/content/test/performance/browser.toml b/browser/base/content/test/performance/browser.toml index d6d7e0cdd19..e07f247ce6a 100644 --- a/browser/base/content/test/performance/browser.toml +++ b/browser/base/content/test/performance/browser.toml @@ -13,7 +13,6 @@ prefs = [ # The form autofill framescript is only used in certain locales if this # pref is set to 'detect', which is the default value on non-Nightly. "extensions.formautofill.addresses.available='on'", - "browser.urlbar.disableExtendForTests=true", # For perfomance tests do not enable the remote control cue, which gets set # when Marionette is enabled, but users normally don't see. "browser.chrome.disableRemoteControlCueForTests=true", @@ -105,10 +104,8 @@ skip-if = ["os == 'win'"] #Bug 1455054 ["browser_toolbariconcolor_restyles.js"] ["browser_urlbar_keyed_search.js"] -skip-if = ["true"] # Bug 1926118: Disabled until the test can be revisited to measure performance under representative conditions. ["browser_urlbar_search.js"] -skip-if = ["true"] # Bug 1926118: Disabled until the test can be revisited to measure performance under representative conditions. ["browser_vsync_accessibility.js"] diff --git a/browser/base/content/test/performance/browser_startup.js b/browser/base/content/test/performance/browser_startup.js index 52c78796243..01e7aa8a9ca 100644 --- a/browser/base/content/test/performance/browser_startup.js +++ b/browser/base/content/test/performance/browser_startup.js @@ -108,6 +108,13 @@ const startupPhases = { }, }; +if (AppConstants.platform == "win") { + // On Windows we call checkForLaunchOnLogin early in startup. + startupPhases["before profile selection"].allowlist.modules.add( + "moz-src:///browser/components/shell/StartupOSIntegration.sys.mjs" + ); +} + if ( Services.prefs.getBoolPref("browser.startup.blankWindow") && Services.prefs.getCharPref( diff --git a/browser/base/content/test/performance/head.js b/browser/base/content/test/performance/head.js index 2ac6a4de5be..5b2502b9f2a 100644 --- a/browser/base/content/test/performance/head.js +++ b/browser/base/content/test/performance/head.js @@ -818,9 +818,18 @@ async function runUrlbarTest( }; let urlbarRect = URLBar.textbox.getBoundingClientRect(); - const SHADOW_SIZE = 17; + // To isolate unexpected repaints, we need to filter out the rectangle of + // pixels changed by showing the urlbar popover + const SHADOW_SIZE = 17; // The blur/spread of the box shadow, plus 1px fudge factor + const INLINE_MARGIN = 5; // Margin applied to the breakout-extend urlbar + const VERTICAL_OFFSET = -4; // The popover positioning requires this offset let expectedRects = { filter: rects => { + const referenceRect = { + x1: Math.floor(urlbarRect.left) - INLINE_MARGIN - SHADOW_SIZE, + x2: Math.ceil(urlbarRect.right) + INLINE_MARGIN + SHADOW_SIZE, + y1: Math.floor(urlbarRect.top) + VERTICAL_OFFSET - SHADOW_SIZE, + }; // We put text into the urlbar so expect its textbox to change. // We expect many changes in the results view. // So we just allow changes anywhere in the urlbar. We don't check the @@ -831,9 +840,9 @@ async function runUrlbarTest( return rects.filter( r => !( - r.x1 >= Math.floor(urlbarRect.left) - SHADOW_SIZE && - r.x2 <= Math.ceil(urlbarRect.right) + SHADOW_SIZE && - r.y1 >= Math.floor(urlbarRect.top) - SHADOW_SIZE + r.x1 >= referenceRect.x1 && + r.x2 <= referenceRect.x2 && + r.y1 >= referenceRect.y1 ) ); }, diff --git a/browser/base/content/test/static/browser_all_files_referenced.js b/browser/base/content/test/static/browser_all_files_referenced.js index 40d86292637..f3c31ce5113 100644 --- a/browser/base/content/test/static/browser_all_files_referenced.js +++ b/browser/base/content/test/static/browser_all_files_referenced.js @@ -119,6 +119,10 @@ var gExceptionPaths = [ "resource://builtin-addons/newtab/", "resource://newtab/", "chrome://newtab/", + + // Bug 1957102 - Temporarily ignore until used by the URLBar provider + "resource://gre/modules/PlacesSemanticHistoryManager.sys.mjs", + "resource://gre/modules/PlacesSemanticHistoryDatabase.sys.mjs", ]; // These are not part of the omni.ja file, so we find them only when running diff --git a/browser/branding/aurora/pref/firefox-branding.js b/browser/branding/aurora/pref/firefox-branding.js index c922cfdabd1..0e257a777dc 100644 --- a/browser/branding/aurora/pref/firefox-branding.js +++ b/browser/branding/aurora/pref/firefox-branding.js @@ -29,14 +29,6 @@ pref("app.update.checkInstallTime.days", 2); // Give the user x seconds to reboot before showing a badge on the hamburger // button. default=4 days pref("app.update.badgeWaitTime", 345600); -// This represents the duration between an update being ready and it being -// possible to install it while other sessions are running. Note that -// having this pref's duration differ from `app.update.badgeWaitTime` may result -// in undefined behavior such as showing an update prompt that does not result -// in an update when the "Restart to Update" button is clicked. Keep in mind -// that this is in milliseconds and `app.update.badgeWaitTime` is in seconds. -// Note that the effective value of this pref is limited to 1 week, maximum. -pref("app.update.multiSessionInstallLockout.timeoutMs", 345600000); // Number of usages of the web console. // If this is less than 5, then pasting code into the web console is disabled diff --git a/browser/branding/nightly/pref/firefox-branding.js b/browser/branding/nightly/pref/firefox-branding.js index 6ea9d147a4e..ad85ed0fc01 100644 --- a/browser/branding/nightly/pref/firefox-branding.js +++ b/browser/branding/nightly/pref/firefox-branding.js @@ -30,14 +30,6 @@ pref("app.update.checkInstallTime.days", 2); // Give the user x seconds to reboot before showing a badge on the hamburger // button. default=immediately pref("app.update.badgeWaitTime", 0); -// This represents the duration between an update being ready and it being -// possible to install it while other sessions are running. Note that -// having this pref's duration differ from `app.update.badgeWaitTime` may result -// in undefined behavior such as showing an update prompt that does not result -// in an update when the "Restart to Update" button is clicked. Keep in mind -// that this is in milliseconds and `app.update.badgeWaitTime` is in seconds. -// Note that the effective value of this pref is limited to 1 week, maximum. -pref("app.update.multiSessionInstallLockout.timeoutMs", 0); // Number of usages of the web console. // If this is less than 5, then pasting code into the web console is disabled diff --git a/browser/branding/official/pref/firefox-branding.js b/browser/branding/official/pref/firefox-branding.js index e3d5e63d79b..25711ea79fe 100644 --- a/browser/branding/official/pref/firefox-branding.js +++ b/browser/branding/official/pref/firefox-branding.js @@ -42,14 +42,6 @@ pref("app.update.checkInstallTime.days", 63); // Give the user x seconds to reboot before showing a badge on the hamburger // button. default=4 days pref("app.update.badgeWaitTime", 345600); -// This represents the duration between an update being ready and it being -// possible to install it while other sessions are running. Note that -// having this pref's duration differ from `app.update.badgeWaitTime` may result -// in undefined behavior such as showing an update prompt that does not result -// in an update when the "Restart to Update" button is clicked. Keep in mind -// that this is in milliseconds and `app.update.badgeWaitTime` is in seconds. -// Note that the effective value of this pref is limited to 1 week, maximum. -pref("app.update.multiSessionInstallLockout.timeoutMs", 345600000); // Number of usages of the web console. // If this is less than 5, then pasting code into the web console is disabled diff --git a/browser/branding/unofficial/pref/firefox-branding.js b/browser/branding/unofficial/pref/firefox-branding.js index 913a5558a02..f22dd0a51cc 100644 --- a/browser/branding/unofficial/pref/firefox-branding.js +++ b/browser/branding/unofficial/pref/firefox-branding.js @@ -26,14 +26,6 @@ pref("app.update.checkInstallTime.days", 2); // Give the user x seconds to reboot before showing a badge on the hamburger // button. default=immediately pref("app.update.badgeWaitTime", 0); -// This represents the duration between an update being ready and it being -// possible to install it while other sessions are running. Note that -// having this pref's duration differ from `app.update.badgeWaitTime` may result -// in undefined behavior such as showing an update prompt that does not result -// in an update when the "Restart to Update" button is clicked. Keep in mind -// that this is in milliseconds and `app.update.badgeWaitTime` is in seconds. -// Note that the effective value of this pref is limited to 1 week, maximum. -pref("app.update.multiSessionInstallLockout.timeoutMs", 0); // Number of usages of the web console. // If this is less than 5, then pasting code into the web console is disabled diff --git a/browser/components/BrowserComponents.manifest b/browser/components/BrowserComponents.manifest index c07d4dda9f4..2217b44978f 100644 --- a/browser/components/BrowserComponents.manifest +++ b/browser/components/BrowserComponents.manifest @@ -47,12 +47,16 @@ category browser-idle-startup resource:///modules/UrlbarSearchTermsPersistence.s category browser-idle-startup resource:///modules/ShoppingUtils.sys.mjs ShoppingUtils.init category browser-idle-startup moz-src:///browser/components/search/SERPCategorization.sys.mjs SERPCategorization.init category browser-idle-startup resource://gre/modules/ContentRelevancyManager.sys.mjs ContentRelevancyManager.init +category browser-idle-startup resource://gre/modules/ColorwayThemeMigration.sys.mjs ColorwayThemeMigration.maybeWarn #ifdef MOZ_UPDATER category browser-idle-startup resource://gre/modules/UpdateListener.sys.mjs UpdateListener.maybeShowUnsupportedNotification #endif #ifdef XP_WIN category browser-idle-startup resource:///modules/WindowsJumpLists.sys.mjs WinTaskbarJumpList.startup #endif +#if defined(XP_WIN) || defined(XP_MACOSX) +category browser-idle-startup moz-src:///browser/components/shell/StartupOSIntegration.sys.mjs StartupOSIntegration.onStartupIdle +#endif # Note that these telemetry entries schedule their own idle tasks, # so they are guaranteed to run after everything else. diff --git a/browser/components/BrowserGlue.sys.mjs b/browser/components/BrowserGlue.sys.mjs index d64f7725426..aee37cdccec 100644 --- a/browser/components/BrowserGlue.sys.mjs +++ b/browser/components/BrowserGlue.sys.mjs @@ -42,8 +42,6 @@ ChromeUtils.defineESModuleGetters(lazy, { DownloadsViewableInternally: "resource:///modules/DownloadsViewableInternally.sys.mjs", ExtensionsUI: "resource:///modules/ExtensionsUI.sys.mjs", - FirefoxBridgeExtensionUtils: - "resource:///modules/FirefoxBridgeExtensionUtils.sys.mjs", // FilePickerCrashed is used by the `listeners` object below. // eslint-disable-next-line mozilla/valid-lazy FilePickerCrashed: "resource:///modules/FilePickerCrashed.sys.mjs", @@ -70,6 +68,8 @@ ChromeUtils.defineESModuleGetters(lazy, { ProcessHangMonitor: "resource:///modules/ProcessHangMonitor.sys.mjs", ProfileDataUpgrader: "moz-src:///browser/components/ProfileDataUpgrader.sys.mjs", + ProfilesDatastoreService: + "resource:///modules/profiles/ProfilesDatastoreService.sys.mjs", RemoteSecuritySettings: "resource://gre/modules/psm/RemoteSecuritySettings.sys.mjs", RemoteSettings: "resource://services-settings/remote-settings.sys.mjs", @@ -83,10 +83,11 @@ ChromeUtils.defineESModuleGetters(lazy, { "resource:///modules/profiles/SelectableProfileService.sys.mjs", SessionStartup: "resource:///modules/sessionstore/SessionStartup.sys.mjs", SessionStore: "resource:///modules/sessionstore/SessionStore.sys.mjs", - ShellService: "resource:///modules/ShellService.sys.mjs", ShortcutUtils: "resource://gre/modules/ShortcutUtils.sys.mjs", SpecialMessageActions: "resource://messaging-system/lib/SpecialMessageActions.sys.mjs", + StartupOSIntegration: + "moz-src:///browser/components/shell/StartupOSIntegration.sys.mjs", TelemetryReportingPolicy: "resource://gre/modules/TelemetryReportingPolicy.sys.mjs", TRRRacer: "resource:///modules/TRRPerformance.sys.mjs", @@ -94,9 +95,7 @@ ChromeUtils.defineESModuleGetters(lazy, { WebChannel: "resource://gre/modules/WebChannel.sys.mjs", WebProtocolHandlerRegistrar: "resource:///modules/WebProtocolHandlerRegistrar.sys.mjs", - WindowsLaunchOnLogin: "resource://gre/modules/WindowsLaunchOnLogin.sys.mjs", WindowsRegistry: "resource://gre/modules/WindowsRegistry.sys.mjs", - WindowsGPOParser: "resource://gre/modules/policies/WindowsGPOParser.sys.mjs", setTimeout: "resource://gre/modules/Timer.sys.mjs", }); @@ -126,13 +125,6 @@ if (AppConstants.ENABLE_WEBDRIVER) { const PREF_PDFJS_ISDEFAULT_CACHE_STATE = "pdfjs.enabledCache.state"; -const PRIVATE_BROWSING_BINARY = "private_browsing.exe"; -// Index of Private Browsing icon in private_browsing.exe -// Must line up with IDI_PBICON_PB_PB_EXE in nsNativeAppSupportWin.h. -const PRIVATE_BROWSING_EXE_ICON_INDEX = 1; -const PREF_PRIVATE_BROWSING_SHORTCUT_CREATED = - "browser.privacySegmentation.createdShortcut"; - ChromeUtils.defineLazyGetter( lazy, "WeaveService", @@ -157,21 +149,6 @@ ChromeUtils.defineLazyGetter(lazy, "gBrowserBundle", function () { ); }); -ChromeUtils.defineLazyGetter(lazy, "log", () => { - let { ConsoleAPI } = ChromeUtils.importESModule( - "resource://gre/modules/Console.sys.mjs" - ); - let consoleOptions = { - // tip: set maxLogLevel to "debug" and use lazy.log.debug() to create - // detailed messages during development. See LOG_LEVELS in Console.sys.mjs - // for details. - maxLogLevel: "error", - maxLogLevelPref: "browser.policies.loglevel", - prefix: "BrowserGlue.sys.mjs", - }; - return new ConsoleAPI(consoleOptions); -}); - const listeners = { observers: { "file-picker-crashed": ["FilePickerCrashed"], @@ -255,77 +232,6 @@ export function BrowserGlue() { this._init(); } -function WindowsRegPoliciesGetter(wrk, root, regLocation) { - wrk.open(root, regLocation, wrk.ACCESS_READ); - let policies; - if (wrk.hasChild("Mozilla\\" + Services.appinfo.name)) { - policies = lazy.WindowsGPOParser.readPolicies(wrk, policies); - } - wrk.close(); - return policies; -} - -function isPrivateBrowsingAllowedInRegistry() { - // If there is an attempt to open Private Browsing before - // EnterprisePolicies are initialized the Windows registry - // can be checked to determine if it is enabled - if (Services.policies.status > Ci.nsIEnterprisePolicies.UNINITIALIZED) { - // Yield to policies engine if initialized - let privateAllowed = Services.policies.isAllowed("privatebrowsing"); - lazy.log.debug( - `Yield to initialized policies engine: Private Browsing Allowed = ${privateAllowed}` - ); - return privateAllowed; - } - if (AppConstants.platform !== "win") { - // Not using Windows so no registry, return true - lazy.log.debug( - "AppConstants.platform is not 'win': Private Browsing allowed" - ); - return true; - } - // If all other checks fail only then do we check registry - let wrk = Cc["@mozilla.org/windows-registry-key;1"].createInstance( - Ci.nsIWindowsRegKey - ); - let regLocation = "SOFTWARE\\Policies"; - let userPolicies, machinePolicies; - // Only check HKEY_LOCAL_MACHINE if not in testing - if (!Cu.isInAutomation) { - machinePolicies = WindowsRegPoliciesGetter( - wrk, - wrk.ROOT_KEY_LOCAL_MACHINE, - regLocation - ); - } - // Check machine policies before checking user policies - // HKEY_LOCAL_MACHINE supersedes HKEY_CURRENT_USER so only check - // HKEY_CURRENT_USER if the registry key is not present in - // HKEY_LOCAL_MACHINE at all - if (machinePolicies && "DisablePrivateBrowsing" in machinePolicies) { - lazy.log.debug( - `DisablePrivateBrowsing in HKEY_LOCAL_MACHINE is ${machinePolicies.DisablePrivateBrowsing}` - ); - return !(machinePolicies.DisablePrivateBrowsing === 1); - } - userPolicies = WindowsRegPoliciesGetter( - wrk, - wrk.ROOT_KEY_CURRENT_USER, - regLocation - ); - if (userPolicies && "DisablePrivateBrowsing" in userPolicies) { - lazy.log.debug( - `DisablePrivateBrowsing in HKEY_CURRENT_USER is ${userPolicies.DisablePrivateBrowsing}` - ); - return !(userPolicies.DisablePrivateBrowsing === 1); - } - // Private browsing allowed if no registry entry exists - lazy.log.debug( - "No DisablePrivateBrowsing registry entry: Private Browsing allowed" - ); - return true; -} - BrowserGlue.prototype = { _saveSession: false, _migrationImportsDefaultBookmarks: false, @@ -513,30 +419,8 @@ BrowserGlue.prototype = { "os-autostart", false ); - let launchOnLoginPref = "browser.startup.windowsLaunchOnLogin.enabled"; - let profileSvc = Cc[ - "@mozilla.org/toolkit/profile-service;1" - ].getService(Ci.nsIToolkitProfileService); - if ( - AppConstants.platform == "win" && - !profileSvc.startWithLastProfile - ) { - // If we don't start with last profile, the user - // likely sees the profile selector on launch. - if (Services.prefs.getBoolPref(launchOnLoginPref)) { - Glean.launchOnLogin.lastProfileDisableStartup.record(); - // Disable launch on login messaging if we are disabling the - // feature. - Services.prefs.setBoolPref( - "browser.startup.windowsLaunchOnLogin.disableLaunchOnLoginPrompt", - true - ); - } - // To reduce confusion when running multiple Gecko profiles, - // delete launch on login shortcuts and registry keys so that - // users are not presented with the outdated profile selector - // dialog. - lazy.WindowsLaunchOnLogin.removeLaunchOnLogin(); + if (AppConstants.platform == "win") { + lazy.StartupOSIntegration.checkForLaunchOnLogin(); } break; } @@ -904,7 +788,7 @@ BrowserGlue.prototype = { let makeWindowPrivate = cmdLine.findFlag("private-window", false) != -1 && - isPrivateBrowsingAllowedInRegistry(); + lazy.StartupOSIntegration.isPrivateBrowsingAllowedInRegistry(); if (!shouldCreateWindow(makeWindowPrivate)) { return; } @@ -1035,9 +919,8 @@ BrowserGlue.prototype = { lazy.DoHController.init(); - if (AppConstants.MOZ_SELECTABLE_PROFILES) { - lazy.SelectableProfileService.init().catch(console.error); - } + lazy.ProfilesDatastoreService.init().catch(console.error); + lazy.SelectableProfileService.init().catch(console.error); this._firstWindowTelemetry(aWindow); this._firstWindowLoaded(); @@ -1409,129 +1292,6 @@ BrowserGlue.prototype = { }, }, - { - name: "firefoxBridgeNativeMessaging", - condition: - (AppConstants.platform == "macosx" || - AppConstants.platform == "win") && - Services.prefs.getBoolPref("browser.firefoxbridge.enabled", false), - task: async () => { - let profileService = Cc[ - "@mozilla.org/toolkit/profile-service;1" - ].getService(Ci.nsIToolkitProfileService); - if ( - profileService.defaultProfile && - profileService.currentProfile == profileService.defaultProfile - ) { - await lazy.FirefoxBridgeExtensionUtils.ensureRegistered(); - } else { - lazy.log.debug( - "FirefoxBridgeExtensionUtils failed to register due to non-default current profile." - ); - } - }, - }, - - // Kick off an idle task that will silently pin Firefox to the start menu on - // first run when using MSIX on a new profile. - // If not first run, check if Firefox is no longer pinned to the Start Menu - // when it previously was and send telemetry. - { - name: "maybePinToStartMenuFirstRun", - condition: - AppConstants.platform === "win" && - Services.sysinfo.getProperty("hasWinPackageId"), - task: async () => { - if ( - lazy.BrowserHandler.firstRunProfile && - (await lazy.ShellService.doesAppNeedStartMenuPin()) - ) { - await lazy.ShellService.pinToStartMenu(); - return; - } - await lazy.ShellService.recordWasPreviouslyPinnedToStartMenu(); - }, - }, - - // Ensure a Private Browsing Shortcut exists. This is needed in case - // a user tries to use Windows functionality to pin our Private Browsing - // mode icon to the Taskbar (eg: the "Pin to Taskbar" context menu item). - // This is also created by the installer, but it's possible that a user - // has removed it, or is running out of a zip build. The consequences of not - // having a Shortcut for this are that regular Firefox will be pinned instead - // of the Private Browsing version -- so it's quite important we do our best - // to make sure one is available. - // See https://bugzilla.mozilla.org/show_bug.cgi?id=1762994 for additional - // background. - { - name: "ensurePrivateBrowsingShortcutExists", - condition: - AppConstants.platform == "win" && - Services.prefs.getBoolPref( - "browser.privateWindowSeparation.enabled", - true - ) && - // We don't want a shortcut if it's been disabled, eg: by enterprise policy. - lazy.PrivateBrowsingUtils.enabled && - // Private Browsing shortcuts for packaged builds come with the package, - // if they exist at all. We shouldn't try to create our own. - !Services.sysinfo.getProperty("hasWinPackageId") && - // If we've ever done this successfully before, don't try again. The - // user may have deleted the shortcut, and we don't want to force it - // on them. - !Services.prefs.getBoolPref( - PREF_PRIVATE_BROWSING_SHORTCUT_CREATED, - false - ), - task: async () => { - let shellService = Cc[ - "@mozilla.org/browser/shell-service;1" - ].getService(Ci.nsIWindowsShellService); - let winTaskbar = Cc["@mozilla.org/windows-taskbar;1"].getService( - Ci.nsIWinTaskbar - ); - - if ( - !(await shellService.hasPinnableShortcut( - winTaskbar.defaultPrivateGroupId, - true - )) - ) { - let appdir = Services.dirsvc.get("GreD", Ci.nsIFile); - let exe = appdir.clone(); - exe.append(PRIVATE_BROWSING_BINARY); - let strings = new Localization( - ["branding/brand.ftl", "browser/browser.ftl"], - true - ); - let [desc] = await strings.formatValues([ - "private-browsing-shortcut-text-2", - ]); - await shellService.createShortcut( - exe, - [], - desc, - exe, - // The code we're calling indexes from 0 instead of 1 - PRIVATE_BROWSING_EXE_ICON_INDEX - 1, - winTaskbar.defaultPrivateGroupId, - "Programs", - desc + ".lnk", - appdir - ); - } - // We always set this as long as no exception has been thrown. This - // ensure that it is `true` both if we created one because it didn't - // exist, or if it already existed (most likely because it was created - // by the installer). This avoids the need to call `hasPinnableShortcut` - // again, which necessarily does pointless I/O. - Services.prefs.setBoolPref( - PREF_PRIVATE_BROWSING_SHORTCUT_CREATED, - true - ); - }, - }, - { name: "BrowserGlue._maybeShowDefaultBrowserPrompt", task: () => { @@ -1740,6 +1500,15 @@ BrowserGlue.prototype = { }, }, + { + name: "Init hasSSD for SystemInfo", + condition: AppConstants.platform == "win", + // Initializes diskInfo to be able to get hasSSD which is part + // of the PageLoad event. Only runs on windows, since diskInfo + // is a no-op on other platforms + task: () => Services.sysinfo.diskInfo, + }, + { name: "browser-startup-idle-tasks-finished", task: () => { diff --git a/browser/components/DesktopActorRegistry.sys.mjs b/browser/components/DesktopActorRegistry.sys.mjs index bae9ba1d762..a41b96b065a 100644 --- a/browser/components/DesktopActorRegistry.sys.mjs +++ b/browser/components/DesktopActorRegistry.sys.mjs @@ -8,8 +8,6 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { BrowserWindowTracker: "resource:///modules/BrowserWindowTracker.sys.mjs", - SelectableProfileService: - "resource:///modules/profiles/SelectableProfileService.sys.mjs", }); /** @@ -597,29 +595,6 @@ let JSWINDOWACTORS = { }, matches: ["about:editprofile", "about:deleteprofile", "about:newprofile"], remoteTypes: ["privilegedabout"], - onAddActor(register, unregister) { - let registered = false; - - const maybeRegister = () => { - let isEnabled = lazy.SelectableProfileService.isEnabled; - - if (isEnabled && !registered) { - register(); - } else if (!isEnabled && registered) { - unregister(); - } - - registered = isEnabled; - }; - - // Defer all this logic until a little later in startup - Services.obs.addObserver(() => { - // Update when the pref changes - lazy.SelectableProfileService.on("enableChanged", maybeRegister); - - maybeRegister(); - }, "final-ui-startup"); - }, }, Prompt: { diff --git a/browser/components/aboutwelcome/content-src/aboutwelcome.scss b/browser/components/aboutwelcome/content-src/aboutwelcome.scss index 7a3fea5e4ef..7edb667d667 100644 --- a/browser/components/aboutwelcome/content-src/aboutwelcome.scss +++ b/browser/components/aboutwelcome/content-src/aboutwelcome.scss @@ -1114,6 +1114,30 @@ html { width: 30%; } } + + .message-text.hero-text { + margin-block: auto; + margin-inline: 17% auto; + text-align: start; + width: 100%; + max-width: 450px; + + h1 { + font-weight: 510; + font-size: 80px; + margin: 0; + width: 100%; + max-width: 100%; + } + + h2 { + font-size: 20px; + margin: 0; + margin-block-start: 24px; + font-weight: 510; + width: 100%; + } + } } .addons-picker-container { diff --git a/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx b/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx index 131d93f4f39..a4859a4019a 100644 --- a/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx +++ b/browser/components/aboutwelcome/content-src/components/MultiStageProtonScreen.jsx @@ -432,20 +432,59 @@ export class ProtonScreen extends React.PureComponent { {content.hero_image ? ( ) : ( - -
-
- -

- -
-
- + this.renderHeroText(content.hero_text) )}

); } + renderHeroText(hero_text) { + if (!hero_text) { + return null; + } + + // Check if hero_text is a string or an object with string_id property + // essentially checking if we're using old or new design + const isSimpleText = + typeof hero_text === "string" || + (typeof hero_text === "object" && + hero_text !== null && + "string_id" in hero_text); + + const HeroTextWrapper = ({ children, className = "" }) => ( + +
+
+ {children} +
+
+ + ); + + if (isSimpleText) { + return ( + + +

+ + + ); + } + + return ( + + +

+ + {hero_text.subtitle && ( + +

+ + )} + + ); + } + renderOrderedContent(content) { const elements = []; for (const item of content) { diff --git a/browser/components/aboutwelcome/content/aboutwelcome.bundle.js b/browser/components/aboutwelcome/content/aboutwelcome.bundle.js index fe8e3619179..9d740bb5487 100644 --- a/browser/components/aboutwelcome/content/aboutwelcome.bundle.js +++ b/browser/components/aboutwelcome/content/aboutwelcome.bundle.js @@ -1258,15 +1258,38 @@ class ProtonScreen extends (react__WEBPACK_IMPORTED_MODULE_0___default().PureCom role: "img" })), content.hero_image ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_HeroImage__WEBPACK_IMPORTED_MODULE_6__.HeroImage, { url: content.hero_image.url - }) : /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { - className: "message-text" + }) : this.renderHeroText(content.hero_text)); + } + renderHeroText(hero_text) { + if (!hero_text) { + return null; + } + + // Check if hero_text is a string or an object with string_id property + // essentially checking if we're using old or new design + const isSimpleText = typeof hero_text === "string" || typeof hero_text === "object" && hero_text !== null && "string_id" in hero_text; + const HeroTextWrapper = ({ + children, + className = "" + }) => /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement((react__WEBPACK_IMPORTED_MODULE_0___default().Fragment), null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { + className: `message-text ${className}` }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "spacer-top" - }), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__.Localized, { - text: content.hero_text - }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h1", null)), /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { + }), children, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("div", { className: "spacer-bottom" - })))); + }))); + if (isSimpleText) { + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HeroTextWrapper, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__.Localized, { + text: hero_text + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h1", null))); + } + return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(HeroTextWrapper, { + className: "hero-text" + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__.Localized, { + text: hero_text.title + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h1", null)), hero_text.subtitle && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement(_MSLocalized__WEBPACK_IMPORTED_MODULE_1__.Localized, { + text: hero_text.subtitle + }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createElement("h2", null))); } renderOrderedContent(content) { const elements = []; diff --git a/browser/components/aboutwelcome/content/aboutwelcome.css b/browser/components/aboutwelcome/content/aboutwelcome.css index 6037ebb199e..cffe710bb8e 100644 --- a/browser/components/aboutwelcome/content/aboutwelcome.css +++ b/browser/components/aboutwelcome/content/aboutwelcome.css @@ -2153,6 +2153,27 @@ html { .onboardingContainer .screen[pos=split][fullscreen] .section-secondary .hero-image img { width: 30%; } +.onboardingContainer .screen[pos=split][fullscreen] .section-secondary .message-text.hero-text { + margin-block: auto; + margin-inline: 17% auto; + text-align: start; + width: 100%; + max-width: 450px; +} +.onboardingContainer .screen[pos=split][fullscreen] .section-secondary .message-text.hero-text h1 { + font-weight: 510; + font-size: 80px; + margin: 0; + width: 100%; + max-width: 100%; +} +.onboardingContainer .screen[pos=split][fullscreen] .section-secondary .message-text.hero-text h2 { + font-size: 20px; + margin: 0; + margin-block-start: 24px; + font-weight: 510; + width: 100%; +} .onboardingContainer .screen[pos=split][fullscreen] .addons-picker-container { background: none; } diff --git a/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx b/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx index 09754e55f83..068f169b19c 100644 --- a/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx +++ b/browser/components/aboutwelcome/tests/unit/MultiStageAWProton.test.jsx @@ -108,6 +108,149 @@ describe("MultiStageAboutWelcomeProton module", () => { assert.equal(wrapper.find("main").prop("pos"), "center"); }); + it("should render simple hero text if hero_text is a string or object without string_id", () => { + // test simple hero text with hero_text string + const STRING_HERO_TEXT_PROPS = { + content: { + position: "split", + hero_text: "Simple hero text string", + }, + }; + + const wrapper = mount( + + ); + assert.ok(wrapper.exists()); + assert.equal( + wrapper.find(".section-secondary h1").text(), + "Simple hero text string" + ); + + // test with simple hero text with hero_text string_id + const STRING_ID_HERO_TEXT_PROPS = { + content: { + position: "split", + hero_text: { string_id: "hero-text-id" }, + }, + }; + const stringIdWrapper = mount( + + ); + assert.ok(stringIdWrapper.exists()); + assert.equal( + stringIdWrapper.find(".section-secondary h1").prop("data-l10n-id"), + "hero-text-id" + ); + + // test that we're not using the hero-text class + assert.isFalse( + wrapper.find(".section-secondary .hero-text").exists(), + "Simple hero text should not use hero-text class" + ); + }); + + it("should render complex hero text if hero text is an object with title property", () => { + const COMPLEX_HERO_TEXT_PROPS = { + content: { + position: "split", + hero_text: { + title: "Test title", + }, + }, + }; + const wrapper = mount( + + ); + assert.ok(wrapper.exists()); + + assert.isTrue( + wrapper.find(".section-secondary .hero-text").exists(), + "Text container should use hero-text class" + ); + + assert.equal( + wrapper.find(".section-secondary .hero-text h1").text(), + "Test title" + ); + + assert.isFalse( + wrapper.find(".section-secondary .hero-text h2").exists(), + "No subtitle should be rendered" + ); + }); + + it("should render hero text subtitle if both title and subtitle properties are present", () => { + const HERO_TEXT_WITH_SUBTITLE_PROPS = { + content: { + position: "split", + hero_text: { + title: "Title text", + subtitle: "Subtitle text", + }, + }, + }; + const wrapper = mount( + + ); + assert.ok(wrapper.exists()); + + assert.isTrue( + wrapper.find(".section-secondary .hero-text").exists(), + "Complex hero text should use hero-text class" + ); + + assert.equal( + wrapper.find(".section-secondary .hero-text h1").text(), + "Title text" + ); + + assert.isTrue( + wrapper.find(".section-secondary .hero-text h2").exists(), + "Subtitle should be rendered when provided" + ); + assert.equal( + wrapper.find(".section-secondary .hero-text h2").text(), + "Subtitle text" + ); + }); + + it("should render hero text title and subtitle with localization if string ids are present", () => { + const LOCALIZED_HERO_TEXT_PROPS = { + content: { + position: "split", + hero_text: { + title: { string_id: "hero-title-string-id" }, + subtitle: { string_id: "hero-subtitle-string-id" }, + }, + }, + }; + const wrapper = mount( + + ); + assert.ok(wrapper.exists()); + + assert.isTrue( + wrapper.find(".section-secondary .hero-text").exists(), + "Text container should use hero-text class" + ); + + const titleElement = wrapper.find(".section-secondary .hero-text h1"); + assert.isTrue(titleElement.exists(), "Title element should exist"); + assert.equal( + titleElement.prop("data-l10n-id"), + "hero-title-string-id", + "Title should have correct string ID for localization" + ); + + const subtitleElement = wrapper.find(".section-secondary .hero-text h2"); + assert.isTrue(subtitleElement.exists(), "Subtitle element should exist"); + assert.equal( + subtitleElement.prop("data-l10n-id"), + "hero-subtitle-string-id", + "Subtitle should have correct string ID for localization" + ); + }); + it("should not render multiple action buttons if an additional button does not exist", () => { const SCREEN_PROPS = { content: { diff --git a/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json b/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json index 493837d329c..a0f66e84b7b 100644 --- a/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json +++ b/browser/components/asrouter/content-src/schemas/MessagingExperiment.schema.json @@ -548,10 +548,11 @@ "properties": { "type": { "type": "string", - "description": "Should the message be global (persisted across tabs) or local (disappear when switching to a different tab).", + "description": "Specifies where the message should appear and persist: 'global' (persists across tabs in the current window), 'tab' (only visible in the current tab), or 'universal' (visible across all tabs and windows, current and future).", "enum": [ "global", - "tab" + "tab", + "universal" ] }, "text": { @@ -714,9 +715,29 @@ "type": "string", "description": "URL for image to use with the content." }, - "imageVerticalOffset": { + "imageWidth": { "type": "number", - "description": "The margin-block-start value to apply to the image in pixels." + "description": "The image width in pixels. Default is 120px." + }, + "imageVerticalTopOffset": { + "type": "number", + "description": "The margin-block-start value to apply to the image in pixels, used in 'column' layouts." + }, + "imageVerticalBottomOffset": { + "type": "number", + "description": "The margin-block-end value to apply to the image in pixels, used in 'row' layouts." + }, + "containerVerticalBottomOffset": { + "type": "number", + "description": "The container's margin-block-end value in pixels. Used to visually offset the image in 'row' layouts when 'imageVerticalBottomOffset' is applied." + }, + "layout": { + "type": "string", + "description": "The layout of the message content and illustration. Row displays the image to the inline to the right of the text, column displays the image above the text.", + "enum": [ + "row", + "column" + ] } } }, diff --git a/browser/components/asrouter/content-src/templates/CFR/templates/InfoBar.schema.json b/browser/components/asrouter/content-src/templates/CFR/templates/InfoBar.schema.json index c9eb3a8b14b..4006f7f34d4 100644 --- a/browser/components/asrouter/content-src/templates/CFR/templates/InfoBar.schema.json +++ b/browser/components/asrouter/content-src/templates/CFR/templates/InfoBar.schema.json @@ -11,8 +11,8 @@ "properties": { "type": { "type": "string", - "description": "Should the message be global (persisted across tabs) or local (disappear when switching to a different tab).", - "enum": ["global", "tab"] + "description": "Specifies where the message should appear and persist: 'global' (persists across tabs in the current window), 'tab' (only visible in the current tab), or 'universal' (visible across all tabs and windows, current and future).", + "enum": ["global", "tab", "universal"] }, "text": { "$ref": "file:///FxMSCommon.schema.json#/$defs/localizableText", diff --git a/browser/components/asrouter/content-src/templates/OnboardingMessage/MenuMessage.schema.json b/browser/components/asrouter/content-src/templates/OnboardingMessage/MenuMessage.schema.json index c45da496155..4cb9a2200ff 100644 --- a/browser/components/asrouter/content-src/templates/OnboardingMessage/MenuMessage.schema.json +++ b/browser/components/asrouter/content-src/templates/OnboardingMessage/MenuMessage.schema.json @@ -64,9 +64,26 @@ "type": "string", "description": "URL for image to use with the content." }, - "imageVerticalOffset": { + "imageWidth": { "type": "number", - "description": "The margin-block-start value to apply to the image in pixels." + "description": "The image width in pixels. Default is 120px." + }, + "imageVerticalTopOffset": { + "type": "number", + "description": "The margin-block-start value to apply to the image in pixels, used in 'column' layouts." + }, + "imageVerticalBottomOffset": { + "type": "number", + "description": "The margin-block-end value to apply to the image in pixels, used in 'row' layouts." + }, + "containerVerticalBottomOffset": { + "type": "number", + "description": "The container's margin-block-end value in pixels. Used to visually offset the image in 'row' layouts when 'imageVerticalBottomOffset' is applied." + }, + "layout": { + "type": "string", + "description": "The layout of the message content and illustration. Row displays the image to the inline to the right of the text, column displays the image above the text.", + "enum": ["row", "column"] } } }, diff --git a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.css b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.css index ce37bb54b1c..cfd08907769 100644 --- a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.css +++ b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.css @@ -5,7 +5,9 @@ :host { margin-inline: var(--arrowpanel-menuitem-margin-inline, var(--space-xsmall)); margin-block: var(--space-xsmall); - --illustration-margin-block-offset: 0px; + --illustration-margin-block-start-offset: 0px; + --illustration-margin-block-end-offset: 0px; + --container-margin-block-end-offset: 0px; } #container { @@ -20,26 +22,50 @@ color: var(--text-color); } +#container[layout="row"] { + margin-block-end: var(--container-margin-block-end-offset); +} + +#container[layout="row"] #bottom-row { + display: flex; + flex-direction: row; +} + +#container[layout="row"] #body-container { + flex: 1 1 0; + min-width: 0; +} + #close-button { position: absolute; top: 0; inset-inline-end: 0; - padding-block: var(--arrowpanel-menuitem-padding-block, var(--space-small)); - padding-inline: var(--arrowpanel-menuitem-padding-inline, var(--space-small)); } #container:not([has-image]) > #illustration-container { display: none; } -#container[has-image] > #illustration-container { +#container[has-image][layout="column"] > #illustration-container { display: flex; justify-content: center; - margin-block-start: var(--illustration-margin-block-offset); + margin-block-start: var(--illustration-margin-block-start-offset); margin-block-end: var(--space-xsmall); pointer-events: none; } +#container[has-image][layout="row"] #illustration-container { + display: flex; + align-items: flex-end; + justify-content: flex-end; + margin-block-end: var(--illustration-margin-block-end-offset); + pointer-events: none; +} + +#container[has-image] #illustration-container img{ + width: var(--image-width, 120px); +} + #primary { font-size: 1.154em; font-weight: var(--font-weight-bold); diff --git a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.mjs b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.mjs index bb2565bd2a0..dc009e06f34 100644 --- a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.mjs +++ b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.mjs @@ -21,6 +21,7 @@ export default class FxAMenuMessage extends MozLitElement { buttonText: { type: String }, primaryText: { type: String }, secondaryText: { type: String }, + layout: { type: String, reflect: true }, }; static queries = { signUpButton: "#sign-up-button", @@ -29,6 +30,7 @@ export default class FxAMenuMessage extends MozLitElement { constructor() { super(); + this.layout = "column"; // Default layout this.addEventListener( "keydown", event => { @@ -69,39 +71,86 @@ export default class FxAMenuMessage extends MozLitElement { }); } + get isRowLayout() { + return this.layout === "row"; + } + render() { - return html` - -
- - -
- -
-
${this.primaryText}
-
${this.secondaryText}
- ${this.buttonText} -
- `; +
+ ${this.isRowLayout + ? html` +
+ + +
${this.primaryText}
+
+
+
+
${this.secondaryText}
+ + ${this.buttonText} + +
+
+ +
+
+ ` + : html` + + +
+ +
+
${this.primaryText}
+
${this.secondaryText}
+ + ${this.buttonText} + + `} +
`; } } diff --git a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.stories.mjs b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.stories.mjs index 9294a2de20a..8ccb893f781 100644 --- a/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.stories.mjs +++ b/browser/components/asrouter/content/components/fxa-menu-message/fxa-menu-message.stories.mjs @@ -18,7 +18,11 @@ const Template = ({ imageURL, primaryText, secondaryText, - imageVerticalOffset, + imageVerticalTopOffset, + imageVerticalBottomOffset, + containerVerticalBottomOffset, + layout, + imageHeight, }) => html` @@ -40,5 +50,9 @@ Default.args = { primaryText: "Bounce between devices", secondaryText: "Sync and encrypt your bookmarks, passwords, and more on all your devices.", - imageVerticalOffset: -20, + imageVerticalTopOffset: -20, + imageVerticalBottomOffset: 0, + containerVerticalBottomOffset: 0, + layout: "column", + imageHeight: 120, }; diff --git a/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs b/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs index 7051afbe143..cabd7330296 100644 --- a/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs +++ b/browser/components/asrouter/modules/ASRouterTargeting.sys.mjs @@ -177,9 +177,9 @@ XPCOMUtils.defineLazyPreferenceGetter( ); XPCOMUtils.defineLazyPreferenceGetter( lazy, - "profileStoreID", - "toolkit.profiles.storeID", - null + "profilesCreated", + "browser.profiles.created", + false ); XPCOMUtils.defineLazyPreferenceGetter( lazy, @@ -616,7 +616,7 @@ const TargetingGetters = { return lazy.SelectableProfileService?.isEnabled ?? false; }, get hasSelectableProfiles() { - return !!lazy.profileStoreID; + return lazy.profilesCreated; }, get profileAgeCreated() { return lazy.ProfileAge().then(times => times.created); diff --git a/browser/components/asrouter/modules/InfoBar.sys.mjs b/browser/components/asrouter/modules/InfoBar.sys.mjs index d6d51f351f4..84b86e420b7 100644 --- a/browser/components/asrouter/modules/InfoBar.sys.mjs +++ b/browser/components/asrouter/modules/InfoBar.sys.mjs @@ -2,6 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +/* eslint-disable no-use-before-define */ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { @@ -11,6 +12,11 @@ ChromeUtils.defineESModuleGetters(lazy, { "resource://messaging-system/lib/SpecialMessageActions.sys.mjs", }); +const TYPES = { + UNIVERSAL: "universal", + GLOBAL: "global", +}; + class InfoBarNotification { constructor(message, dispatch) { this._dispatch = dispatch; @@ -31,7 +37,7 @@ class InfoBarNotification { let { gBrowser } = browser.ownerGlobal; let doc = gBrowser.ownerDocument; let notificationContainer; - if (content.type === "global") { + if ([TYPES.GLOBAL, TYPES.UNIVERSAL].includes(content.type)) { notificationContainer = browser.ownerGlobal.gNotificationBox; } else { notificationContainer = gBrowser.getNotificationBox(browser); @@ -51,8 +57,21 @@ class InfoBarNotification { false, content.dismissable ); + // If InfoBar is universal, only record an impression for the first + // instance. + if ( + content.type !== TYPES.UNIVERSAL || + !InfoBar._universalInfobars.length + ) { + this.addImpression(); + } - this.addImpression(); + if (content.type === TYPES.UNIVERSAL) { + InfoBar._universalInfobars.push({ + box: browser.ownerGlobal.gNotificationBox, + notification: this.notification, + }); + } } formatMessageConfig(doc, browser, content) { @@ -145,16 +164,36 @@ class InfoBarNotification { * Called when interacting with the toolbar (but not through the buttons) */ infobarCallback(eventType) { + const wasUniversal = + InfoBar._activeInfobar?.message.content.type === TYPES.UNIVERSAL; if (eventType === "removed") { this.notification = null; - // eslint-disable-next-line no-use-before-define InfoBar._activeInfobar = null; } else if (this.notification) { this.sendUserEventTelemetry("DISMISSED"); this.notification = null; - // eslint-disable-next-line no-use-before-define InfoBar._activeInfobar = null; } + // If one instance of universal infobar is removed, remove all instances and + // the new window observer + if (wasUniversal) { + this.removeUniversalInfobars(); + } + } + + removeUniversalInfobars() { + try { + Services.obs.removeObserver(InfoBar, "domwindowopened"); + } catch (error) { + console.error( + "Error removing domwindowopened observer on InfoBar:", + error + ); + } + InfoBar._universalInfobars.forEach(({ box, notification }) => { + box.removeNotification(notification); + }); + InfoBar._universalInfobars = []; } sendUserEventTelemetry(event) { @@ -171,6 +210,7 @@ class InfoBarNotification { export const InfoBar = { _activeInfobar: null, + _universalInfobars: [], maybeLoadCustomElement(win) { if (!win.customElements.get("remote-text")) { @@ -188,12 +228,22 @@ export const InfoBar = { ); }, - async showInfoBarMessage(browser, message, dispatch) { + async showNotificationAllWindows(notification) { + for (let win of Services.wm.getEnumerator(null)) { + const browser = win.gBrowser.selectedBrowser; + await notification.showNotification(browser); + } + }, + + async showInfoBarMessage(browser, message, dispatch, universalInNewWin) { // Prevent stacking multiple infobars - if (this._activeInfobar) { + if (this._activeInfobar && !universalInNewWin) { return null; } + // Check if this is the first instance of a universal infobar + const isFirstUniversal = + !universalInNewWin && message.content.type === TYPES.UNIVERSAL; const win = browser?.ownerGlobal; if (!win || lazy.PrivateBrowsingUtils.isWindowPrivate(win)) { @@ -204,9 +254,39 @@ export const InfoBar = { this.maybeInsertFTL(win); let notification = new InfoBarNotification(message, dispatch); - await notification.showNotification(browser); - this._activeInfobar = true; + if (isFirstUniversal) { + await this.showNotificationAllWindows(notification); + Services.obs.addObserver(this, "domwindowopened"); + } else { + await notification.showNotification(browser); + } + if (!universalInNewWin) { + this._activeInfobar = { message, dispatch }; + } return notification; }, + + observe(aSubject, aTopic) { + const { message, dispatch } = this._activeInfobar; + if ( + aTopic !== "domwindowopened" || + message?.content.type !== TYPES.UNIVERSAL + ) { + return; + } + if (aSubject.document.readyState === "complete") { + let browser = aSubject.gBrowser.selectedBrowser; + this.showInfoBarMessage(browser, message, dispatch, true); + } else { + aSubject.addEventListener( + "load", + () => { + let browser = aSubject.gBrowser.selectedBrowser; + this.showInfoBarMessage(browser, message, dispatch, true); + }, + { once: true } + ); + } + }, }; diff --git a/browser/components/asrouter/modules/MenuMessage.sys.mjs b/browser/components/asrouter/modules/MenuMessage.sys.mjs index 19e567c95ff..b91df993804 100644 --- a/browser/components/asrouter/modules/MenuMessage.sys.mjs +++ b/browser/components/asrouter/modules/MenuMessage.sys.mjs @@ -181,6 +181,7 @@ export const MenuMessage = { win.MozXULElement.insertFTLIfNeeded("browser/newtab/asrouter.ftl"); const msgElement = document.createElement("fxa-menu-message"); + msgElement.layout = message.content.layout ?? "column"; msgElement.imageURL = message.content.imageURL; msgElement.buttonText = await lazy.RemoteL10n.formatLocalizableText( message.content.primaryActionText @@ -192,9 +193,23 @@ export const MenuMessage = { message.content.secondaryText ); msgElement.dataset.navigableWithTabOnly = "true"; + if (message.content.imageWidth !== undefined) { + msgElement.style.setProperty( + "--image-width", + `${message.content.imageWidth}px` + ); + } msgElement.style.setProperty( - "--illustration-margin-block-offset", - `${message.content.imageVerticalOffset}px` + "--illustration-margin-block-start-offset", + `${message.content.imageVerticalTopOffset}px` + ); + msgElement.style.setProperty( + "--illustration-margin-block-end-offset", + `${message.content.imageVerticalBottomOffset}px` + ); + msgElement.style.setProperty( + "--container-margin-block-end-offset", + `${message.content.containerVerticalBottomOffset}px` ); msgElement.addEventListener("FxAMenuMessage:Close", () => { diff --git a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs index 7456e190767..3bb91a6fb7e 100644 --- a/browser/components/asrouter/modules/PanelTestProvider.sys.mjs +++ b/browser/components/asrouter/modules/PanelTestProvider.sys.mjs @@ -1534,7 +1534,7 @@ const MESSAGES = () => [ }, imageURL: "chrome://browser/content/asrouter/assets/fox-with-box-on-cloud.svg", - imageVerticalOffset: -20, + imageVerticalTopOffset: -20, }, skip_in_tests: "TODO", trigger: { diff --git a/browser/components/asrouter/tests/browser/browser.toml b/browser/components/asrouter/tests/browser/browser.toml index 48267bd2989..2a4ffeea7e2 100644 --- a/browser/components/asrouter/tests/browser/browser.toml +++ b/browser/components/asrouter/tests/browser/browser.toml @@ -45,6 +45,8 @@ tags = "remote-settings" tags = "remote-settings" skip-if = ["a11y_checks"] # Bug 1854515 and 1858041 to investigate intermittent a11y_checks results (fails on Autoland, passes on Try) +["browser_asrouter_universal_infobar.js"] + ["browser_bookmarks_bar_button.js"] ["browser_feature_callout.js"] diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_infobar.js b/browser/components/asrouter/tests/browser/browser_asrouter_infobar.js index e337e83f0b8..5e0c8563255 100644 --- a/browser/components/asrouter/tests/browser/browser_asrouter_infobar.js +++ b/browser/components/asrouter/tests/browser/browser_asrouter_infobar.js @@ -368,3 +368,28 @@ add_task(async function test_specialMessageAction_onLinkClick() { handleStub.restore(); }); + +add_task(async function test_showInfoBarMessage_skipsPrivateWindow() { + const { PrivateBrowsingUtils } = ChromeUtils.importESModule( + "resource://gre/modules/PrivateBrowsingUtils.sys.mjs" + ); + sinon.stub(PrivateBrowsingUtils, "isWindowPrivate").returns(true); + + let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser; + let dispatch = sinon.stub(); + + let result = await InfoBar.showInfoBarMessage( + browser, + { + id: "Private Win Test", + content: { type: "global", buttons: [], text: "t", dismissable: true }, + }, + dispatch + ); + + Assert.equal(result, null); + Assert.equal(dispatch.callCount, 0); + + // Cleanup + sinon.restore(); +}); diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_menu_messages.js b/browser/components/asrouter/tests/browser/browser_asrouter_menu_messages.js index 64d636eb3a1..ae45e951c96 100644 --- a/browser/components/asrouter/tests/browser/browser_asrouter_menu_messages.js +++ b/browser/components/asrouter/tests/browser/browser_asrouter_menu_messages.js @@ -122,10 +122,18 @@ async function assertMessageInMenuSource(source, message, win = window) { "The element should be configured for tab navigation." ); + Assert.equal( + messageEl.layout, + "column", + "The default layout should be 'column'." + ); + let messageElStyles = window.getComputedStyle(messageEl); Assert.equal( - messageElStyles.getPropertyValue("--illustration-margin-block-offset"), - `${message.content.imageVerticalOffset}px` + messageElStyles.getPropertyValue( + "--illustration-margin-block-start-offset" + ), + `${message.content.imageVerticalTopOffset}px` ); if (source === MenuMessage.SOURCES.APP_MENU) { diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js b/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js index aa1321ab0c4..31ada9c71f5 100644 --- a/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js +++ b/browser/components/asrouter/tests/browser/browser_asrouter_targeting.js @@ -221,6 +221,12 @@ add_task(async function check_canCreateSelectableProfiles() { return; } + // Reset profiles prefs + await pushPrefs( + ["browser.profiles.enabled", false], + ["browser.profiles.created", false] + ); + is( await ASRouterTargeting.Environment.canCreateSelectableProfiles, false, @@ -228,8 +234,13 @@ add_task(async function check_canCreateSelectableProfiles() { ); // We have to fake there being a real profile available and enable the profiles feature - await pushPrefs(["browser.profiles.enabled", "someValue"]); - await SelectableProfileService.resetProfileService({ currentProfile: {} }); + await pushPrefs( + ["browser.profiles.enabled", true], + ["browser.profiles.created", false] + ); + await ProfilesDatastoreService.resetProfileService({ currentProfile: {} }); + await SelectableProfileService.uninit(); + await SelectableProfileService.init(); is( await ASRouterTargeting.Environment.canCreateSelectableProfiles, @@ -244,7 +255,7 @@ add_task(async function check_canCreateSelectableProfiles() { "should select correct item by canCreateSelectableProfiles" ); - await SelectableProfileService.resetProfileService(null); + await ProfilesDatastoreService.resetProfileService(null); }); add_task(async function check_hasSelectableProfiles() { @@ -254,7 +265,7 @@ add_task(async function check_hasSelectableProfiles() { "should return false before the pref is set" ); - await pushPrefs(["toolkit.profiles.storeID", "someValue"]); + await pushPrefs(["browser.profiles.created", true]); is( await ASRouterTargeting.Environment.hasSelectableProfiles, true, diff --git a/browser/components/asrouter/tests/browser/browser_asrouter_universal_infobar.js b/browser/components/asrouter/tests/browser/browser_asrouter_universal_infobar.js new file mode 100644 index 00000000000..e053b5354ad --- /dev/null +++ b/browser/components/asrouter/tests/browser/browser_asrouter_universal_infobar.js @@ -0,0 +1,263 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const { InfoBar } = ChromeUtils.importESModule( + "resource:///modules/asrouter/InfoBar.sys.mjs" +); +const { CFRMessageProvider } = ChromeUtils.importESModule( + "resource:///modules/asrouter/CFRMessageProvider.sys.mjs" +); +const { ASRouter } = ChromeUtils.importESModule( + "resource:///modules/asrouter/ASRouter.sys.mjs" +); + +const UNIVERSAL_MESSAGE = { + id: "universal-infobar", + content: { + type: "universal", + text: "t", + buttons: [], + }, +}; + +const cleanupInfobars = () => { + InfoBar._universalInfobars = []; + InfoBar._activeInfobar = null; +}; + +add_task(async function showNotificationAllWindows() { + let fakeNotification = { showNotification: sinon.stub().resolves() }; + let fakeWins = [ + { gBrowser: { selectedBrowser: "win1" } }, + { gBrowser: { selectedBrowser: "win2" } }, + { gBrowser: { selectedBrowser: "win3" } }, + ]; + + let origWinManager = Services.wm; + // Using sinon.stub won’t work here, because Services.wm is a frozen, + // non-configurable object and its methods cannot be replaced via typical JS + // property assignment. + Object.defineProperty(Services, "wm", { + value: { getEnumerator: () => fakeWins[Symbol.iterator]() }, + configurable: true, + writable: true, + }); + + await InfoBar.showNotificationAllWindows(fakeNotification); + + Assert.equal(fakeNotification.showNotification.callCount, 3); + Assert.ok(fakeNotification.showNotification.calledWith("win1")); + Assert.ok(fakeNotification.showNotification.calledWith("win2")); + Assert.ok(fakeNotification.showNotification.calledWith("win3")); + + // Cleanup + cleanupInfobars(); + sinon.restore(); + Object.defineProperty(Services, "wm", { + value: origWinManager, + configurable: true, + writable: true, + }); +}); + +add_task(async function removeUniversalInfobars() { + let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser; + let origBox = browser.ownerGlobal.gNotificationBox; + browser.ownerGlobal.gNotificationBox = { + appendNotification: sinon.stub().resolves({}), + removeNotification: sinon.stub(), + }; + + sinon + .stub(InfoBar, "showNotificationAllWindows") + .callsFake(async notification => { + await notification.showNotification(browser); + }); + + let notification = await InfoBar.showInfoBarMessage( + browser, + UNIVERSAL_MESSAGE, + sinon.stub() + ); + + Assert.equal(InfoBar._universalInfobars.length, 1); + notification.removeUniversalInfobars(); + + Assert.ok( + browser.ownerGlobal.gNotificationBox.removeNotification.calledWith( + notification.notification + ) + ); + + Assert.deepEqual(InfoBar._universalInfobars, []); + + // Cleanup + cleanupInfobars(); + browser.ownerGlobal.gNotificationBox = origBox; + sinon.restore(); +}); + +add_task(async function initialUniversal_showsAllWindows_andSendsTelemetry() { + let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser; + let origBox = browser.ownerGlobal.gNotificationBox; + browser.ownerGlobal.gNotificationBox = { + appendNotification: sinon.stub().resolves({}), + removeNotification: sinon.stub(), + }; + + let showAll = sinon + .stub(InfoBar, "showNotificationAllWindows") + .callsFake(async notification => { + await notification.showNotification(browser); + }); + + let dispatch1 = sinon.stub(); + let dispatch2 = sinon.stub(); + + await InfoBar.showInfoBarMessage(browser, UNIVERSAL_MESSAGE, dispatch1); + await InfoBar.showInfoBarMessage(browser, UNIVERSAL_MESSAGE, dispatch2, true); + + Assert.ok(showAll.calledOnce); + Assert.equal(InfoBar._universalInfobars.length, 2); + + // Dispatch impression (as this is the first universal infobar) and telemetry + // ping + Assert.equal(dispatch1.callCount, 2); + + // Do not send telemetry for subsequent appearance of the message + Assert.equal(dispatch2.callCount, 0); + + // Cleanup + cleanupInfobars(); + browser.ownerGlobal.gNotificationBox = origBox; + sinon.restore(); + Services.obs.removeObserver(InfoBar, "domwindowopened"); +}); + +add_task(async function observe_domwindowopened_withLoadEvent() { + let stub = sinon.stub(InfoBar, "showInfoBarMessage").resolves(); + + InfoBar._activeInfobar = { + message: { content: { type: "universal" } }, + dispatch: sinon.stub(), + }; + + let subject = { + document: { readyState: "loading" }, + gBrowser: { selectedBrowser: "b" }, + addEventListener(event, cb) { + subject.document.readyState = "complete"; + cb(); + }, + }; + + InfoBar.observe(subject, "domwindowopened"); + + Assert.ok(stub.calledOnce); + // Called with universalInNewWin true + Assert.equal(stub.firstCall.args[3], true); + + // Cleanup + cleanupInfobars(); + sinon.restore(); +}); + +add_task(async function observe_domwindowopened() { + let stub = sinon.stub(InfoBar, "showInfoBarMessage").resolves(); + + InfoBar._activeInfobar = { + message: { content: { type: "universal" } }, + dispatch: sinon.stub(), + }; + + let win = BrowserWindowTracker.getTopWindow(); + InfoBar.observe(win, "domwindowopened"); + + Assert.ok(stub.calledOnce); + Assert.equal(stub.firstCall.args[3], true); + + // Cleanup + cleanupInfobars(); + sinon.restore(); +}); + +add_task(async function observe_skips_nonUniversal() { + let stub = sinon.stub(InfoBar, "showInfoBarMessage").resolves(); + InfoBar._activeInfobar = { + message: { content: { type: "global" } }, + dispatch: sinon.stub(), + }; + InfoBar.observe({}, "domwindowopened"); + Assert.ok(stub.notCalled); + + // Cleanup + cleanupInfobars(); + stub.restore(); +}); + +add_task(async function infobarCallback_dismissed_universal() { + const browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser; + const dispatch = sinon.stub(); + + sinon + .stub(InfoBar, "showNotificationAllWindows") + .callsFake(async notif => await notif.showNotification(browser)); + + let infobar = await InfoBar.showInfoBarMessage( + browser, + UNIVERSAL_MESSAGE, + dispatch + ); + // Reset the dispatch count to just watch for the DISMISSED ping + dispatch.reset(); + + infobar.infobarCallback("not‑removed‑event"); + + Assert.equal(dispatch.callCount, 1); + Assert.equal(dispatch.firstCall.args[0].data.event, "DISMISSED"); + Assert.deepEqual(InfoBar._universalInfobars, []); + + // Cleanup + cleanupInfobars(); + sinon.restore(); +}); + +add_task(async function removeObserver_on_removeUniversalInfobars() { + const sandbox = sinon.createSandbox(); + + sandbox.stub(InfoBar, "showNotificationAllWindows").resolves(); + + let browser = BrowserWindowTracker.getTopWindow().gBrowser.selectedBrowser; + let dispatch = sandbox.stub(); + + // Show the universal infobar so it registers the observer + let infobar = await InfoBar.showInfoBarMessage( + browser, + UNIVERSAL_MESSAGE, + dispatch + ); + Assert.ok(infobar, "Got an InfoBar notification"); + + // Swap out Services.obs so removeObserver is spyable + let origObs = Services.obs; + let removeSpy = sandbox.spy(); + Services.obs = { + addObserver: origObs.addObserver.bind(origObs), + removeObserver: removeSpy, + notifyObservers: origObs.notifyObservers.bind(origObs), + }; + + infobar.removeUniversalInfobars(); + + Assert.ok( + removeSpy.calledWith(InfoBar, "domwindowopened"), + "removeObserver was invoked for domwindowopened" + ); + + // Cleanup + Services.obs = origObs; + sandbox.restore(); + cleanupInfobars(); +}); diff --git a/browser/components/asrouter/tests/chrome/test_fxa_menu_message.html b/browser/components/asrouter/tests/chrome/test_fxa_menu_message.html index 89dc29fa98e..ba446638b42 100644 --- a/browser/components/asrouter/tests/chrome/test_fxa_menu_message.html +++ b/browser/components/asrouter/tests/chrome/test_fxa_menu_message.html @@ -19,7 +19,7 @@ * Tests that the exposed properties of the component are reflected * as expected in the shadow DOM. */ - add_task(async function test_properties() { + add_task(async function test_exposed_properties() { let message = document.createElement("fxa-menu-message"); const TEST_IMAGE_URL = "chrome://activity-stream/content/data/content/assets/fox-doodle-waving-static.png"; message.imageURL = TEST_IMAGE_URL; @@ -39,7 +39,7 @@ is(image.src, TEST_IMAGE_URL, "The img element got the expected URL"); let button = shadow.querySelector("#sign-up-button"); - is(button.textContent, TEST_BUTTON_TEXT, "The sign-up button got the right text."); + is(button.textContent.trim(), TEST_BUTTON_TEXT, "The sign-up button got the right text."); let primaryText = shadow.querySelector("#primary"); is(primaryText.textContent, PRIMARY_TEXT, "The primary text was correct."); @@ -47,6 +47,14 @@ let secondaryText = shadow.querySelector("#secondary"); is(secondaryText.textContent, SECONDARY_TEXT, "The secondary text was correct."); + let container = shadow.querySelector("#container"); + is(container.getAttribute("layout"), "column", "The layout should default to 'column' when no layout is explicitly set."); + + const TEST_ROW_LAYOUT = "row"; + message.layout = TEST_ROW_LAYOUT + await message.updateComplete; + is(container.getAttribute("layout"), TEST_ROW_LAYOUT, "The layout attribute should update to 'row' when set."); + message.remove(); }); @@ -54,7 +62,7 @@ * Tests that the buttons exposed by the component emit the expected * events. */ - add_task(async function test_properties() { + add_task(async function test_button_properties() { let message = document.createElement("fxa-menu-message"); const TEST_BUTTON_TEXT = "Howdy, partner! Sign up!"; message.buttonText = TEST_BUTTON_TEXT; @@ -84,7 +92,7 @@ * Tests that the sign-up button is focused by default, and that focus * can be changed via the keyboard. */ - add_task(async function test_focus() { + add_task(async function test_signup_focus() { let message = document.createElement("fxa-menu-message"); const TEST_BUTTON_TEXT = "Howdy, partner! Sign up!"; message.buttonText = TEST_BUTTON_TEXT; @@ -125,7 +133,7 @@ * Tests that setting no imageURL makes it so that the image element is * not visible, and setting one makes it visible. */ - add_task(async function test_focus() { + add_task(async function test_image_visibility() { let message = document.createElement("fxa-menu-message"); const TEST_BUTTON_TEXT = "Howdy, partner! Sign up!"; message.buttonText = TEST_BUTTON_TEXT; @@ -144,35 +152,95 @@ message.remove(); }); + async function testIllustrationOffset({ + layout, + offsetVar, + cssProperty, + checkContainerOffset = false, + }) { + const TEST_DEFAULT_VALUE = "0px"; + const TEST_CONTAINER_OFFSET = "10px"; + const TEST_ILLUSTRATION_OFFSET = "123px"; + const TEST_IMAGE_URL = + "chrome://activity-stream/content/data/content/assets/fox-doodle-waving-static.png"; + + let message = document.createElement("fxa-menu-message"); + message.imageURL = TEST_IMAGE_URL; + if (layout) { + message.layout = layout; + } + + document.getElementById("content").appendChild(message); + await message.updateComplete; + + let illustrationContainer = message.shadowRoot.querySelector( + "#illustration-container" + ); + ok( + !isHidden(illustrationContainer), + "Illustration container should not be hidden." + ); + + let computedStyle = window.getComputedStyle(illustrationContainer); + is( + computedStyle[cssProperty], + TEST_DEFAULT_VALUE, + "Illustration offset should default to 0px" + ); + + message.style.setProperty(offsetVar, TEST_ILLUSTRATION_OFFSET); + computedStyle = window.getComputedStyle(illustrationContainer); + is( + computedStyle[cssProperty], + TEST_ILLUSTRATION_OFFSET, + "Illustration offset should have been forwarded to the container." + ); + + if (checkContainerOffset) { + const container = message.shadowRoot.querySelector("#container"); + let containerStyle = window.getComputedStyle(container); + is( + containerStyle.marginBlockEnd, + TEST_DEFAULT_VALUE, + "Container offset should default to 0px." + ); + message.style.setProperty( + "--container-margin-block-end-offset", + TEST_CONTAINER_OFFSET + ); + containerStyle = window.getComputedStyle(container); + is( + containerStyle.marginBlockEnd, + TEST_CONTAINER_OFFSET, + "Container offset should have been applied." + ); + } + message.remove(); + } + /** - * Tests that setting the --illustration-margin-block-offset forwards that - * offset to the illustration container. + * Tests that setting the --illustration-margin-block-start-offset forwards that + * offset to the illustration container for 'column' layout. */ - add_task(async function test_focus() { - let message = document.createElement("fxa-menu-message"); - const TEST_IMAGE_URL = "chrome://activity-stream/content/data/content/assets/fox-doodle-waving-static.png"; - message.imageURL = TEST_IMAGE_URL; + add_task(async function test_column_layout_illustration_offset() { + await testIllustrationOffset({ + layout: null, + offsetVar: "--illustration-margin-block-start-offset", + cssProperty: "marginBlockStart", + }); + }); - let content = document.getElementById("content"); - content.appendChild(message); - - await message.updateComplete; - - let illustrationContainer = message.shadowRoot.querySelector("#illustration-container"); - ok(!isHidden(illustrationContainer), "Illustration container should not be hidden."); - let messageStyle = window.getComputedStyle(illustrationContainer); - is(messageStyle.marginBlockStart, "0px", "Illustration offset should default to 0px."); - - const TEST_OFFSET = "123px"; - message.style.setProperty("--illustration-margin-block-offset", TEST_OFFSET); - messageStyle = window.getComputedStyle(illustrationContainer); - is( - messageStyle.marginBlockStart, - TEST_OFFSET, - "Illustration offset should have been forwarded to the container." - ); - - message.remove(); + /** + * Tests that setting the --illustration-margin-block-end-offset forwards that + * offset to the illustration container for 'row' layout. + */ + add_task(async function test_row_layout_illustration_offset() { + await testIllustrationOffset({ + layout: "row", + offsetVar: "--illustration-margin-block-end-offset", + cssProperty: "marginBlockEnd", + checkContainerOffset: true, + }); }); diff --git a/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs b/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs index 5a81cad0b27..96fc7d2de08 100644 --- a/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs +++ b/browser/components/contentanalysis/content/ContentAnalysis.sys.mjs @@ -16,13 +16,7 @@ import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; const lazy = {}; - -XPCOMUtils.defineLazyServiceGetter( - lazy, - "gContentAnalysis", - "@mozilla.org/contentanalysis;1", - Ci.nsIContentAnalysis -); +let internalContentAnalysisService = undefined; ChromeUtils.defineESModuleGetters(lazy, { clearTimeout: "resource://gre/modules/Timer.sys.mjs", @@ -114,6 +108,41 @@ export const ContentAnalysis = { */ warnDialogRequestTokens: new Set(), + /** + * The nsIContentAnalysis to use instead of lazy.gContentAnalysis. Should + * only be used for tests. + * + * @type {nsIContentAnalysis?} + */ + mockContentAnalysisForTest: undefined, + + /** + * The nsIContentAnalysis to use. Nothing else in this file should + * use lazy.gContentAnalysis. + * + * @returns {nsIContentAnalysis} + */ + get contentAnalysis() { + if (this.mockContentAnalysisForTest) { + return this.mockContentAnalysisForTest; + } + if (!internalContentAnalysisService) { + internalContentAnalysisService = Cc[ + "@mozilla.org/contentanalysis;1" + ].getService(Ci.nsIContentAnalysis); + } + return internalContentAnalysisService; + }, + + /** + * Sets the nsIContentAnalysis to use. Should only be used for tests. + * + * @param {nsIContentAnalysis?} contentAnalysis + */ + setMockContentAnalysisForTest(contentAnalysis) { + this.mockContentAnalysisForTest = contentAnalysis; + }, + /** * Registers for various messages/events that will indicate the * need for communicating something to the user. @@ -121,13 +150,14 @@ export const ContentAnalysis = { * @param {Window} window - The window to monitor */ initialize(window) { - if (!lazy.gContentAnalysis.isActive) { + if (!this.contentAnalysis.isActive) { + this.uninitialize(); return; } let doc = window.document; if (!this.isInitialized) { this.isInitialized = true; - this.initializeDownloadCA(); + this.initializeObservers(); ChromeUtils.defineLazyGetter(this, "l10n", function () { return new Localization( @@ -153,13 +183,15 @@ export const ContentAnalysis = { if (this.isInitialized) { this.isInitialized = false; this.requestTokenToRequestInfo.clear(); + this.userActionToBusyDialogMap.clear(); + this.uninitializeObservers(); } }, /** - * Register UI for file download CA events. + * Register UI for CA events. */ - async initializeDownloadCA() { + initializeObservers() { Services.obs.addObserver(this, "dlp-request-made"); Services.obs.addObserver(this, "dlp-response"); Services.obs.addObserver(this, "quit-application"); @@ -167,6 +199,17 @@ export const ContentAnalysis = { Services.obs.addObserver(this, "quit-application-requested"); }, + /** + * Unregister UI for CA events. + */ + uninitializeObservers() { + Services.obs.removeObserver(this, "dlp-request-made"); + Services.obs.removeObserver(this, "dlp-response"); + Services.obs.removeObserver(this, "quit-application"); + Services.obs.removeObserver(this, "quit-application-granted"); + Services.obs.removeObserver(this, "quit-application-requested"); + }, + // nsIObserver async observe(aSubj, aTopic, _aData) { switch (aTopic) { @@ -216,7 +259,7 @@ export const ContentAnalysis = { // DLP requests, but the "DLP busy" or "DLP blocked" dialog can block the // main thread, thus preventing the "quit-application" from being sent, // which causes a shutdownhang. (bug 1899703) - lazy.gContentAnalysis.cancelAllRequests(true); + this.contentAnalysis.cancelAllRequests(true); } break; } @@ -230,7 +273,7 @@ export const ContentAnalysis = { // to call respondToWarnDialog() again. this.warnDialogRequestTokens = new Set(); for (let warnDialogRequestToken of requestTokensToCancel) { - lazy.gContentAnalysis.respondToWarnDialog( + this.contentAnalysis.respondToWarnDialog( warnDialogRequestToken, false ); @@ -717,12 +760,15 @@ export const ContentAnalysis = { // the dialog, no need to log the exception. }) .finally(() => { - // This is also be called if the tab/window is closed while a request is in progress, - // in which case we need to cancel the request. + // This is also called if the tab/window is closed while a request is + // in progress, in which case we need to cancel all related requests. if (this.requestTokenToRequestInfo.delete(aRequestToken)) { + // TODO: Is this useful? I think no. this._removeSlowCAMessage(aUserActionId, aRequestToken); - lazy.gContentAnalysis.cancelRequestsByRequestToken(aRequestToken); } + this.contentAnalysis.cancelAllRequestsAssociatedWithUserAction( + aUserActionId + ); }); return { dialogBrowsingContext: aBrowsingContext, @@ -807,7 +853,7 @@ export const ContentAnalysis = { // to the request already, so don't call respondToWarnDialog() // if aRequestToken is not in warnDialogRequestTokens. if (this.warnDialogRequestTokens.delete(aRequestToken)) { - lazy.gContentAnalysis.respondToWarnDialog(aRequestToken, allow); + this.contentAnalysis.respondToWarnDialog(aRequestToken, allow); } return null; } @@ -831,7 +877,7 @@ export const ContentAnalysis = { case Ci.nsIContentAnalysisRequest.eClipboard: { // Unlike the cases below, this can be shown when the DLP // agent is not available. We use a different message for that. - const caInfo = await lazy.gContentAnalysis.getDiagnosticInfo(); + const caInfo = await this.contentAnalysis.getDiagnosticInfo(); titleId = "contentanalysis-block-dialog-title-clipboard"; bodyId = caInfo.connectedToAgent ? "contentanalysis-block-dialog-body-clipboard" @@ -980,7 +1026,7 @@ export const ContentAnalysis = { * @param {ResourceNameOrOperationType} aResourceNameOrOperationType */ async _warnDialogText(aResourceNameOrOperationType) { - const caInfo = await lazy.gContentAnalysis.getDiagnosticInfo(); + const caInfo = await this.contentAnalysis.getDiagnosticInfo(); if (caInfo.connectedToAgent) { return await this.l10n.formatValue("contentanalysis-warndialogtext", { content: this._getResourceNameFromNameOrOperationType( diff --git a/browser/components/customizableui/content/panelUI.inc.xhtml b/browser/components/customizableui/content/panelUI.inc.xhtml index bb3f09f83a7..b34ce3d4880 100644 --- a/browser/components/customizableui/content/panelUI.inc.xhtml +++ b/browser/components/customizableui/content/panelUI.inc.xhtml @@ -199,6 +199,21 @@ + + (color === "grey" ? "gray" : color); + +this.tabGroups = class extends ExtensionAPIPersistent { + queryGroups({ collapsed, color, title, windowId } = {}) { + color = spellColour(color); + let glob = title != null && new MatchGlob(title); + let window = + windowId != null && windowTracker.getWindow(windowId, null, false); + return windowTracker + .browserWindows() + .filter( + win => + this.extension.canAccessWindow(win) && + (windowId == null || win === window) + ) + .flatMap(win => win.gBrowser.tabGroups) + .filter( + group => + (collapsed == null || group.collapsed === collapsed) && + (color == null || group.color === color) && + (title == null || glob.matches(group.name)) + ); + } + + get(groupId) { + let gid = getInternalTabGroupIdForExtTabGroupId(groupId); + if (!gid) { + throw new ExtensionError(`No group with id: ${groupId}`); + } + for (let group of this.queryGroups()) { + if (group.id === gid) { + return group; + } + } + throw new ExtensionError(`No group with id: ${groupId}`); + } + + convert(group) { + return { + collapsed: !!group.collapsed, + /** Internally we use "gray", but Chrome uses "grey" @see spellColour. */ + color: group.color === "gray" ? "grey" : group.color, + id: getExtTabGroupIdForInternalTabGroupId(group.id), + title: group.name, + windowId: windowTracker.getId(group.ownerGlobal), + }; + } + + PERSISTENT_EVENTS = { + onCreated({ fire }) { + let onCreate = event => { + if (event.detail.isAdoptingGroup) { + // Tab group moved from a different window. + return; + } + fire.async(this.convert(event.originalTarget)); + }; + windowTracker.addListener("TabGroupCreate", onCreate); + return { + unregister() { + windowTracker.removeListener("TabGroupCreate", onCreate); + }, + convert(_fire) { + fire = _fire; + }, + }; + }, + onMoved({ fire }) { + let onMove = event => { + fire.async(this.convert(event.originalTarget)); + }; + let onCreate = event => { + if (event.detail.isAdoptingGroup) { + // Tab group moved from a different window. + fire.async(this.convert(event.originalTarget)); + } + }; + windowTracker.addListener("TabGroupMoved", onMove); + windowTracker.addListener("TabGroupCreate", onCreate); + return { + unregister() { + windowTracker.removeListener("TabGroupMoved", onMove); + windowTracker.removeListener("TabGroupCreate", onCreate); + }, + convert(_fire) { + fire = _fire; + }, + }; + }, + onRemoved({ fire }) { + let onRemove = event => { + if (event.originalTarget.removedByAdoption) { + // Tab group moved to a different window. + return; + } + fire.async(this.convert(event.originalTarget)); + }; + windowTracker.addListener("TabGroupRemoved", onRemove); + return { + unregister() { + windowTracker.removeListener("TabGroupRemoved", onRemove); + }, + convert(_fire) { + fire = _fire; + }, + }; + }, + onUpdated({ fire }) { + let onUpdate = event => { + fire.async(this.convert(event.originalTarget)); + }; + windowTracker.addListener("TabGroupCollapse", onUpdate); + windowTracker.addListener("TabGroupExpand", onUpdate); + windowTracker.addListener("TabGroupUpdate", onUpdate); + return { + unregister() { + windowTracker.removeListener("TabGroupCollapse", onUpdate); + windowTracker.removeListener("TabGroupExpand", onUpdate); + windowTracker.removeListener("TabGroupUpdate", onUpdate); + }, + convert(_fire) { + fire = _fire; + }, + }; + }, + }; + + getAPI(context) { + const { windowManager } = this.extension; + return { + tabGroups: { + get: groupId => { + return this.convert(this.get(groupId)); + }, + + move: (groupId, { index, windowId }) => { + let group = this.get(groupId); + let win = group.ownerGlobal; + + if (windowId != null) { + win = windowTracker.getWindow(windowId, context); + if ( + PrivateBrowsingUtils.isWindowPrivate(group.ownerGlobal) !== + PrivateBrowsingUtils.isWindowPrivate(win) + ) { + throw new ExtensionError( + "Can't move groups between private and non-private windows" + ); + } + if (windowManager.getWrapper(win).type !== "normal") { + throw new ExtensionError( + "Groups can only be moved to normal windows." + ); + } + } + + if (win !== group.ownerGlobal) { + let last = win.gBrowser.tabContainer.ariaFocusableItems.length + 1; + let elementIndex = index === -1 ? last : Math.min(index, last); + group = win.gBrowser.adoptTabGroup(group, elementIndex); + } else if (index >= 0 && index < win.gBrowser.tabs.length) { + win.gBrowser.moveTabTo(group, { tabIndex: index }); + } else if (win.gBrowser.tabs.at(-1) !== group.tabs.at(-1)) { + win.gBrowser.moveTabAfter(group, win.gBrowser.tabs.at(-1)); + } + return this.convert(group); + }, + + query: query => { + return Array.from(this.queryGroups(query ?? {}), group => + this.convert(group) + ); + }, + + update: (groupId, { collapsed, color, title }) => { + let group = this.get(groupId); + if (collapsed != null) { + group.collapsed = collapsed; + } + if (color != null) { + group.color = spellColour(color); + } + if (title != null) { + group.name = title; + } + return this.convert(group); + }, + + onCreated: new EventManager({ + context, + module: "tabGroups", + event: "onCreated", + extensionApi: this, + }).api(), + + onMoved: new EventManager({ + context, + module: "tabGroups", + event: "onMoved", + extensionApi: this, + }).api(), + + onRemoved: new EventManager({ + context, + module: "tabGroups", + event: "onRemoved", + extensionApi: this, + }).api(), + + onUpdated: new EventManager({ + context, + module: "tabGroups", + event: "onUpdated", + extensionApi: this, + }).api(), + }, + }; + } +}; diff --git a/browser/components/extensions/parent/ext-tabs.js b/browser/components/extensions/parent/ext-tabs.js index 517ea0079c1..be2d86cef47 100644 --- a/browser/components/extensions/parent/ext-tabs.js +++ b/browser/components/extensions/parent/ext-tabs.js @@ -267,11 +267,15 @@ this.tabs = class extends ExtensionAPIPersistent { let moveListener = event => { let nativeTab = event.originalTarget; let { previousTabState, currentTabState } = event.detail; - if (tabManager.canAccessTab(nativeTab)) { + let fromIndex = previousTabState.tabIndex; + let toIndex = currentTabState.tabIndex; + // TabMove also fires if its tab group changes; we should only fire + // event if the position actually moved. + if (fromIndex !== toIndex && tabManager.canAccessTab(nativeTab)) { fire.async(tabTracker.getId(nativeTab), { windowId: windowTracker.getId(nativeTab.ownerGlobal), - fromIndex: previousTabState.tabIndex, - toIndex: currentTabState.tabIndex, + fromIndex, + toIndex, }); } }; diff --git a/browser/components/extensions/schemas/jar.mn b/browser/components/extensions/schemas/jar.mn index 0950cdf5182..12428cda261 100644 --- a/browser/components/extensions/schemas/jar.mn +++ b/browser/components/extensions/schemas/jar.mn @@ -20,6 +20,7 @@ browser.jar: content/browser/schemas/search.json content/browser/schemas/sessions.json content/browser/schemas/sidebar_action.json + content/browser/schemas/tabGroups.json content/browser/schemas/tabs.json content/browser/schemas/top_sites.json content/browser/schemas/url_overrides.json diff --git a/browser/components/extensions/schemas/tabGroups.json b/browser/components/extensions/schemas/tabGroups.json new file mode 100644 index 00000000000..81439e21969 --- /dev/null +++ b/browser/components/extensions/schemas/tabGroups.json @@ -0,0 +1,231 @@ +[ + { + "namespace": "manifest", + "types": [ + { + "$extend": "OptionalPermissionNoPrompt", + "choices": [ + { + "type": "string", + "enum": ["tabGroups"] + } + ] + } + ] + }, + { + "namespace": "tabGroups", + "description": "Use the browser.tabGroups API to interact with the browser's tab grouping system. You can use this API to modify, and rearrange tab groups.", + "permissions": ["tabGroups"], + "types": [ + { + "id": "Color", + "type": "string", + "description": "The group's color, using 'grey' spelling for compatibility with Chromium.", + "enum": [ + "blue", + "cyan", + "grey", + "green", + "orange", + "pink", + "purple", + "red", + "yellow" + ] + }, + { + "id": "TabGroup", + "type": "object", + "description": "State of a tab group inside of an open window.", + "properties": { + "collapsed": { + "type": "boolean", + "description": "Whether the tab group is collapsed or expanded in the tab strip." + }, + "color": { + "$ref": "Color", + "description": "User-selected color name for the tab group's label/icons." + }, + "id": { + "type": "integer", + "description": "Unique ID of the tab group." + }, + "title": { + "type": "string", + "optional": true, + "description": "User-defined name of the tab group." + }, + "windowId": { + "type": "integer", + "description": "Window that the tab group is in." + } + } + } + ], + "properties": { + "TAB_GROUP_ID_NONE": { + "value": -1, + "description": "An ID that represents the absence of a group." + } + }, + "functions": [ + { + "name": "get", + "type": "function", + "description": "Retrieves details about the specified group.", + "async": "callback", + "parameters": [ + { + "type": "integer", + "name": "groupId", + "minimum": 0 + }, + { + "type": "function", + "name": "callback", + "parameters": [{ "name": "group", "$ref": "TabGroup" }] + } + ] + }, + { + "name": "move", + "type": "function", + "description": "Move a group within, or to another window.", + "async": "callback", + "parameters": [ + { + "type": "integer", + "name": "groupId", + "minimum": 0 + }, + { + "type": "object", + "name": "moveProperties", + "properties": { + "index": { + "type": "integer", + "minimum": -1 + }, + "windowId": { + "type": "integer", + "optional": true, + "minimum": 0 + } + } + }, + { + "type": "function", + "name": "callback", + "parameters": [{ "name": "group", "$ref": "TabGroup" }] + } + ] + }, + { + "name": "query", + "type": "function", + "description": "Return all grups, or find groups with specified properties.", + "async": "callback", + "parameters": [ + { + "type": "object", + "name": "queryInfo", + "optional": true, + "properties": { + "collapsed": { + "type": "boolean", + "optional": true + }, + "color": { + "$ref": "Color", + "optional": true + }, + "title": { + "type": "string", + "optional": true + }, + "windowId": { + "type": "integer", + "optional": true, + "minimum": -2 + } + } + }, + { + "type": "function", + "name": "callback", + "parameters": [ + { + "name": "groups", + "type": "array", + "items": { "$ref": "TabGroup" } + } + ] + } + ] + }, + { + "name": "update", + "type": "function", + "description": "Modifies state of a specified group.", + "async": "callback", + "parameters": [ + { + "type": "integer", + "name": "groupId", + "minimum": 0 + }, + { + "type": "object", + "name": "updateProperties", + "properties": { + "collapsed": { + "type": "boolean", + "optional": true + }, + "color": { + "$ref": "Color", + "optional": true + }, + "title": { + "type": "string", + "optional": true + } + } + }, + { + "type": "function", + "name": "callback", + "parameters": [{ "name": "group", "$ref": "TabGroup" }] + } + ] + } + ], + "events": [ + { + "name": "onCreated", + "type": "function", + "description": "Fired when a tab group is created.", + "parameters": [{ "$ref": "TabGroup", "name": "group" }] + }, + { + "name": "onMoved", + "type": "function", + "description": "Fired when a tab group is moved, within a window or to another window.", + "parameters": [{ "$ref": "TabGroup", "name": "group" }] + }, + { + "name": "onRemoved", + "type": "function", + "description": "Fired when a tab group is removed.", + "parameters": [{ "$ref": "TabGroup", "name": "group" }] + }, + { + "name": "onUpdated", + "type": "function", + "description": "Fired when a tab group is updated.", + "parameters": [{ "$ref": "TabGroup", "name": "group" }] + } + ] + } +] diff --git a/browser/components/extensions/test/browser/browser.toml b/browser/components/extensions/test/browser/browser.toml index a36f38c8f7f..666439e6253 100644 --- a/browser/components/extensions/test/browser/browser.toml +++ b/browser/components/extensions/test/browser/browser.toml @@ -481,6 +481,14 @@ skip-if = ["true"] # Bug 1575369 ["browser_ext_slow_script.js"] https_first_disabled = true +["browser_ext_tabGroups.js"] + +["browser_ext_tabGroups_move_event_order.js"] + +["browser_ext_tabGroups_move_onMoved.js"] + +["browser_ext_tabGroups_query.js"] + ["browser_ext_tab_runtimeConnect.js"] ["browser_ext_tabs_attention.js"] @@ -546,6 +554,8 @@ https_first_disabled = true ["browser_ext_tabs_group_ungroup.js"] +["browser_ext_tabs_group_windowId.js"] + ["browser_ext_tabs_hide.js"] https_first_disabled = true diff --git a/browser/components/extensions/test/browser/browser_ext_tabGroups.js b/browser/components/extensions/test/browser/browser_ext_tabGroups.js new file mode 100644 index 00000000000..ca2634b41a8 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabGroups.js @@ -0,0 +1,211 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +const { + Management: { + global: { getExtTabGroupIdForInternalTabGroupId }, + }, +} = ChromeUtils.importESModule("resource://gre/modules/Extension.sys.mjs"); + +add_task(async function tabsGroups_get_private() { + async function loadExt(allowPrivate) { + let ext = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + incognitoOverride: allowPrivate ? "spanning" : undefined, + background() { + browser.test.onMessage.addListener(async groupId => { + try { + let group = await browser.tabGroups.get(groupId); + + let color = browser.tabGroups.Color[group.color.toUpperCase()]; + browser.test.assertEq(group.color, color, "A known colour."); + + browser.test.sendMessage("group", group); + } catch (e) { + browser.test.sendMessage("error", e.message); + } + }); + }, + }); + await ext.startup(); + return ext; + } + + let url = "https://example.com/?"; + let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, url); + let group1 = gBrowser.addTabGroup([tab1]); + let gid1 = getExtTabGroupIdForInternalTabGroupId(group1.id); + + let win2 = await BrowserTestUtils.openNewBrowserWindow({ private: true }); + let tab2 = await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, url); + let group2 = win2.gBrowser.addTabGroup([tab2]); + let gid2 = getExtTabGroupIdForInternalTabGroupId(group2.id); + + function compare(group, ext, info) { + is(group.collapsed, ext.collapsed, `Collapsed ok - ${info}`); + is(group.name, ext.title, `Title ok - ${info}`); + is(group.color.replace(/^gray$/, "grey"), ext.color, `Color ok - ${info}`); + } + + info("Testing extension without private browsing access."); + let ext1 = await loadExt(false); + + ext1.sendMessage(gid1); + let g1 = await ext1.awaitMessage("group"); + compare(group1, g1, "Ext 1 / group 1."); + + ext1.sendMessage(gid2); + let e2 = await ext1.awaitMessage("error"); + is(e2, `No group with id: ${gid2}`, "Expected error."); + await ext1.unload(); + + info("Testing extension with private browsing access."); + let ext2 = await loadExt(true); + + ext2.sendMessage(gid1); + g1 = await ext2.awaitMessage("group"); + compare(group1, g1, "Ext 2 / group 1."); + + ext2.sendMessage(gid1); + let g2 = await ext2.awaitMessage("group"); + compare(group1, g2, "Ext 2 / group 2."); + + await ext2.unload(); + BrowserTestUtils.removeTab(tab1); + await BrowserTestUtils.closeWindow(win2); +}); + +add_task(async function tabsGroups_update_onUpdated() { + let url = "https://example.com/?"; + let tab1 = await BrowserTestUtils.openNewForegroundTab(gBrowser, url + 1); + let tab2 = await BrowserTestUtils.openNewForegroundTab(gBrowser, url + 2); + + let group1 = gBrowser.addTabGroup([tab1]); + let group2 = gBrowser.addTabGroup([tab2]); + gBrowser.selectedTab = tab1; + + info("Setup initial group colour for consistency."); + group1.color = "red"; + group2.color = "blue"; + + let ext = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + async background() { + let [tab] = await browser.tabs.query({ + lastFocusedWindow: true, + active: true, + }); + + let group = await browser.tabGroups.get(tab.groupId); + browser.test.assertEq(tab.groupId, group.id, "Group id matches."); + browser.test.assertEq(tab.windowId, group.windowId, "Window id ok."); + + browser.tabGroups.onCreated.addListener(group => { + browser.test.sendMessage("created", group); + }); + browser.tabGroups.onRemoved.addListener(group => { + browser.test.sendMessage("removed", group); + }); + + browser.tabGroups.onUpdated.addListener(async updated => { + let group = await browser.tabGroups.get(updated.id); + browser.test.assertDeepEq(updated, group, "It's the same group."); + browser.test.sendMessage("updated", updated); + }); + + browser.test.assertThrows( + () => browser.tabGroups.update(1e9, { color: "magenta" }), + /Invalid enumeration value "magenta"/, + "Magenta is not a real color." + ); + + await browser.test.assertRejects( + browser.tabGroups.update(1e9, { title: "blah" }), + "No group with id: 1000000000", + "Invalid group id rejects." + ); + + browser.test.onMessage.addListener((_msg, update) => { + browser.tabGroups.update(group.id, update); + }); + browser.test.sendMessage("group", group); + }, + }); + await ext.startup(); + + function compare(first, second, info) { + let { color, title, collapsed } = first; + + // XUL element has a .name, and uses "gray". + if (XULElement.isInstance(first)) { + color = first.color.replace(/^gray$/, "grey"); + title = first.name; + } + + is(collapsed, second.collapsed, `Collapsed ok - ${info}`); + is(color, second.color, `Color ok - ${info}`); + is(title, second.title, `Title ok - ${info}`); + } + + let first = await ext.awaitMessage("group"); + compare(group1, first, "Initial group."); + + info("Updating group1 using extension api."); + ext.sendMessage("update", { collapsed: true }); + first.collapsed = true; + + let updated = await ext.awaitMessage("updated"); + compare(first, updated, "After collapsing 1."); + + ext.sendMessage("update", { collapsed: false }); + first.collapsed = false; + + updated = await ext.awaitMessage("updated"); + compare(first, updated, "After expanding 1."); + + ext.sendMessage("update", { color: "grey" }); + first.color = "grey"; + + updated = await ext.awaitMessage("updated"); + compare(first, updated, "After coloring 1."); + + ext.sendMessage("update", { title: "First" }); + first.title = "First"; + + updated = await ext.awaitMessage("updated"); + compare(first, updated, "After naming 1."); + + info("Creating a new group does not trigger onUpdated event."); + let tab3 = await BrowserTestUtils.openNewForegroundTab(gBrowser, url + 3); + gBrowser.addTabGroup([tab3]); + await ext.awaitMessage("created"); + + info("Closing tab1, and thus its group, does not trigger onUpdated."); + BrowserTestUtils.removeTab(tab1); + await ext.awaitMessage("removed"); + + info("Updating group2 directly from outside of the extension."); + group2.collapsed = true; + let second = await ext.awaitMessage("updated"); + compare(group2, second, "After collapsing 2."); + + group2.color = "pink"; + second = await ext.awaitMessage("updated"); + compare(group2, second, "After coloring 2."); + + group2.name = "Second"; + second = await ext.awaitMessage("updated"); + compare(group2, second, "After naming 2."); + + isnot(first.id, second.id, "Groups have different ids."); + is(first.windowId, second.windowId, "Groups in the same window."); + + await ext.unload(); + BrowserTestUtils.removeTab(tab3); + BrowserTestUtils.removeTab(tab2); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabGroups_move_event_order.js b/browser/components/extensions/test/browser/browser_ext_tabGroups_move_event_order.js new file mode 100644 index 00000000000..9cebfe98d21 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabGroups_move_event_order.js @@ -0,0 +1,175 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +// TODO bug 1938594: moving a created tab to another window sometimes triggers +// this error. See https://bugzilla.mozilla.org/show_bug.cgi?id=1938594#c1 +PromiseTestUtils.allowMatchingRejectionsGlobally( + /Unexpected undefined tabState for onMoveToNewWindow/ +); + +// There is special logic for adopting tab groups at the end of a tab strip. +// This test tests the behavior at the penultimate tab. For extra coverage, +// this test uses extension APIs only to create windows, tabs, groups. +// It also checks tabs.onMoved, tabs.onAttached and tabs.onDetached. +add_task(async function tabGroups_move_to_other_window() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + async background() { + // Setup: The tab that we are going to group. + const { id: tabId, windowId: oldWinId } = await browser.tabs.create({}); + browser.test.log(`Tab ID: ${tabId}, old win ID: ${oldWinId}`); + const groupId = await browser.tabs.group({ tabIds: tabId }); + // Setup: Create window with two tabs. + const { id: windowId } = await browser.windows.create({}); + const tab2 = await browser.tabs.create({ windowId }); + browser.test.assertEq(1, tab2.index, `Two tabs in window ${windowId}`); + + const events = []; + browser.tabGroups.onCreated.addListener(group => { + browser.test.fail(`Unexpected tabGroups.onCreated: ${group.id}`); + }); + browser.tabGroups.onRemoved.addListener(group => { + browser.test.fail(`Unexpected tabGroups.onRemoved: ${group.id}`); + }); + browser.tabGroups.onMoved.addListener(group => { + browser.test.assertEq(groupId, group.id, "onMoved fired for group"); + events.push("tabGroups.onMoved"); + }); + browser.tabs.onMoved.addListener((movedTabId, moveInfo) => { + // onDetached & onAttached should fire when moving to another window. + browser.test.fail( + `Unexpected tabs.onMoved: ${JSON.stringify(moveInfo)}` + ); + }); + browser.tabs.onDetached.addListener((movedTabId, detachInfo) => { + browser.test.assertEq(tabId, movedTabId, "Our tab detached"); + browser.test.assertEq(oldWinId, detachInfo.oldWindowId, "oldWindowId"); + browser.test.assertEq(1, detachInfo.oldPosition, "oldPosition"); + events.push("tabs.onDetached"); + }); + browser.tabs.onAttached.addListener((movedTabId, attachInfo) => { + browser.test.assertEq(tabId, movedTabId, "Our tab attached"); + browser.test.assertEq(windowId, attachInfo.newWindowId, "newWindowId"); + browser.test.assertEq(1, attachInfo.newPosition, "newPosition"); + events.push("tabs.onAttached"); + }); + + browser.test.assertDeepEq([], events, "No tabGroups event yet"); + // Move tab group between the (only) two existing tabs in the window. + const moved = await browser.tabGroups.move(groupId, { + windowId, + index: 1, + }); + browser.test.assertEq(groupId, moved.id, "Group ID did not change"); + browser.test.assertEq(windowId, moved.windowId, "Group moved to window"); + + browser.test.assertEq( + 1, + (await browser.tabs.get(tabId)).index, + "Tab appears at the expected index" + ); + + await browser.windows.remove(windowId); + browser.test.assertDeepEq( + ["tabs.onDetached", "tabs.onAttached", "tabGroups.onMoved"], + events, + "Expected events when moving tab group to a new window" + ); + + browser.test.sendMessage("done"); + }, + }); + await extension.startup(); + await extension.awaitMessage("done"); + await extension.unload(); +}); + +add_task(async function tabGroups_move_multiple_tabs_to_other_window() { + let extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + async background() { + // Setup: The tabs that we are going to group. + const tabs = [ + await browser.tabs.create({}), + await browser.tabs.create({}), + ]; + const oldWinId = tabs[0].windowId; + const tabIds = tabs.map(t => t.id); + browser.test.log(`Tab ID: ${tabIds}, old win ID: ${oldWinId}`); + const groupId = await browser.tabs.group({ tabIds }); + // Setup: Create window with two tabs. + const { id: windowId } = await browser.windows.create({}); + const tab2 = await browser.tabs.create({ windowId }); + browser.test.assertEq(1, tab2.index, `Two tabs in window ${windowId}`); + + const events = []; + browser.tabGroups.onCreated.addListener(group => { + browser.test.fail(`Unexpected tabGroups.onCreated: ${group.id}`); + }); + browser.tabGroups.onRemoved.addListener(group => { + browser.test.fail(`Unexpected tabGroups.onRemoved: ${group.id}`); + }); + browser.tabGroups.onMoved.addListener(group => { + browser.test.assertEq(groupId, group.id, "onMoved fired for group"); + events.push("tabGroups.onMoved"); + }); + browser.tabs.onMoved.addListener((movedTabId, moveInfo) => { + // onDetached & onAttached should fire when moving to another window. + browser.test.fail( + `Unexpected tabs.onMoved: ${JSON.stringify(moveInfo)}` + ); + }); + browser.tabs.onDetached.addListener((movedTabId, detachInfo) => { + browser.test.assertEq(oldWinId, detachInfo.oldWindowId, "oldWindowId"); + events.push(`tabs.onDetached:${detachInfo.oldPosition}:${movedTabId}`); + }); + browser.tabs.onAttached.addListener((movedTabId, attachInfo) => { + browser.test.assertEq(windowId, attachInfo.newWindowId, "newWindowId"); + events.push(`tabs.onAttached:${attachInfo.newPosition}:${movedTabId}`); + }); + + browser.test.assertDeepEq([], events, "No tabGroups event yet"); + // Move tab group to start of tab strip. + const moved = await browser.tabGroups.move(groupId, { + windowId, + index: 0, + }); + browser.test.assertEq(groupId, moved.id, "Group ID did not change"); + browser.test.assertEq(windowId, moved.windowId, "Group moved to window"); + + browser.test.assertEq( + 0, + (await browser.tabs.get(tabIds[0])).index, + `First tab appears at the expected index` + ); + browser.test.assertEq( + 1, + (await browser.tabs.get(tabIds[1])).index, + `Second tab appears at the expected index` + ); + + await browser.windows.remove(windowId); + browser.test.assertDeepEq( + [ + `tabs.onDetached:1:${tabIds[0]}`, + `tabs.onAttached:0:${tabIds[0]}`, + `tabs.onDetached:1:${tabIds[1]}`, + `tabs.onAttached:1:${tabIds[1]}`, + "tabGroups.onMoved", + ], + events, + "Expected events when moving tab group (2 tabs) to a new window" + ); + + browser.test.sendMessage("done"); + }, + }); + await extension.startup(); + await extension.awaitMessage("done"); + await extension.unload(); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabGroups_move_onMoved.js b/browser/components/extensions/test/browser/browser_ext_tabGroups_move_onMoved.js new file mode 100644 index 00000000000..261b0826d5f --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabGroups_move_onMoved.js @@ -0,0 +1,155 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +const { + Management: { + global: { getExtTabGroupIdForInternalTabGroupId }, + }, +} = ChromeUtils.importESModule("resource://gre/modules/Extension.sys.mjs"); + +add_task(async function tabsGroups_move_onMoved() { + async function loadExt() { + let ext = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + incognitoOverride: "spanning", + async background() { + browser.tabGroups.onCreated.addListener(group => { + browser.test.sendMessage("created", group); + }); + browser.tabGroups.onRemoved.addListener(group => { + browser.test.sendMessage("removed", group); + }); + browser.tabGroups.onMoved.addListener(moved => { + browser.test.sendMessage("moved", moved); + }); + browser.test.onMessage.addListener(async (groupId, moveProps) => { + try { + let group = await browser.tabGroups.move(groupId, moveProps); + browser.test.sendMessage("done", group); + } catch (e) { + browser.test.sendMessage("error", e.message); + } + }); + let [tab] = await browser.tabs.query({ + lastFocusedWindow: true, + active: true, + }); + browser.test.sendMessage("windowId", tab.windowId); + }, + }); + await ext.startup(); + return ext; + } + + let tabs = []; + let url = "https://example.com/foo?"; + for (let i = 1; i < 10; i++) { + tabs.push(await BrowserTestUtils.openNewForegroundTab(gBrowser, url + i)); + } + + let group = gBrowser.addTabGroup(gBrowser.tabs.slice(-2)); + is(group.tabs[1], gBrowser.tabs.at(-1), "Group's last tab is last."); + + let gid = getExtTabGroupIdForInternalTabGroupId(group.id); + + let ext = await loadExt(); + let windowId = await ext.awaitMessage("windowId"); + + ext.sendMessage(gid, { index: 6 }); + await Promise.all([ext.awaitMessage("done"), ext.awaitMessage("moved")]); + is(group.tabs[0], gBrowser.tabs[6], "Group's first tab moved to index 6."); + + ext.sendMessage(gid, { index: 3 }); + await Promise.all([ext.awaitMessage("done"), ext.awaitMessage("moved")]); + is(group.tabs[0], gBrowser.tabs[3], "Group's first tab moved to index 3."); + + ext.sendMessage(gid, { index: 3 }); + await ext.awaitMessage("done"); + is(group.tabs[0], gBrowser.tabs[3], "Using same index 3 doesn't move."); + + ext.sendMessage(gid, { index: -1 }); + await Promise.all([ext.awaitMessage("done"), ext.awaitMessage("moved")]); + is(group.tabs[1], gBrowser.tabs.at(-1), "Group moved to the end."); + + ext.sendMessage(gid, { index: -1 }); + await ext.awaitMessage("done"); + is(group.tabs[1], gBrowser.tabs.at(-1), "Using same index -1 doesn't move."); + + ext.sendMessage(gid, { index: 0 }); + await Promise.all([ext.awaitMessage("done"), ext.awaitMessage("moved")]); + is(group.tabs[0], gBrowser.tabs[0], "Group moved to the beginning."); + + ext.sendMessage(gid, { index: 0 }); + await ext.awaitMessage("done"); + is(group.tabs[0], gBrowser.tabs[0], "Using same index 0 doesn't move."); + + info("Create a large second group, and try to move in the middle of it."); + let group4 = gBrowser.addTabGroup(gBrowser.tabs.slice(5)); + let created4 = await ext.awaitMessage("created"); + let gid4 = getExtTabGroupIdForInternalTabGroupId(group4.id); + is(created4.id, gid4, "Correct group 4 created event."); + + ext.sendMessage(gid, { index: 8 }); + await Promise.all([ext.awaitMessage("done"), ext.awaitMessage("moved")]); + is(group.tabs[1], gBrowser.tabs[4], "Moved before the whole group instead."); + + for (let tab of tabs) { + BrowserTestUtils.removeTab(tab); + } + let removed1 = await ext.awaitMessage("removed"); + let removed4 = await ext.awaitMessage("removed"); + is(removed1.id, gid, "Correct group 1 removed event."); + is(removed4.id, gid4, "Correct group 4 removed event."); + + info("Test moving a group from a non-private to a private window."); + let win2 = await BrowserTestUtils.openNewBrowserWindow({ private: true }); + let tab2 = await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, url); + let group2 = win2.gBrowser.addTabGroup([tab2]); + let gid2 = getExtTabGroupIdForInternalTabGroupId(group2.id); + let created2 = await ext.awaitMessage("created"); + is(created2.id, gid2, "Correct group 2 create event."); + + ext.sendMessage(gid2, { index: 0, windowId }); + let error = await ext.awaitMessage("error"); + is(error, "Can't move groups between private and non-private windows"); + await BrowserTestUtils.closeWindow(win2); + + info("Test moving a group to another window."); + let win3 = await BrowserTestUtils.openNewBrowserWindow(); + let tab3 = await BrowserTestUtils.openNewForegroundTab(win3.gBrowser, url); + let group3 = win3.gBrowser.addTabGroup([tab3]); + let gid3 = getExtTabGroupIdForInternalTabGroupId(group3.id); + let created3 = await ext.awaitMessage("created"); + is(created3.id, gid3, "Correct group 3 create event."); + + ext.sendMessage(gid3, { index: 0, windowId }); + await ext.awaitMessage("done"); + + let moved3 = await ext.awaitMessage("moved"); + // Chrome fires onRemoved + onCreated, but we intentionally dispatch onMoved + // because it makes more sense - bug 1962475. + is(moved3.id, gid3, "onMoved fired after moving to another window"); + + // Add and remove a tab group, so that if onCreated/onRemoved was + // unexpectedly fired by the move above, that we will see (unexpected) gid3 + // instead of (expected) gid4. + let tab5 = await BrowserTestUtils.openNewForegroundTab(win3.gBrowser, url); + let group5 = win3.gBrowser.addTabGroup([tab5]); + let created5 = await ext.awaitMessage("created"); + let gid5 = getExtTabGroupIdForInternalTabGroupId(group5.id); + is(created5.id, gid5, "Correct group 5 create event."); + win3.gBrowser.removeTabGroup(group5); + let removed5 = await ext.awaitMessage("removed"); + is(removed5.id, gid5, "Correct group 5 removed event."); + + await BrowserTestUtils.closeWindow(win3); + let group3b = gBrowser.getTabGroupById(group3.id); + BrowserTestUtils.removeTab(group3b.tabs[0]); + let removed3 = await ext.awaitMessage("removed"); + is(removed3.id, gid3, "Correct group 3 removed event."); + + await ext.unload(); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabGroups_query.js b/browser/components/extensions/test/browser/browser_ext_tabGroups_query.js new file mode 100644 index 00000000000..b2d05eb947d --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabGroups_query.js @@ -0,0 +1,174 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +add_task(async function tabsGroups_query() { + async function loadExt(allowPrivate) { + let ext = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, + incognitoOverride: allowPrivate ? "spanning" : undefined, + async background() { + let [tab] = await browser.tabs.query({ + lastFocusedWindow: true, + active: true, + }); + browser.test.onMessage.addListener(async (_msg, tests) => { + for (let { query, expected } of tests) { + let groups = await browser.tabGroups.query(query); + let titles = groups.map(group => group.title); + browser.test.assertEq( + expected.map(e => String(e)).join(), + titles.sort().join(), + `Expected groups for query - ${JSON.stringify(query)}` + ); + } + browser.test.sendMessage("done"); + }); + browser.test.sendMessage("windowId", tab.windowId); + }, + }); + await ext.startup(); + return ext; + } + + let ext = await loadExt(); + let windowId = await ext.awaitMessage("windowId"); + + let url = "https://example.com/foo?"; + let groups = []; + let tabs = []; + let colors = ["red", "blue", "red", "pink", "green"]; + + for (let i = 0; i < 5; i++) { + tabs.push(await BrowserTestUtils.openNewForegroundTab(gBrowser, url + i)); + let group = gBrowser.addTabGroup(tabs.slice(-1)); + group.color = colors[i]; + group.name = String(i); + groups.push(group); + } + groups[2].collapsed = true; + groups[3].collapsed = true; + + let win2 = await BrowserTestUtils.openNewBrowserWindow(); + let tab5 = await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, url); + let tab6 = await BrowserTestUtils.openNewForegroundTab(win2.gBrowser, url); + let group5 = win2.gBrowser.addTabGroup([tab5]); + let group6 = win2.gBrowser.addTabGroup([tab6]); + group5.name = "5"; + group6.name = "6"; + group5.color = "red"; + group6.color = "gray"; + group6.collapsed = true; + + ext.sendMessage("runTests", [ + { + query: undefined, + expected: [0, 1, 2, 3, 4, 5, 6], + }, + { + query: {}, + expected: [0, 1, 2, 3, 4, 5, 6], + }, + { + query: { collapsed: true }, + expected: [2, 3, 6], + }, + { + query: { collapsed: false }, + expected: [0, 1, 4, 5], + }, + { + query: { color: "red" }, + expected: [0, 2, 5], + }, + { + query: { color: "grey" }, + expected: [6], + }, + { + query: { title: "4" }, + expected: [4], + }, + { + query: { title: "*" }, + expected: [0, 1, 2, 3, 4, 5, 6], + }, + { + query: { windowId }, + expected: [0, 1, 2, 3, 4], + }, + { + query: { windowId: -2 }, + expected: [5, 6], + }, + { + query: { windowId: 1e9 }, + expected: [], + }, + { + query: { collapsed: true, color: "red" }, + expected: [2], + }, + { + query: { color: "red", windowId }, + expected: [0, 2], + }, + ]); + await ext.awaitMessage("done"); + + groups[3].name = "Foo 3"; + group5.name = "FooBar 5"; + + let win3 = await BrowserTestUtils.openNewBrowserWindow({ private: true }); + let tab7 = await BrowserTestUtils.openNewForegroundTab(win3.gBrowser, url); + let group7 = win3.gBrowser.addTabGroup([tab7]); + group7.name = "FooBaz 7"; + + let ext2 = await loadExt(true); + windowId = await ext2.awaitMessage("windowId"); + + info("Extension without private browsing should't see group7 from win3."); + ext.sendMessage("runTests", [ + { + query: { title: "Foo*" }, + expected: ["Foo 3", "FooBar 5"], + }, + { + query: { windowId }, + expected: [], + }, + { + query: { windowId: -2 }, + expected: [], + }, + ]); + await ext.awaitMessage("done"); + + info("Extension with private browsing access should see group7 from win3."); + ext2.sendMessage("runTests", [ + { + query: { title: "Foo*" }, + expected: ["Foo 3", "FooBar 5", "FooBaz 7"], + }, + { + query: { windowId }, + expected: ["FooBaz 7"], + }, + { + query: { windowId: -2 }, + expected: ["FooBaz 7"], + }, + ]); + await ext2.awaitMessage("done"); + + for (let tab of tabs) { + BrowserTestUtils.removeTab(tab); + } + await BrowserTestUtils.closeWindow(win2); + await BrowserTestUtils.closeWindow(win3); + + await ext.unload(); + await ext2.unload(); +}); diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_group_ungroup.js b/browser/components/extensions/test/browser/browser_ext_tabs_group_ungroup.js index 466432055c3..c80811ad598 100644 --- a/browser/components/extensions/test/browser/browser_ext_tabs_group_ungroup.js +++ b/browser/components/extensions/test/browser/browser_ext_tabs_group_ungroup.js @@ -2,7 +2,7 @@ /* vim: set sts=2 sw=2 et tw=80: */ "use strict"; -// TODO bug 1938594: group_across_private_browsing_windows sometimes triggers +// TODO bug 1938594: group_pinned_tab_from_different_window sometimes triggers // this error. See https://bugzilla.mozilla.org/show_bug.cgi?id=1938594#c1 PromiseTestUtils.allowMatchingRejectionsGlobally( /Unexpected undefined tabState for onMoveToNewWindow/ @@ -10,6 +10,9 @@ PromiseTestUtils.allowMatchingRejectionsGlobally( add_task(async function group_ungroup_and_index() { const extension = ExtensionTestUtils.loadExtension({ + manifest: { + permissions: ["tabGroups"], + }, files: { "tab1.htm": "tab1.html", "tab2.htm": "tab2.html", @@ -17,9 +20,28 @@ add_task(async function group_ungroup_and_index() { }, async background() { const { id: tabId1 } = await browser.tabs.create({ url: "tab1.htm" }); - const { id: tabId2 } = await browser.tabs.create({ url: "tab2.htm " }); + const { id: tabId2 } = await browser.tabs.create({ url: "tab2.htm" }); const { id: tabId3 } = await browser.tabs.create({ url: "tab3.htm" }); + let eventIds = []; + let expected = []; + let allEvents = Promise.withResolvers(); + + browser.tabGroups.onCreated.addListener(group => { + eventIds.push(group.id); + browser.test.log(`Events so far (${eventIds.length}): ${eventIds}`); + }); + browser.tabGroups.onRemoved.addListener(group => { + eventIds.push(-group.id); + browser.test.log(`Events so far (${eventIds.length}): ${eventIds}`); + if (eventIds.length === 16) { + allEvents.resolve(); + } + if (eventIds.length > 16) { + browser.fail("Extra event received: " + group.id); + } + }); + async function assertAllTabExpectations(expectations, desc) { const tabs = await Promise.all([ browser.tabs.get(tabId1), @@ -52,6 +74,7 @@ add_task(async function group_ungroup_and_index() { const groupId1 = await browser.tabs.group({ tabIds: tabId1 }); const groupId2 = await browser.tabs.group({ tabIds: [tabId2, tabId3] }); + expected.push(groupId1, groupId2); await assertAllTabExpectations( { indexes: [1, 2, 3], groupIds: [groupId1, groupId2, groupId2] }, @@ -63,6 +86,7 @@ add_task(async function group_ungroup_and_index() { // middle of a tab group. await browser.tabs.ungroup([tabId3, tabId1]); await browser.tabs.ungroup(tabId2); + expected.push(-groupId1, -groupId2); await browser.test.assertRejects( browser.tabs.group({ tabIds: tabId3, groupId: groupId1 }), @@ -81,6 +105,7 @@ add_task(async function group_ungroup_and_index() { { indexes: [1, 3, 2], groupIds: [groupId3, groupId3, -1] }, "Tabs in same tab group must be next to each other" ); + expected.push(groupId3); // Join existing tab group - now we should have three in the tab group. const groupId4 = await browser.tabs.group({ @@ -100,6 +125,7 @@ add_task(async function group_ungroup_and_index() { ); await browser.tabs.ungroup([tabId1, tabId2, tabId3]); + expected.push(-groupId3); // Ungrouping of the group should not have changed positions either, // despite the list of tabIds passed to ungroup() being out of order. @@ -124,6 +150,7 @@ add_task(async function group_ungroup_and_index() { { indexes: [1, 2, 3], groupIds: [groupId6, groupId5, groupId5] }, "Leftmost tab should still be ordered before the original tab group" ); + expected.push(groupId5, groupId6); // Join an existing group (from the left). Position should not change. await browser.tabs.group({ tabIds: [tabId1], groupId: groupId5 }); @@ -136,6 +163,7 @@ add_task(async function group_ungroup_and_index() { `No group with id: ${groupId6}`, "Old groupId should be invalid after last tab was moved from group" ); + expected.push(-groupId6); // Move the middle tab to a new group. That tab should be at the right. const groupId7 = await browser.tabs.group({ tabIds: [tabId2] }); @@ -147,6 +175,7 @@ add_task(async function group_ungroup_and_index() { // Prepare: tabId1 and tabId2 together at the left, followed by tabId3. const groupId8 = await browser.tabs.group({ tabIds: [tabId1, tabId2] }); await browser.tabs.ungroup(tabId3); + expected.push(groupId7, groupId8); // When tabId2 is moved to a new group, it should stay in the middle, // meaning that the tab was inserted after its original tab group. @@ -156,10 +185,25 @@ add_task(async function group_ungroup_and_index() { { indexes: [1, 2, 3], groupIds: [groupId8, groupId9, -1] }, "group() on rightmost tab should appear after original tab group" ); + expected.push(-groupId7, -groupId5, groupId9); await browser.tabs.remove(tabId1); await browser.tabs.remove(tabId2); await browser.tabs.remove(tabId3); + + expected.push(-groupId8, -groupId9); + + // TODO bug 1962683: Re-enable when events are no longer missing + // await allEvents.promise; + // + // browser.test.assertEq( + // eventIds.join(), + // expected.join(), + // "Received expected onCreated events" + // ); + browser.test.log(`Expect: ${eventIds.join()}`); + browser.test.log(`Actual: ${expected.join()}`); + browser.test.sendMessage("done"); }, }); @@ -168,221 +212,6 @@ add_task(async function group_ungroup_and_index() { await extension.unload(); }); -add_task(async function group_with_windowId() { - const extension = ExtensionTestUtils.loadExtension({ - async background() { - const { id: windowId, tabs: initialTabs } = await browser.windows.create( - {} - ); - browser.test.assertEq(1, initialTabs.length, "Got window with 1 tab"); - - const { id: tabId1 } = await browser.tabs.create({}); - const { id: tabId2 } = await browser.tabs.create({}); - - const groupId1 = await browser.tabs.group({ - tabIds: [tabId2, tabId1], - createProperties: { windowId }, - }); - - browser.test.assertDeepEq( - Array.from(await browser.tabs.query({ groupId: groupId1 }), t => t.id), - [tabId2, tabId1], - "Moved tabs to group" - ); - browser.test.assertDeepEq( - Array.from(await browser.tabs.query({ windowId }), t => t.id), - [initialTabs[0].id, tabId2, tabId1], - "Moved tabs to group in new window (next to initial tab)" - ); - - await browser.windows.remove(windowId); - browser.test.sendMessage("done"); - }, - }); - await extension.startup(); - await extension.awaitMessage("done"); - await extension.unload(); -}); - -add_task(async function group_adopt_from_multiple_windows() { - const extension = ExtensionTestUtils.loadExtension({ - incognitoOverride: "spanning", - async background() { - const { - id: windowId1, - tabs: [{ id: tabId1 }], - } = await browser.windows.create({}); - const { - id: windowId2, - tabs: [{ id: tabId2 }], - } = await browser.windows.create({}); - const { - id: windowId3, - tabs: [{ id: tabId3 }], - } = await browser.windows.create({}); - - // This confirms that group() can adapt tabs from different windows. - const groupId = await browser.tabs.group({ - tabIds: [tabId2, tabId3], - createProperties: { windowId: windowId1 }, - }); - - await browser.test.assertRejects( - browser.windows.get(windowId2), - `Invalid window ID: ${windowId2}`, - "Window closes when group() adopts the last tab of the window" - ); - // We just confirmed that window2 is closed, do the same for window3. - await browser.test.assertRejects( - browser.tabs.group({ - tabIds: tabId1, - createProperties: { windowId: windowId3 }, - }), - `Invalid window ID: ${windowId3}`, - "group() cannot adapt groups from a closed window" - ); - - browser.test.assertDeepEq( - // Note: tabId1 is missing because the above group() rejected. - [tabId2, tabId3], - Array.from(await browser.tabs.query({ groupId }), tab => tab.id), - "All specified tabIds should now belong to the given group" - ); - - await browser.windows.remove(windowId1); - browser.test.sendMessage("done"); - }, - }); - await extension.startup(); - await extension.awaitMessage("done"); - await extension.unload(); -}); - -add_task(async function group_across_private_browsing_windows() { - const extension = ExtensionTestUtils.loadExtension({ - incognitoOverride: "spanning", - async background() { - const privateWin = await browser.windows.create({ incognito: true }); - const normalWin = await browser.windows.create({ incognito: false }); - - const otherPrivateWin = await browser.windows.create({ incognito: true }); - const otherNormalWin = await browser.windows.create({ incognito: false }); - - // Mixture of private and non-private tabIDs, so we can easily verify - // whether we inadvertently move some of the tabs. - const privateTab = await browser.tabs.create({ windowId: privateWin.id }); - const privateAndNonPrivateTabs = [ - privateTab, - await browser.tabs.create({ windowId: normalWin.id }), - await browser.tabs.create({ windowId: privateWin.id }), - await browser.tabs.create({ windowId: normalWin.id }), - ]; - - await browser.test.assertRejects( - browser.tabs.group({ - tabIds: privateAndNonPrivateTabs.map(t => t.id), - }), - "Cannot move private tabs to non-private window", - "Should not be able to move private+non-private tabs to current window" - ); - - await browser.test.assertRejects( - browser.tabs.group({ - tabIds: privateAndNonPrivateTabs.map(t => t.id), - createProperties: { windowId: otherPrivateWin.id }, - }), - "Cannot move non-private tabs to private window", - "Should not be able to move non-private tab to private window" - ); - await browser.test.assertRejects( - browser.tabs.group({ - tabIds: privateAndNonPrivateTabs.map(t => t.id), - createProperties: { windowId: otherNormalWin.id }, - }), - "Cannot move private tabs to non-private window", - "Should not be able to move private tab to non-private window" - ); - - const reply = await browser.runtime.sendMessage("@no_private", { - privateWindowId: privateWin.id, - privateTabId: privateTab.id, - }); - browser.test.assertEq("no_private:done", reply, "Reply from other ext"); - - for (const tab of privateAndNonPrivateTabs) { - const actualTab = await browser.tabs.get(tab.id); - browser.test.assertEq( - tab.windowId, - actualTab.windowId, - "Tab should not have moved to a different window" - ); - browser.test.assertEq( - tab.windowId, - actualTab.windowId, - "Tab should not have moved within its window" - ); - browser.test.assertEq( - tab.groupId, - -1, - "Tab should not have joined a group" - ); - } - - // Now check that we can actually group tabs in private windows. - const groupId = await browser.tabs.group({ - tabIds: privateTab.id, - createProperties: { windowId: otherPrivateWin.id }, - }); - const updatedPrivateTab = await browser.tabs.get(privateTab.id); - browser.test.assertEq( - groupId, - updatedPrivateTab.groupId, - "group() succeeded with private tab" - ); - browser.test.assertEq( - otherPrivateWin.id, - updatedPrivateTab.windowId, - "Private tab is now part of the destination private window" - ); - - await browser.windows.remove(privateWin.id); - await browser.windows.remove(normalWin.id); - await browser.windows.remove(otherPrivateWin.id); - await browser.windows.remove(otherNormalWin.id); - browser.test.sendMessage("done"); - }, - }); - const extensionWithoutPrivateAccess = ExtensionTestUtils.loadExtension({ - manifest: { browser_specific_settings: { gecko: { id: "@no_private" } } }, - background() { - browser.runtime.onMessageExternal.addListener(async data => { - const { privateWindowId, privateTabId } = data; - const { id: normalTabId } = await browser.tabs.create({}); - await browser.test.assertRejects( - browser.tabs.group({ tabIds: [privateTabId] }), - `Invalid tab ID: ${privateTabId}`, - "@no_private should not be able to group private tabs" - ); - await browser.test.assertRejects( - browser.tabs.group({ - tabIds: [normalTabId], - createProperties: { windowId: privateWindowId }, - }), - `Invalid window ID: ${privateWindowId}`, - "@no_private should not see private windows" - ); - await browser.tabs.remove(normalTabId); - return "no_private:done"; // Checked by sender. - }); - }, - }); - await extensionWithoutPrivateAccess.startup(); - await extension.startup(); - await extension.awaitMessage("done"); - await extensionWithoutPrivateAccess.unload(); - await extension.unload(); -}); - add_task(async function group_pinned_tab() { const extension = ExtensionTestUtils.loadExtension({ async background() { diff --git a/browser/components/extensions/test/browser/browser_ext_tabs_group_windowId.js b/browser/components/extensions/test/browser/browser_ext_tabs_group_windowId.js new file mode 100644 index 00000000000..f6c2a828f82 --- /dev/null +++ b/browser/components/extensions/test/browser/browser_ext_tabs_group_windowId.js @@ -0,0 +1,224 @@ +/* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set sts=2 sw=2 et tw=80: */ +"use strict"; + +// TODO bug 1938594: group_across_private_browsing_windows sometimes triggers +// this error. See https://bugzilla.mozilla.org/show_bug.cgi?id=1938594#c1 +PromiseTestUtils.allowMatchingRejectionsGlobally( + /Unexpected undefined tabState for onMoveToNewWindow/ +); + +add_task(async function group_with_windowId() { + const extension = ExtensionTestUtils.loadExtension({ + async background() { + const { id: windowId, tabs: initialTabs } = await browser.windows.create( + {} + ); + browser.test.assertEq(1, initialTabs.length, "Got window with 1 tab"); + + const { id: tabId1 } = await browser.tabs.create({}); + const { id: tabId2 } = await browser.tabs.create({}); + + const groupId1 = await browser.tabs.group({ + tabIds: [tabId2, tabId1], + createProperties: { windowId }, + }); + + browser.test.assertDeepEq( + Array.from(await browser.tabs.query({ groupId: groupId1 }), t => t.id), + [tabId2, tabId1], + "Moved tabs to group" + ); + browser.test.assertDeepEq( + Array.from(await browser.tabs.query({ windowId }), t => t.id), + [initialTabs[0].id, tabId2, tabId1], + "Moved tabs to group in new window (next to initial tab)" + ); + + await browser.windows.remove(windowId); + browser.test.sendMessage("done"); + }, + }); + await extension.startup(); + await extension.awaitMessage("done"); + await extension.unload(); +}); + +add_task(async function group_adopt_from_multiple_windows() { + const extension = ExtensionTestUtils.loadExtension({ + incognitoOverride: "spanning", + async background() { + const { + id: windowId1, + tabs: [{ id: tabId1 }], + } = await browser.windows.create({}); + const { + id: windowId2, + tabs: [{ id: tabId2 }], + } = await browser.windows.create({}); + const { + id: windowId3, + tabs: [{ id: tabId3 }], + } = await browser.windows.create({}); + + // This confirms that group() can adapt tabs from different windows. + const groupId = await browser.tabs.group({ + tabIds: [tabId2, tabId3], + createProperties: { windowId: windowId1 }, + }); + + await browser.test.assertRejects( + browser.windows.get(windowId2), + `Invalid window ID: ${windowId2}`, + "Window closes when group() adopts the last tab of the window" + ); + // We just confirmed that window2 is closed, do the same for window3. + await browser.test.assertRejects( + browser.tabs.group({ + tabIds: tabId1, + createProperties: { windowId: windowId3 }, + }), + `Invalid window ID: ${windowId3}`, + "group() cannot adapt groups from a closed window" + ); + + browser.test.assertDeepEq( + // Note: tabId1 is missing because the above group() rejected. + [tabId2, tabId3], + Array.from(await browser.tabs.query({ groupId }), tab => tab.id), + "All specified tabIds should now belong to the given group" + ); + + await browser.windows.remove(windowId1); + browser.test.sendMessage("done"); + }, + }); + await extension.startup(); + await extension.awaitMessage("done"); + await extension.unload(); +}); + +add_task(async function group_across_private_browsing_windows() { + const extension = ExtensionTestUtils.loadExtension({ + incognitoOverride: "spanning", + async background() { + const privateWin = await browser.windows.create({ incognito: true }); + const normalWin = await browser.windows.create({ incognito: false }); + + const otherPrivateWin = await browser.windows.create({ incognito: true }); + const otherNormalWin = await browser.windows.create({ incognito: false }); + + // Mixture of private and non-private tabIDs, so we can easily verify + // whether we inadvertently move some of the tabs. + const privateTab = await browser.tabs.create({ windowId: privateWin.id }); + const privateAndNonPrivateTabs = [ + privateTab, + await browser.tabs.create({ windowId: normalWin.id }), + await browser.tabs.create({ windowId: privateWin.id }), + await browser.tabs.create({ windowId: normalWin.id }), + ]; + + await browser.test.assertRejects( + browser.tabs.group({ + tabIds: privateAndNonPrivateTabs.map(t => t.id), + }), + "Cannot move private tabs to non-private window", + "Should not be able to move private+non-private tabs to current window" + ); + + await browser.test.assertRejects( + browser.tabs.group({ + tabIds: privateAndNonPrivateTabs.map(t => t.id), + createProperties: { windowId: otherPrivateWin.id }, + }), + "Cannot move non-private tabs to private window", + "Should not be able to move non-private tab to private window" + ); + await browser.test.assertRejects( + browser.tabs.group({ + tabIds: privateAndNonPrivateTabs.map(t => t.id), + createProperties: { windowId: otherNormalWin.id }, + }), + "Cannot move private tabs to non-private window", + "Should not be able to move private tab to non-private window" + ); + + const reply = await browser.runtime.sendMessage("@no_private", { + privateWindowId: privateWin.id, + privateTabId: privateTab.id, + }); + browser.test.assertEq("no_private:done", reply, "Reply from other ext"); + + for (const tab of privateAndNonPrivateTabs) { + const actualTab = await browser.tabs.get(tab.id); + browser.test.assertEq( + tab.windowId, + actualTab.windowId, + "Tab should not have moved to a different window" + ); + browser.test.assertEq( + tab.windowId, + actualTab.windowId, + "Tab should not have moved within its window" + ); + browser.test.assertEq( + tab.groupId, + -1, + "Tab should not have joined a group" + ); + } + + // Now check that we can actually group tabs in private windows. + const groupId = await browser.tabs.group({ + tabIds: privateTab.id, + createProperties: { windowId: otherPrivateWin.id }, + }); + const updatedPrivateTab = await browser.tabs.get(privateTab.id); + browser.test.assertEq( + groupId, + updatedPrivateTab.groupId, + "group() succeeded with private tab" + ); + browser.test.assertEq( + otherPrivateWin.id, + updatedPrivateTab.windowId, + "Private tab is now part of the destination private window" + ); + + await browser.windows.remove(privateWin.id); + await browser.windows.remove(normalWin.id); + await browser.windows.remove(otherPrivateWin.id); + await browser.windows.remove(otherNormalWin.id); + browser.test.sendMessage("done"); + }, + }); + const extensionWithoutPrivateAccess = ExtensionTestUtils.loadExtension({ + manifest: { browser_specific_settings: { gecko: { id: "@no_private" } } }, + background() { + browser.runtime.onMessageExternal.addListener(async data => { + const { privateWindowId, privateTabId } = data; + const { id: normalTabId } = await browser.tabs.create({}); + await browser.test.assertRejects( + browser.tabs.group({ tabIds: [privateTabId] }), + `Invalid tab ID: ${privateTabId}`, + "@no_private should not be able to group private tabs" + ); + await browser.test.assertRejects( + browser.tabs.group({ + tabIds: [normalTabId], + createProperties: { windowId: privateWindowId }, + }), + `Invalid window ID: ${privateWindowId}`, + "@no_private should not see private windows" + ); + await browser.tabs.remove(normalTabId); + return "no_private:done"; // Checked by sender. + }); + }, + }); + await extensionWithoutPrivateAccess.startup(); + await extension.startup(); + await extension.awaitMessage("done"); + await extensionWithoutPrivateAccess.unload(); + await extension.unload(); +}); diff --git a/browser/components/firefoxview/history.css b/browser/components/firefoxview/history.css index a10291ddb5f..1cde162f4ce 100644 --- a/browser/components/firefoxview/history.css +++ b/browser/components/firefoxview/history.css @@ -27,6 +27,7 @@ flex-direction: column; font-size: 0.95rem; gap: 6px; + padding: 0 8px; } .import-history-banner .banner-text span:first-child { @@ -37,7 +38,7 @@ display: grid; grid-template-columns: 1fr auto; gap: 16px; - padding: 8px; + padding: 8px 0; } .import-history-banner .buttons { diff --git a/browser/components/genai/GenAI.sys.mjs b/browser/components/genai/GenAI.sys.mjs index dca2a5a9a60..c275a05f80f 100644 --- a/browser/components/genai/GenAI.sys.mjs +++ b/browser/components/genai/GenAI.sys.mjs @@ -386,75 +386,52 @@ export const GenAI = { ); return context; }, - /** - * Handle messages from content to show or hide shortcuts. - * - * @param {string} name of message - * @param {{ - inputType: string, - selection: string, - delay: number, - x: number, - y: number, - }} data for the message - * @param {MozBrowser} browser that provided the message - */ - handleShortcutsMessage(name, data, browser) { - const isInBrowserStack = browser?.closest(".browserStack"); - if ( - !isInBrowserStack || - !browser || - this.ignoredInputs.has(data.inputType) || - !lazy.chatShortcuts || - !this.canShowChatEntrypoint - ) { + /** + * Setup helpers and callbacks for ai shortcut button. + * + * @param {MozButton} aiActionButton instance for the browser window + */ + initializeAIShortcut(aiActionButton) { + if (aiActionButton.initialized) { return; } + aiActionButton.initialized = true; - const window = browser.ownerGlobal; - const { document, devicePixelRatio } = window; - - // Get Panel elements + const document = aiActionButton.ownerDocument; + const buttonActiveState = "icon"; + const buttonDefaultState = "icon ghost"; const chatShortcutsOptionsPanel = document.getElementById( "chat-shortcuts-options-panel" ); const selectionShortcutActionPanel = document.getElementById( "selection-shortcut-action-panel" ); - - if (!chatShortcutsOptionsPanel || !selectionShortcutActionPanel) { - return; - } - - const aiActionButton = - selectionShortcutActionPanel.querySelector("#ai-action-button"); - aiActionButton.iconSrc = "chrome://global/skin/icons/highlights.svg"; - const buttonActiveState = "icon"; - const buttonDefaultState = "icon ghost"; - - // Hide shortcuts and panel - const hide = () => { - aiActionButton.setAttribute("type", buttonDefaultState); - aiActionButton.removeEventListener("mouseover", aiActionButton.listener); - aiActionButton.listener = null; + aiActionButton.hide = () => { chatShortcutsOptionsPanel.hidePopup(); selectionShortcutActionPanel.hidePopup(); }; + aiActionButton.iconSrc = "chrome://global/skin/icons/highlights.svg"; + aiActionButton.setAttribute("type", buttonDefaultState); + chatShortcutsOptionsPanel.addEventListener("popuphidden", () => + aiActionButton.setAttribute("type", buttonDefaultState) + ); + chatShortcutsOptionsPanel.firstChild.id = "ask-chat-shortcuts"; + // Helper to show rounded warning numbers const roundDownToNearestHundred = number => { return Math.floor(number / 100) * 100; }; /** - * Create a warning message bar. - * - * @param {{ - name: string, - maxLength: number, - }} chatProvider attributes for the warning - * @returns { mozMessageBarEl } MozMessageBar warning message bar - */ + * Create a warning message bar. + * + * @param {{ + * name: string, + * maxLength: number, + * }} chatProvider attributes for the warning + * @returns { mozMessageBarEl } MozMessageBar warning message bar + */ const createMessageBarWarning = chatProvider => { const mozMessageBarEl = document.createElement("moz-message-bar"); @@ -481,133 +458,150 @@ export const GenAI = { return mozMessageBarEl; }; + // Detect hover to build and open the popup + aiActionButton.addEventListener("mouseover", async () => { + if (chatShortcutsOptionsPanel.state != "closed") { + return; + } + + aiActionButton.setAttribute("type", buttonActiveState); + const vbox = chatShortcutsOptionsPanel.querySelector("vbox"); + vbox.innerHTML = ""; + + const chatProvider = this.chatProviders.get(lazy.chatProvider); + const selectionLength = aiActionButton.data.selection.length; + const showWarning = + this.estimateSelectionLimit(chatProvider?.maxLength) < selectionLength; + + // Show warning if selection is too long + if (showWarning) { + vbox.appendChild(createMessageBarWarning(chatProvider)); + } + + const addItem = () => { + const button = vbox.appendChild( + document.createXULElement("toolbarbutton") + ); + button.className = "subviewbutton"; + button.setAttribute("tabindex", "0"); + return button; + }; + + const browser = document.ownerGlobal.gBrowser.selectedBrowser; + const context = await this.addAskChatItems( + browser, + aiActionButton.data, + promptObj => { + const button = addItem(); + button.textContent = promptObj.label; + return button; + }, + "shortcuts", + aiActionButton.hide + ); + + // Add custom textarea box if configured + if (lazy.chatShortcutsCustom) { + const textAreaEl = vbox.appendChild(document.createElement("textarea")); + document.l10n.setAttributes( + textAreaEl, + chatProvider?.name + ? "genai-input-ask-provider" + : "genai-input-ask-generic", + { provider: chatProvider?.name } + ); + + textAreaEl.className = "ask-chat-shortcuts-custom-prompt"; + textAreaEl.addEventListener("mouseover", () => textAreaEl.focus()); + textAreaEl.addEventListener("keydown", event => { + if (event.key == "Enter" && !event.shiftKey) { + this.handleAskChat({ value: textAreaEl.value }, context); + aiActionButton.hide(); + } + }); + + // For Content Analysis, we need to specify the URL that the data is being sent to. + // In this case it's not the URL in the browsingContext (like it is in other cases), + // but the URL of the chatProvider is close enough to where the content will eventually + // be sent. + lazy.ContentAnalysisUtils.setupContentAnalysisEventsForTextElement( + textAreaEl, + browser.browsingContext, + Services.io.newURI(lazy.chatProvider) + ); + + const resetHeight = () => { + textAreaEl.style.height = "auto"; + textAreaEl.style.height = textAreaEl.scrollHeight + "px"; + }; + + textAreaEl.addEventListener("input", resetHeight); + chatShortcutsOptionsPanel.addEventListener("popupshown", resetHeight, { + once: true, + }); + } + + // Allow hiding these shortcuts + vbox.appendChild(document.createXULElement("toolbarseparator")); + const hider = addItem(); + document.l10n.setAttributes(hider, "genai-shortcuts-hide"); + hider.addEventListener("command", () => { + Services.prefs.setBoolPref("browser.ml.chat.shortcuts", false); + Glean.genaiChatbot.shortcutsHideClick.record({ + selection: aiActionButton.data.selection.length, + }); + }); + + chatShortcutsOptionsPanel.openPopup( + selectionShortcutActionPanel, + "after_start", + 0, + 10 + ); + Glean.genaiChatbot.shortcutsExpanded.record({ + selection: aiActionButton.data.selection.length, + provider: this.getProviderId(), + warning: showWarning, + }); + }); + }, + + /** + * Handle messages from content to show or hide shortcuts. + * + * @param {string} name of message + * @param {{ + * inputType: string, + * selection: string, + * delay: number, + * x: number, + * y: number, + * }} data for the message + * @param {MozBrowser} browser that provided the message + */ + handleShortcutsMessage(name, data, browser) { + const isInBrowserStack = browser?.closest(".browserStack"); + + if ( + !isInBrowserStack || + !browser || + this.ignoredInputs.has(data.inputType) || + !lazy.chatShortcuts || + !this.canShowChatEntrypoint + ) { + return; + } + + const window = browser.ownerGlobal; + const { document, devicePixelRatio } = window; + const aiActionButton = document.getElementById("ai-action-button"); + this.initializeAIShortcut(aiActionButton); + switch (name) { case "GenAI:HideShortcuts": - hide(); + aiActionButton.hide(); break; case "GenAI:ShowShortcuts": { - aiActionButton.setAttribute("type", buttonDefaultState); - - // Detect hover to build and open the popup - aiActionButton.listener = async () => { - if (aiActionButton.hasAttribute("active")) { - return; - } - - aiActionButton.toggleAttribute("active"); - aiActionButton.setAttribute("type", buttonActiveState); - const vbox = chatShortcutsOptionsPanel.querySelector("vbox"); - vbox.innerHTML = ""; - - const chatProvider = this.chatProviders.get(lazy.chatProvider); - const selectionLength = aiActionButton.data.selection.length; - const showWarning = - this.estimateSelectionLimit(chatProvider?.maxLength) < - selectionLength; - - // Show warning if selection is too long - if (showWarning) { - vbox.appendChild(createMessageBarWarning(chatProvider)); - } - - const addItem = () => { - const button = vbox.appendChild( - document.createXULElement("toolbarbutton") - ); - button.className = "subviewbutton"; - button.setAttribute("tabindex", "0"); - return button; - }; - - const context = await this.addAskChatItems( - browser, - aiActionButton.data, - promptObj => { - const button = addItem(); - button.textContent = promptObj.label; - return button; - }, - "shortcuts", - hide - ); - - // Add custom textarea box if configured - if (lazy.chatShortcutsCustom) { - const textAreaEl = vbox.appendChild( - document.createElement("textarea") - ); - document.l10n.setAttributes( - textAreaEl, - chatProvider?.name - ? "genai-input-ask-provider" - : "genai-input-ask-generic", - { provider: chatProvider?.name } - ); - - textAreaEl.className = "ask-chat-shortcuts-custom-prompt"; - textAreaEl.addEventListener("mouseover", () => textAreaEl.focus()); - textAreaEl.addEventListener("keydown", event => { - if (event.key == "Enter" && !event.shiftKey) { - this.handleAskChat({ value: textAreaEl.value }, context); - hide(); - } - }); - - // For Content Analysis, we need to specify the URL that the data is being sent to. - // In this case it's not the URL in the browsingContext (like it is in other cases), - // but the URL of the chatProvider is close enough to where the content will eventually - // be sent. - lazy.ContentAnalysisUtils.setupContentAnalysisEventsForTextElement( - textAreaEl, - browser.browsingContext, - Services.io.newURI(lazy.chatProvider) - ); - - const resetHeight = () => { - textAreaEl.style.height = "auto"; - textAreaEl.style.height = textAreaEl.scrollHeight + "px"; - }; - - textAreaEl.addEventListener("input", resetHeight); - chatShortcutsOptionsPanel.addEventListener( - "popupshown", - resetHeight, - { - once: true, - } - ); - } - - // Allow hiding these shortcuts - vbox.appendChild(document.createXULElement("toolbarseparator")); - const hider = addItem(); - document.l10n.setAttributes(hider, "genai-shortcuts-hide"); - hider.addEventListener("command", () => { - Services.prefs.setBoolPref("browser.ml.chat.shortcuts", false); - Glean.genaiChatbot.shortcutsHideClick.record({ - selection: aiActionButton.data.selection.length, - }); - }); - - chatShortcutsOptionsPanel.openPopup( - selectionShortcutActionPanel, - "after_start", - 0, - 10 - ); - chatShortcutsOptionsPanel.addEventListener( - "popuphidden", - () => aiActionButton.removeAttribute("active"), - { once: true } - ); - Glean.genaiChatbot.shortcutsExpanded.record({ - selection: aiActionButton.data.selection.length, - provider: this.getProviderId(), - warning: showWarning, - }); - }; - aiActionButton.addEventListener("mouseover", aiActionButton.listener); - // Save the latest selection so it can be used by popup aiActionButton.data = data; @@ -625,12 +619,14 @@ export const GenAI = { const screenX = data.screenXDevPx / devicePixelRatio; const screenY = screenYBase + bottomPadding; - selectionShortcutActionPanel.openPopup( - browser, - "before_start", - screenX - browser.screenX, - screenY - browser.screenY - ); + aiActionButton + .closest("panel") + .openPopup( + browser, + "before_start", + screenX - browser.screenX, + screenY - browser.screenY + ); break; } } diff --git a/browser/components/genai/LinkPreview.sys.mjs b/browser/components/genai/LinkPreview.sys.mjs index aa657794e46..d711ed2b89a 100644 --- a/browser/components/genai/LinkPreview.sys.mjs +++ b/browser/components/genai/LinkPreview.sys.mjs @@ -9,6 +9,7 @@ const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { LinkPreviewModel: "moz-src:///browser/components/genai/LinkPreviewModel.sys.mjs", + Region: "resource://gre/modules/Region.sys.mjs", }); XPCOMUtils.defineLazyPreferenceGetter( lazy, @@ -28,6 +29,11 @@ XPCOMUtils.defineLazyPreferenceGetter( "browser.ml.linkPreview.prefetchOnEnable", true ); +XPCOMUtils.defineLazyPreferenceGetter( + lazy, + "noKeyPointsRegions", + "browser.ml.linkPreview.noKeyPointsRegions" +); export const LinkPreview = { // Shared downloading state to use across multiple previews @@ -50,7 +56,7 @@ export const LinkPreview = { } // Prefetch the model when enabling by simulating a request. - if (enabled && lazy.prefetchOnEnable) { + if (enabled && lazy.prefetchOnEnable && this._isRegionSupported()) { this.generateKeyPoints(); } @@ -176,6 +182,20 @@ export const LinkPreview = { } }, + /** + * Checks if the user's region is supported for key points generation. + * + * @returns {boolean} True if the region is supported, false otherwise. + */ + _isRegionSupported() { + const disallowedRegions = lazy.noKeyPointsRegions + .split(",") + .map(region => region.trim().toUpperCase()); + + const userRegion = lazy.Region.home?.toUpperCase(); + return !disallowedRegions.includes(userRegion); + }, + /** * Creates an Open Graph (OG) card using meta information from the page. * @@ -208,6 +228,7 @@ export const LinkPreview = { // Generate key points if we have content, language and configured for any // language or restricted. if ( + this._isRegionSupported() && pageData.article.textContent && pageData.article.detectedLanguage && (!lazy.allowedLanguages || diff --git a/browser/components/genai/LinkPreviewModel.sys.mjs b/browser/components/genai/LinkPreviewModel.sys.mjs index 1284b35e3ba..8437e0dfc86 100644 --- a/browser/components/genai/LinkPreviewModel.sys.mjs +++ b/browser/components/genai/LinkPreviewModel.sys.mjs @@ -16,7 +16,7 @@ const DEFAULT_INPUT_SENTENCES = 6; const MIN_SENTENCE_LENGTH = 14; const MIN_WORD_COUNT = 5; const DEFAULT_INPUT_PROMPT = - "Provide a concise, objective summary of the input text in up to three sentences, focusing on key actions and intentions without using second or third person pronouns."; + "You're an AI assistant for text re-writing and summarization. Rewrite the input text focusing on the main key point in at most three very short sentences."; // All tokens taken from the model's vocabulary at https://huggingface.co/HuggingFaceTB/SmolLM2-360M-Instruct/raw/main/vocab.json // Token id for end of text @@ -528,7 +528,10 @@ export class SentencePostProcessor { // If the sentence contains a block word, abort if ( this.blockListManager && - this.blockListManager.matchAtWordBoundary({ text: sentence }) + this.blockListManager.matchAtWordBoundary({ + // Blocklist is always lowercase + text: sentence.toLowerCase(), + }) ) { sentence = ""; abort = true; diff --git a/browser/components/genai/assets/brands/chatgpt.svg b/browser/components/genai/assets/brands/chatgpt.svg index 6bf398c687d..9c34110f924 100644 --- a/browser/components/genai/assets/brands/chatgpt.svg +++ b/browser/components/genai/assets/brands/chatgpt.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/assets/brands/claude.svg b/browser/components/genai/assets/brands/claude.svg index 15602a820d3..8562f928145 100644 --- a/browser/components/genai/assets/brands/claude.svg +++ b/browser/components/genai/assets/brands/claude.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/assets/brands/copilot.svg b/browser/components/genai/assets/brands/copilot.svg index 08ed4f9f5cd..10bb844d7ff 100644 --- a/browser/components/genai/assets/brands/copilot.svg +++ b/browser/components/genai/assets/brands/copilot.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/assets/brands/gemini.svg b/browser/components/genai/assets/brands/gemini.svg index 55ba865de3a..bb931d0fb66 100644 --- a/browser/components/genai/assets/brands/gemini.svg +++ b/browser/components/genai/assets/brands/gemini.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/assets/brands/huggingchat.svg b/browser/components/genai/assets/brands/huggingchat.svg index 61a2aeb21e0..8a94c3a2ac8 100644 --- a/browser/components/genai/assets/brands/huggingchat.svg +++ b/browser/components/genai/assets/brands/huggingchat.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/assets/brands/lechat.svg b/browser/components/genai/assets/brands/lechat.svg index f8bfccc8ed9..55b85e30245 100644 --- a/browser/components/genai/assets/brands/lechat.svg +++ b/browser/components/genai/assets/brands/lechat.svg @@ -1,2 +1,2 @@ - + diff --git a/browser/components/genai/chat.css b/browser/components/genai/chat.css index b9e71ce8528..f1ae3160743 100644 --- a/browser/components/genai/chat.css +++ b/browser/components/genai/chat.css @@ -171,12 +171,15 @@ browser { } .icon { + --icon-size: 30px; background-position: center; background-repeat: no-repeat; background-size: contain; border-radius: 0; + height: var(--icon-size); margin-inline: var(--space-small); - min-width: 40px; + max-width: var(--icon-size); + min-width: var(--icon-size); outline: none; &.claude { diff --git a/browser/components/genai/content/link-preview-card.mjs b/browser/components/genai/content/link-preview-card.mjs index 0feda7bc0a6..29d047e5f2b 100644 --- a/browser/components/genai/content/link-preview-card.mjs +++ b/browser/components/genai/content/link-preview-card.mjs @@ -12,6 +12,18 @@ ChromeUtils.defineESModuleGetters(lazy, { BrowserUtils: "resource://gre/modules/BrowserUtils.sys.mjs", }); +ChromeUtils.defineLazyGetter( + lazy, + "numberFormat", + () => new Services.intl.NumberFormat() +); + +ChromeUtils.defineLazyGetter( + lazy, + "pluralRules", + () => new Services.intl.PluralRules() +); + const FEEDBACK_LINK = "https://connect.mozilla.org/t5/discussions/try-out-link-previews-on-firefox-labs/td-p/92012"; @@ -107,6 +119,12 @@ class LinkPreviewCard extends MozLitElement { const readingTimeMinsFast = articleData.readingTimeMinsFast || ""; const readingTimeMinsSlow = articleData.readingTimeMinsSlow || ""; + const readingTimeMinsFastStr = + lazy.numberFormat.format(readingTimeMinsFast); + const readingTimeRange = lazy.numberFormat.formatRange( + readingTimeMinsFast, + readingTimeMinsSlow + ); // Check if both metadata and article text content are missing const isMissingAllContent = !description && !articleData.textContent; @@ -156,11 +174,25 @@ class LinkPreviewCard extends MozLitElement { ? html`

${description}

` : ""} ${readingTimeMinsFast && readingTimeMinsSlow - ? html`
- ${readingTimeMinsFast === readingTimeMinsSlow - ? `${readingTimeMinsFast} min${readingTimeMinsFast > 1 ? "s" : ""} reading time` - : `${readingTimeMinsFast}-${readingTimeMinsSlow} mins reading time`} -
` + ? html` +
+ ` : ""}

${this.generating || this.keyPoints.length diff --git a/browser/components/genai/tests/browser/browser_chat_shortcuts.js b/browser/components/genai/tests/browser/browser_chat_shortcuts.js index 0fb240bc56d..cc8485a9cb0 100644 --- a/browser/components/genai/tests/browser/browser_chat_shortcuts.js +++ b/browser/components/genai/tests/browser/browser_chat_shortcuts.js @@ -141,6 +141,8 @@ add_task(async function test_show_shortcuts_second_tab() { Assert.equal(stub.callCount, 1, "Shortcuts added on select"); Assert.equal(stub.firstCall.args[0], browser, "Got correct browser"); + + sandbox.restore(); } ); }); @@ -211,6 +213,23 @@ add_task(async function test_show_warning_label() { "true", "Warning lable value is correct" ); + + Assert.ok( + !aiActionButton.getAttribute("type").includes("ghost"), + "button is active" + ); + + const hidden = BrowserTestUtils.waitForEvent( + chatShortcutsOptionsPanel, + "popuphidden" + ); + chatShortcutsOptionsPanel.hidePopup(); + await hidden; + + Assert.ok( + aiActionButton.getAttribute("type").includes("ghost"), + "button is inactive" + ); } ); }); diff --git a/browser/components/genai/tests/browser/browser_link_preview.js b/browser/components/genai/tests/browser/browser_link_preview.js index 8f1c2ef16c7..983fd7a8b67 100644 --- a/browser/components/genai/tests/browser/browser_link_preview.js +++ b/browser/components/genai/tests/browser/browser_link_preview.js @@ -4,6 +4,9 @@ const { LinkPreview } = ChromeUtils.importESModule( "moz-src:///browser/components/genai/LinkPreview.sys.mjs" ); +const { Region } = ChromeUtils.importESModule( + "resource://gre/modules/Region.sys.mjs" +); const { LinkPreviewModel } = ChromeUtils.importESModule( "moz-src:///browser/components/genai/LinkPreviewModel.sys.mjs" ); @@ -403,3 +406,52 @@ add_task(async function test_skip_keypoints_generation_if_url_not_readable() { generateStub.restore(); LinkPreview.keyboardComboActive = false; }); + +/** + * Test that the Link Preview feature does not generate key points in disallowed regions. + * + * This test performs the following steps: + * 1. Sets the current region as a disallowed region for key point generation via the preference `"browser.ml.linkPreview.noKeyPointsRegions"`. + * 2. Enables the Link Preview feature via the preference `"browser.ml.linkPreview.enabled"`. + * 3. Stubs the `generateTextAI` method to track if it's called. + * 4. Activates the keyboard combination for link preview and sets an over link. + * 5. Verifies that the link preview panel is shown but no AI generation is attempted. + * 6. Ensures that the `generateTextAI` method is not called when the region is disallowed. + * 7. Cleans up by removing the panel, restoring the stub, and clearing the user preference + * `"browser.ml.linkPreview.noKeyPointsRegions"` to avoid affecting other tests. + */ +add_task(async function test_no_key_points_in_disallowed_region() { + const currentRegion = Region.home; + + await SpecialPowers.pushPrefEnv({ + set: [ + ["browser.ml.linkPreview.enabled", true], + ["browser.ml.linkPreview.noKeyPointsRegions", currentRegion], + ], + }); + + const generateStub = sinon.stub(LinkPreviewModel, "generateTextAI"); + + LinkPreview.keyboardComboActive = true; + XULBrowserWindow.setOverLink( + "https://example.com/browser/browser/components/genai/tests/browser/data/readableEn.html", + {} + ); + + let panel = await TestUtils.waitForCondition(() => + document.getElementById("link-preview-panel") + ); + await BrowserTestUtils.waitForEvent(panel, "popupshown"); + + is( + generateStub.callCount, + 0, + "generateTextAI should not be called when region is disallowed" + ); + + panel.remove(); + LinkPreview.keyboardComboActive = false; + generateStub.restore(); + + Services.prefs.clearUserPref("browser.ml.linkPreview.noKeyPointsRegions"); +}); diff --git a/browser/components/genai/tests/xpcshell/test_link_preview_text.js b/browser/components/genai/tests/xpcshell/test_link_preview_text.js index ca3e04eef8b..b02960676e1 100644 --- a/browser/components/genai/tests/xpcshell/test_link_preview_text.js +++ b/browser/components/genai/tests/xpcshell/test_link_preview_text.js @@ -151,7 +151,7 @@ add_task(async function test_generateAI_with_blocklist() { // Mocked Blocked List Manager let manager = new BlockListManager({ - blockNgrams: [BlockListManager.encodeBase64("Hello")], + blockNgrams: [BlockListManager.encodeBase64("hello")], language: "en", }); diff --git a/browser/components/migration/ChromeProfileMigrator.sys.mjs b/browser/components/migration/ChromeProfileMigrator.sys.mjs index 896f2a83e5b..12a1845e56d 100644 --- a/browser/components/migration/ChromeProfileMigrator.sys.mjs +++ b/browser/components/migration/ChromeProfileMigrator.sys.mjs @@ -611,18 +611,25 @@ export class ChromeProfileMigrator extends MigratorBase { let cards = []; for (let row of rows) { - cards.push({ - "cc-name": row.getResultByName("name_on_card"), - "cc-number": await loginCrypto.decryptData( - row.getResultByName("card_number_encrypted"), - null - ), - "cc-exp-month": parseInt( - row.getResultByName("expiration_month"), - 10 - ), - "cc-exp-year": parseInt(row.getResultByName("expiration_year"), 10), - }); + try { + cards.push({ + "cc-name": row.getResultByName("name_on_card"), + "cc-number": await loginCrypto.decryptData( + row.getResultByName("card_number_encrypted"), + null + ), + "cc-exp-month": parseInt( + row.getResultByName("expiration_month"), + 10 + ), + "cc-exp-year": parseInt( + row.getResultByName("expiration_year"), + 10 + ), + }); + } catch (e) { + console.error(e); + } } await MigrationUtils.insertCreditCardsWrapper(cards); diff --git a/browser/components/newtab/metrics.yaml b/browser/components/newtab/metrics.yaml index 21ca750170a..37c8a393753 100644 --- a/browser/components/newtab/metrics.yaml +++ b/browser/components/newtab/metrics.yaml @@ -1002,6 +1002,38 @@ newtab: send_in_pings: - newtab + metric_registered: + type: labeled_boolean + description: > + Records technical data about whether the metric registration + at runtime succeeded + bugs: + - https://bugzil.la/1961989 + data_reviews: + - https://bugzil.la/1961989 + data_sensitivity: + - technical + notification_emails: + - pdahiya@mozilla.com + - mconley@mozilla.com + expires: never + + ping_registered: + type: labeled_boolean + description: > + Records technical data about whether the ping registration + at runtime succeeded + bugs: + - https://bugzil.la/1961989 + data_reviews: + - https://bugzil.la/1961989 + data_sensitivity: + - technical + notification_emails: + - pdahiya@mozilla.com + - mconley@mozilla.com + expires: never + newtab.search: enabled: lifetime: application @@ -1503,22 +1535,6 @@ pocket: description: > If click belongs in a section, the numeric position of the section type: string - title: &title - description: > - Title of the article - type: string - url: &url - description: > - Url of the article - type: string - time_sensitive: &time_sensitive - description: > - Indicates whether the article is time sensitive. This is passed down from merino - type: boolean - publisher: &publisher - description: > - derived publisher name of article - type: string is_section_followed: *is_section_followed send_in_pings: - newtab @@ -1586,10 +1602,6 @@ pocket: If click belongs in a section, the numeric position of the section type: string is_section_followed: *is_section_followed - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab @@ -1632,10 +1644,6 @@ pocket: If click belongs in a section, the numeric position of the section type: string is_section_followed: *is_section_followed - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab @@ -1846,10 +1854,6 @@ pocket: If event belongs in a section, the numeric position of the section type: string is_section_followed: *is_section_followed - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab @@ -2073,10 +2077,6 @@ newtab_content: description: > If click belongs in a section, if that section is followed type: boolean - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab-content @@ -2134,10 +2134,6 @@ newtab_content: description: > If click belongs in a section, if that section is followed type: boolean - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab-content @@ -2179,10 +2175,6 @@ newtab_content: description: > If click belongs in a section, if that section is followed type: boolean - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab-content @@ -2237,10 +2229,6 @@ newtab_content: description: > If event belongs in a section, if that section is followed type: boolean - title: *title - url: *url - time_sensitive: *time_sensitive - publisher: *publisher send_in_pings: - newtab-content diff --git a/browser/components/preferences/main.inc.xhtml b/browser/components/preferences/main.inc.xhtml index f9129fb1713..cb7f1c8c32b 100644 --- a/browser/components/preferences/main.inc.xhtml +++ b/browser/components/preferences/main.inc.xhtml @@ -214,9 +214,7 @@ - -
diff --git a/browser/extensions/newtab/content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx b/browser/extensions/newtab/content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx index 197ed0fc600..5a3c9c2da7d 100644 --- a/browser/extensions/newtab/content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx +++ b/browser/extensions/newtab/content-src/components/DiscoveryStreamImpressionStats/ImpressionStats.jsx @@ -120,10 +120,6 @@ export class ImpressionStats extends React.PureComponent { received_rank: link.received_rank, topic: link.topic, is_list_card: link.is_list_card, - url: link.url, - title: link.title, - publisher: link.publisher, - time_sensitive: link.time_sensitive, ...(link.format ? { format: link.format } : { diff --git a/browser/extensions/newtab/content-src/components/Notifications/Toasts/ReportContentToast.jsx b/browser/extensions/newtab/content-src/components/Notifications/Toasts/ReportContentToast.jsx index 818e54a0713..29d171bdd38 100644 --- a/browser/extensions/newtab/content-src/components/Notifications/Toasts/ReportContentToast.jsx +++ b/browser/extensions/newtab/content-src/components/Notifications/Toasts/ReportContentToast.jsx @@ -31,7 +31,7 @@ function ReportContentToast({ onDismissClick, onAnimationEnd }) { type="success" class="notification-feed-item" dismissable={true} - data-l10n-id="newtab-toast-thanks-for-feedback" + data-l10n-id="newtab-toast-thanks-for-reporting" ref={mozMessageBarRef} onAnimationEnd={onAnimationEnd} > diff --git a/browser/extensions/newtab/content-src/components/Weather/Weather.jsx b/browser/extensions/newtab/content-src/components/Weather/Weather.jsx index 8a85faa7eae..60235d719f5 100644 --- a/browser/extensions/newtab/content-src/components/Weather/Weather.jsx +++ b/browser/extensions/newtab/content-src/components/Weather/Weather.jsx @@ -294,7 +294,7 @@ export class _Weather extends React.PureComponent { diff --git a/browser/extensions/newtab/content-src/lib/link-menu-options.mjs b/browser/extensions/newtab/content-src/lib/link-menu-options.mjs index 3c61297c124..51e8ac241a9 100644 --- a/browser/extensions/newtab/content-src/lib/link-menu-options.mjs +++ b/browser/extensions/newtab/content-src/lib/link-menu-options.mjs @@ -75,9 +75,6 @@ export const LinkMenuOptions = { typedBonus: site.typedBonus, url: site.url, sponsored_tile_id: site.sponsored_tile_id, - title: site.title, - publisher: site.publisher, - time_sensitive: site.time_sensitive, ...(site.section ? { section: site.section, @@ -132,9 +129,6 @@ export const LinkMenuOptions = { ...(site.sponsored_tile_id ? { tile_id: site.sponsored_tile_id } : {}), is_pocket_card: site.type === "CardGrid", is_list_card: site.is_list_card, - title: site.title, - publisher: site.publisher, - time_sensitive: site.time_sensitive, ...(site.format ? { format: site.format } : {}), ...(site.section ? { diff --git a/browser/extensions/newtab/content-src/styles/_mixins.scss b/browser/extensions/newtab/content-src/styles/_mixins.scss index 4b9891aad69..aea59d0dcf7 100644 --- a/browser/extensions/newtab/content-src/styles/_mixins.scss +++ b/browser/extensions/newtab/content-src/styles/_mixins.scss @@ -1,3 +1,5 @@ +@use 'sass:map'; + // Shared styling of article images shown as background @mixin image-as-background { background-color: var(--newtab-element-secondary-color); @@ -60,3 +62,15 @@ color-scheme: dark; } } + +// Used to visualize the different breakpoints on an applied element +// See variables.scss for $debug-breakpoints +@mixin debug-breakpoints { + @each $name, $value in $debug-breakpoints { + $color: map.get($debug-breakpoint-colors, $name); + + @media (min-width: $value) { + outline: 1px solid #{$color}; + } + } +} diff --git a/browser/extensions/newtab/content-src/styles/_variables.scss b/browser/extensions/newtab/content-src/styles/_variables.scss index aeee787848c..dbf7d1acbdc 100644 --- a/browser/extensions/newtab/content-src/styles/_variables.scss +++ b/browser/extensions/newtab/content-src/styles/_variables.scss @@ -100,7 +100,8 @@ $scrollbar-width: 16px; // Breakpoints // If updating these breakpoints, don't forget to update uses of DSImage, which -// might choose the right image src to use depending on the viewport size. +// might choose the right image src to use depending on the viewport size +// and the $debug-breakpoints list below $break-point-small: 510px; $break-point-medium: $wrapper-max-width-medium + $base-gutter * 2 + $scrollbar-width; // 610px // A temporary breakpoint for a new layout experiment. @@ -112,6 +113,27 @@ $break-point-sections-variant: 1310px + $base-gutter * 2 + $scrollbar-width; // $break-point-weather: $wrapper-max-width-weather + $base-gutter * 2 + $scrollbar-width; // 1506px $break-point-ultra-wide: $wrapper-max-width-ultra-wide + $base-gutter * 2 + $scrollbar-width; // 1698px +// Used for @include debug-breakpoints in mixins.scss +$debug-breakpoints: ( + small: $break-point-small, + medium: $break-point-medium, + large: $break-point-large, + widest: $break-point-widest, + sections-variant: $break-point-sections-variant, + weather: $break-point-weather, + ultra-wide: $break-point-ultra-wide +); + +$debug-breakpoint-colors: ( + small: red, + medium: orange, + large: yellow, + widest: green, + sections-variant: blue, + weather: purple, + ultra-wide: violet +); + $section-title-font-size: 17px; $card-width: $grid-unit-small * 2 + $base-gutter; diff --git a/browser/extensions/newtab/data/content/activity-stream.bundle.js b/browser/extensions/newtab/data/content/activity-stream.bundle.js index 3a653781359..f2cec99a77b 100644 --- a/browser/extensions/newtab/data/content/activity-stream.bundle.js +++ b/browser/extensions/newtab/data/content/activity-stream.bundle.js @@ -1764,9 +1764,6 @@ const LinkMenuOptions = { typedBonus: site.typedBonus, url: site.url, sponsored_tile_id: site.sponsored_tile_id, - title: site.title, - publisher: site.publisher, - time_sensitive: site.time_sensitive, ...(site.section ? { section: site.section, @@ -1821,9 +1818,6 @@ const LinkMenuOptions = { ...(site.sponsored_tile_id ? { tile_id: site.sponsored_tile_id } : {}), is_pocket_card: site.type === "CardGrid", is_list_card: site.is_list_card, - title: site.title, - publisher: site.publisher, - time_sensitive: site.time_sensitive, ...(site.format ? { format: site.format } : {}), ...(site.section ? { @@ -2791,10 +2785,6 @@ class ImpressionStats_ImpressionStats extends (external_React_default()).PureCom received_rank: link.received_rank, topic: link.topic, is_list_card: link.is_list_card, - url: link.url, - title: link.title, - publisher: link.publisher, - time_sensitive: link.time_sensitive, ...(link.format ? { format: link.format } : { @@ -3665,10 +3655,6 @@ class _DSCard extends (external_React_default()).PureComponent { matches_selected_topic: matchesSelectedTopic, selected_topics: this.props.selectedTopics, is_list_card: this.props.isListCard, - title: this.props.title, - url: this.props.url, - publisher: this.props.publisher, - time_sensitive: this.props.isTimeSensitive, ...(this.props.format ? { format: this.props.format } : { @@ -3697,10 +3683,6 @@ class _DSCard extends (external_React_default()).PureComponent { topic: this.props.topic, selected_topics: this.props.selectedTopics, is_list_card: this.props.isListCard, - title: this.props.title, - url: this.props.url, - publisher: this.props.publisher, - time_sensitive: this.props.isTimeSensitive, ...(this.props.format ? { format: this.props.format } : { @@ -3745,10 +3727,6 @@ class _DSCard extends (external_React_default()).PureComponent { thumbs_up: true, thumbs_down: false, topic: this.props.topic, - title: this.props.title, - url: this.props.url, - publisher: this.props.publisher, - time_sensitive: this.props.isTimeSensitive, format: getActiveCardSize(window.innerWidth, this.props.sectionsClassNames, this.props.section, false // (thumbs up/down only exist on organic content) ), ...(this.props.section ? { @@ -3826,10 +3804,6 @@ class _DSCard extends (external_React_default()).PureComponent { thumbs_up: false, thumbs_down: true, topic: this.props.topic, - title: this.props.title, - url: this.props.url, - publisher: this.props.publisher, - time_sensitive: this.props.isTimeSensitive, format: getActiveCardSize(window.innerWidth, this.props.sectionsClassNames, this.props.section, false // (thumbs up/down only exist on organic content) ), ...(this.props.section ? { @@ -4128,9 +4102,7 @@ class _DSCard extends (external_React_default()).PureComponent { format: format, isSectionsCard: this.props.mayHaveSectionsCards, topic: this.props.topic, - selected_topics: this.props.selected_topics, - time_sensitive: this.props.isTimeSensitive, - publisher: this.props.publisher + selected_topics: this.props.selected_topics })))); } } @@ -13491,7 +13463,7 @@ class _Weather extends (external_React_default()).PureComponent { className: "weatherCard" }, /*#__PURE__*/external_React_default().createElement("a", { "data-l10n-id": "newtab-weather-see-forecast", - "data-l10n-args": "{\"provider\": \"AccuWeather\"}", + "data-l10n-args": "{\"provider\": \"AccuWeather\xAE\"}", href: WEATHER_SUGGESTION.forecast.url, className: "weatherInfoLink", onClick: this.onProviderClick @@ -13519,7 +13491,7 @@ class _Weather extends (external_React_default()).PureComponent { className: "weatherSponsorText" }, /*#__PURE__*/external_React_default().createElement("span", { "data-l10n-id": "newtab-weather-sponsored", - "data-l10n-args": "{\"provider\": \"AccuWeather\"}" + "data-l10n-args": "{\"provider\": \"AccuWeather\xAE\"}" }))); } return /*#__PURE__*/external_React_default().createElement("div", { @@ -13616,7 +13588,7 @@ function ReportContentToast({ type: "success", class: "notification-feed-item", dismissable: true, - "data-l10n-id": "newtab-toast-thanks-for-feedback", + "data-l10n-id": "newtab-toast-thanks-for-reporting", ref: mozMessageBarRef, onAnimationEnd: onAnimationEnd }); diff --git a/browser/extensions/newtab/data/content/assets/waving-fox.svg b/browser/extensions/newtab/data/content/assets/waving-fox.svg index cb89ec10cd2..58a9ac51aa4 100644 --- a/browser/extensions/newtab/data/content/assets/waving-fox.svg +++ b/browser/extensions/newtab/data/content/assets/waving-fox.svg @@ -1,4 +1,4 @@ - \ No newline at end of file + - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> + \ No newline at end of file diff --git a/browser/extensions/newtab/lib/ActivityStream.sys.mjs b/browser/extensions/newtab/lib/ActivityStream.sys.mjs index ac747661a80..3c182a11f75 100644 --- a/browser/extensions/newtab/lib/ActivityStream.sys.mjs +++ b/browser/extensions/newtab/lib/ActivityStream.sys.mjs @@ -48,6 +48,11 @@ import { actionTypes as at, } from "resource://newtab/common/Actions.mjs"; +const REGION_INFERRED_PERSONALIZATION_CONFIG = + "browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.region-config"; +const LOCALE_INFERRED_PERSONALIZATION_CONFIG = + "browser.newtabpage.activity-stream.discoverystream.sections.personalization.inferred.locale-config"; + const REGION_WEATHER_CONFIG = "browser.newtabpage.activity-stream.discoverystream.region-weather-config"; const LOCALE_WEATHER_CONFIG = @@ -94,6 +99,13 @@ export function csvPrefHasValue(stringPrefName, value) { return prefValues.includes(value); } +function useInferredPersonalization({ geo, locale }) { + return ( + csvPrefHasValue(REGION_INFERRED_PERSONALIZATION_CONFIG, geo) && + csvPrefHasValue(LOCALE_INFERRED_PERSONALIZATION_CONFIG, locale) + ); +} + // Determine if spocs should be shown for a geo/locale function showSpocs({ geo }) { const spocsGeoString = @@ -636,7 +648,8 @@ export const PREFS_CONFIG = new Map([ "discoverystream.sections.personalization.inferred.enabled", { title: "Boolean flag to enable inferred personalizaton", - value: false, + // pref is dynamic + getValue: useInferredPersonalization, }, ], [ diff --git a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs index 753bc1be33d..76a3b74cfb7 100644 --- a/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs +++ b/browser/extensions/newtab/lib/DiscoveryStreamFeed.sys.mjs @@ -1941,7 +1941,7 @@ export class DiscoveryStreamFeed { const interestPickerEnabled = prefs[PREF_INTEREST_PICKER_ENABLED]; const requestMetadata = { - otc_offset: lazy.NewTabUtils.getUtcOffset(), + utc_offset: lazy.NewTabUtils.getUtcOffset(), coarse_os: lazy.NewTabUtils.normalizeOs(), coarse_os_version: lazy.ClientEnvironmentBase.os.version, surface_id: prefs[PREF_SURFACE_ID] || "", diff --git a/browser/extensions/newtab/lib/NewTabGleanUtils.sys.mjs b/browser/extensions/newtab/lib/NewTabGleanUtils.sys.mjs new file mode 100644 index 00000000000..e8a44adf326 --- /dev/null +++ b/browser/extensions/newtab/lib/NewTabGleanUtils.sys.mjs @@ -0,0 +1,279 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const lazy = {}; + +ChromeUtils.defineLazyGetter(lazy, "logConsole", function () { + return console.createInstance({ + prefix: "NewTabGleanUtils", + maxLogLevel: Services.prefs.getBoolPref( + "browser.newtab.builtin-addon.log", + false + ) + ? "Debug" + : "Warn", + }); +}); + +/** + * Module for managing Glean telemetry metrics and pings in the New Tab page. + * This object provides functionality to: + * - Read and parse JSON configuration files containing metrics and ping definitions + * - Register metrics and pings at runtime + * - Convert between different naming conventions (dotted snake case, kebab case, camel case) + * - Handle metric and ping registration with proper error handling and logging + */ +export const NewTabGleanUtils = { + /** + * Fetches and parses a JSON file from a given resource URI. + * + * @param {string} resourceURI - The URI of the JSON file to fetch and parse + * @returns {Promise} A promise that resolves to the parsed JSON object + */ + async readJSON(resourceURI) { + let result = await fetch(resourceURI); + return result.json(); + }, + /** + * Processes and registers Glean metrics and pings from a JSON configuration file. + * This method performs two main operations: + * 1. Registers all pings defined in the configuration + * 2. Registers all metrics under their respective categories + * Example: await NewTabGleanUtils.registerMetricsAndPings("resource://path/to/metrics.json"); + * + * @param {string} resourceURI - The URI of the JSON file containing metrics and pings definitions + * @returns {Promise} A promise that resolves when all metrics and pings are registered + * If a metric or ping registration fails, all further registration halts and this Promise + * will still resolve (errors will be logged to the console). + */ + async registerMetricsAndPings(resourceURI) { + try { + const data = await this.readJSON(resourceURI); + + // Check if data exists and has either metrics or pings to register + if (!data || (!data.metrics && !data.pings)) { + lazy.logConsole.log("No metrics or pings found in the JSON file"); + return false; + } + + // First register all pings from the JSON file + if (data.pings) { + for (const [pingName, pingConfig] of Object.entries(data.pings)) { + await this.registerPingIfNeeded({ + name: pingName, + ...pingConfig, + }); + } + } + + // Then register all metrics under their respective categories + if (data.metrics) { + for (const [category, metrics] of Object.entries(data.metrics)) { + for (const [name, config] of Object.entries(metrics)) { + await this.registerMetricIfNeeded({ + ...config, + category, + name, + }); + } + } + } + lazy.logConsole.debug( + "Successfully registered metrics and pings found in the JSON file" + ); + return true; + } catch (e) { + lazy.logConsole.error( + "Failed to complete registration of metrics and pings found in runtime metrics JSON:", + e + ); + return false; + } + }, + + /** + * Registers a metric in Glean if it doesn't already exist. + * @param {Object} options - The metric configuration options + * @param {string} options.type - The type of metric (e.g., "text", "counter") + * @param {string} options.category - The category the metric belongs to + * @param {string} options.name - The name of the metric + * @param {string[]} options.pings - Array of ping names this metric belongs to + * @param {string} options.lifetime - The lifetime of the metric + * @param {boolean} [options.disabled] - Whether the metric is disabled + * @param {Object} [options.extraArgs] - Additional arguments for the metric + * @throws {Error} If a new metrics registration fails and error will be logged in console + */ + registerMetricIfNeeded(options) { + const { type, category, name, pings, lifetime, disabled, extraArgs } = + options; + + // Glean metric to record the success of metric registration for telemetry purposes. + let gleanSuccessMetric = Glean.newtab.metricRegistered[name]; + + try { + let categoryName = this.dottedSnakeToCamel(category); + let metricName = this.dottedSnakeToCamel(name); + + if (categoryName in Glean && metricName in Glean[categoryName]) { + lazy.logConsole.warn( + `Fail to register metric ${name} in category ${category} as it already exists` + ); + return; + } + + // Convert extraArgs to JSON string for metrics type event + let extraArgsJson = null; + if (type === "event" && extraArgs && Object.keys(extraArgs).length) { + extraArgsJson = JSON.stringify(extraArgs); + } + + // Metric doesn't exist, register it + lazy.logConsole.debug(`Registering metric ${name} at runtime`); + + // Register the metric + Services.fog.registerRuntimeMetric( + type, + category, + name, + pings, + `"${lifetime}"`, + disabled, + extraArgsJson + ); + gleanSuccessMetric.set(true); + } catch (e) { + gleanSuccessMetric.set(false); + lazy.logConsole.error(`Error registering metric ${name}: ${e}`); + throw new Error(`Failure while registering metrics ${name} `); + } + }, + + /** + * Registers a ping in Glean if it doesn't already exist. + * @param {Object} options - The ping configuration options + * @param {string} options.name - The name of the ping + * @param {boolean} [options.includeClientId] - Whether to include client ID + * @param {boolean} [options.sendIfEmpty] - Whether to send ping if empty + * @param {boolean} [options.preciseTimestamps] - Whether to use precise timestamps + * @param {boolean} [options.includeInfoSections] - Whether to include info sections + * @param {boolean} [options.enabled] - Whether the ping is enabled + * @param {string[]} [options.schedulesPings] - Array of scheduled ping times + * @param {string[]} [options.reasonCodes] - Array of valid reason codes + * @param {boolean} [options.followsCollectionEnabled] - Whether ping follows collection enabled state + * @param {string[]} [options.uploaderCapabilities] - Array of uploader capabilities for this ping + * @throws {Error} If a new ping registration fails and error will be logged in console + */ + registerPingIfNeeded(options) { + const { + name, + includeClientId, + sendIfEmpty, + preciseTimestamps, + includeInfoSections, + enabled, + schedulesPings, + reasonCodes, + followsCollectionEnabled, + uploaderCapabilities, + } = options; + + // Glean metric to record the success of ping registration for telemetry purposes. + let gleanSuccessPing = Glean.newtab.pingRegistered[name]; + try { + let pingName = this.kebabToCamel(name); + if (pingName in GleanPings) { + lazy.logConsole.warn( + `Fail to register ping ${name} as it already exists` + ); + return; + } + + // Ping doesn't exist, register it + lazy.logConsole.debug(`Registering ping ${name} at runtime`); + + Services.fog.registerRuntimePing( + name, + includeClientId, + sendIfEmpty, + preciseTimestamps, + includeInfoSections, + enabled, + schedulesPings, + reasonCodes, + followsCollectionEnabled, + uploaderCapabilities + ); + gleanSuccessPing.set(true); + } catch (e) { + gleanSuccessPing.set(false); + lazy.logConsole.error(`Error registering ping ${name}: ${e}`); + throw new Error(`Failure while registering ping ${name} `); + } + }, + + /** + * Converts a dotted snake case string to camel case. + * Example: "foo.bar_baz" becomes "fooBarBaz" + * @param {string} metricNameOrCategory - The string in dotted snake case format + * @returns {string} The converted camel case string + */ + dottedSnakeToCamel(metricNameOrCategory) { + if (!metricNameOrCategory) { + return ""; + } + + let camel = ""; + // Split by underscore and then by dots + const segments = metricNameOrCategory.split("_"); + for (const segment of segments) { + const parts = segment.split("."); + for (const part of parts) { + if (!camel) { + camel += part; + } else if (part.length) { + const firstChar = part.charAt(0); + if (firstChar >= "a" && firstChar <= "z") { + // Capitalize first letter and append rest of the string + camel += firstChar.toUpperCase() + part.slice(1); + } else { + // If first char is not a-z, append as is + camel += part; + } + } + } + } + return camel; + }, + + /** + * Converts a kebab case string to camel case. + * Example: "foo-bar-baz" becomes "fooBarBaz" + * @param {string} pingName - The string in kebab case format + * @returns {string} The converted camel case string + */ + kebabToCamel(pingName) { + if (!pingName) { + return ""; + } + + let camel = ""; + // Split by hyphens + const segments = pingName.split("-"); + for (const segment of segments) { + if (!camel) { + camel += segment; + } else if (segment.length) { + const firstChar = segment.charAt(0); + if (firstChar >= "a" && firstChar <= "z") { + // Capitalize first letter and append rest of the string + camel += firstChar.toUpperCase() + segment.slice(1); + } else { + // If first char is not a-z, append as is + camel += segment; + } + } + } + return camel; + }, +}; diff --git a/browser/extensions/newtab/lib/TelemetryFeed.sys.mjs b/browser/extensions/newtab/lib/TelemetryFeed.sys.mjs index 859380812a7..851779247c3 100644 --- a/browser/extensions/newtab/lib/TelemetryFeed.sys.mjs +++ b/browser/extensions/newtab/lib/TelemetryFeed.sys.mjs @@ -145,14 +145,14 @@ export class TelemetryFeed { return this._prefs.get(PREF_PRIVATE_PING_ENABLED); } - get clientInfo() { - return lazy.ClientEnvironmentBase; - } - get experimentManager() { return lazy.ExperimentManager; } + get clientInfo() { + return lazy.ClientEnvironmentBase; + } + get canSendUnifiedAdsSpocCallbacks() { const unifiedAdsSpocsEnabled = this._prefs.get( PREF_UNIFIED_ADS_SPOCS_ENABLED @@ -617,10 +617,6 @@ export class TelemetryFeed { shim, tile_id, topic, - url, - title, - publisher, - time_sensitive, } = action.data.value ?? {}; if ( action.data.source === "POPULAR_TOPICS" || @@ -656,10 +652,6 @@ export class TelemetryFeed { is_list_card, position: action.data.action_position, tile_id, - url, - title, - publisher, - time_sensitive, // We conditionally add in a few props. ...(corpus_item_id ? { corpus_item_id } : {}), ...(scheduled_corpus_item_id ? { scheduled_corpus_item_id } : {}), @@ -711,10 +703,6 @@ export class TelemetryFeed { thumbs_up, tile_id, topic, - url, - title, - publisher, - time_sensitive, } = action.data.value ?? {}; const metricNameSpace = this.privatePingEnabled ? Glean.newtabContent @@ -737,10 +725,6 @@ export class TelemetryFeed { thumbs_down, topic, ...(format ? { format } : {}), - url, - title, - publisher, - time_sensitive, ...(section ? { section, @@ -1396,10 +1380,6 @@ export class TelemetryFeed { position: datum.pos, tile_id: datum.id || datum.tile_id, is_list_card: datum.is_list_card, - url: datum.url, - title: datum.title, - publisher: datum.publisher, - time_sensitive: datum.time_sensitive, ...(datum.section ? { section: datum.section, @@ -1492,10 +1472,6 @@ export class TelemetryFeed { topic: tile.topic, selected_topics: tile.selectedTopics, is_list_card: tile.is_list_card, - url: tile.url, - title: tile.title, - publisher: tile.publisher, - time_sensitive: tile.time_sensitive, // We conditionally add in a few props. ...(corpus_item_id ? { corpus_item_id } : {}), ...(scheduled_corpus_item_id ? { scheduled_corpus_item_id } : {}), diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CollectionCardGrid.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CollectionCardGrid.test.jsx index 700ec8c4b0b..1c8a1b39e89 100644 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CollectionCardGrid.test.jsx +++ b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/CollectionCardGrid.test.jsx @@ -122,9 +122,6 @@ describe("", () => { position: 0, is_pocket_card: false, is_list_card: undefined, - title: undefined, - time_sensitive: undefined, - publisher: undefined, })); assert.deepEqual(firstCall.args[0].data, expected); diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx index 6572ab322ba..4a9320e681d 100644 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx +++ b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSCard.test.jsx @@ -318,10 +318,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "medium-card", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, }) ); @@ -340,10 +336,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "medium-card", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, ], window_inner_width: 1000, @@ -387,10 +379,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "spoc", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, }) ); @@ -409,10 +397,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "spoc", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, ], window_inner_width: 1000, @@ -459,10 +443,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "medium-card", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, }) ); @@ -482,10 +462,6 @@ describe("", () => { selected_topics: undefined, is_list_card: undefined, format: "medium-card", - title: "title", - url: "about:robots", - publisher: undefined, - time_sensitive: undefined, }, ], window_inner_width: 1000, diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSTextPromo.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSTextPromo.test.jsx index 7ab7d85710f..963c104bd48 100644 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSTextPromo.test.jsx +++ b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/DSTextPromo.test.jsx @@ -85,9 +85,6 @@ describe("", () => { position: 0, is_pocket_card: false, is_list_card: undefined, - title: undefined, - publisher: undefined, - time_sensitive: undefined, }, ]); diff --git a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/ImpressionStats.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/ImpressionStats.test.jsx index c4f8b80b127..4fb0d38ee9c 100644 --- a/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/ImpressionStats.test.jsx +++ b/browser/extensions/newtab/test/unit/content-src/components/DiscoveryStreamComponents/ImpressionStats.test.jsx @@ -149,10 +149,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, { id: 2, @@ -167,10 +163,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, { id: 3, @@ -185,10 +177,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, ]); assert.equal( @@ -282,10 +270,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, { id: 2, @@ -300,10 +284,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, { id: 3, @@ -318,10 +298,6 @@ describe("", () => { topic: undefined, is_list_card: undefined, format: "medium-card", - title: undefined, - url: undefined, - publisher: undefined, - time_sensitive: undefined, }, ]); assert.equal( diff --git a/browser/extensions/newtab/test/unit/content-src/components/LinkMenu.test.jsx b/browser/extensions/newtab/test/unit/content-src/components/LinkMenu.test.jsx index d1727ca378c..90008d80be2 100644 --- a/browser/extensions/newtab/test/unit/content-src/components/LinkMenu.test.jsx +++ b/browser/extensions/newtab/test/unit/content-src/components/LinkMenu.test.jsx @@ -373,8 +373,6 @@ describe("", () => { typedBonus: true, url: "https://foo.com", sponsored_tile_id: 12345, - publisher: "foo", - time_sensitive: true, }; const dispatch = sinon.stub(); const propOptions = [ @@ -409,9 +407,6 @@ describe("", () => { referrer: FAKE_SITE.referrer, typedBonus: FAKE_SITE.typedBonus, sponsored_tile_id: FAKE_SITE.sponsored_tile_id, - publisher: FAKE_SITE.publisher, - time_sensitive: FAKE_SITE.time_sensitive, - title: FAKE_SITE.title, }, "newtab-menu-open-new-private-window": { url: FAKE_SITE.url, @@ -433,9 +428,6 @@ describe("", () => { position: 3, is_pocket_card: false, is_list_card: undefined, - publisher: FAKE_SITE.publisher, - time_sensitive: FAKE_SITE.time_sensitive, - title: FAKE_SITE.title, }, ], menu_action_webext_dismiss: { @@ -608,8 +600,6 @@ describe("", () => { typedBonus: true, url: "https://foo.com", sponsored_position: 1, - time_sensitive: false, - publisher: "foo", }; const { options: blockOptions } = shallow( ", () => { position: 3, is_pocket_card: false, is_list_card: undefined, - publisher: site.publisher, - time_sensitive: site.time_sensitive, - title: site.title, }; assert.deepEqual(blockUrlOption.action.data[0], expected); }); @@ -663,8 +650,6 @@ describe("", () => { type: "CardGrid", typedBonus: true, url: "https://foo.com", - time_sensitive: false, - publisher: "foo", }; const { options: blockOptions } = shallow( ", () => { position: 3, is_pocket_card: true, is_list_card: undefined, - publisher: site.publisher, - time_sensitive: site.time_sensitive, - title: site.title, }; assert.deepEqual(blockUrlOption.action.data[0], expected); }); diff --git a/browser/extensions/newtab/webext-glue/builtin-newtab.js b/browser/extensions/newtab/webext-glue/builtin-newtab.js index 2939461e143..796d275d3ad 100644 --- a/browser/extensions/newtab/webext-glue/builtin-newtab.js +++ b/browser/extensions/newtab/webext-glue/builtin-newtab.js @@ -22,6 +22,7 @@ const SUPPORTED_LOCALES = const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { AboutHomeStartupCache: "resource:///modules/AboutHomeStartupCache.sys.mjs", + NewTabGleanUtils: "resource://newtab/lib/NewTabGleanUtils.sys.mjs", }); const ResourceSubstitution = "newtab"; @@ -29,6 +30,15 @@ const ResourceSubstitution = "newtab"; this.builtin_newtab = class extends ExtensionAPI { #chromeHandle = null; + async registerMetricsFromJson() { + // The metrics we need to process were placed in webext-glue/metrics/runtime-metrics-.json + // That file will be generated by build scipt getting implemented with Bug 1960111 + const version = AppConstants.MOZ_APP_VERSION.match(/\d+/)[0]; + const metricsPath = `webext-glue/metrics/runtime-metrics-${version}.json`; + + lazy.NewTabGleanUtils.registerMetricsAndPings(`resource://newtab/${metricsPath}`); + } + onStartup() { if (!AppConstants.BROWSER_NEWTAB_AS_ADDON) { // If we're here, this must be the first launch of a profile where this @@ -73,9 +83,9 @@ this.builtin_newtab = class extends ExtensionAPI { ); L10nRegistry.getInstance().registerSources([newtabFileSource]); - // TODO: Dynamically register any Glean pings/metrics here. + // Dynamically register any Glean pings/metrics here. + this.registerMetricsFromJson(); } - redirector.builtInAddonInitialized(); } diff --git a/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-138.json b/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-138.json new file mode 100644 index 00000000000..6f8c4f36113 --- /dev/null +++ b/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-138.json @@ -0,0 +1,45 @@ +{ + "metrics": { + "newtab": { + "wallpaper_click": { + "type": "text", + "description": "Number of clicks", + "lifetime": "ping", + "pings": ["newtab"], + "disabled": false + }, + "load_time": { + "type": "event", + "description": "Time taken to load and render", + "lifetime": "ping", + "pings": ["spoc-1"], + "disabled": false, + "extraArgs": { + "allowed_extra_keys": ["is_page_followed", "newtab_visit_id"] + } + } + } + }, + "pings": { + "messaging-system": { + "includeClientId": false, + "sendIfEmpty": false, + "preciseTimestamps": true, + "includeInfoSections": true, + "enabled": true, + "schedulesPings": [], + "reasonCodes": [], + "followsCollectionEnabled": true + }, + "spoc-1": { + "includeClientId": false, + "sendIfEmpty": false, + "preciseTimestamps": true, + "includeInfoSections": true, + "enabled": true, + "schedulesPings": [], + "reasonCodes": ["click", "impression", "save"], + "followsCollectionEnabled": true + } + } +} diff --git a/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-139.json b/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-139.json new file mode 100644 index 00000000000..2ee1a37d073 --- /dev/null +++ b/browser/extensions/newtab/webext-glue/metrics/runtime-metrics-139.json @@ -0,0 +1,47 @@ +{ + "metrics": { + "newtab": { + "wallpaper_click": { + "type": "text", + "description": "Number of clicks", + "lifetime": "ping", + "pings": ["newtab"], + "disabled": false + }, + "load_time": { + "type": "event", + "description": "Time taken to load and render", + "lifetime": "ping", + "pings": ["spoc-1"], + "disabled": false, + "extraArgs": { + "allowed_extra_keys": ["is_page_followed", "newtab_visit_id"] + } + } + } + }, + "pings": { + "messaging-system": { + "includeClientId": false, + "sendIfEmpty": false, + "preciseTimestamps": true, + "includeInfoSections": true, + "enabled": true, + "schedulesPings": [], + "reasonCodes": [], + "followsCollectionEnabled": true, + "uploaderCapabilities": [] + }, + "spoc-1": { + "includeClientId": false, + "sendIfEmpty": false, + "preciseTimestamps": true, + "includeInfoSections": true, + "enabled": true, + "schedulesPings": [], + "reasonCodes": ["click", "impression", "save"], + "followsCollectionEnabled": true, + "uploaderCapabilities": [] + } + } +} diff --git a/browser/extensions/newtab/webext-glue/moz.build b/browser/extensions/newtab/webext-glue/moz.build index d067f94ab8b..96fb9bbfe9e 100644 --- a/browser/extensions/newtab/webext-glue/moz.build +++ b/browser/extensions/newtab/webext-glue/moz.build @@ -22,6 +22,7 @@ FINAL_TARGET_FILES += [ ] FINAL_TARGET_FILES["webext-glue"] += [ "background.js", + "metrics/**", "schema.json", ] FINAL_TARGET_PP_FILES["webext-glue"] += [ diff --git a/browser/extensions/webcompat/data/interventions.json b/browser/extensions/webcompat/data/interventions.json index 5afb150f154..006e84c3a28 100644 --- a/browser/extensions/webcompat/data/interventions.json +++ b/browser/extensions/webcompat/data/interventions.json @@ -3387,5 +3387,36 @@ } } ] + }, + "1961710": { + "label": "Office 365 email attachment download filename fix", + "bugs": { + "1961710": { + "issue": "user-interface-frustration", + "matches": [ + "*://*.live.com/*/GetFileAttachment*", + "*://*.live.net/*/GetFileAttachment*", + "*://*.office.com/*/GetFileAttachment*", + "*://*.office.net/*/GetFileAttachment*", + "*://*.office365.com/*/GetFileAttachment*", + "*://*.office365.us/*/GetFileAttachment*", + "*://*.outlook.cn/*/GetFileAttachment*", + "*://*.outlook.com/*/GetFileAttachment*", + "*://*.sharepoint.com/*/GetFileAttachment*" + ] + } + }, + "interventions": [ + { + "platforms": ["all"], + "alter_response_headers": [ + { + "headers": ["content-disposition"], + "replace": "filename\\*=UTF-8''([^;]+)", + "replacement": "filename=\"$1\"" + } + ] + } + ] } } diff --git a/browser/extensions/webcompat/data/shims.js b/browser/extensions/webcompat/data/shims.js index 35091fdf652..8ec7bbd7a12 100644 --- a/browser/extensions/webcompat/data/shims.js +++ b/browser/extensions/webcompat/data/shims.js @@ -497,6 +497,7 @@ const AVAILABLE_SHIMS = [ "fox11online.com", "cbs6albany.com", "okcfox.co", + "turnto10.com", ], matches: [ "*://www.googletagservices.com/tag/js/gpt.js*", @@ -986,7 +987,7 @@ const AVAILABLE_SHIMS = [ contentScripts: [ { js: "zendesk-asana-support.js", - matches: ["*://*.zendesk.com/agent/filters/*"], + matches: ["*://*.zendesk.com/*"], runAt: "document_start", }, ], diff --git a/browser/extensions/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js b/browser/extensions/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js index 7d647a73228..9c8a8d4ceff 100644 --- a/browser/extensions/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js +++ b/browser/extensions/webcompat/injections/js/bug1956165-www.youtube.com-picture-in-picture-fix.js @@ -41,11 +41,11 @@ Object.defineProperty(win, "outerHeight", outerHeightDesc); const originalExitFullscreen = win.Document.prototype.exitFullscreen; -const newExitFullscreen = exportFunction(function (...args) { +const newExitFullscreen = exportFunction(function () { if (this.inAndroidPipMode) { return undefined; } - return originalExitFullscreen.apply(this, args); + return originalExitFullscreen.apply(this); }, window); Object.defineProperty(win.Document.prototype, "exitFullscreen", { diff --git a/browser/extensions/webcompat/lib/custom_functions.js b/browser/extensions/webcompat/lib/custom_functions.js index 0111ef6ce55..b61fad6788b 100644 --- a/browser/extensions/webcompat/lib/custom_functions.js +++ b/browser/extensions/webcompat/lib/custom_functions.js @@ -35,9 +35,85 @@ const replaceStringInRequest = ( }; }; +const interventionListeners = new Map(); + +function rememberListener(intervention, key, listener) { + if (!interventionListeners.has(intervention)) { + interventionListeners.set(intervention, new Map()); + } + const map = interventionListeners.get(intervention); + if (map.has(key)) { + throw new Error(`multiple custom listeners have the same key ${key}`); + } + map.set(key, listener); +} + +function forgetListener(intervention, key) { + const map = interventionListeners.get(intervention); + if (!map) { + return undefined; + } + const listener = map.get(key); + map.delete(key); + return listener; +} + var CUSTOM_FUNCTIONS = { + alter_response_headers: { + details: ["headers", "replacement"], + optionalDetails: ["fallback", "replace", "types", "urls"], + getKey(config) { + return `alter_headers:${JSON.stringify(config)}`; + }, + enable(config, intervention) { + let { fallback, headers, replace, replacement, types, urls } = config; + if (!urls) { + urls = Object.values(intervention.bugs) + .map(bug => bug.matches) + .flat() + .filter(v => v !== undefined); + } + const regex = + replace === null ? null : new RegExp(replace ?? "^.*$", "gi"); + const listener = evt => { + let found = false; + const responseHeaders = []; + for (const header of evt.responseHeaders) { + if (headers.includes(header.name.toLowerCase())) { + if (regex !== null) { + found = true; + const value = header.value.replaceAll(regex, replacement); + responseHeaders.push({ name: header.name, value }); + } + } else { + responseHeaders.push(header); + } + } + if (!found && (replace === undefined || typeof fallback === "string")) { + responseHeaders.push({ + name: headers[0], + value: fallback ?? replacement, + }); + } + return { responseHeaders }; + }; + browser.webRequest.onHeadersReceived.addListener( + listener, + { types, urls }, + ["blocking", "responseHeaders"] + ); + rememberListener(intervention, this.getKey(config), listener); + }, + disable(config, intervention) { + const listener = forgetListener(intervention, this.getKey(config)); + if (listener) { + browser.webRequest.onHeadersReceived.removeListener(listener); + } + }, + }, replace_string_in_request: { - details: ["find", "replace", "urls", "types"], + details: ["find", "replace", "urls"], + optionalDetails: ["types"], enable(details) { const { find, replace, urls, types } = details; const listener = (details.listener = ({ requestId }) => { @@ -57,7 +133,8 @@ var CUSTOM_FUNCTIONS = { }, }, run_script_before_request: { - details: ["message", "urls", "script", "types"], + details: ["message", "urls", "script"], + optionalDetails: ["types"], enable(details, intervention) { const { bug } = intervention; const { message, script, types, urls } = details; diff --git a/browser/extensions/webcompat/lib/interventions.js b/browser/extensions/webcompat/lib/interventions.js index c525ece109f..078d65969e3 100644 --- a/browser/extensions/webcompat/lib/interventions.js +++ b/browser/extensions/webcompat/lib/interventions.js @@ -280,13 +280,15 @@ class Interventions { this._customFunctions )) { if (customFuncName in intervention) { - try { - await customFunc[action](config, intervention); - } catch (e) { - console.trace( - `Error while calling custom function ${customFuncName}.${action} for ${label}:`, - e - ); + for (const details of intervention[customFuncName]) { + try { + await customFunc[action](details, config); + } catch (e) { + console.trace( + `Error while calling custom function ${customFuncName}.${action} for ${label}:`, + e + ); + } } } } diff --git a/browser/extensions/webcompat/lib/shims.js b/browser/extensions/webcompat/lib/shims.js index 06c442c85cf..c259aa12294 100644 --- a/browser/extensions/webcompat/lib/shims.js +++ b/browser/extensions/webcompat/lib/shims.js @@ -1259,6 +1259,7 @@ class Shims { // should pass an empty array to disable this functionality. const needsShimHelpers = shimToApply.webExposedShimHelpers || shimToApply.needsShimHelpers; + runFirst = shimToApply.runFirst; const redirect = target || file; @@ -1273,6 +1274,16 @@ class Shims { let needConsoleMessage = true; + if (shimToApply.isSmartblockEmbedShim) { + try { + await browser.tabs.executeScript(tabId, { + file: `/lib/smartblock_embeds_helper.js`, + frameId, + runAt: "document_start", + }); + } catch (_) {} + } + if (runFirst) { try { await browser.tabs.executeScript(tabId, { diff --git a/browser/extensions/webcompat/lib/smartblock_embeds_helper.js b/browser/extensions/webcompat/lib/smartblock_embeds_helper.js new file mode 100644 index 00000000000..3a5eb03b9db --- /dev/null +++ b/browser/extensions/webcompat/lib/smartblock_embeds_helper.js @@ -0,0 +1,281 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* globals browser */ + +"use strict"; + +const SMARTBLOCK_EMBED_OBSERVER_TIMEOUT_MS = 10000; + +/** + * Helper library to create shims for Smartblock Embeds + * + */ +const embedHelperLib = (() => { + let prevRanShims = new Set(); + let originalEmbedContainers = []; + let embedPlaceholders = []; + let observerTimeout; + let newEmbedObserver; + + function sendMessageToAddon(message, shimId) { + return browser.runtime.sendMessage({ message, shimId }); + } + + function addonMessageHandler(message, SHIM_INFO) { + const { topic, shimId: sendingShimId } = message; + const { shimId: handlingShimId, scriptURL } = SHIM_INFO; + + // Only react to messages which are targeting this shim. + if (sendingShimId != handlingShimId) { + return; + } + + if (topic === "smartblock:unblock-embed") { + if (newEmbedObserver) { + newEmbedObserver.disconnect(); + newEmbedObserver = null; + } + + if (observerTimeout) { + clearTimeout(observerTimeout); + observerTimeout = null; + } + + // remove embed placeholders + embedPlaceholders.forEach((p, idx) => { + p.replaceWith(originalEmbedContainers[idx]); + }); + + // recreate scripts + let scriptElement = document.createElement("script"); + + // Set the script element's src with the website's principal instead of + // the content script principal to ensure the tracker script is not loaded + // via the content script's expanded principal. + scriptElement.wrappedJSObject.src = scriptURL; + document.body.appendChild(scriptElement); + } + } + + /** + * Replaces embeds with a SmartBlock Embed placeholder. Optionally takes a list + * of embeds to replace, otherwise will search for all embeds on the page. + * + * @param {HTMLElement[]} embedContainers - Array of elements to replace with placeholders. + * If the array is empty, this function will search + * for and replace all embeds on the page. + * + * @param {object} SHIM_INFO - Information about the shim wrapped in an object. + */ + async function createShimPlaceholders(embedContainers, SHIM_INFO) { + const { shimId, embedSelector, embedLogoURL, isTestShim } = SHIM_INFO; + + const [titleString, descriptionString, buttonString] = + await sendMessageToAddon("smartblockGetFluentString", shimId); + + if (!embedContainers.length) { + // No containers were passed in, do own search for containers + embedContainers = document.querySelectorAll(embedSelector); + } + + embedContainers.forEach(originalContainer => { + // this string has to be defined within this function to avoid linting errors + // see: https://github.com/mozilla/eslint-plugin-no-unsanitized/issues/259 + const SMARTBLOCK_PLACEHOLDER_HTML_STRING = ` + +
+ +

+

+ +
`; + + // Create the placeholder inside a shadow dom + const placeholderDiv = document.createElement("div"); + + if (isTestShim) { + // Tag the div with a class to make it easily detectable FOR THE TEST SHIM ONLY + placeholderDiv.classList.add("shimmed-embedded-content"); + } + + const shadowRoot = placeholderDiv.attachShadow({ mode: "closed" }); + + shadowRoot.innerHTML = SMARTBLOCK_PLACEHOLDER_HTML_STRING; + shadowRoot.getElementById("smartblock-placeholder-image").src = + embedLogoURL; + shadowRoot.getElementById("smartblock-placeholder-title").textContent = + titleString; + shadowRoot.getElementById("smartblock-placeholder-desc").textContent = + descriptionString; + shadowRoot.getElementById("smartblock-placeholder-button").textContent = + buttonString; + + // Wait for user to opt-in. + shadowRoot + .getElementById("smartblock-placeholder-button") + .addEventListener("click", ({ isTrusted }) => { + if (!isTrusted) { + return; + } + // Send a message to the addon to allow loading tracking resources + // needed by the embed. + sendMessageToAddon("embedClicked", shimId); + }); + + // Save the original embed element and the newly created placeholder + embedPlaceholders.push(placeholderDiv); + originalEmbedContainers.push(originalContainer); + + // Replace the embed with the placeholder + originalContainer.replaceWith(placeholderDiv); + + sendMessageToAddon("smartblockEmbedReplaced", shimId); + }); + + if (isTestShim) { + // Dispatch event to signal that the script is done replacing FOR TEST SHIM ONLY + const finishedEvent = new CustomEvent("smartblockEmbedScriptFinished", { + bubbles: true, + composed: true, + }); + window.dispatchEvent(finishedEvent); + } + } + + /** + * Creates a mutation observer to observe new changes after page load to monitor for + * new embeds. + * + * @param {object} SHIM_INFO - Information about the shim wrapped in an object. + */ + function createEmbedMutationObserver(SHIM_INFO) { + const { embedSelector } = SHIM_INFO; + + // Monitor for new embeds being added after page load so we can replace them + // with placeholders. + newEmbedObserver = new MutationObserver(mutations => { + for (let { addedNodes, target, type } of mutations) { + const nodes = type === "attributes" ? [target] : addedNodes; + for (const node of nodes) { + if (node.matches(embedSelector)) { + // If node is an embed, replace with placeholder + createShimPlaceholders([node], SHIM_INFO); + } else { + // If node is not an embed, check if any children are + // and replace if needed + let maybeEmbedNodeList = node.querySelectorAll?.(embedSelector); + if (maybeEmbedNodeList) { + createShimPlaceholders(maybeEmbedNodeList, SHIM_INFO); + } + } + } + } + }); + + newEmbedObserver.observe(document.documentElement, { + childList: true, + subtree: true, + attributes: true, + attributeFilter: ["id", "class"], + }); + + // Disconnect the mutation observer after a fixed (long) timeout to conserve resources. + observerTimeout = setTimeout(() => { + if (newEmbedObserver) { + newEmbedObserver.disconnect(); + } + }, SMARTBLOCK_EMBED_OBSERVER_TIMEOUT_MS); + } + + /** + * Initializes a smartblock embeds shim on the page. + * + * @param {object} SHIM_INFO - Information about the shim wrapped in an object. + */ + function initEmbedShim(SHIM_INFO) { + let { shimId } = SHIM_INFO; + + if (prevRanShims.has(shimId)) { + // we should not init shims twice + return; + } + + prevRanShims.add(shimId); + + // Listen for messages from the background script. + browser.runtime.onMessage.addListener(request => { + addonMessageHandler(request, SHIM_INFO); + }); + + // Listen for page changes in case of new embeds + createEmbedMutationObserver(SHIM_INFO); + + // Run placeholder creation + createShimPlaceholders([], SHIM_INFO); + } + + return { + initEmbedShim, + }; +})(); diff --git a/browser/extensions/webcompat/manifest.json b/browser/extensions/webcompat/manifest.json index 4ab392f8847..23ca04feed9 100644 --- a/browser/extensions/webcompat/manifest.json +++ b/browser/extensions/webcompat/manifest.json @@ -2,7 +2,7 @@ "manifest_version": 2, "name": "Web Compatibility Interventions", "description": "Urgent post-release fixes for web compatibility.", - "version": "139.9.0", + "version": "139.12.0", "browser_specific_settings": { "gecko": { "id": "webcompat@mozilla.org", @@ -98,6 +98,7 @@ "lib/custom_functions.js", "lib/interventions.js", "lib/shims.js", + "lib/smartblock_embeds_helper.js", "run.js" ] }, diff --git a/browser/extensions/webcompat/run.js b/browser/extensions/webcompat/run.js index 8bf83660c99..f93154c5fa6 100644 --- a/browser/extensions/webcompat/run.js +++ b/browser/extensions/webcompat/run.js @@ -7,7 +7,7 @@ /* globals AboutCompatBroker, AVAILABLE_SHIMS, CUSTOM_FUNCTIONS, Interventions, Shims */ -let interventions, shims; +var interventions, shims; const AVAILABLE_INTERVENTIONS = #include data/interventions.json diff --git a/browser/extensions/webcompat/shims/embed-test-shim.js b/browser/extensions/webcompat/shims/embed-test-shim.js index f567ece4755..e0c34e2eca1 100644 --- a/browser/extensions/webcompat/shims/embed-test-shim.js +++ b/browser/extensions/webcompat/shims/embed-test-shim.js @@ -2,248 +2,13 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -/* globals browser */ +/* globals browser, embedHelperLib */ -if (!window.smartblockTestShimInitialized) { - // Guard against this script running multiple times - window.smartblockTestShimInitialized = true; - - const SHIM_ID = "EmbedTestShim"; - - const SHIM_EMBED_CLASSES = ["broken-embed-content"]; - const SHIM_CLASS_SELECTORS = SHIM_EMBED_CLASSES.map( - className => `.${className}` - ).join(","); - - // Original URL of the test embed script. - const ORIGINAL_URL = - "https://itisatracker.org/browser/browser/extensions/webcompat/tests/browser/embed_test.js"; - // Use instagram logo as a test logo - const LOGO_URL = "https://smartblock.firefox.etp/instagram.svg"; - - // Timeout for observing new changes to the page - const OBSERVER_TIMEOUT_MS = 10000; - let observerTimeout; - let newEmbedObserver; - - let originalEmbedContainers = []; - let embedPlaceholders = []; - - function sendMessageToAddon(message) { - return browser.runtime.sendMessage({ message, shimId: SHIM_ID }); - } - - function addonMessageHandler(message) { - let { topic, shimId } = message; - // Only react to messages which are targeting this shim. - if (shimId != SHIM_ID) { - return; - } - - if (topic === "smartblock:unblock-embed") { - if (newEmbedObserver) { - newEmbedObserver.disconnect(); - newEmbedObserver = null; - } - - if (observerTimeout) { - clearTimeout(observerTimeout); - } - - // remove embed placeholders - embedPlaceholders.forEach((p, idx) => { - p.replaceWith(originalEmbedContainers[idx]); - }); - - // recreate scripts - let scriptElement = document.createElement("script"); - - // Set the script element's src with the website's principal instead of - // the content script principal to ensure the tracker script is not loaded - // via the content script's expanded principal. - scriptElement.wrappedJSObject.src = ORIGINAL_URL; - document.body.appendChild(scriptElement); - } - } - - /** - * Replaces embeds with a SmartBlock Embed placeholder. Optionally takes a list - * of embeds to replace, otherwise will search for all embeds on the page. - * - * @param {HTMLElement[]} embedContainers - Array of elements to replace with placeholders. - * If the array is empty, this function will search - * for and replace all embeds on the page. - */ - async function createShimPlaceholders(embedContainers = []) { - const [titleString, descriptionString, buttonString] = - await sendMessageToAddon("smartblockGetFluentString"); - - if (!embedContainers.length) { - // No containers were passed in, do own search for containers - embedContainers = document.querySelectorAll(SHIM_CLASS_SELECTORS); - } - - embedContainers.forEach(originalContainer => { - // this string has to be defined within this function to avoid linting errors - // see: https://github.com/mozilla/eslint-plugin-no-unsanitized/issues/259 - const SMARTBLOCK_PLACEHOLDER_HTML_STRING = ` - -
- -

-

- -
`; - - // Create the placeholder inside a shadow dom - const placeholderDiv = document.createElement("div"); - - // Tag the div with a class to make it easily detectable FOR THE TEST SHIM ONLY - placeholderDiv.classList.add("shimmed-embedded-content"); - - const shadowRoot = placeholderDiv.attachShadow({ mode: "closed" }); - - shadowRoot.innerHTML = SMARTBLOCK_PLACEHOLDER_HTML_STRING; - shadowRoot.getElementById("smartblock-placeholder-image").src = LOGO_URL; - shadowRoot.getElementById("smartblock-placeholder-title").textContent = - titleString; - shadowRoot.getElementById("smartblock-placeholder-desc").textContent = - descriptionString; - shadowRoot.getElementById("smartblock-placeholder-button").textContent = - buttonString; - - // Wait for user to opt-in. - shadowRoot - .getElementById("smartblock-placeholder-button") - .addEventListener("click", ({ isTrusted }) => { - if (!isTrusted) { - return; - } - // Send a message to the addon to allow loading tracking resources - // needed by the embed. - sendMessageToAddon("embedClicked"); - }); - - // Save the original embed element and the newly created placeholder - embedPlaceholders.push(placeholderDiv); - originalEmbedContainers.push(originalContainer); - - // Replace the embed with the placeholder - originalContainer.replaceWith(placeholderDiv); - - sendMessageToAddon("smartblockEmbedReplaced"); - }); - - // Dispatch event to signal that the script is done replacing FOR TEST SHIM ONLY - const finishedEvent = new CustomEvent("smartblockEmbedScriptFinished", { - bubbles: true, - composed: true, - }); - window.dispatchEvent(finishedEvent); - } - - // Listen for messages from the background script. - browser.runtime.onMessage.addListener(request => { - addonMessageHandler(request); - }); - - // Monitor for new embeds being added after page load so we can replace them - // with placeholders. - newEmbedObserver = new MutationObserver(mutations => { - for (let { addedNodes, target, type } of mutations) { - const nodes = type === "attributes" ? [target] : addedNodes; - for (const node of nodes) { - if ( - SHIM_EMBED_CLASSES.some(className => - node.classList?.contains(className) - ) - ) { - // If node is an embed, replace with placeholder - createShimPlaceholders([node]); - } else { - // If node is not an embed, check if any children are - // and replace if needed - let maybeEmbedNodeList = - node.querySelectorAll?.(SHIM_CLASS_SELECTORS); - if (maybeEmbedNodeList) { - createShimPlaceholders(maybeEmbedNodeList); - } - } - } - } - }); - - newEmbedObserver.observe(document.documentElement, { - childList: true, - subtree: true, - attributes: true, - attributeFilter: ["class"], - }); - - // Disconnect the mutation observer after a fixed (long) timeout to conserve resources. - observerTimeout = setTimeout( - () => newEmbedObserver.disconnect(), - OBSERVER_TIMEOUT_MS - ); - - createShimPlaceholders(); -} +embedHelperLib.initEmbedShim({ + shimId: "EmbedTestShim", + scriptURL: + "https://itisatracker.org/browser/browser/extensions/webcompat/tests/browser/embed_test.js", + embedLogoURL: "https://smartblock.firefox.etp/instagram.svg", // Use Instagram logo as test shim + embedSelector: ".broken-embed-content", + isTestShim: true, +}); diff --git a/browser/extensions/webcompat/shims/instagram-embed.js b/browser/extensions/webcompat/shims/instagram-embed.js index 3b379ec5ea3..d273de15192 100644 --- a/browser/extensions/webcompat/shims/instagram-embed.js +++ b/browser/extensions/webcompat/shims/instagram-embed.js @@ -2,236 +2,17 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -/* globals browser */ +/* globals browser, embedHelperLib */ if (!window.smartblockInstagramShimInitialized) { // Guard against this script running multiple times window.smartblockInstagramShimInitialized = true; - const SHIM_ID = "InstagramEmbed"; - - const SHIM_EMBED_CLASSES = ["instagram-media"]; - const SHIM_CLASS_SELECTORS = SHIM_EMBED_CLASSES.map( - className => `.${className}` - ).join(","); - - // Original URL of the embed script. - const ORIGINAL_URL = "https://www.instagram.com/embed.js"; - const LOGO_URL = "https://smartblock.firefox.etp/instagram.svg"; - - // Timeout for observing new changes to the page - const OBSERVER_TIMEOUT_MS = 10000; - let observerTimeout; - let newEmbedObserver; - - let originalEmbedContainers = []; - let embedPlaceholders = []; - - function sendMessageToAddon(message) { - return browser.runtime.sendMessage({ message, shimId: SHIM_ID }); - } - - function addonMessageHandler(message) { - let { topic, shimId } = message; - // Only react to messages which are targeting this shim. - if (shimId != SHIM_ID) { - return; - } - - if (topic === "smartblock:unblock-embed") { - if (newEmbedObserver) { - newEmbedObserver.disconnect(); - newEmbedObserver = null; - } - - if (observerTimeout) { - clearTimeout(observerTimeout); - } - - // remove embed placeholders - embedPlaceholders.forEach((p, idx) => { - p.replaceWith(originalEmbedContainers[idx]); - }); - - // recreate scripts - let scriptElement = document.createElement("script"); - - // Set the script element's src with the website's principal instead of - // the content script principal to ensure the tracker script is not loaded - // via the content script's expanded principal. - scriptElement.wrappedJSObject.src = ORIGINAL_URL; - document.body.appendChild(scriptElement); - } - } - - /** - * Replaces embeds with a SmartBlock Embed placeholder. Optionally takes a list - * of embeds to replace, otherwise will search for all embeds on the page. - * - * @param {HTMLElement[]} embedContainers - Array of elements to replace with placeholders. - * If the array is empty, this function will search - * for and replace all embeds on the page. - */ - async function createShimPlaceholders(embedContainers = []) { - const [titleString, descriptionString, buttonString] = - await sendMessageToAddon("smartblockGetFluentString"); - - if (!embedContainers.length) { - // No containers were passed in, do own search for containers - embedContainers = document.querySelectorAll(SHIM_CLASS_SELECTORS); - } - - embedContainers.forEach(originalContainer => { - // this string has to be defined within this function to avoid linting errors - // see: https://github.com/mozilla/eslint-plugin-no-unsanitized/issues/259 - const SMARTBLOCK_PLACEHOLDER_HTML_STRING = ` - -
- -

-

- -
`; - - // Create the placeholder inside a shadow dom - const placeholderDiv = document.createElement("div"); - - const shadowRoot = placeholderDiv.attachShadow({ mode: "closed" }); - - shadowRoot.innerHTML = SMARTBLOCK_PLACEHOLDER_HTML_STRING; - shadowRoot.getElementById("smartblock-placeholder-image").src = LOGO_URL; - shadowRoot.getElementById("smartblock-placeholder-title").textContent = - titleString; - shadowRoot.getElementById("smartblock-placeholder-desc").textContent = - descriptionString; - shadowRoot.getElementById("smartblock-placeholder-button").textContent = - buttonString; - - // Wait for user to opt-in. - shadowRoot - .getElementById("smartblock-placeholder-button") - .addEventListener("click", ({ isTrusted }) => { - if (!isTrusted) { - return; - } - // Send a message to the addon to allow loading tracking resources - // needed by the embed. - sendMessageToAddon("embedClicked"); - }); - - // Save the original embed element and the newly created placeholder - embedPlaceholders.push(placeholderDiv); - originalEmbedContainers.push(originalContainer); - - // Replace the embed with the placeholder - originalContainer.replaceWith(placeholderDiv); - - sendMessageToAddon("smartblockEmbedReplaced"); - }); - } - - // Listen for messages from the background script. - browser.runtime.onMessage.addListener(request => { - addonMessageHandler(request); + embedHelperLib.initEmbedShim({ + shimId: "InstagramEmbed", + scriptURL: "https://www.instagram.com/embed.js", + embedLogoURL: "https://smartblock.firefox.etp/instagram.svg", + embedSelector: ".instagram-media", + isTestShim: false, }); - - // Monitor for new embeds being added after page load so we can replace them - // with placeholders. - newEmbedObserver = new MutationObserver(mutations => { - for (let { addedNodes, target, type } of mutations) { - const nodes = type === "attributes" ? [target] : addedNodes; - for (const node of nodes) { - if ( - SHIM_EMBED_CLASSES.some(className => - node.classList?.contains(className) - ) - ) { - // If node is an embed, replace with placeholder - createShimPlaceholders([node]); - } else { - // If node is not an embed, check if any children are - // and replace if needed - let maybeEmbedNodeList = - node.querySelectorAll?.(SHIM_CLASS_SELECTORS); - if (maybeEmbedNodeList) { - createShimPlaceholders(maybeEmbedNodeList); - } - } - } - } - }); - - newEmbedObserver.observe(document.documentElement, { - childList: true, - subtree: true, - attributes: true, - attributeFilter: ["class"], - }); - - // Disconnect the mutation observer after a fixed (long) timeout to conserve resources. - observerTimeout = setTimeout( - () => newEmbedObserver.disconnect(), - OBSERVER_TIMEOUT_MS - ); - - createShimPlaceholders(); } diff --git a/browser/extensions/webcompat/shims/tiktok-embed.js b/browser/extensions/webcompat/shims/tiktok-embed.js index abeed6a99ee..aa7eae80476 100644 --- a/browser/extensions/webcompat/shims/tiktok-embed.js +++ b/browser/extensions/webcompat/shims/tiktok-embed.js @@ -2,236 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -/* globals browser */ +/* globals browser, embedHelperLib */ -if (!window.smartblockTikTokShimInitialized) { - // Guard against this script running multiple times - window.smartblockTikTokShimInitialized = true; - - const SHIM_ID = "TiktokEmbed"; - - const SHIM_EMBED_CLASSES = ["tiktok-embed"]; - const SHIM_CLASS_SELECTORS = SHIM_EMBED_CLASSES.map( - className => `.${className}` - ).join(","); - - // Original URL of the embed script. - const ORIGINAL_URL = "https://www.tiktok.com/embed.js"; - const LOGO_URL = "https://smartblock.firefox.etp/tiktok.svg"; - - // Timeout for observing new changes to the page - const OBSERVER_TIMEOUT_MS = 10000; - let observerTimeout; - let newEmbedObserver; - - let originalEmbedContainers = []; - let embedPlaceholders = []; - - function sendMessageToAddon(message) { - return browser.runtime.sendMessage({ message, shimId: SHIM_ID }); - } - - function addonMessageHandler(message) { - let { topic, shimId } = message; - // Only react to messages which are targeting this shim. - if (shimId != SHIM_ID) { - return; - } - - if (topic === "smartblock:unblock-embed") { - if (newEmbedObserver) { - newEmbedObserver.disconnect(); - newEmbedObserver = null; - } - - if (observerTimeout) { - clearTimeout(observerTimeout); - } - - // remove embed placeholders - embedPlaceholders.forEach((p, idx) => { - p.replaceWith(originalEmbedContainers[idx]); - }); - - // recreate scripts - let scriptElement = document.createElement("script"); - - // Set the script element's src with the website's principal instead of - // the content script principal to ensure the tracker script is not loaded - // via the content script's expanded principal. - scriptElement.wrappedJSObject.src = ORIGINAL_URL; - document.body.appendChild(scriptElement); - } - } - - /** - * Replaces embeds with a SmartBlock Embed placeholder. Optionally takes a list - * of embeds to replace, otherwise will search for all embeds on the page. - * - * @param {HTMLElement[]} embedContainers - Array of elements to replace with placeholders. - * If the array is empty, this function will search - * for and replace all embeds on the page. - */ - async function createShimPlaceholders(embedContainers = []) { - const [titleString, descriptionString, buttonString] = - await sendMessageToAddon("smartblockGetFluentString"); - - if (!embedContainers.length) { - // No containers were passed in, do own search for containers - embedContainers = document.querySelectorAll(SHIM_CLASS_SELECTORS); - } - - embedContainers.forEach(originalContainer => { - // this string has to be defined within this function to avoid linting errors - // see: https://github.com/mozilla/eslint-plugin-no-unsanitized/issues/259 - const SMARTBLOCK_PLACEHOLDER_HTML_STRING = ` - -
- -

-

- -
`; - - // Create the placeholder inside a shadow dom - const placeholderDiv = document.createElement("div"); - - const shadowRoot = placeholderDiv.attachShadow({ mode: "closed" }); - - shadowRoot.innerHTML = SMARTBLOCK_PLACEHOLDER_HTML_STRING; - shadowRoot.getElementById("smartblock-placeholder-image").src = LOGO_URL; - shadowRoot.getElementById("smartblock-placeholder-title").textContent = - titleString; - shadowRoot.getElementById("smartblock-placeholder-desc").textContent = - descriptionString; - shadowRoot.getElementById("smartblock-placeholder-button").textContent = - buttonString; - - // Wait for user to opt-in. - shadowRoot - .getElementById("smartblock-placeholder-button") - .addEventListener("click", ({ isTrusted }) => { - if (!isTrusted) { - return; - } - // Send a message to the addon to allow loading tracking resources - // needed by the embed. - sendMessageToAddon("embedClicked"); - }); - - // Save the original embed element and the newly created placeholder - embedPlaceholders.push(placeholderDiv); - originalEmbedContainers.push(originalContainer); - - // Replace the embed with the placeholder - originalContainer.replaceWith(placeholderDiv); - - sendMessageToAddon("smartblockEmbedReplaced"); - }); - } - - // Listen for messages from the background script. - browser.runtime.onMessage.addListener(request => { - addonMessageHandler(request); - }); - - // Monitor for new embeds being added after page load so we can replace them - // with placeholders. - newEmbedObserver = new MutationObserver(mutations => { - for (let { addedNodes, target, type } of mutations) { - const nodes = type === "attributes" ? [target] : addedNodes; - for (const node of nodes) { - if ( - SHIM_EMBED_CLASSES.some(className => - node.classList?.contains(className) - ) - ) { - // If node is an embed, replace with placeholder - createShimPlaceholders([node]); - } else { - // If node is not an embed, check if any children are - // and replace if needed - let maybeEmbedNodeList = - node.querySelectorAll?.(SHIM_CLASS_SELECTORS); - if (maybeEmbedNodeList) { - createShimPlaceholders(maybeEmbedNodeList); - } - } - } - } - }); - - newEmbedObserver.observe(document.documentElement, { - childList: true, - subtree: true, - attributes: true, - attributeFilter: ["class"], - }); - - // Disconnect the mutation observer after a fixed (long) timeout to conserve resources. - observerTimeout = setTimeout( - () => newEmbedObserver.disconnect(), - OBSERVER_TIMEOUT_MS - ); - - createShimPlaceholders(); -} +embedHelperLib.initEmbedShim({ + shimId: "TiktokEmbed", + scriptURL: "https://www.tiktok.com/embed.js", + embedLogoURL: "https://smartblock.firefox.etp/tiktok.svg", + embedSelector: ".tiktok-embed", + isTestShim: false, +}); diff --git a/browser/extensions/webcompat/shims/twitter-embed.js b/browser/extensions/webcompat/shims/twitter-embed.js index ed47ceb80c2..80320aa1384 100644 --- a/browser/extensions/webcompat/shims/twitter-embed.js +++ b/browser/extensions/webcompat/shims/twitter-embed.js @@ -2,236 +2,12 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ -/* globals browser */ +/* globals browser, embedHelperLib */ -if (!window.smartblockTwitterShimInitialized) { - // Guard against this script running multiple times - window.smartblockTwitterShimInitialized = true; - - const SHIM_ID = "TwitterEmbed"; - - const SHIM_EMBED_CLASSES = ["twitter-tweet", "twitter-timeline"]; - const SHIM_CLASS_SELECTORS = SHIM_EMBED_CLASSES.map( - className => `.${className}` - ).join(","); - - // Original URL of the embed script. - const ORIGINAL_URL = "https://platform.twitter.com/widgets.js"; - const LOGO_URL = "https://smartblock.firefox.etp/x-logo.svg"; - - // Timeout for observing new changes to the page - const OBSERVER_TIMEOUT_MS = 10000; - let observerTimeout; - let newEmbedObserver; - - let originalEmbedContainers = []; - let embedPlaceholders = []; - - function sendMessageToAddon(message) { - return browser.runtime.sendMessage({ message, shimId: SHIM_ID }); - } - - function addonMessageHandler(message) { - let { topic, shimId } = message; - // Only react to messages which are targeting this shim. - if (shimId != SHIM_ID) { - return; - } - - if (topic === "smartblock:unblock-embed") { - if (newEmbedObserver) { - newEmbedObserver.disconnect(); - newEmbedObserver = null; - } - - if (observerTimeout) { - clearTimeout(observerTimeout); - } - - // remove embed placeholders - embedPlaceholders.forEach((p, idx) => { - p.replaceWith(originalEmbedContainers[idx]); - }); - - // recreate scripts - let scriptElement = document.createElement("script"); - - // Set the script element's src with the website's principal instead of - // the content script principal to ensure the tracker script is not loaded - // via the content script's expanded principal. - scriptElement.wrappedJSObject.src = ORIGINAL_URL; - document.body.appendChild(scriptElement); - } - } - - /** - * Replaces embeds with a SmartBlock Embed placeholder. Optionally takes a list - * of embeds to replace, otherwise will search for all embeds on the page. - * - * @param {HTMLElement[]} embedContainers - Array of elements to replace with placeholders. - * If the array is empty, this function will search - * for and replace all embeds on the page. - */ - async function createShimPlaceholders(embedContainers = []) { - const [titleString, descriptionString, buttonString] = - await sendMessageToAddon("smartblockGetFluentString"); - - if (!embedContainers.length) { - // No containers were passed in, do own search for containers - embedContainers = document.querySelectorAll(SHIM_CLASS_SELECTORS); - } - - embedContainers.forEach(originalContainer => { - // this string has to be defined within this function to avoid linting errors - // see: https://github.com/mozilla/eslint-plugin-no-unsanitized/issues/259 - const SMARTBLOCK_PLACEHOLDER_HTML_STRING = ` - -
- -

-

- -
`; - - // Create the placeholder inside a shadow dom - const placeholderDiv = document.createElement("div"); - - const shadowRoot = placeholderDiv.attachShadow({ mode: "closed" }); - - shadowRoot.innerHTML = SMARTBLOCK_PLACEHOLDER_HTML_STRING; - shadowRoot.getElementById("smartblock-placeholder-image").src = LOGO_URL; - shadowRoot.getElementById("smartblock-placeholder-title").textContent = - titleString; - shadowRoot.getElementById("smartblock-placeholder-desc").textContent = - descriptionString; - shadowRoot.getElementById("smartblock-placeholder-button").textContent = - buttonString; - - // Wait for user to opt-in. - shadowRoot - .getElementById("smartblock-placeholder-button") - .addEventListener("click", ({ isTrusted }) => { - if (!isTrusted) { - return; - } - // Send a message to the addon to allow loading tracking resources - // needed by the embed. - sendMessageToAddon("embedClicked"); - }); - - // Save the original embed element and the newly created placeholder - embedPlaceholders.push(placeholderDiv); - originalEmbedContainers.push(originalContainer); - - // Replace the embed with the placeholder - originalContainer.replaceWith(placeholderDiv); - - sendMessageToAddon("smartblockEmbedReplaced"); - }); - } - - // Listen for messages from the background script. - browser.runtime.onMessage.addListener(request => { - addonMessageHandler(request); - }); - - // Monitor for new embeds being added after page load so we can replace them - // with placeholders. - newEmbedObserver = new MutationObserver(mutations => { - for (let { addedNodes, target, type } of mutations) { - const nodes = type === "attributes" ? [target] : addedNodes; - for (const node of nodes) { - if ( - SHIM_EMBED_CLASSES.some(className => - node.classList?.contains(className) - ) - ) { - // If node is an embed, replace with placeholder - createShimPlaceholders([node]); - } else { - // If node is not an embed, check if any children are - // and replace if needed - let maybeEmbedNodeList = - node.querySelectorAll?.(SHIM_CLASS_SELECTORS); - if (maybeEmbedNodeList) { - createShimPlaceholders(maybeEmbedNodeList); - } - } - } - } - }); - - newEmbedObserver.observe(document.documentElement, { - childList: true, - subtree: true, - attributes: true, - attributeFilter: ["class"], - }); - - // Disconnect the mutation observer after a fixed (long) timeout to conserve resources. - observerTimeout = setTimeout( - () => newEmbedObserver.disconnect(), - OBSERVER_TIMEOUT_MS - ); - - createShimPlaceholders(); -} +embedHelperLib.initEmbedShim({ + shimId: "TwitterEmbed", + scriptURL: "https://platform.twitter.com/widgets.js", + embedLogoURL: "https://smartblock.firefox.etp/x-logo.svg", + embedSelector: ".twitter-tweet, .twitter-timeline", + isTestShim: false, +}); diff --git a/browser/extensions/webcompat/tests/browser/browser.toml b/browser/extensions/webcompat/tests/browser/browser.toml index 84c2290806a..4256e006d67 100644 --- a/browser/extensions/webcompat/tests/browser/browser.toml +++ b/browser/extensions/webcompat/tests/browser/browser.toml @@ -13,10 +13,14 @@ support-files = [ ] ["browser_aboutcompat.js"] +skip-if = ["debug"] # disabled until bug 1961939 is fixed. ["browser_console_messages.js"] skip-if = ["true"] # disabled in bug 1960374 to verify if the bug which added it has caused regressions. +["browser_custom_functions.js"] +support-files = ["download_server.sjs"] + ["browser_interventions.js"] ["browser_shims.js"] diff --git a/browser/extensions/webcompat/tests/browser/browser_aboutcompat.js b/browser/extensions/webcompat/tests/browser/browser_aboutcompat.js index f7edeba8e5c..ab3c58e9e2e 100644 --- a/browser/extensions/webcompat/tests/browser/browser_aboutcompat.js +++ b/browser/extensions/webcompat/tests/browser/browser_aboutcompat.js @@ -17,6 +17,99 @@ add_task(async function test_about_compat_loads_properly() { "SmartBlock shims are listed" ); ok(true, "Interventions are listed"); + + // also choose an intervention and a shim with content-scripts, and confirm that toggling them + // on and off works (by checking that their content-scripts are de-registered and re-registered). + const bgWin = content.wrappedJSObject.browser.extension.getBackgroundPage(); + const interventionWithContentScripts = + bgWin.interventions._availableInterventions.find( + i => i.active && i.interventions?.find(v => v.content_scripts) + ); + const shimWithContentScripts = [...bgWin.shims.shims.values()].find( + s => s._contentScriptRegistrations.length + ); + + async function findRegisteredScript(id) { + return ( + await content.wrappedJSObject.browser.scripting.getRegisteredContentScripts( + { ids: [id] } + ) + )[0]; + } + + // both should have their content scripts registered at startup + const interventionRCSId = `webcompat intervention for ${interventionWithContentScripts.label}`; + const shimRCSId = `shim-${shimWithContentScripts.id}-0`; + ok( + await findRegisteredScript(interventionRCSId), + `Found registered script for intervention: '${interventionRCSId}'` + ); + ok( + await findRegisteredScript(shimRCSId), + `Found registered script for shim: '${shimRCSId}'` + ); + + async function testToggling( + buttonEnabled, + buttonDisabled, + interventionOrShim, + rcsId, + type + ) { + // click to disable the intervention/shim + content.document.querySelector(buttonEnabled).click(); + await ContentTaskUtils.waitForCondition( + () => content.document.querySelector(buttonDisabled), + `toggle button for ${type} now says 'enable'` + ); + + await ContentTaskUtils.waitForCondition( + () => !interventionOrShim.active && !interventionOrShim.enabled, + `${type} is inactive` + ); + + // verify that its content scripts have been de-registered + ok( + !(await findRegisteredScript(rcsId)), + `Found no registered script for ${type}: '${rcsId}'` + ); + + // click to re-enable the intervention/shim + content.document.querySelector(buttonDisabled).click(); + await ContentTaskUtils.waitForCondition( + () => content.document.querySelector(buttonEnabled), + `toggle button for ${type} again says 'disable'` + ); + + await ContentTaskUtils.waitForCondition( + () => interventionOrShim.active || interventionOrShim.enabled, + `${type} is active` + ); + + // verify that its content scripts have been re-registered + ok( + await findRegisteredScript(rcsId), + `Found registered script for ${type}: '${rcsId}'` + ); + } + + // toggle the intervention + await testToggling( + `tr[data-id='${interventionWithContentScripts.id}'] button[data-l10n-id=label-disable]`, + `tr[data-id='${interventionWithContentScripts.id}'] button[data-l10n-id=label-enable]`, + interventionWithContentScripts, + interventionRCSId, + "intervention" + ); + + // toggle the shim + await testToggling( + `tr[data-id='${shimWithContentScripts.id}'] button[data-l10n-id=label-disable]`, + `tr[data-id='${shimWithContentScripts.id}'] button[data-l10n-id=label-enable]`, + shimWithContentScripts, + shimRCSId, + "shim" + ); }); await BrowserTestUtils.removeTab(tab); diff --git a/browser/extensions/webcompat/tests/browser/browser_custom_functions.js b/browser/extensions/webcompat/tests/browser/browser_custom_functions.js new file mode 100644 index 00000000000..4863bbb6758 --- /dev/null +++ b/browser/extensions/webcompat/tests/browser/browser_custom_functions.js @@ -0,0 +1,303 @@ +"use strict"; + +function promiseWebCompatAddonReady() { + return TestUtils.waitForCondition(() => { + return ( + Services.ppmm.sharedData.get("WebCompatTests:InterventionsStatus") === + "active" + ); + }); +} + +function sendWebCompatAddonCommand(name, data) { + return new Promise(done => { + const listener = { + receiveMessage(message) { + Services.cpmm.removeMessageListener(`WebCompat:${name}:Done`, listener); + done(message.data); + }, + }; + Services.cpmm.addMessageListener(`WebCompat:${name}:Done`, listener); + Services.ppmm.broadcastAsyncMessage("WebCompat", { name, data }); + }); +} + +async function setupTestIntervention(interventions) { + const config = { + id: "bugnumber_test", + label: "test intervention", + bugs: { + issue1: { + matches: ["*://example.com/*"], + }, + }, + interventions: interventions.map(i => + Object.assign({ platforms: ["all"] }, i) + ), + }; + + const results = await sendWebCompatAddonCommand("UpdateInterventions", [ + config, + ]); + ok(results[0].active, "Verify intervention is active"); +} + +async function testResponseHeaderValue({ + test, + browser, + serverSends, + expect, + useServer, +}) { + let server = useServer ?? "https://example.com"; + const results = await ContentTask.spawn( + browser, + { server, serverSends, expect }, + async function (args) { + const send = JSON.stringify(Object.entries(args.serverSends ?? {})); + const url = `${args.server}/browser/browser/extensions/webcompat/tests/browser/download_server.sjs?${send}`; + const { headers } = await content.wrappedJSObject.fetch(url); + return Object.fromEntries( + Object.keys(args.expect).map(name => [name, headers.get(name)]) + ); + } + ); + for (const [name, expected] of Object.entries(expect)) { + is(results[name], expected, `${test}, for header ${name}`); + } +} + +add_task(async function test_custom_functions() { + await promiseWebCompatAddonReady(); + + const tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "https://example.com" + ); + const browser = gBrowser.selectedBrowser; + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["content-disposition"], + replace: "filename\\*=UTF-8''([^;]+)", + replacement: 'filename="$1"', + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that `replace` and `replacement` work as regexes", + browser, + serverSends: { + "content-disposition": "attachment; filename*=UTF-8''rj.txt", + }, + expect: { "content-disposition": 'attachment; filename="rj.txt"' }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["sent-header"], + replace: "test", + replacement: "test2", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that `replace` and `replacement` work on all matches", + browser, + serverSends: { "sent-header": "test test test" }, + expect: { "sent-header": "test2 test2 test2" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["sent-header1", "sent-header2", "unsent-header"], + replace: "test", + replacement: "test2", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that every specified header is altered if sent by the server", + browser, + serverSends: { "sent-header1": "test test", "sent-header2": "test test" }, + expect: { + "sent-header1": "test2 test2", + "unsent-header": null, + }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["sent-header"], + replacement: "good", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that if `replace` is not specified, `replacement` is used instead of what the server sends", + browser, + serverSends: { "sent-header": "bad" }, + expect: { "sent-header": "good" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["sent-header"], + replacement: null, + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that setting `replacement` to `null` removes a header", + browser, + serverSends: { + "sent-value": "bad", + }, + expect: { "sent-header": null }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["unsent-header"], + replacement: "good", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that if `replace` is not specified, `replacement` is used even if the server doesn't send a value for that header", + browser, + serverSends: {}, + expect: { "unsent-header": "good" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["sent-header"], + replace: "xxxx", + replacement: "test", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that `replace` does not replace the value if the regexp does not match", + browser, + serverSends: { "sent-header": "yyyy" }, + expect: { "sent-header": "yyyy" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["unsent-header"], + replace: "^.*$", + replacement: "test", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that if `replace` is given but no such header is sent, it's still left as unsent", + browser, + serverSends: {}, + expect: { "unsent-header": null }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + headers: ["unsent-header", "unsent-header2"], + replace: "^.*$", + replacement: "bad", + fallback: "good", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that altering a response header which isn't sent results in the fallback value used for the first one", + browser, + serverSends: {}, + expect: { "unsent-header": "good" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + urls: ["https://example.net/*"], + headers: ["sent-header"], + replacement: "good", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that `urls` overrides the `matches` on the intervention", + browser, + useServer: "https://example.net", + serverSends: { "sent-header": "bad" }, + expect: { "sent-header": "good" }, + }); + + await setupTestIntervention([ + { + alter_response_headers: [ + { + urls: ["https://example.net/*"], + headers: ["sent-header"], + replacement: "shouldChangeAgain", + }, + ], + }, + { + alter_response_headers: [ + { + urls: ["https://example.com/*"], + headers: ["sent-header"], + replacement: "shouldNotHappen", + }, + ], + }, + { + alter_response_headers: [ + { + urls: ["https://example.net/*"], + headers: ["sent-header"], + replacement: "good", + }, + ], + }, + ]); + await testResponseHeaderValue({ + test: "verify that multiple alter_response_headers work on the correct URLs", + browser, + useServer: "https://example.net", + serverSends: { "sent-header": "unchanged" }, + expect: { "sent-header": "good" }, + }); + + BrowserTestUtils.removeTab(tab); +}); diff --git a/browser/extensions/webcompat/tests/browser/browser_interventions.js b/browser/extensions/webcompat/tests/browser/browser_interventions.js index c8ca6c1f90f..1febb9d1244 100644 --- a/browser/extensions/webcompat/tests/browser/browser_interventions.js +++ b/browser/extensions/webcompat/tests/browser/browser_interventions.js @@ -134,7 +134,8 @@ add_task(async function test_json_data() { ); ok( - !!matches && Array.isArray(matches) && matches.length, + !interventions.find(i => i.content_scripts || i.ua_string) || + (!!matches && Array.isArray(matches) && matches.length), `matches key exists and is an array with items for id ${id}` ); try { @@ -167,6 +168,7 @@ add_task(async function test_json_data() { "skip_if", "ua_string", ]; + let custom_found = false; for (let intervention of interventions) { for (const name in intervention) { const is_custom = name in custom_fns; @@ -176,18 +178,22 @@ add_task(async function test_json_data() { `key '${name}' is actually expected for id ${id}` ); if (is_custom) { - const { details } = custom_fns[name]; - for (const detailName in intervention[name]) { - ok( - details.includes(detailName), - `detail '${detailName}' is actually expected for custom function ${name} in id ${id}` - ); - } - for (const detailName of details) { - ok( - detailName in intervention[name], - `expected detail '${detailName}' is being passed to custom function ${name} in id ${id}` - ); + custom_found = true; + const { details, optionalDetails } = custom_fns[name]; + for (const customArgs of intervention[name]) { + for (const detailName in customArgs) { + ok( + details.includes(detailName) || + optionalDetails.includes(detailName), + `detail '${detailName}' is actually expected for custom function ${name} in id ${id}` + ); + } + for (const detailName of details) { + ok( + detailName in customArgs, + `expected detail '${detailName}' is being passed to custom function ${name} in id ${id}` + ); + } } } } @@ -268,7 +274,7 @@ add_task(async function test_json_data() { } } ok( - content_scripts || skip_if || ua_string, + content_scripts || skip_if || ua_string || custom_found, `Interventions are defined for id ${id}` ); if (check_valid_array(skip_if, "skip_if", id)) { diff --git a/browser/extensions/webcompat/tests/browser/download_server.sjs b/browser/extensions/webcompat/tests/browser/download_server.sjs new file mode 100644 index 00000000000..8e2c3c37804 --- /dev/null +++ b/browser/extensions/webcompat/tests/browser/download_server.sjs @@ -0,0 +1,20 @@ +function decode(str) { + return decodeURIComponent(str.replace(/\+/g, encodeURIComponent(" "))); +} + +function handleRequest(request, response) { + response.setHeader("Access-Control-Allow-Origin", "*", false); + response.setHeader("Cache-Control", "no-cache", false); + response.setHeader("Content-Type", "text/plain"); + const corsAllow = []; + if (request.queryString) { + for (const [name, value] of JSON.parse(decode(request.queryString))) { + response.setHeader(name, value); + corsAllow.push(name); + } + } + if (corsAllow.length) { + response.setHeader("Access-Control-Expose-Headers", corsAllow.join(", ")); + } + response.write("Success!"); +} diff --git a/browser/locales/en-US/browser/appExtensionFields.ftl b/browser/locales/en-US/browser/appExtensionFields.ftl index 09d7a076ecc..06f56085fb4 100644 --- a/browser/locales/en-US/browser/appExtensionFields.ftl +++ b/browser/locales/en-US/browser/appExtensionFields.ftl @@ -16,15 +16,3 @@ extension-firefox-compact-dark-description=A theme with a dark color scheme. extension-firefox-alpenglow-name=Firefox Alpenglow extension-firefox-alpenglow-description=Use a colorful appearance for buttons, menus, and windows. - -## Colorway Themes -## These themes are variants of a colorway. The colorway is specified in the -## $colorway-name variable. -## Variables -## $colorway-name (String) The name of a colorway (e.g. Graffiti, Elemental). - -extension-colorways-soft-name={ $colorway-name } — Soft -extension-colorways-balanced-name={ $colorway-name } — Balanced -# "Bold" is used in the sense of bravery or courage, not in the sense of -# emphasized text. -extension-colorways-bold-name={ $colorway-name } — Bold diff --git a/browser/locales/en-US/browser/appMenuNotifications.ftl b/browser/locales/en-US/browser/appMenuNotifications.ftl index 2207b8e7f2f..3e4b72b02a1 100644 --- a/browser/locales/en-US/browser/appMenuNotifications.ftl +++ b/browser/locales/en-US/browser/appMenuNotifications.ftl @@ -30,6 +30,13 @@ appmenu-update-restart2 = .secondarybuttonlabel = Dismiss .secondarybuttonaccesskey = m appmenu-update-restart-message2 = Get the latest version of { -brand-shorter-name }. Open tabs and windows will be restored. +appmenu-update-other-instance = + .label = { -brand-shorter-name } is unable to automatically update to the latest version. + .buttonlabel = Update { -brand-shorter-name } anyway + .buttonaccesskey = U + .secondarybuttonlabel = Not Now + .secondarybuttonaccesskey = N +appmenu-update-other-instance-message = A new { -brand-shorter-name } update is available, but it can’t be installed because another copy of { -brand-shorter-name } is running. Close it to continue the update, or choose to update anyway (the other copy may not work correctly until you restart it). appmenu-theme-installed = .secondarybuttonlabel = Undo diff --git a/browser/locales/en-US/browser/browser.ftl b/browser/locales/en-US/browser/browser.ftl index 2df9c3e3605..14b5a037fdf 100644 --- a/browser/locales/en-US/browser/browser.ftl +++ b/browser/locales/en-US/browser/browser.ftl @@ -345,7 +345,7 @@ quickactions-cmd-print = print # Opens the print dialog at the save to PDF option quickactions-savepdf = Save page as PDF -quickactions-cmd-savepdf = pdf +quickactions-cmd-savepdf2 = pdf, save page # Opens a new private browsing window quickactions-private2 = Open private window @@ -365,7 +365,8 @@ quickactions-cmd-screenshot2 = screenshot, take a screenshot # Opens about:preferences quickactions-settings2 = Manage settings -quickactions-cmd-settings = settings, preferences, options +# "manage" should match the corresponding command, which is “Manage settings” in English. +quickactions-cmd-settings2 = settings, preferences, options, manage # Opens about:addons page in the themes section quickactions-themes = Manage themes @@ -1225,3 +1226,7 @@ file-picker-crashed-save-nowhere = The Windows file-dialog has crashed. No defau file-picker-crashed-show-in-folder = .label = Show in Folder .accessKey = F + +## Onboarding Finish Setup checklist + +onboarding-checklist-button-label = Finish setup diff --git a/browser/locales/en-US/browser/colorways.ftl b/browser/locales/en-US/browser/colorways.ftl deleted file mode 100644 index 7ff8949adaa..00000000000 --- a/browser/locales/en-US/browser/colorways.ftl +++ /dev/null @@ -1,23 +0,0 @@ -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - -## Colorway names and descriptions - -playmaker-colorway-name = Playmaker -playmaker-colorway-description = You create opportunities to win and help everyone around you elevate their game. - -expressionist-colorway-name = Expressionist -expressionist-colorway-description = You see the world differently and your creations stir the emotions of others. - -visionary-colorway-name = Visionary -visionary-colorway-description = You question the status quo and move others to imagine a better future. - -activist-colorway-name = Activist -activist-colorway-description = You leave the world a better place than you found it and lead others to believe. - -dreamer-colorway-name = Dreamer -dreamer-colorway-description = You believe that fortune favors the bold and inspire others to be brave. - -innovator-colorway-name = Innovator -innovator-colorway-description = You see opportunities everywhere and make an impact on the lives of everyone around you. diff --git a/browser/locales/en-US/browser/featureCallout.ftl b/browser/locales/en-US/browser/featureCallout.ftl index 0fdd2a5e0a0..13f37d0b178 100644 --- a/browser/locales/en-US/browser/featureCallout.ftl +++ b/browser/locales/en-US/browser/featureCallout.ftl @@ -186,3 +186,18 @@ bookmarks-toolbar-callout-2b-subtitle = You can add other sites you visit more o bookmarks-toolbar-callout-2b-primary-button-label = Keep open # Reverts the bookmarks toolbar to the default setting bookmarks-toolbar-callout-2b-secondary-button-label = No thanks + +## Perplexity callout strings + +perplexity-callout-theme-1-title = Need the right answer, right away? +perplexity-callout-theme-2-title = Try Perplexity: a new way to search + +perplexity-callout-theme-1-subtitle-1 = Try Perplexity. Choose it from the search button when you want complete answers, sources included. +perplexity-callout-theme-1-subtitle-2 = Ask questions. Get complete, well-cited answers. To try Perplexity, choose it from the search button. + +perplexity-callout-theme-2-subtitle-1 = Ask Perplexity. You’ll get complete answers, sources included. +perplexity-callout-theme-2-subtitle-2 = Ask questions. Get complete, well-cited answers. + +perplexity-callout-primary-label = Ask Perplexity +perplexity-callout-secondary-label-1 = Dismiss +perplexity-callout-secondary-label-2 = Got it diff --git a/browser/locales/en-US/browser/genai.ftl b/browser/locales/en-US/browser/genai.ftl index 8daccc7d4f6..90896c6387a 100644 --- a/browser/locales/en-US/browser/genai.ftl +++ b/browser/locales/en-US/browser/genai.ftl @@ -107,6 +107,10 @@ genai-options-about-chatbot = ## Chatbot onboarding +genai-chatbot-contextual-title = Use an AI chatbot without switching tabs +genai-chatbot-contextual-subtitle = Chat and browse side-by-side when you add an AI chatbot in the { -brand-short-name } sidebar. +genai-chatbot-contextual-button = Choose a chatbot + genai-onboarding-header = Summarize, brainstorm, and more as you browse genai-onboarding-choose-header = Choose an AI chatbot to use in the { -brand-short-name } sidebar # "Switch anytime" refers to allowing the user to switch to a different chatbot. @@ -169,3 +173,18 @@ genai-model-optin-optout = genai-model-optin-cancel = .label = Cancel + +## Link previews + +# ‘min’ is short for “minute” +# ‘mins’ is short for “minutes” +# An estimate for how long it takes to read an article, +# expressed as a range covering both slow and fast readers. +# Variables: +# $rangePlural (String): The plural category of the range, using the same set as for numbers. +# $range (String): The range of minutes as a localised string. Examples: "3-7", "~1". +link-preview-reading-time = + { $rangePlural -> + [one] { $range } min reading time + *[other] { $range } mins reading time + } diff --git a/browser/locales/en-US/browser/newtab/newtab.ftl b/browser/locales/en-US/browser/newtab/newtab.ftl index 6908c4543c0..4b52b915672 100644 --- a/browser/locales/en-US/browser/newtab/newtab.ftl +++ b/browser/locales/en-US/browser/newtab/newtab.ftl @@ -515,5 +515,5 @@ newtab-report-content-spam-misleading = .label = Spam or misleading newtab-report-cancel = Cancel newtab-report-submit = Submit -newtab-toast-thanks-for-feedback = - .message = Thanks for your feedback. +newtab-toast-thanks-for-reporting = + .message = Thank you for reporting this. diff --git a/browser/locales/en-US/browser/preferences/preferences.ftl b/browser/locales/en-US/browser/preferences/preferences.ftl index 3fbae2dd6ae..a7a8cdf73d0 100644 --- a/browser/locales/en-US/browser/preferences/preferences.ftl +++ b/browser/locales/en-US/browser/preferences/preferences.ftl @@ -298,8 +298,8 @@ preferences-web-appearance-choice-input-dark = # This can appear when using windows HCM or "Override colors: always" without # system colors. -preferences-web-appearance-override-warning2 = - .message = Your color selections are overriding website appearance. +preferences-web-appearance-override-warning3 = + .message = Your contrast control settings are overriding website appearance. # This message contains one link. It can be moved within the sentence as needed # to adapt to your language, but should not be changed. diff --git a/browser/locales/en-US/browser/preonboarding.ftl b/browser/locales/en-US/browser/preonboarding.ftl index 8b9f2ff3f3d..9204050c1e8 100644 --- a/browser/locales/en-US/browser/preonboarding.ftl +++ b/browser/locales/en-US/browser/preonboarding.ftl @@ -8,8 +8,9 @@ preonboarding-title = Welcome to { -brand-product-name } preonboarding-subtitle = By continuing, you agree to the { -brand-product-name } Terms of Use and our Privacy Notice. To help improve the browser, { -brand-product-name } sends diagnostic and interaction data to { -vendor-short-name }. preonboarding-primary-cta = Confirm and continue -# Label for header style button that toggles showing the terms of use, privacy notice, and data preferences checklist +# Labels for header style button that toggles showing the terms of use, privacy notice, and data preferences checklist preonboarding-manage-and-read-header = Manage data collection settings and read our Terms of Use and Privacy Notice +preonboarding-manage-and-read-header-v2 = Read Terms of Use and Privacy Notice. Manage additional settings. # Label for header style button that toggles showing the Terms of Use preonboarding-terms-of-use-header-button-title = Read our Terms of Use @@ -18,10 +19,12 @@ preonboarding-privacy-notice-header-button-title = Read our Privacy Notice # Label for header style button that toggles showing the data preference checklist preonboarding-manage-data-header-button-title = Manage diagnostic and interaction data -# Label for header style button that toggles showing the Terms of Use (Variant B) +# Labels for header style button that toggles showing the Terms of Use (Variant B) preonboarding-terms-of-use-header-button-title-b = { -brand-product-name } Terms of Use -# Label for header style button that toggles showing the Privacy Notice (Variant B) +preonboarding-terms-of-use-header-button-title-b-v2 = Terms of Use +# Labels for header style button that toggles showing the Privacy Notice (Variant B) preonboarding-privacy-notice-header-button-title-b = { -brand-product-name } Privacy Notice +preonboarding-privacy-notice-header-button-title-b-v2 = Privacy Notice # Description under label for header style buttons preonboarding-header-button-description = Read More diff --git a/browser/locales/en-US/browser/tabbrowser.ftl b/browser/locales/en-US/browser/tabbrowser.ftl index b8c1ddd75ce..1bf37494c10 100644 --- a/browser/locales/en-US/browser/tabbrowser.ftl +++ b/browser/locales/en-US/browser/tabbrowser.ftl @@ -10,11 +10,21 @@ tabbrowser-menuitem-close-tab = tabbrowser-menuitem-close = .label = Close -# Displayed as a tooltip on container tabs +# Displayed within the tooltip on tabs inside of a tab group. +# Variables: +# $tabGroupName (String): the user-defined name of the current tab group. +tabbrowser-tab-tooltip-tab-group = { $tabGroupName } + +# Displayed within the tooltip on tabs in a container. # Variables: -# $title (String): the title of the current tab. # $containerName (String): the name of the current container. -tabbrowser-container-tab-title = { $title } — { $containerName } +tabbrowser-tab-tooltip-container = { $containerName } + +# Displayed within the tooltip on tabs inside of a tab group if the tab is also in a container. +# Variables: +# $tabGroupName (String): the user-defined name of the current tab group. +# $containerName (String): the name of the current container. +tabbrowser-tab-tooltip-tab-group-container = { $tabGroupName } — { $containerName } # This text serves as an on-screen tooltip as well as an accessible name for # the "X" button that is shown on the active tab or, when multiple tabs are diff --git a/browser/locales/l10n-changesets.json b/browser/locales/l10n-changesets.json index 7d4899f32d9..3a2c84cb14e 100644 --- a/browser/locales/l10n-changesets.json +++ b/browser/locales/l10n-changesets.json @@ -17,7 +17,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "af": { "pin": false, @@ -37,7 +37,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "an": { "pin": false, @@ -57,7 +57,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ar": { "pin": false, @@ -77,7 +77,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ast": { "pin": false, @@ -97,7 +97,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "az": { "pin": false, @@ -117,7 +117,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "be": { "pin": false, @@ -137,7 +137,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "bg": { "pin": false, @@ -157,7 +157,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "bn": { "pin": false, @@ -177,7 +177,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "bo": { "pin": false, @@ -197,7 +197,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "br": { "pin": false, @@ -217,7 +217,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "brx": { "pin": false, @@ -237,7 +237,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "bs": { "pin": false, @@ -257,7 +257,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ca": { "pin": false, @@ -277,7 +277,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ca-valencia": { "pin": false, @@ -297,7 +297,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "cak": { "pin": false, @@ -317,7 +317,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ckb": { "pin": false, @@ -337,7 +337,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "cs": { "pin": false, @@ -357,7 +357,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "cy": { "pin": false, @@ -377,7 +377,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "da": { "pin": false, @@ -397,7 +397,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "de": { "pin": false, @@ -417,7 +417,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "dsb": { "pin": false, @@ -437,7 +437,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "el": { "pin": false, @@ -457,7 +457,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "en-CA": { "pin": false, @@ -477,7 +477,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "en-GB": { "pin": false, @@ -497,7 +497,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "eo": { "pin": false, @@ -517,7 +517,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "es-AR": { "pin": false, @@ -537,7 +537,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "es-CL": { "pin": false, @@ -557,7 +557,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "es-ES": { "pin": false, @@ -577,7 +577,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "es-MX": { "pin": false, @@ -597,7 +597,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "et": { "pin": false, @@ -617,7 +617,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "eu": { "pin": false, @@ -637,7 +637,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "fa": { "pin": false, @@ -657,7 +657,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ff": { "pin": false, @@ -677,7 +677,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "fi": { "pin": false, @@ -697,7 +697,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "fr": { "pin": false, @@ -717,7 +717,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "fur": { "pin": false, @@ -737,7 +737,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "fy-NL": { "pin": false, @@ -757,7 +757,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ga-IE": { "pin": false, @@ -777,7 +777,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "gd": { "pin": false, @@ -797,7 +797,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "gl": { "pin": false, @@ -817,7 +817,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "gn": { "pin": false, @@ -837,7 +837,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "gu-IN": { "pin": false, @@ -857,7 +857,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "he": { "pin": false, @@ -877,7 +877,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hi-IN": { "pin": false, @@ -897,7 +897,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hr": { "pin": false, @@ -917,7 +917,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hsb": { "pin": false, @@ -937,7 +937,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hu": { "pin": false, @@ -957,7 +957,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hy-AM": { "pin": false, @@ -977,7 +977,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "hye": { "pin": false, @@ -997,7 +997,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ia": { "pin": false, @@ -1017,7 +1017,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "id": { "pin": false, @@ -1037,7 +1037,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "is": { "pin": false, @@ -1057,7 +1057,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "it": { "pin": false, @@ -1077,7 +1077,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ja": { "pin": false, @@ -1095,7 +1095,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ja-JP-mac": { "pin": false, @@ -1103,7 +1103,7 @@ "macosx64", "macosx64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ka": { "pin": false, @@ -1123,7 +1123,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "kab": { "pin": false, @@ -1143,7 +1143,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "kk": { "pin": false, @@ -1163,7 +1163,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "km": { "pin": false, @@ -1183,7 +1183,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "kn": { "pin": false, @@ -1203,7 +1203,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ko": { "pin": false, @@ -1223,7 +1223,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "lij": { "pin": false, @@ -1243,7 +1243,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "lo": { "pin": false, @@ -1263,7 +1263,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "lt": { "pin": false, @@ -1283,7 +1283,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ltg": { "pin": false, @@ -1303,7 +1303,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "lv": { "pin": false, @@ -1323,7 +1323,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "meh": { "pin": false, @@ -1343,7 +1343,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "mk": { "pin": false, @@ -1363,7 +1363,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ml": { "pin": false, @@ -1383,7 +1383,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "mr": { "pin": false, @@ -1403,7 +1403,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ms": { "pin": false, @@ -1423,7 +1423,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "my": { "pin": false, @@ -1443,7 +1443,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "nb-NO": { "pin": false, @@ -1463,7 +1463,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ne-NP": { "pin": false, @@ -1483,7 +1483,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "nl": { "pin": false, @@ -1503,7 +1503,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "nn-NO": { "pin": false, @@ -1523,7 +1523,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "oc": { "pin": false, @@ -1543,7 +1543,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "pa-IN": { "pin": false, @@ -1563,7 +1563,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "pl": { "pin": false, @@ -1583,7 +1583,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "pt-BR": { "pin": false, @@ -1603,7 +1603,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "pt-PT": { "pin": false, @@ -1623,7 +1623,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "rm": { "pin": false, @@ -1643,7 +1643,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ro": { "pin": false, @@ -1663,7 +1663,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ru": { "pin": false, @@ -1683,7 +1683,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sat": { "pin": false, @@ -1703,7 +1703,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sc": { "pin": false, @@ -1723,7 +1723,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "scn": { "pin": false, @@ -1743,7 +1743,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sco": { "pin": false, @@ -1763,7 +1763,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "si": { "pin": false, @@ -1783,7 +1783,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sk": { "pin": false, @@ -1803,7 +1803,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "skr": { "pin": false, @@ -1823,7 +1823,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sl": { "pin": false, @@ -1843,7 +1843,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "son": { "pin": false, @@ -1863,7 +1863,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sq": { "pin": false, @@ -1883,7 +1883,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sr": { "pin": false, @@ -1903,7 +1903,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "sv-SE": { "pin": false, @@ -1923,7 +1923,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "szl": { "pin": false, @@ -1943,7 +1943,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ta": { "pin": false, @@ -1963,7 +1963,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "te": { "pin": false, @@ -1983,7 +1983,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "tg": { "pin": false, @@ -2003,7 +2003,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "th": { "pin": false, @@ -2023,7 +2023,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "tl": { "pin": false, @@ -2043,7 +2043,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "tr": { "pin": false, @@ -2063,7 +2063,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "trs": { "pin": false, @@ -2083,7 +2083,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "uk": { "pin": false, @@ -2103,7 +2103,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "ur": { "pin": false, @@ -2123,7 +2123,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "uz": { "pin": false, @@ -2143,7 +2143,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "vi": { "pin": false, @@ -2163,7 +2163,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "wo": { "pin": false, @@ -2183,7 +2183,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "xh": { "pin": false, @@ -2203,7 +2203,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "zh-CN": { "pin": false, @@ -2223,7 +2223,7 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" }, "zh-TW": { "pin": false, @@ -2243,6 +2243,6 @@ "win64-aarch64-devedition", "win64-devedition" ], - "revision": "490a95f9fcb02a04577129ac136379f0460414cc" + "revision": "4e73e4c8d88d52d394371f6bbc07cec1bf90025e" } } \ No newline at end of file diff --git a/browser/modules/BrowserUsageTelemetry.sys.mjs b/browser/modules/BrowserUsageTelemetry.sys.mjs index a7d5309515a..45cb31d1237 100644 --- a/browser/modules/BrowserUsageTelemetry.sys.mjs +++ b/browser/modules/BrowserUsageTelemetry.sys.mjs @@ -639,6 +639,9 @@ export let BrowserUsageTelemetry = { case "TabGroupSaved": this._onTabGroupSave(event); break; + case "TabGroupUngroup": + this._onTabGroupUngroup(event); + break; case "unload": this._unregisterWindow(event.target); @@ -1198,6 +1201,7 @@ export let BrowserUsageTelemetry = { win.addEventListener("TabGroupCollapse", this); win.addEventListener("TabGroupExpand", this); win.addEventListener("TabGroupSaved", this); + win.addEventListener("TabGroupUngroup", this); win.gBrowser.tabContainer.addEventListener(TAB_RESTORING_TOPIC, this); win.gBrowser.addTabsProgressListener(URICountListener); @@ -1220,6 +1224,7 @@ export let BrowserUsageTelemetry = { win.removeEventListener("TabGroupCollapse", this); win.removeEventListener("TabGroupExpand", this); win.removeEventListener("TabGroupSaved", this); + win.removeEventListener("TabGroupUngroup", this); win.defaultView.gBrowser.tabContainer.removeEventListener( TAB_RESTORING_TOPIC, @@ -1303,11 +1308,17 @@ export let BrowserUsageTelemetry = { }, _onTabGroupSave(event) { + const { isUserTriggered } = event.detail; + Glean.tabgroup.save.record({ - user_triggered: event.detail.isUserTriggered, + user_triggered: isUserTriggered, id: event.target.id, }); + if (isUserTriggered) { + Glean.tabgroup.groupInteractions.save.add(1); + } + this._onTabGroupChange(); }, @@ -1316,6 +1327,16 @@ export let BrowserUsageTelemetry = { this._onTabGroupChangeTask.arm(); }, + /** + * @param {CustomEvent} event `TabGroupUngroup` event + */ + _onTabGroupUngroup(event) { + const { isUserTriggered } = event.detail; + if (isUserTriggered) { + Glean.tabgroup.groupInteractions.ungroup.add(1); + } + }, + /** * Returns summary statistics of a set of numbers. * @@ -1419,6 +1440,7 @@ export let BrowserUsageTelemetry = { id: event.target.id, source: telemetrySource, }); + Glean.tabgroup.groupInteractions.delete.add(1); } }, diff --git a/browser/themes/BuiltInThemeConfig.sys.mjs b/browser/themes/BuiltInThemeConfig.sys.mjs index 08118714773..a5361f1f0ec 100644 --- a/browser/themes/BuiltInThemeConfig.sys.mjs +++ b/browser/themes/BuiltInThemeConfig.sys.mjs @@ -40,451 +40,4 @@ export const BuiltInThemeConfig = new Map([ path: "resource://builtin-themes/alpenglow/", }, ], - [ - "2022red-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022red/", - collection: "true-colors", - }, - ], - [ - "2022orange-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022orange/", - collection: "true-colors", - }, - ], - [ - "2022green-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022green/", - collection: "true-colors", - }, - ], - [ - "2022yellow-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022yellow/", - collection: "true-colors", - }, - ], - [ - "2022purple-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022purple/", - collection: "true-colors", - }, - ], - [ - "2022blue-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022blue/", - collection: "true-colors", - }, - ], - [ - "lush-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021lush/soft/", - collection: "life-in-color", - }, - ], - [ - "lush-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021lush/balanced/", - collection: "life-in-color", - }, - ], - [ - "lush-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021lush/bold/", - collection: "life-in-color", - }, - ], - [ - "abstract-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021abstract/soft/", - collection: "life-in-color", - }, - ], - [ - "abstract-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021abstract/balanced/", - collection: "life-in-color", - }, - ], - [ - "abstract-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021abstract/bold/", - collection: "life-in-color", - }, - ], - [ - "elemental-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021elemental/soft/", - collection: "life-in-color", - }, - ], - [ - "elemental-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021elemental/balanced/", - collection: "life-in-color", - }, - ], - [ - "elemental-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021elemental/bold/", - collection: "life-in-color", - }, - ], - [ - "cheers-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021cheers/soft/", - collection: "life-in-color", - }, - ], - [ - "cheers-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021cheers/balanced/", - collection: "life-in-color", - }, - ], - [ - "cheers-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021cheers/bold/", - collection: "life-in-color", - }, - ], - [ - "graffiti-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021graffiti/soft/", - collection: "life-in-color", - }, - ], - [ - "graffiti-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021graffiti/balanced/", - collection: "life-in-color", - }, - ], - [ - "graffiti-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021graffiti/bold/", - collection: "life-in-color", - }, - ], - [ - "foto-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021foto/soft/", - collection: "life-in-color", - }, - ], - [ - "foto-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021foto/balanced/", - collection: "life-in-color", - }, - ], - [ - "foto-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021foto/bold/", - collection: "life-in-color", - }, - ], - [ - "playmaker-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022playmaker/soft/", - collection: "independent-voices", - l10nId: { - description: "playmaker-colorway-description", - groupName: "playmaker-colorway-name", - }, - }, - ], - [ - "playmaker-balanced-colorway@mozilla.org", - { - version: "1.1.2", - path: "resource://builtin-themes/colorways/2022playmaker/balanced/", - collection: "independent-voices", - l10nId: { - description: "playmaker-colorway-description", - groupName: "playmaker-colorway-name", - }, - }, - ], - [ - "playmaker-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022playmaker/bold/", - collection: "independent-voices", - l10nId: { - description: "playmaker-colorway-description", - groupName: "playmaker-colorway-name", - }, - }, - ], - [ - "expressionist-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022expressionist/soft/", - collection: "independent-voices", - l10nId: { - description: "expressionist-colorway-description", - groupName: "expressionist-colorway-name", - }, - }, - ], - [ - "expressionist-balanced-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022expressionist/balanced/", - collection: "independent-voices", - l10nId: { - description: "expressionist-colorway-description", - groupName: "expressionist-colorway-name", - }, - }, - ], - [ - "expressionist-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022expressionist/bold/", - collection: "independent-voices", - l10nId: { - description: "expressionist-colorway-description", - groupName: "expressionist-colorway-name", - }, - }, - ], - [ - "visionary-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022visionary/soft/", - collection: "independent-voices", - l10nId: { - description: "visionary-colorway-description", - groupName: "visionary-colorway-name", - }, - }, - ], - [ - "visionary-balanced-colorway@mozilla.org", - { - version: "1.1.2", - path: "resource://builtin-themes/colorways/2022visionary/balanced/", - collection: "independent-voices", - l10nId: { - description: "visionary-colorway-description", - groupName: "visionary-colorway-name", - }, - }, - ], - [ - "visionary-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022visionary/bold/", - collection: "independent-voices", - l10nId: { - description: "visionary-colorway-description", - groupName: "visionary-colorway-name", - }, - }, - ], - [ - "activist-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022activist/soft/", - collection: "independent-voices", - l10nId: { - description: "activist-colorway-description", - groupName: "activist-colorway-name", - }, - }, - ], - [ - "activist-balanced-colorway@mozilla.org", - { - version: "1.1.2", - path: "resource://builtin-themes/colorways/2022activist/balanced/", - collection: "independent-voices", - l10nId: { - description: "activist-colorway-description", - groupName: "activist-colorway-name", - }, - }, - ], - [ - "activist-bold-colorway@mozilla.org", - { - version: "1.1.2", - path: "resource://builtin-themes/colorways/2022activist/bold/", - collection: "independent-voices", - l10nId: { - description: "activist-colorway-description", - groupName: "activist-colorway-name", - }, - }, - ], - [ - "dreamer-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022dreamer/soft/", - collection: "independent-voices", - l10nId: { - description: "dreamer-colorway-description", - groupName: "dreamer-colorway-name", - }, - }, - ], - [ - "dreamer-balanced-colorway@mozilla.org", - { - version: "1.1.2", - path: "resource://builtin-themes/colorways/2022dreamer/balanced/", - collection: "independent-voices", - l10nId: { - description: "dreamer-colorway-description", - groupName: "dreamer-colorway-name", - }, - }, - ], - [ - "dreamer-bold-colorway@mozilla.org", - { - version: "1.1.1", - path: "resource://builtin-themes/colorways/2022dreamer/bold/", - collection: "independent-voices", - l10nId: { - description: "dreamer-colorway-description", - groupName: "dreamer-colorway-name", - }, - }, - ], - [ - "innovator-soft-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022innovator/soft/", - collection: "independent-voices", - l10nId: { - description: "innovator-colorway-description", - groupName: "innovator-colorway-name", - }, - }, - ], - [ - "innovator-balanced-colorway@mozilla.org", - { - version: "1.1.1", - path: "resource://builtin-themes/colorways/2022innovator/balanced/", - collection: "independent-voices", - l10nId: { - description: "innovator-colorway-description", - groupName: "innovator-colorway-name", - }, - }, - ], - [ - "innovator-bold-colorway@mozilla.org", - { - version: "1.1", - path: "resource://builtin-themes/colorways/2022innovator/bold/", - collection: "independent-voices", - l10nId: { - description: "innovator-colorway-description", - groupName: "innovator-colorway-name", - }, - }, - ], ]); - -const ColorwayCollections = [ - { - id: "life-in-color", - expiry: "2022-02-08", - }, - { - id: "true-colors", - expiry: "2022-05-03", - }, - { - id: "independent-voices", - expiry: "2023-01-17", - }, -]; - -export function _applyColorwayConfig(collections) { - const collectionsSorted = collections - .map(({ expiry, ...rest }) => ({ - expiry: new Date(expiry), - ...rest, - })) - .sort((a, b) => a.expiry - b.expiry); - const collectionsMap = collectionsSorted.reduce((map, c) => { - map.set(c.id, c); - return map; - }, new Map()); - for (let [key, value] of BuiltInThemeConfig.entries()) { - if (value.collection) { - const collectionConfig = collectionsMap.get(value.collection); - BuiltInThemeConfig.set(key, { - ...value, - expiry: collectionConfig.expiry, - }); - } - } -} - -_applyColorwayConfig(ColorwayCollections); diff --git a/browser/themes/BuiltInThemes.sys.mjs b/browser/themes/BuiltInThemes.sys.mjs index cc7f6cf93e0..ffad3aa4c7d 100644 --- a/browser/themes/BuiltInThemes.sys.mjs +++ b/browser/themes/BuiltInThemes.sys.mjs @@ -2,8 +2,6 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -import { XPCOMUtils } from "resource://gre/modules/XPCOMUtils.sys.mjs"; - const lazy = {}; ChromeUtils.defineESModuleGetters(lazy, { @@ -11,39 +9,7 @@ ChromeUtils.defineESModuleGetters(lazy, { BuiltInThemeConfig: "resource:///modules/BuiltInThemeConfig.sys.mjs", }); -const ColorwayL10n = new Localization(["browser/colorways.ftl"], true); - const kActiveThemePref = "extensions.activeThemeID"; -const kRetainedThemesPref = "browser.theme.retainedExpiredThemes"; - -const ColorwayIntensityIdPostfixToL10nMap = [ - ["-soft-colorway@mozilla.org", "colorway-intensity-soft"], - ["-balanced-colorway@mozilla.org", "colorway-intensity-balanced"], - ["-bold-colorway@mozilla.org", "colorway-intensity-bold"], -]; - -XPCOMUtils.defineLazyPreferenceGetter( - lazy, - "retainedThemes", - kRetainedThemesPref, - null, - null, - val => { - if (!val) { - return []; - } - - let parsedVal; - try { - parsedVal = JSON.parse(val); - } catch (ex) { - console.log(`${kRetainedThemesPref} has invalid value.`); - return []; - } - - return parsedVal; - } -); class _BuiltInThemes { /** @@ -93,219 +59,19 @@ class _BuiltInThemes { */ async ensureBuiltInThemes() { let installPromises = []; - installPromises.push(this._uninstallExpiredThemes()); - const now = new Date(); for (let [id, themeInfo] of this.builtInThemeMap.entries()) { - if ( - !themeInfo.expiry || - lazy.retainedThemes.includes(id) || - new Date(themeInfo.expiry) > now - ) { - installPromises.push( - lazy.AddonManager.maybeInstallBuiltinAddon( - id, - themeInfo.version, - themeInfo.path - ) - ); - } + installPromises.push( + lazy.AddonManager.maybeInstallBuiltinAddon( + id, + themeInfo.version, + themeInfo.path + ) + ); } await Promise.all(installPromises); } - - /** - * This looks up the id in a Map rather than accessing a property on - * the addon itself. That makes calls to this function O(m) where m is the - * total number of built-in themes offered now or in the past. Since we - * are using a Map, calls are O(1) in the average case. - * - * @param {string} id - * A theme's ID. - * @returns {boolean} - * Returns true if the theme is expired. False otherwise. - */ - themeIsExpired(id) { - let themeInfo = this.builtInThemeMap.get(id); - return themeInfo?.expiry && new Date(themeInfo.expiry) < new Date(); - } - - /** - * @param {string} id - * The theme's id. - * @returns {boolean} - * True if the theme with id `id` is both expired and retained. That is, - * the user has the ability to use it after its expiry date. - */ - isRetainedExpiredTheme(id) { - return lazy.retainedThemes.includes(id) && this.themeIsExpired(id); - } - - /** - * @param {string} id - * The theme's id. - * @returns {boolean} - * True if the theme with id `id` is from the currently active theme. - */ - isActiveTheme(id) { - return ( - id === - Services.prefs.getStringPref( - kActiveThemePref, - "default-theme@mozilla.org" - ) - ); - } - - /** - * Uninstalls themes after they expire. If the expired theme is active, then - * it is not uninstalled. Instead, it is saved so that the user can use it - * indefinitely. - */ - async _uninstallExpiredThemes() { - const activeThemeID = Services.prefs.getStringPref( - kActiveThemePref, - "default-theme@mozilla.org" - ); - const now = new Date(); - const expiredThemes = Array.from(this.builtInThemeMap.entries()).filter( - ([id, themeInfo]) => - !!themeInfo.expiry && - !lazy.retainedThemes.includes(id) && - new Date(themeInfo.expiry) <= now - ); - for (let [id] of expiredThemes) { - if (id == activeThemeID) { - let shouldRetain = true; - - try { - let addon = await lazy.AddonManager.getAddonByID(id); - if (addon) { - // Only add the id to the retain themes pref if it is - // also a built-in themes (and don't if it was migrated - // xpi files installed in the user profile). - shouldRetain = addon.isBuiltinColorwayTheme; - } - } catch (e) { - console.error( - `Failed to retrieve active theme AddonWrapper ${id}`, - e - ); - } - - if (shouldRetain) { - this._retainLimitedTimeTheme(id); - } - } else { - try { - let addon = await lazy.AddonManager.getAddonByID(id); - // Only uninstall the expired colorways theme if they are not - // migrated builtins (because on migrated to xpi files - // installed in the user profile they are also removed - // from the retainedExpiredThemes pref). - if (addon?.isBuiltinColorwayTheme) { - await addon.uninstall(); - } - } catch (e) { - console.error(`Failed to uninstall expired theme ${id}`, e); - } - } - } - } - - /** - * Set a pref to ensure that the user can continue to use a specified theme - * past its expiry date. - * - * @param {string} id - * The ID of the theme to retain. - */ - _retainLimitedTimeTheme(id) { - if (!lazy.retainedThemes.includes(id)) { - lazy.retainedThemes.push(id); - Services.prefs.setStringPref( - kRetainedThemesPref, - JSON.stringify(lazy.retainedThemes) - ); - } - } - - /** - * Removes from the retained expired theme list colorways themes that have been - * migrated from the one installed in the built-in XPIProvider location - * to an AMO hosted xpi installed in the user profile XPIProvider location. - * - * @param {string} id - * The ID of the theme to remove from the retained themes list. - */ - - unretainMigratedColorwayTheme(id) { - if (lazy.retainedThemes.includes(id)) { - const retainedThemes = lazy.retainedThemes.filter( - retainedThemeId => retainedThemeId !== id - ); - Services.prefs.setStringPref( - kRetainedThemesPref, - JSON.stringify(retainedThemes) - ); - } - } - - /** - * Colorway collections are usually divided into and presented as "groups". - * A group either contains closely related colorways, e.g. stemming from the - * same base color but with different intensities (soft, balanced, and bold), - * or if the current collection doesn't have intensities, each colorway is - * their own group. Group name localization is optional. - * - * @param {string} colorwayId - * The ID of the colorway add-on. - * @returns {string} - * Localized colorway group name. null if there's no such name, in which - * case the caller should fall back on getting a name from the add-on API. - */ - getLocalizedColorwayGroupName(colorwayId) { - return this._getColorwayString(colorwayId, "groupName"); - } - - /** - * @param {string} colorwayId - * The ID of the colorway add-on. - * @returns {string} - * L10nId for intensity value of the colorway with the provided id, null if - * there's none. - */ - getColorwayIntensityL10nId(colorwayId) { - const result = ColorwayIntensityIdPostfixToL10nMap.find(([postfix]) => - colorwayId.endsWith(postfix) - ); - return result ? result[1] : null; - } - - /** - * @param {string} colorwayId - * The ID of the colorway add-on. - * @returns {string} - * Localized description of the colorway with the provided id, null if - * there's none. - */ - getLocalizedColorwayDescription(colorwayId) { - return this._getColorwayString(colorwayId, "description"); - } - - _getColorwayString(colorwayId, stringType) { - let l10nId = this.builtInThemeMap.get(colorwayId)?.l10nId?.[stringType]; - let s; - if (l10nId) { - [s] = ColorwayL10n.formatMessagesSync([ - { - id: l10nId, - }, - ]); - } - return s?.value || null; - } } export var BuiltInThemes = new _BuiltInThemes(); diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/icon.svg deleted file mode 100644 index 0bcba9aef3c..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/manifest.json deleted file mode 100644 index 25da542d1a3..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "abstract-balanced-colorway@mozilla.org" - } - }, - "name": "Abstract – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(16, 73%, 97%)", - "tab_line": "transparent", - "tab_loading": "hsl(15, 62%, 40%)", - "tab_loading_inactive": "hsl(16, 100%, 82%)", - "frame": "hsl(15, 62%, 34%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(15, 74%, 63%)", - "popup_highlight": "hsla(15, 84%, 65%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(15, 62%, 40%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(16, 73%, 97%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(15, 62%, 34%)", - "ntp_background": "hsl(15, 39%, 80%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(15, 84%, 65%, 0.3)", - "address_bar_box": "hsl(15, 62%, 34%)", - "address_bar_box_hover": "hsla(15, 62%, 34%, 0.8)", - "address_bar_box_active": "hsla(15, 62%, 34%, 0.65)", - "address_bar_box_focus": "hsl(15, 62%, 40%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(15, 62%, 40%)", - "panel_item_hover": "hsla(15, 84%, 65%, 0.3)", - "panel_item_active": "hsla(15, 84%, 65%, 0.45)", - "panel_separator": "hsl(15, 74%, 63%)", - "icons_attention": "hsl(16, 100%, 82%)", - "toolbar_field_icons_attention": "hsl(15, 62%, 40%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/preview.svg deleted file mode 100644 index 24dc27d4c61..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/icon.svg deleted file mode 100644 index 7f5f32157cb..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/manifest.json deleted file mode 100644 index eda2056e0ea..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "abstract-bold-colorway@mozilla.org" - } - }, - "name": "Abstract – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(15, 89%, 86%)", - "tab_text": "hsl(15, 89%, 86%)", - "tab_selected": "hsl(12, 5%, 21%)", - "tab_line": "hsl(15, 100%, 86%)", - "tab_loading": "hsl(15, 59%, 75%)", - "tab_loading_inactive": "hsl(15, 59%, 75%)", - "frame": "hsl(15, 10%, 16%)", - "popup": "hsl(12, 5%, 21%)", - "popup_text": "hsl(15, 89%, 86%)", - "popup_border": "hsl(15, 100%, 86%)", - "popup_highlight": "hsla(15, 100%, 86%, 0.2)", - "popup_highlight_text": "hsl(15, 89%, 86%)", - "toolbar": "hsl(18, 10%, 25%)", - "toolbar_text": "hsl(15, 89%, 86%)", - "toolbar_field": "hsl(15, 10%, 16%)", - "toolbar_field_text": "hsl(15, 89%, 86%)", - "toolbar_field_focus": "hsl(12, 5%, 21%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(15, 10%, 16%)", - "ntp_background": "hsl(20, 9%, 13%)", - "ntp_card_background": "hsl(12, 5%, 21%)", - "ntp_text": "hsl(15, 89%, 86%)", - "sidebar": "hsl(12, 5%, 21%)", - "sidebar_text": "hsl(15, 89%, 86%)", - "sidebar_highlight": "hsla(15, 100%, 86%, 0.2)", - "address_bar_box": "hsl(12, 5%, 21%)", - "address_bar_box_hover": "hsla(12, 5%, 21%, 0.8)", - "address_bar_box_active": "hsla(12, 5%, 21%, 0.65)", - "address_bar_box_focus": "hsl(18, 10%, 25%)", - "address_bar_box_text": "hsl(15, 89%, 86%)", - "address_bar_url_color": "hsl(15, 89%, 82%)", - "panel_item_hover": "hsla(15, 100%, 86%, 0.2)", - "panel_item_active": "hsla(15, 100%, 86%, 0.35)", - "panel_separator": "hsl(15, 100%, 86%)", - "icons_attention": "hsl(15, 59%, 75%)", - "toolbar_field_icons_attention": "hsl(15, 59%, 75%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/preview.svg deleted file mode 100644 index ff37080bddd..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/icon.svg deleted file mode 100644 index e36b822f9a3..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/manifest.json deleted file mode 100644 index 79eadac692e..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "abstract-soft-colorway@mozilla.org" - } - }, - "name": "Abstract – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(30, 5%, 8%)", - "tab_text": "hsl(30, 5%, 8%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(15, 70%, 38%)", - "tab_loading_inactive": "hsl(15, 70%, 38%)", - "frame": "hsl(15, 100%, 78%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(30, 5%, 8%)", - "popup_border": "hsl(15, 71%, 80%)", - "popup_highlight": "hsla(15, 90%, 50%, 0.2)", - "popup_highlight_text": "hsl(30, 5%, 8%)", - "toolbar": "hsl(15, 100%, 86%)", - "toolbar_text": "hsl(30, 5%, 8%)", - "toolbar_field": "hsl(15, 100%, 78%)", - "toolbar_field_text": "hsl(30, 5%, 8%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(15, 100%, 78%)", - "ntp_background": "hsl(16, 73%, 97%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(30, 5%, 8%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(30, 5%, 8%)", - "sidebar_highlight": "hsla(15, 90%, 50%, 0.2)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(15, 100%, 86%)", - "address_bar_box_text": "hsl(30, 5%, 8%)", - "address_bar_url_color": "hsl(15, 70%, 38%)", - "panel_item_hover": "hsla(15, 90%, 50%, 0.2)", - "panel_item_active": "hsla(15, 90%, 50%, 0.35)", - "panel_separator": "hsl(15, 71%, 80%)", - "icons_attention": "hsl(15, 70%, 38%)", - "toolbar_field_icons_attention": "hsl(15, 70%, 38%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/preview.svg deleted file mode 100644 index 8e979444f96..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/abstract/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/icon.svg deleted file mode 100644 index 71e10b33260..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/manifest.json deleted file mode 100644 index 61a2bc45c07..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "cheers-balanced-colorway@mozilla.org" - } - }, - "name": "Cheers – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(0, 0%, 20%)", - "tab_line": "transparent", - "tab_loading": "hsl(42, 95%, 60%)", - "tab_loading_inactive": "hsl(42, 100%, 27%)", - "frame": "hsl(42, 95%, 60%)", - "popup": "hsl(0, 0%, 20%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(42, 63%, 78%)", - "popup_highlight": "hsla(42, 100%, 62%, 0.22)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(42, 95%, 70%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(0, 0%, 20%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(0, 0%, 20%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(42, 95%, 60%)", - "ntp_background": "hsl(0, 0%, 9%)", - "ntp_card_background": "hsl(0, 0%, 20%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(0, 0%, 20%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(42, 100%, 62%, 0.22)", - "address_bar_box": "hsl(42, 95%, 60%)", - "address_bar_box_hover": "hsla(42, 95%, 60%, 0.8)", - "address_bar_box_active": "hsla(42, 95%, 60%, 0.65)", - "address_bar_box_focus": "hsl(42, 95%, 70%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(42, 95%, 60%)", - "panel_item_hover": "hsla(42, 100%, 62%, 0.22)", - "panel_item_active": "hsla(42, 100%, 62%, 0.37)", - "panel_separator": "hsl(42, 63%, 78%)", - "icons_attention": "hsl(42, 100%, 27%)", - "toolbar_field_icons_attention": "hsl(42, 95%, 60%)", - "tab_attention_dot": "hsl(137, 15%, 36%)", - "appmenu_update_icon_color": "hsl(137, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/preview.svg deleted file mode 100644 index 1820af6cf36..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/icon.svg deleted file mode 100644 index 224dba4eaf6..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/manifest.json deleted file mode 100644 index e9d4628b0db..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "cheers-bold-colorway@mozilla.org" - } - }, - "name": "Cheers – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(42, 96%, 65%)", - "tab_text": "hsl(42, 96%, 65%)", - "tab_selected": "hsl(0, 0%, 16%)", - "tab_line": "hsl(42, 80%, 58%)", - "tab_loading": "hsl(42, 70%, 72%)", - "tab_loading_inactive": "hsl(42, 70%, 72%)", - "frame": "hsl(0, 0%, 11%)", - "popup": "hsl(0, 0%, 16%)", - "popup_text": "hsl(42, 96%, 65%)", - "popup_border": "hsl(42, 95%, 60%)", - "popup_highlight": "hsla(42, 95%, 60%, 0.2)", - "popup_highlight_text": "hsl(42, 96%, 65%)", - "toolbar": "hsl(0, 0%, 20%)", - "toolbar_text": "hsl(42, 96%, 65%)", - "toolbar_field": "hsl(0, 0%, 11%)", - "toolbar_field_text": "hsl(42, 96%, 65%)", - "toolbar_field_focus": "hsl(0, 0%, 16%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(0, 0%, 11%)", - "ntp_background": "hsl(0, 0%, 11%)", - "ntp_card_background": "hsl(0, 0%, 16%)", - "ntp_text": "hsl(42, 96%, 65%)", - "sidebar": "hsl(0, 0%, 16%)", - "sidebar_text": "hsl(42, 96%, 65%)", - "sidebar_highlight": "hsla(42, 95%, 60%, 0.2)", - "address_bar_box": "hsl(0, 0%, 16%)", - "address_bar_box_hover": "hsla(0, 0%, 16%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 16%, 0.65)", - "address_bar_box_focus": "hsl(0, 0%, 20%)", - "address_bar_box_text": "hsl(42, 96%, 65%)", - "address_bar_url_color": "hsl(42, 70%, 72%)", - "panel_item_hover": "hsla(42, 95%, 60%, 0.2)", - "panel_item_active": "hsla(42, 95%, 60%, 0.35)", - "panel_separator": "hsl(42, 95%, 60%)", - "icons_attention": "hsl(42, 70%, 72%)", - "toolbar_field_icons_attention": "hsl(42, 70%, 72%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/preview.svg deleted file mode 100644 index ba16e58108e..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/icon.svg deleted file mode 100644 index 1b9132ccb9b..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/manifest.json deleted file mode 100644 index fbe7a2add52..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "cheers-soft-colorway@mozilla.org" - } - }, - "name": "Cheers – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(42, 100%, 30%)", - "tab_loading_inactive": "hsl(42, 100%, 30%)", - "frame": "hsl(42, 100%, 70%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(42, 100%, 60%)", - "popup_highlight": "hsla(42, 100%, 78%, 0.9)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(42, 100%, 84%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(42, 100%, 70%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(42, 100%, 70%)", - "ntp_background": "hsl(43, 61%, 92%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(42, 100%, 78%, 0.9)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(42, 100%, 84%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(42, 100%, 25%)", - "panel_item_hover": "hsla(42, 100%, 78%, 0.9)", - "panel_item_active": "hsl(42, 100%, 78%)", - "panel_separator": "hsl(42, 100%, 60%)", - "icons_attention": "hsl(42, 100%, 30%)", - "toolbar_field_icons_attention": "hsl(42, 100%, 30%)", - "tab_attention_dot": "hsl(137, 15%, 36%)", - "appmenu_update_icon_color": "hsl(137, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/preview.svg deleted file mode 100644 index 3d197dacf07..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/cheers/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/icon.svg deleted file mode 100644 index 46f9d406d05..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/manifest.json deleted file mode 100644 index ee50d27de7c..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "elemental-balanced-colorway@mozilla.org" - } - }, - "name": "Elemental – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(40, 7%, 92%)", - "tab_line": "transparent", - "tab_loading": "hsl(40, 7%, 18%)", - "tab_loading_inactive": "hsl(40, 8%, 85%)", - "frame": "hsl(38, 7%, 30%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(43, 7%, 60%)", - "popup_highlight": "hsla(40, 7%, 55%, 0.4)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(43, 7%, 40%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(40, 7%, 92%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(38, 7%, 30%)", - "ntp_background": "hsl(42, 8%, 78%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(40, 7%, 55%, 0.4)", - "address_bar_box": "hsl(38, 7%, 30%)", - "address_bar_box_hover": "hsla(38, 7%, 30%, 0.8)", - "address_bar_box_active": "hsla(38, 7%, 30%, 0.65)", - "address_bar_box_focus": "hsl(43, 7%, 40%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(150, 2%, 35%)", - "panel_item_hover": "hsla(40, 7%, 55%, 0.4)", - "panel_item_active": "hsla(40, 7%, 55%, 0.55)", - "panel_separator": "hsl(43, 7%, 60%)", - "icons_attention": "hsl(40, 8%, 85%)", - "toolbar_field_icons_attention": "hsl(40, 7%, 18%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/preview.svg deleted file mode 100644 index c700f4656d5..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/icon.svg deleted file mode 100644 index 311409f39ca..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/manifest.json deleted file mode 100644 index 6dd0ca7cfc2..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "elemental-bold-colorway@mozilla.org" - } - }, - "name": "Elemental – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(40, 7%, 25%)", - "tab_line": "hsl(42, 7%, 38%)", - "tab_loading": "hsl(45, 6%, 88%)", - "tab_loading_inactive": "hsl(45, 6%, 88%)", - "frame": "hsl(38, 7%, 30%)", - "popup": "hsl(40, 7%, 25%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(43, 7%, 40%)", - "popup_highlight": "hsla(38, 7%, 70%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(42, 6%, 43%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(38, 7%, 30%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(40, 7%, 25%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(38, 7%, 30%)", - "ntp_background": "hsl(38, 7%, 30%)", - "ntp_card_background": "hsl(40, 7%, 25%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(40, 7%, 25%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(38, 7%, 70%, 0.3)", - "address_bar_box": "hsl(40, 7%, 25%)", - "address_bar_box_hover": "hsla(40, 7%, 25%, 0.8)", - "address_bar_box_active": "hsla(40, 7%, 25%, 0.65)", - "address_bar_box_focus": "hsl(42, 6%, 43%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(40, 6%, 90%)", - "panel_item_hover": "hsla(38, 7%, 70%, 0.3)", - "panel_item_active": "hsla(38, 7%, 70%, 0.45)", - "panel_separator": "hsl(43, 7%, 40%)", - "icons_attention": "hsl(45, 6%, 88%)", - "toolbar_field_icons_attention": "hsl(45, 6%, 88%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/preview.svg deleted file mode 100644 index 8c1cd4867c6..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/icon.svg deleted file mode 100644 index cb634ce131f..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/manifest.json deleted file mode 100644 index b49d4d22099..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "elemental-soft-colorway@mozilla.org" - } - }, - "name": "Elemental – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(48, 10%, 10%)", - "tab_text": "hsl(48, 10%, 10%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(42, 7%, 38%)", - "tab_loading_inactive": "hsl(42, 7%, 38%)", - "frame": "hsl(45, 6%, 88%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(48, 10%, 10%)", - "popup_border": "hsl(48, 6%, 85%)", - "popup_highlight": "hsla(40, 7%, 73%, 0.4)", - "popup_highlight_text": "hsl(48, 10%, 10%)", - "toolbar": "hsl(30, 7%, 94%)", - "toolbar_text": "hsl(48, 10%, 10%)", - "toolbar_field": "hsl(45, 6%, 88%)", - "toolbar_field_text": "hsl(48, 10%, 10%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(45, 6%, 88%)", - "ntp_background": "hsl(60, 8%, 95%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(48, 10%, 10%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(48, 10%, 10%)", - "sidebar_highlight": "hsla(40, 7%, 73%, 0.4)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(30, 7%, 94%)", - "address_bar_box_text": "hsl(48, 10%, 10%)", - "address_bar_url_color": "hsl(42, 7%, 38%)", - "panel_item_hover": "hsla(40, 7%, 73%, 0.4)", - "panel_item_active": "hsla(40, 7%, 73%, 0.55)", - "panel_separator": "hsl(48, 6%, 85%)", - "icons_attention": "hsl(42, 7%, 38%)", - "toolbar_field_icons_attention": "hsl(42, 7%, 38%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/preview.svg deleted file mode 100644 index dce730c57ed..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/elemental/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/icon.svg deleted file mode 100644 index 08f3eaf4692..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/manifest.json deleted file mode 100644 index d744db57f3d..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "foto-balanced-colorway@mozilla.org" - } - }, - "name": "Foto – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(349, 35%, 94%)", - "tab_line": "transparent", - "tab_loading": "hsl(351, 37%, 40%)", - "tab_loading_inactive": "hsl(352, 56%, 84%)", - "frame": "hsl(351, 37%, 40%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(351, 44%, 63%)", - "popup_highlight": "hsla(350, 53%, 75%, 0.5)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(351, 37%, 47%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(349, 35%, 94%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(351, 37%, 40%)", - "ntp_background": "hsl(351, 37%, 80%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(350, 53%, 75%, 0.5)", - "address_bar_box": "hsl(351, 37%, 40%)", - "address_bar_box_hover": "hsla(351, 37%, 40%, 0.8)", - "address_bar_box_active": "hsla(351, 37%, 40%, 0.65)", - "address_bar_box_focus": "hsl(351, 37%, 47%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(351, 37%, 40%)", - "panel_item_hover": "hsla(350, 53%, 75%, 0.5)", - "panel_item_active": "hsla(350, 53%, 75%, 0.65)", - "panel_separator": "hsl(351, 44%, 63%)", - "icons_attention": "hsl(352, 56%, 84%)", - "toolbar_field_icons_attention": "hsl(351, 37%, 40%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/preview.svg deleted file mode 100644 index 1c43a6e67de..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/bold/icon.svg deleted file mode 100644 index b08be54e422..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/foto/bold/manifest.json deleted file mode 100644 index 91abfe51192..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "foto-bold-colorway@mozilla.org" - } - }, - "name": "Foto – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(351, 27%, 25%)", - "tab_line": "hsl(351, 31%, 52%)", - "tab_loading": "hsl(352, 56%, 84%)", - "tab_loading_inactive": "hsl(352, 56%, 84%)", - "frame": "hsl(350, 32%, 30%)", - "popup": "hsl(351, 27%, 25%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(351, 32%, 46%)", - "popup_highlight": "hsla(351, 32%, 50%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(351, 32%, 42%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(350, 32%, 30%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(351, 27%, 25%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(350, 32%, 30%)", - "ntp_background": "hsl(350, 14%, 17%)", - "ntp_card_background": "hsl(351, 27%, 25%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(351, 27%, 25%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(351, 32%, 50%, 0.6)", - "address_bar_box": "hsl(351, 27%, 25%)", - "address_bar_box_hover": "hsla(351, 27%, 25%, 0.8)", - "address_bar_box_active": "hsla(351, 27%, 25%, 0.65)", - "address_bar_box_focus": "hsl(351, 32%, 42%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(350, 57%, 90%)", - "panel_item_hover": "hsla(351, 32%, 50%, 0.6)", - "panel_item_active": "hsla(351, 32%, 50%, 0.75)", - "panel_separator": "hsl(351, 32%, 46%)", - "icons_attention": "hsl(352, 56%, 84%)", - "toolbar_field_icons_attention": "hsl(352, 56%, 84%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/bold/preview.svg deleted file mode 100644 index 338672498f7..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/soft/icon.svg deleted file mode 100644 index 9552e234f05..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/foto/soft/manifest.json deleted file mode 100644 index e9f1edf3199..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "foto-soft-colorway@mozilla.org" - } - }, - "name": "Foto – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(351, 32%, 8%)", - "tab_text": "hsl(351, 32%, 8%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(351, 32%, 42%)", - "tab_loading_inactive": "hsl(351, 32%, 42%)", - "frame": "hsl(352, 56%, 84%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(351, 32%, 8%)", - "popup_border": "hsl(350, 61%, 88%)", - "popup_highlight": "hsla(351, 52%, 82%, 0.5)", - "popup_highlight_text": "hsl(351, 32%, 8%)", - "toolbar": "hsl(351, 47%, 89%)", - "toolbar_text": "hsl(351, 32%, 8%)", - "toolbar_field": "hsl(352, 56%, 84%)", - "toolbar_field_text": "hsl(351, 32%, 8%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(352, 56%, 84%)", - "ntp_background": "hsl(354, 33%, 94%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(351, 32%, 8%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(351, 32%, 8%)", - "sidebar_highlight": "hsla(351, 52%, 82%, 0.5)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(351, 47%, 89%)", - "address_bar_box_text": "hsl(351, 32%, 8%)", - "address_bar_url_color": "hsl(351, 37%, 40%)", - "panel_item_hover": "hsla(351, 52%, 82%, 0.5)", - "panel_item_active": "hsla(351, 52%, 82%, 0.65)", - "panel_separator": "hsl(350, 61%, 88%)", - "icons_attention": "hsl(351, 32%, 42%)", - "toolbar_field_icons_attention": "hsl(351, 32%, 42%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/foto/soft/preview.svg deleted file mode 100644 index e21d5c9de8d..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/foto/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/icon.svg deleted file mode 100644 index a6bb9c5a8b0..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/manifest.json deleted file mode 100644 index b7d668485ad..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "graffiti-balanced-colorway@mozilla.org" - } - }, - "name": "Graffiti – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(278, 31%, 95%)", - "tab_line": "transparent", - "tab_loading": "hsl(278, 32%, 35%)", - "tab_loading_inactive": "hsl(279, 77%, 95%)", - "frame": "hsl(278, 33%, 40%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(278, 32%, 50%)", - "popup_highlight": "hsla(278, 80%, 78%, 0.4)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(279, 29%, 52%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(278, 31%, 95%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(278, 33%, 40%)", - "ntp_background": "hsl(277, 30%, 86%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(278, 80%, 78%, 0.4)", - "address_bar_box": "hsl(278, 33%, 40%)", - "address_bar_box_hover": "hsla(278, 33%, 40%, 0.8)", - "address_bar_box_active": "hsla(278, 33%, 40%, 0.65)", - "address_bar_box_focus": "hsl(279, 29%, 52%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(278, 32%, 35%)", - "panel_item_hover": "hsla(278, 80%, 78%, 0.4)", - "panel_item_active": "hsla(278, 80%, 78%, 0.55)", - "panel_separator": "hsl(278, 32%, 50%)", - "icons_attention": "hsl(279, 77%, 95%)", - "toolbar_field_icons_attention": "hsl(278, 32%, 35%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/preview.svg deleted file mode 100644 index 9aa245de3e5..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/icon.svg deleted file mode 100644 index 764d072a09a..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/manifest.json deleted file mode 100644 index e56600702e3..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "graffiti-bold-colorway@mozilla.org" - } - }, - "name": "Graffiti – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(275, 15%, 22%)", - "tab_line": "hsl(278, 32%, 50%)", - "tab_loading": "hsl(278, 79%, 85%)", - "tab_loading_inactive": "hsl(278, 79%, 85%)", - "frame": "hsl(279, 31%, 28%)", - "popup": "hsl(275, 15%, 22%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(278, 30%, 42%)", - "popup_highlight": "hsla(278, 33%, 52%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(278, 27%, 40%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(279, 31%, 28%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(275, 15%, 22%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(279, 31%, 28%)", - "ntp_background": "hsl(270, 10%, 12%)", - "ntp_card_background": "hsl(275, 15%, 22%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(275, 15%, 22%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(278, 33%, 52%, 0.6)", - "address_bar_box": "hsl(275, 15%, 22%)", - "address_bar_box_hover": "hsla(275, 15%, 22%, 0.8)", - "address_bar_box_active": "hsla(275, 15%, 22%, 0.65)", - "address_bar_box_focus": "hsl(278, 27%, 40%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(278, 80%, 88%)", - "panel_item_hover": "hsla(278, 33%, 52%, 0.6)", - "panel_item_active": "hsla(278, 33%, 52%, 0.75)", - "panel_separator": "hsl(278, 30%, 42%)", - "icons_attention": "hsl(278, 79%, 85%)", - "toolbar_field_icons_attention": "hsl(278, 79%, 85%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/preview.svg deleted file mode 100644 index f1db86b92e3..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/icon.svg deleted file mode 100644 index d50944e91ae..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/manifest.json deleted file mode 100644 index dba350671bb..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "graffiti-soft-colorway@mozilla.org" - } - }, - "name": "Graffiti – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(278, 22%, 10%)", - "tab_text": "hsl(278, 22%, 10%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(278, 33%, 44%)", - "tab_loading_inactive": "hsl(278, 33%, 44%)", - "frame": "hsl(278, 79%, 85%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(278, 22%, 10%)", - "popup_border": "hsl(278, 80%, 86%)", - "popup_highlight": "hsla(278, 80%, 78%, 0.4)", - "popup_highlight_text": "hsl(278, 22%, 10%)", - "toolbar": "hsl(278, 80%, 91%)", - "toolbar_text": "hsl(278, 22%, 10%)", - "toolbar_field": "hsl(278, 79%, 85%)", - "toolbar_field_text": "hsl(278, 22%, 10%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(278, 79%, 85%)", - "ntp_background": "hsl(279, 77%, 95%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(278, 22%, 10%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(278, 22%, 10%)", - "sidebar_highlight": "hsla(278, 80%, 78%, 0.4)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(278, 80%, 91%)", - "address_bar_box_text": "hsl(278, 22%, 10%)", - "address_bar_url_color": "hsl(278, 33%, 44%)", - "panel_item_hover": "hsla(278, 80%, 78%, 0.4)", - "panel_item_active": "hsla(278, 80%, 78%, 0.55)", - "panel_separator": "hsl(278, 80%, 86%)", - "icons_attention": "hsl(278, 33%, 44%)", - "toolbar_field_icons_attention": "hsl(278, 33%, 44%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/preview.svg deleted file mode 100644 index ed76cdcce90..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/graffiti/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/icon.svg deleted file mode 100644 index 4c06426349c..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/manifest.json deleted file mode 100644 index c265b4ae87d..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "lush-balanced-colorway@mozilla.org" - } - }, - "name": "Lush – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(120, 7%, 94%)", - "tab_line": "transparent", - "tab_loading": "hsl(138, 16%, 32%)", - "tab_loading_inactive": "hsl(147, 25%, 86%)", - "frame": "hsl(144, 16%, 30%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(145, 25%, 50%)", - "popup_highlight": "hsla(145, 36%, 40%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(146, 15%, 36%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(120, 7%, 94%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(144, 16%, 30%)", - "ntp_background": "hsl(140, 10%, 82%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(145, 36%, 40%, 0.3)", - "address_bar_box": "hsl(144, 16%, 30%)", - "address_bar_box_hover": "hsla(144, 16%, 30%, 0.8)", - "address_bar_box_active": "hsla(144, 16%, 30%, 0.65)", - "address_bar_box_focus": "hsl(146, 15%, 36%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(138, 16%, 32%)", - "panel_item_hover": "hsla(145, 36%, 40%, 0.3)", - "panel_item_active": "hsla(145, 36%, 40%, 0.45)", - "panel_separator": "hsl(145, 25%, 50%)", - "icons_attention": "hsl(147, 25%, 86%)", - "toolbar_field_icons_attention": "hsl(138, 16%, 32%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/preview.svg deleted file mode 100644 index 3bfe84c75fb..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/bold/icon.svg deleted file mode 100644 index 9c2c88dd7b4..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/lush/bold/manifest.json deleted file mode 100644 index dd4011023d3..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "lush-bold-colorway@mozilla.org" - } - }, - "name": "Lush – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(140, 2%, 28%)", - "tab_line": "hsl(139, 8%, 48%)", - "tab_loading": "hsl(146, 44%, 86%)", - "tab_loading_inactive": "hsl(146, 44%, 86%)", - "frame": "hsl(139, 16%, 30%)", - "popup": "hsl(140, 2%, 28%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(140, 10%, 35%)", - "popup_highlight": "hsla(137, 18%, 50%, 0.42)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(139, 15%, 42%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(139, 16%, 30%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(140, 2%, 28%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(139, 16%, 30%)", - "ntp_background": "hsl(150, 2%, 20%)", - "ntp_card_background": "hsl(140, 2%, 28%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(140, 2%, 28%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(137, 18%, 50%, 0.42)", - "address_bar_box": "hsl(140, 2%, 28%)", - "address_bar_box_hover": "hsla(140, 2%, 28%, 0.8)", - "address_bar_box_active": "hsla(140, 2%, 28%, 0.65)", - "address_bar_box_focus": "hsl(139, 15%, 42%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(146, 44%, 86%)", - "panel_item_hover": "hsla(137, 18%, 50%, 0.42)", - "panel_item_active": "hsla(137, 18%, 50%, 0.57)", - "panel_separator": "hsl(140, 10%, 35%)", - "icons_attention": "hsl(146, 44%, 86%)", - "toolbar_field_icons_attention": "hsl(146, 44%, 86%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/bold/preview.svg deleted file mode 100644 index 83af3502919..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/icon.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/soft/icon.svg deleted file mode 100644 index 79cf4d5bb7b..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/manifest.json b/browser/themes/addons/colorways/2021-life-in-color/lush/soft/manifest.json deleted file mode 100644 index 1f4ef55c98c..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "lush-soft-colorway@mozilla.org" - } - }, - "name": "Lush – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(150, 6%, 20%)", - "tab_text": "hsl(150, 6%, 20%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(145, 24%, 32%)", - "tab_loading_inactive": "hsl(145, 24%, 32%)", - "frame": "hsl(147, 25%, 86%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(150, 6%, 20%)", - "popup_border": "hsl(144, 25%, 88%)", - "popup_highlight": "hsla(143, 25%, 86%, 0.7)", - "popup_highlight_text": "hsl(150, 6%, 20%)", - "toolbar": "hsl(140, 26%, 93%)", - "toolbar_text": "hsl(150, 6%, 20%)", - "toolbar_field": "hsl(147, 25%, 86%)", - "toolbar_field_text": "hsl(150, 6%, 20%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(147, 25%, 86%)", - "ntp_background": "hsl(150, 25%, 97%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(150, 6%, 20%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(150, 6%, 20%)", - "sidebar_highlight": "hsla(143, 25%, 86%, 0.7)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(140, 26%, 93%)", - "address_bar_box_text": "hsl(150, 6%, 20%)", - "address_bar_url_color": "hsl(145, 24%, 32%)", - "panel_item_hover": "hsla(143, 25%, 86%, 0.7)", - "panel_item_active": "hsla(143, 25%, 86%, 0.85)", - "panel_separator": "hsl(144, 25%, 88%)", - "icons_attention": "hsl(145, 24%, 32%)", - "toolbar_field_icons_attention": "hsl(145, 24%, 32%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/preview.svg b/browser/themes/addons/colorways/2021-life-in-color/lush/soft/preview.svg deleted file mode 100644 index 611339319ee..00000000000 --- a/browser/themes/addons/colorways/2021-life-in-color/lush/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/icon.svg deleted file mode 100644 index 1422130dc6b..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/manifest.json deleted file mode 100644 index 4c75d2fab59..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/manifest.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "activist-balanced-colorway@mozilla.org" - } - }, - "name": "Activist – Balanced", - "author": "Mozilla", - "version": "1.1.2", - "icons": { - "32": "icon.svg" - }, - "theme": { - "properties": { - "color_scheme": "light", - "content_color_scheme": "auto" - }, - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(223, 100%, 99%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(220, 72%, 28%)", - "popup": "hsl(228, 100%, 99%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(220, 58%, 39%)", - "popup_highlight": "hsla(220, 54%, 80%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(220, 49%, 48%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(223, 100%, 99%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(228, 100%, 99%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(220, 72%, 28%)", - "ntp_background": "hsl(221, 63%, 87%)", - "ntp_card_background": "hsl(228, 100%, 99%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(228, 100%, 99%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(220, 54%, 80%, 0.3)", - "address_bar_box": "hsl(220, 72%, 28%)", - "address_bar_box_hover": "hsla(220, 72%, 28%, 0.8)", - "address_bar_box_active": "hsla(220, 72%, 28%, 0.65)", - "address_bar_box_focus": "hsl(220, 49%, 48%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(220, 76%, 31%)", - "panel_item_hover": "hsla(220, 54%, 80%, 0.3)", - "panel_item_active": "hsla(220, 54%, 80%, 0.45)", - "panel_separator": "hsl(220, 58%, 39%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/preview.svg deleted file mode 100644 index 9ebc168c7ee..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/bold/icon.svg deleted file mode 100644 index 37eee3b21e9..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/activist/bold/manifest.json deleted file mode 100644 index d3404ca9a53..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/manifest.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "activist-bold-colorway@mozilla.org" - } - }, - "name": "Activist – Bold", - "author": "Mozilla", - "version": "1.1.2", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(220, 79%, 11%)", - "tab_line": "hsl(220, 54%, 67%)", - "tab_loading": "hsl(220, 70%, 78%)", - "tab_loading_inactive": "hsl(220, 70%, 78%)", - "frame": "hsl(233, 73%, 12%)", - "popup": "hsl(220, 79%, 11%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(220, 69%, 66%)", - "popup_highlight": "hsla(220, 89%, 69%, 0.2)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(234, 90%, 19%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(233, 73%, 12%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(220, 79%, 11%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(233, 73%, 12%)", - "ntp_background": "hsl(222, 100%, 3%)", - "ntp_card_background": "hsl(220, 79%, 11%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(220, 79%, 11%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(220, 89%, 69%, 0.2)", - "address_bar_box": "hsl(220, 79%, 11%)", - "address_bar_box_active": "hsla(220, 79%, 11%, 0.65)", - "address_bar_box_focus": "hsl(234, 90%, 19%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(219, 37%, 59%)", - "panel_item_hover": "hsla(220, 89%, 69%, 0.2)", - "panel_item_active": "hsla(220, 89%, 69%, 0.35)", - "panel_separator": "hsl(220, 69%, 66%)", - "icons_attention": "hsl(220, 70%, 78%)", - "toolbar_field_icons_attention": "hsl(220, 70%, 78%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/bold/preview.svg deleted file mode 100644 index cf1f18c9b1a..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/soft/icon.svg deleted file mode 100644 index 403f3e5dfd7..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/activist/soft/manifest.json deleted file mode 100644 index 05753ccc52e..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "activist-soft-colorway@mozilla.org" - } - }, - "name": "Activist – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(227, 91%, 41%)", - "tab_loading_inactive": "hsl(227, 91%, 41%)", - "frame": "hsl(226, 45%, 79%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(226, 54%, 56%)", - "popup_highlight": "hsla(226, 54%, 56%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(227, 47%, 90%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(226, 45%, 79%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(226, 45%, 79%)", - "ntp_background": "hsl(226, 68%, 96%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(226, 54%, 56%, 0.3)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(227, 47%, 90%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(226, 67%, 37%)", - "panel_item_hover": "hsla(226, 54%, 56%, 0.3)", - "panel_item_active": "hsla(226, 54%, 56%, 0.45)", - "panel_separator": "hsl(226, 54%, 56%)", - "icons_attention": "hsl(227, 91%, 41%)", - "toolbar_field_icons_attention": "hsl(227, 91%, 41%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/activist/soft/preview.svg deleted file mode 100644 index d8756b95ad2..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/activist/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/icon.svg deleted file mode 100644 index 4e70d68e8b1..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/manifest.json deleted file mode 100644 index 8c6a5834642..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/manifest.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "dreamer-balanced-colorway@mozilla.org" - } - }, - "name": "Dreamer – Balanced", - "author": "Mozilla", - "version": "1.1.2", - "icons": { - "32": "icon.svg" - }, - "theme": { - "properties": { - "color_scheme": "light", - "content_color_scheme": "auto" - }, - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(277, 31%, 95%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(266, 39%, 35%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(266, 66%, 24%)", - "popup_highlight": "hsla(264, 43%, 85%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(265, 34%, 47%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(277, 31%, 95%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(266, 39%, 35%)", - "ntp_background": "hsl(263, 59%, 91%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(264, 43%, 85%, 0.3)", - "address_bar_box": "hsl(266, 39%, 35%)", - "address_bar_box_hover": "hsla(266, 39%, 35%, 0.8)", - "address_bar_box_active": "hsla(266, 39%, 35%, 0.65)", - "address_bar_box_focus": "hsl(265, 34%, 47%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(266, 39%, 35%)", - "panel_item_hover": "hsla(264, 43%, 85%, 0.3)", - "panel_item_active": "hsla(264, 43%, 85%, 0.45)", - "panel_separator": "hsl(266, 66%, 24%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/preview.svg deleted file mode 100644 index c0277ca6a3a..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/icon.svg deleted file mode 100644 index ffcb472f421..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/manifest.json deleted file mode 100644 index 2d7b867562d..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/manifest.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "dreamer-bold-colorway@mozilla.org" - } - }, - "name": "Dreamer – Bold", - "author": "Mozilla", - "version": "1.1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(267, 54%, 15%)", - "tab_line": "hsl(266, 49%, 45%)", - "tab_loading": "hsl(266, 83%, 81%)", - "tab_loading_inactive": "hsl(266, 83%, 81%)", - "frame": "hsl(266, 68%, 20%)", - "popup": "hsl(267, 54%, 15%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(266, 60%, 67%)", - "popup_highlight": "hsla(266, 39%, 35%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(265, 45%, 29%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(266, 68%, 20%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(267, 54%, 15%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(266, 68%, 20%)", - "ntp_background": "hsl(256, 100%, 4%)", - "ntp_card_background": "hsl(267, 54%, 15%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(267, 54%, 15%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(266, 39%, 35%, 0.6)", - "address_bar_box": "hsl(267, 54%, 15%)", - "address_bar_box_active": "hsla(267, 54%, 15%, 0.65)", - "address_bar_box_focus": "hsl(265, 45%, 29%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(266, 72%, 82%)", - "panel_item_hover": "hsla(266, 39%, 35%, 0.6)", - "panel_item_active": "hsla(266, 39%, 35%, 0.75)", - "panel_separator": "hsl(266, 60%, 67%)", - "icons_attention": "hsl(266, 83%, 81%)", - "toolbar_field_icons_attention": "hsl(266, 83%, 81%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/preview.svg deleted file mode 100644 index c172daef440..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/icon.svg deleted file mode 100644 index f4f3e0c2c84..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/manifest.json deleted file mode 100644 index 350b354405f..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "dreamer-soft-colorway@mozilla.org" - } - }, - "name": "Dreamer – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(278, 22%, 10%)", - "tab_text": "hsl(278, 22%, 10%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(278, 49%, 35%)", - "tab_loading_inactive": "hsl(278, 49%, 35%)", - "frame": "hsl(258, 49%, 84%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(278, 22%, 10%)", - "popup_border": "hsl(258, 72%, 43%)", - "popup_highlight": "hsla(259, 56%, 79%, 0.3)", - "popup_highlight_text": "hsl(278, 22%, 10%)", - "toolbar": "hsl(259, 69%, 94%)", - "toolbar_text": "hsl(278, 22%, 10%)", - "toolbar_field": "hsl(258, 49%, 84%)", - "toolbar_field_text": "hsl(278, 22%, 10%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(258, 49%, 84%)", - "ntp_background": "hsl(258, 76%, 97%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(278, 22%, 10%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(278, 22%, 10%)", - "sidebar_highlight": "hsla(259, 56%, 79%, 0.3)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(259, 69%, 94%)", - "address_bar_box_text": "hsl(278, 22%, 10%)", - "address_bar_url_color": "hsl(258, 46%, 46%)", - "panel_item_hover": "hsla(259, 56%, 79%, 0.3)", - "panel_item_active": "hsla(259, 56%, 79%, 0.45)", - "panel_separator": "hsl(258, 72%, 43%)", - "icons_attention": "hsl(278, 49%, 35%)", - "toolbar_field_icons_attention": "hsl(278, 49%, 35%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/preview.svg deleted file mode 100644 index f801303d7d0..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/dreamer/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/icon.svg deleted file mode 100644 index 28974b9b4ba..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/manifest.json deleted file mode 100644 index 17eac4aa7f0..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "expressionist-balanced-colorway@mozilla.org" - } - }, - "name": "Expressionist – Balanced", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(46, 91%, 95%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(45, 85%, 63%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(33, 91%, 27%)", - "popup_highlight": "hsla(45, 85%, 63%, 0.2)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(45, 93%, 77%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(46, 91%, 95%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(45, 85%, 63%)", - "ntp_background": "hsl(46, 94%, 94%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(45, 85%, 63%, 0.2)", - "address_bar_box": "hsl(45, 85%, 63%)", - "address_bar_box_hover": "hsla(45, 85%, 63%, 0.8)", - "address_bar_box_active": "hsla(45, 85%, 63%, 0.65)", - "address_bar_box_focus": "hsl(45, 93%, 77%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(33, 91%, 27%)", - "panel_item_hover": "hsla(45, 85%, 63%, 0.2)", - "panel_item_active": "hsla(45, 85%, 63%, 0.35)", - "panel_separator": "hsl(33, 91%, 27%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/preview.svg deleted file mode 100644 index 8d0bb43756c..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/icon.svg deleted file mode 100644 index bd6d7f390fe..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/manifest.json deleted file mode 100644 index 514463473c9..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "expressionist-bold-colorway@mozilla.org" - } - }, - "name": "Expressionist – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(47, 95%, 8%)", - "tab_line": "hsl(45, 86%, 83%)", - "tab_loading": "hsl(45, 68%, 66%)", - "tab_loading_inactive": "hsl(45, 68%, 66%)", - "frame": "hsl(45, 95%, 17%)", - "popup": "hsl(47, 95%, 8%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(45, 49%, 77%)", - "popup_highlight": "hsla(45, 87%, 47%, 0.2)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(45, 89%, 25%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(45, 95%, 17%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(47, 95%, 8%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(45, 95%, 17%)", - "ntp_background": "hsl(46, 68%, 4%)", - "ntp_card_background": "hsl(47, 95%, 8%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(47, 95%, 8%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(45, 87%, 47%, 0.2)", - "address_bar_box": "hsl(47, 95%, 8%)", - "address_bar_box_hover": "hsla(47, 95%, 8%, 0.8)", - "address_bar_box_active": "hsla(47, 95%, 8%, 0.65)", - "address_bar_box_focus": "hsl(45, 89%, 25%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(45, 78%, 82%)", - "panel_item_hover": "hsla(45, 87%, 47%, 0.2)", - "panel_item_active": "hsla(45, 87%, 47%, 0.35)", - "panel_separator": "hsl(45, 49%, 77%)", - "icons_attention": "hsl(45, 68%, 66%)", - "toolbar_field_icons_attention": "hsl(45, 68%, 66%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/preview.svg deleted file mode 100644 index e26a8edcf08..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/icon.svg deleted file mode 100644 index a97d148a37a..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/manifest.json deleted file mode 100644 index de192b05df3..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "expressionist-soft-colorway@mozilla.org" - } - }, - "name": "Expressionist – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(30, 5%, 8%)", - "tab_text": "hsl(30, 5%, 8%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(33, 74%, 29%)", - "tab_loading_inactive": "hsl(33, 74%, 29%)", - "frame": "hsl(45, 76%, 85%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(30, 5%, 8%)", - "popup_border": "hsl(45, 91%, 30%)", - "popup_highlight": "hsla(40, 90%, 50%, 0.2)", - "popup_highlight_text": "hsl(30, 5%, 8%)", - "toolbar": "hsl(46, 94%, 94%)", - "toolbar_text": "hsl(30, 5%, 8%)", - "toolbar_field": "hsl(45, 76%, 85%)", - "toolbar_field_text": "hsl(30, 5%, 8%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(45, 76%, 85%)", - "ntp_background": "hsl(44, 100%, 97%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(30, 5%, 8%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(30, 5%, 8%)", - "sidebar_highlight": "hsla(40, 90%, 50%, 0.2)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(46, 94%, 94%)", - "address_bar_box_text": "hsl(30, 5%, 8%)", - "address_bar_url_color": "hsl(33, 86%, 23%)", - "panel_item_hover": "hsla(40, 90%, 50%, 0.2)", - "panel_item_active": "hsla(40, 90%, 50%, 0.35)", - "panel_separator": "hsl(45, 91%, 30%)", - "icons_attention": "hsl(33, 74%, 29%)", - "toolbar_field_icons_attention": "hsl(33, 74%, 29%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/preview.svg deleted file mode 100644 index 9eb3ddf0514..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/expressionist/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/icon.svg deleted file mode 100644 index 29a6895ca73..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/manifest.json deleted file mode 100644 index b47d0dcbd53..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "innovator-balanced-colorway@mozilla.org" - } - }, - "name": "Innovator – Balanced", - "author": "Mozilla", - "version": "1.1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(12, 100%, 91%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(14, 94%, 55%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(10, 92%, 33%)", - "popup_highlight": "hsla(17, 89%, 79%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(14, 93%, 83%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(12, 100%, 91%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(14, 94%, 55%)", - "ntp_background": "hsl(11, 100%, 90%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(17, 89%, 79%, 0.3)", - "address_bar_box": "hsl(14, 94%, 55%)", - "address_bar_box_hover": "hsla(14, 94%, 55%, 0.8)", - "address_bar_box_active": "hsla(14, 94%, 55%, 0.65)", - "address_bar_box_focus": "hsl(14, 93%, 83%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(10, 86%, 40%)", - "panel_item_hover": "hsla(17, 89%, 79%, 0.3)", - "panel_item_active": "hsla(17, 89%, 79%, 0.45)", - "panel_separator": "hsl(10, 92%, 33%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/preview.svg deleted file mode 100644 index 292ad647a28..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/icon.svg deleted file mode 100644 index 3c96b19dd2a..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/manifest.json deleted file mode 100644 index 395405b7911..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "innovator-bold-colorway@mozilla.org" - } - }, - "name": "Innovator – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(11, 96%, 10%)", - "tab_line": "hsl(10, 93%, 89%)", - "tab_loading": "hsl(11, 88%, 90%)", - "tab_loading_inactive": "hsl(11, 88%, 90%)", - "frame": "hsl(10, 89%, 18%)", - "popup": "hsl(11, 96%, 10%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(10, 60%, 68%)", - "popup_highlight": "hsla(10, 85%, 36%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(11, 87%, 32%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(10, 89%, 18%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(11, 96%, 10%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(10, 89%, 18%)", - "ntp_background": "hsl(10, 100%, 1%)", - "ntp_card_background": "hsl(11, 96%, 10%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(11, 96%, 10%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(10, 85%, 36%, 0.3)", - "address_bar_box": "hsl(11, 96%, 10%)", - "address_bar_box_hover": "hsla(11, 96%, 10%, 0.8)", - "address_bar_box_active": "hsla(11, 96%, 10%, 0.65)", - "address_bar_box_focus": "hsl(11, 87%, 32%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(350, 57%, 90%)", - "panel_item_hover": "hsla(10, 85%, 36%, 0.3)", - "panel_item_active": "hsla(10, 85%, 36%, 0.45)", - "panel_separator": "hsl(10, 60%, 68%)", - "icons_attention": "hsl(11, 88%, 90%)", - "toolbar_field_icons_attention": "hsl(11, 88%, 90%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/preview.svg deleted file mode 100644 index fdb79fe84df..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/icon.svg deleted file mode 100644 index 6df542ae42e..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/manifest.json deleted file mode 100644 index df0e55a309c..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "innovator-soft-colorway@mozilla.org" - } - }, - "name": "Innovator – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(351, 32%, 8%)", - "tab_text": "hsl(351, 32%, 8%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(14, 89%, 28%)", - "tab_loading_inactive": "hsl(14, 89%, 28%)", - "frame": "hsl(14, 81%, 81%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(351, 32%, 8%)", - "popup_border": "hsl(14, 93%, 36%)", - "popup_highlight": "hsla(14, 83%, 76%, 0.4)", - "popup_highlight_text": "hsl(351, 32%, 8%)", - "toolbar": "hsl(14, 64%, 87%)", - "toolbar_text": "hsl(351, 32%, 8%)", - "toolbar_field": "hsl(14, 81%, 81%)", - "toolbar_field_text": "hsl(351, 32%, 8%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(14, 81%, 81%)", - "ntp_background": "hsl(14, 84%, 95%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(351, 32%, 8%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(351, 32%, 8%)", - "sidebar_highlight": "hsla(14, 83%, 76%, 0.4)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(14, 64%, 87%)", - "address_bar_box_text": "hsl(351, 32%, 8%)", - "address_bar_url_color": "hsl(14, 86%, 41%)", - "panel_item_hover": "hsla(14, 83%, 76%, 0.4)", - "panel_item_active": "hsla(14, 83%, 76%, 0.55)", - "panel_separator": "hsl(14, 93%, 36%)", - "icons_attention": "hsl(14, 89%, 28%)", - "toolbar_field_icons_attention": "hsl(14, 89%, 28%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/preview.svg deleted file mode 100644 index fd076d525e0..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/innovator/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/icon.svg deleted file mode 100644 index dec120e11f5..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/manifest.json deleted file mode 100644 index 0ef95e6f045..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/manifest.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "playmaker-balanced-colorway@mozilla.org" - } - }, - "name": "Playmaker – Balanced", - "author": "Mozilla", - "version": "1.1.2", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(352, 65%, 95%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(354, 71%, 43%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(354, 87%, 36%)", - "popup_highlight": "hsla(355, 62%, 75%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(354, 80%, 69%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(352, 65%, 95%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(354, 71%, 43%)", - "ntp_background": "hsl(355, 73%, 91%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(355, 62%, 75%, 0.3)", - "address_bar_box": "hsl(354, 71%, 43%)", - "address_bar_box_hover": "hsla(354, 71%, 43%, 0.8)", - "address_bar_box_active": "hsla(354, 71%, 43%, 0.65)", - "address_bar_box_focus": "hsl(354, 80%, 69%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(354, 79%, 40%)", - "panel_item_hover": "hsla(355, 62%, 75%, 0.3)", - "panel_item_active": "hsla(355, 62%, 75%, 0.45)", - "panel_separator": "hsl(354, 87%, 36%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/preview.svg deleted file mode 100644 index 69fd21bad08..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/icon.svg deleted file mode 100644 index 8ca7b435624..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/manifest.json deleted file mode 100644 index 9229b9c7b49..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "playmaker-bold-colorway@mozilla.org" - } - }, - "name": "Playmaker – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(355, 61%, 11%)", - "tab_line": "hsl(354, 80%, 40%)", - "tab_loading": "hsl(0, 95%, 84%)", - "tab_loading_inactive": "hsl(0, 95%, 84%)", - "frame": "hsl(354, 78%, 18%)", - "popup": "hsl(355, 61%, 11%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(354, 83%, 75%)", - "popup_highlight": "hsla(354, 71%, 43%, 0.4)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(354, 56%, 28%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(354, 78%, 18%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(355, 61%, 11%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(354, 78%, 18%)", - "ntp_background": "hsl(0, 50%, 1%)", - "ntp_card_background": "hsl(355, 61%, 11%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(355, 61%, 11%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(354, 71%, 43%, 0.4)", - "address_bar_box": "hsl(355, 61%, 11%)", - "address_bar_box_hover": "hsla(355, 61%, 11%, 0.8)", - "address_bar_box_active": "hsla(355, 61%, 11%, 0.65)", - "address_bar_box_focus": "hsl(354, 56%, 28%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(4, 82%, 76%)", - "panel_item_hover": "hsla(354, 71%, 43%, 0.4)", - "panel_item_active": "hsla(354, 71%, 43%, 0.55)", - "panel_separator": "hsl(354, 83%, 75%)", - "icons_attention": "hsl(0, 95%, 84%)", - "toolbar_field_icons_attention": "hsl(0, 95%, 84%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/preview.svg deleted file mode 100644 index bc3f80cbd24..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/icon.svg deleted file mode 100644 index 53cef4c9b94..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/manifest.json deleted file mode 100644 index 5497dd7e9af..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "playmaker-soft-colorway@mozilla.org" - } - }, - "name": "Playmaker – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(7, 92%, 15%)", - "tab_text": "hsl(7, 92%, 15%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(10, 89%, 22%)", - "tab_loading_inactive": "hsl(10, 89%, 22%)", - "frame": "hsl(354, 91%, 87%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(7, 92%, 15%)", - "popup_border": "hsl(355, 96%, 29%)", - "popup_highlight": "hsla(354, 93%, 84%, 0.3)", - "popup_highlight_text": "hsl(7, 92%, 15%)", - "toolbar": "hsl(355, 100%, 93%)", - "toolbar_text": "hsl(7, 92%, 15%)", - "toolbar_field": "hsl(354, 91%, 87%)", - "toolbar_field_text": "hsl(7, 92%, 15%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(354, 91%, 87%)", - "ntp_background": "hsl(0, 100%, 99%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(7, 92%, 15%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(7, 92%, 15%)", - "sidebar_highlight": "hsla(354, 93%, 84%, 0.3)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(355, 100%, 93%)", - "address_bar_box_text": "hsl(7, 92%, 15%)", - "address_bar_url_color": "hsl(355, 90%, 30%)", - "panel_item_hover": "hsla(354, 93%, 84%, 0.3)", - "panel_item_active": "hsla(354, 93%, 84%, 0.45)", - "panel_separator": "hsl(355, 96%, 29%)", - "icons_attention": "hsl(10, 89%, 22%)", - "toolbar_field_icons_attention": "hsl(10, 89%, 22%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/preview.svg deleted file mode 100644 index 08d69608505..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/playmaker/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/icon.svg deleted file mode 100644 index 4404484e371..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/manifest.json deleted file mode 100644 index 7710cde8864..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "visionary-balanced-colorway@mozilla.org" - } - }, - "name": "Visionary – Balanced", - "author": "Mozilla", - "version": "1.1.2", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(150, 57%, 97%)", - "tab_line": "transparent", - "tab_loading": "hsl(0, 0%, 0%)", - "tab_loading_inactive": "hsl(0, 0%, 0%)", - "frame": "hsl(147, 94%, 25%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(147, 72%, 21%)", - "popup_highlight": "hsla(147, 40%, 78%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(146, 38%, 49%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(150, 57%, 97%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 179, 244, 1)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(147, 94%, 25%)", - "ntp_background": "hsl(146, 30%, 86%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(147, 40%, 78%, 0.3)", - "address_bar_box": "hsl(147, 94%, 25%)", - "address_bar_box_hover": "hsla(147, 94%, 25%, 0.8)", - "address_bar_box_active": "hsla(147, 94%, 25%, 0.65)", - "address_bar_box_focus": "hsl(146, 38%, 49%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(147, 89%, 19%)", - "panel_item_hover": "hsla(147, 40%, 78%, 0.3)", - "panel_item_active": "hsla(147, 40%, 78%, 0.45)", - "panel_separator": "hsl(147, 72%, 21%)", - "icons_attention": "hsl(0, 0%, 0%)", - "toolbar_field_icons_attention": "hsl(0, 0%, 0%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/preview.svg deleted file mode 100644 index e08c04ad37f..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/balanced/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/icon.svg deleted file mode 100644 index caadabeede4..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/manifest.json deleted file mode 100644 index 45adf3316ec..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "visionary-bold-colorway@mozilla.org" - } - }, - "name": "Visionary – Bold", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 100%)", - "tab_text": "hsl(0, 0%, 100%)", - "tab_selected": "hsl(148, 74%, 7%)", - "tab_line": "hsl(146, 65%, 21%)", - "tab_loading": "hsl(147, 72%, 49%)", - "tab_loading_inactive": "hsl(147, 72%, 49%)", - "frame": "hsl(146, 89%, 11%)", - "popup": "hsl(148, 74%, 7%)", - "popup_text": "hsl(0, 0%, 100%)", - "popup_border": "hsl(146, 66%, 37%)", - "popup_highlight": "hsla(133, 94%, 27%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 100%)", - "toolbar": "hsl(147, 82%, 17%)", - "toolbar_text": "hsl(0, 0%, 100%)", - "toolbar_field": "hsl(146, 89%, 11%)", - "toolbar_field_text": "hsl(0, 0%, 100%)", - "toolbar_field_focus": "hsl(148, 74%, 7%)", - "toolbar_field_border_focus": "rgba(0, 221, 255, 0.7)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(146, 89%, 11%)", - "ntp_background": "hsl(150, 29%, 3%)", - "ntp_card_background": "hsl(148, 74%, 7%)", - "ntp_text": "hsl(0, 0%, 100%)", - "sidebar": "hsl(148, 74%, 7%)", - "sidebar_text": "hsl(0, 0%, 100%)", - "sidebar_highlight": "hsla(133, 94%, 27%, 0.3)", - "address_bar_box": "hsl(148, 74%, 7%)", - "address_bar_box_hover": "hsla(148, 74%, 7%, 0.8)", - "address_bar_box_active": "hsla(148, 74%, 7%, 0.65)", - "address_bar_box_focus": "hsl(147, 82%, 17%)", - "address_bar_box_text": "hsl(0, 0%, 100%)", - "address_bar_url_color": "hsl(40, 6%, 90%)", - "panel_item_hover": "hsla(133, 94%, 27%, 0.3)", - "panel_item_active": "hsla(133, 94%, 27%, 0.45)", - "panel_separator": "hsl(146, 66%, 37%)", - "icons_attention": "hsl(147, 72%, 49%)", - "toolbar_field_icons_attention": "hsl(147, 72%, 49%)", - "tab_attention_dot": "hsl(94, 100%, 71%)", - "appmenu_update_icon_color": "hsl(94, 100%, 71%)", - "appmenu_info_icon_color": "hsl(173, 100%, 71%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/preview.svg deleted file mode 100644 index 9d03199725d..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/bold/preview.svg +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/icon.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/icon.svg deleted file mode 100644 index 6de52afaf2b..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/manifest.json b/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/manifest.json deleted file mode 100644 index e335d3f4db5..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "visionary-soft-colorway@mozilla.org" - } - }, - "name": "Visionary – Soft", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(48, 10%, 10%)", - "tab_text": "hsl(48, 10%, 10%)", - "tab_selected": "hsl(140, 60%, 98%)", - "tab_line": "transparent", - "tab_loading": "hsl(144, 70%, 21%)", - "tab_loading_inactive": "hsl(144, 70%, 21%)", - "frame": "hsl(147, 53%, 75%)", - "popup": "hsl(140, 60%, 98%)", - "popup_text": "hsl(48, 10%, 10%)", - "popup_border": "hsl(147, 89%, 22%)", - "popup_highlight": "hsla(147, 54%, 52%, 0.3)", - "popup_highlight_text": "hsl(48, 10%, 10%)", - "toolbar": "hsl(146, 49%, 85%)", - "toolbar_text": "hsl(48, 10%, 10%)", - "toolbar_field": "hsl(147, 53%, 75%)", - "toolbar_field_text": "hsl(48, 10%, 10%)", - "toolbar_field_focus": "hsl(140, 60%, 98%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(147, 53%, 75%)", - "ntp_background": "hsl(148, 100%, 97%)", - "ntp_card_background": "hsl(140, 60%, 98%)", - "ntp_text": "hsl(48, 10%, 10%)", - "sidebar": "hsl(140, 60%, 98%)", - "sidebar_text": "hsl(48, 10%, 10%)", - "sidebar_highlight": "hsla(147, 54%, 52%, 0.3)", - "address_bar_box": "hsl(140, 60%, 98%)", - "address_bar_box_hover": "hsla(140, 60%, 98%, 0.8)", - "address_bar_box_active": "hsla(140, 60%, 98%, 0.65)", - "address_bar_box_focus": "hsl(146, 49%, 85%)", - "address_bar_box_text": "hsl(48, 10%, 10%)", - "address_bar_url_color": "hsl(147, 73%, 27%)", - "panel_item_hover": "hsla(147, 54%, 52%, 0.3)", - "panel_item_active": "hsla(147, 54%, 52%, 0.45)", - "panel_separator": "hsl(147, 89%, 22%)", - "icons_attention": "hsl(144, 70%, 21%)", - "toolbar_field_icons_attention": "hsl(144, 70%, 21%)", - "tab_attention_dot": "hsl(146, 15%, 36%)", - "appmenu_update_icon_color": "hsl(146, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/preview.svg b/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/preview.svg deleted file mode 100644 index 864706d5823..00000000000 --- a/browser/themes/addons/colorways/2022-independent-voices/visionary/soft/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/blue/icon.svg b/browser/themes/addons/colorways/2022-true-colors/blue/icon.svg deleted file mode 100644 index f562013826c..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/blue/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/blue/manifest.json b/browser/themes/addons/colorways/2022-true-colors/blue/manifest.json deleted file mode 100644 index c0c38d40a10..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/blue/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022blue-colorway@mozilla.org" - } - }, - "name": "Chillaxing", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(207, 60%, 36%)", - "tab_loading_inactive": "hsl(207, 60%, 36%)", - "frame": "hsl(206, 43%, 65%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(207, 43%, 75%)", - "popup_highlight": "hsla(207, 44%, 70%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(206, 43%, 78%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(206, 43%, 65%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(206, 43%, 65%)", - "ntp_background": "hsl(207, 43%, 85%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(207, 44%, 70%, 0.6)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(206, 43%, 78%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(207, 43%, 41%)", - "panel_item_hover": "hsla(207, 44%, 70%, 0.6)", - "panel_item_active": "hsla(207, 44%, 70%, 0.75)", - "panel_separator": "hsl(207, 43%, 75%)", - "icons_attention": "hsl(207, 60%, 36%)", - "toolbar_field_icons_attention": "hsl(207, 60%, 36%)", - "tab_attention_dot": "hsl(145, 33%, 40%)", - "appmenu_update_icon_color": "hsl(145, 33%, 40%)", - "appmenu_info_icon_color": "hsl(206, 50%, 41%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/blue/preview.svg b/browser/themes/addons/colorways/2022-true-colors/blue/preview.svg deleted file mode 100644 index 96ca0f7ec85..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/blue/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/green/icon.svg b/browser/themes/addons/colorways/2022-true-colors/green/icon.svg deleted file mode 100644 index 2ff592a4500..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/green/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/green/manifest.json b/browser/themes/addons/colorways/2022-true-colors/green/manifest.json deleted file mode 100644 index 540507a9fa2..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/green/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022green-colorway@mozilla.org" - } - }, - "name": "Vegging Out", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(142, 24%, 32%)", - "tab_loading_inactive": "hsl(142, 24%, 32%)", - "frame": "hsl(142, 32%, 57%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(142, 25%, 75%)", - "popup_highlight": "hsla(142, 32%, 78%, 0.8)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(142, 32%, 73%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(142, 32%, 57%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(142, 32%, 57%)", - "ntp_background": "hsl(143, 32%, 89%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(142, 32%, 78%, 0.8)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(142, 32%, 73%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(143, 35%, 30%)", - "panel_item_hover": "hsla(142, 32%, 78%, 0.8)", - "panel_item_active": "hsla(142, 32%, 78%, 0.95)", - "panel_separator": "hsl(142, 25%, 75%)", - "icons_attention": "hsl(142, 24%, 32%)", - "toolbar_field_icons_attention": "hsl(142, 24%, 32%)", - "tab_attention_dot": "hsl(141, 15%, 36%)", - "appmenu_update_icon_color": "hsl(141, 15%, 36%)", - "appmenu_info_icon_color": "hsl(203, 77%, 31%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/green/preview.svg b/browser/themes/addons/colorways/2022-true-colors/green/preview.svg deleted file mode 100644 index db7900891a6..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/green/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/orange/icon.svg b/browser/themes/addons/colorways/2022-true-colors/orange/icon.svg deleted file mode 100644 index 1eb441ce043..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/orange/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/orange/manifest.json b/browser/themes/addons/colorways/2022-true-colors/orange/manifest.json deleted file mode 100644 index 8643398f918..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/orange/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022orange-colorway@mozilla.org" - } - }, - "name": "That’s So Fire", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(16, 70%, 38%)", - "tab_loading_inactive": "hsl(16, 70%, 38%)", - "frame": "hsl(16, 94%, 65%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(16, 72%, 76%)", - "popup_highlight": "hsla(16, 90%, 50%, 0.3)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(17, 92%, 80%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(16, 94%, 65%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(16, 94%, 65%)", - "ntp_background": "hsl(17, 92%, 90%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(16, 90%, 50%, 0.3)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(17, 92%, 80%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(16, 90%, 43%)", - "panel_item_hover": "hsla(16, 90%, 50%, 0.3)", - "panel_item_active": "hsla(16, 90%, 50%, 0.45)", - "panel_separator": "hsl(16, 72%, 76%)", - "icons_attention": "hsl(16, 70%, 38%)", - "toolbar_field_icons_attention": "hsl(16, 70%, 38%)", - "tab_attention_dot": "hsl(145, 15%, 43%)", - "appmenu_update_icon_color": "hsl(145, 15%, 43%)", - "appmenu_info_icon_color": "hsl(203, 77%, 41%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/orange/preview.svg b/browser/themes/addons/colorways/2022-true-colors/orange/preview.svg deleted file mode 100644 index fbb738a93bb..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/orange/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/purple/icon.svg b/browser/themes/addons/colorways/2022-true-colors/purple/icon.svg deleted file mode 100644 index 2e9e6dd54d8..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/purple/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/purple/manifest.json b/browser/themes/addons/colorways/2022-true-colors/purple/manifest.json deleted file mode 100644 index 2edb9ceaa80..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/purple/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022purple-colorway@mozilla.org" - } - }, - "name": "Bomb-dot-com", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(285, 35%, 42%)", - "tab_loading_inactive": "hsl(285, 35%, 42%)", - "frame": "hsl(284, 35%, 70%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(284, 80%, 77%)", - "popup_highlight": "hsla(284, 61%, 75%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(285, 36%, 81%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(284, 35%, 70%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(284, 35%, 70%)", - "ntp_background": "hsl(284, 35%, 88%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(284, 61%, 75%, 0.6)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(285, 36%, 81%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(285, 32%, 40%)", - "panel_item_hover": "hsla(284, 61%, 75%, 0.6)", - "panel_item_active": "hsla(284, 61%, 75%, 0.75)", - "panel_separator": "hsl(284, 80%, 77%)", - "icons_attention": "hsl(285, 35%, 42%)", - "toolbar_field_icons_attention": "hsl(285, 35%, 42%)", - "tab_attention_dot": "hsl(145, 35%, 46%)", - "appmenu_update_icon_color": "hsl(145, 35%, 46%)", - "appmenu_info_icon_color": "hsl(203, 80%, 50%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/purple/preview.svg b/browser/themes/addons/colorways/2022-true-colors/purple/preview.svg deleted file mode 100644 index 76f57a9fb63..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/purple/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/red/icon.svg b/browser/themes/addons/colorways/2022-true-colors/red/icon.svg deleted file mode 100644 index 899cffc519d..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/red/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/red/manifest.json b/browser/themes/addons/colorways/2022-true-colors/red/manifest.json deleted file mode 100644 index b4cfb2a82a4..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/red/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022red-colorway@mozilla.org" - } - }, - "name": "Rawrrr!", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(356, 72%, 27%)", - "tab_loading_inactive": "hsl(356, 72%, 27%)", - "frame": "hsl(356, 95%, 67%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(356, 61%, 78%)", - "popup_highlight": "hsla(356, 75%, 76%, 0.6)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(356, 91%, 75%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(356, 95%, 67%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(356, 95%, 67%)", - "ntp_background": "hsl(356, 84%, 88%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(356, 75%, 76%, 0.6)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(356, 91%, 75%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(356, 72%, 42%)", - "panel_item_hover": "hsla(356, 75%, 76%, 0.6)", - "panel_item_active": "hsla(356, 75%, 76%, 0.75)", - "panel_separator": "hsl(356, 61%, 78%)", - "icons_attention": "hsl(356, 72%, 27%)", - "toolbar_field_icons_attention": "hsl(356, 72%, 27%)", - "tab_attention_dot": "hsl(145, 15%, 34%)", - "appmenu_update_icon_color": "hsl(145, 15%, 34%)", - "appmenu_info_icon_color": "hsl(204, 75%, 28%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/red/preview.svg b/browser/themes/addons/colorways/2022-true-colors/red/preview.svg deleted file mode 100644 index 7ce088c235c..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/red/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/yellow/icon.svg b/browser/themes/addons/colorways/2022-true-colors/yellow/icon.svg deleted file mode 100644 index 055ac2904bf..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/yellow/icon.svg +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - diff --git a/browser/themes/addons/colorways/2022-true-colors/yellow/manifest.json b/browser/themes/addons/colorways/2022-true-colors/yellow/manifest.json deleted file mode 100644 index fad940bbb46..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/yellow/manifest.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "manifest_version": 2, - "applications": { - "gecko": { - "id": "2022yellow-colorway@mozilla.org" - } - }, - "name": "Cheese Puff", - "author": "Mozilla", - "version": "1.1", - "icons": { - "32": "icon.svg" - }, - "theme": { - "colors": { - "tab_background_text": "hsl(0, 0%, 0%)", - "tab_text": "hsl(0, 0%, 0%)", - "tab_selected": "hsl(0, 0%, 100%)", - "tab_line": "transparent", - "tab_loading": "hsl(29, 84%, 46%)", - "tab_loading_inactive": "hsl(29, 84%, 46%)", - "frame": "hsl(39, 98%, 63%)", - "popup": "hsl(0, 0%, 100%)", - "popup_text": "hsl(0, 0%, 0%)", - "popup_border": "hsl(39, 100%, 68%)", - "popup_highlight": "hsla(39, 100%, 72%, 0.9)", - "popup_highlight_text": "hsl(0, 0%, 0%)", - "toolbar": "hsl(39, 98%, 84%)", - "toolbar_text": "hsl(0, 0%, 0%)", - "toolbar_field": "hsl(39, 98%, 63%)", - "toolbar_field_text": "hsl(0, 0%, 0%)", - "toolbar_field_focus": "hsl(0, 0%, 100%)", - "toolbar_field_border_focus": "rgba(0, 96, 223, 0.5)", - "toolbar_top_separator": "transparent", - "toolbar_bottom_separator": "hsl(39, 98%, 63%)", - "ntp_background": "hsl(39, 97%, 87%)", - "ntp_card_background": "hsl(0, 0%, 100%)", - "ntp_text": "hsl(0, 0%, 0%)", - "sidebar": "hsl(0, 0%, 100%)", - "sidebar_text": "hsl(0, 0%, 0%)", - "sidebar_highlight": "hsla(39, 100%, 72%, 0.9)", - "address_bar_box": "hsl(0, 0%, 100%)", - "address_bar_box_hover": "hsla(0, 0%, 100%, 0.8)", - "address_bar_box_active": "hsla(0, 0%, 100%, 0.65)", - "address_bar_box_focus": "hsl(39, 98%, 84%)", - "address_bar_box_text": "hsl(0, 0%, 0%)", - "address_bar_url_color": "hsl(39, 100%, 30%)", - "panel_item_hover": "hsla(39, 100%, 72%, 0.9)", - "panel_item_active": "hsl(39, 100%, 72%)", - "panel_separator": "hsl(39, 100%, 68%)", - "icons_attention": "hsl(29, 84%, 46%)", - "toolbar_field_icons_attention": "hsl(29, 84%, 46%)", - "tab_attention_dot": "hsl(138, 15%, 44%)", - "appmenu_update_icon_color": "hsl(138, 15%, 44%)", - "appmenu_info_icon_color": "hsl(203, 77%, 41%)" - } - }, - "theme_experiment": { - "colors": { - "address_bar_box": "--urlbar-box-bgcolor", - "address_bar_box_hover": "--urlbar-box-hover-bgcolor", - "address_bar_box_active": "--urlbar-box-active-bgcolor", - "address_bar_box_focus": "--urlbar-box-focus-bgcolor", - "address_bar_box_text": "--urlbar-box-text-color", - "address_bar_url_color": "--urlbar-popup-url-color", - "panel_item_hover": "--panel-item-hover-bgcolor", - "panel_item_active": "--panel-item-active-bgcolor", - "panel_separator": "--panel-separator-color", - "toolbar_field_icons_attention": "--lwt-toolbar-field-icon-fill-attention", - "tab_attention_dot": "--lwt-tab-attention-icon-color", - "appmenu_update_icon_color": "--panel-banner-item-update-supported-bgcolor", - "appmenu_info_icon_color": "--panel-banner-item-info-icon-bgcolor", - "tab_loading_inactive": "--lwt-tab-loading-fill-inactive" - } - } -} diff --git a/browser/themes/addons/colorways/2022-true-colors/yellow/preview.svg b/browser/themes/addons/colorways/2022-true-colors/yellow/preview.svg deleted file mode 100644 index dfe21a48810..00000000000 --- a/browser/themes/addons/colorways/2022-true-colors/yellow/preview.svg +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/browser/themes/addons/jar.mn b/browser/themes/addons/jar.mn index 69bb3000d6d..5aa122b2ab3 100644 --- a/browser/themes/addons/jar.mn +++ b/browser/themes/addons/jar.mn @@ -15,88 +15,3 @@ browser.jar: content/builtin-themes/light (light/*.svg) content/builtin-themes/light (light/*.css) content/builtin-themes/light/manifest.json (light/manifest.json) - - content/builtin-themes/colorways/2021lush/soft (colorways/2021-life-in-color/lush/soft/*.svg) - content/builtin-themes/colorways/2021lush/soft/manifest.json (colorways/2021-life-in-color/lush/soft/manifest.json) - content/builtin-themes/colorways/2021lush/balanced (colorways/2021-life-in-color/lush/balanced/*.svg) - content/builtin-themes/colorways/2021lush/balanced/manifest.json (colorways/2021-life-in-color/lush/balanced/manifest.json) - content/builtin-themes/colorways/2021lush/bold (colorways/2021-life-in-color/lush/bold/*.svg) - content/builtin-themes/colorways/2021lush/bold/manifest.json (colorways/2021-life-in-color/lush/bold/manifest.json) - content/builtin-themes/colorways/2021abstract/soft (colorways/2021-life-in-color/abstract/soft/*.svg) - content/builtin-themes/colorways/2021abstract/soft/manifest.json (colorways/2021-life-in-color/abstract/soft/manifest.json) - content/builtin-themes/colorways/2021abstract/balanced (colorways/2021-life-in-color/abstract/balanced/*.svg) - content/builtin-themes/colorways/2021abstract/balanced/manifest.json (colorways/2021-life-in-color/abstract/balanced/manifest.json) - content/builtin-themes/colorways/2021abstract/bold (colorways/2021-life-in-color/abstract/bold/*.svg) - content/builtin-themes/colorways/2021abstract/bold/manifest.json (colorways/2021-life-in-color/abstract/bold/manifest.json) - content/builtin-themes/colorways/2021elemental/soft (colorways/2021-life-in-color/elemental/soft/*.svg) - content/builtin-themes/colorways/2021elemental/soft/manifest.json (colorways/2021-life-in-color/elemental/soft/manifest.json) - content/builtin-themes/colorways/2021elemental/balanced (colorways/2021-life-in-color/elemental/balanced/*.svg) - content/builtin-themes/colorways/2021elemental/balanced/manifest.json (colorways/2021-life-in-color/elemental/balanced/manifest.json) - content/builtin-themes/colorways/2021elemental/bold (colorways/2021-life-in-color/elemental/bold/*.svg) - content/builtin-themes/colorways/2021elemental/bold/manifest.json (colorways/2021-life-in-color/elemental/bold/manifest.json) - content/builtin-themes/colorways/2021cheers/soft (colorways/2021-life-in-color/cheers/soft/*.svg) - content/builtin-themes/colorways/2021cheers/soft/manifest.json (colorways/2021-life-in-color/cheers/soft/manifest.json) - content/builtin-themes/colorways/2021cheers/balanced (colorways/2021-life-in-color/cheers/balanced/*.svg) - content/builtin-themes/colorways/2021cheers/balanced/manifest.json (colorways/2021-life-in-color/cheers/balanced/manifest.json) - content/builtin-themes/colorways/2021cheers/bold (colorways/2021-life-in-color/cheers/bold/*.svg) - content/builtin-themes/colorways/2021cheers/bold/manifest.json (colorways/2021-life-in-color/cheers/bold/manifest.json) - content/builtin-themes/colorways/2021graffiti/soft (colorways/2021-life-in-color/graffiti/soft/*.svg) - content/builtin-themes/colorways/2021graffiti/soft/manifest.json (colorways/2021-life-in-color/graffiti/soft/manifest.json) - content/builtin-themes/colorways/2021graffiti/balanced (colorways/2021-life-in-color/graffiti/balanced/*.svg) - content/builtin-themes/colorways/2021graffiti/balanced/manifest.json (colorways/2021-life-in-color/graffiti/balanced/manifest.json) - content/builtin-themes/colorways/2021graffiti/bold (colorways/2021-life-in-color/graffiti/bold/*.svg) - content/builtin-themes/colorways/2021graffiti/bold/manifest.json (colorways/2021-life-in-color/graffiti/bold/manifest.json) - content/builtin-themes/colorways/2021foto/soft (colorways/2021-life-in-color/foto/soft/*.svg) - content/builtin-themes/colorways/2021foto/soft/manifest.json (colorways/2021-life-in-color/foto/soft/manifest.json) - content/builtin-themes/colorways/2021foto/balanced (colorways/2021-life-in-color/foto/balanced/*.svg) - content/builtin-themes/colorways/2021foto/balanced/manifest.json (colorways/2021-life-in-color/foto/balanced/manifest.json) - content/builtin-themes/colorways/2021foto/bold (colorways/2021-life-in-color/foto/bold/*.svg) - content/builtin-themes/colorways/2021foto/bold/manifest.json (colorways/2021-life-in-color/foto/bold/manifest.json) - content/builtin-themes/colorways/2022blue (colorways/2022-true-colors/blue/*.svg) - content/builtin-themes/colorways/2022blue/manifest.json (colorways/2022-true-colors/blue/manifest.json) - content/builtin-themes/colorways/2022green (colorways/2022-true-colors/green/*.svg) - content/builtin-themes/colorways/2022green/manifest.json (colorways/2022-true-colors/green/manifest.json) - content/builtin-themes/colorways/2022orange (colorways/2022-true-colors/orange/*.svg) - content/builtin-themes/colorways/2022orange/manifest.json (colorways/2022-true-colors/orange/manifest.json) - content/builtin-themes/colorways/2022purple (colorways/2022-true-colors/purple/*.svg) - content/builtin-themes/colorways/2022purple/manifest.json (colorways/2022-true-colors/purple/manifest.json) - content/builtin-themes/colorways/2022red (colorways/2022-true-colors/red/*.svg) - content/builtin-themes/colorways/2022red/manifest.json (colorways/2022-true-colors/red/manifest.json) - content/builtin-themes/colorways/2022yellow (colorways/2022-true-colors/yellow/*.svg) - content/builtin-themes/colorways/2022yellow/manifest.json (colorways/2022-true-colors/yellow/manifest.json) - content/builtin-themes/colorways/2022playmaker/soft (colorways/2022-independent-voices/playmaker/soft/*.svg) - content/builtin-themes/colorways/2022playmaker/soft/manifest.json (colorways/2022-independent-voices/playmaker/soft/manifest.json) - content/builtin-themes/colorways/2022playmaker/balanced (colorways/2022-independent-voices/playmaker/balanced/*.svg) - content/builtin-themes/colorways/2022playmaker/balanced/manifest.json (colorways/2022-independent-voices/playmaker/balanced/manifest.json) - content/builtin-themes/colorways/2022playmaker/bold (colorways/2022-independent-voices/playmaker/bold/*.svg) - content/builtin-themes/colorways/2022playmaker/bold/manifest.json (colorways/2022-independent-voices/playmaker/bold/manifest.json) - content/builtin-themes/colorways/2022expressionist/soft (colorways/2022-independent-voices/expressionist/soft/*.svg) - content/builtin-themes/colorways/2022expressionist/soft/manifest.json (colorways/2022-independent-voices/expressionist/soft/manifest.json) - content/builtin-themes/colorways/2022expressionist/balanced (colorways/2022-independent-voices/expressionist/balanced/*.svg) - content/builtin-themes/colorways/2022expressionist/balanced/manifest.json (colorways/2022-independent-voices/expressionist/balanced/manifest.json) - content/builtin-themes/colorways/2022expressionist/bold (colorways/2022-independent-voices/expressionist/bold/*.svg) - content/builtin-themes/colorways/2022expressionist/bold/manifest.json (colorways/2022-independent-voices/expressionist/bold/manifest.json) - content/builtin-themes/colorways/2022visionary/soft (colorways/2022-independent-voices/visionary/soft/*.svg) - content/builtin-themes/colorways/2022visionary/soft/manifest.json (colorways/2022-independent-voices/visionary/soft/manifest.json) - content/builtin-themes/colorways/2022visionary/balanced (colorways/2022-independent-voices/visionary/balanced/*.svg) - content/builtin-themes/colorways/2022visionary/balanced/manifest.json (colorways/2022-independent-voices/visionary/balanced/manifest.json) - content/builtin-themes/colorways/2022visionary/bold (colorways/2022-independent-voices/visionary/bold/*.svg) - content/builtin-themes/colorways/2022visionary/bold/manifest.json (colorways/2022-independent-voices/visionary/bold/manifest.json) - content/builtin-themes/colorways/2022activist/soft (colorways/2022-independent-voices/activist/soft/*.svg) - content/builtin-themes/colorways/2022activist/soft/manifest.json (colorways/2022-independent-voices/activist/soft/manifest.json) - content/builtin-themes/colorways/2022activist/balanced (colorways/2022-independent-voices/activist/balanced/*.svg) - content/builtin-themes/colorways/2022activist/balanced/manifest.json (colorways/2022-independent-voices/activist/balanced/manifest.json) - content/builtin-themes/colorways/2022activist/bold (colorways/2022-independent-voices/activist/bold/*.svg) - content/builtin-themes/colorways/2022activist/bold/manifest.json (colorways/2022-independent-voices/activist/bold/manifest.json) - content/builtin-themes/colorways/2022dreamer/soft (colorways/2022-independent-voices/dreamer/soft/*.svg) - content/builtin-themes/colorways/2022dreamer/soft/manifest.json (colorways/2022-independent-voices/dreamer/soft/manifest.json) - content/builtin-themes/colorways/2022dreamer/balanced (colorways/2022-independent-voices/dreamer/balanced/*.svg) - content/builtin-themes/colorways/2022dreamer/balanced/manifest.json (colorways/2022-independent-voices/dreamer/balanced/manifest.json) - content/builtin-themes/colorways/2022dreamer/bold (colorways/2022-independent-voices/dreamer/bold/*.svg) - content/builtin-themes/colorways/2022dreamer/bold/manifest.json (colorways/2022-independent-voices/dreamer/bold/manifest.json) - content/builtin-themes/colorways/2022innovator/soft (colorways/2022-independent-voices/innovator/soft/*.svg) - content/builtin-themes/colorways/2022innovator/soft/manifest.json (colorways/2022-independent-voices/innovator/soft/manifest.json) - content/builtin-themes/colorways/2022innovator/balanced (colorways/2022-independent-voices/innovator/balanced/*.svg) - content/builtin-themes/colorways/2022innovator/balanced/manifest.json (colorways/2022-independent-voices/innovator/balanced/manifest.json) - content/builtin-themes/colorways/2022innovator/bold (colorways/2022-independent-voices/innovator/bold/*.svg) - content/builtin-themes/colorways/2022innovator/bold/manifest.json (colorways/2022-independent-voices/innovator/bold/manifest.json) diff --git a/browser/themes/shared/customizableui/panelUI-shared.css b/browser/themes/shared/customizableui/panelUI-shared.css index ba6ed6bae35..d6f1d41f4c8 100644 --- a/browser/themes/shared/customizableui/panelUI-shared.css +++ b/browser/themes/shared/customizableui/panelUI-shared.css @@ -82,6 +82,7 @@ menupopup { &[badge-status="update-available"], &[badge-status="update-downloading"], &[badge-status="update-manual"], + &[badge-status="update-other-instance"], &[badge-status="update-restart"], &[badge-status="update-unsupported"] { > .toolbarbutton-badge-stack > .toolbarbutton-badge { @@ -100,6 +101,7 @@ menupopup { &[badge-status="update-available"], &[badge-status="update-downloading"], &[badge-status="update-manual"], + &[badge-status="update-other-instance"], &[badge-status="update-restart"] { > .toolbarbutton-badge-stack > .toolbarbutton-badge { fill: var(--panel-banner-item-update-supported-bgcolor); @@ -116,6 +118,7 @@ menupopup { &[notificationid="update-available"], &[notificationid="update-downloading"], &[notificationid="update-manual"], + &[notificationid="update-other-instance"], &[notificationid="update-restart"] { > .toolbarbutton-icon { background-image: url(chrome://browser/skin/update-badge.svg); diff --git a/browser/themes/shared/notification-icons.css b/browser/themes/shared/notification-icons.css index b106784b875..f17b7d64f88 100644 --- a/browser/themes/shared/notification-icons.css +++ b/browser/themes/shared/notification-icons.css @@ -276,6 +276,7 @@ .popup-notification-icon[popupid="update-available"], .popup-notification-icon[popupid="update-manual"], +.popup-notification-icon[popupid="update-other-instance"], .popup-notification-icon[popupid="update-restart"] { background: url(chrome://browser/skin/update-badge.svg) no-repeat center; -moz-context-properties: fill; diff --git a/browser/themes/shared/toolbarbutton-icons.css b/browser/themes/shared/toolbarbutton-icons.css index 6ce91c3d5b6..0075d597b6f 100644 --- a/browser/themes/shared/toolbarbutton-icons.css +++ b/browser/themes/shared/toolbarbutton-icons.css @@ -140,6 +140,7 @@ #PanelUI-menu-button[badge-status="update-available"], #PanelUI-menu-button[badge-status="update-downloading"], #PanelUI-menu-button[badge-status="update-manual"], +#PanelUI-menu-button[badge-status="update-other-instance"], #PanelUI-menu-button[badge-status="update-restart"], #PanelUI-menu-button[badge-status="update-unsupported"], #PanelUI-menu-button[badge-status="addon-alert"], diff --git a/browser/themes/shared/urlbar-searchbar.css b/browser/themes/shared/urlbar-searchbar.css index 25471fcc8ff..23661cf489d 100644 --- a/browser/themes/shared/urlbar-searchbar.css +++ b/browser/themes/shared/urlbar-searchbar.css @@ -301,12 +301,8 @@ display: none; } -#urlbar[breakout][breakout-extend], -#urlbar[breakout][breakout-extend-disabled][open] { - height: auto; -} - #urlbar[breakout][breakout-extend] { + height: auto; margin-left: calc(-1 * var(--urlbar-margin-inline)); width: calc(var(--urlbar-width) + 2 * var(--urlbar-margin-inline)); @@ -1029,7 +1025,7 @@ /* Search bar */ #search-container, -#wrapper-search-container { +#wrapper-search-container:not([place="panel"]) { flex: 175 175 auto; } diff --git a/browser/themes/test/browser/browser.toml b/browser/themes/test/browser/browser.toml index 38266b35c89..e20d59e63fb 100644 --- a/browser/themes/test/browser/browser.toml +++ b/browser/themes/test/browser/browser.toml @@ -1,5 +1,3 @@ [DEFAULT] ["browser_BuiltInThemes_installs.js"] - -["browser_expireThemes.js"] diff --git a/browser/themes/test/browser/browser_BuiltInThemes_installs.js b/browser/themes/test/browser/browser_BuiltInThemes_installs.js index cd7662aff61..78585151f2b 100644 --- a/browser/themes/test/browser/browser_BuiltInThemes_installs.js +++ b/browser/themes/test/browser/browser_BuiltInThemes_installs.js @@ -29,10 +29,6 @@ add_setup(() => { info(`Got AddonManager.maybeInstallBuiltinAddon call: ${args}`); maybeInstallBuiltinAddonCallArgs.push(args); }); - - // Stub BuiltInThemes method called from ensureBuiltInThemes to - // make it a no-op. - sandbox.stub(Object.getPrototypeOf(BuiltInThemes), "_uninstallExpiredThemes"); }); add_task(async function test_maybeInstallActiveBuiltInTheme() { diff --git a/browser/themes/test/browser/browser_expireThemes.js b/browser/themes/test/browser/browser_expireThemes.js deleted file mode 100644 index c2dede20e30..00000000000 --- a/browser/themes/test/browser/browser_expireThemes.js +++ /dev/null @@ -1,106 +0,0 @@ -/* Any copyright is dedicated to the Public Domain. - http://creativecommons.org/publicdomain/zero/1.0/ */ - -const { sinon } = ChromeUtils.importESModule( - "resource://testing-common/Sinon.sys.mjs" -); - -const { AddonTestUtils } = ChromeUtils.importESModule( - "resource://testing-common/AddonTestUtils.sys.mjs" -); - -ChromeUtils.defineESModuleGetters(this, { - AddonManager: "resource://gre/modules/AddonManager.sys.mjs", - BuiltInThemes: "resource:///modules/BuiltInThemes.sys.mjs", -}); - -const kLushSoftID = "lush-soft-colorway@mozilla.org"; -const kLushBoldID = "lush-bold-colorway@mozilla.org"; -const kRetainedThemesPref = "browser.theme.retainedExpiredThemes"; - -add_task(async function retainExpiredActiveTheme() { - let today = new Date().toISOString().split("T")[0]; - let tomorrow = new Date(); - tomorrow.setDate(tomorrow.getDate() + 1); - tomorrow = tomorrow.toISOString().split("T")[0]; - let config = new Map([ - [ - kLushSoftID, - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021lush/soft/", - expiry: tomorrow, - }, - ], - [ - kLushBoldID, - { - version: "1.1", - path: "resource://builtin-themes/colorways/2021lush/bold/", - expiry: tomorrow, - }, - ], - ]); - const oldBuiltInThemeMap = BuiltInThemes.builtInThemeMap; - BuiltInThemes.builtInThemeMap = config; - Assert.equal( - Services.prefs.getStringPref(kRetainedThemesPref, "[]"), - "[]", - "There are no retained themes." - ); - - AddonTestUtils.initMochitest(this); - registerCleanupFunction(async function () { - Services.prefs.clearUserPref(kRetainedThemesPref); - BuiltInThemes.builtInThemeMap = oldBuiltInThemeMap; - await BuiltInThemes.ensureBuiltInThemes(); - }); - - // Install our test themes and enable Lush (Soft). - await BuiltInThemes.ensureBuiltInThemes(); - let lushSoft = await AddonManager.getAddonByID(kLushSoftID); - let lushBold = await AddonManager.getAddonByID(kLushBoldID); - await lushSoft.enable(); - Assert.ok( - lushSoft && lushSoft.isActive, - "Sanity check: Lush Soft is the active theme." - ); - Assert.ok( - lushBold && !lushBold.isActive, - "Lush Bold is installed but inactive." - ); - - // Now, change the expiry dates on the themes to simulate the expiry date - // passing. - BuiltInThemes.builtInThemeMap.forEach( - themeInfo => (themeInfo.expiry = today) - ); - // Normally, ensureBuiltInThemes uninstalls expired themes. We - // expect it will not uninstall Lush (Soft) since it is the active theme. - await BuiltInThemes.ensureBuiltInThemes(); - lushSoft = await AddonManager.getAddonByID(kLushSoftID); - lushBold = await AddonManager.getAddonByID(kLushBoldID); - Assert.ok( - lushSoft && lushSoft.isActive, - "Lush Soft is still the active theme." - ); - Assert.ok(!lushBold, "Lush Bold has been uninstalled."); - Assert.equal( - Services.prefs.getStringPref(kRetainedThemesPref, "[]"), - JSON.stringify([kLushSoftID]), - "Lush Soft is set as a retained theme." - ); - - // Disable Lush (Soft) and re-run ensureBuiltInThemes. We're checking that - // Lush Soft is not uninstalled despite being inactive and expired, since it - // is a retained theme. - await lushSoft.disable(); - await BuiltInThemes.ensureBuiltInThemes(); - lushSoft = await AddonManager.getAddonByID(kLushSoftID); - Assert.ok( - lushSoft && !lushSoft.isActive, - "Lush Soft is installed but inactive." - ); - - await lushSoft.uninstall(); -}); diff --git a/build/autoconf/acgeneral.m4 b/build/autoconf/acgeneral.m4 deleted file mode 100644 index 772622849ba..00000000000 --- a/build/autoconf/acgeneral.m4 +++ /dev/null @@ -1,2607 +0,0 @@ -dnl Parameterized macros. -dnl Requires GNU m4. -dnl This file is part of Autoconf. -dnl Copyright (C) 1992, 93, 94, 95, 96, 1998 Free Software Foundation, Inc. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl As a special exception, the Free Software Foundation gives unlimited -dnl permission to copy, distribute and modify the configure scripts that -dnl are the output of Autoconf. You need not follow the terms of the GNU -dnl General Public License when using or distributing such scripts, even -dnl though portions of the text of Autoconf appear in them. The GNU -dnl General Public License (GPL) does govern all other use of the material -dnl that constitutes the Autoconf program. -dnl -dnl Certain portions of the Autoconf source text are designed to be copied -dnl (in certain cases, depending on the input) into the output of -dnl Autoconf. We call these the "data" portions. The rest of the Autoconf -dnl source text consists of comments plus executable code that decides which -dnl of the data portions to output in any given case. We call these -dnl comments and executable code the "non-data" portions. Autoconf never -dnl copies any of the non-data portions into its output. -dnl -dnl This special exception to the GPL applies to versions of Autoconf -dnl released by the Free Software Foundation. When you make and -dnl distribute a modified version of Autoconf, you may extend this special -dnl exception to the GPL to apply to your modified version as well, *unless* -dnl your modified version has the potential to copy into its output some -dnl of the text that was the non-data portion of the version that you started -dnl with. (In other words, unless your change moves or copies text from -dnl the non-data portions to the data portions.) If your modification has -dnl such potential, you must delete any notice of this special exception -dnl to the GPL from your modified version. -dnl -dnl Written by David MacKenzie, with help from -dnl Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, -dnl Roland McGrath, Noah Friedman, david d zuhn, and many others. -dnl -divert(-1)dnl Throw away output until AC_INIT is called. -changequote([, ]) - -define(AC_ACVERSION, 2.13) - -dnl Some old m4's don't support m4exit. But they provide -dnl equivalent functionality by core dumping because of the -dnl long macros we define. -ifdef([__gnu__], , [errprint(Autoconf requires GNU m4. -Install it before installing Autoconf or set the -M4 environment variable to its path name. -)m4exit(2)]) - -undefine([eval]) -undefine([include]) -undefine([shift]) -undefine([format]) - - -dnl ### Defining macros - - -dnl m4 output diversions. We let m4 output them all in order at the end, -dnl except that we explicitly undivert AC_DIVERSION_SED, AC_DIVERSION_CMDS, -dnl and AC_DIVERSION_ICMDS. - -dnl AC_DIVERSION_NOTICE - 1 (= 0) AC_REQUIRE'd #! /bin/sh line -define(AC_DIVERSION_NOTICE, 1)dnl copyright notice & option help strings -define(AC_DIVERSION_INIT, 2)dnl initialization code -define(AC_DIVERSION_NORMAL_4, 3)dnl AC_REQUIRE'd code, 4 level deep -define(AC_DIVERSION_NORMAL_3, 4)dnl AC_REQUIRE'd code, 3 level deep -define(AC_DIVERSION_NORMAL_2, 5)dnl AC_REQUIRE'd code, 2 level deep -define(AC_DIVERSION_NORMAL_1, 6)dnl AC_REQUIRE'd code, 1 level deep -define(AC_DIVERSION_NORMAL, 7)dnl the tests and output code -define(AC_DIVERSION_SED, 8)dnl variable substitutions in config.status -define(AC_DIVERSION_CMDS, 9)dnl extra shell commands in config.status -define(AC_DIVERSION_ICMDS, 10)dnl extra initialization in config.status - -dnl Change the diversion stream to STREAM, while stacking old values. -dnl AC_DIVERT_PUSH(STREAM) -define(AC_DIVERT_PUSH, -[pushdef([AC_DIVERSION_CURRENT], $1)dnl -divert(AC_DIVERSION_CURRENT)dnl -]) - -dnl Change the diversion stream to its previous value, unstacking it. -dnl AC_DIVERT_POP() -define(AC_DIVERT_POP, -[popdef([AC_DIVERSION_CURRENT])dnl -divert(AC_DIVERSION_CURRENT)dnl -]) - -dnl Initialize the diversion setup. -define([AC_DIVERSION_CURRENT], AC_DIVERSION_NORMAL) -dnl This will be popped by AC_REQUIRE in AC_INIT. -pushdef([AC_DIVERSION_CURRENT], AC_DIVERSION_NOTICE) - -dnl The prologue for Autoconf macros. -dnl AC_PRO(MACRO-NAME) -define(AC_PRO, -[define([AC_PROVIDE_$1], )dnl -ifelse(AC_DIVERSION_CURRENT, AC_DIVERSION_NORMAL, -[AC_DIVERT_PUSH(builtin(eval, AC_DIVERSION_CURRENT - 1))], -[pushdef([AC_DIVERSION_CURRENT], AC_DIVERSION_CURRENT)])dnl -]) - -dnl The Epilogue for Autoconf macros. -dnl AC_EPI() -define(AC_EPI, -[AC_DIVERT_POP()dnl -ifelse(AC_DIVERSION_CURRENT, AC_DIVERSION_NORMAL, -[undivert(AC_DIVERSION_NORMAL_4)dnl -undivert(AC_DIVERSION_NORMAL_3)dnl -undivert(AC_DIVERSION_NORMAL_2)dnl -undivert(AC_DIVERSION_NORMAL_1)dnl -])dnl -]) - -dnl Define a macro which automatically provides itself. Add machinery -dnl so the macro automatically switches expansion to the diversion -dnl stack if it is not already using it. In this case, once finished, -dnl it will bring back all the code accumulated in the diversion stack. -dnl This, combined with AC_REQUIRE, achieves the topological ordering of -dnl macros. We don't use this macro to define some frequently called -dnl macros that are not involved in ordering constraints, to save m4 -dnl processing. -dnl AC_DEFUN(NAME, EXPANSION) -define([AC_DEFUN], -[define($1, [AC_PRO([$1])$2[]AC_EPI()])]) - - -dnl ### Initialization - - -dnl AC_INIT_NOTICE() -AC_DEFUN(AC_INIT_NOTICE, -[# Guess values for system-dependent variables and create Makefiles. -# Generated automatically using autoconf version] AC_ACVERSION [ -# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc. -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. - -# Defaults: -ac_help= -ac_default_prefix=/usr/local -[#] Any additions from configure.in:]) - -dnl AC_PREFIX_DEFAULT(PREFIX) -AC_DEFUN(AC_PREFIX_DEFAULT, -[AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl -ac_default_prefix=$1 -AC_DIVERT_POP()]) - -dnl AC_INIT_PARSE_ARGS() -AC_DEFUN(AC_INIT_PARSE_ARGS, -[ -# Initialize some variables set by options. -# The variables have the same names as the options, with -# dashes changed to underlines. -build=NONE -cache_file=./config.cache -exec_prefix=NONE -host=NONE -no_create= -nonopt=NONE -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -target=NONE -verbose= -x_includes=NONE -x_libraries=NONE -dnl Installation directory options. -dnl These are left unexpanded so users can "make install exec_prefix=/foo" -dnl and all the variables that are supposed to be based on exec_prefix -dnl by default will actually change. -dnl Use braces instead of parens because sh, perl, etc. also accept them. -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datadir='${prefix}/share' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -libdir='${exec_prefix}/lib' -includedir='${prefix}/include' -oldincludedir='/usr/include' -infodir='${prefix}/info' -mandir='${prefix}/man' - -# Initialize some other variables. -subdirs= -MFLAGS= MAKEFLAGS= -SHELL=${CONFIG_SHELL-/bin/sh} -# Maximum number of lines to put in a shell here document. -ac_max_here_lines=12 - -ac_prev= -for ac_option -do - - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval "$ac_prev=\$ac_option" - ac_prev= - continue - fi - - case "$ac_option" in -changequote(, )dnl - -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;; -changequote([, ])dnl - *) ac_optarg= ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case "$ac_option" in - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir="$ac_optarg" ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build="$ac_optarg" ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file="$ac_optarg" ;; - - -datadir | --datadir | --datadi | --datad | --data | --dat | --da) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ - | --da=*) - datadir="$ac_optarg" ;; - - -disable-* | --disable-*) - ac_feature=`echo $ac_option|sed -e 's/-*disable-//'` - # Reject names that are not valid shell variable names. -changequote(, )dnl - if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then -changequote([, ])dnl - AC_MSG_ERROR($ac_feature: invalid feature name) - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - eval "enable_${ac_feature}=no" ;; - - -enable-* | --enable-*) - ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. -changequote(, )dnl - if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then -changequote([, ])dnl - AC_MSG_ERROR($ac_feature: invalid feature name) - fi - ac_feature=`echo $ac_feature| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "enable_${ac_feature}='$ac_optarg'" ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix="$ac_optarg" ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he) - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat << EOF -changequote(, )dnl -Usage: configure [options] [host] -Options: [defaults in brackets after descriptions] -Configuration: - --cache-file=FILE cache test results in FILE - --help print this message - --no-create do not create output files - --quiet, --silent do not print \`checking...' messages - --version print the version of autoconf that created configure -Directory and file names: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [same as prefix] - --bindir=DIR user executables in DIR [EPREFIX/bin] - --sbindir=DIR system admin executables in DIR [EPREFIX/sbin] - --libexecdir=DIR program executables in DIR [EPREFIX/libexec] - --datadir=DIR read-only architecture-independent data in DIR - [PREFIX/share] - --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data in DIR - [PREFIX/com] - --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var] - --libdir=DIR object code libraries in DIR [EPREFIX/lib] - --includedir=DIR C header files in DIR [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include] - --infodir=DIR info documentation in DIR [PREFIX/info] - --mandir=DIR man documentation in DIR [PREFIX/man] - --srcdir=DIR find the sources in DIR [configure dir or ..] - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM - run sed PROGRAM on installed program names -EOF - cat << EOF -Host type: - --build=BUILD configure for building on BUILD [BUILD=HOST] - --host=HOST configure for HOST [guessed] - --target=TARGET configure for TARGET [TARGET=HOST] -Features and packages: - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] - --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) - --x-includes=DIR X include files are in DIR - --x-libraries=DIR X library files are in DIR -changequote([, ])dnl -EOF - if test -n "$ac_help"; then - echo "--enable and --with options recognized:$ac_help" - fi - exit 0 ;; - - -host | --host | --hos | --ho) - ac_prev=host ;; - -host=* | --host=* | --hos=* | --ho=*) - host="$ac_optarg" ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir="$ac_optarg" ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir="$ac_optarg" ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir="$ac_optarg" ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir="$ac_optarg" ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst \ - | --locals | --local | --loca | --loc | --lo) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* \ - | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) - localstatedir="$ac_optarg" ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir="$ac_optarg" ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir="$ac_optarg" ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix="$ac_optarg" ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix="$ac_optarg" ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix="$ac_optarg" ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name="$ac_optarg" ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir="$ac_optarg" ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir="$ac_optarg" ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site="$ac_optarg" ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir="$ac_optarg" ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir="$ac_optarg" ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target="$ac_optarg" ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers) - echo "configure generated by autoconf version AC_ACVERSION" - exit 0 ;; - - -with-* | --with-*) - ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'` - # Reject names that are not valid shell variable names. -changequote(, )dnl - if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then -changequote([, ])dnl - AC_MSG_ERROR($ac_package: invalid package name) - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - case "$ac_option" in - *=*) ;; - *) ac_optarg=yes ;; - esac - eval "with_${ac_package}='$ac_optarg'" ;; - - -without-* | --without-*) - ac_package=`echo $ac_option|sed -e 's/-*without-//'` - # Reject names that are not valid shell variable names. -changequote(, )dnl - if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then -changequote([, ])dnl - AC_MSG_ERROR($ac_package: invalid package name) - fi - ac_package=`echo $ac_package| sed 's/-/_/g'` - eval "with_${ac_package}=no" ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes="$ac_optarg" ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries="$ac_optarg" ;; - - -*) AC_MSG_ERROR([$ac_option: invalid option; use --help to show usage]) - ;; - - *) -changequote(, )dnl - if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then -changequote([, ])dnl - AC_MSG_WARN($ac_option: invalid host type) - fi - if test "x$nonopt" != xNONE; then - AC_MSG_ERROR(can only configure for one host and one target at a time) - fi - nonopt="$ac_option" - ;; - - esac -done - -if test -n "$ac_prev"; then - AC_MSG_ERROR(missing argument to --`echo $ac_prev | sed 's/_/-/g'`) -fi -]) - -dnl Try to have only one #! line, so the script doesn't look funny -dnl for users of AC_REVISION. -dnl AC_INIT_BINSH() -AC_DEFUN(AC_INIT_BINSH, -[#! /bin/sh -]) - -dnl AC_INIT(UNIQUE-FILE-IN-SOURCE-DIR) -AC_DEFUN(AC_INIT, -[sinclude(acsite.m4)dnl -sinclude(./aclocal.m4)dnl -AC_REQUIRE([AC_INIT_BINSH])dnl -AC_INIT_NOTICE -AC_DIVERT_POP()dnl to NORMAL -AC_DIVERT_PUSH(AC_DIVERSION_INIT)dnl -AC_INIT_PARSE_ARGS -AC_INIT_PREPARE($1)dnl -AC_DIVERT_POP()dnl to NORMAL -]) - -dnl AC_INIT_PREPARE(UNIQUE-FILE-IN-SOURCE-DIR) -AC_DEFUN(AC_INIT_PREPARE, -[trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -# File descriptor usage: -# 0 standard input -# 1 file creation -# 2 errors and warnings -# 3 some systems may open it to /dev/tty -# 4 used on the Kubota Titan -define(AC_FD_MSG, 6)dnl -[#] AC_FD_MSG checking for... messages and results -define(AC_FD_CC, 5)dnl -[#] AC_FD_CC compiler messages saved in config.log -if test "$silent" = yes; then - exec AC_FD_MSG>/dev/null -else - exec AC_FD_MSG>&1 -fi -exec AC_FD_CC>./config.log - -echo "\ -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. -" 1>&AC_FD_CC - -# Strip out --no-create and --no-recursion so they do not pile up. -# Also quote any args containing shell metacharacters. -ac_configure_args= -for ac_arg -do - case "$ac_arg" in - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c) ;; - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;; -changequote(<<, >>)dnl -dnl If you change this globbing pattern, test it on an old shell -- -dnl it's sensitive. Putting any kind of quote in it causes syntax errors. - *" "*|*" "*|*[\[\]\~\<<#>>\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*) - ac_configure_args="$ac_configure_args '$ac_arg'" ;; -changequote([, ])dnl - *) ac_configure_args="$ac_configure_args $ac_arg" ;; - esac -done - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -rf conftest* confdefs.h -# AIX cpp loses on an empty file, so make sure it contains at least a newline. -echo > confdefs.h - -# A filename unique to this package, relative to the directory that -# configure is in, which we can look for to find out if srcdir is correct. -ac_unique_file=$1 - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then its parent. - ac_prog=[$]0 -changequote(, )dnl - ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'` -changequote([, ])dnl - test "x$ac_confdir" = "x$ac_prog" && ac_confdir=. - srcdir=$ac_confdir - if test ! -r $srcdir/$ac_unique_file; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r $srcdir/$ac_unique_file; then - if test "$ac_srcdir_defaulted" = yes; then - AC_MSG_ERROR(can not find sources in $ac_confdir or ..) - else - AC_MSG_ERROR(can not find sources in $srcdir) - fi -fi -dnl Double slashes in pathnames in object file debugging info -dnl mess up M-x gdb in Emacs. -changequote(, )dnl -srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` -changequote([, ])dnl - -dnl Let the site file select an alternate cache file if it wants to. -AC_SITE_LOAD -AC_CACHE_LOAD -AC_LANG_C -dnl By default always use an empty string as the executable -dnl extension. Only change it if the script calls AC_EXEEXT. -ac_exeext= -dnl By default assume that objects files use an extension of .o. Only -dnl change it if the script calls AC_OBJEXT. -ac_objext=o -AC_PROG_ECHO_N -dnl Substitute for predefined variables. -AC_SUBST(SHELL)dnl -AC_SUBST(CFLAGS)dnl -AC_SUBST(CPPFLAGS)dnl -AC_SUBST(CXXFLAGS)dnl -AC_SUBST(FFLAGS)dnl -AC_SUBST(DEFS)dnl -AC_SUBST(LDFLAGS)dnl -AC_SUBST(LIBS)dnl -AC_SUBST(exec_prefix)dnl -AC_SUBST(prefix)dnl -AC_SUBST(program_transform_name)dnl -dnl Installation directory options. -AC_SUBST(bindir)dnl -AC_SUBST(sbindir)dnl -AC_SUBST(libexecdir)dnl -AC_SUBST(datadir)dnl -AC_SUBST(sysconfdir)dnl -AC_SUBST(sharedstatedir)dnl -AC_SUBST(localstatedir)dnl -AC_SUBST(libdir)dnl -AC_SUBST(includedir)dnl -AC_SUBST(oldincludedir)dnl -AC_SUBST(infodir)dnl -AC_SUBST(mandir)dnl -]) - - -dnl ### Selecting optional features - - -dnl AC_ARG_ENABLE(FEATURE, HELP-STRING, ACTION-IF-TRUE [, ACTION-IF-FALSE]) -AC_DEFUN(AC_ARG_ENABLE, -[AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl -ac_help="$ac_help -[$2]" -AC_DIVERT_POP()dnl -[#] Check whether --enable-[$1] or --disable-[$1] was given. -if test "[${enable_]patsubst([$1], -, _)+set}" = set; then - enableval="[$enable_]patsubst([$1], -, _)" - ifelse([$3], , :, [$3]) -ifelse([$4], , , [else - $4 -])dnl -fi -]) - -AC_DEFUN(AC_ENABLE, -[AC_OBSOLETE([$0], [; instead use AC_ARG_ENABLE])dnl -AC_ARG_ENABLE([$1], [ --enable-$1], [$2], [$3])dnl -]) - - -dnl ### Working with optional software - - -dnl AC_ARG_WITH(PACKAGE, HELP-STRING, ACTION-IF-TRUE [, ACTION-IF-FALSE]) -AC_DEFUN(AC_ARG_WITH, -[AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)dnl -ac_help="$ac_help -[$2]" -AC_DIVERT_POP()dnl -[#] Check whether --with-[$1] or --without-[$1] was given. -if test "[${with_]patsubst([$1], -, _)+set}" = set; then - withval="[$with_]patsubst([$1], -, _)" - ifelse([$3], , :, [$3]) -ifelse([$4], , , [else - $4 -])dnl -fi -]) - -AC_DEFUN(AC_WITH, -[AC_OBSOLETE([$0], [; instead use AC_ARG_WITH])dnl -AC_ARG_WITH([$1], [ --with-$1], [$2], [$3])dnl -]) - - -dnl ### Transforming program names. - - -dnl AC_ARG_PROGRAM() -AC_DEFUN(AC_ARG_PROGRAM, -[if test "$program_transform_name" = s,x,x,; then - program_transform_name= -else - # Double any \ or $. echo might interpret backslashes. - cat <<\EOF_SED > conftestsed -s,\\,\\\\,g; s,\$,$$,g -EOF_SED - program_transform_name="`echo $program_transform_name|sed -f conftestsed`" - rm -f conftestsed -fi -test "$program_prefix" != NONE && - program_transform_name="s,^,${program_prefix},; $program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s,\$\$,${program_suffix},; $program_transform_name" - -# sed with no file args requires a program. -test "$program_transform_name" = "" && program_transform_name="s,x,x," -]) - - -dnl ### Version numbers - - -dnl AC_REVISION(REVISION-INFO) -AC_DEFUN(AC_REVISION, -[AC_REQUIRE([AC_INIT_BINSH])dnl -[# From configure.in] translit([$1], $")]) - -dnl Subroutines of AC_PREREQ. - -dnl Change the dots in NUMBER into commas. -dnl AC_PREREQ_SPLIT(NUMBER) -define(AC_PREREQ_SPLIT, -[translit($1, ., [, ])]) - -dnl Default the ternary version number to 0 (e.g., 1, 7 -> 1, 7, 0). -dnl AC_PREREQ_CANON(MAJOR, MINOR [,TERNARY]) -define(AC_PREREQ_CANON, -[$1, $2, ifelse([$3], , 0, [$3])]) - -dnl Complain and exit if version number 1 is less than version number 2. -dnl PRINTABLE2 is the printable version of version number 2. -dnl AC_PREREQ_COMPARE(MAJOR1, MINOR1, TERNARY1, MAJOR2, MINOR2, TERNARY2, -dnl PRINTABLE2) -define(AC_PREREQ_COMPARE, -[ifelse(builtin([eval], -[$3 + $2 * 1000 + $1 * 1000000 < $6 + $5 * 1000 + $4 * 1000000]), 1, -[errprint(dnl -FATAL ERROR: Autoconf version $7 or higher is required for this script -)m4exit(3)])]) - -dnl Complain and exit if the Autoconf version is less than VERSION. -dnl AC_PREREQ(VERSION) -define(AC_PREREQ, -[AC_PREREQ_COMPARE(AC_PREREQ_CANON(AC_PREREQ_SPLIT(AC_ACVERSION)), -AC_PREREQ_CANON(AC_PREREQ_SPLIT([$1])), [$1])]) - - -dnl ### Getting the canonical system type - - -dnl Find install-sh, config.sub, config.guess, and Cygnus configure -dnl in directory DIR. These are auxiliary files used in configuration. -dnl DIR can be either absolute or relative to $srcdir. -dnl AC_CONFIG_AUX_DIR(DIR) -AC_DEFUN(AC_CONFIG_AUX_DIR, -[AC_CONFIG_AUX_DIRS($1 $srcdir/$1)]) - -dnl The default is `$srcdir' or `$srcdir/..' or `$srcdir/../..'. -dnl There's no need to call this macro explicitly; just AC_REQUIRE it. -AC_DEFUN(AC_CONFIG_AUX_DIR_DEFAULT, -[AC_CONFIG_AUX_DIRS($srcdir $srcdir/.. $srcdir/../..)]) - -dnl Internal subroutine. -dnl Search for the configuration auxiliary files in directory list $1. -dnl We look only for install-sh, so users of AC_PROG_INSTALL -dnl do not automatically need to distribute the other auxiliary files. -dnl AC_CONFIG_AUX_DIRS(DIR ...) -AC_DEFUN(AC_CONFIG_AUX_DIRS, -[ac_aux_dir= -for ac_dir in $1; do - if test -f $ac_dir/install-sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f $ac_dir/install.sh; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - fi -done -if test -z "$ac_aux_dir"; then - AC_MSG_ERROR([can not find install-sh or install.sh in $1]) -fi -ac_config_guess=$ac_aux_dir/config.guess -ac_config_sub=$ac_aux_dir/config.sub -ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. -AC_PROVIDE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -]) - -dnl Canonicalize the host, target, and build system types. -AC_DEFUN(AC_CANONICAL_SYSTEM, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_BEFORE([$0], [AC_ARG_PROGRAM]) -# Do some error checking and defaulting for the host and target type. -# The inputs are: -# configure --host=HOST --target=TARGET --build=BUILD NONOPT -# -# The rules are: -# 1. You are not allowed to specify --host, --target, and nonopt at the -# same time. -# 2. Host defaults to nonopt. -# 3. If nonopt is not specified, then host defaults to the current host, -# as determined by config.guess. -# 4. Target and build default to nonopt. -# 5. If nonopt is not specified, then target and build default to host. - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -case $host---$target---$nonopt in -NONE---*---* | *---NONE---* | *---*---NONE) ;; -*) AC_MSG_ERROR(can only configure for one host and one target at a time) ;; -esac - -AC_CANONICAL_HOST -AC_CANONICAL_TARGET -AC_CANONICAL_BUILD -test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- -]) - -dnl Subroutines of AC_CANONICAL_SYSTEM. - -AC_DEFUN(AC_CANONICAL_HOST, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl - -# Make sure we can run config.sub. -if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : -else AC_MSG_ERROR(can not run $ac_config_sub) -fi - -AC_MSG_CHECKING(host system type) - -dnl Set host_alias. -host_alias=$host -case "$host_alias" in -NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else AC_MSG_ERROR(can not guess host type; you must specify one) - fi ;; - *) host_alias=$nonopt ;; - esac ;; -esac - -dnl Set the other host vars. -changequote(<<, >>)dnl -host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` -host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -changequote([, ])dnl -AC_MSG_RESULT($host) -AC_SUBST(host)dnl -AC_SUBST(host_alias)dnl -AC_SUBST(host_cpu)dnl -AC_SUBST(host_vendor)dnl -AC_SUBST(host_os)dnl -]) - -dnl Internal use only. -AC_DEFUN(AC_CANONICAL_TARGET, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_MSG_CHECKING(target system type) - -dnl Set target_alias. -target_alias=$target -case "$target_alias" in -NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; -esac - -dnl Set the other target vars. -changequote(<<, >>)dnl -target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` -target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -changequote([, ])dnl -AC_MSG_RESULT($target) -AC_SUBST(target)dnl -AC_SUBST(target_alias)dnl -AC_SUBST(target_cpu)dnl -AC_SUBST(target_vendor)dnl -AC_SUBST(target_os)dnl -]) - -dnl Internal use only. -AC_DEFUN(AC_CANONICAL_BUILD, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -AC_MSG_CHECKING(build system type) - -dnl Set build_alias. -build_alias=$build -case "$build_alias" in -NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; -esac - -dnl Set the other build vars. -changequote(<<, >>)dnl -build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` -build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` -build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` -build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` -changequote([, ])dnl -AC_MSG_RESULT($build) -AC_SUBST(build)dnl -AC_SUBST(build_alias)dnl -AC_SUBST(build_cpu)dnl -AC_SUBST(build_vendor)dnl -AC_SUBST(build_os)dnl -]) - - -dnl AC_VALIDATE_CACHED_SYSTEM_TUPLE[(cmd)] -dnl if the cache file is inconsistent with the current host, -dnl target and build system types, execute CMD or print a default -dnl error message. -AC_DEFUN(AC_VALIDATE_CACHED_SYSTEM_TUPLE, [ - AC_REQUIRE([AC_CANONICAL_SYSTEM]) - AC_MSG_CHECKING([cached system tuple]) - if { test x"${ac_cv_host_system_type+set}" = x"set" && - test x"$ac_cv_host_system_type" != x"$host"; } || - { test x"${ac_cv_build_system_type+set}" = x"set" && - test x"$ac_cv_build_system_type" != x"$build"; } || - { test x"${ac_cv_target_system_type+set}" = x"set" && - test x"$ac_cv_target_system_type" != x"$target"; }; then - AC_MSG_RESULT([different]) - ifelse($#, 1, [$1], - [AC_MSG_ERROR([remove config.cache and re-run configure])]) - else - AC_MSG_RESULT(ok) - fi - ac_cv_host_system_type="$host" - ac_cv_build_system_type="$build" - ac_cv_target_system_type="$target" -]) - - -dnl ### Caching test results - - -dnl Look for site or system specific initialization scripts. -dnl AC_SITE_LOAD() -define(AC_SITE_LOAD, -[# Prefer explicitly selected file to automatically selected ones. -if test -z "$CONFIG_SITE"; then - if test "x$prefix" != xNONE; then - CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" - else - CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" - fi -fi -for ac_site_file in $CONFIG_SITE; do - if test -r "$ac_site_file"; then - echo "loading site script $ac_site_file" - . "$ac_site_file" - fi -done -]) - -dnl AC_CACHE_LOAD() -define(AC_CACHE_LOAD, -[if test -r "$cache_file"; then - echo "loading cache $cache_file" - . $cache_file -else - echo "creating cache $cache_file" - > $cache_file -fi -]) - -dnl AC_CACHE_SAVE() -define(AC_CACHE_SAVE, -[cat > confcache <<\EOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs. It is not useful on other systems. -# If it contains results you don't want to keep, you may remove or edit it. -# -# By default, configure uses ./config.cache as the cache file, -# creating it if it does not exist already. You can give configure -# the --cache-file=FILE option to use a different cache file; that is -# what configure does when it calls configure scripts in -# subdirectories, so they share the cache. -# Giving --cache-file=/dev/null disables caching, for debugging configure. -# config.status only pays attention to the cache file if you give it the -# --recheck option to rerun configure. -# -EOF -dnl Allow a site initialization script to override cache values. -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, don't put newlines in cache variables' values. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -changequote(, )dnl -(set) 2>&1 | - case `(ac_space=' '; set | grep ac_space) 2>&1` in - *ac_space=\ *) - # `set' does not quote correctly, so add quotes (double-quote substitution - # turns \\\\ into \\, and sed turns \\ into \). - sed -n \ - -e "s/'/'\\\\''/g" \ - -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" - ;; - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' - ;; - esac >> confcache -changequote([, ])dnl -if cmp -s $cache_file confcache; then - : -else - if test -w $cache_file; then - echo "updating cache $cache_file" - cat confcache > $cache_file - else - echo "not updating unwritable cache $cache_file" - fi -fi -rm -f confcache -]) - -dnl The name of shell var CACHE-ID must contain `_cv_' in order to get saved. -dnl AC_CACHE_VAL(CACHE-ID, COMMANDS-TO-SET-IT) -define(AC_CACHE_VAL, -[dnl We used to use the below line, but it fails if the 1st arg is a -dnl shell variable, so we need the eval. -dnl if test "${$1+set}" = set; then -dnl the '' avoids an AIX 4.1 sh bug ("invalid expansion"). -if eval "test \"`echo '$''{'$1'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&AC_FD_MSG -else - $2 -fi -]) - -dnl AC_CACHE_CHECK(MESSAGE, CACHE-ID, COMMANDS) -define(AC_CACHE_CHECK, -[AC_MSG_CHECKING([$1]) -AC_CACHE_VAL([$2], [$3]) -AC_MSG_RESULT([$]$2)]) - - -dnl ### Defining symbols - - -dnl Set VARIABLE to VALUE, verbatim, or 1. -dnl AC_DEFINE(VARIABLE [, VALUE]) -define(AC_DEFINE, -[cat >> confdefs.h <<\EOF -[#define] $1 ifelse($#, 2, [$2], $#, 3, [$2], 1) -EOF -]) - -dnl Similar, but perform shell substitutions $ ` \ once on VALUE. -define(AC_DEFINE_UNQUOTED, -[cat >> confdefs.h <&AC_FD_MSG -echo "configure:__oline__: checking $1" >&AC_FD_CC]) - -dnl AC_CHECKING(FEATURE-DESCRIPTION) -define(AC_CHECKING, -[echo "checking $1" 1>&AC_FD_MSG -echo "configure:__oline__: checking $1" >&AC_FD_CC]) - -dnl AC_MSG_RESULT(RESULT-DESCRIPTION) -define(AC_MSG_RESULT, -[echo "$ac_t""$1" 1>&AC_FD_MSG]) - -dnl AC_VERBOSE(RESULT-DESCRIPTION) -define(AC_VERBOSE, -[AC_OBSOLETE([$0], [; instead use AC_MSG_RESULT])dnl -echo " $1" 1>&AC_FD_MSG]) - -dnl AC_MSG_WARN(PROBLEM-DESCRIPTION) -define(AC_MSG_WARN, -[echo "configure: warning: $1" 1>&2]) - -dnl AC_MSG_ERROR(ERROR-DESCRIPTION) -define(AC_MSG_ERROR, -[{ echo "configure: error: $1" 1>&2; exit 1; }]) - - -dnl ### Selecting which language to use for testing - - -dnl AC_LANG_C() -AC_DEFUN(AC_LANG_C, -[define([AC_LANG], [C])dnl -ac_ext=c -# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CPP $CPPFLAGS' -ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&AC_FD_CC' -ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC' -cross_compiling=$ac_cv_prog_cc_cross -]) - -dnl AC_LANG_CPLUSPLUS() -AC_DEFUN(AC_LANG_CPLUSPLUS, -[define([AC_LANG], [CPLUSPLUS])dnl -ac_ext=C -# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. -ac_cpp='$CXXCPP $CPPFLAGS' -ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&AC_FD_CC' -ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC' -cross_compiling=$ac_cv_prog_cxx_cross -]) - -dnl AC_LANG_FORTRAN77() -AC_DEFUN(AC_LANG_FORTRAN77, -[define([AC_LANG], [FORTRAN77])dnl -ac_ext=f -ac_compile='${F77-f77} -c $FFLAGS conftest.$ac_ext 1>&AC_FD_CC' -ac_link='${F77-f77} -o conftest${ac_exeext} $FFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&AC_FD_CC' -cross_compiling=$ac_cv_prog_f77_cross -]) - -dnl Push the current language on a stack. -dnl AC_LANG_SAVE() -define(AC_LANG_SAVE, -[pushdef([AC_LANG_STACK], AC_LANG)]) - -dnl Restore the current language from the stack. -dnl AC_LANG_RESTORE() -pushdef([AC_LANG_RESTORE], -[ifelse(AC_LANG_STACK, [C], [AC_LANG_C],dnl -AC_LANG_STACK, [CPLUSPLUS], [AC_LANG_CPLUSPLUS],dnl -AC_LANG_STACK, [FORTRAN77], [AC_LANG_FORTRAN77])[]popdef([AC_LANG_STACK])]) - - -dnl ### Compiler-running mechanics - - -dnl The purpose of this macro is to "configure:123: command line" -dnl written into config.log for every test run. -dnl AC_TRY_EVAL(VARIABLE) -AC_DEFUN(AC_TRY_EVAL, -[{ (eval echo configure:__oline__: \"[$]$1\") 1>&AC_FD_CC; dnl -(eval [$]$1) 2>&AC_FD_CC; }]) - -dnl AC_TRY_COMMAND(COMMAND) -AC_DEFUN(AC_TRY_COMMAND, -[{ ac_try='$1'; AC_TRY_EVAL(ac_try); }]) - - -dnl ### Dependencies between macros - - -dnl AC_BEFORE(THIS-MACRO-NAME, CALLED-MACRO-NAME) -define(AC_BEFORE, -[ifdef([AC_PROVIDE_$2], [errprint(__file__:__line__: [$2 was called before $1 -])])]) - -dnl AC_REQUIRE(MACRO-NAME) -define(AC_REQUIRE, -[ifdef([AC_PROVIDE_$1], , -[AC_DIVERT_PUSH(builtin(eval, AC_DIVERSION_CURRENT - 1))dnl -indir([$1]) -AC_DIVERT_POP()dnl -])]) - -dnl AC_PROVIDE(MACRO-NAME) -define(AC_PROVIDE, -[define([AC_PROVIDE_$1], )]) - -dnl AC_OBSOLETE(THIS-MACRO-NAME [, SUGGESTION]) -define(AC_OBSOLETE, -[errprint(__file__:__line__: warning: [$1] is obsolete[$2] -)]) - - -dnl ### Checking for programs - - -dnl AC_CHECK_PROG(VARIABLE, PROG-TO-CHECK-FOR, VALUE-IF-FOUND -dnl [, [VALUE-IF-NOT-FOUND] [, [PATH] [, [REJECT]]]]) -AC_DEFUN(AC_CHECK_PROG, -[# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_prog_$1, -[if test -n "[$]$1"; then - ac_cv_prog_$1="[$]$1" # Let the user override the test. -else - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -ifelse([$6], , , [ ac_prog_rejected=no -])dnl -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$5], , $PATH, [$5])" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then -ifelse([$6], , , dnl -[ if test "[$ac_dir/$ac_word]" = "$6"; then - ac_prog_rejected=yes - continue - fi -])dnl - ac_cv_prog_$1="$3" - break - fi - done - IFS="$ac_save_ifs" -ifelse([$6], , , [if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy [$]ac_cv_prog_$1 - shift - if test [$]# -gt 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set $1 to just the basename; use the full file name. - shift - set dummy "$ac_dir/$ac_word" "[$]@" - shift - ac_cv_prog_$1="[$]@" -ifelse([$2], [$4], dnl -[ else - # Default is a loser. - AC_MSG_ERROR([$1=$6 unacceptable, but no other $4 found in dnl -ifelse([$5], , [\$]PATH, [$5])]) -])dnl - fi -fi -])dnl -dnl If no 4th arg is given, leave the cache variable unset, -dnl so AC_CHECK_PROGS will keep looking. -ifelse([$4], , , [ test -z "[$]ac_cv_prog_$1" && ac_cv_prog_$1="$4" -])dnl -fi])dnl -$1="$ac_cv_prog_$1" -if test -n "[$]$1"; then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) - -dnl AC_PATH_PROG(VARIABLE, PROG-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN(AC_PATH_PROG, -[# Extract the first word of "$2", so it can be a program name with args. -set dummy $2; ac_word=[$]2 -AC_MSG_CHECKING([for $ac_word]) -AC_CACHE_VAL(ac_cv_path_$1, -[case "[$]$1" in - /*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a path. - ;; - ?:/*) - ac_cv_path_$1="[$]$1" # Let the user override the test with a dos path. - ;; - *) - IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" -dnl $ac_dummy forces splitting on constant user-supplied paths. -dnl POSIX.2 word splitting is done only on the output of word expansions, -dnl not every word. This closes a longstanding sh security hole. - ac_dummy="ifelse([$4], , $PATH, [$4])" - for ac_dir in $ac_dummy; do - test -z "$ac_dir" && ac_dir=. - if test -f $ac_dir/$ac_word; then - ac_cv_path_$1="$ac_dir/$ac_word" - break - fi - done - IFS="$ac_save_ifs" -dnl If no 3rd arg is given, leave the cache variable unset, -dnl so AC_PATH_PROGS will keep looking. -ifelse([$3], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$3" -])dnl - ;; -esac])dnl -$1="$ac_cv_path_$1" -if test -n "[$]$1"; then - AC_MSG_RESULT([$]$1) -else - AC_MSG_RESULT(no) -fi -AC_SUBST($1)dnl -]) - -dnl AC_CHECK_PROGS(VARIABLE, PROGS-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND -dnl [, PATH]]) -AC_DEFUN(AC_CHECK_PROGS, -[for ac_prog in $2 -do -AC_CHECK_PROG($1, [$]ac_prog, [$]ac_prog, , $4) -test -n "[$]$1" && break -done -ifelse([$3], , , [test -n "[$]$1" || $1="$3" -])]) - -dnl AC_PATH_PROGS(VARIABLE, PROGS-TO-CHECK-FOR [, VALUE-IF-NOT-FOUND -dnl [, PATH]]) -AC_DEFUN(AC_PATH_PROGS, -[for ac_prog in $2 -do -AC_PATH_PROG($1, [$]ac_prog, , $4) -test -n "[$]$1" && break -done -ifelse([$3], , , [test -n "[$]$1" || $1="$3" -])]) - -dnl Internal subroutine. -AC_DEFUN(AC_CHECK_TOOL_PREFIX, -[AC_REQUIRE([AC_CANONICAL_HOST])AC_REQUIRE([AC_CANONICAL_BUILD])dnl -if test $host != $build; then - ac_tool_prefix=${host_alias}- -else - ac_tool_prefix= -fi -]) - -dnl AC_CHECK_TOOL(VARIABLE, PROG-TO-CHECK-FOR[, VALUE-IF-NOT-FOUND [, PATH]]) -AC_DEFUN(AC_CHECK_TOOL, -[AC_REQUIRE([AC_CHECK_TOOL_PREFIX])dnl -AC_CHECK_PROG($1, ${ac_tool_prefix}$2, ${ac_tool_prefix}$2, - ifelse([$3], , [$2], ), $4) -ifelse([$3], , , [ -if test -z "$ac_cv_prog_$1"; then -if test -n "$ac_tool_prefix"; then - AC_CHECK_PROG($1, $2, $2, $3) -else - $1="$3" -fi -fi]) -]) - -dnl Guess the value for the `prefix' variable by looking for -dnl the argument program along PATH and taking its parent. -dnl Example: if the argument is `gcc' and we find /usr/local/gnu/bin/gcc, -dnl set `prefix' to /usr/local/gnu. -dnl This comes too late to find a site file based on the prefix, -dnl and it might use a cached value for the path. -dnl No big loss, I think, since most configures don't use this macro anyway. -dnl AC_PREFIX_PROGRAM(PROGRAM) -AC_DEFUN(AC_PREFIX_PROGRAM, -[if test "x$prefix" = xNONE; then -changequote(<<, >>)dnl -define(<>, translit($1, [a-z], [A-Z]))dnl -changequote([, ])dnl -dnl We reimplement AC_MSG_CHECKING (mostly) to avoid the ... in the middle. -echo $ac_n "checking for prefix by $ac_c" 1>&AC_FD_MSG -AC_PATH_PROG(AC_VAR_NAME, $1) -changequote(<<, >>)dnl - if test -n "$ac_cv_path_<<>>AC_VAR_NAME"; then - prefix=`echo $ac_cv_path_<<>>AC_VAR_NAME|sed 's%/[^/][^/]*//*[^/][^/]*$%%'` -changequote([, ])dnl - fi -fi -undefine([AC_VAR_NAME])dnl -]) - -dnl Try to compile, link and execute TEST-PROGRAM. Set WORKING-VAR to -dnl `yes' if the current compiler works, otherwise set it ti `no'. Set -dnl CROSS-VAR to `yes' if the compiler and linker produce non-native -dnl executables, otherwise set it to `no'. Before calling -dnl `AC_TRY_COMPILER()', call `AC_LANG_*' to set-up for the right -dnl language. -dnl -dnl AC_TRY_COMPILER(TEST-PROGRAM, WORKING-VAR, CROSS-VAR) -AC_DEFUN(AC_TRY_COMPILER, -[cat > conftest.$ac_ext << EOF -ifelse(AC_LANG, [FORTRAN77], , -[ -[#]line __oline__ "configure" -#include "confdefs.h" -]) -[$1] -EOF -if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then - [$2]=yes - # If we can't run a trivial program, we are probably using a cross compiler. - if (./conftest; exit) 2>/dev/null; then - [$3]=no - else - [$3]=yes - fi -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC - [$2]=no -fi -rm -fr conftest*]) - - -dnl ### Checking for libraries - - -dnl AC_TRY_LINK_FUNC(func, action-if-found, action-if-not-found) -dnl Try to link a program that calls FUNC, handling GCC builtins. If -dnl the link succeeds, execute ACTION-IF-FOUND; otherwise, execute -dnl ACTION-IF-NOT-FOUND. - -AC_DEFUN(AC_TRY_LINK_FUNC, -AC_TRY_LINK(dnl -ifelse([$1], [main], , dnl Avoid conflicting decl of main. -[/* Override any gcc2 internal prototype to avoid an error. */ -]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus -extern "C" -#endif -])dnl -[/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $1(); -]), -[$1()], -[$2], -[$3])) - - -dnl AC_SEARCH_LIBS(FUNCTION, SEARCH-LIBS [, ACTION-IF-FOUND -dnl [, ACTION-IF-NOT-FOUND [, OTHER-LIBRARIES]]]) -dnl Search for a library defining FUNC, if it's not already available. - -AC_DEFUN(AC_SEARCH_LIBS, -[AC_PREREQ([2.13]) -AC_CACHE_CHECK([for library containing $1], [ac_cv_search_$1], -[ac_func_search_save_LIBS="$LIBS" -ac_cv_search_$1="no" -AC_TRY_LINK_FUNC([$1], [ac_cv_search_$1="none required"]) -test "$ac_cv_search_$1" = "no" && for i in $2; do -LIBS="-l$i $5 $ac_func_search_save_LIBS" -AC_TRY_LINK_FUNC([$1], -[ac_cv_search_$1="-l$i" -break]) -done -LIBS="$ac_func_search_save_LIBS"]) -if test "$ac_cv_search_$1" != "no"; then - test "$ac_cv_search_$1" = "none required" || LIBS="$ac_cv_search_$1 $LIBS" - $3 -else : - $4 -fi]) - - - -dnl AC_CHECK_LIB(LIBRARY, FUNCTION [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND -dnl [, OTHER-LIBRARIES]]]) -AC_DEFUN(AC_CHECK_LIB, -[AC_MSG_CHECKING([for $2 in -l$1]) -dnl Use a cache variable name containing both the library and function name, -dnl because the test really is for library $1 defining function $2, not -dnl just for library $1. Separate tests with the same $1 and different $2s -dnl may have different results. -ac_lib_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` -AC_CACHE_VAL(ac_cv_lib_$ac_lib_var, -[ac_save_LIBS="$LIBS" -LIBS="-l$1 $5 $LIBS" -AC_TRY_LINK(dnl -ifelse(AC_LANG, [FORTRAN77], , -ifelse([$2], [main], , dnl Avoid conflicting decl of main. -[/* Override any gcc2 internal prototype to avoid an error. */ -]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus -extern "C" -#endif -])dnl -[/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $2(); -])), - [$2()], - eval "ac_cv_lib_$ac_lib_var=yes", - eval "ac_cv_lib_$ac_lib_var=no") -LIBS="$ac_save_LIBS" -])dnl -if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then - AC_MSG_RESULT(yes) - ifelse([$3], , -[changequote(, )dnl - ac_tr_lib=HAVE_LIB`echo $1 | sed -e 's/[^a-zA-Z0-9_]/_/g' \ - -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'` -changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_lib) - LIBS="-l$1 $LIBS" -], [$3]) -else - AC_MSG_RESULT(no) -ifelse([$4], , , [$4 -])dnl -fi -]) - -dnl AC_HAVE_LIBRARY(LIBRARY, [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND -dnl [, OTHER-LIBRARIES]]]) -AC_DEFUN(AC_HAVE_LIBRARY, -[AC_OBSOLETE([$0], [; instead use AC_CHECK_LIB])dnl -changequote(<<, >>)dnl -define(<>, dnl -patsubst(patsubst($1, <>, <<\1>>), <<-l>>, <<>>))dnl -define(<>, ac_cv_lib_<<>>AC_LIB_NAME)dnl -changequote([, ])dnl -AC_MSG_CHECKING([for -l[]AC_LIB_NAME]) -AC_CACHE_VAL(AC_CV_NAME, -[ac_save_LIBS="$LIBS" -LIBS="-l[]AC_LIB_NAME[] $4 $LIBS" -AC_TRY_LINK( , [main()], AC_CV_NAME=yes, AC_CV_NAME=no) -LIBS="$ac_save_LIBS" -])dnl -AC_MSG_RESULT($AC_CV_NAME) -if test "$AC_CV_NAME" = yes; then - ifelse([$2], , -[AC_DEFINE([HAVE_LIB]translit(AC_LIB_NAME, [a-z], [A-Z])) - LIBS="-l[]AC_LIB_NAME[] $LIBS" -], [$2]) -ifelse([$3], , , [else - $3 -])dnl -fi -undefine([AC_LIB_NAME])dnl -undefine([AC_CV_NAME])dnl -]) - - -dnl ### Examining declarations - - -dnl AC_TRY_CPP(INCLUDES, [ACTION-IF-TRUE [, ACTION-IF-FALSE]]) -AC_DEFUN(AC_TRY_CPP, -[AC_REQUIRE_CPP()dnl -cat > conftest.$ac_ext <&AC_FD_CC - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -ifelse([$3], , , [ rm -rf conftest* - $3 -])dnl -fi -rm -f conftest*]) - -dnl AC_EGREP_HEADER(PATTERN, HEADER-FILE, ACTION-IF-FOUND [, -dnl ACTION-IF-NOT-FOUND]) -AC_DEFUN(AC_EGREP_HEADER, -[AC_EGREP_CPP([$1], [#include <$2>], [$3], [$4])]) - -dnl Because this macro is used by AC_PROG_GCC_TRADITIONAL, which must -dnl come early, it is not included in AC_BEFORE checks. -dnl AC_EGREP_CPP(PATTERN, PROGRAM, [ACTION-IF-FOUND [, -dnl ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_EGREP_CPP, -[AC_REQUIRE_CPP()dnl -cat > conftest.$ac_ext <&AC_FD_CC | -dnl Prevent m4 from eating character classes: -changequote(, )dnl - grep -E "$1" >/dev/null 2>&1; then -changequote([, ])dnl - ifelse([$3], , :, [rm -rf conftest* - $3]) -ifelse([$4], , , [else - rm -rf conftest* - $4 -])dnl -fi -rm -f conftest* -]) - - -dnl ### Examining syntax - - -dnl AC_TRY_COMPILE(INCLUDES, FUNCTION-BODY, -dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_TRY_COMPILE, -[cat > conftest.$ac_ext <&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -ifelse([$4], , , [ rm -rf conftest* - $4 -])dnl -fi -rm -f conftest*]) - - -dnl ### Examining libraries - - -dnl AC_COMPILE_CHECK(ECHO-TEXT, INCLUDES, FUNCTION-BODY, -dnl ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]) -AC_DEFUN(AC_COMPILE_CHECK, -[AC_OBSOLETE([$0], [; instead use AC_TRY_COMPILE or AC_TRY_LINK, and AC_MSG_CHECKING and AC_MSG_RESULT])dnl -ifelse([$1], , , [AC_CHECKING([for $1]) -])dnl -AC_TRY_LINK([$2], [$3], [$4], [$5]) -]) - -dnl AC_TRY_LINK(INCLUDES, FUNCTION-BODY, -dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_TRY_LINK, -[cat > conftest.$ac_ext <&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -ifelse([$4], , , [ rm -rf conftest* - $4 -])dnl -fi -rm -f conftest*]) - - -dnl ### Checking for run-time features - - -dnl AC_TRY_RUN(PROGRAM, [ACTION-IF-TRUE [, ACTION-IF-FALSE -dnl [, ACTION-IF-CROSS-COMPILING]]]) -AC_DEFUN(AC_TRY_RUN, -[if test "$cross_compiling" = yes; then - ifelse([$4], , - [errprint(__file__:__line__: warning: [AC_TRY_RUN] called without default to allow cross compiling -)dnl - AC_MSG_ERROR(can not run test program while cross compiling)], - [$4]) -else - AC_TRY_RUN_NATIVE([$1], [$2], [$3]) -fi -]) - -dnl Like AC_TRY_RUN but assumes a native-environment (non-cross) compiler. -dnl AC_TRY_RUN_NATIVE(PROGRAM, [ACTION-IF-TRUE [, ACTION-IF-FALSE]]) -AC_DEFUN(AC_TRY_RUN_NATIVE, -[cat > conftest.$ac_ext </dev/null -then -dnl Don't remove the temporary files here, so they can be examined. - ifelse([$2], , :, [$2]) -else - echo "configure: failed program was:" >&AC_FD_CC - cat conftest.$ac_ext >&AC_FD_CC -ifelse([$3], , , [ rm -fr conftest* - $3 -])dnl -fi -rm -fr conftest*]) - - -dnl ### Checking for header files - - -dnl AC_CHECK_HEADER(HEADER-FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_HEADER, -[dnl Do the transliteration at runtime so arg 1 can be a shell variable. -ac_safe=`echo "$1" | sed 'y%./+-%__p_%'` -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(ac_cv_header_$ac_safe, -[AC_TRY_CPP([#include <$1>], eval "ac_cv_header_$ac_safe=yes", - eval "ac_cv_header_$ac_safe=no")])dnl -if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) -else - AC_MSG_RESULT(no) -ifelse([$3], , , [$3 -])dnl -fi -]) - -dnl AC_CHECK_HEADERS(HEADER-FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_HEADERS, -[for ac_hdr in $1 -do -AC_CHECK_HEADER($ac_hdr, -[changequote(, )dnl - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` -changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_hdr) $2], $3)dnl -done -]) - - -dnl ### Checking for the existence of files - -dnl AC_CHECK_FILE(FILE, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_FILE, -[AC_REQUIRE([AC_PROG_CC]) -dnl Do the transliteration at runtime so arg 1 can be a shell variable. -ac_safe=`echo "$1" | sed 'y%./+-%__p_%'` -AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(ac_cv_file_$ac_safe, -[if test "$cross_compiling" = yes; then - errprint(__file__:__line__: warning: Cannot check for file existence when cross compiling -)dnl - AC_MSG_ERROR(Cannot check for file existence when cross compiling) -else - if test -r $1; then - eval "ac_cv_file_$ac_safe=yes" - else - eval "ac_cv_file_$ac_safe=no" - fi -fi])dnl -if eval "test \"`echo '$ac_cv_file_'$ac_safe`\" = yes"; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) -else - AC_MSG_RESULT(no) -ifelse([$3], , , [$3]) -fi -]) - -dnl AC_CHECK_FILES(FILE... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_FILES, -[for ac_file in $1 -do -AC_CHECK_FILE($ac_file, -[changequote(, )dnl - ac_tr_file=HAVE_`echo $ac_file | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` -changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_file) $2], $3)dnl -done -]) - - -dnl ### Checking for library functions - - -dnl AC_CHECK_FUNC(FUNCTION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_FUNC, -[AC_MSG_CHECKING([for $1]) -AC_CACHE_VAL(ac_cv_func_$1, -[AC_TRY_LINK( -dnl Don't include because on OSF/1 3.0 it includes -dnl which includes which contains a prototype for -dnl select. Similarly for bzero. -[/* System header to define __stub macros and hopefully few prototypes, - which can conflict with char $1(); below. */ -#include -/* Override any gcc2 internal prototype to avoid an error. */ -]ifelse(AC_LANG, CPLUSPLUS, [#ifdef __cplusplus -extern "C" -#endif -])dnl -[/* We use char because int might match the return type of a gcc2 - builtin and then its argument prototype would still apply. */ -char $1(); -], [ -/* The GNU C library defines this for functions which it implements - to always fail with ENOSYS. Some functions are actually named - something starting with __ and the normal name is an alias. */ -#if defined (__stub_$1) || defined (__stub___$1) -choke me -#else -$1(); -#endif -], eval "ac_cv_func_$1=yes", eval "ac_cv_func_$1=no")]) -if eval "test \"`echo '$ac_cv_func_'$1`\" = yes"; then - AC_MSG_RESULT(yes) - ifelse([$2], , :, [$2]) -else - AC_MSG_RESULT(no) -ifelse([$3], , , [$3 -])dnl -fi -]) - -dnl AC_CHECK_FUNCS(FUNCTION... [, ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) -AC_DEFUN(AC_CHECK_FUNCS, -[for ac_func in $1 -do -AC_CHECK_FUNC($ac_func, -[changequote(, )dnl - ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` -changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_func) $2], $3)dnl -done -]) - -dnl AC_REPLACE_FUNCS(FUNCTION...) -AC_DEFUN(AC_REPLACE_FUNCS, -[AC_CHECK_FUNCS([$1], , [LIBOBJS="$LIBOBJS ${ac_func}.${ac_objext}"]) -AC_SUBST(LIBOBJS)dnl -]) - - -dnl ### Checking compiler characteristics - - -dnl AC_CHECK_SIZEOF(TYPE [, CROSS-SIZE]) -AC_DEFUN(AC_CHECK_SIZEOF, -[changequote(<<, >>)dnl -dnl The name to #define. -define(<>, translit(sizeof_$1, [a-z *], [A-Z_P]))dnl -dnl The cache variable name. -define(<>, translit(ac_cv_sizeof_$1, [ *], [_p]))dnl -changequote([, ])dnl -AC_MSG_CHECKING(size of $1) -AC_CACHE_VAL(AC_CV_NAME, -[AC_TRY_RUN([#include -main() -{ - FILE *f=fopen("conftestval", "w"); - if (!f) exit(1); - fprintf(f, "%d\n", sizeof($1)); - exit(0); -}], AC_CV_NAME=`cat conftestval`, AC_CV_NAME=0, ifelse([$2], , , AC_CV_NAME=$2))])dnl -AC_MSG_RESULT($AC_CV_NAME) -AC_DEFINE_UNQUOTED(AC_TYPE_NAME, $AC_CV_NAME) -undefine([AC_TYPE_NAME])dnl -undefine([AC_CV_NAME])dnl -]) - - -dnl ### Checking for typedefs - - -dnl AC_CHECK_TYPE(TYPE, DEFAULT) -AC_DEFUN(AC_CHECK_TYPE, -[AC_REQUIRE([AC_HEADER_STDC])dnl -AC_MSG_CHECKING(for $1) -AC_CACHE_VAL(ac_cv_type_$1, -[AC_EGREP_CPP(dnl -changequote(<<,>>)dnl -<<(^|[^a-zA-Z_0-9])$1[^a-zA-Z_0-9]>>dnl -changequote([,]), [#include -#if STDC_HEADERS -#include -#include -#endif], ac_cv_type_$1=yes, ac_cv_type_$1=no)])dnl -AC_MSG_RESULT($ac_cv_type_$1) -if test $ac_cv_type_$1 = no; then - AC_DEFINE($1, $2) -fi -]) - - -dnl ### Creating output files - - -dnl AC_CONFIG_HEADER(HEADER-TO-CREATE ...) -AC_DEFUN(AC_CONFIG_HEADER, -[define(AC_LIST_HEADER, $1)]) - -dnl Link each of the existing files SOURCE... to the corresponding -dnl link name in DEST... -dnl AC_LINK_FILES(SOURCE..., DEST...) -AC_DEFUN(AC_LINK_FILES, -[dnl -define([AC_LIST_FILES], ifdef([AC_LIST_FILES], [AC_LIST_FILES ],)[$1])dnl -define([AC_LIST_LINKS], ifdef([AC_LIST_LINKS], [AC_LIST_LINKS ],)[$2])]) - -dnl Add additional commands for AC_OUTPUT to put into config.status. -dnl Use diversions instead of macros so we can be robust in the -dnl presence of commas in $1 and/or $2. -dnl AC_OUTPUT_COMMANDS(EXTRA-CMDS, INIT-CMDS) -AC_DEFUN(AC_OUTPUT_COMMANDS, -[AC_DIVERT_PUSH(AC_DIVERSION_CMDS)dnl -[$1] -AC_DIVERT_POP()dnl -AC_DIVERT_PUSH(AC_DIVERSION_ICMDS)dnl -[$2] -AC_DIVERT_POP()]) - -dnl AC_CONFIG_SUBDIRS(DIR ...) -AC_DEFUN(AC_CONFIG_SUBDIRS, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -define([AC_LIST_SUBDIRS], ifdef([AC_LIST_SUBDIRS], [AC_LIST_SUBDIRS ],)[$1])dnl -subdirs="AC_LIST_SUBDIRS" -AC_SUBST(subdirs)dnl -]) - -dnl The big finish. -dnl Produce config.status, config.h, and links; and configure subdirs. -dnl AC_OUTPUT([FILE...] [, EXTRA-CMDS] [, INIT-CMDS]) -define(AC_OUTPUT, -[trap '' 1 2 15 -AC_CACHE_SAVE -trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15 - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Any assignment to VPATH causes Sun make to only execute -# the first set of double-colon rules, so remove it if not needed. -# If there is a colon in the path, we need to keep it. -if test "x$srcdir" = x.; then -changequote(, )dnl - ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d' -changequote([, ])dnl -fi - -trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15 - -ifdef([AC_LIST_HEADER], [DEFS=-DHAVE_CONFIG_H], [AC_OUTPUT_MAKE_DEFS()]) - -# Without the "./", some shells look in PATH for config.status. -: ${CONFIG_STATUS=./config.status} - -echo creating $CONFIG_STATUS -rm -f $CONFIG_STATUS -cat > $CONFIG_STATUS </dev/null | sed 1q`: -# -[#] [$]0 [$]ac_configure_args -# -# Compiler output produced by configure, useful for debugging -# configure, is in ./config.log if it exists. - -changequote(, )dnl -ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]" -changequote([, ])dnl -for ac_option -do - case "[\$]ac_option" in - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - echo "running [\$]{CONFIG_SHELL-/bin/sh} [$]0 [$]ac_configure_args --no-create --no-recursion" - exec [\$]{CONFIG_SHELL-/bin/sh} [$]0 [$]ac_configure_args --no-create --no-recursion ;; - -version | --version | --versio | --versi | --vers | --ver | --ve | --v) - echo "$CONFIG_STATUS generated by autoconf version AC_ACVERSION" - exit 0 ;; - -help | --help | --hel | --he | --h) - echo "[\$]ac_cs_usage"; exit 0 ;; - *) echo "[\$]ac_cs_usage"; exit 1 ;; - esac -done - -ac_given_srcdir=$srcdir -ifdef([AC_PROVIDE_AC_PROG_INSTALL], [ac_given_INSTALL="$INSTALL" -])dnl - -changequote(<<, >>)dnl -ifdef(<>, -<>, -<>) -changequote([, ])dnl -EOF -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -undivert(AC_DIVERSION_CMDS)dnl -$2 -exit 0 -EOF -chmod +x $CONFIG_STATUS -rm -fr confdefs* $ac_clean_files -test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1 -dnl config.status should not do recursion. -ifdef([AC_LIST_SUBDIRS], [AC_OUTPUT_SUBDIRS(AC_LIST_SUBDIRS)])dnl -])dnl - -dnl Set the DEFS variable to the -D options determined earlier. -dnl This is a subroutine of AC_OUTPUT. -dnl It is called inside configure, outside of config.status. -dnl AC_OUTPUT_MAKE_DEFS() -define(AC_OUTPUT_MAKE_DEFS, -[# Transform confdefs.h into DEFS. -dnl Using a here document instead of a string reduces the quoting nightmare. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -cat > conftest.defs <<\EOF -changequote(<<, >>)dnl -s%<<#define>> \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%-D\1=\2%g -s%[ `~<<#>>$^&*(){}\\|;'"<>?]%\\&%g -s%\[%\\&%g -s%\]%\\&%g -s%\$%$$%g -changequote([, ])dnl -EOF -DEFS=`sed -f conftest.defs confdefs.h | tr '\012' ' '` -rm -f conftest.defs -]) - -dnl Do the variable substitutions to create the Makefiles or whatever. -dnl This is a subroutine of AC_OUTPUT. It is called inside an unquoted -dnl here document whose contents are going into config.status, but -dnl upon returning, the here document is being quoted. -dnl AC_OUTPUT_FILES(FILE...) -define(AC_OUTPUT_FILES, -[# Protect against being on the right side of a sed subst in config.status. -changequote(, )dnl -sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g; - s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF -changequote([, ])dnl -dnl These here document variables are unquoted when configure runs -dnl but quoted when config.status runs, so variables are expanded once. -$ac_vpsub -dnl Shell code in configure.in might set extrasub. -$extrasub -dnl Insert the sed substitutions of variables. -undivert(AC_DIVERSION_SED) -CEOF -EOF - -cat >> $CONFIG_STATUS <<\EOF - -# Split the substitutions into bite-sized pieces for seds with -# small command number limits, like on Digital OSF/1 and HP-UX. -ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script. -ac_file=1 # Number of current file. -ac_beg=1 # First line for current file. -ac_end=$ac_max_sed_cmds # Line after last line for current file. -ac_more_lines=: -ac_sed_cmds="" -while $ac_more_lines; do - if test $ac_beg -gt 1; then - sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file - else - sed "${ac_end}q" conftest.subs > conftest.s$ac_file - fi - if test ! -s conftest.s$ac_file; then - ac_more_lines=false - rm -f conftest.s$ac_file - else - if test -z "$ac_sed_cmds"; then - ac_sed_cmds="sed -f conftest.s$ac_file" - else - ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file" - fi - ac_file=`expr $ac_file + 1` - ac_beg=$ac_end - ac_end=`expr $ac_end + $ac_max_sed_cmds` - fi -done -if test -z "$ac_sed_cmds"; then - ac_sed_cmds=cat -fi -EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then -changequote(, )dnl - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac - - # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories. - - # Remove last slash and all that follows it. Not all systems have dirname. - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` -changequote([, ])dnl - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dir_suffix. -changequote(, )dnl - ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'` -changequote([, ])dnl - else - ac_dir_suffix= ac_dots= - fi - - case "$ac_given_srcdir" in - .) srcdir=. - if test -z "$ac_dots"; then top_srcdir=. - else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;; - /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;; - *) # Relative path. - srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix" - top_srcdir="$ac_dots$ac_given_srcdir" ;; - esac - -ifdef([AC_PROVIDE_AC_PROG_INSTALL], -[ case "$ac_given_INSTALL" in -changequote(, )dnl - [/$]*) INSTALL="$ac_given_INSTALL" ;; -changequote([, ])dnl - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac -])dnl - - echo creating "$ac_file" - rm -f "$ac_file" - configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure." - case "$ac_file" in - *Makefile*) ac_comsub="1i\\ -# $configure_input" ;; - *) ac_comsub= ;; - esac - - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - sed -e "$ac_comsub -s%@configure_input@%$configure_input%g -s%@srcdir@%$srcdir%g -s%@top_srcdir@%$top_srcdir%g -ifdef([AC_PROVIDE_AC_PROG_INSTALL], [s%@INSTALL@%$INSTALL%g -])dnl -dnl The parens around the eval prevent an "illegal io" in Ultrix sh. -" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file -dnl This would break Makefile dependencies. -dnl if cmp -s $ac_file conftest.out 2>/dev/null; then -dnl echo "$ac_file is unchanged" -dnl rm -f conftest.out -dnl else -dnl rm -f $ac_file -dnl mv conftest.out $ac_file -dnl fi -fi; done -rm -f conftest.s* -]) - -dnl Create the config.h files from the config.h.in files. -dnl This is a subroutine of AC_OUTPUT. It is called inside a quoted -dnl here document whose contents are going into config.status. -dnl AC_OUTPUT_HEADER(HEADER-FILE...) -define(AC_OUTPUT_HEADER, -[changequote(<<, >>)dnl -# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where -# NAME is the cpp macro being defined and VALUE is the value it is being given. -# -# ac_d sets the value in "#define NAME VALUE" lines. -ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)' -ac_dB='\([ ][ ]*\)[^ ]*%\1#\2' -ac_dC='\3' -ac_dD='%g' -# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE". -ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_uB='\([ ]\)%\1#\2define\3' -ac_uC=' ' -ac_uD='\4%g' -# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE". -ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)' -ac_eB='<<$>>%\1#\2define\3' -ac_eC=' ' -ac_eD='%g' -changequote([, ])dnl - -if test "${CONFIG_HEADERS+set}" != set; then -EOF -dnl Support passing AC_CONFIG_HEADER a value containing shell variables. -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -fi -for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then -changequote(, )dnl - # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". - case "$ac_file" in - *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'` - ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; - *) ac_file_in="${ac_file}.in" ;; - esac -changequote([, ])dnl - - echo creating $ac_file - - rm -f conftest.frag conftest.in conftest.out - ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"` - cat $ac_file_inputs > conftest.in - -EOF - -# Transform confdefs.h into a sed script conftest.vals that substitutes -# the proper values into config.h.in to produce config.h. And first: -# Protect against being on the right side of a sed subst in config.status. -# Protect against being in an unquoted here document in config.status. -rm -f conftest.vals -dnl Using a here document instead of a string reduces the quoting nightmare. -dnl Putting comments in sed scripts is not portable. -cat > conftest.hdr <<\EOF -changequote(<<, >>)dnl -s/[\\&%]/\\&/g -s%[\\$`]%\\&%g -s%<<#define>> \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp -s%ac_d%ac_u%gp -s%ac_u%ac_e%gp -changequote([, ])dnl -EOF -sed -n -f conftest.hdr confdefs.h > conftest.vals -rm -f conftest.hdr - -# This sed command replaces #undef with comments. This is necessary, for -# example, in the case of _POSIX_SOURCE, which is predefined and required -# on some systems where configure will not decide to define it. -cat >> conftest.vals <<\EOF -changequote(, )dnl -s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */% -changequote([, ])dnl -EOF - -# Break up conftest.vals because some shells have a limit on -# the size of here documents, and old seds have small limits too. - -rm -f conftest.tail -while : -do - ac_lines=`grep -c . conftest.vals` - # grep -c gives empty output for an empty file on some AIX systems. - if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi - # Write a limited-size here document to conftest.frag. - echo ' cat > conftest.frag <> $CONFIG_STATUS - sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS - echo 'CEOF - sed -f conftest.frag conftest.in > conftest.out - rm -f conftest.in - mv conftest.out conftest.in -' >> $CONFIG_STATUS - sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail - rm -f conftest.vals - mv conftest.tail conftest.vals -done -rm -f conftest.vals - -dnl Now back to your regularly scheduled config.status. -cat >> $CONFIG_STATUS <<\EOF - rm -f conftest.frag conftest.h - echo "/* $ac_file. Generated automatically by configure. */" > conftest.h - cat conftest.in >> conftest.h - rm -f conftest.in - if cmp -s $ac_file conftest.h 2>/dev/null; then - echo "$ac_file is unchanged" - rm -f conftest.h - else - # Remove last slash and all that follows it. Not all systems have dirname. - changequote(, )dnl - ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'` - changequote([, ])dnl - if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then - # The file is in a subdirectory. - test ! -d "$ac_dir" && mkdir "$ac_dir" - fi - rm -f $ac_file - mv conftest.h $ac_file - fi -fi; done - -]) - -dnl This is a subroutine of AC_OUTPUT. It is called inside a quoted -dnl here document whose contents are going into config.status. -dnl AC_OUTPUT_LINKS(SOURCE..., DEST...) -define(AC_OUTPUT_LINKS, -[EOF - -cat >> $CONFIG_STATUS <> $CONFIG_STATUS <<\EOF -srcdir=$ac_given_srcdir -while test -n "$ac_sources"; do - set $ac_dests; ac_dest=[$]1; shift; ac_dests=[$]* - set $ac_sources; ac_source=[$]1; shift; ac_sources=[$]* - - echo "linking $srcdir/$ac_source to $ac_dest" - - if test ! -r $srcdir/$ac_source; then - AC_MSG_ERROR($srcdir/$ac_source: File not found) - fi - rm -f $ac_dest - - # Make relative symlinks. - # Remove last slash and all that follows it. Not all systems have dirname. -changequote(, )dnl - ac_dest_dir=`echo $ac_dest|sed 's%/[^/][^/]*$%%'` -changequote([, ])dnl - if test "$ac_dest_dir" != "$ac_dest" && test "$ac_dest_dir" != .; then - # The dest file is in a subdirectory. - test ! -d "$ac_dest_dir" && mkdir "$ac_dest_dir" - ac_dest_dir_suffix="/`echo $ac_dest_dir|sed 's%^\./%%'`" - # A "../" for each directory in $ac_dest_dir_suffix. -changequote(, )dnl - ac_dots=`echo $ac_dest_dir_suffix|sed 's%/[^/]*%../%g'` -changequote([, ])dnl - else - ac_dest_dir_suffix= ac_dots= - fi - - case "$srcdir" in -changequote(, )dnl - [/$]*) ac_rel_source="$srcdir/$ac_source" ;; -changequote([, ])dnl - *) ac_rel_source="$ac_dots$srcdir/$ac_source" ;; - esac - - # Make a symlink if possible; otherwise try a hard link. - if ln -s $ac_rel_source $ac_dest 2>/dev/null || - ln $srcdir/$ac_source $ac_dest; then : - else - AC_MSG_ERROR(can not link $ac_dest to $srcdir/$ac_source) - fi -done -]) - -dnl This is a subroutine of AC_OUTPUT. -dnl It is called after running config.status. -dnl AC_OUTPUT_SUBDIRS(DIRECTORY...) -define(AC_OUTPUT_SUBDIRS, -[ -if test "$no_recursion" != yes; then - - # Remove --cache-file and --srcdir arguments so they do not pile up. - ac_sub_configure_args= - ac_prev= - for ac_arg in $ac_configure_args; do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case "$ac_arg" in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - *) ac_sub_configure_args="$ac_sub_configure_args $ac_arg" ;; - esac - done - - for ac_config_dir in $1; do - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - if test ! -d $srcdir/$ac_config_dir; then - continue - fi - - echo configuring in $ac_config_dir - - case "$srcdir" in - .) ;; - *) - if test -d ./$ac_config_dir || mkdir ./$ac_config_dir; then :; - else - AC_MSG_ERROR(can not create `pwd`/$ac_config_dir) - fi - ;; - esac - - ac_popdir=`pwd` - cd $ac_config_dir - -changequote(, )dnl - # A "../" for each directory in /$ac_config_dir. - ac_dots=`echo $ac_config_dir|sed -e 's%^\./%%' -e 's%[^/]$%&/%' -e 's%[^/]*/%../%g'` -changequote([, ])dnl - - case "$srcdir" in - .) # No --srcdir option. We are building in place. - ac_sub_srcdir=$srcdir ;; - /*) # Absolute path. - ac_sub_srcdir=$srcdir/$ac_config_dir ;; - *) # Relative path. - ac_sub_srcdir=$ac_dots$srcdir/$ac_config_dir ;; - esac - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f $ac_sub_srcdir/configure; then - ac_sub_configure=$ac_sub_srcdir/configure - elif test -f $ac_sub_srcdir/configure.in; then - ac_sub_configure=$ac_configure - else - AC_MSG_WARN(no configuration information is in $ac_config_dir) - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - - # Make the cache file name correct relative to the subdirectory. - case "$cache_file" in - /*) ac_sub_cache_file=$cache_file ;; - *) # Relative path. - ac_sub_cache_file="$ac_dots$cache_file" ;; - esac -ifdef([AC_PROVIDE_AC_PROG_INSTALL], - [ case "$ac_given_INSTALL" in -changequote(, )dnl - [/$]*) INSTALL="$ac_given_INSTALL" ;; -changequote([, ])dnl - *) INSTALL="$ac_dots$ac_given_INSTALL" ;; - esac -])dnl - - echo "[running ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file] --srcdir=$ac_sub_srcdir" - # The eval makes quoting arguments work. - if eval ${CONFIG_SHELL-/bin/sh} $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_sub_srcdir - then : - else - AC_MSG_ERROR($ac_sub_configure failed for $ac_config_dir) - fi - fi - - cd $ac_popdir - done -fi -]) diff --git a/build/autoconf/acoldnames.m4 b/build/autoconf/acoldnames.m4 deleted file mode 100644 index d31cdd754f5..00000000000 --- a/build/autoconf/acoldnames.m4 +++ /dev/null @@ -1,80 +0,0 @@ -dnl Map old names of Autoconf macros to new regularized names. -dnl This file is part of Autoconf. -dnl Copyright (C) 1994 Free Software Foundation, Inc. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl General macros. -dnl -define(AC_WARN, [indir([AC_MSG_WARN], $@)])dnl -define(AC_ERROR, [indir([AC_MSG_ERROR], $@)])dnl -AC_DEFUN(AC_PROGRAM_CHECK, [indir([AC_CHECK_PROG], $@)])dnl -AC_DEFUN(AC_PROGRAM_PATH, [indir([AC_PATH_PROG], $@)])dnl -AC_DEFUN(AC_PROGRAMS_CHECK, [indir([AC_CHECK_PROGS], $@)])dnl -AC_DEFUN(AC_PROGRAMS_PATH, [indir([AC_PATH_PROGS], $@)])dnl -AC_DEFUN(AC_PREFIX, [indir([AC_PREFIX_PROGRAM], $@)])dnl -AC_DEFUN(AC_HEADER_EGREP, [indir([AC_EGREP_HEADER], $@)])dnl -AC_DEFUN(AC_PROGRAM_EGREP, [indir([AC_EGREP_CPP], $@)])dnl -AC_DEFUN(AC_TEST_PROGRAM, [indir([AC_TRY_RUN], $@)])dnl -AC_DEFUN(AC_TEST_CPP, [indir([AC_TRY_CPP], $@)])dnl -AC_DEFUN(AC_HEADER_CHECK, [indir([AC_CHECK_HEADER], $@)])dnl -AC_DEFUN(AC_FUNC_CHECK, [indir([AC_CHECK_FUNC], $@)])dnl -AC_DEFUN(AC_HAVE_FUNCS, [indir([AC_CHECK_FUNCS], $@)])dnl -AC_DEFUN(AC_HAVE_HEADERS, [indir([AC_CHECK_HEADERS], $@)])dnl -AC_DEFUN(AC_SIZEOF_TYPE, [indir([AC_CHECK_SIZEOF], $@)])dnl -dnl -dnl Specific macros. -dnl -AC_DEFUN(AC_GCC_TRADITIONAL, [indir([AC_PROG_GCC_TRADITIONAL])])dnl -AC_DEFUN(AC_MINUS_C_MINUS_O, [indir([AC_PROG_CC_C_O])])dnl -AC_DEFUN(AC_SET_MAKE, [indir([AC_PROG_MAKE_SET])])dnl -AC_DEFUN(AC_YYTEXT_POINTER, [indir([AC_DECL_YYTEXT])])dnl -AC_DEFUN(AC_LN_S, [indir([AC_PROG_LN_S])])dnl -AC_DEFUN(AC_STDC_HEADERS, [indir([AC_HEADER_STDC])])dnl -AC_DEFUN(AC_MAJOR_HEADER, [indir([AC_HEADER_MAJOR])])dnl -AC_DEFUN(AC_STAT_MACROS_BROKEN, [indir([AC_HEADER_STAT])])dnl -AC_DEFUN(AC_SYS_SIGLIST_DECLARED, [indir([AC_DECL_SYS_SIGLIST])])dnl -AC_DEFUN(AC_GETGROUPS_T, [indir([AC_TYPE_GETGROUPS])])dnl -AC_DEFUN(AC_UID_T, [indir([AC_TYPE_UID_T])])dnl -AC_DEFUN(AC_SIZE_T, [indir([AC_TYPE_SIZE_T])])dnl -AC_DEFUN(AC_PID_T, [indir([AC_TYPE_PID_T])])dnl -AC_DEFUN(AC_OFF_T, [indir([AC_TYPE_OFF_T])])dnl -AC_DEFUN(AC_MODE_T, [indir([AC_TYPE_MODE_T])])dnl -AC_DEFUN(AC_RETSIGTYPE, [indir([AC_TYPE_SIGNAL])])dnl -AC_DEFUN(AC_MMAP, [indir([AC_FUNC_MMAP])])dnl -AC_DEFUN(AC_VPRINTF, [indir([AC_FUNC_VPRINTF])])dnl -AC_DEFUN(AC_VFORK, [indir([AC_FUNC_VFORK])])dnl -AC_DEFUN(AC_WAIT3, [indir([AC_FUNC_WAIT3])])dnl -AC_DEFUN(AC_ALLOCA, [indir([AC_FUNC_ALLOCA])])dnl -AC_DEFUN(AC_GETLOADAVG, [indir([AC_FUNC_GETLOADAVG])])dnl -AC_DEFUN(AC_UTIME_NULL, [indir([AC_FUNC_UTIME_NULL])])dnl -AC_DEFUN(AC_STRCOLL, [indir([AC_FUNC_STRCOLL])])dnl -AC_DEFUN(AC_SETVBUF_REVERSED, [indir([AC_FUNC_SETVBUF_REVERSED])])dnl -AC_DEFUN(AC_TIME_WITH_SYS_TIME, [indir([AC_HEADER_TIME])])dnl -AC_DEFUN(AC_TIMEZONE, [indir([AC_STRUCT_TIMEZONE])])dnl -AC_DEFUN(AC_ST_BLOCKS, [indir([AC_STRUCT_ST_BLOCKS])])dnl -AC_DEFUN(AC_ST_BLKSIZE, [indir([AC_STRUCT_ST_BLKSIZE])])dnl -AC_DEFUN(AC_ST_RDEV, [indir([AC_STRUCT_ST_RDEV])])dnl -AC_DEFUN(AC_CROSS_CHECK, [indir([AC_C_CROSS])])dnl -AC_DEFUN(AC_CHAR_UNSIGNED, [indir([AC_C_CHAR_UNSIGNED])])dnl -AC_DEFUN(AC_LONG_DOUBLE, [indir([AC_C_LONG_DOUBLE])])dnl -AC_DEFUN(AC_WORDS_BIGENDIAN, [indir([AC_C_BIGENDIAN])])dnl -AC_DEFUN(AC_INLINE, [indir([AC_C_INLINE])])dnl -AC_DEFUN(AC_CONST, [indir([AC_C_CONST])])dnl -AC_DEFUN(AC_LONG_FILE_NAMES, [indir([AC_SYS_LONG_FILE_NAMES])])dnl -AC_DEFUN(AC_RESTARTABLE_SYSCALLS, [indir([AC_SYS_RESTARTABLE_SYSCALLS])])dnl -AC_DEFUN(AC_FIND_X, [indir([AC_PATH_X])])dnl -AC_DEFUN(AC_FIND_XTRA, [indir([AC_PATH_XTRA])])dnl diff --git a/build/autoconf/acspecific.m4 b/build/autoconf/acspecific.m4 deleted file mode 100644 index 28af5228767..00000000000 --- a/build/autoconf/acspecific.m4 +++ /dev/null @@ -1,2758 +0,0 @@ -dnl Macros that test for specific features. -dnl This file is part of Autoconf. -dnl Copyright (C) 1992, 93, 94, 95, 96, 1998 Free Software Foundation, Inc. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl As a special exception, the Free Software Foundation gives unlimited -dnl permission to copy, distribute and modify the configure scripts that -dnl are the output of Autoconf. You need not follow the terms of the GNU -dnl General Public License when using or distributing such scripts, even -dnl though portions of the text of Autoconf appear in them. The GNU -dnl General Public License (GPL) does govern all other use of the material -dnl that constitutes the Autoconf program. -dnl -dnl Certain portions of the Autoconf source text are designed to be copied -dnl (in certain cases, depending on the input) into the output of -dnl Autoconf. We call these the "data" portions. The rest of the Autoconf -dnl source text consists of comments plus executable code that decides which -dnl of the data portions to output in any given case. We call these -dnl comments and executable code the "non-data" portions. Autoconf never -dnl copies any of the non-data portions into its output. -dnl -dnl This special exception to the GPL applies to versions of Autoconf -dnl released by the Free Software Foundation. When you make and -dnl distribute a modified version of Autoconf, you may extend this special -dnl exception to the GPL to apply to your modified version as well, *unless* -dnl your modified version has the potential to copy into its output some -dnl of the text that was the non-data portion of the version that you started -dnl with. (In other words, unless your change moves or copies text from -dnl the non-data portions to the data portions.) If your modification has -dnl such potential, you must delete any notice of this special exception -dnl to the GPL from your modified version. -dnl -dnl Written by David MacKenzie, with help from -dnl Franc,ois Pinard, Karl Berry, Richard Pixley, Ian Lance Taylor, -dnl Roland McGrath, Noah Friedman, david d zuhn, and many others. - - -dnl ### Checks for programs - - -dnl Check whether to use -n, \c, or newline-tab to separate -dnl checking messages from result messages. -dnl Idea borrowed from dist 3.0. -dnl Internal use only. -AC_DEFUN(AC_PROG_ECHO_N, -[if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then - # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu. - if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then - ac_n= ac_c=' -' ac_t=' ' - else - ac_n=-n ac_c= ac_t= - fi -else - ac_n= ac_c='\c' ac_t= -fi -]) - -AC_DEFUN(AC_PROG_CC, -[AC_BEFORE([$0], [AC_PROG_CPP])dnl -AC_CHECK_PROG(CC, gcc, gcc) -if test -z "$CC"; then - AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) - if test -z "$CC"; then - case "`uname -s`" in - *win32* | *WIN32*) - AC_CHECK_PROG(CC, cl, cl) ;; - esac - fi - test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) -fi - -AC_PROG_CC_WORKS -AC_PROG_CC_GNU - -if test $ac_cv_prog_gcc = yes; then - GCC=yes -else - GCC= -fi - -dnl Check whether -g works, even if CFLAGS is set, in case the package -dnl plays around with CFLAGS (such as to build both debugging and -dnl normal versions of a library), tasteless as that idea is. -ac_test_CFLAGS="${CFLAGS+set}" -ac_save_CFLAGS="$CFLAGS" -CFLAGS= -AC_PROG_CC_G -if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -]) - -AC_DEFUN(AC_PROG_CXX, -[AC_BEFORE([$0], [AC_PROG_CXXCPP])dnl -AC_CHECK_PROGS(CXX, $CCC c++ g++ gcc CC cxx cc++ cl, gcc) - -AC_PROG_CXX_WORKS -AC_PROG_CXX_GNU - -if test $ac_cv_prog_gxx = yes; then - GXX=yes -else - GXX= -fi - -dnl Check whether -g works, even if CXXFLAGS is set, in case the package -dnl plays around with CXXFLAGS (such as to build both debugging and -dnl normal versions of a library), tasteless as that idea is. -ac_test_CXXFLAGS="${CXXFLAGS+set}" -ac_save_CXXFLAGS="$CXXFLAGS" -CXXFLAGS= -AC_PROG_CXX_G -if test "$ac_test_CXXFLAGS" = set; then - CXXFLAGS="$ac_save_CXXFLAGS" -elif test $ac_cv_prog_cxx_g = yes; then - if test "$GXX" = yes; then - CXXFLAGS="-g -O2" - else - CXXFLAGS="-g" - fi -else - if test "$GXX" = yes; then - CXXFLAGS="-O2" - else - CXXFLAGS= - fi -fi -]) - -dnl Determine a Fortran 77 compiler to use. If `F77' is not already set -dnl in the environment, check for `g77', `f77' and `f2c', in that order. -dnl Set the output variable `F77' to the name of the compiler found. -dnl -dnl If using `g77' (the GNU Fortran 77 compiler), then `AC_PROG_F77' -dnl will set the shell variable `G77' to `yes', and empty otherwise. If -dnl the output variable `FFLAGS' was not already set in the environment, -dnl then set it to `-g -02' for `g77' (or `-O2' where `g77' does not -dnl accept `-g'). Otherwise, set `FFLAGS' to `-g' for all other Fortran -dnl 77 compilers. -dnl -dnl AC_PROG_F77() -AC_DEFUN(AC_PROG_F77, -[AC_BEFORE([$0], [AC_PROG_CPP])dnl -if test -z "$F77"; then - AC_CHECK_PROGS(F77, g77 f77 f2c) - test -z "$F77" && AC_MSG_ERROR([no acceptable Fortran 77 compiler found in \$PATH]) -fi - -AC_PROG_F77_WORKS -AC_PROG_F77_GNU - -if test $ac_cv_prog_g77 = yes; then - G77=yes -dnl Check whether -g works, even if FFLAGS is set, in case the package -dnl plays around with FFLAGS (such as to build both debugging and -dnl normal versions of a library), tasteless as that idea is. - ac_test_FFLAGS="${FFLAGS+set}" - ac_save_FFLAGS="$FFLAGS" - FFLAGS= - AC_PROG_F77_G - if test "$ac_test_FFLAGS" = set; then - FFLAGS="$ac_save_FFLAGS" - elif test $ac_cv_prog_f77_g = yes; then - FFLAGS="-g -O2" - else - FFLAGS="-O2" - fi -else - G77= - test "${FFLAGS+set}" = set || FFLAGS="-g" -fi -]) - -AC_DEFUN(AC_PROG_CC_WORKS, -[AC_MSG_CHECKING([whether the C compiler ($CC $CFLAGS $LDFLAGS) works]) -AC_LANG_SAVE -AC_LANG_C -AC_TRY_COMPILER([main(){return(0);}], ac_cv_prog_cc_works, ac_cv_prog_cc_cross) -AC_LANG_RESTORE -AC_MSG_RESULT($ac_cv_prog_cc_works) -if test $ac_cv_prog_cc_works = no; then - AC_MSG_ERROR([installation or configuration problem: C compiler cannot create executables.]) -fi -AC_MSG_CHECKING([whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler]) -AC_MSG_RESULT($ac_cv_prog_cc_cross) -cross_compiling=$ac_cv_prog_cc_cross -]) - -AC_DEFUN(AC_PROG_CXX_WORKS, -[AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works]) -AC_LANG_SAVE -AC_LANG_CPLUSPLUS -AC_TRY_COMPILER([int main(){return(0);}], ac_cv_prog_cxx_works, ac_cv_prog_cxx_cross) -AC_LANG_RESTORE -AC_MSG_RESULT($ac_cv_prog_cxx_works) -if test $ac_cv_prog_cxx_works = no; then - AC_MSG_ERROR([installation or configuration problem: C++ compiler cannot create executables.]) -fi -AC_MSG_CHECKING([whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler]) -AC_MSG_RESULT($ac_cv_prog_cxx_cross) -cross_compiling=$ac_cv_prog_cxx_cross -]) - -dnl Test whether the Fortran 77 compiler can compile and link a trivial -dnl Fortran program. Also, test whether the Fortran 77 compiler is a -dnl cross-compiler (which may realistically be the case if the Fortran -dnl compiler is `g77'). -dnl -dnl AC_PROG_F77_WORKS() -AC_DEFUN(AC_PROG_F77_WORKS, -[AC_MSG_CHECKING([whether the Fortran 77 compiler ($F77 $FFLAGS $LDFLAGS) works]) -AC_LANG_SAVE -AC_LANG_FORTRAN77 -AC_TRY_COMPILER(dnl -[ program conftest - end -], ac_cv_prog_f77_works, ac_cv_prog_f77_cross) -AC_LANG_RESTORE -AC_MSG_RESULT($ac_cv_prog_f77_works) -if test $ac_cv_prog_f77_works = no; then - AC_MSG_ERROR([installation or configuration problem: Fortran 77 compiler cannot create executables.]) -fi -AC_MSG_CHECKING([whether the Fortran 77 compiler ($F77 $FFLAGS $LDFLAGS) is a cross-compiler]) -AC_MSG_RESULT($ac_cv_prog_f77_cross) -cross_compiling=$ac_cv_prog_f77_cross -]) - -AC_DEFUN(AC_PROG_CC_GNU, -[AC_CACHE_CHECK(whether we are using GNU C, ac_cv_prog_gcc, -[dnl The semicolon is to pacify NeXT's syntax-checking cpp. -cat > conftest.c </dev/null 2>&1; then - ac_cv_prog_gcc=yes -else - ac_cv_prog_gcc=no -fi])]) - -AC_DEFUN(AC_PROG_CXX_GNU, -[AC_CACHE_CHECK(whether we are using GNU C++, ac_cv_prog_gxx, -[dnl The semicolon is to pacify NeXT's syntax-checking cpp. -cat > conftest.C </dev/null 2>&1; then - ac_cv_prog_gxx=yes -else - ac_cv_prog_gxx=no -fi])]) - -dnl Test whether for Fortran 77 compiler is `g77' (the GNU Fortran 77 -dnl Compiler). This test depends on whether the Fortran 77 compiler can -dnl do CPP pre-processing. -dnl -dnl AC_PROG_F77_GNU() -AC_DEFUN(AC_PROG_F77_GNU, -[AC_CACHE_CHECK(whether we are using GNU Fortran 77, ac_cv_prog_g77, -[cat > conftest.fpp </dev/null 2>&1; then - ac_cv_prog_g77=yes -else - ac_cv_prog_g77=no -fi])]) - -AC_DEFUN(AC_PROG_CC_G, -[AC_CACHE_CHECK(whether ${CC-cc} accepts -g, ac_cv_prog_cc_g, -[echo 'void f(){}' > conftest.c -if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then - ac_cv_prog_cc_g=yes -else - ac_cv_prog_cc_g=no -fi -rm -f conftest* -])]) - -AC_DEFUN(AC_PROG_CXX_G, -[AC_CACHE_CHECK(whether ${CXX-g++} accepts -g, ac_cv_prog_cxx_g, -[echo 'void f(){}' > conftest.cc -if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then - ac_cv_prog_cxx_g=yes -else - ac_cv_prog_cxx_g=no -fi -rm -f conftest* -])]) - -dnl Test whether the Fortran 77 compiler can accept the `-g' option to -dnl enable debugging. -dnl -dnl AC_PROG_F77_G() -AC_DEFUN(AC_PROG_F77_G, -[AC_CACHE_CHECK(whether $F77 accepts -g, ac_cv_prog_f77_g, -[cat > conftest.f << EOF - program conftest - end -EOF -if test -z "`$F77 -g -c conftest.f 2>&1`"; then - ac_cv_prog_f77_g=yes -else - ac_cv_prog_f77_g=no -fi -rm -f conftest* -])]) - -AC_DEFUN(AC_PROG_GCC_TRADITIONAL, -[AC_REQUIRE([AC_PROG_CC])dnl -AC_REQUIRE([AC_PROG_CPP])dnl -if test $ac_cv_prog_gcc = yes; then - AC_CACHE_CHECK(whether ${CC-cc} needs -traditional, - ac_cv_prog_gcc_traditional, -[ ac_pattern="Autoconf.*'x'" - AC_EGREP_CPP($ac_pattern, [#include -Autoconf TIOCGETP], - ac_cv_prog_gcc_traditional=yes, ac_cv_prog_gcc_traditional=no) - - if test $ac_cv_prog_gcc_traditional = no; then - AC_EGREP_CPP($ac_pattern, [#include -Autoconf TCGETA], - ac_cv_prog_gcc_traditional=yes) - fi]) - if test $ac_cv_prog_gcc_traditional = yes; then - CC="$CC -traditional" - fi -fi -]) - -AC_DEFUN(AC_PROG_CC_C_O, -[if test "x$CC" != xcc; then - AC_MSG_CHECKING(whether $CC and cc understand -c and -o together) -else - AC_MSG_CHECKING(whether cc understands -c and -o together) -fi -set dummy $CC; ac_cc="`echo [$]2 | -changequote(, )dnl - sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" -changequote([, ])dnl -AC_CACHE_VAL(ac_cv_prog_cc_${ac_cc}_c_o, -[echo 'foo(){}' > conftest.c -# Make sure it works both with $CC and with simple cc. -# We do the test twice because some compilers refuse to overwrite an -# existing .o file with -o, though they will create one. -ac_try='${CC-cc} -c conftest.c -o conftest.o 1>&AC_FD_CC' -if AC_TRY_EVAL(ac_try) && - test -f conftest.o && AC_TRY_EVAL(ac_try); -then - eval ac_cv_prog_cc_${ac_cc}_c_o=yes - if test "x$CC" != xcc; then - # Test first that cc exists at all. - if AC_TRY_COMMAND(cc -c conftest.c 1>&AC_FD_CC); then - ac_try='cc -c conftest.c -o conftest.o 1>&AC_FD_CC' - if AC_TRY_EVAL(ac_try) && - test -f conftest.o && AC_TRY_EVAL(ac_try); - then - # cc works too. - : - else - # cc exists but doesn't like -o. - eval ac_cv_prog_cc_${ac_cc}_c_o=no - fi - fi - fi -else - eval ac_cv_prog_cc_${ac_cc}_c_o=no -fi -rm -f conftest* -])dnl -if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = yes"; then - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) - AC_DEFINE(NO_MINUS_C_MINUS_O) -fi -]) - -dnl Test if the Fortran 77 compiler accepts the options `-c' and `-o' -dnl simultaneously, and define `F77_NO_MINUS_C_MINUS_O' if it does not. -dnl -dnl The usefulness of this macro is questionable, as I can't really see -dnl why anyone would use it. The only reason I include it is for -dnl completeness, since a similar test exists for the C compiler. -dnl -dnl AC_PROG_F77_C_O -AC_DEFUN(AC_PROG_F77_C_O, -[AC_BEFORE([$0], [AC_PROG_F77])dnl -AC_MSG_CHECKING(whether $F77 understand -c and -o together) -set dummy $F77; ac_f77="`echo [$]2 | -changequote(, )dnl -sed -e 's/[^a-zA-Z0-9_]/_/g' -e 's/^[0-9]/_/'`" -changequote([, ])dnl -AC_CACHE_VAL(ac_cv_prog_f77_${ac_f77}_c_o, -[cat > conftest.f << EOF - program conftest - end -EOF -# We do the `AC_TRY_EVAL' test twice because some compilers refuse to -# overwrite an existing `.o' file with `-o', although they will create -# one. -ac_try='$F77 $FFLAGS -c conftest.f -o conftest.o 1>&AC_FD_CC' -if AC_TRY_EVAL(ac_try) && test -f conftest.o && AC_TRY_EVAL(ac_try); then - eval ac_cv_prog_f77_${ac_f77}_c_o=yes -else - eval ac_cv_prog_f77_${ac_f77}_c_o=no -fi -rm -f conftest* -])dnl -if eval "test \"`echo '$ac_cv_prog_f77_'${ac_f77}_c_o`\" = yes"; then - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) - AC_DEFINE(F77_NO_MINUS_C_MINUS_O) -fi -]) - -dnl Define SET_MAKE to set ${MAKE} if make doesn't. -AC_DEFUN(AC_PROG_MAKE_SET, -[AC_MSG_CHECKING(whether ${MAKE-make} sets \${MAKE}) -set dummy ${MAKE-make}; ac_make=`echo "[$]2" | sed 'y%./+-%__p_%'` -AC_CACHE_VAL(ac_cv_prog_make_${ac_make}_set, -[cat > conftestmake <<\EOF -all: - @echo 'ac_maketemp="${MAKE}"' -EOF -changequote(, )dnl -# GNU make sometimes prints "make[1]: Entering...", which would confuse us. -eval `${MAKE-make} -f conftestmake 2>/dev/null | grep temp=` -changequote([, ])dnl -if test -n "$ac_maketemp"; then - eval ac_cv_prog_make_${ac_make}_set=yes -else - eval ac_cv_prog_make_${ac_make}_set=no -fi -rm -f conftestmake])dnl -if eval "test \"`echo '$ac_cv_prog_make_'${ac_make}_set`\" = yes"; then - AC_MSG_RESULT(yes) - SET_MAKE= -else - AC_MSG_RESULT(no) - SET_MAKE="MAKE=${MAKE-make}" -fi -AC_SUBST([SET_MAKE])dnl -]) - -AC_DEFUN(AC_PROG_RANLIB, -[AC_CHECK_PROG(RANLIB, ranlib, ranlib, :)]) - -dnl Check for mawk first since it's generally faster. -AC_DEFUN(AC_PROG_AWK, -[AC_CHECK_PROGS(AWK, mawk gawk nawk awk, )]) - -AC_DEFUN(AC_PROG_YACC, -[AC_CHECK_PROGS(YACC, 'bison -y' byacc, yacc)]) - -AC_DEFUN(AC_PROG_CPP, -[AC_MSG_CHECKING(how to run the C preprocessor) -# On Suns, sometimes $CPP names a directory. -if test -n "$CPP" && test -d "$CPP"; then - CPP= -fi -if test -z "$CPP"; then -AC_CACHE_VAL(ac_cv_prog_CPP, -[ # This must be in double quotes, not single quotes, because CPP may get - # substituted into the Makefile and "${CC-cc}" will confuse make. - CPP="${CC-cc} -E" - # On the NeXT, cc -E runs the code through the compiler's parser, - # not just through cpp. -dnl Use a header file that comes with gcc, so configuring glibc -dnl with a fresh cross-compiler works. - AC_TRY_CPP([#include -Syntax Error], , - CPP="${CC-cc} -E -traditional-cpp" - AC_TRY_CPP([#include -Syntax Error], , - CPP="${CC-cc} -nologo -E" - AC_TRY_CPP([#include -Syntax Error], , CPP=/lib/cpp))) - ac_cv_prog_CPP="$CPP"])dnl - CPP="$ac_cv_prog_CPP" -else - ac_cv_prog_CPP="$CPP" -fi -AC_MSG_RESULT($CPP) -AC_SUBST(CPP)dnl -]) - -AC_DEFUN(AC_PROG_CXXCPP, -[AC_MSG_CHECKING(how to run the C++ preprocessor) -if test -z "$CXXCPP"; then -AC_CACHE_VAL(ac_cv_prog_CXXCPP, -[AC_LANG_SAVE[]dnl -AC_LANG_CPLUSPLUS[]dnl - CXXCPP="${CXX-g++} -E" - AC_TRY_CPP([#include ], , CXXCPP=/lib/cpp) - ac_cv_prog_CXXCPP="$CXXCPP" -AC_LANG_RESTORE[]dnl -fi])dnl -CXXCPP="$ac_cv_prog_CXXCPP" -AC_MSG_RESULT($CXXCPP) -AC_SUBST(CXXCPP)dnl -]) - -dnl Require finding the C or C++ preprocessor, whichever is the -dnl current language. -AC_DEFUN(AC_REQUIRE_CPP, -[ifelse(AC_LANG, C, [AC_REQUIRE([AC_PROG_CPP])], [AC_REQUIRE([AC_PROG_CXXCPP])])]) - -AC_DEFUN(AC_PROG_LEX, -[AC_CHECK_PROG(LEX, flex, flex, lex) -if test -z "$LEXLIB" -then - case "$LEX" in - flex*) ac_lib=fl ;; - *) ac_lib=l ;; - esac - AC_CHECK_LIB($ac_lib, yywrap, LEXLIB="-l$ac_lib") -fi -AC_SUBST(LEXLIB)]) - -dnl Check if lex declares yytext as a char * by default, not a char[]. -undefine([AC_DECL_YYTEXT]) -AC_DEFUN(AC_DECL_YYTEXT, -[AC_REQUIRE_CPP()dnl -AC_REQUIRE([AC_PROG_LEX])dnl -AC_CACHE_CHECK(lex output file root, ac_cv_prog_lex_root, -[# The minimal lex program is just a single line: %%. But some broken lexes -# (Solaris, I think it was) want two %% lines, so accommodate them. -echo '%% -%%' | $LEX -if test -f lex.yy.c; then - ac_cv_prog_lex_root=lex.yy -elif test -f lexyy.c; then - ac_cv_prog_lex_root=lexyy -else - AC_MSG_ERROR(cannot find output from $LEX; giving up) -fi]) -LEX_OUTPUT_ROOT=$ac_cv_prog_lex_root -AC_SUBST(LEX_OUTPUT_ROOT)dnl - -AC_CACHE_CHECK(whether yytext is a pointer, ac_cv_prog_lex_yytext_pointer, -[# POSIX says lex can declare yytext either as a pointer or an array; the -# default is implementation-dependent. Figure out which it is, since -# not all implementations provide the %pointer and %array declarations. -ac_cv_prog_lex_yytext_pointer=no -echo 'extern char *yytext;' >>$LEX_OUTPUT_ROOT.c -ac_save_LIBS="$LIBS" -LIBS="$LIBS $LEXLIB" -AC_TRY_LINK(`cat $LEX_OUTPUT_ROOT.c`, , ac_cv_prog_lex_yytext_pointer=yes) -LIBS="$ac_save_LIBS" -rm -f "${LEX_OUTPUT_ROOT}.c" -]) -dnl -if test $ac_cv_prog_lex_yytext_pointer = yes; then - AC_DEFINE(YYTEXT_POINTER) -fi -]) - -AC_DEFUN(AC_PROG_INSTALL, -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# ./install, which can be erroneously created by make from ./install.sh. -AC_MSG_CHECKING(for a BSD compatible install) -if test -z "$INSTALL"; then -AC_CACHE_VAL(ac_cv_path_install, -[ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" - for ac_dir in $PATH; do - # Account for people who put trailing slashes in PATH elements. - case "$ac_dir/" in - /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - if test -f $ac_dir/$ac_prog; then - if test $ac_prog = install && - grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - else - ac_cv_path_install="$ac_dir/$ac_prog -c" - break 2 - fi - fi - done - ;; - esac - done - IFS="$ac_save_IFS" -])dnl - if test "${ac_cv_path_install+set}" = set; then - INSTALL="$ac_cv_path_install" - else - # As a last resort, use the slow shell script. We don't cache a - # path for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the path is relative. - INSTALL="$ac_install_sh" - fi -fi -dnl We do special magic for INSTALL instead of AC_SUBST, to get -dnl relative paths right. -AC_MSG_RESULT($INSTALL) - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -AC_SUBST(INSTALL_PROGRAM)dnl - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' -AC_SUBST(INSTALL_SCRIPT)dnl - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -AC_SUBST(INSTALL_DATA)dnl -]) - -AC_DEFUN(AC_PROG_LN_S, -[AC_MSG_CHECKING(whether ln -s works) -AC_CACHE_VAL(ac_cv_prog_LN_S, -[rm -f conftestdata -if ln -s X conftestdata 2>/dev/null -then - rm -f conftestdata - ac_cv_prog_LN_S="ln -s" -else - ac_cv_prog_LN_S=ln -fi])dnl -LN_S="$ac_cv_prog_LN_S" -if test "$ac_cv_prog_LN_S" = "ln -s"; then - AC_MSG_RESULT(yes) -else - AC_MSG_RESULT(no) -fi -AC_SUBST(LN_S)dnl -]) - -define(AC_RSH, -[errprint(__file__:__line__: [$0] has been removed; replace it with equivalent code -)m4exit(4)]) - - -dnl ### Checks for header files - - -AC_DEFUN(AC_HEADER_STDC, -[AC_REQUIRE_CPP()dnl -AC_CACHE_CHECK(for ANSI C header files, ac_cv_header_stdc, -[AC_TRY_CPP([#include -#include -#include -#include ], ac_cv_header_stdc=yes, ac_cv_header_stdc=no) - -if test $ac_cv_header_stdc = yes; then - # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -AC_EGREP_HEADER(memchr, string.h, , ac_cv_header_stdc=no) -fi - -if test $ac_cv_header_stdc = yes; then - # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -AC_EGREP_HEADER(free, stdlib.h, , ac_cv_header_stdc=no) -fi - -if test $ac_cv_header_stdc = yes; then - # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -AC_TRY_RUN([#include -#define ISLOWER(c) ('a' <= (c) && (c) <= 'z') -#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) -#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) -int main () { int i; for (i = 0; i < 256; i++) -if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2); -exit (0); } -], , ac_cv_header_stdc=no, :) -fi]) -if test $ac_cv_header_stdc = yes; then - AC_DEFINE(STDC_HEADERS) -fi -]) - -AC_DEFUN(AC_UNISTD_H, -[AC_OBSOLETE([$0], [; instead use AC_CHECK_HEADERS(unistd.h)])dnl -AC_CHECK_HEADER(unistd.h, AC_DEFINE(HAVE_UNISTD_H))]) - -AC_DEFUN(AC_USG, -[AC_OBSOLETE([$0], - [; instead use AC_CHECK_HEADERS(string.h) and HAVE_STRING_H])dnl -AC_MSG_CHECKING([for BSD string and memory functions]) -AC_TRY_LINK([#include ], [rindex(0, 0); bzero(0, 0);], - [AC_MSG_RESULT(yes)], [AC_MSG_RESULT(no); AC_DEFINE(USG)])]) - - -dnl If memchr and the like aren't declared in , include . -dnl To avoid problems, don't check for gcc2 built-ins. -AC_DEFUN(AC_MEMORY_H, -[AC_OBSOLETE([$0], [; instead use AC_CHECK_HEADERS(memory.h) and HAVE_MEMORY_H])dnl -AC_MSG_CHECKING(whether string.h declares mem functions) -AC_EGREP_HEADER(memchr, string.h, ac_found=yes, ac_found=no) -AC_MSG_RESULT($ac_found) -if test $ac_found = no; then - AC_CHECK_HEADER(memory.h, [AC_DEFINE(NEED_MEMORY_H)]) -fi -]) - -AC_DEFUN(AC_HEADER_MAJOR, -[AC_CACHE_CHECK(whether sys/types.h defines makedev, - ac_cv_header_sys_types_h_makedev, -[AC_TRY_LINK([#include ], [return makedev(0, 0);], - ac_cv_header_sys_types_h_makedev=yes, ac_cv_header_sys_types_h_makedev=no) -]) - -if test $ac_cv_header_sys_types_h_makedev = no; then -AC_CHECK_HEADER(sys/mkdev.h, [AC_DEFINE(MAJOR_IN_MKDEV)]) - - if test $ac_cv_header_sys_mkdev_h = no; then -AC_CHECK_HEADER(sys/sysmacros.h, [AC_DEFINE(MAJOR_IN_SYSMACROS)]) - fi -fi -]) - -AC_DEFUN(AC_HEADER_DIRENT, -[ac_header_dirent=no -AC_CHECK_HEADERS_DIRENT(dirent.h sys/ndir.h sys/dir.h ndir.h, - [ac_header_dirent=$ac_hdr; break]) -# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix. -if test $ac_header_dirent = dirent.h; then -AC_CHECK_LIB(dir, opendir, LIBS="$LIBS -ldir") -else -AC_CHECK_LIB(x, opendir, LIBS="$LIBS -lx") -fi -]) - -dnl Like AC_CHECK_HEADER, except also make sure that HEADER-FILE -dnl defines the type `DIR'. dirent.h on NextStep 3.2 doesn't. -dnl AC_CHECK_HEADER_DIRENT(HEADER-FILE, ACTION-IF-FOUND) -AC_DEFUN(AC_CHECK_HEADER_DIRENT, -[ac_safe=`echo "$1" | sed 'y%./+-%__p_%'` -AC_MSG_CHECKING([for $1 that defines DIR]) -AC_CACHE_VAL(ac_cv_header_dirent_$ac_safe, -[AC_TRY_COMPILE([#include -#include <$1>], [DIR *dirp = 0;], - eval "ac_cv_header_dirent_$ac_safe=yes", - eval "ac_cv_header_dirent_$ac_safe=no")])dnl -if eval "test \"`echo '$ac_cv_header_dirent_'$ac_safe`\" = yes"; then - AC_MSG_RESULT(yes) - $2 -else - AC_MSG_RESULT(no) -fi -]) - -dnl Like AC_CHECK_HEADERS, except succeed only for a HEADER-FILE that -dnl defines `DIR'. -dnl AC_CHECK_HEADERS_DIRENT(HEADER-FILE... [, ACTION]) -define(AC_CHECK_HEADERS_DIRENT, -[for ac_hdr in $1 -do -AC_CHECK_HEADER_DIRENT($ac_hdr, -[changequote(, )dnl - ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'` -changequote([, ])dnl - AC_DEFINE_UNQUOTED($ac_tr_hdr) $2])dnl -done]) - -AC_DEFUN(AC_DIR_HEADER, -[AC_OBSOLETE([$0], [; instead use AC_HEADER_DIRENT])dnl -ac_header_dirent=no -for ac_hdr in dirent.h sys/ndir.h sys/dir.h ndir.h; do - AC_CHECK_HEADER_DIRENT($ac_hdr, [ac_header_dirent=$ac_hdr; break]) -done - -case "$ac_header_dirent" in -dirent.h) AC_DEFINE(DIRENT) ;; -sys/ndir.h) AC_DEFINE(SYSNDIR) ;; -sys/dir.h) AC_DEFINE(SYSDIR) ;; -ndir.h) AC_DEFINE(NDIR) ;; -esac - -AC_CACHE_CHECK(whether closedir returns void, ac_cv_func_closedir_void, -[AC_TRY_RUN([#include -#include <$ac_header_dirent> -int closedir(); main() { exit(closedir(opendir(".")) != 0); }], - ac_cv_func_closedir_void=no, ac_cv_func_closedir_void=yes, ac_cv_func_closedir_void=yes)]) -if test $ac_cv_func_closedir_void = yes; then - AC_DEFINE(VOID_CLOSEDIR) -fi -]) - -AC_DEFUN(AC_HEADER_STAT, -[AC_CACHE_CHECK(whether stat file-mode macros are broken, - ac_cv_header_stat_broken, -[AC_EGREP_CPP([You lose], [#include -#include - -#if defined(S_ISBLK) && defined(S_IFDIR) -# if S_ISBLK (S_IFDIR) -You lose. -# endif -#endif - -#if defined(S_ISBLK) && defined(S_IFCHR) -# if S_ISBLK (S_IFCHR) -You lose. -# endif -#endif - -#if defined(S_ISLNK) && defined(S_IFREG) -# if S_ISLNK (S_IFREG) -You lose. -# endif -#endif - -#if defined(S_ISSOCK) && defined(S_IFREG) -# if S_ISSOCK (S_IFREG) -You lose. -# endif -#endif -], ac_cv_header_stat_broken=yes, ac_cv_header_stat_broken=no)]) -if test $ac_cv_header_stat_broken = yes; then - AC_DEFINE(STAT_MACROS_BROKEN) -fi -]) - -AC_DEFUN(AC_DECL_SYS_SIGLIST, -[AC_CACHE_CHECK([for sys_siglist declaration in signal.h or unistd.h], - ac_cv_decl_sys_siglist, -[AC_TRY_COMPILE([#include -#include -/* NetBSD declares sys_siglist in unistd.h. */ -#ifdef HAVE_UNISTD_H -#include -#endif], [char *msg = *(sys_siglist + 1);], - ac_cv_decl_sys_siglist=yes, ac_cv_decl_sys_siglist=no)]) -if test $ac_cv_decl_sys_siglist = yes; then - AC_DEFINE(SYS_SIGLIST_DECLARED) -fi -]) - -AC_DEFUN(AC_HEADER_SYS_WAIT, -[AC_CACHE_CHECK([for sys/wait.h that is POSIX.1 compatible], - ac_cv_header_sys_wait_h, -[AC_TRY_COMPILE([#include -#include -#ifndef WEXITSTATUS -#define WEXITSTATUS(stat_val) ((unsigned)(stat_val) >> 8) -#endif -#ifndef WIFEXITED -#define WIFEXITED(stat_val) (((stat_val) & 255) == 0) -#endif], [int s; -wait (&s); -s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;], -ac_cv_header_sys_wait_h=yes, ac_cv_header_sys_wait_h=no)]) -if test $ac_cv_header_sys_wait_h = yes; then - AC_DEFINE(HAVE_SYS_WAIT_H) -fi -]) - - -dnl ### Checks for typedefs - - -AC_DEFUN(AC_TYPE_GETGROUPS, -[AC_REQUIRE([AC_TYPE_UID_T])dnl -AC_CACHE_CHECK(type of array argument to getgroups, ac_cv_type_getgroups, -[AC_TRY_RUN( -changequote(<<, >>)dnl -<< -/* Thanks to Mike Rendell for this test. */ -#include -#define NGID 256 -#undef MAX -#define MAX(x, y) ((x) > (y) ? (x) : (y)) -main() -{ - gid_t gidset[NGID]; - int i, n; - union { gid_t gval; long lval; } val; - - val.lval = -1; - for (i = 0; i < NGID; i++) - gidset[i] = val.gval; - n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, - gidset); - /* Exit non-zero if getgroups seems to require an array of ints. This - happens when gid_t is short but getgroups modifies an array of ints. */ - exit ((n > 0 && gidset[n] != val.gval) ? 1 : 0); -} ->>, -changequote([, ])dnl - ac_cv_type_getgroups=gid_t, ac_cv_type_getgroups=int, - ac_cv_type_getgroups=cross) -if test $ac_cv_type_getgroups = cross; then - dnl When we can't run the test program (we are cross compiling), presume - dnl that has either an accurate prototype for getgroups or none. - dnl Old systems without prototypes probably use int. - AC_EGREP_HEADER([getgroups.*int.*gid_t], unistd.h, - ac_cv_type_getgroups=gid_t, ac_cv_type_getgroups=int) -fi]) -AC_DEFINE_UNQUOTED(GETGROUPS_T, $ac_cv_type_getgroups) -]) - -AC_DEFUN(AC_TYPE_UID_T, -[AC_CACHE_CHECK(for uid_t in sys/types.h, ac_cv_type_uid_t, -[AC_EGREP_HEADER(uid_t, sys/types.h, - ac_cv_type_uid_t=yes, ac_cv_type_uid_t=no)]) -if test $ac_cv_type_uid_t = no; then - AC_DEFINE(uid_t, int) - AC_DEFINE(gid_t, int) -fi -]) - -AC_DEFUN(AC_TYPE_SIZE_T, -[AC_CHECK_TYPE(size_t, unsigned)]) - -AC_DEFUN(AC_TYPE_PID_T, -[AC_CHECK_TYPE(pid_t, int)]) - -AC_DEFUN(AC_TYPE_OFF_T, -[AC_CHECK_TYPE(off_t, long)]) - -AC_DEFUN(AC_TYPE_MODE_T, -[AC_CHECK_TYPE(mode_t, int)]) - -dnl Note that identifiers starting with SIG are reserved by ANSI C. -AC_DEFUN(AC_TYPE_SIGNAL, -[AC_CACHE_CHECK([return type of signal handlers], ac_cv_type_signal, -[AC_TRY_COMPILE([#include -#include -#ifdef signal -#undef signal -#endif -#ifdef __cplusplus -extern "C" void (*signal (int, void (*)(int)))(int); -#else -void (*signal ()) (); -#endif -], -[int i;], ac_cv_type_signal=void, ac_cv_type_signal=int)]) -AC_DEFINE_UNQUOTED(RETSIGTYPE, $ac_cv_type_signal) -]) - - -dnl ### Checks for functions - - -AC_DEFUN(AC_FUNC_CLOSEDIR_VOID, -[AC_REQUIRE([AC_HEADER_DIRENT])dnl -AC_CACHE_CHECK(whether closedir returns void, ac_cv_func_closedir_void, -[AC_TRY_RUN([#include -#include <$ac_header_dirent> -int closedir(); main() { exit(closedir(opendir(".")) != 0); }], - ac_cv_func_closedir_void=no, ac_cv_func_closedir_void=yes, ac_cv_func_closedir_void=yes)]) -if test $ac_cv_func_closedir_void = yes; then - AC_DEFINE(CLOSEDIR_VOID) -fi -]) - -AC_DEFUN(AC_FUNC_FNMATCH, -[AC_CACHE_CHECK(for working fnmatch, ac_cv_func_fnmatch_works, -# Some versions of Solaris or SCO have a broken fnmatch function. -# So we run a test program. If we are cross-compiling, take no chance. -# Thanks to John Oleynick and Franc,ois Pinard for this test. -[AC_TRY_RUN([main() { exit (fnmatch ("a*", "abc", 0) != 0); }], -ac_cv_func_fnmatch_works=yes, ac_cv_func_fnmatch_works=no, -ac_cv_func_fnmatch_works=no)]) -if test $ac_cv_func_fnmatch_works = yes; then - AC_DEFINE(HAVE_FNMATCH) -fi -]) - -AC_DEFUN(AC_FUNC_MMAP, -[AC_CHECK_HEADERS(unistd.h) -AC_CHECK_FUNCS(getpagesize) -AC_CACHE_CHECK(for working mmap, ac_cv_func_mmap_fixed_mapped, -[AC_TRY_RUN([ -/* Thanks to Mike Haertel and Jim Avera for this test. - Here is a matrix of mmap possibilities: - mmap private not fixed - mmap private fixed at somewhere currently unmapped - mmap private fixed at somewhere already mapped - mmap shared not fixed - mmap shared fixed at somewhere currently unmapped - mmap shared fixed at somewhere already mapped - For private mappings, we should verify that changes cannot be read() - back from the file, nor mmap's back from the file at a different - address. (There have been systems where private was not correctly - implemented like the infamous i386 svr4.0, and systems where the - VM page cache was not coherent with the filesystem buffer cache - like early versions of FreeBSD and possibly contemporary NetBSD.) - For shared mappings, we should conversely verify that changes get - propogated back to all the places they're supposed to be. - - Grep wants private fixed already mapped. - The main things grep needs to know about mmap are: - * does it exist and is it safe to write into the mmap'd area - * how to use it (BSD variants) */ -#include -#include -#include - -/* This mess was copied from the GNU getpagesize.h. */ -#ifndef HAVE_GETPAGESIZE -# ifdef HAVE_UNISTD_H -# include -# endif - -/* Assume that all systems that can run configure have sys/param.h. */ -# ifndef HAVE_SYS_PARAM_H -# define HAVE_SYS_PARAM_H 1 -# endif - -# ifdef _SC_PAGESIZE -# define getpagesize() sysconf(_SC_PAGESIZE) -# else /* no _SC_PAGESIZE */ -# ifdef HAVE_SYS_PARAM_H -# include -# ifdef EXEC_PAGESIZE -# define getpagesize() EXEC_PAGESIZE -# else /* no EXEC_PAGESIZE */ -# ifdef NBPG -# define getpagesize() NBPG * CLSIZE -# ifndef CLSIZE -# define CLSIZE 1 -# endif /* no CLSIZE */ -# else /* no NBPG */ -# ifdef NBPC -# define getpagesize() NBPC -# else /* no NBPC */ -# ifdef PAGESIZE -# define getpagesize() PAGESIZE -# endif /* PAGESIZE */ -# endif /* no NBPC */ -# endif /* no NBPG */ -# endif /* no EXEC_PAGESIZE */ -# else /* no HAVE_SYS_PARAM_H */ -# define getpagesize() 8192 /* punt totally */ -# endif /* no HAVE_SYS_PARAM_H */ -# endif /* no _SC_PAGESIZE */ - -#endif /* no HAVE_GETPAGESIZE */ - -#ifdef __cplusplus -extern "C" { void *malloc(unsigned); } -#else -char *malloc(); -#endif - -int -main() -{ - char *data, *data2, *data3; - int i, pagesize; - int fd; - - pagesize = getpagesize(); - - /* - * First, make a file with some known garbage in it. - */ - data = malloc(pagesize); - if (!data) - exit(1); - for (i = 0; i < pagesize; ++i) - *(data + i) = rand(); - umask(0); - fd = creat("conftestmmap", 0600); - if (fd < 0) - exit(1); - if (write(fd, data, pagesize) != pagesize) - exit(1); - close(fd); - - /* - * Next, try to mmap the file at a fixed address which - * already has something else allocated at it. If we can, - * also make sure that we see the same garbage. - */ - fd = open("conftestmmap", O_RDWR); - if (fd < 0) - exit(1); - data2 = malloc(2 * pagesize); - if (!data2) - exit(1); - data2 += (pagesize - ((int) data2 & (pagesize - 1))) & (pagesize - 1); - if (data2 != mmap(data2, pagesize, PROT_READ | PROT_WRITE, - MAP_PRIVATE | MAP_FIXED, fd, 0L)) - exit(1); - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data2 + i)) - exit(1); - - /* - * Finally, make sure that changes to the mapped area - * do not percolate back to the file as seen by read(). - * (This is a bug on some variants of i386 svr4.0.) - */ - for (i = 0; i < pagesize; ++i) - *(data2 + i) = *(data2 + i) + 1; - data3 = malloc(pagesize); - if (!data3) - exit(1); - if (read(fd, data3, pagesize) != pagesize) - exit(1); - for (i = 0; i < pagesize; ++i) - if (*(data + i) != *(data3 + i)) - exit(1); - close(fd); - unlink("conftestmmap"); - exit(0); -} -], ac_cv_func_mmap_fixed_mapped=yes, ac_cv_func_mmap_fixed_mapped=no, -ac_cv_func_mmap_fixed_mapped=no)]) -if test $ac_cv_func_mmap_fixed_mapped = yes; then - AC_DEFINE(HAVE_MMAP) -fi -]) - -AC_DEFUN(AC_FUNC_GETPGRP, -[AC_CACHE_CHECK(whether getpgrp takes no argument, ac_cv_func_getpgrp_void, -[AC_TRY_RUN([ -/* - * If this system has a BSD-style getpgrp(), - * which takes a pid argument, exit unsuccessfully. - * - * Snarfed from Chet Ramey's bash pgrp.c test program - */ -#include -#include - -int pid; -int pg1, pg2, pg3, pg4; -int ng, np, s, child; - -main() -{ - pid = getpid(); - pg1 = getpgrp(0); - pg2 = getpgrp(); - pg3 = getpgrp(pid); - pg4 = getpgrp(1); - - /* - * If all of these values are the same, it's pretty sure that - * we're on a system that ignores getpgrp's first argument. - */ - if (pg2 == pg4 && pg1 == pg3 && pg2 == pg3) - exit(0); - - child = fork(); - if (child < 0) - exit(1); - else if (child == 0) { - np = getpid(); - /* - * If this is Sys V, this will not work; pgrp will be - * set to np because setpgrp just changes a pgrp to be - * the same as the pid. - */ - setpgrp(np, pg1); - ng = getpgrp(0); /* Same result for Sys V and BSD */ - if (ng == pg1) { - exit(1); - } else { - exit(0); - } - } else { - wait(&s); - exit(s>>8); - } -} -], ac_cv_func_getpgrp_void=yes, ac_cv_func_getpgrp_void=no, - AC_MSG_ERROR(cannot check getpgrp if cross compiling)) -]) -if test $ac_cv_func_getpgrp_void = yes; then - AC_DEFINE(GETPGRP_VOID) -fi -]) - -AC_DEFUN(AC_FUNC_SETPGRP, -[AC_CACHE_CHECK(whether setpgrp takes no argument, ac_cv_func_setpgrp_void, -AC_TRY_RUN([ -#ifdef HAVE_UNISTD_H -#include -#endif - -/* - * If this system has a BSD-style setpgrp, which takes arguments, exit - * successfully. - */ -main() -{ - if (setpgrp(1,1) == -1) - exit(0); - else - exit(1); -} -], ac_cv_func_setpgrp_void=no, ac_cv_func_setpgrp_void=yes, - AC_MSG_ERROR(cannot check setpgrp if cross compiling)) -) -if test $ac_cv_func_setpgrp_void = yes; then - AC_DEFINE(SETPGRP_VOID) -fi -]) - -AC_DEFUN(AC_FUNC_VPRINTF, -[AC_CHECK_FUNC(vprintf, AC_DEFINE(HAVE_VPRINTF)) -if test "$ac_cv_func_vprintf" != yes; then -AC_CHECK_FUNC(_doprnt, AC_DEFINE(HAVE_DOPRNT)) -fi -]) - -AC_DEFUN(AC_FUNC_VFORK, -[AC_REQUIRE([AC_TYPE_PID_T])dnl -AC_CHECK_HEADER(vfork.h, AC_DEFINE(HAVE_VFORK_H)) -AC_CACHE_CHECK(for working vfork, ac_cv_func_vfork_works, -[AC_TRY_RUN([/* Thanks to Paul Eggert for this test. */ -#include -#include -#include -#ifdef HAVE_UNISTD_H -#include -#endif -#ifdef HAVE_VFORK_H -#include -#endif -/* On some sparc systems, changes by the child to local and incoming - argument registers are propagated back to the parent. - The compiler is told about this with #include , - but some compilers (e.g. gcc -O) don't grok . - Test for this by using a static variable whose address - is put into a register that is clobbered by the vfork. */ -static -#ifdef __cplusplus -sparc_address_test (int arg) -#else -sparc_address_test (arg) int arg; -#endif -{ - static pid_t child; - if (!child) { - child = vfork (); - if (child < 0) { - perror ("vfork"); - _exit(2); - } - if (!child) { - arg = getpid(); - write(-1, "", 0); - _exit (arg); - } - } -} -main() { - pid_t parent = getpid (); - pid_t child; - - sparc_address_test (); - - child = vfork (); - - if (child == 0) { - /* Here is another test for sparc vfork register problems. - This test uses lots of local variables, at least - as many local variables as main has allocated so far - including compiler temporaries. 4 locals are enough for - gcc 1.40.3 on a Solaris 4.1.3 sparc, but we use 8 to be safe. - A buggy compiler should reuse the register of parent - for one of the local variables, since it will think that - parent can't possibly be used any more in this routine. - Assigning to the local variable will thus munge parent - in the parent process. */ - pid_t - p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(), - p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid(); - /* Convince the compiler that p..p7 are live; otherwise, it might - use the same hardware register for all 8 local variables. */ - if (p != p1 || p != p2 || p != p3 || p != p4 - || p != p5 || p != p6 || p != p7) - _exit(1); - - /* On some systems (e.g. IRIX 3.3), - vfork doesn't separate parent from child file descriptors. - If the child closes a descriptor before it execs or exits, - this munges the parent's descriptor as well. - Test for this by closing stdout in the child. */ - _exit(close(fileno(stdout)) != 0); - } else { - int status; - struct stat st; - - while (wait(&status) != child) - ; - exit( - /* Was there some problem with vforking? */ - child < 0 - - /* Did the child fail? (This shouldn't happen.) */ - || status - - /* Did the vfork/compiler bug occur? */ - || parent != getpid() - - /* Did the file descriptor bug occur? */ - || fstat(fileno(stdout), &st) != 0 - ); - } -}], -ac_cv_func_vfork_works=yes, ac_cv_func_vfork_works=no, AC_CHECK_FUNC(vfork) -ac_cv_func_vfork_works=$ac_cv_func_vfork)]) -if test $ac_cv_func_vfork_works = no; then - AC_DEFINE(vfork, fork) -fi -]) - -AC_DEFUN(AC_FUNC_WAIT3, -[AC_CACHE_CHECK(for wait3 that fills in rusage, ac_cv_func_wait3_rusage, -[AC_TRY_RUN([#include -#include -#include -#include -/* HP-UX has wait3 but does not fill in rusage at all. */ -main() { - struct rusage r; - int i; - /* Use a field that we can force nonzero -- - voluntary context switches. - For systems like NeXT and OSF/1 that don't set it, - also use the system CPU time. And page faults (I/O) for Linux. */ - r.ru_nvcsw = 0; - r.ru_stime.tv_sec = 0; - r.ru_stime.tv_usec = 0; - r.ru_majflt = r.ru_minflt = 0; - switch (fork()) { - case 0: /* Child. */ - sleep(1); /* Give up the CPU. */ - _exit(0); - case -1: _exit(0); /* What can we do? */ - default: /* Parent. */ - wait3(&i, 0, &r); - sleep(2); /* Avoid "text file busy" from rm on fast HP-UX machines. */ - exit(r.ru_nvcsw == 0 && r.ru_majflt == 0 && r.ru_minflt == 0 - && r.ru_stime.tv_sec == 0 && r.ru_stime.tv_usec == 0); - } -}], ac_cv_func_wait3_rusage=yes, ac_cv_func_wait3_rusage=no, -ac_cv_func_wait3_rusage=no)]) -if test $ac_cv_func_wait3_rusage = yes; then - AC_DEFINE(HAVE_WAIT3) -fi -]) - -AC_DEFUN(AC_FUNC_ALLOCA, -[AC_REQUIRE_CPP()dnl Set CPP; we run AC_EGREP_CPP conditionally. -# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works -# for constant arguments. Useless! -AC_CACHE_CHECK([for working alloca.h], ac_cv_header_alloca_h, -[AC_TRY_LINK([#include ], [char *p = alloca(2 * sizeof(int));], - ac_cv_header_alloca_h=yes, ac_cv_header_alloca_h=no)]) -if test $ac_cv_header_alloca_h = yes; then - AC_DEFINE(HAVE_ALLOCA_H) -fi - -AC_CACHE_CHECK([for alloca], ac_cv_func_alloca_works, -[AC_TRY_LINK([ -#ifdef __GNUC__ -# define alloca __builtin_alloca -#else -# ifdef _MSC_VER -# include -# define alloca _alloca -# else -# if HAVE_ALLOCA_H -# include -# else -# ifdef _AIX - #pragma alloca -# else -# ifndef alloca /* predefined by HP cc +Olibcalls */ -char *alloca (); -# endif -# endif -# endif -# endif -#endif -], [char *p = (char *) alloca(1);], - ac_cv_func_alloca_works=yes, ac_cv_func_alloca_works=no)]) -if test $ac_cv_func_alloca_works = yes; then - AC_DEFINE(HAVE_ALLOCA) -fi - -if test $ac_cv_func_alloca_works = no; then - # The SVR3 libPW and SVR4 libucb both contain incompatible functions - # that cause trouble. Some versions do not even contain alloca or - # contain a buggy version. If you still want to use their alloca, - # use ar to extract alloca.o from them instead of compiling alloca.c. - ALLOCA=alloca.${ac_objext} - AC_DEFINE(C_ALLOCA) - -AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray, -[AC_EGREP_CPP(webecray, -[#if defined(CRAY) && ! defined(CRAY2) -webecray -#else -wenotbecray -#endif -], ac_cv_os_cray=yes, ac_cv_os_cray=no)]) -if test $ac_cv_os_cray = yes; then -for ac_func in _getb67 GETB67 getb67; do - AC_CHECK_FUNC($ac_func, [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func) - break]) -done -fi - -AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction, -[AC_TRY_RUN([find_stack_direction () -{ - static char *addr = 0; - auto char dummy; - if (addr == 0) - { - addr = &dummy; - return find_stack_direction (); - } - else - return (&dummy > addr) ? 1 : -1; -} -main () -{ - exit (find_stack_direction() < 0); -}], ac_cv_c_stack_direction=1, ac_cv_c_stack_direction=-1, - ac_cv_c_stack_direction=0)]) -AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) -fi -AC_SUBST(ALLOCA)dnl -]) - -AC_DEFUN(AC_FUNC_GETLOADAVG, -[ac_have_func=no # yes means we've found a way to get the load average. - -# Some systems with -lutil have (and need) -lkvm as well, some do not. -# On Solaris, -lkvm requires nlist from -lelf, so check that first -# to get the right answer into the cache. -AC_CHECK_LIB(elf, elf_begin, LIBS="-lelf $LIBS") -AC_CHECK_LIB(kvm, kvm_open, LIBS="-lkvm $LIBS") -# Check for the 4.4BSD definition of getloadavg. -AC_CHECK_LIB(util, getloadavg, - [LIBS="-lutil $LIBS" ac_have_func=yes ac_cv_func_getloadavg_setgid=yes]) - -if test $ac_have_func = no; then - # There is a commonly available library for RS/6000 AIX. - # Since it is not a standard part of AIX, it might be installed locally. - ac_getloadavg_LIBS="$LIBS"; LIBS="-L/usr/local/lib $LIBS" - AC_CHECK_LIB(getloadavg, getloadavg, - LIBS="-lgetloadavg $LIBS", LIBS="$ac_getloadavg_LIBS") -fi - -# Make sure it is really in the library, if we think we found it. -AC_REPLACE_FUNCS(getloadavg) - -if test $ac_cv_func_getloadavg = yes; then - AC_DEFINE(HAVE_GETLOADAVG) - ac_have_func=yes -else - # Figure out what our getloadavg.c needs. - ac_have_func=no - AC_CHECK_HEADER(sys/dg_sys_info.h, - [ac_have_func=yes; AC_DEFINE(DGUX) - AC_CHECK_LIB(dgc, dg_sys_info)]) - - # We cannot check for , because Solaris 2 does not use dwarf (it - # uses stabs), but it is still SVR4. We cannot check for because - # Irix 4.0.5F has the header but not the library. - if test $ac_have_func = no && test $ac_cv_lib_elf_elf_begin = yes; then - ac_have_func=yes; AC_DEFINE(SVR4) - fi - - if test $ac_have_func = no; then - AC_CHECK_HEADER(inq_stats/cpustats.h, - [ac_have_func=yes; AC_DEFINE(UMAX) - AC_DEFINE(UMAX4_3)]) - fi - - if test $ac_have_func = no; then - AC_CHECK_HEADER(sys/cpustats.h, - [ac_have_func=yes; AC_DEFINE(UMAX)]) - fi - - if test $ac_have_func = no; then - AC_CHECK_HEADERS(mach/mach.h) - fi - - AC_CHECK_HEADER(nlist.h, - [AC_DEFINE(NLIST_STRUCT) - AC_CACHE_CHECK([for n_un in struct nlist], ac_cv_struct_nlist_n_un, - [AC_TRY_COMPILE([#include ], - [struct nlist n; n.n_un.n_name = 0;], - ac_cv_struct_nlist_n_un=yes, ac_cv_struct_nlist_n_un=no)]) - if test $ac_cv_struct_nlist_n_un = yes; then - AC_DEFINE(NLIST_NAME_UNION) - fi - ])dnl -fi # Do not have getloadavg in system libraries. - -# Some definitions of getloadavg require that the program be installed setgid. -dnl FIXME Don't hardwire the path of getloadavg.c in the top-level directory. -AC_CACHE_CHECK(whether getloadavg requires setgid, - ac_cv_func_getloadavg_setgid, -[AC_EGREP_CPP([Yowza Am I SETGID yet], -[#include "$srcdir/getloadavg.c" -#ifdef LDAV_PRIVILEGED -Yowza Am I SETGID yet -#endif], - ac_cv_func_getloadavg_setgid=yes, ac_cv_func_getloadavg_setgid=no)]) -if test $ac_cv_func_getloadavg_setgid = yes; then - NEED_SETGID=true; AC_DEFINE(GETLOADAVG_PRIVILEGED) -else - NEED_SETGID=false -fi -AC_SUBST(NEED_SETGID)dnl - -if test $ac_cv_func_getloadavg_setgid = yes; then - AC_CACHE_CHECK(group of /dev/kmem, ac_cv_group_kmem, -[changequote(, )dnl - # On Solaris, /dev/kmem is a symlink. Get info on the real file. - ac_ls_output=`ls -lgL /dev/kmem 2>/dev/null` - # If we got an error (system does not support symlinks), try without -L. - test -z "$ac_ls_output" && ac_ls_output=`ls -lg /dev/kmem` - ac_cv_group_kmem=`echo $ac_ls_output \ - | sed -ne 's/[ ][ ]*/ /g; - s/^.[sSrwx-]* *[0-9]* *\([^0-9]*\) *.*/\1/; - / /s/.* //;p;'` -changequote([, ])dnl -]) - KMEM_GROUP=$ac_cv_group_kmem -fi -AC_SUBST(KMEM_GROUP)dnl -]) - -AC_DEFUN(AC_FUNC_UTIME_NULL, -[AC_CACHE_CHECK(whether utime accepts a null argument, ac_cv_func_utime_null, -[rm -f conftestdata; > conftestdata -# Sequent interprets utime(file, 0) to mean use start of epoch. Wrong. -AC_TRY_RUN([#include -#include -main() { -struct stat s, t; -exit(!(stat ("conftestdata", &s) == 0 && utime("conftestdata", (long *)0) == 0 -&& stat("conftestdata", &t) == 0 && t.st_mtime >= s.st_mtime -&& t.st_mtime - s.st_mtime < 120)); -}], ac_cv_func_utime_null=yes, ac_cv_func_utime_null=no, - ac_cv_func_utime_null=no) -rm -f core core.* *.core]) -if test $ac_cv_func_utime_null = yes; then - AC_DEFINE(HAVE_UTIME_NULL) -fi -]) - -AC_DEFUN(AC_FUNC_STRCOLL, -[AC_CACHE_CHECK(for working strcoll, ac_cv_func_strcoll_works, -[AC_TRY_RUN([#include -main () -{ - exit (strcoll ("abc", "def") >= 0 || - strcoll ("ABC", "DEF") >= 0 || - strcoll ("123", "456") >= 0); -}], ac_cv_func_strcoll_works=yes, ac_cv_func_strcoll_works=no, -ac_cv_func_strcoll_works=no)]) -if test $ac_cv_func_strcoll_works = yes; then - AC_DEFINE(HAVE_STRCOLL) -fi -]) - -AC_DEFUN(AC_FUNC_SETVBUF_REVERSED, -[AC_CACHE_CHECK(whether setvbuf arguments are reversed, - ac_cv_func_setvbuf_reversed, -[AC_TRY_RUN([#include -/* If setvbuf has the reversed format, exit 0. */ -main () { - /* This call has the arguments reversed. - A reversed system may check and see that the address of main - is not _IOLBF, _IONBF, or _IOFBF, and return nonzero. */ - if (setvbuf(stdout, _IOLBF, (char *) main, BUFSIZ) != 0) - exit(1); - putc('\r', stdout); - exit(0); /* Non-reversed systems segv here. */ -}], ac_cv_func_setvbuf_reversed=yes, ac_cv_func_setvbuf_reversed=no) -rm -f core core.* *.core]) -if test $ac_cv_func_setvbuf_reversed = yes; then - AC_DEFINE(SETVBUF_REVERSED) -fi -]) - -AC_DEFUN(AC_FUNC_GETMNTENT, -[# getmntent is in -lsun on Irix 4, -lseq on Dynix/PTX, -lgen on Unixware. -AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS", - [AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS", - [AC_CHECK_LIB(gen, getmntent, LIBS="-lgen $LIBS")])]) -AC_CHECK_FUNC(getmntent, [AC_DEFINE(HAVE_GETMNTENT)])]) - -AC_DEFUN(AC_FUNC_STRFTIME, -[AC_CHECK_FUNC(strftime, [AC_DEFINE(HAVE_STRFTIME)], -[# strftime is in -lintl on SCO UNIX. -AC_CHECK_LIB(intl, strftime, -[AC_DEFINE(HAVE_STRFTIME) -LIBS="-lintl $LIBS"])])]) - -AC_DEFUN(AC_FUNC_MEMCMP, -[AC_CACHE_CHECK(for 8-bit clean memcmp, ac_cv_func_memcmp_clean, -[AC_TRY_RUN([ -main() -{ - char c0 = 0x40, c1 = 0x80, c2 = 0x81; - exit(memcmp(&c0, &c2, 1) < 0 && memcmp(&c1, &c2, 1) < 0 ? 0 : 1); -} -], ac_cv_func_memcmp_clean=yes, ac_cv_func_memcmp_clean=no, -ac_cv_func_memcmp_clean=no)]) -test $ac_cv_func_memcmp_clean = no && LIBOBJS="$LIBOBJS memcmp.${ac_objext}" -AC_SUBST(LIBOBJS)dnl -]) - -AC_DEFUN(AC_FUNC_SELECT_ARGTYPES, -[AC_MSG_CHECKING([types of arguments for select()]) - AC_CACHE_VAL(ac_cv_func_select_arg234,dnl - [AC_CACHE_VAL(ac_cv_func_select_arg1,dnl - [AC_CACHE_VAL(ac_cv_func_select_arg5,dnl - [for ac_cv_func_select_arg234 in 'fd_set *' 'int *' 'void *'; do - for ac_cv_func_select_arg1 in 'int' 'size_t' 'unsigned long' 'unsigned'; do - for ac_cv_func_select_arg5 in 'struct timeval *' 'const struct timeval *'; do - AC_TRY_COMPILE(dnl -[#ifdef HAVE_SYS_TYPES_H -#include -#endif -#ifdef HAVE_SYS_TIME_H -#include -#endif -#ifdef HAVE_SYS_SELECT_H -#include -#endif -#ifdef HAVE_SYS_SOCKET_H -#include -#endif -extern select ($ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5);],,dnl - [ac_not_found=no ; break 3],ac_not_found=yes) - done - done - done - ])dnl AC_CACHE_VAL - ])dnl AC_CACHE_VAL - ])dnl AC_CACHE_VAL - if test "$ac_not_found" = yes; then - ac_cv_func_select_arg1=int - ac_cv_func_select_arg234='int *' - ac_cv_func_select_arg5='struct timeval *' - fi - AC_MSG_RESULT([$ac_cv_func_select_arg1,$ac_cv_func_select_arg234,$ac_cv_func_select_arg5]) - AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG1,$ac_cv_func_select_arg1) - AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG234,($ac_cv_func_select_arg234)) - AC_DEFINE_UNQUOTED(SELECT_TYPE_ARG5,($ac_cv_func_select_arg5)) -]) - - -dnl ### Checks for structure members - - -AC_DEFUN(AC_HEADER_TIME, -[AC_CACHE_CHECK([whether time.h and sys/time.h may both be included], - ac_cv_header_time, -[AC_TRY_COMPILE([#include -#include -#include ], -[struct tm *tp;], ac_cv_header_time=yes, ac_cv_header_time=no)]) -if test $ac_cv_header_time = yes; then - AC_DEFINE(TIME_WITH_SYS_TIME) -fi -]) - -AC_DEFUN(AC_STRUCT_TM, -[AC_CACHE_CHECK([whether struct tm is in sys/time.h or time.h], - ac_cv_struct_tm, -[AC_TRY_COMPILE([#include -#include ], -[struct tm *tp; tp->tm_sec;], - ac_cv_struct_tm=time.h, ac_cv_struct_tm=sys/time.h)]) -if test $ac_cv_struct_tm = sys/time.h; then - AC_DEFINE(TM_IN_SYS_TIME) -fi -]) - -AC_DEFUN(AC_STRUCT_TIMEZONE, -[AC_REQUIRE([AC_STRUCT_TM])dnl -AC_CACHE_CHECK([for tm_zone in struct tm], ac_cv_struct_tm_zone, -[AC_TRY_COMPILE([#include -#include <$ac_cv_struct_tm>], [struct tm tm; tm.tm_zone;], - ac_cv_struct_tm_zone=yes, ac_cv_struct_tm_zone=no)]) -if test "$ac_cv_struct_tm_zone" = yes; then - AC_DEFINE(HAVE_TM_ZONE) -else - AC_CACHE_CHECK(for tzname, ac_cv_var_tzname, -[AC_TRY_LINK( -changequote(<<, >>)dnl -<<#include -#ifndef tzname /* For SGI. */ -extern char *tzname[]; /* RS6000 and others reject char **tzname. */ -#endif>>, -changequote([, ])dnl -[atoi(*tzname);], ac_cv_var_tzname=yes, ac_cv_var_tzname=no)]) - if test $ac_cv_var_tzname = yes; then - AC_DEFINE(HAVE_TZNAME) - fi -fi -]) - -AC_DEFUN(AC_STRUCT_ST_BLOCKS, -[AC_CACHE_CHECK([for st_blocks in struct stat], ac_cv_struct_st_blocks, -[AC_TRY_COMPILE([#include -#include ], [struct stat s; s.st_blocks;], -ac_cv_struct_st_blocks=yes, ac_cv_struct_st_blocks=no)]) -if test $ac_cv_struct_st_blocks = yes; then - AC_DEFINE(HAVE_ST_BLOCKS) -else - LIBOBJS="$LIBOBJS fileblocks.${ac_objext}" -fi -AC_SUBST(LIBOBJS)dnl -]) - -AC_DEFUN(AC_STRUCT_ST_BLKSIZE, -[AC_CACHE_CHECK([for st_blksize in struct stat], ac_cv_struct_st_blksize, -[AC_TRY_COMPILE([#include -#include ], [struct stat s; s.st_blksize;], -ac_cv_struct_st_blksize=yes, ac_cv_struct_st_blksize=no)]) -if test $ac_cv_struct_st_blksize = yes; then - AC_DEFINE(HAVE_ST_BLKSIZE) -fi -]) - -AC_DEFUN(AC_STRUCT_ST_RDEV, -[AC_CACHE_CHECK([for st_rdev in struct stat], ac_cv_struct_st_rdev, -[AC_TRY_COMPILE([#include -#include ], [struct stat s; s.st_rdev;], -ac_cv_struct_st_rdev=yes, ac_cv_struct_st_rdev=no)]) -if test $ac_cv_struct_st_rdev = yes; then - AC_DEFINE(HAVE_ST_RDEV) -fi -]) - - -dnl ### Checks for compiler characteristics - - -AC_DEFUN(AC_C_CROSS, -[AC_OBSOLETE([$0], [; it has been merged into AC_PROG_CC])]) - -AC_DEFUN(AC_C_CHAR_UNSIGNED, -[AC_CACHE_CHECK(whether char is unsigned, ac_cv_c_char_unsigned, -[if test "$GCC" = yes; then - # GCC predefines this symbol on systems where it applies. -AC_EGREP_CPP(yes, -[#ifdef __CHAR_UNSIGNED__ - yes -#endif -], ac_cv_c_char_unsigned=yes, ac_cv_c_char_unsigned=no) -else -AC_TRY_RUN( -[/* volatile prevents gcc2 from optimizing the test away on sparcs. */ -#if !defined(__STDC__) || __STDC__ != 1 -#define volatile -#endif -main() { - volatile char c = 255; exit(c < 0); -}], ac_cv_c_char_unsigned=yes, ac_cv_c_char_unsigned=no) -fi]) -if test $ac_cv_c_char_unsigned = yes && test "$GCC" != yes; then - AC_DEFINE(__CHAR_UNSIGNED__) -fi -]) - -AC_DEFUN(AC_C_LONG_DOUBLE, -[AC_CACHE_CHECK(for long double, ac_cv_c_long_double, -[if test "$GCC" = yes; then - ac_cv_c_long_double=yes -else -AC_TRY_RUN([int main() { -/* The Stardent Vistra knows sizeof(long double), but does not support it. */ -long double foo = 0.0; -/* On Ultrix 4.3 cc, long double is 4 and double is 8. */ -exit(sizeof(long double) < sizeof(double)); }], -ac_cv_c_long_double=yes, ac_cv_c_long_double=no) -fi]) -if test $ac_cv_c_long_double = yes; then - AC_DEFINE(HAVE_LONG_DOUBLE) -fi -]) - -AC_DEFUN(AC_INT_16_BITS, -[AC_OBSOLETE([$0], [; instead use AC_CHECK_SIZEOF(int)])dnl -AC_MSG_CHECKING(whether int is 16 bits) -AC_TRY_RUN([main() { exit(sizeof(int) != 2); }], - [AC_MSG_RESULT(yes) - AC_DEFINE(INT_16_BITS)], AC_MSG_RESULT(no)) -]) - -AC_DEFUN(AC_LONG_64_BITS, -[AC_OBSOLETE([$0], [; instead use AC_CHECK_SIZEOF(long)])dnl -AC_MSG_CHECKING(whether long int is 64 bits) -AC_TRY_RUN([main() { exit(sizeof(long int) != 8); }], - [AC_MSG_RESULT(yes) - AC_DEFINE(LONG_64_BITS)], AC_MSG_RESULT(no)) -]) - -AC_DEFUN(AC_C_BIGENDIAN, -[AC_CACHE_CHECK(whether byte ordering is bigendian, ac_cv_c_bigendian, -[ac_cv_c_bigendian=unknown -# See if sys/param.h defines the BYTE_ORDER macro. -AC_TRY_COMPILE([#include -#include ], [ -#if !BYTE_ORDER || !BIG_ENDIAN || !LITTLE_ENDIAN - bogus endian macros -#endif], [# It does; now see whether it defined to BIG_ENDIAN or not. -AC_TRY_COMPILE([#include -#include ], [ -#if BYTE_ORDER != BIG_ENDIAN - not big endian -#endif], ac_cv_c_bigendian=yes, ac_cv_c_bigendian=no)]) -if test $ac_cv_c_bigendian = unknown; then -AC_TRY_RUN([main () { - /* Are we little or big endian? From Harbison&Steele. */ - union - { - long l; - char c[sizeof (long)]; - } u; - u.l = 1; - exit (u.c[sizeof (long) - 1] == 1); -}], ac_cv_c_bigendian=no, ac_cv_c_bigendian=yes) -fi]) -if test $ac_cv_c_bigendian = yes; then - AC_DEFINE(WORDS_BIGENDIAN) -fi -]) - -dnl Do nothing if the compiler accepts the inline keyword. -dnl Otherwise define inline to __inline__ or __inline if one of those work, -dnl otherwise define inline to be empty. -AC_DEFUN(AC_C_INLINE, -[AC_CACHE_CHECK([for inline], ac_cv_c_inline, -[ac_cv_c_inline=no -for ac_kw in inline __inline__ __inline; do - AC_TRY_COMPILE(, [} $ac_kw foo() {], [ac_cv_c_inline=$ac_kw; break]) -done -]) -case "$ac_cv_c_inline" in - inline | yes) ;; - no) AC_DEFINE(inline, ) ;; - *) AC_DEFINE_UNQUOTED(inline, $ac_cv_c_inline) ;; -esac -]) - -AC_DEFUN(AC_C_CONST, -[dnl This message is consistent in form with the other checking messages, -dnl and with the result message. -AC_CACHE_CHECK([for working const], ac_cv_c_const, -[AC_TRY_COMPILE(, -changequote(<<, >>)dnl -<< -/* Ultrix mips cc rejects this. */ -typedef int charset[2]; const charset x; -/* SunOS 4.1.1 cc rejects this. */ -char const *const *ccp; -char **p; -/* NEC SVR4.0.2 mips cc rejects this. */ -struct point {int x, y;}; -static struct point const zero = {0,0}; -/* AIX XL C 1.02.0.0 rejects this. - It does not let you subtract one const X* pointer from another in an arm - of an if-expression whose if-part is not a constant expression */ -const char *g = "string"; -ccp = &g + (g ? g-g : 0); -/* HPUX 7.0 cc rejects these. */ -++ccp; -p = (char**) ccp; -ccp = (char const *const *) p; -{ /* SCO 3.2v4 cc rejects this. */ - char *t; - char const *s = 0 ? (char *) 0 : (char const *) 0; - - *t++ = 0; -} -{ /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ - int x[] = {25, 17}; - const int *foo = &x[0]; - ++foo; -} -{ /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ - typedef const int *iptr; - iptr p = 0; - ++p; -} -{ /* AIX XL C 1.02.0.0 rejects this saying - "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ - struct s { int j; const int *ap[3]; }; - struct s *b; b->j = 5; -} -{ /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ - const int foo = 10; -} ->>, -changequote([, ])dnl -ac_cv_c_const=yes, ac_cv_c_const=no)]) -if test $ac_cv_c_const = no; then - AC_DEFINE(const, ) -fi -]) - -AC_DEFUN(AC_C_STRINGIZE, [ -AC_REQUIRE([AC_PROG_CPP]) -AC_MSG_CHECKING([for preprocessor stringizing operator]) -AC_CACHE_VAL(ac_cv_c_stringize, -AC_EGREP_CPP([#teststring],[ -#define x(y) #y - -char *s = x(teststring); -], ac_cv_c_stringize=no, ac_cv_c_stringize=yes)) -if test "${ac_cv_c_stringize}" = yes -then - AC_DEFINE(HAVE_STRINGIZE) -fi -AC_MSG_RESULT([${ac_cv_c_stringize}]) -])dnl - -define(AC_ARG_ARRAY, -[errprint(__file__:__line__: [$0] has been removed; don't do unportable things with arguments -)m4exit(4)]) - -dnl Check the object extension used by the compiler: typically .o or -dnl .obj. If this is called, some other behaviour will change, -dnl determined by ac_objext. -AC_DEFUN(AC_OBJEXT, -[AC_MSG_CHECKING([for object suffix]) -AC_CACHE_VAL(ac_cv_objext, -[rm -f conftest* -echo 'int i = 1;' > conftest.$ac_ext -if AC_TRY_EVAL(ac_compile); then - for ac_file in conftest.*; do - case $ac_file in - *.c) ;; - *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; - esac - done -else - AC_MSG_ERROR([installation or configuration problem; compiler does not work]) -fi -rm -f conftest*]) -AC_MSG_RESULT($ac_cv_objext) -OBJEXT=$ac_cv_objext -ac_objext=$ac_cv_objext -AC_SUBST(OBJEXT)]) - -dnl Determine the linker flags (e.g. `-L' and `-l') for the Fortran 77 -dnl intrinsic and run-time libraries that are required to successfully -dnl link a Fortran 77 program or shared library. The output variable -dnl FLIBS is set to these flags. -dnl -dnl This macro is intended to be used in those situations when it is -dnl necessary to mix, e.g. C++ and Fortran 77, source code into a single -dnl program or shared library. -dnl -dnl For example, if object files from a C++ and Fortran 77 compiler must -dnl be linked together, then the C++ compiler/linker must be used for -dnl linking (since special C++-ish things need to happen at link time -dnl like calling global constructors, instantiating templates, enabling -dnl exception support, etc.). -dnl -dnl However, the Fortran 77 intrinsic and run-time libraries must be -dnl linked in as well, but the C++ compiler/linker doesn't know how to -dnl add these Fortran 77 libraries. Hence, the macro -dnl `AC_F77_LIBRARY_LDFLAGS' was created to determine these Fortran 77 -dnl libraries. -dnl -dnl This macro was packaged in its current form by Matthew D. Langston -dnl . However, nearly all of this macro -dnl came from the `OCTAVE_FLIBS' macro in `octave-2.0.13/aclocal.m4', -dnl and full credit should go to John W. Eaton for writing this -dnl extremely useful macro. Thank you John. -dnl -dnl AC_F77_LIBRARY_LDFLAGS() -AC_DEFUN(AC_F77_LIBRARY_LDFLAGS, -[AC_MSG_CHECKING([for Fortran 77 libraries]) -AC_REQUIRE([AC_PROG_F77]) -AC_REQUIRE([AC_CANONICAL_HOST]) -AC_CACHE_VAL(ac_cv_flibs, -[changequote(, )dnl -dnl Write a minimal program and compile it with -v. I don't know what -dnl to do if your compiler doesn't have -v... -echo " END" > conftest.f -foutput=`${F77} -v -o conftest conftest.f 2>&1` -dnl -dnl The easiest thing to do for xlf output is to replace all the commas -dnl with spaces. Try to only do that if the output is really from xlf, -dnl since doing that causes problems on other systems. -dnl -xlf_p=`echo $foutput | grep xlfentry` -if test -n "$xlf_p"; then - foutput=`echo $foutput | sed 's/,/ /g'` -fi -dnl -ld_run_path=`echo $foutput | \ - sed -n -e 's/^.*LD_RUN_PATH *= *\([^ ]*\).*/\1/p'` -dnl -dnl We are only supposed to find this on Solaris systems... -dnl Uh, the run path should be absolute, shouldn't it? -dnl -case "$ld_run_path" in - /*) - if test "$ac_cv_prog_gcc" = yes; then - ld_run_path="-Xlinker -R -Xlinker $ld_run_path" - else - ld_run_path="-R $ld_run_path" - fi - ;; - *) - ld_run_path= - ;; -esac -dnl -flibs= -lflags= -dnl -dnl If want_arg is set, we know we want the arg to be added to the list, -dnl so we don't have to examine it. -dnl -want_arg= -dnl -for arg in $foutput; do - old_want_arg=$want_arg - want_arg= -dnl -dnl None of the options that take arguments expect the argument to -dnl start with a -, so pretend we didn't see anything special. -dnl - if test -n "$old_want_arg"; then - case "$arg" in - -*) - old_want_arg= - ;; - esac - fi - case "$old_want_arg" in - '') - case $arg in - /*.a) - exists=false - for f in $lflags; do - if test x$arg = x$f; then - exists=true - fi - done - if $exists; then - arg= - else - lflags="$lflags $arg" - fi - ;; - -bI:*) - exists=false - for f in $lflags; do - if test x$arg = x$f; then - exists=true - fi - done - if $exists; then - arg= - else - if test "$ac_cv_prog_gcc" = yes; then - lflags="$lflags -Xlinker $arg" - else - lflags="$lflags $arg" - fi - fi - ;; - -lang* | -lcrt0.o | -lc | -lgcc) - arg= - ;; - -[lLR]) - want_arg=$arg - arg= - ;; - -[lLR]*) - exists=false - for f in $lflags; do - if test x$arg = x$f; then - exists=true - fi - done - if $exists; then - arg= - else - case "$arg" in - -lkernel32) - case "$canonical_host_type" in - *-*-cygwin*) - arg= - ;; - *) - lflags="$lflags $arg" - ;; - esac - ;; - -lm) - ;; - *) - lflags="$lflags $arg" - ;; - esac - fi - ;; - -u) - want_arg=$arg - arg= - ;; - -Y) - want_arg=$arg - arg= - ;; - *) - arg= - ;; - esac - ;; - -[lLR]) - arg="$old_want_arg $arg" - ;; - -u) - arg="-u $arg" - ;; - -Y) -dnl -dnl Should probably try to ensure unique directory options here too. -dnl This probably only applies to Solaris systems, and then will only -dnl work with gcc... -dnl - arg=`echo $arg | sed -e 's%^P,%%'` - SAVE_IFS=$IFS - IFS=: - list= - for elt in $arg; do - list="$list -L$elt" - done - IFS=$SAVE_IFS - arg="$list" - ;; - esac -dnl - if test -n "$arg"; then - flibs="$flibs $arg" - fi -done -if test -n "$ld_run_path"; then - flibs_result="$ld_run_path $flibs" -else - flibs_result="$flibs" -fi -changequote([, ])dnl -ac_cv_flibs="$flibs_result"]) -FLIBS="$ac_cv_flibs" -AC_SUBST(FLIBS)dnl -AC_MSG_RESULT($FLIBS) -]) - - -dnl ### Checks for operating system services - - -AC_DEFUN(AC_SYS_INTERPRETER, -[# Pull the hash mark out of the macro call to avoid m4 problems. -ac_msg="whether #! works in shell scripts" -AC_CACHE_CHECK($ac_msg, ac_cv_sys_interpreter, -[echo '#! /bin/cat -exit 69 -' > conftest -chmod u+x conftest -(SHELL=/bin/sh; export SHELL; ./conftest >/dev/null) -if test $? -ne 69; then - ac_cv_sys_interpreter=yes -else - ac_cv_sys_interpreter=no -fi -rm -f conftest]) -interpval="$ac_cv_sys_interpreter" -]) - -define(AC_HAVE_POUNDBANG, -[errprint(__file__:__line__: [$0 has been replaced by AC_SYS_INTERPRETER, taking no arguments -])m4exit(4)]) - -AC_DEFUN(AC_SYS_LONG_FILE_NAMES, -[AC_CACHE_CHECK(for long file names, ac_cv_sys_long_file_names, -[ac_cv_sys_long_file_names=yes -# Test for long file names in all the places we know might matter: -# . the current directory, where building will happen -# $prefix/lib where we will be installing things -# $exec_prefix/lib likewise -# eval it to expand exec_prefix. -# $TMPDIR if set, where it might want to write temporary files -# if $TMPDIR is not set: -# /tmp where it might want to write temporary files -# /var/tmp likewise -# /usr/tmp likewise -if test -n "$TMPDIR" && test -d "$TMPDIR" && test -w "$TMPDIR"; then - ac_tmpdirs="$TMPDIR" -else - ac_tmpdirs='/tmp /var/tmp /usr/tmp' -fi -for ac_dir in . $ac_tmpdirs `eval echo $prefix/lib $exec_prefix/lib` ; do - test -d $ac_dir || continue - test -w $ac_dir || continue # It is less confusing to not echo anything here. - (echo 1 > $ac_dir/conftest9012345) 2>/dev/null - (echo 2 > $ac_dir/conftest9012346) 2>/dev/null - val=`cat $ac_dir/conftest9012345 2>/dev/null` - if test ! -f $ac_dir/conftest9012345 || test "$val" != 1; then - ac_cv_sys_long_file_names=no - rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null - break - fi - rm -f $ac_dir/conftest9012345 $ac_dir/conftest9012346 2>/dev/null -done]) -if test $ac_cv_sys_long_file_names = yes; then - AC_DEFINE(HAVE_LONG_FILE_NAMES) -fi -]) - -AC_DEFUN(AC_SYS_RESTARTABLE_SYSCALLS, -[AC_CACHE_CHECK(for restartable system calls, ac_cv_sys_restartable_syscalls, -[AC_TRY_RUN( -[/* Exit 0 (true) if wait returns something other than -1, - i.e. the pid of the child, which means that wait was restarted - after getting the signal. */ -#include -#include -ucatch (isig) { } -main () { - int i = fork (), status; - if (i == 0) { sleep (3); kill (getppid (), SIGINT); sleep (3); exit (0); } - signal (SIGINT, ucatch); - status = wait(&i); - if (status == -1) wait(&i); - exit (status == -1); -} -], ac_cv_sys_restartable_syscalls=yes, ac_cv_sys_restartable_syscalls=no)]) -if test $ac_cv_sys_restartable_syscalls = yes; then - AC_DEFINE(HAVE_RESTARTABLE_SYSCALLS) -fi -]) - -AC_DEFUN(AC_PATH_X, -[AC_REQUIRE_CPP()dnl Set CPP; we run AC_PATH_X_DIRECT conditionally. -# If we find X, set shell vars x_includes and x_libraries to the -# paths, otherwise set no_x=yes. -# Uses ac_ vars as temps to allow command line to override cache and checks. -# --without-x overrides everything else, but does not touch the cache. -AC_MSG_CHECKING(for X) - -AC_ARG_WITH(x, [ --with-x use the X Window System]) -# $have_x is `yes', `no', `disabled', or empty when we do not yet know. -if test "x$with_x" = xno; then - # The user explicitly disabled X. - have_x=disabled -else - if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then - # Both variables are already set. - have_x=yes - else -AC_CACHE_VAL(ac_cv_have_x, -[# One or both of the vars are not set, and there is no cached value. -ac_x_includes=NO ac_x_libraries=NO -AC_PATH_X_XMKMF -AC_PATH_X_DIRECT -if test "$ac_x_includes" = NO || test "$ac_x_libraries" = NO; then - # Didn't find X anywhere. Cache the known absence of X. - ac_cv_have_x="have_x=no" -else - # Record where we found X for the cache. - ac_cv_have_x="have_x=yes \ - ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries" -fi])dnl - fi - eval "$ac_cv_have_x" -fi # $with_x != no - -if test "$have_x" != yes; then - AC_MSG_RESULT($have_x) - no_x=yes -else - # If each of the values was on the command line, it overrides each guess. - test "x$x_includes" = xNONE && x_includes=$ac_x_includes - test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries - # Update the cache value to reflect the command line values. - ac_cv_have_x="have_x=yes \ - ac_x_includes=$x_includes ac_x_libraries=$x_libraries" - AC_MSG_RESULT([libraries $x_libraries, headers $x_includes]) -fi -]) - -dnl Internal subroutine of AC_PATH_X. -dnl Set ac_x_includes and/or ac_x_libraries. -AC_DEFUN(AC_PATH_X_XMKMF, -[rm -fr conftestdir -if mkdir conftestdir; then - cd conftestdir - # Make sure to not put "make" in the Imakefile rules, since we grep it out. - cat > Imakefile <<'EOF' -acfindx: - @echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"' -EOF - if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then - # GNU make sometimes prints "make[1]: Entering...", which would confuse us. - eval `${MAKE-make} acfindx 2>/dev/null | grep -v make` - # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. - for ac_extension in a so sl; do - if test ! -f $ac_im_usrlibdir/libX11.$ac_extension && - test -f $ac_im_libdir/libX11.$ac_extension; then - ac_im_usrlibdir=$ac_im_libdir; break - fi - done - # Screen out bogus values from the imake configuration. They are - # bogus both because they are the default anyway, and because - # using them would break gcc on systems where it needs fixed includes. - case "$ac_im_incroot" in - /usr/include) ;; - *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes="$ac_im_incroot" ;; - esac - case "$ac_im_usrlibdir" in - /usr/lib | /lib) ;; - *) test -d "$ac_im_usrlibdir" && ac_x_libraries="$ac_im_usrlibdir" ;; - esac - fi - cd .. - rm -fr conftestdir -fi -]) - -dnl Internal subroutine of AC_PATH_X. -dnl Set ac_x_includes and/or ac_x_libraries. -AC_DEFUN(AC_PATH_X_DIRECT, -[if test "$ac_x_includes" = NO; then - # Guess where to find include files, by looking for this one X11 .h file. - test -z "$x_direct_test_include" && x_direct_test_include=X11/Intrinsic.h - - # First, try using that file with no special directory specified. -AC_TRY_CPP([#include <$x_direct_test_include>], -[# We can compile using X headers with no special include directory. -ac_x_includes=], -[# Look for the header file in a standard set of common directories. -# Check X11 before X11Rn because it is often a symlink to the current release. - for ac_dir in \ - /usr/X11/include \ - /usr/X11R6/include \ - /usr/X11R5/include \ - /usr/X11R4/include \ - \ - /usr/include/X11 \ - /usr/include/X11R6 \ - /usr/include/X11R5 \ - /usr/include/X11R4 \ - \ - /usr/local/X11/include \ - /usr/local/X11R6/include \ - /usr/local/X11R5/include \ - /usr/local/X11R4/include \ - \ - /usr/local/include/X11 \ - /usr/local/include/X11R6 \ - /usr/local/include/X11R5 \ - /usr/local/include/X11R4 \ - \ - /usr/X386/include \ - /usr/x386/include \ - /usr/XFree86/include/X11 \ - \ - /usr/include \ - /usr/local/include \ - /usr/unsupported/include \ - /usr/athena/include \ - /usr/local/x11r5/include \ - /usr/lpp/Xamples/include \ - \ - /usr/openwin/include \ - /usr/openwin/share/include \ - ; \ - do - if test -r "$ac_dir/$x_direct_test_include"; then - ac_x_includes=$ac_dir - break - fi - done]) -fi # $ac_x_includes = NO - -if test "$ac_x_libraries" = NO; then - # Check for the libraries. - - test -z "$x_direct_test_library" && x_direct_test_library=Xt - test -z "$x_direct_test_function" && x_direct_test_function=XtMalloc - - # See if we find them without any special options. - # Don't add to $LIBS permanently. - ac_save_LIBS="$LIBS" - LIBS="-l$x_direct_test_library $LIBS" -AC_TRY_LINK(, [${x_direct_test_function}()], -[LIBS="$ac_save_LIBS" -# We can link X programs with no special library path. -ac_x_libraries=], -[LIBS="$ac_save_LIBS" -# First see if replacing the include by lib works. -# Check X11 before X11Rn because it is often a symlink to the current release. -for ac_dir in `echo "$ac_x_includes" | sed s/include/lib/` \ - /usr/X11/lib \ - /usr/X11R6/lib \ - /usr/X11R5/lib \ - /usr/X11R4/lib \ - \ - /usr/lib/X11 \ - /usr/lib/X11R6 \ - /usr/lib/X11R5 \ - /usr/lib/X11R4 \ - \ - /usr/local/X11/lib \ - /usr/local/X11R6/lib \ - /usr/local/X11R5/lib \ - /usr/local/X11R4/lib \ - \ - /usr/local/lib/X11 \ - /usr/local/lib/X11R6 \ - /usr/local/lib/X11R5 \ - /usr/local/lib/X11R4 \ - \ - /usr/X386/lib \ - /usr/x386/lib \ - /usr/XFree86/lib/X11 \ - \ - /usr/lib \ - /usr/local/lib \ - /usr/unsupported/lib \ - /usr/athena/lib \ - /usr/local/x11r5/lib \ - /usr/lpp/Xamples/lib \ - /lib/usr/lib/X11 \ - \ - /usr/openwin/lib \ - /usr/openwin/share/lib \ - ; \ -do -dnl Don't even attempt the hair of trying to link an X program! - for ac_extension in a so sl; do - if test -r $ac_dir/lib${x_direct_test_library}.$ac_extension; then - ac_x_libraries=$ac_dir - break 2 - fi - done -done]) -fi # $ac_x_libraries = NO -]) - -dnl Find additional X libraries, magic flags, etc. -AC_DEFUN(AC_PATH_XTRA, -[AC_REQUIRE([AC_PATH_X])dnl -if test "$no_x" = yes; then - # Not all programs may use this symbol, but it does not hurt to define it. - AC_DEFINE(X_DISPLAY_MISSING) - X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS= -else - if test -n "$x_includes"; then - X_CFLAGS="$X_CFLAGS -I$x_includes" - fi - - # It would also be nice to do this for all -L options, not just this one. - if test -n "$x_libraries"; then - X_LIBS="$X_LIBS -L$x_libraries" -dnl FIXME banish uname from this macro! - # For Solaris; some versions of Sun CC require a space after -R and - # others require no space. Words are not sufficient . . . . - case "`(uname -sr) 2>/dev/null`" in - "SunOS 5"*) - AC_MSG_CHECKING(whether -R must be followed by a space) - ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries" - AC_TRY_LINK(, , ac_R_nospace=yes, ac_R_nospace=no) - if test $ac_R_nospace = yes; then - AC_MSG_RESULT(no) - X_LIBS="$X_LIBS -R$x_libraries" - else - LIBS="$ac_xsave_LIBS -R $x_libraries" - AC_TRY_LINK(, , ac_R_space=yes, ac_R_space=no) - if test $ac_R_space = yes; then - AC_MSG_RESULT(yes) - X_LIBS="$X_LIBS -R $x_libraries" - else - AC_MSG_RESULT(neither works) - fi - fi - LIBS="$ac_xsave_LIBS" - esac - fi - - # Check for system-dependent libraries X programs must link with. - # Do this before checking for the system-independent R6 libraries - # (-lICE), since we may need -lsocket or whatever for X linking. - - if test "$ISC" = yes; then - X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet" - else - # Martyn.Johnson@cl.cam.ac.uk says this is needed for Ultrix, if the X - # libraries were built with DECnet support. And karl@cs.umb.edu says - # the Alpha needs dnet_stub (dnet does not exist). - AC_CHECK_LIB(dnet, dnet_ntoa, [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"]) - if test $ac_cv_lib_dnet_dnet_ntoa = no; then - AC_CHECK_LIB(dnet_stub, dnet_ntoa, - [X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"]) - fi - - # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT, - # to get the SysV transport functions. - # chad@anasazi.com says the Pyramis MIS-ES running DC/OSx (SVR4) - # needs -lnsl. - # The nsl library prevents programs from opening the X display - # on Irix 5.2, according to dickey@clark.net. - AC_CHECK_FUNC(gethostbyname) - if test $ac_cv_func_gethostbyname = no; then - AC_CHECK_LIB(nsl, gethostbyname, X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl") - fi - - # lieder@skyler.mavd.honeywell.com says without -lsocket, - # socket/setsockopt and other routines are undefined under SCO ODT - # 2.0. But -lsocket is broken on IRIX 5.2 (and is not necessary - # on later versions), says simon@lia.di.epfl.ch: it contains - # gethostby* variants that don't use the nameserver (or something). - # -lsocket must be given before -lnsl if both are needed. - # We assume that if connect needs -lnsl, so does gethostbyname. - AC_CHECK_FUNC(connect) - if test $ac_cv_func_connect = no; then - AC_CHECK_LIB(socket, connect, X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS", , - $X_EXTRA_LIBS) - fi - - # gomez@mi.uni-erlangen.de says -lposix is necessary on A/UX. - AC_CHECK_FUNC(remove) - if test $ac_cv_func_remove = no; then - AC_CHECK_LIB(posix, remove, X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix") - fi - - # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay. - AC_CHECK_FUNC(shmat) - if test $ac_cv_func_shmat = no; then - AC_CHECK_LIB(ipc, shmat, X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc") - fi - fi - - # Check for libraries that X11R6 Xt/Xaw programs need. - ac_save_LDFLAGS="$LDFLAGS" - test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries" - # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to - # check for ICE first), but we must link in the order -lSM -lICE or - # we get undefined symbols. So assume we have SM if we have ICE. - # These have to be linked with before -lX11, unlike the other - # libraries we check for below, so use a different variable. - # --interran@uluru.Stanford.EDU, kb@cs.umb.edu. - AC_CHECK_LIB(ICE, IceConnectionNumber, - [X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"], , $X_EXTRA_LIBS) - LDFLAGS="$ac_save_LDFLAGS" - -fi -AC_SUBST(X_CFLAGS)dnl -AC_SUBST(X_PRE_LIBS)dnl -AC_SUBST(X_LIBS)dnl -AC_SUBST(X_EXTRA_LIBS)dnl -]) - -dnl The old Cygwin32 macro is deprecated. -AC_DEFUN(AC_CYGWIN32, -[AC_OBSOLETE([$0], [; instead use AC_CYGWIN])dnl -AC_CYGWIN]) - -dnl Check for Cygwin. This is a way to set the right value for -dnl EXEEXT. -AC_DEFUN(AC_CYGWIN, -[AC_CACHE_CHECK(for Cygwin environment, ac_cv_cygwin, -[AC_TRY_COMPILE(,[ -#ifndef __CYGWIN__ -#define __CYGWIN__ __CYGWIN32__ -#endif -return __CYGWIN__;], -ac_cv_cygwin=yes, ac_cv_cygwin=no) -rm -f conftest*]) -CYGWIN= -test "$ac_cv_cygwin" = yes && CYGWIN=yes]) - -dnl Check for mingw32. This is another way to set the right value for -dnl EXEEXT. -AC_DEFUN(AC_MINGW32, -[AC_CACHE_CHECK(for mingw32 environment, ac_cv_mingw32, -[AC_TRY_COMPILE(,[return __MINGW32__;], -ac_cv_mingw32=yes, ac_cv_mingw32=no) -rm -f conftest*]) -MINGW32= -test "$ac_cv_mingw32" = yes && MINGW32=yes]) - -dnl Check for the extension used for executables. This knows that we -dnl add .exe for Cygwin or mingw32. Otherwise, it compiles a test -dnl executable. If this is called, the executable extensions will be -dnl automatically used by link commands run by the configure script. -AC_DEFUN(AC_EXEEXT, -[AC_REQUIRE([AC_CYGWIN]) -AC_REQUIRE([AC_MINGW32]) -AC_MSG_CHECKING([for executable suffix]) -AC_CACHE_VAL(ac_cv_exeext, -[if test "$CYGWIN" = yes || test "$MINGW32" = yes; then - ac_cv_exeext=.exe -else - rm -f conftest* - echo 'int main () { return 0; }' > conftest.$ac_ext - ac_cv_exeext= - if AC_TRY_EVAL(ac_link); then - for file in conftest.*; do - case $file in - *.c | *.o | *.obj) ;; - *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; - esac - done - else - AC_MSG_ERROR([installation or configuration problem: compiler cannot create executables.]) - fi - rm -f conftest* - test x"${ac_cv_exeext}" = x && ac_cv_exeext=no -fi]) -EXEEXT="" -test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} -AC_MSG_RESULT(${ac_cv_exeext}) -dnl Setting ac_exeext will implicitly change the ac_link command. -ac_exeext=$EXEEXT -AC_SUBST(EXEEXT)]) - - -dnl ### Checks for UNIX variants -dnl These are kludges which should be replaced by a single POSIX check. -dnl They aren't cached, to discourage their use. - - -AC_DEFUN(AC_AIX, -[AC_BEFORE([$0], [AC_TRY_COMPILE])dnl -AC_BEFORE([$0], [AC_TRY_RUN])dnl -AC_MSG_CHECKING(for AIX) -AC_EGREP_CPP(yes, -[#ifdef _AIX - yes -#endif -], [AC_MSG_RESULT(yes); AC_DEFINE(_ALL_SOURCE)], AC_MSG_RESULT(no)) -]) - -AC_DEFUN(AC_MINIX, -[AC_BEFORE([$0], [AC_TRY_COMPILE])dnl -AC_BEFORE([$0], [AC_TRY_RUN])dnl -AC_CHECK_HEADER(minix/config.h, MINIX=yes, MINIX=) -if test "$MINIX" = yes; then - AC_DEFINE(_POSIX_SOURCE) - AC_DEFINE(_POSIX_1_SOURCE, 2) - AC_DEFINE(_MINIX) -fi -]) - -AC_DEFUN(AC_ISC_POSIX, -[AC_REQUIRE([AC_PROG_CC])dnl -AC_BEFORE([$0], [AC_TRY_COMPILE])dnl -AC_BEFORE([$0], [AC_TRY_RUN])dnl -AC_MSG_CHECKING(for POSIXized ISC) -if test -d /etc/conf/kconfig.d && - grep _POSIX_VERSION [/usr/include/sys/unistd.h] >/dev/null 2>&1 -then - AC_MSG_RESULT(yes) - ISC=yes # If later tests want to check for ISC. - AC_DEFINE(_POSIX_SOURCE) - if test "$GCC" = yes; then - CC="$CC -posix" - else - CC="$CC -Xp" - fi -else - AC_MSG_RESULT(no) - ISC= -fi -]) - -AC_DEFUN(AC_XENIX_DIR, -[AC_OBSOLETE([$0], [; instead use AC_HEADER_DIRENT])dnl -AC_REQUIRE([AC_DIR_HEADER])dnl -AC_MSG_CHECKING(for Xenix) -AC_EGREP_CPP(yes, -[#if defined(M_XENIX) && !defined(M_UNIX) - yes -#endif -], [AC_MSG_RESULT(yes); XENIX=yes], [AC_MSG_RESULT(no); XENIX=]) -if test "$XENIX" = yes; then - # Make sure -ldir precedes -lx. - test $ac_header_dirent = dirent.h && LIBS="-ldir $LIBS" - LIBS="$LIBS -lx" -fi -]) - -AC_DEFUN(AC_DYNIX_SEQ, -[AC_OBSOLETE([$0], [; instead use AC_FUNC_GETMNTENT])dnl -AC_CHECK_LIB(seq, getmntent, LIBS="-lseq $LIBS") -]) - -AC_DEFUN(AC_IRIX_SUN, -[AC_OBSOLETE([$0], [; instead use AC_FUNC_GETMNTENT or AC_CHECK_LIB(sun, getpwnam)])dnl -AC_CHECK_LIB(sun, getmntent, LIBS="-lsun $LIBS") -]) - -AC_DEFUN(AC_SCO_INTL, -[AC_OBSOLETE([$0], [; instead use AC_FUNC_STRFTIME])dnl -AC_CHECK_LIB(intl, strftime, LIBS="-lintl $LIBS") -]) diff --git a/build/autoconf/altoptions.m4 b/build/autoconf/altoptions.m4 deleted file mode 100644 index 3105de00659..00000000000 --- a/build/autoconf/altoptions.m4 +++ /dev/null @@ -1,72 +0,0 @@ -dnl This Source Code Form is subject to the terms of the Mozilla Public -dnl License, v. 2.0. If a copy of the MPL was not distributed with this -dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. - -dnl altoptions.m4 - An alternative way of specifying command-line options. -dnl These macros are needed to support a menu-based configurator. -dnl This file also includes the macro, AM_READ_MYCONFIG, for reading -dnl the 'myconfig.m4' file. - -dnl Send comments, improvements, bugs to Steve Lamm (slamm@netscape.com). - - -dnl MOZ_ARG_ENABLE_BOOL( NAME, HELP, IF-YES [, IF-NO [, ELSE]]) -dnl MOZ_ARG_DISABLE_BOOL( NAME, HELP, IF-NO [, IF-YES [, ELSE]]) -dnl MOZ_ARG_ENABLE_STRING( NAME, HELP, IF-SET [, ELSE]) -dnl MOZ_ARG_WITH_BOOL( NAME, HELP, IF-YES [, IF-NO [, ELSE]) -dnl MOZ_ARG_WITH_STRING( NAME, HELP, IF-SET [, ELSE]) -dnl MOZ_READ_MYCONFIG() - Read in 'myconfig.sh' file - -define([MOZ_DIVERSION_ARGS], 12) - -AC_DEFUN([MOZ_ARG],[dnl -AC_DIVERT_PUSH(MOZ_DIVERSION_ARGS)dnl - '$1', -AC_DIVERT_POP()dnl -]) -AC_DEFUN([MOZ_AC_ARG_ENABLE],[MOZ_ARG([--enable-]translit([$1],[_],[-]))AC_ARG_ENABLE([$1], [$2], [$3], [$4])]) -AC_DEFUN([MOZ_AC_ARG_WITH],[MOZ_ARG([--with-]translit([$1],[_],[-]))AC_ARG_WITH([$1], [$2], [$3], [$4])]) - -dnl MOZ_TWO_STRING_TEST(NAME, VAL, STR1, IF-STR1, STR2, IF-STR2 [, ELSE]) -AC_DEFUN([MOZ_TWO_STRING_TEST], -[if test "[$2]" = "[$3]"; then - ifelse([$4], , :, [$4]) - elif test "[$2]" = "[$5]"; then - ifelse([$6], , :, [$6]) - else - ifelse([$7], , - [AC_MSG_ERROR([Option, [$1], does not take an argument ([$2]).])], - [$7]) - fi]) - -dnl MOZ_ARG_ENABLE_BOOL(NAME, HELP, IF-YES [, IF-NO [, ELSE]]) -AC_DEFUN([MOZ_ARG_ENABLE_BOOL], -[MOZ_AC_ARG_ENABLE([$1], [$2], - [MOZ_TWO_STRING_TEST([$1], [$enableval], yes, [$3], no, [$4])], - [$5])]) - -dnl MOZ_ARG_DISABLE_BOOL(NAME, HELP, IF-NO [, IF-YES [, ELSE]]) -AC_DEFUN([MOZ_ARG_DISABLE_BOOL], -[MOZ_AC_ARG_ENABLE([$1], [$2], - [MOZ_TWO_STRING_TEST([$1], [$enableval], no, [$3], yes, [$4])], - [$5])]) - -dnl MOZ_ARG_ENABLE_STRING(NAME, HELP, IF-SET [, ELSE]) -AC_DEFUN([MOZ_ARG_ENABLE_STRING], -[MOZ_AC_ARG_ENABLE([$1], [$2], [$3], [$4])]) - -dnl MOZ_ARG_WITH_BOOL(NAME, HELP, IF-YES [, IF-NO [, ELSE]) -AC_DEFUN([MOZ_ARG_WITH_BOOL], -[MOZ_AC_ARG_WITH([$1], [$2], - [MOZ_TWO_STRING_TEST([$1], [$withval], yes, [$3], no, [$4])], - [$5])]) - -dnl MOZ_ARG_WITH_STRING(NAME, HELP, IF-SET [, ELSE]) -AC_DEFUN([MOZ_ARG_WITH_STRING], -[MOZ_AC_ARG_WITH([$1], [$2], [$3], [$4])]) - -dnl MOZ_READ_MYCONFIG() - Read in 'myconfig.sh' file -AC_DEFUN([MOZ_READ_MOZCONFIG], -[AC_REQUIRE([AC_INIT_BINSH])dnl -. $OLD_CONFIGURE_VARS -]) diff --git a/build/autoconf/autoconf.m4 b/build/autoconf/autoconf.m4 deleted file mode 100644 index dde59ab380f..00000000000 --- a/build/autoconf/autoconf.m4 +++ /dev/null @@ -1,28 +0,0 @@ -dnl Driver that loads the Autoconf macro files. -dnl Requires GNU m4. -dnl This file is part of Autoconf. -dnl Copyright (C) 1994 Free Software Foundation, Inc. -dnl -dnl This program is free software; you can redistribute it and/or modify -dnl it under the terms of the GNU General Public License as published by -dnl the Free Software Foundation; either version 2, or (at your option) -dnl any later version. -dnl -dnl This program is distributed in the hope that it will be useful, -dnl but WITHOUT ANY WARRANTY; without even the implied warranty of -dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -dnl GNU General Public License for more details. -dnl -dnl You should have received a copy of the GNU General Public License -dnl along with this program; if not, write to the Free Software -dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -dnl 02111-1307, USA. -dnl -dnl Written by David MacKenzie. -dnl -include(acgeneral.m4)dnl -builtin(include, acspecific.m4)dnl -builtin(include, acoldnames.m4)dnl -dnl Do not sinclude acsite.m4 here, because it may not be installed -dnl yet when Autoconf is frozen. -dnl Do not sinclude ./aclocal.m4 here, to prevent it from being frozen. diff --git a/build/autoconf/autoconf.sh b/build/autoconf/autoconf.sh deleted file mode 100644 index ceb8a25b00a..00000000000 --- a/build/autoconf/autoconf.sh +++ /dev/null @@ -1,158 +0,0 @@ -#! @SHELL@ -# autoconf -- create `configure' using m4 macros -# Copyright (C) 1992, 1993, 1994, 1996 Free Software Foundation, Inc. - -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2, or (at your option) -# any later version. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. - -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. - -# If given no args, create `configure' from template file `configure.in'. -# With one arg, create a configure script on standard output from -# the given template file. - -usage="\ -Usage: autoconf [-h] [--help] [-m dir] [--macrodir=dir] - [-l dir] [--localdir=dir] [--version] [template-file]" - -# NLS nuisances. -# Only set these to C if already set. These must not be set unconditionally -# because not all systems understand e.g. LANG=C (notably SCO). -# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'! -# Non-C LC_CTYPE values break the ctype check. -if test "${LANG+set}" = set; then LANG=C; export LANG; fi -if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi -if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi -if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi - -: ${AC_MACRODIR=@datadir@} -: ${M4=@M4@} -: ${AWK=@AWK@} -case "${M4}" in -/*) # Handle the case that m4 has moved since we were configured. - # It may have been found originally in a build directory. - test -f "${M4}" || M4=m4 ;; -esac - -: ${TMPDIR=/tmp} -tmpout=${TMPDIR}/acout.$$ -localdir= -show_version=no - -while test $# -gt 0 ; do - case "${1}" in - -h | --help | --h* ) - echo "${usage}" 1>&2; exit 0 ;; - --localdir=* | --l*=* ) - localdir="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" - shift ;; - -l | --localdir | --l*) - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - localdir="${1}" - shift ;; - --macrodir=* | --m*=* ) - AC_MACRODIR="`echo \"${1}\" | sed -e 's/^[^=]*=//'`" - shift ;; - -m | --macrodir | --m* ) - shift - test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } - AC_MACRODIR="${1}" - shift ;; - --version | --v* ) - show_version=yes; shift ;; - -- ) # Stop option processing - shift; break ;; - - ) # Use stdin as input. - break ;; - -* ) - echo "${usage}" 1>&2; exit 1 ;; - * ) - break ;; - esac -done - -if test $show_version = yes; then - version=`sed -n 's/define.AC_ACVERSION.[ ]*\([0-9.]*\).*/\1/p' \ - $AC_MACRODIR/acgeneral.m4` - echo "Autoconf version $version" - exit 0 -fi - -case $# in - 0) infile=configure.in ;; - 1) infile="$1" ;; - *) echo "$usage" >&2; exit 1 ;; -esac - -trap 'rm -f $tmpin $tmpout; exit 1' 1 2 15 - -tmpin=${TMPDIR}/acin.$$ # Always set this, to avoid bogus errors from some rm's. -if test z$infile = z-; then - infile=$tmpin - cat > $infile -elif test ! -r "$infile"; then - echo "autoconf: ${infile}: No such file or directory" >&2 - exit 1 -fi - -if test -n "$localdir"; then - use_localdir="-I$localdir -DAC_LOCALDIR=$localdir" -else - use_localdir= -fi - -# Use the frozen version of Autoconf if available. -r= f= -# Some non-GNU m4's don't reject the --help option, so give them /dev/null. -case `$M4 --help < /dev/null 2>&1` in -*reload-state*) test -r $AC_MACRODIR/autoconf.m4f && { r=--reload f=f; } ;; -*traditional*) ;; -*) echo Autoconf requires GNU m4 1.1 or later >&2; rm -f $tmpin; exit 1 ;; -esac - -$M4 -I$AC_MACRODIR $use_localdir $r autoconf.m4$f $infile > $tmpout || - { rm -f $tmpin $tmpout; exit 2; } - -# You could add your own prefixes to pattern if you wanted to check for -# them too, e.g. pattern='\(AC_\|ILT_\)', except that UNIX sed doesn't do -# alternation. -pattern="AC_" - -status=0 -if grep "^[^#]*${pattern}" $tmpout > /dev/null 2>&1; then - echo "autoconf: Undefined macros:" >&2 - sed -n "s/^[^#]*\\(${pattern}[_A-Za-z0-9]*\\).*/\\1/p" $tmpout | - while read macro; do - grep -n "^[^#]*$macro" $infile /dev/null - test $? -eq 1 && echo >&2 "***BUG in Autoconf--please report*** $macro" - done | sort -u >&2 - status=1 -fi - -if test $# -eq 0; then - echo "This case should not be reached." - exit 1 -fi - -# Put the real line numbers into the output to make config.log more helpful. -$AWK ' -/__oline__/ { printf "%d:", NR + 1 } - { print } -' $tmpout | sed ' -/__oline__/s/^\([0-9][0-9]*\):\(.*\)__oline__/\2\1/ -' - -rm -f $tmpout - -exit $status diff --git a/build/autoconf/config.status.m4 b/build/autoconf/config.status.m4 deleted file mode 100644 index e1f3a433777..00000000000 --- a/build/autoconf/config.status.m4 +++ /dev/null @@ -1,162 +0,0 @@ -dnl This Source Code Form is subject to the terms of the Mozilla Public -dnl License, v. 2.0. If a copy of the MPL was not distributed with this -dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. - -dnl For use in AC_SUBST replacement -define([MOZ_DIVERSION_SUBST], 11) - -dnl Replace AC_SUBST to store values in a format suitable for python. -dnl The necessary comma after the tuple can't be put here because it -dnl can mess around with things like: -dnl AC_SOMETHING(foo,AC_SUBST(),bar) -define([AC_SUBST], -[ifdef([AC_SUBST_SET_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_SET on the same variable ($1)])], -[ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_LIST on the same variable ($1)])], -[ifdef([AC_SUBST_$1], , -[define([AC_SUBST_$1], )dnl -AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl - (''' $1 ''', r''' [$]$1 ''') -AC_DIVERT_POP()dnl -])])])])]) - -dnl Like AC_SUBST, but makes the value available as a set in python, -dnl with values got from the value of the environment variable, split on -dnl whitespaces. -define([AC_SUBST_SET], -[ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_SET on the same variable ($1)])], -[ifdef([AC_SUBST_LIST_$1], [m4_fatal([Cannot use AC_SUBST_LIST and AC_SUBST_SET on the same variable ($1)])], -[ifdef([AC_SUBST_SET_$1], , -[define([AC_SUBST_SET_$1], )dnl -AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl - (''' $1 ''', unique_list(split(r''' [$]$1 '''))) -AC_DIVERT_POP()dnl -])])])])]) - -dnl Like AC_SUBST, but makes the value available as a list in python, -dnl with values got from the value of the environment variable, split on -dnl whitespaces. -define([AC_SUBST_LIST], -[ifdef([AC_SUBST_$1], [m4_fatal([Cannot use AC_SUBST and AC_SUBST_LIST on the same variable ($1)])], -[ifdef([AC_SUBST_SET_$1], [m4_fatal([Cannot use AC_SUBST_SET and AC_SUBST_LIST on the same variable ($1)])], -[ifdef([AC_SUBST_LIST_$1], , -[define([AC_SUBST_LIST_$1], )dnl -AC_DIVERT_PUSH(MOZ_DIVERSION_SUBST)dnl - (''' $1 ''', list(split(r''' [$]$1 '''))) -AC_DIVERT_POP()dnl -])])])])]) - -dnl Ignore AC_SUBSTs for variables we don't have use for but that autoconf -dnl itself exports. -define([AC_SUBST_CFLAGS], ) -define([AC_SUBST_CPPFLAGS], ) -define([AC_SUBST_CXXFLAGS], ) -define([AC_SUBST_FFLAGS], ) -define([AC_SUBST_DEFS], ) -define([AC_SUBST_LDFLAGS], ) -define([AC_SUBST_LIBS], ) -define([AC_SUBST_exec_prefix], ) -define([AC_SUBST_prefix], ) -define([AC_SUBST_datadir], ) -define([AC_SUBST_libdir], ) -define([AC_SUBST_includedir], ) - -dnl Wrap AC_DEFINE to store values in a format suitable for python. -dnl autoconf's AC_DEFINE still needs to be used to fill confdefs.h, -dnl which is #included during some compile checks. -dnl The necessary comma after the tuple can't be put here because it -dnl can mess around with things like: -dnl AC_SOMETHING(foo,AC_DEFINE(),bar) -define([_MOZ_AC_DEFINE], defn([AC_DEFINE])) -define([AC_DEFINE], -[cat >> confdefs.pytmp <<\EOF - (''' $1 ''', ifelse($#, 2, [r''' $2 '''], $#, 3, [r''' $2 '''], ' 1 ')) -EOF -ifelse($#, 2, _MOZ_AC_DEFINE([$1], [$2]), $#, 3, _MOZ_AC_DEFINE([$1], [$2], [$3]),_MOZ_AC_DEFINE([$1]))dnl -]) - -dnl Wrap AC_DEFINE_UNQUOTED to store values in a format suitable for -dnl python. -define([_MOZ_AC_DEFINE_UNQUOTED], defn([AC_DEFINE_UNQUOTED])) -define([AC_DEFINE_UNQUOTED], -[cat >> confdefs.pytmp <>>)dnl -echo creating $CONFIG_STATUS - -cat > $CONFIG_STATUS <> $CONFIG_STATUS - rm confdefs.pytmp -fi -rm -f confdefs.h - -cat >> $CONFIG_STATUS <<\EOF -] - -substs = [ -EOF - -dnl The MOZ_DIVERSION_SUBST output diversion contains AC_SUBSTs, in the -dnl expected format, but lacks the final comma (see above). -sed 's/$/,/' >> $CONFIG_STATUS <> $CONFIG_STATUS -done - -cat >> $CONFIG_STATUS <<\EOF -] - -flags = [ -undivert(MOZ_DIVERSION_ARGS)dnl -] -EOF - -changequote([, ]) -]) - -define([m4_fatal],[ -errprint([$1 -]) -m4exit(1) -]) - -define([AC_OUTPUT], [ifelse($#_$1, 1_, [MOZ_CREATE_CONFIG_STATUS() -MOZ_RUN_CONFIG_STATUS()], -[m4_fatal([Use CONFIGURE_SUBST_FILES in moz.build files to create substituted files.])] -)]) - -define([AC_CONFIG_HEADER], -[m4_fatal([Use CONFIGURE_DEFINE_FILES in moz.build files to produce header files.]) -]) diff --git a/build/autoconf/hooks.m4 b/build/autoconf/hooks.m4 deleted file mode 100644 index 84d58205c10..00000000000 --- a/build/autoconf/hooks.m4 +++ /dev/null @@ -1,31 +0,0 @@ -dnl This Source Code Form is subject to the terms of the Mozilla Public -dnl License, v. 2.0. If a copy of the MPL was not distributed with this -dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. - -dnl Wrap AC_INIT_PREPARE to add the above trap. -define([_MOZ_AC_INIT_PREPARE], defn([AC_INIT_PREPARE])) -define([AC_INIT_PREPARE], -[_MOZ_AC_INIT_PREPARE($1) - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -]) - -dnl Print error messages in config.log as well as stderr -define([AC_MSG_ERROR], -[{ echo "configure: error: $1" 1>&2; echo "configure: error: $1" 1>&5; exit 1; }]) - -dnl Divert AC_TRY_COMPILER to make ac_cv_prog_*_works actually cached. -dnl This will allow to just skip the test when python configure has set -dnl the value for us. But since ac_cv_prog_*_cross is calculated at the same -dnl time, and has a different meaning as in python configure, we only want to -dnl use its value to display whether a cross-compile is happening. We forbid -dnl configure tests that would rely on ac_cv_prog_*_cross autoconf meaning -dnl (being able to execute the product of compilation), which are already bad -dnl for cross compiles anyways, so it's a win to get rid of them. -define([_MOZ_AC_TRY_COMPILER], defn([AC_TRY_COMPILER])) -define([AC_TRY_COMPILER], [AC_CACHE_VAL($2, _MOZ_AC_TRY_COMPILER($1, $2, $3))]) - -define([AC_TRY_RUN], [m4_fatal([AC_TRY_RUN is forbidden])]) -define([AC_CHECK_FILE], [m4_fatal([AC_CHECK_FILE is forbidden])]) diff --git a/build/autoconf/install-sh b/build/autoconf/install-sh deleted file mode 100755 index a4be13e59ff..00000000000 --- a/build/autoconf/install-sh +++ /dev/null @@ -1,123 +0,0 @@ -#!/bin/sh -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -# -# install - install a program, script, or datafile -# This comes from X11R5; it is not part of GNU. -# -# $XConsortium: install.sh,v 1.2 89/12/18 14:47:22 jim Exp $ -# -# This script is compatible with the BSD install script, but was written -# from scratch. -# - - -# set DOITPROG to echo to test this script - -# Don't use :- since 4.3BSD and earlier shells don't like it. -doit="${DOITPROG-}" - - -# put in absolute paths if you don't have them in your path; or use env. vars. - -mvprog="${MVPROG-mv}" -cpprog="${CPPROG-cp}" -chmodprog="${CHMODPROG-chmod}" -chownprog="${CHOWNPROG-chown}" -chgrpprog="${CHGRPPROG-chgrp}" -stripprog="${STRIPPROG-strip}" -rmprog="${RMPROG-rm}" - -instcmd="$mvprog" -chmodcmd="" -chowncmd="" -chgrpcmd="" -stripcmd="" -rmcmd="$rmprog -f" -mvcmd="$mvprog" -src="" -dst="" - -while [ x"$1" != x ]; do - case $1 in - -c) instcmd="$cpprog" - shift - continue;; - - -m) chmodcmd="$chmodprog $2" - shift - shift - continue;; - - -o) chowncmd="$chownprog $2" - shift - shift - continue;; - - -g) chgrpcmd="$chgrpprog $2" - shift - shift - continue;; - - -s) stripcmd="$stripprog" - shift - continue;; - - *) if [ x"$src" = x ] - then - src=$1 - else - dst=$1 - fi - shift - continue;; - esac -done - -if [ x"$src" = x ] -then - echo "install: no input file specified" - exit 1 -fi - -if [ x"$dst" = x ] -then - echo "install: no destination specified" - exit 1 -fi - - -# If destination is a directory, append the input filename; if your system -# does not like double slashes in filenames, you may need to add some logic - -if [ -d $dst ] -then - dst="$dst"/`basename $src` -fi - -# Make a temp file name in the proper directory. - -dstdir=`dirname $dst` -dsttmp=$dstdir/#inst.$$# - -# Move or copy the file name to the temp name - -$doit $instcmd $src $dsttmp - -# and set any options; do chmod last to preserve setuid bits - -if [ x"$chowncmd" != x ]; then $doit $chowncmd $dsttmp; fi -if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd $dsttmp; fi -if [ x"$stripcmd" != x ]; then $doit $stripcmd $dsttmp; fi -if [ x"$chmodcmd" != x ]; then $doit $chmodcmd $dsttmp; fi - -# Now rename the file to the real destination. - -$doit $rmcmd $dst -$doit $mvcmd $dsttmp $dst - - -exit 0 diff --git a/build/docs/snap.rst b/build/docs/snap.rst index 5afc61e414e..ed4e825f138 100644 --- a/build/docs/snap.rst +++ b/build/docs/snap.rst @@ -138,7 +138,7 @@ So pushing to try is basically just: .. code-block:: shell - $ mach try fuzzy --full -q "'snap 'upstream 'try" + $ mach try fuzzy --full -q "'snap 'upstream 'local" Because of the build process, a full opt build will take around 1h45-2h while a debug build will be around 60 minutes, the difference coming from the use of diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure index 09b7eb06416..0cc8d7048b1 100644 --- a/build/moz.configure/init.configure +++ b/build/moz.configure/init.configure @@ -65,12 +65,8 @@ set_config("DIST", build_environment.dist) option(env="MOZ_AUTOMATION", help="Enable options for automated builds") set_config("MOZ_AUTOMATION", depends_if("MOZ_AUTOMATION")(lambda x: True)) - -option(env="OLD_CONFIGURE", nargs=1, help="Path to the old configure script") - option(env="MOZCONFIG", nargs=1, help="Mozconfig location") - # Read user mozconfig # ============================================================== # Note: the dependency on --help is only there to always read the mozconfig, @@ -78,11 +74,11 @@ option(env="MOZCONFIG", nargs=1, help="Mozconfig location") # be called when --help is passed, and the mozconfig wouldn't be read. -@depends("MOZCONFIG", "OLD_CONFIGURE", build_environment, "--help") +@depends("MOZCONFIG", build_environment, "--help") @imports(_from="mozbuild.mozconfig", _import="MozconfigLoader") @imports(_from="mozboot.mozconfig", _import="find_mozconfig") @imports("os") -def mozconfig(mozconfig, old_configure, build_env, help): +def mozconfig(mozconfig, build_env, help): # Don't read the mozconfig for the js configure (yay backwards # compatibility) # While the long term goal is that js and top-level use the same configure @@ -94,16 +90,8 @@ def mozconfig(mozconfig, old_configure, build_env, help): # mozconfig for the js configure. # Separately to the immediate problem for js developers, there is also the # need to not load a mozconfig when running js configure as a subconfigure. - # Unfortunately, there is no direct way to tell whether the running - # configure is the js configure. The indirect way is to look at the - # OLD_CONFIGURE path, which points to js/src/old-configure. - # I expect we'll have figured things out for mozconfigs well before - # old-configure dies. - if ( - old_configure - and os.path.dirname(os.path.abspath(old_configure[0])).endswith("/js/src") - or (mozconfig and mozconfig[0] == os.devnull) - ): + is_js_configure = "MOZ_JS_CONFIGURE" in os.environ + if is_js_configure or (mozconfig and mozconfig[0] == os.devnull): return {"path": None} topsrcdir = build_env.topsrcdir @@ -155,6 +143,7 @@ def help_shell(help, shell): shell = help_shell | shell +set_config("SHELL", shell) # Python 3 @@ -1326,6 +1315,17 @@ set_config("prefix", depends("--prefix")(lambda prefix: prefix[0])) # Unlike autoconf, we don't offer these as a customisation point. set_config("exec_prefix", depends("--prefix")(lambda prefix: prefix[0])) set_config("datadir", depends("--prefix")(lambda prefix: f"{prefix[0]}/share")) +set_config("bindir", depends("--prefix")(lambda prefix: f"{prefix[0]}/bin")) +set_config("sbindir", depends("--prefix")(lambda prefix: f"{prefix[0]}/sbin")) +set_config("infodir", depends("--prefix")(lambda prefix: f"{prefix[0]}/info")) +set_config("libexec", depends("--prefix")(lambda prefix: f"{prefix[0]}/libexec")) +set_config("localstatedir", depends("--prefix")(lambda prefix: f"{prefix[0]}/var")) +set_config("sharedstatedir", depends("--prefix")(lambda prefix: f"{prefix[0]}/com")) +set_config("sysconfdir", depends("--prefix")(lambda prefix: f"{prefix[0]}/etc")) +set_config("mandir", depends("--prefix")(lambda prefix: f"{prefix[0]}/man")) +set_config("oldincludedir", depends("--prefix")(lambda prefix: f"{prefix[0]}/include")) +set_config("top_srcdir", build_environment.topsrcdir) +set_config("program_transform_name", "s,x,x,") option( "--includedir", diff --git a/build/moz.configure/lto-pgo.configure b/build/moz.configure/lto-pgo.configure index 7bcd7d67d5f..e3964da982c 100644 --- a/build/moz.configure/lto-pgo.configure +++ b/build/moz.configure/lto-pgo.configure @@ -42,6 +42,10 @@ llvm_profdata = check_prog( ) +# --call-graph-profile-sort is the default behavior for lld, and it proves to be +# more efficient than pgo-based orderfile. Don't pass it explicitly because it's +# option support differ from one version to the other (w/ or W: argument and the +# argument value). @depends(select_linker, target) def pgo_cg_sort(linker, target): return linker and linker.KIND == "lld" and target.os != "OSX" @@ -124,7 +128,6 @@ pgo_temporal = c_compiler.try_compile( target, pgo_profile_path, target_is_windows, - pgo_cg_sort, pgo_temporal, orderfile_path, ) @@ -135,7 +138,6 @@ def pgo_flags( target, profdata, target_is_windows, - pgo_cg_sort, pgo_temporal, orderfile, ): @@ -156,13 +158,7 @@ def pgo_flags( gen_ldflags = ["-fprofile-generate"] use_ldflags = [] - if pgo_cg_sort: - if compiler.type == "clang-cl": - use_ldflags.append("/call-graph-profile-sort") - else: - use_ldflags.append("-Wl,--call-graph-profile-sort=cdsort") - log.info("Activating PGO-based call graph sort") - elif orderfile: + if orderfile: if compiler.type == "clang-cl": use_ldflags += [ "-ORDER:@" + orderfile, diff --git a/build/moz.configure/old.configure b/build/moz.configure/old.configure deleted file mode 100644 index 3101a9f0981..00000000000 --- a/build/moz.configure/old.configure +++ /dev/null @@ -1,395 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -m4 = check_prog( - "M4", - ( - "gm4", - "m4", - ), - paths=prefer_mozillabuild_path, -) - - -@depends(mozconfig) -def prepare_mozconfig(mozconfig): - if mozconfig["path"]: - items = {} - for key, value in mozconfig["vars"]["added"].items(): - items[key] = (value, "added") - for key, (old, value) in mozconfig["vars"]["modified"].items(): - items[key] = (value, "modified") - for t in ("env", "vars"): - for key in mozconfig[t]["removed"].keys(): - items[key] = (None, "removed " + t) - return items - - -@depends("OLD_CONFIGURE", build_project) -def old_configure(old_configure, build_project): - if not old_configure: - die("The OLD_CONFIGURE environment variable must be set") - - # os.path.abspath in the sandbox will ensure forward slashes on Windows, - # which is actually necessary because this path actually ends up literally - # as $0, and backslashes there breaks autoconf's detection of the source - # directory. - old_configure = os.path.abspath(old_configure[0]) - if build_project == "js": - old_configure_dir = os.path.dirname(old_configure) - if not old_configure_dir.endswith("/js/src"): - old_configure = os.path.join( - old_configure_dir, "js", "src", os.path.basename(old_configure) - ) - return old_configure - - -@depends(prepare_mozconfig) -@imports(_from="__builtin__", _import="open") -@imports(_from="__builtin__", _import="print") -@imports(_from="mozbuild.shellutil", _import="quote") -def prepare_configure(mozconfig): - assignments = {} - - with open("old-configure.vars", "w") as out: - log.debug("Injecting the following to old-configure:") - - def inject(command): - print(command, file=out) # noqa Python 2vs3 - log.debug("| %s", command) - - if mozconfig: - inject("# start of mozconfig values") - for key, (value, action) in sorted(mozconfig.items()): - if action.startswith("removed "): - inject("unset %s # from %s" % (key, action[len("removed ") :])) - else: - inject("%s=%s # %s" % (key, quote(value), action)) - assignments[key] = value - - inject("# end of mozconfig values") - - return namespace(assignments=assignments) - - -@template -def old_configure_options(*options): - for opt in options: - option(opt, nargs="*", help="Help missing for old configure options") - - @dependable - def all_options(): - return list(options) - - return depends(all_options, *options) - - -@old_configure_options( - "--cache-file", - "--x-includes", - "--x-libraries", -) -def prepare_configure_options(all_options, *options): - # old-configure only supports the options listed in @old_configure_options - # so we don't need to pass it every single option we've been passed. Only - # the ones that are not supported by python configure need to. - options = [ - value.format(name) - for name, value in zip(all_options, options) - if value.origin != "default" - ] - - return namespace(options=options, all_options=all_options) - - -@template -def old_configure_for(old_configure_path, extra_env=None): - if extra_env is None: - extra_env = dependable(None) - - @depends( - prepare_configure, - prepare_configure_options, - "--prefix", - "--includedir", - "--libdir", - prefer_mozillabuild_path, - altered_path, - extra_env, - build_environment, - old_configure_path, - awk, - m4, - shell, - "--cache-file", - ) - @imports(_from="__builtin__", _import="compile") - @imports(_from="__builtin__", _import="open") - @imports(_from="__builtin__", _import="OSError") - @imports("glob") - @imports("itertools") - @imports("logging") - @imports("os") - @imports("re") - @imports("subprocess") - @imports("sys") - @imports(_from="mozbuild.shellutil", _import="quote") - @imports(_from="mozbuild.shellutil", _import="split") - @imports(_from="tempfile", _import="NamedTemporaryFile") - @imports(_from="subprocess", _import="CalledProcessError") - @imports(_from="__builtin__", _import="exec") - def old_configure( - prepare_configure, - prepare_configure_options, - prefix, - includedir, - libdir, - prefer_mozillabuild_path, - altered_path, - extra_env, - build_env, - old_configure, - awk, - m4, - shell, - cache_file_option, - ): - if altered_path: - path = altered_path - else: - path = os.pathsep.join(prefer_mozillabuild_path) - - cxx = prepare_configure.assignments.get("CXX") - cc = prepare_configure.assignments.get("CC") - - if cc and cxx: - if cache_file_option: - config_cache = cache_file_option[0] - else: - config_cache = "config.cache" - - if os.path.exists(config_cache): - remove = False - with open(config_cache, "r") as cfg_cache: - cxx_pattern = re.compile( - r"^ac_cv_prog_CXX=\${ac_cv_prog_CXX='(.*)'}$" - ) - cc_pattern = re.compile(r"^ac_cv_prog_CC=\${ac_cv_prog_CC='(.*)'}$") - for line in cfg_cache: - m = cc_pattern.match(line) - if m and m.group(1) != cc: - remove = True - break - m = cxx_pattern.match(line) - if m and m.group(1) != cxx: - remove = True - break - - if remove: - log.info("invalidating config.cache") - os.remove(config_cache) - - refresh = True - if os.path.exists(old_configure): - mtime = os.path.getmtime(old_configure) - aclocal = os.path.join(build_env.topsrcdir, "build", "autoconf", "*.m4") - for input in itertools.chain( - ( - old_configure + ".in", - os.path.join(os.path.dirname(old_configure), "aclocal.m4"), - ), - glob.iglob(aclocal), - ): - if os.path.getmtime(input) > mtime: - break - else: - refresh = False - - if refresh: - autoconf = os.path.join( - build_env.topsrcdir, "build", "autoconf", "autoconf.sh" - ) - log.info("Refreshing %s with %s", old_configure, autoconf) - env = dict(os.environ) - env["M4"] = m4 - env["AWK"] = awk - env["AC_MACRODIR"] = os.path.join(build_env.topsrcdir, "build", "autoconf") - env["PATH"] = path - - try: - script = subprocess.check_output( - [ - shell, - autoconf, - "--localdir=%s" % os.path.dirname(old_configure), - old_configure + ".in", - ], - # Fix the working directory, so that when m4 is called, that - # includes of relative paths are deterministically resolved - # relative to the directory containing old-configure. - cwd=os.path.dirname(old_configure), - env=env, - ) - except CalledProcessError as exc: - die("autoconf exited with return code {}".format(exc.returncode)) - - if not script: - die( - "Generated old-configure is empty! Check that your autoconf 2.13 program works!" - ) - - # Make old-configure append to config.log, where we put our own log. - # This could be done with a m4 macro, but it's way easier this way - script = script.replace(b">./config.log", b">>${CONFIG_LOG=./config.log}") - - with NamedTemporaryFile( - mode="wb", - prefix=os.path.basename(old_configure), - dir=os.path.dirname(old_configure), - delete=False, - ) as fh: - fh.write(script) - - try: - os.rename(fh.name, old_configure) - except OSError: - try: - # Likely the file already existed (on Windows). Retry after removing it. - os.remove(old_configure) - os.rename(fh.name, old_configure) - except OSError as e: - die("Failed re-creating old-configure: %s" % e.message) - - old_configure_options = { - "prefix": prefix[0], - "includedir": includedir[0], - "libdir": libdir[0], - } - cmd = ( - [shell, old_configure] - + prepare_configure_options.options - + [f"--{k}={v}" for k, v in old_configure_options.items()] - ) - - env = dict(os.environ) - - # For debugging purpose, in case it's not what we'd expect. - log.debug("Running %s", quote(*cmd)) - - # Our logging goes to config.log, the same file old.configure uses. - # We can't share the handle on the file, so close it. - logger = logging.getLogger("moz.configure") - config_log = None - for handler in logger.handlers: - if isinstance(handler, logging.FileHandler): - config_log = handler - config_log.close() - logger.removeHandler(config_log) - env["CONFIG_LOG"] = config_log.baseFilename - log_size = os.path.getsize(config_log.baseFilename) - break - - env["PATH"] = path - - if extra_env: - env.update(extra_env) - - env["OLD_CONFIGURE_VARS"] = os.path.join( - build_env.topobjdir, "old-configure.vars" - ) - proc = subprocess.Popen( - cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=env - ) - while True: - line = proc.stdout.readline() - if not line: - break - log.info(line.rstrip()) - - ret = proc.wait() - if ret: - with log.queue_debug(): - if config_log: - with open(config_log.baseFilename, "r") as fh: - fh.seek(log_size) - for line in fh: - log.debug(line.rstrip()) - log.error("old-configure failed") - sys.exit(ret) - - if config_log: - # Create a new handler in append mode - handler = logging.FileHandler(config_log.baseFilename, mode="a", delay=True) - handler.setFormatter(config_log.formatter) - logger.addHandler(handler) - - raw_config = { - "split": split, - "unique_list": unique_list, - } - with open("config.data", "r") as fh: - code = compile(fh.read(), "config.data", "exec") - exec(code, raw_config) - - # Ensure all the flags known to old-configure appear in the - # @old_configure_options above. - all_options = set(prepare_configure_options.all_options) - for flag in raw_config["flags"]: - if flag not in all_options: - die( - "Missing option in `@old_configure_options` in %s: %s", - __file__, - flag, - ) - - # If the code execution above fails, we want to keep the file around for - # debugging. - os.remove("config.data") - - return namespace( - **{ - c: [ - (k[1:-1], v[1:-1] if isinstance(v, str) else v) - for k, v in raw_config[c] - # Eventually we'll want to filter out all lowercase keys. (bug 1869127) - # For now, we only filter out the most problematic one that - # we know is unused. - if k != " target_cpu " - ] - for c in ("substs", "defines") - } - ) - - return old_configure - - -old_configure = old_configure_for(old_configure) -set_config("OLD_CONFIGURE_SUBSTS", old_configure.substs) -set_config("OLD_CONFIGURE_DEFINES", old_configure.defines) - - -# Assuming no other option is declared after this function, handle the -# env options that were injected by mozconfig_options by creating dummy -# Option instances and having the sandbox's CommandLineHelper handle -# them. We only do so for options that haven't been declared so far, -# which should be a proxy for the options that old-configure handles -# and that we don't know anything about. -@depends("--help") -@imports("__sandbox__") -@imports(_from="mozbuild.configure.options", _import="Option") -def remaining_mozconfig_options(_): - helper = __sandbox__._helper - for arg in list(helper): - if helper._origins[arg] != "mozconfig": - continue - name = arg.split("=", 1)[0] - if name.isupper() and name not in __sandbox__._options: - option = Option(env=name, nargs="*", help=name) - helper.handle(option) - - -# Please do not add anything after remaining_mozconfig_options() diff --git a/build/rust/ron/Cargo.toml b/build/rust/ron/Cargo.toml deleted file mode 100644 index e1ba760c764..00000000000 --- a/build/rust/ron/Cargo.toml +++ /dev/null @@ -1,17 +0,0 @@ -[package] -name = "ron" -version = "0.9.999" -edition = "2018" -license = "MIT OR Apache-2.0" - -[lib] -path = "lib.rs" - -[dependencies.ron] -version = "0.10.0" -default-features = false - -[features] -default = ["ron/default"] -indexmap = ["ron/indexmap"] -integer128 = ["ron/integer128"] diff --git a/build/rust/ron/lib.rs b/build/rust/ron/lib.rs deleted file mode 100644 index 2ad8b45f3c7..00000000000 --- a/build/rust/ron/lib.rs +++ /dev/null @@ -1,5 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -pub use ron::*; diff --git a/configure.py b/configure.py index c7759d64328..4750a91eb46 100644 --- a/configure.py +++ b/configure.py @@ -73,9 +73,6 @@ def main(argv): config = {} - if "OLD_CONFIGURE" not in os.environ: - os.environ["OLD_CONFIGURE"] = os.path.join(base_dir, "old-configure") - sandbox = ConfigureSandbox(config, os.environ, argv) if not sandbox._help: @@ -144,28 +141,21 @@ def main(argv): buildstatus("START_configure config.status") logging.getLogger("moz.configure").info("Creating config.status") - - old_js_configure_substs = config.pop("OLD_JS_CONFIGURE_SUBSTS", None) - old_js_configure_defines = config.pop("OLD_JS_CONFIGURE_DEFINES", None) try: - if old_js_configure_substs or old_js_configure_defines: - js_config = config.copy() - pwd = os.getcwd() - try: - os.makedirs("js/src", exist_ok=True) - os.chdir("js/src") - js_config["OLD_CONFIGURE_SUBSTS"] = old_js_configure_substs - js_config["OLD_CONFIGURE_DEFINES"] = old_js_configure_defines - # The build system frontend expects $objdir/js/src/config.status - # to have $objdir/js/src as topobjdir. - # We want forward slashes on all platforms. - js_config["TOPOBJDIR"] += "/js/src" - ret = config_status(js_config, execute=False) - if ret: - return ret - finally: - os.chdir(pwd) - + js_config = config.copy() + pwd = os.getcwd() + try: + os.makedirs("js/src", exist_ok=True) + os.chdir("js/src") + # The build system frontend expects $objdir/js/src/config.status + # to have $objdir/js/src as topobjdir. + # We want forward slashes on all platforms. + js_config["TOPOBJDIR"] += "/js/src" + ret = config_status(js_config, execute=False) + if ret: + return ret + finally: + os.chdir(pwd) return config_status(config) finally: buildstatus("END_configure config.status") @@ -217,17 +207,11 @@ def config_status(config, execute=True): "TOPSRCDIR", "TOPOBJDIR", "CONFIG_STATUS_DEPS", - "OLD_CONFIGURE_SUBSTS", - "OLD_CONFIGURE_DEFINES", ) } - for k, v in config["OLD_CONFIGURE_SUBSTS"]: - sanitized_config["substs"][k] = sanitize_config(v) sanitized_config["defines"] = { k: sanitize_config(v) for k, v in config["DEFINES"].items() } - for k, v in config["OLD_CONFIGURE_DEFINES"]: - sanitized_config["defines"][k] = sanitize_config(v) sanitized_config["topsrcdir"] = config["TOPSRCDIR"] sanitized_config["topobjdir"] = config["TOPOBJDIR"] sanitized_config["mozconfig"] = config.get("MOZCONFIG") diff --git a/devtools/client/debugger/src/actions/ui.js b/devtools/client/debugger/src/actions/ui.js index 1ee4b886746..d44344d969c 100644 --- a/devtools/client/debugger/src/actions/ui.js +++ b/devtools/client/debugger/src/actions/ui.js @@ -197,7 +197,11 @@ export function updateViewport() { const editor = getEditor(); return { type: "SET_VIEWPORT", - viewport: editor.getLocationsInViewport(), + // The viewport locations are set and used for rendering column breakpoints + // markers correctly within the viewport. + // The offsets value represents an allowance of characters or lines offscreen to improve + // perceived performance of column breakpoint rendering. + viewport: editor.getLocationsInViewport(100, 20), }; } diff --git a/devtools/client/debugger/src/components/Editor/ColumnBreakpoints.js b/devtools/client/debugger/src/components/Editor/ColumnBreakpoints.js index 668a1d5f640..0af85449e9e 100644 --- a/devtools/client/debugger/src/components/Editor/ColumnBreakpoints.js +++ b/devtools/client/debugger/src/components/Editor/ColumnBreakpoints.js @@ -20,7 +20,6 @@ import actions from "../../actions/index"; import { markerTypes } from "../../constants"; import { connect } from "devtools/client/shared/vendor/react-redux"; import { makeBreakpointId } from "../../utils/breakpoint/index"; -import { fromEditorLine } from "../../utils/editor/index"; const breakpointButton = document.createElement("button"); const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); @@ -72,40 +71,44 @@ class ColumnBreakpoints extends Component { editor.setPositionContentMarker({ id: markerTypes.COLUMN_BREAKPOINT_MARKER, - positions: columnBreakpoints.map(bp => bp.location), - createPositionElementNode: (line, column) => { - const lineNumber = fromEditorLine(selectedSource, line); - const columnBreakpoint = columnBreakpoints.find( - bp => bp.location.line === lineNumber && bp.location.column === column - ); + positions: columnBreakpoints.map(cbp => { + return { + line: cbp.location.line, + column: cbp.location.column, + positionData: cbp, + }; + }), + createPositionElementNode: ( + line, + column, + isFirstNonSpaceColumn, + positionData + ) => { const breakpointNode = breakpointButton.cloneNode(true); breakpointNode.className = classnames("column-breakpoint", { - "has-condition": columnBreakpoint.breakpoint?.options.condition, - "has-log": columnBreakpoint.breakpoint?.options.logValue, - active: - columnBreakpoint.breakpoint && - !columnBreakpoint.breakpoint.disabled, - disabled: columnBreakpoint.breakpoint?.disabled, + "has-condition": positionData.breakpoint?.options.condition, + "has-log": positionData.breakpoint?.options.logValue, + active: positionData.breakpoint && !positionData.breakpoint.disabled, + disabled: positionData.breakpoint?.disabled, }); breakpointNode.addEventListener("click", event => - this.onClick(event, columnBreakpoint) + this.onClick(event, positionData) ); breakpointNode.addEventListener("contextmenu", event => - this.onContextMenu(event, columnBreakpoint) + this.onContextMenu(event, positionData) ); return breakpointNode; }, - getMarkerEqualityValue: (line, column) => { - const lineNumber = fromEditorLine(selectedSource, line); - const columnBreakpoint = columnBreakpoints.find( - bp => bp.location.line === lineNumber && bp.location.column === column + customEq: (positionData, prevPositionData) => { + return ( + positionData?.breakpoint?.id == prevPositionData?.breakpoint?.id && + positionData?.breakpoint?.options.condition == + prevPositionData?.breakpoint?.options.condition && + positionData?.breakpoint?.options.logValue == + prevPositionData?.breakpoint?.options.logValue && + positionData?.breakpoint?.disabled == + prevPositionData?.breakpoint?.disabled ); - return { - id: columnBreakpoint?.breakpoint?.id, - condition: columnBreakpoint?.breakpoint?.options.condition, - log: columnBreakpoint?.breakpoint?.options.logValue, - disabled: columnBreakpoint?.breakpoint?.disabled, - }; }, }); } diff --git a/devtools/client/debugger/src/selectors/visibleColumnBreakpoints.js b/devtools/client/debugger/src/selectors/visibleColumnBreakpoints.js index 07b78c0a400..12f9cc7bba8 100644 --- a/devtools/client/debugger/src/selectors/visibleColumnBreakpoints.js +++ b/devtools/client/debugger/src/selectors/visibleColumnBreakpoints.js @@ -88,20 +88,25 @@ export function getColumnBreakpoints( continue; } for (const breakpointPosition of positionsPerLine) { - const location = getSelectedLocation(breakpointPosition, selectedSource); - const { line } = location; - - // Ignore any further computation if there is no breakpoint on that line. - const breakpointsPerColumn = breakpointsPerLine.get(line); - if (!breakpointsPerColumn) { + // For minified sources we want to limit the amount of displayed column breakpoints + // This is nice to have for perf reasons + if (columnBreakpoints.length >= 100) { continue; } + const location = getSelectedLocation(breakpointPosition, selectedSource); // Only consider positions visible in the current CodeMirror viewport if (!contains(location, viewport)) { continue; } + const { line } = location; + // Ignore any further computation if there is no breakpoint on that line. + const breakpointsPerColumn = breakpointsPerLine.get(line); + if (!breakpointsPerColumn) { + continue; + } + // Filters out breakpoints to the right of the line. (bug 1552039) // XXX Not really clear why we get such positions?? const { column } = location; diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-editor-horizontal-scroll.js b/devtools/client/debugger/test/mochitest/browser_dbg-editor-horizontal-scroll.js index 8f300bd14cd..5bb5f642049 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg-editor-horizontal-scroll.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg-editor-horizontal-scroll.js @@ -181,3 +181,49 @@ add_task(async function testHorizontalScrolling() { await resume(dbg); }); + +// Tests the limit of the no of column breakpoint markers in a minified source with a long line. +add_task(async function testColumnBreakpointsLimitAfterHorizontalScroll() { + // Keep the layout consistent + await pushPref("devtools.debugger.end-panel-size", 300); + + const dbg = await initDebugger( + "doc-large-sources.html", + "codemirror-bundle.js" + ); + + info("Select the minified bundle and add a breakpoint"); + await selectSource(dbg, "codemirror-bundle.js"); + await addBreakpoint(dbg, "codemirror-bundle.js", 1); + + let columnBreakpointMarkers = await waitForAllElements( + dbg, + "columnBreakpoints" + ); + + is( + columnBreakpointMarkers.length, + 100, + "We have the expected limit of column breakpoint markers on the minified source" + ); + + info("Scroll horizintally far to the right of the file"); + await scrollEditorIntoView(dbg, 0, 300000); + + columnBreakpointMarkers = findAllElements(dbg, "columnBreakpoints"); + is( + columnBreakpointMarkers.length, + 0, + "There are no column breakpoint marker as the source has horizontally scrolled the viewport over the limit" + ); + + info("Scroll back to the start of the line"); + await scrollEditorIntoView(dbg, 0, 0); + + columnBreakpointMarkers = await waitForAllElements(dbg, "columnBreakpoints"); + is( + columnBreakpointMarkers.length, + 100, + "We still have the expected limit of column breakpoint markers on the minified source" + ); +}); diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-editor-scroll.js b/devtools/client/debugger/test/mochitest/browser_dbg-editor-scroll.js index ac181f98f38..5d38653c95d 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg-editor-scroll.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg-editor-scroll.js @@ -233,3 +233,49 @@ add_task(async function testIsPositionVisible() { await resume(dbg); }); + +add_task(async function testColumnBreakpointsLimitAfterVerticalScroll() { + // Keep the layout consistent + await pushPref("devtools.debugger.end-panel-size", 300); + await pushPref("devtools.debugger.ui.editor-wrapping", true); + + const dbg = await initDebugger( + "doc-large-sources.html", + "codemirror-bundle.js" + ); + + info("Select the minified bundle and add a breakpoint"); + await selectSource(dbg, "codemirror-bundle.js"); + await addBreakpoint(dbg, "codemirror-bundle.js", 1); + + let columnBreakpointMarkers = await waitForAllElements( + dbg, + "columnBreakpoints" + ); + + is( + columnBreakpointMarkers.length, + 100, + "We have the expected limit of column breakpoint markers on the minified source" + ); + + info("Scroll to the bottom of the file"); + await scrollEditorIntoView(dbg, 1); + + columnBreakpointMarkers = findAllElements(dbg, "columnBreakpoints"); + is( + columnBreakpointMarkers.length, + 0, + "There are no column breakpoint markers as the source has vertically scrolled the viewport over the limit" + ); + + info("Scroll back to the top of the file"); + await scrollEditorIntoView(dbg, 0); + + columnBreakpointMarkers = await waitForAllElements(dbg, "columnBreakpoints"); + is( + columnBreakpointMarkers.length, + 100, + "We still have the expected limit of column breakpoint markers on the minified source" + ); +}); diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-state-based-panels.js b/devtools/client/debugger/test/mochitest/browser_dbg-state-based-panels.js index 5a05b5eb74e..910f6501d42 100644 --- a/devtools/client/debugger/test/mochitest/browser_dbg-state-based-panels.js +++ b/devtools/client/debugger/test/mochitest/browser_dbg-state-based-panels.js @@ -128,6 +128,10 @@ add_task(async function testBreakpointsPanePersistOnPauseToggle() { await resume(dbg); + // After resuming from the breakpoint, the debugger statement will be hit. + await waitForPaused(dbg, "simple3.js"); + await resume(dbg); + is(getPaneElements(dbg).length, 2, "Breakpoints pane is still open"); }); diff --git a/devtools/client/debugger/test/mochitest/examples/codemirror/codemirror-bundle.js b/devtools/client/debugger/test/mochitest/examples/codemirror/codemirror-bundle.js new file mode 100644 index 00000000000..d474d0c742a --- /dev/null +++ b/devtools/client/debugger/test/mochitest/examples/codemirror/codemirror-bundle.js @@ -0,0 +1 @@ +var CodeMirror=function(e){var t={};function n(r){if(t[r])return t[r].exports;var i=t[r]={i:r,l:!1,exports:{}};return e[r].call(i.exports,i,i.exports,n),i.l=!0,i.exports}return n.m=e,n.c=t,n.d=function(e,t,r){n.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:r})},n.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.t=function(e,t){if(1&t&&(e=n(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var r=Object.create(null);if(n.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)n.d(r,i,function(t){return e[t]}.bind(null,i));return r},n.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return n.d(t,"a",t),t},n.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},n.p="",n(n.s=7)}([function(e,t,n){e.exports=function(){"use strict";var e=navigator.userAgent,t=navigator.platform,n=/gecko\/\d/i.test(e),r=/MSIE \d/.test(e),i=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(e),o=/Edge\/(\d+)/.exec(e),a=r||i||o,l=a&&(r?document.documentMode||6:+(o||i)[1]),s=!o&&/WebKit\//.test(e),c=s&&/Qt\/\d+\.\d+/.test(e),u=!o&&/Chrome\//.test(e),f=/Opera\//.test(e),d=/Apple Computer/.test(navigator.vendor),h=/Mac OS X 1\d\D([8-9]|\d\d)\D/.test(e),p=/PhantomJS/.test(e),m=!o&&/AppleWebKit/.test(e)&&/Mobile\/\w+/.test(e),g=/Android/.test(e),v=m||g||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=m||/Mac/.test(t),b=/\bCrOS\b/.test(e),x=/win/i.test(t),w=f&&e.match(/Version\/(\d*\.\d*)/);w&&(w=Number(w[1])),w&&w>=15&&(f=!1,s=!0);var k=y&&(c||f&&(null==w||w<12.11)),C=n||a&&l>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var T,L=function(e,t){var n=e.className,r=S(t).exec(n);if(r){var i=n.slice(r.index+r[0].length);e.className=n.slice(0,r.index)+(i?r[1]+i:"")}};function M(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function O(e,t){return M(e).appendChild(t)}function N(e,t,n,r){var i=document.createElement(e);if(n&&(i.className=n),r&&(i.style.cssText=r),"string"==typeof t)i.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}}m?I=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(I=function(e){try{e.select()}catch(e){}});var H=function(){this.id=null,this.f=null,this.time=0,this.handler=F(this.onTimeout,this)};function R(e,t){for(var n=0;n=t)return r+Math.min(a,t-i);if(i+=o-r,r=o+1,(i+=n-i%n)>=t)return r}}var K=[""];function $(e){for(;K.length<=e;)K.push(G(K)+" ");return K[e]}function G(e){return e[e.length-1]}function X(e,t){for(var n=[],r=0;r"€"&&(e.toUpperCase()!=e.toLowerCase()||Q.test(e))}function ee(e,t){return t?!!(t.source.indexOf("\\w")>-1&&J(e))||t.test(e):J(e)}function te(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var ne=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function re(e){return e.charCodeAt(0)>=768&&ne.test(e)}function ie(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var i=(t+n)/2,o=r<0?Math.ceil(i):Math.floor(i);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+r}}var ae=null;function le(e,t,n){var r;ae=null;for(var i=0;it)return i;o.to==t&&(o.from!=o.to&&"before"==n?r=i:ae=i),o.from==t&&(o.from!=o.to&&"before"!=n?r=i:ae=i)}return null!=r?r:ae}var se=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,r=/[Lb1n]/,i=/[1n]/;function o(e,t,n){this.level=e,this.from=t,this.to=n}return function(a,l){var s="ltr"==l?"L":"R";if(0==a.length||"ltr"==l&&!e.test(a))return!1;for(var c,u=a.length,f=[],d=0;d-1&&(r[t]=i.slice(0,o).concat(i.slice(o+1)))}}}function pe(e,t){var n=de(e,t);if(n.length)for(var r=Array.prototype.slice.call(arguments,2),i=0;i0}function ye(e){e.prototype.on=function(e,t){fe(this,e,t)},e.prototype.off=function(e,t){he(this,e,t)}}function be(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function xe(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function we(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function ke(e){be(e),xe(e)}function Ce(e){return e.target||e.srcElement}function Se(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Te,Le,Me=function(){if(a&&l<9)return!1;var e=N("div");return"draggable"in e||"dragDrop"in e}();function Oe(e){if(null==Te){var t=N("span","​");O(e,N("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Te=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&l<8))}var n=Te?N("span","​"):N("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Ne(e){if(null!=Le)return Le;var t=O(e,document.createTextNode("AخA")),n=T(t,0,1).getBoundingClientRect(),r=T(t,1,2).getBoundingClientRect();return M(e),!(!n||n.left==n.right)&&(Le=r.right-n.right<3)}var Ae,Ee=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],r=e.length;t<=r;){var i=e.indexOf("\n",t);-1==i&&(i=e.length);var o=e.slice(t,"\r"==e.charAt(i-1)?i-1:i),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=i+1)}return n}:function(e){return e.split(/\r\n?|\n/)},ze=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},Pe="oncopy"in(Ae=N("div"))||(Ae.setAttribute("oncopy","return;"),"function"==typeof Ae.oncopy),De=null,Ie={},Fe={};function _e(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Ie[e]=t}function We(e){if("string"==typeof e&&Fe.hasOwnProperty(e))e=Fe[e];else if(e&&"string"==typeof e.name&&Fe.hasOwnProperty(e.name)){var t=Fe[e.name];"string"==typeof t&&(t={name:t}),(e=Y(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return We("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return We("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function He(e,t){t=We(t);var n=Ie[t.name];if(!n)return He(e,"text/plain");var r=n(e,t);if(Re.hasOwnProperty(t.name)){var i=Re[t.name];for(var o in i)i.hasOwnProperty(o)&&(r.hasOwnProperty(o)&&(r["_"+o]=r[o]),r[o]=i[o])}if(r.name=t.name,t.helperType&&(r.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)r[a]=t.modeProps[a];return r}var Re={};function Be(e,t){_(t,Re.hasOwnProperty(e)?Re[e]:Re[e]={})}function je(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var r in t){var i=t[r];i instanceof Array&&(i=i.concat([])),n[r]=i}return n}function qe(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Ue(e,t,n){return!e.startState||e.startState(t,n)}var Ve=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Ke(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var r=0;;++r){var i=n.children[r],o=i.chunkSize();if(t=e.first&&tn?et(n,Ke(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?et(e.line,t):n<0?et(e.line,0):e}(t,Ke(e,t.line).text.length)}function st(e,t){for(var n=[],r=0;r=this.string.length},Ve.prototype.sol=function(){return this.pos==this.lineStart},Ve.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Ve.prototype.next=function(){if(this.post},Ve.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Ve.prototype.skipToEnd=function(){this.pos=this.string.length},Ve.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Ve.prototype.backUp=function(e){this.pos-=e},Ve.prototype.column=function(){return this.lastColumnPos0?null:(r&&!1!==t&&(this.pos+=r[0].length),r)}var i=function(e){return n?e.toLowerCase():e};if(i(this.string.substr(this.pos,e.length))==i(e))return!1!==t&&(this.pos+=e.length),!0},Ve.prototype.current=function(){return this.string.slice(this.start,this.pos)},Ve.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Ve.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Ve.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ct=function(e,t){this.state=e,this.lookAhead=t},ut=function(e,t,n,r){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=r||0,this.baseTokens=null,this.baseTokenPos=1};function ft(e,t,n,r){var i=[e.state.modeGen],o={};xt(e,t.text,e.doc.mode,n,(function(e,t){return i.push(e,t)}),o,r);for(var a=n.state,l=function(r){n.baseTokens=i;var l=e.state.overlays[r],s=1,c=0;n.state=!0,xt(e,t.text,l.mode,n,(function(e,t){for(var n=s;ce&&i.splice(s,1,e,i[s+1],r),s+=2,c=Math.min(e,r)}if(t)if(l.opaque)i.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;ne.options.maxHighlightLength&&je(e.doc.mode,r.state),o=ft(e,t,r);i&&(r.state=i),t.stateAfter=r.save(!i),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function ht(e,t,n){var r=e.doc,i=e.display;if(!r.mode.startState)return new ut(r,!0,t);var o=function(e,t,n){for(var r,i,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Ke(o,l-1),c=s.stateAfter;if(c&&(!n||l+(c instanceof ct?c.lookAhead:0)<=o.modeFrontier))return l;var u=W(s.text,null,e.options.tabSize);(null==i||r>u)&&(i=l-1,r=u)}return i}(e,t,n),a=o>r.first&&Ke(r,o-1).stateAfter,l=a?ut.fromSaved(r,a,o):new ut(r,Ue(r.mode),o);return r.iter(o,t,(function(n){pt(e,n.text,l);var r=l.line;n.stateAfter=r==t-1||r%5==0||r>=i.viewFrom&&rt.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ut.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ut.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ut.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ut.fromSaved=function(e,t,n){return t instanceof ct?new ut(e,je(e.mode,t.state),n,t.lookAhead):new ut(e,je(e.mode,t),n)},ut.prototype.save=function(e){var t=!1!==e?je(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ct(t,this.maxLookAhead):t};var vt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function yt(e,t,n,r){var i,o,a=e.doc,l=a.mode,s=Ke(a,(t=lt(a,t)).line),c=ht(e,t.line,n),u=new Ve(s.text,e.options.tabSize,c);for(r&&(o=[]);(r||u.pose.options.maxHighlightLength?(l=!1,a&&pt(e,t,r,f.pos),f.pos=t.length,s=null):s=bt(gt(n,f,r.state,d),o),d){var h=d[0].name;h&&(s="m-"+(s?h+" "+s:h))}if(!l||u!=s){for(;c=t:o.to>t);(r||(r=[])).push(new Ct(a,o.from,l?null:o.to))}}return r}(n,i,a),s=function(e,t,n){var r;if(e)for(var i=0;i=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&l)for(var b=0;bt)&&(!n||zt(n,o.marker)<0)&&(n=o.marker)}return n}function _t(e,t,n,r,i){var o=Ke(e,t),a=kt&&o.markedSpans;if(a)for(var l=0;l=0&&f<=0||u<=0&&f>=0)&&(u<=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?tt(c.to,n)>=0:tt(c.to,n)>0)||u>=0&&(s.marker.inclusiveRight&&i.inclusiveLeft?tt(c.from,r)<=0:tt(c.from,r)<0)))return!0}}}function Wt(e){for(var t;t=Dt(e);)e=t.find(-1,!0).line;return e}function Ht(e,t){var n=Ke(e,t),r=Wt(n);return n==r?t:Ze(r)}function Rt(e,t){if(t>e.lastLine())return t;var n,r=Ke(e,t);if(!Bt(e,r))return t;for(;n=It(r);)r=n.find(1,!0).line;return Ze(r)+1}function Bt(e,t){var n=kt&&t.markedSpans;if(n)for(var r=void 0,i=0;it.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Kt=function(e,t,n){this.text=e,Nt(this,t),this.height=n?n(this):1};function $t(e){e.parent=null,Ot(e)}Kt.prototype.lineNo=function(){return Ze(this)},ye(Kt);var Gt={},Xt={};function Zt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Xt:Gt;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function Yt(e,t){var n=A("span",null,null,s?"padding-right: .1px":null),r={pre:A("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var i=0;i<=(t.rest?t.rest.length:0);i++){var o=i?t.rest[i-1]:t.line,a=void 0;r.pos=0,r.addToken=Jt,Ne(e.display.measure)&&(a=ce(o,e.doc.direction))&&(r.addToken=en(r.addToken,a)),r.map=[],nn(o,r,dt(e,o,t!=e.display.externalMeasured&&Ze(o))),o.styleClasses&&(o.styleClasses.bgClass&&(r.bgClass=D(o.styleClasses.bgClass,r.bgClass||"")),o.styleClasses.textClass&&(r.textClass=D(o.styleClasses.textClass,r.textClass||""))),0==r.map.length&&r.map.push(0,0,r.content.appendChild(Oe(e.display.measure))),0==i?(t.measure.map=r.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(r.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(s){var l=r.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(r.content.className="cm-tab-wrap-hack")}return pe(e,"renderLine",e,t.line,r.pre),r.pre.className&&(r.textClass=D(r.pre.className,r.textClass||"")),r}function Qt(e){var t=N("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function Jt(e,t,n,r,i,o,s){if(t){var c,u=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,r="",i=0;ic&&f.from<=c);d++);if(f.to>=u)return e(n,r,i,o,a,l,s);e(n,r.slice(0,f.to-c),i,o,null,l,s),o=null,r=r.slice(f.to-c),c=f.to}}}function tn(e,t,n,r){var i=!r&&n.widgetNode;i&&e.map.push(e.pos,e.pos+t,i),!r&&e.cm.display.input.needsContentAttribute&&(i||(i=e.content.appendChild(document.createElement("span"))),i.setAttribute("cm-marker",n.id)),i&&(e.cm.display.input.setUneditable(i),e.content.appendChild(i)),e.pos+=t,e.trailingSpace=!1}function nn(e,t,n){var r=e.markedSpans,i=e.text,o=0;if(r)for(var a,l,s,c,u,f,d,h=i.length,p=0,m=1,g="",v=0;;){if(v==p){s=c=u=l="",d=null,f=null,v=1/0;for(var y=[],b=void 0,x=0;xp||k.collapsed&&w.to==p&&w.from==p)){if(null!=w.to&&w.to!=p&&v>w.to&&(v=w.to,c=""),k.className&&(s+=" "+k.className),k.css&&(l=(l?l+";":"")+k.css),k.startStyle&&w.from==p&&(u+=" "+k.startStyle),k.endStyle&&w.to==v&&(b||(b=[])).push(k.endStyle,w.to),k.title&&((d||(d={})).title=k.title),k.attributes)for(var C in k.attributes)(d||(d={}))[C]=k.attributes[C];k.collapsed&&(!f||zt(f.marker,k)<0)&&(f=w)}else w.from>p&&v>w.from&&(v=w.from)}if(b)for(var S=0;S=h)break;for(var L=Math.min(h,v);;){if(g){var M=p+g.length;if(!f){var O=M>L?g.slice(0,L-p):g;t.addToken(t,O,a?a+s:s,u,p+O.length==v?c:"",l,d)}if(M>=L){g=g.slice(L-p),p=L;break}p=M,u=""}g=i.slice(o,o=n[m++]),a=Zt(n[m++],t.cm.options)}}else for(var N=1;Nn)return{map:e.measure.maps[i],cache:e.measure.caches[i],before:!0}}function An(e,t,n,r){return Pn(e,zn(e,t),n,r)}function En(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&o.push((s.bottom+c.top)/2-n.top)}}o.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),(o=function(e,t,n,r){var i,o=Fn(t.map,n,r),s=o.node,c=o.start,u=o.end,f=o.collapse;if(3==s.nodeType){for(var d=0;d<4;d++){for(;c&&re(t.line.text.charAt(o.coverStart+c));)--c;for(;o.coverStart+u1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,r=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*r,bottom:t.bottom*r}}(e.display.measure,i))}else{var h;c>0&&(f=r="right"),i=e.options.lineWrapping&&(h=s.getClientRects()).length>1?h["right"==r?h.length-1:0]:s.getBoundingClientRect()}if(a&&l<9&&!c&&(!i||!i.left&&!i.right)){var p=s.parentNode.getClientRects()[0];i=p?{left:p.left,right:p.left+ir(e.display),top:p.top,bottom:p.bottom}:In}for(var m=i.top-t.rect.top,g=i.bottom-t.rect.top,v=(m+g)/2,y=t.view.measure.heights,b=0;bt)&&(i=(o=s-l)-1,t>=s&&(a="right")),null!=i){if(r=e[c+2],l==s&&n==(r.insertLeft?"left":"right")&&(a=n),"left"==n&&0==i)for(;c&&e[c-2]==e[c-3]&&e[c-1].insertLeft;)r=e[2+(c-=3)],a="left";if("right"==n&&i==s-l)for(;c=0&&(n=e[i]).left==n.right;i--);return n}function Wn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=r.text.length?(s=r.text.length,c="before"):s<=0&&(s=0,c="after"),!l)return a("before"==c?s-1:s,"before"==c);function u(e,t,n){return a(n?e-1:e,1==l[t].level!=n)}var f=le(l,s,c),d=ae,h=u(s,f,"before"==c);return null!=d&&(h.other=u(s,d,"before"!=c)),h}function Gn(e,t){var n=0;t=lt(e.doc,t),e.options.lineWrapping||(n=ir(e.display)*t.ch);var r=Ke(e.doc,t.line),i=qt(r)+Cn(e.display);return{left:n,right:n,top:i,bottom:i+r.height}}function Xn(e,t,n,r,i){var o=et(e,t,n);return o.xRel=i,r&&(o.outside=r),o}function Zn(e,t,n){var r=e.doc;if((n+=e.display.viewOffset)<0)return Xn(r.first,0,null,-1,-1);var i=Ye(r,n),o=r.first+r.size-1;if(i>o)return Xn(r.first+r.size-1,Ke(r,o).text.length,null,1,1);t<0&&(t=0);for(var a=Ke(r,i);;){var l=er(e,a,i,t,n),s=Ft(a,l.ch+(l.xRel>0||l.outside>0?1:0));if(!s)return l;var c=s.find(1);if(c.line==i)return c;a=Ke(r,i=c.line)}}function Yn(e,t,n,r){r-=qn(t);var i=t.text.length,o=oe((function(t){return Pn(e,n,t-1).bottom<=r}),i,0);return{begin:o,end:i=oe((function(t){return Pn(e,n,t).top>r}),o,i)}}function Qn(e,t,n,r){return n||(n=zn(e,t)),Yn(e,t,n,Un(e,t,Pn(e,n,r),"line").top)}function Jn(e,t,n,r){return!(e.bottom<=n)&&(e.top>n||(r?e.left:e.right)>t)}function er(e,t,n,r,i){i-=qt(t);var o=zn(e,t),a=qn(t),l=0,s=t.text.length,c=!0,u=ce(t,e.doc.direction);if(u){var f=(e.options.lineWrapping?nr:tr)(e,t,n,o,u,r,i);l=(c=1!=f.level)?f.from:f.to-1,s=c?f.to:f.from-1}var d,h,p=null,m=null,g=oe((function(t){var n=Pn(e,o,t);return n.top+=a,n.bottom+=a,!!Jn(n,r,i,!1)&&(n.top<=i&&n.left<=r&&(p=t,m=n),!0)}),l,s),v=!1;if(m){var y=r-m.left=x.bottom?1:0}return Xn(n,g=ie(t.text,g,1),h,v,r-d)}function tr(e,t,n,r,i,o,a){var l=oe((function(l){var s=i[l],c=1!=s.level;return Jn($n(e,et(n,c?s.to:s.from,c?"before":"after"),"line",t,r),o,a,!0)}),0,i.length-1),s=i[l];if(l>0){var c=1!=s.level,u=$n(e,et(n,c?s.from:s.to,c?"after":"before"),"line",t,r);Jn(u,o,a,!0)&&u.top>a&&(s=i[l-1])}return s}function nr(e,t,n,r,i,o,a){var l=Yn(e,t,r,a),s=l.begin,c=l.end;/\s/.test(t.text.charAt(c-1))&&c--;for(var u=null,f=null,d=0;d=c||h.to<=s)){var p=Pn(e,r,1!=h.level?Math.min(c,h.to)-1:Math.max(s,h.from)).right,m=pm)&&(u=h,f=m)}}return u||(u=i[i.length-1]),u.fromc&&(u={from:u.from,to:c,level:u.level}),u}function rr(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Dn){Dn=N("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Dn.appendChild(document.createTextNode("x")),Dn.appendChild(N("br"));Dn.appendChild(document.createTextNode("x"))}O(e.measure,Dn);var n=Dn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),M(e.measure),n||1}function ir(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=N("span","xxxxxxxxxx"),n=N("pre",[t],"CodeMirror-line-like");O(e.measure,n);var r=t.getBoundingClientRect(),i=(r.right-r.left)/10;return i>2&&(e.cachedCharWidth=i),i||10}function or(e){for(var t=e.display,n={},r={},i=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var l=e.display.gutterSpecs[a].className;n[l]=o.offsetLeft+o.clientLeft+i,r[l]=o.clientWidth}return{fixedPos:ar(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:r,wrapperWidth:t.wrapper.clientWidth}}function ar(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function lr(e){var t=rr(e.display),n=e.options.lineWrapping,r=n&&Math.max(5,e.display.scroller.clientWidth/ir(e.display)-3);return function(i){if(Bt(e.doc,i))return 0;var o=0;if(i.widgets)for(var a=0;a0&&(s=Ke(e.doc,c.line).text).length==c.ch){var u=W(s,s.length,e.options.tabSize)-s.length;c=et(c.line,Math.max(0,Math.round((o-Tn(e.display).left)/ir(e.display))-u))}return c}function ur(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,r=0;rt)&&(i.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=i.viewTo)kt&&Ht(e.doc,t)i.viewFrom?hr(e):(i.viewFrom+=r,i.viewTo+=r);else if(t<=i.viewFrom&&n>=i.viewTo)hr(e);else if(t<=i.viewFrom){var o=pr(e,n,n+r,1);o?(i.view=i.view.slice(o.index),i.viewFrom=o.lineN,i.viewTo+=r):hr(e)}else if(n>=i.viewTo){var a=pr(e,t,t,-1);a?(i.view=i.view.slice(0,a.index),i.viewTo=a.lineN):hr(e)}else{var l=pr(e,t,t,-1),s=pr(e,n,n+r,1);l&&s?(i.view=i.view.slice(0,l.index).concat(on(e,l.lineN,s.lineN)).concat(i.view.slice(s.index)),i.viewTo+=r):hr(e)}var c=i.externalMeasured;c&&(n=i.lineN&&t=r.viewTo)){var o=r.view[ur(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==R(a,n)&&a.push(n)}}}function hr(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function pr(e,t,n,r){var i,o=ur(e,t),a=e.display.view;if(!kt||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=e.display.viewFrom,s=0;s0){if(o==a.length-1)return null;i=l+a[o].size-t,o++}else i=l-t;t+=i,n+=i}for(;Ht(e.doc,n)!=n;){if(o==(r<0?0:a.length-1))return null;n+=r*a[o-(r<0?1:0)].size,o+=r}return{index:o,lineN:n}}function mr(e){for(var t=e.display.view,n=0,r=0;r=e.display.viewTo||l.to().linet||t==n&&a.to==t)&&(r(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),i=!0)}i||r(t,n,"ltr")}(m,n||0,null==r?d:r,(function(e,t,i,f){var g="ltr"==i,v=h(e,g?"left":"right"),y=h(t-1,g?"right":"left"),b=null==n&&0==e,x=null==r&&t==d,w=0==f,k=!m||f==m.length-1;if(y.top-v.top<=3){var C=(c?x:b)&&k,S=(c?b:x)&&w?l:(g?v:y).left,T=C?s:(g?y:v).right;u(S,v.top,T-S,v.bottom)}else{var L,M,O,N;g?(L=c&&b&&w?l:v.left,M=c?s:p(e,i,"before"),O=c?l:p(t,i,"after"),N=c&&x&&k?s:y.right):(L=c?p(e,i,"before"):l,M=!c&&b&&w?s:v.right,O=!c&&x&&k?l:y.left,N=c?p(t,i,"after"):s),u(L,v.top,M-L,v.bottom),v.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Tr(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function kr(e){e.state.focused||(e.display.input.focus(),Sr(e))}function Cr(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,Tr(e))}),100)}function Sr(e,t){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(pe(e,"focus",e,t),e.state.focused=!0,P(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),wr(e))}function Tr(e,t){e.state.delayingBlurEvent||(e.state.focused&&(pe(e,"blur",e,t),e.state.focused=!1,L(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Lr(e){for(var t=e.display,n=t.lineDiv.offsetTop,r=0;r.005||d<-.005)&&(Xe(i.line,s),Mr(i.line),i.rest))for(var h=0;he.display.sizerWidth){var p=Math.ceil(c/ir(e.display));p>e.display.maxLineLength&&(e.display.maxLineLength=p,e.display.maxLine=i.line,e.display.maxLineChanged=!0)}}}}function Mr(e){if(e.widgets)for(var t=0;t=a&&(o=Ye(t,qt(Ke(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function Nr(e,t){var n=e.display,r=rr(e.display);t.top<0&&(t.top=0);var i=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=On(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+Sn(n),s=t.topl-r;if(t.topi+o){var u=Math.min(t.top,(c?l:t.bottom)-o);u!=i&&(a.scrollTop=u)}var f=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft,d=Mn(e)-(e.options.fixedGutter?n.gutters.offsetWidth:0),h=t.right-t.left>d;return h&&(t.right=t.left+d),t.left<10?a.scrollLeft=0:t.leftd+f-3&&(a.scrollLeft=t.right+(h?0:10)-d),a}function Ar(e,t){null!=t&&(Pr(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Er(e){Pr(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function zr(e,t,n){null==t&&null==n||Pr(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function Pr(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Dr(e,Gn(e,t.from),Gn(e,t.to),t.margin))}function Dr(e,t,n,r){var i=Nr(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-r,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+r});zr(e,i.scrollLeft,i.scrollTop)}function Ir(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||si(e,{top:t}),Fr(e,t,!0),n&&si(e),ri(e,100))}function Fr(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function _r(e,t,n,r){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!r||(e.doc.scrollLeft=t,fi(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Wr(e){var t=e.display,n=t.gutters.offsetWidth,r=Math.round(e.doc.height+Sn(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:r,scrollHeight:r+Ln(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var Hr=function(e,t,n){this.cm=n;var r=this.vert=N("div",[N("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),i=this.horiz=N("div",[N("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");r.tabIndex=i.tabIndex=-1,e(r),e(i),fe(r,"scroll",(function(){r.clientHeight&&t(r.scrollTop,"vertical")})),fe(i,"scroll",(function(){i.clientWidth&&t(i.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};Hr.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,r=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?r+"px":"0";var i=e.viewHeight-(t?r:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+i)+"px"}else this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?r+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?r:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==r&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?r:0,bottom:t?r:0}},Hr.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},Hr.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},Hr.prototype.zeroWidthHack=function(){var e=y&&!h?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.pointerEvents=this.vert.style.pointerEvents="none",this.disableHoriz=new H,this.disableVert=new H},Hr.prototype.enableZeroWidthBar=function(e,t,n){e.style.pointerEvents="auto",t.set(1e3,(function r(){var i=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(i.right-1,(i.top+i.bottom)/2):document.elementFromPoint((i.right+i.left)/2,i.bottom-1))!=e?e.style.pointerEvents="none":t.set(1e3,r)}))},Hr.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var Rr=function(){};function Br(e,t){t||(t=Wr(e));var n=e.display.barWidth,r=e.display.barHeight;jr(e,t);for(var i=0;i<4&&n!=e.display.barWidth||r!=e.display.barHeight;i++)n!=e.display.barWidth&&e.options.lineWrapping&&Lr(e),jr(e,Wr(e)),n=e.display.barWidth,r=e.display.barHeight}function jr(e,t){var n=e.display,r=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=r.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=r.bottom)+"px",n.heightForcer.style.borderBottom=r.bottom+"px solid transparent",r.right&&r.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=r.bottom+"px",n.scrollbarFiller.style.width=r.right+"px"):n.scrollbarFiller.style.display="",r.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=r.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}Rr.prototype.update=function(){return{bottom:0,right:0}},Rr.prototype.setScrollLeft=function(){},Rr.prototype.setScrollTop=function(){},Rr.prototype.clear=function(){};var qr={native:Hr,null:Rr};function Ur(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&L(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new qr[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),fe(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?_r(e,t):Ir(e,t)}),e),e.display.scrollbars.addClass&&P(e.display.wrapper,e.display.scrollbars.addClass)}var Vr=0;function Kr(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Vr},t=e.curOp,an?an.ops.push(t):t.ownsGroup=an={ops:[t],delayedCallbacks:[]}}function $r(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new oi(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Xr(e){e.updatedDisplay=e.mustUpdate&&ai(e.cm,e.update)}function Zr(e){var t=e.cm,n=t.display;e.updatedDisplay&&Lr(t),e.barMeasure=Wr(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=An(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ln(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Mn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function Yr(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft(window.innerHeight||document.documentElement.clientHeight)&&(i=!1),null!=i&&!p){var o=N("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Cn(e.display))+"px;\n height: "+(t.bottom-t.top+Ln(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(o),o.scrollIntoView(i),e.display.lineSpace.removeChild(o)}}}(t,function(e,t,n,r){var i;null==r&&(r=0),e.options.lineWrapping||t!=n||(n="before"==(t=t.ch?et(t.line,"before"==t.sticky?t.ch-1:t.ch,"after"):t).sticky?et(t.line,t.ch+1,"before"):t);for(var o=0;o<5;o++){var a=!1,l=$n(e,t),s=n&&n!=t?$n(e,n):l,c=Nr(e,i={left:Math.min(l.left,s.left),top:Math.min(l.top,s.top)-r,right:Math.max(l.left,s.left),bottom:Math.max(l.bottom,s.bottom)+r}),u=e.doc.scrollTop,f=e.doc.scrollLeft;if(null!=c.scrollTop&&(Ir(e,c.scrollTop),Math.abs(e.doc.scrollTop-u)>1&&(a=!0)),null!=c.scrollLeft&&(_r(e,c.scrollLeft),Math.abs(e.doc.scrollLeft-f)>1&&(a=!0)),!a)break}return i}(t,lt(r,e.scrollToPos.from),lt(r,e.scrollToPos.to),e.scrollToPos.margin));var i=e.maybeHiddenMarkers,o=e.maybeUnhiddenMarkers;if(i)for(var a=0;a=e.display.viewTo)){var n=+new Date+e.options.workTime,r=ht(e,t.highlightFrontier),i=[];t.iter(r.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(r.line>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength?je(t.mode,r.state):null,s=ft(e,o,r,!0);l&&(r.state=l),o.styles=s.styles;var c=o.styleClasses,u=s.classes;u?o.styleClasses=u:c&&(o.styleClasses=null);for(var f=!a||a.length!=o.styles.length||c!=u&&(!c||!u||c.bgClass!=u.bgClass||c.textClass!=u.textClass),d=0;!f&&dn)return ri(e,e.options.workDelay),!0})),t.highlightFrontier=r.line,t.modeFrontier=Math.max(t.modeFrontier,r.line),i.length&&Jr(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==mr(e))return!1;di(e)&&(hr(e),t.dims=or(e));var i=r.first+r.size,o=Math.max(t.visible.from-e.options.viewportMargin,r.first),a=Math.min(i,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(i,n.viewTo)),kt&&(o=Ht(e.doc,o),a=Rt(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var r=e.display;0==r.view.length||t>=r.viewTo||n<=r.viewFrom?(r.view=on(e,t,n),r.viewFrom=t):(r.viewFrom>t?r.view=on(e,t,r.viewFrom).concat(r.view):r.viewFromn&&(r.view=r.view.slice(0,ur(e,n)))),r.viewTo=n}(e,o,a),n.viewOffset=qt(Ke(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var c=mr(e);if(!l&&0==c&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var u=function(e){if(e.hasFocus())return null;var t=z();if(!t||!E(e.display.lineDiv,t))return null;var n={activeElt:t};if(window.getSelection){var r=window.getSelection();r.anchorNode&&r.extend&&E(e.display.lineDiv,r.anchorNode)&&(n.anchorNode=r.anchorNode,n.anchorOffset=r.anchorOffset,n.focusNode=r.focusNode,n.focusOffset=r.focusOffset)}return n}(e);return c>4&&(n.lineDiv.style.display="none"),function(e,t,n){var r=e.display,i=e.options.lineNumbers,o=r.lineDiv,a=o.firstChild;function l(t){var n=t.nextSibling;return s&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var c=r.view,u=r.viewFrom,f=0;f-1&&(h=!1),un(e,d,u,n)),h&&(M(d.lineNumber),d.lineNumber.appendChild(document.createTextNode(Je(e.options,u)))),a=d.node.nextSibling}else{var p=vn(e,d,u,n);o.insertBefore(p,a)}u+=d.size}for(;a;)a=l(a)}(e,n.updateLineNumbers,t.dims),c>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=z()&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&E(document.body,e.anchorNode)&&E(document.body,e.focusNode))){var t=window.getSelection(),n=document.createRange();n.setEnd(e.anchorNode,e.anchorOffset),n.collapse(!1),t.removeAllRanges(),t.addRange(n),t.extend(e.focusNode,e.focusOffset)}}(u),M(n.cursorDiv),M(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ri(e,400)),n.updateLineNumbers=null,!0}function li(e,t){for(var n=t.viewport,r=!0;;r=!1){if(r&&e.options.lineWrapping&&t.oldDisplayWidth!=Mn(e))r&&(t.visible=Or(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+Sn(e.display)-On(e),n.top)}),t.visible=Or(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!ai(e,t))break;Lr(e);var i=Wr(e);gr(e),Br(e,i),ui(e,i),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function si(e,t){var n=new oi(e,t);if(ai(e,n)){Lr(e),li(e,n);var r=Wr(e);gr(e),Br(e,r),ui(e,r),n.finish()}}function ci(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px"}function ui(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ln(e)+"px"}function fi(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var r=ar(t)-t.scroller.scrollLeft+e.doc.scrollLeft,i=t.gutters.offsetWidth,o=r+"px",a=0;al.clientWidth,u=l.scrollHeight>l.clientHeight;if(i&&c||o&&u){if(o&&y&&s)e:for(var d=t.target,h=a.view;d!=l;d=d.parentNode)for(var p=0;p=0&&tt(e,r.to())<=0)return n}return-1};var Ci=function(e,t){this.anchor=e,this.head=t};function Si(e,t,n){var r=e&&e.options.selectionsMayTouch,i=t[n];t.sort((function(e,t){return tt(e.from(),t.from())})),n=R(t,i);for(var o=1;o0:s>=0){var c=ot(l.from(),a.from()),u=it(l.to(),a.to()),f=l.empty()?a.from()==a.head:l.from()==l.head;o<=n&&--n,t.splice(--o,2,new Ci(f?u:c,f?c:u))}}return new ki(t,n)}function Ti(e,t){return new ki([new Ci(e,t||e)],0)}function Li(e){return e.text?et(e.from.line+e.text.length-1,G(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Mi(e,t){if(tt(e,t.from)<0)return e;if(tt(e,t.to)<=0)return Li(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,r=e.ch;return e.line==t.to.line&&(r+=Li(t).ch-t.to.ch),et(n,r)}function Oi(e,t){for(var n=[],r=0;r1&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}sn(e,"change",e,t)}function Di(e,t,n){!function e(r,i,o){if(r.linked)for(var a=0;al-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(Hi(e.done),G(e.done)):e.done.length&&!G(e.done).ranges?G(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),G(e.done)):void 0}(i,i.lastOp==r)))a=G(o.changes),0==tt(t.from,t.to)&&0==tt(t.from,a.to)?a.to=Li(t):o.changes.push(Wi(e,t));else{var s=G(i.done);for(s&&s.ranges||ji(e.sel,i.done),o={changes:[Wi(e,t)],generation:i.generation},i.done.push(o);i.done.length>i.undoDepth;)i.done.shift(),i.done[0].ranges||i.done.shift()}i.done.push(n),i.generation=++i.maxGeneration,i.lastModTime=i.lastSelTime=l,i.lastOp=i.lastSelOp=r,i.lastOrigin=i.lastSelOrigin=t.origin,a||pe(e,"historyAdded")}function Bi(e,t,n,r){var i=e.history,o=r&&r.origin;n==i.lastSelOp||o&&i.lastSelOrigin==o&&(i.lastModTime==i.lastSelTime&&i.lastOrigin==o||function(e,t,n,r){var i=t.charAt(0);return"*"==i||"+"==i&&n.ranges.length==r.ranges.length&&n.somethingSelected()==r.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,G(i.done),t))?i.done[i.done.length-1]=t:ji(t,i.done),i.lastSelTime=+new Date,i.lastSelOrigin=o,i.lastSelOp=n,r&&!1!==r.clearRedo&&Hi(i.undone)}function ji(e,t){var n=G(t);n&&n.ranges&&n.equals(e)||t.push(e)}function qi(e,t,n,r){var i=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,r),(function(n){n.markedSpans&&((i||(i=t["spans_"+e.id]={}))[o]=n.markedSpans),++o}))}function Ui(e){if(!e)return null;for(var t,n=0;n-1&&(G(l)[f]=c[f],delete c[f])}}}return r}function $i(e,t,n,r){if(r){var i=e.anchor;if(n){var o=tt(t,i)<0;o!=tt(n,i)<0?(i=t,t=n):o!=tt(t,n)<0&&(t=n)}return new Ci(i,t)}return new Ci(n||t,t)}function Gi(e,t,n,r,i){null==i&&(i=e.cm&&(e.cm.display.shift||e.extend)),Ji(e,new ki([$i(e.sel.primary(),t,n,i)],0),r)}function Xi(e,t,n){for(var r=[],i=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:l.to>t.ch))){if(i&&(pe(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var f=s.find(r<0?1:-1),d=void 0;if((r<0?u:c)&&(f=ao(e,f,-r,f&&f.line==t.line?o:null)),f&&f.line==t.line&&(d=tt(f,n))&&(r<0?d<0:d>0))return io(e,f,t,r,i)}var h=s.find(r<0?-1:1);return(r<0?c:u)&&(h=ao(e,h,r,h.line==t.line?o:null)),h?io(e,h,t,r,i):null}}return t}function oo(e,t,n,r,i){var o=r||1,a=io(e,t,n,o,i)||!i&&io(e,t,n,o,!0)||io(e,t,n,-o,i)||!i&&io(e,t,n,-o,!0);return a||(e.cantEdit=!0,et(e.first,0))}function ao(e,t,n,r){return n<0&&0==t.ch?t.line>e.first?lt(e,et(t.line-1)):null:n>0&&t.ch==(r||Ke(e,t.line)).text.length?t.line0)){var u=[s,1],f=tt(c.from,l.from),d=tt(c.to,l.to);(f<0||!a.inclusiveLeft&&!f)&&u.push({from:c.from,to:l.from}),(d>0||!a.inclusiveRight&&!d)&&u.push({from:l.to,to:c.to}),i.splice.apply(i,u),s+=u.length-3}}return i}(e,t.from,t.to);if(r)for(var i=r.length-1;i>=0;--i)uo(e,{from:r[i].from,to:r[i].to,text:i?[""]:t.text,origin:t.origin});else uo(e,t)}}function uo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=tt(t.from,t.to)){var n=Oi(e,t);Ri(e,t,n,e.cm?e.cm.curOp.id:NaN),po(e,t,n,Lt(e,t));var r=[];Di(e,(function(e,n){n||-1!=R(r,e.history)||(yo(e.history,t),r.push(e.history)),po(e,t,null,Lt(e,t))}))}}function fo(e,t,n){var r=e.cm&&e.cm.state.suppressEdits;if(!r||n){for(var i,o=e.history,a=e.sel,l="undo"==t?o.done:o.undone,s="undo"==t?o.undone:o.done,c=0;c=0;--h){var p=d(h);if(p)return p.v}}}}function ho(e,t){if(0!=t&&(e.first+=t,e.sel=new ki(X(e.sel.ranges,(function(e){return new Ci(et(e.anchor.line+t,e.anchor.ch),et(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){fr(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,r=n.viewFrom;re.lastLine())){if(t.from.lineo&&(t={from:t.from,to:et(o,Ke(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=$e(e,t.from,t.to),n||(n=Oi(e,t)),e.cm?function(e,t,n){var r=e.doc,i=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=Ze(Wt(Ke(r,o.line))),r.iter(s,a.line+1,(function(e){if(e==i.maxLine)return l=!0,!0}))),r.sel.contains(t.from,t.to)>-1&&ge(e),Pi(r,t,n,lr(e)),e.options.lineWrapping||(r.iter(s,o.line+t.text.length,(function(e){var t=Ut(e);t>i.maxLineLength&&(i.maxLine=e,i.maxLineLength=t,i.maxLineChanged=!0,l=!1)})),l&&(e.curOp.updateMaxLine=!0)),function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;r--){var i=Ke(e,r).stateAfter;if(i&&(!(i instanceof ct)||r+i.lookAhead1||!(this.children[0]instanceof xo))){var l=[];this.collapse(l),this.children=[new xo(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=i.lines.length%25+25,l=a;l10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var r=0;r0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=A("span",[o.replacedWith],"CodeMirror-widget"),r.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),r.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(_t(e,t.line,t,n,o)||t.line!=n.line&&_t(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");kt=!0}o.addToHistory&&Ri(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,c=e.cm;if(e.iter(s,n.line+1,(function(e){c&&o.collapsed&&!c.options.lineWrapping&&Wt(e)==c.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&Xe(e,0),function(e,t){e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],t.marker.attachLine(e)}(e,new Ct(o,s==t.line?t.ch:null,s==n.line?n.ch:null)),++s})),o.collapsed&&e.iter(t.line,n.line+1,(function(t){Bt(e,t)&&Xe(t,0)})),o.clearOnEnter&&fe(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(wt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++So,o.atomic=!0),c){if(l&&(c.curOp.updateMaxLine=!0),o.collapsed)fr(c,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var u=t.line;u<=n.line;u++)dr(c,u,"text");o.atomic&&no(c.doc),sn(c,"markerAdded",c,o)}return o}To.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Kr(e),ve(this,"clear")){var n=this.find();n&&sn(this,"clear",n.from,n.to)}for(var r=null,i=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=c,e.display.maxLineLength=u,e.display.maxLineChanged=!0)}null!=r&&e&&this.collapsed&&fr(e,r,i+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&no(e.doc)),e&&sn(e,"markerCleared",e,this,r,i),t&&$r(e),this.parent&&this.parent.clear()}},To.prototype.find=function(e,t){var n,r;null==e&&"bookmark"==this.type&&(e=1);for(var i=0;i=0;s--)co(this,r[s]);l?Qi(this,l):this.cm&&Er(this.cm)})),undo:ni((function(){fo(this,"undo")})),redo:ni((function(){fo(this,"redo")})),undoSelection:ni((function(){fo(this,"undo",!0)})),redoSelection:ni((function(){fo(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,r=0;r=e.ch)&&t.push(i.marker.parent||i.marker)}return t},findMarks:function(e,t,n){e=lt(this,e),t=lt(this,t);var r=[],i=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var l=0;l=s.to||null==s.from&&i!=e.line||null!=s.from&&i==t.line&&s.from>=t.ch||n&&!n(s.marker)||r.push(s.marker.parent||s.marker)}++i})),r},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var r=0;re)return t=e,!0;e-=o,++n})),lt(this,et(n,t))},indexFromPos:function(e){var t=(e=lt(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var f=e.dataTransfer.getData("Text");if(f){var d;if(t.state.draggingText&&!t.state.draggingText.copy&&(d=t.listSelections()),eo(t.doc,Ti(n,n)),d)for(var h=0;h=0;t--)mo(e.doc,"",r[t].from,r[t].to,"+delete");Er(e)}))}function Qo(e,t,n){var r=ie(e.text,t+n,n);return r<0||r>e.text.length?null:r}function Jo(e,t,n){var r=Qo(e,t.ch,n);return null==r?null:new et(t.line,r,n<0?"after":"before")}function ea(e,t,n,r,i){if(e){"rtl"==t.doc.direction&&(i=-i);var o=ce(n,t.doc.direction);if(o){var a,l=i<0?G(o):o[0],s=i<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var c=zn(t,n);a=i<0?n.text.length-1:0;var u=Pn(t,c,a).top;a=oe((function(e){return Pn(t,c,e).top==u}),i<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=Qo(n,a,1))}else a=i<0?l.to:l.from;return new et(r,a,s)}}return new et(r,i<0?n.text.length:0,i<0?"before":"after")}qo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},qo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},qo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Alt-F":"goWordRight","Alt-B":"goWordLeft","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-D":"delWordAfter","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},qo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},qo.default=y?qo.macDefault:qo.pcDefault;var ta={selectAll:lo,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),j)},killLine:function(e){return Yo(e,(function(t){if(t.empty()){var n=Ke(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)i=new et(i.line,i.ch+1),e.replaceRange(o.charAt(i.ch-1)+o.charAt(i.ch-2),et(i.line,i.ch-2),i,"+transpose");else if(i.line>e.doc.first){var a=Ke(e.doc,i.line-1).text;a&&(i=new et(i.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),et(i.line-1,a.length-1),i,"+transpose"))}n.push(new Ci(i,i))}e.setSelections(n)}))},newlineAndIndent:function(e){return Jr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var r=0;r-1&&(tt((i=c.ranges[i]).from(),t)<0||t.xRel>0)&&(tt(i.to(),t)>0||t.xRel<0)?function(e,t,n,r){var i=e.display,o=!1,c=ei(e,(function(t){s&&(i.scroller.draggable=!1),e.state.draggingText=!1,he(i.wrapper.ownerDocument,"mouseup",c),he(i.wrapper.ownerDocument,"mousemove",u),he(i.scroller,"dragstart",f),he(i.scroller,"drop",c),o||(be(t),r.addNew||Gi(e.doc,n,null,null,r.extend),s&&!d||a&&9==l?setTimeout((function(){i.wrapper.ownerDocument.body.focus({preventScroll:!0}),i.input.focus()}),20):i.input.focus())})),u=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},f=function(){return o=!0};s&&(i.scroller.draggable=!0),e.state.draggingText=c,c.copy=!r.moveOnDrag,i.scroller.dragDrop&&i.scroller.dragDrop(),fe(i.wrapper.ownerDocument,"mouseup",c),fe(i.wrapper.ownerDocument,"mousemove",u),fe(i.scroller,"dragstart",f),fe(i.scroller,"drop",c),Cr(e),setTimeout((function(){return i.input.focus()}),20)}(e,r,t,o):function(e,t,n,r){var i=e.display,o=e.doc;be(t);var a,l,s=o.sel,c=s.ranges;if(r.addNew&&!r.extend?(l=o.sel.contains(n),a=l>-1?c[l]:new Ci(n,n)):(a=o.sel.primary(),l=o.sel.primIndex),"rectangle"==r.unit)r.addNew||(a=new Ci(n,n)),n=cr(e,t,!0,!0),l=-1;else{var u=va(e,n,r.unit);a=r.extend?$i(a,u.anchor,u.head,r.extend):u}r.addNew?-1==l?(l=c.length,Ji(o,Si(e,c.concat([a]),l),{scroll:!1,origin:"*mouse"})):c.length>1&&c[l].empty()&&"char"==r.unit&&!r.extend?(Ji(o,Si(e,c.slice(0,l).concat(c.slice(l+1)),0),{scroll:!1,origin:"*mouse"}),s=o.sel):Zi(o,l,a,q):(l=0,Ji(o,new ki([a],0),q),s=o.sel);var f=n;function d(t){if(0!=tt(f,t))if(f=t,"rectangle"==r.unit){for(var i=[],c=e.options.tabSize,u=W(Ke(o,n.line).text,n.ch,c),d=W(Ke(o,t.line).text,t.ch,c),h=Math.min(u,d),p=Math.max(u,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Ke(o,m).text,y=V(v,h,c);h==p?i.push(new Ci(et(m,y),et(m,y))):v.length>y&&i.push(new Ci(et(m,y),et(m,V(v,p,c))))}i.length||i.push(new Ci(n,n)),Ji(o,Si(e,s.ranges.slice(0,l).concat(i),l),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var b,x=a,w=va(e,t,r.unit),k=x.anchor;tt(w.anchor,k)>0?(b=w.head,k=ot(x.from(),w.anchor)):(b=w.anchor,k=it(x.to(),w.head));var C=s.ranges.slice(0);C[l]=function(e,t){var n=t.anchor,r=t.head,i=Ke(e.doc,n.line);if(0==tt(n,r)&&n.sticky==r.sticky)return t;var o=ce(i);if(!o)return t;var a=le(o,n.ch,n.sticky),l=o[a];if(l.from!=n.ch&&l.to!=n.ch)return t;var s,c=a+(l.from==n.ch==(1!=l.level)?0:1);if(0==c||c==o.length)return t;if(r.line!=n.line)s=(r.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var u=le(o,r.ch,r.sticky),f=u-a||(r.ch-n.ch)*(1==l.level?-1:1);s=u==c-1||u==c?f<0:f>0}var d=o[c+(s?-1:0)],h=s==(1==d.level),p=h?d.from:d.to,m=h?"after":"before";return n.ch==p&&n.sticky==m?t:new Ci(new et(n.line,p,m),r)}(e,new Ci(lt(o,k),b)),Ji(o,Si(e,C,l),q)}}var h=i.wrapper.getBoundingClientRect(),p=0;function m(t){e.state.selectingText=!1,p=1/0,t&&(be(t),i.input.focus()),he(i.wrapper.ownerDocument,"mousemove",g),he(i.wrapper.ownerDocument,"mouseup",v),o.history.lastSelOrigin=null}var g=ei(e,(function(t){0!==t.buttons&&Se(t)?function t(n){var a=++p,l=cr(e,n,!0,"rectangle"==r.unit);if(l)if(0!=tt(l,f)){e.curOp.focus=z(),d(l);var s=Or(i,o);(l.line>=s.to||l.lineh.bottom?20:0;c&&setTimeout(ei(e,(function(){p==a&&(i.scroller.scrollTop+=c,t(n))})),50)}}(t):m(t)})),v=ei(e,m);e.state.selectingText=v,fe(i.wrapper.ownerDocument,"mousemove",g),fe(i.wrapper.ownerDocument,"mouseup",v)}(e,r,t,o)}(t,r,o,e):Ce(e)==n.scroller&&be(e):2==i?(r&&Gi(t.doc,r),setTimeout((function(){return n.input.focus()}),20)):3==i&&(C?t.display.input.onContextMenu(e):Cr(t)))}}function va(e,t,n){if("char"==n)return new Ci(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Ci(et(t.line,0),lt(e.doc,et(t.line+1,0)));var r=n(e,t);return new Ci(r.from,r.to)}function ya(e,t,n,r){var i,o;if(t.touches)i=t.touches[0].clientX,o=t.touches[0].clientY;else try{i=t.clientX,o=t.clientY}catch(e){return!1}if(i>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;r&&be(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!ve(e,n))return we(t);o-=l.top-a.viewOffset;for(var s=0;s=i)return pe(e,n,e,Ye(e.doc,o),e.display.gutterSpecs[s].className,t),we(t)}}function ba(e,t){return ya(e,t,"gutterClick",!0)}function xa(e,t){kn(e.display,t)||function(e,t){return!!ve(e,"gutterContextMenu")&&ya(e,t,"gutterContextMenu",!1)}(e,t)||me(e,t,"contextmenu")||C||e.display.input.onContextMenu(t)}function wa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),Rn(e)}ma.prototype.compare=function(e,t,n){return this.time+400>e&&0==tt(t,this.pos)&&n==this.button};var ka={toString:function(){return"CodeMirror.Init"}},Ca={},Sa={};function Ta(e,t,n){if(!t!=!(n&&n!=ka)){var r=e.display.dragFunctions,i=t?fe:he;i(e.display.scroller,"dragstart",r.start),i(e.display.scroller,"dragenter",r.enter),i(e.display.scroller,"dragover",r.over),i(e.display.scroller,"dragleave",r.leave),i(e.display.scroller,"drop",r.drop)}}function La(e){e.options.lineWrapping?(P(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(L(e.display.wrapper,"CodeMirror-wrap"),Vt(e)),sr(e),fr(e),Rn(e),setTimeout((function(){return Br(e)}),100)}function Ma(e,t){var n=this;if(!(this instanceof Ma))return new Ma(e,t);this.options=t=t?_(t):{},_(Ca,t,!1);var r=t.value;"string"==typeof r?r=new Eo(r,t.mode,null,t.lineSeparator,t.direction):t.mode&&(r.modeOption=t.mode),this.doc=r;var i=new Ma.inputStyles[t.inputStyle](this),o=this.display=new gi(e,r,i,t);for(var c in o.wrapper.CodeMirror=this,wa(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Ur(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new H,keySeq:null,specialChars:null},t.autofocus&&!v&&o.input.focus(),a&&l<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;fe(t.scroller,"mousedown",ei(e,ga)),fe(t.scroller,"dblclick",a&&l<11?ei(e,(function(t){if(!me(e,t)){var n=cr(e,t);if(n&&!ba(e,t)&&!kn(e.display,t)){be(t);var r=e.findWordAt(n);Gi(e.doc,r.anchor,r.head)}}})):function(t){return me(e,t)||be(t)}),fe(t.scroller,"contextmenu",(function(t){return xa(e,t)})),fe(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||xa(e,n)}));var n,r={end:0};function i(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(r=t.activeTouch).end=+new Date)}function o(e,t){if(null==t.left)return!0;var n=t.left-e.left,r=t.top-e.top;return n*n+r*r>400}fe(t.scroller,"touchstart",(function(i){if(!me(e,i)&&!function(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}(i)&&!ba(e,i)){t.input.ensurePolled(),clearTimeout(n);var o=+new Date;t.activeTouch={start:o,moved:!1,prev:o-r.end<=300?r:null},1==i.touches.length&&(t.activeTouch.left=i.touches[0].pageX,t.activeTouch.top=i.touches[0].pageY)}})),fe(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),fe(t.scroller,"touchend",(function(n){var r=t.activeTouch;if(r&&!kn(t,n)&&null!=r.left&&!r.moved&&new Date-r.start<300){var a,l=e.coordsChar(t.activeTouch,"page");a=!r.prev||o(r,r.prev)?new Ci(l,l):!r.prev.prev||o(r,r.prev.prev)?e.findWordAt(l):new Ci(et(l.line,0),lt(e.doc,et(l.line+1,0))),e.setSelection(a.anchor,a.head),e.focus(),be(n)}i()})),fe(t.scroller,"touchcancel",i),fe(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Ir(e,t.scroller.scrollTop),_r(e,t.scroller.scrollLeft,!0),pe(e,"scroll",e))})),fe(t.scroller,"mousewheel",(function(t){return wi(e,t)})),fe(t.scroller,"DOMMouseScroll",(function(t){return wi(e,t)})),fe(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){me(e,t)||ke(t)},over:function(t){me(e,t)||(function(e,t){var n=cr(e,t);if(n){var r=document.createDocumentFragment();yr(e,n,r),e.display.dragCursor||(e.display.dragCursor=N("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),O(e.display.dragCursor,r)}}(e,t),ke(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-zo<100))ke(t);else if(!me(e,t)&&!kn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!d)){var n=N("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",f&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),f&&n.parentNode.removeChild(n)}}(e,t)},drop:ei(e,Po),leave:function(t){me(e,t)||Do(e)}};var s=t.input.getField();fe(s,"keyup",(function(t){return fa.call(e,t)})),fe(s,"keydown",ei(e,ua)),fe(s,"keypress",ei(e,da)),fe(s,"focus",(function(t){return Sr(e,t)})),fe(s,"blur",(function(t){return Tr(e,t)}))}(this),_o(),Kr(this),this.curOp.forceUpdate=!0,Ii(this,r),t.autofocus&&!v||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Sr(n)}),20):Tr(this),Sa)Sa.hasOwnProperty(c)&&Sa[c](this,t[c],ka);di(this),t.finishInit&&t.finishInit(this);for(var u=0;u150)){if(!r)return;n="prev"}}else c=0,n="not";"prev"==n?c=t>o.first?W(Ke(o,t-1).text,null,a):0:"add"==n?c=s+e.options.indentUnit:"subtract"==n?c=s-e.options.indentUnit:"number"==typeof n&&(c=s+n),c=Math.max(0,c);var f="",d=0;if(e.options.indentWithTabs)for(var h=Math.floor(c/a);h;--h)d+=a,f+="\t";if(da,s=Ee(t),c=null;if(l&&r.ranges.length>1)if(Aa&&Aa.text.join("\n")==t){if(r.ranges.length%Aa.text.length==0){c=[];for(var u=0;u=0;d--){var h=r.ranges[d],p=h.from(),m=h.to();h.empty()&&(n&&n>0?p=et(p.line,p.ch-n):e.state.overwrite&&!l?m=et(m.line,Math.min(Ke(o,m.line).text.length,m.ch+G(s).length)):l&&Aa&&Aa.lineWise&&Aa.text.join("\n")==s.join("\n")&&(p=m=et(p.line,0)));var g={from:p,to:m,text:c?c[d%c.length]:s,origin:i||(l?"paste":e.state.cutIncoming>a?"cut":"+input")};co(e.doc,g),sn(e,"inputRead",e,g)}t&&!l&&Da(e,t),Er(e),e.curOp.updateInput<2&&(e.curOp.updateInput=f),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Pa(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||Jr(t,(function(){return za(t,n,0,null,"paste")})),!0}function Da(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,r=n.ranges.length-1;r>=0;r--){var i=n.ranges[r];if(!(i.head.ch>100||r&&n.ranges[r-1].head.line==i.head.line)){var o=e.getModeAt(i.head),a=!1;if(o.electricChars){for(var l=0;l-1){a=Na(e,i.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Ke(e.doc,i.head.line).text.slice(0,i.head.ch))&&(a=Na(e,i.head.line,"smart"));a&&sn(e,"electricInput",e,i.head.line)}}}function Ia(e){for(var t=[],n=[],r=0;r0?0:-1));a=isNaN(u)?null:new et(t.line,Math.max(0,Math.min(l.text.length,t.ch+n*(u>=55296&&u<56320?2:1))),-n)}else a=i?function(e,t,n,r){var i=ce(t,e.doc.direction);if(!i)return Jo(t,n,r);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=le(i,n.ch,n.sticky),a=i[o];if("ltr"==e.doc.direction&&a.level%2==0&&(r>0?a.to>n.ch:a.from=a.from&&d>=u.begin)){var h=f?"before":"after";return new et(n.line,d,h)}}var p=function(e,t,r){for(var o=function(e,t){return t?new et(n.line,s(e,1),"before"):new et(n.line,e,"after")};e>=0&&e0==(1!=a.level),c=l?r.begin:s(r.end,-1);if(a.from<=c&&c0?u.end:s(u.begin,-1);return null==g||r>0&&g==t.text.length||!(m=p(r>0?0:i.length-1,r,c(g)))?null:m}(e.cm,l,t,n):Jo(l,t,n);if(null==a){if(o||(c=t.line+s)=e.first+e.size||(t=new et(c,t.ch,t.sticky),!(l=Ke(e,c))))return!1;t=ea(i,e.cm,l,t.line,s)}else t=a;return!0}if("char"==r||"codepoint"==r)c();else if("column"==r)c(!0);else if("word"==r||"group"==r)for(var u=null,f="group"==r,d=e.cm&&e.cm.getHelper(t,"wordChars"),h=!0;!(n<0)||c(!h);h=!1){var p=l.text.charAt(t.ch)||"\n",m=ee(p,d)?"w":f&&"\n"==p?"n":!f||/\s/.test(p)?null:"p";if(!f||h||m||(m="s"),u&&u!=m){n<0&&(n=1,c(),t.sticky="after");break}if(m&&(u=m),n>0&&!c(!h))break}var g=oo(e,t,o,a,!0);return nt(o,g)&&(g.hitSide=!0),g}function Ha(e,t,n,r){var i,o,a=e.doc,l=t.left;if("page"==r){var s=Math.min(e.display.wrapper.clientHeight,window.innerHeight||document.documentElement.clientHeight),c=Math.max(s-.5*rr(e.display),3);i=(n>0?t.bottom:t.top)+n*c}else"line"==r&&(i=n>0?t.bottom+3:t.top-3);for(;(o=Zn(e,l,i)).outside;){if(n<0?i<=0:i>=a.height){o.hitSide=!0;break}i+=5*n}return o}var Ra=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new H,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function Ba(e,t){var n=En(e,t.line);if(!n||n.hidden)return null;var r=Ke(e.doc,t.line),i=Nn(n,r,t.line),o=ce(r,e.doc.direction),a="left";o&&(a=le(o,t.ch)%2?"right":"left");var l=Fn(i.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function ja(e,t){return t&&(e.bad=!0),e}function qa(e,t,n){var r;if(t==e.display.lineDiv){if(!(r=e.display.lineDiv.childNodes[n]))return ja(e.clipPos(et(e.display.viewTo-1)),!0);t=null,n=0}else for(r=t;;r=r.parentNode){if(!r||r==e.display.lineDiv)return null;if(r.parentNode&&r.parentNode==e.display.lineDiv)break}for(var i=0;i=t.display.viewTo||o.line=t.display.viewFrom&&Ba(t,i)||{node:s[0].measure.map[2],offset:0},u=o.liner.firstLine()&&(a=et(a.line-1,Ke(r.doc,a.line-1).length)),l.ch==Ke(r.doc,l.line).text.length&&l.linei.viewTo-1)return!1;a.line==i.viewFrom||0==(e=ur(r,a.line))?(t=Ze(i.view[0].line),n=i.view[0].node):(t=Ze(i.view[e].line),n=i.view[e-1].node.nextSibling);var s,c,u=ur(r,l.line);if(u==i.view.length-1?(s=i.viewTo-1,c=i.lineDiv.lastChild):(s=Ze(i.view[u+1].line)-1,c=i.view[u+1].node.previousSibling),!n)return!1;for(var f=r.doc.splitLines(function(e,t,n,r,i){var o="",a=!1,l=e.doc.lineSeparator(),s=!1;function c(){a&&(o+=l,s&&(o+=l),a=s=!1)}function u(e){e&&(c(),o+=e)}function f(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void u(n);var o,d=t.getAttribute("cm-marker");if(d){var h=e.findMarks(et(r,0),et(i+1,0),(g=+d,function(e){return e.id==g}));return void(h.length&&(o=h[0].find(0))&&u($e(e.doc,o.from,o.to).join(l)))}if("false"==t.getAttribute("contenteditable"))return;var p=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;p&&c();for(var m=0;m1&&d.length>1;)if(G(f)==G(d))f.pop(),d.pop(),s--;else{if(f[0]!=d[0])break;f.shift(),d.shift(),t++}for(var h=0,p=0,m=f[0],g=d[0],v=Math.min(m.length,g.length);ha.ch&&y.charCodeAt(y.length-p-1)==b.charCodeAt(b.length-p-1);)h--,p++;f[f.length-1]=y.slice(0,y.length-p).replace(/^\u200b+/,""),f[0]=f[0].slice(h).replace(/\u200b+$/,"");var w=et(t,h),k=et(s,d.length?G(d).length-p:0);return f.length>1||f[0]||tt(w,k)?(mo(r.doc,f,w,k,"+input"),!0):void 0},Ra.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ra.prototype.reset=function(){this.forceCompositionEnd()},Ra.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ra.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Ra.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||Jr(this.cm,(function(){return fr(e.cm)}))},Ra.prototype.setUneditable=function(e){e.contentEditable="false"},Ra.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ei(this.cm,za)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Ra.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Ra.prototype.onContextMenu=function(){},Ra.prototype.resetPosition=function(){},Ra.prototype.needsContentAttribute=!0;var Va=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new H,this.hasSelection=!1,this.composing=null};Va.prototype.init=function(e){var t=this,n=this,r=this.cm;this.createField(e);var i=this.textarea;function o(e){if(!me(r,e)){if(r.somethingSelected())Ea({lineWise:!1,text:r.getSelections()});else{if(!r.options.lineWiseCopyCut)return;var t=Ia(r);Ea({lineWise:!0,text:t.text}),"cut"==e.type?r.setSelections(t.ranges,null,j):(n.prevInput="",i.value=t.text.join("\n"),I(i))}"cut"==e.type&&(r.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),m&&(i.style.width="0px"),fe(i,"input",(function(){a&&l>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),fe(i,"paste",(function(e){me(r,e)||Pa(e,r)||(r.state.pasteIncoming=+new Date,n.fastPoll())})),fe(i,"cut",o),fe(i,"copy",o),fe(e.scroller,"paste",(function(t){if(!kn(e,t)&&!me(r,t)){if(!i.dispatchEvent)return r.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,i.dispatchEvent(o)}})),fe(e.lineSpace,"selectstart",(function(t){kn(e,t)||be(t)})),fe(i,"compositionstart",(function(){var e=r.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:r.markText(e,r.getCursor("to"),{className:"CodeMirror-composing"})}})),fe(i,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Va.prototype.createField=function(e){this.wrapper=_a(),this.textarea=this.wrapper.firstChild},Va.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Va.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,r=vr(e);if(e.options.moveInputWithCursor){var i=$n(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();r.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,i.top+a.top-o.top)),r.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,i.left+a.left-o.left))}return r},Va.prototype.showSelection=function(e){var t=this.cm.display;O(t.cursorDiv,e.cursors),O(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Va.prototype.reset=function(e){if(!this.contextMenuPending&&!this.composing){var t=this.cm;if(t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&I(this.textarea),a&&l>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&l>=9&&(this.hasSelection=null))}},Va.prototype.getField=function(){return this.textarea},Va.prototype.supportsTouch=function(){return!1},Va.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!v||z()!=this.textarea))try{this.textarea.focus()}catch(e){}},Va.prototype.blur=function(){this.textarea.blur()},Va.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Va.prototype.receivedFocus=function(){this.slowPoll()},Va.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Va.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Va.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,r=this.prevInput;if(this.contextMenuPending||!t.state.focused||ze(n)&&!r&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var i=n.value;if(i==r&&!t.somethingSelected())return!1;if(a&&l>=9&&this.hasSelection===i||y&&/[\uf700-\uf7ff]/.test(i))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=i.charCodeAt(0);if(8203!=o||r||(r="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,c=Math.min(r.length,i.length);s1e3||i.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=i,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Va.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Va.prototype.onKeyPress=function(){a&&l>=9&&(this.hasSelection=null),this.fastPoll()},Va.prototype.onContextMenu=function(e){var t=this,n=t.cm,r=n.display,i=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=cr(n,e),c=r.scroller.scrollTop;if(o&&!f){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(o)&&ei(n,Ji)(n.doc,Ti(o),j);var u,d=i.style.cssText,h=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",i.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",s&&(u=window.scrollY),r.input.focus(),s&&window.scrollTo(null,u),r.input.reset(),n.somethingSelected()||(i.value=t.prevInput=" "),t.contextMenuPending=v,r.selForContextMenu=n.doc.sel,clearTimeout(r.detectingSelectAll),a&&l>=9&&g(),C){ke(e);var m=function(){he(window,"mouseup",m),setTimeout(v,20)};fe(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=i.selectionStart){var e=n.somethingSelected(),o="​"+(e?i.value:"");i.value="⇚",i.value=o,t.prevInput=e?"":"​",i.selectionStart=1,i.selectionEnd=o.length,r.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=h,i.style.cssText=d,a&&l<9&&r.scrollbars.setScrollTop(r.scroller.scrollTop=c),null!=i.selectionStart)){(!a||a&&l<9)&&g();var e=0,o=function(){r.selForContextMenu==n.doc.sel&&0==i.selectionStart&&i.selectionEnd>0&&"​"==t.prevInput?ei(n,lo)(n):e++<10?r.detectingSelectAll=setTimeout(o,500):(r.selForContextMenu=null,r.input.reset())};r.detectingSelectAll=setTimeout(o,200)}}},Va.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Va.prototype.setUneditable=function(){},Va.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,r,i,o){e.defaults[n]=r,i&&(t[n]=o?function(e,t,n){n!=ka&&i(e,t,n)}:i)}e.defineOption=n,e.Init=ka,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,Ai(e)}),!0),n("indentUnit",2,Ai,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){Ei(e),Rn(e),fr(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],r=e.doc.first;e.doc.iter((function(e){for(var i=0;;){var o=e.text.indexOf(t,i);if(-1==o)break;i=o+t.length,n.push(et(r,o))}r++}));for(var i=n.length-1;i>=0;i--)mo(e.doc,t,n[i],et(n[i].line,n[i].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b-\u200c\u200e\u200f\u2028\u2029\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=ka&&e.refresh()})),n("specialCharPlaceholder",Qt,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",v?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!x),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){wa(e),mi(e)}),!0),n("keyMap","default",(function(e,t,n){var r=Zo(t),i=n!=ka&&Zo(n);i&&i.detach&&i.detach(e,r),r.attach&&r.attach(e,i||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,La,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=hi(t,e.options.lineNumbers),mi(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?ar(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Br(e)}),!0),n("scrollbarStyle","native",(function(e){Ur(e),Br(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=hi(e.options.gutters,t),mi(e)}),!0),n("firstLineNumber",1,mi,!0),n("lineNumberFormatter",(function(e){return e}),mi,!0),n("showCursorWhenSelecting",!1,gr,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Tr(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,Ta),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,gr,!0),n("singleCursorHeightPerLine",!0,gr,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Ei,!0),n("addModeClass",!1,Ei,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,Ei,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(Ma),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){window.focus(),this.display.input.focus()},setOption:function(e,n){var r=this.options,i=r[e];r[e]==n&&"mode"!=e||(r[e]=n,t.hasOwnProperty(e)&&ei(this,t[e])(this,n,i),pe(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](Zo(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Na(this,i.head.line,e,!0),n=i.head.line,r==this.doc.sel.primIndex&&Er(this));else{var o=i.from(),a=i.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s0&&Zi(this.doc,r,new Ci(o,c[r].to()),j)}}})),getTokenAt:function(e,t){return yt(this,e,t)},getLineTokens:function(e,t){return yt(this,et(e),t,!0)},getTokenTypeAt:function(e){e=lt(this.doc,e);var t,n=dt(this,Ke(this.doc,e.line)),r=0,i=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=r+i>>1;if((a?n[2*a-1]:0)>=o)i=a;else{if(!(n[2*a+1]o&&(e=o,i=!0),r=Ke(this.doc,e)}else r=e;return Un(this,r,{top:0,left:0},t||"page",n||i).top+(i?this.doc.height-qt(r):0)},defaultTextHeight:function(){return rr(this.display)},defaultCharWidth:function(){return ir(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,r,i){var o,a,l,s=this.display,c=(e=$n(this,lt(this.doc,e))).bottom,u=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==r)c=e.top;else if("above"==r||"near"==r){var f=Math.max(s.wrapper.clientHeight,this.doc.height),d=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==r||e.bottom+t.offsetHeight>f)&&e.top>t.offsetHeight?c=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=f&&(c=e.bottom),u+t.offsetWidth>d&&(u=d-t.offsetWidth)}t.style.top=c+"px",t.style.left=t.style.right="","right"==i?(u=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==i?u=0:"middle"==i&&(u=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=u+"px"),n&&(o=this,a={left:u,top:c,right:u+t.offsetWidth,bottom:c+t.offsetHeight},null!=(l=Nr(o,a)).scrollTop&&Ir(o,l.scrollTop),null!=l.scrollLeft&&_r(o,l.scrollLeft))},triggerOnKeyDown:ti(ua),triggerOnKeyPress:ti(da),triggerOnKeyUp:fa,triggerOnMouseDown:ti(ga),execCommand:function(e){if(ta.hasOwnProperty(e))return ta[e].call(null,this)},triggerElectric:ti((function(e){Da(this,e)})),findPosH:function(e,t,n,r){var i=1;t<0&&(i=-1,t=-t);for(var o=lt(this.doc,e),a=0;a0&&a(t.charAt(n-1));)--n;for(;r.5||this.options.lineWrapping)&&sr(this),pe(this,"refresh",this)})),swapDoc:ti((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Ii(this,e),Rn(this),this.display.input.reset(),zr(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,sn(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},ye(e),e.registerHelper=function(t,r,i){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][r]=i},e.registerGlobalHelper=function(t,r,i,o){e.registerHelper(t,r,o),n[t]._global.push({pred:i,val:o})}}(Ma);var Ka="iter insert remove copy getEditor constructor".split(" ");for(var $a in Eo.prototype)Eo.prototype.hasOwnProperty($a)&&R(Ka,$a)<0&&(Ma.prototype[$a]=function(e){return function(){return e.apply(this.doc,arguments)}}(Eo.prototype[$a]));return ye(Eo),Ma.inputStyles={textarea:Va,contenteditable:Ra},Ma.defineMode=function(e){Ma.defaults.mode||"null"==e||(Ma.defaults.mode=e),_e.apply(this,arguments)},Ma.defineMIME=function(e,t){Fe[e]=t},Ma.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Ma.defineMIME("text/plain","null"),Ma.defineExtension=function(e,t){Ma.prototype[e]=t},Ma.defineDocExtension=function(e,t){Eo.prototype[e]=t},Ma.fromTextArea=function(e,t){if((t=t?_(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=z();t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function r(){e.value=l.getValue()}var i;if(e.form&&(fe(e.form,"submit",r),!t.leaveSubmitMethodAlone)){var o=e.form;i=o.submit;try{var a=o.submit=function(){r(),o.submit=i,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(n){n.save=r,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,r(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(he(e.form,"submit",r),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=i))}},e.style.display="none";var l=Ma((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return l},function(e){e.off=he,e.on=fe,e.wheelEventPixels=xi,e.Doc=Eo,e.splitLines=Ee,e.countColumn=W,e.findColumn=V,e.isWordChar=J,e.Pass=B,e.signal=pe,e.Line=Kt,e.changeEnd=Li,e.scrollbarModel=qr,e.Pos=et,e.cmpPos=tt,e.modes=Ie,e.mimeModes=Fe,e.resolveMode=We,e.getMode=He,e.modeExtensions=Re,e.extendMode=Be,e.copyState=je,e.startState=Ue,e.innerMode=qe,e.commands=ta,e.keyMap=qo,e.keyName=Xo,e.isModifierKey=$o,e.lookupKey=Ko,e.normalizeKeyMap=Vo,e.StringStream=Ve,e.SharedTextMarker=Mo,e.TextMarker=To,e.LineWidget=ko,e.e_preventDefault=be,e.e_stopPropagation=xe,e.e_stop=ke,e.addClass=P,e.contains=E,e.rmClass=L,e.keyNames=Ho}(Ma),Ma.version="5.58.1",Ma}()},function(e,t,n){!function(e){"use strict";var t,n,r=e.Pos;function i(e,t){for(var n=function(e){var t=e.flags;return null!=t?t:(e.ignoreCase?"i":"")+(e.global?"g":"")+(e.multiline?"m":"")}(e),r=n,i=0;ic);u++){var f=e.getLine(s++);a=null==a?f:a+"\n"+f}l*=2,t.lastIndex=n.ch;var d=t.exec(a);if(d){var h=a.slice(0,d.index).split("\n"),p=d[0].split("\n"),m=n.line+h.length-1,g=h[h.length-1].length;return{from:r(m,g),to:r(m+p.length-1,1==p.length?g+p[0].length:p[p.length-1].length),match:d}}}}function l(e,t){for(var n,r=0;;){t.lastIndex=r;var i=t.exec(e);if(!i)return n;if((r=(n=i).index+(n[0].length||1))==e.length)return n}}function s(e,t,n){t=i(t,"g");for(var o=n.line,a=n.ch,s=e.firstLine();o>=s;o--,a=-1){var c=e.getLine(o);a>-1&&(c=c.slice(0,a));var u=l(c,t);if(u)return{from:r(o,u.index),to:r(o,u.index+u[0].length),match:u}}}function c(e,t,n){t=i(t,"gm");for(var o,a=1,s=n.line,c=e.firstLine();s>=c;){for(var u=0;u>1,l=r(e.slice(0,a)).length;if(l==n)return a;l>n?o=a:i=a+1}}function f(e,i,o,a){if(!i.length)return null;var l=a?t:n,s=l(i).split(/\r|\n\r?/);e:for(var c=o.line,f=o.ch,d=e.lastLine()+1-s.length;c<=d;c++,f=0){var h=e.getLine(c).slice(f),p=l(h);if(1==s.length){var m=p.indexOf(s[0]);if(-1==m)continue e;return o=u(h,p,m,l)+f,{from:r(c,u(h,p,m,l)+f),to:r(c,u(h,p,m+s[0].length,l)+f)}}var g=p.length-s[0].length;if(p.slice(g)==s[0]){for(var v=1;v=d;c--,f=-1){var h=e.getLine(c);f>-1&&(h=h.slice(0,f));var p=l(h);if(1==s.length){var m=p.lastIndexOf(s[0]);if(-1==m)continue e;return{from:r(c,u(h,p,m,l)),to:r(c,u(h,p,m+s[0].length,l))}}var g=s[s.length-1];if(p.slice(0,g.length)==g){var v=1;for(o=c-s.length+1;v0);)r.push({anchor:i.from(),head:i.to()});r.length&&this.setSelections(r,0)}))}(n(0))},function(e,t,n){!function(e){"use strict";e.defineMode("javascript",(function(t,n){var r,i,o=t.indentUnit,a=n.statementIndent,l=n.jsonld,s=n.json||l,c=n.typescript,u=n.wordCharacters||/[\w$\xa1-\uffff]/,f=function(){function e(e){return{type:e,style:"keyword"}}var t=e("keyword a"),n=e("keyword b"),r=e("keyword c"),i=e("keyword d"),o=e("operator"),a={type:"atom",style:"atom"};return{if:e("if"),while:t,with:t,else:n,do:n,try:n,finally:n,return:i,break:i,continue:i,new:e("new"),delete:r,void:r,throw:r,debugger:e("debugger"),var:e("var"),const:e("var"),let:e("var"),function:e("function"),catch:e("catch"),for:e("for"),switch:e("switch"),case:e("case"),default:e("default"),in:o,typeof:o,instanceof:o,true:a,false:a,null:a,undefined:a,NaN:a,Infinity:a,this:e("this"),class:e("class"),super:e("atom"),yield:r,export:e("export"),import:e("import"),extends:r,await:r}}(),d=/[+\-*&%=<>!?|~^@]/,h=/^@(context|id|value|language|type|container|list|set|reverse|index|base|vocab|graph)"/;function p(e,t,n){return r=e,i=n,t}function m(e,t){var n,r=e.next();if('"'==r||"'"==r)return t.tokenize=(n=r,function(e,t){var r,i=!1;if(l&&"@"==e.peek()&&e.match(h))return t.tokenize=m,p("jsonld-keyword","meta");for(;null!=(r=e.next())&&(r!=n||i);)i=!i&&"\\"==r;return i||(t.tokenize=m),p("string","string")}),t.tokenize(e,t);if("."==r&&e.match(/^\d[\d_]*(?:[eE][+\-]?[\d_]+)?/))return p("number","number");if("."==r&&e.match(".."))return p("spread","meta");if(/[\[\]{}\(\),;\:\.]/.test(r))return p(r);if("="==r&&e.eat(">"))return p("=>","operator");if("0"==r&&e.match(/^(?:x[\dA-Fa-f_]+|o[0-7_]+|b[01_]+)n?/))return p("number","number");if(/\d/.test(r))return e.match(/^[\d_]*(?:n|(?:\.[\d_]*)?(?:[eE][+\-]?[\d_]+)?)?/),p("number","number");if("/"==r)return e.eat("*")?(t.tokenize=g,g(e,t)):e.eat("/")?(e.skipToEnd(),p("comment","comment")):$e(e,t,1)?(function(e){for(var t,n=!1,r=!1;null!=(t=e.next());){if(!n){if("/"==t&&!r)return;"["==t?r=!0:r&&"]"==t&&(r=!1)}n=!n&&"\\"==t}}(e),e.match(/^\b(([gimyus])(?![gimyus]*\2))+\b/),p("regexp","string-2")):(e.eat("="),p("operator","operator",e.current()));if("`"==r)return t.tokenize=v,v(e,t);if("#"==r&&"!"==e.peek())return e.skipToEnd(),p("meta","meta");if("#"==r&&e.eatWhile(u))return p("variable","property");if("<"==r&&e.match("!--")||"-"==r&&e.match("->")&&!/\S/.test(e.string.slice(0,e.start)))return e.skipToEnd(),p("comment","comment");if(d.test(r))return">"==r&&t.lexical&&">"==t.lexical.type||(e.eat("=")?"!"!=r&&"="!=r||e.eat("="):/[<>*+\-|&?]/.test(r)&&(e.eat(r),">"==r&&e.eat(r))),"?"==r&&e.eat(".")?p("."):p("operator","operator",e.current());if(u.test(r)){e.eatWhile(u);var i=e.current();if("."!=t.lastType){if(f.propertyIsEnumerable(i)){var o=f[i];return p(o.type,o.style,i)}if("async"==i&&e.match(/^(\s|\/\*([^*]|\*(?!\/))*?\*\/)*[\[\(\w]/,!1))return p("async","keyword",i)}return p("variable","variable",i)}}function g(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=m;break}r="*"==n}return p("comment","comment")}function v(e,t){for(var n,r=!1;null!=(n=e.next());){if(!r&&("`"==n||"$"==n&&e.eat("{"))){t.tokenize=m;break}r=!r&&"\\"==n}return p("quasi","string-2",e.current())}function y(e,t){t.fatArrowAt&&(t.fatArrowAt=null);var n=e.string.indexOf("=>",e.start);if(!(n<0)){if(c){var r=/:\s*(?:\w+(?:<[^>]*>|\[\])?|\{[^}]*\})\s*$/.exec(e.string.slice(e.start,n));r&&(n=r.index)}for(var i=0,o=!1,a=n-1;a>=0;--a){var l=e.string.charAt(a),s="([{}])".indexOf(l);if(s>=0&&s<3){if(!i){++a;break}if(0==--i){"("==l&&(o=!0);break}}else if(s>=3&&s<6)++i;else if(u.test(l))o=!0;else if(/["'\/`]/.test(l))for(;;--a){if(0==a)return;if(e.string.charAt(a-1)==l&&"\\"!=e.string.charAt(a-2)){a--;break}}else if(o&&!i){++a;break}}o&&!i&&(t.fatArrowAt=a)}}var b={atom:!0,number:!0,variable:!0,string:!0,regexp:!0,this:!0,"jsonld-keyword":!0};function x(e,t,n,r,i,o){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=o,null!=r&&(this.align=r)}function w(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0;for(var r=e.context;r;r=r.prev)for(n=r.vars;n;n=n.next)if(n.name==t)return!0}var k={state:null,column:null,marked:null,cc:null};function C(){for(var e=arguments.length-1;e>=0;e--)k.cc.push(arguments[e])}function S(){return C.apply(null,arguments),!0}function T(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function L(e){var t=k.state;if(k.marked="def",t.context)if("var"==t.lexical.info&&t.context&&t.context.block){var r=function e(t,n){if(n){if(n.block){var r=e(t,n.prev);return r?r==n.prev?n:new O(r,n.vars,!0):null}return T(t,n.vars)?n:new O(n.prev,new N(t,n.vars),!1)}return null}(e,t.context);if(null!=r)return void(t.context=r)}else if(!T(e,t.localVars))return void(t.localVars=new N(e,t.localVars));n.globalVars&&!T(e,t.globalVars)&&(t.globalVars=new N(e,t.globalVars))}function M(e){return"public"==e||"private"==e||"protected"==e||"abstract"==e||"readonly"==e}function O(e,t,n){this.prev=e,this.vars=t,this.block=n}function N(e,t){this.name=e,this.next=t}var A=new N("this",new N("arguments",null));function E(){k.state.context=new O(k.state.context,k.state.localVars,!1),k.state.localVars=A}function z(){k.state.context=new O(k.state.context,k.state.localVars,!0),k.state.localVars=null}function P(){k.state.localVars=k.state.context.vars,k.state.context=k.state.context.prev}function D(e,t){var n=function(){var n=k.state,r=n.indented;if("stat"==n.lexical.type)r=n.lexical.indented;else for(var i=n.lexical;i&&")"==i.type&&i.align;i=i.prev)r=i.indented;n.lexical=new x(r,k.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function I(){var e=k.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function F(e){return function t(n){return n==e?S():";"==e||"}"==n||")"==n||"]"==n?C():S(t)}}function _(e,t){return"var"==e?S(D("vardef",t),ye,F(";"),I):"keyword a"==e?S(D("form"),B,_,I):"keyword b"==e?S(D("form"),_,I):"keyword d"==e?k.stream.match(/^\s*$/,!1)?S():S(D("stat"),q,F(";"),I):"debugger"==e?S(F(";")):"{"==e?S(D("}"),z,oe,I,P):";"==e?S():"if"==e?("else"==k.state.lexical.info&&k.state.cc[k.state.cc.length-1]==I&&k.state.cc.pop()(),S(D("form"),B,_,I,Se)):"function"==e?S(Oe):"for"==e?S(D("form"),Te,_,I):"class"==e||c&&"interface"==t?(k.marked="keyword",S(D("form","class"==e?e:t),Pe,I)):"variable"==e?c&&"declare"==t?(k.marked="keyword",S(_)):c&&("module"==t||"enum"==t||"type"==t)&&k.stream.match(/^\s*\w/,!1)?(k.marked="keyword","enum"==t?S(Ve):"type"==t?S(Ae,F("operator"),ue,F(";")):S(D("form"),be,F("{"),D("}"),oe,I,I)):c&&"namespace"==t?(k.marked="keyword",S(D("form"),H,_,I)):c&&"abstract"==t?(k.marked="keyword",S(_)):S(D("stat"),Q):"switch"==e?S(D("form"),B,F("{"),D("}","switch"),z,oe,I,I,P):"case"==e?S(H,F(":")):"default"==e?S(F(":")):"catch"==e?S(D("form"),E,W,_,I,P):"export"==e?S(D("stat"),_e,I):"import"==e?S(D("stat"),He,I):"async"==e?S(_):"@"==t?S(H,_):C(D("stat"),H,F(";"),I)}function W(e){if("("==e)return S(Ee,F(")"))}function H(e,t){return j(e,t,!1)}function R(e,t){return j(e,t,!0)}function B(e){return"("!=e?C():S(D(")"),q,F(")"),I)}function j(e,t,n){if(k.state.fatArrowAt==k.stream.start){var r=n?X:G;if("("==e)return S(E,D(")"),re(Ee,")"),I,F("=>"),r,P);if("variable"==e)return C(E,be,F("=>"),r,P)}var i=n?V:U;return b.hasOwnProperty(e)?S(i):"function"==e?S(Oe,i):"class"==e||c&&"interface"==t?(k.marked="keyword",S(D("form"),ze,I)):"keyword c"==e||"async"==e?S(n?R:H):"("==e?S(D(")"),q,F(")"),I,i):"operator"==e||"spread"==e?S(n?R:H):"["==e?S(D("]"),Ue,I,i):"{"==e?ie(ee,"}",null,i):"quasi"==e?C(K,i):"new"==e?S(function(e){return function(t){return"."==t?S(e?Y:Z):"variable"==t&&c?S(me,e?V:U):C(e?R:H)}}(n)):"import"==e?S(H):S()}function q(e){return e.match(/[;\}\)\],]/)?C():C(H)}function U(e,t){return","==e?S(q):V(e,t,!1)}function V(e,t,n){var r=0==n?U:V,i=0==n?H:R;return"=>"==e?S(E,n?X:G,P):"operator"==e?/\+\+|--/.test(t)||c&&"!"==t?S(r):c&&"<"==t&&k.stream.match(/^([^<>]|<[^<>]*>)*>\s*\(/,!1)?S(D(">"),re(ue,">"),I,r):"?"==t?S(H,F(":"),i):S(i):"quasi"==e?C(K,r):";"!=e?"("==e?ie(R,")","call",r):"."==e?S(J,r):"["==e?S(D("]"),q,F("]"),I,r):c&&"as"==t?(k.marked="keyword",S(ue,r)):"regexp"==e?(k.state.lastType=k.marked="operator",k.stream.backUp(k.stream.pos-k.stream.start-1),S(i)):void 0:void 0}function K(e,t){return"quasi"!=e?C():"${"!=t.slice(t.length-2)?S(K):S(H,$)}function $(e){if("}"==e)return k.marked="string-2",k.state.tokenize=v,S(K)}function G(e){return y(k.stream,k.state),C("{"==e?_:H)}function X(e){return y(k.stream,k.state),C("{"==e?_:R)}function Z(e,t){if("target"==t)return k.marked="keyword",S(U)}function Y(e,t){if("target"==t)return k.marked="keyword",S(V)}function Q(e){return":"==e?S(I,_):C(U,F(";"),I)}function J(e){if("variable"==e)return k.marked="property",S()}function ee(e,t){return"async"==e?(k.marked="property",S(ee)):"variable"==e||"keyword"==k.style?(k.marked="property","get"==t||"set"==t?S(te):(c&&k.state.fatArrowAt==k.stream.start&&(n=k.stream.match(/^\s*:\s*/,!1))&&(k.state.fatArrowAt=k.stream.pos+n[0].length),S(ne))):"number"==e||"string"==e?(k.marked=l?"property":k.style+" property",S(ne)):"jsonld-keyword"==e?S(ne):c&&M(t)?(k.marked="keyword",S(ee)):"["==e?S(H,ae,F("]"),ne):"spread"==e?S(R,ne):"*"==t?(k.marked="keyword",S(ee)):":"==e?C(ne):void 0;var n}function te(e){return"variable"!=e?C(ne):(k.marked="property",S(Oe))}function ne(e){return":"==e?S(R):"("==e?C(Oe):void 0}function re(e,t,n){function r(i,o){if(n?n.indexOf(i)>-1:","==i){var a=k.state.lexical;return"call"==a.info&&(a.pos=(a.pos||0)+1),S((function(n,r){return n==t||r==t?C():C(e)}),r)}return i==t||o==t?S():n&&n.indexOf(";")>-1?C(e):S(F(t))}return function(n,i){return n==t||i==t?S():C(e,r)}}function ie(e,t,n){for(var r=3;r"),ue):void 0}function fe(e){if("=>"==e)return S(ue)}function de(e,t){return"variable"==e||"keyword"==k.style?(k.marked="property",S(de)):"?"==t||"number"==e||"string"==e?S(de):":"==e?S(ue):"["==e?S(F("variable"),le,F("]"),de):"("==e?C(Ne,de):void 0}function he(e,t){return"variable"==e&&k.stream.match(/^\s*[?:]/,!1)||"?"==t?S(he):":"==e?S(ue):"spread"==e?S(he):C(ue)}function pe(e,t){return"<"==t?S(D(">"),re(ue,">"),I,pe):"|"==t||"."==e||"&"==t?S(ue):"["==e?S(ue,F("]"),pe):"extends"==t||"implements"==t?(k.marked="keyword",S(ue)):"?"==t?S(ue,F(":"),ue):void 0}function me(e,t){if("<"==t)return S(D(">"),re(ue,">"),I,pe)}function ge(){return C(ue,ve)}function ve(e,t){if("="==t)return S(ue)}function ye(e,t){return"enum"==t?(k.marked="keyword",S(Ve)):C(be,ae,ke,Ce)}function be(e,t){return c&&M(t)?(k.marked="keyword",S(be)):"variable"==e?(L(t),S()):"spread"==e?S(be):"["==e?ie(we,"]"):"{"==e?ie(xe,"}"):void 0}function xe(e,t){return"variable"!=e||k.stream.match(/^\s*:/,!1)?("variable"==e&&(k.marked="property"),"spread"==e?S(be):"}"==e?C():"["==e?S(H,F("]"),F(":"),xe):S(F(":"),be,ke)):(L(t),S(ke))}function we(){return C(be,ke)}function ke(e,t){if("="==t)return S(R)}function Ce(e){if(","==e)return S(ye)}function Se(e,t){if("keyword b"==e&&"else"==t)return S(D("form","else"),_,I)}function Te(e,t){return"await"==t?S(Te):"("==e?S(D(")"),Le,I):void 0}function Le(e){return"var"==e?S(ye,Me):"variable"==e?S(Me):C(Me)}function Me(e,t){return")"==e?S():";"==e?S(Me):"in"==t||"of"==t?(k.marked="keyword",S(H,Me)):C(H,Me)}function Oe(e,t){return"*"==t?(k.marked="keyword",S(Oe)):"variable"==e?(L(t),S(Oe)):"("==e?S(E,D(")"),re(Ee,")"),I,se,_,P):c&&"<"==t?S(D(">"),re(ge,">"),I,Oe):void 0}function Ne(e,t){return"*"==t?(k.marked="keyword",S(Ne)):"variable"==e?(L(t),S(Ne)):"("==e?S(E,D(")"),re(Ee,")"),I,se,P):c&&"<"==t?S(D(">"),re(ge,">"),I,Ne):void 0}function Ae(e,t){return"keyword"==e||"variable"==e?(k.marked="type",S(Ae)):"<"==t?S(D(">"),re(ge,">"),I):void 0}function Ee(e,t){return"@"==t&&S(H,Ee),"spread"==e?S(Ee):c&&M(t)?(k.marked="keyword",S(Ee)):c&&"this"==e?S(ae,ke):C(be,ae,ke)}function ze(e,t){return"variable"==e?Pe(e,t):De(e,t)}function Pe(e,t){if("variable"==e)return L(t),S(De)}function De(e,t){return"<"==t?S(D(">"),re(ge,">"),I,De):"extends"==t||"implements"==t||c&&","==e?("implements"==t&&(k.marked="keyword"),S(c?ue:H,De)):"{"==e?S(D("}"),Ie,I):void 0}function Ie(e,t){return"async"==e||"variable"==e&&("static"==t||"get"==t||"set"==t||c&&M(t))&&k.stream.match(/^\s+[\w$\xa1-\uffff]/,!1)?(k.marked="keyword",S(Ie)):"variable"==e||"keyword"==k.style?(k.marked="property",S(Fe,Ie)):"number"==e||"string"==e?S(Fe,Ie):"["==e?S(H,ae,F("]"),Fe,Ie):"*"==t?(k.marked="keyword",S(Ie)):c&&"("==e?C(Ne,Ie):";"==e||","==e?S(Ie):"}"==e?S():"@"==t?S(H,Ie):void 0}function Fe(e,t){if("?"==t)return S(Fe);if(":"==e)return S(ue,ke);if("="==t)return S(R);var n=k.state.lexical.prev;return C(n&&"interface"==n.info?Ne:Oe)}function _e(e,t){return"*"==t?(k.marked="keyword",S(qe,F(";"))):"default"==t?(k.marked="keyword",S(H,F(";"))):"{"==e?S(re(We,"}"),qe,F(";")):C(_)}function We(e,t){return"as"==t?(k.marked="keyword",S(F("variable"))):"variable"==e?C(R,We):void 0}function He(e){return"string"==e?S():"("==e?C(H):C(Re,Be,qe)}function Re(e,t){return"{"==e?ie(Re,"}"):("variable"==e&&L(t),"*"==t&&(k.marked="keyword"),S(je))}function Be(e){if(","==e)return S(Re,Be)}function je(e,t){if("as"==t)return k.marked="keyword",S(Re)}function qe(e,t){if("from"==t)return k.marked="keyword",S(H)}function Ue(e){return"]"==e?S():C(re(R,"]"))}function Ve(){return C(D("form"),be,F("{"),D("}"),re(Ke,"}"),I,I)}function Ke(){return C(be,ke)}function $e(e,t,n){return t.tokenize==m&&/^(?:operator|sof|keyword [bcd]|case|new|export|default|spread|[\[{}\(,;:]|=>)$/.test(t.lastType)||"quasi"==t.lastType&&/\{\s*$/.test(e.string.slice(0,e.pos-(n||0)))}return P.lex=!0,I.lex=!0,{startState:function(e){var t={tokenize:m,lastType:"sof",cc:[],lexical:new x((e||0)-o,0,"block",!1),localVars:n.localVars,context:n.localVars&&new O(null,null,!1),indented:e||0};return n.globalVars&&"object"==typeof n.globalVars&&(t.globalVars=n.globalVars),t},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation(),y(e,t)),t.tokenize!=g&&e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==r?n:(t.lastType="operator"!=r||"++"!=i&&"--"!=i?r:"incdec",function(e,t,n,r,i){var o=e.cc;for(k.state=e,k.stream=i,k.marked=null,k.cc=o,k.style=t,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():s?H:_)(n,r)){for(;o.length&&o[o.length-1].lex;)o.pop()();return k.marked?k.marked:"variable"==n&&w(e,r)?"variable-2":t}}(t,n,r,i,e))},indent:function(t,r){if(t.tokenize==g||t.tokenize==v)return e.Pass;if(t.tokenize!=m)return 0;var i,l=r&&r.charAt(0),s=t.lexical;if(!/^\s*else\b/.test(r))for(var c=t.cc.length-1;c>=0;--c){var u=t.cc[c];if(u==I)s=s.prev;else if(u!=Se)break}for(;("stat"==s.type||"form"==s.type)&&("}"==l||(i=t.cc[t.cc.length-1])&&(i==U||i==V)&&!/^[,\.=+\-*:?[\(]/.test(r));)s=s.prev;a&&")"==s.type&&"stat"==s.prev.type&&(s=s.prev);var f=s.type,h=l==f;return"vardef"==f?s.indented+("operator"==t.lastType||","==t.lastType?s.info.length+1:0):"form"==f&&"{"==l?s.indented:"form"==f?s.indented+o:"stat"==f?s.indented+(function(e,t){return"operator"==e.lastType||","==e.lastType||d.test(t.charAt(0))||/[,.]/.test(t.charAt(0))}(t,r)?a||o:0):"switch"!=s.info||h||0==n.doubleIndentSwitch?s.align?s.column+(h?0:1):s.indented+(h?0:o):s.indented+(/^(?:case|default)\b/.test(r)?o:2*o)},electricInput:/^\s*(?:case .*?:|default:|\{|\})$/,blockCommentStart:s?null:"/*",blockCommentEnd:s?null:"*/",blockCommentContinue:s?null:" * ",lineComment:s?null:"//",fold:"brace",closeBrackets:"()[]{}''\"\"``",helperType:s?"json":"javascript",jsonldMode:l,jsonMode:s,expressionAllowed:$e,skipExpression:function(e){var t=e.cc[e.cc.length-1];t!=H&&t!=R||e.cc.pop()}}})),e.registerHelper("wordChars","javascript",/[\w$]/),e.defineMIME("text/javascript","javascript"),e.defineMIME("text/ecmascript","javascript"),e.defineMIME("application/javascript","javascript"),e.defineMIME("application/x-javascript","javascript"),e.defineMIME("application/ecmascript","javascript"),e.defineMIME("application/json",{name:"javascript",json:!0}),e.defineMIME("application/x-json",{name:"javascript",json:!0}),e.defineMIME("application/ld+json",{name:"javascript",jsonld:!0}),e.defineMIME("text/typescript",{name:"javascript",typescript:!0}),e.defineMIME("application/typescript",{name:"javascript",typescript:!0})}(n(0))},function(e,t,n){!function(e){"use strict";var t={autoSelfClosers:{area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,frame:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0,menuitem:!0},implicitlyClosed:{dd:!0,li:!0,optgroup:!0,option:!0,p:!0,rp:!0,rt:!0,tbody:!0,td:!0,tfoot:!0,th:!0,tr:!0},contextGrabbers:{dd:{dd:!0,dt:!0},dt:{dd:!0,dt:!0},li:{li:!0},option:{option:!0,optgroup:!0},optgroup:{optgroup:!0},p:{address:!0,article:!0,aside:!0,blockquote:!0,dir:!0,div:!0,dl:!0,fieldset:!0,footer:!0,form:!0,h1:!0,h2:!0,h3:!0,h4:!0,h5:!0,h6:!0,header:!0,hgroup:!0,hr:!0,menu:!0,nav:!0,ol:!0,p:!0,pre:!0,section:!0,table:!0,ul:!0},rp:{rp:!0,rt:!0},rt:{rp:!0,rt:!0},tbody:{tbody:!0,tfoot:!0},td:{td:!0,th:!0},tfoot:{tbody:!0},th:{td:!0,th:!0},thead:{tbody:!0,tfoot:!0},tr:{tr:!0}},doNotIndent:{pre:!0},allowUnquoted:!0,allowMissing:!0,caseFold:!0},n={autoSelfClosers:{},implicitlyClosed:{},contextGrabbers:{},doNotIndent:{},allowUnquoted:!1,allowMissing:!1,allowMissingTagName:!1,caseFold:!1};e.defineMode("xml",(function(r,i){var o,a,l=r.indentUnit,s={},c=i.htmlMode?t:n;for(var u in c)s[u]=c[u];for(var u in i)s[u]=i[u];function f(e,t){function n(n){return t.tokenize=n,n(e,t)}var r=e.next();return"<"==r?e.eat("!")?e.eat("[")?e.match("CDATA[")?n(h("atom","]]>")):null:e.match("--")?n(h("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(function e(t){return function(n,r){for(var i;null!=(i=n.next());){if("<"==i)return r.tokenize=e(t+1),r.tokenize(n,r);if(">"==i){if(1==t){r.tokenize=f;break}return r.tokenize=e(t-1),r.tokenize(n,r)}}return"meta"}}(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=h("meta","?>"),"meta"):(o=e.eat("/")?"closeTag":"openTag",t.tokenize=d,"tag bracket"):"&"==r?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function d(e,t){var n,r,i=e.next();if(">"==i||"/"==i&&e.eat(">"))return t.tokenize=f,o=">"==i?"endTag":"selfcloseTag","tag bracket";if("="==i)return o="equals",null;if("<"==i){t.tokenize=f,t.state=v,t.tagName=t.tagStart=null;var a=t.tokenize(e,t);return a?a+" tag error":"tag error"}return/[\'\"]/.test(i)?(t.tokenize=(n=i,(r=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=d;break}return"string"}).isInAttribute=!0,r),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function h(e,t){return function(n,r){for(;!n.eol();){if(n.match(t)){r.tokenize=f;break}n.next()}return e}}function p(e,t,n){this.prev=e.context,this.tagName=t,this.indent=e.indented,this.startOfLine=n,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function m(e){e.context&&(e.context=e.context.prev)}function g(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!s.contextGrabbers.hasOwnProperty(n)||!s.contextGrabbers[n].hasOwnProperty(t))return;m(e)}}function v(e,t,n){return"openTag"==e?(n.tagStart=t.column(),y):"closeTag"==e?b:v}function y(e,t,n){return"word"==e?(n.tagName=t.current(),a="tag",k):s.allowMissingTagName&&"endTag"==e?(a="tag bracket",k(e,0,n)):(a="error",y)}function b(e,t,n){if("word"==e){var r=t.current();return n.context&&n.context.tagName!=r&&s.implicitlyClosed.hasOwnProperty(n.context.tagName)&&m(n),n.context&&n.context.tagName==r||!1===s.matchClosing?(a="tag",x):(a="tag error",w)}return s.allowMissingTagName&&"endTag"==e?(a="tag bracket",x(e,0,n)):(a="error",w)}function x(e,t,n){return"endTag"!=e?(a="error",x):(m(n),v)}function w(e,t,n){return a="error",x(e,0,n)}function k(e,t,n){if("word"==e)return a="attribute",C;if("endTag"==e||"selfcloseTag"==e){var r=n.tagName,i=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(r)?g(n,r):(g(n,r),n.context=new p(n,r,i==n.indented)),v}return a="error",k}function C(e,t,n){return"equals"==e?S:(s.allowMissing||(a="error"),k(e,0,n))}function S(e,t,n){return"string"==e?T:"word"==e&&s.allowUnquoted?(a="string",k):(a="error",k(e,0,n))}function T(e,t,n){return"string"==e?T:k(e,0,n)}return f.isInText=!0,{startState:function(e){var t={tokenize:f,state:v,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;o=null;var n=t.tokenize(e,t);return(n||o)&&"comment"!=n&&(a=null,t.state=t.state(o||n,e,t),a&&(n="error"==a?n+" error":a)),n},indent:function(t,n,r){var i=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(i&&i.noIndent)return e.Pass;if(t.tokenize!=d&&t.tokenize!=f)return r?r.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==s.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==S&&(e.state=k)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)n.tagName&&t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})}(n(0))},function(e,t,n){!function(e){function t(t,n,r){var i,o=t.getWrapperElement();return(i=o.appendChild(document.createElement("div"))).className=r?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof n?i.innerHTML=n:i.appendChild(n),e.addClass(o,"dialog-opened"),i}function n(e,t){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=t}e.defineExtension("openDialog",(function(r,i,o){o||(o={}),n(this,null);var a=t(this,r,o.bottom),l=!1,s=this;function c(t){if("string"==typeof t)f.value=t;else{if(l)return;l=!0,e.rmClass(a.parentNode,"dialog-opened"),a.parentNode.removeChild(a),s.focus(),o.onClose&&o.onClose(a)}}var u,f=a.getElementsByTagName("input")[0];return f?(f.focus(),o.value&&(f.value=o.value,!1!==o.selectValueOnOpen&&f.select()),o.onInput&&e.on(f,"input",(function(e){o.onInput(e,f.value,c)})),o.onKeyUp&&e.on(f,"keyup",(function(e){o.onKeyUp(e,f.value,c)})),e.on(f,"keydown",(function(t){o&&o.onKeyDown&&o.onKeyDown(t,f.value,c)||((27==t.keyCode||!1!==o.closeOnEnter&&13==t.keyCode)&&(f.blur(),e.e_stop(t),c()),13==t.keyCode&&i(f.value,t))})),!1!==o.closeOnBlur&&e.on(f,"blur",c)):(u=a.getElementsByTagName("button")[0])&&(e.on(u,"click",(function(){c(),s.focus()})),!1!==o.closeOnBlur&&e.on(u,"blur",c),u.focus()),c})),e.defineExtension("openConfirm",(function(r,i,o){n(this,null);var a=t(this,r,o&&o.bottom),l=a.getElementsByTagName("button"),s=!1,c=this,u=1;function f(){s||(s=!0,e.rmClass(a.parentNode,"dialog-opened"),a.parentNode.removeChild(a),c.focus())}l[0].focus();for(var d=0;d*\/]/.test(n)?w(null,"select-op"):"."==n&&e.match(/^-?[_a-z][_a-z0-9-]*/i)?w("qualifier","qualifier"):/[:;{}\[\]\(\)]/.test(n)?w(null,n):e.match(/[\w-.]+(?=\()/)?(/^(url(-prefix)?|domain|regexp)$/.test(e.current().toLowerCase())&&(t.tokenize=S),w("variable callee","variable")):/[\w\\\-]/.test(n)?(e.eatWhile(/[\w\\\-]/),w("property","word")):w(null,null):/[\d.]/.test(e.peek())?(e.eatWhile(/[\w.%]/),w("number","unit")):e.match(/^-[\w\\\-]*/)?(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?w("variable-2","variable-definition"):w("variable-2","variable")):e.match(/^\w+-/)?w("meta","meta"):void 0}function C(e){return function(t,n){for(var r,i=!1;null!=(r=t.next());){if(r==e&&!i){")"==e&&t.backUp(1);break}i=!i&&"\\"==r}return(r==e||!i&&")"!=e)&&(n.tokenize=null),w("string","string")}}function S(e,t){return e.next(),e.match(/\s*[\"\')]/,!1)?t.tokenize=null:t.tokenize=C(")"),w(null,"(")}function T(e,t,n){this.type=e,this.indent=t,this.prev=n}function L(e,t,n,r){return e.context=new T(n,t.indentation()+(!1===r?0:a),e.context),n}function M(e){return e.context.prev&&(e.context=e.context.prev),e.context.type}function O(e,t,n){return E[n.context.type](e,t,n)}function N(e,t,n,r){for(var i=r||1;i>0;i--)n.context=n.context.prev;return O(e,t,n)}function A(e){var t=e.current().toLowerCase();o=v.hasOwnProperty(t)?"atom":g.hasOwnProperty(t)?"keyword":"variable"}var E={top:function(e,t,n){if("{"==e)return L(n,t,"block");if("}"==e&&n.context.prev)return M(n);if(x&&/@component/i.test(e))return L(n,t,"atComponentBlock");if(/^@(-moz-)?document$/i.test(e))return L(n,t,"documentTypes");if(/^@(media|supports|(-moz-)?document|import)$/i.test(e))return L(n,t,"atBlock");if(/^@(font-face|counter-style)/i.test(e))return n.stateArg=e,"restricted_atBlock_before";if(/^@(-(moz|ms|o|webkit)-)?keyframes$/i.test(e))return"keyframes";if(e&&"@"==e.charAt(0))return L(n,t,"at");if("hash"==e)o="builtin";else if("word"==e)o="tag";else{if("variable-definition"==e)return"maybeprop";if("interpolation"==e)return L(n,t,"interpolation");if(":"==e)return"pseudo";if(y&&"("==e)return L(n,t,"parens")}return n.context.type},block:function(e,t,n){if("word"==e){var r=t.current().toLowerCase();return d.hasOwnProperty(r)?(o="property","maybeprop"):h.hasOwnProperty(r)?(o="string-2","maybeprop"):y?(o=t.match(/^\s*:(?:\s|$)/,!1)?"property":"tag","block"):(o+=" error","maybeprop")}return"meta"==e?"block":y||"hash"!=e&&"qualifier"!=e?E.top(e,t,n):(o="error","block")},maybeprop:function(e,t,n){return":"==e?L(n,t,"prop"):O(e,t,n)},prop:function(e,t,n){if(";"==e)return M(n);if("{"==e&&y)return L(n,t,"propBlock");if("}"==e||"{"==e)return N(e,t,n);if("("==e)return L(n,t,"parens");if("hash"!=e||/^#([0-9a-fA-f]{3,4}|[0-9a-fA-f]{6}|[0-9a-fA-f]{8})$/.test(t.current())){if("word"==e)A(t);else if("interpolation"==e)return L(n,t,"interpolation")}else o+=" error";return"prop"},propBlock:function(e,t,n){return"}"==e?M(n):"word"==e?(o="property","maybeprop"):n.context.type},parens:function(e,t,n){return"{"==e||"}"==e?N(e,t,n):")"==e?M(n):"("==e?L(n,t,"parens"):"interpolation"==e?L(n,t,"interpolation"):("word"==e&&A(t),"parens")},pseudo:function(e,t,n){return"meta"==e?"pseudo":"word"==e?(o="variable-3",n.context.type):O(e,t,n)},documentTypes:function(e,t,n){return"word"==e&&s.hasOwnProperty(t.current())?(o="tag",n.context.type):E.atBlock(e,t,n)},atBlock:function(e,t,n){if("("==e)return L(n,t,"atBlock_parens");if("}"==e||";"==e)return N(e,t,n);if("{"==e)return M(n)&&L(n,t,y?"block":"top");if("interpolation"==e)return L(n,t,"interpolation");if("word"==e){var r=t.current().toLowerCase();o="only"==r||"not"==r||"and"==r||"or"==r?"keyword":c.hasOwnProperty(r)?"attribute":u.hasOwnProperty(r)?"property":f.hasOwnProperty(r)?"keyword":d.hasOwnProperty(r)?"property":h.hasOwnProperty(r)?"string-2":v.hasOwnProperty(r)?"atom":g.hasOwnProperty(r)?"keyword":"error"}return n.context.type},atComponentBlock:function(e,t,n){return"}"==e?N(e,t,n):"{"==e?M(n)&&L(n,t,y?"block":"top",!1):("word"==e&&(o="error"),n.context.type)},atBlock_parens:function(e,t,n){return")"==e?M(n):"{"==e||"}"==e?N(e,t,n,2):E.atBlock(e,t,n)},restricted_atBlock_before:function(e,t,n){return"{"==e?L(n,t,"restricted_atBlock"):"word"==e&&"@counter-style"==n.stateArg?(o="variable","restricted_atBlock_before"):O(e,t,n)},restricted_atBlock:function(e,t,n){return"}"==e?(n.stateArg=null,M(n)):"word"==e?(o="@font-face"==n.stateArg&&!p.hasOwnProperty(t.current().toLowerCase())||"@counter-style"==n.stateArg&&!m.hasOwnProperty(t.current().toLowerCase())?"error":"property","maybeprop"):"restricted_atBlock"},keyframes:function(e,t,n){return"word"==e?(o="variable","keyframes"):"{"==e?L(n,t,"top"):O(e,t,n)},at:function(e,t,n){return";"==e?M(n):"{"==e||"}"==e?N(e,t,n):("word"==e?o="tag":"hash"==e&&(o="builtin"),"at")},interpolation:function(e,t,n){return"}"==e?M(n):"{"==e||";"==e?N(e,t,n):("word"==e?o="variable":"variable"!=e&&"("!=e&&")"!=e&&(o="error"),"interpolation")}};return{startState:function(e){return{tokenize:null,state:r?"block":"top",stateArg:null,context:new T(r?"block":"top",e||0,null)}},token:function(e,t){if(!t.tokenize&&e.eatSpace())return null;var n=(t.tokenize||k)(e,t);return n&&"object"==typeof n&&(i=n[1],n=n[0]),o=n,"comment"!=i&&(t.state=E[t.state](i,e,t)),o},indent:function(e,t){var n=e.context,r=t&&t.charAt(0),i=n.indent;return"prop"!=n.type||"}"!=r&&")"!=r||(n=n.prev),n.prev&&("}"!=r||"block"!=n.type&&"top"!=n.type&&"interpolation"!=n.type&&"restricted_atBlock"!=n.type?(")"!=r||"parens"!=n.type&&"atBlock_parens"!=n.type)&&("{"!=r||"at"!=n.type&&"atBlock"!=n.type)||(i=Math.max(0,n.indent-a)):i=(n=n.prev).indent),i},electricChars:"}",blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:b,fold:"brace"}}));var n=["domain","regexp","url","url-prefix"],r=t(n),i=["all","aural","braille","handheld","print","projection","screen","tty","tv","embossed"],o=t(i),a=["width","min-width","max-width","height","min-height","max-height","device-width","min-device-width","max-device-width","device-height","min-device-height","max-device-height","aspect-ratio","min-aspect-ratio","max-aspect-ratio","device-aspect-ratio","min-device-aspect-ratio","max-device-aspect-ratio","color","min-color","max-color","color-index","min-color-index","max-color-index","monochrome","min-monochrome","max-monochrome","resolution","min-resolution","max-resolution","scan","grid","orientation","device-pixel-ratio","min-device-pixel-ratio","max-device-pixel-ratio","pointer","any-pointer","hover","any-hover"],l=t(a),s=["landscape","portrait","none","coarse","fine","on-demand","hover","interlace","progressive"],c=t(s),u=["align-content","align-items","align-self","alignment-adjust","alignment-baseline","anchor-point","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","appearance","azimuth","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","baseline-shift","binding","bleed","bookmark-label","bookmark-level","bookmark-state","bookmark-target","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","break-after","break-before","break-inside","caption-side","caret-color","clear","clip","color","color-profile","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","crop","cue","cue-after","cue-before","cursor","direction","display","dominant-baseline","drop-initial-after-adjust","drop-initial-after-align","drop-initial-before-adjust","drop-initial-before-align","drop-initial-size","drop-initial-value","elevation","empty-cells","fit","fit-position","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","float-offset","flow-from","flow-into","font","font-feature-settings","font-family","font-kerning","font-language-override","font-size","font-size-adjust","font-stretch","font-style","font-synthesis","font-variant","font-variant-alternates","font-variant-caps","font-variant-east-asian","font-variant-ligatures","font-variant-numeric","font-variant-position","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","icon","image-orientation","image-rendering","image-resolution","inline-box-align","justify-content","justify-items","justify-self","left","letter-spacing","line-break","line-height","line-stacking","line-stacking-ruby","line-stacking-shift","line-stacking-strategy","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","marks","marquee-direction","marquee-loop","marquee-play-count","marquee-speed","marquee-style","max-height","max-width","min-height","min-width","mix-blend-mode","move-to","nav-down","nav-index","nav-left","nav-right","nav-up","object-fit","object-position","opacity","order","orphans","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-style","overflow-wrap","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page","page-break-after","page-break-before","page-break-inside","page-policy","pause","pause-after","pause-before","perspective","perspective-origin","pitch","pitch-range","place-content","place-items","place-self","play-during","position","presentation-level","punctuation-trim","quotes","region-break-after","region-break-before","region-break-inside","region-fragment","rendering-intent","resize","rest","rest-after","rest-before","richness","right","rotation","rotation-point","ruby-align","ruby-overhang","ruby-position","ruby-span","shape-image-threshold","shape-inside","shape-margin","shape-outside","size","speak","speak-as","speak-header","speak-numeral","speak-punctuation","speech-rate","stress","string-set","tab-size","table-layout","target","target-name","target-new","target-position","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-skip","text-decoration-style","text-emphasis","text-emphasis-color","text-emphasis-position","text-emphasis-style","text-height","text-indent","text-justify","text-outline","text-overflow","text-shadow","text-size-adjust","text-space-collapse","text-transform","text-underline-position","text-wrap","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","user-select","vertical-align","visibility","voice-balance","voice-duration","voice-family","voice-pitch","voice-range","voice-rate","voice-stress","voice-volume","volume","white-space","widows","width","will-change","word-break","word-spacing","word-wrap","z-index","clip-path","clip-rule","mask","enable-background","filter","flood-color","flood-opacity","lighting-color","stop-color","stop-opacity","pointer-events","color-interpolation","color-interpolation-filters","color-rendering","fill","fill-opacity","fill-rule","image-rendering","marker","marker-end","marker-mid","marker-start","shape-rendering","stroke","stroke-dasharray","stroke-dashoffset","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","text-rendering","baseline-shift","dominant-baseline","glyph-orientation-horizontal","glyph-orientation-vertical","text-anchor","writing-mode"],f=t(u),d=["scrollbar-arrow-color","scrollbar-base-color","scrollbar-dark-shadow-color","scrollbar-face-color","scrollbar-highlight-color","scrollbar-shadow-color","scrollbar-3d-light-color","scrollbar-track-color","shape-inside","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","zoom"],h=t(d),p=t(["font-family","src","unicode-range","font-variant","font-feature-settings","font-stretch","font-weight","font-style"]),m=t(["additive-symbols","fallback","negative","pad","prefix","range","speak-as","suffix","symbols","system"]),g=["aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","grey","green","greenyellow","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","red","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen"],v=t(g),y=["above","absolute","activeborder","additive","activecaption","afar","after-white-space","ahead","alias","all","all-scroll","alphabetic","alternate","always","amharic","amharic-abegede","antialiased","appworkspace","arabic-indic","armenian","asterisks","attr","auto","auto-flow","avoid","avoid-column","avoid-page","avoid-region","background","backwards","baseline","below","bidi-override","binary","bengali","blink","block","block-axis","bold","bolder","border","border-box","both","bottom","break","break-all","break-word","bullets","button","button-bevel","buttonface","buttonhighlight","buttonshadow","buttontext","calc","cambodian","capitalize","caps-lock-indicator","caption","captiontext","caret","cell","center","checkbox","circle","cjk-decimal","cjk-earthly-branch","cjk-heavenly-stem","cjk-ideographic","clear","clip","close-quote","col-resize","collapse","color","color-burn","color-dodge","column","column-reverse","compact","condensed","contain","content","contents","content-box","context-menu","continuous","copy","counter","counters","cover","crop","cross","crosshair","currentcolor","cursive","cyclic","darken","dashed","decimal","decimal-leading-zero","default","default-button","dense","destination-atop","destination-in","destination-out","destination-over","devanagari","difference","disc","discard","disclosure-closed","disclosure-open","document","dot-dash","dot-dot-dash","dotted","double","down","e-resize","ease","ease-in","ease-in-out","ease-out","element","ellipse","ellipsis","embed","end","ethiopic","ethiopic-abegede","ethiopic-abegede-am-et","ethiopic-abegede-gez","ethiopic-abegede-ti-er","ethiopic-abegede-ti-et","ethiopic-halehame-aa-er","ethiopic-halehame-aa-et","ethiopic-halehame-am-et","ethiopic-halehame-gez","ethiopic-halehame-om-et","ethiopic-halehame-sid-et","ethiopic-halehame-so-et","ethiopic-halehame-ti-er","ethiopic-halehame-ti-et","ethiopic-halehame-tig","ethiopic-numeric","ew-resize","exclusion","expanded","extends","extra-condensed","extra-expanded","fantasy","fast","fill","fixed","flat","flex","flex-end","flex-start","footnotes","forwards","from","geometricPrecision","georgian","graytext","grid","groove","gujarati","gurmukhi","hand","hangul","hangul-consonant","hard-light","hebrew","help","hidden","hide","higher","highlight","highlighttext","hiragana","hiragana-iroha","horizontal","hsl","hsla","hue","hwb","icon","ignore","inactiveborder","inactivecaption","inactivecaptiontext","infinite","infobackground","infotext","inherit","initial","inline","inline-axis","inline-block","inline-flex","inline-grid","inline-table","inset","inside","intrinsic","invert","italic","japanese-formal","japanese-informal","justify","kannada","katakana","katakana-iroha","keep-all","khmer","korean-hangul-formal","korean-hanja-formal","korean-hanja-informal","landscape","lao","large","larger","left","level","lighter","lighten","line-through","linear","linear-gradient","lines","list-item","listbox","listitem","local","logical","loud","lower","lower-alpha","lower-armenian","lower-greek","lower-hexadecimal","lower-latin","lower-norwegian","lower-roman","lowercase","ltr","luminosity","malayalam","match","matrix","matrix3d","media-controls-background","media-current-time-display","media-fullscreen-button","media-mute-button","media-play-button","media-return-to-realtime-button","media-rewind-button","media-seek-back-button","media-seek-forward-button","media-slider","media-sliderthumb","media-time-remaining-display","media-volume-slider","media-volume-slider-container","media-volume-sliderthumb","medium","menu","menulist","menulist-button","menulist-text","menulist-textfield","menutext","message-box","middle","min-intrinsic","mix","mongolian","monospace","move","multiple","multiply","myanmar","n-resize","narrower","ne-resize","nesw-resize","no-close-quote","no-drop","no-open-quote","no-repeat","none","normal","not-allowed","nowrap","ns-resize","numbers","numeric","nw-resize","nwse-resize","oblique","octal","opacity","open-quote","optimizeLegibility","optimizeSpeed","oriya","oromo","outset","outside","outside-shape","overlay","overline","padding","padding-box","painted","page","paused","persian","perspective","plus-darker","plus-lighter","pointer","polygon","portrait","pre","pre-line","pre-wrap","preserve-3d","progress","push-button","radial-gradient","radio","read-only","read-write","read-write-plaintext-only","rectangle","region","relative","repeat","repeating-linear-gradient","repeating-radial-gradient","repeat-x","repeat-y","reset","reverse","rgb","rgba","ridge","right","rotate","rotate3d","rotateX","rotateY","rotateZ","round","row","row-resize","row-reverse","rtl","run-in","running","s-resize","sans-serif","saturation","scale","scale3d","scaleX","scaleY","scaleZ","screen","scroll","scrollbar","scroll-position","se-resize","searchfield","searchfield-cancel-button","searchfield-decoration","searchfield-results-button","searchfield-results-decoration","self-start","self-end","semi-condensed","semi-expanded","separate","serif","show","sidama","simp-chinese-formal","simp-chinese-informal","single","skew","skewX","skewY","skip-white-space","slide","slider-horizontal","slider-vertical","sliderthumb-horizontal","sliderthumb-vertical","slow","small","small-caps","small-caption","smaller","soft-light","solid","somali","source-atop","source-in","source-out","source-over","space","space-around","space-between","space-evenly","spell-out","square","square-button","start","static","status-bar","stretch","stroke","sub","subpixel-antialiased","super","sw-resize","symbolic","symbols","system-ui","table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row","table-row-group","tamil","telugu","text","text-bottom","text-top","textarea","textfield","thai","thick","thin","threeddarkshadow","threedface","threedhighlight","threedlightshadow","threedshadow","tibetan","tigre","tigrinya-er","tigrinya-er-abegede","tigrinya-et","tigrinya-et-abegede","to","top","trad-chinese-formal","trad-chinese-informal","transform","translate","translate3d","translateX","translateY","translateZ","transparent","ultra-condensed","ultra-expanded","underline","unset","up","upper-alpha","upper-armenian","upper-greek","upper-hexadecimal","upper-latin","upper-norwegian","upper-roman","uppercase","urdu","url","var","vertical","vertical-text","visible","visibleFill","visiblePainted","visibleStroke","visual","w-resize","wait","wave","wider","window","windowframe","windowtext","words","wrap","wrap-reverse","x-large","x-small","xor","xx-large","xx-small"],b=t(y),x=n.concat(i).concat(a).concat(s).concat(u).concat(d).concat(g).concat(y);function w(e,t){for(var n,r=!1;null!=(n=e.next());){if(r&&"/"==n){t.tokenize=null;break}r="*"==n}return["comment","comment"]}e.registerHelper("hintWords","css",x),e.defineMIME("text/css",{documentTypes:r,mediaTypes:o,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:f,nonStandardPropertyKeywords:h,fontProperties:p,counterDescriptors:m,colorKeywords:v,valueKeywords:b,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w,w(e,t))}},name:"css"}),e.defineMIME("text/x-scss",{mediaTypes:o,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:f,nonStandardPropertyKeywords:h,colorKeywords:v,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w,w(e,t)):["operator","operator"]},":":function(e){return!!e.match(/\s*\{/,!1)&&[null,null]},$:function(e){return e.match(/^[\w-]+/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"]},"#":function(e){return!!e.eat("{")&&[null,"interpolation"]}},name:"css",helperType:"scss"}),e.defineMIME("text/x-less",{mediaTypes:o,mediaFeatures:l,mediaValueKeywords:c,propertyKeywords:f,nonStandardPropertyKeywords:h,colorKeywords:v,valueKeywords:b,fontProperties:p,allowNested:!0,lineComment:"//",tokenHooks:{"/":function(e,t){return e.eat("/")?(e.skipToEnd(),["comment","comment"]):e.eat("*")?(t.tokenize=w,w(e,t)):["operator","operator"]},"@":function(e){return e.eat("{")?[null,"interpolation"]:!e.match(/^(charset|document|font-face|import|(-(moz|ms|o|webkit)-)?keyframes|media|namespace|page|supports)\b/i,!1)&&(e.eatWhile(/[\w\\\-]/),e.match(/^\s*:/,!1)?["variable-2","variable-definition"]:["variable-2","variable"])},"&":function(){return["atom","atom"]}},name:"css",helperType:"less"}),e.defineMIME("text/x-gss",{documentTypes:r,mediaTypes:o,mediaFeatures:l,propertyKeywords:f,nonStandardPropertyKeywords:h,fontProperties:p,counterDescriptors:m,colorKeywords:v,valueKeywords:b,supportsAtComponent:!0,tokenHooks:{"/":function(e,t){return!!e.eat("*")&&(t.tokenize=w,w(e,t))}},name:"css",helperType:"gss"})}(n(0))},function(e,t,n){!function(e){"use strict";function t(t,n,i,o){if(i&&i.call){var a=i;i=null}else a=r(t,i,"rangeFinder");"number"==typeof n&&(n=e.Pos(n,0));var l=r(t,i,"minFoldSize");function s(e){var r=a(t,n);if(!r||r.to.line-r.from.linet.firstLine();)n=e.Pos(n.line-1,0),c=s(!1);if(c&&!c.cleared&&"unfold"!==o){var u=function(e,t){var n=r(e,t,"widget");if("string"==typeof n){var i=document.createTextNode(n);(n=document.createElement("span")).appendChild(i),n.className="CodeMirror-foldmarker"}else n&&(n=n.cloneNode(!0));return n}(t,i);e.on(u,"mousedown",(function(t){f.clear(),e.e_preventDefault(t)}));var f=t.markText(c.from,c.to,{replacedWith:u,clearOnEnter:r(t,i,"clearOnEnter"),__isFold:!0});f.on("clear",(function(n,r){e.signal(t,"unfold",t,n,r)})),e.signal(t,"fold",t,c.from,c.to)}}e.newFoldFunction=function(e,n){return function(r,i){t(r,i,{rangeFinder:e,widget:n})}},e.defineExtension("foldCode",(function(e,n,r){t(this,e,n,r)})),e.defineExtension("isFolded",(function(e){for(var t=this.findMarksAt(e),n=0;nc.select());const d=l.createElement("div");d.classList.add("cm5-search-container"),d.appendChild(c);var h=n(t);if(h.query)return u(t,r);var p=t.getSelection()||h.lastQuery;if(p instanceof RegExp&&"x^"==p.source&&(p=null),i&&t.openDialog){var m=null,g=function(n,r){e.e_stop(r),n&&(n!=h.queryText&&(s(t,h,n),h.posFrom=h.posTo=t.getCursor()),m&&(m.style.opacity=1),u(t,r.shiftKey,(function(e,n){var r;n.line<3&&document.querySelector&&(r=t.display.wrapper.querySelector(".CodeMirror-dialog"))&&r.getBoundingClientRect().bottom-4>t.cursorCoords(n,"window").top&&((m=r).style.opacity=.4)})))};!function(e,t,n,r,i){e.openDialog(t,r,{value:n,selectValueOnOpen:!0,closeOnEnter:!1,onClose:function(){f(e)},onKeyDown:i})}(t,d,p,g,(function(r,i){var o=e.keyName(r),a=t.getOption("extraKeys"),l=a&&a[o]||e.keyMap[t.getOption("keyMap")][o];"findNext"==l||"findPrev"==l||"findPersistentNext"==l||"findPersistentPrev"==l?(e.e_stop(r),s(t,n(t),i),t.execCommand(l)):"find"!=l&&"findPersistent"!=l||(e.e_stop(r),g(i,r))})),a&&p&&(s(t,h,p),u(t,r))}else o(t,d,"Search for:",p,(function(e){e&&!h.query&&t.operation((function(){s(t,h,e),h.posFrom=h.posTo=t.getCursor(),u(t,r)}))}))}function u(t,r,o){t.operation((function(){var a=n(t),l=i(t,a.query,r?a.posFrom:a.posTo);(l.find(r)||(l=i(t,a.query,r?e.Pos(t.lastLine()):e.Pos(t.firstLine(),0))).find(r))&&(t.setSelection(l.from(),l.to()),t.scrollIntoView({from:l.from(),to:l.to()},20),a.posFrom=l.from(),a.posTo=l.to(),o&&o(l.from(),l.to()))}))}function f(e){e.operation((function(){var t=n(e);t.lastQuery=t.query,t.query&&(t.query=t.queryText=null,e.removeOverlay(t.overlay),t.annotate&&(t.annotate.clear(),t.annotate=null))}))}function d(e,t,n){e.operation((function(){for(var r=i(e,t);r.findNext();)if("string"!=typeof t){var o=e.getRange(r.from(),r.to()).match(t);r.replace(n.replace(/\$(\d)/g,(function(e,t){return o[t]})))}else r.replace(n)}))}function h(e,t){if(e.getOption("readOnly"))return;var r=e.getSelection()||n(e).lastQuery;let s=e.getWrapperElement().ownerDocument,c=s.createElement("span");c.classList.add("CodeMirror-search-label"),c.textContent=t?"Replace all:":"Replace:";let u=s.createDocumentFragment();u.appendChild(c.cloneNode(!0));let h=s.createElement("input");h.setAttribute("type","text"),h.classList.add("cm5-search-replace-input"),u.appendChild(h);let p=s.createElement("span");p.classList.add("cm5-search-replace-hint"),p.textContent="(Use /re/ syntax for regexp search)",u.appendChild(p),o(e,u,c,r,(function(n){if(!n)return;n=l(n);let r=s.createDocumentFragment(),u=c.cloneNode(!1);u.textContent="With:",r.appendChild(u);let h=s.createElement("input");h.setAttribute("type","text"),h.classList.add("cm5-search-replace-input"),r.appendChild(h),o(e,r,"Replace with:","",(function(r){if(r=a(r),t)d(e,n,r);else{f(e);var o=i(e,n,e.getCursor("from")),l=function(){var t,a=o.from();if(!(t=o.findNext())&&(o=i(e,n),!(t=o.findNext())||a&&o.from().line==a.line&&o.from().ch==a.ch))return;e.setSelection(o.from(),o.to()),e.scrollIntoView({from:o.from(),to:o.to()});let f=s.createDocumentFragment(),h=c.cloneNode(!1);h.textContent="Replace?",f.appendChild(h);let p=s.createElement("button");p.textContent="Yes",f.appendChild(p);let m=s.createElement("button");m.textContent="No",f.appendChild(m);let g=s.createElement("button");g.textContent="All",f.appendChild(g);let v=s.createElement("button");v.textContent="Stop",f.appendChild(v),function(e,t,n,r){e.openConfirm?e.openConfirm(t,r):confirm(n)&&r[0]()}(e,f,"Replace?",[function(){u(t)},l,function(){d(e,n,r)}])},u=function(e){o.replace("string"==typeof n?r:r.replace(/\$(\d)/g,(function(t,n){return e[n]}))),l()};l()}}))}))}e.commands.find=function(e){f(e),c(e)},e.commands.findPersistent=function(e){f(e),c(e,!1,!0)},e.commands.findPersistentNext=function(e){c(e,!1,!0,!0)},e.commands.findPersistentPrev=function(e){c(e,!0,!0,!0)},e.commands.findNext=c,e.commands.findPrev=function(e){c(e,!0)},e.commands.clearSearch=f,e.commands.replace=h,e.commands.replaceAll=function(e){h(e,!0)}}(n(0),n(1),n(4))},function(e,t,n){!function(e){"use strict";var t={style:"matchhighlight",minChars:2,delay:100,wordsOnly:!1,annotateScrollbar:!1,showToken:!1,trim:!0};function n(e){for(var n in this.options={},t)this.options[n]=(e&&e.hasOwnProperty(n)?e:t)[n];this.overlay=this.timeout=null,this.matchesonscroll=null,this.active=!1}function r(e){var t=e.state.matchHighlighter;(t.active||e.hasFocus())&&o(e,t)}function i(e){var t=e.state.matchHighlighter;t.active||(t.active=!0,o(e,t))}function o(e,t){clearTimeout(t.timeout),t.timeout=setTimeout((function(){s(e)}),t.options.delay)}function a(e,t,n,r){var i=e.state.matchHighlighter;if(e.addOverlay(i.overlay=function(e,t,n){return{token:function(r){if(r.match(e)&&(!t||function(e,t){return!(e.start&&t.test(e.string.charAt(e.start-1))||e.pos!=e.string.length&&t.test(e.string.charAt(e.pos)))}(r,t)))return n;r.next(),r.skipTo(e.charAt(0))||r.skipToEnd()}}}(t,n,r)),i.options.annotateScrollbar&&e.showMatchesOnScrollbar){var o=n?new RegExp("\\b"+t.replace(/[\\\[.+*?(){|^$]/g,"\\$&")+"\\b"):t;i.matchesonscroll=e.showMatchesOnScrollbar(o,!1,{className:"CodeMirror-selection-highlight-scrollbar"})}}function l(e){var t=e.state.matchHighlighter;t.overlay&&(e.removeOverlay(t.overlay),t.overlay=null,t.matchesonscroll&&(t.matchesonscroll.clear(),t.matchesonscroll=null))}function s(e){e.operation((function(){var t=e.state.matchHighlighter;if(l(e),e.somethingSelected()||!t.options.showToken){var n=e.getCursor("from"),r=e.getCursor("to");if(n.line==r.line&&(!t.options.wordsOnly||function(e,t,n){if(null!==e.getRange(t,n).match(/^\w+$/)){if(t.ch>0){var r={line:t.line,ch:t.ch-1};if(null===e.getRange(r,t).match(/\W/))return!1}return!(n.ch=t.options.minChars&&a(e,i,!1,t.options.style)}}else{for(var o=!0===t.options.showToken?/[\w$]/:t.options.showToken,s=e.getCursor(),c=e.getLine(s.line),u=s.ch,f=u;u&&o.test(c.charAt(u-1));)--u;for(;f=this.gap.to);t++)i.to.line>=this.gap.from&&this.matches.splice(t--,1);for(var n=this.cm.getSearchCursor(this.query,e.Pos(this.gap.from,0),{caseFold:this.caseFold,multiline:this.options.multiline}),r=this.options&&this.options.maxMatches||1e3;n.findNext();){var i;if((i={from:n.from(),to:n.to()}).from.line>=this.gap.to)break;if(this.matches.splice(t++,0,i),this.matches.length>r)break}this.gap=null}},t.prototype.onChange=function(t){var r=t.from.line,i=e.changeEnd(t).line,o=i-t.to.line;if(this.gap?(this.gap.from=Math.min(n(this.gap.from,r,o),t.from.line),this.gap.to=Math.max(n(this.gap.to,r,o),t.from.line)):this.gap={from:t.from.line,to:i+1},o)for(var a=0;aa?t.charCoords(e,"local")[n?"top":"bottom"]:t.heightAtLine(s,"local")+(n?0:s.height)}var u=t.lastLine();if(t.display.barWidth)for(var f,d=0;du)){for(var p=f||c(h.from,!0)*n,m=c(h.to,!1)*n;du)&&!((f=c(i[d+1].from,!0)*n)>m+.9);)m=c((h=i[++d]).to,!1)*n;if(m!=p){var g=Math.max(m-p,3),v=r.appendChild(document.createElement("div"));v.style.cssText="position: absolute; right: 0px; width: "+Math.max(t.display.barWidth-1,2)+"px; top: "+(p+this.buttonHeight)+"px; height: "+g+"px",v.className=this.options.className,h.id&&v.setAttribute("annotation-id",h.id)}}}this.div.textContent="",this.div.appendChild(r)},t.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("changes",this.changeHandler),this.div.parentNode.removeChild(this.div)}}(n(0))},function(e,t,n){!function(e){var t=/MSIE \d/.test(navigator.userAgent)&&(null==document.documentMode||document.documentMode<8),n=e.Pos,r={"(":")>",")":"(<","[":"]>","]":"[<","{":"}>","}":"{<","<":">>",">":"<<"};function i(e){return e&&e.bracketRegex||/[(){}[\]]/}function o(e,t,o){var l=e.getLineHandle(t.line),s=t.ch-1,c=o&&o.afterCursor;null==c&&(c=/(^| )cm-fat-cursor($| )/.test(e.getWrapperElement().className));var u=i(o),f=!c&&s>=0&&u.test(l.text.charAt(s))&&r[l.text.charAt(s)]||u.test(l.text.charAt(s+1))&&r[l.text.charAt(++s)];if(!f)return null;var d=">"==f.charAt(1)?1:-1;if(o&&o.strict&&d>0!=(s==t.ch))return null;var h=e.getTokenTypeAt(n(t.line,s+1)),p=a(e,n(t.line,s+(d>0?1:0)),d,h||null,o);return null==p?null:{from:n(t.line,s),to:p&&p.pos,match:p&&p.ch==f.charAt(0),forward:d>0}}function a(e,t,o,a,l){for(var s=l&&l.maxScanLineLength||1e4,c=l&&l.maxScanLines||1e3,u=[],f=i(l),d=o>0?Math.min(t.line+c,e.lastLine()+1):Math.max(e.firstLine()-1,t.line-c),h=t.line;h!=d;h+=o){var p=e.getLine(h);if(p){var m=o>0?0:p.length-1,g=o>0?p.length:-1;if(!(p.length>s))for(h==t.line&&(m=t.ch-(o<0?1:0));m!=g;m+=o){var v=p.charAt(m);if(f.test(v)&&(void 0===a||e.getTokenTypeAt(n(h,m+1))==a)){var y=r[v];if(y&&">"==y.charAt(1)==o>0)u.push(v);else{if(!u.length)return{pos:n(h,m),ch:v};u.pop()}}}}}return h-o!=(o>0?e.lastLine():e.firstLine())&&null}function l(e,r,i){for(var a=e.state.matchBrackets.maxHighlightLineLength||1e3,l=[],s=e.listSelections(),c=0;c",triples:"",explode:"[]{}"},n=e.Pos;function r(e,n){return"pairs"==n&&"string"==typeof e?e:"object"==typeof e&&null!=e[n]?e[n]:t[n]}e.defineOption("autoCloseBrackets",!1,(function(t,n,a){a&&a!=e.Init&&(t.removeKeyMap(i),t.state.closeBrackets=null),n&&(o(r(n,"pairs")),t.state.closeBrackets=n,t.addKeyMap(i))}));var i={Backspace:function(t){var i=l(t);if(!i||t.getOption("disableInput"))return e.Pass;for(var o=r(i,"pairs"),a=t.listSelections(),c=0;c=0;c--){var f=a[c].head;t.replaceRange("",n(f.line,f.ch-1),n(f.line,f.ch+1),"+delete")}},Enter:function(t){var n=l(t),i=n&&r(n,"explode");if(!i||t.getOption("disableInput"))return e.Pass;for(var o=t.listSelections(),a=0;a1&&d.indexOf(i)>=0&&t.getRange(n(b.line,b.ch-2),b)==i+i){if(b.ch>2&&/\bstring/.test(t.getTokenTypeAt(n(b.line,b.ch-2))))return e.Pass;v="addFour"}else if(h){var w=0==b.ch?" ":t.getRange(n(b.line,b.ch-1),b);if(e.isWordChar(x)||w==i||e.isWordChar(w))return e.Pass;v="both"}else{if(!m||!(0===x.length||/\s/.test(x)||f.indexOf(x)>-1))return e.Pass;v="both"}else v=h&&c(t,b)?"both":d.indexOf(i)>=0&&t.getRange(b,n(b.line,b.ch+3))==i+i+i?"skipThree":"skip";if(u){if(u!=v)return e.Pass}else u=v}var k=s%2?a.charAt(s-1):i,C=s%2?i:a.charAt(s+1);t.operation((function(){if("skip"==u)t.execCommand("goCharRight");else if("skipThree"==u)for(var r=0;r<3;r++)t.execCommand("goCharRight");else if("surround"==u){var i=t.getSelections();for(r=0;r0,{anchor:new n(o.anchor.line,o.anchor.ch+(a?-1:1)),head:new n(o.head.line,o.head.ch+(a?1:-1))});t.setSelections(i)}else"both"==u?(t.replaceSelection(k+C,null),t.triggerElectric(k+C),t.execCommand("goCharLeft")):"addFour"==u&&(t.replaceSelection(k+k+k+k,"before"),t.execCommand("goCharRight"));var o,a}))}(i,t)}}function l(e){var t=e.state.closeBrackets;return!t||t.override?t:e.getModeAt(e.getCursor()).closeBrackets||t}function s(e,t){var r=e.getRange(n(t.line,t.ch-1),n(t.line,t.ch+1));return 2==r.length?r:null}function c(e,t){var r=e.getTokenAt(n(t.line,t.ch+1));return/\bstring/.test(r.type)&&r.start==t.ch&&(0==t.ch||!/\bstring/.test(e.getTokenTypeAt(t)))}o(t.pairs+"`")}(n(0))},function(e,t,n){!function(e){"use strict";var t={},n=/[^\s\u00a0]/,r=e.Pos;function i(e){var t=e.search(n);return-1==t?0:t}function o(e,t){var n=e.getMode();return!1!==n.useInnerComments&&n.innerMode?e.getModeAt(t):n}e.commands.toggleComment=function(e){e.toggleComment()},e.defineExtension("toggleComment",(function(e){e||(e=t);for(var n=1/0,i=this.listSelections(),o=null,a=i.length-1;a>=0;a--){var l=i[a].from(),s=i[a].to();l.line>=n||(s.line>=n&&(s=r(n,0)),n=l.line,null==o?this.uncomment(l,s,e)?o="un":(this.lineComment(l,s,e),o="line"):"un"==o?this.uncomment(l,s,e):this.lineComment(l,s,e))}})),e.defineExtension("lineComment",(function(e,a,l){l||(l=t);var s=this,c=o(s,e),u=s.getLine(e.line);if(null!=u&&(f=e,d=u,!/\bstring\b/.test(s.getTokenTypeAt(r(f.line,0)))||/^[\'\"\`]/.test(d))){var f,d,h=l.lineComment||c.lineComment;if(h){var p=Math.min(0!=a.ch||a.line==e.line?a.line+1:a.line,s.lastLine()+1),m=null==l.padding?" ":l.padding,g=l.commentBlankLines||e.line==a.line;s.operation((function(){if(l.indent){for(var t=null,o=e.line;oa.length)&&(t=a)}for(o=e.line;of||l.operation((function(){if(0!=a.fullLines){var t=n.test(l.getLine(f));l.replaceRange(d+u,r(f)),l.replaceRange(c+d,r(e.line,0));var o=a.blockCommentLead||s.blockCommentLead;if(null!=o)for(var h=e.line+1;h<=f;++h)(h!=f||t)&&l.replaceRange(o+d,r(h,0))}else l.replaceRange(u,i),l.replaceRange(c,e)}))}}else(a.lineComment||s.lineComment)&&0!=a.fullLines&&l.lineComment(e,i,a)})),e.defineExtension("uncomment",(function(e,i,a){a||(a=t);var l,s=this,c=o(s,e),u=Math.min(0!=i.ch||i.line==e.line?i.line:i.line-1,s.lastLine()),f=Math.min(e.line,u),d=a.lineComment||c.lineComment,h=[],p=null==a.padding?" ":a.padding;e:if(d){for(var m=f;m<=u;++m){var g=s.getLine(m),v=g.indexOf(d);if(v>-1&&!/comment/.test(s.getTokenTypeAt(r(m,v+1)))&&(v=-1),-1==v&&n.test(g))break e;if(v>-1&&n.test(g.slice(0,v)))break e;h.push(g)}if(s.operation((function(){for(var e=f;e<=u;++e){var t=h[e-f],n=t.indexOf(d),i=n+d.length;n<0||(t.slice(i,i+p.length)==p&&(i+=p.length),l=!0,s.replaceRange("",r(e,n),r(e,i)))}})),l)return!0}var y=a.blockCommentStart||c.blockCommentStart,b=a.blockCommentEnd||c.blockCommentEnd;if(!y||!b)return!1;var x=a.blockCommentLead||c.blockCommentLead,w=s.getLine(f),k=w.indexOf(y);if(-1==k)return!1;var C=u==f?w:s.getLine(u),S=C.indexOf(b,u==f?k+y.length:0),T=r(f,k+1),L=r(u,S+1);if(-1==S||!/comment/.test(s.getTokenTypeAt(T))||!/comment/.test(s.getTokenTypeAt(L))||s.getRange(T,L,"\n").indexOf(b)>-1)return!1;var M=w.lastIndexOf(y,e.ch),O=-1==M?-1:w.slice(0,e.ch).indexOf(b,M+y.length);if(-1!=M&&-1!=O&&O+b.length!=e.ch)return!1;O=C.indexOf(b,i.ch);var N=C.slice(i.ch).lastIndexOf(y,O-i.ch);return M=-1==O||-1==N?-1:i.ch+N,(-1==O||-1==M||M==i.ch)&&(s.operation((function(){s.replaceRange("",r(u,S-(p&&C.slice(S-p.length,S)==p?p.length:0)),r(u,S+b.length));var e=k+y.length;if(p&&w.slice(e,e+p.length)==p&&(e+=p.length),s.replaceRange("",r(f,k),r(f,e)),x)for(var t=f+1;t<=u;++t){var i=s.getLine(t),o=i.indexOf(x);if(-1!=o&&!n.test(i.slice(0,o))){var a=o+x.length;p&&i.slice(a,a+p.length)==p&&(a+=p.length),s.replaceRange("",r(t,o),r(t,a))}}})),!0)}))}(n(0))},function(e,t,n){!function(e){e.inputStyles.accessibleTextArea=class extends e.inputStyles.textarea{init(e){super.init(e),this.textarea.addEventListener("compositionstart",this._onCompositionStart.bind(this))}_onCompositionStart(){if(this.textarea.selectionEnd===this.textarea.value.length)return;this.textarea.value=this.textarea.value.substring(0,this.textarea.selectionEnd);const e=this.textarea.value.length;this.textarea.setSelectionRange(e,e),this.prevInput=this.textarea.value}reset(e){if(e||this.contextMenuPending||this.composing||this.cm.somethingSelected())return void super.reset(e);const t=this.cm.getCursor();let n,r;if(this.cm.options.lineWrapping){const e=this.cm.charCoords(t,"page").top;n=this.cm.coordsChar({left:-1/0,top:e}),r=this.cm.coordsChar({left:1/0,top:e})}else{const e=1e3*Math.floor(t.ch/1e3);n={ch:e,line:t.line},r={ch:e+1e3,line:t.line}}this.textarea.value=this.cm.getRange(n,r);const i=t.ch-n.ch;this.textarea.setSelectionRange(i,i),this.prevInput=this.textarea.value}poll(){if(this.contextMenuPending||this.composing)return super.poll();const e=this.textarea.value;let t=0;const n=Math.min(this.prevInput.length,e.length);for(;t","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"];e.registerHelper("hintWords","clojure",[].concat(n,r,i));var o=g(n),a=g(r),l=g(i),s=g(["->","->>","as->","binding","bound-fn","case","catch","comment","cond","cond->","cond->>","condp","def","definterface","defmethod","defn","defmacro","defprotocol","defrecord","defstruct","deftype","do","doseq","dotimes","doto","extend","extend-protocol","extend-type","fn","for","future","if","if-let","if-not","if-some","let","letfn","locking","loop","ns","proxy","reify","struct-map","some->","some->>","try","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn"]),c=/^(?:[\\\[\]\s"(),;@^`{}~]|$)/,u=/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,f=/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,d=/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/;function h(e,t){if(e.eatSpace()||e.eat(","))return["space",null];if(e.match(u))return[null,"number"];if(e.match(f))return[null,"string-2"];if(e.eat(/^"/))return(t.tokenize=p)(e,t);if(e.eat(/^[(\[{]/))return["open","bracket"];if(e.eat(/^[)\]}]/))return["close","bracket"];if(e.eat(/^;/))return e.skipToEnd(),["space","comment"];if(e.eat(/^[#'@^`~]/))return[null,"meta"];var n=e.match(d),r=n&&n[0];return r?"comment"===r&&"("===t.lastToken?(t.tokenize=m)(e,t):v(r,o)||":"===r.charAt(0)?["symbol","atom"]:v(r,a)||v(r,l)?["symbol","keyword"]:"("===t.lastToken?["symbol","builtin"]:["symbol","variable"]:(e.next(),e.eatWhile((function(e){return!v(e,c)})),[null,"error"])}function p(e,t){for(var n,r=!1;n=e.next();){if('"'===n&&!r){t.tokenize=h;break}r=!r&&"\\"===n}return[null,"string"]}function m(e,t){for(var n,r=1;n=e.next();)if(")"===n&&r--,"("===n&&r++,0===r){e.backUp(1),t.tokenize=h;break}return["space","comment"]}function g(e){for(var t={},n=0;n!?|]/;function p(e,t,n){return t.tokenize=n,n(e,t)}function m(e,t){for(var n,r=!1;null!=(n=e.next());){if(n==t&&!r)return!0;r=!r&&"\\"==n}}function g(e,t,n){return f=e,i=n,t}function v(e,t){var n=e.next();if('"'==n||"'"==n)return p(e,t,(r=n,function(e,t){return m(e,r)&&(t.tokenize=v),g("string","string")}));if(/[\[\]{}\(\),;\:\.]/.test(n))return g(n);if("0"==n&&e.eat(/x/i))return e.eatWhile(/[\da-f]/i),g("number","number");if(/\d/.test(n)||"-"==n&&e.eat(/\d/))return e.match(/^\d*(?:\.\d*(?!\.))?(?:[eE][+\-]?\d+)?/),g("number","number");if(t.reAllowed&&"~"==n&&e.eat(/\//))return m(e,"/"),e.eatWhile(/[gimsu]/),g("regexp","string-2");if("/"==n)return e.eat("*")?p(e,t,y):e.eat("/")?(e.skipToEnd(),g("comment","comment")):(e.eatWhile(h),g("operator",null,e.current()));if("#"==n)return e.skipToEnd(),g("conditional","meta");if("@"==n)return e.eat(/:/),e.eatWhile(/[\w_]/),g("metadata","meta");if(h.test(n))return e.eatWhile(h),g("operator",null,e.current());if(/[A-Z]/.test(n))return e.eatWhile(/[\w_<>]/),g("type","variable-3",i=e.current());e.eatWhile(/[\w_]/);var r,i=e.current(),o=d.propertyIsEnumerable(i)&&d[i];return o&&t.kwAllowed?g(o.type,o.style,i):g("variable","variable",i)}function y(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=v;break}r="*"==n}return g("comment","comment")}var b={atom:!0,number:!0,variable:!0,string:!0,regexp:!0};function x(e,t,n,r,i,o){this.indented=e,this.column=t,this.type=n,this.prev=i,this.info=o,null!=r&&(this.align=r)}function w(e,t){for(var n=e.localVars;n;n=n.next)if(n.name==t)return!0}function k(e,t){if(/[a-z]/.test(t.charAt(0)))return!1;for(var n=e.importedtypes.length,r=0;r=0;e--)S.cc.push(arguments[e])}function L(){return T.apply(null,arguments),!0}function M(e,t){for(var n=t;n;n=n.next)if(n.name==e)return!0;return!1}function O(e){var t=S.state;if(t.context){if(S.marked="def",M(e,t.localVars))return;t.localVars={name:e,next:t.localVars}}else if(t.globalVars){if(M(e,t.globalVars))return;t.globalVars={name:e,next:t.globalVars}}}var N={name:"this",next:null};function A(){S.state.context||(S.state.localVars=N),S.state.context={prev:S.state.context,vars:S.state.localVars}}function E(){S.state.localVars=S.state.context.vars,S.state.context=S.state.context.prev}function z(e,t){var n=function(){var n=S.state;n.lexical=new x(n.indented,S.stream.column(),e,null,n.lexical,t)};return n.lex=!0,n}function P(){var e=S.state;e.lexical.prev&&(")"==e.lexical.type&&(e.indented=e.lexical.indented),e.lexical=e.lexical.prev)}function D(e){return function t(n){return n==e?L():";"==e?T():L(t)}}function I(e){return"@"==e?L(R):"var"==e?L(z("vardef"),X,D(";"),P):"keyword a"==e?L(z("form"),F,I,P):"keyword b"==e?L(z("form"),I,P):"{"==e?L(z("}"),A,G,P,E):";"==e?L():"attribute"==e?L(H):"function"==e?L(J):"for"==e?L(z("form"),D("("),z(")"),Y,D(")"),P,I,P):"variable"==e?L(z("stat"),U):"switch"==e?L(z("form"),F,z("}","switch"),D("{"),G,P,P):"case"==e?L(F,D(":")):"default"==e?L(D(":")):"catch"==e?L(z("form"),A,D("("),re,D(")"),I,P,E):"import"==e?L(j,D(";")):"typedef"==e?L(q):T(z("stat"),F,D(";"),P)}function F(e){return b.hasOwnProperty(e)||"type"==e?L(W):"function"==e?L(J):"keyword c"==e?L(_):"("==e?L(z(")"),_,D(")"),P,W):"operator"==e?L(F):"["==e?L(z("]"),$(_,"]"),P,W):"{"==e?L(z("}"),$(K,"}"),P,W):L()}function _(e){return e.match(/[;\}\)\],]/)?T():T(F)}function W(e,t){return"operator"==e&&/\+\+|--/.test(t)?L(W):"operator"==e||":"==e?L(F):";"!=e?"("==e?L(z(")"),$(F,")"),P,W):"."==e?L(V,W):"["==e?L(z("]"),F,D("]"),P,W):void 0:void 0}function H(e){return"attribute"==e?L(H):"function"==e?L(J):"var"==e?L(X):void 0}function R(e){return":"==e||"variable"==e?L(R):"("==e?L(z(")"),$(B,")"),P,I):void 0}function B(e){if("variable"==e)return L()}function j(e,t){return"variable"==e&&/[A-Z]/.test(t.charAt(0))?(C(t),L()):"variable"==e||"property"==e||"."==e||"*"==t?L(j):void 0}function q(e,t){return"variable"==e&&/[A-Z]/.test(t.charAt(0))?(C(t),L()):"type"==e&&/[A-Z]/.test(t.charAt(0))?L():void 0}function U(e){return":"==e?L(P,I):T(W,D(";"),P)}function V(e){if("variable"==e)return S.marked="property",L()}function K(e){if("variable"==e&&(S.marked="property"),b.hasOwnProperty(e))return L(D(":"),F)}function $(e,t){function n(r){return","==r?L(e,n):r==t?L():L(D(t))}return function(r){return r==t?L():T(e,n)}}function G(e){return"}"==e?L():T(I,G)}function X(e,t){return"variable"==e?(O(t),L(ee,Z)):L()}function Z(e,t){return"="==t?L(F,Z):","==e?L(X):void 0}function Y(e,t){return"variable"==e?(O(t),L(Q,F)):T()}function Q(e,t){if("in"==t)return L()}function J(e,t){return"variable"==e||"type"==e?(O(t),L(J)):"new"==t?L(J):"("==e?L(z(")"),A,$(re,")"),P,ee,I,E):void 0}function ee(e){if(":"==e)return L(te)}function te(e){return"type"==e||"variable"==e?L():"{"==e?L(z("}"),$(ne,"}"),P):void 0}function ne(e){if("variable"==e)return L(ee)}function re(e,t){if("variable"==e)return O(t),L(ee)}return E.lex=!0,P.lex=!0,{startState:function(e){var r={tokenize:v,reAllowed:!0,kwAllowed:!0,cc:[],lexical:new x((e||0)-n,0,"block",!1),localVars:t.localVars,importedtypes:["Int","Float","String","Void","Std","Bool","Dynamic","Array"],context:t.localVars&&{vars:t.localVars},indented:0};return t.globalVars&&"object"==typeof t.globalVars&&(r.globalVars=t.globalVars),r},token:function(e,t){if(e.sol()&&(t.lexical.hasOwnProperty("align")||(t.lexical.align=!1),t.indented=e.indentation()),e.eatSpace())return null;var n=t.tokenize(e,t);return"comment"==f?n:(t.reAllowed=!("operator"!=f&&"keyword c"!=f&&!f.match(/^[\[{}\(,;:]$/)),t.kwAllowed="."!=f,function(e,t,n,r,i){var o=e.cc;for(S.state=e,S.stream=i,S.marked=null,S.cc=o,e.lexical.hasOwnProperty("align")||(e.lexical.align=!0);;)if((o.length?o.pop():I)(n,r)){for(;o.length&&o[o.length-1].lex;)o.pop()();return S.marked?S.marked:"variable"==n&&w(e,r)?"variable-2":"variable"==n&&k(e,r)?"variable-3":t}}(t,n,f,i,e))},indent:function(e,t){if(e.tokenize!=v)return 0;var r=t&&t.charAt(0),i=e.lexical;"stat"==i.type&&"}"==r&&(i=i.prev);var o=i.type,a=r==o;return"vardef"==o?i.indented+4:"form"==o&&"{"==r?i.indented:"stat"==o||"form"==o?i.indented+n:"switch"!=i.info||a?i.align?i.column+(a?0:1):i.indented+(a?0:n):i.indented+(/^(?:case|default)\b/.test(t)?n:2*n)},electricChars:"{}",blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//"}})),e.defineMIME("text/x-haxe","haxe"),e.defineMode("hxml",(function(){return{startState:function(){return{define:!1,inString:!1}},token:function(e,t){var n=e.peek(),r=e.sol();if("#"==n)return e.skipToEnd(),"comment";if(r&&"-"==n){var i="variable-2";return e.eat(/-/),"-"==e.peek()&&(e.eat(/-/),i="keyword a"),"D"==e.peek()&&(e.eat(/[D]/),i="keyword c",t.define=!0),e.eatWhile(/[A-Z]/i),i}return n=e.peek(),0==t.inString&&"'"==n&&(t.inString=!0,e.next()),1==t.inString?(e.skipTo("'")||e.skipToEnd(),"'"==e.peek()&&(e.next(),t.inString=!1),"string"):(e.next(),null)},lineComment:"#"}})),e.defineMIME("text/x-hxml","hxml")}(n(0))},function(e,t,n){!function(e){"use strict";e.defineMode("http",(function(){function e(e,t){return e.skipToEnd(),t.cur=a,"error"}function t(t,r){return t.match(/^HTTP\/\d\.\d/)?(r.cur=n,"keyword"):t.match(/^[A-Z]+/)&&/[ \t]/.test(t.peek())?(r.cur=i,"keyword"):e(t,r)}function n(t,n){var i=t.match(/^\d+/);if(!i)return e(t,n);n.cur=r;var o=Number(i[0]);return o>=100&&o<200?"positive informational":o>=200&&o<300?"positive success":o>=300&&o<400?"positive redirect":o>=400&&o<500?"negative client-error":o>=500&&o<600?"negative server-error":"error"}function r(e,t){return e.skipToEnd(),t.cur=a,null}function i(e,t){return e.eatWhile(/\S/),t.cur=o,"string-2"}function o(t,n){return t.match(/^HTTP\/\d\.\d$/)?(n.cur=a,"keyword"):e(t,n)}function a(e){return e.sol()&&!e.eat(/[ \t]/)?e.match(/^.*?:/)?"atom":(e.skipToEnd(),"error"):(e.skipToEnd(),"string")}function l(e){return e.skipToEnd(),null}return{token:function(e,t){var n=t.cur;return n!=a&&n!=l&&e.eatSpace()?null:n(e,t)},blankLine:function(e){e.cur=l},startState:function(){return{cur:t}}}})),e.defineMIME("message/http","http")}(n(0))},function(e,t,n){!function(e){"use strict";var t={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]},n={};function r(e,t){var r=e.match(function(e){var t=n[e];return t||(n[e]=new RegExp("\\s+"+e+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*"))}(t));return r?/^\s*(.*?)\s*$/.exec(r[2])[1]:""}function i(e,t){return new RegExp((t?"^":"")+"","i")}function o(e,t){for(var n in e)for(var r=t[n]||(t[n]=[]),i=e[n],o=i.length-1;o>=0;o--)r.unshift(i[o])}e.defineMode("htmlmixed",(function(n,a){var l=e.getMode(n,{name:"xml",htmlMode:!0,multilineTagIndentFactor:a.multilineTagIndentFactor,multilineTagIndentPastTag:a.multilineTagIndentPastTag}),s={},c=a&&a.tags,u=a&&a.scriptTypes;if(o(t,s),c&&o(c,s),u)for(var f=u.length-1;f>=0;f--)s.script.unshift(["type",u[f].matches,u[f].mode]);function d(t,o){var a,c=l.token(t,o.htmlState),u=/\btag\b/.test(c);if(u&&!/[<>\s\/]/.test(t.current())&&(a=o.htmlState.tagName&&o.htmlState.tagName.toLowerCase())&&s.hasOwnProperty(a))o.inTag=a+" ";else if(o.inTag&&u&&/>$/.test(t.current())){var f=/^([\S]+) (.*)/.exec(o.inTag);o.inTag=null;var h=">"==t.current()&&function(e,t){for(var n=0;n-1?e.backUp(r.length-i):r.match(/<\/?$/)&&(e.backUp(r.length),e.match(t,!1)||e.match(r)),n}(e,g,t.localMode.token(e,t.localState))},o.localMode=p,o.localState=e.startState(p,l.indent(o.htmlState,"",""))}else o.inTag&&(o.inTag+=t.current(),t.eol()&&(o.inTag+=" "));return c}return{startState:function(){return{token:d,inTag:null,localMode:null,localState:null,htmlState:e.startState(l)}},copyState:function(t){var n;return t.localState&&(n=e.copyState(t.localMode,t.localState)),{token:t.token,inTag:t.inTag,localMode:t.localMode,localState:n,htmlState:e.copyState(l,t.htmlState)}},token:function(e,t){return t.token(e,t)},indent:function(t,n,r){return!t.localMode||/^\s*<\//.test(n)?l.indent(t.htmlState,n,r):t.localMode.indent?t.localMode.indent(t.localState,n,r):e.Pass},innerMode:function(e){return{state:e.localState||e.htmlState,mode:e.localMode||l}}}}),"xml","javascript","css"),e.defineMIME("text/html","htmlmixed")}(n(0),n(3),n(2),n(5))},function(e,t,n){!function(e){"use strict";function t(e,t,n,r){this.state=e,this.mode=t,this.depth=n,this.prev=r}function n(r){return new t(e.copyState(r.mode,r.state),r.mode,r.depth,r.prev&&n(r.prev))}e.defineMode("jsx",(function(r,i){var o=e.getMode(r,{name:"xml",allowMissing:!0,multilineTagIndentPastTag:!1,allowMissingTagName:!0}),a=e.getMode(r,i&&i.base||"javascript");function l(e){var t=e.tagName;e.tagName=null;var n=o.indent(e,"","");return e.tagName=t,n}function s(n,i){return i.context.mode==o?function(n,i,c){if(2==c.depth)return n.match(/^.*?\*\//)?c.depth=1:n.skipToEnd(),"comment";if("{"==n.peek()){o.skipAttribute(c.state);var u=l(c.state),f=c.state.context;if(f&&n.match(/^[^>]*>\s*$/,!1)){for(;f.prev&&!f.startOfLine;)f=f.prev;f.startOfLine?u-=r.indentUnit:c.prev.state.lexical&&(u=c.prev.state.lexical.indented)}else 1==c.depth&&(u+=r.indentUnit);return i.context=new t(e.startState(a,u),a,0,i.context),null}if(1==c.depth){if("<"==n.peek())return o.skipAttribute(c.state),i.context=new t(e.startState(o,l(c.state)),o,0,i.context),null;if(n.match("//"))return n.skipToEnd(),"comment";if(n.match("/*"))return c.depth=2,s(n,i)}var d,h=o.token(n,c.state),p=n.current();return/\btag\b/.test(h)?/>$/.test(p)?c.state.context?c.depth=0:i.context=i.context.prev:/^-1&&n.backUp(p.length-d),h}(n,i,i.context):function(n,r,i){if("<"==n.peek()&&a.expressionAllowed(n,i.state))return a.skipExpression(i.state),r.context=new t(e.startState(o,a.indent(i.state,"","")),o,0,r.context),null;var l=a.token(n,i.state);if(!l&&null!=i.depth){var s=n.current();"{"==s?i.depth++:"}"==s&&0==--i.depth&&(r.context=r.context.prev)}return l}(n,i,i.context)}return{startState:function(){return{context:new t(e.startState(a),a)}},copyState:function(e){return{context:n(e.context)}},token:s,indent:function(e,t,n){return e.context.mode.indent(e.context.state,t,n)},innerMode:function(e){return e.context}}}),"xml","javascript"),e.defineMIME("text/jsx","jsx"),e.defineMIME("text/typescript-jsx",{name:"jsx",base:{name:"javascript",typescript:!0}})}(n(0),n(3),n(2))},function(e,t,n){!function(e){"use strict";e.defineMode("coffeescript",(function(e,t){function n(e){return new RegExp("^(("+e.join(")|(")+"))\\b")}var r=/^(?:->|=>|\+[+=]?|-[\-=]?|\*[\*=]?|\/[\/=]?|[=!]=|<[><]?=?|>>?=?|%=?|&=?|\|=?|\^=?|\~|!|\?|(or|and|\|\||&&|\?)=)/,i=/^(?:[()\[\]{},:`=;]|\.\.?\.?)/,o=/^[_A-Za-z$][_A-Za-z$0-9]*/,a=/^@[_A-Za-z$][_A-Za-z$0-9]*/,l=n(["and","or","not","is","isnt","in","instanceof","typeof"]),s=["for","while","loop","if","unless","else","switch","try","catch","finally","class"],c=n(s.concat(["break","by","continue","debugger","delete","do","in","of","new","return","then","this","@","throw","when","until","extends"]));s=n(s);var u=/^('{3}|\"{3}|['\"])/,f=/^(\/{3}|\/)/,d=n(["Infinity","NaN","undefined","null","true","false","on","off","yes","no"]);function h(e,t){if(e.sol()){null===t.scope.align&&(t.scope.align=!1);var n=t.scope.offset;if(e.eatSpace()){var s=e.indentation();return s>n&&"coffee"==t.scope.type?"indent":s0&&v(e,t)}if(e.eatSpace())return null;var h=e.peek();if(e.match("####"))return e.skipToEnd(),"comment";if(e.match("###"))return t.tokenize=m,t.tokenize(e,t);if("#"===h)return e.skipToEnd(),"comment";if(e.match(/^-?[0-9\.]/,!1)){var g=!1;if(e.match(/^-?\d*\.\d+(e[\+\-]?\d+)?/i)&&(g=!0),e.match(/^-?\d+\.\d*/)&&(g=!0),e.match(/^-?\.\d+/)&&(g=!0),g)return"."==e.peek()&&e.backUp(1),"number";var y=!1;if(e.match(/^-?0x[0-9a-f]+/i)&&(y=!0),e.match(/^-?[1-9]\d*(e[\+\-]?\d+)?/)&&(y=!0),e.match(/^-?0(?![\dx])/i)&&(y=!0),y)return"number"}if(e.match(u))return t.tokenize=p(e.current(),!1,"string"),t.tokenize(e,t);if(e.match(f)){if("/"!=e.current()||e.match(/^.*\//,!1))return t.tokenize=p(e.current(),!0,"string-2"),t.tokenize(e,t);e.backUp(1)}return e.match(r)||e.match(l)?"operator":e.match(i)?"punctuation":e.match(d)?"atom":e.match(a)||t.prop&&e.match(o)?"property":e.match(c)?"keyword":e.match(o)?"variable":(e.next(),"error")}function p(e,n,r){return function(i,o){for(;!i.eol();)if(i.eatWhile(/[^'"\/\\]/),i.eat("\\")){if(i.next(),n&&i.eol())return r}else{if(i.match(e))return o.tokenize=h,r;i.eat(/['"\/]/)}return n&&(t.singleLineStringErrors?r="error":o.tokenize=h),r}}function m(e,t){for(;!e.eol();){if(e.eatWhile(/[^#]/),e.match("###")){t.tokenize=h;break}e.eatWhile("#")}return"comment"}function g(t,n,r){r=r||"coffee";for(var i=0,o=!1,a=null,l=n.scope;l;l=l.prev)if("coffee"===l.type||"}"==l.type){i=l.offset+e.indentUnit;break}"coffee"!==r?(o=null,a=t.column()+t.current().length):n.scope.align&&(n.scope.align=!1),n.scope={offset:i,type:r,prev:n.scope,align:o,alignOffset:a}}function v(e,t){if(t.scope.prev){if("coffee"===t.scope.type){for(var n=e.indentation(),r=!1,i=t.scope;i;i=i.prev)if(n===i.offset){r=!0;break}if(!r)return!0;for(;t.scope.prev&&t.scope.offset!==n;)t.scope=t.scope.prev;return!1}return t.scope=t.scope.prev,!1}}return{startState:function(e){return{tokenize:h,scope:{offset:e||0,type:"coffee",prev:null,align:!1},prop:!1,dedent:0}},token:function(e,t){var n=null===t.scope.align&&t.scope;n&&e.sol()&&(n.align=!1);var r=function(e,t){var n=t.tokenize(e,t),r=e.current();"return"===r&&(t.dedent=!0),(("->"===r||"=>"===r)&&e.eol()||"indent"===n)&&g(e,t);var i="[({".indexOf(r);if(-1!==i&&g(e,t,"])}".slice(i,i+1)),s.exec(r)&&g(e,t),"then"==r&&v(e,t),"dedent"===n&&v(e,t))return"error";if(-1!==(i="])}".indexOf(r))){for(;"coffee"==t.scope.type&&t.scope.prev;)t.scope=t.scope.prev;t.scope.type==r&&(t.scope=t.scope.prev)}return t.dedent&&e.eol()&&("coffee"==t.scope.type&&t.scope.prev&&(t.scope=t.scope.prev),t.dedent=!1),n}(e,t);return r&&"comment"!=r&&(n&&(n.align=!0),t.prop="punctuation"==r&&"."==e.current()),r},indent:function(e,t){if(e.tokenize!=h)return 0;var n=e.scope,r=t&&"])}".indexOf(t.charAt(0))>-1;if(r)for(;"coffee"==n.type&&n.prev;)n=n.prev;var i=r&&n.type===t.charAt(0);return n.align?n.alignOffset-(i?1:0):(i?n.prev:n).offset},lineComment:"#",fold:"indent"}})),e.defineMIME("application/vnd.coffeescript","coffeescript"),e.defineMIME("text/x-coffeescript","coffeescript"),e.defineMIME("text/coffeescript","coffeescript")}(n(0))},function(e,t,n){!function(e){"use strict";e.defineMode("elm",(function(){function e(e,t,n){return t(n),n(e,t)}var t=/[a-z_]/,n=/[A-Z]/,r=/[0-9]/,i=/[0-9A-Fa-f]/,o=/[0-7]/,a=/[a-z_A-Z0-9\']/,l=/[-!#$%&*+.\/<=>?@\\^|~:\u03BB\u2192]/,s=/[(),;[\]`{}]/,c=/[ \t\v\f]/;function u(){return function(d,h){if(d.eatWhile(c))return null;var p=d.next();if(s.test(p)){if("{"==p&&d.eat("-")){var m="comment";return d.eat("#")&&(m="meta"),e(d,h,function e(t,n){return 0==n?u():function(r,i){for(var o=n;!r.eol();){var a=r.next();if("{"==a&&r.eat("-"))++o;else if("-"==a&&r.eat("}")&&0==--o)return i(u()),t}return i(e(t,o)),t}}(m,1))}return null}if("'"==p)return d.eat("\\"),d.next(),d.eat("'")?"string":"error";if('"'==p)return e(d,h,f);if(n.test(p))return d.eatWhile(a),d.eat(".")?"qualifier":"variable-2";if(t.test(p)){var g=1===d.pos;return d.eatWhile(a),g?"type":"variable"}if(r.test(p)){if("0"==p){if(d.eat(/[xX]/))return d.eatWhile(i),"integer";if(d.eat(/[oO]/))return d.eatWhile(o),"number"}return d.eatWhile(r),m="number",d.eat(".")&&(m="number",d.eatWhile(r)),d.eat(/[eE]/)&&(m="number",d.eat(/[-+]/),d.eatWhile(r)),m}return l.test(p)?"-"==p&&d.eat(/-/)&&(d.eatWhile(/-/),!d.eat(l))?(d.skipToEnd(),"comment"):(d.eatWhile(l),"builtin"):"error"}}function f(e,t){for(;!e.eol();){var n=e.next();if('"'==n)return t(u()),"string";if("\\"==n){if(e.eol()||e.eat(c))return t(d),"string";e.eat("&")||e.next()}}return t(u()),"error"}function d(t,n){return t.eat("\\")?e(t,n,f):(t.next(),n(u()),"error")}var h=function(){for(var e={},t=["case","of","as","if","then","else","let","in","infix","infixl","infixr","type","alias","input","output","foreign","loopback","module","where","import","exposing","_","..","|",":","=","\\",'"',"->","<-"],n=t.length;n--;)e[t[n]]="keyword";return e}();return{startState:function(){return{f:u()}},copyState:function(e){return{f:e.f}},token:function(e,t){var n=t.f(e,(function(e){t.f=e})),r=e.current();return h.hasOwnProperty(r)?h[r]:n}}})),e.defineMIME("text/x-elm","elm")}(n(0))},function(e,t,n){!function(e){"use strict";function t(e,t,n,r,i,o){this.indented=e,this.column=t,this.type=n,this.info=r,this.align=i,this.prev=o}function n(e,n,r,i){var o=e.indented;return e.context&&"statement"==e.context.type&&"statement"!=r&&(o=e.context.indented),e.context=new t(o,n,r,i,null,e.context)}function r(e){var t=e.context.type;return")"!=t&&"]"!=t&&"}"!=t||(e.indented=e.context.indented),e.context=e.context.prev}function i(e,t,n){return"variable"==t.prevToken||"type"==t.prevToken||!!/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(e.string.slice(0,n))||!(!t.typeAtEndOfLine||e.column()!=e.indentation())||void 0}function o(e){for(;;){if(!e||"top"==e.type)return!0;if("}"==e.type&&"namespace"!=e.prev.info)return!1;e=e.prev}}function a(e){for(var t={},n=e.split(" "),r=0;r!?|\/]/,N=s.isIdentifierChar||/[\w\$_\xa1-\uffff]/,A=s.isReservedIdentifier||!1;function E(e,t){var n,r=e.next();if(x[r]){var i=x[r](e,t);if(!1!==i)return i}if('"'==r||"'"==r)return t.tokenize=(n=r,function(e,t){for(var r,i=!1,o=!1;null!=(r=e.next());){if(r==n&&!i){o=!0;break}i=!i&&"\\"==r}return(o||!i&&!w)&&(t.tokenize=null),"string"}),t.tokenize(e,t);if(T.test(r))return c=r,null;if(L.test(r)){if(e.backUp(1),e.match(M))return"number";e.next()}if("/"==r){if(e.eat("*"))return t.tokenize=z,z(e,t);if(e.eat("/"))return e.skipToEnd(),"comment"}if(O.test(r)){for(;!e.match(/^\/[\/*]/,!1)&&e.eat(O););return"operator"}if(e.eatWhile(N),S)for(;e.match(S);)e.eatWhile(N);var o=e.current();return l(p,o)?(l(v,o)&&(c="newstatement"),l(y,o)&&(u=!0),"keyword"):l(m,o)?"type":l(g,o)||A&&A(o)?(l(v,o)&&(c="newstatement"),"builtin"):l(b,o)?"atom":"variable"}function z(e,t){for(var n,r=!1;n=e.next();){if("/"==n&&r){t.tokenize=null;break}r="*"==n}return"comment"}function P(e,t){s.typeFirstDefinitions&&e.eol()&&o(t.context)&&(t.typeAtEndOfLine=i(e,t,e.pos))}return{startState:function(e){return{tokenize:null,context:new t((e||0)-f,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(e,t){var a=t.context;if(e.sol()&&(null==a.align&&(a.align=!1),t.indented=e.indentation(),t.startOfLine=!0),e.eatSpace())return P(e,t),null;c=u=null;var l=(t.tokenize||E)(e,t);if("comment"==l||"meta"==l)return l;if(null==a.align&&(a.align=!0),";"==c||":"==c||","==c&&e.match(/^\s*(?:\/\/.*)?$/,!1))for(;"statement"==t.context.type;)r(t);else if("{"==c)n(t,e.column(),"}");else if("["==c)n(t,e.column(),"]");else if("("==c)n(t,e.column(),")");else if("}"==c){for(;"statement"==a.type;)a=r(t);for("}"==a.type&&(a=r(t));"statement"==a.type;)a=r(t)}else c==a.type?r(t):k&&(("}"==a.type||"top"==a.type)&&";"!=c||"statement"==a.type&&"newstatement"==c)&&n(t,e.column(),"statement",e.current());if("variable"==l&&("def"==t.prevToken||s.typeFirstDefinitions&&i(e,t,e.start)&&o(t.context)&&e.match(/^\s*\(/,!1))&&(l="def"),x.token){var f=x.token(e,t,l);void 0!==f&&(l=f)}return"def"==l&&!1===s.styleDefs&&(l="variable"),t.startOfLine=!1,t.prevToken=u?"def":l||c,P(e,t),l},indent:function(t,n){if(t.tokenize!=E&&null!=t.tokenize||t.typeAtEndOfLine)return e.Pass;var r=t.context,i=n&&n.charAt(0),o=i==r.type;if("statement"==r.type&&"}"==i&&(r=r.prev),s.dontIndentStatements)for(;"statement"==r.type&&s.dontIndentStatements.test(r.info);)r=r.prev;if(x.indent){var a=x.indent(t,r,n,f);if("number"==typeof a)return a}var l=r.prev&&"switch"==r.prev.info;if(s.allmanIndentation&&/[{(]/.test(i)){for(;"top"!=r.type&&"}"!=r.type;)r=r.prev;return r.indented}return"statement"==r.type?r.indented+("{"==i?0:d):!r.align||h&&")"==r.type?")"!=r.type||o?r.indented+(o?0:f)+(o||!l||/^(?:case|default)\b/.test(n)?0:f):r.indented+d:r.column+(o?0:1)},electricInput:C?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,blockCommentStart:"/*",blockCommentEnd:"*/",blockCommentContinue:" * ",lineComment:"//",fold:"brace"}}));var s="auto if break case register continue return default do sizeof static else struct switch extern typedef union for goto while enum const volatile inline restrict asm fortran",c=a("int long char short double float unsigned signed void bool"),u=a("SEL instancetype id Class Protocol BOOL");function f(e){return l(c,e)||/.+_t$/.test(e)}var d="case do else for if switch while struct enum union";function h(e,t){if(!t.startOfLine)return!1;for(var n,r=null;n=e.peek();){if("\\"==n&&e.match(/^.$/)){r=h;break}if("/"==n&&e.match(/^\/[\/\*]/,!1))break;e.next()}return t.tokenize=r,"meta"}function p(e,t){return"type"==t.prevToken&&"type"}function m(e){return!(!e||e.length<2||"_"!=e[0]||"_"!=e[1]&&e[1]===e[1].toLowerCase())}function g(e){return e.eatWhile(/[\w\.']/),"number"}function v(e,t){if(e.backUp(1),e.match(/(R|u8R|uR|UR|LR)/)){var n=e.match(/"([^\s\\()]{0,16})\(/);return!!n&&(t.cpp11RawStringDelim=n[1],t.tokenize=b,b(e,t))}return e.match(/(u8|u|U|L)/)?!!e.match(/["']/,!1)&&"string":(e.next(),!1)}function y(e,t){for(var n;null!=(n=e.next());)if('"'==n&&!e.eat('"')){t.tokenize=null;break}return"string"}function b(e,t){var n=t.cpp11RawStringDelim.replace(/[^\w\s]/g,"\\$&");return e.match(new RegExp(".*?\\)"+n+'"'))?t.tokenize=null:e.skipToEnd(),"string"}function x(t,n){"string"==typeof t&&(t=[t]);var r=[];function i(e){if(e)for(var t in e)e.hasOwnProperty(t)&&r.push(t)}i(n.keywords),i(n.types),i(n.builtin),i(n.atoms),r.length&&(n.helperType=t[0],e.registerHelper("hintWords",t[0],r));for(var o=0;o!?|\/#:@]/,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return!!e.match('""')&&(t.tokenize=w,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},"=":function(e,n){var r=n.context;return!("}"!=r.type||!r.align||!e.eat(">"))&&(n.context=new t(r.indented,r.column,r.type,r.info,null,r.prev),"operator")},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=k(1),t.tokenize(e,t))}},modeProps:{closeBrackets:{pairs:'()[]{}""',triples:'"'}}}),x("text/x-kotlin",{name:"clike",keywords:a("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),types:a("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),intendSwitch:!1,indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(u|ll?|l|f)?/i,blockKeywords:a("catch class do else finally for if where try while enum"),defKeywords:a("class val var object interface fun"),atoms:a("true false null this"),hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},"*":function(e,t){return"."==t.prevToken?"variable":"operator"},'"':function(e,t){var n;return t.tokenize=(n=e.match('""'),function(e,t){for(var r,i=!1,o=!1;!e.eol();){if(!n&&!i&&e.match('"')){o=!0;break}if(n&&e.match('"""')){o=!0;break}r=e.next(),!i&&"$"==r&&e.match("{")&&e.skipTo("}"),i=!i&&"\\"==r&&!n}return!o&&n||(t.tokenize=null),"string"}),t.tokenize(e,t)},"/":function(e,t){return!!e.eat("*")&&(t.tokenize=k(1),t.tokenize(e,t))},indent:function(e,t,n,r){var i=n&&n.charAt(0);return"}"!=e.prevToken&&")"!=e.prevToken||""!=n?"operator"==e.prevToken&&"}"!=n&&"}"!=e.context.type||"variable"==e.prevToken&&"."==i||("}"==e.prevToken||")"==e.prevToken)&&"."==i?2*r+t.indented:t.align&&"}"==t.type?t.indented+(e.context.type==(n||"").charAt(0)?0:r):void 0:e.indented}},modeProps:{closeBrackets:{triples:'"'}}}),x(["x-shader/x-vertex","x-shader/x-fragment"],{name:"clike",keywords:a("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:a("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:a("for while do if else struct"),builtin:a("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:a("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TexureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":h},modeProps:{fold:["brace","include"]}}),x("text/x-nesc",{name:"clike",keywords:a(s+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:f,blockKeywords:a(d),atoms:a("null true false"),hooks:{"#":h},modeProps:{fold:["brace","include"]}}),x("text/x-objectivec",{name:"clike",keywords:a(s+" bycopy byref in inout oneway out self super atomic nonatomic retain copy readwrite readonly strong weak assign typeof nullable nonnull null_resettable _cmd @interface @implementation @end @protocol @encode @property @synthesize @dynamic @class @public @package @private @protected @required @optional @try @catch @finally @import @selector @encode @defs @synchronized @autoreleasepool @compatibility_alias @available"),types:function(e){return f(e)||l(u,e)},builtin:a("FOUNDATION_EXPORT FOUNDATION_EXTERN NS_INLINE NS_FORMAT_FUNCTION NS_RETURNS_RETAINED NS_ERROR_ENUM NS_RETURNS_NOT_RETAINED NS_RETURNS_INNER_POINTER NS_DESIGNATED_INITIALIZER NS_ENUM NS_OPTIONS NS_REQUIRES_NIL_TERMINATION NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END NS_SWIFT_NAME NS_REFINED_FOR_SWIFT"),blockKeywords:a(d+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:a("struct enum union @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:a("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:m,hooks:{"#":h,"*":p},modeProps:{fold:["brace","include"]}}),x("text/x-squirrel",{name:"clike",keywords:a("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:f,blockKeywords:a("case catch class else for foreach if switch try while"),defKeywords:a("function local class"),typeFirstDefinitions:!0,atoms:a("true false null"),hooks:{"#":h},modeProps:{fold:["brace","include"]}});var C=null;x("text/x-ceylon",{name:"clike",keywords:a("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(e){var t=e.charAt(0);return t===t.toUpperCase()&&t!==t.toLowerCase()},blockKeywords:a("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:a("class dynamic function interface module object package value"),builtin:a("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:a("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(e){return e.eatWhile(/[\w\$_]/),"meta"},'"':function(e,t){return t.tokenize=function e(t){return function(n,r){for(var i,o=!1,a=!1;!n.eol();){if(!o&&n.match('"')&&("single"==t||n.match('""'))){a=!0;break}if(!o&&n.match("``")){C=e(t),a=!0;break}i=n.next(),o="single"==t&&!o&&"\\"==i}return a&&(r.tokenize=null),"string"}}(e.match('""')?"triple":"single"),t.tokenize(e,t)},"`":function(e,t){return!(!C||!e.match("`"))&&(t.tokenize=C,C=null,t.tokenize(e,t))},"'":function(e){return e.eatWhile(/[\w\$_\xa1-\uffff]/),"atom"},token:function(e,t,n){if(("variable"==n||"type"==n)&&"."==t.prevToken)return"variable-2"}},modeProps:{fold:["brace","import"],closeBrackets:{triples:'"'}}})}(n(0))},function(e,t,n){!function(e){"use strict";e.defineSimpleMode("rust",{start:[{regex:/b?"/,token:"string",next:"string"},{regex:/b?r"/,token:"string",next:"string_raw"},{regex:/b?r#+"/,token:"string",next:"string_raw_hash"},{regex:/'(?:[^'\\]|\\(?:[nrt0'"]|x[\da-fA-F]{2}|u\{[\da-fA-F]{6}\}))'/,token:"string-2"},{regex:/b'(?:[^']|\\(?:['\\nrt0]|x[\da-fA-F]{2}))'/,token:"string-2"},{regex:/(?:(?:[0-9][0-9_]*)(?:(?:[Ee][+-]?[0-9_]+)|\.[0-9_]+(?:[Ee][+-]?[0-9_]+)?)(?:f32|f64)?)|(?:0(?:b[01_]+|(?:o[0-7_]+)|(?:x[0-9a-fA-F_]+))|(?:[0-9][0-9_]*))(?:u8|u16|u32|u64|i8|i16|i32|i64|isize|usize)?/,token:"number"},{regex:/(let(?:\s+mut)?|fn|enum|mod|struct|type)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/(?:abstract|alignof|as|box|break|continue|const|crate|do|else|enum|extern|fn|for|final|if|impl|in|loop|macro|match|mod|move|offsetof|override|priv|proc|pub|pure|ref|return|self|sizeof|static|struct|super|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/,token:"keyword"},{regex:/\b(?:Self|isize|usize|char|bool|u8|u16|u32|u64|f16|f32|f64|i8|i16|i32|i64|str|Option)\b/,token:"atom"},{regex:/\b(?:true|false|Some|None|Ok|Err)\b/,token:"builtin"},{regex:/\b(fn)(\s+)([a-zA-Z_][a-zA-Z0-9_]*)/,token:["keyword",null,"def"]},{regex:/#!?\[.*\]/,token:"meta"},{regex:/\/\/.*/,token:"comment"},{regex:/\/\*/,token:"comment",next:"comment"},{regex:/[-+\/*=<>!]+/,token:"operator"},{regex:/[a-zA-Z_]\w*!/,token:"variable-3"},{regex:/[a-zA-Z_]\w*/,token:"variable"},{regex:/[\{\[\(]/,indent:!0},{regex:/[\}\]\)]/,dedent:!0}],string:[{regex:/"/,token:"string",next:"start"},{regex:/(?:[^\\"]|\\(?:.|$))*/,token:"string"}],string_raw:[{regex:/"/,token:"string",next:"start"},{regex:/[^"]*/,token:"string"}],string_raw_hash:[{regex:/"#+/,token:"string",next:"start"},{regex:/(?:[^"]|"(?!#))*/,token:"string"}],comment:[{regex:/.*?\*\//,token:"comment",next:"start"},{regex:/.*/,token:"comment"}],meta:{dontIndentStates:["comment"],electricInput:/^\s*\}$/,blockCommentStart:"/*",blockCommentEnd:"*/",lineComment:"//",fold:"brace"}}),e.defineMIME("text/x-rustsrc","rust"),e.defineMIME("text/rust","rust")}(n(0),n(25))},function(e,t,n){!function(e){"use strict";function t(e,t){if(!e.hasOwnProperty(t))throw new Error("Undefined state "+t+" in simple mode")}function n(e,t){if(!e)return/(?:)/;var n="";return e instanceof RegExp?(e.ignoreCase&&(n="i"),e=e.source):e=String(e),new RegExp((!1===t?"":"^")+"(?:"+e+")",n)}function r(e,r){(e.next||e.push)&&t(r,e.next||e.push),this.regex=n(e.regex),this.token=function(e){if(!e)return null;if(e.apply)return e;if("string"==typeof e)return e.replace(/\./g," ");for(var t=[],n=0;n2&&u.token&&"string"!=typeof u.token){r.pending=[];for(var h=2;h-1)return e.Pass;var a=r.indent.length-1,l=t[r.state];e:for(;;){for(var s=0;s>u",">>s",">=","<=","==","!=","=s",">=u",">s",">u","<",">","=","&","|","^","!"]);function l(n,l){var u,f=n.next();if("$"===f)return n.eatWhile(t),"variable";if("@"===f)return n.eatWhile(t),"meta";if('"'===f)return l.tokenize=(u=f,function(e,t){for(var n,r=!1;null!=(n=e.next());){if(n==u&&!r)return t.tokenize=null,"string";r=!r&&"\\"===n}return"string"}),l.tokenize(n,l);if("/"==f){if(n.eat("*"))return l.tokenize=s,s(n,l);if(n.eat("/"))return n.skipToEnd(),"comment"}if(/\d/.test(f)||("-"===f||"+"===f)&&/\d/.test(n.peek()))return n.eatWhile(/[\w\._\-+]/),"number";if(/[\[\]\(\)\{\},:]/.test(f))return null;if(o.test(f))return"operator";n.eatWhile(t);var d=n.current();if(d in a)return"operator";if(d in e)return"keyword";if(d in i){if(!n.eat(":"))return"builtin";n.eatWhile(t),d=n.current()}return d in r?"builtin":"Temporary"===d?(l.tokenize=c,l.tokenize(n,l)):null}function s(e,t){var n;for(t.commentDepth=1;null!=(n=e.next());){if("*"===n&&e.eat("/")&&0==--t.commentDepth)return t.tokenize=null,"comment";"/"===n&&e.eat("*")&&t.commentDepth++}return"comment"}function c(e,t){for(var n,r=t.commentState;null!=(n=e.next());)if(0===r&&"t"===n)r=1;else if(1===r&&":"===n)return t.tokenize=null,t.commentState=0,r=2,"comment";return t.commentState=r,"comment"}return{startState:function(){return{tokenize:null,commentState:0,commentDepth:0}},token:function(e,t){return e.eatSpace()?null:(t.tokenize||l)(e,t)}}})),e.registerHelper("wordChars","wasm",t),e.defineMIME("text/wasm","wasm")})?r.apply(t,i):r)||(e.exports=o)},function(e,t,n){!function(e){"use strict";var t="CodeMirror-activeline-background";function n(e){for(var n=0;ne.pos?(e.pos=n,null):(e.pos=t,"trailingspace")},name:"trailingspace"})}))}(n(0))},function(e,t,n){!function(e){"use strict";e.registerHelper("fold","brace",(function(t,n){var r,i=n.line,o=t.getLine(i);function a(a){for(var l=n.ch,s=0;;){var c=l<=0?-1:o.lastIndexOf(a,l-1);if(-1!=c){if(1==s&&ct.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));if(/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"keyword"!=r.type||"import"!=r.string)return null;for(var i=n,o=Math.min(t.lastLine(),n+10);i<=o;++i){var a=t.getLine(i).indexOf(";");if(-1!=a)return{startCh:r.end,end:e.Pos(i,a)}}}var i,o=n.line,a=r(o);if(!a||r(o-1)||(i=r(o-2))&&i.end.line==o-1)return null;for(var l=a.end;;){var s=r(l.line+1);if(null==s)break;l=s.end}return{from:t.clipPos(e.Pos(o,a.startCh+1)),to:l}})),e.registerHelper("fold","include",(function(t,n){function r(n){if(nt.lastLine())return null;var r=t.getTokenAt(e.Pos(n,1));return/\S/.test(r.string)||(r=t.getTokenAt(e.Pos(n,r.end+1))),"meta"==r.type&&"#include"==r.string.slice(0,8)?r.start+8:void 0}var i=n.line,o=r(i);if(null==o||null!=r(i-1))return null;for(var a=i;null!=r(a+1);)++a;return{from:e.Pos(i,o+1),to:t.clipPos(e.Pos(a))}}))}(n(0))},function(e,t,n){!function(e){"use strict";e.registerGlobalHelper("fold","comment",(function(e){return e.blockCommentStart&&e.blockCommentEnd}),(function(t,n){var r=t.getModeAt(n),i=r.blockCommentStart,o=r.blockCommentEnd;if(i&&o){for(var a,l=n.line,s=t.getLine(l),c=n.ch,u=0;;){var f=c<=0?-1:s.lastIndexOf(i,c-1);if(-1!=f){if(1==u&&f=e.max))return e.ch=0,e.text=e.cm.getLine(++e.line),!0}function s(e){if(!(e.line<=e.min))return e.text=e.cm.getLine(--e.line),e.ch=e.text.length,!0}function c(e){for(;;){var t=e.text.indexOf(">",e.ch);if(-1==t){if(l(e))continue;return}if(a(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t+1}}function u(e){for(;;){var t=e.ch?e.text.lastIndexOf("<",e.ch-1):-1;if(-1==t){if(s(e))continue;return}if(a(e,t+1)){i.lastIndex=t,e.ch=t;var n=i.exec(e.text);if(n&&n.index==t)return n}else e.ch=t}}function f(e){for(;;){i.lastIndex=e.ch;var t=i.exec(e.text);if(!t){if(l(e))continue;return}if(a(e,t.index+1))return e.ch=t.index+t[0].length,t;e.ch=t.index+1}}function d(e){for(;;){var t=e.ch?e.text.lastIndexOf(">",e.ch-1):-1;if(-1==t){if(s(e))continue;return}if(a(e,t+1)){var n=e.text.lastIndexOf("/",t),r=n>-1&&!/\S/.test(e.text.slice(n+1,t));return e.ch=t+1,r?"selfClose":"regular"}e.ch=t}}function h(e,n){for(var r=[];;){var i,o=f(e),a=e.line,l=e.ch-(o?o[0].length:0);if(!o||!(i=c(e)))return;if("selfClose"!=i)if(o[1]){for(var s=r.length-1;s>=0;--s)if(r[s]==o[2]){r.length=s;break}if(s<0&&(!n||n==o[2]))return{tag:o[2],from:t(a,l),to:t(e.line,e.ch)}}else r.push(o[2])}}function p(e,n){for(var r=[];;){var i=d(e);if(!i)return;if("selfClose"!=i){var o=e.line,a=e.ch,l=u(e);if(!l)return;if(l[1])r.push(l[2]);else{for(var s=r.length-1;s>=0;--s)if(r[s]==l[2]){r.length=s;break}if(s<0&&(!n||n==l[2]))return{tag:l[2],from:t(e.line,e.ch),to:t(o,a)}}}else u(e)}}e.registerHelper("fold","xml",(function(e,r){for(var i=new o(e,r.line,0);;){var a=f(i);if(!a||i.line!=r.line)return;var l=c(i);if(!l)return;if(!a[1]&&"selfClose"!=l){var s=t(i.line,i.ch),u=h(i,a[2]);return u&&n(u.from,s)>0?{from:s,to:u.from}:null}}})),e.findMatchingTag=function(e,r,i){var a=new o(e,r.line,r.ch,i);if(-1!=a.text.indexOf(">")||-1!=a.text.indexOf("<")){var l=c(a),s=l&&t(a.line,a.ch),f=l&&u(a);if(l&&f&&!(n(a,r)>0)){var d={from:t(a.line,a.ch),to:s,tag:f[2]};return"selfClose"==l?{open:d,close:null,at:"open"}:f[1]?{open:p(a,f[2]),close:d,at:"close"}:{open:d,close:h(a=new o(e,s.line,s.ch,i),f[2]),at:"open"}}}},e.findEnclosingTag=function(e,t,n,r){for(var i=new o(e,t.line,t.ch,n);;){var a=p(i,r);if(!a)break;var l=h(new o(e,t.line,t.ch,n),a.tag);if(l)return{open:a,close:l}}},e.scanForClosingTag=function(e,t,n,r){return h(new o(e,t.line,t.ch,r?{from:0,to:r}:null),n)}}(n(0))},function(e,t,n){!function(e){"use strict";e.defineOption("foldGutter",!1,(function(t,r,i){var o;i&&i!=e.Init&&(t.clearGutter(t.state.foldGutter.options.gutter),t.state.foldGutter=null,t.off("gutterClick",l),t.off("changes",s),t.off("viewportChange",c),t.off("fold",u),t.off("unfold",u),t.off("swapDoc",s)),r&&(t.state.foldGutter=new n((!0===(o=r)&&(o={}),null==o.gutter&&(o.gutter="CodeMirror-foldgutter"),null==o.indicatorOpen&&(o.indicatorOpen="CodeMirror-foldgutter-open"),null==o.indicatorFolded&&(o.indicatorFolded="CodeMirror-foldgutter-folded"),o)),a(t),t.on("gutterClick",l),t.on("changes",s),t.on("viewportChange",c),t.on("fold",u),t.on("unfold",u),t.on("swapDoc",s))}));var t=e.Pos;function n(e){this.options=e,this.from=this.to=0}function r(e,n){for(var r=e.findMarks(t(n,0),t(n+1,0)),i=0;i=s&&(o=i(a.indicatorOpen))}e.setGutterMarker(n,a.gutter,o),++l}))}function a(e){var t=e.getViewport(),n=e.state.foldGutter;n&&(e.operation((function(){o(e,t.from,t.to)})),n.from=t.from,n.to=t.to)}function l(e,n,i){var o=e.state.foldGutter;if(o){var a=o.options;if(i==a.gutter){var l=r(e,n);l?l.clear():e.foldCode(t(n,0),a)}}}function s(e){var t=e.state.foldGutter;if(t){var n=t.options;t.from=t.to=0,clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){a(e)}),n.foldOnChangeTimeSpan||600)}}function c(e){var t=e.state.foldGutter;if(t){var n=t.options;clearTimeout(t.changeUpdate),t.changeUpdate=setTimeout((function(){var n=e.getViewport();t.from==t.to||n.from-t.to>20||t.from-n.to>20?a(e):e.operation((function(){n.fromt.to&&(o(e,t.to,n.to),t.to=n.to)}))}),n.updateViewportTimeSpan||400)}}function u(e,t){var n=e.state.foldGutter;if(n){var r=t.line;r>=n.from&&r1)return l(e);var t=e.getCursor("start"),n=e.getCursor("end"),r=e.state.markedSelection;if(!r.length)return o(e,t,n);var s=r[0].find(),c=r[r.length-1].find();if(!s||!c||n.line-t.line<=8||i(t,c.to)>=0||i(n,s.from)<=0)return l(e);for(;i(t,s.from)>0;)r.shift().clear(),s=r[0].find();for(i(t,s.from)<0&&(s.to.line-t.line<8?(r.shift().clear(),o(e,t,s.to,0)):o(e,t,s.from,0));i(n,c.to)<0;)r.pop().clear(),c=r[r.length-1].find();i(n,c.to)>0&&(n.line-c.from.line<8?(r.pop().clear(),o(e,c.from,n)):o(e,c.to,n))}(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){a(e)}))}e.defineOption("styleSelectedText",!1,(function(r,i,o){var s=o&&o!=e.Init;i&&!s?(r.state.markedSelection=[],r.state.markedSelectionStyle="string"==typeof i?i:"CodeMirror-selectedtext",l(r),r.on("cursorActivity",t),r.on("change",n)):!i&&s&&(r.off("cursorActivity",t),r.off("change",n),a(r),r.state.markedSelection=r.state.markedSelectionStyle=null)}));var r=e.Pos,i=e.cmpPos;function o(e,t,n,o){if(0!=i(t,n))for(var a=e.state.markedSelection,l=e.state.markedSelectionStyle,s=t.line;;){var c=s==t.line?t:r(s,0),u=s+8,f=u>=n.line,d=f?n:r(u,0),h=e.markText(c,d,{className:l});if(null==o?a.push(h):a.splice(o++,0,h),f)break;s=u}}function a(e){for(var t=e.state.markedSelection,n=0;n + + + + + Test page with large sources + + + + + \ No newline at end of file diff --git a/devtools/client/inspector/computed/test/browser.toml b/devtools/client/inspector/computed/test/browser.toml index fade534e83c..77a8420ffb5 100644 --- a/devtools/client/inspector/computed/test/browser.toml +++ b/devtools/client/inspector/computed/test/browser.toml @@ -38,6 +38,9 @@ skip-if = [ "os == 'linux' && os_version == '18.04' && processor == 'x86_64' && opt && a11y_checks", # Bugs 1849028 and 1858041 to investigate intermittent a11y_checks results ] +["browser_computed_inherited-element-backed-pseudo-elements.js"] +fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and/or labeled + ["browser_computed_keybindings_01.js"] fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and/or labeled diff --git a/devtools/client/inspector/computed/test/browser_computed_inherited-element-backed-pseudo-elements.js b/devtools/client/inspector/computed/test/browser_computed_inherited-element-backed-pseudo-elements.js new file mode 100644 index 00000000000..915131452f1 --- /dev/null +++ b/devtools/client/inspector/computed/test/browser_computed_inherited-element-backed-pseudo-elements.js @@ -0,0 +1,70 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// Check that inherited element backed pseudo element declarations (e.g. ::details-content) +// are properly displayed + +const TEST_URI = ` + +
+ + Top-level summary +
+ nested summary +

in nested details

+
+
+
`; + +add_task(async function () { + await pushPref("layout.css.details-content.enabled", true); + await addTab("data:text/html;charset=utf-8," + encodeURIComponent(TEST_URI)); + const { inspector, view } = await openComputedView(); + await selectNode("p#matches", inspector); + + info("Checking the property itself"); + is( + getComputedViewPropertyView(view, "color").valueNode.textContent, + "rgb(10, 20, 30)", + "Got expected computed value for color on p#matches" + ); + + info("Checking matched selectors"); + const container = await getComputedViewMatchedRules(view, "color"); + Assert.deepEqual( + [...container.querySelectorAll("p")].map(matchEl => + [...matchEl.querySelectorAll("div")].map(el => el.textContent) + ), + [ + ["details#nested::details-content", "rgb(10, 20, 30)"], + ["details::details-content", "dodgerblue"], + ["details#nested", "cyan"], + ["details", "gold"], + ["details summary", "violet"], + [":root", "canvastext"], + ], + "Got the expected matched selectors, including ::details-content ones" + ); +}); diff --git a/devtools/client/inspector/markup/markup-context-menu.js b/devtools/client/inspector/markup/markup-context-menu.js index 0e81bcd2e6d..8fff8eb18f5 100644 --- a/devtools/client/inspector/markup/markup-context-menu.js +++ b/devtools/client/inspector/markup/markup-context-menu.js @@ -740,7 +740,7 @@ class MarkupContextMenu { const isScreenshotable = isElement && this.selection.nodeFront.isTreeDisplayed; - const menu = new Menu(); + const menu = new Menu({ id: "markup-context-menu" }); menu.append( new MenuItem({ id: "node-menu-edithtml", diff --git a/devtools/client/inspector/rules/models/rule.js b/devtools/client/inspector/rules/models/rule.js index 368b77cec30..96d27ca1f00 100644 --- a/devtools/client/inspector/rules/models/rule.js +++ b/devtools/client/inspector/rules/models/rule.js @@ -90,17 +90,6 @@ class Rule { return this.textProps; } - get inheritance() { - if (!this.inherited) { - return null; - } - - return { - inherited: this.inherited, - inheritedSource: this.inheritedSource, - }; - } - get selector() { return { getUniqueSelector: this.getUniqueSelector, @@ -125,11 +114,11 @@ class Rule { return title; } - get inheritedSource() { - if (this._inheritedSource) { - return this._inheritedSource; + get inheritedSectionLabel() { + if (this._inheritedSectionLabel) { + return this._inheritedSectionLabel; } - this._inheritedSource = ""; + this._inheritedSectionLabel = ""; if (this.inherited) { let eltText = this.inherited.displayName; if (this.inherited.id) { @@ -138,12 +127,12 @@ class Rule { if (CssLogic.ELEMENT_BACKED_PSEUDO_ELEMENTS.has(this.pseudoElement)) { eltText += this.pseudoElement; } - this._inheritedSource = STYLE_INSPECTOR_L10N.getFormatStr( + this._inheritedSectionLabel = STYLE_INSPECTOR_L10N.getFormatStr( "rule.inheritedFrom", eltText ); } - return this._inheritedSource; + return this._inheritedSectionLabel; } get keyframesName() { diff --git a/devtools/client/inspector/rules/rules.js b/devtools/client/inspector/rules/rules.js index 0a84d107cd5..65e694b0968 100644 --- a/devtools/client/inspector/rules/rules.js +++ b/devtools/client/inspector/rules/rules.js @@ -1412,7 +1412,7 @@ CssRuleView.prototype = { // Run through the current list of rules, attaching // their editors in order. Create editors if needed. let lastInherited = null; - let lastInheritedSource = ""; + let lastinheritedSectionLabel = ""; let seenNormalElement = false; let seenSearchTerm = false; const containers = new Map(); @@ -1458,8 +1458,8 @@ CssRuleView.prototype = { this.element.appendChild(div); } - const { inherited, inheritedSource } = rule; - // We need to check both `inherited` (a NodeFront) and `inheritedSource` (string), + const { inherited, inheritedSectionLabel } = rule; + // We need to check both `inherited` (a NodeFront) and `inheritedSectionLabel` (string), // as element-backed pseudo element rules (e.g. `::details-content`) can have the same // `inherited` property as a regular rule (e.g. on `
`), but the element is // to be considered as a child of the binding element. @@ -1469,7 +1469,8 @@ CssRuleView.prototype = { // Inherited by details if ( inherited && - (inherited !== lastInherited || inheritedSource !== lastInheritedSource) + (inherited !== lastInherited || + inheritedSectionLabel !== lastinheritedSectionLabel) ) { const div = this.styleDocument.createElementNS(HTML_NS, "div"); div.classList.add( @@ -1478,9 +1479,9 @@ CssRuleView.prototype = { ); div.setAttribute("role", "heading"); div.setAttribute("aria-level", "3"); - div.textContent = rule.inheritedSource; + div.textContent = rule.inheritedSectionLabel; lastInherited = inherited; - lastInheritedSource = inheritedSource; + lastinheritedSectionLabel = inheritedSectionLabel; this.element.appendChild(div); } diff --git a/devtools/client/inspector/rules/types.js b/devtools/client/inspector/rules/types.js index 2b713ba1207..4c964bf176c 100644 --- a/devtools/client/inspector/rules/types.js +++ b/devtools/client/inspector/rules/types.js @@ -132,14 +132,6 @@ exports.rule = { // An unique CSS rule id. id: PropTypes.string, - // An object containing information about the CSS rule's inheritance. - inheritance: PropTypes.shape({ - // The NodeFront of the element this rule was inherited from. - inherited: PropTypes.object, - // A header label for where the element this rule was inherited from. - inheritedSource: PropTypes.string, - }), - // Whether or not the rule does not match the current selected element. isUnmatched: PropTypes.bool, diff --git a/devtools/client/inspector/test/browser_inspector_menu-05-attribute-items.js b/devtools/client/inspector/test/browser_inspector_menu-05-attribute-items.js index 4e2122a24ac..6fc445848ed 100644 --- a/devtools/client/inspector/test/browser_inspector_menu-05-attribute-items.js +++ b/devtools/client/inspector/test/browser_inspector_menu-05-attribute-items.js @@ -7,7 +7,7 @@ http://creativecommons.org/publicdomain/zero/1.0/ */ const TEST_URL = URL_ROOT + "doc_inspector_menu.html"; add_task(async function () { - const { inspector } = await openInspectorForURL(TEST_URL); + const { inspector, toolbox } = await openInspectorForURL(TEST_URL); await selectNode("#attributes", inspector); await testAddAttribute(); @@ -18,7 +18,8 @@ add_task(async function () { async function testAddAttribute() { info("Triggering 'Add Attribute' and waiting for mutation to occur"); - const addAttribute = getMenuItem("node-menu-add-attribute"); + const addAttribute = await getMenuItem("node-menu-add-attribute"); + addAttribute.click(); EventUtils.sendString('class="u-hidden"'); @@ -36,7 +37,7 @@ add_task(async function () { info( "Testing 'Copy Attribute Value' and waiting for clipboard promise to resolve" ); - const copyAttributeValue = getMenuItem("node-menu-copy-attribute"); + const copyAttributeValue = await getMenuItem("node-menu-copy-attribute"); info( "Triggering 'Copy Attribute Value' and waiting for clipboard to copy the value" @@ -52,7 +53,7 @@ add_task(async function () { async function testCopyLongAttributeValue() { info("Testing 'Copy Attribute Value' copies very long attribute values"); - const copyAttributeValue = getMenuItem("node-menu-copy-attribute"); + const copyAttributeValue = await getMenuItem("node-menu-copy-attribute"); const longAttribute = "#01234567890123456789012345678901234567890123456789" + "12345678901234567890123456789012345678901234567890123456789012345678901" + @@ -73,7 +74,7 @@ add_task(async function () { async function testEditAttribute() { info("Testing 'Edit Attribute' menu item"); - const editAttribute = getMenuItem("node-menu-edit-attribute"); + const editAttribute = await getMenuItem("node-menu-edit-attribute"); info("Triggering 'Edit Attribute' and waiting for mutation to occur"); inspector.markup.contextMenu.nodeMenuTriggerInfo = { @@ -94,7 +95,7 @@ add_task(async function () { async function testRemoveAttribute() { info("Testing 'Remove Attribute' menu item"); - const removeAttribute = getMenuItem("node-menu-remove-attribute"); + const removeAttribute = await getMenuItem("node-menu-remove-attribute"); info("Triggering 'Remove Attribute' and waiting for mutation to occur"); inspector.markup.contextMenu.nodeMenuTriggerInfo = { @@ -111,14 +112,23 @@ add_task(async function () { ok(!hasAttribute, "attribute was successfully removed"); } - function getMenuItem(id) { + async function getMenuItem(id) { const allMenuItems = openContextMenuAndGetAllItems(inspector, { target: getContainerForSelector("#attributes", inspector).tagLine, }); const menuItem = allMenuItems.find(i => i.id === id); ok(menuItem, "Menu item '" + id + "' found"); + // Close the menu so synthesizing future keys won't select menu items. - EventUtils.synthesizeKey("KEY_Escape"); + const contextMenu = toolbox.topDoc.querySelector("#markup-context-menu"); + const popupHiddenPromise = BrowserTestUtils.waitForEvent( + contextMenu, + "popuphidden" + ); + + contextMenu.hidePopup(); + await popupHiddenPromise; + return menuItem; } }); diff --git a/devtools/client/locales/en-US/netmonitor.properties b/devtools/client/locales/en-US/netmonitor.properties index e281a2a2e81..3ff82c22520 100644 --- a/devtools/client/locales/en-US/netmonitor.properties +++ b/devtools/client/locales/en-US/netmonitor.properties @@ -270,12 +270,6 @@ networkMenu.blockedTooltip=Blocked # in the network menu specifying the time for a request to finish (in milliseconds). networkMenu.totalMS2=%S ms -# This string is used to concatenate tooltips (netmonitor.waterfall.tooltip.*) -# in the requests waterfall for total time (in milliseconds). \\u0020 represents -# a whitespace. You can replace this with a different character, e.g. an hyphen -# or a period, if a comma doesn't work for your language. -netmonitor.waterfall.tooltip.separator=,\u0020 - # LOCALIZATION NOTE (netmonitor.waterfall.tooltip.total): This is part of the tooltip # displayed in the requests waterfall for total time (in milliseconds). netmonitor.waterfall.tooltip.total=Total %S ms diff --git a/devtools/client/netmonitor/src/components/request-list/RequestListColumnFile.js b/devtools/client/netmonitor/src/components/request-list/RequestListColumnFile.js index 94960c47a97..6f62eaa7d97 100644 --- a/devtools/client/netmonitor/src/components/request-list/RequestListColumnFile.js +++ b/devtools/client/netmonitor/src/components/request-list/RequestListColumnFile.js @@ -16,6 +16,7 @@ const { connect, } = require("resource://devtools/client/shared/vendor/react-redux.js"); const { + getUrlToolTip, propertiesEqual, } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); const { @@ -58,21 +59,8 @@ class RequestListColumnFile extends Component { overriddenUrl, } = this.props; - const originalFileURL = urlDetails.url; - const decodedFileURL = urlDetails.unicodeUrl; - const ORIGINAL_FILE_URL = L10N.getFormatStr( - "netRequest.originalFileURL.tooltip", - originalFileURL - ); - const DECODED_FILE_URL = L10N.getFormatStr( - "netRequest.decodedFileURL.tooltip", - decodedFileURL - ); const requestedFile = urlDetails.baseNameWithQuery; - const fileToolTip = - originalFileURL === decodedFileURL - ? originalFileURL - : ORIGINAL_FILE_URL + "\n\n" + DECODED_FILE_URL; + const fileToolTip = getUrlToolTip(urlDetails); const isSlow = slowLimit > 0 && !!waitingTime && waitingTime > slowLimit; diff --git a/devtools/client/netmonitor/src/components/request-list/RequestListColumnPath.js b/devtools/client/netmonitor/src/components/request-list/RequestListColumnPath.js index 6fffee1bbc1..55f70dd684f 100644 --- a/devtools/client/netmonitor/src/components/request-list/RequestListColumnPath.js +++ b/devtools/client/netmonitor/src/components/request-list/RequestListColumnPath.js @@ -8,14 +8,12 @@ const { Component, } = require("resource://devtools/client/shared/vendor/react.js"); const dom = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); -const { - L10N, -} = require("resource://devtools/client/netmonitor/src/utils/l10n.js"); const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.js"); const { connect, } = require("resource://devtools/client/shared/vendor/react-redux.js"); const { + getUrlToolTip, propertiesEqual, } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); const { truncateString } = require("resource://devtools/shared/string.js"); @@ -51,22 +49,8 @@ class RequestListColumnPath extends Component { isOverridden, overriddenUrl, } = this.props; - - const originalFileURL = urlDetails.url; - const decodedFileURL = urlDetails.unicodeUrl; - const ORIGINAL_FILE_URL = L10N.getFormatStr( - "netRequest.originalFileURL.tooltip", - originalFileURL - ); - const DECODED_FILE_URL = L10N.getFormatStr( - "netRequest.decodedFileURL.tooltip", - decodedFileURL - ); const requestedPath = urlDetails.path; - const fileToolTip = - originalFileURL === decodedFileURL - ? originalFileURL - : ORIGINAL_FILE_URL + "\n\n" + DECODED_FILE_URL; + const pathToolTip = getUrlToolTip(urlDetails); // Build extra content for the title if the request is overridden. const overrideTitle = isOverridden ? ` → ${overriddenUrl}` : ""; @@ -75,7 +59,7 @@ class RequestListColumnPath extends Component { { className: "requests-list-column requests-list-path", title: - truncateString(fileToolTip, MAX_UI_STRING_LENGTH) + overrideTitle, + truncateString(pathToolTip, MAX_UI_STRING_LENGTH) + overrideTitle, }, dom.div({}, truncateString(requestedPath, MAX_UI_STRING_LENGTH)) ); diff --git a/devtools/client/netmonitor/src/components/request-list/RequestListColumnUrl.js b/devtools/client/netmonitor/src/components/request-list/RequestListColumnUrl.js index be0b09bcf2e..b8da857a4f7 100644 --- a/devtools/client/netmonitor/src/components/request-list/RequestListColumnUrl.js +++ b/devtools/client/netmonitor/src/components/request-list/RequestListColumnUrl.js @@ -14,14 +14,12 @@ const { const { td, } = require("resource://devtools/client/shared/vendor/react-dom-factories.js"); -const { - L10N, -} = require("resource://devtools/client/netmonitor/src/utils/l10n.js"); const PropTypes = require("resource://devtools/client/shared/vendor/react-prop-types.mjs"); const { getFormattedIPAndPort, } = require("resource://devtools/client/netmonitor/src/utils/format-utils.js"); const { + getUrlToolTip, propertiesEqual, } = require("resource://devtools/client/netmonitor/src/utils/request-utils.js"); const SecurityState = createFactory( @@ -71,19 +69,7 @@ class RequestListColumnUrl extends Component { // deals with returning whole url const originalURL = urlDetails.url; - const decodedFileURL = urlDetails.unicodeUrl; - const ORIGINAL_FILE_URL = L10N.getFormatStr( - "netRequest.originalFileURL.tooltip", - originalURL - ); - const DECODED_FILE_URL = L10N.getFormatStr( - "netRequest.decodedFileURL.tooltip", - decodedFileURL - ); - const urlToolTip = - originalURL === decodedFileURL - ? originalURL - : ORIGINAL_FILE_URL + "\n\n" + DECODED_FILE_URL; + const urlToolTip = getUrlToolTip(urlDetails); // Build extra content for the title if this is a remote address. const remoteAddressTitle = remoteAddress diff --git a/devtools/client/netmonitor/src/components/request-list/RequestListColumnWaterfall.js b/devtools/client/netmonitor/src/components/request-list/RequestListColumnWaterfall.js index 74a734ef489..b095e82bd16 100644 --- a/devtools/client/netmonitor/src/components/request-list/RequestListColumnWaterfall.js +++ b/devtools/client/netmonitor/src/components/request-list/RequestListColumnWaterfall.js @@ -103,7 +103,8 @@ module.exports = class RequestListColumnWaterfall extends Component { ); } - return tooltip.join(L10N.getStr("netmonitor.waterfall.tooltip.separator")); + const lf = new Intl.ListFormat(undefined, { type: "unit" }); + return lf.format(tooltip); } timingBoxes() { @@ -183,7 +184,7 @@ module.exports = class RequestListColumnWaterfall extends Component { return dom.td( { className: "requests-list-column requests-list-waterfall", - onMouseOver: this.handeMouseOver, + onMouseOver: this.handleMouseOver, }, div( { diff --git a/devtools/client/netmonitor/src/utils/request-utils.js b/devtools/client/netmonitor/src/utils/request-utils.js index 05ccabec37b..d19caa4cec0 100644 --- a/devtools/client/netmonitor/src/utils/request-utils.js +++ b/devtools/client/netmonitor/src/utils/request-utils.js @@ -20,16 +20,23 @@ ChromeUtils.defineESModuleGetters( { global: "contextual" } ); +loader.lazyRequireGetter( + this, + "L10N", + "resource://devtools/client/netmonitor/src/utils/l10n.js", + true +); + const { UPDATE_PROPS, } = require("resource://devtools/client/netmonitor/src/constants.js"); -const CONTENT_MIME_TYPE_ABBREVIATIONS = { - ecmascript: "js", - javascript: "js", - "x-javascript": "js", - "event-stream": "eventsource", -}; +const CONTENT_MIME_TYPE_ABBREVIATIONS = new Map([ + ["ecmascript", "js"], + ["javascript", "js"], + ["x-javascript", "js"], + ["event-stream", "eventsource"], +]); /** * Extracts any urlencoded form data sections (e.g. "?foo=bar&baz=42") from a @@ -179,8 +186,10 @@ function getAbbreviatedMimeType(mimeType) { if (!mimeType) { return ""; } - const abbrevType = (mimeType.split(";")[0].split("/")[1] || "").split("+")[0]; - return CONTENT_MIME_TYPE_ABBREVIATIONS[abbrevType] || abbrevType; + const abbrevType = ( + mimeType.toLowerCase().split(";")[0].split("/")[1] || "" + ).split("+")[0]; + return CONTENT_MIME_TYPE_ABBREVIATIONS.get(abbrevType) || abbrevType; } /** @@ -355,6 +364,31 @@ function getUrlDetails(url) { }; } +/** + * Helpers for retrieving the value of a URL tooltip + * + * @param {object} urlDetails - a urlDetails object + * @returns + */ +function getUrlToolTip(urlDetails) { + const url = urlDetails.url; + const decodedURL = urlDetails.unicodeUrl; + + // The `originalFileURL` below refers to "File" because it was initially created for use in the File column. + // Now it is also being used in the Path and URL columns, while retaining the original name. + const ORIGINAL_URL = L10N.getFormatStr( + "netRequest.originalFileURL.tooltip", + url + ); + const DECODED_URL = L10N.getFormatStr( + "netRequest.decodedFileURL.tooltip", + decodedURL + ); + const toolTip = + url === decodedURL ? url : ORIGINAL_URL + "\n\n" + DECODED_URL; + return toolTip; +} + /** * Parse a url's query string into its components * @@ -792,6 +826,7 @@ module.exports = { getUrlHostName, getUrlQuery, getUrlScheme, + getUrlToolTip, parseQueryString, parseFormData, updateFormDataSections, diff --git a/devtools/client/netmonitor/src/utils/sort-predicates.js b/devtools/client/netmonitor/src/utils/sort-predicates.js index d1a76b9216f..7a8a154e67f 100644 --- a/devtools/client/netmonitor/src/utils/sort-predicates.js +++ b/devtools/client/netmonitor/src/utils/sort-predicates.js @@ -254,8 +254,8 @@ function cookies(first, second) { } function type(first, second) { - const firstType = getAbbreviatedMimeType(first.mimeType).toLowerCase(); - const secondType = getAbbreviatedMimeType(second.mimeType).toLowerCase(); + const firstType = getAbbreviatedMimeType(first.mimeType); + const secondType = getAbbreviatedMimeType(second.mimeType); const result = compareValues(firstType, secondType); return result || waterfall(first, second); } diff --git a/devtools/client/netmonitor/test/browser.toml b/devtools/client/netmonitor/test/browser.toml index 83e2336404d..8e9d4a6f9d4 100644 --- a/devtools/client/netmonitor/test/browser.toml +++ b/devtools/client/netmonitor/test/browser.toml @@ -319,6 +319,8 @@ fail-if = ["a11y_checks"] # Bug 1849028 clicked element may not be focusable and ["browser_net_internal-stylesheet.js"] +["browser_net_invalid-mime-types.js"] + ["browser_net_json-b64.js"] ["browser_net_json-empty.js"] diff --git a/devtools/client/netmonitor/test/browser_net_data_uri.js b/devtools/client/netmonitor/test/browser_net_data_uri.js index 14895b2ce3a..3fbd9149d38 100644 --- a/devtools/client/netmonitor/test/browser_net_data_uri.js +++ b/devtools/client/netmonitor/test/browser_net_data_uri.js @@ -54,10 +54,9 @@ add_task(async function test_content_request_to_data_uri() { const IMAGE_URL = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"; const URL = `https://example.com/document-builder.sjs?html= -

Test page for content data uri request

- `; +

Test page for content data uri request

`; - const { monitor } = await initNetMonitor(URL, { + const { monitor, tab } = await initNetMonitor(URL, { requestCount: 1, waitForLoad: false, }); @@ -68,9 +67,18 @@ add_task(async function test_content_request_to_data_uri() { store.dispatch(Actions.batchEnable(false)); - const wait = waitForNetworkEvents(monitor, 2); + let onNetworkEvents = waitForNetworkEvents(monitor, 1); reloadBrowser({ waitForLoad: false }); - await wait; + await onNetworkEvents; + + info("Load an image in content with a data URI"); + onNetworkEvents = waitForNetworkEvents(monitor, 1); + await SpecialPowers.spawn(tab.linkedBrowser, [IMAGE_URL], imageURL => { + const img = content.document.createElement("img"); + img.src = imageURL; + content.document.body.appendChild(img); + }); + await onNetworkEvents; const firstItem = document.querySelectorAll(".request-list-item")[1]; diff --git a/devtools/client/netmonitor/test/browser_net_filter-value-preserved.js b/devtools/client/netmonitor/test/browser_net_filter-value-preserved.js index 7f1b1e1128e..bd085ee4869 100644 --- a/devtools/client/netmonitor/test/browser_net_filter-value-preserved.js +++ b/devtools/client/netmonitor/test/browser_net_filter-value-preserved.js @@ -11,15 +11,29 @@ add_task(async function () { const { monitor } = await initNetMonitor(FILTERING_URL, { requestCount: 1 }); const { document, store, windowRequire } = monitor.panelWin; const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + const { getDisplayedRequests } = windowRequire( + "devtools/client/netmonitor/src/selectors/index" + ); store.dispatch(Actions.batchEnable(false)); info("Starting test... "); + // Perform 2 data URI requests to check the filter is working. + const onNetworkEvents = waitForNetworkEvents(monitor, 2); + await performRequestsInContent([ + { url: "data:text/plain,bonjour" }, + { url: "data:text/plain,hello" }, + ]); + await onNetworkEvents; + const toolbars = document.querySelector("#netmonitor-toolbar-container"); document.querySelector(".devtools-filterinput").focus(); - EventUtils.sendString("hello"); + typeInNetmonitor("hello", monitor); + + info("Wait until text filter is applied"); + await waitFor(() => getDisplayedRequests(store.getState()).length == 1); await monitor.toolbox.switchHost("right"); await waitFor( diff --git a/devtools/client/netmonitor/test/browser_net_invalid-mime-types.js b/devtools/client/netmonitor/test/browser_net_invalid-mime-types.js new file mode 100644 index 00000000000..97ebd95669e --- /dev/null +++ b/devtools/client/netmonitor/test/browser_net_invalid-mime-types.js @@ -0,0 +1,88 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +/** + * Tests that a page with an invalid mimetype does not crash devtools. + */ +add_task(async function testInvalidMimeTypeDoesNotCrash() { + const URL = "data:text/__proto__,hello"; + const { monitor } = await initNetMonitor(URL, { + requestCount: 1, + waitForLoad: false, + }); + + info("Starting test... "); + + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + + store.dispatch(Actions.batchEnable(false)); + + const onNetworkEvents = waitForNetworkEvents(monitor, 1); + reloadBrowser({ waitForLoad: false }); + await onNetworkEvents; + + const firstItem = document.querySelector(".request-list-item"); + + is( + firstItem.querySelector(".requests-list-url").innerText, + URL, + "The url in the displayed request is correct" + ); + is( + firstItem.querySelector(".requests-list-scheme").innerText, + "data", + "The scheme in the displayed request is correct" + ); + is( + firstItem.querySelector(".requests-list-type").innerText, + "__proto__", + "The type in the displayed request is correct" + ); + + await teardown(monitor); +}); + +/** + * Tests that a page with an uppercase mimetype shows the correct type. + */ +add_task(async function testUpperCaseMimeType() { + const URL = "data:TEXT/JAVASCRIPT,hello"; + const { monitor } = await initNetMonitor(URL, { + requestCount: 1, + waitForLoad: false, + }); + + info("Starting test... "); + + const { document, store, windowRequire } = monitor.panelWin; + const Actions = windowRequire("devtools/client/netmonitor/src/actions/index"); + + store.dispatch(Actions.batchEnable(false)); + + const onNetworkEvents = waitForNetworkEvents(monitor, 1); + reloadBrowser({ waitForLoad: false }); + await onNetworkEvents; + + const firstItem = document.querySelector(".request-list-item"); + + is( + firstItem.querySelector(".requests-list-url").innerText, + URL, + "The url in the displayed request is correct" + ); + is( + firstItem.querySelector(".requests-list-scheme").innerText, + "data", + "The scheme in the displayed request is correct" + ); + is( + firstItem.querySelector(".requests-list-type").innerText, + "js", + "The type in the displayed request is correct" + ); + + await teardown(monitor); +}); diff --git a/devtools/client/shared/sourceeditor/editor.js b/devtools/client/shared/sourceeditor/editor.js index 7f5bba24120..b5594804b0c 100644 --- a/devtools/client/shared/sourceeditor/editor.js +++ b/devtools/client/shared/sourceeditor/editor.js @@ -1170,9 +1170,6 @@ class Editor extends EventEmitter { * @property {Function} marker.createLineElementNode * This should return the DOM element which is used for the marker. The line number is passed as a parameter. * This is optional. - * @property {Function} marker.getMarkerEqualityValue - * Custom equality function. The line and column will be passed as arguments when this is called. - * This should return a value used for an equality check. This is optional. */ setLineContentMarker(marker) { const cm = editors.get(this); @@ -1219,37 +1216,31 @@ class Editor extends EventEmitter { line, column, isFirstNonSpaceColumn, + positionData, markerId, createElementNode, - getMarkerEqualityValue, + customEq, }) { super(); this.line = line; this.column = column; this.isFirstNonSpaceColumn = isFirstNonSpaceColumn; + this.positionData = positionData; this.markerId = markerId; - this.equalityValue = getMarkerEqualityValue - ? getMarkerEqualityValue(line, column) - : {}; + this.customEq = customEq; this.toDOM = () => - createElementNode(line, column, isFirstNonSpaceColumn); + createElementNode(line, column, isFirstNonSpaceColumn, positionData); } eq(widget) { - return ( + let eq = this.line == widget.line && this.column == widget.column && - this.markerId == widget.markerId && - this.#isCustomValueEqual(widget) - ); - } - - #isCustomValueEqual(widget) { - return Object.keys(this.equalityValue).every( - key => - widget.equalityValue.hasOwnProperty(key) && - widget.equalityValue[key] === this.equalityValue[key] - ); + this.markerId == widget.markerId; + if (this.positionData && this.customEq) { + eq = eq && this.customEq(this.positionData, widget.positionData); + } + return eq; } } @@ -1314,9 +1305,10 @@ class Editor extends EventEmitter { line: position.line, column: position.column, isFirstNonSpaceColumn, + positionData: position.positionData, markerId: marker.id, createElementNode: marker.createPositionElementNode, - getMarkerEqualityValue: marker.getMarkerEqualityValue, + customEq: marker.customEq, }), // Make sure the widget is rendered after the cursor // see https://codemirror.net/docs/ref/#view.Decoration^widget^spec.side for details. @@ -1482,12 +1474,15 @@ class Editor extends EventEmitter { } /** - * This adds a marker used to decorate token / content at - * a specific position (defined by a line and column). + * This adds a marker used to decorate token / content at a specific position . * @param {Object} marker * @param {String} marker.id - * @param {Array} marker.positions - * @param {Function} marker.createPositionElementNode + * @param {Array} marker.positions - This includes the line / column and any optional positionData which defines each position. + * @param {Function} marker.createPositionElementNode - This describes how to render the marker. + * The position data (i.e line, column and positionData) are passed as arguments. + * @param {Function} marker.customEq - A custom function to determine the equality of the marker. This allows the user define special conditions + * for when position details have changed and an update of the marker should happen. + * The positionData defined for the current and the previous instance of the marker are passed as arguments. */ setPositionContentMarker(marker) { const cm = editors.get(this); @@ -1777,63 +1772,57 @@ class Editor extends EventEmitter { /** * Get the start and end locations of the current viewport + * + * @param {Number} offsetHorizontalCharacters - Offset of characters offscreen + * @param {Number} offsetVerticalLines - Offset of lines offscreen * @returns {Object} - The location information for the current viewport */ - getLocationsInViewport() { + getLocationsInViewport( + offsetHorizontalCharacters = 0, + offsetVerticalLines = 0 + ) { if (this.isDestroyed()) { return null; } const cm = editors.get(this); + let startLine, endLine, scrollLeft, charWidth, rightPosition; if (this.config.cm6) { // Report no viewport until we show an actual source (and not a loading/error message) if (!this.#currentDocumentId) { return null; } const { from, to } = cm.viewport; - const lineFrom = cm.state.doc.lineAt(from); - const lineTo = cm.state.doc.lineAt(to); - // This returns boundary of the full viewport regardless of the horizontal - // scroll position. - return { - start: { line: lineFrom.number, column: 0 }, - end: { line: lineTo.number, column: lineTo.to - lineTo.from }, - }; - } - // Offset represents an allowance of characters or lines offscreen to improve - // perceived performance of column breakpoint rendering - const offsetHorizontalCharacters = 100; - const offsetVerticalLines = 20; - // Get scroll position - if (!cm) { - return { - start: { line: 0, column: 0 }, - end: { line: 0, column: 0 }, - }; - } - const charWidth = cm.defaultCharWidth(); - const scrollArea = cm.getScrollInfo(); - const { scrollLeft } = cm.doc; - const rect = cm.getWrapperElement().getBoundingClientRect(); - const topVisibleLine = - cm.lineAtHeight(rect.top, "window") - offsetVerticalLines; - const bottomVisibleLine = - cm.lineAtHeight(rect.bottom, "window") + offsetVerticalLines; + startLine = cm.state.doc.lineAt(from).number - offsetVerticalLines; + endLine = cm.state.doc.lineAt(to).number + offsetVerticalLines; + scrollLeft = cm.scrollDOM.scrollLeft; + charWidth = cm.defaultCharacterWidth; + rightPosition = scrollLeft + cm.dom.getBoundingClientRect().width; + } else { + if (!cm) { + return null; + } - const leftColumn = Math.floor( - scrollLeft > 0 ? scrollLeft / charWidth - offsetHorizontalCharacters : 0 - ); - const rightPosition = scrollLeft + (scrollArea.clientWidth - 30); - const rightCharacter = - Math.floor(rightPosition / charWidth) + offsetHorizontalCharacters; + const scrollArea = cm.getScrollInfo(); + const rect = cm.getWrapperElement().getBoundingClientRect(); + startLine = cm.lineAtHeight(rect.top, "window") - offsetVerticalLines; + endLine = cm.lineAtHeight(rect.bottom, "window") + offsetVerticalLines; + scrollLeft = cm.doc.scrollLeft; + charWidth = cm.defaultCharWidth(); + rightPosition = scrollLeft + (scrollArea.clientWidth - 30); + } return { start: { - line: topVisibleLine || 0, - column: leftColumn || 0, + line: startLine, + column: + scrollLeft > 0 + ? Math.floor(scrollLeft / charWidth) - offsetHorizontalCharacters + : 0, }, end: { - line: bottomVisibleLine || 0, - column: rightCharacter, + line: endLine, + column: + Math.floor(rightPosition / charWidth) + offsetHorizontalCharacters, }, }; } diff --git a/devtools/client/shared/test/browser_outputparser.js b/devtools/client/shared/test/browser_outputparser.js index 98f21164e2b..68571dc180b 100644 --- a/devtools/client/shared/test/browser_outputparser.js +++ b/devtools/client/shared/test/browser_outputparser.js @@ -4,18 +4,20 @@ "use strict"; add_task(async function () { - await pushPref("layout.css.backdrop-filter.enabled", true); + await SpecialPowers.pushPrefEnv({ + set: [ + ["security.allow_unsafe_parent_loads", true], + ["layout.css.backdrop-filter.enabled", true], + ["layout.css.relative-color-syntax.enabled", true], + ["dom.security.html_serialization_escape_lt_gt", true], + ], + }); await addTab("about:blank"); await performTest(); gBrowser.removeCurrentTab(); }); async function performTest() { - await SpecialPowers.pushPrefEnv({ - set: [["security.allow_unsafe_parent_loads", true]], - }); - await pushPref("layout.css.relative-color-syntax.enabled", true); - const OutputParser = require("resource://devtools/client/shared/output-parser.js"); const { host, doc } = await createHost( @@ -889,7 +891,7 @@ function testParseVariable(doc, parser) { '--registered)' + "" + diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_console_logging_workers_api.js b/devtools/client/webconsole/test/browser/browser_webconsole_console_logging_workers_api.js index b172ca60667..06b3de994f9 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_console_logging_workers_api.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_console_logging_workers_api.js @@ -6,7 +6,7 @@ "use strict"; const TEST_URI = - "http://example.com/browser/devtools/client/webconsole/" + + "https://example.com/browser/devtools/client/webconsole/" + "test/browser/test-console-workers.html"; add_task(async function () { @@ -15,6 +15,7 @@ add_task(async function () { "dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled", true ); + await pushPref("devtools.toolbox.footer.height", 500); info("Run the test with worker events dispatched to main thread"); await pushPref("dom.worker.console.dispatch_events_to_main_thread", true); @@ -87,10 +88,6 @@ async function testWorkerMessage(directConnectionToWorkerThread = false) { ); info("Check that Symbol are properly logged"); - await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => { - content.wrappedJSObject.logFromWorker("live-message"); - }); - const symbolMessage = await waitFor(() => findConsoleAPIMessage(hud, 'Symbol("logged-symbol-from-worker")') ); diff --git a/devtools/client/webconsole/test/browser/browser_webconsole_location_debugger_link.js b/devtools/client/webconsole/test/browser/browser_webconsole_location_debugger_link.js index 91c3738d5b1..3ad3172e1b6 100644 --- a/devtools/client/webconsole/test/browser/browser_webconsole_location_debugger_link.js +++ b/devtools/client/webconsole/test/browser/browser_webconsole_location_debugger_link.js @@ -48,4 +48,20 @@ add_task(async function () { text: "document.bar", typeSelector: ".error", }); + + info("Check location of evaluation error"); + await toolbox.selectTool("webconsole"); + await execute( + hud, + `const x = {}; + x.foo.bar;` + ); + + await testOpenInDebugger(hud, { + text: "x.foo is undefined", + typeSelector: ".error", + // "debugger eval code" isn't an actual URL and is not stored as such in the Debugger + // state, so don't check it. + expectUrl: false, + }); }); diff --git a/devtools/client/webconsole/test/browser/test-console-workers.html b/devtools/client/webconsole/test/browser/test-console-workers.html index 952859cd8e0..b7a61685d9d 100644 --- a/devtools/client/webconsole/test/browser/test-console-workers.html +++ b/devtools/client/webconsole/test/browser/test-console-workers.html @@ -10,35 +10,11 @@ "use strict"; /* exported logFromWorker */ + const worker = new Worker("./test-worker.js"); - const worker = new Worker(`data:application/javascript, - console.log("initial-message-from-worker", {foo: "bar"}, globalThis); - - onmessage = function (e) { - console.log("log-from-worker", e.data.msg, globalThis); - console.log(Symbol("logged-symbol-from-worker")); - console.log(["array-item", 42, { key: "value" }]); - console.log("sab-from-worker", e.data.sab); - - /* Check if page functions can be called by console previewers */ - const date = new Date(2024, 0, 1); - date.getTime = () => { - return 42; - }; - Date.prototype.getTime = date.getTime; - console.log("date-from-worker", date); - - const regexp = /foo/m; - regexp.toString = () => { - return "24"; - }; - console.log("regexp-from-worker", regexp, /not-overloaded/g); - }; - `); - - function logFromWorker(msg) { + function logFromWorker(message) { const sab = new SharedArrayBuffer(1024); - worker.postMessage({type: "log", msg, sab}); + worker.postMessage({type: "log-objects", message, sab}); } diff --git a/devtools/client/webconsole/test/browser/test-worker.js b/devtools/client/webconsole/test/browser/test-worker.js index 76e79342300..64503a59f5c 100644 --- a/devtools/client/webconsole/test/browser/test-worker.js +++ b/devtools/client/webconsole/test/browser/test-worker.js @@ -1,13 +1,38 @@ "use strict"; +console.log("initial-message-from-worker", { foo: "bar" }, globalThis); + self.addEventListener("message", function onMessage(event) { const { type, message } = event.data; + // Override Date.prototype.getTime and RegExp.toString to make sure those are not + // called when logging to the console (see Bug 1892638) + const date = new Date(2024, 0, 1); + date.getTime = () => { + return 42; + }; + // eslint-disable-next-line no-extend-native + Date.prototype.getTime = date.getTime; + const regexp = /foo/m; + regexp.toString = () => { + return "24"; + }; + switch (type) { case "log": console.log(message); break; case "error": throw new Error(message); + case "log-objects": + console.log("log-from-worker", message, globalThis); + console.log(Symbol("logged-symbol-from-worker")); + console.log(["array-item", 42, { key: "value" }]); + console.log("sab-from-worker", event.data.sab); + + /* Check if page functions can be called by console previewers */ + console.log("date-from-worker", date); + console.log("regexp-from-worker", regexp, /not-overloaded/g); + break; } }); diff --git a/devtools/server/actors/inspector/css-logic.js b/devtools/server/actors/inspector/css-logic.js index 11e2227948e..591d2476ef6 100644 --- a/devtools/server/actors/inspector/css-logic.js +++ b/devtools/server/actors/inspector/css-logic.js @@ -36,6 +36,7 @@ const { isAuthorStylesheet, isUserStylesheet, shortSource, + ELEMENT_BACKED_PSEUDO_ELEMENTS, FILTER, STATUS, } = require("resource://devtools/shared/inspector/css-logic.js"); @@ -483,6 +484,12 @@ class CssLogic { if (domRule.selectorMatchesElement(idx, element)) { return true; } + + for (const pseudoElement of ELEMENT_BACKED_PSEUDO_ELEMENTS) { + if (domRule.selectorMatchesElement(idx, element, pseudoElement)) { + return true; + } + } } while ( // Loop on flattenedTreeParentNode instead of parentNode to reach the // shadow host from the shadow dom. diff --git a/devtools/server/actors/object.js b/devtools/server/actors/object.js index 925618c7ae8..0cf14d017be 100644 --- a/devtools/server/actors/object.js +++ b/devtools/server/actors/object.js @@ -100,11 +100,17 @@ class ObjectActor extends Actor { * the caller: * - {Number} customFormatterObjectTagDepth: See `processObjectTag` * - {Debugger.Object} customFormatterConfigDbgObj + * - {bool} allowSideEffect: allow side effectful operations while + * constructing a preview */ constructor( threadActor, obj, - { customFormatterObjectTagDepth, customFormatterConfigDbgObj } + { + customFormatterObjectTagDepth, + customFormatterConfigDbgObj, + allowSideEffect = true, + } ) { super(threadActor.conn, objectSpec); @@ -118,6 +124,7 @@ class ObjectActor extends Actor { this.threadActor = threadActor; this.rawObj = obj.unsafeDereference(); this.safeRawObj = this.#getSafeRawObject(); + this.allowSideEffect = allowSideEffect; // Cache obj.class as it can be costly when queried from previewers if this is in a hot path // (e.g. logging objects within a for loops). diff --git a/devtools/server/actors/object/previewers.js b/devtools/server/actors/object/previewers.js index 3fd4ec0122e..015597be5f8 100644 --- a/devtools/server/actors/object/previewers.js +++ b/devtools/server/actors/object/previewers.js @@ -1032,12 +1032,15 @@ previewers.Object = [ return false; } - const { obj } = objectActor; + const { obj, allowSideEffect = false } = objectActor; - // The name and/or message could be getters, and even if it's unsafe, we do want - // to show it to the user (See Bug 1710694). - const name = DevToolsUtils.getProperty(obj, "name", true); - const msg = DevToolsUtils.getProperty(obj, "message", true); + // The name and/or message could be getters, and even if it's unsafe, + // we do want to show it to the user, unless the error is muted + // (See Bug 1710694). + const invokeUnsafeGetters = allowSideEffect && !obj.isMutedError; + + const name = DevToolsUtils.getProperty(obj, "name", invokeUnsafeGetters); + const msg = DevToolsUtils.getProperty(obj, "message", invokeUnsafeGetters); const stack = DevToolsUtils.getProperty(obj, "stack"); const fileName = DevToolsUtils.getProperty(obj, "fileName"); const lineNumber = DevToolsUtils.getProperty(obj, "lineNumber"); diff --git a/devtools/server/actors/resources/network-events-content.js b/devtools/server/actors/resources/network-events-content.js index 34057637f0f..7e480f04f01 100644 --- a/devtools/server/actors/resources/network-events-content.js +++ b/devtools/server/actors/resources/network-events-content.js @@ -22,6 +22,14 @@ ChromeUtils.defineESModuleGetters( { global: "contextual" } ); +// Internal resource types used to create the appropriate network event based +// on where the channel / resource is coming from. +const RESOURCE_TYPES = { + BLOCKED: "blocked-resource", + CACHED: "cached-resource", + DATA_CHANNEL: "data-channel-resource", +}; + /** * Handles network events from the content process * This currently only handles events for requests (js/css) blocked by CSP. @@ -48,10 +56,6 @@ class NetworkEventContentWatcher { this.onAvailable = onAvailable; this.onUpdated = onUpdated; - this.httpFailedOpeningRequest = this.httpFailedOpeningRequest.bind(this); - this.httpOnResourceCacheResponse = - this.httpOnResourceCacheResponse.bind(this); - Services.obs.addObserver( this.httpFailedOpeningRequest, "http-on-failed-opening-request" @@ -61,6 +65,8 @@ class NetworkEventContentWatcher { this.httpOnResourceCacheResponse, "http-on-resource-cache-response" ); + + Services.obs.addObserver(this.onDataChannelOpened, "data-channel-opened"); } /** * Allows clearing of network events @@ -69,7 +75,7 @@ class NetworkEventContentWatcher { this.networkEvents.clear(); } - httpFailedOpeningRequest(subject) { + httpFailedOpeningRequest = subject => { const channel = subject.QueryInterface(Ci.nsIHttpChannel); // Ignore preload requests to avoid duplicity request entries in @@ -91,10 +97,11 @@ class NetworkEventContentWatcher { networkEventOptions: { blockedReason: channel.loadInfo.requestBlockingReason, }, + type: RESOURCE_TYPES.BLOCKED, }); - } + }; - httpOnResourceCacheResponse(subject, topic) { + httpOnResourceCacheResponse = (subject, topic) => { if ( topic != "http-on-resource-cache-response" || !(subject instanceof Ci.nsIHttpChannel) @@ -133,11 +140,45 @@ class NetworkEventContentWatcher { this.onNetworkEventAvailable(channel, { fromCache: true, networkEventOptions: {}, + type: RESOURCE_TYPES.CACHED, }); - } + }; - onNetworkEventAvailable(channel, { fromCache, networkEventOptions }) { - const actor = new NetworkEventActor( + onDataChannelOpened = (subject, topic) => { + if ( + topic != "data-channel-opened" || + !(subject instanceof Ci.nsIDataChannel) + ) { + return; + } + + const channel = subject.QueryInterface(Ci.nsIDataChannel); + channel.QueryInterface(Ci.nsIIdentChannel); + channel.QueryInterface(Ci.nsIChannel); + + if (channel.isDocument) { + // Navigation data channels are available in the parent process and will + // be monitored there. + return; + } + + if ( + !lazy.NetworkUtils.matchRequest(channel, { + targetActor: this.targetActor, + }) + ) { + return; + } + + this.onNetworkEventAvailable(channel, { + fromCache: false, + networkEventOptions: {}, + type: RESOURCE_TYPES.DATA_CHANNEL, + }); + }; + + onNetworkEventAvailable(channel, { fromCache, networkEventOptions, type }) { + const networkEventActor = new NetworkEventActor( this.targetActor.conn, this.targetActor.sessionContext, { @@ -147,9 +188,9 @@ class NetworkEventContentWatcher { networkEventOptions, channel ); - this.targetActor.manage(actor); + this.targetActor.manage(networkEventActor); - const resource = actor.asResource(); + const resource = networkEventActor.asResource(); const networkEvent = { browsingContextID: resource.browsingContextID, @@ -170,19 +211,18 @@ class NetworkEventContentWatcher { this.onAvailable([resource]); - actor.addCacheDetails({ fromCache }); - const isBlocked = !!resource.blockedReason; - if (isBlocked) { + networkEventActor.addCacheDetails({ fromCache }); + if (type == RESOURCE_TYPES.BLOCKED) { this._emitUpdate(networkEvent); - } else { - actor.addResponseStart({ channel, fromCache: true }); - actor.addEventTimings( + } else if (type == RESOURCE_TYPES.CACHED) { + networkEventActor.addResponseStart({ channel, fromCache: true }); + networkEventActor.addEventTimings( 0 /* totalTime */, {} /* timings */, {} /* offsets */ ); - actor.addServerTimings({}); - actor.addResponseContent( + networkEventActor.addServerTimings({}); + networkEventActor.addResponseContent( { mimeType: channel.contentType, size: channel.contentLength, @@ -191,6 +231,8 @@ class NetworkEventContentWatcher { }, {} ); + } else if (type == RESOURCE_TYPES.DATA_CHANNEL) { + lazy.NetworkUtils.handleDataChannel(channel, networkEventActor); } } @@ -280,6 +322,11 @@ class NetworkEventContentWatcher { this.httpOnResourceCacheResponse, "http-on-resource-cache-response" ); + + Services.obs.removeObserver( + this.onDataChannelOpened, + "data-channel-opened" + ); } } diff --git a/devtools/server/actors/webconsole.js b/devtools/server/actors/webconsole.js index 6dd8def782d..4e6e6ed0f81 100644 --- a/devtools/server/actors/webconsole.js +++ b/devtools/server/actors/webconsole.js @@ -343,13 +343,17 @@ class WebConsoleActor extends Actor { * Create a grip for the given value. * * @param mixed value + * @param object objectActorAttributes + * See createValueGrip in devtools/server/actors/object/utils.js * @return object */ - createValueGrip(value) { + createValueGrip(value, objectActorAttributes = {}) { return createValueGrip( this.targetActor.threadActor, value, - this.targetActor.objectsPool + this.targetActor.objectsPool, + 0, + objectActorAttributes ); } @@ -948,26 +952,29 @@ class WebConsoleActor extends Actor { result = evalResult.yield; } else if ("throw" in evalResult) { const error = evalResult.throw; - errorGrip = this.createValueGrip(error); + const allowSideEffect = !eager; + errorGrip = this.createValueGrip(error, { allowSideEffect }); exceptionStack = this.prepareStackForRemote(evalResult.stack); if (exceptionStack) { - // Set the frame based on the topmost stack frame for the exception. - const { - filename: source, - sourceId, - lineNumber: line, - columnNumber: column, - } = exceptionStack[0]; - frame = { source, sourceId, line, column }; - exceptionStack = WebConsoleUtils.removeFramesAboveDebuggerEval(exceptionStack); + + // Set the frame based on the topmost stack frame for the exception. + if (exceptionStack && exceptionStack.length) { + const { + filename: source, + sourceId, + lineNumber: line, + columnNumber: column, + } = exceptionStack[0]; + frame = { source, sourceId, line, column }; + } } errorMessage = String(error); - if (typeof error === "object" && error !== null) { + if (allowSideEffect && typeof error === "object" && error !== null) { try { errorMessage = DevToolsUtils.callPropertyOnObject( error, @@ -1008,7 +1015,11 @@ class WebConsoleActor extends Actor { const line = error.errorLineNumber; const column = error.errorColumnNumber; - if (typeof line === "number" && typeof column === "number") { + if ( + !frame && + typeof line === "number" && + typeof column === "number" + ) { // Set frame only if we have line/column numbers. frame = { source: "debugger eval code", diff --git a/devtools/shared/inspector/css-logic.js b/devtools/shared/inspector/css-logic.js index f72b89463ee..91c8df6c360 100644 --- a/devtools/shared/inspector/css-logic.js +++ b/devtools/shared/inspector/css-logic.js @@ -840,6 +840,21 @@ function isCssVariable(input) { } exports.isCssVariable = isCssVariable; +/** + * This is a list of all the element backed pseudo elements. + * + * From https://drafts.csswg.org/css-pseudo-4/#element-backed : + * > The element-backed pseudo-elements, interact with most CSS and other platform features + * > as if they were real elements (and, in fact, often are real elements that are + * > not otherwise selectable). + * + * Those pseudo elements are not displayed in the markup view, but declarations in rules + * targetting them can then be inherited by their "children", and so we need to retrieve + * those rules to surface them in the Inspector (e.g. in "Inherited" sections in the Rules + * view, in the matched selectors section in the Computed panel, …). + * + * Any new element-backed pseudo elements should be added into this Set. + */ exports.ELEMENT_BACKED_PSEUDO_ELEMENTS = new Set([ "::details-content", "::file-selector-button", diff --git a/devtools/shared/network-observer/NetworkObserver.sys.mjs b/devtools/shared/network-observer/NetworkObserver.sys.mjs index 493cfee59cc..dbcbf3d030a 100644 --- a/devtools/shared/network-observer/NetworkObserver.sys.mjs +++ b/devtools/shared/network-observer/NetworkObserver.sys.mjs @@ -33,6 +33,8 @@ ChromeUtils.defineESModuleGetters( "resource://devtools/shared/network-observer/NetworkOverride.sys.mjs", NetworkResponseListener: "resource://devtools/shared/network-observer/NetworkResponseListener.sys.mjs", + NetworkTimings: + "resource://devtools/shared/network-observer/NetworkTimings.sys.mjs", NetworkThrottleManager: "resource://devtools/shared/network-observer/NetworkThrottleManager.sys.mjs", NetworkUtils: @@ -381,7 +383,8 @@ export class NetworkObserver { if (httpActivity.owner) { // Try extracting server timings. Note that they will be sent to the client // in the `_onTransactionClose` method together with network event timings. - const serverTimings = NetworkTimings.extractServerTimings(httpActivity); + const serverTimings = + lazy.NetworkTimings.extractServerTimings(httpActivity); httpActivity.owner.addServerTimings(serverTimings); // If the owner isn't set we need to create the network event and send @@ -534,10 +537,11 @@ export class NetworkObserver { // There also is never any timing events, so we can fire this // event with zeroed out values. - const timings = NetworkTimings.extractHarTimings(httpActivity); - const serverTimings = NetworkTimings.extractServerTimings(httpActivity); + const timings = lazy.NetworkTimings.extractHarTimings(httpActivity); + const serverTimings = + lazy.NetworkTimings.extractServerTimings(httpActivity); const serviceWorkerTimings = - NetworkTimings.extractServiceWorkerTimings(httpActivity); + lazy.NetworkTimings.extractServiceWorkerTimings(httpActivity); httpActivity.owner.addServerTimings(serverTimings); httpActivity.owner.addServiceWorkerTimings(serviceWorkerTimings); @@ -602,65 +606,8 @@ export class NetworkObserver { logPlatformEvent(topic, channel); - const networkEvent = this.#onNetworkEvent({}, channel, true); - - networkEvent.addResponseStart({ - channel, - fromCache: false, - // According to the fetch spec for data URLs we can just hardcode - // "Content-Type" header. - rawHeaders: "content-type: " + channel.contentType, - }); - - // For data URLs we can not set up a stream listener as for http, - // so we have to create a response manually and complete it. - const response = { - // TODO: Bug 1903807. Re-evaluate if it's correct to just return - // zero for `bodySize` and `decodedBodySize`. - bodySize: 0, - decodedBodySize: 0, - contentCharset: channel.contentCharset, - contentLength: channel.contentLength, - contentType: channel.contentType, - mimeType: lazy.NetworkHelper.addCharsetToMimeType( - channel.contentType, - channel.contentCharset - ), - transferredSize: 0, - }; - - // For data URIs all timings can be set to zero. - const result = NetworkTimings.getEmptyHARTimings(); - networkEvent.addEventTimings( - result.total, - result.timings, - result.offsets - ); - - const url = channel.URI.spec; - response.text = url.substring(url.indexOf(",") + 1); - if ( - !response.mimeType || - !lazy.NetworkHelper.isTextMimeType(response.mimeType) - ) { - response.encoding = "base64"; - try { - response.text = btoa(response.text); - } catch (err) { - // Ignore. - } - } - - // Note: `size`` is only used by DevTools, WebDriverBiDi relies on - // `bodySize` and `decodedBodySize`. Waiting on Bug 1903807 to decide - // if those fields should have non-0 values as well. - response.size = response.text.length; - - // Security information is not relevant for data channel, but it should - // not be considered as insecure either. Set empty string as security - // state. - networkEvent.addSecurityInfo({ state: "" }); - networkEvent.addResponseContent(response, {}); + const networkEventActor = this.#onNetworkEvent({}, channel, true); + lazy.NetworkUtils.handleDataChannel(channel, networkEventActor); } ); @@ -714,7 +661,7 @@ export class NetworkObserver { }; // For file URIs all timings can be set to zero. - const result = NetworkTimings.getEmptyHARTimings(); + const result = lazy.NetworkTimings.getEmptyHARTimings(); owner.addEventTimings(result.total, result.timings, result.offsets); const fstream = Cc[ @@ -1250,8 +1197,9 @@ export class NetworkObserver { */ #onTransactionClose(httpActivity) { if (httpActivity.owner) { - const result = NetworkTimings.extractHarTimings(httpActivity); - const serverTimings = NetworkTimings.extractServerTimings(httpActivity); + const result = lazy.NetworkTimings.extractHarTimings(httpActivity); + const serverTimings = + lazy.NetworkTimings.extractServerTimings(httpActivity); httpActivity.owner.addServerTimings(serverTimings); httpActivity.owner.addEventTimings( @@ -1347,400 +1295,3 @@ export class NetworkObserver { this.#isDestroyed = true; } } - -/** - * Helper singleton to compute network timings for a given httpActivity object. - */ -export const NetworkTimings = new (class { - /** - * Convert the httpActivity timings in HAR compatible timings. The HTTP - * activity object holds the raw timing information in |timings| - these are - * timings stored for each activity notification. The HAR timing information - * is constructed based on these lower level data. - * - * @param {Object} httpActivity - * The HTTP activity object we are working with. - * @return {Object} - * This object holds three properties: - * - {Object} offsets: the timings computed as offsets from the initial - * request start time. - * - {Object} timings: the HAR timings object - * - {number} total: the total time for all of the request and response - */ - extractHarTimings(httpActivity) { - if (httpActivity.fromCache) { - // If it came from the browser cache, we have no timing - // information and these should all be 0 - return this.getEmptyHARTimings(); - } - - const timings = httpActivity.timings; - const harTimings = {}; - // If the TCP Fast Open option or tls1.3 0RTT is used tls and data can - // be dispatched in SYN packet and not after tcp socket is connected. - // To demostrate this properly we will calculated TLS and send start time - // relative to CONNECTING_TO. - // Similary if 0RTT is used, data can be sent as soon as a TLS handshake - // starts. - - harTimings.blocked = this.#getBlockedTiming(timings); - // DNS timing information is available only in when the DNS record is not - // cached. - harTimings.dns = this.#getDnsTiming(timings); - harTimings.connect = this.#getConnectTiming(timings); - harTimings.ssl = this.#getSslTiming(timings); - - let { secureConnectionStartTime, secureConnectionStartTimeRelative } = - this.#getSecureConnectionStartTimeInfo(timings); - - // sometimes the connection information events are attached to a speculative - // channel instead of this one, but necko might glue them back together in the - // nsITimedChannel interface used by Resource and Navigation Timing - const timedChannel = httpActivity.channel.QueryInterface( - Ci.nsITimedChannel - ); - - const { - tcpConnectEndTimeTc, - connectStartTimeTc, - connectEndTimeTc, - secureConnectionStartTimeTc, - domainLookupEndTimeTc, - domainLookupStartTimeTc, - } = this.#getDataFromTimedChannel(timedChannel); - - if ( - harTimings.connect <= 0 && - timedChannel && - tcpConnectEndTimeTc != 0 && - connectStartTimeTc != 0 - ) { - harTimings.connect = tcpConnectEndTimeTc - connectStartTimeTc; - if (secureConnectionStartTimeTc != 0) { - harTimings.ssl = connectEndTimeTc - secureConnectionStartTimeTc; - secureConnectionStartTime = - secureConnectionStartTimeTc - connectStartTimeTc; - secureConnectionStartTimeRelative = true; - } else { - harTimings.ssl = -1; - } - } else if ( - timedChannel && - timings.STATUS_TLS_STARTING && - secureConnectionStartTimeTc != 0 - ) { - // It can happen that TCP Fast Open actually have not sent any data and - // timings.STATUS_TLS_STARTING.first value will be corrected in - // timedChannel.secureConnectionStartTime - if (secureConnectionStartTimeTc > timings.STATUS_TLS_STARTING.first) { - // TCP Fast Open actually did not sent any data. - harTimings.ssl = connectEndTimeTc - secureConnectionStartTimeTc; - secureConnectionStartTimeRelative = false; - } - } - - if ( - harTimings.dns <= 0 && - timedChannel && - domainLookupEndTimeTc != 0 && - domainLookupStartTimeTc != 0 - ) { - harTimings.dns = domainLookupEndTimeTc - domainLookupStartTimeTc; - } - - harTimings.send = this.#getSendTiming(timings); - harTimings.wait = this.#getWaitTiming(timings); - harTimings.receive = this.#getReceiveTiming(timings); - let { startSendingTime, startSendingTimeRelative } = - this.#getStartSendingTimeInfo(timings, connectStartTimeTc); - - if (secureConnectionStartTimeRelative) { - const time = Math.max(Math.round(secureConnectionStartTime / 1000), -1); - secureConnectionStartTime = time; - } - if (startSendingTimeRelative) { - const time = Math.max(Math.round(startSendingTime / 1000), -1); - startSendingTime = time; - } - - const ot = this.#calculateOffsetAndTotalTime( - harTimings, - secureConnectionStartTime, - startSendingTimeRelative, - secureConnectionStartTimeRelative, - startSendingTime - ); - return { - total: ot.total, - timings: harTimings, - offsets: ot.offsets, - }; - } - - extractServerTimings(httpActivity) { - const channel = httpActivity.channel; - if (!channel || !channel.serverTiming) { - return null; - } - - const serverTimings = new Array(channel.serverTiming.length); - - for (let i = 0; i < channel.serverTiming.length; ++i) { - const { name, duration, description } = - channel.serverTiming.queryElementAt(i, Ci.nsIServerTiming); - serverTimings[i] = { name, duration, description }; - } - - return serverTimings; - } - - extractServiceWorkerTimings(httpActivity) { - if (!httpActivity.fromServiceWorker) { - return null; - } - const timedChannel = httpActivity.channel.QueryInterface( - Ci.nsITimedChannel - ); - - return { - launchServiceWorker: - timedChannel.launchServiceWorkerEndTime - - timedChannel.launchServiceWorkerStartTime, - requestToServiceWorker: - timedChannel.dispatchFetchEventEndTime - - timedChannel.dispatchFetchEventStartTime, - handledByServiceWorker: - timedChannel.handleFetchEventEndTime - - timedChannel.handleFetchEventStartTime, - }; - } - - /** - * For some requests such as cached or data: URI requests, we don't have - * access to any timing information so all timings should be 0. - * - * @return {Object} - * A timings object (@see extractHarTimings), with all values set to 0. - */ - getEmptyHARTimings() { - return { - total: 0, - timings: { - blocked: 0, - dns: 0, - ssl: 0, - connect: 0, - send: 0, - wait: 0, - receive: 0, - }, - offsets: { - blocked: 0, - dns: 0, - ssl: 0, - connect: 0, - send: 0, - wait: 0, - receive: 0, - }, - }; - } - - #getBlockedTiming(timings) { - if (timings.STATUS_RESOLVING && timings.STATUS_CONNECTING_TO) { - return timings.STATUS_RESOLVING.first - timings.REQUEST_HEADER.first; - } else if (timings.STATUS_SENDING_TO) { - return timings.STATUS_SENDING_TO.first - timings.REQUEST_HEADER.first; - } - - return -1; - } - - #getDnsTiming(timings) { - if (timings.STATUS_RESOLVING && timings.STATUS_RESOLVED) { - return timings.STATUS_RESOLVED.last - timings.STATUS_RESOLVING.first; - } - - return -1; - } - - #getConnectTiming(timings) { - if (timings.STATUS_CONNECTING_TO && timings.STATUS_CONNECTED_TO) { - return ( - timings.STATUS_CONNECTED_TO.last - timings.STATUS_CONNECTING_TO.first - ); - } - - return -1; - } - - #getReceiveTiming(timings) { - if (timings.RESPONSE_START && timings.RESPONSE_COMPLETE) { - return timings.RESPONSE_COMPLETE.last - timings.RESPONSE_START.first; - } - - return -1; - } - - #getWaitTiming(timings) { - if (timings.RESPONSE_START) { - return ( - timings.RESPONSE_START.first - - (timings.REQUEST_BODY_SENT || timings.STATUS_SENDING_TO).last - ); - } - - return -1; - } - - #getSslTiming(timings) { - if (timings.STATUS_TLS_STARTING && timings.STATUS_TLS_ENDING) { - return timings.STATUS_TLS_ENDING.last - timings.STATUS_TLS_STARTING.first; - } - - return -1; - } - - #getSendTiming(timings) { - if (timings.STATUS_SENDING_TO) { - return timings.STATUS_SENDING_TO.last - timings.STATUS_SENDING_TO.first; - } else if (timings.REQUEST_HEADER && timings.REQUEST_BODY_SENT) { - return timings.REQUEST_BODY_SENT.last - timings.REQUEST_HEADER.first; - } - - return -1; - } - - #getDataFromTimedChannel(timedChannel) { - const lookUpArr = [ - "tcpConnectEndTime", - "connectStartTime", - "connectEndTime", - "secureConnectionStartTime", - "domainLookupEndTime", - "domainLookupStartTime", - ]; - - return lookUpArr.reduce((prev, prop) => { - const propName = prop + "Tc"; - return { - ...prev, - [propName]: (() => { - if (!timedChannel) { - return 0; - } - - const value = timedChannel[prop]; - - if ( - value != 0 && - timedChannel.asyncOpenTime && - value < timedChannel.asyncOpenTime - ) { - return 0; - } - - return value; - })(), - }; - }, {}); - } - - #getSecureConnectionStartTimeInfo(timings) { - let secureConnectionStartTime = 0; - let secureConnectionStartTimeRelative = false; - - if (timings.STATUS_TLS_STARTING && timings.STATUS_TLS_ENDING) { - if (timings.STATUS_CONNECTING_TO) { - secureConnectionStartTime = - timings.STATUS_TLS_STARTING.first - - timings.STATUS_CONNECTING_TO.first; - } - - if (secureConnectionStartTime < 0) { - secureConnectionStartTime = 0; - } - secureConnectionStartTimeRelative = true; - } - - return { - secureConnectionStartTime, - secureConnectionStartTimeRelative, - }; - } - - #getStartSendingTimeInfo(timings, connectStartTimeTc) { - let startSendingTime = 0; - let startSendingTimeRelative = false; - - if (timings.STATUS_SENDING_TO) { - if (timings.STATUS_CONNECTING_TO) { - startSendingTime = - timings.STATUS_SENDING_TO.first - timings.STATUS_CONNECTING_TO.first; - startSendingTimeRelative = true; - } else if (connectStartTimeTc != 0) { - startSendingTime = timings.STATUS_SENDING_TO.first - connectStartTimeTc; - startSendingTimeRelative = true; - } - - if (startSendingTime < 0) { - startSendingTime = 0; - } - } - return { startSendingTime, startSendingTimeRelative }; - } - - #convertTimeToMs(timing) { - return Math.max(Math.round(timing / 1000), -1); - } - - #calculateOffsetAndTotalTime( - harTimings, - secureConnectionStartTime, - startSendingTimeRelative, - secureConnectionStartTimeRelative, - startSendingTime - ) { - let totalTime = 0; - for (const timing in harTimings) { - const time = this.#convertTimeToMs(harTimings[timing]); - harTimings[timing] = time; - if (time > -1 && timing != "connect" && timing != "ssl") { - totalTime += time; - } - } - - // connect, ssl and send times can be overlapped. - if (startSendingTimeRelative) { - totalTime += startSendingTime; - } else if (secureConnectionStartTimeRelative) { - totalTime += secureConnectionStartTime; - totalTime += harTimings.ssl; - } - - const offsets = {}; - offsets.blocked = 0; - offsets.dns = harTimings.blocked; - offsets.connect = offsets.dns + harTimings.dns; - if (secureConnectionStartTimeRelative) { - offsets.ssl = offsets.connect + secureConnectionStartTime; - } else { - offsets.ssl = offsets.connect + harTimings.connect; - } - if (startSendingTimeRelative) { - offsets.send = offsets.connect + startSendingTime; - if (!secureConnectionStartTimeRelative) { - offsets.ssl = offsets.send - harTimings.ssl; - } - } else { - offsets.send = offsets.ssl + harTimings.ssl; - } - offsets.wait = offsets.send + harTimings.send; - offsets.receive = offsets.wait + harTimings.wait; - - return { - total: totalTime, - offsets, - }; - } -})(); diff --git a/devtools/shared/network-observer/NetworkResponseListener.sys.mjs b/devtools/shared/network-observer/NetworkResponseListener.sys.mjs index e11b44cce2b..e909d0452b6 100644 --- a/devtools/shared/network-observer/NetworkResponseListener.sys.mjs +++ b/devtools/shared/network-observer/NetworkResponseListener.sys.mjs @@ -11,7 +11,7 @@ ChromeUtils.defineESModuleGetters( NetworkHelper: "resource://devtools/shared/network-observer/NetworkHelper.sys.mjs", NetworkTimings: - "resource://devtools/shared/network-observer/NetworkObserver.sys.mjs", + "resource://devtools/shared/network-observer/NetworkTimings.sys.mjs", NetworkUtils: "resource://devtools/shared/network-observer/NetworkUtils.sys.mjs", getResponseCacheObject: diff --git a/devtools/shared/network-observer/NetworkTimings.sys.mjs b/devtools/shared/network-observer/NetworkTimings.sys.mjs new file mode 100644 index 00000000000..e31152c8af5 --- /dev/null +++ b/devtools/shared/network-observer/NetworkTimings.sys.mjs @@ -0,0 +1,400 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/** + * Helper singleton to compute network timings for a given httpActivity object. + */ +export const NetworkTimings = new (class { + /** + * Convert the httpActivity timings in HAR compatible timings. The HTTP + * activity object holds the raw timing information in |timings| - these are + * timings stored for each activity notification. The HAR timing information + * is constructed based on these lower level data. + * + * @param {Object} httpActivity + * The HTTP activity object we are working with. + * @return {Object} + * This object holds three properties: + * - {Object} offsets: the timings computed as offsets from the initial + * request start time. + * - {Object} timings: the HAR timings object + * - {number} total: the total time for all of the request and response + */ + extractHarTimings(httpActivity) { + if (httpActivity.fromCache) { + // If it came from the browser cache, we have no timing + // information and these should all be 0 + return this.getEmptyHARTimings(); + } + + const timings = httpActivity.timings; + const harTimings = {}; + // If the TCP Fast Open option or tls1.3 0RTT is used tls and data can + // be dispatched in SYN packet and not after tcp socket is connected. + // To demostrate this properly we will calculated TLS and send start time + // relative to CONNECTING_TO. + // Similary if 0RTT is used, data can be sent as soon as a TLS handshake + // starts. + + harTimings.blocked = this.#getBlockedTiming(timings); + // DNS timing information is available only in when the DNS record is not + // cached. + harTimings.dns = this.#getDnsTiming(timings); + harTimings.connect = this.#getConnectTiming(timings); + harTimings.ssl = this.#getSslTiming(timings); + + let { secureConnectionStartTime, secureConnectionStartTimeRelative } = + this.#getSecureConnectionStartTimeInfo(timings); + + // sometimes the connection information events are attached to a speculative + // channel instead of this one, but necko might glue them back together in the + // nsITimedChannel interface used by Resource and Navigation Timing + const timedChannel = httpActivity.channel.QueryInterface( + Ci.nsITimedChannel + ); + + const { + tcpConnectEndTimeTc, + connectStartTimeTc, + connectEndTimeTc, + secureConnectionStartTimeTc, + domainLookupEndTimeTc, + domainLookupStartTimeTc, + } = this.#getDataFromTimedChannel(timedChannel); + + if ( + harTimings.connect <= 0 && + timedChannel && + tcpConnectEndTimeTc != 0 && + connectStartTimeTc != 0 + ) { + harTimings.connect = tcpConnectEndTimeTc - connectStartTimeTc; + if (secureConnectionStartTimeTc != 0) { + harTimings.ssl = connectEndTimeTc - secureConnectionStartTimeTc; + secureConnectionStartTime = + secureConnectionStartTimeTc - connectStartTimeTc; + secureConnectionStartTimeRelative = true; + } else { + harTimings.ssl = -1; + } + } else if ( + timedChannel && + timings.STATUS_TLS_STARTING && + secureConnectionStartTimeTc != 0 + ) { + // It can happen that TCP Fast Open actually have not sent any data and + // timings.STATUS_TLS_STARTING.first value will be corrected in + // timedChannel.secureConnectionStartTime + if (secureConnectionStartTimeTc > timings.STATUS_TLS_STARTING.first) { + // TCP Fast Open actually did not sent any data. + harTimings.ssl = connectEndTimeTc - secureConnectionStartTimeTc; + secureConnectionStartTimeRelative = false; + } + } + + if ( + harTimings.dns <= 0 && + timedChannel && + domainLookupEndTimeTc != 0 && + domainLookupStartTimeTc != 0 + ) { + harTimings.dns = domainLookupEndTimeTc - domainLookupStartTimeTc; + } + + harTimings.send = this.#getSendTiming(timings); + harTimings.wait = this.#getWaitTiming(timings); + harTimings.receive = this.#getReceiveTiming(timings); + let { startSendingTime, startSendingTimeRelative } = + this.#getStartSendingTimeInfo(timings, connectStartTimeTc); + + if (secureConnectionStartTimeRelative) { + const time = Math.max(Math.round(secureConnectionStartTime / 1000), -1); + secureConnectionStartTime = time; + } + if (startSendingTimeRelative) { + const time = Math.max(Math.round(startSendingTime / 1000), -1); + startSendingTime = time; + } + + const ot = this.#calculateOffsetAndTotalTime( + harTimings, + secureConnectionStartTime, + startSendingTimeRelative, + secureConnectionStartTimeRelative, + startSendingTime + ); + return { + total: ot.total, + timings: harTimings, + offsets: ot.offsets, + }; + } + + extractServerTimings(httpActivity) { + const channel = httpActivity.channel; + if (!channel || !channel.serverTiming) { + return null; + } + + const serverTimings = new Array(channel.serverTiming.length); + + for (let i = 0; i < channel.serverTiming.length; ++i) { + const { name, duration, description } = + channel.serverTiming.queryElementAt(i, Ci.nsIServerTiming); + serverTimings[i] = { name, duration, description }; + } + + return serverTimings; + } + + extractServiceWorkerTimings(httpActivity) { + if (!httpActivity.fromServiceWorker) { + return null; + } + const timedChannel = httpActivity.channel.QueryInterface( + Ci.nsITimedChannel + ); + + return { + launchServiceWorker: + timedChannel.launchServiceWorkerEndTime - + timedChannel.launchServiceWorkerStartTime, + requestToServiceWorker: + timedChannel.dispatchFetchEventEndTime - + timedChannel.dispatchFetchEventStartTime, + handledByServiceWorker: + timedChannel.handleFetchEventEndTime - + timedChannel.handleFetchEventStartTime, + }; + } + + /** + * For some requests such as cached or data: URI requests, we don't have + * access to any timing information so all timings should be 0. + * + * @return {Object} + * A timings object (@see extractHarTimings), with all values set to 0. + */ + getEmptyHARTimings() { + return { + total: 0, + timings: { + blocked: 0, + dns: 0, + ssl: 0, + connect: 0, + send: 0, + wait: 0, + receive: 0, + }, + offsets: { + blocked: 0, + dns: 0, + ssl: 0, + connect: 0, + send: 0, + wait: 0, + receive: 0, + }, + }; + } + + #getBlockedTiming(timings) { + if (timings.STATUS_RESOLVING && timings.STATUS_CONNECTING_TO) { + return timings.STATUS_RESOLVING.first - timings.REQUEST_HEADER.first; + } else if (timings.STATUS_SENDING_TO) { + return timings.STATUS_SENDING_TO.first - timings.REQUEST_HEADER.first; + } + + return -1; + } + + #getDnsTiming(timings) { + if (timings.STATUS_RESOLVING && timings.STATUS_RESOLVED) { + return timings.STATUS_RESOLVED.last - timings.STATUS_RESOLVING.first; + } + + return -1; + } + + #getConnectTiming(timings) { + if (timings.STATUS_CONNECTING_TO && timings.STATUS_CONNECTED_TO) { + return ( + timings.STATUS_CONNECTED_TO.last - timings.STATUS_CONNECTING_TO.first + ); + } + + return -1; + } + + #getReceiveTiming(timings) { + if (timings.RESPONSE_START && timings.RESPONSE_COMPLETE) { + return timings.RESPONSE_COMPLETE.last - timings.RESPONSE_START.first; + } + + return -1; + } + + #getWaitTiming(timings) { + if (timings.RESPONSE_START) { + return ( + timings.RESPONSE_START.first - + (timings.REQUEST_BODY_SENT || timings.STATUS_SENDING_TO).last + ); + } + + return -1; + } + + #getSslTiming(timings) { + if (timings.STATUS_TLS_STARTING && timings.STATUS_TLS_ENDING) { + return timings.STATUS_TLS_ENDING.last - timings.STATUS_TLS_STARTING.first; + } + + return -1; + } + + #getSendTiming(timings) { + if (timings.STATUS_SENDING_TO) { + return timings.STATUS_SENDING_TO.last - timings.STATUS_SENDING_TO.first; + } else if (timings.REQUEST_HEADER && timings.REQUEST_BODY_SENT) { + return timings.REQUEST_BODY_SENT.last - timings.REQUEST_HEADER.first; + } + + return -1; + } + + #getDataFromTimedChannel(timedChannel) { + const lookUpArr = [ + "tcpConnectEndTime", + "connectStartTime", + "connectEndTime", + "secureConnectionStartTime", + "domainLookupEndTime", + "domainLookupStartTime", + ]; + + return lookUpArr.reduce((prev, prop) => { + const propName = prop + "Tc"; + return { + ...prev, + [propName]: (() => { + if (!timedChannel) { + return 0; + } + + const value = timedChannel[prop]; + + if ( + value != 0 && + timedChannel.asyncOpenTime && + value < timedChannel.asyncOpenTime + ) { + return 0; + } + + return value; + })(), + }; + }, {}); + } + + #getSecureConnectionStartTimeInfo(timings) { + let secureConnectionStartTime = 0; + let secureConnectionStartTimeRelative = false; + + if (timings.STATUS_TLS_STARTING && timings.STATUS_TLS_ENDING) { + if (timings.STATUS_CONNECTING_TO) { + secureConnectionStartTime = + timings.STATUS_TLS_STARTING.first - + timings.STATUS_CONNECTING_TO.first; + } + + if (secureConnectionStartTime < 0) { + secureConnectionStartTime = 0; + } + secureConnectionStartTimeRelative = true; + } + + return { + secureConnectionStartTime, + secureConnectionStartTimeRelative, + }; + } + + #getStartSendingTimeInfo(timings, connectStartTimeTc) { + let startSendingTime = 0; + let startSendingTimeRelative = false; + + if (timings.STATUS_SENDING_TO) { + if (timings.STATUS_CONNECTING_TO) { + startSendingTime = + timings.STATUS_SENDING_TO.first - timings.STATUS_CONNECTING_TO.first; + startSendingTimeRelative = true; + } else if (connectStartTimeTc != 0) { + startSendingTime = timings.STATUS_SENDING_TO.first - connectStartTimeTc; + startSendingTimeRelative = true; + } + + if (startSendingTime < 0) { + startSendingTime = 0; + } + } + return { startSendingTime, startSendingTimeRelative }; + } + + #convertTimeToMs(timing) { + return Math.max(Math.round(timing / 1000), -1); + } + + #calculateOffsetAndTotalTime( + harTimings, + secureConnectionStartTime, + startSendingTimeRelative, + secureConnectionStartTimeRelative, + startSendingTime + ) { + let totalTime = 0; + for (const timing in harTimings) { + const time = this.#convertTimeToMs(harTimings[timing]); + harTimings[timing] = time; + if (time > -1 && timing != "connect" && timing != "ssl") { + totalTime += time; + } + } + + // connect, ssl and send times can be overlapped. + if (startSendingTimeRelative) { + totalTime += startSendingTime; + } else if (secureConnectionStartTimeRelative) { + totalTime += secureConnectionStartTime; + totalTime += harTimings.ssl; + } + + const offsets = {}; + offsets.blocked = 0; + offsets.dns = harTimings.blocked; + offsets.connect = offsets.dns + harTimings.dns; + if (secureConnectionStartTimeRelative) { + offsets.ssl = offsets.connect + secureConnectionStartTime; + } else { + offsets.ssl = offsets.connect + harTimings.connect; + } + if (startSendingTimeRelative) { + offsets.send = offsets.connect + startSendingTime; + if (!secureConnectionStartTimeRelative) { + offsets.ssl = offsets.send - harTimings.ssl; + } + } else { + offsets.send = offsets.ssl + harTimings.ssl; + } + offsets.wait = offsets.send + harTimings.send; + offsets.receive = offsets.wait + harTimings.wait; + + return { + total: totalTime, + offsets, + }; + } +})(); diff --git a/devtools/shared/network-observer/NetworkUtils.sys.mjs b/devtools/shared/network-observer/NetworkUtils.sys.mjs index 542653bd389..857a14ca677 100644 --- a/devtools/shared/network-observer/NetworkUtils.sys.mjs +++ b/devtools/shared/network-observer/NetworkUtils.sys.mjs @@ -9,6 +9,8 @@ ChromeUtils.defineESModuleGetters( { NetworkHelper: "resource://devtools/shared/network-observer/NetworkHelper.sys.mjs", + NetworkTimings: + "resource://devtools/shared/network-observer/NetworkTimings.sys.mjs", }, { global: "contextual" } ); @@ -102,6 +104,14 @@ function isChromeFileChannel(channel) { ); } +function isPrivilegedChannel(channel) { + return ( + isChannelFromSystemPrincipal(channel) || + isChromeFileChannel(channel) || + channel.loadInfo.isInDevToolsContext + ); +} + /** * Get the browsing context id for the channel. * @@ -527,9 +537,7 @@ function matchRequest(channel, filters) { // Ignore requests from chrome or add-on code when we don't monitor the whole browser if ( channel.loadInfo?.loadingDocument === null && - (isChannelFromSystemPrincipal(channel) || - isChromeFileChannel(channel) || - channel.loadInfo.isInDevToolsContext) + isPrivilegedChannel(channel) ) { return false; } @@ -569,6 +577,14 @@ function matchRequest(channel, filters) { // NetworkEventContentWatcher and NetworkEventStackTraces pass a target actor instead, from the content processes // Because of EFT, we can't use session context as we have to know what exact windows the target actor covers. if (filters.targetActor) { + // Ignore requests from chrome or add-on code when we don't monitor the whole browser + if ( + filters.targetActor.sessionContext?.type !== "all" && + isPrivilegedChannel(channel) + ) { + return false; + } + // Bug 1769982 the target actor might be destroying and accessing windows will throw. // Ignore all further request when this happens. let windows; @@ -711,19 +727,93 @@ function getCharset(channel) { return win ? win.document.characterSet : null; } +/** + * Data channels are either handled in the parent process NetworkObserver for + * navigation requests, or in content processes for any other request. + * + * This function allows to apply the same logic to build the network event actor + * in both cases. + * + * @param {nsIDataChannel} channel + * The data channel for which we are creating a network event actor. + * @param {object} networkEventActor + * The network event actor owning this resource. + */ +function handleDataChannel(channel, networkEventActor) { + networkEventActor.addResponseStart({ + channel, + fromCache: false, + // According to the fetch spec for data URLs we can just hardcode + // "Content-Type" header. + rawHeaders: "content-type: " + channel.contentType, + }); + + // For data URLs we can not set up a stream listener as for http, + // so we have to create a response manually and complete it. + const response = { + // TODO: Bug 1903807. Re-evaluate if it's correct to just return + // zero for `bodySize` and `decodedBodySize`. + bodySize: 0, + decodedBodySize: 0, + contentCharset: channel.contentCharset, + contentLength: channel.contentLength, + contentType: channel.contentType, + mimeType: lazy.NetworkHelper.addCharsetToMimeType( + channel.contentType, + channel.contentCharset + ), + transferredSize: 0, + }; + + // For data URIs all timings can be set to zero. + const result = lazy.NetworkTimings.getEmptyHARTimings(); + networkEventActor.addEventTimings( + result.total, + result.timings, + result.offsets + ); + + const url = channel.URI.spec; + response.text = url.substring(url.indexOf(",") + 1); + if ( + !response.mimeType || + !lazy.NetworkHelper.isTextMimeType(response.mimeType) + ) { + response.encoding = "base64"; + try { + response.text = btoa(response.text); + } catch (err) { + // Ignore. + } + } + + // Note: `size`` is only used by DevTools, WebDriverBiDi relies on + // `bodySize` and `decodedBodySize`. Waiting on Bug 1903807 to decide + // if those fields should have non-0 values as well. + response.size = response.text.length; + + // Security information is not relevant for data channel, but it should + // not be considered as insecure either. Set empty string as security + // state. + networkEventActor.addSecurityInfo({ state: "" }); + networkEventActor.addResponseContent(response, {}); +} + export const NetworkUtils = { causeTypeToString, fetchRequestHeadersAndCookies, - parseEarlyHintsResponseHeaders, fetchResponseHeadersAndCookies, + getBlockedReason, getCauseDetails, getChannelBrowsingContextID, getChannelInnerWindowId, getChannelPriority, + getCharset, getHttpVersion, getProtocol, getReferrerPolicy, getWebSocketChannel, + handleDataChannel, isChannelFromSystemPrincipal, isChannelPrivate, isFromCache, @@ -732,7 +822,6 @@ export const NetworkUtils = { isRedirectedChannel, isThirdPartyTrackingResource, matchRequest, + parseEarlyHintsResponseHeaders, stringToCauseType, - getBlockedReason, - getCharset, }; diff --git a/devtools/shared/network-observer/moz.build b/devtools/shared/network-observer/moz.build index 3c782ea9aab..adedf2ff737 100644 --- a/devtools/shared/network-observer/moz.build +++ b/devtools/shared/network-observer/moz.build @@ -16,6 +16,7 @@ DevToolsModules( "NetworkOverride.sys.mjs", "NetworkResponseListener.sys.mjs", "NetworkThrottleManager.sys.mjs", + "NetworkTimings.sys.mjs", "NetworkUtils.sys.mjs", "WildcardToRegexp.sys.mjs", ) diff --git a/docs/code-quality/lint/usage.rst b/docs/code-quality/lint/usage.rst index 2bcf688d91f..ff5864ff03f 100644 --- a/docs/code-quality/lint/usage.rst +++ b/docs/code-quality/lint/usage.rst @@ -132,6 +132,17 @@ the following to your repo config: command = ["path/to/mozilla-unified/tools/lint/pipelint", "$path"] patterns = ["glob:'**/*'"] + +.. note:: + On Windows you must explicitly prepend ``"python3",`` to `command`. + + +.. code-block:: toml + + [fix.tools.mozlint] + command = ["python3", "path/to/mozilla-unified/tools/lint/pipelint", "$path"] + patterns = ["glob:'**/*'"] + .. _Jujutsu SCM's: https://jj-vcs.github.io/jj/latest/ Editor Integrations diff --git a/docshell/base/nsAboutRedirector.cpp b/docshell/base/nsAboutRedirector.cpp index 9d128f5f611..77491402cb2 100644 --- a/docshell/base/nsAboutRedirector.cpp +++ b/docshell/base/nsAboutRedirector.cpp @@ -117,6 +117,12 @@ static const RedirEntry kRedirMap[] = { nsIAboutModule::HIDE_FROM_ABOUTABOUT | nsIAboutModule::ALLOW_SCRIPT | nsIAboutModule::URI_MUST_LOAD_IN_CHILD | nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS}, +#ifdef MOZ_WIDGET_ANDROID + {"home", "about:blank", + nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | + nsIAboutModule::URI_CAN_LOAD_IN_PRIVILEGEDABOUT_PROCESS | + nsIAboutModule::URI_MUST_LOAD_IN_CHILD}, +#endif {"httpsonlyerror", "chrome://global/content/httpsonlyerror/errorpage.html", nsIAboutModule::URI_SAFE_FOR_UNTRUSTED_CONTENT | nsIAboutModule::URI_CAN_LOAD_IN_CHILD | nsIAboutModule::ALLOW_SCRIPT | diff --git a/docshell/build/components.conf b/docshell/build/components.conf index d3733ab32a8..34e06ce3324 100644 --- a/docshell/build/components.conf +++ b/docshell/build/components.conf @@ -41,6 +41,8 @@ if defined('MOZ_CRASHREPORTER'): about_pages.append('crashes') if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] != 'android': about_pages.append('profiles') +if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] == 'android': + about_pages.append('home') if buildconfig.substs['MOZ_WIDGET_TOOLKIT'] == 'windows': about_pages.append('third-party') about_pages.append('windows-messages') diff --git a/dom/base/ChromeUtils.cpp b/dom/base/ChromeUtils.cpp index bd6dd143216..73623149c14 100644 --- a/dom/base/ChromeUtils.cpp +++ b/dom/base/ChromeUtils.cpp @@ -2549,6 +2549,11 @@ void ChromeUtils::NotifyDevToolsClosed(GlobalObject& aGlobal) { ChromeUtils::sDevToolsOpenedCount--; } +/* static */ +bool ChromeUtils::IsJSIdentifier(GlobalObject& aGlobal, const nsAString& aStr) { + return JS_IsIdentifier(aStr.BeginReading(), aStr.Length()); +} + #ifdef MOZ_WMF_CDM /* static */ already_AddRefed ChromeUtils::GetWMFContentDecryptionModuleInformation( diff --git a/dom/base/ChromeUtils.h b/dom/base/ChromeUtils.h index bb5a5721ac3..89a5a7212cc 100644 --- a/dom/base/ChromeUtils.h +++ b/dom/base/ChromeUtils.h @@ -335,6 +335,8 @@ class ChromeUtils { GlobalObject& aGlobal, const nsAString& aHeader, nsIURI* aSelfURI, nsIPrincipal* aLoadingPrincipal, ErrorResult& aRv); + static bool IsJSIdentifier(GlobalObject& aGlobal, const nsAString& aStr); + private: // Number of DevTools session debugging the current process static std::atomic sDevToolsOpenedCount; diff --git a/dom/base/Element.cpp b/dom/base/Element.cpp index 3243dbfd31d..917ab2b0041 100644 --- a/dom/base/Element.cpp +++ b/dom/base/Element.cpp @@ -323,6 +323,9 @@ void Element::SetPointerCapture(int32_t aPointerId, ErrorResult& aError) { aError.Throw(NS_ERROR_DOM_INVALID_STATE_ERR); return; } + // XXX If pointerInfo->mIsSynthesizedForTests does not match the last + // WidgetPointerEvent's mFlags.mIsSynthesizedForTests, should we treat it + // as unknown pointerId? if (!pointerInfo->mActiveState || pointerInfo->mActiveDocument != OwnerDoc()) { return; diff --git a/dom/base/UseCounters.conf b/dom/base/UseCounters.conf index c084eda9f7f..1d9c7d815d8 100644 --- a/dom/base/UseCounters.conf +++ b/dom/base/UseCounters.conf @@ -84,6 +84,7 @@ custom JS_errorstack_setter_nonstring called error.stack setter with non-string custom JS_errorstack_setter_no_errordata called error.stack setter on object without ErrorData internal slot custom JS_dateparse called Date.parse custom JS_dateparse_impl_def call to Date.parse used implementation defined behaviour +custom JS_regexp_symbol_protocol_on_primitive passed a primitive with a custom implementation of the regexp protocol symbols to one of the String methods that accept a regexp // Console API method console.assert diff --git a/dom/base/nsCCUncollectableMarker.cpp b/dom/base/nsCCUncollectableMarker.cpp index 56b32f0ab3e..968904c5edc 100644 --- a/dom/base/nsCCUncollectableMarker.cpp +++ b/dom/base/nsCCUncollectableMarker.cpp @@ -29,6 +29,7 @@ #include "mozilla/CycleCollectedJSContext.h" #include "mozilla/CycleCollectedJSRuntime.h" #include "mozilla/EventListenerManager.h" +#include "mozilla/StaticPtr.h" #include "mozilla/dom/ChromeMessageBroadcaster.h" #include "mozilla/dom/ContentFrameMessageManager.h" #include "mozilla/dom/ContentProcessMessageManager.h" @@ -46,7 +47,8 @@ using namespace mozilla; using namespace mozilla::dom; -static bool sInited = 0; +static StaticRefPtr sInstance; + // The initial value of sGeneration should not be the same as the // value it is given at xpcom-shutdown, because this will make any GCs // before we first CC benignly violate the black-gray invariant, due @@ -58,11 +60,11 @@ NS_IMPL_ISUPPORTS(nsCCUncollectableMarker, nsIObserver) /* static */ nsresult nsCCUncollectableMarker::Init() { - if (sInited) { + if (sInstance) { return NS_OK; } - nsCOMPtr marker = new nsCCUncollectableMarker; + RefPtr marker = new nsCCUncollectableMarker(); nsCOMPtr obs = mozilla::services::GetObserverService(); if (!obs) return NS_ERROR_FAILURE; @@ -75,10 +77,8 @@ nsresult nsCCUncollectableMarker::Init() { rv = obs->AddObserver(marker, "cycle-collector-begin", false); NS_ENSURE_SUCCESS(rv, rv); - rv = obs->AddObserver(marker, "cycle-collector-forget-skippable", false); - NS_ENSURE_SUCCESS(rv, rv); - sInited = true; + sInstance = marker; return NS_OK; } @@ -303,26 +303,27 @@ nsresult nsCCUncollectableMarker::Observe(nsISupports* aSubject, // No need for kungFuDeathGrip here, yay observerservice! obs->RemoveObserver(this, "xpcom-shutdown"); obs->RemoveObserver(this, "cycle-collector-begin"); - obs->RemoveObserver(this, "cycle-collector-forget-skippable"); + sInstance = nullptr; sGeneration = 0; return NS_OK; } - NS_ASSERTION(!strcmp(aTopic, "cycle-collector-begin") || - !strcmp(aTopic, "cycle-collector-forget-skippable"), - "wrong topic"); + MOZ_ASSERT(!strcmp(aTopic, "cycle-collector-begin"), "wrong topic"); + Element::ClearContentUnbinder(); + return Cleanup(/* aPrepareForCC = */ true); +} + +// Don't call this with aPrepareForCC = false from an observer, as apparently +// calling UnmarkGrayStrongObservers() from inside an observer can cause +// problems. See bug 1958292. +nsresult nsCCUncollectableMarker::Cleanup(bool aPrepareForCC) { // JS cleanup can be slow. Do it only if this is the first forget-skippable // after a GC. - const bool cleanupJS = nsJSContext::HasHadCleanupSinceLastGC() && - !strcmp(aTopic, "cycle-collector-forget-skippable"); - - const bool prepareForCC = !strcmp(aTopic, "cycle-collector-begin"); - if (prepareForCC) { - Element::ClearContentUnbinder(); - } + const bool cleanupJS = + nsJSContext::HasHadCleanupSinceLastGC() && !aPrepareForCC; // Increase generation to effectively unmark all current objects if (!++sGeneration) { @@ -383,7 +384,7 @@ nsresult nsCCUncollectableMarker::Observe(nsISupports* aSubject, "There must be one forgetSkippable call per cleanup state."); static uint32_t sFSState = eDone; - if (prepareForCC) { + if (aPrepareForCC) { sFSState = eDone; return NS_OK; } @@ -395,9 +396,8 @@ nsresult nsCCUncollectableMarker::Observe(nsISupports* aSubject, // frame message managers and docshells. sFSState = eInitial; return NS_OK; - } else { - ++sFSState; } + ++sFSState; switch (sFSState) { case eUnmarkJSEventListeners: { @@ -426,6 +426,12 @@ nsresult nsCCUncollectableMarker::Observe(nsISupports* aSubject, return NS_OK; } +void nsCCUncollectableMarker::CleanupForForgetSkippable() { + if (sInstance) { + (void)sInstance->Cleanup(/* aPrepareForCC = */ false); + } +} + void mozilla::dom::TraceBlackJS(JSTracer* aTrc) { if (!nsCCUncollectableMarker::sGeneration) { return; diff --git a/dom/base/nsCCUncollectableMarker.h b/dom/base/nsCCUncollectableMarker.h index 2948cc0589d..2a220f6fb27 100644 --- a/dom/base/nsCCUncollectableMarker.h +++ b/dom/base/nsCCUncollectableMarker.h @@ -32,11 +32,15 @@ class nsCCUncollectableMarker final : public nsIObserver { return InGeneration(aGeneration) && !aCb.WantAllTraces(); } + static void CleanupForForgetSkippable(); + static uint32_t sGeneration; private: nsCCUncollectableMarker() = default; ~nsCCUncollectableMarker() = default; + + nsresult Cleanup(bool aPrepareForCC); }; namespace mozilla::dom { diff --git a/dom/base/nsContentUtils.cpp b/dom/base/nsContentUtils.cpp index 44b5f278a6d..95c6740d0de 100644 --- a/dom/base/nsContentUtils.cpp +++ b/dom/base/nsContentUtils.cpp @@ -9658,6 +9658,20 @@ class StringBuilder { aAppender.AppendLiteral(u" "); flushedUntil = currentPosition + 1; break; + case '<': + if (StaticPrefs::dom_security_html_serialization_escape_lt_gt()) { + aAppender.Append(aStr.FromTo(flushedUntil, currentPosition)); + aAppender.AppendLiteral(u"<"); + flushedUntil = currentPosition + 1; + } + break; + case '>': + if (StaticPrefs::dom_security_html_serialization_escape_lt_gt()) { + aAppender.Append(aStr.FromTo(flushedUntil, currentPosition)); + aAppender.AppendLiteral(u">"); + flushedUntil = currentPosition + 1; + } + break; default: break; } @@ -9781,7 +9795,9 @@ static CheckedInt ExtraSpaceNeededForAttrEncoding( switch (*c) { case '"': case '&': - case 0x00A0: + case 0x00A0: // NO-BREAK SPACE + case '<': + case '>': ++numEncodedChars; break; default: @@ -9800,7 +9816,7 @@ static CheckedInt ExtraSpaceNeededForAttrEncoding( // & in it. We subtract 1 for the null terminator, then 1 more for the // existing character that will be replaced. constexpr uint32_t maxCharExtraSpace = - std::max({std::size("""), std::size("&"), std::size(" ")}) - + std::max({std::size("""), std::size("&"), std::size(" "), std::size("<"), std::size(">")}) - 2; static_assert(maxCharExtraSpace < 100, "Possible underflow"); return CheckedInt(numEncodedChars) * maxCharExtraSpace; diff --git a/dom/base/nsFocusManager.cpp b/dom/base/nsFocusManager.cpp index 6297eeb0920..be89a1c9849 100644 --- a/dom/base/nsFocusManager.cpp +++ b/dom/base/nsFocusManager.cpp @@ -2580,6 +2580,9 @@ void nsFocusManager::FixUpFocusAfterFrameLoaderChange(Element& aElement) { // If we're remote, activate the frame. ActivateRemoteFrameIfNeeded(aElement, GenerateFocusActionId()); } + RefPtr presContext = aElement.OwnerDoc()->GetPresContext(); + IMEStateManager::OnChangeFocus(presContext, &aElement, + InputContextAction::CAUSE_UNKNOWN); } void nsFocusManager::Focus( diff --git a/dom/base/nsGlobalWindowInner.cpp b/dom/base/nsGlobalWindowInner.cpp index 05cdc124858..03116bf60f7 100644 --- a/dom/base/nsGlobalWindowInner.cpp +++ b/dom/base/nsGlobalWindowInner.cpp @@ -1427,7 +1427,6 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INTERNAL(nsGlobalWindowInner) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocation) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mHistory) - NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mNavigation) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCustomElements) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSharedWorkers) NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocalStorage) diff --git a/dom/base/test/unit/test_chromeutils_isJSIdentifier.js b/dom/base/test/unit/test_chromeutils_isJSIdentifier.js new file mode 100644 index 00000000000..edbbb3d4d0b --- /dev/null +++ b/dom/base/test/unit/test_chromeutils_isJSIdentifier.js @@ -0,0 +1,33 @@ +"use strict"; + +add_task(function test_isJSIdentifier() { + Assert.equal(ChromeUtils.isJSIdentifier("foo"), true); + Assert.equal(ChromeUtils.isJSIdentifier("$foo"), true); + Assert.equal(ChromeUtils.isJSIdentifier("foo1"), true); + Assert.equal(ChromeUtils.isJSIdentifier("_foo"), true); + + Assert.equal(ChromeUtils.isJSIdentifier("foo-"), false); + Assert.equal(ChromeUtils.isJSIdentifier("foo~"), false); + Assert.equal(ChromeUtils.isJSIdentifier("1foo"), false); + Assert.equal(ChromeUtils.isJSIdentifier("🤣fo"), false); + Assert.equal(ChromeUtils.isJSIdentifier("fo🤣"), false); + + Assert.equal(ChromeUtils.isJSIdentifier("\u3042"), true); + Assert.equal(ChromeUtils.isJSIdentifier("A\u3042"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\u3042\u3042"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\u{29E49}"), true); + Assert.equal(ChromeUtils.isJSIdentifier("A\u{29E49}"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\u{29E49}\u{29E49}"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\uFF10"), false); + Assert.equal(ChromeUtils.isJSIdentifier("A\uFF10"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\uFF10\uFF10"), false); + Assert.equal(ChromeUtils.isJSIdentifier("\u{11067}"), false); + Assert.equal(ChromeUtils.isJSIdentifier("A\u{11067}"), true); + Assert.equal(ChromeUtils.isJSIdentifier("\u{11067}\u{11067}"), false); + + Assert.equal(ChromeUtils.isJSIdentifier("A\0"), false); + Assert.equal(ChromeUtils.isJSIdentifier("\0A"), false); + Assert.equal(ChromeUtils.isJSIdentifier("A\0B"), false); + + Assert.equal(ChromeUtils.isJSIdentifier(""), false); +}); diff --git a/dom/base/test/unit/xpcshell.toml b/dom/base/test/unit/xpcshell.toml index 3c8752be444..862cc9c2316 100644 --- a/dom/base/test/unit/xpcshell.toml +++ b/dom/base/test/unit/xpcshell.toml @@ -40,6 +40,8 @@ prefs = ["network.xhr.block_sync_system_requests=false"] # Bug 721336 ["test_chromeutils_defineLazyGetter.js"] +["test_chromeutils_isJSIdentifier.js"] + ["test_chromeutils_getXPCOMErrorName.js"] ["test_chromeutils_shallowclone.js"] diff --git a/dom/base/use_counter_metrics.yaml b/dom/base/use_counter_metrics.yaml index 5f16098f42a..6d2b80297f7 100644 --- a/dom/base/use_counter_metrics.yaml +++ b/dom/base/use_counter_metrics.yaml @@ -107,8 +107,8 @@ use.counter: send_in_pings: - use-counters -# Total of 2395 use counter metrics (excludes denominators). -# Total of 357 'page' use counters. +# Total of 2397 use counter metrics (excludes denominators). +# Total of 358 'page' use counters. use.counter.page: svgsvgelement_getelementbyid: type: counter @@ -807,6 +807,23 @@ use.counter.page: send_in_pings: - use-counters + js_regexp_symbol_protocol_on_primitive: + type: counter + description: > + Whether a page passed a primitive with a custom implementation of the regexp protocol symbols to one of the String methods that accept a regexp. + Compare against `use.counter.top_level_content_documents_destroyed` + to calculate the rate. + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1852098 + data_reviews: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1852098 + notification_emails: + - dom-core@mozilla.com + - emilio@mozilla.com + expires: never + send_in_pings: + - use-counters + console_assert: type: counter description: > @@ -6179,7 +6196,7 @@ use.counter.page: send_in_pings: - use-counters -# Total of 357 'document' use counters. +# Total of 358 'document' use counters. use.counter.doc: svgsvgelement_getelementbyid: type: counter @@ -6878,6 +6895,23 @@ use.counter.doc: send_in_pings: - use-counters + js_regexp_symbol_protocol_on_primitive: + type: counter + description: > + Whether a document passed a primitive with a custom implementation of the regexp protocol symbols to one of the String methods that accept a regexp. + Compare against `use.counter.content_documents_destroyed` + to calculate the rate. + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1852098 + data_reviews: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1852098 + notification_emails: + - dom-core@mozilla.com + - emilio@mozilla.com + expires: never + send_in_pings: + - use-counters + console_assert: type: counter description: > diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp index e810c3e4f31..f8eee7a9617 100644 --- a/dom/canvas/CanvasRenderingContext2D.cpp +++ b/dom/canvas/CanvasRenderingContext2D.cpp @@ -2919,7 +2919,9 @@ static GeckoFontMetrics GetFontMetricsFromCanvas(void* aContext) { 0.0f, 0.0f}; } - auto metrics = fontGroup->GetMetricsForCSSUnits(nsFontMetrics::eHorizontal); + auto metrics = fontGroup->GetMetricsForCSSUnits( + nsFontMetrics::eHorizontal, StyleQueryFontMetricsFlags::NEEDS_CH | + StyleQueryFontMetricsFlags::NEEDS_IC); return {Length::FromPixels(metrics.xHeight), Length::FromPixels(metrics.zeroWidth), Length::FromPixels(metrics.capHeight), @@ -3037,8 +3039,9 @@ class CanvasUserSpaceMetrics final : public UserSpaceMetricsWithSize { return Gecko_GetFontMetrics( mPresContext, WritingMode(mCanvasStyle).IsVertical(), mCanvasStyle->StyleFont(), mCanvasStyle->StyleFont()->mFont.size, - /* aUseUserFontSet = */ true, - /* aRetrieveMathScales */ false); + StyleQueryFontMetricsFlags::USE_USER_FONT_SET | + StyleQueryFontMetricsFlags::NEEDS_CH | + StyleQueryFontMetricsFlags::NEEDS_IC); } case Type::Root: return GetFontMetrics(mPresContext->Document()->GetRootElement()); diff --git a/dom/chrome-webidl/ChromeUtils.webidl b/dom/chrome-webidl/ChromeUtils.webidl index 1fd0519864c..92d07aec507 100644 --- a/dom/chrome-webidl/ChromeUtils.webidl +++ b/dom/chrome-webidl/ChromeUtils.webidl @@ -422,6 +422,11 @@ namespace ChromeUtils { undefined defineESModuleGetters(object aTarget, object aModules, optional ImportESModuleOptionsDictionary aOptions = {}); + /** + * Returns whether |str| is a valid JS identifier + */ + boolean isJSIdentifier(DOMString str); + /** * IF YOU ADD NEW METHODS HERE, MAKE SURE THEY ARE THREAD-SAFE. */ diff --git a/dom/chrome-webidl/moz.build b/dom/chrome-webidl/moz.build index 909d51f1260..ce8007abcd6 100644 --- a/dom/chrome-webidl/moz.build +++ b/dom/chrome-webidl/moz.build @@ -29,10 +29,10 @@ with Files("WebExtension*.webidl"): BUG_COMPONENT = ("WebExtensions", "General") with Files("IOUtils.webidl"): - BUG_COMPONENT = ("Toolkit", "IOUtils and PathUtils") + BUG_COMPONENT = ("Core", "XPCOM") with Files("PathUtils.webidl"): - BUG_COMPONENT = ("Toolkit", "IOUtils and PathUtils") + BUG_COMPONENT = ("Core", "XPCOM") with Files("WidevineCDMManifest.webidl"): BUG_COMPONENT = ("Core", "Audio/Video: Playback") diff --git a/dom/closewatcher/CloseWatcher.cpp b/dom/closewatcher/CloseWatcher.cpp index 00cc134f6f1..687d833b1b9 100644 --- a/dom/closewatcher/CloseWatcher.cpp +++ b/dom/closewatcher/CloseWatcher.cpp @@ -53,7 +53,7 @@ JSObject* CloseWatcher::WrapObject(JSContext* aCx, } // https://html.spec.whatwg.org/multipage/interaction.html#close-watcher-request-close -bool CloseWatcher::RequestToClose() { +bool CloseWatcher::RequestToClose(bool aRequireHistoryActionActivation) { // 1. If closeWatcher is not active, then return true. // 2. If closeWatcher's is running cancel action is true, then return true. // 3. Let window be closeWatcher's window. @@ -70,7 +70,7 @@ bool CloseWatcher::RequestToClose() { // 5. Let canPreventClose be true if window's close watcher manager's groups's // size is less than window's close watcher manager's allowed number of // groups, and window has history-action activation; otherwise false. - init.mCancelable = manager->CanGrow() && winCtx->HasValidHistoryActivation(); + init.mCancelable = !aRequireHistoryActionActivation || (manager->CanGrow() && winCtx->HasValidHistoryActivation()); RefPtr event = Event::Constructor(this, u"cancel"_ns, init); event->SetTrusted(true); // 6. Set closeWatcher's is running cancel action to true. diff --git a/dom/closewatcher/CloseWatcher.h b/dom/closewatcher/CloseWatcher.h index 3593f95949c..5b38f640da2 100644 --- a/dom/closewatcher/CloseWatcher.h +++ b/dom/closewatcher/CloseWatcher.h @@ -33,11 +33,11 @@ class CloseWatcher : public DOMEventTargetHelper, public AbortFollower { // The IDL binding for RequestClose returns void so that the history // consumption is not observable. - MOZ_CAN_RUN_SCRIPT void RequestClose() { RequestToClose(); } + MOZ_CAN_RUN_SCRIPT void RequestClose() { RequestToClose(false); } // RequestToClose returns a boolean so callers can determine if the action // was handled, so that other fallback behaviours can be executed. - MOZ_CAN_RUN_SCRIPT bool RequestToClose(); + MOZ_CAN_RUN_SCRIPT bool RequestToClose(bool aRequireHistoryActionActivation); MOZ_CAN_RUN_SCRIPT void Close(); diff --git a/dom/closewatcher/CloseWatcherManager.cpp b/dom/closewatcher/CloseWatcherManager.cpp index a3a462467bc..669fd2b51cb 100644 --- a/dom/closewatcher/CloseWatcherManager.cpp +++ b/dom/closewatcher/CloseWatcherManager.cpp @@ -40,7 +40,7 @@ MOZ_CAN_RUN_SCRIPT bool CloseWatcherManager::ProcessCloseRequest() { for (RefPtr watcher : group.BackwardRange()) { processedACloseWatcher = true; // TODO:(keithamus): https://github.com/whatwg/html/issues/10240 ? - if (!watcher->RequestToClose()) { + if (!watcher->RequestToClose(true)) { break; } } diff --git a/dom/events/EventStateManager.cpp b/dom/events/EventStateManager.cpp index 13deaabfff0..6e160c2421e 100644 --- a/dom/events/EventStateManager.cpp +++ b/dom/events/EventStateManager.cpp @@ -1125,7 +1125,6 @@ nsresult EventStateManager::PreHandleEvent(nsPresContext* aPresContext, break; } [[fallthrough]]; - case eMouseMove: case ePointerDown: if (aEvent->mMessage == ePointerDown) { PointerEventHandler::UpdateActivePointerState(mouseEvent, @@ -1139,7 +1138,12 @@ nsresult EventStateManager::PreHandleEvent(nsPresContext* aPresContext, LightDismissOpenPopovers(aEvent, aTargetContent); } [[fallthrough]]; + case eMouseMove: case ePointerMove: { + if (aEvent->mMessage == ePointerMove) { + PointerEventHandler::UpdateActivePointerState(mouseEvent, + aTargetContent); + } if (!mInTouchDrag && PointerEventHandler::IsDragAndDropEnabled(*mouseEvent)) { GenerateDragGesture(aPresContext, mouseEvent); @@ -4497,7 +4501,7 @@ nsresult EventStateManager::PostHandleEvent(nsPresContext* aPresContext, case eMouseActivate: if (mCurrentTarget) { nsCOMPtr targetContent = - mCurrentTarget->GetContentForEvent(aEvent); + mCurrentTarget->GetContentForEvent(aEvent); if (!NodeAllowsClickThrough(targetContent)) { *aStatus = nsEventStatus_eConsumeNoDefault; } diff --git a/dom/events/PointerEventHandler.cpp b/dom/events/PointerEventHandler.cpp index 9c39569f5c4..d9872bd6237 100644 --- a/dom/events/PointerEventHandler.cpp +++ b/dom/events/PointerEventHandler.cpp @@ -80,14 +80,43 @@ void PointerEventHandler::UpdateActivePointerState(WidgetMouseEvent* aEvent, } switch (aEvent->mMessage) { case eMouseEnterIntoWidget: + if (aEvent->mFlags.mIsSynthesizedForTests) { + const PointerInfo* const pointerInfo = + GetPointerInfo(aEvent->pointerId); + if (pointerInfo && !pointerInfo->mIsSynthesizedForTests) { + // Do not overwrite the PointerInfo which is set by user input with + // synthesized pointer move. + return; + } + } // In this case we have to know information about available mouse pointers sActivePointersIds->InsertOrUpdate( aEvent->pointerId, - MakeUnique(false, aEvent->mInputSource, true, false, - nullptr)); + MakeUnique( + false, aEvent->mInputSource, true, false, nullptr, + // XXX build-linux64-base-toolchains (Bb) requires this hack. + // NOLINTNEXTLINE + aEvent->mFlags.mIsSynthesizedForTests != false)); MaybeCacheSpoofedPointerID(aEvent->mInputSource, aEvent->pointerId); break; + case ePointerMove: + // If the event is a synthesized mouse event, we should register the + // pointerId for the test if the pointer is not there. + if (!aEvent->mFlags.mIsSynthesizedForTests || + aEvent->mInputSource != MouseEvent_Binding::MOZ_SOURCE_MOUSE) { + return; + } + if (GetPointerInfo(aEvent->pointerId)) { + return; + } + sActivePointersIds->InsertOrUpdate( + aEvent->pointerId, + MakeUnique( + /* aActiveState = */ false, MouseEvent_Binding::MOZ_SOURCE_MOUSE, + /* aPrimaryState = */ true, /* aFromTouchEvent = */ false, + nullptr, /* aIsOnlySynthesizedForTests = */ true)); + return; case ePointerDown: // In this case we switch pointer to active state if (WidgetPointerEvent* pointerEvent = aEvent->AsPointerEvent()) { @@ -99,7 +128,10 @@ void PointerEventHandler::UpdateActivePointerState(WidgetMouseEvent* aEvent, MakeUnique( true, pointerEvent->mInputSource, pointerEvent->mIsPrimary, pointerEvent->mFromTouchEvent, - aTargetContent ? aTargetContent->OwnerDoc() : nullptr)); + aTargetContent ? aTargetContent->OwnerDoc() : nullptr, + // XXX build-linux64-base-toolchains (Bb) requires this hack. + // NOLINTNEXTLINE + pointerEvent->mFlags.mIsSynthesizedForTests != false)); MaybeCacheSpoofedPointerID(pointerEvent->mInputSource, pointerEvent->pointerId); } @@ -116,15 +148,32 @@ void PointerEventHandler::UpdateActivePointerState(WidgetMouseEvent* aEvent, MouseEvent_Binding::MOZ_SOURCE_TOUCH) { sActivePointersIds->InsertOrUpdate( pointerEvent->pointerId, - MakeUnique(false, pointerEvent->mInputSource, - pointerEvent->mIsPrimary, - pointerEvent->mFromTouchEvent, nullptr)); + MakeUnique( + false, pointerEvent->mInputSource, pointerEvent->mIsPrimary, + pointerEvent->mFromTouchEvent, nullptr, + // XXX build-linux64-base-toolchains (Bb) requires this hack. + // NOLINTNEXTLINE + pointerEvent->mFlags.mIsSynthesizedForTests != false)); } else { + // XXX If the PointerInfo is registered with same pointerId as actual + // pointer and the event is synthesized for tests, we unregister the + // pointer unexpectedly here. However, it should be rare and + // currently, we use only pointerId for the key. Therefore, we cannot + // do nothing without changing the key. sActivePointersIds->Remove(pointerEvent->pointerId); } } break; case eMouseExitFromWidget: + if (aEvent->mFlags.mIsSynthesizedForTests) { + const PointerInfo* const pointerInfo = + GetPointerInfo(aEvent->pointerId); + if (pointerInfo && !pointerInfo->mIsSynthesizedForTests) { + // Do not remove the PointerInfo which is set by user input with + // synthesized pointer move. + return; + } + } // In this case we have to remove information about disappeared mouse // pointers sActivePointersIds->Remove(aEvent->pointerId); diff --git a/dom/events/PointerEventHandler.h b/dom/events/PointerEventHandler.h index 6f3301b0a25..57d0a03e4f0 100644 --- a/dom/events/PointerEventHandler.h +++ b/dom/events/PointerEventHandler.h @@ -52,15 +52,19 @@ class PointerInfo final { bool mPrimaryState; bool mFromTouchEvent; bool mPreventMouseEventByContent; + // Set to true if the pointer is activated only by synthesized mouse events. + bool mIsSynthesizedForTests; WeakPtr mActiveDocument; explicit PointerInfo(bool aActiveState, uint16_t aPointerType, bool aPrimaryState, bool aFromTouchEvent, - dom::Document* aActiveDocument) + dom::Document* aActiveDocument, + bool aIsSynthesizedForTests = false) : mPointerType(aPointerType), mActiveState(aActiveState), mPrimaryState(aPrimaryState), mFromTouchEvent(aFromTouchEvent), mPreventMouseEventByContent(false), + mIsSynthesizedForTests(aIsSynthesizedForTests), mActiveDocument(aActiveDocument) {} }; @@ -103,6 +107,8 @@ class PointerEventHandler final { // Return the PointerInfo if the pointer with aPointerId is situated in device // , nullptr otherwise. + // Note that the result may be activated only by synthesized events for test. + // If you don't want it, check PointerInfo::mIsSynthesizedForTests. static const PointerInfo* GetPointerInfo(uint32_t aPointerId); // CheckPointerCaptureState checks cases, when got/lostpointercapture events diff --git a/dom/html/HTMLDialogElement.cpp b/dom/html/HTMLDialogElement.cpp index cf92acc8f12..220102be58d 100644 --- a/dom/html/HTMLDialogElement.cpp +++ b/dom/html/HTMLDialogElement.cpp @@ -48,6 +48,7 @@ class DialogCloseWatcherListener : public nsIDOMEventListener { } } else if (eventType.EqualsLiteral("close")) { Optional retValue; + retValue = &dialog->RequestCloseReturnValue(); dialog->Close(retValue); } } @@ -104,35 +105,105 @@ void HTMLDialogElement::Close( } } +// https://html.spec.whatwg.org/#dom-dialog-requestclose +void HTMLDialogElement::RequestClose( + const mozilla::dom::Optional& aReturnValue) { + // 1. If this does not have an open attribute, then return. + if (!Open()) { + return; + } + + // 2. Assert: this's close watcher is not null. + // TODO(keithamus): RequestClose uses CloseWatcher's requestClose to dispatch + // cancel & close events, but there are also several issues with the spec + // which make it untenable to implement until they're resolved. Instead, we + // can use `RunCancelDialogSteps` to cause the same behaviour, but when + // https://github.com/whatwg/html/issues/11230 is resolved we will need to + // revisit this. + + // 3. Set dialog's enable close watcher for requestClose() to true. + // TODO(keithamus): CloseWatcher does not have this flag yet. + + // 4. If returnValue is not given, then set it to null. + // 5. Set this's request close return value to returnValue. + if (aReturnValue.WasPassed()) { + mRequestCloseReturnValue = aReturnValue.Value(); + } else { + mRequestCloseReturnValue.SetIsVoid(true); + } + + // 6. Request to close dialog's close watcher with false. + RunCancelDialogSteps(); + + // 7. Set dialog's enable close watcher for requestClose() to false. + // TODO(keithamus): CloseWatcher does not have this flag yet. +} + +// https://html.spec.whatwg.org/#dom-dialog-show void HTMLDialogElement::Show(ErrorResult& aError) { + + // 1. If this has an open attribute and is modal of this is false, then return. if (Open()) { if (!IsInTopLayer()) { return; } + + // 2. If this has an open attribute, then throw an "InvalidStateError" DOMException. return aError.ThrowInvalidStateError( "Cannot call show() on an open modal dialog."); } + // 3. If the result of firing an event named beforetoggle, using ToggleEvent, + // with the cancelable attribute initialized to true, the oldState attribute + // initialized to "closed", and the newState attribute initialized to "open" + // at this is false, then return. if (StaticPrefs::dom_element_dialog_toggle_events_enabled()) { if (FireToggleEvent(u"closed"_ns, u"open"_ns, u"beforetoggle"_ns)) { return; } + + // 4. If this has an open attribute, then return. if (Open()) { return; } + + // 5. Queue a dialog toggle event task given this, "closed", and "open". QueueToggleEventTask(); } + // 6. Add an open attribute to this, whose value is the empty string. SetOpen(true, IgnoreErrors()); + // 7. Assert: this's node document's open dialogs list does not contain this. + + // 8. Add this to this's node document's open dialogs list. + // TODO: This is part of dialog light dismiss (bug 1936940) + + // 9. Set the dialog close watcher with this. + if (StaticPrefs::dom_closewatcher_enabled()) { + SetDialogCloseWatcher(); + } + + // 10. Set this's previously focused element to the focused element. StorePreviouslyFocusedElement(); + // 11. Let document be this's node document. + + // 12. Let hideUntil be the result of running topmost popover ancestor given + // this, document's showing hint popover list, null, and false. RefPtr hideUntil = GetTopmostPopoverAncestor(nullptr, false); + + // 13. If hideUntil is null, then set hideUntil to the result of running + // topmost popover ancestor given this, document's showing auto popover list, + // null, and false. if (!hideUntil) { hideUntil = OwnerDoc(); } + // 14. If hideUntil is null, then set hideUntil to document. OwnerDoc()->HideAllPopoversUntil(*hideUntil, false, true); + + // 15. Run the dialog focusing steps given this. FocusDialog(); } @@ -181,64 +252,96 @@ void HTMLDialogElement::UnbindFromTree(UnbindContext& aContext) { nsGenericHTMLElement::UnbindFromTree(aContext); } +// https://html.spec.whatwg.org/#show-a-modal-dialog void HTMLDialogElement::ShowModal(ErrorResult& aError) { + + // 1. If subject has an open attribute and is modal of subject is true, then + // return. if (Open()) { if (IsInTopLayer()) { return; } + + // 2. If subject has an open attribute, then throw an "InvalidStateError" + // DOMException. return aError.ThrowInvalidStateError( "Cannot call showModal() on an open non-modal dialog."); } + // 3. If subject's node document is not fully active, then throw an + // "InvalidStateError" DOMException. + // 4. If subject is not connected, then throw an "InvalidStateError" DOMException. if (!IsInComposedDoc()) { return aError.ThrowInvalidStateError("Dialog element is not connected"); } + // 5. If subject is in the popover showing state, then throw an + // "InvalidStateError" DOMException. if (IsPopoverOpen()) { return aError.ThrowInvalidStateError( "Dialog element is already an open popover."); } if (StaticPrefs::dom_element_dialog_toggle_events_enabled()) { + // 6. If the result of firing an event named beforetoggle, using ToggleEvent, + // with the cancelable attribute initialized to true, the oldState attribute + // initialized to "closed", and the newState attribute initialized to "open" + // at subject is false, then return. if (FireToggleEvent(u"closed"_ns, u"open"_ns, u"beforetoggle"_ns)) { return; } + + // 7. If subject has an open attribute, then return. + // 8. If subject is not connected, then return. + // 9. If subject is in the popover showing state, then return. if (Open() || !IsInComposedDoc() || IsPopoverOpen()) { return; } + + // 10. Queue a dialog toggle event task given subject, "closed", and "open". QueueToggleEventTask(); } - AddToTopLayerIfNeeded(); + // 12. Set is modal of subject to true. + // 11. Add an open attribute to subject, whose value is the empty string. SetOpen(true, aError); - StorePreviouslyFocusedElement(); + // 13. Assert: subject's node document's open dialogs list does not contain + // subject. + // 14. Add subject to subject's node document's open dialogs list. + // 15. Let subject's node document be blocked by the modal dialog subject. + // TODO(https://bugzilla.mozilla.org/show_bug.cgi?id=1936940) + + // 16. If subject's node document's top layer does not already contain + // subject, then add an element to the top layer given subject. + AddToTopLayerIfNeeded(); if (StaticPrefs::dom_closewatcher_enabled()) { - RefPtr doc = OwnerDoc(); - if (doc->IsActive() && doc->IsCurrentActiveDocument()) { - if (RefPtr window = OwnerDoc()->GetInnerWindow()) { - mCloseWatcher = new CloseWatcher(window); - RefPtr eventListener = - new DialogCloseWatcherListener(this); - mCloseWatcher->AddSystemEventListener(u"cancel"_ns, eventListener, - false /* aUseCapture */, - false /* aWantsUntrusted */); - mCloseWatcher->AddSystemEventListener(u"close"_ns, eventListener, - false /* aUseCapture */, - false /* aWantsUntrusted */); - window->EnsureCloseWatcherManager()->Add(*mCloseWatcher); - } - } + // 17. Set the dialog close watcher with subject. + SetDialogCloseWatcher(); } + // 18. Set subject's previously focused element to the focused element. + StorePreviouslyFocusedElement(); + + // 19. Let document be subject's node document. + // 20. Let hideUntil be the result of running topmost popover ancestor given + // subject, document's showing hint popover list, null, and false. + // 21. If hideUntil is null, then set hideUntil to the result of running + // topmost popover ancestor given subject, document's showing auto popover + // list, null, and false. RefPtr hideUntil = GetTopmostPopoverAncestor(nullptr, false); + + // 22. If hideUntil is null, then set hideUntil to document. if (!hideUntil) { hideUntil = OwnerDoc(); } + // 23. Run hide all popovers until given hideUntil, false, and true. OwnerDoc()->HideAllPopoversUntil(*hideUntil, false, true); + + // 24. Run the dialog focusing steps given subject. FocusDialog(); aError.SuppressException(); @@ -302,9 +405,14 @@ void HTMLDialogElement::RunCancelDialogSteps() { &defaultAction); // 2) If close is true and dialog has an open attribute, then close the dialog - // with no return value. + // with ~~no return value.~~ + // XXX(keithamus): RequestClose's steps expect the return value to be + // RequestCloseReturnValue. RunCancelDialogSteps has been refactored out of + // the spec, over CloseWatcher though, so one day this code will need to be + // refactored when the CloseWatcher specifications settle. if (defaultAction) { Optional retValue; + retValue = &RequestCloseReturnValue(); Close(retValue); } } @@ -359,6 +467,43 @@ void HTMLDialogElement::QueueToggleEventTask() { mToggleEventDispatcher->PostDOMEvent(); } +// https://html.spec.whatwg.org/#set-the-dialog-close-watcher +void HTMLDialogElement::SetDialogCloseWatcher() { + MOZ_ASSERT(StaticPrefs::dom_closewatcher_enabled(), "CloseWatcher enabled"); + if (mCloseWatcher) { + return; + } + + RefPtr doc = OwnerDoc(); + RefPtr window = doc->GetInnerWindow(); + MOZ_ASSERT(window); + + // 1. Set dialog's close watcher to the result of establishing a close watcher + // given dialog's relevant global object, with: + mCloseWatcher = new CloseWatcher(window); + RefPtr eventListener = + new DialogCloseWatcherListener(this); + + // - cancelAction given canPreventClose being to return the result of firing + // an event named cancel at dialog, with the cancelable attribute initialized + // to canPreventClose. + mCloseWatcher->AddSystemEventListener(u"cancel"_ns, eventListener, + false /* aUseCapture */, + false /* aWantsUntrusted */); + + // - closeAction being to close the dialog given dialog and dialog's request close return value. + mCloseWatcher->AddSystemEventListener(u"close"_ns, eventListener, + false /* aUseCapture */, + false /* aWantsUntrusted */); + + // - getEnabledState being to return true if dialog's enable close watcher for + // requestClose() is true or dialog's computed closed-by state is not None; + // otherwise false. + // TODO: getEnabledState is not yet implemented. + + window->EnsureCloseWatcherManager()->Add(*mCloseWatcher); +} + JSObject* HTMLDialogElement::WrapNode(JSContext* aCx, JS::Handle aGivenProto) { return HTMLDialogElement_Binding::Wrap(aCx, this, aGivenProto); diff --git a/dom/html/HTMLDialogElement.h b/dom/html/HTMLDialogElement.h index 2d9efb66105..60305a0dfd4 100644 --- a/dom/html/HTMLDialogElement.h +++ b/dom/html/HTMLDialogElement.h @@ -36,10 +36,17 @@ class HTMLDialogElement final : public nsGenericHTMLElement { mReturnValue = aReturnValue; } + nsAString& RequestCloseReturnValue() { return mRequestCloseReturnValue; } + void SetRequestCloseReturnValue(const nsAString& aReturnValue) { + mRequestCloseReturnValue = aReturnValue; + } + void UnbindFromTree(UnbindContext&) override; MOZ_CAN_RUN_SCRIPT_BOUNDARY void Close( const mozilla::dom::Optional& aReturnValue); + MOZ_CAN_RUN_SCRIPT_BOUNDARY void RequestClose( + const mozilla::dom::Optional& aReturnValue); MOZ_CAN_RUN_SCRIPT void Show(ErrorResult& aError); MOZ_CAN_RUN_SCRIPT void ShowModal(ErrorResult& aError); @@ -63,6 +70,7 @@ class HTMLDialogElement final : public nsGenericHTMLElement { InvokeAction aAction, ErrorResult& aRv) override; + nsString mRequestCloseReturnValue; nsString mReturnValue; protected: @@ -75,6 +83,7 @@ class HTMLDialogElement final : public nsGenericHTMLElement { void RemoveFromTopLayerIfNeeded(); void StorePreviouslyFocusedElement(); MOZ_CAN_RUN_SCRIPT_BOUNDARY void QueueToggleEventTask(); + void SetDialogCloseWatcher(); nsWeakPtr mPreviouslyFocusedElement; diff --git a/dom/ipc/ContentChild.cpp b/dom/ipc/ContentChild.cpp index fecb9fd48a4..5bb45edaf37 100644 --- a/dom/ipc/ContentChild.cpp +++ b/dom/ipc/ContentChild.cpp @@ -17,7 +17,6 @@ #include "mozilla/AppShutdown.h" #include "mozilla/Attributes.h" #include "mozilla/BackgroundHangMonitor.h" -#include "mozilla/BenchmarkStorageChild.h" #include "mozilla/FOGIPC.h" #include "GMPServiceChild.h" #include "Geolocation.h" @@ -2008,16 +2007,6 @@ bool ContentChild::DeallocPMediaChild(media::PMediaChild* aActor) { return media::DeallocPMediaChild(aActor); } -PBenchmarkStorageChild* ContentChild::AllocPBenchmarkStorageChild() { - return BenchmarkStorageChild::Instance(); -} - -bool ContentChild::DeallocPBenchmarkStorageChild( - PBenchmarkStorageChild* aActor) { - delete aActor; - return true; -} - #ifdef MOZ_WEBRTC PWebrtcGlobalChild* ContentChild::AllocPWebrtcGlobalChild() { auto* child = new WebrtcGlobalChild(); diff --git a/dom/ipc/ContentChild.h b/dom/ipc/ContentChild.h index f3731b25380..6fce8f59c93 100644 --- a/dom/ipc/ContentChild.h +++ b/dom/ipc/ContentChild.h @@ -50,7 +50,6 @@ class nsIOpenWindowInfo; namespace mozilla { class RemoteSpellcheckEngineChild; class ChildProfilerController; -class BenchmarkStorageChild; namespace ipc { class UntypedEndpoint; @@ -232,10 +231,6 @@ class ContentChild final : public PContentChild, bool DeallocPMediaChild(PMediaChild* aActor); - PBenchmarkStorageChild* AllocPBenchmarkStorageChild(); - - bool DeallocPBenchmarkStorageChild(PBenchmarkStorageChild* aActor); - mozilla::ipc::IPCResult RecvNotifyEmptyHTTPCache(); mozilla::ipc::IPCResult RecvRegisterChrome( diff --git a/dom/ipc/ContentParent.cpp b/dom/ipc/ContentParent.cpp index 5ff2cf80f10..7ce3a391191 100644 --- a/dom/ipc/ContentParent.cpp +++ b/dom/ipc/ContentParent.cpp @@ -48,7 +48,6 @@ #include "mozilla/AutoRestore.h" #include "mozilla/ClipboardContentAnalysisParent.h" #include "mozilla/BasePrincipal.h" -#include "mozilla/BenchmarkStorageParent.h" #include "mozilla/Casting.h" #include "mozilla/ClearOnShutdown.h" #include "mozilla/ClipboardReadRequestParent.h" @@ -328,9 +327,6 @@ # include "nsIRemoteAgent.h" #endif -// For VP9Benchmark::sBenchmarkFpsPref -#include "Benchmark.h" - #include "mozilla/RemoteDecodeUtils.h" #include "nsIToolkitProfileService.h" #include "nsIToolkitProfile.h" @@ -4445,16 +4441,6 @@ bool ContentParent::DeallocPMediaParent(media::PMediaParent* aActor) { return media::DeallocPMediaParent(aActor); } -PBenchmarkStorageParent* ContentParent::AllocPBenchmarkStorageParent() { - return new BenchmarkStorageParent; -} - -bool ContentParent::DeallocPBenchmarkStorageParent( - PBenchmarkStorageParent* aActor) { - delete aActor; - return true; -} - #ifdef MOZ_WEBSPEECH already_AddRefed ContentParent::AllocPSpeechSynthesisParent() { @@ -5621,18 +5607,6 @@ mozilla::ipc::IPCResult ContentParent::RecvEndDriverCrashGuard( return IPC_OK(); } -mozilla::ipc::IPCResult ContentParent::RecvNotifyBenchmarkResult( - const nsAString& aCodecName, const uint32_t& aDecodeFPS) - -{ - if (aCodecName.EqualsLiteral("VP9")) { - Preferences::SetUint(VP9Benchmark::sBenchmarkFpsPref, aDecodeFPS); - Preferences::SetUint(VP9Benchmark::sBenchmarkFpsVersionCheck, - VP9Benchmark::sBenchmarkVersionID); - } - return IPC_OK(); -} - mozilla::ipc::IPCResult ContentParent::RecvNotifyPushObservers( const nsACString& aScope, nsIPrincipal* aPrincipal, const nsAString& aMessageId) { @@ -6197,6 +6171,22 @@ mozilla::ipc::IPCResult ContentParent::RecvRecordPageLoadEvent( mozilla::glean::perf::PageLoadExtra&& aPageLoadEventExtra) { // Check whether a webdriver is running. aPageLoadEventExtra.usingWebdriver = mozilla::Some(WebdriverRunning()); + +#if defined(XP_WIN) + // The "hasSSD" property is only set on Windows during the first + // call to nsISystemInfo.diskInfo - which is done before + // browser-startup-idle-tasks-finished + // Other platforms do not compute hasSSD, so there's no reason to + // query this on other platforms. + nsresult rv; + nsCOMPtr infoService = + mozilla::components::SystemInfo::Service(); + bool hasSSD; + rv = infoService->GetPropertyAsBool(u"hasSSD"_ns, &hasSSD); + if (NS_SUCCEEDED(rv)) { + aPageLoadEventExtra.hasSsd = Some(hasSSD); + } +#endif mozilla::glean::perf::page_load.Record(mozilla::Some(aPageLoadEventExtra)); // Send the PageLoadPing after every 30 page loads, or on startup. diff --git a/dom/ipc/ContentParent.h b/dom/ipc/ContentParent.h index 941f0e5714b..3dfd3f67cd8 100644 --- a/dom/ipc/ContentParent.h +++ b/dom/ipc/ContentParent.h @@ -80,7 +80,6 @@ class SandboxBrokerPolicyFactory; #endif class PreallocatedProcessManagerImpl; -class BenchmarkStorageParent; using mozilla::loader::PScriptCacheParent; @@ -951,10 +950,6 @@ class ContentParent final : public PContentParent, bool DeallocPMediaParent(PMediaParent* aActor); - PBenchmarkStorageParent* AllocPBenchmarkStorageParent(); - - bool DeallocPBenchmarkStorageParent(PBenchmarkStorageParent* aActor); - #ifdef MOZ_WEBSPEECH already_AddRefed AllocPSpeechSynthesisParent(); @@ -1152,9 +1147,6 @@ class ContentParent final : public PContentParent, mozilla::ipc::IPCResult RecvGetHyphDict( nsIURI* aURIParams, mozilla::ipc::ReadOnlySharedMemoryHandle* aOutHandle); - mozilla::ipc::IPCResult RecvNotifyBenchmarkResult(const nsAString& aCodecName, - const uint32_t& aDecodeFPS); - mozilla::ipc::IPCResult RecvNotifyPushObservers(const nsACString& aScope, nsIPrincipal* aPrincipal, const nsAString& aMessageId); diff --git a/dom/ipc/PContent.ipdl b/dom/ipc/PContent.ipdl index d5c2d21264f..5bc9d7b279f 100644 --- a/dom/ipc/PContent.ipdl +++ b/dom/ipc/PContent.ipdl @@ -47,7 +47,6 @@ include protocol PRemoteWorkerService; include protocol PProfiler; include protocol PScriptCache; include protocol PSessionStorageObserver; -include protocol PBenchmarkStorage; include CrashReporterInitArgs; include DOMTypes; include WindowGlobalTypes; @@ -508,7 +507,6 @@ sync protocol PContent manages PURLClassifierLocalByName; manages PScriptCache; manages PSessionStorageObserver; - manages PBenchmarkStorage; // Depending on exactly how the new browser is being created, it might be // created from either the child or parent process! @@ -1135,8 +1133,6 @@ parent: async PSessionStorageObserver(); - async PBenchmarkStorage(); - // Services remoting async StartVisitedQueries(nullable nsIURI[] uri); @@ -1550,12 +1546,6 @@ parent: bool aUserActivation, bool aTextDirectiveUserActivation); - /** - * Tell the parent that a decoder's' benchmark has been completed. - * The result can then be stored in permanent storage. - */ - async NotifyBenchmarkResult(nsString aCodecName, uint32_t aDecodeFPS); - /** * Notify `push-message` observers without data in the parent. */ diff --git a/dom/manifest/Manifest.sys.mjs b/dom/manifest/Manifest.sys.mjs index 88ed92be61a..48c2b47836c 100644 --- a/dom/manifest/Manifest.sys.mjs +++ b/dom/manifest/Manifest.sys.mjs @@ -44,10 +44,14 @@ function generateHash(aString, hashAlg) { } /** - * Trims the query parameters from a url + * Trims the query parameters from a uri. + * + * @param {nsIURI} uri + * + * @returns {string} The url as a string, without any query or hash/ref bits. */ -function stripQuery(url) { - return url.split("?")[0]; +function stripQuery(uri) { + return uri.mutate().setQuery("").setRef("").finalize().spec; } // Folder in which we store the manifest files @@ -158,7 +162,7 @@ class Manifest { get scope() { const scope = this._store.data.manifest.scope || this._store.data.manifest.start_url; - return stripQuery(scope); + return stripQuery(Services.io.newURI(scope)); } get name() { @@ -247,7 +251,7 @@ export var Manifests = { // url of the client and see if it matches the scope of any installed // manifests if (!manifestUrl) { - const url = stripQuery(browser.currentURI.spec); + const url = stripQuery(browser.currentURI); manifestUrl = this.findManifestUrl(url); } diff --git a/dom/media/Benchmark.cpp b/dom/media/Benchmark.cpp deleted file mode 100644 index f2818a82813..00000000000 --- a/dom/media/Benchmark.cpp +++ /dev/null @@ -1,394 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "Benchmark.h" - -#include "BufferMediaResource.h" -#include "MediaData.h" -#include "MediaDataDecoderProxy.h" -#include "PDMFactory.h" -#include "VideoUtils.h" -#include "WebMDemuxer.h" -#include "mozilla/AbstractThread.h" -#include "mozilla/Components.h" -#include "mozilla/Preferences.h" -#include "mozilla/SharedThreadPool.h" -#include "mozilla/StaticMutex.h" -#include "mozilla/StaticPrefs_media.h" -#include "mozilla/TaskQueue.h" -#include "mozilla/dom/ContentChild.h" -#include "mozilla/gfx/gfxVars.h" -#include "nsGkAtoms.h" -#include "nsIGfxInfo.h" - -#ifndef MOZ_WIDGET_ANDROID -# include "WebMSample.h" -#endif - -using namespace mozilla::gfx; - -namespace mozilla { - -// Update this version number to force re-running the benchmark. Such as when -// an improvement to FFVP9 or LIBVPX is deemed worthwhile. -const uint32_t VP9Benchmark::sBenchmarkVersionID = 5; - -const char* VP9Benchmark::sBenchmarkFpsPref = "media.benchmark.vp9.fps"; -const char* VP9Benchmark::sBenchmarkFpsVersionCheck = - "media.benchmark.vp9.versioncheck"; -bool VP9Benchmark::sHasRunTest = false; - -// static -bool VP9Benchmark::ShouldRun() { -#if defined(MOZ_WIDGET_ANDROID) - // Assume that the VP9 software decoder will always be too slow. - return false; -#else -# if defined(MOZ_APPLEMEDIA) - const nsCOMPtr gfxInfo = components::GfxInfo::Service(); - nsString vendorID, deviceID; - gfxInfo->GetAdapterVendorID(vendorID); - // We won't run the VP9 benchmark on mac using an Intel GPU as performance are - // poor, see bug 1404042. - if (vendorID.EqualsLiteral("0x8086")) { - return false; - } - // Fall Through -# endif - return true; -#endif -} - -// static -uint32_t VP9Benchmark::MediaBenchmarkVp9Fps() { - if (!ShouldRun()) { - return 0; - } - return StaticPrefs::media_benchmark_vp9_fps(); -} - -// static -bool VP9Benchmark::IsVP9DecodeFast(bool aDefault) { -#if defined(MOZ_WIDGET_ANDROID) - return false; -#else - if (!ShouldRun()) { - return false; - } - static StaticMutex sMutex MOZ_UNANNOTATED; - uint32_t decodeFps = StaticPrefs::media_benchmark_vp9_fps(); - uint32_t hadRecentUpdate = StaticPrefs::media_benchmark_vp9_versioncheck(); - bool needBenchmark; - { - StaticMutexAutoLock lock(sMutex); - needBenchmark = !sHasRunTest && - (decodeFps == 0 || hadRecentUpdate != sBenchmarkVersionID); - sHasRunTest = true; - } - - if (needBenchmark) { - RefPtr demuxer = new WebMDemuxer( - new BufferMediaResource(sWebMSample, sizeof(sWebMSample))); - RefPtr estimiser = new Benchmark( - demuxer, - {StaticPrefs::media_benchmark_frames(), // frames to measure - 1, // start benchmarking after decoding this frame. - 8, // loop after decoding that many frames. - TimeDuration::FromMilliseconds( - StaticPrefs::media_benchmark_timeout())}); - estimiser->Run()->Then( - AbstractThread::MainThread(), __func__, - [](uint32_t aDecodeFps) { - if (XRE_IsContentProcess()) { - dom::ContentChild* contentChild = dom::ContentChild::GetSingleton(); - if (contentChild) { - contentChild->SendNotifyBenchmarkResult(u"VP9"_ns, aDecodeFps); - } - } else { - Preferences::SetUint(sBenchmarkFpsPref, aDecodeFps); - Preferences::SetUint(sBenchmarkFpsVersionCheck, - sBenchmarkVersionID); - } - }, - []() {}); - } - - if (decodeFps == 0) { - return aDefault; - } - - return decodeFps >= StaticPrefs::media_benchmark_vp9_threshold(); -#endif -} - -Benchmark::Benchmark(MediaDataDemuxer* aDemuxer, const Parameters& aParameters) - : QueueObject( - TaskQueue::Create(GetMediaThreadPool(MediaThreadType::SUPERVISOR), - "Benchmark::QueueObject")), - mParameters(aParameters), - mPlaybackState(this, aDemuxer) { - MOZ_COUNT_CTOR(Benchmark); -} - -Benchmark::~Benchmark() { MOZ_COUNT_DTOR(Benchmark); } - -RefPtr Benchmark::Run() { - RefPtr self = this; - mKeepAliveUntilComplete = this; - return InvokeAsync(Thread(), __func__, [self] { - RefPtr p = self->mPromise.Ensure(__func__); - self->mPlaybackState.Dispatch(NS_NewRunnableFunction( - "Benchmark::Run", [self]() { self->mPlaybackState.DemuxSamples(); })); - return p; - }); -} - -void Benchmark::ReturnResult(uint32_t aDecodeFps) { - MOZ_ASSERT(OnThread()); - - mPromise.ResolveIfExists(aDecodeFps, __func__); -} - -void Benchmark::ReturnError(const MediaResult& aError) { - MOZ_ASSERT(OnThread()); - - mPromise.RejectIfExists(aError, __func__); -} - -void Benchmark::Dispose() { - MOZ_ASSERT(OnThread()); - - mKeepAliveUntilComplete = nullptr; -} - -void Benchmark::Init() { - MOZ_ASSERT(NS_IsMainThread()); - gfxVars::Initialize(); -} - -BenchmarkPlayback::BenchmarkPlayback(Benchmark* aGlobalState, - MediaDataDemuxer* aDemuxer) - : QueueObject( - TaskQueue::Create(GetMediaThreadPool(MediaThreadType::SUPERVISOR), - "BenchmarkPlayback::QueueObject")), - mGlobalState(aGlobalState), - mDecoderTaskQueue(TaskQueue::Create( - GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER), - "BenchmarkPlayback::mDecoderTaskQueue")), - mDemuxer(aDemuxer), - mSampleIndex(0), - mFrameCount(0), - mFinished(false), - mDrained(false) {} - -void BenchmarkPlayback::DemuxSamples() { - MOZ_ASSERT(OnThread()); - - RefPtr ref(mGlobalState); - mDemuxer->Init()->Then( - Thread(), __func__, - [this, ref](nsresult aResult) { - MOZ_ASSERT(OnThread()); - if (mDemuxer->GetNumberTracks(TrackInfo::kVideoTrack)) { - mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kVideoTrack, 0); - } else if (mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack)) { - mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kAudioTrack, 0); - } - if (!mTrackDemuxer) { - Error(MediaResult(NS_ERROR_FAILURE, "Can't create track demuxer")); - return; - } - DemuxNextSample(); - }, - [this, ref](const MediaResult& aError) { Error(aError); }); -} - -void BenchmarkPlayback::DemuxNextSample() { - MOZ_ASSERT(OnThread()); - - RefPtr ref(mGlobalState); - RefPtr promise = - mTrackDemuxer->GetSamples(); - promise->Then( - Thread(), __func__, - [this, ref](RefPtr aHolder) { - mSamples.AppendElements(aHolder->GetMovableSamples()); - if (ref->mParameters.mStopAtFrame && - mSamples.Length() == ref->mParameters.mStopAtFrame.ref()) { - InitDecoder(mTrackDemuxer->GetInfo()); - } else { - Dispatch( - NS_NewRunnableFunction("BenchmarkPlayback::DemuxNextSample", - [this, ref]() { DemuxNextSample(); })); - } - }, - [this, ref](const MediaResult& aError) { - switch (aError.Code()) { - case NS_ERROR_DOM_MEDIA_END_OF_STREAM: - InitDecoder(mTrackDemuxer->GetInfo()); - break; - default: - Error(aError); - break; - } - }); -} - -void BenchmarkPlayback::InitDecoder(UniquePtr&& aInfo) { - MOZ_ASSERT(OnThread()); - - if (!aInfo) { - Error(MediaResult(NS_ERROR_FAILURE, "Invalid TrackInfo")); - return; - } - - RefPtr platform = new PDMFactory(); - mInfo = std::move(aInfo); - RefPtr ref(mGlobalState); - platform->CreateDecoder(CreateDecoderParams{*mInfo}) - ->Then( - Thread(), __func__, - [this, ref](RefPtr&& aDecoder) { - mDecoder = new MediaDataDecoderProxy( - aDecoder.forget(), do_AddRef(mDecoderTaskQueue.get())); - mDecoder->Init()->Then( - Thread(), __func__, - [this, ref](TrackInfo::TrackType aTrackType) { - InputExhausted(); - }, - [this, ref](const MediaResult& aError) { Error(aError); }); - }, - [this, ref](const MediaResult& aError) { Error(aError); }); -} - -void BenchmarkPlayback::FinalizeShutdown() { - MOZ_ASSERT(OnThread()); - - MOZ_ASSERT(mFinished, "GlobalShutdown must have been run"); - MOZ_ASSERT(!mDecoder, "mDecoder must have been shutdown already"); - MOZ_ASSERT(!mDemuxer, "mDemuxer must have been shutdown already"); - MOZ_DIAGNOSTIC_ASSERT(mDecoderTaskQueue->IsEmpty()); - mDecoderTaskQueue = nullptr; - - RefPtr ref(mGlobalState); - ref->Thread()->Dispatch(NS_NewRunnableFunction( - "BenchmarkPlayback::FinalizeShutdown", [ref]() { ref->Dispose(); })); -} - -void BenchmarkPlayback::GlobalShutdown() { - MOZ_ASSERT(OnThread()); - - MOZ_ASSERT(!mFinished, "We've already shutdown"); - - mFinished = true; - - if (mTrackDemuxer) { - mTrackDemuxer->Reset(); - mTrackDemuxer->BreakCycles(); - mTrackDemuxer = nullptr; - } - mDemuxer = nullptr; - - if (mDecoder) { - RefPtr ref(mGlobalState); - mDecoder->Flush()->Then( - Thread(), __func__, - [ref, this]() { - mDecoder->Shutdown()->Then( - Thread(), __func__, [ref, this]() { FinalizeShutdown(); }, - []() { MOZ_CRASH("not reached"); }); - mDecoder = nullptr; - mInfo = nullptr; - }, - []() { MOZ_CRASH("not reached"); }); - } else { - FinalizeShutdown(); - } -} - -void BenchmarkPlayback::Output(MediaDataDecoder::DecodedData&& aResults) { - MOZ_ASSERT(OnThread()); - MOZ_ASSERT(!mFinished); - - RefPtr ref(mGlobalState); - mFrameCount += aResults.Length(); - if (!mDecodeStartTime && mFrameCount >= ref->mParameters.mStartupFrame) { - mDecodeStartTime = Some(TimeStamp::Now()); - } - TimeStamp now = TimeStamp::Now(); - uint32_t frames = mFrameCount - ref->mParameters.mStartupFrame; - TimeDuration elapsedTime = now - mDecodeStartTime.refOr(now); - if (((frames == ref->mParameters.mFramesToMeasure) && - mFrameCount > ref->mParameters.mStartupFrame && frames > 0) || - elapsedTime >= ref->mParameters.mTimeout || mDrained) { - uint32_t decodeFps = frames / elapsedTime.ToSeconds(); - GlobalShutdown(); - ref->Dispatch(NS_NewRunnableFunction( - "BenchmarkPlayback::Output", - [ref, decodeFps]() { ref->ReturnResult(decodeFps); })); - } -} - -void BenchmarkPlayback::Error(const MediaResult& aError) { - MOZ_ASSERT(OnThread()); - - RefPtr ref(mGlobalState); - GlobalShutdown(); - ref->Dispatch( - NS_NewRunnableFunction("BenchmarkPlayback::Error", - [ref, aError]() { ref->ReturnError(aError); })); -} - -void BenchmarkPlayback::InputExhausted() { - MOZ_ASSERT(OnThread()); - MOZ_ASSERT(!mFinished); - - if (mSampleIndex >= mSamples.Length()) { - Error(MediaResult(NS_ERROR_FAILURE, "Nothing left to decode")); - return; - } - - RefPtr sample = mSamples[mSampleIndex]; - RefPtr ref(mGlobalState); - RefPtr p = mDecoder->Decode(sample); - - mSampleIndex++; - if (mSampleIndex == mSamples.Length() && !ref->mParameters.mStopAtFrame) { - // Complete current frame decode then drain if still necessary. - p->Then( - Thread(), __func__, - [ref, this](MediaDataDecoder::DecodedData&& aResults) { - Output(std::move(aResults)); - if (!mFinished) { - mDecoder->Drain()->Then( - Thread(), __func__, - [ref, this](MediaDataDecoder::DecodedData&& aResults) { - mDrained = true; - Output(std::move(aResults)); - MOZ_ASSERT(mFinished, "We must be done now"); - }, - [ref, this](const MediaResult& aError) { Error(aError); }); - } - }, - [ref, this](const MediaResult& aError) { Error(aError); }); - } else { - if (mSampleIndex == mSamples.Length() && ref->mParameters.mStopAtFrame) { - mSampleIndex = 0; - } - // Continue decoding - p->Then( - Thread(), __func__, - [ref, this](MediaDataDecoder::DecodedData&& aResults) { - Output(std::move(aResults)); - if (!mFinished) { - InputExhausted(); - } - }, - [ref, this](const MediaResult& aError) { Error(aError); }); - } -} - -} // namespace mozilla diff --git a/dom/media/Benchmark.h b/dom/media/Benchmark.h deleted file mode 100644 index b76942edc57..00000000000 --- a/dom/media/Benchmark.h +++ /dev/null @@ -1,119 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef MOZILLA_BENCHMARK_H -#define MOZILLA_BENCHMARK_H - -#include "MediaDataDemuxer.h" -#include "PlatformDecoderModule.h" -#include "QueueObject.h" -#include "mozilla/Maybe.h" -#include "mozilla/RefPtr.h" -#include "mozilla/TimeStamp.h" -#include "mozilla/UniquePtr.h" -#include "nsCOMPtr.h" - -namespace mozilla { - -class TaskQueue; -class Benchmark; - -class BenchmarkPlayback : public QueueObject { - friend class Benchmark; - BenchmarkPlayback(Benchmark* aGlobalState, MediaDataDemuxer* aDemuxer); - void DemuxSamples(); - void DemuxNextSample(); - void GlobalShutdown(); - void InitDecoder(UniquePtr&& aInfo); - - void Output(MediaDataDecoder::DecodedData&& aResults); - void Error(const MediaResult& aError); - void InputExhausted(); - - // Shutdown trackdemuxer and demuxer if any and shutdown the task queues. - void FinalizeShutdown(); - - Atomic mGlobalState; - - RefPtr mDecoderTaskQueue; - RefPtr mDecoder; - - // Object only accessed on Thread() - RefPtr mDemuxer; - RefPtr mTrackDemuxer; - nsTArray> mSamples; - UniquePtr mInfo; - size_t mSampleIndex; - Maybe mDecodeStartTime; - uint32_t mFrameCount; - bool mFinished; - bool mDrained; -}; - -// Init() must have been called at least once prior on the -// main thread. -class Benchmark : public QueueObject { - public: - NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Benchmark) - - struct Parameters { - Parameters() - : mFramesToMeasure(UINT32_MAX), - mStartupFrame(1), - mTimeout(TimeDuration::Forever()) {} - - Parameters(uint32_t aFramesToMeasure, uint32_t aStartupFrame, - uint32_t aStopAtFrame, const TimeDuration& aTimeout) - : mFramesToMeasure(aFramesToMeasure), - mStartupFrame(aStartupFrame), - mStopAtFrame(Some(aStopAtFrame)), - mTimeout(aTimeout) {} - - const uint32_t mFramesToMeasure; - const uint32_t mStartupFrame; - const Maybe mStopAtFrame; - const TimeDuration mTimeout; - }; - - typedef MozPromise - BenchmarkPromise; - - explicit Benchmark(MediaDataDemuxer* aDemuxer, - const Parameters& aParameters = Parameters()); - RefPtr Run(); - - // Must be called on the main thread. - static void Init(); - - private: - friend class BenchmarkPlayback; - virtual ~Benchmark(); - void ReturnResult(uint32_t aDecodeFps); - void ReturnError(const MediaResult& aError); - void Dispose(); - const Parameters mParameters; - RefPtr mKeepAliveUntilComplete; - BenchmarkPlayback mPlaybackState; - MozPromiseHolder mPromise; -}; - -class VP9Benchmark { - public: - static bool IsVP9DecodeFast(bool aDefault = false); - static const char* sBenchmarkFpsPref; - static const char* sBenchmarkFpsVersionCheck; - static const uint32_t sBenchmarkVersionID; - static bool sHasRunTest; - // Return the value of media.benchmark.vp9.fps preference (which will be 0 if - // not known) - static uint32_t MediaBenchmarkVp9Fps(); - - private: - static bool ShouldRun(); -}; -} // namespace mozilla - -#endif diff --git a/dom/media/MediaDecoder.cpp b/dom/media/MediaDecoder.cpp index c850ab780bf..03b37de83c2 100644 --- a/dom/media/MediaDecoder.cpp +++ b/dom/media/MediaDecoder.cpp @@ -12,7 +12,6 @@ #include "AudioDeviceInfo.h" #include "DOMMediaStream.h" -#include "DecoderBenchmark.h" #include "ImageContainer.h" #include "MediaDecoderStateMachineBase.h" #include "MediaFormatReader.h" @@ -239,7 +238,6 @@ MediaDecoder::MediaDecoder(MediaDecoderInit& aInit) mOwner(aInit.mOwner), mAbstractMainThread(aInit.mOwner->AbstractMainThread()), mFrameStats(new FrameStatistics()), - mDecoderBenchmark(new DecoderBenchmark()), mVideoFrameContainer(aInit.mOwner->GetVideoFrameContainer()), mMinimizePreroll(aInit.mMinimizePreroll), mFiredMetadataLoaded(false), @@ -546,29 +544,6 @@ void MediaDecoder::OnSecondaryVideoContainerInstalled( GetOwner()->OnSecondaryVideoContainerInstalled(aSecondaryVideoContainer); } -void MediaDecoder::OnStoreDecoderBenchmark(const VideoInfo& aInfo) { - MOZ_ASSERT(NS_IsMainThread()); - - int32_t videoFrameRate = aInfo.GetFrameRate().ref(); - - if (mFrameStats && videoFrameRate) { - DecoderBenchmarkInfo benchmarkInfo{ - aInfo.mMimeType, - aInfo.mDisplay.width, - aInfo.mDisplay.height, - videoFrameRate, - BitDepthForColorDepth(aInfo.mColorDepth), - }; - - LOG("Store benchmark: Video width=%d, height=%d, frameRate=%d, content " - "type = %s\n", - benchmarkInfo.mWidth, benchmarkInfo.mHeight, benchmarkInfo.mFrameRate, - benchmarkInfo.mContentType.BeginReading()); - - mDecoderBenchmark->Store(benchmarkInfo, mFrameStats); - } -} - void MediaDecoder::ShutdownInternal() { MOZ_ASSERT(NS_IsMainThread()); mVideoFrameContainer = nullptr; @@ -630,9 +605,6 @@ void MediaDecoder::SetStateMachineParameters() { mDecoderStateMachine->OnSecondaryVideoContainerInstalled().Connect( mAbstractMainThread, this, &MediaDecoder::OnSecondaryVideoContainerInstalled); - mOnStoreDecoderBenchmark = mReader->OnStoreDecoderBenchmark().Connect( - mAbstractMainThread, this, &MediaDecoder::OnStoreDecoderBenchmark); - mOnEncrypted = mReader->OnEncrypted().Connect( mAbstractMainThread, GetOwner(), &MediaDecoderOwner::DispatchEncrypted); mOnWaitingForKey = mReader->OnWaitingForKey().Connect( @@ -656,7 +628,6 @@ void MediaDecoder::DisconnectEvents() { mOnNextFrameStatus.Disconnect(); mOnTrackInfoUpdated.Disconnect(); mOnSecondaryVideoContainerInstalled.Disconnect(); - mOnStoreDecoderBenchmark.Disconnect(); } RefPtr MediaDecoder::ShutdownStateMachine() { diff --git a/dom/media/MediaDecoder.h b/dom/media/MediaDecoder.h index 1e42da8e30f..3e0c466100b 100644 --- a/dom/media/MediaDecoder.h +++ b/dom/media/MediaDecoder.h @@ -39,7 +39,6 @@ namespace mozilla { class AbstractThread; class DOMMediaStream; -class DecoderBenchmark; class ProcessedMediaTrack; class FrameStatistics; class VideoFrameContainer; @@ -562,8 +561,6 @@ class MediaDecoder : public DecoderDoctorLifeLogger { void OnSecondaryVideoContainerInstalled( const RefPtr& aSecondaryVideoContainer); - void OnStoreDecoderBenchmark(const VideoInfo& aInfo); - void FinishShutdown(); void ConnectMirrors(MediaDecoderStateMachineBase* aObject); @@ -607,9 +604,6 @@ class MediaDecoder : public DecoderDoctorLifeLogger { // Counters related to decode and presentation of frames. const RefPtr mFrameStats; - // Store a benchmark of the decoder based on FrameStatistics. - RefPtr mDecoderBenchmark; - RefPtr mVideoFrameContainer; // True if the decoder has been directed to minimize its preroll before @@ -674,7 +668,6 @@ class MediaDecoder : public DecoderDoctorLifeLogger { MediaEventListener mOnNextFrameStatus; MediaEventListener mOnTrackInfoUpdated; MediaEventListener mOnSecondaryVideoContainerInstalled; - MediaEventListener mOnStoreDecoderBenchmark; // True if we have suspended video decoding. bool mIsVideoDecodingSuspended = false; diff --git a/dom/media/MediaFormatReader.cpp b/dom/media/MediaFormatReader.cpp index 39f59755fef..3bf83e7be85 100644 --- a/dom/media/MediaFormatReader.cpp +++ b/dom/media/MediaFormatReader.cpp @@ -14,7 +14,6 @@ #ifdef MOZ_AV1 # include "AOMDecoder.h" #endif -#include "DecoderBenchmark.h" #include "MediaData.h" #include "MediaDataDecoderProxy.h" #include "MediaInfo.h" @@ -483,10 +482,6 @@ void MediaFormatReader::DecoderFactory::DoInitDecoder(Data& aData) { ownerData.mDecoder.get()); mOwner->SetVideoDecodeThreshold(); mOwner->ScheduleUpdate(aTrack); - if (aTrack == TrackInfo::kVideoTrack) { - DecoderBenchmark::CheckVersion( - ownerData.GetCurrentInfo()->mMimeType); - } if (aTrack == TrackInfo::kAudioTrack) { ownerData.mProcessName = ownerData.mDecoder->GetProcessName(); ownerData.mCodecName = ownerData.mDecoder->GetCodecName(); @@ -1021,19 +1016,6 @@ void MediaFormatReader::ShutdownDecoder(TrackType aTrack) { decoder.ShutdownDecoder(); } -void MediaFormatReader::NotifyDecoderBenchmarkStore() { - MOZ_ASSERT(OnTaskQueue()); - if (!StaticPrefs::media_mediacapabilities_from_database()) { - return; - } - auto& decoder = GetDecoderData(TrackInfo::kVideoTrack); - if (decoder.GetCurrentInfo() && decoder.GetCurrentInfo()->GetAsVideoInfo()) { - VideoInfo info = *(decoder.GetCurrentInfo()->GetAsVideoInfo()); - info.SetFrameRate(static_cast(ceil(decoder.mMeanRate.Mean()))); - mOnStoreDecoderBenchmark.Notify(std::move(info)); - } -} - void MediaFormatReader::NotifyTrackInfoUpdated() { MOZ_ASSERT(OnTaskQueue()); if (mWorkingInfoChanged) { @@ -2200,11 +2182,6 @@ void MediaFormatReader::HandleDemuxedSamples( PROFILER_MARKER_TEXT("StreamID Change", MEDIA_PLAYBACK, {}, markerString); LOG("%s", markerString.get()); - if (aTrack == TrackInfo::kVideoTrack) { - // We are about to create a new decoder thus the benchmark, - // up to this point, is stored. - NotifyDecoderBenchmarkStore(); - } decoder.mNextStreamSourceID.reset(); decoder.mLastStreamSourceID = info->GetID(); decoder.mInfo = info; @@ -2500,10 +2477,6 @@ void MediaFormatReader::Update(TrackType aTrack) { } else if (decoder.HasCompletedDrain()) { if (decoder.mDemuxEOS) { LOG("Rejecting %s promise: EOS", TrackTypeToStr(aTrack)); - if (aTrack == TrackInfo::kVideoTrack) { - // End of video, store the benchmark of the decoder. - NotifyDecoderBenchmarkStore(); - } decoder.RejectPromise(NS_ERROR_DOM_MEDIA_END_OF_STREAM, __func__); } else if (decoder.mWaitingForDataStartTime) { if (decoder.mDrainState == DrainState::DrainCompleted && diff --git a/dom/media/MediaFormatReader.h b/dom/media/MediaFormatReader.h index e0a82b1731f..4c9bac5f23c 100644 --- a/dom/media/MediaFormatReader.h +++ b/dom/media/MediaFormatReader.h @@ -250,10 +250,6 @@ class MediaFormatReader final MediaEventSource& OnDecodeWarning() { return mOnDecodeWarning; } - MediaEventSource& OnStoreDecoderBenchmark() { - return mOnStoreDecoderBenchmark; - } - MediaEventProducer& OnTrackInfoUpdatedEvent() { return mTrackInfoUpdatedEvent; } @@ -346,11 +342,6 @@ class MediaFormatReader final size_t SizeOfQueue(TrackType aTrack); - // Fire a new OnStoreDecoderBenchmark event that will create new - // storage of the decoder benchmark. - // This is called only on TaskQueue. - void NotifyDecoderBenchmarkStore(); - void NotifyTrackInfoUpdated(); enum class DrainState { @@ -879,8 +870,6 @@ class MediaFormatReader final MediaEventProducer mOnDecodeWarning; - MediaEventProducer mOnStoreDecoderBenchmark; - MediaEventProducer mTrackInfoUpdatedEvent; RefPtr mFrameStats; diff --git a/dom/media/WebMSample.h b/dom/media/WebMSample.h deleted file mode 100644 index ab06e7a68db..00000000000 --- a/dom/media/WebMSample.h +++ /dev/null @@ -1,22788 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -static const uint8_t sWebMSample[] = { - 0x1a, 0x45, 0xdf, 0xa3, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, - 0x42, 0x86, 0x81, 0x01, 0x42, 0xf7, 0x81, 0x01, 0x42, 0xf2, 0x81, 0x04, - 0x42, 0xf3, 0x81, 0x08, 0x42, 0x82, 0x84, 0x77, 0x65, 0x62, 0x6d, 0x42, - 0x87, 0x81, 0x02, 0x42, 0x85, 0x81, 0x02, 0x18, 0x53, 0x80, 0x67, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x04, 0x2b, 0x9e, 0x11, 0x4d, 0x9b, 0x74, 0x40, - 0x2d, 0x4d, 0xbb, 0x8b, 0x53, 0xab, 0x84, 0x15, 0x49, 0xa9, 0x66, 0x53, - 0xac, 0x81, 0xdf, 0x4d, 0xbb, 0x8c, 0x53, 0xab, 0x84, 0x16, 0x54, 0xae, - 0x6b, 0x53, 0xac, 0x82, 0x01, 0x54, 0x4d, 0xbb, 0x8d, 0x53, 0xab, 0x84, - 0x1c, 0x53, 0xbb, 0x6b, 0x53, 0xac, 0x83, 0x04, 0x2b, 0x81, 0xec, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x15, 0x49, 0xa9, 0x66, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x69, 0x2a, 0xd7, 0xb1, 0x83, 0x0f, 0x42, 0x40, 0x7b, 0xa9, 0xa1, - 0x42, 0x69, 0x67, 0x20, 0x42, 0x75, 0x63, 0x6b, 0x20, 0x42, 0x75, 0x6e, - 0x6e, 0x79, 0x2c, 0x20, 0x53, 0x75, 0x6e, 0x66, 0x6c, 0x6f, 0x77, 0x65, - 0x72, 0x20, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x4d, 0x80, 0x8d, - 0x4c, 0x61, 0x76, 0x66, 0x35, 0x36, 0x2e, 0x33, 0x36, 0x2e, 0x31, 0x30, - 0x30, 0x57, 0x41, 0x8d, 0x4c, 0x61, 0x76, 0x66, 0x35, 0x36, 0x2e, 0x33, - 0x36, 0x2e, 0x31, 0x30, 0x30, 0x73, 0xa4, 0x90, 0xbc, 0x12, 0x68, 0xf6, - 0x3b, 0xee, 0xc2, 0x39, 0xb9, 0xe1, 0x53, 0xda, 0x25, 0xda, 0xfc, 0x3d, - 0x44, 0x89, 0x88, 0x40, 0x6e, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x16, - 0x54, 0xae, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0xae, - 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3e, 0xd7, 0x81, 0x01, 0x73, - 0xc5, 0x81, 0x01, 0x9c, 0x81, 0x00, 0x22, 0xb5, 0x9c, 0x83, 0x75, 0x6e, - 0x64, 0x86, 0x85, 0x56, 0x5f, 0x56, 0x50, 0x39, 0x83, 0x81, 0x01, 0x23, - 0xe3, 0x83, 0x84, 0x01, 0xfc, 0xa0, 0x55, 0xe0, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x12, 0xb0, 0x82, 0x05, 0x00, 0xba, 0x82, 0x02, 0xd0, - 0x54, 0xb0, 0x82, 0x05, 0x00, 0x54, 0xba, 0x82, 0x02, 0xd0, 0x1f, 0x43, - 0xb6, 0x75, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x29, 0xce, 0xe7, 0x81, - 0x0e, 0xa3, 0x22, 0xf7, 0x4e, 0x81, 0x00, 0x00, 0x80, 0x82, 0x49, 0x83, - 0x42, 0x00, 0x4f, 0xf0, 0x2c, 0xf6, 0x00, 0x38, 0x24, 0x1c, 0x18, 0x30, - 0x18, 0x06, 0x2c, 0x7f, 0xf9, 0xaf, 0xf9, 0x5f, 0xa0, 0xff, 0x33, 0xf4, - 0x7d, 0x1f, 0xa6, 0xf6, 0x9f, 0xcd, 0xfe, 0xf7, 0xfd, 0xe7, 0xf5, 0xff, - 0xaf, 0xff, 0x17, 0xf1, 0x3f, 0xe4, 0x3f, 0xc1, 0xff, 0x7b, 0xfe, 0x33, - 0xed, 0x9f, 0xf8, 0x1f, 0xe4, 0xff, 0x33, 0xfd, 0xef, 0xab, 0xff, 0x07, - 0xe9, 0xbd, 0xda, 0xff, 0x89, 0xfe, 0x6f, 0xf4, 0xff, 0xe3, 0x3f, 0x07, - 0xe2, 0xff, 0x81, 0xfc, 0x1f, 0xe9, 0xff, 0xb3, 0xf6, 0x87, 0xf9, 0x5e, - 0x63, 0x7f, 0x3f, 0xfa, 0x5f, 0xdb, 0xfd, 0xff, 0xec, 0x7e, 0x0f, 0xf0, - 0xff, 0xc9, 0xfe, 0x8f, 0xed, 0xfe, 0x6e, 0xae, 0xfa, 0xdf, 0xb4, 0x3f, - 0x9b, 0xba, 0x35, 0xc2, 0xfa, 0xd1, 0xfb, 0x19, 0xf0, 0x7f, 0xdf, 0xff, - 0x23, 0xfd, 0xff, 0xf2, 0x3f, 0xc8, 0xff, 0x89, 0xf8, 0x7f, 0xe7, 0xff, - 0x91, 0xf8, 0xfe, 0xc5, 0xff, 0x57, 0xec, 0x5f, 0xc5, 0xfe, 0x17, 0x1b, - 0x9f, 0x5f, 0xfe, 0x7f, 0xf8, 0x1f, 0xdf, 0x98, 0xb6, 0x17, 0x3c, 0x77, - 0xbb, 0x18, 0xa3, 0xd2, 0xf6, 0x42, 0x27, 0xdc, 0xf8, 0x07, 0xe1, 0xfe, - 0xa9, 0xfd, 0x11, 0xd3, 0xbd, 0xbf, 0xa8, 0xf5, 0xdf, 0xd7, 0xdc, 0xda, - 0x1d, 0x23, 0xf8, 0x1c, 0xc9, 0xde, 0xff, 0xbf, 0x74, 0xef, 0xea, 0x6e, - 0x91, 0xea, 0xfc, 0x60, 0xf5, 0x1c, 0xb3, 0x72, 0x4f, 0x92, 0xde, 0xaf, - 0xc9, 0x0f, 0xe1, 0x3c, 0x6c, 0xf5, 0x7e, 0x28, 0xff, 0x1b, 0x58, 0xbe, - 0xf7, 0xf4, 0x8f, 0x17, 0x7f, 0x6f, 0xf2, 0x07, 0xd5, 0xf8, 0xb5, 0xfa, - 0xd4, 0x81, 0xfa, 0x5f, 0x4b, 0xf7, 0x5f, 0xc6, 0xfe, 0xfd, 0xe4, 0x6f, - 0xe9, 0xec, 0xa5, 0xf7, 0x45, 0xfe, 0x47, 0xdc, 0x8f, 0xc3, 0xf8, 0xdf, - 0xef, 0x7a, 0x2d, 0x07, 0x74, 0x5a, 0xd7, 0x23, 0x36, 0x6f, 0x1d, 0x21, - 0xe5, 0xad, 0x91, 0x97, 0x3d, 0x6b, 0xe2, 0xa7, 0xa8, 0x96, 0x9b, 0xbb, - 0x96, 0x0b, 0xa3, 0xbc, 0x77, 0x47, 0x27, 0xc3, 0x39, 0xfc, 0xb7, 0x34, - 0x76, 0xe8, 0xe4, 0xfc, 0xdb, 0xff, 0x8a, 0xe9, 0x1f, 0xd4, 0x1d, 0x23, - 0xf9, 0xcf, 0x1b, 0x3d, 0x45, 0x41, 0xfe, 0x9d, 0xd1, 0x7f, 0x7e, 0xf2, - 0x37, 0xf9, 0xff, 0x18, 0x3f, 0x60, 0xbf, 0xb7, 0x40, 0x7e, 0xaf, 0xbe, - 0xc7, 0xe2, 0xfb, 0x9c, 0xf9, 0x1f, 0xa7, 0xf7, 0x7c, 0x7f, 0xcd, 0xfa, - 0x35, 0x35, 0xba, 0xfa, 0x3d, 0x4d, 0xfe, 0xdf, 0x2c, 0x1f, 0x1c, 0xe7, - 0xba, 0xfd, 0x33, 0xa4, 0x7b, 0xbd, 0xed, 0xbe, 0xa7, 0xd5, 0xfb, 0xd0, - 0x7b, 0xbd, 0xee, 0x67, 0x84, 0xec, 0x79, 0xef, 0x71, 0x8d, 0xed, 0xbe, - 0xe2, 0xf9, 0x47, 0xf4, 0x7f, 0x67, 0xf2, 0x7f, 0x9b, 0xfe, 0x8f, 0xc2, - 0xff, 0x5f, 0xeb, 0x7f, 0xc5, 0xea, 0x92, 0x55, 0x9b, 0xd2, 0xf7, 0x29, - 0xd6, 0xf1, 0xba, 0x2c, 0x39, 0x7a, 0x8f, 0x15, 0x3f, 0x58, 0x60, 0xe0, - 0x80, 0x00, 0x00, 0x00, 0xdb, 0xb2, 0x7f, 0x94, 0x28, 0xff, 0x8e, 0x3f, - 0xae, 0x8d, 0x9d, 0xf1, 0xce, 0x16, 0xb8, 0x14, 0x58, 0xd4, 0xcb, 0x27, - 0x3d, 0xc0, 0x71, 0x82, 0x61, 0xbe, 0xc3, 0xfa, 0xf3, 0x89, 0x79, 0x80, - 0x4c, 0x6a, 0x99, 0x53, 0xe2, 0x4e, 0xfa, 0x2c, 0xb8, 0x37, 0xff, 0xea, - 0xbc, 0xbd, 0xc2, 0xf8, 0x2c, 0xa6, 0x8f, 0xff, 0xa5, 0x21, 0x68, 0x67, - 0xbe, 0x10, 0x15, 0x6e, 0xfb, 0xae, 0xb7, 0x1a, 0x30, 0x12, 0x8d, 0x4a, - 0x0a, 0x4a, 0x47, 0xe4, 0xab, 0xd6, 0x8a, 0x35, 0x53, 0x4e, 0x82, 0xee, - 0x7c, 0x69, 0x0c, 0x65, 0x80, 0x59, 0x29, 0xbc, 0xd3, 0xdf, 0x20, 0xf6, - 0xa0, 0x8e, 0xfa, 0xb4, 0xea, 0xf4, 0x4c, 0x3d, 0x8f, 0x61, 0x8d, 0x35, - 0x05, 0x82, 0xe0, 0xfc, 0xc0, 0xec, 0x7e, 0x09, 0x52, 0xe0, 0xf4, 0xa8, - 0x48, 0xa8, 0x71, 0x8b, 0x0a, 0xcd, 0xa6, 0x7d, 0x9e, 0x44, 0x13, 0x34, - 0xb7, 0xd7, 0xdf, 0x22, 0xdf, 0xd0, 0xbc, 0xc1, 0x9c, 0xe0, 0x0e, 0x47, - 0x60, 0x9e, 0xce, 0x97, 0x48, 0x7c, 0x8a, 0x14, 0x3e, 0xa9, 0x17, 0xf6, - 0xc6, 0xf9, 0x3e, 0x3d, 0x3a, 0x32, 0xc6, 0x95, 0x35, 0x05, 0x61, 0x59, - 0xad, 0x7b, 0x30, 0xe8, 0xff, 0xbf, 0x1b, 0x81, 0x99, 0xd7, 0xc6, 0xb8, - 0x67, 0x9b, 0x50, 0x4e, 0xb3, 0xfc, 0x7c, 0x94, 0xc4, 0xa8, 0x92, 0x2b, - 0x43, 0x65, 0x01, 0xbb, 0xce, 0x6e, 0x2d, 0x82, 0xcd, 0x65, 0x6d, 0x16, - 0x70, 0x7c, 0x9a, 0xd0, 0xac, 0x7c, 0x56, 0xce, 0x10, 0xd3, 0x2f, 0x2a, - 0xc5, 0xc5, 0xcb, 0x3d, 0x40, 0x6b, 0x88, 0x35, 0x69, 0x8e, 0xaf, 0x61, - 0x73, 0x2c, 0xfa, 0x36, 0xa5, 0x2f, 0x75, 0xc2, 0x65, 0x37, 0x36, 0x05, - 0x08, 0x17, 0xec, 0x4a, 0x27, 0x81, 0xdf, 0x27, 0xdd, 0x7a, 0xa9, 0x45, - 0xc3, 0xa1, 0xb3, 0xa9, 0x69, 0xb2, 0x25, 0xf9, 0x5d, 0x49, 0xde, 0xf3, - 0xd6, 0x04, 0x0b, 0x8b, 0xde, 0x99, 0x6f, 0x93, 0x2d, 0x99, 0x08, 0x73, - 0x6b, 0x69, 0xbf, 0x70, 0x8b, 0x93, 0x1b, 0x78, 0x27, 0xcd, 0x62, 0xb8, - 0xff, 0x99, 0xa8, 0xdf, 0xc0, 0x89, 0xd1, 0xd9, 0x1a, 0x08, 0xb2, 0xf3, - 0x70, 0xef, 0xc6, 0xf3, 0xdc, 0xd3, 0xc4, 0x1e, 0x03, 0x38, 0xfe, 0xf0, - 0x82, 0x41, 0xe5, 0x9f, 0xee, 0xd4, 0xd6, 0x87, 0x95, 0x08, 0xec, 0x01, - 0x5d, 0x58, 0x07, 0x84, 0x9a, 0x78, 0x40, 0xa9, 0x44, 0x3b, 0x25, 0xf0, - 0xd6, 0x74, 0x66, 0xf5, 0x36, 0x9e, 0x33, 0x3d, 0x1d, 0xc4, 0x00, 0x7e, - 0x2a, 0x02, 0xd4, 0xc3, 0xfd, 0xfc, 0x09, 0x8f, 0x89, 0x04, 0x3d, 0xe0, - 0x34, 0x03, 0x9d, 0x7a, 0x68, 0x4e, 0x87, 0xbf, 0x19, 0x4f, 0x3f, 0x48, - 0xb2, 0xf7, 0x54, 0xc6, 0xc3, 0xe8, 0x9d, 0xc8, 0xf1, 0x05, 0x9c, 0x22, - 0xac, 0x43, 0xac, 0x0e, 0x34, 0x0e, 0x86, 0x8f, 0xfe, 0xdf, 0xde, 0x7d, - 0xb8, 0xe3, 0x7b, 0x28, 0x41, 0xa0, 0x4a, 0x62, 0x84, 0x4e, 0xe2, 0xa8, - 0x13, 0x0c, 0x74, 0x41, 0xe0, 0x52, 0xdc, 0x70, 0xc2, 0x43, 0xea, 0xc5, - 0xf6, 0xac, 0x67, 0xa2, 0x75, 0x59, 0x35, 0x4b, 0xda, 0xd9, 0x46, 0x82, - 0x6c, 0x56, 0xe9, 0x7f, 0x69, 0xdb, 0xf4, 0x7c, 0xf4, 0x61, 0x04, 0x84, - 0xc7, 0x5d, 0x6d, 0xbb, 0x75, 0x0a, 0xb6, 0x33, 0xe6, 0x04, 0x18, 0x41, - 0x9d, 0x30, 0x17, 0xd3, 0x8f, 0x01, 0x1d, 0xb1, 0xa7, 0x7e, 0x14, 0x6b, - 0x81, 0x51, 0xbe, 0x30, 0xfa, 0x79, 0x45, 0x8e, 0x87, 0x5f, 0x9e, 0x42, - 0xdd, 0x57, 0x6e, 0x7f, 0xb9, 0x8f, 0x54, 0xd3, 0x15, 0x78, 0xf5, 0x21, - 0x24, 0xb9, 0x38, 0xcb, 0xde, 0xf2, 0x3b, 0x5e, 0x9c, 0x80, 0x9b, 0x69, - 0x62, 0x06, 0x54, 0x77, 0x73, 0xb5, 0x15, 0xef, 0xc8, 0x91, 0x4d, 0x53, - 0x41, 0xd6, 0x7b, 0x83, 0x4d, 0x8b, 0x75, 0x5b, 0xc3, 0x94, 0x9a, 0xd2, - 0xdb, 0x28, 0x81, 0xd2, 0x23, 0x6a, 0x9e, 0xef, 0xea, 0xa2, 0x1c, 0x31, - 0xb5, 0x24, 0x34, 0xee, 0x05, 0xfd, 0xbf, 0x01, 0x97, 0xca, 0x26, 0xeb, - 0x8e, 0x2c, 0xb3, 0xcc, 0x9e, 0x4a, 0xc5, 0x12, 0x83, 0x65, 0x3c, 0x5a, - 0x67, 0xa8, 0x7c, 0x89, 0x71, 0x28, 0x98, 0x6c, 0x1f, 0x57, 0x6b, 0x28, - 0xdf, 0x67, 0xa4, 0x1e, 0x10, 0x7a, 0x87, 0x4c, 0x0a, 0x62, 0x3a, 0xd6, - 0x60, 0xe9, 0x16, 0xe3, 0x36, 0x4d, 0x0f, 0x05, 0x9d, 0x7d, 0xe6, 0x8f, - 0xa7, 0x22, 0x35, 0x2e, 0x1a, 0xd5, 0x2f, 0xf5, 0xf0, 0xe1, 0x0d, 0xd1, - 0x36, 0x80, 0xc8, 0x99, 0x70, 0x50, 0x81, 0x41, 0x0c, 0x50, 0x54, 0xe3, - 0x43, 0xaf, 0xfd, 0xed, 0xef, 0x90, 0x56, 0x66, 0x24, 0x47, 0x7f, 0x1d, - 0x4a, 0x3e, 0x0d, 0xc8, 0x51, 0x65, 0xbc, 0xdf, 0x79, 0x28, 0x25, 0xea, - 0xac, 0x88, 0x4d, 0x41, 0xe4, 0x81, 0x90, 0x64, 0x36, 0x99, 0x78, 0xec, - 0xae, 0xd0, 0xfe, 0x93, 0xf3, 0xba, 0x9e, 0x39, 0xb6, 0xa1, 0x8b, 0x90, - 0xcb, 0xf9, 0xf9, 0xd0, 0xf2, 0xf1, 0x78, 0xc4, 0x09, 0xe9, 0xba, 0x26, - 0x7f, 0xf5, 0x0e, 0x99, 0x6c, 0xab, 0x5e, 0x92, 0xf3, 0x19, 0xbb, 0xc9, - 0x4f, 0x24, 0x88, 0x11, 0xd9, 0xa7, 0x4a, 0x33, 0x8d, 0xdb, 0x90, 0xfb, - 0xb6, 0xff, 0x5b, 0xdf, 0x9f, 0xb1, 0xee, 0x5e, 0x90, 0x9c, 0xaf, 0x5e, - 0xaf, 0xc3, 0x7d, 0x4d, 0x93, 0x3d, 0x25, 0x89, 0x05, 0x38, 0x6e, 0x01, - 0x17, 0xa7, 0xac, 0x0f, 0x52, 0xc4, 0x3e, 0xfc, 0x79, 0x90, 0xbe, 0x63, - 0xf5, 0x97, 0x1b, 0xcd, 0xc7, 0x87, 0xeb, 0x6a, 0x20, 0xe5, 0x18, 0x66, - 0x43, 0x54, 0x82, 0xe0, 0x7b, 0x9a, 0x1b, 0xc2, 0xe9, 0x59, 0xb4, 0x4a, - 0x18, 0x5c, 0x6d, 0x7d, 0x7e, 0x7d, 0x21, 0xda, 0x90, 0x7a, 0x0f, 0x5a, - 0x89, 0xfd, 0x43, 0xc2, 0xc9, 0xb5, 0x67, 0x8e, 0x97, 0xef, 0x2e, 0xfd, - 0xda, 0x71, 0x74, 0xda, 0x00, 0x75, 0xed, 0x4a, 0xb1, 0x3d, 0x57, 0x99, - 0xe1, 0x3c, 0x29, 0x8f, 0x84, 0x18, 0xf7, 0x47, 0xe9, 0x2f, 0x74, 0x38, - 0xe6, 0xaf, 0xbf, 0xfd, 0x1f, 0x64, 0x17, 0x5d, 0x7f, 0xfa, 0x24, 0x10, - 0x58, 0xcf, 0x7d, 0x80, 0x5e, 0x39, 0x38, 0xa2, 0x11, 0x0f, 0xf6, 0x5b, - 0xdb, 0xd3, 0xbd, 0x9c, 0x18, 0x6b, 0x88, 0x5c, 0xf1, 0x08, 0x21, 0x98, - 0xd2, 0x81, 0x16, 0x94, 0xf1, 0x07, 0xfc, 0xcc, 0x92, 0xc5, 0x04, 0xb8, - 0x06, 0x6a, 0x79, 0x9a, 0xad, 0x01, 0xf0, 0xba, 0x5c, 0xf1, 0xe6, 0xe3, - 0xb7, 0x4e, 0xcd, 0x1c, 0x43, 0x89, 0x48, 0xab, 0x03, 0x4d, 0xe4, 0xd6, - 0x14, 0xad, 0xf7, 0xf3, 0xc0, 0xda, 0x51, 0xe2, 0xa9, 0x56, 0xf7, 0xcb, - 0x98, 0x70, 0x9e, 0x88, 0x6d, 0xe6, 0xa0, 0x06, 0xfd, 0x92, 0xf0, 0xb8, - 0x16, 0xe9, 0x8d, 0x79, 0x60, 0x1b, 0x4b, 0x0b, 0x0e, 0xa1, 0xd5, 0x51, - 0x98, 0x17, 0xc0, 0xa8, 0xf1, 0x6b, 0x19, 0xd1, 0x24, 0xed, 0x7f, 0xdf, - 0x57, 0xfc, 0xa7, 0xf5, 0xdc, 0xce, 0x7e, 0xc2, 0x00, 0x09, 0x6e, 0xf5, - 0x99, 0x10, 0x5f, 0x7f, 0x5c, 0x97, 0xe8, 0xb0, 0xd8, 0xd4, 0x78, 0x0e, - 0xd3, 0xa3, 0x4b, 0x69, 0xb1, 0xf9, 0x6a, 0x98, 0x86, 0x88, 0x5c, 0x61, - 0x2b, 0x47, 0x62, 0x53, 0x53, 0xb1, 0xe8, 0x29, 0x5e, 0xaa, 0x26, 0x29, - 0xdd, 0x6a, 0xe9, 0x2c, 0xd4, 0x80, 0xbc, 0xdf, 0x97, 0x5d, 0xf3, 0x3f, - 0xec, 0xd5, 0x5c, 0xa7, 0xdc, 0xa0, 0x78, 0xee, 0xaf, 0x37, 0x5e, 0x4c, - 0x6f, 0xce, 0x9b, 0x41, 0xbf, 0x51, 0x46, 0x68, 0x80, 0x27, 0x4c, 0x21, - 0x0e, 0xdc, 0xae, 0xb5, 0x2f, 0x01, 0x15, 0x1a, 0x03, 0x66, 0x6c, 0xd9, - 0x68, 0xb7, 0x9a, 0x7b, 0x56, 0xcf, 0xf4, 0xe0, 0xb7, 0xd9, 0xc4, 0x1e, - 0xa5, 0x49, 0x57, 0xa0, 0xa4, 0x1e, 0xfe, 0xbe, 0x8e, 0xb5, 0x02, 0x0c, - 0xb7, 0xaf, 0x2f, 0x88, 0x95, 0x90, 0xe1, 0x0b, 0xbb, 0x5e, 0xdb, 0x15, - 0x62, 0xa7, 0x4d, 0x16, 0x4a, 0x65, 0x92, 0xd9, 0x16, 0xeb, 0x65, 0x76, - 0x7f, 0xc6, 0x45, 0x63, 0xd0, 0x7d, 0xd3, 0x7a, 0xea, 0x65, 0x46, 0x90, - 0xf6, 0x35, 0x23, 0x61, 0xd3, 0xdf, 0x65, 0x85, 0x50, 0x53, 0x00, 0xcc, - 0xdb, 0x0c, 0x3f, 0xf6, 0x15, 0x71, 0xd6, 0x57, 0x02, 0xcb, 0xe9, 0x4b, - 0x93, 0x35, 0xe9, 0xef, 0xf9, 0x80, 0xac, 0xe9, 0xef, 0x88, 0x0b, 0x44, - 0x6e, 0xb5, 0xbf, 0x82, 0xc4, 0x01, 0xad, 0x0c, 0xb7, 0x19, 0x2b, 0xaa, - 0xcf, 0x4c, 0x2f, 0xf4, 0x46, 0xb9, 0x02, 0x75, 0xd0, 0x03, 0x3b, 0xd7, - 0x72, 0x33, 0x86, 0x38, 0xbf, 0x53, 0x22, 0x5c, 0xa6, 0x90, 0xe2, 0x07, - 0x57, 0x0b, 0x37, 0x8a, 0x6a, 0xa5, 0x3a, 0x36, 0x4f, 0x90, 0xfc, 0xfd, - 0x7a, 0x54, 0x58, 0x70, 0x8b, 0x28, 0xd7, 0xaa, 0x87, 0x3d, 0x6d, 0xc0, - 0xf3, 0xd7, 0xfe, 0xcf, 0x9f, 0x2b, 0x97, 0x65, 0x79, 0x93, 0xff, 0x40, - 0xcd, 0x6f, 0x23, 0x48, 0x0a, 0x84, 0xe4, 0x87, 0xb5, 0x8b, 0x71, 0xfc, - 0xf3, 0x8a, 0xbe, 0x5f, 0xf5, 0xf7, 0xa2, 0xf0, 0xd5, 0x73, 0xc9, 0x6e, - 0xfe, 0x08, 0xfb, 0x0e, 0xfe, 0x88, 0xe7, 0xce, 0x23, 0x26, 0x2c, 0x7c, - 0x47, 0x26, 0x85, 0x36, 0x65, 0x84, 0x67, 0xcb, 0xfd, 0x34, 0x03, 0x6c, - 0x4b, 0xf1, 0x86, 0x77, 0xa3, 0xbe, 0x93, 0x66, 0x09, 0x83, 0xfd, 0xae, - 0x3d, 0x35, 0x05, 0x14, 0x76, 0xb3, 0x87, 0x6a, 0x2d, 0x9f, 0x4a, 0x5c, - 0x0c, 0x17, 0x2f, 0xe1, 0xa1, 0xf1, 0xcd, 0xf9, 0x63, 0x44, 0x5f, 0xe8, - 0xbf, 0x5d, 0x09, 0x0a, 0xb0, 0x98, 0x2e, 0x7a, 0xcc, 0xb1, 0xbf, 0x58, - 0x20, 0x28, 0xfb, 0x41, 0xdc, 0x88, 0x28, 0xd1, 0xd4, 0x65, 0x83, 0xec, - 0xac, 0x79, 0x90, 0x4d, 0x0d, 0x4f, 0x6e, 0x16, 0x33, 0x31, 0x3e, 0x61, - 0xe3, 0x71, 0x5c, 0xdd, 0x32, 0x64, 0x32, 0xaf, 0x84, 0xe5, 0xe7, 0x66, - 0xd0, 0xcd, 0x57, 0xcd, 0x6a, 0x15, 0xb2, 0x3b, 0xd7, 0xde, 0x78, 0xdb, - 0x2d, 0xaf, 0x22, 0x53, 0x07, 0xf3, 0xff, 0x09, 0x83, 0x48, 0xde, 0xbc, - 0x4d, 0x31, 0x6a, 0xf2, 0x5f, 0x49, 0x59, 0x29, 0x76, 0xe5, 0xba, 0xa2, - 0x58, 0x55, 0x56, 0xca, 0x06, 0x3c, 0x91, 0xbd, 0xeb, 0x7f, 0xfb, 0xbc, - 0xf5, 0x02, 0x19, 0x5a, 0xff, 0x39, 0x3b, 0x8f, 0x0a, 0xf4, 0xc3, 0x3a, - 0x3c, 0x3b, 0x48, 0x3c, 0x6c, 0xaa, 0xe2, 0x9d, 0x91, 0xdd, 0xbe, 0xd9, - 0x9d, 0x29, 0x22, 0x62, 0x92, 0x00, 0xec, 0xad, 0xa0, 0x8e, 0x8d, 0xfa, - 0xa7, 0x9c, 0x07, 0xf2, 0xbe, 0x74, 0x07, 0xf0, 0x82, 0x8c, 0x0b, 0xfd, - 0x89, 0x85, 0xad, 0x3d, 0xd6, 0x7f, 0x62, 0xe7, 0xd4, 0xef, 0x9f, 0xca, - 0x74, 0x2c, 0xc8, 0xfa, 0xc2, 0xed, 0x75, 0x09, 0x5b, 0x70, 0xdb, 0x8b, - 0x3b, 0xbf, 0x20, 0xaa, 0x97, 0xe1, 0x06, 0x3c, 0x8b, 0x32, 0xaf, 0x7e, - 0x05, 0x46, 0xfe, 0x18, 0xf1, 0xf0, 0x8c, 0xf5, 0x4e, 0xf8, 0xde, 0xfa, - 0x22, 0xa6, 0xd1, 0x0c, 0x67, 0x13, 0x6e, 0xdc, 0xcd, 0x65, 0x50, 0x4f, - 0xdf, 0x40, 0xaf, 0xc5, 0xec, 0x1c, 0x78, 0x82, 0x45, 0x7e, 0x85, 0xb7, - 0xbb, 0xea, 0x11, 0x57, 0xf9, 0xfc, 0x01, 0x6f, 0xec, 0xf6, 0x96, 0x86, - 0x38, 0x4a, 0xbb, 0xe9, 0x70, 0x91, 0x07, 0x23, 0x9a, 0xe7, 0x2c, 0xba, - 0x40, 0x68, 0x91, 0x86, 0x8d, 0x9b, 0xd5, 0x5b, 0xe1, 0xd1, 0x1a, 0x6e, - 0x14, 0xa6, 0x87, 0x1f, 0x1e, 0xd1, 0x1e, 0x0f, 0xea, 0xd6, 0x0b, 0xc9, - 0xeb, 0x26, 0x33, 0x86, 0xad, 0x6f, 0xda, 0x43, 0x30, 0x40, 0xec, 0x65, - 0xa0, 0x63, 0xa3, 0xed, 0xb1, 0xb8, 0xa1, 0x3b, 0x7f, 0x56, 0xe4, 0x79, - 0x89, 0x06, 0x00, 0x26, 0xc1, 0xbf, 0x42, 0xc8, 0xea, 0x5e, 0xc5, 0x14, - 0x03, 0x66, 0x3c, 0x18, 0x61, 0xfb, 0x52, 0x95, 0x02, 0xd2, 0x9c, 0x51, - 0xef, 0xc9, 0xb7, 0xd1, 0xf0, 0x16, 0x59, 0xa6, 0x85, 0x20, 0x9c, 0x3c, - 0x57, 0x53, 0x8c, 0xe0, 0x2a, 0x0e, 0x54, 0x5c, 0x1c, 0x25, 0xd5, 0xb7, - 0xcf, 0x4a, 0x2c, 0xff, 0x59, 0xbf, 0xfe, 0x36, 0x76, 0x1a, 0x28, 0x5e, - 0x2a, 0xe6, 0x5d, 0x48, 0x0e, 0x2e, 0x68, 0x49, 0xcb, 0x02, 0xa9, 0xb2, - 0xa6, 0xbe, 0xd8, 0x80, 0x64, 0x84, 0x4e, 0x67, 0x46, 0x7b, 0x35, 0x5d, - 0xf3, 0xa9, 0x0f, 0xb8, 0x8f, 0x22, 0x48, 0x1f, 0x20, 0x78, 0x1e, 0x66, - 0x1c, 0xe3, 0x56, 0xff, 0xe8, 0xf1, 0x41, 0xf0, 0x10, 0xf5, 0xb4, 0x22, - 0xc4, 0xc0, 0xe1, 0xac, 0xe7, 0x79, 0xfb, 0xf9, 0x49, 0xe3, 0x2e, 0xa2, - 0x59, 0x80, 0xa0, 0xcb, 0xe3, 0xba, 0x00, 0x5e, 0xfe, 0x66, 0xc1, 0x1b, - 0x29, 0x34, 0xc1, 0x17, 0xa3, 0xa0, 0x82, 0x14, 0x46, 0x9c, 0x97, 0x82, - 0x33, 0x43, 0xbf, 0x89, 0x03, 0x9c, 0x1c, 0x9f, 0xa9, 0x10, 0x03, 0x83, - 0x2f, 0x4b, 0x6e, 0xff, 0x13, 0x8f, 0x91, 0xf7, 0x5d, 0x1e, 0x04, 0xfa, - 0x78, 0xf7, 0xdc, 0x2e, 0xe4, 0xd8, 0x34, 0xe1, 0xae, 0xb8, 0xc5, 0xb5, - 0xee, 0x7d, 0xc1, 0x73, 0x02, 0x73, 0x63, 0x8f, 0x7e, 0xb8, 0x9d, 0xb1, - 0x76, 0xdc, 0x17, 0x41, 0x37, 0xe1, 0x9c, 0x10, 0x59, 0x84, 0xff, 0x5a, - 0x45, 0x5f, 0x14, 0x82, 0x9d, 0xd1, 0xe6, 0x8b, 0x8a, 0x55, 0xad, 0xdf, - 0xa3, 0xa7, 0x87, 0x19, 0x51, 0x37, 0xba, 0x47, 0xbc, 0x21, 0x25, 0x32, - 0xba, 0x24, 0xf3, 0x92, 0x5e, 0x1b, 0x91, 0x89, 0x4c, 0x6c, 0x6a, 0x2e, - 0x37, 0x21, 0xee, 0x87, 0x01, 0x8b, 0x39, 0xb8, 0x39, 0xe6, 0x86, 0xf4, - 0x7f, 0x49, 0x14, 0x10, 0x45, 0x71, 0xc6, 0xf3, 0xca, 0x53, 0x7e, 0xec, - 0x82, 0xb4, 0xee, 0x25, 0x1d, 0x83, 0x2c, 0x23, 0x8f, 0x0c, 0x97, 0xd8, - 0xc2, 0xd7, 0x8f, 0xcc, 0x06, 0x61, 0xf7, 0xe7, 0x6d, 0x9e, 0xbc, 0x7b, - 0x99, 0x65, 0xef, 0x9b, 0x96, 0xee, 0x84, 0xc9, 0x10, 0xa0, 0x77, 0x4d, - 0xae, 0x57, 0x79, 0xa3, 0xdb, 0xa1, 0xd8, 0x17, 0xeb, 0xd1, 0xdd, 0x27, - 0x00, 0x4a, 0xa0, 0xaa, 0x83, 0x76, 0x26, 0xeb, 0x6b, 0xac, 0x37, 0xdf, - 0x4b, 0x0f, 0x30, 0xf7, 0x45, 0x7e, 0xeb, 0xd7, 0xb6, 0x17, 0xdf, 0x43, - 0x1f, 0x99, 0x2d, 0x26, 0x1c, 0x41, 0xc6, 0x92, 0x3a, 0x22, 0x45, 0x3e, - 0x18, 0x13, 0xd7, 0xa6, 0xe2, 0x7a, 0x9d, 0x1c, 0xa6, 0xd5, 0x1e, 0x62, - 0x3f, 0xeb, 0x7d, 0xff, 0xfb, 0xcd, 0x0f, 0xbf, 0xed, 0x50, 0xb0, 0xdc, - 0x0b, 0xfe, 0x57, 0xb7, 0x24, 0x1e, 0x8e, 0x4c, 0xd1, 0xd1, 0x18, 0xe2, - 0x95, 0xe6, 0x3f, 0x77, 0x8d, 0xab, 0x67, 0xb2, 0x96, 0x0d, 0xcd, 0x6f, - 0x98, 0x51, 0x37, 0x72, 0xd6, 0xe8, 0x98, 0x50, 0x5a, 0x15, 0x7d, 0x19, - 0x3d, 0xe2, 0xd3, 0xce, 0x0e, 0x81, 0x6a, 0xbc, 0x07, 0x40, 0xfe, 0xe7, - 0xb7, 0xd6, 0xda, 0xd6, 0x5b, 0x6a, 0x9e, 0x7f, 0xc5, 0x44, 0x2e, 0x73, - 0x2d, 0x92, 0x26, 0x9d, 0xfa, 0xbe, 0xe1, 0x01, 0x36, 0x9e, 0x59, 0xf3, - 0xb5, 0xbf, 0x01, 0x5f, 0xdc, 0x8c, 0x5b, 0xbd, 0x27, 0x17, 0x3d, 0xf4, - 0x72, 0xfd, 0x92, 0x79, 0x1a, 0x98, 0x54, 0x5c, 0x85, 0x0c, 0xa7, 0xc3, - 0x2f, 0x06, 0x89, 0xb9, 0x62, 0x59, 0x5d, 0x47, 0x72, 0x93, 0x20, 0x84, - 0xa6, 0x87, 0xaa, 0xf1, 0xa6, 0xf2, 0x42, 0xf2, 0x28, 0x78, 0x20, 0xe6, - 0x98, 0x4b, 0x87, 0xd3, 0x78, 0x4b, 0xba, 0x05, 0x4f, 0xba, 0x1b, 0x12, - 0x75, 0x5f, 0xc6, 0x5d, 0x68, 0x13, 0xee, 0xa3, 0xa5, 0x8b, 0x47, 0x1f, - 0x92, 0x61, 0x12, 0x6d, 0xfd, 0x8f, 0xe7, 0x1f, 0xbc, 0x77, 0x38, 0x11, - 0x59, 0xfd, 0xee, 0x2a, 0x50, 0x4e, 0xe0, 0x61, 0x59, 0xee, 0x89, 0xc3, - 0x7c, 0x68, 0x24, 0x65, 0xd4, 0x2b, 0xa4, 0x15, 0x6b, 0x84, 0x49, 0xec, - 0xef, 0xad, 0xb7, 0xab, 0x59, 0xad, 0xcf, 0xff, 0xc8, 0x03, 0xf9, 0x38, - 0xfd, 0x33, 0xe7, 0x59, 0x16, 0x41, 0x67, 0x3c, 0x86, 0x67, 0x05, 0x3c, - 0xd5, 0x93, 0x3e, 0x76, 0xa0, 0x4e, 0xda, 0xc9, 0xdb, 0x3f, 0x3a, 0x25, - 0x4a, 0x2b, 0x70, 0x34, 0xef, 0xb8, 0x5a, 0xb9, 0xef, 0x3f, 0xdc, 0x4b, - 0x81, 0x42, 0xa4, 0x14, 0xe0, 0x44, 0x94, 0x28, 0x74, 0x3b, 0x06, 0x50, - 0xc5, 0x89, 0x1e, 0xf8, 0x30, 0x94, 0x3f, 0x7f, 0x00, 0x64, 0xd1, 0x4c, - 0x71, 0x3b, 0xef, 0x96, 0x08, 0x92, 0x49, 0xff, 0xa8, 0x7c, 0x32, 0x19, - 0x29, 0x30, 0x37, 0x9c, 0x7b, 0xd6, 0x5b, 0x0c, 0xe1, 0xc2, 0x91, 0x3e, - 0x8e, 0x8a, 0xd5, 0xee, 0x3b, 0x50, 0x9a, 0x4f, 0x1e, 0x5f, 0xf3, 0x8c, - 0x3d, 0x8e, 0x92, 0x55, 0x4e, 0x28, 0xf5, 0xd8, 0x20, 0xe0, 0x2f, 0x8c, - 0x50, 0x1e, 0x5b, 0x4f, 0xad, 0x74, 0xb7, 0x1c, 0x15, 0x0f, 0xb6, 0xf6, - 0x80, 0x00, 0xe1, 0xab, 0x12, 0xbf, 0x07, 0x1f, 0xa2, 0x6a, 0x27, 0x1d, - 0xc0, 0xae, 0xcf, 0x51, 0x78, 0xe1, 0xdb, 0xc4, 0xc8, 0xe5, 0x5c, 0x95, - 0xb8, 0x20, 0x20, 0x6f, 0x0f, 0xee, 0xab, 0xe6, 0x20, 0xdb, 0x7e, 0x5c, - 0x11, 0xa7, 0x84, 0xb1, 0xf6, 0xd6, 0xb0, 0x5f, 0x22, 0xe3, 0x2b, 0x4b, - 0x8c, 0x29, 0xc4, 0x11, 0xe3, 0x2e, 0x7b, 0x10, 0x6d, 0xfd, 0xb2, 0xc9, - 0xc3, 0xc8, 0x59, 0xa8, 0x9e, 0xe0, 0x1c, 0x11, 0xec, 0xe6, 0x3d, 0xd4, - 0x3e, 0xd9, 0xcf, 0x4d, 0x75, 0x5a, 0x43, 0x9b, 0xf2, 0x31, 0x5c, 0xe0, - 0xaf, 0x09, 0xcc, 0xf5, 0x08, 0x7f, 0x73, 0x39, 0xe7, 0x24, 0x2b, 0xdd, - 0x2d, 0xe5, 0x94, 0xbf, 0x90, 0x9b, 0x85, 0xaf, 0x5e, 0x7b, 0x63, 0xf3, - 0xe7, 0x39, 0x32, 0x17, 0x81, 0xe0, 0xf0, 0x79, 0x7c, 0x5b, 0x19, 0xff, - 0xda, 0x31, 0xbd, 0xf6, 0xa1, 0x47, 0xbc, 0x99, 0xe7, 0x4b, 0xcd, 0x4f, - 0x56, 0xbc, 0xd2, 0xb8, 0xed, 0xc2, 0x8b, 0x1e, 0xf2, 0xd9, 0x71, 0x8e, - 0x19, 0x16, 0x49, 0xaa, 0x1e, 0xa4, 0x10, 0x9c, 0xf9, 0xcb, 0xc9, 0x94, - 0x5e, 0xfa, 0x4a, 0xbc, 0x90, 0xa4, 0xcc, 0xeb, 0xc4, 0x1f, 0x69, 0x8b, - 0xf0, 0x97, 0x25, 0x77, 0xd5, 0x1f, 0xa5, 0x8a, 0xd7, 0xa6, 0xb0, 0x78, - 0x79, 0xfa, 0xf6, 0x5d, 0x5e, 0xc5, 0xae, 0x2d, 0xb1, 0xe1, 0x68, 0x56, - 0x40, 0xb5, 0x00, 0x62, 0x8a, 0x17, 0x77, 0x34, 0xc0, 0xd0, 0x7c, 0xe0, - 0xac, 0x4b, 0xa8, 0x45, 0x6b, 0x68, 0xb9, 0x32, 0x70, 0xa9, 0xa2, 0x12, - 0x2e, 0x25, 0xff, 0x88, 0xc6, 0xa5, 0x15, 0xb7, 0x16, 0xac, 0x2c, 0x2e, - 0x44, 0xe0, 0x0a, 0x73, 0xf1, 0xc9, 0x7e, 0x52, 0x09, 0x6a, 0x19, 0x4f, - 0x07, 0x97, 0x5e, 0xdd, 0x33, 0xe6, 0x70, 0xea, 0xcf, 0xc7, 0x37, 0x7f, - 0xaa, 0x70, 0x9f, 0xcd, 0x0c, 0x86, 0x0c, 0xba, 0x40, 0x7a, 0x65, 0xd2, - 0xef, 0xc2, 0xaf, 0xde, 0x68, 0x4c, 0x9c, 0x2d, 0x98, 0x9b, 0x6c, 0xe9, - 0xe8, 0x26, 0xc9, 0x27, 0xf4, 0x6e, 0x56, 0x43, 0x2d, 0x7c, 0x98, 0xef, - 0x89, 0x89, 0x23, 0xd3, 0xf3, 0x6e, 0x8b, 0x41, 0xc3, 0x87, 0xd0, 0x87, - 0x01, 0xca, 0xf8, 0x44, 0x88, 0x14, 0x55, 0x71, 0xd0, 0x58, 0x7d, 0x36, - 0x51, 0x1c, 0x8d, 0x77, 0xa0, 0x1a, 0x72, 0x4a, 0x2b, 0xfc, 0x50, 0x2f, - 0x17, 0x56, 0x7c, 0xd6, 0xdc, 0xe9, 0x87, 0x12, 0xde, 0x24, 0x36, 0x6e, - 0x03, 0x68, 0xfd, 0x10, 0x60, 0x33, 0x7b, 0x41, 0x63, 0x5f, 0x66, 0x3f, - 0x25, 0x68, 0x77, 0x29, 0xcb, 0x3c, 0x61, 0x1d, 0xfa, 0x70, 0x40, 0x67, - 0x70, 0x8c, 0xab, 0xfc, 0xa7, 0xc3, 0xd3, 0xf3, 0xd7, 0x62, 0xa2, 0xf0, - 0x10, 0xe9, 0xb4, 0xe8, 0xb7, 0xb6, 0xff, 0xe3, 0xa9, 0x1e, 0x5a, 0x15, - 0x64, 0xa4, 0x50, 0x9b, 0x40, 0x5f, 0x57, 0x9c, 0xe4, 0xf8, 0x8d, 0x7b, - 0xa6, 0xba, 0xa3, 0x9a, 0x06, 0xd5, 0x10, 0xb4, 0x53, 0xdd, 0x2a, 0xda, - 0xe3, 0xcd, 0xf6, 0x39, 0xde, 0x26, 0x11, 0xfe, 0x98, 0x21, 0xc7, 0x41, - 0x80, 0xbd, 0xa6, 0x1b, 0xc9, 0x63, 0x6f, 0x81, 0x8a, 0x03, 0x2e, 0x1b, - 0xd8, 0xe6, 0x3c, 0xa0, 0xe3, 0xd0, 0xff, 0x65, 0x92, 0x3a, 0x63, 0xf8, - 0x9f, 0x73, 0xae, 0x6e, 0x9d, 0x9a, 0x61, 0xbd, 0x6d, 0x09, 0x21, 0x8a, - 0xb3, 0x24, 0x55, 0x58, 0x09, 0x25, 0xc0, 0x73, 0x03, 0x9e, 0x48, 0x62, - 0x65, 0x66, 0xea, 0x89, 0xf1, 0xd3, 0x8b, 0x56, 0x3d, 0xba, 0x39, 0xfa, - 0xb5, 0xa2, 0xcb, 0xf9, 0xc8, 0xc5, 0x52, 0xce, 0x7e, 0x0d, 0x6c, 0x38, - 0x4d, 0x5a, 0x6a, 0x54, 0xfb, 0xf4, 0xed, 0xb2, 0xfc, 0x17, 0xa8, 0x76, - 0xfa, 0x50, 0xa9, 0x44, 0x3a, 0xcc, 0x91, 0x8f, 0xae, 0x5a, 0x2c, 0x1c, - 0x1e, 0x5e, 0x83, 0xd4, 0x2e, 0x4f, 0xf3, 0xc0, 0x44, 0x65, 0xcb, 0x0c, - 0x3d, 0x48, 0x79, 0x80, 0xe1, 0x93, 0xd4, 0xb9, 0x8f, 0xd7, 0x58, 0x39, - 0x6b, 0x62, 0xb9, 0xa6, 0x65, 0x31, 0xe0, 0x57, 0x78, 0xa3, 0xae, 0x1d, - 0x96, 0x4f, 0xaa, 0x4d, 0x8b, 0x0f, 0x4f, 0x80, 0xe2, 0x51, 0x42, 0x37, - 0x5b, 0x76, 0xec, 0xca, 0x97, 0xfb, 0xbc, 0x44, 0x1f, 0x12, 0x94, 0x44, - 0x60, 0x83, 0xe2, 0x2c, 0xe2, 0xab, 0xad, 0x0b, 0x51, 0x42, 0x98, 0x49, - 0x8c, 0x6c, 0x63, 0x33, 0x3e, 0x34, 0xc5, 0xd3, 0x75, 0xa7, 0x12, 0x36, - 0x97, 0xf4, 0x0d, 0xac, 0xf4, 0x74, 0xfe, 0xfa, 0x24, 0xf4, 0x4c, 0x2b, - 0xac, 0x0a, 0x55, 0x4f, 0x6f, 0xa5, 0x58, 0xca, 0x4c, 0x31, 0x4e, 0x0c, - 0x0d, 0x7a, 0xde, 0xd0, 0x09, 0xdb, 0xce, 0xe6, 0x3e, 0xa9, 0xb6, 0xd8, - 0x07, 0x26, 0x3d, 0x1e, 0x22, 0xd2, 0xcf, 0xe4, 0xcf, 0xa2, 0xb0, 0x51, - 0x01, 0xe7, 0xda, 0xa7, 0x6b, 0x97, 0x2e, 0x93, 0x22, 0xda, 0x86, 0xdf, - 0x4e, 0xaa, 0x7b, 0x1c, 0x79, 0xd1, 0x20, 0x3c, 0x46, 0x8b, 0x36, 0x34, - 0x73, 0x44, 0xda, 0x6f, 0x2d, 0xcc, 0x7b, 0xae, 0x3e, 0xa1, 0x68, 0xb2, - 0xf7, 0x12, 0x6c, 0x23, 0xf5, 0xc7, 0xb9, 0x38, 0x5d, 0xbb, 0x48, 0x4d, - 0xab, 0x10, 0x40, 0x2f, 0xe4, 0x71, 0x16, 0x19, 0xf9, 0xdc, 0x9d, 0x32, - 0x5b, 0xe3, 0xc4, 0x50, 0xb6, 0x27, 0x9b, 0x61, 0xc6, 0xda, 0x0a, 0x11, - 0xfd, 0x54, 0x00, 0xa7, 0x74, 0x18, 0x51, 0x3a, 0x62, 0x83, 0x7f, 0x0d, - 0xaf, 0x31, 0xad, 0xa9, 0x9d, 0xc9, 0x5c, 0x74, 0x82, 0x86, 0xdc, 0x56, - 0xbd, 0x6e, 0x72, 0x47, 0x11, 0x45, 0x41, 0x64, 0xb2, 0x05, 0x9b, 0xc8, - 0x20, 0x90, 0x05, 0x79, 0x52, 0x7d, 0xea, 0x12, 0xcb, 0x5f, 0xce, 0xd9, - 0x98, 0x23, 0x8f, 0x66, 0x37, 0x0c, 0x4d, 0x14, 0x9f, 0x85, 0xeb, 0x8a, - 0xa6, 0x14, 0x38, 0x6a, 0x68, 0x34, 0xcf, 0x7c, 0x18, 0x6b, 0x3f, 0x5d, - 0xf2, 0x2b, 0xe0, 0x41, 0xb6, 0x24, 0x75, 0x05, 0x14, 0x9e, 0xf2, 0x8a, - 0xdb, 0x67, 0xd1, 0x05, 0xc2, 0x05, 0x17, 0xac, 0x4d, 0xb6, 0x8d, 0x54, - 0xe3, 0x38, 0x74, 0x31, 0x83, 0x7f, 0x61, 0x61, 0xda, 0xc9, 0xf8, 0x27, - 0x40, 0xe5, 0xc2, 0xb5, 0xbc, 0x5a, 0x77, 0xcc, 0x9c, 0xfb, 0x6f, 0xbe, - 0x82, 0x7e, 0xad, 0x94, 0x59, 0xb0, 0x77, 0x97, 0x93, 0x71, 0xaf, 0xa3, - 0x8a, 0x36, 0x52, 0x2f, 0x73, 0x55, 0xfd, 0x40, 0xbb, 0xb8, 0x59, 0x09, - 0x13, 0xe8, 0xfd, 0x69, 0x71, 0x2a, 0xec, 0x62, 0x98, 0x37, 0x44, 0x3d, - 0x6f, 0x6c, 0x50, 0xb9, 0x43, 0xfb, 0xf6, 0xb7, 0x89, 0xea, 0x8f, 0x2f, - 0xce, 0xdc, 0xf4, 0x8b, 0x8e, 0xa9, 0xd7, 0xe9, 0x6f, 0xa5, 0x08, 0x6e, - 0x11, 0x02, 0x08, 0x35, 0x52, 0x38, 0x6f, 0x5d, 0xff, 0x4c, 0xf7, 0xdd, - 0x86, 0xf0, 0xdc, 0x91, 0x2a, 0x65, 0x3a, 0x98, 0x14, 0x64, 0x8b, 0x41, - 0xee, 0xb0, 0xd6, 0xd9, 0x70, 0xde, 0xa0, 0xd5, 0x0c, 0x56, 0x6c, 0x07, - 0x41, 0x10, 0x18, 0xb2, 0xac, 0x81, 0xbc, 0xd6, 0xe6, 0x82, 0x1c, 0xaa, - 0xc1, 0xde, 0xc9, 0xc5, 0xe2, 0x2d, 0x94, 0x5b, 0xdc, 0xb5, 0xcd, 0x0d, - 0x86, 0x29, 0x1d, 0xb6, 0x17, 0x1d, 0xfd, 0x10, 0x76, 0x0b, 0xa9, 0xef, - 0x64, 0x72, 0xc3, 0x97, 0x4f, 0x2e, 0xae, 0x05, 0xd2, 0x2f, 0x1b, 0x43, - 0x33, 0xa9, 0x56, 0x2e, 0xa6, 0xe5, 0xe9, 0x9c, 0x76, 0x06, 0xf5, 0x9a, - 0x9e, 0x84, 0x0c, 0x73, 0x64, 0x60, 0x47, 0x51, 0xb5, 0x47, 0xbb, 0xe0, - 0xbb, 0xab, 0x32, 0xfc, 0x0f, 0xff, 0xcc, 0xd6, 0xef, 0x3e, 0x1a, 0xa6, - 0xd9, 0x41, 0xe6, 0xf0, 0x49, 0x26, 0x73, 0xec, 0xed, 0x7c, 0x49, 0x5d, - 0x62, 0xd5, 0xbc, 0x7c, 0x66, 0x87, 0x45, 0x8c, 0xeb, 0xb2, 0x7f, 0x37, - 0x8d, 0xb5, 0xc4, 0xd2, 0xa7, 0x1f, 0xe4, 0xfa, 0xfe, 0xbb, 0xa7, 0x50, - 0xe8, 0x59, 0x4c, 0xaa, 0x40, 0xca, 0x6d, 0x8f, 0x28, 0x79, 0x1a, 0x2d, - 0xcd, 0xb0, 0xc5, 0x1d, 0x66, 0xe3, 0x9a, 0xa6, 0x4b, 0x59, 0x72, 0x97, - 0x68, 0x62, 0x0c, 0xb3, 0xc6, 0x6e, 0xf4, 0x71, 0xfc, 0x38, 0x59, 0xf7, - 0x86, 0x0c, 0xd7, 0x46, 0x6d, 0x1e, 0x25, 0xee, 0xcb, 0x62, 0x65, 0xd5, - 0x9a, 0x3b, 0xc7, 0xf4, 0xb8, 0xe2, 0x22, 0x10, 0xa5, 0x4a, 0x84, 0x66, - 0x1d, 0x08, 0x30, 0xf3, 0x33, 0x4d, 0xac, 0xa3, 0x1d, 0xff, 0x99, 0xe7, - 0x04, 0xa1, 0xe8, 0x35, 0x47, 0x24, 0x16, 0xef, 0x85, 0xf9, 0xbe, 0x9e, - 0x13, 0x00, 0x3b, 0xba, 0xd1, 0xf9, 0xff, 0x80, 0xd8, 0xa3, 0xba, 0xf7, - 0x48, 0xaa, 0x25, 0x19, 0xaa, 0xf8, 0x56, 0xfa, 0x6c, 0x07, 0xed, 0xf0, - 0xa7, 0x91, 0x2f, 0x69, 0x9f, 0xd7, 0x8d, 0x90, 0x51, 0x78, 0xdd, 0xcf, - 0x7e, 0x47, 0x21, 0x07, 0x4b, 0xf3, 0x5a, 0x21, 0x1a, 0x99, 0x4c, 0x1f, - 0xcb, 0x07, 0x4b, 0x2e, 0x92, 0x20, 0xc3, 0x2f, 0xe4, 0x40, 0xe6, 0xe4, - 0xf3, 0xed, 0x06, 0xcd, 0x70, 0x61, 0xb1, 0x0f, 0x5b, 0x6f, 0x49, 0xf4, - 0x13, 0x77, 0x41, 0x72, 0x96, 0xd0, 0x60, 0x83, 0x23, 0x62, 0xb9, 0xc8, - 0x2b, 0x68, 0xf4, 0xc5, 0x53, 0xfe, 0x12, 0xaf, 0x43, 0xb5, 0x9a, 0x17, - 0x53, 0xf6, 0x92, 0x66, 0x27, 0xca, 0xdb, 0xd6, 0xbb, 0x66, 0xcc, 0xd6, - 0xe7, 0x66, 0x37, 0x95, 0x5f, 0x34, 0x32, 0xde, 0x45, 0xf6, 0x79, 0x2a, - 0x8c, 0x2c, 0xa9, 0xfa, 0xfc, 0xac, 0x05, 0xde, 0x0e, 0xd2, 0xb9, 0x7c, - 0x13, 0x77, 0x5e, 0xad, 0x80, 0x99, 0xc7, 0x23, 0x8a, 0x89, 0x79, 0xdc, - 0x9c, 0xce, 0xd7, 0x43, 0x5a, 0xd9, 0x9d, 0xe5, 0x77, 0xf7, 0x00, 0xb9, - 0x74, 0x36, 0x2f, 0xcb, 0xdc, 0x78, 0xcd, 0x52, 0x7c, 0xca, 0xb8, 0x3a, - 0xa0, 0xfd, 0xd8, 0x93, 0x19, 0x4d, 0xa8, 0x2d, 0x8c, 0x28, 0xf1, 0xdc, - 0xe8, 0xaf, 0x1b, 0xee, 0x1d, 0x2b, 0x79, 0xfc, 0x65, 0xe1, 0x2f, 0x70, - 0x0f, 0x4d, 0x43, 0x78, 0xa8, 0x55, 0x14, 0x54, 0x07, 0x78, 0xe6, 0x55, - 0xf0, 0x9f, 0xc0, 0x6b, 0x92, 0xe1, 0x8b, 0xb0, 0xae, 0x03, 0xb6, 0xe5, - 0x56, 0xd6, 0x1e, 0xd4, 0xbe, 0x01, 0x2f, 0x96, 0xe6, 0x29, 0xd6, 0x5a, - 0x01, 0x3a, 0xa7, 0xe1, 0x91, 0xbf, 0xb9, 0x05, 0xae, 0x40, 0xd6, 0x83, - 0x82, 0xb9, 0x83, 0x77, 0x53, 0xff, 0xa7, 0x69, 0x03, 0xb1, 0x55, 0x41, - 0x93, 0xc6, 0x94, 0xb6, 0x14, 0xc5, 0x9e, 0x51, 0x8f, 0xaa, 0xa8, 0xad, - 0x83, 0x34, 0xaf, 0x15, 0xde, 0xfb, 0x53, 0x73, 0xf9, 0x79, 0xb0, 0xed, - 0x8e, 0x32, 0x10, 0xe5, 0x2f, 0x36, 0xcb, 0x2d, 0x4e, 0xc1, 0x4c, 0x65, - 0xc5, 0x32, 0x7b, 0x50, 0xe8, 0x76, 0xc4, 0xa3, 0x72, 0x2f, 0xbc, 0x6c, - 0x4a, 0xa1, 0x1b, 0x2b, 0x84, 0x1f, 0x21, 0x02, 0xff, 0xb8, 0xeb, 0x0d, - 0xb8, 0x63, 0x9c, 0xdb, 0x87, 0x91, 0x95, 0x11, 0xaf, 0x53, 0x11, 0xa6, - 0xde, 0xf5, 0x9b, 0xc0, 0x4a, 0x37, 0x0a, 0xca, 0xe0, 0x96, 0xa1, 0x73, - 0xa3, 0x31, 0x41, 0xd5, 0xe7, 0xef, 0x94, 0xb3, 0x73, 0xc8, 0xe8, 0x5a, - 0x61, 0xc9, 0x98, 0xe7, 0xe8, 0xdd, 0xc6, 0x62, 0x3f, 0xfe, 0xda, 0x0e, - 0x8e, 0x01, 0x11, 0x4f, 0xeb, 0x0e, 0xdb, 0xb0, 0xe7, 0x11, 0xe2, 0xff, - 0xf1, 0x3d, 0x77, 0x4d, 0x85, 0x82, 0x4a, 0xb4, 0x63, 0x0b, 0x6d, 0xc1, - 0xf2, 0xcc, 0x73, 0x8e, 0xb1, 0x96, 0x09, 0x2d, 0x3b, 0x0a, 0x05, 0x7e, - 0x93, 0x64, 0x6e, 0xd1, 0x51, 0x5f, 0x0b, 0xdd, 0xbf, 0x00, 0x76, 0xaf, - 0x4b, 0xe9, 0x18, 0x14, 0x2f, 0xe0, 0x33, 0x79, 0xb2, 0x1f, 0xdf, 0x3f, - 0xec, 0xd5, 0xf5, 0xcf, 0x8a, 0x5c, 0xe1, 0xae, 0x75, 0xf6, 0x16, 0x14, - 0x5f, 0xab, 0x07, 0xdb, 0x71, 0x1b, 0x3c, 0xb8, 0xd7, 0x02, 0xf9, 0xb0, - 0x7f, 0xb0, 0x74, 0x4a, 0x13, 0x91, 0x19, 0x6d, 0x8e, 0x3e, 0x0b, 0x42, - 0x1a, 0x03, 0x1d, 0xcc, 0x23, 0x34, 0xf9, 0x60, 0x0c, 0x19, 0x60, 0x23, - 0x5a, 0xf5, 0xc0, 0x14, 0x20, 0xae, 0x56, 0xa3, 0x78, 0x19, 0x76, 0x55, - 0xdf, 0x33, 0xe3, 0x47, 0xb2, 0x56, 0xa8, 0xff, 0xe6, 0x70, 0xef, 0x00, - 0x7c, 0x38, 0x4f, 0xf4, 0x67, 0x41, 0x97, 0x42, 0x45, 0xe3, 0xdb, 0xbe, - 0xcd, 0x21, 0x04, 0x3b, 0xb3, 0x65, 0x73, 0x3f, 0x81, 0x6c, 0x2f, 0x91, - 0x39, 0x14, 0x0a, 0x76, 0x41, 0xf9, 0x96, 0xa7, 0xa1, 0x5d, 0x75, 0xf7, - 0xb4, 0x6e, 0x27, 0x81, 0x1b, 0xe2, 0xdf, 0xba, 0x23, 0xd9, 0x02, 0x1e, - 0xe2, 0x8f, 0x03, 0x10, 0x32, 0x97, 0x32, 0x9f, 0xbd, 0xce, 0xfc, 0xc4, - 0xa7, 0x01, 0x31, 0x2d, 0x8b, 0x4f, 0xd5, 0x5f, 0xe5, 0x87, 0xfb, 0xd4, - 0x25, 0x7b, 0x6f, 0xe4, 0x79, 0xdd, 0x92, 0xf0, 0x4c, 0x6c, 0x36, 0xaa, - 0xf6, 0xf9, 0xb2, 0x28, 0x4d, 0xa7, 0x9c, 0x44, 0xe9, 0x71, 0x45, 0x18, - 0x3a, 0x6a, 0xd7, 0x17, 0x54, 0x3e, 0xd9, 0x03, 0x7b, 0x64, 0x4a, 0xf7, - 0x33, 0xc0, 0xfb, 0xda, 0xaf, 0xf2, 0xf7, 0x57, 0xa7, 0xf1, 0xaa, 0xdb, - 0x26, 0x5e, 0x08, 0xe2, 0x4f, 0xd5, 0x0f, 0xea, 0x2b, 0x96, 0x36, 0x64, - 0x14, 0x97, 0x0c, 0x13, 0x45, 0xf1, 0x4e, 0x8d, 0x31, 0x3a, 0x99, 0x78, - 0xd8, 0x48, 0x86, 0x5d, 0x02, 0x47, 0xa7, 0xaf, 0xa3, 0x4f, 0x16, 0x9a, - 0xeb, 0x65, 0x17, 0xf8, 0x3b, 0x05, 0x49, 0xc7, 0xf0, 0x3f, 0xce, 0x46, - 0xc0, 0x42, 0x25, 0xab, 0x5d, 0xa0, 0x8f, 0x54, 0xd4, 0xb4, 0x89, 0x8b, - 0xf0, 0x5b, 0x39, 0x6e, 0xb5, 0xd6, 0xc3, 0x6c, 0x89, 0x39, 0x14, 0x2e, - 0x40, 0x8d, 0xac, 0x14, 0x35, 0x25, 0xb1, 0xa0, 0x05, 0xb2, 0x20, 0x18, - 0xcd, 0x2a, 0x8b, 0x9a, 0xe4, 0x31, 0x8c, 0x64, 0x63, 0x75, 0xa9, 0x73, - 0x89, 0x1d, 0x8f, 0xe7, 0x16, 0x60, 0x20, 0x9f, 0x36, 0xa6, 0x36, 0x1b, - 0x94, 0x89, 0x98, 0xc4, 0x54, 0x19, 0x1f, 0x9d, 0x6b, 0x19, 0x5f, 0xe5, - 0x74, 0x4a, 0x61, 0x7a, 0xdc, 0xe9, 0x7c, 0xfb, 0xa8, 0x05, 0x8f, 0x7a, - 0xfb, 0x09, 0xbc, 0x57, 0x57, 0x4d, 0x59, 0xaf, 0xdb, 0x2e, 0xbf, 0xf0, - 0x0e, 0xf3, 0xb0, 0x6b, 0x30, 0x9a, 0x81, 0x03, 0x9d, 0xcb, 0xa8, 0x5a, - 0xc9, 0xe3, 0x43, 0x09, 0xe9, 0xa5, 0x7a, 0xa5, 0x7c, 0xb7, 0x46, 0xd0, - 0xf7, 0x87, 0xf7, 0xf2, 0xfe, 0x9d, 0x68, 0x7c, 0xde, 0xa4, 0xbc, 0xd0, - 0x8d, 0x49, 0x86, 0xb8, 0x89, 0xd9, 0xae, 0x27, 0x46, 0x6c, 0xfd, 0x74, - 0xab, 0xfd, 0xb8, 0x86, 0x39, 0x98, 0xa8, 0x16, 0x9f, 0xa6, 0x89, 0x34, - 0x93, 0xd6, 0x5a, 0xb1, 0x17, 0xa1, 0x54, 0x4d, 0x3a, 0xa7, 0x48, 0x71, - 0x58, 0xe9, 0x3a, 0x61, 0xa1, 0xf4, 0x6f, 0x34, 0xaf, 0x9a, 0xbb, 0x73, - 0x49, 0x53, 0x3e, 0x1e, 0x11, 0x00, 0xb6, 0x1a, 0xa8, 0x9f, 0x11, 0x1f, - 0x47, 0x5f, 0xab, 0xe0, 0x53, 0xf8, 0x33, 0xfa, 0x69, 0x33, 0x3c, 0x90, - 0x3d, 0x30, 0x0d, 0x4d, 0xd9, 0xf3, 0x4e, 0x02, 0xf9, 0x8f, 0x92, 0x36, - 0xca, 0x7e, 0x5d, 0x8f, 0x37, 0x54, 0x88, 0x46, 0xa2, 0xa0, 0x38, 0xdb, - 0xed, 0xd7, 0xc7, 0x93, 0x7b, 0xcb, 0x9a, 0x8a, 0xd7, 0xa2, 0x8a, 0xf1, - 0x2c, 0x93, 0x8e, 0xb1, 0x5a, 0x4a, 0xf3, 0xad, 0x70, 0x7e, 0x25, 0xca, - 0x31, 0x85, 0x80, 0xdd, 0x47, 0xa7, 0x8f, 0x70, 0x9f, 0x4f, 0xe2, 0xf0, - 0xd7, 0xdb, 0xf0, 0xc1, 0xf7, 0x6a, 0x4f, 0xe1, 0x63, 0xe7, 0x86, 0xec, - 0x8d, 0xe7, 0xf9, 0x28, 0x7e, 0xcf, 0x42, 0x37, 0x24, 0x23, 0xb0, 0x15, - 0x49, 0x77, 0xb0, 0xee, 0x94, 0x10, 0xca, 0x72, 0x95, 0x5f, 0x9c, 0x84, - 0xd3, 0x56, 0x2d, 0x65, 0x92, 0xa9, 0x6d, 0xe4, 0x82, 0xa3, 0x82, 0x94, - 0x4e, 0x02, 0x42, 0xbe, 0x44, 0x07, 0x63, 0xec, 0x10, 0x93, 0x38, 0x35, - 0xc7, 0x7e, 0xfb, 0xba, 0x0c, 0x9d, 0x5c, 0x22, 0xc9, 0xfc, 0x93, 0xcb, - 0x78, 0x92, 0x9c, 0x23, 0x9d, 0xd8, 0x7d, 0xbf, 0x6b, 0xfe, 0x1d, 0xec, - 0x78, 0xc7, 0x2b, 0xe1, 0x75, 0xd6, 0x10, 0x81, 0x69, 0xfa, 0x47, 0xf1, - 0x0b, 0x41, 0x85, 0x8f, 0x68, 0x1e, 0xb2, 0x99, 0xb8, 0x7c, 0x21, 0x95, - 0x16, 0x92, 0xce, 0x41, 0xb5, 0x85, 0x8c, 0xdf, 0x62, 0xe8, 0xd6, 0x6f, - 0x0d, 0x4e, 0xde, 0x73, 0x6e, 0x85, 0x5d, 0xa0, 0x9b, 0x4d, 0xa7, 0x11, - 0x69, 0x9e, 0xf0, 0x69, 0x6e, 0x5c, 0x7c, 0x3b, 0x62, 0x01, 0xfa, 0x34, - 0x5b, 0xda, 0xb0, 0x7b, 0xfc, 0x7f, 0x98, 0x02, 0x8a, 0x5f, 0xb7, 0xf4, - 0x50, 0xee, 0x6d, 0xbf, 0x02, 0x01, 0x4e, 0x75, 0x1a, 0xdd, 0x55, 0xe9, - 0x15, 0xfa, 0x4c, 0x2b, 0xd4, 0x22, 0xad, 0x3e, 0xd5, 0xda, 0x52, 0x40, - 0x27, 0x06, 0x39, 0x03, 0x49, 0xf1, 0x73, 0x3c, 0x6e, 0xd0, 0x42, 0xb5, - 0xc4, 0x3d, 0x13, 0x6c, 0x38, 0x26, 0xad, 0xe0, 0xcd, 0x85, 0x28, 0xd8, - 0xde, 0xc2, 0x89, 0x64, 0xa2, 0xd1, 0xdd, 0x20, 0xb8, 0xa7, 0xf2, 0xdb, - 0x9c, 0xf8, 0x2d, 0x6a, 0x85, 0x2c, 0x28, 0x6b, 0xc9, 0xb0, 0xc6, 0xd8, - 0xe5, 0x75, 0xf1, 0x63, 0x8c, 0xf3, 0xb9, 0xb8, 0x86, 0x8d, 0xc7, 0x3c, - 0xbc, 0xf8, 0x10, 0xc1, 0xc1, 0x4d, 0xbd, 0x3c, 0xf1, 0x2d, 0x67, 0x0b, - 0xbc, 0x58, 0x0d, 0x23, 0x42, 0x25, 0xc8, 0xbf, 0x48, 0xab, 0xbc, 0xff, - 0xcc, 0xae, 0xc1, 0x69, 0x37, 0xc6, 0xb5, 0x9e, 0x9e, 0x6b, 0x20, 0xbb, - 0x80, 0x7d, 0x5b, 0x93, 0x32, 0x9c, 0x9b, 0x38, 0x90, 0xa0, 0xf2, 0x33, - 0x0c, 0x7d, 0x06, 0x64, 0xeb, 0xdd, 0xf3, 0x7b, 0x4c, 0xd0, 0xc0, 0x67, - 0x7b, 0x33, 0x78, 0x79, 0x39, 0xeb, 0xd3, 0x6a, 0x10, 0xff, 0x2a, 0xa4, - 0x24, 0x6d, 0x4a, 0x1e, 0xd6, 0xad, 0x7f, 0xba, 0xbe, 0x5e, 0x5e, 0xc5, - 0x3d, 0xe3, 0x11, 0xcd, 0x12, 0x5a, 0x5f, 0x93, 0xd6, 0xd6, 0x67, 0x30, - 0xa7, 0x28, 0xc5, 0x7d, 0x8e, 0x19, 0xec, 0x20, 0x6c, 0x33, 0xfc, 0x11, - 0x0e, 0x2b, 0x07, 0x60, 0x06, 0x3c, 0x8b, 0x7d, 0x21, 0x8e, 0xce, 0x3d, - 0xf6, 0xcd, 0x98, 0x1c, 0x7f, 0xed, 0x46, 0xac, 0xc1, 0xbf, 0xd7, 0x96, - 0x70, 0x9f, 0x5c, 0x64, 0xb4, 0xc8, 0x07, 0xf3, 0xed, 0xcd, 0xb2, 0xa4, - 0x81, 0x9f, 0x65, 0xf6, 0x16, 0x27, 0x5e, 0xaf, 0xa6, 0x20, 0xbe, 0xf4, - 0x4d, 0xac, 0x5a, 0xe8, 0xe6, 0x4a, 0x28, 0x0f, 0xf1, 0x4b, 0xb6, 0x64, - 0x8c, 0x98, 0x33, 0x4f, 0xc1, 0xf1, 0x37, 0xb7, 0x9b, 0x35, 0x5f, 0x1f, - 0xd3, 0xf5, 0x5c, 0xf8, 0xda, 0xf6, 0xb9, 0x05, 0xd8, 0xd1, 0xc4, 0xef, - 0xb6, 0xc1, 0xdb, 0x86, 0xd5, 0xb1, 0x22, 0x96, 0xa2, 0x6e, 0x5e, 0x5f, - 0xaa, 0xcd, 0x5e, 0x9b, 0x8a, 0x7a, 0x31, 0x5c, 0x77, 0xb0, 0xb0, 0x34, - 0xed, 0xde, 0xde, 0x60, 0xdc, 0xb7, 0x2a, 0x09, 0x88, 0x9e, 0x3a, 0xaa, - 0x3e, 0xa5, 0x55, 0x3c, 0xd0, 0xa9, 0x34, 0xc1, 0x06, 0x3d, 0x9d, 0xc5, - 0x95, 0x48, 0x46, 0xd7, 0x41, 0x73, 0x5d, 0x95, 0x1d, 0x07, 0x7a, 0x0a, - 0xb2, 0x45, 0xf2, 0x88, 0x99, 0x1c, 0x70, 0x3a, 0xc4, 0xda, 0xb1, 0xba, - 0x7a, 0x38, 0x0a, 0x43, 0x3a, 0x41, 0xe1, 0x09, 0xc7, 0x24, 0x50, 0x45, - 0x70, 0xe5, 0xdb, 0xe8, 0xa2, 0x33, 0xc6, 0xc7, 0xf7, 0xd2, 0x23, 0x01, - 0xbf, 0xe1, 0xdb, 0xac, 0x3a, 0x87, 0xe1, 0x0e, 0xab, 0x3d, 0xe0, 0x1f, - 0x75, 0x52, 0x9d, 0xdd, 0x9a, 0xed, 0xb5, 0xbb, 0xa4, 0x4c, 0x56, 0x34, - 0x07, 0xf2, 0x41, 0x49, 0x72, 0x43, 0x57, 0x8c, 0xb8, 0xca, 0xa6, 0xda, - 0x6d, 0x93, 0x29, 0xc3, 0x1b, 0x2f, 0x22, 0x6a, 0xd2, 0x62, 0xa9, 0xcf, - 0x59, 0x97, 0x51, 0x10, 0x2f, 0x0e, 0x08, 0xc8, 0xe0, 0xab, 0x97, 0xa3, - 0x4b, 0x96, 0xd5, 0x00, 0xf0, 0xba, 0xca, 0x59, 0xcf, 0x8d, 0xa4, 0x13, - 0x82, 0xb7, 0x50, 0xaf, 0x6c, 0xb6, 0x80, 0xd1, 0x32, 0x7d, 0x3a, 0x8b, - 0x2b, 0xbe, 0x8d, 0xcc, 0x6c, 0xe4, 0xcf, 0x5d, 0x3b, 0x01, 0xf7, 0xfc, - 0xf5, 0x51, 0xae, 0x1d, 0x6b, 0xc8, 0x85, 0xa4, 0x78, 0xce, 0x81, 0x7c, - 0xff, 0xa6, 0x29, 0x80, 0xac, 0x44, 0xa9, 0xa3, 0xf0, 0x87, 0x69, 0x6f, - 0x7e, 0xc9, 0x37, 0xe6, 0x56, 0x8d, 0x8d, 0x9d, 0xa5, 0x31, 0x5d, 0xf4, - 0xb3, 0x05, 0x48, 0xd8, 0x78, 0xf6, 0x45, 0xdd, 0x43, 0x3c, 0x45, 0x9b, - 0x8f, 0xf8, 0x38, 0x62, 0xda, 0x6a, 0x13, 0x9d, 0x14, 0x9f, 0xd2, 0x43, - 0x00, 0x35, 0x9c, 0xeb, 0x94, 0xe0, 0x1c, 0x83, 0x4b, 0x14, 0x0c, 0x82, - 0x11, 0x6a, 0x70, 0x8a, 0xd1, 0x0d, 0xc3, 0x87, 0x43, 0x53, 0xa2, 0xa4, - 0x75, 0x40, 0x97, 0x05, 0xc5, 0x4c, 0x00, 0xdc, 0x69, 0x35, 0xbc, 0xed, - 0xaa, 0x35, 0x68, 0xd8, 0x4a, 0xf5, 0xc8, 0x58, 0xd5, 0x0b, 0x85, 0x15, - 0xef, 0x58, 0xf4, 0xf3, 0xfb, 0x45, 0x3a, 0xc0, 0xb1, 0xfe, 0xd2, 0x2d, - 0x77, 0x26, 0x49, 0x3c, 0x10, 0xbf, 0xcd, 0xe6, 0x68, 0x9a, 0x02, 0xd0, - 0xc7, 0x15, 0xa0, 0xe6, 0xb5, 0xcf, 0x26, 0xaf, 0xc4, 0x44, 0xe1, 0xdf, - 0xfc, 0x15, 0x7f, 0xc6, 0x09, 0x6b, 0x4a, 0xfc, 0x74, 0x73, 0xb8, 0x6e, - 0x2e, 0xff, 0x57, 0xd6, 0x1f, 0xca, 0x2c, 0x73, 0x5e, 0x07, 0xf0, 0x06, - 0xc4, 0xa5, 0x36, 0x80, 0x5e, 0x65, 0x81, 0x6e, 0x09, 0x0f, 0x13, 0xba, - 0x34, 0x54, 0x7e, 0x09, 0x13, 0x85, 0x45, 0xb7, 0x19, 0x09, 0xe0, 0xd9, - 0x98, 0x84, 0xd9, 0x6e, 0x36, 0x7c, 0x8e, 0x03, 0x46, 0x4f, 0xd5, 0x74, - 0x2b, 0xfa, 0x0e, 0xe4, 0xdf, 0x82, 0xad, 0x1f, 0x0c, 0x5d, 0x80, 0x00, - 0x02, 0x8d, 0x30, 0x53, 0xf4, 0x44, 0xe2, 0x36, 0xad, 0x4b, 0x97, 0x8c, - 0x36, 0xf4, 0x4d, 0xb3, 0xc8, 0xf4, 0xb4, 0x8a, 0x0b, 0xe0, 0x5b, 0x8d, - 0x04, 0xcf, 0x66, 0xbf, 0x74, 0x8b, 0x4e, 0xfa, 0x0e, 0x4a, 0x50, 0x81, - 0x91, 0xff, 0xde, 0x43, 0xc1, 0x6b, 0x78, 0x63, 0x77, 0x21, 0xf3, 0x25, - 0xe1, 0x0d, 0x49, 0x49, 0x8a, 0xe7, 0xe9, 0x7a, 0xd2, 0xd6, 0x09, 0xd4, - 0x57, 0x05, 0x53, 0xae, 0xeb, 0xbf, 0x59, 0x98, 0xad, 0xfd, 0x55, 0xbb, - 0xac, 0xba, 0xa0, 0xdc, 0x11, 0x11, 0xaa, 0xba, 0x94, 0x9d, 0x26, 0x75, - 0x91, 0xce, 0x5a, 0x22, 0xe4, 0xa6, 0x09, 0x30, 0x79, 0xe2, 0xc9, 0xcb, - 0x5d, 0x13, 0x6e, 0x74, 0x95, 0x07, 0x98, 0xe7, 0x08, 0xe4, 0x32, 0xa4, - 0x2d, 0x76, 0x65, 0x7e, 0xe4, 0xfc, 0x72, 0xae, 0xb9, 0xc5, 0x91, 0x2d, - 0xbd, 0xe7, 0x02, 0x51, 0x8b, 0x29, 0xa5, 0x09, 0x5b, 0x46, 0x86, 0xba, - 0x55, 0xb2, 0xb0, 0x14, 0x59, 0x75, 0x41, 0x75, 0x6c, 0x09, 0x94, 0x02, - 0x70, 0x7d, 0xa0, 0xd6, 0x8c, 0x16, 0x79, 0x8f, 0x3a, 0x67, 0x74, 0xeb, - 0x9e, 0x18, 0xf9, 0xd0, 0x45, 0x72, 0xaa, 0xa1, 0x85, 0xfc, 0x5c, 0x83, - 0xf7, 0x59, 0x4b, 0x1f, 0x49, 0xd5, 0x5b, 0xf5, 0x87, 0xf5, 0xd7, 0xc6, - 0xc1, 0x4f, 0x72, 0xc6, 0x76, 0xdd, 0xdb, 0x47, 0x05, 0xaa, 0xed, 0xc1, - 0xd3, 0x51, 0xc3, 0xc9, 0x8a, 0xd4, 0x26, 0xff, 0x5e, 0x80, 0xda, 0x38, - 0xc6, 0x6d, 0xdf, 0x22, 0xa1, 0x8b, 0x0b, 0xe5, 0x1f, 0xb7, 0xbe, 0xf1, - 0xf9, 0xe0, 0x7e, 0x93, 0x7f, 0x1c, 0x7a, 0xbc, 0x5c, 0xaa, 0xe9, 0xf9, - 0xaa, 0x25, 0x38, 0x88, 0xd0, 0xf7, 0x4f, 0xc0, 0xb9, 0xb3, 0x40, 0xc9, - 0xf0, 0xf9, 0x13, 0x09, 0x86, 0x88, 0x58, 0x7e, 0x81, 0xa7, 0xaf, 0xeb, - 0x1b, 0x66, 0x39, 0x40, 0x2c, 0xeb, 0x11, 0x57, 0xdb, 0x8f, 0xb9, 0x12, - 0x54, 0x3d, 0x6e, 0x86, 0xb8, 0x7e, 0x37, 0xc0, 0xd3, 0x71, 0xc0, 0xe2, - 0xcd, 0x5f, 0x94, 0xaf, 0xfe, 0x55, 0x76, 0x57, 0x1e, 0x6d, 0x9e, 0xc5, - 0xef, 0x5e, 0x30, 0xcf, 0xa9, 0xcd, 0x8d, 0xd7, 0x84, 0x9a, 0x32, 0xcf, - 0x3e, 0xf4, 0x62, 0x77, 0x66, 0x49, 0xb9, 0xc4, 0xf5, 0xcf, 0x71, 0x94, - 0x1d, 0x61, 0xa7, 0x4f, 0x4f, 0xa9, 0x5e, 0xf5, 0x55, 0xa3, 0xe5, 0xb8, - 0x91, 0x47, 0x53, 0x12, 0x72, 0x2b, 0xae, 0x93, 0xe9, 0xee, 0x07, 0x8e, - 0x37, 0x27, 0x2b, 0x13, 0x31, 0xdb, 0xe5, 0xc5, 0x39, 0x73, 0x3c, 0x71, - 0xb9, 0xad, 0x04, 0x99, 0xfe, 0x00, 0x44, 0xc4, 0xb6, 0xc9, 0x12, 0xc3, - 0x15, 0xb6, 0x2c, 0x9c, 0xde, 0x5a, 0x7a, 0x39, 0xc2, 0x66, 0xf1, 0x7c, - 0x4c, 0x93, 0x0a, 0x1d, 0x2e, 0xae, 0x2d, 0x1f, 0x23, 0x09, 0x77, 0x4a, - 0x24, 0x62, 0x6b, 0x7d, 0x49, 0x4f, 0xc2, 0x31, 0x76, 0x78, 0x31, 0xfc, - 0xbc, 0x58, 0x0e, 0xce, 0x1a, 0x65, 0xbf, 0x29, 0xb8, 0x35, 0xf9, 0x28, - 0x75, 0xfe, 0xbd, 0x54, 0x8e, 0xe5, 0x6d, 0x1e, 0xa8, 0x48, 0x4a, 0xf0, - 0x1f, 0x51, 0xb5, 0x2f, 0xd9, 0xb1, 0x57, 0x6c, 0xc5, 0x6b, 0x57, 0xa1, - 0xf4, 0x10, 0xaf, 0x20, 0xfe, 0xad, 0x5f, 0x3f, 0xff, 0xf7, 0xef, 0x80, - 0x87, 0xdf, 0x77, 0x9d, 0xe6, 0x83, 0xa9, 0x4e, 0x26, 0x37, 0xbc, 0x7f, - 0xed, 0xe2, 0xd6, 0xc0, 0x7f, 0x32, 0x2c, 0x6a, 0xb5, 0x43, 0xad, 0xbe, - 0xfb, 0x47, 0x67, 0x50, 0x26, 0x67, 0xb9, 0xe9, 0x86, 0xdf, 0x27, 0x06, - 0x18, 0x66, 0x91, 0x9c, 0x5f, 0xec, 0x5c, 0x56, 0xcc, 0xcf, 0x05, 0x95, - 0xd8, 0xfa, 0xcc, 0x3e, 0x06, 0x3c, 0xd0, 0x53, 0x37, 0x83, 0x0d, 0x96, - 0x7b, 0xca, 0xd0, 0x58, 0x71, 0x6b, 0x9c, 0x2c, 0xef, 0x25, 0x9e, 0xce, - 0x29, 0xd0, 0xf1, 0x9f, 0xb3, 0x97, 0x67, 0x14, 0x78, 0xc5, 0xa5, 0xb6, - 0xdf, 0xe9, 0x8a, 0xb8, 0xc2, 0xf2, 0x05, 0x00, 0x4c, 0xd8, 0xfe, 0x64, - 0x44, 0xfc, 0x27, 0x2c, 0x96, 0xf6, 0x8d, 0x88, 0xb9, 0x01, 0x49, 0xbf, - 0xd3, 0xc3, 0x93, 0x6a, 0x0f, 0xed, 0x15, 0xbc, 0x0b, 0x9b, 0x11, 0xe0, - 0x9e, 0x61, 0xc6, 0xa2, 0x99, 0x6b, 0x33, 0x4a, 0xf4, 0x92, 0xef, 0xe7, - 0x92, 0xde, 0x37, 0x78, 0x6f, 0x73, 0x7a, 0x32, 0x51, 0xbb, 0xc8, 0xaf, - 0x53, 0xd5, 0x5c, 0xa9, 0xf2, 0x88, 0x70, 0x22, 0xb7, 0x38, 0xd6, 0xb8, - 0x82, 0x2b, 0x19, 0xa5, 0x6f, 0x99, 0x57, 0xb4, 0xe1, 0xf1, 0x7f, 0xf5, - 0x40, 0x0d, 0x47, 0x5c, 0xea, 0x75, 0xd0, 0x47, 0xbc, 0x9a, 0x4c, 0x1e, - 0xb6, 0x57, 0xfe, 0x81, 0x55, 0x67, 0x1f, 0xad, 0xae, 0x98, 0x66, 0x65, - 0x2b, 0x32, 0x7d, 0x37, 0xe4, 0x88, 0x1e, 0x33, 0x20, 0x1a, 0x30, 0x64, - 0x43, 0xfa, 0x4f, 0x0c, 0x17, 0xff, 0x1e, 0x68, 0x40, 0xe3, 0xa1, 0x67, - 0x69, 0x88, 0xa8, 0x45, 0x3e, 0x99, 0xaa, 0x7e, 0x51, 0x6f, 0xbf, 0xf8, - 0xb6, 0xaa, 0xf0, 0x11, 0xe2, 0x8d, 0xf8, 0xe5, 0x2a, 0xe2, 0x59, 0xe2, - 0xdd, 0x48, 0xf7, 0x0c, 0x17, 0x1d, 0x55, 0x7c, 0x1c, 0x52, 0xc1, 0xd0, - 0x42, 0xf4, 0xcc, 0x6d, 0x04, 0x7a, 0x2b, 0xf9, 0x50, 0xe2, 0x7a, 0xe8, - 0xc1, 0xa9, 0xc9, 0x9d, 0x91, 0x5e, 0x7d, 0x61, 0x93, 0x15, 0x29, 0x51, - 0x29, 0x18, 0x12, 0x1a, 0x24, 0xcd, 0xbf, 0xb7, 0x55, 0x1c, 0x36, 0xb8, - 0x3b, 0xa8, 0x35, 0x0d, 0x19, 0xa6, 0xb7, 0x8b, 0x65, 0xb6, 0x24, 0xf8, - 0x93, 0x26, 0x11, 0xb3, 0xa1, 0x9b, 0x92, 0x40, 0x92, 0x1b, 0xfc, 0x70, - 0x06, 0x3f, 0x1a, 0x4e, 0x4e, 0xe3, 0xc8, 0x79, 0xba, 0xfb, 0x14, 0x23, - 0xd0, 0x33, 0x9e, 0x9d, 0xfe, 0xf6, 0x6a, 0x58, 0x9a, 0x4c, 0x0c, 0x00, - 0x2a, 0xc9, 0x65, 0xce, 0xbf, 0xd5, 0x1e, 0xd4, 0x94, 0x05, 0xe1, 0x86, - 0xf2, 0x5e, 0x16, 0xc0, 0x90, 0x2e, 0x1a, 0x31, 0x27, 0xc4, 0xc9, 0xaa, - 0xf8, 0xe5, 0x16, 0x1d, 0x7d, 0x85, 0x73, 0x33, 0x60, 0x73, 0xc8, 0x12, - 0xe5, 0xf9, 0xbb, 0xbc, 0xc3, 0xb2, 0xb2, 0x6e, 0xa1, 0xa8, 0x53, 0x48, - 0x32, 0x83, 0xec, 0xe2, 0xef, 0x81, 0xdf, 0x9e, 0xb1, 0x1c, 0x09, 0xc8, - 0xc9, 0x28, 0x84, 0x8a, 0x49, 0xaa, 0x82, 0x31, 0x44, 0x2c, 0x42, 0x23, - 0xdb, 0x24, 0xca, 0xe4, 0x70, 0xc0, 0x08, 0x2c, 0xfa, 0xaa, 0xc9, 0xe5, - 0x97, 0x7b, 0xf3, 0x3c, 0x4f, 0xa0, 0x60, 0x70, 0xa6, 0xc6, 0x2d, 0x4c, - 0xf8, 0xf0, 0x30, 0x57, 0x26, 0x37, 0x3e, 0x70, 0x6c, 0x45, 0x08, 0xed, - 0xc3, 0xd1, 0x9b, 0xa7, 0x9a, 0x0c, 0xab, 0xc9, 0x91, 0x80, 0xfc, 0xff, - 0x97, 0x1e, 0x09, 0x07, 0x54, 0x45, 0xd9, 0x06, 0xbf, 0xed, 0xcc, 0xb6, - 0x6b, 0x1c, 0x3c, 0x5c, 0xff, 0xbc, 0x83, 0x92, 0xa5, 0x3f, 0x02, 0x1f, - 0x35, 0x77, 0xcf, 0x24, 0x59, 0xf8, 0x63, 0x78, 0x4d, 0x1e, 0x96, 0x44, - 0x63, 0x97, 0x48, 0x23, 0x49, 0x2c, 0x63, 0x3a, 0x48, 0x4f, 0x9c, 0x82, - 0x66, 0xea, 0x6c, 0x4c, 0xaf, 0x9e, 0x64, 0xcf, 0x3e, 0x81, 0x31, 0x2e, - 0xb0, 0x4b, 0x45, 0xf1, 0x8c, 0xde, 0x22, 0xea, 0xfb, 0x72, 0xe5, 0x2d, - 0x18, 0xdf, 0x2f, 0xd2, 0x69, 0x0d, 0xa1, 0xe8, 0x60, 0x53, 0x3b, 0x48, - 0xf2, 0x29, 0x16, 0x2c, 0x73, 0xf7, 0x9c, 0xdc, 0x13, 0x93, 0xb5, 0x15, - 0xb7, 0x3f, 0x79, 0x62, 0xe6, 0xfd, 0x86, 0x17, 0x4a, 0xb6, 0x88, 0xfa, - 0x17, 0x9a, 0x56, 0xe1, 0xe1, 0xa3, 0x3b, 0x42, 0x06, 0x5f, 0x87, 0x3d, - 0x93, 0xad, 0xf2, 0xb6, 0x45, 0xe9, 0xf0, 0xea, 0xb7, 0xb9, 0xdd, 0x67, - 0x6a, 0xac, 0x87, 0x43, 0x55, 0xc3, 0x1e, 0x1c, 0x5a, 0xed, 0xa7, 0x91, - 0xd8, 0x82, 0x27, 0xeb, 0x2a, 0x68, 0xb9, 0xa0, 0x3c, 0x86, 0x5c, 0xd7, - 0x6f, 0xb3, 0xb7, 0xa0, 0x6f, 0x91, 0x64, 0xc5, 0xa7, 0x45, 0xd9, 0x23, - 0xd8, 0xf6, 0x69, 0x9f, 0xc6, 0x22, 0x66, 0xba, 0x64, 0x07, 0xaa, 0x50, - 0xd7, 0x07, 0xf7, 0xe4, 0xd8, 0x78, 0x9b, 0x75, 0xd1, 0x1a, 0xe2, 0xf5, - 0x14, 0x59, 0x24, 0x96, 0xec, 0xdd, 0x14, 0xef, 0xa2, 0xbf, 0x14, 0x1b, - 0x6e, 0xfd, 0x2c, 0x1f, 0xc9, 0x38, 0x5e, 0x85, 0x65, 0x7e, 0xb7, 0xe3, - 0x51, 0x5f, 0x0b, 0x3d, 0x30, 0xf5, 0xcf, 0x30, 0x98, 0x72, 0xce, 0xec, - 0xef, 0x8b, 0x04, 0xba, 0xba, 0xc6, 0xf1, 0xb4, 0x56, 0x7d, 0x5f, 0x64, - 0x8b, 0x17, 0x06, 0x64, 0x55, 0x84, 0xbf, 0x2e, 0x78, 0xda, 0x5d, 0xfc, - 0x81, 0xd6, 0xe4, 0x8a, 0x7e, 0x7b, 0x3a, 0x6c, 0x59, 0xdb, 0xd3, 0xa3, - 0xe7, 0x91, 0x7a, 0x52, 0x73, 0x95, 0x2b, 0x3d, 0x17, 0xd8, 0x34, 0xea, - 0x99, 0x68, 0xbf, 0x53, 0xc1, 0x31, 0xd6, 0x3b, 0xb1, 0xaa, 0x78, 0xb5, - 0xb1, 0x55, 0x6d, 0x0c, 0x96, 0x86, 0xa2, 0x2c, 0x36, 0xa7, 0xab, 0x62, - 0x3f, 0xcb, 0x66, 0x54, 0x6d, 0xab, 0xf7, 0x18, 0xc5, 0xec, 0x1c, 0xd8, - 0x3e, 0x7c, 0x19, 0xb7, 0x96, 0xd2, 0xa1, 0x12, 0xfb, 0xad, 0x27, 0x22, - 0x3e, 0xc4, 0x37, 0x07, 0x55, 0xc6, 0x92, 0x13, 0xac, 0xa9, 0x32, 0x3e, - 0x83, 0x02, 0x31, 0x5e, 0x94, 0x52, 0x66, 0x60, 0x99, 0x55, 0x4c, 0x3c, - 0x54, 0xe2, 0xe1, 0x16, 0x95, 0x4e, 0x81, 0x85, 0x32, 0x80, 0xe0, 0x89, - 0xa3, 0x9f, 0x73, 0x16, 0x8d, 0x70, 0xbf, 0x17, 0x71, 0x27, 0x16, 0xeb, - 0x06, 0xbb, 0xb4, 0xc3, 0x9d, 0xbb, 0x2a, 0xc3, 0xd4, 0xfa, 0x00, 0x2b, - 0x75, 0x3b, 0xbb, 0x5b, 0x14, 0xf1, 0x97, 0x92, 0x5e, 0xda, 0x71, 0x93, - 0xaf, 0xcb, 0x22, 0xeb, 0x1d, 0xf5, 0xfe, 0x42, 0x42, 0xcd, 0x13, 0x84, - 0x9a, 0xef, 0xb8, 0x55, 0x67, 0x28, 0x74, 0xa8, 0xea, 0xa1, 0x70, 0x6f, - 0x0c, 0x02, 0xe7, 0xfd, 0xcd, 0x7f, 0x1f, 0x74, 0xcb, 0xf3, 0x0f, 0x80, - 0x64, 0x30, 0xfc, 0xd0, 0xb2, 0x45, 0xc9, 0x84, 0x2b, 0x7c, 0x88, 0xa9, - 0xc0, 0x2c, 0x3d, 0xfe, 0x50, 0x2e, 0x5b, 0xfe, 0xec, 0xc8, 0xf0, 0x4d, - 0xab, 0xcc, 0xb6, 0xab, 0x55, 0x7a, 0x56, 0x20, 0x48, 0xff, 0x9d, 0x00, - 0xdf, 0x4e, 0x88, 0x2c, 0x0d, 0x97, 0xe7, 0x42, 0xe2, 0x84, 0xdd, 0x5f, - 0x41, 0xe5, 0x2c, 0x32, 0xdf, 0x7b, 0x1b, 0x81, 0x9e, 0xd3, 0x44, 0x33, - 0x57, 0x39, 0xa0, 0xa6, 0xd0, 0x61, 0xd6, 0x29, 0x49, 0x55, 0xae, 0xb0, - 0x0d, 0x76, 0x44, 0xe0, 0x4c, 0xb1, 0x34, 0x9b, 0x09, 0x19, 0x9b, 0x8e, - 0xf3, 0x7c, 0x66, 0x58, 0xf8, 0x24, 0xd8, 0xd9, 0x85, 0x61, 0x2a, 0x0d, - 0xd0, 0xfe, 0xd8, 0xa8, 0xeb, 0xd8, 0x26, 0x7e, 0x2d, 0x2d, 0x51, 0x48, - 0xae, 0xa6, 0x10, 0xc8, 0x51, 0x5e, 0x02, 0x2e, 0xd4, 0x4b, 0xcc, 0x29, - 0x6b, 0x5d, 0x22, 0x5d, 0x34, 0x6d, 0x4a, 0xff, 0x99, 0x78, 0x39, 0x13, - 0xe0, 0x49, 0xc2, 0x37, 0xf2, 0x8c, 0xab, 0xe4, 0x00, 0x6d, 0x29, 0x31, - 0x9b, 0xba, 0x51, 0x32, 0xc5, 0x08, 0x37, 0xc5, 0xec, 0x52, 0xb0, 0xf8, - 0x00, 0xe4, 0x12, 0xfb, 0xf8, 0x72, 0x59, 0x32, 0xea, 0x17, 0x48, 0xc2, - 0x7c, 0x5b, 0xc0, 0xf5, 0xde, 0x3f, 0xe9, 0x1d, 0x1d, 0xe6, 0x40, 0xb3, - 0x57, 0x29, 0x8b, 0x8b, 0x77, 0xfd, 0x9b, 0xbe, 0x9b, 0x50, 0x04, 0xc7, - 0x30, 0x7b, 0x16, 0x0a, 0x6f, 0x90, 0xff, 0xf7, 0xa6, 0x0c, 0xf3, 0x9d, - 0x42, 0xdc, 0xd8, 0x97, 0x37, 0xe1, 0x10, 0xde, 0xa4, 0x88, 0x70, 0xd6, - 0xad, 0xd0, 0x11, 0x45, 0x25, 0xaf, 0x6b, 0x53, 0x66, 0x37, 0x54, 0xf5, - 0x61, 0x44, 0x5e, 0xeb, 0x99, 0x77, 0x0b, 0xe2, 0x63, 0x25, 0xe3, 0x38, - 0xd6, 0xcc, 0x37, 0x1b, 0x40, 0xa1, 0x67, 0xe2, 0x32, 0x5c, 0xc3, 0x59, - 0x4a, 0x89, 0xcf, 0x37, 0x5b, 0xba, 0xb0, 0xd2, 0x5a, 0xa8, 0xc9, 0x30, - 0x6f, 0x76, 0x55, 0x52, 0xb4, 0x6e, 0x61, 0xd1, 0x37, 0x3d, 0x0f, 0x4a, - 0xc7, 0x9a, 0xb3, 0x6f, 0x61, 0x8e, 0x07, 0x3e, 0x38, 0x5f, 0x80, 0xaf, - 0xf5, 0x75, 0x8c, 0xb5, 0x66, 0x42, 0x68, 0x87, 0x48, 0x01, 0x15, 0x95, - 0x17, 0x0a, 0x2e, 0x3e, 0xc8, 0xaa, 0x65, 0xe2, 0x64, 0x5a, 0x3c, 0x37, - 0xb7, 0x15, 0x10, 0x26, 0x04, 0x5f, 0x19, 0x58, 0x7a, 0x38, 0xf8, 0x0b, - 0x25, 0x94, 0x2d, 0x4d, 0x20, 0xbb, 0x0c, 0x64, 0xa1, 0x0c, 0xd8, 0x34, - 0x81, 0x2a, 0xb2, 0x6c, 0xd4, 0x36, 0x18, 0x30, 0x95, 0x0d, 0xa9, 0x2a, - 0x03, 0xea, 0x9f, 0xfc, 0xef, 0x5d, 0x90, 0x80, 0x53, 0x89, 0xb6, 0xde, - 0xbe, 0x25, 0xe3, 0x66, 0x3d, 0x33, 0x0c, 0x86, 0x2c, 0xb2, 0x57, 0x24, - 0x7d, 0xd5, 0x11, 0xc0, 0x0c, 0x0e, 0xf5, 0x6c, 0x29, 0xe8, 0x02, 0xae, - 0x39, 0x3c, 0xa1, 0x41, 0x3f, 0x67, 0x7c, 0x60, 0x98, 0x02, 0x55, 0xcb, - 0x3d, 0xcb, 0xfb, 0x54, 0xad, 0x24, 0x72, 0x65, 0xb7, 0x93, 0x53, 0x62, - 0x93, 0x43, 0x24, 0xca, 0x43, 0xbb, 0xc5, 0x07, 0x77, 0x09, 0xdf, 0x98, - 0x4e, 0x45, 0x30, 0x09, 0x82, 0x3f, 0xbe, 0xfc, 0xd4, 0x3b, 0x29, 0x34, - 0xb9, 0x8f, 0x67, 0x21, 0xc6, 0x65, 0xa6, 0xb2, 0x75, 0x66, 0x61, 0x78, - 0xfc, 0xed, 0xc1, 0xe2, 0xa0, 0xe9, 0x47, 0x05, 0xa0, 0x35, 0x2f, 0x42, - 0x67, 0xa1, 0x9b, 0xb8, 0xe7, 0xe7, 0xd3, 0xc0, 0x33, 0xb3, 0xc3, 0x3a, - 0x34, 0x47, 0xb2, 0x01, 0x83, 0xb3, 0x56, 0xaf, 0xe0, 0x82, 0x23, 0xe7, - 0x25, 0x9b, 0x30, 0xea, 0x78, 0x9c, 0x70, 0x55, 0x4d, 0x99, 0x19, 0x3a, - 0xda, 0x12, 0xc1, 0x4d, 0x42, 0xbe, 0xcc, 0x07, 0xd4, 0x71, 0x1d, 0x20, - 0xb2, 0xf6, 0xe9, 0xdf, 0x62, 0xf9, 0x66, 0x75, 0x34, 0xc0, 0x99, 0x16, - 0xb6, 0xa1, 0x75, 0x2c, 0x38, 0x50, 0xe0, 0xfc, 0x6c, 0x18, 0xd8, 0x43, - 0x2b, 0xdf, 0x2d, 0xf0, 0xd3, 0x4e, 0x8e, 0x3f, 0x35, 0xb7, 0x54, 0x84, - 0xc8, 0x38, 0x5f, 0xd7, 0x00, 0xc6, 0xc1, 0x64, 0xda, 0x46, 0x0c, 0x2f, - 0xfe, 0x69, 0x12, 0xb4, 0x6e, 0x64, 0xff, 0x80, 0x75, 0x7b, 0x98, 0xa2, - 0xb6, 0xd4, 0x23, 0x6e, 0xea, 0x75, 0x43, 0x6f, 0x5c, 0x5e, 0x03, 0x77, - 0x40, 0x81, 0x43, 0x26, 0x31, 0xd0, 0x97, 0xc5, 0xa9, 0xe4, 0x78, 0x75, - 0x3d, 0x66, 0x73, 0x41, 0xe6, 0x21, 0x9a, 0x3a, 0xde, 0x19, 0x36, 0x93, - 0x8d, 0x56, 0xe2, 0x17, 0x3f, 0x14, 0x54, 0xc5, 0x20, 0xbf, 0xb6, 0x43, - 0x7b, 0x6c, 0xac, 0xf9, 0xbe, 0xa9, 0xe5, 0xfc, 0x57, 0xd7, 0x38, 0x6a, - 0x92, 0x07, 0x73, 0x92, 0xb2, 0x2b, 0xdb, 0xb1, 0xdb, 0x5c, 0xae, 0x53, - 0xac, 0x8b, 0xa1, 0xad, 0xd2, 0xe5, 0xe0, 0xa4, 0x2d, 0xe0, 0xbf, 0x70, - 0x60, 0xbf, 0xef, 0xa9, 0x62, 0x9e, 0x20, 0x1f, 0x43, 0xc3, 0xae, 0x70, - 0xb7, 0x22, 0x77, 0xe7, 0x94, 0x13, 0x93, 0x44, 0x68, 0x2f, 0x22, 0x29, - 0xac, 0xf3, 0xff, 0xc8, 0xce, 0x60, 0x3b, 0xa8, 0x9a, 0x99, 0x54, 0xcb, - 0x04, 0x0c, 0xf7, 0x41, 0xf8, 0xed, 0x1a, 0x25, 0x8c, 0xbe, 0x2d, 0x2c, - 0x85, 0x3e, 0x22, 0xec, 0x85, 0x13, 0xe6, 0x1f, 0x65, 0x0a, 0xd4, 0xc5, - 0xcf, 0x35, 0x2f, 0xb0, 0xa9, 0x5a, 0xe2, 0x0e, 0x5d, 0xf5, 0x32, 0x84, - 0xd7, 0xcd, 0x98, 0x15, 0xb5, 0x65, 0x5d, 0xff, 0xf0, 0x9d, 0x9c, 0x87, - 0x2d, 0x26, 0x2a, 0xdc, 0x05, 0xfc, 0x72, 0xdc, 0x35, 0x97, 0xd6, 0x20, - 0xf7, 0x9b, 0x64, 0x06, 0x5a, 0x68, 0x5a, 0x26, 0x1a, 0x87, 0x93, 0x9d, - 0xe9, 0xe4, 0x50, 0x5e, 0x59, 0xbc, 0xdb, 0x85, 0x23, 0x20, 0x7b, 0x28, - 0x5a, 0xbc, 0x21, 0x5e, 0xad, 0xfd, 0xfd, 0x0b, 0xb4, 0xfa, 0xe1, 0x4d, - 0xcb, 0xa3, 0xfe, 0xd2, 0xa6, 0x99, 0xb1, 0xe5, 0x4f, 0x05, 0x0f, 0xe8, - 0x28, 0xbf, 0x58, 0x13, 0xd7, 0x31, 0xbb, 0x09, 0xad, 0x8a, 0x2a, 0x3e, - 0x85, 0x06, 0x81, 0x2a, 0xdf, 0xe2, 0xd9, 0xfd, 0xb2, 0x42, 0xc2, 0x5c, - 0x98, 0xe5, 0xbd, 0x17, 0x6a, 0xc8, 0x89, 0xa7, 0x5d, 0x2e, 0xed, 0x84, - 0xe1, 0x37, 0xe4, 0x9f, 0x61, 0x21, 0x47, 0x54, 0xa4, 0xaa, 0x46, 0xce, - 0x55, 0x38, 0xb2, 0xfb, 0xc0, 0xa6, 0x8b, 0xe7, 0xb6, 0xf3, 0xb0, 0x7d, - 0x62, 0x1b, 0x0e, 0x2a, 0xf3, 0x39, 0xa3, 0x34, 0xf7, 0x8a, 0xb5, 0x91, - 0xfe, 0x73, 0xb9, 0xa5, 0xc3, 0x34, 0xb3, 0x8b, 0x71, 0xe5, 0xe4, 0x6c, - 0x34, 0x09, 0xef, 0x5c, 0x4a, 0x0c, 0x0f, 0xdf, 0xed, 0xab, 0x6c, 0x0f, - 0x49, 0x92, 0x9b, 0xf4, 0x95, 0xe1, 0xbf, 0xf8, 0x9d, 0xf1, 0xd1, 0xe2, - 0xf8, 0x81, 0x43, 0xdc, 0x39, 0xd1, 0xba, 0x51, 0x5f, 0xc6, 0xe4, 0x60, - 0x21, 0x68, 0xb2, 0xf3, 0xeb, 0xda, 0xd1, 0xfd, 0xaf, 0xc8, 0xb1, 0x02, - 0x94, 0xa0, 0xe8, 0x31, 0x1a, 0xe1, 0x6e, 0xff, 0xff, 0xee, 0xb2, 0x9c, - 0xe3, 0x73, 0x54, 0x0d, 0x13, 0x67, 0xde, 0x18, 0x97, 0xad, 0xc2, 0xc5, - 0xf3, 0x4d, 0xf2, 0x4d, 0x9b, 0x8c, 0xcf, 0xfa, 0xdb, 0x88, 0xe4, 0x5e, - 0x5b, 0xf5, 0xe3, 0x92, 0x3f, 0xff, 0xc2, 0x6b, 0xfe, 0xae, 0xea, 0x9b, - 0x52, 0xfe, 0xc0, 0x4b, 0xcc, 0xf9, 0xfa, 0x12, 0x63, 0xf8, 0x7f, 0xf8, - 0xf9, 0x88, 0x30, 0xcf, 0x57, 0xa2, 0x7b, 0xd2, 0x2a, 0xb6, 0xe1, 0xb9, - 0x77, 0x6e, 0x06, 0x60, 0xb9, 0x1b, 0x9d, 0x65, 0x40, 0x1a, 0x90, 0x90, - 0x4f, 0x17, 0xfb, 0x9b, 0xf9, 0x1d, 0x68, 0xb3, 0x6d, 0x59, 0x51, 0xee, - 0x54, 0x74, 0xb1, 0xf1, 0xa7, 0x62, 0xb2, 0x4e, 0xd7, 0x02, 0x47, 0x11, - 0x7b, 0x1d, 0x0e, 0x37, 0x08, 0xb7, 0x57, 0x97, 0x3b, 0x32, 0xda, 0x89, - 0xb9, 0x86, 0x2e, 0x5a, 0xec, 0x81, 0x08, 0x75, 0xaa, 0x41, 0x53, 0xd7, - 0x97, 0x99, 0x67, 0x25, 0x30, 0x6f, 0x49, 0x59, 0xae, 0x91, 0xf2, 0xa4, - 0xb7, 0x3e, 0x1e, 0xd3, 0xb3, 0x39, 0x3e, 0x5a, 0x4e, 0xc4, 0x53, 0x07, - 0x29, 0x6e, 0x02, 0x75, 0x83, 0x20, 0x4d, 0x26, 0xa0, 0xe1, 0xcb, 0xdb, - 0x56, 0xed, 0xd8, 0x0e, 0xf0, 0x3e, 0x80, 0x91, 0xb4, 0x23, 0x7a, 0xe9, - 0xef, 0x11, 0x73, 0x6b, 0xc6, 0x73, 0xc5, 0x46, 0x6d, 0x04, 0x64, 0xde, - 0x58, 0xdf, 0x3e, 0xb3, 0x41, 0x9c, 0x9d, 0x44, 0x6f, 0x58, 0x12, 0x80, - 0x48, 0x05, 0x14, 0xe8, 0x9c, 0xf2, 0xbb, 0xbd, 0x7a, 0x13, 0xf5, 0x9a, - 0x48, 0x72, 0xc3, 0x7d, 0x6d, 0x54, 0x1a, 0x7c, 0x30, 0xcd, 0x78, 0x10, - 0xac, 0x38, 0x46, 0xd4, 0x85, 0xf6, 0xe5, 0x35, 0x6b, 0xa1, 0x51, 0xea, - 0x4d, 0x16, 0x58, 0xe9, 0x79, 0x14, 0x3f, 0x92, 0x97, 0x01, 0x0f, 0x6d, - 0x34, 0x90, 0x91, 0x1c, 0xb9, 0xdc, 0xa7, 0xad, 0x1f, 0x8f, 0x3f, 0x24, - 0x00, 0xfe, 0x5e, 0xcb, 0xad, 0xaa, 0x0d, 0x88, 0xd1, 0xe3, 0xb0, 0xa7, - 0xda, 0x11, 0xef, 0x68, 0x81, 0x95, 0x80, 0x9e, 0x81, 0xdb, 0x26, 0xcc, - 0x09, 0x78, 0x3e, 0x60, 0xee, 0x39, 0xc2, 0xb1, 0x8b, 0xa0, 0x5b, 0x63, - 0xd3, 0xc8, 0xa9, 0x41, 0x64, 0xbd, 0x06, 0x11, 0x2b, 0xf0, 0x43, 0x08, - 0xf0, 0x5d, 0x3b, 0x3c, 0x7d, 0xb5, 0x6f, 0xec, 0x6b, 0x65, 0xf4, 0x12, - 0xdf, 0xa3, 0x6e, 0xab, 0x11, 0xca, 0xc7, 0x10, 0x61, 0xd1, 0xdd, 0xf2, - 0xa3, 0x03, 0xd7, 0x82, 0xf0, 0xf8, 0x30, 0xfe, 0x01, 0x42, 0x87, 0x58, - 0xb9, 0x9d, 0x85, 0xa1, 0x03, 0x31, 0xa3, 0x31, 0xc3, 0xc1, 0xa9, 0xad, - 0x13, 0x69, 0xcb, 0x4c, 0x75, 0x07, 0xc8, 0x60, 0x5a, 0x8f, 0x38, 0x5c, - 0xa4, 0x4b, 0xc3, 0x4b, 0x9a, 0xb2, 0x19, 0xda, 0xfd, 0xbf, 0x22, 0x19, - 0xaa, 0x29, 0xaa, 0x23, 0xa5, 0x75, 0xb2, 0x69, 0x3c, 0xe7, 0x39, 0xc8, - 0x5c, 0xda, 0x4d, 0xd2, 0x51, 0x95, 0x95, 0x71, 0xb8, 0x17, 0x10, 0x71, - 0xf5, 0x95, 0xa0, 0xf4, 0x11, 0x41, 0x40, 0x1d, 0x8e, 0xff, 0xaf, 0xf2, - 0xa3, 0xdd, 0xa2, 0x85, 0x4c, 0x3e, 0x82, 0x29, 0x4e, 0x6a, 0x08, 0xd1, - 0x87, 0x30, 0xaa, 0xe6, 0x59, 0x96, 0xab, 0xf7, 0x70, 0x88, 0x36, 0x3d, - 0x0b, 0x4e, 0xf0, 0x4f, 0x85, 0xe9, 0xa6, 0x86, 0xc7, 0xff, 0xd0, 0xf7, - 0xc2, 0xed, 0xe6, 0x87, 0xd2, 0xfd, 0x72, 0x2b, 0x34, 0x76, 0x6b, 0xed, - 0x9a, 0xd1, 0x55, 0x89, 0x44, 0x3b, 0xc5, 0xb9, 0xc0, 0xa2, 0x0a, 0x14, - 0x57, 0x22, 0x50, 0x45, 0x2d, 0xea, 0xe2, 0x2c, 0x8f, 0x8e, 0x45, 0x57, - 0x8c, 0x05, 0x7b, 0xe6, 0x27, 0x86, 0xb0, 0xef, 0x4e, 0xaf, 0xb7, 0x6b, - 0xe9, 0x41, 0x04, 0x07, 0x53, 0xf6, 0x68, 0x30, 0xd0, 0xc5, 0x5f, 0xf0, - 0x0e, 0xda, 0xf5, 0xd9, 0x8f, 0x01, 0x00, 0xf0, 0xdb, 0x72, 0xa6, 0x78, - 0xc2, 0xad, 0x6d, 0x05, 0x11, 0xae, 0x7e, 0x7a, 0xcb, 0x25, 0x02, 0xd4, - 0x5f, 0x70, 0x95, 0xaf, 0xda, 0x88, 0x2d, 0xa6, 0xfe, 0x3c, 0xfa, 0x7b, - 0x16, 0xfb, 0xb3, 0x4f, 0x5d, 0x6b, 0x43, 0x97, 0x51, 0x3c, 0xbf, 0xab, - 0x9f, 0xd4, 0x0f, 0x9f, 0xb2, 0x9e, 0x6d, 0xea, 0xbf, 0x08, 0x0c, 0xf0, - 0xb2, 0xe9, 0xd5, 0x31, 0x6e, 0x95, 0x8d, 0x2f, 0x2a, 0xc4, 0x7a, 0x43, - 0x27, 0x55, 0x32, 0x7c, 0xc2, 0xf2, 0xb2, 0x97, 0xf1, 0xd8, 0x4c, 0xd6, - 0x0d, 0xb7, 0xc6, 0x80, 0xc6, 0x5e, 0x0a, 0xd4, 0xf8, 0x09, 0x5d, 0xc1, - 0x4a, 0xad, 0x2e, 0x9f, 0x2e, 0x3a, 0x66, 0x73, 0xb9, 0xa3, 0x66, 0x73, - 0x51, 0x2c, 0x3c, 0xcb, 0xac, 0xad, 0x74, 0xb4, 0xce, 0xb8, 0x68, 0x0b, - 0xa5, 0x43, 0xc6, 0xa6, 0xca, 0xb6, 0x58, 0xdc, 0x91, 0xaf, 0x55, 0x06, - 0xe9, 0xb4, 0x51, 0x27, 0x21, 0x8b, 0x93, 0xef, 0x4b, 0x19, 0xc8, 0xd1, - 0x5a, 0x24, 0x64, 0x46, 0x34, 0xde, 0x85, 0x58, 0xdf, 0x13, 0x4a, 0xa8, - 0x6b, 0x7e, 0x21, 0x27, 0xbc, 0x1d, 0xcf, 0xc9, 0xb4, 0xd7, 0xd8, 0x16, - 0xe4, 0xd3, 0xed, 0x29, 0xcf, 0x70, 0xc1, 0x64, 0x4c, 0xd3, 0xe7, 0xf9, - 0x91, 0x1b, 0x80, 0x29, 0xce, 0x25, 0x7e, 0xf0, 0x97, 0x0a, 0x59, 0x61, - 0x09, 0x2e, 0x29, 0x28, 0xcc, 0x8e, 0xc1, 0x61, 0x72, 0x29, 0x81, 0xe8, - 0x92, 0xd5, 0xc1, 0x50, 0xb6, 0x16, 0xc6, 0xff, 0xad, 0x2f, 0x26, 0x34, - 0x88, 0x5e, 0x19, 0x96, 0x00, 0x5b, 0x7b, 0x84, 0x18, 0x0f, 0xc2, 0xeb, - 0x2b, 0x1d, 0xc1, 0x59, 0xd2, 0x30, 0xcb, 0x14, 0xa8, 0xc4, 0xd1, 0x12, - 0xf2, 0x4e, 0x5b, 0xff, 0x1f, 0x23, 0xe8, 0x0c, 0xa7, 0xff, 0xd8, 0xba, - 0xe2, 0x2e, 0xfb, 0x19, 0x5b, 0xa3, 0x84, 0xb4, 0x9e, 0x17, 0xf1, 0x7b, - 0x0c, 0xb9, 0x90, 0xc8, 0x95, 0x7c, 0xee, 0x02, 0x77, 0x8a, 0x31, 0xc8, - 0xac, 0x80, 0xa5, 0xe1, 0x47, 0x48, 0x2c, 0x1d, 0xad, 0x4a, 0x52, 0x4b, - 0xfa, 0x1d, 0x02, 0xe9, 0x08, 0xf8, 0xb5, 0x9e, 0xae, 0x58, 0x08, 0xa3, - 0xcb, 0xda, 0x13, 0x22, 0x16, 0xbe, 0x3e, 0x08, 0xf6, 0x47, 0x83, 0xe6, - 0xba, 0x3d, 0xb3, 0x3a, 0x88, 0x84, 0x5c, 0x7e, 0x99, 0xd4, 0x1b, 0x17, - 0xed, 0x48, 0xe0, 0x52, 0xfa, 0x0c, 0x37, 0xf3, 0x2a, 0x45, 0xda, 0x72, - 0x75, 0xa3, 0x21, 0x1e, 0x28, 0x6c, 0xcf, 0xa3, 0xae, 0x39, 0xa3, 0x88, - 0xb1, 0xc0, 0xcc, 0x03, 0xd2, 0x8d, 0x38, 0xe3, 0x13, 0x84, 0x99, 0xa6, - 0x89, 0x17, 0x79, 0x72, 0x35, 0x50, 0x3c, 0xdd, 0x76, 0x5f, 0xaa, 0xee, - 0xaf, 0xfa, 0xb7, 0x3b, 0xd5, 0xe4, 0x99, 0x61, 0x99, 0x3c, 0x70, 0xfb, - 0x7e, 0xa2, 0x28, 0x63, 0x02, 0xf8, 0x8d, 0x8c, 0x60, 0xbc, 0xeb, 0xb5, - 0x9f, 0x8c, 0x71, 0x01, 0x55, 0x5e, 0xd6, 0x8a, 0x67, 0x94, 0x86, 0xcb, - 0xc0, 0x72, 0x18, 0x92, 0xc5, 0xde, 0x8c, 0x2f, 0x9c, 0x01, 0x9a, 0x9a, - 0x31, 0xc2, 0xf1, 0xa2, 0x10, 0x56, 0x45, 0xa8, 0x8c, 0x31, 0x25, 0xf4, - 0x0c, 0x1b, 0x69, 0x21, 0x54, 0x2e, 0x58, 0x57, 0xcb, 0xcb, 0x75, 0x94, - 0x45, 0x5c, 0xea, 0x65, 0x14, 0xe6, 0x19, 0x95, 0x78, 0x45, 0x64, 0x7a, - 0x91, 0xac, 0xd6, 0x28, 0x1b, 0xc6, 0xa4, 0x6b, 0xe4, 0x92, 0x2b, 0x6d, - 0x40, 0xcc, 0x8d, 0xeb, 0x50, 0xc6, 0x2f, 0x14, 0xcb, 0x4e, 0xf9, 0xd7, - 0xe6, 0x35, 0x3d, 0x24, 0x4d, 0x7e, 0x6d, 0x34, 0xe7, 0x47, 0x0f, 0x3f, - 0x36, 0x50, 0x2f, 0x56, 0x64, 0x59, 0x3d, 0xc5, 0xf0, 0xe7, 0xe4, 0x8a, - 0x76, 0x4c, 0xf4, 0x8f, 0x47, 0x5d, 0xe6, 0xfa, 0xe8, 0x2b, 0x40, 0x96, - 0x8d, 0x50, 0x89, 0x16, 0x57, 0x28, 0xee, 0x41, 0x68, 0xd9, 0xc9, 0x9c, - 0x42, 0xd7, 0xc7, 0x5b, 0xe4, 0x24, 0x98, 0xda, 0xca, 0x7a, 0x16, 0xf0, - 0x24, 0x8d, 0xfd, 0xf9, 0x6b, 0x55, 0x48, 0x49, 0x25, 0x0d, 0xb4, 0x1e, - 0xce, 0x9a, 0xbe, 0x3e, 0x7d, 0x7c, 0x5e, 0x3e, 0x8e, 0xf0, 0xbd, 0xc1, - 0xba, 0xb4, 0x0a, 0xeb, 0xa3, 0x15, 0x1c, 0x8d, 0xcb, 0x88, 0x11, 0xc2, - 0x53, 0x8d, 0xb9, 0xbf, 0xe9, 0xc6, 0x68, 0x1a, 0x15, 0x2f, 0xbf, 0x3c, - 0xa1, 0x1a, 0xf6, 0x7f, 0xbc, 0x2e, 0x5d, 0x15, 0x61, 0x6a, 0xcd, 0xdb, - 0x21, 0x1c, 0x9c, 0x77, 0x04, 0xde, 0x88, 0x15, 0x42, 0x1e, 0xd5, 0xf4, - 0x03, 0x7a, 0x78, 0x8a, 0x58, 0xf5, 0xb1, 0xd8, 0x6b, 0x68, 0x18, 0xf9, - 0x1a, 0x57, 0x0f, 0x2a, 0x82, 0xc1, 0xe4, 0xaf, 0x61, 0x10, 0xf0, 0x47, - 0xa6, 0x91, 0x62, 0x1d, 0x49, 0xf0, 0x01, 0xcf, 0xe1, 0x94, 0xd2, 0xce, - 0x0b, 0xb1, 0x45, 0x2d, 0x84, 0x14, 0x28, 0xf0, 0x5b, 0xd9, 0xc7, 0x14, - 0xb8, 0x9d, 0x72, 0x77, 0x82, 0x21, 0x4a, 0xc3, 0x8f, 0xdb, 0x44, 0x91, - 0xbe, 0x9e, 0xc0, 0xbb, 0x47, 0x98, 0x03, 0xa0, 0xdd, 0x79, 0x7d, 0xba, - 0x3d, 0x29, 0xdb, 0x37, 0xba, 0x20, 0x3d, 0xe2, 0x02, 0x2a, 0x93, 0xd6, - 0x1f, 0xf7, 0x87, 0xeb, 0x84, 0x85, 0xcf, 0xb7, 0x0d, 0x00, 0xbd, 0x50, - 0xd6, 0xae, 0xb7, 0x25, 0x7e, 0xd5, 0x66, 0x28, 0x39, 0x6b, 0x26, 0xfb, - 0x62, 0x1e, 0xd7, 0x73, 0xd1, 0x15, 0x96, 0x3c, 0x14, 0xd8, 0x13, 0xc7, - 0x98, 0x8f, 0xeb, 0xc1, 0x54, 0x7a, 0x55, 0xcd, 0xb1, 0x0a, 0x38, 0x80, - 0xbe, 0x80, 0x89, 0x4c, 0x4e, 0x97, 0xcf, 0x42, 0x7b, 0xc3, 0x27, 0x5f, - 0xdb, 0x22, 0xb1, 0x4f, 0xac, 0x4f, 0x9d, 0xc1, 0x46, 0x2d, 0xed, 0xa5, - 0x0e, 0xc0, 0xbf, 0x8d, 0xdd, 0x9a, 0x06, 0xba, 0x59, 0xa1, 0xcf, 0xc6, - 0x9e, 0xd0, 0xb6, 0x45, 0xba, 0x4f, 0x36, 0x69, 0xf0, 0x4b, 0xea, 0x62, - 0x5d, 0x4f, 0xd2, 0x21, 0xf9, 0xdd, 0xc4, 0x74, 0xf2, 0x42, 0x74, 0xf0, - 0x4c, 0x32, 0x9b, 0xae, 0x55, 0x5c, 0x52, 0xfa, 0xd1, 0xa1, 0x16, 0x91, - 0x8e, 0x4d, 0xe7, 0xdc, 0xcd, 0xe9, 0x4f, 0x25, 0x44, 0x65, 0x20, 0xfb, - 0x25, 0x6f, 0x42, 0x3b, 0xc7, 0x96, 0xae, 0x1d, 0x4d, 0x88, 0x37, 0x47, - 0xd7, 0x47, 0x22, 0x40, 0xd0, 0xfe, 0x4f, 0x19, 0x4a, 0xa1, 0x7b, 0xf7, - 0xb3, 0x97, 0x13, 0x72, 0x2f, 0x4a, 0x4f, 0x87, 0x66, 0x13, 0xc5, 0xb6, - 0x1d, 0xab, 0x37, 0x60, 0x7c, 0x68, 0xdf, 0x92, 0xd9, 0x16, 0xc1, 0x27, - 0xff, 0x19, 0xc7, 0x19, 0xc0, 0x14, 0xf0, 0xf0, 0xcf, 0xeb, 0xa2, 0xa1, - 0x79, 0xab, 0x7b, 0x84, 0xda, 0xce, 0x49, 0x91, 0xe5, 0xc7, 0x88, 0x47, - 0x95, 0x29, 0xf7, 0xaa, 0x55, 0xf6, 0x2b, 0x89, 0xcd, 0x91, 0xe0, 0x4b, - 0xa6, 0xe7, 0xae, 0xcc, 0xa7, 0x67, 0x1e, 0xaa, 0xf3, 0x55, 0xb7, 0xe9, - 0x10, 0x75, 0xe0, 0x83, 0x2b, 0x0f, 0xbc, 0xa6, 0x88, 0xf8, 0x32, 0x28, - 0xe7, 0x99, 0xbb, 0x12, 0xd3, 0x30, 0xf7, 0xea, 0x18, 0x9a, 0x49, 0x8f, - 0x32, 0x76, 0x98, 0x9a, 0x7e, 0x06, 0x14, 0x35, 0x73, 0x68, 0xc5, 0xf6, - 0x3a, 0x4a, 0x07, 0x8e, 0xe6, 0xe7, 0x13, 0x73, 0x19, 0x1a, 0x27, 0xa7, - 0xd1, 0xbc, 0xf3, 0x1d, 0xc1, 0xa2, 0x0b, 0x47, 0x41, 0x4e, 0x78, 0xbc, - 0x71, 0x76, 0x8a, 0xca, 0x60, 0x63, 0xd6, 0x1d, 0xe9, 0xbe, 0x39, 0x99, - 0xee, 0x19, 0xdb, 0x49, 0x09, 0x29, 0x02, 0xb8, 0xd4, 0x0b, 0x19, 0xda, - 0xb8, 0x87, 0x3e, 0x5f, 0x77, 0x45, 0xd8, 0x80, 0x10, 0x38, 0x93, 0xdb, - 0x09, 0x35, 0x88, 0xb1, 0x9b, 0xee, 0x42, 0xd8, 0xb2, 0x67, 0xd7, 0x86, - 0x13, 0xf3, 0xc6, 0x75, 0x77, 0x4c, 0xa5, 0x0c, 0x44, 0x9c, 0xfa, 0xe9, - 0x06, 0xae, 0x62, 0x6c, 0xc8, 0xf3, 0xd8, 0xbe, 0xde, 0x6b, 0xf2, 0x5d, - 0x0c, 0xd5, 0xe5, 0xa4, 0x25, 0x58, 0xd6, 0xa4, 0x1e, 0xb5, 0xb7, 0xa6, - 0x3f, 0xb0, 0x51, 0xef, 0x49, 0xcd, 0x3e, 0x70, 0xa7, 0xc8, 0x53, 0x99, - 0x1c, 0x7e, 0x21, 0xcd, 0xfa, 0x3f, 0x22, 0x2a, 0x35, 0xf7, 0x5b, 0xfc, - 0x33, 0xb6, 0x58, 0x86, 0xac, 0x64, 0x33, 0x43, 0xa1, 0x09, 0x39, 0x6b, - 0xb8, 0xa3, 0x32, 0x16, 0xb3, 0xbe, 0x30, 0x02, 0xa1, 0x66, 0xb1, 0x5a, - 0x7e, 0xc7, 0x12, 0xc3, 0x21, 0xf6, 0x27, 0x2e, 0xc4, 0x48, 0x17, 0xb8, - 0xfe, 0xa5, 0x48, 0x9f, 0x93, 0x5f, 0x6b, 0xaa, 0xd2, 0x1b, 0x68, 0xc1, - 0xaf, 0x8b, 0x69, 0xca, 0xe9, 0x60, 0xa6, 0xc6, 0x93, 0x3c, 0x42, 0xba, - 0xaa, 0x6e, 0x77, 0x9e, 0x4f, 0x35, 0xa4, 0xb1, 0x8c, 0x95, 0x15, 0x7a, - 0x80, 0xa9, 0x97, 0x3b, 0xb0, 0x66, 0x36, 0xf6, 0x3a, 0xe8, 0xcf, 0x99, - 0xe0, 0xaa, 0xaf, 0x2c, 0x3b, 0x60, 0x21, 0x24, 0xb7, 0x71, 0xa7, 0x96, - 0x0a, 0x27, 0xca, 0x88, 0x72, 0x4f, 0xda, 0x51, 0xda, 0x38, 0x97, 0x9f, - 0x9a, 0x27, 0x24, 0xac, 0x4b, 0x6a, 0x4c, 0x10, 0x6b, 0xe9, 0x30, 0x2d, - 0xcb, 0x64, 0xa6, 0xce, 0x89, 0x4e, 0xe7, 0x0a, 0xc8, 0x47, 0x5d, 0x2a, - 0x38, 0x54, 0xc4, 0x7e, 0x0c, 0xea, 0x2e, 0x73, 0xf5, 0x72, 0xe7, 0xf9, - 0x94, 0x2c, 0xf5, 0x99, 0x9a, 0x04, 0xc9, 0x92, 0x71, 0xc6, 0xd3, 0xd0, - 0xff, 0xd2, 0xcf, 0xbf, 0x8b, 0xdb, 0xc9, 0xe4, 0x10, 0xc1, 0xcc, 0x29, - 0x62, 0x4f, 0xb7, 0x4e, 0x6d, 0xf3, 0xb0, 0xaf, 0xb1, 0x9b, 0x34, 0xf9, - 0xd5, 0xf1, 0x4c, 0xf3, 0x0e, 0xc3, 0xca, 0xcb, 0xa5, 0x92, 0x41, 0xc5, - 0x0a, 0xcb, 0x95, 0x8b, 0xa9, 0xf6, 0x02, 0x86, 0x60, 0xbb, 0x72, 0xf6, - 0x94, 0xae, 0x40, 0xbc, 0xfb, 0x8d, 0xed, 0xfa, 0x61, 0xe2, 0x03, 0xe0, - 0x01, 0x1c, 0xa6, 0xb0, 0xaa, 0x78, 0x52, 0x67, 0x45, 0xd3, 0x7d, 0x07, - 0x5d, 0x9c, 0xdf, 0xc0, 0xca, 0x52, 0xa4, 0xf9, 0x8e, 0xb6, 0x3a, 0x1f, - 0x06, 0x54, 0xa3, 0x02, 0xab, 0x0f, 0xb7, 0xf7, 0x87, 0x06, 0xbc, 0x43, - 0x26, 0xec, 0x8e, 0x57, 0xf6, 0x67, 0xa7, 0x68, 0x98, 0xfc, 0x17, 0x98, - 0x75, 0xa9, 0xb1, 0x4f, 0xdd, 0x37, 0x21, 0xc6, 0xb2, 0x9d, 0xa2, 0x9b, - 0xb1, 0x9f, 0x3b, 0xd6, 0x3f, 0xab, 0xa4, 0x8c, 0x33, 0x2a, 0xb5, 0x3b, - 0x10, 0xc6, 0xa4, 0xf9, 0x10, 0xd8, 0x1b, 0xdf, 0x46, 0xfe, 0xea, 0xf8, - 0xfa, 0xf9, 0xd8, 0xe6, 0x45, 0x8d, 0x65, 0x89, 0xcf, 0x9e, 0x93, 0x0e, - 0xbb, 0xca, 0xc0, 0xc3, 0x33, 0xe9, 0xe8, 0x4c, 0x50, 0xe8, 0xcd, 0xc4, - 0x26, 0xe7, 0x3d, 0x96, 0x0f, 0xc7, 0x07, 0x30, 0xaa, 0x62, 0xd4, 0x17, - 0x17, 0x2f, 0x7c, 0x4c, 0x53, 0xc9, 0xa5, 0x52, 0x52, 0xa7, 0x19, 0xd7, - 0x34, 0x0e, 0xf1, 0x4c, 0x69, 0x17, 0xdf, 0x43, 0xdb, 0x5f, 0x20, 0xf8, - 0xe3, 0x48, 0xd5, 0x24, 0xbc, 0x08, 0x3d, 0xcb, 0x2b, 0x5e, 0xf7, 0x7c, - 0x5d, 0xa4, 0x2f, 0xdf, 0x8a, 0x4a, 0x27, 0x18, 0x51, 0x31, 0x2d, 0x0a, - 0xf8, 0xdc, 0x30, 0xe6, 0xfa, 0x7a, 0x00, 0x61, 0xcd, 0xdb, 0x93, 0x43, - 0xc3, 0xbd, 0xc6, 0x0b, 0x82, 0x57, 0xf7, 0x9f, 0x0c, 0xb0, 0x43, 0xf2, - 0xe9, 0x61, 0xc6, 0x3a, 0x2a, 0x57, 0x4c, 0x74, 0x56, 0x07, 0x57, 0x7c, - 0xf1, 0xc8, 0x60, 0x55, 0xf7, 0x17, 0x17, 0xc7, 0xc0, 0x76, 0x11, 0xee, - 0xb4, 0xa1, 0x1c, 0x47, 0xf8, 0xd5, 0xb8, 0x1f, 0xe4, 0x47, 0x93, 0x17, - 0x4e, 0x55, 0xf1, 0x9f, 0x58, 0xb3, 0x46, 0xf1, 0x20, 0xd0, 0xe0, 0x30, - 0x7e, 0x5d, 0x18, 0x61, 0x8d, 0xe2, 0xf9, 0x78, 0xb3, 0x30, 0x41, 0xe5, - 0xe0, 0x1f, 0xff, 0x76, 0x51, 0xc6, 0x2b, 0x9a, 0x20, 0xe7, 0x6b, 0x79, - 0xe2, 0xad, 0x0d, 0x2d, 0x9b, 0x48, 0x2f, 0xbf, 0x44, 0x4a, 0xcb, 0xb0, - 0xd3, 0x63, 0x48, 0xab, 0xfe, 0x32, 0xef, 0xf9, 0x55, 0x09, 0x84, 0xe3, - 0xfc, 0x09, 0x30, 0x23, 0xcf, 0x30, 0x34, 0x43, 0x1e, 0x59, 0x65, 0x44, - 0x8a, 0x89, 0x2c, 0x1e, 0x3a, 0x3a, 0x17, 0x49, 0x0c, 0x0b, 0x7d, 0xb3, - 0xfd, 0x26, 0x73, 0x5b, 0xd1, 0x98, 0x08, 0x1a, 0x2a, 0xfc, 0xe9, 0x9e, - 0x61, 0xfb, 0x06, 0x97, 0x84, 0x2c, 0xb7, 0xf5, 0xca, 0xd9, 0xdf, 0x6c, - 0x22, 0x23, 0x03, 0xb6, 0x0c, 0x0c, 0xdb, 0x75, 0x00, 0x47, 0xfc, 0x5c, - 0xd1, 0x6a, 0xcb, 0x68, 0xe9, 0x35, 0x4b, 0x26, 0x0a, 0xda, 0x09, 0x86, - 0xdf, 0xda, 0x5a, 0x97, 0xdc, 0x59, 0x0e, 0x74, 0x6c, 0x0c, 0xc8, 0xc7, - 0x58, 0x55, 0xf8, 0x63, 0x7c, 0x75, 0x19, 0x13, 0x7a, 0xa1, 0xb9, 0xe4, - 0x62, 0xf0, 0x59, 0x0c, 0x37, 0xa5, 0x5e, 0xce, 0x62, 0x52, 0x26, 0x2b, - 0x35, 0xae, 0x98, 0x0e, 0x3e, 0xc8, 0x90, 0x34, 0x24, 0xbb, 0xe9, 0xdf, - 0x53, 0x3b, 0x03, 0x47, 0x47, 0x03, 0x0a, 0xbc, 0xd1, 0x15, 0xc6, 0x27, - 0x82, 0x36, 0x4b, 0xd7, 0x77, 0x52, 0x7e, 0x85, 0x21, 0x83, 0x0a, 0xb2, - 0xdd, 0x93, 0xc6, 0x2a, 0x79, 0x17, 0x75, 0xe5, 0xbc, 0xdb, 0x29, 0xb5, - 0xd1, 0xc7, 0x0d, 0xdd, 0x45, 0xf2, 0x3f, 0xda, 0x7f, 0xba, 0x14, 0xe8, - 0x6f, 0xf7, 0x2d, 0x49, 0x07, 0x19, 0x02, 0x9d, 0x99, 0x96, 0xb4, 0x1e, - 0xc0, 0xf2, 0x29, 0x43, 0xfe, 0xc2, 0xb9, 0xd2, 0xec, 0x59, 0x13, 0x20, - 0xd7, 0xcd, 0x6e, 0x5b, 0xae, 0x67, 0x7b, 0xd0, 0xd9, 0x4c, 0xf4, 0x42, - 0xfa, 0xe5, 0xe1, 0x91, 0xe9, 0xac, 0xd8, 0xde, 0x25, 0x34, 0x13, 0x56, - 0x82, 0x74, 0xd7, 0xf2, 0x45, 0x8a, 0x7e, 0xfa, 0x6c, 0x56, 0x8c, 0x2c, - 0x94, 0x45, 0x29, 0x01, 0xc0, 0xbb, 0x82, 0x86, 0x63, 0xb4, 0x52, 0x3a, - 0xab, 0x92, 0x76, 0x81, 0xf7, 0xdb, 0xff, 0x64, 0x6b, 0x18, 0x27, 0xde, - 0xfa, 0x41, 0x04, 0x8f, 0xaa, 0xae, 0x3e, 0x74, 0x01, 0x95, 0x4f, 0xf9, - 0x5d, 0xba, 0x12, 0x0e, 0xd4, 0xee, 0x59, 0x85, 0xf4, 0x70, 0x19, 0x56, - 0xd9, 0x23, 0x35, 0x46, 0x83, 0xde, 0x6f, 0x3c, 0xd6, 0x3c, 0x8c, 0xfe, - 0x0b, 0x22, 0xab, 0x79, 0x17, 0xb2, 0x9c, 0x42, 0x75, 0xdb, 0x33, 0x23, - 0x04, 0x8a, 0x47, 0x4e, 0xaf, 0x46, 0x3e, 0x77, 0x1d, 0x1b, 0x52, 0xed, - 0xad, 0x50, 0x95, 0xd6, 0xd2, 0x87, 0x9d, 0x4b, 0x47, 0xfb, 0x05, 0xc2, - 0x79, 0xbb, 0x8e, 0x62, 0x7d, 0xa5, 0xa1, 0x0e, 0x8a, 0x21, 0xb9, 0x47, - 0x6e, 0xe7, 0x5c, 0x4a, 0x43, 0xc3, 0xa4, 0x68, 0xab, 0x04, 0x18, 0x87, - 0x53, 0xf8, 0x06, 0x2e, 0xb5, 0x15, 0x45, 0xcc, 0x76, 0x9d, 0x18, 0xb8, - 0x61, 0x59, 0x7d, 0x4e, 0x42, 0x3a, 0x07, 0x4c, 0xc7, 0x82, 0xfd, 0x2d, - 0x5f, 0x48, 0xc1, 0x68, 0xe6, 0x76, 0xaf, 0x36, 0x1b, 0x14, 0x18, 0xb7, - 0x50, 0x1c, 0x69, 0x69, 0x79, 0x1b, 0x30, 0xbc, 0x39, 0x9f, 0x90, 0x3f, - 0x50, 0x35, 0x1e, 0xd9, 0xab, 0x4b, 0x0b, 0xc0, 0xef, 0x8e, 0xd4, 0xce, - 0xef, 0xeb, 0x44, 0x3e, 0xc1, 0xb6, 0xc2, 0x03, 0x88, 0x25, 0x0c, 0xe7, - 0x76, 0x5b, 0xdb, 0xe4, 0x13, 0x06, 0xc8, 0x2c, 0xbc, 0xac, 0x31, 0x1f, - 0xe1, 0x35, 0x92, 0x38, 0xe4, 0x39, 0x28, 0x81, 0xa8, 0x02, 0x54, 0x3f, - 0x71, 0x82, 0x7a, 0x9c, 0xbd, 0xc3, 0x24, 0x2d, 0xd7, 0x18, 0x64, 0x9c, - 0xb7, 0x87, 0x22, 0xf3, 0x1a, 0xa4, 0x02, 0x29, 0x98, 0x5a, 0xbc, 0x76, - 0x41, 0xd7, 0x98, 0xbb, 0xc5, 0x7d, 0x93, 0x94, 0xa4, 0xe9, 0x81, 0x25, - 0xd4, 0x50, 0xe6, 0x70, 0x74, 0x18, 0xb1, 0xad, 0x89, 0xb6, 0xf6, 0xe1, - 0x4e, 0x66, 0x02, 0xeb, 0x1d, 0x24, 0xfa, 0x81, 0xc0, 0xcc, 0xb1, 0x74, - 0x2d, 0x97, 0x07, 0x8f, 0x79, 0x64, 0x18, 0x5a, 0x99, 0x4f, 0xde, 0x2b, - 0xcc, 0xc7, 0x2e, 0x28, 0xca, 0xf8, 0xdf, 0x11, 0xf6, 0xbf, 0xe1, 0xbf, - 0x6e, 0xc1, 0x20, 0x05, 0x96, 0x46, 0xb1, 0x56, 0xca, 0x2d, 0x49, 0x17, - 0xca, 0x28, 0x5b, 0x5f, 0xbe, 0x8d, 0xe0, 0xd8, 0x79, 0x97, 0x3f, 0xc0, - 0xc0, 0x33, 0x0a, 0xd0, 0x66, 0xf5, 0x34, 0xde, 0x75, 0x0a, 0x9d, 0xa5, - 0x71, 0xc6, 0x52, 0x1d, 0x68, 0x15, 0x35, 0x4e, 0xa9, 0xa3, 0xba, 0x9d, - 0x92, 0x5b, 0x16, 0xe3, 0x96, 0x65, 0x26, 0x22, 0x7e, 0x98, 0x23, 0x97, - 0xe0, 0x17, 0xc8, 0xb7, 0xbd, 0x09, 0x11, 0xb8, 0xd0, 0x45, 0xe2, 0x32, - 0x92, 0xf5, 0xd1, 0xdb, 0xc0, 0x7b, 0x12, 0x84, 0xde, 0x13, 0x0c, 0x44, - 0xb4, 0x80, 0x04, 0x2b, 0x8f, 0x20, 0x1f, 0x06, 0x38, 0x2f, 0x44, 0x92, - 0xe5, 0xfd, 0x70, 0x14, 0xdd, 0xbe, 0xe5, 0xff, 0x0a, 0x28, 0x9d, 0x42, - 0x75, 0x13, 0x03, 0xea, 0xa0, 0x9b, 0xdc, 0x97, 0xda, 0x13, 0xf2, 0x66, - 0x9d, 0x2f, 0x75, 0x28, 0xea, 0x12, 0xd3, 0x0b, 0x3a, 0x6b, 0x67, 0xb2, - 0x21, 0xd5, 0xb1, 0x47, 0xa9, 0xf6, 0x6a, 0x29, 0x01, 0xf7, 0x0b, 0x18, - 0x76, 0x19, 0xc0, 0xa0, 0xee, 0x43, 0xa8, 0x8a, 0x77, 0x02, 0x70, 0x57, - 0xea, 0xf0, 0x5d, 0xa5, 0xb5, 0x77, 0x51, 0x8c, 0x7d, 0xd6, 0xe7, 0xc1, - 0xf0, 0x4a, 0xcf, 0xc8, 0x87, 0x04, 0x57, 0xd4, 0x21, 0xc6, 0xe1, 0xc5, - 0x01, 0x98, 0xa9, 0xa1, 0xb2, 0x4b, 0x72, 0xa8, 0xaf, 0xe5, 0xb6, 0x16, - 0x63, 0xf0, 0xac, 0x05, 0x45, 0x51, 0x93, 0xfd, 0xa7, 0xc8, 0xbe, 0x6a, - 0x0e, 0x15, 0xa0, 0x94, 0x57, 0x72, 0x7f, 0x79, 0x14, 0x13, 0x09, 0x6c, - 0x97, 0x06, 0x72, 0x2a, 0xc2, 0x15, 0xf9, 0x9c, 0x09, 0x5e, 0xf6, 0x58, - 0xaf, 0x5d, 0x36, 0x1f, 0x3f, 0x38, 0xfe, 0xd5, 0x70, 0xa3, 0x91, 0x2e, - 0x0f, 0x2e, 0xba, 0xe1, 0xf6, 0x14, 0x85, 0x27, 0xc3, 0x73, 0x3b, 0x66, - 0xdd, 0xdf, 0xd0, 0xe3, 0x16, 0xc4, 0x91, 0x52, 0xc1, 0xb3, 0x49, 0x0d, - 0x96, 0xe1, 0x8d, 0xcd, 0xdd, 0xa6, 0x49, 0x64, 0xa1, 0xb4, 0xe6, 0xb5, - 0xc6, 0x47, 0x62, 0x2a, 0x0d, 0xec, 0xce, 0x65, 0xf9, 0x0d, 0x5d, 0x7b, - 0x46, 0x39, 0x26, 0x75, 0x3e, 0xee, 0x4f, 0xf0, 0x32, 0x49, 0x24, 0x07, - 0xac, 0xcf, 0x20, 0xbf, 0x28, 0x58, 0xee, 0x2a, 0x4b, 0x21, 0xfd, 0x28, - 0x21, 0x14, 0x71, 0x7e, 0x34, 0xfb, 0xc7, 0x2c, 0xa6, 0xec, 0xba, 0x5a, - 0xad, 0x1a, 0x60, 0x4d, 0x38, 0x81, 0x07, 0x12, 0x74, 0x1c, 0x59, 0x89, - 0x0b, 0x34, 0x77, 0xa2, 0xc0, 0x6a, 0x59, 0xbe, 0x99, 0x25, 0xca, 0x59, - 0x34, 0x70, 0x9f, 0xc6, 0x99, 0xd3, 0x44, 0x21, 0x98, 0x23, 0xe8, 0x1a, - 0xce, 0x0b, 0x6e, 0xee, 0x22, 0xfd, 0x56, 0xf4, 0x27, 0x6d, 0x0a, 0x01, - 0xb5, 0x52, 0xb2, 0xf7, 0xb4, 0x8d, 0x4d, 0x03, 0x6d, 0x5a, 0xd2, 0x2e, - 0xc9, 0xa9, 0xc6, 0x06, 0x42, 0xc5, 0x1b, 0xde, 0x50, 0x90, 0x7a, 0x77, - 0x53, 0xa2, 0x27, 0x67, 0x54, 0xd2, 0xd4, 0x33, 0x0c, 0x1a, 0xb7, 0x65, - 0xd0, 0x76, 0xb7, 0x54, 0xb0, 0x45, 0x1a, 0xb5, 0xb4, 0xad, 0xc2, 0x05, - 0xb5, 0x41, 0x5a, 0xd3, 0x64, 0xb6, 0x60, 0xf4, 0x36, 0x69, 0x71, 0xbd, - 0x71, 0x79, 0x6b, 0x1a, 0xae, 0xe8, 0xa5, 0x48, 0x51, 0x0f, 0x2d, 0x9d, - 0x74, 0xdd, 0xbb, 0xa0, 0x3f, 0x69, 0xff, 0x82, 0x13, 0x32, 0xfd, 0x60, - 0x89, 0x39, 0xc4, 0x3b, 0x81, 0x0c, 0x46, 0xdd, 0x56, 0x7b, 0x4c, 0xd4, - 0x3a, 0x83, 0x92, 0x81, 0x1b, 0xe7, 0xcc, 0xc1, 0xfc, 0xbe, 0x62, 0xac, - 0x7b, 0x5d, 0x61, 0x22, 0x86, 0x00, 0x8e, 0x25, 0x9f, 0xf4, 0x13, 0x00, - 0x57, 0x30, 0xed, 0xbc, 0x9d, 0xde, 0x8e, 0x87, 0xff, 0x51, 0x43, 0x50, - 0xcf, 0x5e, 0x48, 0x14, 0x2e, 0x19, 0xe9, 0xdd, 0xb9, 0xd2, 0xde, 0xcd, - 0xcb, 0xf1, 0x63, 0x6c, 0xb7, 0xc9, 0xd7, 0x2d, 0x3c, 0xe0, 0x53, 0x37, - 0x98, 0x61, 0x7d, 0x70, 0x4a, 0xb4, 0x34, 0x44, 0x39, 0xc3, 0x71, 0xd5, - 0xaf, 0xff, 0x8f, 0x73, 0xbf, 0xfa, 0x63, 0x4d, 0xbe, 0x2a, 0x8a, 0x4b, - 0x56, 0x3d, 0x4c, 0x4b, 0xe4, 0x7c, 0x2c, 0x66, 0xfc, 0x01, 0xab, 0x41, - 0xe6, 0x41, 0x1e, 0x5b, 0xf4, 0x5b, 0x33, 0x08, 0xea, 0xc4, 0x99, 0xcb, - 0x23, 0xe1, 0x36, 0xe1, 0x60, 0x6e, 0xad, 0xfa, 0xe1, 0xfc, 0x8d, 0x60, - 0x58, 0xc4, 0x23, 0x9c, 0x63, 0xe2, 0xcf, 0x21, 0xcf, 0x07, 0x44, 0x19, - 0x1f, 0x9b, 0x40, 0x3b, 0xc1, 0xe6, 0x46, 0x86, 0xd9, 0x53, 0xc2, 0x27, - 0x40, 0xa6, 0xb4, 0xed, 0xce, 0x98, 0x66, 0xe1, 0xc0, 0x01, 0x36, 0x63, - 0x07, 0x5b, 0x61, 0x79, 0xa5, 0x8c, 0x5f, 0xd7, 0x9f, 0x9b, 0xcd, 0x40, - 0xdc, 0x29, 0x69, 0x13, 0xb3, 0xa3, 0x80, 0x3f, 0xdb, 0x62, 0xbf, 0x90, - 0x7e, 0xf6, 0x94, 0x89, 0xea, 0x08, 0xd4, 0x70, 0xe6, 0x27, 0x1c, 0x5c, - 0xb4, 0x82, 0x8c, 0xff, 0x26, 0xcb, 0xad, 0x98, 0xe4, 0xef, 0x99, 0x5a, - 0xfb, 0x05, 0xc6, 0xe7, 0x91, 0xe2, 0xa4, 0x7c, 0x5b, 0x0b, 0xd9, 0x60, - 0x17, 0xab, 0x0e, 0x99, 0x5d, 0x7f, 0x02, 0x42, 0x2b, 0x32, 0x41, 0xfc, - 0xd1, 0x27, 0x63, 0xf4, 0x69, 0x54, 0x4b, 0x4f, 0xcc, 0x09, 0x20, 0xd3, - 0x4a, 0x8f, 0xa1, 0xa4, 0x66, 0x3f, 0x57, 0x44, 0x94, 0xff, 0xb3, 0x97, - 0x58, 0xd2, 0xc1, 0xa2, 0x67, 0x1f, 0x87, 0x1c, 0x6a, 0xe9, 0x10, 0x15, - 0xe2, 0xa4, 0xac, 0xf6, 0xc7, 0x87, 0xdc, 0x81, 0x02, 0x89, 0xa0, 0x57, - 0x21, 0x9c, 0xfc, 0xa0, 0x22, 0x94, 0x9f, 0x56, 0x81, 0xaa, 0xea, 0x8e, - 0x71, 0x25, 0xc6, 0x57, 0xb0, 0xc3, 0x9a, 0x08, 0xfc, 0x1d, 0xa9, 0xc0, - 0x68, 0xb1, 0x29, 0x05, 0x97, 0xe8, 0x6d, 0xc4, 0x5e, 0x1e, 0x64, 0x16, - 0xc1, 0x71, 0x4b, 0x23, 0xb9, 0x5b, 0x85, 0xd1, 0xc3, 0x18, 0xa2, 0x7e, - 0xcb, 0x0c, 0x6c, 0x2a, 0x43, 0x51, 0x58, 0x63, 0xbb, 0xaf, 0xdc, 0x9d, - 0xfc, 0x6e, 0x76, 0xa0, 0x46, 0x0c, 0x31, 0xca, 0x3e, 0xdb, 0x91, 0x0e, - 0x6d, 0xd0, 0x30, 0x64, 0x40, 0x6c, 0x82, 0x8f, 0xc9, 0x92, 0x41, 0xf5, - 0x74, 0x37, 0x43, 0xd7, 0x41, 0x55, 0xdd, 0xc2, 0xb2, 0xb9, 0x09, 0x6e, - 0xb3, 0xc0, 0x03, 0x11, 0x95, 0x2f, 0xbc, 0x0e, 0xef, 0x61, 0x6b, 0xb3, - 0xf9, 0xd4, 0xa6, 0xea, 0xf4, 0x1b, 0xf5, 0x04, 0x69, 0x84, 0xd4, 0x5b, - 0x06, 0xc5, 0x83, 0x71, 0xfd, 0x52, 0x56, 0x24, 0x0d, 0x4b, 0x0c, 0xd2, - 0x29, 0xdf, 0xda, 0xb6, 0x2d, 0xc1, 0x5e, 0x1c, 0x42, 0x37, 0xb5, 0x68, - 0x89, 0x4e, 0x67, 0x44, 0x85, 0x38, 0xab, 0xf3, 0x4d, 0x02, 0x17, 0xe8, - 0xb2, 0x0e, 0xf7, 0x1e, 0x8a, 0x5f, 0x42, 0x16, 0x97, 0xea, 0xa6, 0x2d, - 0x88, 0x84, 0xf3, 0x1e, 0x00, 0xb7, 0xf5, 0x0c, 0xbb, 0xcd, 0x09, 0xc5, - 0xcf, 0xdb, 0x1a, 0x5e, 0x55, 0xdb, 0x46, 0x42, 0xa3, 0x63, 0xac, 0x3f, - 0x06, 0x53, 0xba, 0xcf, 0xbb, 0x31, 0x54, 0x77, 0x99, 0xe1, 0x48, 0xd3, - 0xb4, 0x29, 0x1e, 0xad, 0x0d, 0x6f, 0xac, 0xd4, 0x4c, 0x1f, 0xb0, 0x92, - 0xe5, 0x35, 0x48, 0x69, 0x0a, 0xbe, 0x62, 0xe9, 0xb4, 0xb8, 0x68, 0x20, - 0x3c, 0x6d, 0x69, 0xbf, 0x30, 0x21, 0xc6, 0xe4, 0x9d, 0x08, 0x8b, 0xd0, - 0xf1, 0xb8, 0x84, 0x4e, 0xd5, 0x4c, 0xf1, 0xbb, 0x3a, 0x58, 0x11, 0x06, - 0xcd, 0x56, 0x4b, 0x5f, 0xda, 0xb9, 0x34, 0x91, 0xc2, 0x3b, 0xfc, 0xd1, - 0x1e, 0x96, 0x24, 0xd2, 0xb6, 0x76, 0xe2, 0xe4, 0xae, 0x9e, 0x30, 0x40, - 0x3e, 0xea, 0xd8, 0x73, 0x90, 0x31, 0xe1, 0xdd, 0xed, 0xcf, 0x85, 0xcf, - 0x2b, 0x3e, 0x64, 0x7f, 0x4d, 0x8a, 0x1d, 0x0e, 0x2c, 0xd5, 0xe2, 0x43, - 0xae, 0x76, 0x3f, 0x21, 0x53, 0x3c, 0xd1, 0x1b, 0xdb, 0x2a, 0x9f, 0x27, - 0xd1, 0x28, 0x1b, 0x46, 0x96, 0x07, 0xe5, 0xdc, 0xd7, 0xca, 0xf1, 0x93, - 0x1a, 0x24, 0xcf, 0x4d, 0xef, 0xaf, 0x40, 0x4e, 0x2d, 0x93, 0xb6, 0x07, - 0xe4, 0xef, 0xf5, 0xc1, 0xca, 0x98, 0x7c, 0xa8, 0x10, 0x20, 0x06, 0x88, - 0x06, 0xb2, 0x52, 0xd9, 0x86, 0xae, 0x9d, 0x1a, 0x62, 0x06, 0x53, 0xed, - 0x31, 0x53, 0xc9, 0xce, 0x67, 0x02, 0x48, 0x4d, 0x23, 0x37, 0x22, 0x7d, - 0x14, 0xe0, 0x9a, 0xfd, 0xe4, 0x02, 0xfe, 0x6b, 0x9f, 0xa9, 0x46, 0x59, - 0x54, 0x6c, 0x77, 0x9d, 0xee, 0x72, 0xd2, 0x18, 0x7f, 0x1c, 0x1d, 0xcc, - 0x30, 0x87, 0xcd, 0x49, 0xc4, 0x42, 0x0d, 0x83, 0x10, 0x1c, 0x10, 0xa3, - 0x9e, 0x4e, 0xfd, 0xfd, 0xd4, 0x9f, 0x5e, 0xca, 0xad, 0x34, 0x6c, 0x32, - 0x63, 0x6b, 0xf0, 0xe5, 0x0c, 0x46, 0x39, 0x65, 0x83, 0x66, 0x07, 0x3a, - 0xfe, 0x92, 0xae, 0x72, 0x47, 0x5e, 0x30, 0xee, 0x07, 0xc6, 0xd5, 0x20, - 0x4a, 0xb6, 0xa7, 0xb8, 0x79, 0xff, 0xbf, 0x8e, 0xf9, 0x57, 0xa8, 0x25, - 0x9b, 0x05, 0xe3, 0x48, 0xd3, 0x39, 0xd2, 0x6c, 0x70, 0xdc, 0x8a, 0xa3, - 0x49, 0x94, 0x43, 0xec, 0xea, 0xac, 0x67, 0xf5, 0xb0, 0x31, 0x06, 0x2a, - 0xcb, 0xb4, 0xb2, 0x5a, 0x59, 0x7d, 0xd3, 0x7c, 0x6a, 0xd2, 0x6b, 0xf3, - 0xb6, 0x79, 0x58, 0xc5, 0x0e, 0x0f, 0x34, 0x71, 0x43, 0x3c, 0xec, 0x16, - 0xd1, 0xc3, 0x0c, 0xf7, 0xb4, 0x59, 0xf7, 0x14, 0x25, 0x7c, 0x13, 0x5c, - 0x10, 0xb8, 0x63, 0x50, 0x6e, 0xf4, 0x9a, 0x6e, 0x2f, 0x16, 0x6a, 0x06, - 0x32, 0x4c, 0x07, 0x9a, 0x90, 0xf9, 0x63, 0x82, 0xea, 0xec, 0x92, 0xfd, - 0x92, 0x59, 0xee, 0xc1, 0xeb, 0x0a, 0xe8, 0x20, 0xc7, 0x0a, 0x71, 0x12, - 0xde, 0xfd, 0x89, 0xe2, 0xbe, 0xd0, 0x53, 0x03, 0x59, 0xaa, 0x08, 0xa9, - 0x26, 0x6b, 0x76, 0x99, 0xb1, 0x11, 0xb9, 0xf5, 0xd1, 0xbc, 0xd0, 0x01, - 0x28, 0x67, 0xf6, 0x55, 0x22, 0xdd, 0x9c, 0x2d, 0x3e, 0x51, 0xd3, 0xe8, - 0x57, 0xbd, 0x0d, 0x76, 0x4b, 0x96, 0x31, 0x99, 0xf0, 0xd6, 0x62, 0x8e, - 0xc3, 0xdc, 0xdb, 0xba, 0x2b, 0x4c, 0xa4, 0xe1, 0xc3, 0x9d, 0xbc, 0xe9, - 0xe5, 0x2b, 0x59, 0x64, 0xc9, 0xb9, 0x61, 0x26, 0x0c, 0x5d, 0xa0, 0x6a, - 0xd1, 0x3a, 0x17, 0x3d, 0x7f, 0x50, 0x63, 0xd2, 0x61, 0x1b, 0xb9, 0x2e, - 0x3d, 0x4e, 0x12, 0x6c, 0x6b, 0x5e, 0x94, 0x9d, 0x8e, 0x83, 0x2e, 0xe9, - 0xe6, 0x12, 0x2f, 0x49, 0xab, 0x15, 0xa2, 0x46, 0x62, 0x70, 0x72, 0xf5, - 0xdb, 0xc6, 0x2d, 0x71, 0xcc, 0x48, 0xae, 0x04, 0xe3, 0x5e, 0xd6, 0xa7, - 0x31, 0xd0, 0x03, 0xc8, 0x61, 0x8d, 0x10, 0x0d, 0xaf, 0x65, 0xea, 0x88, - 0xf3, 0x51, 0x7f, 0x4c, 0x99, 0xa2, 0x38, 0xeb, 0x8f, 0x06, 0x88, 0x20, - 0xfe, 0xf1, 0x4c, 0xd2, 0xe3, 0xb3, 0x44, 0x2d, 0x6f, 0x93, 0x29, 0x13, - 0xec, 0x16, 0x8b, 0x86, 0x74, 0xb7, 0x27, 0xe2, 0xf0, 0x30, 0x4d, 0x52, - 0x26, 0x5f, 0x1b, 0x9f, 0x52, 0x52, 0x6b, 0xdb, 0xb5, 0x74, 0xe6, 0x5f, - 0xa7, 0x4f, 0x76, 0xcb, 0xc5, 0x1e, 0xa8, 0x2a, 0x94, 0xfd, 0x06, 0x74, - 0xfb, 0xd6, 0x2a, 0x20, 0xfd, 0xa0, 0x45, 0xc6, 0x65, 0xd5, 0xa6, 0x83, - 0xa3, 0x20, 0x7e, 0x4d, 0x7e, 0xac, 0x90, 0x6b, 0x74, 0x5a, 0xd8, 0x41, - 0x86, 0x74, 0x53, 0x8d, 0x53, 0x5a, 0x88, 0x53, 0x2d, 0xa6, 0x47, 0xff, - 0x07, 0x83, 0x83, 0xfb, 0x36, 0x24, 0x3d, 0x88, 0xe3, 0x28, 0xa3, 0x97, - 0x43, 0x9b, 0x1b, 0x26, 0x16, 0xb4, 0xe9, 0xec, 0xa6, 0x6f, 0xc9, 0xef, - 0x22, 0x36, 0x98, 0x83, 0x71, 0xed, 0x5e, 0xf5, 0xef, 0xe2, 0xf9, 0x85, - 0xf3, 0x08, 0xe2, 0xda, 0x44, 0x76, 0x03, 0x2b, 0x87, 0x9b, 0xd2, 0x74, - 0x61, 0xb6, 0x65, 0x01, 0x6b, 0x20, 0x79, 0xde, 0xd4, 0x1c, 0x3c, 0x7e, - 0x75, 0xb4, 0x89, 0x1a, 0xf2, 0xa3, 0x0d, 0x6d, 0x4e, 0x6b, 0x04, 0xf6, - 0x98, 0xa2, 0x57, 0x8e, 0x22, 0xf5, 0xad, 0xd8, 0x60, 0xb1, 0x83, 0xdd, - 0x30, 0xb1, 0x82, 0xa2, 0x48, 0xa3, 0x2f, 0x19, 0x3d, 0x36, 0x45, 0xfe, - 0xb2, 0x6e, 0xde, 0xbc, 0x7f, 0x71, 0x55, 0x0a, 0x4d, 0x75, 0xad, 0x5e, - 0x4e, 0xcc, 0x8e, 0x62, 0x43, 0x3e, 0xbb, 0x08, 0xb4, 0x5a, 0xc8, 0xc2, - 0xd8, 0x4d, 0x2b, 0x51, 0x62, 0x0f, 0xac, 0x03, 0xcd, 0x6e, 0x54, 0x28, - 0xb0, 0x02, 0x51, 0x31, 0x99, 0xef, 0xc5, 0x09, 0x1c, 0x6f, 0xc2, 0x24, - 0xc6, 0x13, 0x5d, 0xd6, 0x01, 0xc2, 0x70, 0xc2, 0x5a, 0xfe, 0x95, 0x96, - 0x20, 0x98, 0xe8, 0x6a, 0xb8, 0x98, 0x32, 0x57, 0xe3, 0xb6, 0xdc, 0x4a, - 0x75, 0x61, 0xbd, 0x98, 0xdb, 0x0b, 0xf8, 0xbb, 0x52, 0xa5, 0x4a, 0x93, - 0x21, 0xc2, 0x43, 0xc2, 0x6f, 0x8f, 0x36, 0xf7, 0x64, 0x92, 0x25, 0x9f, - 0xae, 0x47, 0xc4, 0x48, 0xa8, 0xae, 0xa0, 0x83, 0x60, 0x9e, 0x80, 0xc5, - 0x39, 0x84, 0x33, 0x70, 0xb9, 0x51, 0x76, 0x1f, 0xb4, 0xb7, 0x44, 0xcc, - 0x19, 0xf3, 0xa0, 0xa7, 0xa6, 0xe6, 0x60, 0x1d, 0x18, 0xd7, 0x41, 0x55, - 0xa7, 0x68, 0xbc, 0x5e, 0x96, 0x7a, 0x8a, 0x96, 0x09, 0xed, 0x74, 0x71, - 0xed, 0x8c, 0x64, 0x67, 0x82, 0x6a, 0x50, 0x59, 0x95, 0x3e, 0xb5, 0x98, - 0x7e, 0xa1, 0xa8, 0x0b, 0x26, 0x33, 0xdb, 0x1e, 0x88, 0x9b, 0x7c, 0x26, - 0xd0, 0x08, 0x18, 0xd4, 0xcd, 0x88, 0xd4, 0x89, 0x20, 0xb2, 0x0c, 0xa5, - 0x33, 0xd2, 0x2d, 0x9e, 0xf0, 0xe4, 0x41, 0x81, 0xbb, 0x76, 0x10, 0xc1, - 0xda, 0xf2, 0x04, 0xb3, 0xf9, 0x51, 0x03, 0x45, 0x25, 0xe8, 0x36, 0x46, - 0x5c, 0x72, 0xc6, 0xf2, 0x77, 0x22, 0x8e, 0x81, 0x77, 0xcd, 0xe2, 0x12, - 0x6f, 0x23, 0x2a, 0xbc, 0x5f, 0xd8, 0x66, 0xa7, 0x14, 0xe0, 0xf9, 0x06, - 0x3f, 0x29, 0xf9, 0x86, 0x99, 0x00, 0xb2, 0x72, 0x82, 0x49, 0x67, 0x18, - 0x2d, 0xde, 0x12, 0x1f, 0xde, 0x96, 0xdf, 0xa1, 0x15, 0x76, 0x93, 0x91, - 0x5b, 0x67, 0xb6, 0x8a, 0x6b, 0xf3, 0x2a, 0x6b, 0xb5, 0x29, 0x7a, 0x10, - 0x81, 0x83, 0x8b, 0xa8, 0x3e, 0xb4, 0x65, 0x08, 0xa6, 0x81, 0x68, 0xfe, - 0xbe, 0x25, 0x2a, 0xe5, 0x45, 0x86, 0x13, 0xa4, 0xd9, 0xcc, 0x29, 0x57, - 0x1e, 0xed, 0x7e, 0xda, 0x4e, 0xf5, 0x93, 0x4f, 0x22, 0x72, 0x57, 0x2a, - 0x9f, 0x27, 0xd9, 0xa8, 0x7c, 0x68, 0xe9, 0x1b, 0x06, 0xf8, 0x8f, 0x55, - 0x4a, 0x8b, 0x8c, 0x2c, 0x9a, 0x57, 0xd7, 0xd7, 0x36, 0xe7, 0x59, 0x37, - 0x70, 0xf4, 0x98, 0xc9, 0x05, 0xac, 0x3f, 0x82, 0x8e, 0xb0, 0x7f, 0x81, - 0xe4, 0xcf, 0x0e, 0x65, 0x6c, 0x9f, 0xa5, 0xa8, 0x06, 0x91, 0x94, 0xd6, - 0x6f, 0xc6, 0x64, 0x42, 0x9e, 0x98, 0xc0, 0xb2, 0x1e, 0x33, 0x1a, 0x17, - 0xb2, 0xea, 0x75, 0xc5, 0x55, 0x37, 0x39, 0xf9, 0xc9, 0xa9, 0x31, 0xe2, - 0x2e, 0xec, 0x02, 0x22, 0x13, 0x88, 0xe2, 0x92, 0x8a, 0x4c, 0x1e, 0xce, - 0xeb, 0x07, 0xbd, 0x45, 0x9c, 0x6c, 0x59, 0x67, 0xa5, 0xe2, 0xa4, 0xab, - 0x23, 0x33, 0xa9, 0x25, 0x2d, 0x3f, 0xe9, 0x36, 0x4c, 0xf0, 0xc3, 0x22, - 0x25, 0x1b, 0xb4, 0xd9, 0x57, 0x14, 0xd1, 0x66, 0x86, 0x9e, 0x7c, 0x47, - 0xad, 0xbc, 0x6f, 0x82, 0xdd, 0x01, 0x14, 0x77, 0xaf, 0xa7, 0x8f, 0xad, - 0xef, 0x44, 0xd8, 0xe3, 0xb9, 0xc4, 0x9c, 0x02, 0x40, 0x24, 0xe8, 0x86, - 0xd2, 0x62, 0xc2, 0xd7, 0xb3, 0x65, 0x29, 0x70, 0xaa, 0xb7, 0x15, 0xe9, - 0x22, 0x5a, 0xf0, 0xc5, 0x57, 0xb3, 0x1d, 0xaf, 0x31, 0x89, 0x61, 0x4d, - 0x20, 0x7d, 0xee, 0xcc, 0xb5, 0x60, 0x2e, 0xab, 0x6c, 0x02, 0x79, 0xbf, - 0x88, 0x98, 0x78, 0x7e, 0x27, 0x0e, 0x91, 0x3a, 0xab, 0xf8, 0x81, 0xe9, - 0x82, 0x96, 0x86, 0x79, 0x51, 0x3b, 0xda, 0x24, 0x90, 0x69, 0xa5, 0x29, - 0x08, 0x78, 0xfe, 0x7d, 0xf1, 0xde, 0x75, 0x18, 0x8f, 0x8c, 0x1b, 0xf1, - 0xac, 0xe6, 0xce, 0x48, 0x8a, 0x4a, 0xd4, 0xc1, 0xdc, 0x5f, 0xf1, 0x82, - 0xd2, 0xa6, 0x24, 0x47, 0x26, 0x44, 0x39, 0x43, 0x91, 0xe0, 0x58, 0x51, - 0xdc, 0xb3, 0xd2, 0xdc, 0x7e, 0x9b, 0x06, 0x44, 0xa0, 0x50, 0x5c, 0x35, - 0x65, 0x39, 0xff, 0x29, 0x98, 0x48, 0xf0, 0x58, 0xb4, 0x91, 0xf1, 0xd8, - 0x5c, 0xdf, 0x4a, 0x55, 0x00, 0x5d, 0x2c, 0xc0, 0x91, 0xa2, 0x82, 0x67, - 0xa1, 0x06, 0xed, 0x67, 0x5e, 0xaa, 0xb2, 0xfa, 0x0a, 0x1f, 0x3e, 0xde, - 0xa1, 0xe9, 0x2d, 0xfb, 0xe8, 0x98, 0x2a, 0x8a, 0x32, 0x67, 0x4b, 0xd3, - 0xb0, 0xd9, 0x89, 0xba, 0x22, 0x73, 0xa3, 0x5f, 0x07, 0x41, 0xae, 0x4a, - 0x42, 0xe3, 0xfd, 0x05, 0x60, 0xff, 0x0f, 0xfe, 0xd9, 0xcf, 0xd6, 0x9b, - 0xa8, 0x39, 0x3c, 0x10, 0xab, 0x01, 0x46, 0xfb, 0xa5, 0x2a, 0x29, 0x3a, - 0xca, 0x5f, 0x39, 0x17, 0xff, 0x5e, 0x46, 0xd9, 0x4a, 0x5d, 0x3d, 0x14, - 0x25, 0xc8, 0x97, 0x9f, 0x3d, 0x53, 0x53, 0x2c, 0x97, 0x9a, 0x66, 0x35, - 0x8d, 0xef, 0xac, 0xb6, 0xee, 0x4c, 0xf1, 0xa8, 0xe4, 0x2d, 0xcc, 0xd2, - 0x02, 0x21, 0xc4, 0x7c, 0x23, 0x45, 0xe9, 0x15, 0xdf, 0x18, 0xaf, 0x9a, - 0xa7, 0xb6, 0xe9, 0x39, 0x9b, 0xaf, 0x0e, 0xd9, 0xaa, 0x7b, 0x9e, 0x0c, - 0x7e, 0x39, 0x69, 0xbb, 0x7a, 0x73, 0xbe, 0x36, 0x0c, 0xa7, 0x58, 0x75, - 0xfa, 0xd4, 0x21, 0x6a, 0x1c, 0x25, 0xc2, 0x25, 0x67, 0xe9, 0xff, 0xc3, - 0x84, 0x06, 0x28, 0x74, 0x64, 0x21, 0x6f, 0xc4, 0x44, 0xc6, 0x58, 0xac, - 0xf9, 0xf8, 0x57, 0xac, 0xf7, 0x0b, 0x58, 0x51, 0xdc, 0xeb, 0x52, 0xed, - 0x27, 0x36, 0x53, 0x4f, 0x1d, 0x47, 0x2c, 0xaa, 0x2c, 0x93, 0xb2, 0xcb, - 0x34, 0x88, 0x83, 0xf0, 0x2a, 0x4e, 0x03, 0x8a, 0x6d, 0x9a, 0xda, 0x60, - 0xbf, 0x37, 0x24, 0x32, 0x7e, 0x23, 0x57, 0xaf, 0x90, 0x48, 0xf1, 0x68, - 0xb6, 0xba, 0xb6, 0x49, 0x0a, 0x58, 0xb1, 0x8a, 0x4e, 0xd5, 0x99, 0x84, - 0x45, 0xe9, 0xe3, 0x43, 0xbf, 0x73, 0xd2, 0x19, 0x55, 0x44, 0x4c, 0x11, - 0xea, 0xed, 0x50, 0x33, 0x53, 0xbd, 0x35, 0xeb, 0x4d, 0xc6, 0x17, 0x6a, - 0x23, 0x2d, 0x5d, 0x63, 0x1e, 0xd2, 0x4d, 0x83, 0x0a, 0x96, 0x0a, 0x16, - 0x24, 0x68, 0xeb, 0x54, 0xa6, 0x56, 0xb0, 0xdf, 0x4d, 0xc2, 0x9f, 0x88, - 0x4a, 0x8f, 0xdc, 0x69, 0xe0, 0xfc, 0xde, 0x2a, 0x4d, 0xd3, 0x70, 0x00, - 0xec, 0x4d, 0xc5, 0xe2, 0x90, 0xeb, 0x38, 0xbd, 0x4b, 0xda, 0x0b, 0x41, - 0x5f, 0xa7, 0x8e, 0xaa, 0x30, 0x93, 0xd0, 0x49, 0x87, 0xb3, 0x13, 0xaa, - 0x51, 0x88, 0x55, 0x70, 0x1e, 0x02, 0x90, 0x10, 0xd9, 0xa5, 0x30, 0xa3, - 0xf9, 0xd0, 0x1a, 0x65, 0x18, 0x87, 0xb2, 0x60, 0xab, 0x00, 0xda, 0x65, - 0x8e, 0x7b, 0x07, 0x9d, 0x36, 0x1e, 0x3e, 0x19, 0xe9, 0x79, 0x8e, 0x58, - 0xf9, 0x19, 0xe2, 0xbc, 0x46, 0x3f, 0x0a, 0x55, 0x56, 0x23, 0x9e, 0xeb, - 0x80, 0x8e, 0x57, 0x01, 0x3e, 0x7e, 0xaf, 0x53, 0x4d, 0x0a, 0x4f, 0xde, - 0xf3, 0x10, 0x2b, 0xce, 0x9e, 0xc4, 0x78, 0x60, 0x40, 0x87, 0xd8, 0x1b, - 0x98, 0xc9, 0xc7, 0xd6, 0x0f, 0x92, 0xba, 0x0c, 0x5a, 0x13, 0xf5, 0x00, - 0x88, 0x28, 0xe6, 0x3e, 0x7f, 0x1b, 0x1b, 0x06, 0xa8, 0xcc, 0x53, 0xb7, - 0x47, 0xaf, 0x29, 0x0e, 0xea, 0x38, 0x87, 0xc3, 0x84, 0xe0, 0xc6, 0xa2, - 0x4a, 0x69, 0x5d, 0x42, 0xe0, 0x21, 0x7b, 0x66, 0xa6, 0xdf, 0x46, 0x8a, - 0x15, 0x04, 0xcf, 0x12, 0x0b, 0xcc, 0xc9, 0x2d, 0xae, 0x68, 0xdc, 0x40, - 0xb1, 0x9c, 0x59, 0x7f, 0x20, 0xb8, 0x2a, 0xb0, 0x5a, 0x81, 0x00, 0x69, - 0x2e, 0x0f, 0x77, 0xe7, 0xce, 0x64, 0x05, 0x14, 0x0f, 0xa1, 0xe1, 0xdc, - 0xb7, 0x42, 0x69, 0x2a, 0xd6, 0xf0, 0xba, 0xc6, 0x67, 0x2c, 0xbf, 0xce, - 0x0f, 0x41, 0x9b, 0x6f, 0xb8, 0xf8, 0x13, 0x72, 0x7e, 0x4a, 0xf9, 0x13, - 0xbb, 0xce, 0x4a, 0x14, 0x2c, 0xbd, 0xdf, 0x55, 0x06, 0x6a, 0x7e, 0x18, - 0x03, 0x39, 0xea, 0x78, 0x3e, 0x56, 0x28, 0x05, 0x41, 0xbe, 0x06, 0xd7, - 0xf0, 0xe0, 0x33, 0x21, 0x57, 0xfe, 0x9b, 0xd2, 0xb8, 0xe7, 0x29, 0x4c, - 0xb7, 0x72, 0xf1, 0xd3, 0x45, 0x91, 0x91, 0xa5, 0x9b, 0x97, 0x6c, 0x44, - 0xcc, 0xbd, 0xc0, 0x40, 0xee, 0x9c, 0x81, 0xc8, 0xe5, 0x97, 0xe5, 0x42, - 0x68, 0xed, 0x6b, 0x5c, 0xab, 0x8e, 0x39, 0x08, 0x76, 0xf6, 0xdd, 0x2f, - 0xbe, 0x7a, 0xd0, 0xfb, 0x6a, 0x27, 0x9f, 0xdc, 0xe7, 0x88, 0x3a, 0x33, - 0x17, 0x42, 0x10, 0xe8, 0xf6, 0x75, 0x37, 0x2c, 0x31, 0x37, 0x5a, 0x39, - 0x40, 0xe1, 0x05, 0xec, 0x00, 0xa6, 0x00, 0x32, 0xa7, 0x6b, 0x3d, 0xb3, - 0x8c, 0x34, 0xde, 0x09, 0xda, 0x3e, 0x64, 0xc2, 0xb5, 0x6f, 0xea, 0xa3, - 0x3b, 0xc3, 0x7c, 0xc6, 0x13, 0xc1, 0x0b, 0x82, 0x90, 0xb2, 0x7e, 0xea, - 0x1f, 0xc5, 0xeb, 0x7a, 0xbc, 0x13, 0x29, 0xcc, 0xa8, 0xd2, 0x65, 0xbc, - 0x1c, 0x36, 0xac, 0x14, 0xc7, 0xf6, 0x20, 0x36, 0xd6, 0x41, 0xe5, 0xa3, - 0x29, 0x15, 0x1d, 0x48, 0xd7, 0xd9, 0x6c, 0x9d, 0x12, 0x54, 0xb3, 0x84, - 0x18, 0xc7, 0x9b, 0x2e, 0xb1, 0xc6, 0x37, 0xd4, 0xe7, 0x37, 0x9c, 0xa2, - 0xae, 0x77, 0x6b, 0x7a, 0xdc, 0x34, 0x04, 0x04, 0x03, 0x55, 0x6f, 0xf4, - 0xb3, 0x9f, 0x16, 0xd7, 0xa9, 0x94, 0x12, 0xcb, 0x62, 0x4d, 0x0b, 0x91, - 0x90, 0x69, 0xe4, 0xcb, 0xc7, 0x03, 0xf0, 0x88, 0x78, 0xf3, 0x67, 0xb0, - 0x3b, 0x3e, 0xfc, 0x11, 0xc1, 0x8b, 0xee, 0x30, 0x5a, 0x8e, 0x4a, 0xee, - 0xc8, 0x67, 0xc7, 0x45, 0x16, 0xc7, 0x3f, 0xea, 0xc9, 0xc5, 0xba, 0x7a, - 0xa9, 0x20, 0x87, 0xb2, 0xc1, 0x90, 0xb8, 0xca, 0x0f, 0x81, 0xab, 0x27, - 0xb1, 0x27, 0x88, 0xde, 0x94, 0xce, 0x47, 0x11, 0x0f, 0x32, 0x15, 0xbc, - 0x6e, 0xea, 0x3a, 0x47, 0x4b, 0x27, 0x49, 0xa8, 0xf0, 0xc2, 0x45, 0x51, - 0xac, 0x6e, 0x5e, 0x15, 0xc0, 0xce, 0xdc, 0x88, 0x7a, 0xeb, 0x27, 0xe9, - 0xbb, 0x67, 0x56, 0x83, 0xc9, 0xe4, 0xa4, 0x73, 0xab, 0x1f, 0x04, 0xe7, - 0x79, 0x2f, 0xd5, 0x8b, 0xee, 0xf2, 0x9b, 0xea, 0xd9, 0x08, 0xfa, 0xa0, - 0xe2, 0x81, 0xf8, 0xf3, 0x5a, 0xce, 0xf6, 0x75, 0xe4, 0x60, 0xd0, 0x51, - 0xb6, 0x36, 0xbb, 0xbf, 0xcf, 0xa3, 0x4c, 0x55, 0x40, 0x07, 0xa1, 0xa4, - 0x3a, 0xfd, 0x16, 0x01, 0xbb, 0x8b, 0xbe, 0x24, 0x2b, 0xbb, 0xd7, 0x6c, - 0x34, 0x37, 0xbb, 0x18, 0x7c, 0x66, 0x10, 0xb7, 0x49, 0xbe, 0xfd, 0x67, - 0x78, 0x61, 0x08, 0x7e, 0x58, 0x56, 0x71, 0x00, 0x85, 0x0b, 0xd2, 0xe7, - 0x17, 0xff, 0xfa, 0xf8, 0x97, 0xd7, 0x42, 0xf1, 0xa0, 0x72, 0xaf, 0xa2, - 0x98, 0x4b, 0x6b, 0x65, 0x0f, 0xbb, 0x87, 0x8a, 0x44, 0xe0, 0xd3, 0xeb, - 0xf6, 0xa2, 0x33, 0x0e, 0x8b, 0x13, 0x7e, 0x85, 0x5f, 0xcb, 0x0d, 0x25, - 0x8e, 0x51, 0xc2, 0xfc, 0xfe, 0xf4, 0x89, 0xc6, 0x4f, 0x6b, 0x45, 0x1f, - 0x1a, 0xb2, 0x91, 0xf6, 0x34, 0xc8, 0xdd, 0xe0, 0xd5, 0xce, 0x88, 0xf3, - 0x3f, 0x04, 0x1b, 0x65, 0x15, 0x43, 0xa0, 0x18, 0x22, 0x4e, 0xbc, 0xf7, - 0xb5, 0x53, 0xde, 0x99, 0xc9, 0x72, 0x7b, 0x3e, 0xba, 0x32, 0x78, 0x2f, - 0x57, 0xb7, 0x05, 0x86, 0x49, 0x84, 0x4d, 0x91, 0x3e, 0x97, 0x99, 0xee, - 0x73, 0x39, 0xa9, 0xf7, 0x03, 0x0e, 0x4b, 0x87, 0x04, 0xa8, 0x7a, 0xf8, - 0x3a, 0xe0, 0x92, 0x6e, 0x4e, 0x36, 0xef, 0x14, 0x7e, 0x13, 0x57, 0xc5, - 0xe0, 0x5f, 0xd8, 0x73, 0x59, 0x63, 0x66, 0xd8, 0x9b, 0x36, 0x04, 0x59, - 0xeb, 0x27, 0x59, 0x43, 0x0b, 0xdd, 0x2e, 0x3f, 0x22, 0x44, 0x2c, 0x8e, - 0x01, 0x61, 0xd6, 0x31, 0x41, 0xf6, 0x92, 0xe3, 0xd5, 0x2e, 0xf5, 0x6c, - 0x79, 0x3b, 0xe3, 0x34, 0xd7, 0x5e, 0xe1, 0xec, 0xc2, 0xf6, 0xe2, 0x48, - 0x3d, 0x72, 0x68, 0x54, 0xee, 0xbb, 0xa1, 0xe6, 0xe1, 0x63, 0x9d, 0xd1, - 0x28, 0x06, 0x48, 0x00, 0xbb, 0xe1, 0x02, 0x5a, 0x55, 0x13, 0xbc, 0x37, - 0xc5, 0xe6, 0x77, 0x58, 0x5c, 0xfa, 0x6c, 0x9f, 0xeb, 0xe4, 0xc2, 0x5b, - 0x27, 0x33, 0x8f, 0xea, 0x49, 0x85, 0xf4, 0x21, 0xdd, 0xe4, 0x41, 0xb5, - 0xf4, 0x1e, 0xd7, 0x1a, 0xd3, 0x7a, 0xd7, 0xb2, 0xf0, 0x83, 0x8e, 0x6c, - 0x66, 0xf9, 0x9d, 0x97, 0xe0, 0xb3, 0xf5, 0x49, 0xed, 0xac, 0x8d, 0xbe, - 0x23, 0xcf, 0xe2, 0x8f, 0x79, 0xd7, 0x6b, 0x97, 0x62, 0x3a, 0x20, 0x62, - 0x88, 0x8e, 0x54, 0x94, 0x9d, 0x68, 0xa0, 0x99, 0x3c, 0x69, 0x57, 0x53, - 0x35, 0xb4, 0x19, 0x27, 0xa6, 0xd9, 0xec, 0x0c, 0xb8, 0x06, 0xef, 0xfc, - 0xe7, 0xad, 0x3e, 0x44, 0xe5, 0x6d, 0x2c, 0x74, 0x0b, 0xcf, 0xbe, 0x01, - 0x00, 0xee, 0xb1, 0x8e, 0x92, 0x20, 0x27, 0xea, 0xba, 0xa8, 0xb5, 0x72, - 0x21, 0x40, 0x4b, 0x62, 0x75, 0x1a, 0x29, 0x8f, 0xe2, 0x61, 0x40, 0xdd, - 0x55, 0x9e, 0xd9, 0x66, 0x14, 0x09, 0x5b, 0x90, 0xa2, 0x37, 0x57, 0xbb, - 0x70, 0x41, 0xce, 0xdc, 0x9a, 0x7b, 0xb3, 0x8d, 0xcc, 0xd4, 0xc8, 0x21, - 0x2f, 0xe6, 0xa7, 0x7f, 0x16, 0xdb, 0xa5, 0xf9, 0x36, 0x27, 0xe9, 0xfd, - 0x37, 0x2a, 0xf1, 0x07, 0x68, 0x71, 0x59, 0xf6, 0xb1, 0xa2, 0xf3, 0xbc, - 0x45, 0xac, 0x33, 0x2d, 0x3f, 0x2f, 0xd8, 0x8d, 0x7b, 0xe9, 0x74, 0x5c, - 0x54, 0xda, 0x2c, 0x2a, 0x86, 0x9f, 0xf3, 0xc3, 0xab, 0x48, 0x96, 0x6b, - 0x07, 0xcc, 0x31, 0xaf, 0x7c, 0xae, 0x35, 0x71, 0xe7, 0xdf, 0xc7, 0xd0, - 0x26, 0xea, 0x84, 0x25, 0x0a, 0xe4, 0x4d, 0x64, 0x45, 0x20, 0x35, 0xf7, - 0x6f, 0x80, 0xb6, 0xa3, 0xc9, 0x2c, 0xa8, 0x0e, 0xcc, 0xef, 0x91, 0x82, - 0x80, 0x4b, 0x78, 0x28, 0xfc, 0x9b, 0xf0, 0xaf, 0x24, 0x51, 0x4c, 0xfb, - 0x14, 0xdb, 0x5c, 0x66, 0xc0, 0x1c, 0x06, 0xdc, 0xbc, 0x16, 0xc8, 0xc2, - 0xac, 0xde, 0xd8, 0x9e, 0xc1, 0xec, 0xd4, 0x8a, 0xc5, 0xf7, 0x41, 0xd2, - 0xc3, 0x5c, 0x5c, 0x95, 0x5f, 0x36, 0x1e, 0x48, 0x58, 0x86, 0xd4, 0xd4, - 0xaa, 0x97, 0xc3, 0x34, 0xd9, 0x47, 0x3e, 0x8a, 0x79, 0x21, 0x31, 0xe1, - 0x06, 0x45, 0x41, 0xda, 0x02, 0xec, 0x17, 0x75, 0x5e, 0xa8, 0x31, 0x26, - 0xac, 0x4c, 0xe7, 0x4e, 0xb4, 0x34, 0x3d, 0xe0, 0xda, 0x68, 0x0f, 0x00, - 0x81, 0x5e, 0xba, 0x1c, 0x54, 0xa2, 0x1a, 0x36, 0x07, 0x56, 0x33, 0x1a, - 0x5b, 0x7d, 0x09, 0xe4, 0xce, 0x88, 0x4d, 0xc3, 0x08, 0x0e, 0x0e, 0x57, - 0x86, 0xa3, 0xb3, 0xd6, 0x26, 0x5e, 0x83, 0x70, 0x4b, 0xe4, 0x4e, 0x5f, - 0xfc, 0x9b, 0x9c, 0xf7, 0x6b, 0x03, 0x2f, 0x63, 0x83, 0x69, 0x52, 0xe5, - 0x9e, 0x48, 0x06, 0x3a, 0x16, 0xac, 0x45, 0x16, 0x0b, 0xdc, 0xe1, 0x31, - 0x8e, 0xfa, 0x8e, 0x4c, 0x38, 0x78, 0x11, 0xb5, 0x43, 0xeb, 0x1c, 0x24, - 0x4b, 0x4c, 0x1f, 0x39, 0x61, 0x71, 0x8e, 0x31, 0x87, 0x75, 0x5e, 0x2e, - 0x4c, 0x0e, 0x21, 0x6e, 0xff, 0xd5, 0x8a, 0xec, 0x30, 0x16, 0x24, 0x1d, - 0x85, 0x5a, 0xb6, 0xa8, 0x3a, 0x0a, 0x4c, 0x94, 0x0d, 0x9c, 0xff, 0x24, - 0x48, 0x79, 0xda, 0xc1, 0x92, 0x20, 0x58, 0x22, 0xe6, 0xa4, 0xd3, 0x1e, - 0x83, 0x05, 0x6f, 0x2c, 0xa6, 0x54, 0xb2, 0xbc, 0xf8, 0xe4, 0x17, 0x42, - 0xb2, 0x4c, 0xff, 0x27, 0x8b, 0x25, 0xbb, 0xd6, 0xa1, 0x04, 0x48, 0x7d, - 0xe5, 0x6f, 0x77, 0xf3, 0x4f, 0x06, 0x52, 0x17, 0xe8, 0x33, 0xf5, 0x72, - 0xcd, 0xab, 0xa7, 0x41, 0xcb, 0x0b, 0x6c, 0xe6, 0xe6, 0xa0, 0x18, 0x51, - 0x8e, 0xc9, 0xe1, 0xf3, 0x17, 0x20, 0x35, 0x6d, 0xd8, 0xe2, 0x93, 0x4c, - 0xd5, 0x07, 0x60, 0x1c, 0x02, 0x7c, 0x13, 0xe8, 0xcb, 0x1f, 0x17, 0xf2, - 0xcd, 0xdb, 0x7c, 0xc2, 0xf9, 0xa4, 0xc6, 0x4c, 0x17, 0xe3, 0x1d, 0x6f, - 0x24, 0x94, 0xcb, 0x6d, 0xe5, 0x5f, 0xef, 0x62, 0xa5, 0xca, 0x17, 0xd4, - 0x16, 0x95, 0x73, 0x78, 0x6f, 0x1b, 0x51, 0xeb, 0xc4, 0x2b, 0x94, 0x8f, - 0xed, 0xad, 0x97, 0x95, 0x4d, 0xd4, 0x9e, 0xc3, 0x92, 0xa4, 0xb8, 0x4c, - 0xe1, 0x15, 0x2a, 0x1b, 0x8c, 0xd9, 0x2f, 0x9d, 0x6d, 0x61, 0xb4, 0x24, - 0xf7, 0x68, 0x52, 0xb5, 0x81, 0xe2, 0xba, 0xf5, 0x0a, 0x3b, 0xdf, 0xef, - 0x0f, 0x6f, 0x9d, 0xda, 0x0e, 0x23, 0x94, 0xb0, 0x91, 0xe6, 0x00, 0xef, - 0x0c, 0xe2, 0xc7, 0x19, 0x2a, 0x0c, 0xdb, 0x12, 0xbd, 0x99, 0x69, 0xb9, - 0x48, 0x05, 0x06, 0xc7, 0xf0, 0x77, 0xb8, 0x72, 0x5c, 0x7d, 0x0c, 0xbd, - 0xc5, 0x30, 0x93, 0x8e, 0xa4, 0x62, 0x43, 0x14, 0x12, 0x57, 0x06, 0x15, - 0x02, 0x29, 0x52, 0x47, 0x99, 0x40, 0xfa, 0x9c, 0x13, 0x34, 0x0d, 0x54, - 0x37, 0x9d, 0xf2, 0xff, 0x44, 0x5c, 0x09, 0x7d, 0xfa, 0x7e, 0xf4, 0x02, - 0xdc, 0xb6, 0xe4, 0x59, 0xb8, 0x58, 0xd6, 0xb4, 0x73, 0x2e, 0x5a, 0x40, - 0xcd, 0x4f, 0xfe, 0xf7, 0x89, 0x01, 0xde, 0xe6, 0xcd, 0x77, 0x39, 0xbd, - 0x26, 0xe8, 0x44, 0x25, 0x6a, 0x78, 0xee, 0xcd, 0x7d, 0xb0, 0xe5, 0x2b, - 0x7c, 0x1a, 0xbf, 0xdc, 0x01, 0x92, 0x4a, 0xd9, 0x17, 0x80, 0xf3, 0x03, - 0xd5, 0xd7, 0x51, 0x65, 0xfe, 0x82, 0x4e, 0x7e, 0xfe, 0xae, 0x39, 0xfd, - 0x87, 0x57, 0x24, 0x16, 0x1b, 0x54, 0x01, 0x79, 0x22, 0xe9, 0x0f, 0x2c, - 0x2a, 0xba, 0x20, 0x5a, 0x57, 0x16, 0x36, 0x76, 0x2f, 0x47, 0x04, 0x05, - 0xb9, 0xd2, 0x19, 0x80, 0xb2, 0x49, 0x92, 0xe3, 0xd6, 0x0e, 0x8f, 0x03, - 0x49, 0x0d, 0xcf, 0xf7, 0xde, 0xe9, 0x41, 0x98, 0xe5, 0x6a, 0x21, 0x23, - 0xb9, 0x07, 0xfa, 0x07, 0x97, 0x69, 0x4e, 0xaf, 0x01, 0x32, 0x6e, 0xc4, - 0xde, 0x13, 0x1b, 0x27, 0x89, 0x1a, 0x57, 0xc1, 0x85, 0x15, 0x22, 0xac, - 0x78, 0xea, 0xbb, 0x8d, 0xec, 0x0c, 0xff, 0x58, 0x54, 0x00, 0xff, 0xa8, - 0x98, 0xd5, 0x7b, 0xcb, 0xae, 0x04, 0x70, 0xa4, 0x19, 0xee, 0x8d, 0xbc, - 0x38, 0xe8, 0xf1, 0xd3, 0x95, 0x2b, 0x0d, 0x5c, 0x67, 0xeb, 0x49, 0xe3, - 0xfc, 0x81, 0xa5, 0xfe, 0x79, 0xf6, 0x8a, 0x3e, 0xde, 0xa7, 0xca, 0x2e, - 0xae, 0x14, 0xe0, 0x32, 0x3e, 0x94, 0x66, 0x15, 0x02, 0xac, 0x4d, 0xe7, - 0xdd, 0xd4, 0x09, 0x9a, 0x16, 0x88, 0x13, 0x3e, 0xd4, 0x28, 0x60, 0xb5, - 0x09, 0x1a, 0x3e, 0xd5, 0x8b, 0x52, 0xad, 0x57, 0xa3, 0xa9, 0x2b, 0x34, - 0x04, 0xec, 0x90, 0x5c, 0x3a, 0xbd, 0x87, 0x0d, 0xbf, 0xfd, 0x2f, 0x99, - 0xd8, 0xc8, 0x71, 0xee, 0x69, 0x86, 0x41, 0xc1, 0x5f, 0x78, 0xc4, 0xbe, - 0x38, 0x5d, 0xa4, 0x49, 0x03, 0xb3, 0xef, 0xb8, 0x5f, 0x9f, 0xce, 0x4b, - 0x1d, 0x06, 0xd1, 0xdb, 0x29, 0x2f, 0x26, 0x43, 0x2e, 0x2f, 0xa3, 0x71, - 0x22, 0x80, 0xd8, 0xbe, 0x4d, 0xc3, 0xfb, 0x7b, 0x76, 0xef, 0x65, 0x0e, - 0x31, 0x03, 0xd2, 0x00, 0x29, 0x3e, 0x51, 0x53, 0x23, 0xa0, 0x90, 0xe4, - 0xef, 0x2c, 0xe6, 0x5e, 0xa6, 0xd7, 0xa9, 0x6b, 0x9a, 0xea, 0x04, 0xbd, - 0xfa, 0x19, 0x05, 0x1f, 0x67, 0xa5, 0xe0, 0xf0, 0xab, 0x5c, 0x2f, 0xb2, - 0x2f, 0xfc, 0xc9, 0x2f, 0xe8, 0x98, 0xb1, 0x04, 0xfd, 0x52, 0xce, 0xdf, - 0x8b, 0x7c, 0xd0, 0xe6, 0xfb, 0xad, 0xdf, 0x98, 0xa4, 0x67, 0xef, 0x9e, - 0xa5, 0x1a, 0x43, 0x4a, 0x91, 0x26, 0xe4, 0x71, 0x7a, 0x51, 0xb3, 0xc4, - 0xd6, 0x2d, 0x22, 0xef, 0xa5, 0xa5, 0xf2, 0x49, 0xaa, 0xe9, 0xfd, 0xf8, - 0x06, 0xfc, 0x58, 0x15, 0x2c, 0x9e, 0x79, 0x33, 0x44, 0xd7, 0x6e, 0x10, - 0x3c, 0xe8, 0x0d, 0xf8, 0x9f, 0xbb, 0x5f, 0x16, 0x19, 0xf4, 0xc9, 0x90, - 0xd0, 0x2b, 0xa6, 0x41, 0x50, 0xa8, 0x53, 0xf6, 0x36, 0x15, 0x7a, 0x82, - 0x86, 0x54, 0x9b, 0x77, 0x2f, 0x2d, 0xfa, 0x92, 0x0d, 0x44, 0x56, 0x52, - 0xd3, 0xea, 0x29, 0x3c, 0x8b, 0xae, 0xf0, 0xe2, 0x29, 0x9a, 0x53, 0xbe, - 0x46, 0x53, 0xaa, 0x24, 0x38, 0xe9, 0xbf, 0x85, 0x82, 0x14, 0xb0, 0x02, - 0xe8, 0x9f, 0xc1, 0xc1, 0x3e, 0x8b, 0xab, 0xf2, 0xce, 0xfc, 0x1f, 0x9a, - 0x9b, 0xd7, 0x15, 0x3f, 0x0f, 0x7c, 0x9d, 0x30, 0x8f, 0xd8, 0x5b, 0x16, - 0x5a, 0x56, 0x03, 0x19, 0xbb, 0x86, 0xe5, 0xca, 0x8b, 0xf9, 0x8e, 0x44, - 0x2e, 0x55, 0x65, 0xfd, 0xd2, 0x70, 0x14, 0x21, 0x9a, 0x69, 0x7e, 0xc0, - 0xab, 0x1c, 0x0d, 0x30, 0xee, 0xa6, 0xa2, 0xec, 0x36, 0x9b, 0x67, 0xc8, - 0x87, 0xfc, 0xa4, 0x05, 0x58, 0x3b, 0x8f, 0x6c, 0x6d, 0xfc, 0x26, 0x2c, - 0xb9, 0xad, 0x11, 0x47, 0x93, 0xbf, 0x27, 0x84, 0xa5, 0x30, 0x9f, 0xee, - 0xf9, 0x13, 0x96, 0xfe, 0x2b, 0xc4, 0x4c, 0x2d, 0x0b, 0x11, 0x15, 0xd8, - 0x22, 0x20, 0x3f, 0xb7, 0x47, 0xf3, 0xcc, 0x48, 0x85, 0x7f, 0x4f, 0xd7, - 0xe8, 0x7e, 0xb2, 0xd2, 0xe2, 0x45, 0x6e, 0xa4, 0x64, 0x0b, 0x61, 0xc3, - 0xc0, 0x9d, 0x56, 0x99, 0x20, 0x76, 0x3c, 0x30, 0x23, 0x97, 0x16, 0xfa, - 0x7f, 0xeb, 0x82, 0xc5, 0x95, 0xa3, 0x2f, 0x1b, 0x25, 0x11, 0x32, 0x7c, - 0xfd, 0x26, 0xdb, 0xaa, 0x8e, 0x07, 0x0b, 0x3d, 0xab, 0xbb, 0xe3, 0x4c, - 0xa0, 0x4e, 0x80, 0xed, 0xa7, 0x0c, 0x3a, 0x93, 0x59, 0xc2, 0x64, 0x48, - 0xf2, 0x57, 0xd2, 0x2e, 0xf4, 0x4b, 0x61, 0x91, 0x0a, 0x9e, 0x52, 0x7d, - 0x58, 0x6f, 0x8e, 0x4f, 0x8c, 0x9f, 0x68, 0x79, 0x40, 0x4d, 0x0d, 0x56, - 0xef, 0xd5, 0xb3, 0x75, 0xe8, 0x77, 0x1f, 0x7b, 0x9c, 0x1e, 0xbd, 0xc8, - 0xf1, 0xb6, 0x9b, 0xbb, 0xa6, 0x89, 0xf4, 0xb5, 0xf9, 0x09, 0x0c, 0x0c, - 0xe0, 0xb8, 0xc2, 0x4b, 0x6b, 0x39, 0x81, 0x3b, 0xcb, 0xa2, 0xda, 0x47, - 0xc8, 0x46, 0x46, 0x3e, 0x76, 0x9a, 0xa6, 0xc8, 0x80, 0xa3, 0x28, 0x8d, - 0x5a, 0x73, 0x79, 0x1f, 0x19, 0x2b, 0xb1, 0x0d, 0xe5, 0xff, 0x6c, 0x90, - 0x52, 0x28, 0xd2, 0x0f, 0x88, 0x63, 0x4c, 0xe0, 0x53, 0x20, 0x52, 0x7a, - 0xf3, 0xf2, 0xcf, 0x5f, 0x1f, 0xe5, 0xf5, 0xa0, 0xb4, 0x6f, 0x59, 0x8b, - 0xa0, 0x17, 0x07, 0x63, 0x19, 0x14, 0xde, 0x49, 0x3d, 0xec, 0xbf, 0xd0, - 0x91, 0xe1, 0xaa, 0x25, 0xb5, 0x6f, 0x02, 0x89, 0x12, 0x62, 0x72, 0x6e, - 0x0d, 0xe3, 0xdb, 0xe7, 0xfb, 0x53, 0xc7, 0x2c, 0xf5, 0x71, 0x6b, 0xee, - 0x38, 0x8f, 0x7a, 0xcf, 0x51, 0xb3, 0xf2, 0x88, 0x5d, 0x27, 0x0e, 0x3d, - 0xc8, 0x18, 0xf9, 0xf8, 0x5f, 0xe3, 0xaf, 0xd3, 0xa4, 0x6f, 0x56, 0xf7, - 0x95, 0xd0, 0xd6, 0xb3, 0x74, 0x32, 0x77, 0x39, 0x71, 0x58, 0x0f, 0xf9, - 0x18, 0xfd, 0x2c, 0x92, 0x1b, 0x88, 0x7e, 0x74, 0x74, 0x99, 0x3c, 0xf5, - 0x77, 0x5c, 0xd6, 0xb0, 0x84, 0x11, 0x5c, 0x39, 0xfc, 0xf2, 0x71, 0x2f, - 0x9b, 0x8c, 0x0e, 0x4d, 0x5c, 0xd4, 0xda, 0x97, 0x8a, 0xe5, 0x75, 0x13, - 0xfe, 0x7f, 0x10, 0x87, 0xad, 0x53, 0xfb, 0xaa, 0xfb, 0x0a, 0xae, 0xa5, - 0xc9, 0xd7, 0xbe, 0x99, 0x63, 0xaa, 0xd3, 0x34, 0xde, 0x45, 0x85, 0xcd, - 0xa7, 0x21, 0x6f, 0xde, 0x24, 0x5d, 0x56, 0x41, 0xb5, 0xa5, 0x68, 0x4d, - 0xf5, 0x77, 0x1b, 0x6c, 0x79, 0xe7, 0xd6, 0x74, 0x4f, 0x6e, 0x57, 0x13, - 0x5c, 0x2e, 0x7e, 0x37, 0xbf, 0xf7, 0x64, 0x44, 0x2a, 0x1a, 0x18, 0x25, - 0x7b, 0x36, 0x50, 0xdd, 0x5d, 0xc2, 0x6c, 0x14, 0xcc, 0xad, 0xc8, 0xe8, - 0xd1, 0x0b, 0x3b, 0x9c, 0xaf, 0xd4, 0x62, 0xcd, 0x38, 0xb9, 0xe4, 0xa1, - 0x0d, 0x61, 0x55, 0x9f, 0x39, 0x3c, 0x8d, 0x60, 0x46, 0x55, 0xbb, 0x86, - 0x6b, 0x20, 0xe7, 0xc3, 0x81, 0x2c, 0xbc, 0xe4, 0x54, 0xa4, 0x1f, 0xf5, - 0x2f, 0x0e, 0xf9, 0xda, 0x36, 0xab, 0x26, 0x60, 0xef, 0xc1, 0x79, 0xad, - 0x46, 0x34, 0x95, 0x39, 0x46, 0x03, 0xd6, 0x20, 0x65, 0x53, 0x37, 0xd3, - 0x7d, 0xde, 0xf2, 0xd3, 0x55, 0x5a, 0xdd, 0x86, 0x69, 0xa0, 0x9d, 0xb3, - 0xd4, 0x13, 0x8d, 0x49, 0x71, 0xa4, 0x99, 0x7a, 0x3d, 0x81, 0x19, 0xf6, - 0xe6, 0x0f, 0x4e, 0x72, 0xca, 0x05, 0x7b, 0x5f, 0xc1, 0xc1, 0x29, 0xa8, - 0xe8, 0x6b, 0x17, 0xb3, 0xf3, 0x12, 0xd4, 0xf2, 0x46, 0x78, 0xcf, 0xd2, - 0x69, 0xac, 0xfc, 0x91, 0x4d, 0xbc, 0x7b, 0x9c, 0x55, 0x4f, 0xa1, 0x9b, - 0xf4, 0x83, 0xdb, 0xee, 0x29, 0xe5, 0x7f, 0x59, 0x1d, 0xbb, 0x6b, 0x85, - 0x3d, 0x2d, 0x76, 0x10, 0xc7, 0x00, 0xe6, 0x1d, 0x19, 0x32, 0x81, 0xdb, - 0x02, 0x0e, 0x32, 0xa1, 0xd1, 0x33, 0x54, 0xae, 0xbb, 0x03, 0x89, 0xea, - 0x82, 0xa5, 0xd9, 0x37, 0x18, 0xed, 0xdb, 0xa5, 0x4a, 0xe4, 0x4f, 0xb4, - 0x3e, 0x49, 0xf1, 0x15, 0xbe, 0xe7, 0xad, 0x40, 0xf5, 0xf8, 0xba, 0xc6, - 0xf1, 0x2e, 0x08, 0xc4, 0xb1, 0xbe, 0x9b, 0x3f, 0x57, 0x3b, 0xd3, 0x9c, - 0x93, 0x00, 0x44, 0xb0, 0xee, 0x6d, 0x15, 0x44, 0x31, 0xc8, 0x6f, 0xdc, - 0xa1, 0xb1, 0xd2, 0x8c, 0x14, 0x69, 0x94, 0x9f, 0x42, 0xdb, 0x23, 0xe6, - 0x5a, 0x6b, 0x27, 0xb8, 0x1f, 0xe9, 0x7c, 0xa0, 0x57, 0x2f, 0xa9, 0x9b, - 0x4e, 0x94, 0x57, 0x2a, 0xe4, 0x36, 0xc0, 0xe6, 0xbc, 0x9e, 0x7f, 0xe5, - 0x68, 0xd3, 0xc1, 0xb0, 0x46, 0xc4, 0xf1, 0x30, 0x6c, 0x40, 0x43, 0xc2, - 0x09, 0x98, 0xd3, 0x74, 0xb4, 0x80, 0xa2, 0x88, 0x9b, 0xb6, 0xef, 0x73, - 0x6c, 0xa0, 0x2b, 0xf5, 0xb8, 0x63, 0x27, 0x54, 0xec, 0x7f, 0xe3, 0x04, - 0xb6, 0x88, 0xdc, 0xa4, 0xdb, 0xae, 0x52, 0x79, 0xaf, 0x1e, 0xd2, 0xe5, - 0x5e, 0x25, 0x1e, 0x94, 0x34, 0xb7, 0x9d, 0x67, 0x63, 0x28, 0x33, 0xbe, - 0xff, 0xb3, 0x9b, 0xb3, 0x8e, 0x35, 0xf6, 0x63, 0x77, 0x8d, 0xca, 0x0c, - 0xb6, 0x22, 0xf5, 0x8f, 0xa0, 0xd6, 0xa5, 0xc5, 0xd2, 0xaf, 0x26, 0xd1, - 0x81, 0x65, 0x87, 0x0c, 0x22, 0xd7, 0x13, 0x21, 0xda, 0xd5, 0x7e, 0x56, - 0xe9, 0xd2, 0xac, 0x13, 0xa7, 0x8a, 0x2d, 0xd7, 0x5a, 0x7f, 0x5b, 0x06, - 0x48, 0xad, 0xab, 0x59, 0x74, 0xc0, 0xda, 0xcc, 0x85, 0x94, 0xf9, 0xd2, - 0xf0, 0xf3, 0x80, 0xae, 0x3f, 0x93, 0x48, 0xc2, 0x32, 0x89, 0xe5, 0x37, - 0x24, 0xf5, 0xd0, 0x5c, 0x0a, 0xcc, 0x0c, 0xc5, 0x4e, 0x55, 0xad, 0xc4, - 0x2d, 0xa3, 0xff, 0xbb, 0x17, 0x4c, 0xfc, 0x1e, 0x7c, 0x33, 0x00, 0xba, - 0x75, 0x46, 0xd8, 0x25, 0x63, 0x71, 0x53, 0x0c, 0x54, 0x06, 0x81, 0x35, - 0xed, 0x9e, 0xb2, 0x96, 0x74, 0x6a, 0x98, 0xa4, 0x74, 0x2d, 0x87, 0x06, - 0x30, 0x6f, 0x38, 0x08, 0x28, 0x37, 0xe8, 0x9b, 0xac, 0xa3, 0x89, 0xa5, - 0xad, 0x20, 0x0f, 0x46, 0x8b, 0x9a, 0x6d, 0x0d, 0x75, 0x0c, 0xc6, 0x52, - 0x61, 0x12, 0xe0, 0x7d, 0xb7, 0xcf, 0xb6, 0xa9, 0x3c, 0x66, 0x47, 0xca, - 0x39, 0x75, 0x8c, 0xa2, 0x8b, 0x41, 0x5d, 0x38, 0x6f, 0x98, 0x1d, 0xab, - 0x07, 0x44, 0xd4, 0x42, 0xf7, 0xfa, 0xc2, 0x1a, 0x61, 0xf3, 0x1d, 0xa6, - 0xbf, 0x4c, 0xd0, 0x52, 0xc7, 0x6c, 0x6b, 0x30, 0x56, 0x7c, 0x07, 0xc1, - 0x13, 0x14, 0xcb, 0xfc, 0xc6, 0x76, 0x6d, 0x62, 0xff, 0xe7, 0x18, 0x14, - 0x45, 0x7a, 0x47, 0xe2, 0x81, 0x33, 0xfa, 0x78, 0x2c, 0xed, 0xfa, 0x1d, - 0x2c, 0xb1, 0x4e, 0xbf, 0xb2, 0xf1, 0x29, 0xfb, 0x18, 0x43, 0x97, 0x09, - 0x9f, 0x47, 0xa0, 0xb1, 0xdf, 0xe1, 0x41, 0x33, 0x79, 0x81, 0xf1, 0xf0, - 0x7e, 0x1b, 0xe8, 0x30, 0x15, 0xe0, 0xba, 0xe3, 0xd5, 0xe1, 0xf5, 0x2d, - 0xaf, 0x36, 0xb9, 0x85, 0xde, 0x73, 0xe2, 0xd6, 0x1b, 0x07, 0xe8, 0xd9, - 0x76, 0x0f, 0xee, 0x98, 0xbe, 0x75, 0x1b, 0xae, 0xa8, 0xf5, 0xa7, 0x34, - 0x18, 0x4f, 0x7a, 0x3f, 0xff, 0xf4, 0x3e, 0x0f, 0x50, 0xd9, 0xe3, 0xda, - 0xfe, 0x48, 0x38, 0x6e, 0x76, 0x7c, 0x9d, 0x08, 0x72, 0x38, 0x02, 0xe1, - 0x78, 0x8a, 0xc9, 0x42, 0x06, 0x48, 0x60, 0x88, 0xbe, 0x36, 0x90, 0xec, - 0xef, 0x7e, 0x50, 0x02, 0x75, 0x0a, 0x14, 0x59, 0x28, 0x03, 0xe9, 0x0a, - 0x7c, 0x08, 0x86, 0x48, 0x14, 0x45, 0xf2, 0xf2, 0xad, 0x14, 0xfe, 0x85, - 0x1c, 0xbe, 0xcb, 0x64, 0xcf, 0xd6, 0x94, 0x64, 0x8b, 0x4a, 0xb1, 0xce, - 0x0d, 0x17, 0x6c, 0x75, 0x91, 0xdc, 0x0d, 0x2d, 0x56, 0x11, 0x27, 0x94, - 0x89, 0xb5, 0xe2, 0xc2, 0x2a, 0x44, 0xb8, 0x98, 0x7b, 0x42, 0xfb, 0x77, - 0xf1, 0x0d, 0xb1, 0x82, 0x28, 0x02, 0x92, 0x2f, 0xd6, 0x27, 0x34, 0xd9, - 0xbd, 0xd1, 0x0e, 0x1d, 0x9e, 0xe4, 0xc4, 0xf2, 0xa0, 0x09, 0x50, 0x89, - 0xf8, 0x37, 0x5d, 0x81, 0x15, 0x5e, 0xe0, 0xc8, 0xa9, 0x4b, 0xc3, 0xc5, - 0x56, 0xaa, 0x22, 0x8e, 0x9d, 0xb5, 0x51, 0xeb, 0x61, 0x32, 0xfd, 0xb5, - 0xad, 0x55, 0x7c, 0x61, 0x3c, 0x00, 0xfb, 0x72, 0xe4, 0x46, 0x31, 0xfb, - 0x9f, 0x0b, 0x6a, 0xbf, 0xa7, 0x57, 0xfc, 0xbd, 0xa7, 0x00, 0xde, 0xc7, - 0x80, 0x5a, 0x20, 0xc8, 0x51, 0x9f, 0xa6, 0xa3, 0xc9, 0x12, 0x3a, 0x0f, - 0x0f, 0x62, 0x20, 0xad, 0x8a, 0x56, 0x85, 0xe8, 0x6f, 0xf0, 0xe3, 0xd6, - 0x63, 0x6e, 0x19, 0x0b, 0x98, 0xf1, 0x3d, 0x3f, 0xce, 0xe6, 0x9f, 0x3c, - 0x75, 0x26, 0xe2, 0x6c, 0x10, 0x8f, 0xee, 0x96, 0xaa, 0x93, 0x41, 0xd8, - 0x86, 0xb5, 0x72, 0x70, 0x93, 0xd4, 0x29, 0xbe, 0x9f, 0x57, 0x68, 0xc2, - 0x7d, 0x59, 0xbb, 0x8d, 0x3d, 0x70, 0xa7, 0x04, 0x23, 0x84, 0x37, 0x86, - 0x1d, 0xb0, 0x5e, 0x00, 0x11, 0x24, 0x9d, 0x65, 0xca, 0x84, 0x7f, 0x69, - 0xd0, 0xa9, 0x16, 0xab, 0xdb, 0xa4, 0x9f, 0x83, 0x1c, 0x6a, 0x07, 0x7b, - 0x6d, 0xb9, 0x32, 0xff, 0xed, 0x09, 0x24, 0x4f, 0x0a, 0x16, 0x41, 0x10, - 0xce, 0x32, 0xb4, 0xa1, 0x78, 0x7f, 0x8d, 0xf4, 0x59, 0xb6, 0xcb, 0x3b, - 0xb8, 0x80, 0x9b, 0x47, 0x39, 0xeb, 0xcc, 0x10, 0xff, 0x19, 0xdb, 0x8c, - 0x70, 0xfe, 0x93, 0x36, 0xd6, 0x66, 0xaa, 0x87, 0xbc, 0x01, 0xbf, 0xa6, - 0xac, 0x20, 0x90, 0x84, 0x38, 0x17, 0xdc, 0x35, 0x23, 0x41, 0xde, 0x40, - 0x70, 0x0f, 0x1b, 0x99, 0xa6, 0xf2, 0xf0, 0x55, 0x9c, 0x37, 0x39, 0x5b, - 0xb3, 0x33, 0xcb, 0x59, 0x53, 0x4f, 0x6f, 0xc5, 0x73, 0x50, 0xc5, 0xaa, - 0x82, 0x70, 0x96, 0x86, 0xd6, 0xf5, 0xdf, 0x46, 0xb4, 0x09, 0xf4, 0xb2, - 0xe0, 0x6f, 0x88, 0x0b, 0xd3, 0xe9, 0x9f, 0x9b, 0xa7, 0x2e, 0x21, 0xf8, - 0xe0, 0xc6, 0x1a, 0x4a, 0x6b, 0xc9, 0xe4, 0x71, 0x67, 0x75, 0x8c, 0xee, - 0x9f, 0xc8, 0x04, 0x21, 0x4e, 0x25, 0x08, 0xd0, 0x49, 0x3a, 0x31, 0x5b, - 0xa8, 0x7f, 0xc2, 0xd7, 0x10, 0x2f, 0x00, 0x7a, 0x90, 0x81, 0x40, 0x59, - 0x0b, 0x92, 0xd1, 0x37, 0xe3, 0x77, 0xb1, 0x9d, 0xff, 0x73, 0xb0, 0x5f, - 0xd3, 0x3b, 0x2a, 0xc5, 0x46, 0x66, 0x75, 0x21, 0x22, 0x55, 0xee, 0x70, - 0x69, 0x11, 0x11, 0x89, 0x57, 0x08, 0x97, 0x04, 0x38, 0xdc, 0x96, 0xaf, - 0xd3, 0x0c, 0x0d, 0x39, 0x37, 0xf2, 0x0a, 0x34, 0xe9, 0xbf, 0x7f, 0xdf, - 0xa3, 0xbf, 0x90, 0xb0, 0xf1, 0x8a, 0xe5, 0xa2, 0x46, 0xc9, 0xd2, 0xe3, - 0xa2, 0x3b, 0xd1, 0x39, 0x27, 0x2b, 0xac, 0xb3, 0x45, 0x03, 0xa4, 0x35, - 0x2b, 0xc8, 0x1e, 0x61, 0x9e, 0x68, 0x97, 0x15, 0x49, 0x09, 0x6a, 0xb5, - 0x3f, 0xde, 0x0f, 0xd1, 0xc0, 0x9e, 0x54, 0xe0, 0xbd, 0xfb, 0x61, 0x4d, - 0x68, 0x22, 0x75, 0xc5, 0x95, 0xa3, 0xe5, 0xbe, 0xd6, 0xd0, 0xf5, 0x4b, - 0x8c, 0x63, 0x0e, 0xc7, 0xee, 0x24, 0x85, 0x79, 0xdf, 0xd6, 0x98, 0x6e, - 0x62, 0xa3, 0xb7, 0xb3, 0xe2, 0x4d, 0xbf, 0xe3, 0xdb, 0x57, 0x1c, 0xbc, - 0xbe, 0x5b, 0x89, 0x07, 0xfc, 0x82, 0x5b, 0xcb, 0x3d, 0x1a, 0xb6, 0x2c, - 0xc8, 0x0c, 0xad, 0xa8, 0x79, 0xd8, 0x44, 0xba, 0x79, 0x5a, 0x56, 0x46, - 0xb1, 0x7b, 0xc4, 0x0a, 0x95, 0x1b, 0x05, 0x1d, 0x3a, 0xcd, 0x21, 0x3b, - 0x98, 0xe5, 0xc8, 0xf1, 0xf7, 0x43, 0x25, 0x91, 0xaf, 0xe3, 0x97, 0x45, - 0x85, 0x48, 0x90, 0x88, 0x54, 0x2f, 0x92, 0x40, 0x57, 0xac, 0x4b, 0xd8, - 0x4e, 0x45, 0x5a, 0x5b, 0xc3, 0x5b, 0x3c, 0x53, 0xd7, 0xb4, 0xd6, 0x52, - 0x7e, 0x2a, 0x0d, 0x37, 0x80, 0xf9, 0xdb, 0x82, 0xfe, 0x90, 0x39, 0x4a, - 0x4c, 0x73, 0x8e, 0x3b, 0xee, 0x11, 0xd2, 0x6c, 0x45, 0x48, 0x9f, 0x90, - 0xf3, 0x7b, 0xb5, 0x8c, 0x0d, 0x06, 0xeb, 0xd5, 0x6c, 0x62, 0x62, 0x57, - 0x20, 0xda, 0xe3, 0x55, 0x1e, 0x49, 0x14, 0xcc, 0x54, 0x30, 0xe2, 0x39, - 0xcc, 0x5e, 0x12, 0xea, 0xb4, 0x1c, 0xe6, 0x06, 0xc7, 0x86, 0x82, 0x85, - 0x01, 0x46, 0xc9, 0xcc, 0xe8, 0x6b, 0x8b, 0xf4, 0xba, 0xae, 0x96, 0x86, - 0x61, 0x15, 0x41, 0x49, 0x97, 0x0b, 0x9d, 0xb9, 0xd7, 0xa2, 0x6d, 0x27, - 0x2d, 0x31, 0x0a, 0x4e, 0xa9, 0xbe, 0x39, 0x12, 0x46, 0xda, 0x51, 0x2b, - 0xf2, 0x73, 0x33, 0x77, 0x77, 0xd3, 0x8e, 0xfa, 0x37, 0xc3, 0x82, 0xec, - 0x0c, 0x96, 0x1f, 0xa7, 0x3c, 0xa4, 0xff, 0xe5, 0x67, 0xc0, 0x61, 0xff, - 0x2f, 0x8f, 0x45, 0x83, 0xac, 0xd2, 0xe6, 0xc0, 0xd0, 0x83, 0xa9, 0x43, - 0x22, 0x36, 0xc1, 0xaa, 0x5f, 0x32, 0x0f, 0x38, 0x55, 0x3d, 0x05, 0xad, - 0x33, 0xcc, 0x6f, 0xf3, 0x2f, 0x26, 0x3e, 0x0d, 0xd9, 0x08, 0x97, 0xad, - 0xb6, 0xb5, 0xe2, 0xd5, 0xe7, 0x93, 0xbf, 0x4d, 0xad, 0xf8, 0x8a, 0x88, - 0xb4, 0xbf, 0xaa, 0x56, 0x97, 0xcb, 0x99, 0xb0, 0x09, 0xdc, 0x4f, 0x95, - 0x51, 0x7e, 0x92, 0xd5, 0x0e, 0xb8, 0x0a, 0xc7, 0xcc, 0x1d, 0xb5, 0x8c, - 0xfb, 0x02, 0xee, 0x81, 0x35, 0x3c, 0x57, 0x76, 0xe7, 0x9b, 0xba, 0x4d, - 0x01, 0x28, 0xe7, 0x23, 0x82, 0xad, 0xfa, 0x99, 0x52, 0xb8, 0xd3, 0x1b, - 0x59, 0x3a, 0x25, 0x5c, 0x03, 0x33, 0x0c, 0x47, 0x0d, 0x8e, 0x42, 0x3d, - 0x7e, 0x62, 0x17, 0x76, 0x4f, 0x8e, 0x0f, 0xd2, 0x2b, 0xb8, 0x70, 0x99, - 0x11, 0x51, 0x4c, 0x4c, 0x7e, 0x8c, 0x8c, 0x70, 0x73, 0xaa, 0x87, 0xa0, - 0x0d, 0x29, 0xb4, 0xb3, 0x5e, 0x7f, 0x03, 0x3c, 0xf8, 0x04, 0x2a, 0xb4, - 0x4e, 0x78, 0x6c, 0xfa, 0xab, 0xf8, 0xd7, 0x62, 0xa0, 0x0a, 0x89, 0xfd, - 0x8c, 0x6b, 0x82, 0xdb, 0x12, 0xc5, 0xa3, 0x8b, 0x80, 0xb9, 0x76, 0x7c, - 0x67, 0x8c, 0x08, 0xfc, 0xc1, 0x8f, 0x0d, 0xf9, 0xef, 0xdc, 0x28, 0x0e, - 0x82, 0x1c, 0x4f, 0xbf, 0x30, 0x0f, 0x37, 0xaa, 0xf9, 0x8a, 0x6d, 0xb3, - 0x4d, 0xd0, 0x60, 0xec, 0xec, 0xe7, 0x04, 0xee, 0xa3, 0x8e, 0x29, 0xfb, - 0xf3, 0x54, 0x98, 0x48, 0x62, 0xa6, 0x6b, 0x73, 0x27, 0xc0, 0xc4, 0xe2, - 0x52, 0xc5, 0x8c, 0xbd, 0xa3, 0xd7, 0xa4, 0x99, 0x0f, 0x9b, 0x2f, 0x86, - 0xef, 0x64, 0x4d, 0xa7, 0x2f, 0xcf, 0xad, 0x33, 0xfd, 0x62, 0x3a, 0x3a, - 0xa0, 0xec, 0x13, 0x2d, 0x1e, 0x9d, 0x0d, 0x3f, 0x24, 0x42, 0x9c, 0x88, - 0xd7, 0xb1, 0xf4, 0xf1, 0xd9, 0xa8, 0xa0, 0x4d, 0xb0, 0xa8, 0x12, 0x71, - 0x52, 0x06, 0x06, 0xc8, 0x10, 0xa8, 0xc6, 0x9b, 0x98, 0x8e, 0xb4, 0x67, - 0xea, 0x32, 0xcb, 0xef, 0x75, 0x55, 0xf2, 0x57, 0xad, 0x97, 0x6b, 0x72, - 0x69, 0xb9, 0x20, 0xc2, 0x30, 0xbb, 0x94, 0x9d, 0xf9, 0xf3, 0x08, 0x8b, - 0xe5, 0x3f, 0xcb, 0xc4, 0x8d, 0xe0, 0x16, 0xc4, 0xd7, 0x03, 0xf2, 0xea, - 0xc8, 0xcb, 0x95, 0xc8, 0x2a, 0x0b, 0x73, 0x67, 0xec, 0xc9, 0x8e, 0xe6, - 0x94, 0x44, 0x92, 0x6a, 0x76, 0xf1, 0xa6, 0x79, 0x2f, 0x1d, 0xde, 0x18, - 0x4a, 0x3e, 0x83, 0x35, 0x6b, 0xd9, 0xdb, 0x1d, 0x26, 0x0c, 0x72, 0xe1, - 0x4e, 0xba, 0xf1, 0xde, 0x19, 0xe6, 0x78, 0x1e, 0xaa, 0x76, 0x5b, 0x2a, - 0x58, 0x6b, 0x7d, 0x34, 0x38, 0xb8, 0x2a, 0x78, 0xa0, 0x9f, 0x42, 0xeb, - 0x92, 0xa6, 0xaa, 0xa2, 0xc1, 0xe4, 0xfd, 0x90, 0x2f, 0x04, 0x2f, 0x21, - 0xce, 0xd1, 0xf9, 0x98, 0x4d, 0xc5, 0x3e, 0x62, 0xd4, 0xc7, 0xf7, 0xd9, - 0x7f, 0x5d, 0xfc, 0x24, 0x3d, 0xec, 0x6c, 0xab, 0x74, 0x9c, 0x94, 0x07, - 0x5a, 0xb5, 0x20, 0x4b, 0xe7, 0x3e, 0x0a, 0x78, 0x13, 0x94, 0x17, 0x5d, - 0x43, 0x23, 0x25, 0x5a, 0x77, 0x73, 0x13, 0xbf, 0xee, 0xfd, 0xa1, 0x2a, - 0xe8, 0x2a, 0x38, 0xcf, 0xe8, 0xa6, 0x19, 0x2f, 0x35, 0xa3, 0xdc, 0xed, - 0x9d, 0xcb, 0xe3, 0x8b, 0x2c, 0x40, 0xf1, 0x70, 0xda, 0x67, 0x60, 0x8a, - 0xd0, 0x8e, 0x05, 0x9c, 0x14, 0x79, 0x80, 0x59, 0x16, 0xa4, 0xbb, 0xb9, - 0x62, 0xb4, 0x22, 0xa1, 0xc2, 0x73, 0xf9, 0x1b, 0xe1, 0x96, 0x95, 0xd9, - 0x0c, 0xa0, 0xe7, 0x88, 0x59, 0x15, 0xa9, 0xcd, 0x33, 0x44, 0xd7, 0xe1, - 0x59, 0xc4, 0x98, 0xe7, 0x0e, 0x75, 0x1b, 0xe9, 0xb6, 0x90, 0xaf, 0x6d, - 0xbd, 0x99, 0xc1, 0x2a, 0xb0, 0x00, 0xb0, 0x9e, 0x21, 0x8d, 0x03, 0xa9, - 0xb2, 0x33, 0xcf, 0x66, 0xf0, 0x20, 0xab, 0x16, 0xf7, 0x1c, 0xe6, 0x6d, - 0x47, 0x97, 0xf4, 0x06, 0x52, 0x5b, 0x4e, 0xca, 0x69, 0xbd, 0xb6, 0xc1, - 0xe7, 0xc0, 0x2c, 0x97, 0x7f, 0x22, 0xba, 0x48, 0xea, 0xef, 0xbe, 0xa5, - 0x38, 0x71, 0x74, 0x0e, 0x13, 0x44, 0x56, 0x04, 0x91, 0x9b, 0x55, 0x9a, - 0xfd, 0xd2, 0x42, 0xc2, 0x03, 0x07, 0xca, 0xd3, 0xf0, 0x0c, 0x04, 0xe1, - 0xd7, 0xfa, 0xbc, 0x3e, 0x1e, 0xed, 0x61, 0x2a, 0x7d, 0x21, 0x56, 0xe7, - 0x80, 0x27, 0x17, 0x2e, 0x3c, 0x11, 0x03, 0x63, 0x20, 0xc8, 0xb5, 0xb0, - 0x3e, 0x59, 0xae, 0xf6, 0xfe, 0x75, 0x59, 0x79, 0x7b, 0xb8, 0x1e, 0x4d, - 0xf0, 0x29, 0xbe, 0x84, 0x44, 0xde, 0x20, 0x3c, 0xb2, 0xb6, 0x9f, 0x25, - 0x44, 0x37, 0x1e, 0x42, 0x83, 0xe5, 0xd6, 0xdd, 0xbd, 0xbd, 0xdf, 0xf9, - 0x22, 0xd1, 0x3d, 0x90, 0x63, 0x66, 0x7a, 0xc7, 0xe7, 0x57, 0x35, 0x8f, - 0x2f, 0x99, 0xcb, 0xc3, 0xcb, 0xcc, 0x00, 0xb6, 0x85, 0xa1, 0xe0, 0x21, - 0x10, 0xb3, 0x35, 0xbf, 0xae, 0xb8, 0x28, 0xed, 0xc1, 0x1a, 0x59, 0xcf, - 0x74, 0x54, 0x6c, 0xcd, 0x9d, 0xc2, 0xb7, 0xb8, 0x94, 0xf2, 0xb1, 0x94, - 0xe8, 0x7c, 0xf2, 0x0e, 0x98, 0x16, 0x16, 0x76, 0xf0, 0xf9, 0x41, 0xdb, - 0xfe, 0xc8, 0x51, 0x50, 0x63, 0x36, 0xc0, 0x00, 0xf0, 0x78, 0xbd, 0x4b, - 0xb0, 0xd4, 0x77, 0xa5, 0x61, 0x91, 0x3a, 0x66, 0xe2, 0x97, 0xae, 0x75, - 0x57, 0x44, 0xd5, 0x7b, 0x07, 0x05, 0x35, 0xbd, 0x01, 0xa5, 0x8e, 0xf9, - 0x46, 0x66, 0x90, 0x08, 0xd8, 0x8d, 0xd6, 0xbe, 0x2a, 0xac, 0xe4, 0x9c, - 0x4c, 0x53, 0xfe, 0x6e, 0x64, 0xec, 0x4a, 0x1b, 0xbf, 0x16, 0x41, 0x07, - 0x64, 0x64, 0x49, 0x81, 0x67, 0xc6, 0xc3, 0xdc, 0xd4, 0x12, 0x8d, 0xed, - 0xcc, 0xb3, 0x56, 0xa9, 0xa7, 0x89, 0x68, 0xcf, 0x18, 0x6f, 0x78, 0x07, - 0x67, 0x1e, 0xd4, 0x50, 0xa8, 0x62, 0x58, 0xde, 0xab, 0xca, 0x1a, 0x71, - 0x66, 0x74, 0xba, 0x5b, 0x74, 0xe6, 0xab, 0x59, 0xa1, 0x90, 0x9a, 0x34, - 0x07, 0x3a, 0x60, 0x95, 0xd2, 0x52, 0xc6, 0x1c, 0x1c, 0xec, 0xf1, 0x7c, - 0x42, 0x10, 0x17, 0xa9, 0x6f, 0x18, 0xe9, 0xda, 0x09, 0x60, 0xf9, 0xcb, - 0xe0, 0xb3, 0x4c, 0x9b, 0x3c, 0x8a, 0xf5, 0x9d, 0x8d, 0xb4, 0xf1, 0x7d, - 0x5a, 0x24, 0x86, 0x3f, 0x04, 0xc2, 0x2e, 0xb4, 0x11, 0x36, 0xc1, 0x1a, - 0x8d, 0x08, 0x71, 0xd6, 0x95, 0x4c, 0xb6, 0x62, 0xec, 0x81, 0x1a, 0x35, - 0x28, 0x67, 0x86, 0xe8, 0xf6, 0xc4, 0xf7, 0xd2, 0xe1, 0x2b, 0x94, 0xf6, - 0xc6, 0x17, 0xcd, 0x7e, 0xbd, 0x65, 0x96, 0x19, 0x74, 0x1f, 0x32, 0xf6, - 0xc0, 0xdb, 0x40, 0x2d, 0xf8, 0xce, 0x89, 0x9d, 0x9b, 0x81, 0xb0, 0xfb, - 0xed, 0x8d, 0xac, 0xb4, 0xea, 0xa4, 0xe8, 0x0a, 0xf0, 0xed, 0xbf, 0xe4, - 0x60, 0x64, 0x27, 0x77, 0x5b, 0x95, 0xc9, 0xe3, 0x08, 0x3f, 0x89, 0x56, - 0xc4, 0xbe, 0x2a, 0x56, 0x14, 0xdc, 0x34, 0xa1, 0xca, 0x0f, 0x2a, 0xbc, - 0x95, 0x8d, 0xaf, 0x22, 0x63, 0xa5, 0x40, 0xa9, 0xaa, 0x08, 0x52, 0x88, - 0x18, 0x80, 0xe8, 0x70, 0x38, 0xe2, 0x85, 0xcf, 0x8f, 0x78, 0x5a, 0x4e, - 0x1c, 0x7f, 0x2a, 0x14, 0xdd, 0xec, 0xf5, 0xc8, 0x3d, 0xe0, 0xe2, 0x3a, - 0x0c, 0x92, 0x48, 0x98, 0xdd, 0x5a, 0xea, 0x37, 0xa1, 0x75, 0xd7, 0x5c, - 0x3c, 0x84, 0xf1, 0x87, 0x2a, 0xce, 0x48, 0x92, 0x24, 0x68, 0x1a, 0xb6, - 0xa1, 0xdd, 0x03, 0xc8, 0xf3, 0xa4, 0x07, 0xb5, 0xd4, 0x5a, 0xbc, 0xe0, - 0x04, 0x38, 0x58, 0x10, 0xf3, 0x72, 0x5e, 0x53, 0x7e, 0xb2, 0x0f, 0xb0, - 0x49, 0xcf, 0x3b, 0x89, 0x0a, 0x57, 0x14, 0x39, 0xbe, 0xb3, 0x59, 0x09, - 0xb5, 0xb1, 0x82, 0x0f, 0xd6, 0x77, 0xe9, 0x9a, 0xa4, 0x37, 0x40, 0x5f, - 0x98, 0x37, 0xae, 0x50, 0x81, 0x65, 0x25, 0xd1, 0xcd, 0x6e, 0x06, 0x1b, - 0xab, 0xf0, 0x31, 0x37, 0xa1, 0xfd, 0x8e, 0x53, 0xed, 0x3f, 0xf3, 0x5d, - 0x99, 0x62, 0xa9, 0x74, 0xee, 0x87, 0x92, 0x0f, 0x0e, 0x22, 0xf1, 0xc8, - 0x1c, 0x66, 0x55, 0x7c, 0x88, 0xe4, 0x81, 0xb9, 0xf1, 0xbb, 0x94, 0xc7, - 0x93, 0x16, 0x49, 0xe8, 0x3c, 0x4e, 0x48, 0x43, 0x48, 0x11, 0x64, 0x73, - 0x76, 0xfa, 0x8d, 0x2b, 0xf1, 0x98, 0x76, 0x27, 0x3e, 0xd2, 0x6b, 0xd5, - 0xa0, 0x46, 0x83, 0x70, 0xc4, 0x44, 0xaa, 0x7f, 0x68, 0x06, 0xa0, 0xa3, - 0xeb, 0x03, 0x9b, 0x16, 0x2a, 0x44, 0x39, 0x64, 0x4c, 0xc7, 0x75, 0x4e, - 0xab, 0x01, 0xf6, 0x92, 0x43, 0xe8, 0x4d, 0x92, 0xcb, 0x1d, 0xfa, 0x72, - 0x98, 0xf7, 0xd5, 0xaf, 0x7c, 0x71, 0xbc, 0x2b, 0xc0, 0xf0, 0xe8, 0x45, - 0xb8, 0x72, 0xe1, 0x36, 0xfe, 0xed, 0xb9, 0xa7, 0xf3, 0xdf, 0x35, 0x19, - 0xa6, 0xdf, 0x8d, 0x10, 0x54, 0x9d, 0xe7, 0xa2, 0x3b, 0xcf, 0x9d, 0x66, - 0x47, 0x49, 0xae, 0x8b, 0x1f, 0xe2, 0x6c, 0xa5, 0x6d, 0x29, 0x27, 0x00, - 0xb9, 0xb8, 0x69, 0xb4, 0x44, 0x6b, 0x79, 0x15, 0xb7, 0xa9, 0xb7, 0x9e, - 0xb5, 0x58, 0x9f, 0xf3, 0x4f, 0xd3, 0x9f, 0xd6, 0x32, 0x21, 0x5e, 0xdf, - 0x35, 0xba, 0x9b, 0x4d, 0xe5, 0x01, 0x2d, 0x26, 0xd6, 0xa2, 0x3c, 0xc6, - 0x6e, 0x85, 0x1c, 0xbc, 0xbb, 0x55, 0xa1, 0xeb, 0x88, 0x35, 0x0e, 0x5b, - 0xe4, 0x8a, 0x5d, 0xb4, 0x19, 0x2e, 0x7c, 0x3f, 0x61, 0xf4, 0x8e, 0xbd, - 0xa0, 0xa5, 0x6f, 0x58, 0xb0, 0x7d, 0x56, 0x50, 0xc7, 0xe9, 0x6e, 0xef, - 0xc2, 0xff, 0x2a, 0x4d, 0x9d, 0x3e, 0xca, 0xe6, 0xe4, 0x92, 0x6e, 0xbb, - 0x67, 0xcf, 0xa3, 0xc2, 0x97, 0xd8, 0xe1, 0x3e, 0x66, 0x25, 0xb0, 0x7d, - 0x07, 0xa4, 0x47, 0xf5, 0xfc, 0xbf, 0x1e, 0x0b, 0xe4, 0xc0, 0x49, 0x7f, - 0xb7, 0x96, 0x83, 0x75, 0x3d, 0xce, 0xf2, 0x7e, 0x56, 0xad, 0x20, 0x2d, - 0x7e, 0xd7, 0xea, 0x5a, 0x0a, 0x75, 0xcc, 0x85, 0xed, 0x3f, 0x4d, 0x8f, - 0x39, 0x3e, 0x9b, 0x29, 0x27, 0x8a, 0x72, 0x8a, 0x4b, 0xab, 0x99, 0x6d, - 0x7f, 0x29, 0x63, 0x94, 0x2c, 0x5f, 0x40, 0xbf, 0xe0, 0x30, 0x54, 0xc0, - 0x0d, 0x3c, 0x37, 0xfd, 0xc3, 0xfe, 0xf2, 0xba, 0x1f, 0xc6, 0x39, 0xd0, - 0x57, 0x1a, 0x4a, 0x92, 0xed, 0x36, 0x4b, 0x28, 0x4d, 0x3f, 0x2a, 0x1e, - 0xc1, 0x45, 0x19, 0x3e, 0xdb, 0x30, 0xf3, 0xc7, 0xd0, 0xa9, 0x52, 0x27, - 0xdf, 0x00, 0x1f, 0x43, 0xbd, 0x56, 0x30, 0x68, 0x9c, 0x37, 0xc6, 0x42, - 0x76, 0x7e, 0x11, 0x2b, 0x45, 0x01, 0xa9, 0xb8, 0x16, 0x4b, 0x25, 0x89, - 0x9b, 0x78, 0xdf, 0x21, 0x38, 0xe5, 0x6b, 0x9f, 0xe1, 0x6a, 0xa1, 0x7c, - 0xc6, 0xa5, 0xdd, 0xe2, 0x78, 0x11, 0x81, 0xbc, 0x13, 0x58, 0xbf, 0x32, - 0x21, 0x06, 0xa1, 0x8e, 0x3a, 0xcf, 0xc2, 0x0a, 0xde, 0x60, 0x40, 0x43, - 0xb4, 0xd0, 0x05, 0x1c, 0x09, 0x97, 0xe4, 0x23, 0x94, 0xe2, 0x88, 0xd9, - 0x03, 0x2a, 0x8a, 0x28, 0x5e, 0xb6, 0x09, 0xb2, 0x23, 0x97, 0xcc, 0x47, - 0x9c, 0xfc, 0xa0, 0x9c, 0xd6, 0x35, 0x07, 0x0f, 0x33, 0x1a, 0x4c, 0x0e, - 0x27, 0xf6, 0x20, 0x28, 0x97, 0xea, 0xa6, 0x0d, 0x94, 0x93, 0x4b, 0x9e, - 0x67, 0x1a, 0x01, 0x71, 0x0e, 0x75, 0x75, 0x6b, 0x2c, 0x4a, 0x92, 0x37, - 0xc2, 0x77, 0x30, 0x98, 0x07, 0x62, 0x3e, 0x8a, 0x47, 0x94, 0x0a, 0xd9, - 0x8c, 0x61, 0xcb, 0x08, 0x48, 0xd8, 0x07, 0x1a, 0x95, 0xc4, 0x24, 0x25, - 0xa9, 0x84, 0x39, 0x14, 0x83, 0x17, 0xbf, 0x01, 0x26, 0x79, 0x22, 0x34, - 0x2d, 0x18, 0xa9, 0xae, 0x91, 0x5f, 0x8c, 0xc5, 0x02, 0xa4, 0x39, 0x68, - 0xf2, 0xba, 0x80, 0xab, 0x59, 0x58, 0xa3, 0xa6, 0x05, 0x27, 0x79, 0x04, - 0xf4, 0x15, 0xbd, 0x5d, 0xb5, 0xb8, 0x08, 0xa6, 0xeb, 0x2c, 0x4e, 0x31, - 0x09, 0xfe, 0x5b, 0xb2, 0x70, 0x5d, 0xb1, 0xde, 0x84, 0x9e, 0x44, 0x15, - 0x94, 0xca, 0x87, 0x8d, 0xb4, 0xb5, 0x6c, 0xc8, 0x63, 0x7e, 0x96, 0xf0, - 0x4c, 0x40, 0x9c, 0xb1, 0xfd, 0x17, 0x47, 0x63, 0x9e, 0x41, 0x74, 0x40, - 0x1e, 0xa7, 0xa7, 0x57, 0x76, 0xf5, 0xcb, 0x6e, 0xf4, 0x95, 0x35, 0xb0, - 0xf6, 0xc9, 0x37, 0x3c, 0xc0, 0xc4, 0x28, 0x4d, 0xf2, 0x61, 0x28, 0xf6, - 0xf8, 0xff, 0x9d, 0xee, 0x16, 0x0a, 0xc1, 0x6a, 0x0c, 0xd2, 0x90, 0xc3, - 0xdd, 0xb9, 0xe6, 0x69, 0x22, 0x4a, 0xdf, 0xcf, 0x58, 0x66, 0xd2, 0xab, - 0x05, 0x9a, 0x59, 0x61, 0x42, 0xc9, 0xcd, 0xe3, 0x91, 0x0a, 0xd7, 0x0d, - 0xe4, 0xb1, 0x33, 0x22, 0x44, 0x0f, 0xd6, 0x0b, 0xba, 0x39, 0x7d, 0x42, - 0x44, 0xb8, 0xf7, 0x48, 0xdb, 0xf2, 0x84, 0x28, 0xce, 0x56, 0x24, 0x91, - 0xfc, 0xf0, 0xaa, 0x04, 0x52, 0x08, 0x49, 0xb9, 0x5e, 0xd1, 0x68, 0x76, - 0x0c, 0x97, 0x52, 0x0e, 0x3d, 0x09, 0xbd, 0xd5, 0x91, 0x57, 0xfa, 0x53, - 0xce, 0x26, 0x1d, 0x6a, 0xeb, 0x39, 0x28, 0xd5, 0x24, 0xc9, 0x2a, 0x33, - 0xb6, 0x3c, 0x95, 0x03, 0x08, 0x30, 0xfc, 0xea, 0x87, 0xa4, 0xe1, 0x0e, - 0x31, 0x38, 0x7c, 0xf7, 0xe0, 0x8b, 0x8d, 0x09, 0x4e, 0x89, 0x16, 0x02, - 0x23, 0x44, 0xc0, 0xbf, 0xd0, 0x51, 0xca, 0x77, 0x8e, 0x45, 0x75, 0xe8, - 0x6b, 0xa9, 0x30, 0x1e, 0xc7, 0xaa, 0x2d, 0xdf, 0xad, 0x81, 0x0c, 0xac, - 0x1f, 0x8a, 0x5a, 0xd9, 0x80, 0xcd, 0x1d, 0x04, 0x57, 0x02, 0x79, 0xc1, - 0xbf, 0x65, 0xe3, 0x89, 0xa5, 0x35, 0x51, 0x9a, 0xe2, 0x09, 0xdf, 0xa7, - 0x62, 0xc7, 0xdc, 0x42, 0xcb, 0x27, 0x5c, 0x48, 0xda, 0x39, 0x81, 0x1b, - 0x43, 0x4f, 0x35, 0x71, 0x09, 0x9d, 0x0a, 0x71, 0x66, 0x16, 0x6f, 0x2c, - 0x53, 0x14, 0x43, 0x0b, 0x86, 0x2b, 0xe6, 0xa1, 0x4d, 0x5a, 0x6e, 0x4b, - 0xb3, 0x6b, 0x5e, 0x1c, 0x16, 0xb1, 0x3f, 0x4b, 0x54, 0x71, 0x6f, 0x37, - 0x56, 0x61, 0x62, 0xcc, 0xaa, 0x22, 0x98, 0x76, 0x7f, 0xd8, 0xa5, 0xac, - 0x12, 0x53, 0x01, 0xc4, 0x40, 0x8f, 0x95, 0x69, 0x3a, 0x1a, 0xb7, 0x41, - 0x53, 0x55, 0xa2, 0x9e, 0x9d, 0x26, 0x00, 0x58, 0x1e, 0x4b, 0x24, 0xc6, - 0x68, 0xd2, 0x17, 0x07, 0xd6, 0x9c, 0x12, 0x60, 0x18, 0x28, 0xa3, 0x1c, - 0xc8, 0x00, 0x97, 0xe6, 0xfb, 0x4f, 0x2e, 0x64, 0x32, 0x76, 0x45, 0x90, - 0xfa, 0xfb, 0x2d, 0x38, 0x68, 0x02, 0x20, 0xf5, 0x02, 0x1f, 0x46, 0xcf, - 0x4c, 0x82, 0x70, 0x02, 0xce, 0x87, 0x5f, 0xdd, 0x2a, 0xab, 0x1c, 0xe8, - 0x4c, 0x97, 0x59, 0x7b, 0x0a, 0x7a, 0x18, 0x52, 0x15, 0x7c, 0xf9, 0x66, - 0x33, 0x1c, 0xc7, 0xdf, 0xfc, 0xb8, 0x57, 0xf1, 0x4e, 0x30, 0x78, 0xfe, - 0x81, 0x38, 0x7f, 0x96, 0xf8, 0x48, 0xb2, 0x7a, 0xfc, 0x8b, 0xa0, 0xc8, - 0xdf, 0xb7, 0xd7, 0x5e, 0x13, 0x0f, 0x77, 0xe8, 0xbe, 0xa0, 0x2b, 0xd0, - 0xf6, 0x29, 0x53, 0x4d, 0x7a, 0xc8, 0xfc, 0x3f, 0x34, 0x6e, 0xab, 0x53, - 0x99, 0x39, 0xb9, 0xa7, 0x88, 0x5a, 0x57, 0x13, 0xb1, 0x7d, 0xf5, 0xf8, - 0x6a, 0x69, 0x6e, 0x39, 0xc1, 0xfe, 0xa0, 0xe4, 0xf3, 0xe2, 0x2f, 0xe3, - 0x58, 0x3f, 0xfa, 0x3c, 0x3b, 0x9d, 0x18, 0xad, 0x46, 0x55, 0xcc, 0x0a, - 0x64, 0x99, 0x15, 0x28, 0xe9, 0xb5, 0xee, 0xbf, 0x2d, 0x7f, 0x23, 0x2d, - 0x0a, 0xa6, 0x93, 0x72, 0x9b, 0x81, 0x53, 0x3c, 0x6f, 0x0a, 0xa6, 0x24, - 0x59, 0x6b, 0x21, 0x24, 0x65, 0xe5, 0xdc, 0x1b, 0x7e, 0x31, 0x4a, 0x09, - 0x3e, 0x33, 0xe7, 0x41, 0xd5, 0x63, 0x02, 0xd7, 0x8a, 0x5f, 0x6a, 0x96, - 0x79, 0xf7, 0x3b, 0x37, 0x31, 0xbd, 0xac, 0xf3, 0xaa, 0x27, 0x26, 0xdc, - 0x54, 0xce, 0x1c, 0xe4, 0x8d, 0x28, 0x59, 0xe5, 0xfb, 0x70, 0x7a, 0xdf, - 0x32, 0x32, 0xd9, 0x4a, 0xad, 0xcb, 0xf9, 0x2c, 0x2b, 0xfa, 0x28, 0x75, - 0x24, 0xc8, 0xc4, 0xe4, 0x4a, 0x50, 0x5b, 0x00, 0x60, 0xed, 0xa5, 0xcb, - 0x83, 0x68, 0x17, 0xdb, 0x2b, 0x9a, 0xa3, 0xae, 0xb4, 0x29, 0xd5, 0x89, - 0x41, 0xe8, 0x73, 0x06, 0xef, 0x84, 0x26, 0x83, 0x09, 0x54, 0xc7, 0xdf, - 0xed, 0x10, 0x56, 0x5e, 0x40, 0x4c, 0xdf, 0x6b, 0xc3, 0x78, 0x1b, 0x8a, - 0xe8, 0xee, 0xce, 0x55, 0x8e, 0x55, 0x4e, 0x53, 0xa3, 0xa6, 0x7b, 0xc2, - 0x45, 0x43, 0x65, 0xcf, 0xf0, 0xdb, 0xe4, 0x9e, 0xe2, 0x0d, 0xc8, 0x59, - 0xb7, 0xae, 0x8c, 0xf9, 0x36, 0xd7, 0x54, 0x28, 0xbe, 0xae, 0x1a, 0x5f, - 0x9a, 0x06, 0x6c, 0xc1, 0x83, 0xec, 0xac, 0x62, 0x77, 0xfe, 0xce, 0x54, - 0x68, 0xb0, 0x92, 0xcf, 0xe0, 0xbd, 0x91, 0xbf, 0x99, 0x09, 0x33, 0xe3, - 0x8f, 0xa8, 0xfe, 0xd5, 0x96, 0xaa, 0x08, 0x54, 0x53, 0x84, 0xb3, 0x2b, - 0xc9, 0x31, 0x2d, 0x56, 0x61, 0x6c, 0xc7, 0x59, 0xa9, 0xc1, 0x41, 0x74, - 0x02, 0xa8, 0x4f, 0x60, 0x13, 0x87, 0x06, 0xe7, 0x79, 0xe7, 0xbe, 0x8f, - 0x4b, 0x89, 0x78, 0x11, 0xc0, 0x61, 0x0e, 0x1b, 0x60, 0x11, 0xc7, 0x01, - 0x20, 0x70, 0x9f, 0x85, 0x4c, 0xf2, 0x6b, 0x7f, 0x52, 0x0e, 0xa8, 0x3c, - 0xcd, 0xf7, 0x91, 0x00, 0x37, 0xc0, 0xb4, 0x43, 0x52, 0x37, 0xe3, 0x15, - 0x23, 0x71, 0x6c, 0x5e, 0x0d, 0x27, 0xa9, 0x7c, 0x5a, 0x44, 0xa6, 0x2e, - 0xc2, 0x4c, 0x88, 0xa0, 0x27, 0x93, 0x70, 0x53, 0xbf, 0x6e, 0x88, 0x29, - 0x33, 0x1c, 0x4d, 0x59, 0x54, 0x90, 0x8d, 0x31, 0x68, 0xe7, 0x61, 0xd6, - 0x37, 0xa4, 0x24, 0x32, 0x05, 0x36, 0xa4, 0xfa, 0x99, 0x97, 0x71, 0xf9, - 0xa1, 0xd8, 0xbe, 0xae, 0x65, 0x1a, 0x0e, 0x0c, 0xec, 0x43, 0x37, 0x48, - 0xd4, 0xa1, 0x44, 0x2a, 0x7e, 0xe4, 0x9d, 0x63, 0x09, 0xc7, 0x8b, 0x4b, - 0xf9, 0x20, 0x6c, 0x8b, 0x13, 0xa3, 0xe5, 0x04, 0x32, 0x09, 0x89, 0xf2, - 0x25, 0x89, 0x96, 0x34, 0x97, 0x80, 0xff, 0xa8, 0xc6, 0x97, 0x70, 0x7e, - 0x78, 0x83, 0xd7, 0x9f, 0xb4, 0xb6, 0xad, 0xbb, 0x08, 0x9c, 0xf8, 0x62, - 0xcf, 0xf0, 0x7e, 0x4a, 0xc9, 0xbf, 0x97, 0xf7, 0x6a, 0xe5, 0x47, 0x9d, - 0x16, 0xbc, 0x9a, 0xeb, 0x57, 0x40, 0xbd, 0x11, 0x77, 0xed, 0xfe, 0x83, - 0xef, 0xc1, 0x0b, 0x97, 0x36, 0x31, 0x2a, 0x71, 0xa6, 0x21, 0xa6, 0x9c, - 0xde, 0x5c, 0xe5, 0x9c, 0xb8, 0xdf, 0x51, 0x3e, 0xca, 0xcf, 0x46, 0x4f, - 0x0b, 0xde, 0xb0, 0xfc, 0x13, 0xb6, 0x8b, 0xe7, 0x46, 0xef, 0x5a, 0x44, - 0x34, 0x95, 0x0f, 0x7f, 0x75, 0x2e, 0xf7, 0x15, 0x08, 0x20, 0x45, 0x06, - 0xdd, 0xdb, 0x38, 0x03, 0x77, 0x36, 0x00, 0x2d, 0xf5, 0x0e, 0x43, 0xdc, - 0x7b, 0x05, 0xf8, 0xc1, 0xd2, 0x1f, 0xb8, 0x9b, 0x45, 0xc1, 0xbf, 0x08, - 0x71, 0xe9, 0xfd, 0xf7, 0xf3, 0x25, 0x5f, 0xaa, 0x73, 0x11, 0xd7, 0xe2, - 0x1c, 0x89, 0xe4, 0xae, 0xde, 0x60, 0x79, 0x16, 0x1e, 0x0f, 0x46, 0xd2, - 0x13, 0xe6, 0x49, 0xef, 0xa1, 0x4e, 0x27, 0x83, 0xed, 0x96, 0x85, 0x03, - 0xcb, 0x7c, 0x3c, 0xb7, 0x69, 0xa3, 0xf5, 0x6e, 0x65, 0xe1, 0x05, 0x90, - 0xcf, 0x04, 0x0d, 0x21, 0x4b, 0xf5, 0x86, 0x73, 0x1b, 0x52, 0x1b, 0xee, - 0xba, 0x73, 0xca, 0x58, 0x75, 0x4f, 0x98, 0x06, 0x5c, 0xa6, 0x97, 0x9f, - 0x2a, 0x78, 0xde, 0x61, 0x52, 0x9c, 0x13, 0x9c, 0x0d, 0x85, 0xf4, 0x97, - 0x96, 0xf1, 0x92, 0x12, 0x55, 0x01, 0xf7, 0x8c, 0x69, 0xa8, 0x32, 0xa4, - 0x67, 0x1c, 0x65, 0xd5, 0x88, 0x98, 0xe3, 0xe8, 0x29, 0x98, 0x2b, 0x0f, - 0x9b, 0x9f, 0x1a, 0x15, 0x6a, 0x13, 0xee, 0xd4, 0xac, 0x77, 0x76, 0x20, - 0xc1, 0x72, 0x51, 0xdd, 0xb7, 0xea, 0x73, 0xdf, 0xc5, 0x73, 0x8b, 0x98, - 0xc5, 0x7a, 0xe9, 0x8d, 0x90, 0xfb, 0x0c, 0xf2, 0x60, 0x3e, 0x97, 0xb2, - 0x2e, 0x30, 0xb6, 0x9a, 0xa9, 0x0d, 0x04, 0xc8, 0x95, 0xfc, 0x0c, 0x7a, - 0xb6, 0xcf, 0x2b, 0x7a, 0x63, 0x58, 0x22, 0x87, 0xbf, 0xee, 0x7e, 0x0e, - 0xaf, 0x15, 0xf1, 0x72, 0xc6, 0x5e, 0x9a, 0x05, 0xac, 0xe2, 0x06, 0xb7, - 0x48, 0x22, 0x72, 0x79, 0x7f, 0x26, 0xe9, 0x69, 0x6f, 0xbd, 0x39, 0x98, - 0x03, 0x69, 0x61, 0x5e, 0x19, 0x4e, 0x57, 0x2e, 0x6e, 0x93, 0x2a, 0xc6, - 0x39, 0xdd, 0xe0, 0xfa, 0x68, 0x24, 0xe6, 0x1d, 0x8f, 0x92, 0xd0, 0x0e, - 0x08, 0x35, 0x2e, 0x06, 0x32, 0xfa, 0xb9, 0xe7, 0xa3, 0x33, 0x1d, 0xb7, - 0x4a, 0xf0, 0x96, 0x6a, 0x70, 0x31, 0x00, 0xa5, 0x93, 0x6e, 0xb4, 0xa6, - 0x40, 0xea, 0xaa, 0x2e, 0x7a, 0x2d, 0x68, 0x4b, 0x94, 0x61, 0xc8, 0xcf, - 0x14, 0xf1, 0x02, 0xda, 0x08, 0xd9, 0x68, 0x4b, 0x7a, 0xca, 0x84, 0xfe, - 0x13, 0x26, 0x60, 0xb9, 0x07, 0xe6, 0xa7, 0xaf, 0xca, 0xe1, 0x1a, 0x5e, - 0x07, 0x44, 0xed, 0x3c, 0x55, 0x59, 0xf0, 0x52, 0x0b, 0x6b, 0x3e, 0x61, - 0xf4, 0x38, 0xc2, 0x61, 0x4e, 0x90, 0x52, 0xd0, 0xfd, 0xc3, 0x3f, 0xf8, - 0xbc, 0xf9, 0x36, 0xd0, 0x3f, 0xb1, 0x0e, 0x69, 0x09, 0x8e, 0x4d, 0x87, - 0x6e, 0x51, 0x2c, 0x7a, 0x5e, 0xa7, 0x03, 0x3c, 0xd5, 0xbf, 0xa8, 0x01, - 0x03, 0xee, 0x9e, 0xcc, 0xd6, 0xcd, 0xd3, 0x72, 0xe0, 0x20, 0x29, 0x3c, - 0x0d, 0x67, 0xd8, 0xb7, 0x23, 0xa5, 0xc6, 0xba, 0x00, 0xd9, 0xf1, 0xdf, - 0xda, 0x2e, 0x0d, 0x4b, 0xf4, 0xe3, 0xff, 0xd2, 0xe9, 0xb8, 0x97, 0x22, - 0xf4, 0x32, 0x83, 0x16, 0xec, 0x13, 0x36, 0xf3, 0x7c, 0xb3, 0x7d, 0x0e, - 0xa2, 0x93, 0xfe, 0x08, 0x10, 0x2b, 0x2f, 0xb8, 0x89, 0x31, 0xeb, 0xaa, - 0x74, 0x04, 0xa7, 0x6e, 0x45, 0x51, 0xa7, 0x5f, 0xfd, 0x59, 0x3a, 0x59, - 0x6e, 0x5b, 0xf4, 0xf3, 0xd9, 0x6c, 0xc7, 0xd6, 0xe8, 0xc2, 0xeb, 0xba, - 0xcb, 0x9d, 0x38, 0xa3, 0x1e, 0x2f, 0x4e, 0xa6, 0x32, 0x51, 0xbe, 0x1f, - 0xba, 0xdd, 0xa6, 0x84, 0xb1, 0x7b, 0xda, 0x58, 0x75, 0xd0, 0xec, 0x9c, - 0xd7, 0x35, 0xbe, 0x5d, 0x2b, 0x31, 0xaf, 0xbb, 0xdb, 0xce, 0xd2, 0x61, - 0x51, 0xcd, 0x4c, 0x8c, 0x3e, 0x62, 0x29, 0x05, 0xbd, 0x41, 0x8c, 0x5b, - 0x95, 0x37, 0xe4, 0x2e, 0xb8, 0xc0, 0x11, 0xd1, 0xd3, 0x9f, 0x48, 0x85, - 0x4b, 0xff, 0x48, 0xca, 0x5e, 0xf0, 0x6f, 0xf9, 0x3a, 0xb0, 0x92, 0xf8, - 0xc6, 0x9b, 0xdc, 0xb8, 0x87, 0xd4, 0xaa, 0x81, 0x1d, 0x1c, 0xa8, 0x1f, - 0xba, 0xcb, 0x56, 0xe3, 0xa4, 0x90, 0x4b, 0xd2, 0x64, 0x5f, 0x17, 0x4e, - 0xcb, 0x30, 0xf3, 0x95, 0xee, 0xec, 0xd0, 0x6f, 0xc6, 0xee, 0x7c, 0x30, - 0x9a, 0x24, 0x61, 0x84, 0x2d, 0x90, 0x90, 0x0e, 0xa3, 0xe9, 0x79, 0xdc, - 0x45, 0x86, 0x17, 0x7d, 0x3e, 0x84, 0x30, 0x7a, 0xfd, 0xb4, 0x56, 0xd3, - 0xc0, 0x15, 0xda, 0x2f, 0x7f, 0x88, 0xcb, 0x1a, 0x44, 0xff, 0x71, 0x95, - 0x05, 0xec, 0xee, 0xe2, 0x48, 0x8a, 0x81, 0xb4, 0x54, 0xa9, 0x1b, 0x9d, - 0x2d, 0x83, 0xb0, 0x97, 0x84, 0xd6, 0x19, 0xe1, 0xf4, 0xd8, 0xdb, 0x8e, - 0x37, 0xb3, 0xec, 0x5b, 0x46, 0xa6, 0x0d, 0x17, 0xa7, 0x9e, 0xfd, 0xeb, - 0xec, 0xeb, 0xaf, 0x40, 0x66, 0x52, 0x7d, 0x37, 0x59, 0x79, 0x7e, 0xc7, - 0x0e, 0xd5, 0xc9, 0x00, 0x53, 0x60, 0x31, 0x89, 0xb7, 0x1d, 0x69, 0xc4, - 0xf0, 0x89, 0x10, 0x7a, 0xed, 0x59, 0xff, 0xea, 0xd3, 0x3b, 0x2f, 0x31, - 0x68, 0xca, 0x77, 0x3a, 0x22, 0x8b, 0xf9, 0x08, 0xe1, 0xe0, 0x3a, 0x37, - 0x32, 0xd7, 0xff, 0xf7, 0x58, 0x68, 0x1c, 0xf7, 0xff, 0xac, 0x02, 0x49, - 0x3a, 0x3f, 0x3f, 0x0a, 0xb2, 0xc0, 0xef, 0xf8, 0x36, 0xf5, 0x94, 0x8b, - 0xf7, 0xe3, 0x1f, 0xb0, 0xd2, 0xa2, 0xc4, 0xd1, 0x14, 0x45, 0xda, 0x19, - 0x9f, 0x31, 0xdf, 0x70, 0x1c, 0x99, 0x9c, 0x0d, 0x91, 0xc9, 0xba, 0x32, - 0x8d, 0xef, 0x6b, 0xa3, 0xf9, 0x4b, 0xc6, 0xae, 0x68, 0x74, 0x5d, 0x94, - 0x9f, 0xf6, 0x1b, 0x8b, 0xfb, 0xd1, 0x48, 0x28, 0x5d, 0x19, 0x3c, 0xa3, - 0xaa, 0x31, 0x05, 0x6a, 0xb9, 0x6c, 0xf2, 0x8a, 0x02, 0x4e, 0xb0, 0xbf, - 0xae, 0x98, 0x2e, 0xeb, 0xeb, 0x0d, 0x87, 0xee, 0x1f, 0x54, 0x54, 0xbb, - 0xa8, 0x17, 0xe4, 0x7f, 0x46, 0x74, 0x0f, 0x56, 0x20, 0xcb, 0xcf, 0xa4, - 0xdc, 0xaa, 0xc4, 0xeb, 0x81, 0x83, 0x12, 0x28, 0x1c, 0x47, 0x5b, 0xd5, - 0x62, 0xe2, 0x49, 0x0a, 0x35, 0x09, 0xcf, 0x29, 0xe7, 0x80, 0xaa, 0x89, - 0xe8, 0xc1, 0x2f, 0x36, 0x6d, 0xef, 0xa1, 0xe4, 0xb4, 0x19, 0x4a, 0x7d, - 0x6f, 0x29, 0x03, 0xb5, 0x15, 0x33, 0x9a, 0x84, 0xdc, 0x22, 0x71, 0x04, - 0x02, 0xdc, 0x0a, 0x73, 0x20, 0x4c, 0xd3, 0x2c, 0x31, 0x0e, 0xa2, 0xf2, - 0x89, 0xe6, 0x99, 0x0c, 0x5c, 0x04, 0x77, 0xed, 0x53, 0x24, 0xcb, 0xb6, - 0xb5, 0x5c, 0x87, 0x49, 0xab, 0x74, 0x8f, 0xe8, 0xa4, 0xfa, 0x2f, 0x8e, - 0x82, 0x01, 0xbc, 0xf8, 0x1f, 0x79, 0x50, 0x12, 0xea, 0x25, 0x40, 0xa6, - 0x30, 0x8c, 0x0b, 0x00, 0xd9, 0x20, 0x52, 0xbe, 0xda, 0xb7, 0xf2, 0x39, - 0xb6, 0x70, 0xae, 0xe9, 0xf1, 0x3c, 0x0d, 0xe2, 0xda, 0x1d, 0xa2, 0xeb, - 0xc3, 0x68, 0xd7, 0x90, 0xc5, 0x54, 0xb7, 0xb7, 0x3e, 0x9f, 0x5c, 0x88, - 0x94, 0x4b, 0x29, 0x27, 0xfc, 0xa5, 0x2e, 0x1b, 0x14, 0x0a, 0x02, 0x63, - 0xc3, 0x15, 0x8c, 0xbe, 0xc2, 0x8b, 0xc0, 0x74, 0x3b, 0xd0, 0xef, 0x6c, - 0x01, 0x35, 0x51, 0x57, 0x98, 0x97, 0x48, 0xc7, 0xdd, 0xe7, 0xce, 0x25, - 0x2e, 0xfe, 0xe3, 0x68, 0xfb, 0xf1, 0x15, 0xbf, 0xbb, 0xd3, 0xcf, 0x16, - 0xaa, 0x69, 0x3f, 0xa4, 0x09, 0xfd, 0xb6, 0xe6, 0xf2, 0xaf, 0xa7, 0xeb, - 0x17, 0x19, 0xdb, 0x6b, 0x79, 0x70, 0x73, 0x8b, 0xb3, 0x02, 0x81, 0x9d, - 0xb2, 0xc0, 0xf2, 0xc2, 0x35, 0x56, 0xa5, 0x98, 0x4a, 0x3f, 0x31, 0xb7, - 0x68, 0x13, 0xa5, 0x85, 0x3c, 0xe9, 0xe6, 0x98, 0x06, 0x81, 0xf1, 0x7b, - 0x4f, 0x29, 0xf6, 0x24, 0xa2, 0xc9, 0x96, 0x45, 0xc7, 0x15, 0x40, 0xbf, - 0x32, 0x22, 0x6c, 0x2c, 0x70, 0x6a, 0x6d, 0xbb, 0x15, 0x3a, 0x50, 0x12, - 0xa4, 0x62, 0x33, 0x36, 0x89, 0x78, 0x7b, 0x57, 0xfc, 0xf6, 0x2b, 0x60, - 0x6d, 0x86, 0x9f, 0x86, 0x87, 0x5b, 0xe4, 0x03, 0xdb, 0x24, 0x74, 0x2d, - 0x61, 0xe0, 0xfd, 0xb4, 0x16, 0x46, 0x34, 0xf2, 0xee, 0x96, 0x7a, 0xff, - 0x95, 0x5b, 0x21, 0x5f, 0x32, 0x74, 0x6d, 0xc3, 0x55, 0x0b, 0xe9, 0xf8, - 0x15, 0x21, 0x97, 0x14, 0xf5, 0x45, 0x5d, 0x2f, 0xb2, 0xbc, 0xa8, 0x45, - 0x14, 0x65, 0x78, 0x1e, 0xad, 0x5d, 0x55, 0x97, 0x32, 0xa1, 0x83, 0xbf, - 0xcc, 0x9b, 0x76, 0xd0, 0xa8, 0x4d, 0x97, 0x91, 0xe0, 0x5c, 0x34, 0x72, - 0xc9, 0x54, 0x04, 0x96, 0xbf, 0xf2, 0x0f, 0x55, 0x72, 0x1e, 0x31, 0xdf, - 0xa0, 0x97, 0x19, 0x97, 0x08, 0xef, 0x7a, 0x6b, 0xa0, 0x65, 0x2c, 0xdc, - 0xcc, 0x45, 0x69, 0x5d, 0x4b, 0x2e, 0xb0, 0x64, 0x45, 0x1c, 0x57, 0xec, - 0xbb, 0xb4, 0x30, 0x6d, 0xf6, 0x98, 0x4e, 0xad, 0x26, 0x90, 0x1b, 0xb8, - 0x06, 0x1a, 0x36, 0x33, 0x1b, 0xc4, 0x20, 0x5c, 0x67, 0xb8, 0x36, 0xed, - 0x52, 0xca, 0x04, 0x19, 0xbe, 0x46, 0xdc, 0x34, 0x7a, 0x30, 0x30, 0x71, - 0x98, 0xf5, 0x50, 0xb2, 0x46, 0xc9, 0x85, 0x89, 0x74, 0xf7, 0xb1, 0x6f, - 0x7d, 0xc7, 0xee, 0x6d, 0x07, 0xf0, 0x87, 0x29, 0xc2, 0x3c, 0x06, 0x1f, - 0x4b, 0xc2, 0x38, 0xbc, 0x5a, 0x31, 0x7a, 0x1b, 0x22, 0x23, 0x56, 0x8e, - 0x38, 0x75, 0x88, 0x8e, 0x9b, 0x47, 0xe7, 0x7d, 0xd9, 0xee, 0x84, 0xec, - 0xf7, 0x31, 0x05, 0x68, 0xce, 0x3c, 0x53, 0x73, 0xaa, 0xc5, 0xfc, 0xfe, - 0x1d, 0x18, 0xef, 0x66, 0xe1, 0x87, 0x05, 0xf9, 0xbb, 0xd5, 0x02, 0x32, - 0x46, 0xfc, 0x49, 0xaf, 0xd5, 0xa3, 0x13, 0x48, 0xbc, 0x0d, 0x05, 0xce, - 0xd3, 0xb3, 0xed, 0xff, 0x04, 0xd1, 0xa0, 0xda, 0xf0, 0x8d, 0xcf, 0xb0, - 0x9f, 0xd3, 0x57, 0x6e, 0x8a, 0x9a, 0x48, 0x6c, 0x1c, 0x99, 0x3c, 0xf0, - 0xcf, 0x24, 0x93, 0x45, 0xcc, 0x56, 0x6e, 0x6b, 0x71, 0x73, 0x33, 0x37, - 0x19, 0x36, 0x93, 0xef, 0xea, 0x99, 0x64, 0x6a, 0x39, 0x9a, 0x8f, 0xdb, - 0xe6, 0xb8, 0x93, 0x2b, 0xdf, 0xdd, 0x96, 0x98, 0x39, 0x5c, 0x46, 0x3d, - 0x1c, 0x53, 0x93, 0xf4, 0x9f, 0x59, 0x36, 0x20, 0xad, 0x9f, 0x5e, 0x40, - 0x74, 0x98, 0x46, 0x6d, 0x17, 0x35, 0xf6, 0x6a, 0x91, 0x71, 0x55, 0xfd, - 0xac, 0x79, 0xce, 0x31, 0x95, 0x72, 0xa5, 0xb4, 0xf6, 0xd0, 0xa2, 0x44, - 0x38, 0xf0, 0x6a, 0xba, 0xfc, 0xcd, 0xef, 0x5d, 0x5e, 0xf0, 0x8e, 0xfa, - 0xfc, 0x4a, 0x23, 0x83, 0x3a, 0x49, 0x4a, 0xd4, 0x12, 0xce, 0x4e, 0x19, - 0xe9, 0x2e, 0x59, 0x31, 0xce, 0x00, 0x03, 0xe1, 0x93, 0xc9, 0x9e, 0x42, - 0x94, 0x21, 0x23, 0xb0, 0x2f, 0x76, 0x9b, 0x64, 0xb1, 0x6d, 0xd3, 0x44, - 0x64, 0x0f, 0x0f, 0xf6, 0xde, 0x08, 0xb2, 0xb1, 0xf8, 0xa4, 0x54, 0xdc, - 0x7f, 0xf3, 0xd2, 0xc0, 0x61, 0x5c, 0x62, 0x60, 0x82, 0xca, 0x14, 0x31, - 0x4a, 0x05, 0xa0, 0xb5, 0xc4, 0xb0, 0xef, 0xe6, 0x75, 0xd7, 0x68, 0x5b, - 0xe8, 0x79, 0x5f, 0xa9, 0xe6, 0xfa, 0x3e, 0x7f, 0x36, 0x74, 0x7a, 0x1b, - 0x84, 0x09, 0x89, 0xac, 0x1b, 0x99, 0x17, 0x7f, 0xf8, 0x5b, 0x40, 0x1d, - 0xb2, 0x82, 0xe4, 0x2d, 0xbf, 0x4b, 0x99, 0xa1, 0x5f, 0x39, 0x10, 0xf5, - 0x75, 0x90, 0xda, 0xfd, 0xa7, 0x37, 0x7a, 0x4a, 0x0e, 0xf8, 0xb8, 0xf3, - 0xc4, 0xaf, 0x3b, 0x00, 0xef, 0x6d, 0xf5, 0xcd, 0x91, 0x55, 0xe9, 0xf4, - 0x28, 0x69, 0x56, 0x27, 0xb5, 0x83, 0xbe, 0x0f, 0x0f, 0xce, 0x1d, 0x32, - 0xbd, 0x2c, 0x86, 0x86, 0x28, 0x0a, 0xee, 0x35, 0x30, 0xe5, 0xda, 0x0e, - 0xe6, 0xf9, 0x99, 0x53, 0x48, 0x53, 0x47, 0x9b, 0xb8, 0x29, 0x6e, 0xdd, - 0x50, 0x4e, 0xc7, 0x77, 0x97, 0x9b, 0x52, 0xf1, 0x33, 0xf1, 0x6f, 0x36, - 0x9a, 0x5c, 0x86, 0x77, 0x17, 0x6d, 0x9b, 0xd1, 0xa0, 0xc6, 0xcd, 0x90, - 0x45, 0xa3, 0xbc, 0x5f, 0x75, 0x81, 0xc5, 0x02, 0x6d, 0xbf, 0x6f, 0xca, - 0x90, 0x7e, 0x77, 0x5a, 0x62, 0x04, 0x52, 0x91, 0x03, 0xd8, 0x8c, 0x6e, - 0x0b, 0x79, 0x61, 0xb7, 0x30, 0xac, 0xab, 0xc1, 0xdb, 0x6a, 0x93, 0x33, - 0xc9, 0xb4, 0x11, 0x5a, 0x00, 0xdc, 0x74, 0xe9, 0x64, 0xf1, 0x90, 0xa4, - 0x54, 0x0b, 0xa1, 0xbe, 0xa1, 0xe6, 0x96, 0x66, 0xe5, 0x32, 0xfc, 0x1c, - 0xd7, 0x65, 0x58, 0xaf, 0x61, 0xeb, 0xe1, 0x3c, 0x9d, 0xec, 0xbe, 0xf1, - 0xb8, 0x4d, 0x17, 0xc6, 0x40, 0xed, 0x63, 0xad, 0x65, 0xe8, 0x83, 0x9f, - 0x71, 0xa4, 0x78, 0x5d, 0x7c, 0xee, 0x43, 0xfd, 0x0f, 0xb6, 0x7e, 0x27, - 0x5e, 0x91, 0x04, 0xc5, 0x81, 0x11, 0x26, 0x66, 0xc2, 0x10, 0xd1, 0xe7, - 0x74, 0x12, 0x2f, 0xcf, 0xfb, 0xc1, 0xfd, 0xc2, 0x44, 0x21, 0x63, 0xab, - 0xa3, 0xb5, 0x28, 0x74, 0xf5, 0xd7, 0x38, 0xfe, 0x5d, 0x64, 0x89, 0x48, - 0xbb, 0x84, 0x9f, 0x7e, 0x6b, 0xe4, 0x69, 0x3b, 0xf2, 0xf7, 0x7e, 0xae, - 0x4e, 0x1a, 0x05, 0xed, 0x62, 0xf0, 0xc7, 0xf6, 0xd3, 0x86, 0xf9, 0xb5, - 0x95, 0x5d, 0x2c, 0xfd, 0x94, 0x0e, 0xa7, 0x17, 0x96, 0x5b, 0xeb, 0x47, - 0x8d, 0x86, 0x1a, 0xd3, 0x1a, 0x16, 0x65, 0x56, 0x61, 0x80, 0x89, 0x44, - 0x39, 0x7a, 0xe9, 0x62, 0x56, 0x76, 0x5b, 0xe0, 0xc3, 0x71, 0xb0, 0xef, - 0x03, 0x3b, 0x17, 0x44, 0xa5, 0x29, 0xb8, 0x87, 0x55, 0xfe, 0x0a, 0x69, - 0x9e, 0x57, 0x71, 0xd5, 0x15, 0xdd, 0xd0, 0xc5, 0xa3, 0xfd, 0x5e, 0x42, - 0x4e, 0x03, 0x7c, 0xc6, 0x19, 0x85, 0xf2, 0x50, 0xbe, 0xd4, 0xbf, 0x82, - 0x3a, 0xba, 0x5c, 0xee, 0x06, 0xe2, 0xc1, 0x8b, 0xe6, 0x00, 0xed, 0x7a, - 0x67, 0x7e, 0x2a, 0xad, 0xc8, 0xaa, 0x1d, 0x9a, 0x18, 0x40, 0x84, 0x04, - 0x8b, 0x56, 0xa5, 0xed, 0x0a, 0xcc, 0xe5, 0x3e, 0xb8, 0x84, 0x1e, 0xb5, - 0x2e, 0x20, 0xe7, 0xb0, 0x45, 0x1e, 0x4d, 0xe9, 0xe0, 0x84, 0xf5, 0x80, - 0xdb, 0xcb, 0x1f, 0x5d, 0x49, 0xa1, 0x25, 0xf9, 0x62, 0x63, 0x4c, 0x72, - 0x0a, 0x71, 0x6f, 0x2b, 0x30, 0x15, 0x65, 0x2e, 0x2c, 0xa5, 0x34, 0x74, - 0xca, 0xe2, 0x0a, 0x54, 0x6f, 0x56, 0xdf, 0x42, 0x32, 0xe4, 0x53, 0x0c, - 0x3b, 0xa6, 0x6f, 0x1f, 0x9d, 0xd6, 0xf2, 0x59, 0x25, 0x11, 0x6a, 0xf8, - 0x1c, 0xbf, 0xff, 0x35, 0xe8, 0xdf, 0xdd, 0x4d, 0xf2, 0x49, 0x5b, 0x8d, - 0xee, 0xdd, 0x9e, 0xdb, 0xd1, 0x18, 0x6c, 0xd3, 0x86, 0xd0, 0x43, 0xf0, - 0x0d, 0xa0, 0x71, 0xe6, 0xb4, 0xbe, 0xdb, 0x92, 0xac, 0x92, 0xf7, 0xd0, - 0xa4, 0x30, 0x31, 0xbb, 0xe4, 0x04, 0x42, 0xf9, 0xd2, 0x86, 0x31, 0x4c, - 0xe4, 0xb9, 0xe1, 0x92, 0x99, 0x99, 0x28, 0xac, 0xc3, 0x91, 0xe1, 0x0e, - 0x82, 0xb3, 0x38, 0x76, 0x3f, 0x1c, 0x79, 0x7b, 0xcc, 0xf4, 0xaf, 0x46, - 0xc8, 0xc3, 0x36, 0xdb, 0x34, 0x30, 0x79, 0x6c, 0x64, 0xd4, 0xbb, 0x01, - 0xc4, 0x1f, 0x9e, 0xa2, 0x63, 0xa6, 0xf0, 0xf8, 0x74, 0x61, 0x99, 0xde, - 0xb5, 0x75, 0x02, 0x74, 0x94, 0x78, 0x38, 0xf2, 0xed, 0xe4, 0xf0, 0xa9, - 0x1c, 0x7e, 0x6d, 0x28, 0xf5, 0x0c, 0xb9, 0x4e, 0x54, 0x74, 0x04, 0x52, - 0xba, 0x05, 0x70, 0xae, 0x3b, 0x0d, 0x90, 0x44, 0x46, 0x9d, 0xba, 0x41, - 0xb6, 0x37, 0x7c, 0xe8, 0x32, 0x0b, 0xca, 0xe4, 0x0c, 0xb2, 0xc2, 0x3d, - 0x6e, 0x22, 0x2e, 0x74, 0x6f, 0x18, 0xc8, 0xa3, 0x05, 0x96, 0x9a, 0x65, - 0xc0, 0x4f, 0x90, 0xf9, 0xb7, 0x49, 0x8a, 0x85, 0x81, 0x88, 0x60, 0x71, - 0xa9, 0xdd, 0x19, 0xf6, 0x3e, 0xf0, 0x2e, 0xb0, 0x77, 0xdc, 0x88, 0xf8, - 0x6d, 0x49, 0x73, 0xf8, 0x64, 0xa3, 0x56, 0xcb, 0x75, 0x20, 0xfc, 0x72, - 0x7c, 0x0b, 0x59, 0x96, 0x27, 0x1c, 0xcb, 0x9a, 0x94, 0x4a, 0xb8, 0xc9, - 0xb2, 0x6e, 0x98, 0x80, 0xfc, 0xb2, 0x18, 0x67, 0x9a, 0xff, 0x98, 0x01, - 0x33, 0x47, 0x3f, 0x96, 0x08, 0xde, 0xe4, 0xd3, 0x38, 0x8f, 0x00, 0x03, - 0xd2, 0xb1, 0xed, 0xc5, 0x1e, 0x71, 0x09, 0x00, 0x3b, 0x1a, 0x5e, 0x21, - 0x61, 0x23, 0x43, 0x6c, 0x8b, 0xa2, 0xfa, 0x6a, 0xf9, 0x7b, 0xce, 0xd1, - 0x36, 0xc8, 0x48, 0x81, 0x65, 0xd9, 0x3a, 0x96, 0x15, 0x82, 0x11, 0xe2, - 0x11, 0xf8, 0x4e, 0x18, 0x1a, 0xfa, 0xd1, 0x55, 0x6c, 0x82, 0xd2, 0x3e, - 0x56, 0xea, 0x5f, 0xe6, 0xb6, 0x1c, 0x1b, 0xe1, 0x67, 0x79, 0x4e, 0x30, - 0x11, 0xac, 0xae, 0xe2, 0x27, 0x41, 0x27, 0x7d, 0x11, 0x4a, 0xe7, 0xc4, - 0xc5, 0xe9, 0x02, 0xba, 0x3b, 0x8b, 0x1f, 0xf0, 0xa0, 0xf8, 0x9c, 0x78, - 0x5c, 0xfb, 0xc0, 0x82, 0x12, 0xf5, 0xdb, 0x4f, 0xdd, 0xd4, 0x76, 0x88, - 0x7c, 0x4a, 0xe6, 0xe5, 0x1b, 0x07, 0x01, 0xe4, 0x08, 0xcc, 0x12, 0x09, - 0xfb, 0x9f, 0x78, 0x85, 0x82, 0x7a, 0xf8, 0x39, 0x03, 0x52, 0xa9, 0xc6, - 0x1c, 0x13, 0x58, 0xf1, 0x38, 0x53, 0x09, 0x98, 0x3a, 0xc6, 0xcd, 0xff, - 0xa1, 0x7b, 0xb7, 0x54, 0x0b, 0x93, 0x8e, 0x75, 0x83, 0x6b, 0x4e, 0xea, - 0x05, 0x7f, 0xf1, 0x03, 0x58, 0xde, 0x0e, 0x6b, 0xba, 0x1c, 0x58, 0x11, - 0xa0, 0x90, 0x6a, 0xde, 0xfc, 0x1a, 0x8c, 0xbf, 0x7b, 0xd2, 0x76, 0xef, - 0x79, 0xf3, 0xf9, 0x4e, 0x4c, 0xfd, 0xa2, 0x5b, 0xcf, 0xf7, 0xc5, 0x69, - 0x08, 0xec, 0xd4, 0x47, 0xbe, 0x7a, 0x05, 0x23, 0x1f, 0x45, 0x56, 0x9d, - 0x1a, 0x61, 0x9d, 0xa6, 0xe9, 0x93, 0x18, 0xc6, 0x4b, 0x84, 0x68, 0x28, - 0x7e, 0x15, 0xbc, 0x63, 0xb9, 0x5f, 0x8c, 0x82, 0x6b, 0x84, 0xf1, 0x48, - 0x30, 0xcf, 0x2b, 0xe1, 0xa0, 0x5b, 0x70, 0xb4, 0x07, 0xe6, 0x28, 0xc2, - 0x57, 0x9c, 0xf4, 0xe8, 0xc3, 0xc8, 0x9c, 0xd1, 0x37, 0x1f, 0xac, 0xfa, - 0x8e, 0x12, 0x9b, 0x87, 0x5b, 0x41, 0x86, 0x61, 0x41, 0xe9, 0x39, 0x2a, - 0x14, 0x1d, 0x23, 0xd1, 0x65, 0xc7, 0x18, 0x71, 0x0c, 0xff, 0x7a, 0x55, - 0xef, 0xc9, 0x55, 0xe6, 0xec, 0xe5, 0x4c, 0xbd, 0x97, 0xe3, 0xf3, 0x54, - 0x3e, 0x02, 0xce, 0xeb, 0xa1, 0xf6, 0x09, 0x16, 0x95, 0x81, 0x7c, 0xbc, - 0xf7, 0xa0, 0x6a, 0x8f, 0xd5, 0x80, 0xb0, 0xcd, 0x6d, 0x34, 0x63, 0xb2, - 0xb4, 0xe3, 0xd3, 0xd9, 0x77, 0x43, 0xf1, 0x7f, 0xdb, 0x4e, 0x3f, 0x5c, - 0xe0, 0x9e, 0x1f, 0x43, 0xff, 0x4d, 0x31, 0xf3, 0x96, 0xeb, 0x0f, 0xf0, - 0x61, 0xf3, 0x57, 0xa1, 0x5a, 0x55, 0xdc, 0xee, 0xef, 0x34, 0xef, 0x0d, - 0xa2, 0x50, 0xa5, 0x5a, 0xb8, 0x28, 0x02, 0x3e, 0x64, 0xb2, 0xa9, 0x22, - 0xc0, 0x23, 0x04, 0x0d, 0x6d, 0x1f, 0x26, 0x43, 0xe5, 0x1d, 0x1c, 0xe7, - 0x48, 0xfe, 0x15, 0x85, 0xc5, 0x6a, 0x5f, 0x64, 0x31, 0xff, 0x66, 0xdf, - 0x0b, 0x87, 0x84, 0xad, 0x7d, 0xb3, 0x31, 0x49, 0xa1, 0xb9, 0x9c, 0xc1, - 0x28, 0xa7, 0x43, 0xba, 0x1c, 0xcd, 0x1a, 0x20, 0x42, 0xd8, 0xd0, 0xba, - 0xc7, 0x0d, 0xa8, 0x34, 0x79, 0xc6, 0xd5, 0x2a, 0xa9, 0x8d, 0x16, 0xe0, - 0xfa, 0x75, 0xc1, 0xfb, 0x20, 0x10, 0xb7, 0xe4, 0x3f, 0xb4, 0xde, 0x16, - 0x43, 0xb1, 0x6f, 0xc9, 0x2f, 0xd8, 0xa2, 0xca, 0x3b, 0x45, 0xbe, 0x86, - 0x65, 0x76, 0x8e, 0x25, 0xdb, 0xa4, 0x52, 0xf1, 0xc3, 0xe5, 0x58, 0xef, - 0x82, 0x90, 0x7a, 0x37, 0xfc, 0x16, 0xcb, 0xb1, 0xa8, 0x10, 0x73, 0x6d, - 0x51, 0x98, 0x50, 0x86, 0x7d, 0xe5, 0x79, 0x86, 0x4c, 0x6f, 0xfb, 0x93, - 0xb9, 0xbd, 0x35, 0x50, 0x93, 0x22, 0x99, 0x32, 0x17, 0x75, 0x26, 0xbd, - 0x7b, 0x11, 0xff, 0xb1, 0x51, 0x6c, 0x74, 0xc5, 0x8b, 0xa6, 0xda, 0xe7, - 0x4b, 0x3f, 0x01, 0x36, 0x6e, 0x97, 0xf1, 0x73, 0x28, 0xcd, 0x4b, 0x3a, - 0xcf, 0xb5, 0xb6, 0xf7, 0xc1, 0xdb, 0xcb, 0xce, 0xf7, 0x59, 0x25, 0xc9, - 0x6a, 0x3a, 0x60, 0x9c, 0xd4, 0x7d, 0xe1, 0x33, 0x9f, 0x8f, 0xac, 0x62, - 0xa8, 0xaa, 0x18, 0xc5, 0xed, 0x2e, 0xba, 0x68, 0xf4, 0x45, 0xd8, 0xbf, - 0xed, 0x69, 0xd1, 0x00, 0x2d, 0x91, 0x74, 0x13, 0x41, 0xaa, 0xbc, 0xc3, - 0x32, 0xb4, 0x8f, 0xbd, 0x6e, 0x00, 0xe2, 0x5d, 0xa2, 0xfc, 0x6c, 0x79, - 0x3c, 0x5b, 0x54, 0x53, 0xba, 0x57, 0x13, 0xb9, 0x54, 0x79, 0x14, 0x71, - 0x34, 0x61, 0x94, 0x52, 0x5e, 0x68, 0x14, 0x00, 0x87, 0x20, 0x85, 0xa9, - 0x85, 0xc4, 0xc8, 0x27, 0x4f, 0x9f, 0x54, 0x1d, 0x59, 0xea, 0x41, 0xc0, - 0x86, 0x2a, 0x51, 0x10, 0x29, 0xe6, 0x7d, 0xcd, 0x61, 0xa9, 0x35, 0x26, - 0x6c, 0x67, 0xe6, 0xa0, 0x00, 0xff, 0xb4, 0x17, 0x3b, 0x4f, 0xf6, 0x4a, - 0xd4, 0x85, 0xbe, 0x4f, 0xf9, 0xdd, 0x70, 0x9d, 0x0d, 0xc8, 0x2a, 0x91, - 0x21, 0x6c, 0x2b, 0xa8, 0x44, 0x0a, 0x02, 0x7d, 0x9e, 0x70, 0xfc, 0xec, - 0xe6, 0xd4, 0x84, 0xda, 0x1e, 0x5e, 0xab, 0x79, 0xca, 0x94, 0x6f, 0x0c, - 0x43, 0x05, 0x9e, 0xe7, 0x78, 0xa5, 0x49, 0x80, 0xd1, 0xa1, 0x49, 0x31, - 0x0d, 0x64, 0xd0, 0x6a, 0x64, 0xfb, 0x9a, 0xce, 0xa4, 0x64, 0x4c, 0x48, - 0x97, 0xe4, 0x44, 0x74, 0x71, 0x36, 0xdc, 0x00, 0x46, 0x02, 0x78, 0xbc, - 0x24, 0x48, 0xc9, 0x86, 0x0c, 0xdb, 0xa0, 0x53, 0x8d, 0xd7, 0x45, 0xab, - 0x9c, 0xf4, 0x03, 0xcd, 0x23, 0xb4, 0x6e, 0x7f, 0xec, 0xf0, 0x37, 0xb1, - 0x7b, 0x2f, 0x11, 0x0c, 0xac, 0x8c, 0x65, 0x83, 0x14, 0x52, 0x42, 0xe4, - 0x23, 0x46, 0x56, 0xd6, 0x49, 0xe4, 0xd7, 0xff, 0xc4, 0x62, 0xf2, 0x42, - 0x4a, 0x34, 0xb1, 0xb3, 0xaa, 0x72, 0x02, 0xff, 0x62, 0x3d, 0x00, 0xa9, - 0x70, 0x15, 0xbc, 0x6b, 0xc4, 0x79, 0x37, 0xca, 0x81, 0xdb, 0xf2, 0x19, - 0x96, 0x94, 0xa0, 0x94, 0x29, 0x94, 0xff, 0xec, 0x08, 0x92, 0x05, 0x9d, - 0x92, 0x42, 0x7c, 0x78, 0xa2, 0x55, 0xf7, 0xee, 0xa3, 0x63, 0xef, 0x10, - 0xfd, 0x64, 0x15, 0xa7, 0xd3, 0xae, 0x29, 0x08, 0x2b, 0xd7, 0x5d, 0x72, - 0x90, 0xd7, 0x24, 0x6b, 0x78, 0xac, 0xa8, 0xf7, 0x1c, 0x66, 0xdb, 0x14, - 0x50, 0x17, 0xbd, 0xe0, 0x5c, 0xfd, 0x6a, 0x03, 0x96, 0x45, 0x03, 0xf1, - 0x34, 0x2c, 0x8e, 0x7b, 0xc2, 0x03, 0x6b, 0x44, 0xf6, 0x20, 0x87, 0x71, - 0x22, 0x89, 0x7a, 0xba, 0x14, 0x39, 0x9f, 0xe4, 0x01, 0x15, 0x9e, 0x97, - 0x6a, 0x28, 0x1e, 0x1a, 0x27, 0x15, 0x16, 0x40, 0x01, 0xf8, 0x21, 0xcf, - 0x75, 0x41, 0xfd, 0x48, 0x7c, 0xb6, 0xf1, 0xae, 0x75, 0x02, 0x59, 0xfd, - 0xf1, 0x29, 0xaf, 0x8b, 0xba, 0xd4, 0x1e, 0xe3, 0x92, 0xa3, 0xda, 0x52, - 0x09, 0xb1, 0x56, 0x79, 0x20, 0x24, 0x31, 0x2d, 0xf6, 0x54, 0x54, 0x39, - 0x1d, 0x7d, 0x6a, 0xb7, 0x23, 0x41, 0x0d, 0x00, 0x31, 0xbe, 0x7d, 0x04, - 0x57, 0x0f, 0x13, 0x4f, 0xf6, 0x60, 0xdd, 0xff, 0x7d, 0x28, 0x3a, 0xa9, - 0x37, 0xbc, 0x02, 0x5b, 0x6f, 0x0f, 0x3d, 0xdc, 0x4c, 0xe9, 0x30, 0x38, - 0x5a, 0x39, 0xbd, 0xd9, 0x2e, 0xc1, 0x69, 0x6b, 0xf3, 0x2d, 0xa1, 0xbd, - 0x59, 0x9a, 0x06, 0x6c, 0x7a, 0x70, 0x03, 0x0b, 0xbc, 0xbb, 0x71, 0xc1, - 0xa2, 0x59, 0x1c, 0x9d, 0x26, 0x8b, 0xfe, 0x10, 0x97, 0x0d, 0xf7, 0x50, - 0xb6, 0x9e, 0x03, 0x58, 0x20, 0xd6, 0x40, 0x60, 0xd2, 0x77, 0x83, 0x90, - 0x3d, 0xbe, 0xae, 0x6a, 0x53, 0x32, 0x72, 0x60, 0xde, 0xf8, 0x0f, 0x5f, - 0xb7, 0x98, 0xbf, 0x97, 0x87, 0x6f, 0x17, 0x80, 0x0d, 0x68, 0xb0, 0x66, - 0x18, 0x2a, 0x5c, 0x9a, 0x34, 0xcb, 0xe1, 0x7c, 0xc1, 0xea, 0xa7, 0xee, - 0xa4, 0x19, 0x9f, 0xd9, 0x49, 0x42, 0x75, 0x6b, 0x1d, 0x91, 0xef, 0x50, - 0x46, 0x6a, 0x90, 0x02, 0x4e, 0x35, 0xf2, 0x45, 0x04, 0xa7, 0xd1, 0x5c, - 0x9a, 0x2d, 0x09, 0x61, 0x01, 0xf7, 0x81, 0xdc, 0x06, 0xb8, 0xfd, 0x54, - 0x46, 0x93, 0xb6, 0x7c, 0xa0, 0x3e, 0x56, 0xa8, 0xbf, 0x0f, 0x7c, 0x82, - 0xf9, 0x5c, 0x01, 0xdd, 0x91, 0x66, 0xb4, 0x16, 0x6b, 0xd7, 0x67, 0xd4, - 0x29, 0xf9, 0xe2, 0x40, 0xd8, 0x6c, 0x8d, 0xd1, 0x5e, 0x27, 0x1d, 0xfc, - 0x70, 0x05, 0x0d, 0xf2, 0x5d, 0x84, 0x06, 0x28, 0x52, 0x01, 0x0a, 0x9c, - 0xfb, 0xb2, 0x76, 0x49, 0x85, 0x61, 0x59, 0xbc, 0x08, 0x59, 0xff, 0x1f, - 0x32, 0x40, 0xd8, 0x04, 0xae, 0x0f, 0xce, 0xdc, 0x63, 0x43, 0xf8, 0x86, - 0xfe, 0xac, 0x80, 0x26, 0xe5, 0x82, 0x0a, 0xb1, 0x9f, 0xc5, 0xb7, 0x4f, - 0xfb, 0x72, 0x74, 0x28, 0x68, 0x43, 0x1d, 0x09, 0x59, 0xab, 0xe2, 0x11, - 0x6f, 0x03, 0xbf, 0xd8, 0x43, 0xc8, 0x90, 0x56, 0xbd, 0x9d, 0x81, 0x92, - 0xe0, 0x7e, 0x18, 0x14, 0xb2, 0x54, 0xb3, 0x53, 0x8b, 0x98, 0x13, 0x0c, - 0x1e, 0x15, 0x04, 0x0e, 0x0b, 0x9b, 0x6c, 0xdc, 0x5b, 0x81, 0xae, 0xab, - 0xa4, 0x44, 0xc7, 0x2f, 0x4d, 0x58, 0xc1, 0x08, 0xaa, 0xb1, 0xd4, 0x2c, - 0x93, 0xc7, 0x2c, 0xa5, 0xaf, 0x70, 0x51, 0xac, 0x23, 0xd4, 0x5d, 0xe2, - 0x52, 0xc8, 0x9f, 0xaa, 0xc8, 0xfd, 0x2f, 0x87, 0xe2, 0xaf, 0x99, 0xa8, - 0x64, 0x0b, 0xb4, 0x40, 0x69, 0x1a, 0x1f, 0xfd, 0xbc, 0xb7, 0xd1, 0x2f, - 0xa8, 0x89, 0x1c, 0xb9, 0x16, 0x24, 0xb0, 0xd0, 0x01, 0xdd, 0x9f, 0xdc, - 0xcc, 0x82, 0x0f, 0x1e, 0x7d, 0xc4, 0x65, 0x2d, 0x42, 0x94, 0x33, 0xcf, - 0xe2, 0xbe, 0x56, 0x70, 0xdd, 0x18, 0x64, 0xa5, 0x2e, 0xb1, 0x60, 0x1d, - 0x76, 0xca, 0x2b, 0x52, 0x06, 0x28, 0x10, 0x00, 0x01, 0x5c, 0x78, 0x81, - 0x7a, 0x7b, 0x06, 0x0b, 0x1b, 0x0e, 0x28, 0x41, 0xde, 0x97, 0x22, 0xf3, - 0xfe, 0x50, 0x2c, 0xd3, 0xff, 0xc8, 0xc2, 0x10, 0xef, 0x20, 0x3d, 0x91, - 0x53, 0x6b, 0x50, 0x1d, 0x8f, 0x73, 0x1a, 0x77, 0x24, 0x55, 0x1b, 0xf3, - 0x2c, 0xc5, 0xea, 0xd2, 0x1e, 0x43, 0x2d, 0x1c, 0x55, 0x3c, 0xaf, 0xab, - 0x7a, 0xd3, 0xfb, 0x9c, 0xb3, 0xd9, 0x9a, 0x62, 0xb2, 0x15, 0x38, 0x2c, - 0x71, 0x68, 0x3b, 0xfc, 0x0e, 0x35, 0xf1, 0x4c, 0xe1, 0x00, 0x76, 0x8e, - 0x93, 0xf5, 0x3f, 0x5f, 0x8a, 0x1a, 0xed, 0xda, 0x19, 0x40, 0x83, 0xca, - 0x6e, 0xfe, 0xde, 0x65, 0x0d, 0x84, 0xa1, 0xdf, 0x4d, 0x87, 0x97, 0x00, - 0xcf, 0x3f, 0xd3, 0x64, 0xcf, 0x87, 0xad, 0xa8, 0xd4, 0xb0, 0x12, 0x9c, - 0xfd, 0x82, 0xaa, 0xa5, 0x10, 0xe8, 0xef, 0x94, 0xb9, 0x5c, 0x6b, 0x7e, - 0x4b, 0x28, 0x1f, 0x1a, 0x68, 0xcd, 0xe1, 0xb7, 0x6f, 0xa8, 0xce, 0x2f, - 0xcc, 0x99, 0x31, 0xc7, 0x59, 0xd7, 0x6b, 0x2b, 0x49, 0x51, 0xb3, 0x70, - 0x77, 0x32, 0xcf, 0xb4, 0x64, 0x84, 0xbd, 0xba, 0x3e, 0x78, 0xda, 0x0b, - 0x1d, 0x7d, 0xd6, 0x28, 0xbd, 0x68, 0x7a, 0x29, 0x1d, 0xbe, 0x2a, 0x1f, - 0xc5, 0xdf, 0x87, 0xa0, 0x0e, 0xfe, 0x0b, 0xed, 0x67, 0xf7, 0x80, 0xf5, - 0xcd, 0xd2, 0x6a, 0xf8, 0x10, 0x39, 0x87, 0x24, 0x9a, 0xa5, 0x2f, 0xcf, - 0x55, 0xed, 0xcb, 0x7d, 0xf4, 0xfe, 0xa6, 0x10, 0xb5, 0x6b, 0x4f, 0x1c, - 0x1f, 0xfd, 0xde, 0xfa, 0x66, 0x64, 0x9d, 0x3d, 0x21, 0xa1, 0x6f, 0xe1, - 0xd4, 0x28, 0x62, 0x9f, 0x43, 0xb2, 0xa8, 0xf0, 0xd7, 0xc1, 0xfe, 0xb9, - 0xc9, 0x30, 0x9a, 0xbb, 0x43, 0xa5, 0xb3, 0xd0, 0x48, 0x89, 0xa7, 0xdc, - 0x5f, 0x0e, 0xa3, 0xf0, 0xf8, 0x49, 0xcf, 0xf1, 0x26, 0xff, 0xdb, 0x10, - 0xe8, 0xc0, 0x08, 0x91, 0xd2, 0xb2, 0x4f, 0x0b, 0x3a, 0xb9, 0xd0, 0xf2, - 0x62, 0x86, 0xd5, 0xac, 0x1c, 0x3a, 0x0e, 0x01, 0xa7, 0x55, 0xfc, 0x99, - 0xa6, 0x3d, 0xb4, 0x2f, 0x1b, 0x0c, 0xbf, 0xe1, 0x47, 0x5b, 0xb6, 0x05, - 0x9e, 0x7d, 0xf2, 0x9f, 0x82, 0x6a, 0x3e, 0x67, 0x43, 0xe6, 0xa5, 0x82, - 0xf2, 0x75, 0x87, 0xd2, 0xf3, 0x1e, 0x9a, 0xd1, 0xd6, 0x6d, 0x85, 0x6c, - 0xb4, 0xd8, 0xfa, 0x53, 0xdc, 0x17, 0x96, 0x8c, 0xfd, 0xb5, 0xb8, 0xf4, - 0x21, 0x96, 0x0a, 0x4f, 0xf2, 0x03, 0xee, 0xee, 0x60, 0x30, 0xd0, 0x4d, - 0x23, 0xa2, 0xb7, 0x3e, 0xa9, 0xc5, 0x77, 0x82, 0x21, 0x08, 0x0f, 0x25, - 0x2f, 0xf0, 0xe0, 0xe0, 0x00, 0x00, 0x01, 0x14, 0x66, 0x66, 0xc6, 0x62, - 0x51, 0xf1, 0xbc, 0x6b, 0x72, 0xb6, 0xa1, 0xb9, 0x98, 0x19, 0x03, 0x79, - 0xde, 0xe6, 0x12, 0xab, 0x7b, 0xf8, 0x06, 0x43, 0x30, 0x03, 0xe3, 0x83, - 0xa3, 0x19, 0x5d, 0xde, 0xd8, 0x3f, 0x90, 0x81, 0x78, 0xc6, 0x74, 0x88, - 0xce, 0x8b, 0xbc, 0x1f, 0x95, 0xa1, 0x27, 0x6b, 0xfa, 0x4d, 0x0f, 0xe2, - 0xa8, 0xab, 0x03, 0xdc, 0x32, 0xeb, 0xed, 0x8e, 0xd2, 0x36, 0x51, 0x21, - 0x1e, 0x89, 0xb3, 0xfb, 0x87, 0x47, 0x34, 0xf0, 0x28, 0x62, 0x19, 0x26, - 0xb4, 0x5f, 0xfb, 0x51, 0x37, 0xe2, 0x64, 0xdf, 0x34, 0x56, 0xb6, 0x15, - 0x29, 0xb8, 0x9d, 0xef, 0xc1, 0x31, 0xa4, 0xc5, 0x84, 0x0e, 0x2a, 0x4d, - 0x46, 0x6a, 0xc0, 0xfd, 0xd4, 0xde, 0xae, 0xcb, 0x58, 0x30, 0xa2, 0xd2, - 0x2d, 0x87, 0xe9, 0x6d, 0xa4, 0xff, 0xe6, 0xeb, 0xd2, 0x90, 0x50, 0x27, - 0xbb, 0xf5, 0x93, 0xb8, 0x78, 0x6e, 0x59, 0x9e, 0xdf, 0x67, 0x4d, 0x67, - 0xa6, 0x7d, 0xe6, 0x27, 0x4b, 0x8b, 0x1e, 0x8e, 0x7b, 0xc3, 0x5e, 0xbb, - 0x0b, 0xb3, 0x0b, 0x7c, 0xa7, 0xea, 0x38, 0x63, 0x79, 0x0e, 0x3e, 0xf2, - 0x14, 0x23, 0xa8, 0xa0, 0x2a, 0x04, 0x6f, 0xac, 0x68, 0xe0, 0xe0, 0xbb, - 0x5a, 0xc3, 0x32, 0x91, 0xe8, 0x49, 0x08, 0x7b, 0x99, 0x55, 0x36, 0x00, - 0x11, 0x21, 0xea, 0x5c, 0xfe, 0x8f, 0xd7, 0x8d, 0x30, 0x91, 0x15, 0xbe, - 0x63, 0x19, 0x60, 0x45, 0xa2, 0xbc, 0xf5, 0xba, 0x1f, 0x57, 0xd9, 0x6e, - 0x5f, 0xaa, 0xbd, 0x11, 0x92, 0x6d, 0x9f, 0x97, 0x75, 0x86, 0xda, 0xbc, - 0x1b, 0x28, 0x8d, 0xf7, 0x05, 0xf5, 0xab, 0x99, 0xb1, 0xb5, 0xd6, 0xde, - 0xd0, 0x1a, 0xb3, 0xba, 0x29, 0xa6, 0x2e, 0xeb, 0xb7, 0x82, 0x77, 0x01, - 0xc4, 0x8d, 0x40, 0x64, 0xac, 0x36, 0x65, 0xba, 0x37, 0x99, 0xbd, 0x37, - 0x8d, 0xbf, 0x15, 0x8e, 0xd9, 0x41, 0x69, 0x32, 0xaf, 0x6e, 0x37, 0x35, - 0x6e, 0xb7, 0xa7, 0x62, 0x3b, 0x81, 0xc9, 0x4d, 0x67, 0x56, 0x19, 0x1b, - 0xba, 0xb7, 0x67, 0xf7, 0xe7, 0x5a, 0xa4, 0xdd, 0x78, 0xc0, 0xa8, 0x8b, - 0xc3, 0x46, 0x0e, 0x2d, 0x69, 0x65, 0x18, 0x50, 0xea, 0xe6, 0x24, 0x6d, - 0x32, 0xa3, 0x3b, 0x8d, 0x4a, 0x78, 0xa5, 0x46, 0x38, 0xfe, 0x6c, 0x35, - 0x20, 0x99, 0x57, 0x4b, 0xc3, 0xf7, 0xed, 0xf1, 0x5b, 0xfc, 0xa1, 0x7f, - 0xb5, 0xdf, 0xda, 0xc1, 0x0f, 0xa4, 0x1a, 0x74, 0x6f, 0x09, 0x07, 0x92, - 0x4d, 0x70, 0x89, 0x5d, 0x8f, 0xc9, 0x04, 0xf6, 0xa6, 0x52, 0xcb, 0xd3, - 0x23, 0xb3, 0x38, 0x82, 0xfa, 0x16, 0x6b, 0xfc, 0x47, 0x7b, 0x1c, 0x55, - 0xf0, 0xfb, 0x94, 0x63, 0x7b, 0x17, 0x79, 0x6f, 0x14, 0x44, 0x3c, 0x23, - 0x48, 0x63, 0x0c, 0x4c, 0x72, 0x06, 0x63, 0x0c, 0xdd, 0x0e, 0x62, 0x62, - 0x84, 0x66, 0x59, 0x08, 0xec, 0xb0, 0xdd, 0x0e, 0x6d, 0xae, 0x17, 0xa1, - 0x71, 0xd6, 0xcd, 0x41, 0x93, 0xfe, 0x3b, 0x36, 0x24, 0xfe, 0x18, 0x1a, - 0x3b, 0x39, 0x9b, 0xe0, 0xc1, 0x2d, 0xcd, 0xe7, 0x8a, 0x0f, 0xff, 0xe9, - 0x63, 0x56, 0xe0, 0x80, 0x6a, 0xd3, 0x4b, 0x90, 0x03, 0x47, 0x8a, 0xb1, - 0xd6, 0x39, 0x97, 0x34, 0x9c, 0x80, 0xc8, 0x44, 0xbe, 0x54, 0xea, 0x7d, - 0xa7, 0xb3, 0x79, 0xcc, 0xa0, 0xc9, 0x94, 0xdd, 0x2e, 0x93, 0xa9, 0x5c, - 0xe9, 0xf5, 0xe9, 0x49, 0xe6, 0x69, 0xd3, 0x8e, 0xe3, 0x69, 0x8d, 0xb1, - 0xdb, 0xdd, 0x88, 0x25, 0x48, 0x6a, 0x00, 0x97, 0xfa, 0x48, 0xf8, 0xbe, - 0x7b, 0x81, 0xb4, 0xe0, 0x9f, 0x76, 0x61, 0x7f, 0xa0, 0x57, 0xf9, 0x5d, - 0x5b, 0x6a, 0x43, 0x88, 0x8d, 0xd4, 0xe0, 0x43, 0x05, 0x0a, 0x5f, 0x83, - 0x61, 0x05, 0x12, 0xb1, 0x1f, 0x4f, 0x16, 0xa9, 0x5c, 0xa7, 0x68, 0x91, - 0x01, 0xdd, 0x9f, 0x85, 0x5e, 0xc2, 0x78, 0x38, 0x19, 0x27, 0x4e, 0xcc, - 0xaf, 0x85, 0x3a, 0x55, 0x64, 0x99, 0xd9, 0x13, 0xa8, 0x24, 0x5f, 0xfa, - 0xcf, 0xca, 0xf9, 0xff, 0xa0, 0xcc, 0xda, 0xe3, 0x0e, 0x98, 0xcc, 0x7c, - 0x1d, 0xe3, 0xad, 0xe6, 0x4f, 0xa0, 0x4b, 0xda, 0x07, 0xc9, 0xb5, 0x9d, - 0x68, 0x54, 0xab, 0xf5, 0xa6, 0x47, 0xcc, 0x28, 0xe0, 0x10, 0x89, 0x97, - 0xbf, 0xdc, 0x61, 0x92, 0x59, 0xfb, 0xad, 0x01, 0xa3, 0x85, 0x90, 0x72, - 0x9f, 0x3b, 0x78, 0x4f, 0x08, 0x1d, 0x25, 0x0f, 0x52, 0xdd, 0xa9, 0x0a, - 0x0b, 0x4d, 0x1d, 0xde, 0xbd, 0xdd, 0x8c, 0x38, 0xef, 0x5f, 0xf5, 0xbd, - 0x7e, 0xe3, 0xbc, 0x19, 0xf2, 0x61, 0x76, 0x46, 0xe0, 0xb9, 0xb7, 0x05, - 0x38, 0x60, 0x10, 0x2d, 0xb4, 0x60, 0x2d, 0x5d, 0x8b, 0x5e, 0xbb, 0x2b, - 0x6e, 0x68, 0x2c, 0x77, 0x25, 0xe1, 0x32, 0xac, 0x6b, 0x1b, 0xc6, 0x79, - 0xf1, 0x61, 0x1c, 0xa9, 0x69, 0xba, 0x54, 0x2c, 0x7a, 0x17, 0x0b, 0x54, - 0xa0, 0x6f, 0x69, 0x59, 0x50, 0x85, 0x54, 0x9c, 0xcd, 0x23, 0x7b, 0xb6, - 0x8b, 0xdf, 0xd4, 0xbb, 0xbf, 0x81, 0xe6, 0x43, 0x62, 0x9d, 0xa9, 0x1d, - 0x15, 0x60, 0xba, 0x3c, 0xdb, 0x8a, 0x20, 0x70, 0x04, 0xde, 0x71, 0x34, - 0xbc, 0xc0, 0x15, 0xd1, 0x5a, 0xbc, 0xa6, 0xba, 0xa8, 0x9e, 0x03, 0xb9, - 0x54, 0xa1, 0xb2, 0xac, 0xbe, 0x9b, 0x0d, 0x87, 0xfc, 0x79, 0xca, 0x07, - 0xc0, 0xcc, 0x10, 0x57, 0xba, 0x7e, 0x8a, 0x04, 0x41, 0x54, 0xb6, 0xa0, - 0x86, 0x46, 0x07, 0x4e, 0x28, 0x89, 0x68, 0xa6, 0xcd, 0x37, 0x91, 0x57, - 0x38, 0x2b, 0xbb, 0x6b, 0x97, 0x8f, 0xb5, 0xe3, 0xaa, 0x5c, 0xfe, 0xf7, - 0xa2, 0x83, 0xa0, 0x67, 0x67, 0x71, 0x19, 0x1a, 0xa3, 0x62, 0x85, 0x3a, - 0xce, 0x9d, 0x95, 0x7b, 0x96, 0xad, 0x2c, 0x57, 0x53, 0x5c, 0x73, 0x80, - 0xe8, 0xb5, 0xfc, 0xc4, 0x86, 0x87, 0x2e, 0xcd, 0x04, 0x41, 0xd5, 0x36, - 0xc7, 0x89, 0x70, 0x88, 0xde, 0x25, 0xb6, 0xfa, 0x07, 0xea, 0xe2, 0x0e, - 0x52, 0xae, 0x8d, 0x4f, 0xde, 0x8e, 0x8e, 0x2f, 0xf8, 0x13, 0x4f, 0x6c, - 0x83, 0xe0, 0x16, 0x54, 0x1b, 0x2b, 0x49, 0x40, 0xba, 0xf2, 0xee, 0x6c, - 0x38, 0x33, 0xec, 0x06, 0xab, 0x1c, 0x20, 0xf1, 0x1e, 0x18, 0x20, 0x7b, - 0x9f, 0xba, 0x16, 0x3a, 0x57, 0xcb, 0x06, 0xf2, 0xbd, 0x72, 0x1e, 0x74, - 0xee, 0x7b, 0x50, 0xd2, 0xbb, 0x22, 0xa4, 0x40, 0xfb, 0x0e, 0xa2, 0xb0, - 0x5d, 0xa7, 0x18, 0xfd, 0x64, 0x47, 0xec, 0x82, 0x6a, 0x3f, 0x36, 0x79, - 0xe6, 0x69, 0x80, 0x53, 0x6b, 0xd4, 0xa6, 0x1d, 0xd1, 0xef, 0x0d, 0xbb, - 0xd7, 0xc2, 0xaa, 0x10, 0x46, 0xa4, 0xf1, 0x60, 0x55, 0xb9, 0x01, 0x04, - 0x77, 0x65, 0x64, 0xfa, 0x29, 0x02, 0xf5, 0x3f, 0xfc, 0x3a, 0x1c, 0x9a, - 0xb0, 0xfc, 0x77, 0x23, 0x92, 0x76, 0x3e, 0xd2, 0xd6, 0xb3, 0x5b, 0x69, - 0xcf, 0x37, 0x1b, 0x0e, 0xbb, 0xe9, 0x75, 0xe4, 0x11, 0xf1, 0xaa, 0x56, - 0xa0, 0x62, 0xd3, 0x1b, 0x08, 0x1d, 0xa1, 0xe2, 0xce, 0xb6, 0xd4, 0xe3, - 0x27, 0x45, 0x3a, 0x51, 0xfa, 0xd0, 0xfd, 0xb2, 0xa3, 0xb9, 0x30, 0x46, - 0x5a, 0x4b, 0x2c, 0x0f, 0xa8, 0x58, 0xcd, 0x31, 0x9e, 0x5b, 0x76, 0x05, - 0x07, 0x94, 0xec, 0x5f, 0x75, 0xc5, 0xef, 0x46, 0x90, 0x79, 0xea, 0xd9, - 0xb5, 0x67, 0x89, 0x15, 0x98, 0x4c, 0x29, 0x4d, 0xdd, 0x25, 0x6b, 0x50, - 0x72, 0xbe, 0x07, 0x0a, 0xc4, 0x78, 0x04, 0x5f, 0x6a, 0x05, 0x82, 0xb4, - 0x5b, 0x16, 0xf3, 0x22, 0x2a, 0xef, 0x94, 0x01, 0xb9, 0x70, 0xb2, 0x86, - 0xdb, 0xe5, 0xe9, 0x12, 0x8e, 0x6a, 0x6f, 0xda, 0x49, 0xf3, 0xae, 0xf4, - 0x2a, 0x86, 0x1d, 0x90, 0xac, 0x40, 0xb9, 0x9b, 0xfd, 0x8c, 0x09, 0x72, - 0x76, 0x67, 0x14, 0x8f, 0x56, 0x16, 0x90, 0xbc, 0xb7, 0x83, 0x91, 0x01, - 0x9e, 0x85, 0xff, 0xba, 0x77, 0x5b, 0x34, 0xc0, 0x71, 0xfd, 0x91, 0xde, - 0x7d, 0xfa, 0x92, 0x96, 0xa6, 0x55, 0x7a, 0x55, 0x36, 0xcf, 0x7d, 0x33, - 0xf1, 0xa5, 0xc6, 0x6a, 0xda, 0x15, 0xfe, 0x9e, 0x20, 0x41, 0x99, 0xb7, - 0xc5, 0xf4, 0xee, 0x13, 0xe6, 0xd2, 0x75, 0xd8, 0xf9, 0x16, 0x25, 0xf2, - 0xab, 0xc2, 0x69, 0x08, 0x53, 0x99, 0x5f, 0x0f, 0x22, 0x25, 0x50, 0x4b, - 0x6d, 0xd2, 0x78, 0xd5, 0xca, 0xcc, 0x04, 0xc0, 0xcf, 0xab, 0x37, 0xc8, - 0x1d, 0x30, 0x1f, 0x22, 0xec, 0x08, 0xbe, 0xb6, 0x5f, 0x1a, 0xa4, 0xa7, - 0x48, 0x09, 0xc9, 0x41, 0x32, 0x88, 0x31, 0xbb, 0xe9, 0xd1, 0xac, 0xac, - 0xeb, 0x35, 0xdb, 0xf8, 0xcb, 0xc6, 0xff, 0x03, 0x0f, 0xce, 0x28, 0x91, - 0xd8, 0x1d, 0x8a, 0x58, 0xd1, 0x77, 0x4c, 0xc7, 0x3f, 0x8c, 0xbc, 0xbe, - 0x46, 0xd7, 0xc0, 0x26, 0x95, 0x2d, 0xdc, 0xce, 0xcd, 0x7c, 0x9a, 0xa1, - 0x1e, 0x84, 0xb8, 0x02, 0xed, 0xab, 0x34, 0x21, 0xc4, 0x8b, 0xb9, 0x47, - 0x79, 0x18, 0x53, 0x1c, 0xb5, 0x12, 0x24, 0xfc, 0x39, 0x94, 0x43, 0xfb, - 0xa8, 0x9d, 0x11, 0x24, 0x6e, 0xa9, 0x27, 0x8c, 0x2a, 0x36, 0x32, 0x79, - 0x19, 0xb4, 0xa5, 0x96, 0x10, 0x93, 0x81, 0x09, 0x31, 0x0c, 0x81, 0x3a, - 0x9d, 0xc1, 0x7f, 0xf9, 0x6e, 0xf4, 0x39, 0x30, 0x79, 0x5a, 0xc7, 0x36, - 0xe3, 0x2b, 0xa0, 0x94, 0x23, 0x63, 0xc0, 0x09, 0x30, 0x01, 0x60, 0xb0, - 0x49, 0x25, 0x3c, 0xdd, 0x5c, 0x73, 0x69, 0x8e, 0xbf, 0xd8, 0x71, 0xa3, - 0xbe, 0xe3, 0x42, 0x07, 0xf0, 0xca, 0x85, 0x2e, 0x93, 0xff, 0x86, 0x5f, - 0xd6, 0xeb, 0xa3, 0xf7, 0x60, 0x9e, 0xa9, 0x1b, 0x92, 0x33, 0xe3, 0x51, - 0x82, 0x6d, 0x36, 0x21, 0x61, 0xc8, 0xac, 0x27, 0xd8, 0xb3, 0x8b, 0xdf, - 0x24, 0xce, 0x05, 0xe5, 0x59, 0xdc, 0xd8, 0xb8, 0x55, 0x48, 0x9d, 0x1b, - 0x88, 0xcb, 0x19, 0x6c, 0xdc, 0x88, 0x69, 0x18, 0x49, 0xa8, 0xbb, 0x0a, - 0xb8, 0x02, 0x3e, 0xc4, 0xa5, 0x0e, 0xa8, 0x9e, 0x3f, 0x8f, 0xa4, 0xeb, - 0x4b, 0xb3, 0x32, 0x1e, 0x13, 0x33, 0xca, 0xc4, 0xa5, 0xf2, 0xdb, 0x10, - 0x5b, 0xd8, 0x58, 0x37, 0x3c, 0x60, 0x07, 0x45, 0x76, 0x0c, 0x56, 0xab, - 0x0e, 0xa4, 0x2e, 0xff, 0x89, 0x5b, 0x24, 0x31, 0x39, 0x19, 0xba, 0x3c, - 0x59, 0x43, 0x68, 0x90, 0xf8, 0xca, 0x9f, 0xf2, 0xe9, 0xb2, 0xf8, 0x8e, - 0xef, 0x74, 0x06, 0x42, 0x1b, 0x20, 0x0d, 0xa3, 0x75, 0xdc, 0x5a, 0xc1, - 0x01, 0x4a, 0x10, 0x9f, 0xaf, 0x2d, 0x0d, 0xce, 0xab, 0xea, 0x81, 0x1c, - 0x23, 0xfe, 0x34, 0x0d, 0xf8, 0xdb, 0x5e, 0x33, 0xd2, 0x89, 0xba, 0x08, - 0xa5, 0xb0, 0xbb, 0xc6, 0xbc, 0x60, 0x52, 0x94, 0xff, 0x6a, 0x86, 0xed, - 0x87, 0xb4, 0x04, 0x8a, 0x68, 0x38, 0xc2, 0x61, 0x64, 0x32, 0x8e, 0xf4, - 0x48, 0xe7, 0x44, 0xb4, 0xa3, 0xf1, 0x90, 0xde, 0xd6, 0x42, 0xc2, 0xb7, - 0x61, 0x88, 0xb0, 0x0f, 0x9d, 0xbf, 0x00, 0xf1, 0xf0, 0x04, 0x24, 0xc8, - 0x7b, 0x00, 0xe7, 0xee, 0x39, 0x12, 0xb4, 0x54, 0xbe, 0x32, 0xd9, 0x00, - 0xd0, 0x8a, 0xf3, 0xe5, 0xe4, 0x23, 0xcc, 0x12, 0x47, 0x1f, 0x44, 0x02, - 0x76, 0x6a, 0xdd, 0x2c, 0x50, 0x9c, 0x91, 0x0c, 0x5d, 0xc8, 0x56, 0x40, - 0x30, 0x34, 0x0c, 0x98, 0x3c, 0x7e, 0x83, 0x73, 0x8a, 0x34, 0xef, 0x67, - 0xd1, 0x68, 0x04, 0xca, 0xe5, 0x13, 0xfe, 0x8e, 0x07, 0x81, 0xa4, 0xb8, - 0xbe, 0x7c, 0xa0, 0xb8, 0x7f, 0x31, 0x4e, 0xf5, 0xe1, 0x35, 0xe9, 0xfb, - 0xf9, 0xee, 0xd3, 0xe4, 0x3c, 0x6a, 0xb6, 0xf5, 0x2b, 0x30, 0x91, 0xff, - 0x45, 0x34, 0xc8, 0xa0, 0x3b, 0x96, 0xcc, 0x19, 0xbf, 0x6f, 0x65, 0x43, - 0xf6, 0x5f, 0x98, 0x06, 0x29, 0xc9, 0xf0, 0xec, 0xfc, 0x21, 0xaa, 0x6d, - 0xdc, 0x69, 0xd5, 0xf1, 0x48, 0x3e, 0xda, 0xcd, 0xce, 0xb5, 0xb1, 0xda, - 0x63, 0xa8, 0xdb, 0x01, 0x77, 0xaf, 0x47, 0x13, 0xcf, 0xe3, 0x37, 0x0d, - 0x0a, 0x1d, 0xc3, 0xf2, 0xd8, 0x52, 0xe1, 0xb2, 0x57, 0x42, 0x9c, 0x01, - 0x9e, 0x26, 0x57, 0x54, 0xa1, 0x47, 0xfb, 0xe3, 0xc9, 0xd3, 0x77, 0xae, - 0x4e, 0x5f, 0x69, 0xd1, 0x64, 0x07, 0xad, 0x9e, 0xa1, 0xab, 0xdf, 0xd9, - 0x50, 0x84, 0x43, 0xd5, 0xf6, 0x8c, 0x8e, 0xd9, 0xb5, 0xcb, 0xfc, 0x45, - 0xd8, 0x22, 0xd6, 0x7f, 0xc7, 0x4e, 0x88, 0xd1, 0x7b, 0xe0, 0xd9, 0xc1, - 0x80, 0x11, 0x6e, 0x2e, 0x3b, 0xef, 0x2d, 0x8b, 0x89, 0xf2, 0x40, 0x4c, - 0x45, 0xc3, 0x2c, 0xbe, 0xad, 0x6f, 0x63, 0x27, 0x81, 0xd3, 0x9e, 0x8f, - 0x38, 0x4c, 0x98, 0x4b, 0xec, 0xb7, 0x2a, 0xdd, 0x27, 0xc0, 0xee, 0x80, - 0xd8, 0xb9, 0xfd, 0xed, 0x6e, 0xcf, 0x0b, 0x84, 0xdf, 0xfd, 0xda, 0x27, - 0xfd, 0x09, 0x01, 0x8f, 0x07, 0x4b, 0x98, 0x93, 0x86, 0x95, 0x4b, 0xe1, - 0x05, 0x0b, 0x0c, 0x74, 0xf7, 0x3d, 0x17, 0xdb, 0xbd, 0x92, 0xad, 0x06, - 0x07, 0x06, 0xdb, 0xdc, 0xa7, 0xe7, 0x88, 0xe5, 0x38, 0xaa, 0x94, 0xaf, - 0xc9, 0xc9, 0x3e, 0x41, 0xeb, 0x91, 0x7f, 0x48, 0xc5, 0xf9, 0xf9, 0x07, - 0x3c, 0xc3, 0xba, 0x81, 0xee, 0x61, 0x61, 0xd2, 0x89, 0x81, 0xa5, 0xb0, - 0x45, 0x2c, 0x60, 0xc1, 0x26, 0xb4, 0xc7, 0x0b, 0xcd, 0xae, 0x04, 0x23, - 0x8b, 0x76, 0xea, 0x7b, 0xd7, 0x85, 0x19, 0xbe, 0xc9, 0x33, 0xea, 0x63, - 0xe9, 0x6e, 0xf2, 0x53, 0xdf, 0x8e, 0xbd, 0xf5, 0xf5, 0x23, 0x18, 0x75, - 0x8f, 0x8a, 0xe6, 0x82, 0xe0, 0x3d, 0x16, 0xb0, 0x71, 0xcd, 0x95, 0x5e, - 0x8e, 0x6b, 0x75, 0xa6, 0x06, 0x0e, 0x8b, 0x58, 0x51, 0x22, 0x8e, 0xca, - 0x1b, 0x09, 0x3e, 0x73, 0xf9, 0x01, 0x21, 0x3b, 0x72, 0x9b, 0xa3, 0x4c, - 0xdc, 0x75, 0xee, 0xab, 0x78, 0x18, 0x95, 0x33, 0x94, 0xb5, 0x9b, 0x99, - 0xa1, 0x8a, 0x3e, 0xe5, 0x88, 0x28, 0x87, 0x2d, 0x42, 0x45, 0xcc, 0xc4, - 0x26, 0xf6, 0xd4, 0x92, 0xc2, 0x76, 0x34, 0x0a, 0x9b, 0x5b, 0xa8, 0x8f, - 0xbe, 0x74, 0x26, 0xf9, 0xf7, 0xd6, 0x8c, 0x2a, 0x55, 0x34, 0x36, 0xbf, - 0x7a, 0x73, 0x79, 0x2f, 0xb6, 0x71, 0x83, 0x09, 0x3a, 0x78, 0x32, 0x74, - 0x47, 0x5e, 0xa7, 0x1d, 0x3d, 0xf4, 0x8b, 0xe3, 0x50, 0xc0, 0xbb, 0x48, - 0x7f, 0xec, 0x8c, 0xca, 0x27, 0x2f, 0x28, 0x75, 0x36, 0x4d, 0x1d, 0x5c, - 0x92, 0x50, 0x6e, 0xf3, 0xe9, 0xab, 0x32, 0xa7, 0xf3, 0x04, 0xb1, 0x5d, - 0x7c, 0x08, 0x27, 0x0d, 0xac, 0xa3, 0x35, 0xc9, 0x32, 0xb5, 0x68, 0x10, - 0xcf, 0x6d, 0xba, 0xcf, 0x83, 0xde, 0xf9, 0xa3, 0x11, 0xf4, 0xe0, 0xfe, - 0x62, 0x20, 0x04, 0x80, 0x93, 0x74, 0x0d, 0x1c, 0x02, 0xcc, 0x5b, 0xcc, - 0x06, 0x2a, 0x8a, 0xdc, 0x5a, 0x68, 0x10, 0xd9, 0xce, 0xfd, 0xb7, 0x29, - 0xda, 0x18, 0x0a, 0x37, 0xbe, 0x43, 0x5c, 0xf9, 0x19, 0x53, 0xf9, 0xc9, - 0x1e, 0x18, 0xbe, 0x61, 0x60, 0x3b, 0x46, 0xa5, 0xfa, 0x79, 0x63, 0x9c, - 0x93, 0x6b, 0x8e, 0xcf, 0xb5, 0x5f, 0x97, 0x11, 0xad, 0xdc, 0x37, 0xe5, - 0x5a, 0x7e, 0x2b, 0x3a, 0x00, 0x33, 0x8c, 0xa5, 0xc5, 0x70, 0x2f, 0x22, - 0xec, 0x48, 0x18, 0x0b, 0x54, 0xe2, 0x99, 0x0d, 0x60, 0x28, 0x10, 0xbc, - 0x16, 0xa3, 0x3a, 0x80, 0x67, 0x47, 0x6c, 0x36, 0xd9, 0x6e, 0x5f, 0x44, - 0x24, 0x1c, 0x65, 0x47, 0xf1, 0x98, 0x97, 0x3a, 0x2a, 0x19, 0x75, 0x7b, - 0x12, 0x2d, 0x53, 0x0c, 0x44, 0x4d, 0x5b, 0x41, 0x46, 0x3f, 0xc3, 0x2d, - 0x91, 0x5a, 0x71, 0x8e, 0x6e, 0x84, 0x07, 0xc7, 0x62, 0xb7, 0xcb, 0x39, - 0x11, 0x99, 0xef, 0x43, 0xe7, 0x61, 0x3d, 0xe9, 0x91, 0x38, 0x40, 0xb8, - 0x8c, 0x80, 0x08, 0x81, 0x30, 0xb9, 0x5b, 0x52, 0x9f, 0x18, 0x0d, 0xf3, - 0xb8, 0x27, 0xa3, 0xf5, 0xba, 0xfc, 0x41, 0xa5, 0x10, 0xfe, 0x3a, 0xe6, - 0x53, 0x3b, 0x2f, 0x90, 0x64, 0x0d, 0x15, 0x9b, 0xe4, 0x10, 0x29, 0x84, - 0xff, 0xac, 0x83, 0xac, 0x13, 0x5e, 0x90, 0x87, 0x68, 0x17, 0x6f, 0xde, - 0x3a, 0x27, 0x25, 0x33, 0xb2, 0x3b, 0xca, 0xb6, 0xb3, 0x5d, 0x6d, 0x0b, - 0xf3, 0x6f, 0xe8, 0x10, 0xb3, 0x42, 0xb3, 0xf0, 0xd7, 0xf0, 0x0d, 0xb6, - 0xae, 0x13, 0x40, 0xef, 0x0d, 0x12, 0x99, 0xeb, 0xdb, 0x73, 0x87, 0xf8, - 0x19, 0xa3, 0xbd, 0xea, 0x5c, 0xa2, 0xec, 0x6a, 0xae, 0x3e, 0xc7, 0x43, - 0x73, 0xd6, 0xe9, 0x51, 0xa2, 0x8d, 0x36, 0x49, 0x43, 0x5d, 0x12, 0x6d, - 0xeb, 0x99, 0x79, 0x7f, 0x15, 0x74, 0x69, 0xaf, 0xa1, 0x97, 0x5a, 0x91, - 0xfd, 0xc6, 0x0f, 0xa5, 0x43, 0x90, 0x38, 0x54, 0xb7, 0xd7, 0x57, 0x4b, - 0x7c, 0xdd, 0xa2, 0x45, 0x8e, 0xbb, 0x56, 0xae, 0x1c, 0x03, 0xf4, 0xcf, - 0xca, 0xee, 0xc6, 0x10, 0x3e, 0xb8, 0x24, 0x3c, 0xbd, 0x4e, 0xd6, 0xac, - 0x9e, 0x98, 0x9b, 0x2f, 0x5d, 0x49, 0x6b, 0xb4, 0xfa, 0xe3, 0x10, 0x7f, - 0x33, 0xea, 0xf7, 0x37, 0x07, 0xae, 0xf3, 0xac, 0x04, 0x5a, 0x6a, 0xb2, - 0x02, 0x9f, 0x3d, 0x01, 0x08, 0x9b, 0xb6, 0x37, 0xe6, 0x11, 0xf5, 0x71, - 0xb0, 0xe2, 0x73, 0xba, 0x11, 0x22, 0x38, 0x58, 0xad, 0x03, 0x06, 0x8a, - 0x89, 0xf5, 0x53, 0xb6, 0xa0, 0x78, 0x91, 0x31, 0x2f, 0x29, 0xf8, 0x56, - 0x0b, 0xd0, 0xf4, 0x77, 0xbc, 0x3b, 0x9b, 0xdf, 0x87, 0x40, 0x60, 0x39, - 0xc1, 0xfb, 0x0c, 0xb0, 0xa1, 0x74, 0x36, 0xf5, 0xad, 0xf2, 0x66, 0x3f, - 0xe7, 0xae, 0x62, 0x01, 0xa6, 0x6c, 0xf3, 0x64, 0x95, 0x5e, 0x78, 0x5e, - 0x44, 0xba, 0x55, 0x12, 0xdc, 0xed, 0x25, 0xc6, 0x82, 0x04, 0xbc, 0x01, - 0x95, 0x98, 0x74, 0x69, 0x80, 0x57, 0x6a, 0xa6, 0xdc, 0xa5, 0x74, 0x46, - 0xd6, 0xea, 0x86, 0x29, 0x34, 0xcf, 0x48, 0xdf, 0x0c, 0xd9, 0xd8, 0x71, - 0xbd, 0x97, 0x8d, 0x8f, 0xfc, 0xef, 0xba, 0x7d, 0x70, 0x53, 0xf0, 0xc6, - 0xf7, 0xfb, 0x2d, 0x46, 0x99, 0x0d, 0x0c, 0x9d, 0xf2, 0x8b, 0xbf, 0xe5, - 0x12, 0x7f, 0x4d, 0x87, 0xc5, 0x1a, 0x1c, 0xbf, 0x32, 0x18, 0x8d, 0xb4, - 0x29, 0x94, 0xcb, 0x44, 0xf8, 0x1a, 0xa2, 0xf8, 0x58, 0x3a, 0xe6, 0x77, - 0xe0, 0x25, 0xf4, 0xdd, 0x21, 0x8e, 0x1b, 0x81, 0xfa, 0xaf, 0xf1, 0x49, - 0x32, 0x70, 0x24, 0x1c, 0xae, 0xde, 0x74, 0x14, 0xba, 0xbc, 0x4f, 0x71, - 0xb7, 0x76, 0x7f, 0x52, 0xf1, 0x6e, 0xb3, 0xab, 0x3a, 0x68, 0xf8, 0x85, - 0x89, 0xd8, 0x87, 0xb9, 0x30, 0x5a, 0xa8, 0xf5, 0x9f, 0xdf, 0x99, 0x54, - 0xec, 0x9d, 0x88, 0xfd, 0x4b, 0xbb, 0x84, 0x31, 0xe2, 0x42, 0xb1, 0xef, - 0x05, 0x58, 0x2f, 0xd7, 0x5b, 0xe6, 0xd9, 0xf9, 0x42, 0x34, 0x02, 0xde, - 0xdb, 0x63, 0xae, 0x6b, 0x52, 0xe4, 0x03, 0xc2, 0x0a, 0x9b, 0x99, 0xcc, - 0xe2, 0xac, 0xa4, 0x8b, 0xe2, 0x8e, 0x6d, 0xfe, 0x30, 0xa4, 0x6b, 0x08, - 0x11, 0xf6, 0xe1, 0x8b, 0xc7, 0xf7, 0xa3, 0x58, 0xcf, 0x86, 0x76, 0xcd, - 0xea, 0x34, 0x10, 0x31, 0xb7, 0x67, 0x03, 0x38, 0x46, 0x2e, 0x5f, 0xae, - 0x16, 0x15, 0x7e, 0xdc, 0xa4, 0xc0, 0x32, 0x3d, 0x8b, 0xde, 0xfb, 0x6a, - 0x99, 0x48, 0x76, 0xc6, 0x32, 0x3f, 0x17, 0x23, 0xde, 0xeb, 0x23, 0x76, - 0x28, 0xaa, 0xf2, 0x1c, 0x63, 0x97, 0x18, 0xb8, 0x40, 0x06, 0x5e, 0x0f, - 0x25, 0x28, 0xcc, 0xde, 0xf9, 0x8d, 0x08, 0xda, 0x55, 0x1d, 0xd2, 0x78, - 0xd0, 0x98, 0x08, 0x4b, 0x5c, 0x9c, 0x56, 0xa7, 0x9c, 0xa8, 0xd3, 0x8a, - 0x7b, 0x00, 0x02, 0x7d, 0xa8, 0x2e, 0x73, 0x80, 0x8b, 0xea, 0x2d, 0xd9, - 0x5a, 0xd4, 0x97, 0x82, 0xfa, 0x20, 0xad, 0xe7, 0x89, 0xe2, 0x08, 0x76, - 0xdd, 0x2d, 0x73, 0xab, 0xe8, 0xa5, 0xe3, 0x9e, 0xb2, 0x55, 0x85, 0x50, - 0xf5, 0x78, 0xed, 0x37, 0xeb, 0xde, 0x01, 0xeb, 0x8c, 0x4f, 0x55, 0x3e, - 0x1c, 0xf7, 0x93, 0xad, 0xc1, 0xf5, 0xcb, 0x8b, 0x78, 0x32, 0xd8, 0xfa, - 0xa1, 0x04, 0x42, 0xa5, 0x0d, 0x82, 0x30, 0x75, 0x85, 0xc3, 0xb3, 0x29, - 0x81, 0xba, 0x5d, 0x9e, 0x48, 0xea, 0xcb, 0xce, 0x83, 0x81, 0xd1, 0x32, - 0xd4, 0x97, 0x50, 0x4c, 0xc3, 0xc0, 0x03, 0x2e, 0xda, 0x73, 0x1e, 0xf7, - 0xe4, 0xa3, 0xea, 0xeb, 0x6d, 0xeb, 0xe1, 0xf9, 0x09, 0xe5, 0xee, 0x4a, - 0x1a, 0x9a, 0x07, 0xa0, 0x79, 0x23, 0x9f, 0x0b, 0x87, 0x23, 0x80, 0x9a, - 0x0e, 0x8f, 0xc7, 0x97, 0xb9, 0xdc, 0xf3, 0x64, 0x27, 0x0d, 0xda, 0x08, - 0xe1, 0x4a, 0xba, 0xae, 0x0f, 0xc8, 0x2f, 0xb0, 0x4c, 0x64, 0x96, 0x1d, - 0xa1, 0xd6, 0xe0, 0x27, 0xfb, 0x3b, 0x64, 0x12, 0xc0, 0xeb, 0x1f, 0x50, - 0xe0, 0x53, 0x5b, 0xe0, 0x4b, 0x17, 0x4b, 0x39, 0x9a, 0x3a, 0x7a, 0xe7, - 0x7d, 0xdf, 0xad, 0x30, 0x69, 0x21, 0x66, 0x19, 0x59, 0xcb, 0x0e, 0x41, - 0x88, 0xda, 0xed, 0x9d, 0x4b, 0xf5, 0xe8, 0xff, 0x58, 0x73, 0xd3, 0x4f, - 0x9a, 0x90, 0xe4, 0x59, 0xad, 0x82, 0xee, 0x15, 0xcc, 0x7f, 0x33, 0xcc, - 0xa2, 0xe2, 0x2a, 0xcd, 0x5c, 0xdd, 0xd0, 0x9d, 0x74, 0x1d, 0xb9, 0x9a, - 0x26, 0xf5, 0x9d, 0xd7, 0x09, 0xd3, 0x2b, 0x4c, 0x00, 0xa6, 0xbc, 0xca, - 0x25, 0xa0, 0x44, 0xc2, 0xb8, 0x9b, 0xba, 0x67, 0xc0, 0x78, 0x43, 0xf7, - 0x2b, 0x19, 0x53, 0xd6, 0x14, 0x94, 0x8a, 0xd5, 0xe0, 0x35, 0xe8, 0x91, - 0x68, 0x47, 0x29, 0x65, 0x9c, 0xea, 0xc8, 0x93, 0x3a, 0x03, 0xd8, 0xcd, - 0x59, 0x62, 0x87, 0x19, 0xe9, 0xc2, 0xb3, 0x87, 0x58, 0x5d, 0xa4, 0x79, - 0x9c, 0x53, 0x7e, 0x4d, 0x05, 0xb6, 0x67, 0x18, 0x4e, 0xdf, 0x56, 0x02, - 0xd8, 0xd5, 0x61, 0xb5, 0xb1, 0x29, 0xd8, 0x0f, 0xb9, 0x99, 0x48, 0x5b, - 0x65, 0x25, 0xc0, 0x55, 0xf2, 0xf5, 0x96, 0xe1, 0xd7, 0xf1, 0x81, 0x63, - 0x98, 0xc4, 0xd7, 0x5c, 0x21, 0xef, 0x82, 0x16, 0xc8, 0xe8, 0x47, 0x33, - 0xb9, 0xef, 0xa4, 0x3a, 0x42, 0x80, 0xc5, 0x9b, 0x60, 0xe7, 0x20, 0x00, - 0xa8, 0x85, 0x80, 0x06, 0x5e, 0x3b, 0x73, 0xf2, 0x3e, 0x28, 0x75, 0x82, - 0xce, 0x1c, 0x03, 0xb2, 0xa0, 0x67, 0xe1, 0x9e, 0x65, 0x98, 0x4e, 0x35, - 0xc7, 0xa4, 0xb5, 0xae, 0x62, 0x1c, 0xe7, 0x12, 0x0c, 0x01, 0xc7, 0x03, - 0x4e, 0xa6, 0x6c, 0x66, 0xd3, 0x2c, 0xa9, 0x12, 0x3a, 0x64, 0xde, 0x11, - 0x21, 0x7e, 0xa1, 0x94, 0x35, 0xc7, 0xbf, 0x8c, 0xcb, 0x62, 0x69, 0xe7, - 0xde, 0x9c, 0x89, 0x44, 0x4f, 0x5b, 0x7b, 0x39, 0x8c, 0xf4, 0x27, 0x60, - 0x79, 0x92, 0x96, 0xad, 0x10, 0xd5, 0x7e, 0x01, 0x8d, 0xd2, 0x03, 0x38, - 0xc0, 0x74, 0x6e, 0x2a, 0x0b, 0xf8, 0xc3, 0x8d, 0xad, 0xc1, 0x5e, 0x7b, - 0xe6, 0x26, 0xb7, 0x23, 0x70, 0x2f, 0x33, 0xcd, 0x35, 0x4a, 0xec, 0x60, - 0x6c, 0x6c, 0x63, 0x18, 0x9e, 0xf9, 0xc6, 0x47, 0x14, 0x86, 0x6c, 0x94, - 0xe7, 0x01, 0x52, 0x83, 0x7f, 0x48, 0x00, 0x6a, 0x4c, 0x05, 0x2d, 0x88, - 0x1c, 0x9f, 0x8a, 0xb6, 0x21, 0x2d, 0x7b, 0xe8, 0xe9, 0x28, 0x3b, 0xb1, - 0x38, 0x61, 0x9f, 0x78, 0xae, 0x8d, 0x53, 0xc2, 0x0f, 0x87, 0x8e, 0xbf, - 0x65, 0xec, 0x28, 0x2a, 0x84, 0x00, 0xf8, 0x5b, 0xbe, 0x76, 0x1c, 0xc7, - 0x34, 0xbf, 0x0b, 0x2c, 0xf8, 0xcf, 0x8c, 0x2a, 0x62, 0xc9, 0xad, 0xe2, - 0x58, 0x70, 0x7f, 0x5c, 0xfc, 0x6f, 0x93, 0xef, 0xb2, 0xc3, 0x57, 0xd3, - 0x77, 0xee, 0xde, 0xde, 0xe8, 0xb6, 0xb5, 0x70, 0x1f, 0xff, 0x13, 0x8c, - 0xa8, 0x2c, 0x36, 0xd1, 0x3f, 0x08, 0xb7, 0xff, 0xa7, 0x8e, 0xd4, 0x1b, - 0xd8, 0x20, 0x7a, 0x8c, 0x67, 0x9c, 0xd8, 0x1e, 0xe9, 0xb2, 0x54, 0x35, - 0x9c, 0xec, 0x1c, 0x64, 0xe0, 0xe4, 0xa7, 0x0d, 0xed, 0x61, 0x4c, 0x1d, - 0x1d, 0x3b, 0x0a, 0x03, 0x92, 0x44, 0xc7, 0xb0, 0x7d, 0xa9, 0x32, 0x1e, - 0xcf, 0x3a, 0x0b, 0x90, 0x74, 0x3b, 0x88, 0x6f, 0x72, 0xc6, 0xdc, 0xde, - 0xf8, 0x8f, 0x1d, 0xaf, 0x64, 0x28, 0x8a, 0x9e, 0x89, 0x9b, 0xdc, 0x13, - 0x01, 0x2f, 0x8f, 0xb7, 0x93, 0xdf, 0xe0, 0xf0, 0xb5, 0x7b, 0x0f, 0x84, - 0x87, 0xf6, 0xc7, 0xd9, 0xa9, 0xce, 0x43, 0x20, 0xe3, 0x23, 0xd3, 0x09, - 0xaa, 0x75, 0x5c, 0xcc, 0x89, 0x92, 0x47, 0xe8, 0x78, 0x71, 0x08, 0x20, - 0x69, 0x9f, 0xe3, 0x61, 0x72, 0xb7, 0x85, 0x0a, 0xee, 0x01, 0x77, 0x07, - 0x78, 0x7b, 0xfa, 0xdb, 0xe2, 0x84, 0xf0, 0xf1, 0x2a, 0x93, 0x2a, 0x6f, - 0x8e, 0x6d, 0x5c, 0xa1, 0x34, 0x1f, 0x65, 0x08, 0x6f, 0xf2, 0xed, 0xb0, - 0x1e, 0x1b, 0x0e, 0x12, 0x0c, 0x25, 0x3a, 0x18, 0x52, 0xa2, 0x0c, 0x35, - 0x73, 0xdc, 0x7f, 0x90, 0x17, 0x77, 0x5a, 0x3e, 0xe9, 0xf7, 0x28, 0x6e, - 0xd1, 0xe5, 0xde, 0x85, 0x2b, 0xab, 0x3b, 0xb3, 0x67, 0x15, 0xdc, 0xc3, - 0x25, 0x21, 0xe9, 0xb7, 0x93, 0x34, 0x9d, 0x57, 0x8a, 0x6d, 0xa4, 0x4e, - 0x17, 0xf1, 0x0a, 0x90, 0xf6, 0x22, 0xaa, 0x6a, 0x69, 0x4c, 0x64, 0x88, - 0xbb, 0x11, 0xb3, 0x83, 0xc4, 0xfb, 0x31, 0x61, 0x20, 0x1a, 0x00, 0x00, - 0x9c, 0x2d, 0xcf, 0x74, 0xca, 0x93, 0xc3, 0xea, 0x8f, 0x58, 0xcc, 0xf2, - 0x46, 0x54, 0x36, 0x1b, 0x9c, 0x0c, 0x27, 0x98, 0x19, 0xb7, 0x24, 0xe9, - 0xfb, 0xb6, 0xd8, 0xe4, 0xfc, 0x2c, 0x9b, 0xd0, 0x25, 0x3f, 0xb0, 0xa5, - 0x5b, 0x22, 0x31, 0xa2, 0x86, 0xd5, 0x8a, 0xb6, 0x7b, 0xe5, 0x08, 0xcc, - 0x10, 0xf7, 0x76, 0xd9, 0x5a, 0x50, 0xc0, 0x17, 0xcc, 0x02, 0xb1, 0x2b, - 0x39, 0x84, 0x24, 0x16, 0x5a, 0x17, 0x9f, 0x79, 0x5d, 0x1b, 0x15, 0xd9, - 0x95, 0x59, 0xbe, 0x7c, 0x93, 0x5e, 0x2a, 0xf1, 0x60, 0x07, 0xe1, 0xdf, - 0xcb, 0x19, 0xa5, 0xf9, 0x32, 0x9e, 0x55, 0x01, 0x65, 0x69, 0x63, 0x77, - 0x50, 0xbb, 0x14, 0x2b, 0x0f, 0xc4, 0x54, 0x38, 0x15, 0xac, 0x0d, 0x9f, - 0xc9, 0xfb, 0x8d, 0x0f, 0xa2, 0xec, 0xe6, 0x0d, 0x50, 0xf9, 0x68, 0xcb, - 0xae, 0xb3, 0xb9, 0xad, 0x95, 0xb1, 0x4a, 0x81, 0x63, 0xcd, 0xb1, 0xd5, - 0xa1, 0xda, 0x81, 0x2a, 0xde, 0x08, 0x10, 0x33, 0x66, 0x5f, 0xee, 0x5d, - 0xfe, 0x75, 0x27, 0x42, 0x55, 0xcb, 0xb8, 0xb0, 0xca, 0xb0, 0x34, 0x10, - 0x00, 0x00, 0x59, 0x2b, 0x97, 0x99, 0xd5, 0x46, 0xca, 0x45, 0x48, 0x39, - 0x52, 0x2e, 0xb0, 0xab, 0xbe, 0x89, 0x25, 0x9b, 0x32, 0x5e, 0x8b, 0x4d, - 0x09, 0xd4, 0xb4, 0x04, 0xe1, 0x79, 0xd3, 0x48, 0xef, 0x2b, 0x65, 0x8e, - 0xeb, 0x59, 0x57, 0x62, 0x93, 0xd3, 0xbb, 0x22, 0x82, 0x0c, 0x66, 0x79, - 0xf2, 0x14, 0x54, 0xc6, 0x7a, 0xbd, 0xbe, 0xab, 0x09, 0x02, 0xd9, 0x88, - 0xa8, 0x13, 0xc6, 0x8f, 0x30, 0xbf, 0x05, 0xf7, 0xd3, 0x39, 0xcc, 0x18, - 0xf6, 0x9c, 0x01, 0xc5, 0x06, 0x70, 0x92, 0x5b, 0x60, 0x1c, 0x09, 0x92, - 0xfc, 0xb6, 0xe5, 0x94, 0x04, 0x71, 0xe6, 0x5b, 0xfc, 0x72, 0x80, 0x31, - 0x6a, 0x8c, 0x9b, 0x20, 0x9d, 0x50, 0x04, 0xa1, 0xcb, 0xc3, 0xd3, 0x6c, - 0x1d, 0x30, 0x1f, 0xa9, 0xba, 0xe4, 0x8d, 0x24, 0xa9, 0xcb, 0x50, 0x01, - 0xb7, 0xac, 0xf3, 0x5a, 0x90, 0x5f, 0xae, 0x2a, 0xfe, 0x42, 0xea, 0x8a, - 0x86, 0x74, 0x36, 0x39, 0xf2, 0x9e, 0xca, 0x33, 0x26, 0x87, 0x05, 0xac, - 0xb6, 0x7d, 0xe8, 0xfa, 0xe5, 0x0d, 0xc2, 0x67, 0x2e, 0xaf, 0xf9, 0xa1, - 0x48, 0xe8, 0xbe, 0x82, 0xd1, 0x13, 0xf9, 0x00, 0x82, 0x32, 0x66, 0xe0, - 0xb9, 0x54, 0x8a, 0x3d, 0xd6, 0xbb, 0xe8, 0xbb, 0x44, 0xf7, 0x99, 0x5a, - 0x22, 0xca, 0x40, 0x71, 0xd8, 0xdb, 0xd6, 0xf3, 0xeb, 0x07, 0x70, 0x8b, - 0x72, 0xb1, 0x58, 0x17, 0xbb, 0xbf, 0x35, 0x37, 0x0f, 0x33, 0xcb, 0xb1, - 0x70, 0xa5, 0x79, 0x5c, 0x6e, 0xda, 0x1e, 0x29, 0x30, 0x7a, 0x00, 0x50, - 0x8e, 0xd8, 0xcb, 0xd6, 0x99, 0xa5, 0x4a, 0x25, 0x4f, 0x69, 0xd5, 0xf2, - 0xd7, 0x8c, 0x74, 0xa3, 0x79, 0x5a, 0x70, 0xbf, 0x5c, 0x4b, 0xa1, 0xad, - 0xb3, 0x0a, 0x59, 0xaa, 0x12, 0x39, 0x30, 0xb2, 0x1e, 0xd9, 0xde, 0x71, - 0x51, 0x3e, 0xde, 0x9f, 0xef, 0x22, 0x38, 0x13, 0xf3, 0x06, 0xcd, 0x69, - 0xeb, 0x0c, 0xdc, 0x35, 0x2f, 0x4b, 0x46, 0x13, 0xb4, 0xb7, 0x5e, 0xe4, - 0x5b, 0x8f, 0x07, 0x19, 0x50, 0x39, 0xff, 0x4c, 0x85, 0x67, 0xda, 0x37, - 0x08, 0x5c, 0x1e, 0x46, 0xd3, 0x18, 0xd6, 0x8e, 0x21, 0x61, 0x24, 0x81, - 0x3c, 0x8a, 0x9b, 0xc8, 0x5b, 0x76, 0xd6, 0x57, 0x98, 0x5e, 0xa1, 0xa3, - 0xe5, 0xa7, 0x3d, 0x35, 0x1f, 0xf4, 0x11, 0xe0, 0x22, 0x14, 0x0d, 0x69, - 0xe6, 0x8d, 0xe8, 0x35, 0x31, 0x4a, 0xcf, 0xe9, 0xa7, 0xb2, 0xd7, 0xf5, - 0x64, 0x7d, 0xb2, 0x18, 0x51, 0x76, 0x9a, 0xed, 0x87, 0xff, 0x0f, 0x13, - 0x12, 0x1d, 0x29, 0x50, 0x3d, 0x61, 0xc8, 0x24, 0x17, 0x12, 0x8b, 0x75, - 0xa3, 0xb5, 0x54, 0x8c, 0xb6, 0xa2, 0xf0, 0x8c, 0x6e, 0x11, 0x24, 0x59, - 0xa4, 0xaf, 0xa4, 0x2a, 0xd4, 0xf2, 0xf9, 0xc5, 0x78, 0xef, 0x60, 0x1f, - 0x0e, 0x14, 0xc4, 0xe9, 0xd6, 0x07, 0xc4, 0xb0, 0x75, 0xe9, 0xbf, 0xbc, - 0xa1, 0x4c, 0xa0, 0x9b, 0xdc, 0x51, 0xce, 0xc5, 0x97, 0x09, 0x79, 0x01, - 0x27, 0xf8, 0x1d, 0x38, 0x21, 0xb1, 0x61, 0xa3, 0xf9, 0x08, 0xdd, 0xbc, - 0xa1, 0xaf, 0x7a, 0xa7, 0x6d, 0x5f, 0x3a, 0x75, 0xbc, 0x1c, 0xf7, 0x3d, - 0xe3, 0xc9, 0x4a, 0xdc, 0x62, 0x42, 0xf3, 0x5d, 0xe5, 0xd5, 0xa8, 0x42, - 0x1f, 0xb2, 0x43, 0x67, 0x9c, 0xd4, 0xf1, 0x9b, 0xfc, 0x89, 0xca, 0x4f, - 0xd8, 0xe5, 0x12, 0x07, 0xeb, 0x88, 0x2e, 0x03, 0x49, 0x44, 0x6b, 0x4c, - 0xac, 0x21, 0xa4, 0x69, 0x42, 0x62, 0x1b, 0xd5, 0xb2, 0xe9, 0xbd, 0x33, - 0x1e, 0x89, 0x8f, 0xbb, 0xdd, 0x38, 0x53, 0x4b, 0x01, 0x66, 0x1b, 0x46, - 0x1a, 0xdb, 0x82, 0x66, 0x53, 0x93, 0xe4, 0xac, 0x22, 0x06, 0x33, 0x85, - 0xa3, 0x63, 0xb2, 0xaf, 0xac, 0x4b, 0xee, 0x3f, 0xab, 0xbe, 0x86, 0x09, - 0x3f, 0x94, 0xcd, 0x46, 0x11, 0x9a, 0xd2, 0x2c, 0xf3, 0xcf, 0xc5, 0xdf, - 0x29, 0xcc, 0xe6, 0xcc, 0xc3, 0x6d, 0x58, 0xa4, 0xaa, 0xf7, 0xa3, 0x40, - 0x14, 0x69, 0x03, 0xa4, 0xf8, 0x79, 0x68, 0xe4, 0x0b, 0x72, 0xcb, 0xd5, - 0xa0, 0x59, 0x63, 0xe6, 0x82, 0xe8, 0x46, 0xe6, 0x6c, 0xe3, 0x40, 0x76, - 0x66, 0x0d, 0x17, 0xa3, 0x9e, 0x68, 0x7d, 0xc4, 0x15, 0x7a, 0x91, 0xff, - 0xcd, 0xc5, 0xd7, 0x7e, 0x68, 0xb4, 0x24, 0x70, 0xd5, 0x10, 0x40, 0xdd, - 0xfc, 0x46, 0x67, 0xca, 0x12, 0x9d, 0x0a, 0x70, 0x12, 0xf8, 0x76, 0x82, - 0xb6, 0xb1, 0x11, 0xbf, 0x9c, 0xcb, 0x9b, 0xbc, 0x48, 0x70, 0x73, 0x7b, - 0x62, 0x96, 0xb6, 0x5e, 0xfc, 0xfd, 0x86, 0xf8, 0xe4, 0x30, 0xe6, 0x17, - 0x24, 0x4e, 0x16, 0x25, 0x35, 0xdb, 0xa0, 0xe1, 0x94, 0x98, 0x21, 0xc1, - 0xbd, 0x81, 0x7c, 0x28, 0xf9, 0x30, 0x5c, 0x65, 0x3f, 0xa0, 0x9d, 0x15, - 0xd1, 0xf7, 0x24, 0x34, 0x9a, 0xb7, 0x87, 0xf7, 0xb6, 0x41, 0x89, 0xaf, - 0x01, 0xdf, 0x6a, 0x25, 0x57, 0x9f, 0x8b, 0xd1, 0x84, 0x38, 0x79, 0x4a, - 0x6b, 0xb8, 0x0d, 0xec, 0xfe, 0xaf, 0xa3, 0xd9, 0x8a, 0x71, 0x22, 0x16, - 0xd6, 0xa2, 0x51, 0x70, 0xc7, 0x35, 0x2a, 0xfb, 0x49, 0x15, 0xa5, 0x85, - 0x24, 0xfd, 0xa6, 0x5a, 0x0a, 0x09, 0x1b, 0x62, 0xfc, 0xa4, 0x4a, 0xd1, - 0x42, 0xe4, 0x7a, 0x3c, 0xe0, 0xb9, 0x92, 0xda, 0x2b, 0x8e, 0xa4, 0x7b, - 0xe8, 0x48, 0x0f, 0x1f, 0x69, 0x41, 0xfe, 0xbb, 0xb8, 0x2c, 0xa0, 0x47, - 0xe9, 0x8a, 0x98, 0x32, 0x39, 0xb2, 0xba, 0xab, 0x6e, 0x70, 0xce, 0x0a, - 0x7a, 0x56, 0xd4, 0x6e, 0xee, 0x98, 0xb1, 0xb5, 0x0c, 0xed, 0x3d, 0x49, - 0xbd, 0x18, 0x26, 0x8b, 0x5c, 0x84, 0xef, 0x19, 0xbe, 0x45, 0xbb, 0x61, - 0xef, 0xd0, 0xc8, 0x9f, 0x36, 0xcc, 0x9d, 0xeb, 0xd4, 0x9d, 0x17, 0x28, - 0x73, 0x63, 0x82, 0xe4, 0xc2, 0xec, 0x77, 0x62, 0xe2, 0x80, 0x34, 0xfe, - 0x92, 0x89, 0xc6, 0xa1, 0x6f, 0x21, 0xce, 0x87, 0x83, 0x41, 0x67, 0x2b, - 0xdc, 0x98, 0x48, 0x65, 0x13, 0x06, 0x45, 0xc4, 0x15, 0x27, 0x52, 0x88, - 0x74, 0x9c, 0x60, 0x23, 0x2d, 0x6c, 0x5a, 0x40, 0x7f, 0xa1, 0x0f, 0x40, - 0x86, 0xa3, 0x22, 0x81, 0x6d, 0xd7, 0xff, 0x9a, 0x8c, 0x52, 0xd7, 0x51, - 0x0d, 0xc5, 0x1a, 0x64, 0x58, 0x9f, 0x16, 0x31, 0xb6, 0x95, 0x48, 0x59, - 0xe7, 0xa4, 0xe4, 0x87, 0xd6, 0x11, 0xb9, 0xc4, 0xd2, 0x76, 0xb8, 0xcf, - 0xcc, 0x5e, 0x93, 0xb2, 0x4d, 0x05, 0x1d, 0xff, 0x08, 0x94, 0xbc, 0x35, - 0xc8, 0x16, 0x1c, 0xf9, 0x8c, 0x2d, 0x79, 0xfc, 0xe3, 0x63, 0x67, 0xbe, - 0x99, 0xad, 0xfb, 0xce, 0xea, 0x02, 0x9d, 0xb8, 0xaa, 0x90, 0xc9, 0x28, - 0xd2, 0x08, 0xce, 0xc9, 0x2d, 0x85, 0x07, 0x9b, 0x6b, 0x6f, 0x28, 0x9f, - 0x9d, 0xe1, 0xae, 0x6e, 0x0f, 0x63, 0xaa, 0xd0, 0x79, 0xe6, 0x0b, 0xe9, - 0xbe, 0xea, 0x99, 0x3a, 0x48, 0x28, 0xe3, 0xe3, 0x3a, 0x09, 0x19, 0x29, - 0xd7, 0x89, 0xbe, 0xe9, 0x3d, 0x16, 0x7a, 0x58, 0xf7, 0x06, 0xbe, 0xff, - 0x90, 0x30, 0xf5, 0x12, 0xb0, 0xcb, 0xc1, 0xbe, 0x83, 0xcc, 0x10, 0xff, - 0x07, 0x35, 0x0f, 0x5b, 0x3e, 0x56, 0xcd, 0x29, 0x9f, 0x0e, 0xad, 0xb0, - 0x11, 0x58, 0xda, 0xb7, 0xe4, 0x3e, 0x7b, 0x57, 0xb6, 0x8c, 0x40, 0x63, - 0x38, 0x4f, 0xa3, 0xa1, 0x27, 0x86, 0xfe, 0xe0, 0x19, 0x15, 0x58, 0xac, - 0xae, 0x69, 0x4f, 0x17, 0x0e, 0x90, 0x7b, 0x68, 0xde, 0x58, 0x96, 0xac, - 0x33, 0x4a, 0x0d, 0x8f, 0xb0, 0x0c, 0x72, 0x43, 0xd5, 0x21, 0x15, 0x74, - 0x78, 0x8b, 0x90, 0x44, 0x74, 0xf6, 0xb5, 0x9f, 0x3f, 0xab, 0xfa, 0xb3, - 0x38, 0x9b, 0xe3, 0x87, 0x2d, 0xff, 0x97, 0xd3, 0x24, 0xf9, 0x1d, 0x3e, - 0xac, 0xb4, 0x3d, 0x07, 0xec, 0x23, 0x8e, 0x33, 0x06, 0x62, 0xa4, 0xad, - 0x37, 0x31, 0x07, 0x2e, 0xd5, 0x3e, 0x24, 0xb5, 0x53, 0xc5, 0x79, 0x03, - 0xe4, 0x91, 0x0e, 0xda, 0xae, 0x45, 0xb7, 0x9c, 0xb2, 0x11, 0x7e, 0xef, - 0x83, 0x5a, 0xea, 0xbc, 0x48, 0xba, 0xb5, 0x61, 0x7d, 0x67, 0x86, 0x75, - 0xbe, 0x78, 0x08, 0x2c, 0xb2, 0x65, 0x16, 0x6d, 0x03, 0xeb, 0x7b, 0x1b, - 0x24, 0xa3, 0xc6, 0xbb, 0x4d, 0xa8, 0xd7, 0x40, 0x72, 0xbe, 0x04, 0x3f, - 0x81, 0x03, 0xdb, 0x96, 0xdf, 0xaf, 0xe8, 0x33, 0x9c, 0xa2, 0xea, 0x4e, - 0x0e, 0x81, 0xb0, 0x10, 0x9f, 0x96, 0x32, 0xc4, 0x70, 0xd3, 0x03, 0x19, - 0x81, 0x62, 0x16, 0x8d, 0xa5, 0xe4, 0xc1, 0x68, 0x2d, 0xe7, 0xda, 0x00, - 0x3f, 0x3d, 0x8e, 0x54, 0x55, 0x88, 0xbe, 0x66, 0x13, 0x72, 0x9d, 0x17, - 0x59, 0xe5, 0x31, 0x60, 0x29, 0x15, 0xdd, 0x95, 0x5e, 0x42, 0x09, 0x11, - 0xb9, 0x27, 0x8b, 0x9f, 0xdc, 0xae, 0x45, 0xb7, 0x1b, 0xe1, 0x35, 0xf8, - 0xee, 0x2d, 0x1f, 0xef, 0x40, 0x56, 0x8b, 0xc1, 0xee, 0xca, 0x32, 0x33, - 0x9a, 0x9e, 0xc7, 0x7b, 0xa6, 0xd1, 0xb9, 0xc3, 0x2b, 0xa9, 0x10, 0xa2, - 0x3f, 0xc4, 0x85, 0x03, 0x49, 0x34, 0x48, 0x17, 0x0d, 0x02, 0x81, 0x83, - 0x19, 0x2f, 0x0a, 0xaa, 0x41, 0x05, 0x81, 0x53, 0xb6, 0xc6, 0xb4, 0x2c, - 0x6d, 0x52, 0x23, 0x15, 0x96, 0xd7, 0x45, 0xf3, 0xde, 0xcd, 0x1f, 0x5c, - 0xf2, 0xf0, 0x80, 0x88, 0xe8, 0x0a, 0x28, 0xd6, 0x9f, 0x55, 0xb8, 0x9a, - 0xce, 0x24, 0x24, 0x32, 0x67, 0xb4, 0x71, 0x93, 0xac, 0xf9, 0x4e, 0x1b, - 0xfc, 0x54, 0x78, 0xee, 0x62, 0x71, 0xa6, 0xd0, 0xb0, 0x3a, 0x8d, 0x5f, - 0x24, 0xc1, 0x32, 0x22, 0xe0, 0x98, 0xb1, 0x12, 0xe3, 0xbf, 0x33, 0xa3, - 0x31, 0xe3, 0xf1, 0xa4, 0x91, 0xae, 0xff, 0xc6, 0xdd, 0x6a, 0x94, 0x7b, - 0xd1, 0x72, 0xb4, 0x50, 0x83, 0x5e, 0xa9, 0x58, 0x12, 0x5b, 0x18, 0xa2, - 0x34, 0x93, 0xf7, 0x47, 0x93, 0x58, 0xd9, 0xe2, 0x76, 0x85, 0x21, 0x6f, - 0xb1, 0x10, 0xa0, 0x9e, 0x7e, 0x0c, 0x2b, 0x68, 0x72, 0x16, 0x18, 0x6d, - 0x69, 0x29, 0xf8, 0xa6, 0xba, 0x60, 0x91, 0xbc, 0x50, 0x98, 0x54, 0x69, - 0xd3, 0xba, 0x7c, 0x1d, 0x65, 0x0f, 0xbf, 0x26, 0xa1, 0x0d, 0x07, 0x05, - 0x21, 0xa0, 0x1d, 0xe1, 0xec, 0x53, 0x22, 0x00, 0x16, 0x82, 0xaa, 0x23, - 0x14, 0xd8, 0xb1, 0xea, 0x5f, 0x74, 0xe1, 0x0d, 0xf7, 0x32, 0x9b, 0x7f, - 0xd0, 0xc8, 0xa5, 0x5e, 0x24, 0xd1, 0x79, 0x58, 0x55, 0x56, 0x32, 0x5a, - 0xb1, 0xd9, 0x66, 0x21, 0x65, 0x17, 0x80, 0x15, 0x3b, 0x67, 0xa7, 0x95, - 0x6c, 0x92, 0x71, 0x3f, 0xc2, 0x2b, 0x0e, 0xc8, 0x1e, 0x62, 0xdc, 0x01, - 0x2a, 0xb6, 0xd7, 0x31, 0x80, 0x5a, 0x0e, 0xe2, 0x4d, 0x19, 0xd0, 0x89, - 0x8f, 0x31, 0xa9, 0x02, 0xf5, 0x68, 0xa5, 0x5f, 0x5d, 0xc4, 0x18, 0x53, - 0xd6, 0xad, 0x47, 0x52, 0xa9, 0xba, 0x56, 0xeb, 0xec, 0xe4, 0x0e, 0x8d, - 0x84, 0x1b, 0x2b, 0x81, 0xf2, 0xbf, 0x2f, 0xc5, 0x44, 0x75, 0xbb, 0x45, - 0x17, 0xbc, 0x6c, 0x06, 0x72, 0x19, 0xa8, 0xa8, 0x1d, 0x19, 0x61, 0x50, - 0x4e, 0xcc, 0xf9, 0x9d, 0x34, 0xbd, 0x5e, 0x47, 0x44, 0xf7, 0x7e, 0x2f, - 0x87, 0x39, 0x46, 0xb6, 0x1d, 0xf1, 0x2e, 0xc4, 0x82, 0x70, 0x42, 0x0e, - 0x0d, 0x98, 0x57, 0x19, 0xa1, 0x72, 0x2f, 0x70, 0xae, 0x3b, 0x9b, 0xc9, - 0x1e, 0xe2, 0x8f, 0x5f, 0x50, 0x0e, 0x53, 0xb6, 0x7c, 0x37, 0xc6, 0x4b, - 0xa5, 0xe4, 0xe5, 0x25, 0x3e, 0xac, 0xca, 0x43, 0xc5, 0x86, 0x53, 0x41, - 0xa1, 0x0f, 0x32, 0x66, 0x6d, 0xae, 0x4a, 0xa0, 0xc6, 0xe3, 0xc9, 0xe4, - 0x7e, 0xe9, 0xe3, 0xb8, 0xb1, 0xe1, 0xff, 0x7a, 0xb5, 0x2c, 0xf5, 0x43, - 0x35, 0xd3, 0x82, 0x33, 0xfd, 0x1a, 0x36, 0x9c, 0x77, 0xec, 0xc4, 0x4d, - 0xf6, 0xb6, 0x21, 0x67, 0xcc, 0xfc, 0xaf, 0x70, 0xf7, 0x5f, 0x41, 0x3b, - 0xff, 0x82, 0x24, 0x6e, 0x13, 0xcb, 0x17, 0xae, 0x74, 0x29, 0xa8, 0xea, - 0x62, 0xcd, 0xd1, 0xa3, 0xbc, 0x31, 0xfe, 0x03, 0x3c, 0x63, 0x97, 0xec, - 0x5a, 0x72, 0x15, 0x41, 0x63, 0x7c, 0xf5, 0xf7, 0x2f, 0x3f, 0x2d, 0x3a, - 0x69, 0x6b, 0x0c, 0xb0, 0x82, 0x90, 0xaf, 0x8e, 0x47, 0xa7, 0xab, 0x0a, - 0x96, 0xf9, 0x3d, 0x2f, 0xc5, 0xd3, 0x96, 0xb5, 0xe4, 0x8a, 0xe9, 0x20, - 0x12, 0x7a, 0x68, 0x36, 0x28, 0xaf, 0xa9, 0xd6, 0xb4, 0xd0, 0x03, 0x05, - 0xdb, 0x31, 0x4c, 0x71, 0xc0, 0xc2, 0x74, 0x39, 0x88, 0x0d, 0x78, 0x6c, - 0x15, 0xac, 0x4b, 0xf7, 0xe6, 0xe2, 0x8f, 0xc5, 0x1d, 0x6b, 0x1c, 0xbf, - 0x36, 0x4d, 0x06, 0xd6, 0x77, 0xc7, 0x2a, 0x0f, 0x07, 0xe3, 0x41, 0x28, - 0xef, 0x4c, 0xb4, 0x09, 0x4e, 0xb1, 0x53, 0xe1, 0x5b, 0xfc, 0x05, 0xd6, - 0xd1, 0x26, 0x71, 0x11, 0xd3, 0x26, 0x9f, 0x46, 0x97, 0x9f, 0x5c, 0x58, - 0x1b, 0x1d, 0x7a, 0x74, 0x66, 0x18, 0x5a, 0x6b, 0x58, 0x4e, 0xea, 0x74, - 0xfe, 0x16, 0x53, 0x62, 0xea, 0xfd, 0xdc, 0x22, 0x0a, 0x36, 0x5e, 0x7e, - 0xb5, 0x8e, 0xba, 0x57, 0xb3, 0x01, 0xb8, 0x32, 0xdd, 0x11, 0xb3, 0xdd, - 0x4a, 0x53, 0x17, 0xbb, 0x84, 0x5d, 0x50, 0xad, 0x48, 0x44, 0x6a, 0xfc, - 0x74, 0x0b, 0xca, 0xf5, 0x00, 0x47, 0x0d, 0x8a, 0x45, 0xed, 0x6e, 0x5b, - 0x9e, 0x16, 0x27, 0xee, 0x8a, 0x7b, 0x06, 0x1c, 0xfc, 0xec, 0x99, 0x85, - 0xda, 0x91, 0x88, 0xc4, 0x96, 0xf2, 0x02, 0xc2, 0xf7, 0x0e, 0x8b, 0xd1, - 0x86, 0x3b, 0x8d, 0x62, 0x52, 0xef, 0xc6, 0x42, 0xe0, 0x2d, 0x47, 0x83, - 0xea, 0xfd, 0x2e, 0xf4, 0x73, 0x39, 0xdd, 0xf7, 0x33, 0x9a, 0x9d, 0xca, - 0xc7, 0x63, 0x06, 0xf7, 0x84, 0x1a, 0x4a, 0xa8, 0xf2, 0x3c, 0x78, 0x40, - 0x67, 0xef, 0x14, 0x2c, 0xf4, 0x66, 0xad, 0x41, 0x08, 0x55, 0x2b, 0xf8, - 0xec, 0xab, 0xe5, 0x8b, 0xa1, 0x1d, 0x3d, 0x9a, 0xd7, 0x20, 0x95, 0x9d, - 0x28, 0xf0, 0x2f, 0x0f, 0x34, 0x61, 0xdb, 0xf2, 0xa2, 0x12, 0x8b, 0x65, - 0x3d, 0xe0, 0xf4, 0x09, 0x07, 0x11, 0xe0, 0x97, 0x45, 0xaa, 0x5e, 0x66, - 0xdc, 0x0e, 0x50, 0x19, 0x37, 0x6b, 0xeb, 0x35, 0x95, 0x06, 0x1d, 0x7d, - 0xf2, 0xc2, 0x2d, 0xa7, 0xee, 0x4a, 0x4e, 0x33, 0x99, 0xce, 0x0d, 0xa4, - 0x9b, 0x4a, 0xb6, 0xc8, 0x2c, 0x62, 0xb9, 0x22, 0x3f, 0x18, 0x8d, 0xc3, - 0x4a, 0xfb, 0xf0, 0x12, 0x6f, 0x36, 0xbd, 0xa5, 0x1c, 0x80, 0xc8, 0xe6, - 0xfa, 0x89, 0x20, 0x7d, 0xa7, 0xa1, 0xf7, 0x53, 0x32, 0xa4, 0x7e, 0xf5, - 0x90, 0xe1, 0xef, 0x81, 0xb8, 0x9d, 0xea, 0x6c, 0x3a, 0x6e, 0x31, 0xe5, - 0x1c, 0x03, 0xec, 0xd8, 0x5b, 0xbf, 0xdd, 0xbe, 0xbb, 0x78, 0x29, 0xd7, - 0xc3, 0x29, 0xfe, 0x23, 0x6c, 0x17, 0xbe, 0x5a, 0x5a, 0x94, 0x32, 0xbf, - 0xed, 0x0a, 0x1f, 0x40, 0x67, 0x68, 0x7a, 0x80, 0xe4, 0x9d, 0xd2, 0xed, - 0x64, 0x1e, 0x9c, 0xac, 0x91, 0x03, 0x5b, 0x62, 0xeb, 0x49, 0xed, 0x1c, - 0xcb, 0x3c, 0x4b, 0x8c, 0x40, 0xb6, 0xbc, 0x5f, 0x13, 0x53, 0x24, 0xb3, - 0x50, 0x6c, 0x36, 0xcf, 0xeb, 0xab, 0x8c, 0xfd, 0x65, 0x44, 0x68, 0x28, - 0x6b, 0x8c, 0x08, 0x73, 0x96, 0x89, 0x9d, 0x02, 0xe5, 0xa4, 0xaa, 0x36, - 0x6c, 0xfc, 0x5d, 0x19, 0x0a, 0xd5, 0x57, 0xc7, 0x1d, 0x6b, 0xc3, 0xf2, - 0x62, 0x12, 0xe0, 0x2a, 0xcf, 0xec, 0xcd, 0x10, 0x9b, 0x14, 0x00, 0xd2, - 0x4e, 0xb9, 0xe4, 0xef, 0x42, 0x3b, 0x56, 0x90, 0x59, 0x7c, 0x9e, 0xf8, - 0xbe, 0x58, 0xa8, 0x7a, 0x7a, 0x11, 0x0e, 0x8e, 0x85, 0xae, 0x81, 0x2b, - 0x93, 0xe7, 0xea, 0x34, 0xa0, 0xfb, 0x8d, 0x13, 0x7f, 0x35, 0x31, 0x95, - 0x70, 0x76, 0xb9, 0x67, 0x0b, 0x90, 0x32, 0xe0, 0xa8, 0xbb, 0x6e, 0x1c, - 0x1c, 0x8f, 0xe8, 0x04, 0xc3, 0x54, 0xca, 0xb7, 0xc4, 0xd0, 0x2a, 0x38, - 0xa8, 0x7d, 0xa6, 0x8f, 0x71, 0xe2, 0x54, 0xa1, 0xce, 0x8d, 0x03, 0xa4, - 0x02, 0x34, 0x6f, 0x8c, 0xed, 0x18, 0x45, 0x60, 0xbb, 0xc0, 0x8c, 0xed, - 0x12, 0xdf, 0xa5, 0xbe, 0x4d, 0xa5, 0x13, 0x23, 0x8c, 0x4f, 0xc9, 0xb6, - 0x61, 0xc3, 0xb6, 0x25, 0x25, 0xd5, 0x03, 0x35, 0x6a, 0x87, 0xe7, 0x99, - 0x2f, 0x52, 0xc5, 0x87, 0x40, 0x88, 0xb4, 0xec, 0x97, 0x1b, 0xf4, 0xa1, - 0x0f, 0xa9, 0x07, 0xe0, 0xb0, 0x86, 0x2c, 0x0a, 0x07, 0x85, 0xac, 0x40, - 0x9a, 0x2a, 0x17, 0xb8, 0xc2, 0x3f, 0xeb, 0x4c, 0x2c, 0xcd, 0xb4, 0x02, - 0x2f, 0xd1, 0xd3, 0x82, 0x5d, 0xb1, 0x79, 0xd6, 0xf0, 0x79, 0xd0, 0x28, - 0xfc, 0x0a, 0x8d, 0x19, 0x42, 0xfe, 0x68, 0x7b, 0xee, 0xc1, 0x64, 0x0c, - 0x33, 0x0a, 0x96, 0x76, 0xee, 0x8a, 0xb4, 0xbf, 0xed, 0x8f, 0x51, 0x1e, - 0x6b, 0xcb, 0xee, 0x9e, 0xba, 0x41, 0x1a, 0xba, 0x4f, 0x22, 0xdf, 0xda, - 0x92, 0xc1, 0x62, 0x05, 0x81, 0x45, 0x9b, 0x74, 0xdf, 0x4f, 0xd4, 0xe3, - 0x96, 0xcd, 0x55, 0x06, 0xf6, 0x37, 0x68, 0xae, 0xb9, 0x7d, 0x2c, 0xd9, - 0x53, 0xb6, 0x55, 0x0c, 0x59, 0x79, 0xdc, 0x18, 0x69, 0x02, 0x84, 0x2c, - 0x35, 0x75, 0x13, 0x83, 0xf6, 0x59, 0x31, 0x2d, 0xd5, 0xf9, 0x12, 0xfb, - 0x3f, 0xb9, 0x40, 0x4b, 0xac, 0x19, 0x2d, 0x0d, 0xac, 0x42, 0x4a, 0x31, - 0x7a, 0x10, 0xa5, 0xa7, 0x9b, 0xf6, 0x17, 0x78, 0x5b, 0x31, 0x9c, 0xec, - 0x46, 0x1f, 0xde, 0xf1, 0x83, 0x3f, 0x05, 0x15, 0x84, 0x84, 0xee, 0x02, - 0x35, 0x5e, 0x6a, 0x75, 0x3e, 0x31, 0x5d, 0x44, 0xd3, 0xe4, 0xfd, 0x5f, - 0xb6, 0xda, 0x77, 0x0c, 0x6e, 0x32, 0xaf, 0xea, 0x36, 0x34, 0x8e, 0x13, - 0x77, 0x7c, 0x6e, 0x39, 0xfe, 0xd3, 0x8a, 0x16, 0x2d, 0x88, 0xae, 0x41, - 0xc5, 0x54, 0x39, 0x56, 0x2f, 0xde, 0x65, 0x1b, 0x2d, 0x2b, 0x44, 0x27, - 0x6d, 0xb7, 0x79, 0xf9, 0x10, 0x7f, 0x39, 0xb4, 0x08, 0xca, 0x3f, 0xcc, - 0xf3, 0x6c, 0x21, 0xec, 0xd2, 0xdc, 0x48, 0x45, 0x34, 0xae, 0x5d, 0x67, - 0xd8, 0xb1, 0x7b, 0xd5, 0xad, 0xb1, 0x08, 0x0e, 0x2d, 0xc3, 0xbc, 0xd5, - 0x31, 0xb6, 0x52, 0x42, 0x67, 0x48, 0x82, 0x24, 0x60, 0xf5, 0x5b, 0x4b, - 0x77, 0xc7, 0x2e, 0xdd, 0x0a, 0xed, 0x39, 0x03, 0x03, 0x2a, 0xb3, 0x25, - 0xe3, 0xd8, 0x40, 0x28, 0x5e, 0x96, 0xd7, 0xae, 0x95, 0x14, 0x00, 0xe9, - 0x1f, 0xbe, 0x1b, 0x73, 0x6a, 0x93, 0xba, 0xb4, 0x96, 0xd8, 0x7d, 0x26, - 0x16, 0xdb, 0xb2, 0xed, 0x96, 0xdb, 0xc4, 0x7e, 0x9a, 0x9f, 0x4b, 0xc5, - 0x63, 0x0e, 0x38, 0x15, 0xa2, 0x00, 0x18, 0xaa, 0xdd, 0x80, 0x1d, 0xfc, - 0x3c, 0x1a, 0xe6, 0x00, 0x0d, 0x11, 0x4c, 0x47, 0x68, 0xb6, 0x0b, 0xb7, - 0x8e, 0x3a, 0x0a, 0x8b, 0xf2, 0x43, 0xec, 0xb7, 0xfe, 0xb9, 0xec, 0x37, - 0xab, 0xf8, 0x38, 0x47, 0x6e, 0xcd, 0xfb, 0x36, 0x7c, 0x05, 0xb2, 0xde, - 0x9d, 0xee, 0x47, 0x8a, 0x3f, 0xb6, 0x67, 0x43, 0x1f, 0xfa, 0xf6, 0x86, - 0x8e, 0xb4, 0x60, 0x01, 0x23, 0x1a, 0xd7, 0x99, 0x0e, 0xe7, 0xb6, 0x71, - 0x24, 0x77, 0x44, 0xd7, 0xe3, 0xac, 0x52, 0xb6, 0xad, 0x7c, 0xab, 0x08, - 0x1b, 0x78, 0x1e, 0x7f, 0x0a, 0xda, 0x3c, 0x64, 0xc5, 0xdd, 0x78, 0x7a, - 0x7a, 0x14, 0xf6, 0x7f, 0xe1, 0x47, 0x4e, 0x9d, 0xff, 0x51, 0x10, 0x22, - 0x56, 0x8e, 0xfe, 0x09, 0x03, 0xa0, 0x9e, 0x08, 0x40, 0x91, 0x7c, 0x41, - 0x63, 0xec, 0xb7, 0xe5, 0xb8, 0xdf, 0x2a, 0xbf, 0xc3, 0xf4, 0x0e, 0x03, - 0xa8, 0x1c, 0x4e, 0x8b, 0xbb, 0x5a, 0x08, 0x3c, 0x88, 0x6e, 0xb7, 0x3d, - 0x23, 0x1f, 0xc8, 0xec, 0x47, 0x8a, 0x88, 0x97, 0x8d, 0x9b, 0x5f, 0xa0, - 0xd1, 0x9e, 0x5e, 0xf9, 0x98, 0x22, 0xee, 0xdd, 0x28, 0xdb, 0x1e, 0x98, - 0xec, 0xc3, 0xd3, 0x5f, 0x8e, 0x58, 0xcf, 0x22, 0x4d, 0xc4, 0x03, 0xaa, - 0x3f, 0xbb, 0x10, 0x7f, 0x58, 0x61, 0xce, 0x01, 0xc6, 0x13, 0x94, 0x66, - 0x71, 0xaf, 0xa0, 0xbe, 0x3a, 0x02, 0xeb, 0x14, 0xb5, 0x77, 0xb3, 0xde, - 0xda, 0xfb, 0x9a, 0x7d, 0xcf, 0x0d, 0x09, 0xd4, 0x63, 0x69, 0xeb, 0x49, - 0x43, 0xf8, 0x4d, 0x06, 0x5d, 0x73, 0xed, 0xc9, 0xbe, 0x56, 0x13, 0x15, - 0xb2, 0x79, 0x5f, 0x1a, 0x58, 0x23, 0x9c, 0xcf, 0x54, 0x61, 0x23, 0xff, - 0x2e, 0x83, 0x87, 0xdb, 0xf6, 0x84, 0x2c, 0x84, 0xb1, 0x64, 0xcc, 0x7b, - 0x4c, 0x9d, 0x88, 0x67, 0xb3, 0x88, 0x26, 0x70, 0x23, 0xd2, 0x6a, 0x02, - 0x0f, 0xcf, 0xd9, 0xb9, 0x47, 0x6c, 0xee, 0x5a, 0x65, 0x5f, 0x6a, 0x66, - 0x5b, 0x15, 0x1d, 0xd7, 0x46, 0xe1, 0x84, 0x28, 0xef, 0x0b, 0xaa, 0xbf, - 0xc3, 0x63, 0x6c, 0x6e, 0x88, 0x14, 0x78, 0x14, 0x2b, 0x20, 0xac, 0x26, - 0x1a, 0x70, 0x0e, 0xd0, 0x0f, 0x9a, 0x65, 0x36, 0xb3, 0x9d, 0x30, 0x19, - 0x14, 0x4b, 0xae, 0x46, 0x2d, 0x82, 0x77, 0xea, 0x50, 0xb0, 0xb3, 0x24, - 0xb5, 0xba, 0x16, 0xf0, 0x95, 0x2c, 0x4e, 0xe8, 0xfc, 0xeb, 0xc1, 0x78, - 0xc4, 0x35, 0x50, 0x61, 0xcd, 0x29, 0x81, 0x1b, 0x16, 0x6d, 0xcd, 0xa5, - 0xd5, 0x3a, 0xeb, 0xf3, 0x9a, 0xf9, 0xc8, 0x18, 0xbe, 0xcd, 0xd6, 0x10, - 0x0f, 0x61, 0x38, 0xe0, 0x28, 0x47, 0xed, 0x53, 0x86, 0xd2, 0xf4, 0xf4, - 0xda, 0x45, 0x64, 0xb9, 0xbf, 0x84, 0x71, 0xd0, 0x13, 0x56, 0x7c, 0xe0, - 0x5b, 0xca, 0x9f, 0x18, 0x5a, 0x2b, 0xb4, 0x8a, 0x7b, 0xe7, 0xe8, 0xd5, - 0xde, 0x94, 0xf1, 0xe7, 0xd0, 0x9b, 0x0c, 0xb8, 0x99, 0x4c, 0x2b, 0x3c, - 0x97, 0xd4, 0x33, 0xed, 0xc7, 0x5d, 0x6c, 0xfa, 0x48, 0x34, 0x7c, 0x77, - 0x43, 0xbf, 0x53, 0x81, 0x70, 0x7b, 0x5e, 0x1e, 0x29, 0xb2, 0x02, 0x40, - 0x59, 0xa0, 0x01, 0x01, 0xa6, 0x5d, 0x5a, 0xef, 0xe5, 0x3a, 0xfa, 0xca, - 0xb8, 0x40, 0x41, 0x75, 0x50, 0xaa, 0x1b, 0x70, 0xae, 0x5c, 0xd4, 0x6f, - 0x25, 0x81, 0x14, 0x32, 0xc5, 0xe6, 0x8e, 0x10, 0x76, 0x42, 0xfb, 0xa1, - 0xd9, 0x7e, 0x38, 0x74, 0x07, 0x7a, 0xbe, 0x53, 0xf5, 0xb9, 0xd3, 0x4d, - 0x7a, 0xb7, 0x0d, 0xaa, 0xef, 0x49, 0x40, 0x39, 0x74, 0xf8, 0xc3, 0x93, - 0x62, 0xfd, 0x11, 0x0a, 0x5d, 0x27, 0x22, 0x34, 0x2c, 0xaf, 0x6f, 0x99, - 0x99, 0xed, 0xc3, 0x87, 0x50, 0xaa, 0xad, 0xf5, 0x01, 0x44, 0x5b, 0xeb, - 0x96, 0x4c, 0xea, 0x32, 0xae, 0xd8, 0x4b, 0x03, 0x45, 0x38, 0x44, 0x5e, - 0xad, 0x2f, 0xb1, 0xd2, 0x47, 0xe3, 0x99, 0xda, 0x18, 0x97, 0x07, 0x40, - 0x8c, 0xec, 0xe1, 0x42, 0x4e, 0x09, 0x3d, 0x44, 0x83, 0xd5, 0x93, 0xfd, - 0x29, 0x3d, 0x17, 0x2e, 0x99, 0x48, 0xa2, 0x13, 0x20, 0x3a, 0xca, 0x63, - 0x5e, 0x26, 0xa2, 0xaf, 0x23, 0x1c, 0x2e, 0x57, 0xc7, 0xc5, 0x04, 0x97, - 0x54, 0x5a, 0x3e, 0x7f, 0x6c, 0xe5, 0x4e, 0xff, 0xf0, 0x44, 0x93, 0x7e, - 0x72, 0x07, 0x12, 0xb6, 0x51, 0xfb, 0x9a, 0x2f, 0x32, 0x12, 0xa9, 0xc5, - 0xd9, 0x6a, 0x96, 0x65, 0x2b, 0x23, 0xd7, 0xe7, 0x16, 0x38, 0xde, 0xf2, - 0xf9, 0x96, 0xec, 0x0e, 0x8e, 0x4f, 0x3f, 0x19, 0xa1, 0xcf, 0x99, 0x28, - 0x87, 0x64, 0x9a, 0x90, 0xa8, 0x1b, 0xd4, 0x71, 0x97, 0x46, 0x25, 0x34, - 0x8c, 0xe7, 0xe4, 0xd9, 0x90, 0x5f, 0xd9, 0x25, 0x55, 0x19, 0xb8, 0x35, - 0xd0, 0x98, 0xe1, 0xa3, 0xcd, 0x0c, 0xcf, 0xca, 0xf0, 0x01, 0xe0, 0xea, - 0xa0, 0x3e, 0x1c, 0x2d, 0xb7, 0x63, 0x37, 0xf6, 0x73, 0x07, 0xf8, 0x84, - 0xed, 0x1e, 0xbc, 0xf8, 0xaf, 0x97, 0x6b, 0x71, 0x1f, 0x90, 0x32, 0xfa, - 0xd8, 0xf5, 0x88, 0xd9, 0x22, 0x00, 0x2d, 0x5b, 0x9c, 0x40, 0x9d, 0x94, - 0x32, 0xab, 0x11, 0xc8, 0xaa, 0xbc, 0x1c, 0xca, 0xa1, 0xb7, 0x88, 0x17, - 0x98, 0xed, 0x9e, 0x1b, 0x08, 0xf8, 0xc4, 0x11, 0xae, 0x18, 0x68, 0x3a, - 0x41, 0xf4, 0x86, 0x2f, 0xd9, 0x36, 0x0f, 0x43, 0x62, 0x3d, 0xba, 0x1f, - 0x74, 0x1d, 0x3f, 0x2a, 0x9a, 0x0a, 0x31, 0x29, 0x35, 0xf0, 0x49, 0x30, - 0x86, 0xcb, 0x77, 0xca, 0x45, 0xdf, 0x4a, 0x77, 0x35, 0xb5, 0xaf, 0x43, - 0xd4, 0x53, 0x73, 0x6b, 0xd0, 0xb4, 0xa9, 0x1d, 0x8f, 0x21, 0x14, 0x10, - 0xac, 0x28, 0xce, 0x6a, 0x65, 0x8c, 0xc6, 0xc7, 0x3e, 0x01, 0x8a, 0x51, - 0x3b, 0x40, 0x92, 0x51, 0x27, 0x88, 0xc7, 0x59, 0xc0, 0x02, 0x4d, 0xa6, - 0x4f, 0xd4, 0xba, 0xc8, 0xb2, 0x0c, 0x21, 0x1c, 0xf9, 0xb0, 0x7d, 0x28, - 0x6a, 0x08, 0xe5, 0xce, 0x75, 0x54, 0xf9, 0x7f, 0xa9, 0xfd, 0x42, 0xe6, - 0xb1, 0x72, 0xda, 0x2f, 0x3e, 0x00, 0x40, 0x00, 0x08, 0x1d, 0x55, 0x1e, - 0xc0, 0x06, 0xa2, 0xe7, 0x69, 0x03, 0xdd, 0xfe, 0xf3, 0xe6, 0x52, 0x8c, - 0xaf, 0xd3, 0x3e, 0x5b, 0x62, 0xdf, 0x79, 0x62, 0xf2, 0x02, 0x22, 0x70, - 0x3e, 0x6f, 0x0f, 0x23, 0xc5, 0xc1, 0xf8, 0x8c, 0x8d, 0x84, 0xa3, 0x72, - 0x94, 0xcd, 0x93, 0xdc, 0x31, 0x53, 0xc8, 0x4f, 0xe8, 0xa1, 0xd8, 0x52, - 0xef, 0x54, 0xbb, 0x46, 0x22, 0xc2, 0x31, 0x22, 0x40, 0xee, 0xad, 0x20, - 0x3c, 0x53, 0x89, 0xf8, 0x7e, 0x2c, 0x17, 0x84, 0xa3, 0x68, 0x49, 0x63, - 0x44, 0xa3, 0x84, 0x4e, 0x7d, 0xad, 0x35, 0x4f, 0xaf, 0x1e, 0xfa, 0x98, - 0xdd, 0x7b, 0x12, 0xab, 0x3d, 0xed, 0xaf, 0x04, 0x5d, 0x70, 0x19, 0x83, - 0xc4, 0x20, 0xd0, 0x1b, 0x38, 0x64, 0x1f, 0xf4, 0x2c, 0x89, 0x39, 0x78, - 0x2f, 0x28, 0xcf, 0x3c, 0x39, 0x8a, 0xb0, 0xe1, 0x3d, 0x13, 0x01, 0xd7, - 0x3b, 0xa1, 0xfc, 0x71, 0xa0, 0xed, 0x8e, 0xad, 0xe6, 0xb0, 0xaa, 0x01, - 0x39, 0x04, 0x31, 0x2b, 0xe8, 0x96, 0x18, 0x0d, 0x53, 0xf0, 0x26, 0xdf, - 0xa1, 0x48, 0x4f, 0x45, 0xa2, 0x37, 0x03, 0x81, 0x2a, 0x6a, 0x65, 0x51, - 0x79, 0xf3, 0x28, 0x70, 0xb9, 0x5a, 0x5e, 0xdd, 0xa1, 0xce, 0x59, 0xec, - 0x20, 0x93, 0x7e, 0x02, 0xaf, 0x06, 0xad, 0x20, 0x64, 0x56, 0x33, 0xd4, - 0x06, 0xe1, 0x6e, 0x20, 0xc6, 0xc4, 0xda, 0x1b, 0x8b, 0x72, 0xa9, 0xa8, - 0xb3, 0x35, 0x7d, 0x7d, 0x12, 0xdd, 0xd7, 0xda, 0x1b, 0x8a, 0x13, 0xa7, - 0x71, 0xd5, 0xc5, 0xf1, 0xbd, 0xd9, 0xcc, 0xa3, 0xe2, 0x72, 0xe1, 0xed, - 0xb2, 0x35, 0x5b, 0x7a, 0x10, 0xdc, 0x70, 0x55, 0x62, 0xb3, 0xbd, 0x08, - 0x27, 0xcf, 0x7e, 0x3e, 0xec, 0x7c, 0xb9, 0x12, 0xcb, 0x40, 0x92, 0xae, - 0x67, 0x54, 0x3c, 0x37, 0xb7, 0xfa, 0x4a, 0x7d, 0xc9, 0x13, 0x64, 0xbb, - 0x0f, 0xd0, 0x7e, 0xe2, 0x55, 0x03, 0xb5, 0x38, 0x6a, 0x4a, 0x41, 0xd6, - 0x77, 0x7e, 0x59, 0xfc, 0xcf, 0x14, 0x37, 0x01, 0x0c, 0x7f, 0xd0, 0x6c, - 0x17, 0x32, 0x66, 0xe3, 0x3d, 0xa2, 0x87, 0xbc, 0xa6, 0x28, 0x45, 0x3d, - 0x8f, 0x41, 0xdd, 0xea, 0x5b, 0x7c, 0xb6, 0xb7, 0x09, 0xc0, 0xb0, 0x5b, - 0xac, 0xf0, 0xa6, 0x95, 0xc5, 0x15, 0x1e, 0xeb, 0xce, 0x2e, 0xa8, 0x4b, - 0x34, 0xd7, 0xec, 0x25, 0x5f, 0x7d, 0x12, 0xbe, 0xf6, 0x69, 0x0c, 0xfa, - 0x39, 0xa2, 0x3c, 0xc5, 0xda, 0x4e, 0x8e, 0xf1, 0x0c, 0x46, 0xae, 0x12, - 0xd4, 0x2f, 0x19, 0x5a, 0x70, 0x09, 0x56, 0xd7, 0x84, 0x4b, 0x9a, 0x94, - 0x10, 0x1a, 0x22, 0x5b, 0xcc, 0xfc, 0x92, 0x77, 0x73, 0xed, 0x20, 0xd1, - 0x1f, 0x85, 0x7b, 0x79, 0x3c, 0x32, 0xc7, 0x60, 0xcb, 0x82, 0x18, 0xdd, - 0x17, 0xc1, 0x0a, 0x7a, 0x88, 0x62, 0xf0, 0x99, 0x3e, 0x18, 0x03, 0xc7, - 0x66, 0x94, 0xba, 0x72, 0x06, 0x58, 0x4f, 0x20, 0xce, 0xa8, 0xa3, 0x93, - 0x1f, 0x71, 0x5c, 0xf2, 0x2c, 0xa5, 0x8e, 0x57, 0x81, 0xb7, 0x4c, 0x75, - 0x84, 0xf2, 0x66, 0x48, 0x1b, 0x24, 0xf0, 0xf1, 0x7a, 0xa8, 0x56, 0xc5, - 0x5f, 0x0c, 0x57, 0x1e, 0x97, 0x2a, 0xbb, 0x06, 0xf6, 0xce, 0x08, 0x4a, - 0x91, 0xa8, 0xfe, 0x2a, 0x65, 0x60, 0x9f, 0x24, 0x6e, 0xec, 0xe5, 0xff, - 0xe1, 0x50, 0xd8, 0xdf, 0x4c, 0x2e, 0x7b, 0x11, 0xc2, 0x13, 0xe8, 0xbc, - 0x35, 0x13, 0x53, 0xa0, 0x2a, 0xa8, 0xe3, 0xda, 0x0d, 0x71, 0x67, 0x1c, - 0x17, 0x74, 0x24, 0xc6, 0xa3, 0xbe, 0xc5, 0xcf, 0x15, 0x5d, 0x95, 0xcb, - 0x67, 0x74, 0xfa, 0x77, 0xa1, 0x20, 0x87, 0x6f, 0x50, 0x07, 0xe9, 0x25, - 0xf3, 0x18, 0xad, 0x56, 0x8a, 0x80, 0x32, 0xd8, 0x72, 0x3b, 0x87, 0xfd, - 0x45, 0x6c, 0xf0, 0x98, 0x9d, 0xb5, 0x21, 0x96, 0x9f, 0xff, 0x7e, 0xde, - 0xa3, 0xbb, 0x9f, 0xf4, 0xaa, 0x1e, 0x7c, 0xfb, 0x9d, 0x94, 0xbb, 0x7b, - 0xc1, 0x08, 0x1e, 0x8e, 0x35, 0x80, 0x55, 0x03, 0x8c, 0x28, 0xa3, 0x94, - 0x8a, 0x7f, 0x3b, 0x79, 0x98, 0xf2, 0x75, 0xd3, 0xd6, 0x9f, 0xf6, 0x9b, - 0xca, 0x43, 0xdc, 0x5c, 0xaa, 0x49, 0x32, 0x71, 0x90, 0xb9, 0x52, 0x8f, - 0x63, 0x93, 0x27, 0x6c, 0xf3, 0xe4, 0xa0, 0x8a, 0xe9, 0xcd, 0xb1, 0x3c, - 0x5c, 0x36, 0xc1, 0xaf, 0x38, 0xb0, 0x37, 0xb9, 0x5c, 0x08, 0xe4, 0x3f, - 0x2e, 0x0d, 0xa4, 0x04, 0x5a, 0x3e, 0x2a, 0xa9, 0x7f, 0x1b, 0x9f, 0x5d, - 0x18, 0xa2, 0xc8, 0xbb, 0x28, 0x56, 0x2d, 0x60, 0xd7, 0xc7, 0x52, 0xa2, - 0xd7, 0x4f, 0x2d, 0xbe, 0x18, 0xc8, 0x98, 0x0a, 0xe9, 0x64, 0x11, 0xea, - 0xe4, 0x0f, 0x19, 0xad, 0x21, 0x37, 0x5e, 0x8e, 0x6b, 0x20, 0x7c, 0x35, - 0x3e, 0x8b, 0xa1, 0x3f, 0x44, 0x96, 0x0d, 0xcd, 0x00, 0xb9, 0x7f, 0xbf, - 0xda, 0x3d, 0x01, 0x35, 0x43, 0x60, 0x05, 0x71, 0x9e, 0x4c, 0x94, 0xdd, - 0x83, 0x32, 0xcf, 0x6b, 0xdd, 0x06, 0xb0, 0x87, 0xc9, 0x34, 0xef, 0x05, - 0xb0, 0x3a, 0x56, 0x9a, 0x4a, 0x65, 0xdf, 0x51, 0xea, 0x2a, 0x85, 0x17, - 0xc5, 0x0a, 0xac, 0x40, 0x45, 0x69, 0x67, 0x7f, 0xe8, 0x05, 0x20, 0xa7, - 0xf4, 0x25, 0x85, 0x49, 0x79, 0x28, 0xd8, 0xb4, 0xe7, 0xbb, 0xc8, 0xd5, - 0x1e, 0x8f, 0xcc, 0x33, 0x8b, 0xff, 0x01, 0x1c, 0xca, 0x8a, 0xc0, 0xf4, - 0x2d, 0x9d, 0x91, 0x7e, 0x77, 0x3c, 0x89, 0xe4, 0xe7, 0xa6, 0x4b, 0x06, - 0x94, 0x88, 0x05, 0x58, 0x09, 0x81, 0x44, 0x60, 0x54, 0xa5, 0x34, 0x2a, - 0xba, 0xea, 0xdb, 0xe6, 0x18, 0x82, 0x44, 0x6f, 0xe4, 0x1d, 0x47, 0x2f, - 0xe6, 0x8c, 0x4d, 0xcf, 0x50, 0x2d, 0xde, 0x28, 0x21, 0xb3, 0x05, 0x18, - 0xb5, 0x55, 0x09, 0x34, 0x56, 0xbf, 0x54, 0x40, 0xb3, 0x34, 0x58, 0x40, - 0x1f, 0x0d, 0xa3, 0xf6, 0xfa, 0xa7, 0xa5, 0x3d, 0x49, 0xdd, 0x99, 0x98, - 0x02, 0x34, 0xd9, 0x92, 0xb3, 0x77, 0x0c, 0x01, 0xc2, 0x9d, 0x47, 0xbe, - 0xe9, 0x6a, 0x0e, 0x73, 0xd1, 0xa2, 0x64, 0x6a, 0x2e, 0x3e, 0xc0, 0x1b, - 0x3e, 0x5f, 0x68, 0x85, 0x40, 0x50, 0xa3, 0xa5, 0x24, 0x4d, 0x85, 0x75, - 0x41, 0xbf, 0x75, 0x63, 0x9e, 0xcb, 0xbb, 0xbc, 0x6a, 0xe3, 0xe7, 0xb3, - 0x00, 0x15, 0xa1, 0xd0, 0x24, 0xbe, 0x58, 0xb6, 0x0b, 0xae, 0x4c, 0x0b, - 0x5e, 0x18, 0x32, 0xd4, 0xc3, 0x0a, 0xf1, 0xf7, 0x91, 0xde, 0xb2, 0x45, - 0xa0, 0x12, 0xba, 0x42, 0xb5, 0x62, 0x2b, 0x96, 0x1f, 0x2e, 0xcc, 0x64, - 0xb7, 0x34, 0x43, 0xa5, 0x64, 0xe7, 0x70, 0x8a, 0x8a, 0x7c, 0xe5, 0x37, - 0x22, 0x66, 0xb1, 0x93, 0x0b, 0xf9, 0x42, 0x55, 0x61, 0xa3, 0xb3, 0x4d, - 0x70, 0xf7, 0xf7, 0x68, 0xff, 0xa1, 0xc4, 0x00, 0xdd, 0xfc, 0x44, 0xf2, - 0x74, 0xc3, 0xec, 0x4b, 0x9a, 0xbb, 0xeb, 0x44, 0x73, 0x3e, 0x25, 0x26, - 0x37, 0xec, 0x3c, 0xae, 0x00, 0x1d, 0x1b, 0x64, 0x79, 0xb4, 0x29, 0x63, - 0x21, 0x65, 0xce, 0x6f, 0x1e, 0x6e, 0x68, 0xa6, 0xb4, 0xa1, 0xc7, 0x79, - 0xf0, 0xf2, 0x9a, 0x7b, 0x5e, 0x67, 0x3a, 0xa4, 0xf7, 0x6d, 0x11, 0x35, - 0xb9, 0x33, 0x87, 0xa6, 0x4b, 0xac, 0x34, 0x8b, 0x8d, 0xe0, 0x91, 0xd7, - 0xec, 0xc7, 0xa1, 0x6c, 0x50, 0x4c, 0x3a, 0xd1, 0x93, 0x20, 0xd2, 0x35, - 0x9b, 0x39, 0x4a, 0x32, 0x12, 0x10, 0x68, 0xd4, 0x84, 0x41, 0xa7, 0x8a, - 0xf7, 0x3d, 0x9d, 0x64, 0xc7, 0x02, 0x39, 0x94, 0x6c, 0xba, 0x56, 0xd4, - 0x5a, 0x26, 0xb4, 0x9c, 0x92, 0x65, 0xd4, 0x95, 0xb1, 0xa9, 0xfb, 0x02, - 0xdc, 0xed, 0xee, 0x7b, 0x3e, 0x62, 0x18, 0xbc, 0x03, 0xc7, 0xdc, 0x95, - 0xee, 0x1f, 0xa5, 0x92, 0x5b, 0xbd, 0x16, 0xac, 0xfd, 0x91, 0x0a, 0xa5, - 0xa8, 0xa3, 0xcc, 0xcc, 0xf3, 0xe1, 0xe4, 0x21, 0xa6, 0x26, 0xb5, 0xa0, - 0x6f, 0xbe, 0x23, 0x61, 0xe7, 0x64, 0x05, 0x9f, 0xa4, 0x55, 0xfc, 0xb3, - 0x5d, 0x3b, 0x4c, 0x58, 0x3e, 0x5c, 0xfc, 0xdd, 0xcf, 0xa0, 0x06, 0x9d, - 0x50, 0x35, 0x7a, 0x32, 0xd1, 0x7c, 0x33, 0x6d, 0x36, 0x78, 0x56, 0xb7, - 0x4c, 0xf3, 0x0e, 0x80, 0xbd, 0x66, 0xf0, 0xdd, 0x34, 0x9c, 0xec, 0xab, - 0xf2, 0x4c, 0x9a, 0xaf, 0xa9, 0x67, 0x58, 0x70, 0x4c, 0xde, 0xe5, 0x44, - 0xc8, 0x74, 0x72, 0xe2, 0x00, 0x5b, 0x08, 0xc0, 0x58, 0x99, 0x7e, 0x5c, - 0x5e, 0x05, 0xd3, 0x51, 0xb1, 0x7b, 0x82, 0x41, 0xff, 0xf4, 0x3e, 0xfe, - 0x4c, 0xe0, 0x9c, 0x08, 0x7e, 0x63, 0x6d, 0x9e, 0xc0, 0xdd, 0x9a, 0xb4, - 0xae, 0xcf, 0xb8, 0x9e, 0x4a, 0x6c, 0xd5, 0x87, 0xab, 0x7b, 0x15, 0xd2, - 0x1f, 0x6f, 0xcc, 0x7d, 0x54, 0x3c, 0x6f, 0x3c, 0xf3, 0xd6, 0xd7, 0x6f, - 0x1d, 0x85, 0x26, 0x7f, 0x2a, 0x79, 0x0c, 0x1f, 0xdf, 0xdf, 0xf6, 0x68, - 0x58, 0xfd, 0x51, 0x0d, 0x82, 0x4f, 0xa6, 0xc3, 0xc3, 0x08, 0x3d, 0x4a, - 0xec, 0xb6, 0x26, 0xc6, 0xdc, 0xe4, 0xc8, 0xa8, 0x9d, 0x74, 0x4a, 0x07, - 0xff, 0x72, 0xff, 0x03, 0xb0, 0x71, 0x1c, 0x47, 0xdf, 0xfb, 0xf8, 0x1e, - 0x54, 0xea, 0xa0, 0xe8, 0x21, 0x3f, 0xc4, 0xa7, 0xfd, 0xab, 0x70, 0x34, - 0xcc, 0x09, 0x4a, 0xb8, 0x4f, 0x1b, 0x9d, 0xa8, 0x05, 0x9e, 0x78, 0x8a, - 0x44, 0x05, 0x8e, 0x66, 0x4e, 0xf0, 0xdc, 0xe3, 0xbf, 0x4f, 0xd9, 0xe2, - 0x6f, 0x9b, 0x5c, 0x51, 0xfc, 0xb6, 0xc9, 0x4a, 0x09, 0x7d, 0x79, 0x2b, - 0x2f, 0x49, 0xd0, 0x11, 0xca, 0x57, 0x03, 0xd8, 0x86, 0x2c, 0xb9, 0xdb, - 0xfb, 0x52, 0x6b, 0xac, 0xf9, 0x7e, 0x94, 0x73, 0xc9, 0xd0, 0x52, 0xab, - 0x71, 0xec, 0x7e, 0xb2, 0x7f, 0xda, 0x4f, 0xe4, 0xde, 0xc7, 0xba, 0xcc, - 0x5e, 0x9f, 0x8a, 0x35, 0x99, 0x80, 0xb8, 0x9d, 0xbf, 0x80, 0x2b, 0xa0, - 0x75, 0x8a, 0x60, 0x74, 0x31, 0xe2, 0x71, 0x1f, 0xd9, 0xc5, 0x3a, 0xf9, - 0x2e, 0x3d, 0x18, 0xe4, 0xaa, 0xd3, 0x62, 0x97, 0x4a, 0xd7, 0x0c, 0xbb, - 0x33, 0xdc, 0x62, 0x09, 0x9b, 0x07, 0xd3, 0x9d, 0xc1, 0xb7, 0x6b, 0x00, - 0x2b, 0x32, 0x9a, 0x6b, 0x9e, 0xfe, 0xbb, 0xb0, 0xb0, 0x00, 0x72, 0x12, - 0xac, 0x72, 0xed, 0xa7, 0xaf, 0xb7, 0xf3, 0x75, 0x9c, 0xb8, 0x15, 0x7f, - 0x2d, 0x23, 0x26, 0x0d, 0x76, 0xf5, 0x5e, 0xbe, 0xa4, 0xb2, 0x82, 0xe8, - 0xd8, 0x97, 0x36, 0xdb, 0xba, 0xaa, 0x47, 0x06, 0x1f, 0x57, 0x7d, 0x70, - 0x09, 0xe5, 0x31, 0xf2, 0xb2, 0x0e, 0x00, 0xcb, 0x34, 0x74, 0x10, 0x0f, - 0x98, 0xa5, 0xfe, 0x75, 0x8a, 0xd5, 0x0c, 0x6c, 0xc6, 0x59, 0xa0, 0xf2, - 0x0f, 0x67, 0x01, 0xfe, 0xa4, 0x99, 0xb1, 0x04, 0xc8, 0xd6, 0xbe, 0xa8, - 0x90, 0x24, 0x69, 0xa4, 0x4b, 0x63, 0x45, 0xfd, 0x4f, 0x17, 0x85, 0x42, - 0xdb, 0x69, 0xc3, 0xbd, 0xd6, 0xf4, 0xab, 0x96, 0xa1, 0xbf, 0x8b, 0xa7, - 0x23, 0x16, 0xc1, 0x31, 0x88, 0x14, 0xd7, 0x60, 0xe0, 0xe3, 0x16, 0xd2, - 0xa0, 0x44, 0x0e, 0xdc, 0x53, 0x50, 0xfb, 0xa0, 0x83, 0xfd, 0x69, 0xa7, - 0x86, 0x58, 0x35, 0x74, 0xc2, 0xa2, 0x8e, 0x89, 0x31, 0x07, 0xf5, 0x3b, - 0xd5, 0xa4, 0xc0, 0xd7, 0x8a, 0x37, 0x98, 0x2f, 0x7e, 0x9e, 0xe8, 0x19, - 0xd7, 0x6a, 0x0b, 0x74, 0x3f, 0x38, 0xd0, 0x32, 0xeb, 0xd1, 0x59, 0xea, - 0x24, 0x35, 0x7e, 0x27, 0xd0, 0xcd, 0x2f, 0x4e, 0x49, 0x07, 0xd7, 0xab, - 0x48, 0xc7, 0x10, 0x9f, 0xa7, 0x90, 0x84, 0x43, 0x1e, 0x55, 0x2f, 0x04, - 0x97, 0x42, 0x4a, 0x42, 0x4f, 0xc7, 0x48, 0xd5, 0x40, 0x8b, 0x03, 0x5b, - 0x4a, 0xb6, 0x35, 0xf9, 0x18, 0x0a, 0xc4, 0x1f, 0x79, 0x5c, 0xe0, 0xf7, - 0x41, 0x9c, 0x07, 0x89, 0xd0, 0x47, 0x4f, 0x78, 0xc3, 0x36, 0x17, 0x23, - 0x88, 0xa9, 0x3e, 0x61, 0x71, 0xf4, 0xb5, 0x3c, 0x48, 0x8c, 0xee, 0x98, - 0x3d, 0x2f, 0x6f, 0x6c, 0x9d, 0x37, 0x07, 0xcd, 0xe3, 0xf4, 0x2f, 0x59, - 0x3b, 0x61, 0xfc, 0xcd, 0x0c, 0xcd, 0xbe, 0x16, 0xd5, 0xd8, 0x75, 0x66, - 0x7e, 0xe9, 0xea, 0x0a, 0xee, 0xe4, 0xb6, 0x5c, 0x80, 0xad, 0x76, 0x1f, - 0x6e, 0x97, 0x00, 0x78, 0xfc, 0xe2, 0x4c, 0x22, 0x12, 0x82, 0xfc, 0x85, - 0xd5, 0x0d, 0x4b, 0x99, 0x06, 0x84, 0xf9, 0x38, 0x0c, 0xa6, 0x42, 0x5e, - 0x58, 0xe6, 0x68, 0x1f, 0x86, 0x91, 0x2f, 0x71, 0x8c, 0x1f, 0x59, 0x8d, - 0xeb, 0xd8, 0xc8, 0x2a, 0xab, 0xd5, 0xad, 0xb2, 0x70, 0x66, 0x72, 0x52, - 0xbb, 0xc2, 0xb4, 0x2a, 0x3d, 0xae, 0x71, 0xb9, 0x29, 0xcc, 0x53, 0xc8, - 0x89, 0xf2, 0xf7, 0xfc, 0xec, 0x1a, 0x9d, 0xa1, 0xa9, 0xa4, 0x1d, 0xdd, - 0x92, 0x5b, 0x36, 0x39, 0x15, 0x57, 0xc1, 0xf2, 0xbb, 0x8c, 0x0b, 0x7f, - 0x2f, 0x11, 0x6c, 0x7a, 0x1b, 0xec, 0x69, 0x7f, 0xf9, 0xfb, 0xd0, 0xf9, - 0x23, 0xc8, 0x40, 0x64, 0xdc, 0x30, 0xcb, 0xc5, 0x62, 0xca, 0x49, 0x52, - 0x97, 0xf7, 0x90, 0x72, 0x10, 0xb5, 0xea, 0x68, 0xe8, 0x9e, 0x90, 0xd0, - 0x9b, 0xe1, 0xd4, 0x0b, 0xc6, 0xd7, 0xfe, 0x2b, 0xe0, 0x74, 0xe1, 0xb8, - 0x46, 0xd3, 0x75, 0x8a, 0x60, 0x91, 0x79, 0x08, 0x0b, 0x34, 0xd9, 0x6c, - 0x8a, 0x51, 0x94, 0x37, 0x74, 0x88, 0x96, 0x44, 0xb0, 0x26, 0x54, 0x2a, - 0x0b, 0xa9, 0xbc, 0xb7, 0x0d, 0xff, 0x15, 0x99, 0x1c, 0x02, 0xb7, 0x5d, - 0x4f, 0x16, 0x7c, 0xdd, 0x15, 0xa6, 0x72, 0x1e, 0x6c, 0x28, 0xd6, 0x43, - 0xcc, 0x75, 0xb3, 0x1e, 0x0e, 0x6b, 0xa3, 0xef, 0xd4, 0x01, 0xab, 0x00, - 0xda, 0xc9, 0xd4, 0x96, 0xa4, 0x85, 0x37, 0x96, 0x93, 0xbf, 0x44, 0x1f, - 0x36, 0x77, 0xba, 0x08, 0xf4, 0x58, 0x29, 0xf3, 0x6b, 0xd8, 0x11, 0x57, - 0xf2, 0xf6, 0x0e, 0xa8, 0x8e, 0x0b, 0xea, 0x1d, 0xaa, 0xe1, 0x09, 0x35, - 0x03, 0x65, 0x57, 0x0f, 0x66, 0x8d, 0xf0, 0xe9, 0x1e, 0xa3, 0xc3, 0x65, - 0x95, 0x0c, 0x4d, 0x42, 0x95, 0x89, 0x75, 0xd8, 0xa1, 0x03, 0xe8, 0x19, - 0x2a, 0xe0, 0x88, 0x90, 0xc8, 0x7a, 0x73, 0x32, 0xd8, 0xb1, 0x30, 0x6f, - 0xaf, 0x5f, 0x55, 0xf2, 0x44, 0x19, 0x8d, 0xfb, 0x4a, 0xfa, 0x95, 0x31, - 0xea, 0xa0, 0xf1, 0xe2, 0xed, 0xa2, 0xd0, 0xbb, 0x26, 0x57, 0x5f, 0x55, - 0x89, 0x97, 0xdc, 0x17, 0x88, 0x3e, 0x2c, 0xb7, 0xdc, 0xb6, 0x6b, 0xaa, - 0x1b, 0x6f, 0x34, 0x55, 0x1d, 0x0d, 0x51, 0xa0, 0xb3, 0x95, 0x84, 0x4a, - 0x64, 0x83, 0xc1, 0x91, 0x71, 0x49, 0x94, 0x3b, 0x41, 0x3d, 0xa4, 0x81, - 0xf0, 0x4a, 0x6a, 0xcf, 0xcf, 0x79, 0x3f, 0xdb, 0xce, 0x37, 0xd0, 0xab, - 0x05, 0x3f, 0xc7, 0x76, 0xf3, 0x64, 0x8d, 0x2a, 0x7e, 0xbd, 0x0f, 0xc6, - 0xc9, 0xd5, 0x7e, 0x5c, 0x9a, 0xd1, 0x22, 0x44, 0x28, 0x43, 0xd1, 0x7a, - 0x49, 0xe6, 0x3d, 0x2f, 0x55, 0xb6, 0x73, 0xfe, 0xb1, 0x53, 0x4b, 0x11, - 0x2f, 0x3d, 0x8c, 0x2f, 0xba, 0x8b, 0x80, 0x85, 0xb3, 0x34, 0xb1, 0x07, - 0x54, 0x43, 0xee, 0x4d, 0xdf, 0x95, 0x87, 0x8f, 0xe2, 0xc1, 0x30, 0xf1, - 0x62, 0xe6, 0x03, 0x7b, 0x8d, 0xa5, 0x66, 0xed, 0x5b, 0xb0, 0xf6, 0x7f, - 0x6c, 0xd1, 0xad, 0xf8, 0x7f, 0x4b, 0x51, 0x89, 0x11, 0xcb, 0x19, 0x8e, - 0x47, 0x0d, 0x21, 0x2f, 0x83, 0xa9, 0x12, 0x0b, 0x2e, 0xf8, 0x8b, 0x9b, - 0xe6, 0xb3, 0x27, 0xd5, 0xe8, 0x29, 0xae, 0x83, 0x2d, 0xb7, 0x34, 0xc3, - 0x07, 0x15, 0xb6, 0x20, 0xdf, 0x21, 0x62, 0x0d, 0xd8, 0x3c, 0x91, 0xd2, - 0x49, 0x39, 0xe5, 0x1f, 0x69, 0xf2, 0xfd, 0x6e, 0xdc, 0x33, 0xfc, 0xe2, - 0x04, 0x73, 0xdd, 0x50, 0x8e, 0x6b, 0x69, 0xe5, 0x19, 0x41, 0x77, 0xfc, - 0xb2, 0x85, 0x9a, 0x2c, 0xb8, 0xd1, 0x7b, 0xb5, 0x7b, 0xb2, 0xe8, 0x11, - 0x30, 0x89, 0x9d, 0x0f, 0x88, 0xc9, 0x78, 0xce, 0x2d, 0x6e, 0x4f, 0xb6, - 0xaa, 0xe1, 0xca, 0x7f, 0x4b, 0x85, 0xf5, 0x5b, 0xf2, 0x2c, 0xfe, 0x7f, - 0xd9, 0x25, 0xca, 0xc9, 0x6b, 0xae, 0x81, 0xa2, 0x0f, 0x82, 0xe4, 0x7d, - 0xcf, 0xd0, 0x92, 0x21, 0xdc, 0x45, 0xee, 0x7b, 0x67, 0x19, 0x73, 0x72, - 0x29, 0xa1, 0x6d, 0x67, 0xb3, 0x9f, 0xc8, 0x39, 0xbc, 0x7d, 0xeb, 0x96, - 0x96, 0xa1, 0xf8, 0xe1, 0xab, 0xf0, 0x9a, 0x18, 0xb3, 0xf7, 0x31, 0xd4, - 0x35, 0x5a, 0x82, 0xc6, 0x13, 0xe6, 0xb1, 0x1e, 0xdd, 0xc4, 0x70, 0xc6, - 0x54, 0x97, 0x6b, 0x9c, 0xda, 0xe1, 0x25, 0xa4, 0x87, 0x2d, 0xab, 0x78, - 0x0c, 0xb7, 0x99, 0x0f, 0x21, 0x0e, 0xac, 0xe1, 0x35, 0x76, 0xb6, 0x9e, - 0x1d, 0x60, 0x49, 0x05, 0x0c, 0xee, 0x17, 0x50, 0x34, 0x51, 0xa4, 0xff, - 0x17, 0xad, 0xcb, 0xe2, 0xf7, 0x09, 0x99, 0xf9, 0x54, 0xf8, 0xe9, 0xb9, - 0xa9, 0x72, 0x1a, 0xc7, 0x92, 0xdd, 0x54, 0x75, 0x72, 0x86, 0xbb, 0xff, - 0xd5, 0x8d, 0x6f, 0x30, 0xd3, 0xef, 0xd8, 0x0b, 0x1f, 0x38, 0x6c, 0x1e, - 0x4e, 0x54, 0x26, 0x57, 0x71, 0x6b, 0x6d, 0x82, 0x2d, 0x02, 0xac, 0xd8, - 0xd9, 0xa7, 0x67, 0x79, 0x39, 0x3c, 0x82, 0x2a, 0x8a, 0x6e, 0x76, 0x9e, - 0x67, 0xe8, 0x9b, 0xb7, 0x68, 0x1e, 0x50, 0xcf, 0x50, 0x62, 0x61, 0x84, - 0xe2, 0x2f, 0x10, 0xb7, 0xc9, 0x40, 0x90, 0x63, 0x68, 0x4b, 0x4d, 0x20, - 0x09, 0xdc, 0x7a, 0x1a, 0xb8, 0x64, 0x25, 0xaf, 0xac, 0x60, 0x49, 0x30, - 0xbb, 0xeb, 0xe3, 0xe9, 0x03, 0x66, 0x4e, 0xf1, 0x7f, 0xa3, 0x89, 0x21, - 0xff, 0xce, 0xd9, 0xc7, 0xb0, 0x2c, 0x9a, 0xb5, 0x97, 0x11, 0x45, 0xf9, - 0x59, 0xf0, 0xff, 0x7a, 0x75, 0xdf, 0x91, 0xc4, 0xa0, 0x24, 0x59, 0x52, - 0x77, 0x4a, 0x5c, 0x26, 0xbc, 0x03, 0xe8, 0x9b, 0x21, 0x38, 0xb8, 0xe0, - 0x0e, 0x95, 0xc1, 0x4d, 0x03, 0x07, 0xf5, 0xae, 0x7b, 0x6a, 0x28, 0xbf, - 0x3b, 0x76, 0x0f, 0x59, 0x72, 0x7d, 0xf0, 0x3c, 0xae, 0x46, 0xe9, 0xcd, - 0x48, 0x34, 0x8a, 0xa2, 0xe7, 0x29, 0x27, 0x9b, 0xed, 0x3e, 0x19, 0x59, - 0x7c, 0x49, 0x8e, 0xf3, 0x8b, 0x48, 0xbf, 0xd5, 0xa7, 0xf3, 0x5f, 0xff, - 0xda, 0x0d, 0xc2, 0x6f, 0x50, 0xf7, 0xc6, 0x13, 0x6b, 0x3d, 0x00, 0x69, - 0x23, 0x97, 0x6d, 0x12, 0xaa, 0xd2, 0xff, 0x8c, 0x58, 0x1e, 0x3d, 0x93, - 0x84, 0x7e, 0xeb, 0xd5, 0xec, 0xf2, 0x7a, 0x02, 0x00, 0x71, 0x18, 0x6d, - 0x4a, 0x7a, 0x54, 0x25, 0x8b, 0x4e, 0x8b, 0xad, 0xa1, 0xbd, 0x4a, 0xaa, - 0xbd, 0x54, 0x54, 0xdb, 0x24, 0x47, 0x18, 0xc9, 0x0c, 0xee, 0x8c, 0x69, - 0x99, 0x85, 0x99, 0x75, 0x1f, 0x05, 0xa7, 0xa8, 0x8b, 0xcc, 0xb1, 0xf6, - 0xe4, 0x00, 0xcb, 0xa8, 0x8d, 0xf3, 0xf0, 0xc9, 0x98, 0xbf, 0xf2, 0x91, - 0x5f, 0xbd, 0x2b, 0x41, 0x7a, 0x41, 0xe6, 0x69, 0x65, 0xd7, 0xfb, 0xf2, - 0xc2, 0x4b, 0x80, 0x2d, 0xa8, 0x3c, 0xed, 0x91, 0xca, 0x63, 0xb1, 0xf8, - 0xf6, 0x31, 0x95, 0xfe, 0xa0, 0xc6, 0xc2, 0xf6, 0xa3, 0xa9, 0x22, 0x90, - 0xd7, 0x0d, 0xa5, 0xdd, 0x08, 0xd6, 0xe2, 0x3d, 0x41, 0x0c, 0xb2, 0xfb, - 0x34, 0x3a, 0x67, 0x4b, 0x71, 0xe6, 0x56, 0x44, 0x52, 0x44, 0x74, 0xdb, - 0xff, 0x8b, 0x72, 0xbf, 0x2f, 0x1e, 0xb3, 0x8f, 0xd5, 0xaf, 0x7e, 0xd8, - 0x55, 0xd9, 0x52, 0xbe, 0xcf, 0x06, 0x0f, 0x55, 0xd5, 0x70, 0x29, 0x49, - 0x30, 0x07, 0x32, 0xa1, 0x0f, 0x78, 0x4b, 0x55, 0x8f, 0x54, 0xfd, 0x1f, - 0x08, 0xb3, 0x9c, 0xcc, 0xb6, 0xb7, 0xbc, 0x89, 0x54, 0xb3, 0x0e, 0x9b, - 0xbb, 0x39, 0x46, 0x59, 0x45, 0x94, 0x34, 0x17, 0x8f, 0x83, 0x28, 0x70, - 0x50, 0x8d, 0x0f, 0xc4, 0x7a, 0x5b, 0x43, 0x96, 0x3d, 0x0a, 0x7c, 0xeb, - 0x68, 0x70, 0xb9, 0x33, 0x0d, 0x49, 0x1f, 0x8c, 0x0c, 0x37, 0x69, 0x65, - 0xa6, 0x54, 0xf3, 0xba, 0xee, 0xe0, 0x0e, 0xc1, 0x4f, 0x30, 0xbe, 0x09, - 0xc6, 0x6d, 0x39, 0xea, 0x09, 0x01, 0x63, 0x53, 0xf5, 0xdd, 0x1b, 0x51, - 0x1a, 0x9b, 0x33, 0x1d, 0x19, 0x0d, 0x90, 0x1e, 0x29, 0x89, 0x0a, 0xe1, - 0xa4, 0xbe, 0x94, 0x67, 0xda, 0xfd, 0x24, 0x0d, 0xd8, 0x00, 0xa2, 0x04, - 0x67, 0x9c, 0x90, 0xaf, 0xb9, 0xf4, 0xbb, 0x8e, 0xdd, 0xc0, 0xbc, 0x61, - 0x18, 0xca, 0x7a, 0x20, 0xe7, 0xb2, 0x42, 0xa9, 0xb1, 0x18, 0xe4, 0x32, - 0x5c, 0xba, 0x60, 0x2c, 0x2c, 0xfc, 0x2c, 0x1f, 0x8b, 0x03, 0x9f, 0xaa, - 0x8a, 0x92, 0xa7, 0xb0, 0xbf, 0x0a, 0x3b, 0x73, 0x7d, 0xd3, 0x18, 0xf5, - 0xe1, 0xf5, 0xd6, 0xe7, 0x9d, 0x59, 0x9a, 0x45, 0xf4, 0x5e, 0xeb, 0x77, - 0xc1, 0x8c, 0x4d, 0x16, 0x73, 0xaa, 0x08, 0x9d, 0x11, 0x57, 0xc1, 0x06, - 0xce, 0xa3, 0xc4, 0xed, 0xfe, 0x91, 0x8c, 0xf6, 0x2d, 0x07, 0xaa, 0x16, - 0xd3, 0x84, 0x11, 0xe6, 0x6d, 0x06, 0x66, 0x33, 0xa4, 0xe5, 0xd9, 0xee, - 0xfd, 0xdc, 0x18, 0xd8, 0x21, 0x3c, 0xcb, 0xf7, 0xa8, 0x39, 0x5a, 0x91, - 0xd1, 0x4b, 0x31, 0x2d, 0x6b, 0xa1, 0x6f, 0x96, 0xa3, 0x83, 0x2a, 0x3b, - 0xc1, 0xa0, 0x20, 0xb6, 0xa3, 0x60, 0xce, 0x4d, 0xf2, 0xb3, 0xce, 0x77, - 0xfe, 0x43, 0x4b, 0x6a, 0xc9, 0x4a, 0xe5, 0xe9, 0x83, 0xb9, 0xb2, 0x17, - 0x10, 0x3a, 0xae, 0xaa, 0x00, 0xc2, 0x8d, 0x06, 0xf3, 0x43, 0x98, 0x53, - 0x23, 0x23, 0x5e, 0x5b, 0x4b, 0xb5, 0xa8, 0xd4, 0x90, 0x33, 0x55, 0x58, - 0xc0, 0xb8, 0x8e, 0x46, 0xca, 0x5c, 0x94, 0x15, 0x81, 0xa9, 0xf4, 0x2a, - 0xb9, 0xc5, 0xbe, 0x8e, 0x4d, 0x13, 0xd2, 0x5a, 0x4c, 0x1f, 0x59, 0x99, - 0xb3, 0x80, 0x2d, 0x69, 0xe9, 0x09, 0x2d, 0x77, 0xcd, 0xb6, 0x6a, 0x15, - 0xe1, 0x37, 0xb6, 0x25, 0xd3, 0x32, 0xef, 0xd2, 0x2b, 0xcc, 0x61, 0x69, - 0xc3, 0x46, 0x74, 0x53, 0xb4, 0x3c, 0x46, 0x1f, 0xfe, 0x95, 0x86, 0x70, - 0xe8, 0x2d, 0xcb, 0x9b, 0xb9, 0x28, 0x7c, 0x5b, 0xec, 0x68, 0x19, 0x58, - 0x8d, 0xd7, 0x51, 0x05, 0x1f, 0x17, 0x87, 0x4f, 0x97, 0xea, 0x7b, 0xfb, - 0xae, 0xe2, 0x86, 0x1d, 0x0d, 0x70, 0x43, 0x05, 0xe5, 0x9a, 0x86, 0x56, - 0xbb, 0x0d, 0x78, 0x3e, 0xa2, 0x75, 0xe4, 0x8a, 0x06, 0x1e, 0x7a, 0x56, - 0x9e, 0x85, 0x99, 0xe0, 0x41, 0xb9, 0x6b, 0xef, 0xee, 0x72, 0x82, 0x87, - 0xa4, 0xfd, 0x43, 0x0f, 0x5d, 0xb8, 0xc5, 0x1a, 0xe4, 0x7d, 0x5c, 0xce, - 0x76, 0x10, 0x05, 0x4a, 0x2a, 0x2c, 0x2c, 0x5b, 0xa0, 0x85, 0x13, 0xfa, - 0x55, 0x84, 0x02, 0x94, 0x0f, 0x78, 0x9d, 0x77, 0x8c, 0x36, 0x83, 0x94, - 0x63, 0xc2, 0xf4, 0xf7, 0x5b, 0x25, 0x10, 0xf8, 0x01, 0x67, 0x9e, 0x8c, - 0x07, 0xb0, 0xd2, 0xbe, 0x7a, 0x3c, 0x1a, 0x2e, 0x87, 0x0e, 0x2a, 0x9f, - 0xb2, 0x64, 0x9f, 0x8f, 0xbc, 0xe2, 0xe7, 0x00, 0xb2, 0xf4, 0x1e, 0xae, - 0xad, 0xd2, 0x79, 0xf7, 0x98, 0xdd, 0xa1, 0x73, 0xbc, 0x89, 0x31, 0xec, - 0x6b, 0x79, 0x97, 0x75, 0xd8, 0xd0, 0x68, 0x7b, 0xd5, 0xc9, 0x34, 0x41, - 0x6c, 0xb0, 0x73, 0x63, 0xbf, 0xda, 0xbb, 0x3c, 0xf9, 0xe4, 0xa8, 0x1b, - 0xeb, 0x6b, 0xd8, 0xcc, 0xb9, 0x03, 0xbb, 0xbd, 0xe1, 0x98, 0x81, 0x20, - 0x37, 0x47, 0x57, 0x56, 0x01, 0x7b, 0xb5, 0xc7, 0x4f, 0x82, 0x12, 0x56, - 0xaa, 0x09, 0x5c, 0x41, 0x21, 0x99, 0x05, 0x48, 0x9b, 0x4e, 0xe9, 0x75, - 0x5f, 0x77, 0x7c, 0x64, 0xb6, 0xee, 0x62, 0xb0, 0x62, 0x9b, 0x76, 0x2a, - 0xb5, 0x3d, 0x67, 0xbc, 0x77, 0x8a, 0xd5, 0x2c, 0x91, 0x46, 0x73, 0x96, - 0x0f, 0xf7, 0x60, 0x77, 0x29, 0x0c, 0xa1, 0x87, 0x47, 0x4f, 0x05, 0xe5, - 0xb3, 0xf0, 0x9a, 0x71, 0x03, 0x06, 0xeb, 0xba, 0xb7, 0x79, 0xae, 0x79, - 0x0e, 0x1a, 0x71, 0xd9, 0xcb, 0x98, 0x78, 0x11, 0x18, 0xd0, 0xd5, 0x8b, - 0x70, 0x9a, 0x84, 0x00, 0xbd, 0x75, 0x65, 0x92, 0xef, 0xa5, 0x16, 0x77, - 0x8f, 0xaf, 0x53, 0x4b, 0x11, 0x35, 0x03, 0x0f, 0xc6, 0xf8, 0x87, 0x79, - 0xd4, 0xb1, 0xc2, 0xc4, 0x8d, 0x66, 0x4c, 0xa7, 0x90, 0xc7, 0x7d, 0x61, - 0x35, 0x0b, 0x38, 0xe2, 0x78, 0x5f, 0xd9, 0xa3, 0x00, 0x72, 0x77, 0x71, - 0xc5, 0x0e, 0xbc, 0x42, 0x23, 0x77, 0x12, 0x05, 0xd1, 0xa6, 0xa0, 0x93, - 0x45, 0xe9, 0xf2, 0x55, 0x5d, 0x3d, 0x5a, 0x31, 0x5f, 0x41, 0xac, 0x52, - 0x6f, 0x2e, 0x2b, 0xa5, 0xf7, 0x48, 0x00, 0xa6, 0x95, 0x6f, 0x5e, 0x9a, - 0x37, 0x31, 0x15, 0x30, 0xbf, 0xe5, 0x24, 0xcb, 0x8b, 0x26, 0x35, 0x41, - 0x9e, 0x11, 0x2a, 0x5b, 0xc3, 0x74, 0xb6, 0xd5, 0x8c, 0xdc, 0x65, 0x9e, - 0x8c, 0x27, 0x01, 0x0f, 0x79, 0x7a, 0x12, 0xa8, 0x4e, 0x91, 0x77, 0xdc, - 0x78, 0x4b, 0xa3, 0xcc, 0xa3, 0xab, 0x71, 0x20, 0x18, 0x2a, 0xb3, 0xec, - 0xd6, 0xdc, 0x2f, 0x1e, 0x48, 0xbd, 0x3f, 0x09, 0x98, 0xb8, 0x77, 0x96, - 0xd7, 0x64, 0x9a, 0x11, 0x32, 0x25, 0x38, 0xe7, 0xfa, 0x6b, 0x96, 0x87, - 0xa2, 0x47, 0x4b, 0xe8, 0x98, 0xd0, 0x40, 0x00, 0x00, 0x09, 0x7a, 0x14, - 0xce, 0x46, 0x81, 0xce, 0x36, 0x5e, 0x30, 0xed, 0xbf, 0x3f, 0xbe, 0x3b, - 0x1d, 0xde, 0x70, 0x1a, 0x3f, 0xf2, 0x8c, 0x0b, 0x90, 0x90, 0xad, 0x64, - 0x6b, 0xbf, 0xff, 0xa2, 0x34, 0xb0, 0x9d, 0x24, 0xc1, 0x0e, 0x21, 0xa6, - 0xc7, 0xde, 0x89, 0x9c, 0x5d, 0x48, 0xc0, 0xd4, 0x5f, 0x19, 0x39, 0x60, - 0x4e, 0xea, 0xf5, 0xe1, 0xa9, 0xe4, 0xa3, 0x1b, 0xf2, 0x2b, 0xb8, 0x00, - 0x03, 0x99, 0x4b, 0xd7, 0x9a, 0xf1, 0x5b, 0x58, 0xbb, 0xc7, 0xb1, 0x70, - 0xb0, 0x08, 0x73, 0xe0, 0xd3, 0x17, 0xe7, 0x51, 0x1e, 0xa4, 0x05, 0x43, - 0x6f, 0x3d, 0x2a, 0x70, 0x88, 0x3f, 0xd8, 0xd9, 0x2e, 0x3d, 0x25, 0x8e, - 0x4d, 0x6c, 0x8c, 0xdb, 0x89, 0x2c, 0x0b, 0x6a, 0xea, 0x07, 0x41, 0xac, - 0x60, 0x62, 0x63, 0xfe, 0x4a, 0x5e, 0x1f, 0x70, 0x9f, 0x02, 0x40, 0x99, - 0x6d, 0x55, 0xef, 0x61, 0xe0, 0x8f, 0xae, 0x7b, 0x00, 0xea, 0x70, 0x62, - 0x3b, 0x17, 0x3a, 0x66, 0xe2, 0x16, 0xb2, 0xd6, 0x05, 0xc8, 0xb4, 0xe7, - 0xd6, 0x71, 0x33, 0x1b, 0x19, 0x93, 0xf9, 0x40, 0xff, 0x4f, 0x55, 0xb5, - 0x47, 0xce, 0x91, 0x47, 0x95, 0xd0, 0x69, 0x8f, 0x4d, 0xf3, 0x89, 0x7a, - 0x0a, 0xa7, 0x0f, 0x56, 0x41, 0x67, 0x64, 0x3a, 0x16, 0x83, 0xe3, 0xb0, - 0xd8, 0x04, 0x55, 0x54, 0x35, 0xae, 0x90, 0xcd, 0x93, 0x2e, 0x69, 0x56, - 0xfa, 0xa2, 0xdb, 0xa2, 0xb2, 0x56, 0xee, 0xf1, 0x22, 0x8a, 0xe9, 0x9b, - 0x33, 0x2d, 0xa4, 0x19, 0x29, 0x78, 0x8f, 0xad, 0xd2, 0xca, 0x8c, 0x96, - 0x5c, 0xdd, 0x06, 0x7a, 0xbf, 0x2e, 0x06, 0x25, 0xee, 0x63, 0x02, 0xb0, - 0x72, 0x48, 0xcc, 0x36, 0x94, 0x49, 0x07, 0x0b, 0x33, 0x4c, 0x32, 0x09, - 0xe7, 0xee, 0x61, 0xe0, 0x90, 0x8a, 0x0f, 0xc8, 0xf5, 0x10, 0x48, 0x93, - 0x12, 0x2d, 0x58, 0xe9, 0xdd, 0x04, 0x00, 0x00, 0x38, 0xbc, 0x24, 0x80, - 0xcb, 0xc8, 0xa8, 0x8f, 0xb2, 0x8b, 0x97, 0x76, 0x76, 0x15, 0x39, 0x6f, - 0x0e, 0xd5, 0xd5, 0x25, 0x4c, 0xb8, 0xb6, 0x61, 0xa2, 0x9e, 0xfe, 0xf5, - 0x74, 0xc2, 0x2f, 0x98, 0x51, 0x6f, 0x0b, 0x51, 0xa0, 0xf4, 0xa8, 0x4a, - 0xfb, 0x10, 0x5f, 0x5e, 0xf2, 0xdd, 0x90, 0xa6, 0x37, 0xa3, 0x01, 0xcc, - 0xbd, 0x91, 0x27, 0xaa, 0x57, 0xc2, 0xa0, 0x14, 0x00, 0x00, 0x04, 0x08, - 0xf0, 0x2d, 0x71, 0x3d, 0x2f, 0x78, 0x21, 0x9e, 0x7d, 0xde, 0x31, 0x21, - 0x1c, 0x47, 0xe0, 0xe5, 0x44, 0x82, 0x78, 0x20, 0xdc, 0x87, 0x5d, 0xd5, - 0x85, 0xd7, 0x0c, 0x14, 0x81, 0xd9, 0x93, 0x5d, 0xb8, 0x30, 0x7e, 0x79, - 0xf2, 0xd0, 0x86, 0xd5, 0xf7, 0x07, 0x9e, 0x44, 0xcb, 0xfd, 0xfb, 0xfd, - 0x01, 0xbb, 0x91, 0x16, 0x0b, 0x86, 0x45, 0xe5, 0xc0, 0x20, 0x1f, 0x18, - 0x02, 0xa1, 0x31, 0x0f, 0x6a, 0x05, 0x08, 0x92, 0x11, 0xcc, 0x7c, 0xfa, - 0xa3, 0xf5, 0x06, 0x49, 0x42, 0xfe, 0x0a, 0x71, 0xa9, 0xbe, 0x40, 0xc9, - 0x24, 0xe3, 0xec, 0x12, 0x5a, 0x24, 0xa9, 0xfa, 0x48, 0x65, 0xf5, 0x4f, - 0xdf, 0x1d, 0xaf, 0xf4, 0x0b, 0x65, 0x3f, 0x48, 0x85, 0x8d, 0x5f, 0x30, - 0x02, 0xb8, 0x06, 0x87, 0xbd, 0x91, 0x6f, 0x51, 0x17, 0xd5, 0xa7, 0x0b, - 0xe3, 0x36, 0x3c, 0xc1, 0x28, 0xb7, 0x85, 0x2a, 0x0b, 0x6f, 0x91, 0xbb, - 0x29, 0x88, 0x1c, 0x4c, 0x3e, 0x1c, 0x13, 0xca, 0x31, 0x90, 0xdf, 0x76, - 0x5b, 0x46, 0x73, 0xb7, 0x85, 0x3e, 0xa7, 0x2c, 0x92, 0xf0, 0x70, 0x50, - 0x5b, 0x6b, 0xf6, 0x05, 0x0d, 0x15, 0x94, 0x42, 0x27, 0x67, 0x62, 0xb4, - 0x1c, 0x80, 0x47, 0x57, 0xb4, 0x39, 0xa7, 0xc7, 0xb3, 0x04, 0x4e, 0xa9, - 0x05, 0x36, 0xce, 0x22, 0x89, 0x89, 0xe0, 0xba, 0x1a, 0xd9, 0x38, 0x88, - 0x29, 0x00, 0xc0, 0xff, 0x02, 0x67, 0xc8, 0x85, 0xfc, 0xda, 0xcf, 0x04, - 0x83, 0x45, 0xea, 0xfa, 0x6d, 0x31, 0x85, 0x9d, 0x45, 0xea, 0x75, 0x13, - 0xb3, 0x8c, 0x27, 0x01, 0x06, 0xf2, 0x90, 0x7a, 0x85, 0x50, 0x5d, 0x0a, - 0xae, 0x5e, 0x49, 0x13, 0x55, 0x01, 0xbb, 0xbd, 0x4b, 0x96, 0x62, 0x69, - 0x7c, 0x06, 0xd3, 0xac, 0x1b, 0xd7, 0x8b, 0x71, 0x61, 0x0f, 0x05, 0xfa, - 0x01, 0x04, 0x46, 0x13, 0xf7, 0xae, 0x00, 0x6c, 0x13, 0x20, 0x6f, 0x99, - 0xeb, 0x8f, 0x3e, 0xc9, 0x15, 0x41, 0x25, 0x72, 0x9f, 0x7f, 0x79, 0x80, - 0x45, 0x52, 0x58, 0x37, 0xda, 0xb3, 0x49, 0x21, 0x3f, 0x83, 0x01, 0x5b, - 0xba, 0xf2, 0x0a, 0x9d, 0x15, 0x0b, 0xba, 0x13, 0x7e, 0x51, 0xad, 0x3a, - 0xb5, 0xbc, 0x84, 0xee, 0xa8, 0x6b, 0x20, 0x20, 0x86, 0x68, 0x90, 0x83, - 0xd5, 0xc9, 0xa2, 0x7d, 0x78, 0x74, 0xdc, 0xff, 0xc1, 0xfe, 0x2c, 0x1e, - 0xb4, 0x09, 0x2d, 0x67, 0x9f, 0x6e, 0xd5, 0xfa, 0x18, 0x27, 0xf3, 0x20, - 0x1d, 0x02, 0x08, 0x20, 0xe6, 0x2f, 0xe2, 0x6d, 0x52, 0x0f, 0xc4, 0x04, - 0x00, 0x03, 0xfc, 0x05, 0x39, 0xf8, 0x81, 0x75, 0x81, 0x31, 0x82, 0x6b, - 0xb6, 0x0f, 0xb9, 0xfb, 0xb5, 0xb6, 0x05, 0x38, 0x6d, 0x02, 0x97, 0x27, - 0xa5, 0x34, 0x04, 0x3d, 0x5c, 0x18, 0x4f, 0x25, 0x01, 0x30, 0xaf, 0xec, - 0x5e, 0xf1, 0xef, 0x1b, 0xaa, 0x24, 0x40, 0x97, 0x3f, 0x65, 0x6a, 0x38, - 0xb5, 0x8c, 0xfc, 0x72, 0x2a, 0x37, 0x49, 0x2e, 0x0c, 0x57, 0x0f, 0x98, - 0x23, 0x63, 0x5c, 0x71, 0xa9, 0x5f, 0x59, 0x61, 0xa7, 0xd7, 0xd1, 0x1f, - 0x3a, 0xf6, 0x56, 0x51, 0xef, 0x53, 0x18, 0xc7, 0xf1, 0xd5, 0x74, 0x9d, - 0xba, 0xac, 0x62, 0xa3, 0x1e, 0xd4, 0xc6, 0xa3, 0xeb, 0x62, 0xfc, 0x0c, - 0xa1, 0xfb, 0xb9, 0xe2, 0xc3, 0x00, 0x21, 0xe0, 0x9a, 0x20, 0x8a, 0x5f, - 0x03, 0xfa, 0x0e, 0x51, 0x77, 0x7e, 0xc3, 0xdf, 0x57, 0x81, 0x66, 0xf8, - 0x90, 0x5a, 0x1a, 0xd5, 0x92, 0xce, 0x43, 0x89, 0x5b, 0xbd, 0xf2, 0x65, - 0x85, 0xe5, 0x65, 0x30, 0xfc, 0x09, 0x9f, 0xad, 0xa1, 0xbb, 0x88, 0xfd, - 0xde, 0x24, 0xc8, 0x58, 0x55, 0xd8, 0x98, 0x41, 0xe9, 0x99, 0x94, 0xcb, - 0x2c, 0xec, 0x67, 0xf8, 0x22, 0x07, 0x16, 0x20, 0x1c, 0x95, 0xcd, 0x12, - 0x6d, 0x7d, 0x55, 0x7a, 0xb0, 0xec, 0xee, 0xb6, 0x15, 0x7c, 0x13, 0x37, - 0xc5, 0xaf, 0x24, 0xe2, 0x96, 0x3c, 0x21, 0x38, 0x65, 0x97, 0xc4, 0xc6, - 0xe7, 0x64, 0x48, 0xc7, 0x54, 0x4b, 0xac, 0xce, 0xfb, 0xe9, 0xd6, 0x3e, - 0xec, 0x05, 0xfe, 0xb7, 0xda, 0x80, 0x5c, 0x2c, 0x13, 0x5b, 0x3f, 0x6f, - 0x26, 0xc0, 0x15, 0xf0, 0x24, 0x4f, 0x26, 0x97, 0x32, 0x55, 0xe6, 0xc2, - 0x67, 0x60, 0x14, 0x61, 0xc0, 0xb9, 0xa4, 0x59, 0x12, 0x7b, 0x98, 0xa6, - 0x46, 0x24, 0xb1, 0x50, 0xe4, 0x1a, 0x22, 0x38, 0x1e, 0x0b, 0x13, 0xe0, - 0xab, 0xc7, 0xdb, 0x27, 0x6f, 0x67, 0x58, 0x49, 0x8e, 0x01, 0x2e, 0x76, - 0xad, 0x12, 0xb6, 0x12, 0x98, 0x07, 0x86, 0x16, 0xfb, 0x14, 0xee, 0x00, - 0x67, 0x8d, 0x43, 0x6b, 0x9b, 0xf9, 0x07, 0x0a, 0xb4, 0xbd, 0xe6, 0xfb, - 0xbb, 0x9a, 0xef, 0x83, 0xbb, 0x3c, 0x2d, 0x44, 0xb0, 0xf9, 0xd3, 0xae, - 0x8d, 0x1d, 0x99, 0x4c, 0x95, 0x27, 0xdf, 0x19, 0x03, 0x16, 0xdf, 0x7b, - 0xca, 0x64, 0x73, 0x75, 0xa8, 0xb1, 0xf8, 0x38, 0x6a, 0x1c, 0x87, 0x1b, - 0xd1, 0xf5, 0x83, 0x72, 0x07, 0x98, 0x95, 0xba, 0x12, 0xdb, 0xf6, 0x5d, - 0x59, 0x74, 0xa3, 0x47, 0xe5, 0x3b, 0xed, 0x10, 0xc5, 0x65, 0x52, 0x2e, - 0x8e, 0x30, 0xa5, 0x28, 0x7d, 0x3c, 0x12, 0xde, 0xef, 0xcc, 0xbf, 0x67, - 0x1f, 0xcd, 0xa8, 0xaa, 0x1b, 0xa9, 0x21, 0x45, 0x08, 0x4a, 0x69, 0xd9, - 0x0a, 0x3f, 0x5e, 0x11, 0x76, 0x10, 0x55, 0xa0, 0xaa, 0x04, 0x16, 0x52, - 0x73, 0x02, 0x09, 0x5f, 0x31, 0x17, 0xb4, 0x7c, 0x7d, 0xc9, 0x70, 0x16, - 0x57, 0x10, 0xd9, 0x09, 0xda, 0xa3, 0x5f, 0x94, 0xaf, 0xca, 0x44, 0xe4, - 0xd5, 0xa9, 0xe6, 0x5f, 0x53, 0x3b, 0x18, 0xf7, 0xff, 0xf2, 0x70, 0x8b, - 0x14, 0x61, 0xe5, 0xaa, 0x39, 0xd7, 0x21, 0xad, 0x49, 0x14, 0x9f, 0x14, - 0x1e, 0x57, 0x9b, 0x78, 0x92, 0x85, 0x5e, 0x17, 0x49, 0x5a, 0xd3, 0x7c, - 0xdb, 0x30, 0x5b, 0xe9, 0x56, 0x2e, 0xd6, 0xe2, 0x09, 0xbd, 0xd0, 0x78, - 0xe1, 0xb4, 0x5b, 0x50, 0x4b, 0x50, 0x76, 0x29, 0xbc, 0x8b, 0x5f, 0x38, - 0x56, 0xac, 0xb5, 0xb5, 0x3f, 0xbe, 0x79, 0x68, 0x7b, 0x75, 0xa5, 0x68, - 0x56, 0x64, 0x2a, 0x47, 0xf4, 0x24, 0x6c, 0x5a, 0x30, 0x2e, 0xa4, 0xa7, - 0x34, 0x04, 0xc5, 0x36, 0xf7, 0x4b, 0x55, 0xed, 0x0c, 0x69, 0x93, 0x22, - 0x5d, 0xf9, 0x5f, 0xc5, 0x37, 0x77, 0xa2, 0x5f, 0xed, 0x9c, 0xe0, 0xef, - 0xa5, 0x6a, 0xfc, 0xf7, 0xe2, 0xcb, 0x82, 0x0a, 0x6d, 0xfd, 0xa5, 0x8c, - 0xef, 0x99, 0xb7, 0xcd, 0x61, 0x65, 0x35, 0xbe, 0x57, 0x72, 0x33, 0x10, - 0x69, 0xfd, 0x0a, 0x71, 0x93, 0x59, 0x1e, 0x83, 0x45, 0xb6, 0xd7, 0x07, - 0xdb, 0x24, 0xbf, 0x3c, 0x2b, 0x90, 0xfe, 0xa2, 0x15, 0x8f, 0x8f, 0x30, - 0xb1, 0x2f, 0xce, 0x22, 0x14, 0x83, 0x7d, 0xff, 0x87, 0x05, 0x70, 0xae, - 0x6e, 0xd9, 0x3a, 0xcc, 0x25, 0xd3, 0xe1, 0x60, 0xe4, 0x5f, 0x3c, 0x80, - 0x2e, 0xbc, 0x26, 0xd7, 0x38, 0xfd, 0x43, 0x1b, 0x7e, 0xba, 0x18, 0xb2, - 0xaa, 0x0e, 0x52, 0x02, 0x82, 0xd3, 0x14, 0x53, 0x81, 0x81, 0xd8, 0x6f, - 0xb2, 0x90, 0x7b, 0x71, 0xd4, 0x74, 0x71, 0xd7, 0x21, 0xba, 0xd9, 0xe3, - 0x5b, 0xd5, 0xaf, 0x59, 0x52, 0x8a, 0xd4, 0xe6, 0xe9, 0xc1, 0x14, 0x04, - 0x3f, 0x74, 0xbc, 0xa1, 0xb7, 0x98, 0x20, 0x36, 0xe1, 0xd9, 0x3d, 0x62, - 0xde, 0x16, 0x3a, 0x18, 0xa8, 0x69, 0x90, 0x25, 0x8c, 0x5e, 0xb7, 0x5f, - 0x58, 0xfb, 0x57, 0xe1, 0x42, 0x9c, 0xb7, 0xa5, 0xc3, 0xa3, 0xa4, 0x2e, - 0x6e, 0x0d, 0x00, 0xad, 0x45, 0x22, 0xf3, 0x7a, 0xec, 0x82, 0x5c, 0x05, - 0xf8, 0x0f, 0xb9, 0x8a, 0x7d, 0xbc, 0x98, 0xc7, 0x79, 0xf8, 0xe5, 0x02, - 0x35, 0xa1, 0x15, 0x13, 0xf0, 0x3e, 0x42, 0xf7, 0x43, 0xe7, 0xde, 0x91, - 0x0a, 0x9e, 0x36, 0xb5, 0xf1, 0xc6, 0x88, 0x0c, 0x5c, 0xf6, 0xef, 0x00, - 0xb1, 0x50, 0x32, 0xe7, 0x77, 0x25, 0xa9, 0x3e, 0x60, 0x49, 0xb3, 0x4d, - 0x0b, 0x4e, 0xd4, 0x9d, 0x72, 0x92, 0x52, 0x23, 0x7a, 0x86, 0x6a, 0x2d, - 0xfb, 0xb9, 0xe7, 0x36, 0x8c, 0x80, 0x01, 0x32, 0x76, 0xf7, 0x63, 0xb0, - 0x9f, 0xef, 0x35, 0x64, 0x89, 0x81, 0xaa, 0x4c, 0x78, 0xb3, 0xc6, 0x5c, - 0xcc, 0x02, 0x5f, 0xfd, 0xf2, 0x96, 0x50, 0xaa, 0xaa, 0xe2, 0x0a, 0xe0, - 0x0a, 0xf7, 0x61, 0x09, 0xb9, 0x55, 0x94, 0x72, 0xd3, 0xdb, 0xf0, 0x76, - 0xa5, 0x53, 0x7d, 0x7a, 0x77, 0x4e, 0x9a, 0x5e, 0x78, 0x96, 0xf0, 0xbe, - 0x6b, 0x8f, 0x36, 0x02, 0xfe, 0xa8, 0x3b, 0x51, 0xc8, 0x39, 0x39, 0x44, - 0xbd, 0xf4, 0x0e, 0xce, 0x1f, 0x9a, 0xde, 0xeb, 0xcf, 0xa9, 0x46, 0x03, - 0xed, 0x25, 0x96, 0xeb, 0xbd, 0xe2, 0x1b, 0xcf, 0xbf, 0xda, 0x3c, 0xdc, - 0xb1, 0x1c, 0xcf, 0xb4, 0x5d, 0xff, 0x19, 0x4c, 0x8d, 0x55, 0x57, 0xe8, - 0xe2, 0xf1, 0x62, 0xe6, 0x63, 0x0e, 0x70, 0xc9, 0x38, 0x40, 0xb1, 0xde, - 0x11, 0x9a, 0x73, 0xf3, 0x43, 0x65, 0x8b, 0xfa, 0x4f, 0x49, 0x9b, 0xe6, - 0x46, 0xed, 0x29, 0x39, 0x0d, 0xbb, 0x87, 0xc4, 0x8a, 0x45, 0xd6, 0x4d, - 0xec, 0x35, 0x8d, 0x02, 0xff, 0xc9, 0x7f, 0x06, 0x73, 0x27, 0xfb, 0x1f, - 0xc4, 0xd6, 0xc7, 0xeb, 0xfc, 0xd6, 0x9f, 0x01, 0xe6, 0x5c, 0x07, 0xec, - 0x9f, 0x2f, 0xca, 0xda, 0xcd, 0x00, 0x7e, 0x42, 0x78, 0xa0, 0x25, 0xd5, - 0x70, 0xb4, 0xaa, 0x70, 0xd2, 0x3e, 0x0d, 0xe4, 0x5d, 0x42, 0x60, 0x8a, - 0x79, 0x8a, 0x72, 0x5c, 0x02, 0xfe, 0xca, 0xb0, 0xdd, 0xc1, 0x5c, 0xa4, - 0x59, 0x45, 0x6f, 0x88, 0xa9, 0xc4, 0x65, 0x3a, 0xa8, 0x55, 0xd9, 0x28, - 0x42, 0xb4, 0xf2, 0x3f, 0x95, 0x6f, 0xbf, 0x8c, 0x57, 0x47, 0xb4, 0xfd, - 0xbc, 0xb2, 0x39, 0xec, 0x9d, 0x4d, 0x53, 0xdc, 0x82, 0xca, 0xec, 0x1a, - 0x73, 0x4f, 0xc0, 0x6e, 0xbb, 0x92, 0x7f, 0x7b, 0x37, 0x2b, 0x83, 0x88, - 0x11, 0x01, 0x9a, 0x80, 0xa7, 0x17, 0x9c, 0x7b, 0xad, 0xc0, 0x5b, 0xe0, - 0xec, 0x68, 0xca, 0xbc, 0x12, 0x5e, 0xad, 0x09, 0x03, 0xbc, 0x10, 0xa6, - 0xa3, 0x2a, 0xae, 0x0c, 0x96, 0x48, 0xda, 0x63, 0xb8, 0x54, 0xbf, 0xcb, - 0xa2, 0xbb, 0xa5, 0x69, 0x8a, 0x58, 0xd0, 0x2e, 0xbc, 0xe5, 0x17, 0x29, - 0x6a, 0xe8, 0x05, 0x3f, 0xf3, 0xdb, 0xef, 0x1e, 0x50, 0xf7, 0xe6, 0xb9, - 0x09, 0x77, 0x1d, 0x78, 0xc0, 0xa1, 0x12, 0xcd, 0x32, 0x1a, 0x0e, 0xc6, - 0x2c, 0xc3, 0x20, 0x23, 0x63, 0xf2, 0x62, 0x47, 0x61, 0x37, 0xcc, 0xb2, - 0x68, 0x02, 0xb5, 0x4a, 0x10, 0x4e, 0xc9, 0x69, 0x33, 0xe3, 0x38, 0x7c, - 0x1a, 0xbf, 0x3e, 0x9c, 0x87, 0xc2, 0xb1, 0x93, 0x1b, 0xfa, 0xf3, 0xf8, - 0x9b, 0xc7, 0xf0, 0xcd, 0x6f, 0x3c, 0x9e, 0xe0, 0xc1, 0xc7, 0x88, 0xe4, - 0x04, 0x78, 0xfb, 0x5c, 0xd3, 0xed, 0x5c, 0xb1, 0x07, 0x80, 0x34, 0x24, - 0x0b, 0x55, 0xa3, 0x4d, 0xfc, 0xf9, 0xe6, 0x2e, 0x7b, 0x0b, 0xf5, 0xdb, - 0xeb, 0x75, 0xfb, 0xb7, 0x3b, 0x8f, 0xc2, 0x00, 0xfb, 0xf1, 0xf0, 0x46, - 0x28, 0x95, 0x1a, 0x5f, 0x4d, 0x66, 0x98, 0xd8, 0x09, 0xb0, 0xe6, 0xbc, - 0xae, 0x42, 0x8f, 0x13, 0xda, 0x31, 0xd4, 0xb4, 0x6e, 0xa6, 0xc1, 0x68, - 0xa9, 0x11, 0x5f, 0x9d, 0xe5, 0x73, 0xbe, 0x2b, 0x64, 0xe5, 0x8d, 0x43, - 0x7c, 0x4a, 0x71, 0xcb, 0x40, 0x78, 0x3d, 0x51, 0x13, 0xe4, 0x2b, 0x81, - 0x5d, 0x61, 0x4d, 0xca, 0x4b, 0x9b, 0xa4, 0x30, 0x5f, 0x85, 0xe9, 0x2e, - 0xf9, 0x38, 0xea, 0x62, 0x17, 0xee, 0x47, 0x74, 0xe3, 0xa5, 0x3c, 0x44, - 0xc8, 0x90, 0xf0, 0x18, 0x86, 0x7c, 0xe2, 0x9f, 0xb4, 0x84, 0x9c, 0xd7, - 0x56, 0x2b, 0x0e, 0x8a, 0x0c, 0xbe, 0x31, 0x89, 0xdb, 0xe6, 0x1d, 0x2f, - 0x49, 0x74, 0x6f, 0x76, 0xca, 0x31, 0x92, 0xa9, 0x24, 0xae, 0x27, 0x1b, - 0xd5, 0x3b, 0x6c, 0xb4, 0xb2, 0xb1, 0x9e, 0xfa, 0x03, 0x73, 0x65, 0x8b, - 0xba, 0xa2, 0x73, 0x2d, 0x2f, 0xd2, 0x65, 0x33, 0x93, 0x6b, 0xed, 0x3d, - 0x07, 0x97, 0xd5, 0x07, 0x17, 0x6b, 0x04, 0xaf, 0x81, 0xd4, 0x69, 0x19, - 0x75, 0xe3, 0x0a, 0xfc, 0x85, 0xef, 0x57, 0x2f, 0xbf, 0xfb, 0x9d, 0xec, - 0x77, 0x92, 0x3b, 0x7a, 0x2d, 0x56, 0x55, 0xf2, 0xa8, 0xe4, 0xc3, 0x03, - 0x0e, 0xb6, 0xd7, 0xf2, 0x21, 0x5d, 0xfc, 0x14, 0xaa, 0xe5, 0xa9, 0xa4, - 0xd9, 0xdf, 0x59, 0xc8, 0xe8, 0x8f, 0x07, 0xee, 0x5c, 0x22, 0x92, 0x8a, - 0xd1, 0xf6, 0x6b, 0xa6, 0x32, 0xcf, 0x86, 0x72, 0xfa, 0xaf, 0xd1, 0xcb, - 0xb9, 0x6c, 0x4d, 0x60, 0x73, 0x6b, 0x00, 0x09, 0x36, 0xcf, 0xe4, 0x3e, - 0xc2, 0xd5, 0x76, 0xe9, 0x23, 0x67, 0x36, 0x6b, 0x3e, 0xff, 0xd4, 0xef, - 0x15, 0xf1, 0x86, 0x5f, 0x50, 0x82, 0x00, 0x89, 0xa5, 0x5c, 0xe0, 0x38, - 0x7a, 0x32, 0x62, 0xf6, 0xeb, 0x9a, 0xe0, 0x67, 0xbf, 0x42, 0xcf, 0x7e, - 0xc6, 0x9a, 0xdc, 0x37, 0x3f, 0x3e, 0x82, 0xfe, 0x4d, 0xcc, 0x35, 0x07, - 0x95, 0x20, 0xad, 0x71, 0xda, 0x8c, 0xc0, 0xa8, 0x5f, 0x75, 0xd9, 0x7a, - 0x7b, 0x99, 0xef, 0x69, 0x13, 0xe2, 0x0a, 0x2e, 0xa4, 0x2d, 0x7b, 0x54, - 0x94, 0xfa, 0x81, 0xbb, 0xea, 0x2d, 0x9e, 0x8a, 0xd6, 0x02, 0x23, 0x69, - 0xf2, 0x92, 0xa4, 0x86, 0x06, 0xdd, 0x41, 0x60, 0x26, 0x0b, 0x4d, 0x08, - 0x31, 0x73, 0xfb, 0xdb, 0x52, 0x96, 0x04, 0xc9, 0xa4, 0x5a, 0x33, 0x87, - 0xfe, 0x0c, 0x22, 0xb7, 0xc6, 0x56, 0x22, 0xf0, 0x94, 0xbd, 0x72, 0xba, - 0x2c, 0xb3, 0x66, 0xb5, 0xf5, 0x86, 0xc6, 0x4f, 0x17, 0x78, 0xe3, 0x61, - 0xcb, 0xf7, 0xed, 0xb7, 0x8b, 0x7c, 0x8c, 0xd6, 0x19, 0x60, 0x69, 0x24, - 0x14, 0x8b, 0x0c, 0x00, 0xd1, 0x32, 0x03, 0x71, 0xf9, 0x71, 0x7d, 0x4b, - 0x79, 0x68, 0x19, 0x2d, 0x79, 0x1e, 0x67, 0x1b, 0x8f, 0x2e, 0xac, 0x0f, - 0x4a, 0x5e, 0x9b, 0xc9, 0xbf, 0xe1, 0x3f, 0x37, 0xbb, 0xbe, 0x4f, 0x1a, - 0x7a, 0xfc, 0x28, 0x3a, 0xd6, 0xa9, 0x36, 0xe5, 0xfb, 0x46, 0xc7, 0x6e, - 0x20, 0x69, 0x11, 0xc8, 0x5a, 0x47, 0xe5, 0x25, 0x2c, 0xe3, 0x1d, 0xef, - 0xf3, 0x6b, 0x5a, 0xe8, 0xd5, 0xd4, 0xe1, 0x56, 0xd1, 0x67, 0xf6, 0x9f, - 0x2e, 0xc3, 0xe8, 0xa2, 0xf5, 0xdb, 0x89, 0x1a, 0x68, 0x9a, 0x67, 0xd0, - 0x2c, 0x00, 0x30, 0x72, 0xda, 0x96, 0x8b, 0xf7, 0xba, 0xaf, 0x90, 0x71, - 0xaf, 0x3c, 0xe7, 0xfd, 0x97, 0xc5, 0x7e, 0x0e, 0xec, 0xe9, 0x2d, 0xec, - 0x1c, 0x8f, 0x9e, 0x44, 0xaa, 0x7e, 0x67, 0x2d, 0x7a, 0x90, 0xf0, 0xbd, - 0x14, 0x7a, 0xe9, 0x53, 0x15, 0x98, 0x6c, 0x9d, 0x37, 0xfe, 0xa1, 0xae, - 0xba, 0xa8, 0x6c, 0x0e, 0xea, 0xdb, 0xc8, 0x86, 0x00, 0xd6, 0x8a, 0x05, - 0x69, 0x09, 0xba, 0xa2, 0x5f, 0x9d, 0x0e, 0xbd, 0x75, 0x69, 0x7b, 0x46, - 0x1b, 0xaa, 0x24, 0xca, 0x6b, 0x8b, 0x65, 0x51, 0x85, 0xcf, 0xe5, 0x23, - 0x1d, 0x9b, 0x3e, 0x09, 0x53, 0xdd, 0xe7, 0x96, 0x34, 0x07, 0xe1, 0xa1, - 0x43, 0x04, 0x5f, 0xdd, 0x57, 0x29, 0xd9, 0x81, 0xe9, 0xf0, 0x5b, 0x3f, - 0xea, 0x3f, 0xae, 0x2c, 0x61, 0x32, 0x4d, 0x2c, 0x22, 0x90, 0xa0, 0xc5, - 0xf8, 0xdd, 0xe9, 0xeb, 0x64, 0xb5, 0xfd, 0x02, 0x28, 0x85, 0xb4, 0x52, - 0x4c, 0x0e, 0x76, 0x21, 0x55, 0x09, 0xee, 0x93, 0x6d, 0xaa, 0x7c, 0x74, - 0x17, 0x7c, 0xb0, 0xeb, 0xab, 0x0b, 0xee, 0x21, 0x6d, 0xe1, 0x2b, 0x40, - 0x8c, 0x19, 0x81, 0x9a, 0xb8, 0x15, 0x0e, 0x58, 0x78, 0x3d, 0x12, 0x8f, - 0x35, 0x1e, 0x18, 0x26, 0x2e, 0xfc, 0x78, 0x60, 0x79, 0x60, 0x92, 0x1f, - 0xa1, 0x19, 0xeb, 0x72, 0x61, 0x4a, 0x4a, 0x49, 0x44, 0xc5, 0x65, 0x45, - 0x1b, 0x8a, 0x60, 0xa6, 0x7b, 0xf3, 0x2c, 0xfe, 0x3f, 0xa0, 0x1b, 0xfc, - 0x28, 0xb5, 0x59, 0x1b, 0x84, 0xa4, 0xe9, 0xcc, 0x6a, 0x50, 0x7f, 0x34, - 0x94, 0x52, 0x6c, 0x23, 0xea, 0xd7, 0x1e, 0x69, 0x4a, 0x27, 0x6d, 0x12, - 0xb7, 0xa8, 0x99, 0xc6, 0x7b, 0x1f, 0x6a, 0x18, 0x1d, 0x09, 0x6d, 0x25, - 0x8b, 0xb8, 0x6b, 0xee, 0x92, 0xec, 0xdb, 0x08, 0x70, 0x98, 0x2c, 0x3d, - 0x93, 0x72, 0xbd, 0xc1, 0xd5, 0x4d, 0x41, 0x1b, 0x04, 0x69, 0xa6, 0xda, - 0xc5, 0x32, 0xfc, 0x0c, 0x58, 0x3d, 0x3e, 0x78, 0x53, 0xce, 0x98, 0xd6, - 0x13, 0xfc, 0x05, 0x61, 0x00, 0xdb, 0x83, 0x58, 0xd6, 0x74, 0x45, 0x06, - 0x49, 0xc2, 0x58, 0x32, 0xd3, 0x52, 0x46, 0xc4, 0x5b, 0xde, 0x08, 0x11, - 0xee, 0x90, 0x62, 0x5d, 0x91, 0x2e, 0x27, 0xe7, 0x54, 0xe3, 0x9d, 0x12, - 0x92, 0x82, 0xf1, 0x48, 0xf7, 0x1c, 0x91, 0xaa, 0x79, 0x01, 0x36, 0x3e, - 0xde, 0x2a, 0xb5, 0xf0, 0xb1, 0xed, 0x6e, 0xe8, 0x14, 0xf5, 0x72, 0x4f, - 0xae, 0x5b, 0x6c, 0xc0, 0xf9, 0xa2, 0xef, 0x45, 0xcd, 0x25, 0x35, 0x7c, - 0x83, 0xa0, 0x8a, 0xce, 0x6e, 0xfa, 0xfa, 0xc0, 0xae, 0xed, 0x39, 0x6c, - 0xa9, 0x29, 0xbc, 0xe0, 0x18, 0x48, 0xfe, 0xde, 0xb8, 0x8f, 0xa7, 0xff, - 0x13, 0xbd, 0x35, 0x32, 0x1b, 0x8b, 0x36, 0x64, 0x6a, 0x04, 0x70, 0x79, - 0x91, 0x84, 0x84, 0x17, 0xf1, 0x3f, 0xe9, 0xde, 0xb3, 0xf7, 0x8d, 0x38, - 0x7f, 0xeb, 0x1a, 0x5f, 0x43, 0x09, 0xcb, 0x7f, 0x52, 0x51, 0x2d, 0x9a, - 0xa0, 0xbc, 0xbe, 0x20, 0x0d, 0xa3, 0x4c, 0xb0, 0xe1, 0x5e, 0xd6, 0x49, - 0x6b, 0x55, 0x11, 0xba, 0xa4, 0xe6, 0xb9, 0x99, 0x36, 0xa2, 0x1f, 0x1a, - 0xd6, 0x14, 0x0c, 0x8d, 0x07, 0x98, 0x70, 0xba, 0xcf, 0x29, 0x42, 0x4f, - 0x69, 0x60, 0x73, 0x1c, 0x5c, 0x62, 0xf0, 0x0d, 0xa1, 0xa3, 0xe6, 0xe6, - 0x11, 0x79, 0x4d, 0x2b, 0x07, 0x21, 0x24, 0x48, 0x19, 0xa7, 0xf2, 0xc9, - 0xf3, 0x35, 0x52, 0xec, 0xa5, 0x05, 0x70, 0x90, 0x78, 0xd5, 0x21, 0xef, - 0xce, 0xa1, 0x6d, 0x0d, 0x98, 0xc2, 0x70, 0xbd, 0x46, 0xdd, 0xec, 0xbf, - 0xca, 0x7f, 0xdc, 0x9f, 0x7b, 0x49, 0x42, 0x32, 0xc1, 0x2a, 0x4f, 0xd9, - 0xc3, 0xcb, 0x7a, 0x0e, 0xcd, 0x17, 0xa2, 0x7e, 0xa3, 0xb6, 0x1f, 0x18, - 0x05, 0x17, 0x1e, 0x31, 0x3e, 0x1e, 0xd7, 0x17, 0x86, 0xc7, 0xd0, 0x95, - 0x8b, 0xc3, 0xb2, 0xf3, 0x9c, 0x2f, 0x2f, 0xeb, 0xde, 0x39, 0x14, 0x0b, - 0xfe, 0x56, 0x6c, 0x7a, 0xdd, 0x98, 0x4e, 0x86, 0x3f, 0xec, 0x51, 0xc7, - 0xff, 0xfe, 0x2d, 0x3b, 0xce, 0x54, 0xb6, 0x2b, 0x95, 0x81, 0x31, 0xf6, - 0x95, 0x26, 0x41, 0x39, 0xf4, 0x0b, 0xcf, 0x1e, 0xf6, 0xd0, 0x34, 0xe6, - 0x5c, 0x68, 0x01, 0x05, 0x9a, 0x1e, 0xba, 0xbf, 0xc1, 0x9e, 0x6d, 0xf0, - 0xd0, 0x6c, 0x84, 0xa5, 0x56, 0xec, 0x47, 0xaa, 0x82, 0x7f, 0x84, 0xf7, - 0xac, 0x52, 0x50, 0x6c, 0x32, 0x24, 0x8b, 0x2e, 0x54, 0x66, 0x63, 0xe8, - 0x97, 0x94, 0x73, 0xbd, 0x69, 0x92, 0x10, 0xa7, 0x4e, 0x88, 0x0d, 0xdd, - 0xd4, 0xa6, 0x5e, 0x77, 0x7e, 0xa1, 0xb0, 0xda, 0xb2, 0xff, 0xf4, 0xec, - 0x34, 0xc5, 0x8d, 0xb1, 0x39, 0x42, 0x04, 0x7f, 0xdd, 0x74, 0xb3, 0xb5, - 0xe5, 0x5a, 0xa9, 0x65, 0xc5, 0x4f, 0xe6, 0x20, 0x35, 0x85, 0x38, 0xb8, - 0xa7, 0xdd, 0x35, 0xf8, 0xcf, 0x3f, 0x2e, 0x80, 0x7f, 0x5f, 0x67, 0x8b, - 0xbf, 0xbe, 0x51, 0x02, 0x23, 0xff, 0xac, 0x0d, 0xfb, 0x7c, 0xe2, 0x86, - 0xe9, 0xc5, 0x20, 0x6d, 0x03, 0x55, 0xfa, 0xa7, 0x0a, 0x1f, 0x74, 0x17, - 0x31, 0x75, 0x1c, 0x62, 0xa2, 0x51, 0x38, 0x76, 0x4a, 0xab, 0x75, 0x42, - 0xa8, 0x00, 0xdc, 0x46, 0xf2, 0xc7, 0xdf, 0x1c, 0xdf, 0x60, 0xad, 0x5c, - 0x02, 0xee, 0x24, 0xbc, 0x07, 0xf1, 0xf5, 0xdd, 0x03, 0x2a, 0xcc, 0xf1, - 0x3c, 0xef, 0xc4, 0x0e, 0xff, 0x14, 0xe3, 0x42, 0x0a, 0x44, 0xe0, 0x87, - 0x4d, 0x75, 0x46, 0x65, 0xdd, 0x5b, 0x9e, 0xde, 0x68, 0xf6, 0x0c, 0xc0, - 0xf7, 0x48, 0xfe, 0x28, 0x39, 0x4a, 0xc4, 0x80, 0x64, 0xe5, 0x13, 0xbb, - 0x62, 0x6f, 0x32, 0x20, 0x08, 0xe2, 0x4a, 0xda, 0xe5, 0x27, 0x39, 0xc7, - 0xbc, 0x46, 0x4e, 0x54, 0x2b, 0x69, 0xc4, 0xcc, 0xc0, 0x22, 0xa9, 0xbd, - 0xca, 0xd7, 0xf5, 0x8f, 0xfd, 0xdb, 0xf1, 0x70, 0x48, 0x80, 0x11, 0xf6, - 0x39, 0x0a, 0xaf, 0x58, 0x6e, 0x45, 0x1a, 0xfb, 0xb0, 0xbf, 0xf6, 0x44, - 0xbc, 0x3a, 0x0c, 0x0a, 0x2c, 0x07, 0x62, 0x0e, 0xf0, 0x1c, 0xe5, 0x42, - 0xe0, 0x19, 0xb8, 0xbd, 0xcf, 0x76, 0x10, 0xf7, 0x94, 0xc1, 0x0f, 0x58, - 0x31, 0xdd, 0xcb, 0x50, 0x86, 0x30, 0xa0, 0x3d, 0xfd, 0x4d, 0xe7, 0xb2, - 0xb7, 0xbb, 0xbc, 0x5a, 0x56, 0x7a, 0x57, 0x34, 0xcb, 0xeb, 0x6f, 0x11, - 0x67, 0x63, 0xd2, 0xf4, 0x00, 0xf0, 0x4c, 0xe3, 0xf1, 0x48, 0xd7, 0xac, - 0xfe, 0xdb, 0x2c, 0x25, 0x9a, 0x48, 0x07, 0xcb, 0x07, 0x94, 0x77, 0x07, - 0xe7, 0xbf, 0xd5, 0xcf, 0x47, 0x88, 0xad, 0x73, 0xf3, 0x4e, 0x2a, 0x31, - 0x10, 0x2f, 0x0b, 0xc7, 0x2d, 0x79, 0x72, 0xe4, 0xde, 0x48, 0xf5, 0xc7, - 0xd9, 0x38, 0x73, 0x0e, 0xb4, 0x4a, 0xb5, 0x65, 0x85, 0x69, 0xf6, 0x22, - 0x8e, 0xea, 0x72, 0xc1, 0x0b, 0x67, 0xbd, 0x86, 0x05, 0x0c, 0xf7, 0x21, - 0x47, 0x0c, 0x23, 0x96, 0x6d, 0xce, 0xf2, 0xf9, 0x4e, 0x2f, 0x3f, 0xb8, - 0x88, 0xc5, 0xed, 0x0b, 0x8e, 0xd9, 0x3b, 0xa3, 0xfc, 0x88, 0xa6, 0x23, - 0xd5, 0x84, 0xfc, 0x09, 0xd5, 0x37, 0x78, 0xb2, 0xa5, 0x31, 0x7f, 0xf7, - 0x18, 0x26, 0x59, 0xfc, 0x14, 0x5a, 0x31, 0xc4, 0x85, 0xc8, 0xa7, 0x78, - 0x88, 0x70, 0x6b, 0x97, 0xf0, 0xee, 0x17, 0x6d, 0x53, 0x2f, 0x4c, 0x91, - 0x69, 0x8c, 0x8d, 0x78, 0x3e, 0x15, 0x12, 0x8b, 0xd7, 0x2a, 0xb9, 0x22, - 0x72, 0xcd, 0x86, 0x34, 0x90, 0x5f, 0x8b, 0x59, 0x0d, 0xca, 0x19, 0xb8, - 0x93, 0x03, 0x0f, 0x9a, 0x3d, 0x61, 0x7c, 0xea, 0x7c, 0x15, 0x2a, 0x88, - 0x29, 0x8c, 0xc7, 0xd3, 0x1d, 0x22, 0x74, 0x1a, 0x41, 0xd0, 0xe9, 0x7e, - 0x54, 0x61, 0x7c, 0x91, 0x6e, 0x49, 0x6a, 0x14, 0xc9, 0x75, 0xd3, 0x93, - 0x9e, 0x02, 0x19, 0xb7, 0xf8, 0x1d, 0x52, 0xe4, 0xa2, 0xfc, 0x08, 0xde, - 0xc6, 0x2f, 0xab, 0x10, 0xb7, 0x84, 0x17, 0xea, 0x93, 0x54, 0x89, 0xb2, - 0x2f, 0x23, 0x11, 0x77, 0xcc, 0xc9, 0x55, 0x79, 0xeb, 0x78, 0xc3, 0x92, - 0xc8, 0xe0, 0xd3, 0x65, 0xad, 0xbc, 0x9b, 0x99, 0x7f, 0x3c, 0x84, 0x01, - 0xb1, 0xc6, 0x78, 0x75, 0xc7, 0x0c, 0xe6, 0x13, 0xe8, 0x07, 0x3e, 0x14, - 0x83, 0x1c, 0x9f, 0xf9, 0x6d, 0xf1, 0x20, 0x1b, 0x5c, 0x5d, 0xc1, 0x95, - 0x85, 0x92, 0x62, 0xce, 0x75, 0xb0, 0x14, 0xc8, 0x15, 0x41, 0x62, 0xf0, - 0x99, 0x8c, 0xba, 0x4f, 0xcd, 0xb4, 0x3e, 0x29, 0x60, 0x51, 0x04, 0x98, - 0x65, 0x82, 0xc6, 0x4d, 0xde, 0xab, 0x30, 0x6a, 0xc4, 0xd2, 0xee, 0x86, - 0xf7, 0x60, 0xaa, 0x86, 0x36, 0x1d, 0x36, 0xc9, 0xc6, 0x89, 0x72, 0x3a, - 0x73, 0x5f, 0xba, 0x79, 0xbb, 0xc8, 0xaa, 0x98, 0x99, 0xdd, 0xdf, 0x8b, - 0xab, 0x30, 0xd9, 0x64, 0x3e, 0x07, 0xb7, 0x9d, 0x1f, 0x84, 0xc1, 0xae, - 0xfa, 0x57, 0x2b, 0x95, 0x19, 0xdf, 0xe9, 0xe4, 0x04, 0x8d, 0x8e, 0x0b, - 0x38, 0xc8, 0xf8, 0x67, 0x1b, 0xb8, 0xea, 0xf3, 0xfa, 0x64, 0xe2, 0x98, - 0x10, 0x67, 0xb1, 0x0a, 0xb3, 0x8e, 0x30, 0x1c, 0x2c, 0xe8, 0x92, 0x15, - 0xa5, 0xef, 0xa0, 0x8d, 0x62, 0xff, 0xb6, 0x9a, 0x15, 0x0a, 0xd7, 0x8f, - 0x9d, 0x1c, 0x63, 0xe1, 0x75, 0x07, 0xe2, 0xb3, 0x01, 0xc0, 0x87, 0x50, - 0x45, 0x60, 0x7a, 0x92, 0x78, 0x41, 0xc7, 0xee, 0xb0, 0xe2, 0x50, 0x72, - 0xd5, 0x38, 0x6e, 0xdb, 0xd7, 0xc3, 0x6b, 0x2e, 0xa0, 0xc2, 0x6e, 0xcb, - 0x41, 0x34, 0xfb, 0x86, 0xf9, 0x00, 0x74, 0x1d, 0x30, 0x35, 0xf9, 0x0a, - 0xc8, 0x23, 0x2c, 0x5d, 0xf5, 0x0d, 0x98, 0x63, 0x20, 0xab, 0xb4, 0x71, - 0xe8, 0x80, 0xab, 0x59, 0xbe, 0xa5, 0x8a, 0x6a, 0x50, 0x36, 0x5b, 0xb8, - 0xfe, 0x6c, 0xdf, 0x15, 0x8c, 0x30, 0x5c, 0xa0, 0x22, 0x48, 0x04, 0xff, - 0xe3, 0x16, 0x00, 0xf3, 0xa4, 0x8b, 0x79, 0xcc, 0x1c, 0x60, 0x59, 0xc3, - 0x05, 0x2a, 0x74, 0xe2, 0xff, 0xee, 0xef, 0x1f, 0x01, 0xeb, 0x6c, 0xff, - 0x8c, 0x6e, 0x6b, 0x60, 0x9e, 0x1b, 0x75, 0x7b, 0x39, 0xcb, 0x03, 0xa2, - 0x3c, 0x71, 0x44, 0x9c, 0x5b, 0x81, 0xb3, 0x83, 0xac, 0x26, 0x59, 0xb4, - 0xaa, 0xb7, 0xfe, 0xa5, 0x24, 0xe3, 0xf7, 0x87, 0x19, 0xbd, 0x90, 0xe1, - 0xcc, 0x7c, 0xff, 0xa4, 0x32, 0xdc, 0xd1, 0x0d, 0x02, 0x5a, 0x6f, 0xf9, - 0x4f, 0x91, 0x7a, 0xd6, 0x87, 0x2e, 0xbd, 0xcd, 0x8e, 0x99, 0x99, 0xf6, - 0xb4, 0xb8, 0x90, 0x2d, 0x56, 0x24, 0x08, 0x4c, 0x14, 0xc4, 0x12, 0x0f, - 0xa3, 0x70, 0x84, 0x4e, 0x82, 0xb9, 0x31, 0x63, 0x45, 0x5b, 0x9d, 0x9a, - 0x45, 0xf7, 0x6c, 0x26, 0xad, 0x51, 0x5b, 0x68, 0xf2, 0x50, 0x24, 0x8f, - 0x7f, 0x8e, 0x78, 0xaa, 0x8e, 0xde, 0xe4, 0x50, 0xa1, 0x40, 0xe0, 0x2e, - 0xee, 0x8f, 0x47, 0x02, 0x82, 0x08, 0xb4, 0x3d, 0x58, 0x28, 0x97, 0x96, - 0x24, 0xcd, 0xa5, 0xb8, 0xe3, 0x92, 0xbd, 0xde, 0xd7, 0x38, 0x5b, 0x32, - 0x1d, 0x60, 0x96, 0xe0, 0xbe, 0xd8, 0x3e, 0x6b, 0xe6, 0x10, 0xf0, 0xb9, - 0x80, 0x4f, 0x76, 0x35, 0x17, 0xad, 0xb3, 0x7a, 0xda, 0x00, 0x63, 0xbd, - 0xb6, 0x5f, 0x38, 0x59, 0xd2, 0xa8, 0xab, 0x27, 0x8a, 0xbd, 0x9f, 0xb8, - 0x1c, 0x52, 0x0c, 0xd0, 0xe0, 0x9d, 0xd2, 0xbd, 0x00, 0x71, 0xdb, 0xa4, - 0xc1, 0x6d, 0xe0, 0x28, 0xe8, 0x8a, 0xc7, 0x09, 0x51, 0xf8, 0x3f, 0xd2, - 0xd6, 0x93, 0xdf, 0xef, 0x7f, 0x07, 0xdd, 0x00, 0x34, 0xcc, 0x1e, 0x19, - 0xf9, 0x89, 0x05, 0xee, 0x28, 0x87, 0x5a, 0x29, 0x33, 0x80, 0x9e, 0x1e, - 0xb9, 0x6b, 0xdb, 0x3a, 0xd3, 0xdb, 0x23, 0xd7, 0x6f, 0xc3, 0x48, 0xe6, - 0x35, 0x42, 0x23, 0x7a, 0x95, 0xbd, 0x8e, 0xb0, 0x79, 0xaa, 0x74, 0x5e, - 0x59, 0x97, 0xed, 0xf9, 0xf2, 0x0c, 0xa5, 0xc1, 0x33, 0xa5, 0xe9, 0xb9, - 0x9b, 0xec, 0x39, 0xa8, 0x41, 0xfe, 0x6f, 0x2b, 0xda, 0xd2, 0x8b, 0xaf, - 0xa8, 0x1f, 0x1d, 0x22, 0x94, 0x1c, 0x7c, 0x4b, 0xd7, 0xa9, 0x27, 0x60, - 0xda, 0x00, 0x4d, 0x46, 0x4d, 0xb0, 0xe3, 0x0e, 0xf1, 0x27, 0xf4, 0x07, - 0x9d, 0x42, 0x78, 0x78, 0x70, 0x15, 0xa5, 0x12, 0x63, 0x9c, 0x49, 0x26, - 0x6d, 0xc4, 0x93, 0x01, 0x51, 0xf7, 0x34, 0x8b, 0x2d, 0x3f, 0x84, 0x07, - 0x62, 0xaf, 0x16, 0x81, 0x7a, 0x65, 0xf1, 0xce, 0xb3, 0xde, 0x46, 0x0e, - 0x8b, 0xa2, 0x94, 0xa5, 0xb7, 0x04, 0x0e, 0x93, 0x63, 0xf2, 0x1b, 0xa5, - 0xdd, 0xbc, 0x52, 0xdc, 0x6c, 0xaa, 0xb7, 0x12, 0x39, 0x09, 0xf3, 0x3d, - 0x5f, 0x8f, 0x2d, 0xd4, 0x00, 0x08, 0x11, 0xe6, 0xbf, 0xbf, 0xfb, 0xd7, - 0xb2, 0xed, 0xb9, 0x0a, 0x41, 0x46, 0x03, 0xa0, 0x34, 0x09, 0x07, 0xf7, - 0xeb, 0x26, 0x3a, 0x14, 0x8c, 0xfb, 0xb8, 0xd9, 0x87, 0x6b, 0x5e, 0xa2, - 0x04, 0x59, 0x80, 0xff, 0x57, 0x56, 0xba, 0x94, 0xa5, 0xdc, 0xd6, 0xff, - 0x54, 0x4c, 0x2b, 0xf8, 0xa0, 0x60, 0x02, 0xeb, 0x7d, 0xac, 0x2b, 0x3d, - 0xd7, 0xc1, 0xfb, 0x53, 0xed, 0x06, 0xef, 0x60, 0x3f, 0x1e, 0x3a, 0xaf, - 0x58, 0xcf, 0xe4, 0x4e, 0x01, 0x31, 0x7d, 0xdd, 0x96, 0x94, 0x61, 0x8d, - 0x9c, 0x99, 0x17, 0x0f, 0xb4, 0x0e, 0xa3, 0x98, 0x85, 0x41, 0x63, 0x27, - 0x72, 0x6e, 0x91, 0xd3, 0xd1, 0x5f, 0xc3, 0xb7, 0x2a, 0xb4, 0x32, 0x47, - 0x85, 0xaa, 0x84, 0x83, 0x6e, 0x05, 0x23, 0x85, 0x38, 0x04, 0xf5, 0x70, - 0xbc, 0x0a, 0x56, 0x97, 0x41, 0xd7, 0xe8, 0x2c, 0x38, 0x72, 0x48, 0x9f, - 0xd7, 0xda, 0x59, 0x2d, 0x33, 0xfc, 0x06, 0x50, 0xa9, 0xc5, 0x3a, 0x4a, - 0xb2, 0xe9, 0x15, 0x97, 0xfe, 0x4f, 0xdd, 0xfb, 0xab, 0xa4, 0x7c, 0x78, - 0xb2, 0x40, 0x9f, 0x92, 0x58, 0xfb, 0xc6, 0xc8, 0x20, 0x98, 0x1e, 0x10, - 0x41, 0xcb, 0x73, 0x3c, 0x6c, 0x5d, 0xc1, 0x63, 0x6b, 0xa4, 0x0c, 0x7e, - 0xb3, 0x11, 0x03, 0x23, 0xc6, 0x36, 0x33, 0xe9, 0xe5, 0x5d, 0xa6, 0x0c, - 0x0b, 0xd7, 0x93, 0xdb, 0xd9, 0x06, 0xdf, 0x3c, 0x30, 0x75, 0x4f, 0xfd, - 0x20, 0xd5, 0x80, 0x7f, 0xbc, 0xca, 0x29, 0x29, 0x9b, 0xa3, 0x5f, 0xf6, - 0x46, 0x76, 0xe9, 0x07, 0x9d, 0x20, 0xfb, 0xb7, 0x46, 0xbe, 0x9d, 0xe3, - 0x2d, 0x3c, 0x58, 0x44, 0xf4, 0x56, 0x63, 0x54, 0x51, 0xda, 0xf5, 0x4a, - 0xc5, 0x03, 0xc4, 0xf1, 0x6b, 0xa9, 0xbc, 0xe0, 0x32, 0x30, 0xc4, 0xee, - 0x03, 0xbc, 0xf5, 0x07, 0x15, 0xa7, 0x16, 0xbe, 0x81, 0xd2, 0xf3, 0x6a, - 0x94, 0xff, 0x1c, 0x82, 0x96, 0x10, 0xfe, 0xe6, 0xcf, 0xc6, 0xac, 0xb2, - 0xe0, 0xf8, 0x00, 0xff, 0xce, 0x46, 0xcc, 0xf5, 0x5f, 0xce, 0xe1, 0xaf, - 0xd6, 0x26, 0x7a, 0xfb, 0x1f, 0xde, 0x7f, 0x54, 0xa9, 0x91, 0xf8, 0x5d, - 0x76, 0x10, 0x6a, 0x92, 0x11, 0xc5, 0x1a, 0x2c, 0x9d, 0x48, 0x0a, 0xfb, - 0xf6, 0x17, 0xfd, 0x85, 0xa1, 0x81, 0x79, 0x89, 0x4f, 0xfb, 0x56, 0x94, - 0x9e, 0x5a, 0x87, 0x9b, 0x6b, 0x72, 0x4a, 0xd1, 0x13, 0x20, 0xb4, 0xd7, - 0x6a, 0xc6, 0x58, 0xb0, 0x5f, 0x36, 0x2d, 0x76, 0xbc, 0xf3, 0x91, 0x60, - 0xaa, 0xf4, 0x8b, 0x4c, 0x9f, 0xb0, 0x80, 0x95, 0x36, 0x66, 0xb0, 0x83, - 0x9f, 0x90, 0xcb, 0x4e, 0xd8, 0xa1, 0x08, 0x88, 0x67, 0x10, 0x71, 0x04, - 0x85, 0x1f, 0x7f, 0x7d, 0xd6, 0x9f, 0x7b, 0xc3, 0xbf, 0x5e, 0x85, 0x0b, - 0x74, 0x24, 0x8d, 0x43, 0x0f, 0xae, 0x38, 0x9d, 0xaa, 0xa3, 0x6f, 0x7b, - 0x46, 0xce, 0x43, 0xfc, 0x71, 0x9a, 0x57, 0xb9, 0xf8, 0xaa, 0x6a, 0x5e, - 0x22, 0xf4, 0x57, 0x3d, 0xda, 0x6a, 0xe7, 0x88, 0x27, 0xe9, 0xe9, 0xca, - 0xce, 0xad, 0x98, 0x13, 0x93, 0xe5, 0x31, 0x71, 0x4f, 0x1a, 0xe3, 0x80, - 0x23, 0xaa, 0x12, 0xbb, 0x40, 0x04, 0xcb, 0xf6, 0x0c, 0x70, 0x22, 0x31, - 0xab, 0x4b, 0xf1, 0x2f, 0xd7, 0x77, 0x17, 0xf5, 0xdf, 0x6d, 0xed, 0x39, - 0x51, 0x77, 0xe1, 0x9c, 0x32, 0xef, 0xd8, 0x2d, 0x30, 0x60, 0x52, 0x3d, - 0x4b, 0x9a, 0x0b, 0x53, 0x6b, 0x7e, 0xee, 0x5c, 0x28, 0xd9, 0x8e, 0xe7, - 0xe2, 0x85, 0xe2, 0x81, 0x42, 0x0c, 0x23, 0x2d, 0x3f, 0x79, 0x52, 0xe9, - 0x53, 0x8b, 0xc2, 0x50, 0xca, 0x30, 0xe3, 0x4b, 0xca, 0xc5, 0xda, 0x33, - 0x36, 0x3e, 0xc6, 0xef, 0xd8, 0xd6, 0xa6, 0xf7, 0xeb, 0x91, 0xae, 0x61, - 0xb5, 0x44, 0xca, 0xd7, 0x20, 0x3e, 0x43, 0x03, 0xad, 0x1c, 0x52, 0xcf, - 0x0f, 0x0d, 0xad, 0x1b, 0x73, 0x24, 0x1f, 0x77, 0x58, 0xdc, 0x42, 0xd4, - 0x3c, 0x09, 0xfc, 0xdd, 0xcf, 0xf6, 0x2c, 0xdc, 0x39, 0xb8, 0x49, 0x64, - 0x0c, 0xc9, 0x05, 0xa0, 0x74, 0x1b, 0x60, 0x13, 0x4f, 0x67, 0xa3, 0x2a, - 0xf8, 0x3b, 0x7b, 0xaa, 0xdc, 0xda, 0x69, 0x9b, 0xc4, 0xc5, 0xec, 0x24, - 0x3e, 0xf9, 0x64, 0x31, 0x86, 0x39, 0x8f, 0x2b, 0x79, 0x16, 0x03, 0xff, - 0x32, 0x6b, 0xc4, 0xaa, 0x1c, 0xc5, 0x77, 0x79, 0xc4, 0x40, 0x97, 0x62, - 0xea, 0x41, 0xd0, 0xa1, 0x7b, 0x3d, 0xae, 0x7e, 0xde, 0x4d, 0xb3, 0xc9, - 0x21, 0xb6, 0xaf, 0x8b, 0x40, 0xea, 0xd5, 0x3d, 0x40, 0x4e, 0x5f, 0xd4, - 0xa3, 0xcc, 0x1a, 0x89, 0x15, 0xd5, 0x6e, 0x3e, 0xfc, 0x4e, 0xba, 0x93, - 0xcb, 0x95, 0x12, 0xb7, 0x59, 0x96, 0x77, 0x07, 0x40, 0x05, 0x87, 0xde, - 0xad, 0x6d, 0x81, 0xfe, 0x35, 0x45, 0xfa, 0x46, 0x1a, 0xa5, 0x16, 0xc3, - 0xb6, 0x44, 0x19, 0x21, 0xfb, 0x95, 0x23, 0xac, 0x6f, 0xa1, 0x40, 0xff, - 0x76, 0xb9, 0x19, 0xd4, 0x17, 0x44, 0x64, 0x00, 0x6f, 0x7e, 0xb6, 0x1a, - 0x55, 0x10, 0x24, 0x54, 0xe8, 0x4c, 0x8d, 0x19, 0x4f, 0x9d, 0xf4, 0xf7, - 0x4d, 0xc2, 0x58, 0x55, 0x92, 0x63, 0x01, 0xfe, 0xb6, 0xa7, 0x8c, 0xd6, - 0xbd, 0x15, 0x30, 0x91, 0x9c, 0x2e, 0xf8, 0x4c, 0x89, 0xfd, 0x43, 0xa7, - 0x69, 0x93, 0x8f, 0x0d, 0x5c, 0xb2, 0xaf, 0x36, 0x6d, 0x60, 0x29, 0x41, - 0xc2, 0x3b, 0x25, 0xb8, 0xfb, 0xf6, 0xc3, 0x26, 0x15, 0x2c, 0xf3, 0xf2, - 0x6e, 0xf9, 0xd0, 0x94, 0x1c, 0x45, 0x5c, 0xcf, 0xf6, 0x03, 0x59, 0xa7, - 0xad, 0x11, 0x15, 0x36, 0xa8, 0x7e, 0x77, 0xf7, 0x58, 0xe4, 0x68, 0x58, - 0x24, 0x0b, 0x16, 0xce, 0xe7, 0x7f, 0xd6, 0x06, 0x04, 0x1a, 0x92, 0x60, - 0xbc, 0xec, 0x7f, 0x83, 0x1b, 0xe0, 0xcc, 0x12, 0xd1, 0x82, 0x74, 0xce, - 0xb5, 0x64, 0xa1, 0x7e, 0x81, 0x58, 0xcd, 0xb2, 0xd1, 0x8f, 0x1c, 0xea, - 0xb6, 0x6e, 0x02, 0xa5, 0x88, 0x07, 0xaa, 0xfb, 0xe6, 0xbb, 0xea, 0xbd, - 0x0c, 0x15, 0x65, 0x9a, 0x23, 0x6d, 0x5b, 0x03, 0x1a, 0x3c, 0xc7, 0xf1, - 0xf3, 0x4a, 0x29, 0x38, 0xf8, 0x56, 0xcd, 0x4f, 0x42, 0x41, 0x0b, 0x2a, - 0x75, 0x2d, 0x52, 0x30, 0x0c, 0xcb, 0x3d, 0x54, 0xdd, 0xe2, 0x3f, 0xdd, - 0xf6, 0xcd, 0xb5, 0xf5, 0x24, 0xb1, 0xc0, 0x6b, 0x57, 0xe0, 0x6c, 0xbf, - 0x4a, 0x38, 0xc5, 0x12, 0x27, 0x4c, 0x69, 0x87, 0x31, 0x6a, 0x1f, 0xba, - 0xbe, 0xfc, 0x23, 0x34, 0xb5, 0x42, 0x1c, 0x99, 0x7e, 0xb3, 0x43, 0x2b, - 0x22, 0x4d, 0x03, 0xa0, 0x6d, 0x43, 0xa1, 0xcc, 0x27, 0x3a, 0x97, 0x18, - 0xe0, 0x75, 0x2a, 0x30, 0x5d, 0x9f, 0xc1, 0xfb, 0x0e, 0xdb, 0x20, 0xdf, - 0x98, 0xe9, 0xc0, 0xcf, 0x34, 0x38, 0x43, 0x62, 0x76, 0x0b, 0x69, 0xac, - 0x22, 0x3f, 0x3e, 0x8f, 0xb8, 0x9f, 0xa8, 0x52, 0x76, 0x4a, 0xe0, 0x76, - 0x00, 0xdd, 0x92, 0x02, 0x72, 0x05, 0x02, 0x18, 0xd9, 0x7c, 0xd5, 0x5d, - 0x47, 0x1b, 0xed, 0x80, 0xb8, 0xa4, 0x2a, 0xf8, 0x06, 0x66, 0x7d, 0x5f, - 0x23, 0xb9, 0x55, 0xa2, 0x68, 0x3a, 0x11, 0x51, 0xc7, 0xd3, 0xe4, 0x89, - 0x32, 0xd5, 0xf5, 0x53, 0xcd, 0xde, 0xbf, 0x26, 0x5b, 0xa0, 0xa6, 0x0d, - 0x42, 0x50, 0x80, 0xa0, 0x2f, 0x27, 0x13, 0x82, 0x0b, 0xfe, 0xc9, 0x49, - 0xbe, 0xde, 0x87, 0x8f, 0x47, 0x30, 0x22, 0x27, 0x6e, 0xef, 0xf5, 0x82, - 0x44, 0xa8, 0x4a, 0xf7, 0xf2, 0xe4, 0x04, 0x54, 0x4c, 0xf7, 0x83, 0x39, - 0x7d, 0xcb, 0xec, 0x8b, 0x89, 0x70, 0x41, 0xfc, 0x2b, 0xa3, 0x1e, 0x51, - 0xac, 0xa9, 0x11, 0x6a, 0x69, 0xcc, 0x06, 0x99, 0x9f, 0xbc, 0x90, 0x0f, - 0x61, 0x22, 0xa3, 0x61, 0x46, 0x42, 0xce, 0x11, 0x09, 0x31, 0x3a, 0xf8, - 0x9d, 0x05, 0xc7, 0x33, 0x8a, 0x5c, 0xe7, 0x19, 0x09, 0xeb, 0x68, 0x5f, - 0xc7, 0x95, 0x12, 0xe4, 0xd4, 0x38, 0x75, 0x47, 0xa1, 0x66, 0xf1, 0x31, - 0x23, 0xf1, 0x98, 0x16, 0xdd, 0x64, 0xe8, 0xf8, 0x28, 0x57, 0x3e, 0x79, - 0x5b, 0x77, 0x5c, 0x76, 0xce, 0x70, 0xf5, 0x56, 0xc9, 0x4c, 0xf7, 0xcb, - 0x00, 0xd4, 0xc8, 0xe3, 0xbc, 0xe6, 0x20, 0xdf, 0xa1, 0x39, 0x9f, 0x51, - 0x40, 0x96, 0x8f, 0xc1, 0x81, 0x6f, 0xa4, 0x18, 0xb8, 0xb6, 0x0c, 0x16, - 0x5d, 0x1c, 0xfb, 0x3a, 0x82, 0x94, 0x7d, 0x84, 0x55, 0xd0, 0x20, 0x62, - 0xd3, 0xb5, 0x66, 0x6c, 0xa5, 0x22, 0x14, 0x18, 0xed, 0xd9, 0x62, 0x39, - 0xc1, 0x35, 0xc9, 0x03, 0x52, 0x9b, 0x9c, 0x30, 0x2c, 0x9b, 0x5d, 0xd0, - 0xb6, 0xc5, 0x57, 0xda, 0x6c, 0x69, 0xb9, 0xc7, 0x33, 0x8a, 0x17, 0xd0, - 0xcd, 0x22, 0x62, 0xc3, 0x04, 0xc1, 0x79, 0x4c, 0x7f, 0xad, 0x3d, 0xf5, - 0xba, 0xd6, 0x7d, 0x35, 0x9b, 0x49, 0x97, 0xee, 0xaf, 0x2b, 0x5c, 0x01, - 0xf6, 0x88, 0xf1, 0x64, 0xe0, 0x60, 0x1a, 0x09, 0x20, 0x0c, 0x8b, 0x28, - 0x91, 0xc5, 0x5c, 0x0f, 0x2b, 0x11, 0xaf, 0x5f, 0x63, 0xf9, 0xba, 0x44, - 0x9a, 0x75, 0xd4, 0xb2, 0x7e, 0x6a, 0x42, 0xf5, 0x52, 0xfb, 0x65, 0x46, - 0x33, 0xe2, 0xde, 0x50, 0xb3, 0xc6, 0x82, 0x3a, 0x23, 0x3d, 0x06, 0x64, - 0xd9, 0xe5, 0x2b, 0xae, 0x30, 0xa9, 0x9d, 0x09, 0x38, 0x2e, 0xfa, 0xbe, - 0xda, 0xd0, 0x6e, 0xb0, 0xc9, 0xf5, 0xb0, 0xf2, 0xbe, 0x59, 0x7b, 0x32, - 0x7e, 0xaa, 0x6c, 0xf5, 0x68, 0xe4, 0x2c, 0x83, 0x2d, 0x9f, 0xc6, 0x3d, - 0x18, 0x8a, 0xaf, 0x6c, 0x9b, 0x0d, 0x3b, 0xd2, 0x64, 0x1a, 0xf4, 0x43, - 0x05, 0xe2, 0x02, 0x20, 0x06, 0xb8, 0x9b, 0x0e, 0x4a, 0x23, 0x95, 0x1c, - 0x3e, 0x14, 0x36, 0x3d, 0x15, 0x46, 0x98, 0x2a, 0xa5, 0xdf, 0xd9, 0x07, - 0x6a, 0x70, 0xd2, 0x33, 0x8c, 0xb2, 0x9a, 0x62, 0x30, 0x08, 0x06, 0xc7, - 0x96, 0x04, 0xc1, 0xfc, 0x1b, 0x11, 0xe9, 0x6c, 0x96, 0x36, 0xfe, 0x3a, - 0x66, 0x02, 0x97, 0xdd, 0x32, 0xab, 0x76, 0x78, 0xda, 0x28, 0x0e, 0x31, - 0x6c, 0xe9, 0x1e, 0x40, 0xbe, 0x6d, 0x18, 0x5c, 0xdf, 0x13, 0x4d, 0x83, - 0x90, 0xec, 0x50, 0xf7, 0xea, 0xad, 0x32, 0x3f, 0x42, 0x79, 0x08, 0x7d, - 0x70, 0x80, 0x8b, 0x47, 0x21, 0xec, 0x90, 0x7d, 0x6c, 0x74, 0xf7, 0x32, - 0x03, 0x3a, 0xf3, 0x93, 0xb4, 0x02, 0xf2, 0xe1, 0xcb, 0x05, 0xf5, 0xc5, - 0xd4, 0x92, 0x22, 0x6e, 0x80, 0xc5, 0x01, 0x10, 0x5c, 0x42, 0x58, 0xb0, - 0x00, 0x74, 0x40, 0x1f, 0x00, 0x01, 0x7d, 0x68, 0x68, 0x55, 0xe9, 0xb1, - 0x3b, 0x2b, 0xaa, 0xba, 0xeb, 0xc8, 0xc6, 0xaa, 0xdb, 0x85, 0x12, 0x9b, - 0x3a, 0x89, 0x97, 0x70, 0x30, 0x00, 0xcf, 0x13, 0x0c, 0x81, 0x93, 0x14, - 0x9e, 0x0a, 0xf6, 0x64, 0xb3, 0x1e, 0x83, 0xb7, 0x50, 0x2d, 0xd5, 0x39, - 0x74, 0xe5, 0xb1, 0x9e, 0x68, 0xae, 0xc4, 0xd5, 0xa8, 0x72, 0x11, 0xe7, - 0xfc, 0xc5, 0xa1, 0x73, 0x08, 0xc4, 0xb2, 0xd8, 0x72, 0x7c, 0x5e, 0xdc, - 0xc5, 0x94, 0x1a, 0xc2, 0xeb, 0x13, 0x00, 0xf1, 0xf0, 0xd4, 0x36, 0x9d, - 0x24, 0x3a, 0x2a, 0x6b, 0xbf, 0x03, 0xf2, 0xce, 0x9b, 0x72, 0x6a, 0x78, - 0x21, 0x6c, 0x3f, 0xf1, 0xcf, 0x66, 0xb6, 0x3b, 0x9d, 0x68, 0x07, 0x2d, - 0xe0, 0xca, 0x2a, 0x84, 0x5c, 0x1d, 0xd4, 0xde, 0x82, 0xad, 0xc0, 0x88, - 0x82, 0x58, 0xed, 0x72, 0x94, 0x18, 0x13, 0xd4, 0xc3, 0x35, 0x3e, 0xb4, - 0x34, 0x6f, 0x26, 0x51, 0xf2, 0x34, 0xde, 0xed, 0xb7, 0x52, 0xa0, 0x94, - 0x85, 0x52, 0xdc, 0x38, 0xd9, 0x73, 0xdd, 0xd7, 0xa0, 0x6f, 0xec, 0xcf, - 0xd9, 0x3d, 0xd2, 0xf4, 0xc1, 0xcc, 0x46, 0xc6, 0xf7, 0xb8, 0x8c, 0xaa, - 0x71, 0xbc, 0x48, 0xdb, 0xb1, 0xba, 0x5e, 0x4c, 0x71, 0x67, 0x22, 0x38, - 0x9b, 0x7c, 0x47, 0x73, 0xf4, 0xc1, 0x9d, 0x9e, 0x51, 0x93, 0xe7, 0x9b, - 0xee, 0x86, 0xaf, 0x1b, 0x6f, 0x1c, 0x5c, 0x6f, 0x0d, 0xca, 0x17, 0xc9, - 0xcc, 0x74, 0xdd, 0xaa, 0x40, 0xde, 0x63, 0xee, 0x46, 0x9c, 0x60, 0x49, - 0xee, 0x6e, 0x8d, 0xaf, 0xbe, 0x5b, 0x39, 0xc1, 0xdb, 0x2c, 0xaa, 0x2f, - 0xed, 0x0d, 0x52, 0xcd, 0x40, 0xd8, 0x7a, 0xd3, 0x81, 0x2d, 0x76, 0x70, - 0xee, 0x7e, 0xe9, 0xdd, 0xe7, 0x74, 0x08, 0xa0, 0x40, 0xab, 0x55, 0x1d, - 0x25, 0xe2, 0xc1, 0xd4, 0xe8, 0xf2, 0xdf, 0x35, 0x5b, 0x19, 0xd9, 0x18, - 0x18, 0x0f, 0x0e, 0xeb, 0x5f, 0xf4, 0x0b, 0xc3, 0x38, 0xb6, 0x0a, 0x16, - 0x45, 0xa3, 0xb7, 0x5a, 0x44, 0x2c, 0x45, 0x5f, 0x57, 0x69, 0xd9, 0x7d, - 0xe5, 0x92, 0xcc, 0x97, 0xd7, 0x35, 0x08, 0x28, 0x80, 0x1c, 0xab, 0x8d, - 0xc6, 0x58, 0xe6, 0xd1, 0x60, 0xb6, 0x09, 0x36, 0x40, 0x0c, 0x00, 0xf1, - 0x13, 0xd7, 0x58, 0xca, 0x58, 0x1f, 0x88, 0x52, 0xb4, 0x20, 0x64, 0x9d, - 0x3a, 0x22, 0xa9, 0xef, 0x83, 0x6c, 0x35, 0x34, 0x43, 0x55, 0x5f, 0x7c, - 0xfd, 0xb2, 0x1d, 0xa5, 0x22, 0x7a, 0xdc, 0xcf, 0xae, 0x1d, 0x09, 0xfb, - 0x72, 0xbf, 0xa0, 0x49, 0xe3, 0xe0, 0x47, 0xfe, 0xbf, 0xb4, 0xcf, 0x97, - 0xf3, 0x69, 0xa0, 0x1b, 0x59, 0x7f, 0x99, 0xea, 0xd2, 0x5b, 0x01, 0xa8, - 0xaf, 0xe3, 0x97, 0xfe, 0xa9, 0xe2, 0xd7, 0x18, 0x20, 0x65, 0xa9, 0x36, - 0x77, 0x7c, 0x5f, 0x46, 0x9f, 0xe8, 0x76, 0xfc, 0x17, 0x81, 0x92, 0x92, - 0xd9, 0x38, 0xcf, 0x88, 0x39, 0x53, 0xcd, 0x9a, 0x7d, 0x63, 0xba, 0x9c, - 0x2e, 0x97, 0x15, 0xbf, 0xd2, 0x76, 0x97, 0x8d, 0x15, 0x5a, 0x06, 0x13, - 0x1d, 0xfd, 0x4b, 0x38, 0xfb, 0x7c, 0x9e, 0x08, 0x10, 0xee, 0x95, 0x49, - 0x8e, 0x28, 0xe7, 0x9f, 0x92, 0x55, 0xee, 0xa8, 0xf5, 0x7c, 0x87, 0x81, - 0x7d, 0x6f, 0x96, 0x83, 0xc9, 0x49, 0x9a, 0xc0, 0x96, 0x9a, 0xfe, 0x05, - 0x04, 0xa5, 0x7b, 0xd5, 0xf2, 0x62, 0xf6, 0x29, 0xa6, 0x5e, 0x27, 0x2f, - 0xa7, 0x7c, 0x8a, 0x51, 0x35, 0xb8, 0x82, 0xc2, 0xc8, 0x35, 0xcd, 0x2d, - 0x9e, 0x2f, 0x16, 0xc6, 0x1d, 0x6a, 0xca, 0x33, 0x55, 0x75, 0x25, 0x1d, - 0x65, 0x9a, 0x9b, 0xbf, 0x05, 0x0b, 0xf5, 0x59, 0x70, 0x3b, 0x06, 0xc8, - 0x66, 0x89, 0xdb, 0x5c, 0x7e, 0xa0, 0x5d, 0x36, 0x9e, 0x79, 0xf9, 0xc7, - 0xab, 0xab, 0x88, 0x8d, 0xdf, 0xc4, 0xd7, 0x68, 0xa9, 0x11, 0x57, 0x16, - 0x74, 0xf6, 0x2f, 0x96, 0xce, 0x10, 0xa1, 0xdc, 0x4d, 0xaa, 0xef, 0x62, - 0xcb, 0xc6, 0x72, 0x19, 0xc9, 0xee, 0xbf, 0xe7, 0xf9, 0x5b, 0x39, 0x4d, - 0x1d, 0x02, 0x1c, 0xd6, 0xd0, 0xa5, 0x06, 0x97, 0x1a, 0xcd, 0xfb, 0x0b, - 0x7e, 0x7c, 0x9b, 0xa1, 0xab, 0xb9, 0x50, 0x0d, 0xce, 0x91, 0x1b, 0x95, - 0xc9, 0xfd, 0x39, 0x80, 0x7a, 0x14, 0x02, 0x63, 0x23, 0x7b, 0x14, 0x34, - 0x3d, 0x52, 0xcf, 0x7b, 0xa2, 0x9f, 0x84, 0x6d, 0xb4, 0x1f, 0xff, 0x41, - 0x28, 0x87, 0xbc, 0xfc, 0x59, 0xa4, 0x9e, 0xe6, 0xb0, 0x22, 0x2c, 0x57, - 0x68, 0xf4, 0x6d, 0xcf, 0xe5, 0x32, 0xcb, 0x7f, 0x25, 0xe5, 0xf2, 0xaf, - 0x7a, 0xb3, 0x67, 0xbb, 0xbc, 0x1a, 0xa9, 0xcc, 0xcd, 0x33, 0xfc, 0x21, - 0x09, 0xff, 0xbf, 0x32, 0xe7, 0xbe, 0xca, 0xe7, 0xbd, 0xca, 0xa9, 0x5c, - 0xb7, 0x6f, 0xe5, 0xb6, 0x6d, 0x9a, 0x75, 0xc7, 0x35, 0xa2, 0xf0, 0xa4, - 0x4a, 0x3e, 0x32, 0xb0, 0xc4, 0xf4, 0xfd, 0xad, 0x1f, 0xc9, 0x1c, 0xb9, - 0x53, 0x2e, 0xd3, 0xcc, 0x89, 0x7f, 0x89, 0x70, 0xa5, 0x46, 0xb7, 0x6b, - 0xca, 0x45, 0xe2, 0x82, 0x2f, 0x85, 0x56, 0x0b, 0x93, 0xbb, 0xa4, 0x69, - 0xba, 0xb5, 0x9e, 0x95, 0xe2, 0x0a, 0xa3, 0x90, 0x8d, 0xdb, 0x66, 0xba, - 0x72, 0xf3, 0x4a, 0xd1, 0xa1, 0xc5, 0xf8, 0xdf, 0xdc, 0xc0, 0x92, 0x98, - 0xce, 0x17, 0x4c, 0xfe, 0xf0, 0x5e, 0xc6, 0x82, 0xf8, 0x38, 0xe6, 0x4e, - 0x0e, 0x7b, 0x8f, 0x76, 0xd5, 0x14, 0xbd, 0xd6, 0xb5, 0x23, 0x09, 0xba, - 0xbe, 0xed, 0xf0, 0x2a, 0xe7, 0xdc, 0x2a, 0xfe, 0x9e, 0xcf, 0x1b, 0x2e, - 0x6e, 0x81, 0x53, 0x78, 0xdf, 0x4d, 0x62, 0x05, 0x99, 0x2e, 0x11, 0x96, - 0x7e, 0xd9, 0x0d, 0xe7, 0xd5, 0x73, 0x1f, 0x5c, 0xa3, 0xe4, 0x3b, 0xff, - 0xdd, 0xa3, 0x83, 0x6c, 0xf7, 0xd3, 0x0f, 0x9e, 0xce, 0x73, 0xd9, 0x52, - 0x68, 0xea, 0x99, 0xb7, 0xab, 0x88, 0xfd, 0x2f, 0x1e, 0xc9, 0x23, 0x6f, - 0x98, 0x54, 0xac, 0x00, 0x9b, 0x9b, 0x0f, 0xe1, 0x09, 0xa1, 0xb3, 0xe6, - 0x23, 0x73, 0xa2, 0x27, 0xe1, 0x1d, 0x06, 0x96, 0x61, 0x20, 0x96, 0x24, - 0x00, 0xb5, 0x22, 0x9b, 0xca, 0xd6, 0xbb, 0x2d, 0x72, 0x0d, 0xea, 0xa2, - 0xde, 0xfb, 0x8b, 0xfa, 0x41, 0xd6, 0xc8, 0x80, 0x8b, 0x33, 0x79, 0x6b, - 0xc0, 0xf3, 0xd9, 0x09, 0xe9, 0x6d, 0x86, 0xcd, 0x1d, 0x30, 0xb9, 0x98, - 0x85, 0xc4, 0x1f, 0x90, 0xcd, 0x07, 0x91, 0xf2, 0x50, 0xf8, 0xfc, 0x0f, - 0xd7, 0x58, 0xbb, 0x73, 0x65, 0x3e, 0x32, 0x22, 0x37, 0x91, 0x72, 0x20, - 0xee, 0x77, 0x2c, 0xc7, 0x76, 0x85, 0xf2, 0x6a, 0xcf, 0x9c, 0xe3, 0xe7, - 0x08, 0x3f, 0xa8, 0xee, 0x04, 0x02, 0x66, 0x8e, 0x08, 0xcc, 0x25, 0xde, - 0xca, 0xd4, 0x6b, 0xba, 0xd3, 0x0a, 0x49, 0x5b, 0x92, 0x46, 0x11, 0x5a, - 0x0c, 0x8c, 0x17, 0x7b, 0xbc, 0xad, 0xab, 0x20, 0x3b, 0xde, 0x0f, 0xe9, - 0x7d, 0x7d, 0xf3, 0x6b, 0x22, 0x90, 0xe1, 0x00, 0xd2, 0xa9, 0xbd, 0x78, - 0x4e, 0xda, 0x3b, 0x8d, 0xb5, 0xad, 0x8c, 0xf2, 0x23, 0x38, 0x7f, 0x67, - 0xc6, 0x87, 0x1e, 0xa6, 0x40, 0xe7, 0xd3, 0x35, 0x10, 0x0e, 0xa1, 0x61, - 0x60, 0x48, 0xa6, 0x1f, 0x61, 0xe2, 0x7f, 0x5e, 0x2b, 0xcf, 0xd5, 0x86, - 0x55, 0x7a, 0xa4, 0xd5, 0x58, 0x4b, 0x12, 0x30, 0x77, 0x15, 0x10, 0x00, - 0xc9, 0xe1, 0x70, 0x2e, 0x8a, 0x7c, 0xb6, 0x3a, 0x84, 0xef, 0x6c, 0x9f, - 0xef, 0xf1, 0x6c, 0xf2, 0x22, 0xa4, 0x36, 0xc2, 0x2d, 0xc5, 0x7e, 0xb1, - 0x9d, 0xdb, 0x5b, 0xb9, 0x3b, 0x06, 0x76, 0x21, 0x5d, 0xfc, 0x06, 0xb7, - 0x15, 0xc0, 0x0d, 0xf4, 0x07, 0x64, 0x26, 0x92, 0x3c, 0xbb, 0x99, 0xa3, - 0xdf, 0x8e, 0x67, 0x06, 0x17, 0xee, 0x3c, 0xa4, 0x97, 0x8e, 0x83, 0x4e, - 0x4b, 0x82, 0x4c, 0x40, 0x45, 0x63, 0x8a, 0xcc, 0xfd, 0x4d, 0x13, 0xb3, - 0x5d, 0x56, 0x5d, 0x55, 0x62, 0x69, 0x83, 0x5b, 0x7f, 0x62, 0x43, 0x71, - 0xc0, 0xf5, 0x0f, 0x2c, 0xc7, 0x5b, 0x1d, 0x50, 0xac, 0x3f, 0x9b, 0xfa, - 0x75, 0xd9, 0x77, 0xa9, 0x67, 0x83, 0x24, 0x9a, 0x48, 0xdd, 0xbe, 0x54, - 0x68, 0x05, 0x3b, 0xf4, 0x9b, 0xac, 0xce, 0x2e, 0x85, 0x06, 0xc5, 0x08, - 0xad, 0x2d, 0x7d, 0xd1, 0xd8, 0x40, 0x17, 0x57, 0x2c, 0x0e, 0xdc, 0x5c, - 0x21, 0xac, 0x55, 0xdd, 0x69, 0xe0, 0x4c, 0x13, 0x85, 0x29, 0x78, 0x43, - 0xdf, 0xea, 0xc5, 0x3f, 0x74, 0x0c, 0x8a, 0x12, 0xeb, 0xf7, 0x53, 0x2f, - 0x4f, 0x25, 0x20, 0x38, 0xb2, 0x88, 0xce, 0x16, 0x95, 0x98, 0xab, 0xa6, - 0xf8, 0x8a, 0x40, 0x67, 0x6d, 0x71, 0xb7, 0xa8, 0x9f, 0x33, 0x27, 0x19, - 0x69, 0x37, 0xb0, 0xea, 0xae, 0x1b, 0xe1, 0x7d, 0xad, 0xcb, 0x60, 0x5d, - 0xb6, 0x81, 0x8a, 0x1f, 0x66, 0x6f, 0x65, 0xa2, 0x1c, 0x8a, 0x8d, 0x77, - 0x37, 0x1f, 0x13, 0x22, 0x08, 0x09, 0xdb, 0x81, 0x70, 0x5f, 0x4b, 0xba, - 0x06, 0x14, 0x2d, 0x2c, 0xf9, 0xfd, 0x64, 0xdf, 0x76, 0x28, 0xfa, 0x98, - 0x16, 0x9f, 0x85, 0x38, 0x5a, 0x92, 0x0a, 0x7a, 0x1e, 0x38, 0xf6, 0x23, - 0x2e, 0xd0, 0xad, 0xb5, 0x68, 0x78, 0x67, 0x77, 0x95, 0x2a, 0x7e, 0x5a, - 0x22, 0x15, 0x93, 0x16, 0x91, 0xdd, 0x63, 0x22, 0x5d, 0x83, 0x58, 0xe2, - 0xe0, 0xe1, 0x45, 0x65, 0x3e, 0x16, 0xaa, 0x57, 0x5f, 0xbe, 0xc3, 0xdf, - 0xda, 0xdd, 0x0f, 0x2c, 0x15, 0x7d, 0x10, 0x68, 0xef, 0xe8, 0x94, 0x85, - 0xd7, 0xf2, 0x27, 0x3f, 0x14, 0x76, 0xef, 0xb9, 0x63, 0x30, 0x1b, 0x93, - 0x98, 0x75, 0x56, 0x5a, 0x3e, 0x04, 0x07, 0x1a, 0x65, 0xbf, 0x18, 0xc6, - 0x2c, 0x64, 0x33, 0x5c, 0x09, 0x21, 0x33, 0xe2, 0x57, 0x5a, 0xd1, 0xb5, - 0xa2, 0xa1, 0x5d, 0xae, 0xba, 0xc1, 0x8f, 0x48, 0x78, 0xbb, 0x98, 0x0a, - 0x31, 0xd7, 0x95, 0x7e, 0x2c, 0xf2, 0xd7, 0x41, 0x4e, 0x2b, 0x46, 0x4c, - 0xe2, 0x20, 0xbc, 0x78, 0x2f, 0x7a, 0xf5, 0x64, 0x75, 0x3f, 0x22, 0x9f, - 0x1d, 0xfc, 0xc7, 0xbc, 0x39, 0x99, 0x70, 0x3d, 0xe3, 0x94, 0x6d, 0xb1, - 0x1a, 0x80, 0x92, 0xbd, 0x9d, 0xd2, 0xb9, 0x0d, 0xc5, 0x61, 0xe4, 0x70, - 0x63, 0x27, 0x8b, 0x5c, 0x5b, 0xa8, 0x1d, 0x3b, 0xad, 0x29, 0x26, 0x4b, - 0x67, 0x9a, 0x27, 0x11, 0xfa, 0x42, 0xd9, 0x76, 0x11, 0x51, 0x47, 0x9f, - 0xed, 0xfa, 0x62, 0xc9, 0xd2, 0x7c, 0x87, 0xca, 0xc4, 0x67, 0x9c, 0xee, - 0xff, 0xcf, 0x2c, 0x83, 0xa9, 0x9f, 0xca, 0xf1, 0x6a, 0xe3, 0x6f, 0x4b, - 0x11, 0xd4, 0xa5, 0x42, 0x53, 0xa2, 0x4a, 0x11, 0xfc, 0xc6, 0xa8, 0x6a, - 0x68, 0xcb, 0x6e, 0xac, 0xa1, 0x47, 0xc2, 0xea, 0xd7, 0x45, 0xa2, 0xd9, - 0xeb, 0x89, 0x3e, 0x98, 0x24, 0x20, 0x92, 0x71, 0xec, 0xf0, 0xbc, 0xbd, - 0xcd, 0x46, 0x46, 0x47, 0x1d, 0x54, 0xc2, 0x11, 0xb0, 0x76, 0xe7, 0x6c, - 0xb7, 0xcd, 0xd2, 0x6d, 0xc5, 0x4f, 0x44, 0xf1, 0xe5, 0x19, 0x36, 0x89, - 0x9e, 0xf0, 0xbf, 0x3f, 0x07, 0x17, 0x58, 0xb3, 0x68, 0x44, 0x14, 0x44, - 0x3f, 0xf9, 0x01, 0x70, 0xdc, 0xf9, 0x6f, 0x5d, 0xa0, 0x27, 0xa6, 0x0b, - 0x41, 0x74, 0x4e, 0xcd, 0x77, 0xdb, 0x6c, 0x40, 0xd0, 0x21, 0x4a, 0xa2, - 0x01, 0x85, 0x8c, 0x34, 0x3b, 0xca, 0x31, 0xa6, 0x48, 0x5d, 0x37, 0xc8, - 0xa1, 0xd5, 0xe0, 0x7f, 0x3e, 0xeb, 0x22, 0xba, 0xca, 0xe6, 0xd6, 0x71, - 0x63, 0x06, 0x89, 0x46, 0xf0, 0xe5, 0x38, 0x92, 0x28, 0x5d, 0x4c, 0xb9, - 0xbb, 0x70, 0x9e, 0x89, 0xb1, 0xe7, 0xf5, 0x1a, 0x86, 0xe8, 0x01, 0x83, - 0x6e, 0xb6, 0x37, 0x3a, 0xfb, 0xb8, 0x2f, 0x11, 0x7d, 0xa2, 0x5d, 0xf8, - 0x2a, 0x8c, 0xb7, 0xac, 0xbe, 0x89, 0xb9, 0x59, 0x62, 0x09, 0xbf, 0x95, - 0xf8, 0x04, 0x28, 0xf2, 0xd0, 0xe1, 0x0f, 0x48, 0xb1, 0xc7, 0xfa, 0x5e, - 0xb1, 0xb7, 0x60, 0x74, 0x96, 0x53, 0xb0, 0xac, 0x14, 0xbf, 0xb2, 0xc2, - 0xbe, 0xc2, 0xb1, 0xcf, 0xfd, 0xbc, 0xd9, 0x35, 0xa6, 0x63, 0x09, 0x63, - 0x14, 0xc4, 0x8a, 0x5a, 0x1f, 0x45, 0x06, 0xa8, 0x6c, 0xe7, 0xdc, 0x5b, - 0x81, 0x2f, 0xa5, 0xd4, 0xcf, 0x71, 0x0c, 0x22, 0x5d, 0x80, 0x31, 0x49, - 0xbe, 0x4c, 0xe6, 0x1e, 0xe6, 0xad, 0x82, 0x78, 0xc2, 0xe5, 0xfd, 0x91, - 0x36, 0xc1, 0xc6, 0xf1, 0x1f, 0xbe, 0xf5, 0xa2, 0x8e, 0x86, 0xf9, 0x05, - 0xd3, 0xd2, 0x01, 0x3d, 0x2d, 0xb2, 0xd0, 0x35, 0x75, 0xbd, 0x3d, 0x28, - 0xc4, 0xc3, 0xa4, 0xf7, 0x64, 0x85, 0x9c, 0x1c, 0x84, 0x81, 0x40, 0x4f, - 0x69, 0x8e, 0xb8, 0x88, 0xb6, 0x0b, 0x35, 0x45, 0x1a, 0x34, 0xa3, 0x1f, - 0x8f, 0xc5, 0x62, 0x3f, 0xa9, 0x9e, 0xaa, 0xb0, 0x3c, 0xcf, 0x5d, 0x11, - 0xb8, 0xfe, 0xac, 0xfa, 0xfa, 0x0f, 0x7b, 0x97, 0x7e, 0x3e, 0x13, 0x59, - 0xc2, 0x65, 0x4a, 0x18, 0xe6, 0xa0, 0x2a, 0x9a, 0x9a, 0x07, 0x73, 0x0a, - 0x0d, 0x95, 0xa8, 0x3e, 0xb9, 0x08, 0x90, 0x71, 0xd0, 0x37, 0x76, 0x57, - 0xc9, 0x72, 0x68, 0x2e, 0x7b, 0x69, 0xa6, 0x56, 0xcd, 0xb4, 0x37, 0x18, - 0xba, 0x9c, 0xbb, 0x25, 0x7b, 0xde, 0xa8, 0xec, 0xd6, 0x31, 0xcb, 0x91, - 0x28, 0x38, 0x15, 0x33, 0x4b, 0xaf, 0x06, 0xb2, 0x3e, 0x39, 0x5b, 0x65, - 0x26, 0xb4, 0x9a, 0x32, 0xcf, 0x07, 0x4e, 0x4e, 0xd8, 0x8e, 0x70, 0x02, - 0x0a, 0xbf, 0xee, 0x9a, 0x65, 0xa3, 0xed, 0xb6, 0x62, 0xdd, 0x0d, 0xc2, - 0xa7, 0x45, 0x37, 0xb4, 0x6d, 0xfe, 0xdf, 0x05, 0x97, 0xb3, 0xe2, 0x0a, - 0x24, 0x63, 0x68, 0xe0, 0xf9, 0xff, 0xd0, 0xcb, 0x52, 0xbc, 0x4d, 0xe0, - 0xfc, 0x7f, 0xc2, 0x66, 0x23, 0xd1, 0x39, 0x73, 0xb9, 0x64, 0xd7, 0xb9, - 0x81, 0x32, 0x5b, 0xa3, 0xbd, 0xbd, 0x87, 0x5f, 0x90, 0x2a, 0x03, 0xfc, - 0xa6, 0xba, 0xa2, 0xd1, 0xbe, 0xc2, 0x02, 0x03, 0x56, 0xcb, 0xf7, 0x5f, - 0x50, 0x8f, 0x5e, 0x3c, 0xab, 0xb9, 0xae, 0x57, 0xf8, 0x73, 0xf3, 0xce, - 0xd6, 0x86, 0xe2, 0x88, 0x0f, 0x38, 0xfc, 0x3c, 0xc4, 0x42, 0xdd, 0x84, - 0xfc, 0xc9, 0x52, 0xd8, 0xd1, 0x5c, 0x98, 0x69, 0xbb, 0x51, 0xe9, 0x35, - 0xec, 0xb4, 0x28, 0x1c, 0xfe, 0x08, 0xe9, 0x9b, 0x89, 0x6d, 0x4c, 0x21, - 0x96, 0x2b, 0x87, 0x4d, 0xa4, 0xce, 0x5b, 0x97, 0xab, 0xc1, 0x1c, 0xa4, - 0xd5, 0xe4, 0x3b, 0x5c, 0x17, 0x20, 0xac, 0xa9, 0xe2, 0xe2, 0xeb, 0x5e, - 0x49, 0xd8, 0x6c, 0x92, 0xf6, 0x0d, 0x0c, 0x51, 0xce, 0xfc, 0xc7, 0x10, - 0x6a, 0xc2, 0xb3, 0xb5, 0xfd, 0xec, 0x4f, 0x5c, 0xf0, 0x94, 0x74, 0xe5, - 0xf5, 0x8f, 0xf2, 0xe1, 0xf6, 0x4f, 0x30, 0x03, 0xd9, 0x72, 0x17, 0x15, - 0xd0, 0x92, 0x27, 0xad, 0x54, 0x0f, 0x5f, 0x82, 0x75, 0x58, 0x50, 0xd3, - 0x75, 0x5d, 0x61, 0xde, 0xaf, 0x60, 0x06, 0x13, 0x57, 0x7d, 0x57, 0xa3, - 0x35, 0x5a, 0x4c, 0xb1, 0xcf, 0x04, 0x63, 0x2f, 0x6c, 0xd2, 0xfb, 0x9f, - 0x39, 0x74, 0x8d, 0x77, 0xd7, 0x0e, 0x6b, 0x79, 0x8f, 0x53, 0xb2, 0x84, - 0x6e, 0x03, 0xc9, 0x93, 0x68, 0x07, 0x9a, 0xf3, 0x66, 0x1e, 0x27, 0x55, - 0x63, 0x10, 0x3a, 0x17, 0x0c, 0x75, 0xb4, 0xae, 0xef, 0x2d, 0xcc, 0x1e, - 0x40, 0xed, 0x59, 0x73, 0xb5, 0xe4, 0xec, 0xb5, 0xf5, 0xab, 0x94, 0x8e, - 0x44, 0xfb, 0xa6, 0x0d, 0x56, 0xe0, 0xfb, 0x97, 0xdf, 0x16, 0x27, 0xa7, - 0x8a, 0x1c, 0x45, 0x16, 0xd4, 0xd3, 0xd8, 0x51, 0x3d, 0xe3, 0xf1, 0x22, - 0xe4, 0xd7, 0x35, 0xd6, 0x31, 0x81, 0x12, 0xc6, 0xcc, 0x46, 0x5d, 0x1b, - 0x69, 0x42, 0x7b, 0x29, 0x8a, 0x60, 0x4c, 0x80, 0x9c, 0xa1, 0xef, 0xd1, - 0x29, 0x5b, 0xf7, 0x83, 0xc9, 0x3f, 0xe8, 0x87, 0x30, 0xdf, 0x70, 0xbb, - 0xec, 0x01, 0xd9, 0xae, 0xa6, 0xd6, 0x74, 0x5d, 0xa0, 0x51, 0x98, 0x36, - 0x3e, 0x0d, 0x80, 0xfc, 0xa7, 0x5f, 0x67, 0x46, 0xb0, 0xe1, 0x6f, 0x66, - 0xbe, 0x7b, 0x44, 0x63, 0xa3, 0x21, 0xd6, 0x20, 0xf5, 0x0b, 0xb4, 0xd4, - 0x0a, 0x0b, 0x1e, 0xb3, 0x38, 0x97, 0xac, 0x5c, 0x29, 0x74, 0xa5, 0x2b, - 0xa7, 0xed, 0xe6, 0xcd, 0x08, 0xa3, 0x7f, 0x85, 0x45, 0x11, 0x12, 0x8d, - 0xe3, 0x79, 0xe7, 0xe7, 0x13, 0x76, 0xc1, 0xd8, 0x50, 0x6f, 0x9a, 0x9c, - 0xcd, 0xec, 0xe8, 0x19, 0x9a, 0x9d, 0xe1, 0x1a, 0xcc, 0x86, 0x15, 0x73, - 0x06, 0x87, 0x37, 0xea, 0x6e, 0xd9, 0x19, 0xdd, 0x3f, 0xea, 0xac, 0x88, - 0xad, 0xe9, 0x10, 0xe3, 0xf9, 0xd5, 0x55, 0x53, 0x62, 0x57, 0x1c, 0xa0, - 0x59, 0x2b, 0x05, 0xc7, 0xda, 0x85, 0x09, 0xdf, 0xc4, 0x1f, 0xb0, 0x26, - 0xe8, 0xa8, 0x70, 0x73, 0x0d, 0x78, 0xe4, 0x6f, 0x36, 0x54, 0x28, 0x9b, - 0x96, 0xf2, 0x78, 0x62, 0x4e, 0x44, 0xb7, 0x16, 0xca, 0xf5, 0xac, 0x55, - 0x12, 0x05, 0xe1, 0xbd, 0x6e, 0x75, 0x53, 0x64, 0x87, 0x44, 0xc7, 0x9a, - 0x2e, 0xd0, 0x8d, 0xd5, 0xe7, 0xef, 0x03, 0xa4, 0x72, 0x98, 0xa5, 0x27, - 0xd7, 0x90, 0xbe, 0x73, 0x7b, 0xf1, 0xc0, 0xba, 0x24, 0xef, 0x61, 0x28, - 0xad, 0x0d, 0xdb, 0xbf, 0x1c, 0x53, 0x9c, 0xf7, 0xac, 0x36, 0x63, 0xcd, - 0xf8, 0xcf, 0x1f, 0x88, 0x1e, 0xe6, 0x9c, 0x64, 0x3f, 0xea, 0xdc, 0x64, - 0x66, 0x22, 0xea, 0x69, 0xf8, 0xb7, 0x06, 0x01, 0x34, 0xf2, 0x16, 0xbf, - 0xf1, 0x0a, 0xc4, 0x00, 0xfb, 0xa8, 0x2a, 0xb2, 0x47, 0xea, 0x28, 0xe9, - 0x01, 0x9c, 0x6b, 0x3d, 0x68, 0xe8, 0x65, 0x47, 0x0f, 0x63, 0x9b, 0xb5, - 0xbd, 0x83, 0xf3, 0x91, 0xf4, 0xeb, 0x14, 0x46, 0xff, 0xef, 0xa5, 0xd5, - 0x20, 0xe6, 0x18, 0xfe, 0xaf, 0xa9, 0xc8, 0xc4, 0x5b, 0x5d, 0x93, 0x52, - 0x12, 0x78, 0x25, 0x17, 0x67, 0x71, 0xa2, 0x76, 0x79, 0xd1, 0xa5, 0x9c, - 0xa1, 0x8f, 0x2b, 0x31, 0x23, 0x13, 0x5d, 0x04, 0xe6, 0x5c, 0x74, 0xb3, - 0x6f, 0xfd, 0xf0, 0x02, 0xd7, 0x6e, 0xdf, 0x0e, 0xc2, 0x09, 0x05, 0xff, - 0x5b, 0xd1, 0xe7, 0xf3, 0x3f, 0xec, 0x59, 0x25, 0xe4, 0x49, 0xd4, 0x96, - 0x86, 0x64, 0xbc, 0x3f, 0x23, 0x07, 0x88, 0xab, 0x78, 0xb1, 0x8a, 0x67, - 0xf8, 0xe3, 0xdb, 0x0d, 0xcf, 0x4e, 0xbb, 0x4c, 0xf9, 0x03, 0x75, 0xe2, - 0x6d, 0xec, 0xc7, 0xaa, 0x4a, 0xf3, 0xe3, 0x71, 0x67, 0x9c, 0x23, 0xd7, - 0xa9, 0x95, 0x20, 0xee, 0x5d, 0xbf, 0xc8, 0x2a, 0xe3, 0xc1, 0xb6, 0x32, - 0x2e, 0xe7, 0xa9, 0xc0, 0x55, 0xea, 0xd7, 0x99, 0x5f, 0xb4, 0xbc, 0x31, - 0x9b, 0x3e, 0x5e, 0x0f, 0x77, 0x81, 0xdd, 0xa7, 0x64, 0x44, 0x3a, 0x11, - 0xb0, 0x78, 0x1b, 0x4a, 0x95, 0x31, 0x8d, 0x45, 0x99, 0xb1, 0xac, 0xe1, - 0x1f, 0x53, 0xb5, 0x3d, 0xbb, 0xdc, 0xe0, 0x05, 0x41, 0xac, 0xae, 0x1d, - 0x0c, 0x61, 0x85, 0x0f, 0xdd, 0x66, 0x18, 0xab, 0xf9, 0x01, 0xa4, 0x51, - 0xf9, 0xbb, 0x03, 0x1b, 0xd8, 0xc6, 0x1f, 0x38, 0x42, 0xe9, 0x08, 0x7d, - 0xc0, 0x38, 0x0b, 0x60, 0xd9, 0x2b, 0xc4, 0x9c, 0x0e, 0xf5, 0x44, 0x05, - 0x69, 0x65, 0xf5, 0x22, 0x0a, 0xc4, 0xbf, 0xf9, 0x74, 0xf5, 0x43, 0xb2, - 0x3b, 0xda, 0x8f, 0x8d, 0x1c, 0x0f, 0x0b, 0x28, 0x7d, 0x37, 0x8e, 0x44, - 0x1e, 0x35, 0x03, 0x98, 0xdd, 0x10, 0x60, 0x81, 0x85, 0x4c, 0xdd, 0xcc, - 0x13, 0xd2, 0x9a, 0xad, 0x15, 0xb2, 0x91, 0xd9, 0x7c, 0xb6, 0xff, 0xa4, - 0x1f, 0xa9, 0xf4, 0xb0, 0xb2, 0xbf, 0x57, 0x76, 0x86, 0x2f, 0xb5, 0x1a, - 0x6b, 0xf4, 0x29, 0xd8, 0x4a, 0xaa, 0x0a, 0xe3, 0x64, 0xcb, 0xc7, 0xef, - 0xbe, 0x12, 0xf7, 0x98, 0xca, 0x57, 0x01, 0x59, 0xa0, 0x7e, 0x27, 0x57, - 0x5f, 0x80, 0x3f, 0xa8, 0x01, 0x02, 0x9c, 0xbd, 0x69, 0x38, 0xf2, 0x92, - 0x13, 0xbf, 0x2f, 0x7c, 0xde, 0x23, 0x4e, 0x73, 0x3d, 0x6e, 0x5c, 0x59, - 0x36, 0x4e, 0x69, 0x77, 0x3f, 0xbd, 0x47, 0xf7, 0xcf, 0xb5, 0x2f, 0x6d, - 0x03, 0xd6, 0xb4, 0x25, 0xb3, 0x01, 0x46, 0x72, 0x69, 0xea, 0xd5, 0x88, - 0x07, 0xe6, 0x4e, 0xdb, 0xf6, 0x22, 0x77, 0x8e, 0x6a, 0x02, 0xf0, 0x5b, - 0xe1, 0xf5, 0x0d, 0xdc, 0xf0, 0x0a, 0x02, 0x1a, 0x0c, 0xb9, 0xaf, 0xb0, - 0x5e, 0x2b, 0x5d, 0x21, 0x2d, 0xb9, 0x26, 0x39, 0x4e, 0xad, 0x31, 0x8a, - 0x81, 0x5d, 0x4f, 0x66, 0x37, 0xb9, 0xd9, 0xe8, 0xdf, 0x1f, 0x8a, 0x42, - 0x80, 0x1b, 0x95, 0x82, 0xfa, 0x22, 0x97, 0x4d, 0xac, 0x9d, 0x2c, 0xae, - 0x36, 0xc5, 0x4b, 0x64, 0x5f, 0xc2, 0xc6, 0x66, 0xec, 0x5a, 0xd7, 0xe2, - 0x4a, 0x20, 0x9e, 0xfa, 0xb9, 0x74, 0x4f, 0x9f, 0xc4, 0xc6, 0xbc, 0xad, - 0x07, 0x30, 0x97, 0x2e, 0x58, 0x75, 0xce, 0x7b, 0xb9, 0xb1, 0x9c, 0x38, - 0x73, 0x6e, 0x7e, 0x77, 0x93, 0x4f, 0xc5, 0x0d, 0x88, 0x0b, 0x3d, 0x46, - 0x48, 0xda, 0x98, 0xf2, 0xc9, 0xf8, 0x55, 0x71, 0xde, 0x02, 0x19, 0x1b, - 0x47, 0xef, 0x9f, 0xff, 0x2f, 0x96, 0xdc, 0x9c, 0x4e, 0xef, 0xb4, 0x5d, - 0x0d, 0x08, 0x05, 0x5f, 0x41, 0xae, 0x0a, 0x42, 0xbc, 0x7f, 0x4d, 0x7f, - 0x66, 0x48, 0x34, 0x62, 0x23, 0xf6, 0xbb, 0x46, 0x63, 0x64, 0xa5, 0x04, - 0x81, 0x36, 0xad, 0xc0, 0xf2, 0xf6, 0x81, 0x7f, 0x3f, 0x00, 0x58, 0x25, - 0xc0, 0x1d, 0x9a, 0x2b, 0x88, 0xb8, 0x14, 0x05, 0x92, 0x31, 0x84, 0x04, - 0x13, 0x44, 0x8c, 0x3c, 0xe8, 0xc7, 0x92, 0xa6, 0x07, 0x06, 0xf6, 0xe3, - 0x8d, 0x64, 0x7a, 0x2e, 0xcf, 0x3c, 0x8b, 0x1d, 0xd3, 0x29, 0x3b, 0x85, - 0x45, 0x45, 0x67, 0xbb, 0x88, 0x1a, 0xdb, 0xe1, 0x08, 0x25, 0x22, 0xbd, - 0xbf, 0xd1, 0x86, 0x5d, 0x47, 0xd8, 0xf4, 0x18, 0x79, 0xaf, 0x5f, 0xea, - 0x10, 0x5f, 0x1a, 0x50, 0x13, 0xd8, 0xa8, 0x91, 0xd0, 0x37, 0xd4, 0xe7, - 0x2d, 0x59, 0xee, 0x38, 0x37, 0xc2, 0xd0, 0xc3, 0xcc, 0x98, 0x2a, 0xd5, - 0xc8, 0xf7, 0xc2, 0x8f, 0xf3, 0x66, 0xaa, 0x36, 0x45, 0xc7, 0x61, 0x69, - 0xbc, 0xa8, 0x99, 0xeb, 0x05, 0xb2, 0x83, 0xf7, 0x23, 0x4a, 0xf4, 0x6e, - 0x99, 0xd7, 0xdc, 0xf9, 0x77, 0xde, 0xb2, 0x5f, 0x93, 0x5c, 0x6d, 0xf3, - 0x54, 0x56, 0x13, 0xe9, 0x73, 0xdb, 0x4f, 0x87, 0xb3, 0x24, 0x59, 0x19, - 0x4b, 0x99, 0x40, 0x92, 0x27, 0x16, 0xae, 0x26, 0xfe, 0xac, 0xaf, 0x75, - 0x5c, 0x61, 0xf8, 0xac, 0x6e, 0x42, 0x3a, 0x4a, 0xef, 0xb7, 0xe2, 0x77, - 0x6b, 0x5d, 0xab, 0xc5, 0x76, 0xb0, 0xd4, 0xa1, 0x19, 0x9b, 0x2a, 0x2f, - 0xaa, 0xa0, 0x98, 0x84, 0xf9, 0x09, 0x16, 0xef, 0x12, 0x08, 0xa5, 0xdf, - 0x80, 0xdc, 0x29, 0xae, 0xba, 0xa7, 0x00, 0x53, 0xf6, 0x9a, 0xb9, 0xe8, - 0x94, 0x67, 0xf6, 0x38, 0x80, 0x3b, 0xfd, 0x19, 0xcb, 0x80, 0x5c, 0x50, - 0xe4, 0x31, 0xec, 0xfc, 0x5b, 0x30, 0x00, 0x24, 0xb2, 0x6b, 0x06, 0x5f, - 0x45, 0x3e, 0x94, 0x41, 0x3a, 0x1a, 0xf8, 0x64, 0x09, 0x04, 0x35, 0x52, - 0xca, 0x14, 0x62, 0xcf, 0xb0, 0x63, 0x12, 0xfa, 0x3f, 0x8b, 0x7a, 0x82, - 0x66, 0x47, 0x6a, 0x63, 0x00, 0x10, 0x9b, 0x2a, 0xf5, 0xcb, 0x7f, 0xa6, - 0x02, 0x43, 0x70, 0x5b, 0x3b, 0x96, 0xfb, 0x62, 0x22, 0x06, 0xdd, 0x97, - 0x9d, 0x6e, 0x2c, 0x7f, 0x04, 0xf6, 0x82, 0x29, 0x5b, 0x49, 0x6f, 0x2c, - 0xcd, 0x11, 0x21, 0x30, 0x65, 0xa6, 0x20, 0xb1, 0xce, 0x7d, 0x9b, 0xe7, - 0x43, 0xec, 0xc4, 0x13, 0x9d, 0x94, 0x69, 0x5c, 0x64, 0xd4, 0xda, 0x4e, - 0x24, 0x54, 0x03, 0xe9, 0x68, 0x16, 0xfc, 0xee, 0xb4, 0x25, 0xd8, 0x3e, - 0x60, 0x52, 0xb5, 0xb1, 0x35, 0xbd, 0x7b, 0xf9, 0x6d, 0xfd, 0xe8, 0xef, - 0x7a, 0xfe, 0x89, 0x37, 0x32, 0x57, 0x33, 0xa0, 0x05, 0xc1, 0xea, 0x59, - 0x56, 0xe8, 0x97, 0x74, 0x5f, 0x09, 0x8f, 0x44, 0x27, 0xd2, 0x12, 0x76, - 0xf3, 0x8f, 0x53, 0x94, 0xec, 0xfb, 0x64, 0xb0, 0x99, 0xb3, 0x67, 0xf7, - 0xb2, 0x9e, 0xe3, 0x8e, 0x83, 0x3d, 0xe7, 0x01, 0x9f, 0xe9, 0xed, 0xd2, - 0x13, 0xae, 0xf3, 0x78, 0x63, 0xfe, 0x05, 0xa7, 0x11, 0x10, 0xb4, 0xcc, - 0xb4, 0x12, 0xd7, 0xd4, 0x18, 0xa4, 0x26, 0x54, 0x26, 0xac, 0x78, 0x8a, - 0xb7, 0x11, 0x12, 0x90, 0xbc, 0xfe, 0x05, 0xde, 0xae, 0x36, 0x8f, 0xc1, - 0x0f, 0x62, 0x93, 0x4d, 0x74, 0xfe, 0xdd, 0x06, 0xa0, 0x10, 0x89, 0x8f, - 0x15, 0xdc, 0x4c, 0x52, 0xc3, 0x9d, 0x91, 0xec, 0x57, 0xe3, 0x51, 0x23, - 0x07, 0x40, 0x81, 0x47, 0xfe, 0xa4, 0x3b, 0xcb, 0x85, 0x6d, 0xf2, 0x7c, - 0xb7, 0xf2, 0x29, 0xff, 0x5e, 0x9b, 0x88, 0x2a, 0x65, 0xef, 0x44, 0xb8, - 0x46, 0x2b, 0x4e, 0xf3, 0x87, 0xc9, 0x3c, 0x11, 0x69, 0xc8, 0x11, 0x07, - 0xea, 0xc3, 0x59, 0x78, 0x5e, 0x8e, 0x15, 0x3d, 0x97, 0xa4, 0x12, 0xab, - 0x79, 0x8a, 0x70, 0xbf, 0x8f, 0x65, 0xc0, 0x82, 0x54, 0x78, 0xd8, 0x6c, - 0xf6, 0xd7, 0x0c, 0x3b, 0x22, 0xd8, 0xff, 0x07, 0xfc, 0xd1, 0x8a, 0x10, - 0x9a, 0x0f, 0xb6, 0x56, 0x50, 0x0f, 0x3f, 0xac, 0xc1, 0x3a, 0x33, 0x20, - 0x35, 0x04, 0xfe, 0xed, 0x9b, 0x65, 0x18, 0x92, 0x0f, 0x66, 0x93, 0x20, - 0x7c, 0xd3, 0xb4, 0x90, 0xd1, 0x1b, 0x52, 0x96, 0xfb, 0x0e, 0x9b, 0xd1, - 0x2b, 0x83, 0x72, 0x84, 0x59, 0xbc, 0x55, 0xc8, 0xdb, 0x2e, 0xd8, 0x52, - 0x8b, 0x57, 0x40, 0x03, 0xa0, 0x57, 0x9f, 0x35, 0xfa, 0x8c, 0xe9, 0x68, - 0x28, 0x5e, 0xcf, 0x77, 0xcb, 0xde, 0xf1, 0xe0, 0x80, 0x5a, 0xb1, 0x94, - 0xac, 0x00, 0x02, 0xe9, 0x46, 0x32, 0x26, 0xbc, 0x83, 0x28, 0x2a, 0x6d, - 0xe7, 0x2c, 0x16, 0x54, 0xff, 0xb4, 0xfb, 0x79, 0x1c, 0xb0, 0x0b, 0xf2, - 0xb8, 0x69, 0xe2, 0x46, 0xe2, 0x11, 0xeb, 0x35, 0xbe, 0x43, 0xfa, 0x0f, - 0xd2, 0x06, 0x99, 0x8a, 0x8b, 0x41, 0x06, 0xce, 0x99, 0x56, 0x47, 0x7f, - 0x89, 0x94, 0x45, 0x0b, 0x88, 0xed, 0x03, 0x12, 0xc4, 0xea, 0x05, 0xa0, - 0xfb, 0x8d, 0x29, 0x5a, 0xdb, 0x95, 0x5a, 0xd9, 0xcf, 0xce, 0xb2, 0x0c, - 0xd4, 0xea, 0x2b, 0xff, 0xfe, 0x83, 0x84, 0x67, 0x91, 0x3c, 0xf2, 0xf9, - 0x1b, 0xf1, 0x38, 0xb1, 0xec, 0xcf, 0x97, 0x84, 0xbb, 0x05, 0x90, 0xec, - 0x38, 0xc4, 0x81, 0x95, 0x76, 0xf0, 0x80, 0x21, 0xe2, 0x12, 0xb0, 0x79, - 0xbb, 0xdf, 0x61, 0x7c, 0x2c, 0xc0, 0xeb, 0x08, 0x66, 0x82, 0x6c, 0x86, - 0xaf, 0x2c, 0x20, 0xf9, 0x0f, 0x0b, 0x19, 0x43, 0xa3, 0xb8, 0x69, 0x26, - 0x5e, 0x19, 0x1a, 0x05, 0xb8, 0x4f, 0x5d, 0xe3, 0x47, 0xef, 0x4d, 0x29, - 0x00, 0x7d, 0x68, 0xb8, 0x7d, 0x88, 0xec, 0x32, 0xbc, 0xce, 0x71, 0xcb, - 0x56, 0x52, 0xbb, 0xea, 0x78, 0x8d, 0x59, 0xd9, 0x6c, 0x5d, 0x5a, 0xc1, - 0x5d, 0x0f, 0xbb, 0xec, 0x4e, 0xa1, 0x0d, 0xb2, 0x3a, 0x92, 0x90, 0x8f, - 0x49, 0x25, 0xbe, 0x87, 0xb8, 0xa7, 0x4d, 0x23, 0x3d, 0xf2, 0xf3, 0x1e, - 0x51, 0x4a, 0xb4, 0x95, 0x94, 0x45, 0x9f, 0x60, 0x81, 0x55, 0xe7, 0xc3, - 0x71, 0x36, 0x1c, 0x52, 0xec, 0x57, 0x56, 0x32, 0x36, 0xa4, 0x34, 0xbd, - 0xd7, 0xec, 0xe7, 0x0d, 0xb9, 0xd8, 0x2c, 0xbb, 0x0f, 0x18, 0x2c, 0xd4, - 0x50, 0x4a, 0x04, 0x13, 0x8d, 0xdf, 0x89, 0x41, 0x06, 0xf3, 0xce, 0x2b, - 0xe8, 0xa5, 0x60, 0xd2, 0xa6, 0x43, 0x51, 0x20, 0x0b, 0x47, 0x21, 0x8e, - 0x14, 0x06, 0x51, 0x7a, 0x8f, 0xd9, 0xb8, 0xbf, 0xb8, 0x63, 0xf7, 0x6e, - 0x5a, 0xd4, 0xcd, 0xd6, 0xb7, 0xf5, 0x65, 0x91, 0x7e, 0x95, 0x16, 0x6b, - 0x2c, 0x37, 0x26, 0x02, 0xe5, 0x76, 0xd3, 0x2e, 0xf0, 0xfe, 0x5c, 0xce, - 0x70, 0x22, 0x08, 0x36, 0x0a, 0x5f, 0x38, 0xdb, 0xfc, 0xf1, 0x5b, 0xe1, - 0x6e, 0x3a, 0x3e, 0xfb, 0xe1, 0x07, 0x02, 0x16, 0xce, 0xbd, 0x73, 0xfb, - 0xc0, 0x79, 0x4d, 0xc9, 0xe4, 0x85, 0xc6, 0x4e, 0x7f, 0x3c, 0xf2, 0x67, - 0x8f, 0x8c, 0x4f, 0x08, 0x6f, 0xac, 0x7f, 0x09, 0x41, 0x58, 0x88, 0xc5, - 0x95, 0xf9, 0x34, 0x81, 0xc1, 0x8b, 0xa7, 0xed, 0xf6, 0x6a, 0x4c, 0x83, - 0xa9, 0x95, 0xac, 0x2f, 0x6d, 0x81, 0x5f, 0x5f, 0x32, 0x7f, 0x42, 0x89, - 0x99, 0x7d, 0x9b, 0x0c, 0xde, 0xea, 0x25, 0x4f, 0xef, 0xa1, 0x1b, 0x94, - 0xc8, 0xd1, 0x0b, 0x69, 0x58, 0x2c, 0x21, 0x58, 0xa1, 0x8f, 0x00, 0x1c, - 0x3e, 0xa0, 0xbf, 0x06, 0x8e, 0x78, 0xe8, 0x68, 0x62, 0xee, 0x62, 0x8e, - 0xbe, 0xa6, 0x88, 0x13, 0xec, 0xca, 0x92, 0x7a, 0x95, 0x2f, 0x95, 0x30, - 0x2c, 0x03, 0xea, 0x74, 0xdd, 0x4f, 0x0e, 0x00, 0x24, 0xb0, 0x56, 0xaa, - 0x44, 0xdd, 0x78, 0x56, 0x68, 0x4d, 0x3a, 0xd2, 0xdb, 0xf6, 0x7a, 0x39, - 0xa5, 0x78, 0xcf, 0x87, 0x56, 0x52, 0x69, 0xc5, 0x4e, 0x56, 0xa1, 0x70, - 0x57, 0xe7, 0x73, 0x24, 0xe9, 0x73, 0xae, 0xcc, 0xcf, 0x49, 0xc9, 0x95, - 0x1f, 0xf9, 0x3a, 0xca, 0x89, 0x12, 0xf0, 0x4f, 0xf0, 0x4e, 0x95, 0xce, - 0x28, 0x60, 0x38, 0xce, 0x53, 0xe7, 0x0a, 0xba, 0xed, 0x46, 0x12, 0x2d, - 0x04, 0x4d, 0x1e, 0xe3, 0x00, 0x0b, 0xff, 0x2f, 0xf3, 0xd1, 0xad, 0x5a, - 0x49, 0xe3, 0x5d, 0xef, 0x8c, 0x6c, 0x29, 0x8e, 0xc4, 0x6b, 0x46, 0x82, - 0x49, 0x83, 0x69, 0xb8, 0xc3, 0x88, 0xc5, 0x6c, 0x86, 0xc8, 0xdf, 0xaf, - 0xae, 0xab, 0x30, 0x86, 0x95, 0x1a, 0x41, 0x16, 0xb4, 0x63, 0xda, 0x9b, - 0x12, 0x4e, 0x18, 0xe1, 0x1a, 0x81, 0xc1, 0xdc, 0xce, 0x2b, 0xa6, 0xb5, - 0x9c, 0x43, 0x42, 0x2b, 0xfb, 0xfa, 0x29, 0xfc, 0xba, 0x60, 0xce, 0xb5, - 0x12, 0x00, 0x91, 0xb9, 0x98, 0x7c, 0x82, 0x83, 0xd9, 0xd1, 0x7c, 0x87, - 0xf9, 0x2e, 0x3e, 0xa2, 0xbc, 0x9f, 0x59, 0x48, 0x95, 0x72, 0x60, 0x82, - 0xa8, 0x22, 0x37, 0x61, 0x15, 0x40, 0x6d, 0x5a, 0xcb, 0x30, 0xd2, 0x5a, - 0xc1, 0xe1, 0x7b, 0x57, 0x60, 0xbd, 0xfa, 0x2e, 0x98, 0x8b, 0xaf, 0x0b, - 0x24, 0xd9, 0x47, 0xf3, 0x2c, 0x74, 0x2e, 0xd2, 0xdd, 0x9d, 0x8f, 0x77, - 0x29, 0xdd, 0xeb, 0x93, 0xb6, 0xa2, 0xd8, 0x7b, 0x2a, 0x4d, 0x32, 0xf7, - 0x95, 0xe1, 0xf9, 0x0f, 0xdb, 0x61, 0xb5, 0x3a, 0xfa, 0xd7, 0x45, 0x02, - 0xab, 0x7d, 0x55, 0x3c, 0x97, 0xe6, 0x6a, 0x1a, 0x40, 0x80, 0x1c, 0x6d, - 0x1f, 0x2b, 0xdd, 0xc1, 0x3a, 0x6e, 0x12, 0x1a, 0x42, 0x6b, 0x2d, 0x01, - 0x5f, 0x01, 0xc6, 0x98, 0xee, 0x09, 0x6f, 0x53, 0xbc, 0x8f, 0x6f, 0x8c, - 0xd0, 0xb1, 0x60, 0xfd, 0x5e, 0x1d, 0xf8, 0xc4, 0x6a, 0x3a, 0x76, 0x61, - 0x5d, 0x20, 0x2f, 0xb7, 0xea, 0xda, 0x0a, 0x32, 0x31, 0x11, 0xde, 0xef, - 0xef, 0x23, 0xac, 0xf3, 0xd2, 0x95, 0x04, 0x17, 0x4b, 0x49, 0x86, 0xfd, - 0x76, 0x64, 0x47, 0x84, 0x9f, 0x3e, 0x81, 0x86, 0xa5, 0x46, 0xfc, 0xd5, - 0x93, 0x76, 0x3d, 0x83, 0x75, 0x56, 0x05, 0x38, 0xb4, 0x47, 0xb7, 0xd4, - 0xb4, 0xe2, 0x5b, 0xb4, 0xef, 0x2f, 0x07, 0xf1, 0x1c, 0x14, 0xbe, 0xee, - 0xb8, 0xd3, 0x45, 0x7b, 0x06, 0x9d, 0xb7, 0x22, 0xb1, 0x45, 0xe3, 0x7e, - 0x81, 0x02, 0x89, 0x44, 0xcb, 0x10, 0x67, 0x8e, 0xc1, 0xf3, 0xc4, 0x2b, - 0x0b, 0x1e, 0x08, 0x5d, 0xe5, 0x9a, 0x52, 0xce, 0xdd, 0xfc, 0xb7, 0xea, - 0xcb, 0x38, 0x62, 0x1b, 0x9a, 0xd1, 0x81, 0xf0, 0xf8, 0x5c, 0xdc, 0x25, - 0x96, 0x71, 0x80, 0xbb, 0x2d, 0x18, 0xf0, 0x5c, 0xe4, 0xc5, 0x59, 0xb4, - 0x5f, 0x41, 0x27, 0xb9, 0xee, 0x13, 0x49, 0xd4, 0xc3, 0x87, 0x14, 0xc7, - 0x6c, 0x21, 0xf0, 0xa1, 0xe8, 0xd8, 0xbf, 0xb7, 0x84, 0x2a, 0xee, 0x9b, - 0x10, 0xa3, 0xb0, 0x7f, 0x6e, 0x13, 0xf4, 0xf8, 0x4a, 0x2f, 0x79, 0xb9, - 0xa1, 0x23, 0xdc, 0xe5, 0xfb, 0x47, 0x49, 0xfd, 0x32, 0xe9, 0xdf, 0x0f, - 0x46, 0xd7, 0xe8, 0x6e, 0x56, 0x4e, 0x9c, 0x76, 0x65, 0x2d, 0xd3, 0x03, - 0x66, 0x8a, 0x46, 0x7e, 0x46, 0xbf, 0x76, 0x2d, 0x38, 0x7b, 0xb7, 0x6f, - 0xda, 0x94, 0xf7, 0x5b, 0xb6, 0x67, 0x00, 0x2d, 0x52, 0xee, 0xc8, 0x3b, - 0xb1, 0xd7, 0x05, 0xcc, 0xd3, 0xdf, 0xa4, 0xcd, 0x46, 0xd5, 0xaa, 0xff, - 0xc6, 0x81, 0x7a, 0xac, 0xbd, 0x6b, 0x6d, 0x06, 0xbf, 0xf0, 0x72, 0xa5, - 0xde, 0xb6, 0xd3, 0xd1, 0xa9, 0x5e, 0x10, 0x84, 0x7a, 0x71, 0x99, 0x6a, - 0x7d, 0xa4, 0x34, 0x54, 0x16, 0xda, 0xc9, 0x26, 0x99, 0xe2, 0x90, 0xf4, - 0xf8, 0x5b, 0x28, 0xc5, 0xe8, 0x52, 0x64, 0x85, 0xb3, 0xff, 0x7f, 0xb4, - 0xda, 0x5f, 0x36, 0x1f, 0xa6, 0x0d, 0xca, 0x70, 0xcb, 0x23, 0x2c, 0x3b, - 0x28, 0xce, 0xdc, 0x4e, 0x66, 0x06, 0x0e, 0x3c, 0xbc, 0xac, 0xa1, 0x60, - 0x90, 0xf8, 0x7a, 0x52, 0x8b, 0xbf, 0x19, 0x57, 0xcc, 0xe4, 0x0d, 0x03, - 0xb1, 0xfd, 0xf5, 0x9c, 0x21, 0x21, 0xfe, 0x5d, 0x76, 0x29, 0x6a, 0x7f, - 0xfa, 0xcd, 0xd1, 0x6e, 0x75, 0xd6, 0x88, 0x1a, 0x2e, 0x76, 0x7f, 0xd0, - 0xd1, 0xd9, 0x25, 0x2d, 0x5d, 0x50, 0x44, 0x86, 0xac, 0x0d, 0x33, 0x1b, - 0x6d, 0xd8, 0x92, 0x33, 0xed, 0x30, 0x9b, 0x1a, 0x73, 0xdf, 0xa8, 0x60, - 0x34, 0x01, 0x26, 0x7a, 0x54, 0x44, 0xfd, 0xb8, 0x69, 0x55, 0x50, 0x22, - 0xb3, 0x09, 0xfe, 0x4d, 0x12, 0x0f, 0xcc, 0x1e, 0x65, 0x6e, 0x70, 0x92, - 0xc7, 0x01, 0xcb, 0xc9, 0xe2, 0x79, 0x38, 0x95, 0x3a, 0x71, 0x0e, 0xfa, - 0x23, 0x80, 0x97, 0xaa, 0xd3, 0x7f, 0xe8, 0x51, 0xe2, 0x04, 0xe7, 0x4e, - 0x1e, 0x25, 0x98, 0xb2, 0xb2, 0xbe, 0x88, 0xed, 0x61, 0x8b, 0x03, 0xc5, - 0x59, 0xe7, 0x20, 0x5e, 0xb6, 0xb7, 0x18, 0xdc, 0x31, 0x63, 0x1a, 0x04, - 0xa3, 0xe6, 0x97, 0x29, 0xeb, 0x85, 0xd4, 0xa6, 0xf6, 0xf8, 0xbf, 0x98, - 0xca, 0x24, 0x39, 0xf9, 0x60, 0xf2, 0x2b, 0x51, 0x23, 0x59, 0x83, 0x99, - 0x34, 0x85, 0x34, 0x76, 0xbc, 0xd8, 0x90, 0xbf, 0x69, 0xc2, 0xe6, 0x65, - 0xdd, 0x69, 0x45, 0xa3, 0x44, 0xc8, 0x9a, 0x98, 0x75, 0x21, 0x02, 0xff, - 0xbf, 0x9b, 0x64, 0xf1, 0x3f, 0x9e, 0xc0, 0xb5, 0xc6, 0x75, 0x30, 0x63, - 0xd8, 0xda, 0xf2, 0xb8, 0x00, 0xfc, 0x76, 0x86, 0x1c, 0xe8, 0x8b, 0x7a, - 0x68, 0xbb, 0x1a, 0x38, 0x73, 0x43, 0xe7, 0x5b, 0x69, 0x5f, 0x07, 0x40, - 0x11, 0x6d, 0xeb, 0xf3, 0x7d, 0x73, 0xfa, 0x9a, 0xb0, 0xfb, 0x1a, 0x90, - 0xf8, 0x9a, 0xb2, 0x82, 0x5d, 0xb2, 0x43, 0xc9, 0xe1, 0x5f, 0x86, 0xab, - 0xbc, 0xb1, 0x6f, 0xa1, 0xf9, 0x53, 0x76, 0xd9, 0x1e, 0xfe, 0xaf, 0xc2, - 0xb4, 0xa9, 0x7d, 0xc6, 0x74, 0x56, 0x12, 0x78, 0xac, 0xb2, 0xae, 0xfc, - 0xa9, 0xd8, 0x3e, 0xaa, 0xb0, 0x23, 0xae, 0x1d, 0xf6, 0xd7, 0x58, 0x39, - 0xbb, 0xb3, 0xa2, 0xe4, 0x4c, 0x80, 0x0e, 0x88, 0x2c, 0x69, 0x59, 0x62, - 0xbd, 0x48, 0x60, 0x82, 0x14, 0xa1, 0xdd, 0x75, 0x92, 0x72, 0xe0, 0xa8, - 0xb1, 0xf2, 0x34, 0xd2, 0xcf, 0x6c, 0x16, 0xaa, 0x33, 0x86, 0x1b, 0x2d, - 0xba, 0x11, 0x1e, 0x85, 0x38, 0x3e, 0x14, 0x02, 0x4b, 0xda, 0x54, 0xdf, - 0xe9, 0x43, 0x55, 0xd7, 0xc8, 0x12, 0x2c, 0x52, 0xb6, 0x50, 0x52, 0x73, - 0x50, 0x43, 0x77, 0xa4, 0xed, 0xf6, 0x73, 0xf9, 0xff, 0x76, 0x6f, 0xc3, - 0xb2, 0x1e, 0x91, 0x6c, 0x5e, 0xe4, 0x2d, 0xbd, 0xc1, 0x6c, 0x98, 0x17, - 0x5c, 0xee, 0x34, 0x69, 0x7f, 0x75, 0xd1, 0xb9, 0x30, 0xe2, 0xe7, 0xcf, - 0x8a, 0xb1, 0x43, 0xf6, 0x68, 0xcb, 0xfa, 0xdb, 0x65, 0xff, 0x58, 0xcc, - 0x81, 0xcb, 0xa1, 0x7d, 0x38, 0x87, 0x22, 0x0d, 0xd4, 0xb1, 0xf3, 0x34, - 0x34, 0xc8, 0xb2, 0xe2, 0x03, 0x36, 0x57, 0x49, 0xa2, 0x58, 0x40, 0x11, - 0x2c, 0x11, 0x9d, 0x3f, 0x94, 0x5c, 0x07, 0xac, 0x91, 0x32, 0x62, 0x38, - 0x25, 0xa6, 0x88, 0x49, 0x12, 0xdf, 0x0a, 0xb2, 0xb9, 0xf7, 0xda, 0x4f, - 0xa4, 0x0d, 0x4c, 0x69, 0xe6, 0xf3, 0xcf, 0xff, 0x86, 0x1d, 0x0f, 0xb0, - 0x8f, 0xf0, 0x9b, 0xbf, 0xfc, 0xa3, 0x1a, 0x5f, 0x20, 0x07, 0xe6, 0x4f, - 0x36, 0xc8, 0xb0, 0xa1, 0x9a, 0xb7, 0x6b, 0x80, 0x23, 0xf7, 0x31, 0xb5, - 0x2a, 0xb8, 0x93, 0x26, 0x46, 0xc2, 0x4a, 0x55, 0x05, 0xa2, 0x20, 0xa4, - 0xd9, 0xd1, 0x5f, 0x81, 0xe1, 0xfe, 0x58, 0xf4, 0xe8, 0x98, 0x80, 0xcf, - 0xae, 0xcc, 0x14, 0x9e, 0xbb, 0x2a, 0xf4, 0x24, 0x7a, 0x68, 0xb8, 0x3b, - 0xcb, 0x48, 0xe5, 0x04, 0xec, 0xe6, 0x86, 0x0a, 0xe2, 0x39, 0x96, 0x69, - 0x3b, 0x8b, 0x06, 0xee, 0xb5, 0xaf, 0x57, 0x2b, 0x21, 0x38, 0xf8, 0xee, - 0xfe, 0xc6, 0x51, 0x74, 0x80, 0x14, 0x5e, 0xc4, 0xbe, 0x92, 0xf1, 0xea, - 0xe0, 0x67, 0x19, 0xe3, 0xb9, 0x7f, 0x33, 0x00, 0x52, 0x0d, 0x1e, 0x36, - 0x41, 0x87, 0xd5, 0x3e, 0x88, 0x30, 0x80, 0xcf, 0x8b, 0x73, 0x66, 0xa5, - 0xbd, 0xe3, 0x06, 0x25, 0x15, 0x2b, 0xed, 0xc4, 0x8a, 0xc7, 0x32, 0xa9, - 0x42, 0x7f, 0x63, 0x07, 0x38, 0x6d, 0x04, 0x64, 0x51, 0x6a, 0x0a, 0xbf, - 0x83, 0xb8, 0xb7, 0xfd, 0x19, 0x4f, 0xcc, 0xbb, 0xb6, 0xeb, 0x34, 0xc7, - 0xaf, 0x08, 0x62, 0x57, 0xb0, 0x3f, 0x25, 0x0e, 0xbf, 0x34, 0xda, 0xbf, - 0xb9, 0xaf, 0x43, 0x80, 0x63, 0xa5, 0xe9, 0x6f, 0x60, 0xd4, 0xfa, 0x9f, - 0xdb, 0xd9, 0xbb, 0x24, 0xef, 0xb8, 0x58, 0xe6, 0xc0, 0xa7, 0xc0, 0x0b, - 0x13, 0x28, 0xa3, 0xe3, 0xc6, 0x0c, 0x0c, 0x0d, 0x52, 0x25, 0xad, 0x84, - 0x29, 0x4a, 0xcd, 0xc3, 0x14, 0x48, 0xf6, 0xb9, 0xaa, 0x51, 0x14, 0x86, - 0x8e, 0xf2, 0x98, 0xc7, 0xcc, 0xd8, 0xbc, 0xa1, 0x7f, 0xab, 0x96, 0x8c, - 0x82, 0x8c, 0x00, 0x87, 0xbe, 0xb7, 0xf1, 0x68, 0x4d, 0xd6, 0xaa, 0x4e, - 0xab, 0x69, 0x03, 0xa5, 0x56, 0x3b, 0x7e, 0x69, 0xd2, 0x7d, 0x07, 0x87, - 0xee, 0x2e, 0xab, 0xa8, 0xd6, 0xeb, 0x3f, 0x5c, 0x83, 0x8a, 0x76, 0xdc, - 0xaa, 0x71, 0xac, 0x60, 0xa3, 0x1a, 0xd9, 0xff, 0x90, 0x72, 0x2f, 0x30, - 0xc1, 0x6d, 0x77, 0x23, 0xd7, 0xa8, 0x43, 0x8b, 0x1f, 0x84, 0x3b, 0x88, - 0x23, 0xeb, 0x41, 0xaa, 0x18, 0xd0, 0x80, 0x5f, 0xd4, 0x6d, 0x5f, 0xe4, - 0xe4, 0x6a, 0x06, 0xa6, 0xd5, 0xaf, 0x58, 0xdf, 0x8c, 0x97, 0x31, 0x98, - 0x7a, 0xd8, 0x84, 0xb3, 0x9f, 0xc6, 0x13, 0xeb, 0x21, 0xeb, 0x34, 0x44, - 0xd4, 0xe2, 0x6c, 0xee, 0xbf, 0xdf, 0xa0, 0x11, 0x4e, 0xee, 0xe3, 0xb8, - 0xb7, 0x21, 0x20, 0x10, 0xfa, 0x57, 0xdf, 0xfe, 0xcd, 0xcc, 0xf6, 0x08, - 0x7e, 0xe8, 0xd0, 0xe5, 0x70, 0x15, 0x49, 0x6f, 0xb0, 0xcd, 0x7d, 0x8c, - 0x11, 0x50, 0x3f, 0x1f, 0xb8, 0xec, 0x84, 0x06, 0x7f, 0xd5, 0xc5, 0xa5, - 0xfc, 0x96, 0xe6, 0x3d, 0x0f, 0x22, 0xe2, 0x68, 0x92, 0x5a, 0xd3, 0xa8, - 0x27, 0xdd, 0x3d, 0x23, 0x6d, 0x46, 0xa7, 0xae, 0xbd, 0xec, 0x04, 0xac, - 0x13, 0x70, 0x3a, 0x40, 0xae, 0xc0, 0x2d, 0xea, 0xb5, 0xf0, 0xaa, 0xfc, - 0xc1, 0x1f, 0x98, 0x28, 0x21, 0x71, 0x75, 0x44, 0x19, 0x8e, 0xb3, 0x0c, - 0x90, 0x55, 0xfb, 0x21, 0x32, 0xc0, 0x2b, 0x3b, 0x09, 0x3c, 0x5e, 0x80, - 0x4d, 0x54, 0xe5, 0xc1, 0xa4, 0xd2, 0xb2, 0x50, 0x9a, 0x91, 0xdf, 0xd1, - 0x16, 0xdd, 0x61, 0xa3, 0x0d, 0x12, 0xfd, 0xcd, 0x34, 0x55, 0x9e, 0x1c, - 0x07, 0xcf, 0xc9, 0xc2, 0xd1, 0x7f, 0xa8, 0x2d, 0x47, 0xfb, 0xfa, 0xb4, - 0x50, 0x20, 0x44, 0xef, 0xfa, 0x94, 0x1d, 0x94, 0x61, 0x8b, 0x14, 0x97, - 0x42, 0xf5, 0x0a, 0xb1, 0xbd, 0xa6, 0x45, 0xd8, 0x26, 0x5d, 0xcc, 0xc0, - 0xd9, 0x36, 0xa4, 0x45, 0x53, 0x2e, 0x0d, 0x51, 0x93, 0x28, 0x2e, 0x0e, - 0xe4, 0xfb, 0xae, 0x4c, 0x0b, 0x5a, 0x72, 0x76, 0xaf, 0xab, 0x43, 0x4f, - 0xdd, 0x58, 0x40, 0x63, 0xcc, 0xe2, 0xdc, 0x19, 0xa0, 0xb9, 0x3c, 0xa9, - 0xf2, 0x3e, 0x7e, 0x3f, 0xb1, 0xb1, 0xc5, 0x59, 0x0d, 0xdd, 0xd4, 0x68, - 0xda, 0x89, 0xf6, 0x0c, 0xea, 0x04, 0xca, 0xc3, 0xc1, 0xa8, 0x2b, 0x64, - 0xf8, 0x86, 0x6e, 0x5a, 0x32, 0xcf, 0xd1, 0x3b, 0xf9, 0x4b, 0x2d, 0xbe, - 0x12, 0xaf, 0xbc, 0x58, 0x74, 0x55, 0x0c, 0xa6, 0xdf, 0xc5, 0x30, 0x27, - 0x84, 0x22, 0x3c, 0xd8, 0x45, 0x59, 0x49, 0x65, 0xea, 0x2e, 0xf1, 0x02, - 0xfa, 0x11, 0x2a, 0x7b, 0xab, 0x27, 0xab, 0x59, 0x05, 0x8e, 0xe5, 0x25, - 0xdf, 0x18, 0xee, 0xc6, 0xd5, 0x52, 0xf3, 0xb5, 0x79, 0x89, 0x0b, 0x56, - 0x38, 0xf7, 0x91, 0x48, 0xc0, 0x02, 0xb8, 0x2c, 0x31, 0x12, 0x9c, 0x8d, - 0x32, 0x4e, 0x7d, 0xfd, 0x7a, 0x15, 0x95, 0x52, 0x2f, 0x04, 0x18, 0x30, - 0x4a, 0xac, 0x06, 0x5b, 0x16, 0xc6, 0x4a, 0x62, 0x90, 0x61, 0x40, 0x63, - 0x64, 0x14, 0x0c, 0x2c, 0xc2, 0xe3, 0x31, 0xc5, 0x73, 0x70, 0x12, 0x65, - 0xed, 0x66, 0x3e, 0x85, 0xc0, 0xa7, 0xbb, 0x14, 0xb0, 0xc9, 0x9f, 0x0c, - 0x06, 0xe7, 0x82, 0x4a, 0xac, 0xd4, 0xf8, 0x6e, 0x40, 0xb9, 0x15, 0x47, - 0x67, 0x85, 0x29, 0x54, 0xd5, 0xbc, 0x54, 0x79, 0x6e, 0x06, 0x78, 0xf8, - 0x30, 0x30, 0x18, 0x1b, 0x43, 0x2b, 0x35, 0x74, 0x4e, 0xba, 0x71, 0x35, - 0x9f, 0xaf, 0x9c, 0x50, 0xa4, 0x8d, 0xb8, 0x54, 0x39, 0x99, 0x99, 0x40, - 0x7e, 0xf0, 0xc4, 0x25, 0x67, 0x07, 0x61, 0x2c, 0xd1, 0x8f, 0x55, 0x13, - 0x40, 0x8d, 0x69, 0xa8, 0x10, 0x21, 0xff, 0xe2, 0xe1, 0xc9, 0xd4, 0xc1, - 0x11, 0xbe, 0x54, 0x1a, 0xf0, 0x3b, 0x16, 0xb3, 0xf9, 0x56, 0x59, 0x2d, - 0xdf, 0x49, 0x83, 0xb9, 0x1b, 0xdc, 0x3a, 0xd6, 0x70, 0x7b, 0x72, 0xec, - 0x22, 0x35, 0xd5, 0x0c, 0xe6, 0x85, 0x39, 0xd5, 0x56, 0x24, 0x70, 0x78, - 0x2e, 0x9c, 0x9c, 0xc7, 0x32, 0x68, 0xb2, 0xf8, 0xc9, 0xc0, 0xd8, 0xb3, - 0xe1, 0x71, 0x27, 0xf6, 0x21, 0x14, 0xd4, 0xd1, 0x66, 0x67, 0x94, 0xf5, - 0x9a, 0x36, 0x63, 0x74, 0x7b, 0xce, 0x92, 0x92, 0x0e, 0xbb, 0x42, 0x0a, - 0xf8, 0x77, 0x23, 0x81, 0xb9, 0x1a, 0x19, 0x9e, 0x6c, 0x30, 0xc2, 0x52, - 0xec, 0xd4, 0xf1, 0xf3, 0x7a, 0x69, 0x71, 0x00, 0xde, 0xf7, 0x5d, 0x3a, - 0x99, 0x91, 0x27, 0x74, 0x11, 0x70, 0x67, 0xca, 0x0a, 0x84, 0x16, 0xe2, - 0xbe, 0x6b, 0xee, 0x72, 0x37, 0xb4, 0x61, 0x75, 0x36, 0x39, 0xee, 0xc5, - 0xfc, 0x2b, 0xd5, 0x5b, 0x34, 0xe2, 0x40, 0xb7, 0xb5, 0xb1, 0x4f, 0x1a, - 0x0e, 0x39, 0x0a, 0x30, 0xa4, 0xc3, 0x7e, 0xfe, 0xb0, 0xb9, 0xda, 0xf7, - 0xc7, 0x10, 0x4d, 0x03, 0x6a, 0x3b, 0xf0, 0xa2, 0xe0, 0xdb, 0xd0, 0xef, - 0xd7, 0x89, 0xf0, 0xdd, 0xae, 0x62, 0x98, 0x14, 0xc3, 0x6b, 0xce, 0x0a, - 0x03, 0xdf, 0xf5, 0xb0, 0xa0, 0x97, 0x52, 0x5b, 0xf3, 0x11, 0x48, 0xdc, - 0x86, 0xa6, 0x98, 0x0a, 0x7d, 0xae, 0xa5, 0x79, 0x9d, 0xba, 0xf0, 0x89, - 0x11, 0x44, 0xe1, 0x1e, 0xcf, 0xa2, 0x1c, 0x3c, 0x22, 0xb3, 0x6a, 0x6c, - 0x3c, 0xd2, 0x5d, 0xfa, 0x3c, 0x32, 0x15, 0x0b, 0xdd, 0x63, 0x36, 0xb3, - 0x9e, 0x0f, 0x57, 0x4b, 0x1b, 0x69, 0xbb, 0x1c, 0x90, 0xf7, 0x23, 0x1a, - 0x8e, 0x01, 0x57, 0xbb, 0xbb, 0x92, 0xb7, 0x1b, 0x4e, 0xf2, 0x41, 0xa4, - 0x05, 0xed, 0x44, 0xf9, 0xa2, 0xaf, 0x32, 0x35, 0x25, 0x5f, 0xa5, 0x89, - 0xf6, 0xa9, 0x90, 0xcc, 0x76, 0x7d, 0xfc, 0x09, 0xb4, 0x8f, 0x80, 0x0d, - 0xc7, 0xc6, 0xe4, 0xc4, 0xc6, 0xcb, 0x58, 0xe0, 0xb4, 0xd5, 0x68, 0x5c, - 0x52, 0x7e, 0x9b, 0xbc, 0xcb, 0xdc, 0x2a, 0x9c, 0x32, 0x95, 0xb8, 0xfc, - 0x6b, 0x82, 0x2e, 0xbf, 0xa9, 0xeb, 0xd0, 0x0a, 0x16, 0x19, 0x1b, 0xef, - 0xe1, 0x74, 0x34, 0x61, 0x24, 0xbe, 0xd7, 0x98, 0x74, 0x8d, 0x19, 0x5a, - 0x72, 0x6f, 0x57, 0x7d, 0xad, 0x8a, 0xfa, 0xff, 0x9a, 0x59, 0x87, 0x16, - 0xa4, 0x48, 0xf6, 0xb4, 0x5c, 0x2e, 0xbc, 0xc6, 0xab, 0xd2, 0x08, 0x69, - 0x1a, 0xdf, 0x45, 0x66, 0x66, 0xa1, 0xcc, 0x10, 0x5f, 0x11, 0xaf, 0x7a, - 0x71, 0xfe, 0xb0, 0x47, 0x01, 0x96, 0xc5, 0xc4, 0xf6, 0x30, 0x7e, 0xb6, - 0xd8, 0x99, 0x56, 0x56, 0x84, 0xda, 0x9a, 0x1f, 0x7e, 0xfe, 0x60, 0xdb, - 0xdf, 0xf7, 0x62, 0x30, 0xe8, 0x61, 0xec, 0x81, 0x9c, 0x66, 0x67, 0xc4, - 0xde, 0x9a, 0xff, 0x40, 0x2e, 0xc5, 0x2d, 0x73, 0x6b, 0x65, 0xed, 0x6d, - 0x7b, 0xff, 0xcd, 0x67, 0xea, 0x03, 0xbf, 0xf6, 0xed, 0x3f, 0x66, 0xcd, - 0xa0, 0xac, 0x3c, 0xca, 0xcd, 0xee, 0xd5, 0x10, 0x83, 0x1c, 0x89, 0x2c, - 0x9e, 0x38, 0xbe, 0xb9, 0x2a, 0xc0, 0xa9, 0x0f, 0x03, 0x64, 0x50, 0xf5, - 0x75, 0x95, 0x66, 0x38, 0x4f, 0x9b, 0x63, 0xca, 0x83, 0xbd, 0x3a, 0x6f, - 0xdb, 0x35, 0x9d, 0x13, 0xe8, 0x92, 0x60, 0x36, 0x41, 0xdf, 0x88, 0xcd, - 0x13, 0x46, 0x0d, 0x2a, 0x87, 0xc0, 0x64, 0x1d, 0x6d, 0xdc, 0xd0, 0x9f, - 0xe8, 0x5e, 0xe6, 0x64, 0xf9, 0x58, 0x73, 0x49, 0x39, 0xc7, 0xd7, 0xaf, - 0xc8, 0x1d, 0xce, 0x43, 0xcb, 0x4d, 0x79, 0x1e, 0x7d, 0xb8, 0x65, 0x45, - 0xdc, 0xd7, 0x74, 0xf8, 0xc3, 0xa3, 0xe9, 0xf2, 0x12, 0x1e, 0xb1, 0xd9, - 0x13, 0x9d, 0xad, 0x7b, 0x38, 0x46, 0x50, 0xff, 0x2a, 0xd1, 0xfa, 0x1a, - 0x53, 0xbc, 0xce, 0xfd, 0x4e, 0x4b, 0xc4, 0x7b, 0x2d, 0xe7, 0xd1, 0x8c, - 0xa1, 0xd2, 0x7a, 0x9a, 0x02, 0x90, 0x70, 0x12, 0x61, 0xb3, 0x75, 0x11, - 0xe6, 0x39, 0x6f, 0x35, 0x30, 0x3a, 0xf3, 0x3c, 0x31, 0x94, 0x93, 0x21, - 0x6c, 0x21, 0xbb, 0xf1, 0xa6, 0x47, 0xb0, 0x3c, 0xec, 0x6d, 0xf7, 0x68, - 0x32, 0x6c, 0x33, 0x8d, 0x80, 0x7c, 0xbc, 0x80, 0xdf, 0x22, 0x2a, 0x5f, - 0x7d, 0x6a, 0x75, 0x08, 0x26, 0x22, 0x9a, 0x53, 0xb5, 0x99, 0xdc, 0x62, - 0x7a, 0x81, 0xc9, 0xb5, 0xe2, 0x7e, 0x37, 0x63, 0x88, 0xfc, 0xad, 0x66, - 0xc6, 0xe6, 0x97, 0xb4, 0xbd, 0xea, 0x63, 0xc9, 0x3c, 0xae, 0x07, 0x90, - 0x28, 0x5a, 0x0b, 0xa6, 0xef, 0xbe, 0xe9, 0x0c, 0xb3, 0x71, 0x49, 0x5d, - 0xbc, 0x1f, 0xd4, 0x4c, 0xa4, 0xd3, 0xa6, 0x05, 0x14, 0xd4, 0x09, 0xd2, - 0x33, 0x7c, 0x22, 0xe3, 0x9c, 0xec, 0xff, 0xae, 0x50, 0xa7, 0x85, 0xd4, - 0xce, 0x03, 0x52, 0x46, 0xd3, 0x3c, 0x55, 0x4e, 0x7f, 0x97, 0xa7, 0x32, - 0x97, 0x4c, 0xcd, 0xb2, 0x03, 0x01, 0x49, 0x17, 0x58, 0x28, 0xfd, 0xab, - 0x19, 0xbc, 0x1c, 0xa4, 0xe4, 0xf9, 0x7f, 0xb4, 0xc8, 0x97, 0x66, 0x93, - 0xc1, 0xc0, 0xad, 0x55, 0xd9, 0x4c, 0x71, 0xb4, 0xce, 0x00, 0x2e, 0xaf, - 0x97, 0x0f, 0x70, 0xbb, 0x47, 0xfb, 0x3b, 0x10, 0x46, 0x96, 0xd4, 0x8d, - 0x4a, 0xbb, 0xe0, 0x6c, 0x63, 0xa7, 0xa0, 0x32, 0xab, 0x69, 0x5b, 0x3e, - 0x11, 0x91, 0x0d, 0x91, 0xb8, 0xf7, 0xf8, 0xc5, 0x20, 0x54, 0x44, 0x7a, - 0xb7, 0xa4, 0x03, 0xe2, 0xf1, 0x9a, 0x4b, 0x30, 0xd7, 0x54, 0x59, 0x6d, - 0x94, 0xf0, 0xce, 0x19, 0xab, 0x03, 0x5c, 0xf9, 0x2d, 0xd7, 0x11, 0x03, - 0x87, 0xfb, 0xed, 0x90, 0xa1, 0xee, 0x5d, 0x56, 0xfd, 0xf9, 0xac, 0x35, - 0x0d, 0xcd, 0x4e, 0x01, 0xcb, 0x77, 0xc4, 0x1f, 0x86, 0x8c, 0x1d, 0x15, - 0x3b, 0x1e, 0x7e, 0xc8, 0x91, 0x49, 0x9b, 0x54, 0x7c, 0xe4, 0x13, 0x39, - 0xbf, 0xa9, 0x4d, 0xcb, 0x02, 0x02, 0xf0, 0x7a, 0x82, 0xe5, 0x49, 0x32, - 0xcb, 0x18, 0xe5, 0xa3, 0x3e, 0x3e, 0x3a, 0x97, 0xa0, 0x24, 0x49, 0x38, - 0x9c, 0x80, 0xde, 0x14, 0x56, 0xa2, 0x58, 0x5e, 0x4f, 0x1f, 0x27, 0x5d, - 0x66, 0x4f, 0x4d, 0x5e, 0xbf, 0x83, 0x36, 0xea, 0xa1, 0x80, 0x16, 0x80, - 0xee, 0x5c, 0x81, 0x8a, 0x4e, 0x8f, 0xac, 0xc3, 0x68, 0xff, 0xa3, 0x10, - 0x88, 0x99, 0x45, 0x25, 0xf1, 0xdf, 0x3b, 0x38, 0xf7, 0xa6, 0x17, 0xe4, - 0x12, 0xd4, 0x72, 0x2f, 0x4a, 0xf8, 0xa8, 0x7d, 0x8c, 0x65, 0x14, 0xa9, - 0x66, 0x95, 0x48, 0x04, 0x4e, 0x07, 0x7c, 0x0f, 0x5c, 0x5f, 0x61, 0x78, - 0x0a, 0xc9, 0x05, 0x49, 0x1b, 0x46, 0xeb, 0xa8, 0x3e, 0x7a, 0xd6, 0x99, - 0xff, 0xda, 0x35, 0x31, 0xdc, 0x04, 0x43, 0xf5, 0xe1, 0x3b, 0x20, 0x86, - 0x71, 0x8b, 0x83, 0x97, 0x49, 0x20, 0x15, 0x1e, 0xb6, 0xd8, 0x5e, 0x60, - 0x5c, 0x14, 0x6d, 0x55, 0xe4, 0x81, 0xb9, 0x31, 0xc2, 0x9b, 0x77, 0xc8, - 0x4f, 0x71, 0xe4, 0xd9, 0x45, 0xf8, 0x51, 0x32, 0xec, 0x7f, 0x86, 0x71, - 0xe0, 0xb6, 0x12, 0x0c, 0xc4, 0xea, 0xc9, 0x6d, 0x78, 0x46, 0x8b, 0x9b, - 0x6b, 0xa2, 0x43, 0x5f, 0xe4, 0xc2, 0x06, 0xaf, 0x8c, 0xca, 0xba, 0xf5, - 0xe6, 0x06, 0x13, 0x99, 0x05, 0xd7, 0x6d, 0x15, 0x4c, 0xcc, 0xa9, 0x05, - 0xfd, 0x83, 0x92, 0x51, 0xd6, 0x41, 0xef, 0x0f, 0xaa, 0x5a, 0x7d, 0x60, - 0x25, 0x81, 0x4c, 0xe2, 0xa2, 0xe7, 0x95, 0xc5, 0xe0, 0xd7, 0x37, 0xe4, - 0xa3, 0x80, 0x3c, 0x04, 0x87, 0xb3, 0xc6, 0xf4, 0x98, 0x6d, 0xbb, 0xbb, - 0xfe, 0xcd, 0x87, 0x52, 0x01, 0x36, 0xcc, 0xf8, 0x4a, 0x2e, 0x40, 0x0f, - 0x94, 0x51, 0x58, 0x34, 0xc5, 0xe8, 0x84, 0x76, 0xd1, 0x59, 0x48, 0xaa, - 0xfd, 0x92, 0xa4, 0x35, 0xee, 0x57, 0xa8, 0x72, 0x21, 0xeb, 0x3f, 0x43, - 0xbd, 0x47, 0x68, 0xe7, 0x21, 0x0b, 0x05, 0x22, 0x46, 0x43, 0x70, 0xf6, - 0x1f, 0x1f, 0xcf, 0xe5, 0xd4, 0xdf, 0x16, 0xb9, 0xaf, 0x23, 0x0a, 0x57, - 0xe0, 0xe0, 0xf2, 0xca, 0xca, 0x4c, 0xb8, 0xf0, 0x03, 0xda, 0x7d, 0x47, - 0x74, 0x7f, 0x61, 0xc6, 0x64, 0xf7, 0xe8, 0x77, 0xe3, 0xa2, 0xd9, 0x39, - 0xa7, 0xdc, 0x47, 0x8f, 0x91, 0x37, 0x98, 0x04, 0x80, 0x06, 0x0e, 0x28, - 0xde, 0x72, 0xf1, 0xda, 0xf7, 0x26, 0x89, 0x53, 0x15, 0x5a, 0xbf, 0xfd, - 0x62, 0x1f, 0x28, 0x3d, 0x8f, 0xf6, 0xbc, 0x3b, 0xdd, 0x31, 0x22, 0x33, - 0x88, 0xae, 0xe6, 0x11, 0x60, 0xc1, 0x0b, 0x6c, 0x36, 0xc5, 0x0d, 0x83, - 0xf7, 0x6e, 0xda, 0x12, 0xc1, 0xfa, 0x84, 0xaf, 0x34, 0xc3, 0xb0, 0x2b, - 0xe8, 0xc0, 0x22, 0x26, 0xed, 0x90, 0x55, 0x07, 0xd1, 0xe3, 0x48, 0xf2, - 0x32, 0xf2, 0x0b, 0x61, 0xdd, 0x1d, 0x85, 0x05, 0xb7, 0x6c, 0xd9, 0x0a, - 0x5c, 0x0e, 0x8d, 0x82, 0x8a, 0x52, 0x3f, 0x78, 0xea, 0x1b, 0xd9, 0xe6, - 0xac, 0x7f, 0x00, 0x00, 0x5a, 0xc7, 0xbd, 0x8a, 0x84, 0xe1, 0x61, 0xdb, - 0x34, 0xf0, 0xa6, 0xee, 0x2e, 0x2e, 0x8f, 0xd3, 0xe7, 0x32, 0xc6, 0xb2, - 0x39, 0xdf, 0xe0, 0x7d, 0x6a, 0xcd, 0x4c, 0xe1, 0xdc, 0x2d, 0xaa, 0x51, - 0xac, 0xd5, 0x15, 0xb0, 0x13, 0xc3, 0x98, 0x6e, 0x29, 0xb7, 0xb6, 0x10, - 0xf7, 0x0a, 0x98, 0x15, 0x02, 0x31, 0x15, 0x73, 0xe5, 0xea, 0x03, 0x2a, - 0x40, 0x5f, 0x69, 0x85, 0xf4, 0xcb, 0xc8, 0x52, 0xe4, 0xdb, 0x59, 0x37, - 0xc6, 0xc9, 0x58, 0x81, 0x1c, 0xdc, 0xc1, 0xb8, 0x81, 0x29, 0x82, 0xa3, - 0x85, 0x3e, 0xd8, 0xd0, 0x67, 0xea, 0x03, 0x3d, 0x0a, 0x45, 0xa1, 0x22, - 0x9f, 0xfd, 0x93, 0x64, 0xd6, 0xfa, 0xe4, 0x25, 0xc7, 0x4d, 0x69, 0xbd, - 0xa7, 0x37, 0x5f, 0x48, 0xef, 0xe4, 0xf4, 0x35, 0x98, 0x10, 0x0f, 0x65, - 0xc1, 0xf0, 0x61, 0x62, 0x6b, 0x13, 0xd3, 0xec, 0xc5, 0x5b, 0x03, 0x50, - 0x64, 0x79, 0x8c, 0x28, 0x99, 0xe9, 0xe4, 0x84, 0x79, 0x6d, 0x2d, 0x39, - 0xee, 0x2a, 0x12, 0xc8, 0xf7, 0x4f, 0x82, 0x6e, 0x9c, 0x94, 0x15, 0x20, - 0x19, 0xd5, 0x26, 0xc8, 0x22, 0x04, 0x38, 0xbb, 0xdb, 0x13, 0x9a, 0x7a, - 0x87, 0x21, 0x99, 0x49, 0x00, 0x46, 0x17, 0x2e, 0xdf, 0xed, 0xca, 0x83, - 0x17, 0xe3, 0x74, 0xb1, 0x45, 0x2e, 0xe6, 0xc1, 0x09, 0xe9, 0xcc, 0xe9, - 0x31, 0x56, 0x4e, 0x23, 0xf1, 0xef, 0x88, 0x36, 0x88, 0x14, 0x7e, 0x7d, - 0x4a, 0x82, 0x4f, 0xb6, 0x5a, 0x62, 0xda, 0x8c, 0xb3, 0xa0, 0xca, 0xaa, - 0x9b, 0x66, 0x18, 0xb9, 0xbe, 0x0d, 0x59, 0x75, 0x1b, 0x5b, 0xff, 0xf5, - 0x58, 0x13, 0x19, 0x2a, 0x48, 0xc6, 0x7f, 0xbe, 0x11, 0x21, 0x5a, 0x1b, - 0xf4, 0x49, 0xe7, 0xbc, 0xd6, 0xb2, 0xdf, 0xf9, 0x2a, 0xaf, 0xfb, 0x15, - 0xa8, 0xa2, 0x34, 0x24, 0x7e, 0x36, 0x86, 0x33, 0x9c, 0x3e, 0xe3, 0x46, - 0x7d, 0x8b, 0x1d, 0x37, 0xfc, 0x47, 0xbe, 0xd2, 0x3f, 0xb8, 0x4c, 0x9d, - 0xd4, 0xa9, 0xbb, 0xb6, 0x7f, 0x4a, 0x2f, 0xa0, 0x22, 0xa9, 0x1a, 0x1e, - 0xdd, 0xd0, 0x1e, 0xb6, 0x40, 0x98, 0x12, 0xc2, 0x5d, 0xff, 0xfb, 0x20, - 0xdc, 0x2c, 0xfd, 0xb9, 0x4c, 0x9a, 0xcd, 0x6b, 0x29, 0xab, 0x75, 0xb0, - 0xfd, 0xc4, 0xdd, 0xa0, 0x92, 0xe3, 0x8b, 0x2f, 0x18, 0xbb, 0x7d, 0x82, - 0xa5, 0x30, 0x88, 0x21, 0x94, 0x31, 0x44, 0xfd, 0x76, 0xdc, 0xc9, 0x58, - 0xb8, 0x0a, 0x8d, 0x14, 0x59, 0x81, 0x22, 0xa7, 0x84, 0xaf, 0x84, 0x1e, - 0xc6, 0x5e, 0x0c, 0x50, 0x24, 0xac, 0x8b, 0xa0, 0x5e, 0x45, 0x14, 0x06, - 0x52, 0x60, 0x35, 0xa2, 0x88, 0x08, 0x2c, 0xc1, 0x5e, 0xfd, 0xca, 0x57, - 0x2b, 0xbe, 0x4d, 0xee, 0x12, 0x8e, 0x60, 0x99, 0x12, 0x9d, 0xad, 0x8c, - 0x57, 0x3e, 0xf2, 0x7f, 0x69, 0x57, 0x65, 0x00, 0xa7, 0x48, 0x62, 0x5e, - 0xb3, 0x4f, 0x2c, 0x1e, 0x38, 0xb0, 0xc6, 0xbb, 0x8d, 0x77, 0x35, 0x3e, - 0xca, 0xd4, 0x36, 0x30, 0x46, 0x20, 0xd2, 0xde, 0xd4, 0x66, 0x50, 0xd9, - 0x7f, 0x12, 0x28, 0x28, 0x4d, 0x0c, 0xf0, 0x44, 0x95, 0x17, 0xbf, 0xa5, - 0xf9, 0xd5, 0x62, 0x97, 0xbc, 0xc0, 0x08, 0x64, 0x1d, 0x44, 0x69, 0x3f, - 0xb0, 0x60, 0xd0, 0xe0, 0x92, 0xd0, 0x87, 0x4f, 0x6d, 0x5f, 0x3a, 0xc2, - 0x8e, 0x9b, 0xfc, 0x37, 0x6d, 0x3c, 0xe8, 0xe2, 0xd8, 0x09, 0x0a, 0x04, - 0xe2, 0x00, 0xd0, 0x80, 0x13, 0xcd, 0xb9, 0x5f, 0x12, 0x7a, 0xa4, 0xce, - 0xc4, 0xa0, 0xee, 0xad, 0xe4, 0xc7, 0x5d, 0x11, 0xf4, 0xaa, 0x38, 0x89, - 0xa7, 0x2b, 0xb2, 0x34, 0x38, 0x7c, 0xff, 0x05, 0xe6, 0x3f, 0xc1, 0xb8, - 0x1d, 0x80, 0x1e, 0x9b, 0xb8, 0xa1, 0xe1, 0x4a, 0x8d, 0x3f, 0x82, 0x9b, - 0x4d, 0x08, 0xce, 0x89, 0x8d, 0x7e, 0xb9, 0x20, 0x1b, 0x71, 0xb3, 0x57, - 0x5a, 0x71, 0xdc, 0x45, 0x1b, 0xba, 0x3c, 0x95, 0x18, 0xfb, 0x08, 0xb0, - 0x6e, 0x90, 0x27, 0xd3, 0xae, 0x20, 0x39, 0xdb, 0x1f, 0x71, 0xdd, 0x97, - 0x6f, 0x7c, 0xfa, 0xd9, 0x12, 0xff, 0x41, 0x81, 0x14, 0x5c, 0xc7, 0xbc, - 0xe9, 0xb2, 0x60, 0xe3, 0x0b, 0xf4, 0x27, 0x32, 0x52, 0x7e, 0x08, 0x1d, - 0xa0, 0xc3, 0x4d, 0x0b, 0x91, 0x60, 0xba, 0x90, 0xfe, 0x26, 0x62, 0xb1, - 0x96, 0x1e, 0x47, 0xa0, 0x70, 0x2a, 0x29, 0xc5, 0xa9, 0xd2, 0x83, 0xff, - 0xb5, 0x89, 0x60, 0x7b, 0xc5, 0xe6, 0x67, 0xd2, 0xf6, 0x6d, 0x83, 0xfa, - 0xb3, 0xb3, 0x26, 0x48, 0x4e, 0xf2, 0x82, 0x67, 0xbf, 0xa6, 0x9b, 0xdb, - 0x84, 0xc9, 0xbd, 0xfd, 0xce, 0x52, 0x84, 0xa5, 0x3a, 0x87, 0x54, 0xea, - 0x0b, 0x97, 0xb6, 0xb0, 0x5e, 0x20, 0xde, 0x61, 0xce, 0xf4, 0x45, 0x3e, - 0x2f, 0xf5, 0x01, 0x9e, 0xef, 0x20, 0xe4, 0x80, 0x06, 0x84, 0xd4, 0x35, - 0x73, 0x20, 0xd2, 0xf8, 0xe5, 0xf4, 0x99, 0xd5, 0xc1, 0xbb, 0x94, 0x01, - 0x46, 0x17, 0xc4, 0x10, 0xa8, 0x0a, 0x0f, 0xea, 0xd3, 0x24, 0x4c, 0x01, - 0xc2, 0xd5, 0xcc, 0xa1, 0x73, 0x5e, 0xf7, 0x36, 0xd2, 0x79, 0x86, 0x88, - 0x3b, 0x91, 0xb9, 0x0f, 0xd3, 0xa8, 0xb3, 0x5b, 0x64, 0x02, 0xa0, 0xfb, - 0x15, 0x56, 0xb1, 0xac, 0x2f, 0x9d, 0xe2, 0x9e, 0x0f, 0x7e, 0xcf, 0xa6, - 0xc5, 0xf2, 0x58, 0xbe, 0xd1, 0x76, 0xf0, 0xec, 0x69, 0xf4, 0x91, 0xa9, - 0x50, 0x56, 0xa3, 0xdb, 0xba, 0x19, 0xd8, 0x9f, 0x77, 0x0f, 0x18, 0x26, - 0xb9, 0xfb, 0xcd, 0x4d, 0x76, 0x4c, 0xd2, 0x07, 0xc3, 0x04, 0x83, 0xc8, - 0xf1, 0x30, 0x79, 0x23, 0xd6, 0xd6, 0x56, 0xf6, 0x96, 0xe2, 0xa5, 0x89, - 0x86, 0xe0, 0x62, 0x8c, 0x02, 0x3a, 0x85, 0x5d, 0x58, 0xf5, 0xe2, 0xcc, - 0x6d, 0x8e, 0x9a, 0xe3, 0x6f, 0x83, 0x35, 0x4e, 0xc8, 0x2a, 0xb3, 0xb1, - 0xf8, 0x04, 0xae, 0xf3, 0xe0, 0xb7, 0x09, 0xce, 0x38, 0x13, 0x73, 0x8c, - 0x97, 0x6c, 0x90, 0xd4, 0x24, 0x53, 0xab, 0xec, 0xd5, 0x10, 0x8c, 0xc7, - 0x02, 0x3a, 0x77, 0x6e, 0x7e, 0x42, 0x50, 0x54, 0xf1, 0xbc, 0xd7, 0x2d, - 0x62, 0x7c, 0x33, 0x6d, 0x53, 0x45, 0xd2, 0x2e, 0x4e, 0x19, 0xf4, 0x5d, - 0xae, 0x34, 0x17, 0x85, 0x6c, 0x43, 0xd7, 0x0c, 0x91, 0x65, 0x90, 0xa5, - 0x5f, 0x38, 0x3d, 0xc1, 0xb0, 0xae, 0xf2, 0x50, 0x37, 0x2f, 0x8a, 0xe5, - 0x49, 0x66, 0x71, 0x53, 0xb7, 0x66, 0xa8, 0xb4, 0x6d, 0x87, 0x13, 0xa2, - 0x88, 0xc9, 0xe4, 0xb6, 0xd5, 0x0e, 0x7f, 0xad, 0xfe, 0x1a, 0xcf, 0x59, - 0xf3, 0xdf, 0xd9, 0xd3, 0x64, 0xd9, 0x0a, 0x3c, 0x26, 0xff, 0xa9, 0x92, - 0x64, 0xdc, 0xa6, 0xd5, 0xae, 0x77, 0x2f, 0x7e, 0xc1, 0x53, 0xfc, 0xff, - 0x75, 0xa9, 0xa5, 0x39, 0x6e, 0xe2, 0xd5, 0xff, 0xff, 0xe3, 0x43, 0xac, - 0x0b, 0x21, 0x26, 0xd0, 0xe1, 0xe7, 0x33, 0x59, 0xb0, 0x26, 0xed, 0xd8, - 0x9d, 0x67, 0x28, 0x09, 0x8a, 0x0f, 0xf0, 0x56, 0x72, 0xd5, 0x8f, 0x87, - 0x9b, 0x17, 0x62, 0xdf, 0x9e, 0x39, 0x11, 0x9a, 0x2f, 0x88, 0x88, 0x48, - 0xc4, 0xf6, 0x52, 0x11, 0xce, 0x96, 0x37, 0xaa, 0x04, 0xc1, 0x07, 0x5f, - 0x18, 0x77, 0x40, 0x1c, 0x75, 0xe3, 0x22, 0x65, 0x72, 0x50, 0xcc, 0xe5, - 0x53, 0xfe, 0x9a, 0xde, 0x7e, 0xfc, 0x52, 0x92, 0x36, 0x69, 0x5e, 0x4c, - 0x79, 0xd7, 0x51, 0x11, 0xec, 0x65, 0xd2, 0xab, 0x3f, 0xbe, 0x07, 0x89, - 0x13, 0x66, 0xc6, 0xa7, 0xfa, 0x7c, 0x99, 0x07, 0x6b, 0x05, 0xd8, 0x2d, - 0x1c, 0x52, 0xaa, 0x53, 0x84, 0x94, 0x62, 0x48, 0x23, 0x9a, 0xca, 0x33, - 0x1a, 0xd5, 0xba, 0x3e, 0xce, 0x43, 0x44, 0xb5, 0x78, 0x0e, 0x4b, 0x91, - 0x7e, 0xac, 0xf3, 0x8e, 0xc4, 0x16, 0x4f, 0xd1, 0x12, 0x05, 0x16, 0x60, - 0x35, 0x63, 0xf6, 0x21, 0x61, 0x19, 0x00, 0x2e, 0xa7, 0x84, 0x45, 0x26, - 0xbf, 0x98, 0x3f, 0xe8, 0x42, 0xf6, 0xf0, 0x46, 0x0e, 0xc6, 0xe0, 0xe3, - 0xcc, 0x22, 0x50, 0xe8, 0x76, 0x64, 0x33, 0x83, 0x8b, 0x9f, 0xad, 0xd1, - 0x72, 0x17, 0xff, 0x47, 0x57, 0x61, 0x67, 0x12, 0xc1, 0xda, 0x4c, 0x89, - 0x27, 0x1f, 0xe7, 0xf0, 0x4a, 0xe5, 0x05, 0x68, 0x51, 0x49, 0x16, 0x59, - 0x91, 0x6e, 0xcb, 0xfd, 0xb3, 0x03, 0xbe, 0x70, 0x7d, 0x2d, 0xfa, 0x2f, - 0xf0, 0xcc, 0xc3, 0x98, 0x09, 0x56, 0xa5, 0x64, 0x87, 0x0d, 0xac, 0xfe, - 0xbe, 0xbc, 0x16, 0xb4, 0x69, 0x0c, 0x66, 0x1e, 0x6e, 0x88, 0xc9, 0x88, - 0x47, 0xe0, 0xdd, 0x43, 0xe4, 0x64, 0xaf, 0x10, 0x4c, 0xac, 0x94, 0x58, - 0x32, 0x9c, 0x34, 0xb9, 0xa0, 0x86, 0x84, 0x7f, 0x77, 0xc5, 0x9a, 0x05, - 0x2d, 0x97, 0x7e, 0x69, 0xb2, 0x82, 0x9d, 0x64, 0x27, 0xc7, 0x06, 0x77, - 0x81, 0x32, 0x76, 0x36, 0xca, 0x05, 0x66, 0x37, 0xae, 0x3e, 0x5f, 0xff, - 0x09, 0xd1, 0x26, 0x24, 0x8f, 0x1a, 0x89, 0xc6, 0x36, 0xfa, 0x02, 0x11, - 0x59, 0x2b, 0xa1, 0x0f, 0xb9, 0x2a, 0xe6, 0xb3, 0xd4, 0x39, 0x07, 0xd8, - 0xc9, 0x79, 0x5b, 0x3f, 0xa0, 0xd7, 0x5d, 0x0c, 0x0d, 0x12, 0xe6, 0x58, - 0x2c, 0x5b, 0x6b, 0x4f, 0x45, 0x86, 0x19, 0x17, 0x72, 0x22, 0x49, 0x17, - 0x47, 0x4e, 0x93, 0x63, 0xa3, 0x04, 0x50, 0xa2, 0xb2, 0x8e, 0xb5, 0xc7, - 0x91, 0x46, 0x5e, 0xdf, 0x68, 0xb0, 0xf1, 0x8d, 0x9d, 0x4c, 0x76, 0xc3, - 0x5d, 0x10, 0x1f, 0x43, 0x01, 0x2e, 0x3d, 0xe6, 0xc2, 0x40, 0x6a, 0x80, - 0x12, 0x5e, 0x8e, 0x48, 0x6d, 0x38, 0x31, 0xf2, 0x98, 0x4b, 0xc7, 0x86, - 0x7d, 0xb0, 0xd3, 0x45, 0x31, 0x57, 0xce, 0x91, 0x64, 0xae, 0x62, 0x19, - 0xba, 0x70, 0x8a, 0x6f, 0xcc, 0xf9, 0x8b, 0x8d, 0x23, 0x5d, 0xe9, 0x13, - 0xa2, 0x69, 0x08, 0x67, 0x3b, 0xfd, 0x3f, 0xf6, 0x4d, 0x1d, 0x83, 0x82, - 0xa0, 0x32, 0x8f, 0x5b, 0x9a, 0xc6, 0x9b, 0xc7, 0x13, 0x03, 0xc2, 0x39, - 0xae, 0x77, 0x19, 0x89, 0xfc, 0xc5, 0xb3, 0x1f, 0xf8, 0x43, 0x46, 0x9c, - 0xd1, 0xe7, 0xb3, 0x72, 0x16, 0xdb, 0x6d, 0xad, 0xc9, 0xb7, 0xf3, 0xdf, - 0x9f, 0xb4, 0x4b, 0xc7, 0x42, 0x42, 0x49, 0xac, 0x1d, 0xc7, 0x48, 0x37, - 0x25, 0x81, 0x36, 0xf9, 0xe7, 0xc7, 0x9f, 0x24, 0xaf, 0x97, 0xb0, 0x92, - 0x89, 0x1c, 0xab, 0x5b, 0x67, 0x80, 0xf9, 0x93, 0x61, 0xff, 0x1d, 0x89, - 0x67, 0xc0, 0xc1, 0xeb, 0xbd, 0xd1, 0xd4, 0xc0, 0x87, 0xca, 0x49, 0x40, - 0xbe, 0xe6, 0xc2, 0xa2, 0x46, 0xd6, 0x4d, 0x93, 0x4b, 0x7b, 0x97, 0xb6, - 0x60, 0x4d, 0x9f, 0xe5, 0xed, 0xc2, 0x56, 0xc4, 0x35, 0x50, 0xc7, 0x90, - 0x1a, 0x23, 0x4e, 0x4a, 0x82, 0xa6, 0x20, 0x01, 0x55, 0x5c, 0x1a, 0xf2, - 0xe8, 0x61, 0x1d, 0x76, 0xe9, 0xde, 0x7d, 0x7f, 0x4d, 0x62, 0xb9, 0x51, - 0xe6, 0x05, 0x3b, 0xf7, 0x5a, 0x98, 0x6c, 0x86, 0x72, 0xfe, 0x38, 0xf9, - 0x38, 0x7b, 0xed, 0x26, 0xed, 0xe5, 0x1f, 0xed, 0x89, 0xf8, 0x37, 0x4d, - 0x27, 0x7b, 0x0d, 0x1d, 0x77, 0xc2, 0x59, 0x6a, 0xc9, 0x86, 0x46, 0xd7, - 0xc0, 0x9e, 0xd7, 0xaa, 0xd9, 0xe2, 0x0c, 0x07, 0xd1, 0x2f, 0xa0, 0xdb, - 0x15, 0xc8, 0x95, 0x8d, 0xe8, 0xaa, 0xfc, 0x7c, 0xef, 0xa5, 0xf8, 0xca, - 0xc0, 0x82, 0xf9, 0x1f, 0xf4, 0xda, 0x93, 0xe4, 0x2e, 0x46, 0xec, 0x85, - 0x1b, 0x48, 0xfb, 0x00, 0x28, 0x8f, 0xde, 0x6e, 0x86, 0xf7, 0xcd, 0x66, - 0x46, 0x43, 0x88, 0xd4, 0xac, 0x80, 0x79, 0x44, 0xc7, 0x92, 0xd1, 0x6f, - 0x64, 0xbd, 0x0f, 0x48, 0x54, 0x43, 0x06, 0xa7, 0x09, 0xd4, 0xc9, 0xe8, - 0xd1, 0x40, 0xaa, 0x58, 0x74, 0xb6, 0x15, 0xb9, 0x4f, 0x03, 0x87, 0x52, - 0x26, 0x25, 0x72, 0x78, 0xa9, 0x08, 0x3d, 0x86, 0x93, 0x8b, 0x6e, 0x3f, - 0x13, 0x02, 0x9c, 0xbd, 0x96, 0xbd, 0xb3, 0x38, 0xf3, 0xba, 0x4a, 0x8e, - 0x54, 0x4b, 0x05, 0xbb, 0xe7, 0x2f, 0x04, 0x16, 0x7a, 0x5d, 0xc7, 0x63, - 0xed, 0x6d, 0xc5, 0x67, 0x9c, 0x5a, 0xb3, 0x2a, 0xa4, 0x4e, 0x25, 0xae, - 0xa4, 0x87, 0x58, 0x3c, 0x25, 0xea, 0xdc, 0x14, 0xe4, 0x47, 0xbb, 0xed, - 0x80, 0x5e, 0x8c, 0x8c, 0xa8, 0x14, 0x9d, 0x60, 0xa7, 0xad, 0x93, 0x56, - 0x04, 0xe1, 0xf2, 0x43, 0xaa, 0xc7, 0xd5, 0xb6, 0x42, 0xf4, 0xf5, 0xf7, - 0x2e, 0x94, 0x97, 0x9d, 0xdb, 0x61, 0xba, 0x88, 0xa3, 0xd7, 0x80, 0x69, - 0x40, 0xea, 0xf2, 0x77, 0x45, 0xe0, 0xcb, 0xd7, 0xb4, 0x8a, 0x7c, 0xca, - 0xfe, 0x2f, 0x86, 0x5e, 0x9a, 0x21, 0xa2, 0xcf, 0x26, 0xf2, 0xa7, 0xfd, - 0x41, 0x7a, 0x66, 0x68, 0xcc, 0x31, 0xfb, 0x17, 0x76, 0x06, 0x06, 0xd2, - 0xd3, 0x90, 0xb1, 0x23, 0x03, 0x28, 0x2a, 0x54, 0x6f, 0xf5, 0xcd, 0x94, - 0x41, 0x30, 0x9f, 0x4b, 0x46, 0xc7, 0xbf, 0x13, 0xe6, 0x9d, 0x2d, 0x47, - 0xb5, 0xe1, 0x31, 0x82, 0xcb, 0x5a, 0x96, 0x76, 0x9e, 0x0d, 0x82, 0xa4, - 0x8f, 0x24, 0xb0, 0x7b, 0xc1, 0xc6, 0x62, 0xed, 0xfd, 0xf8, 0x35, 0xfe, - 0xfd, 0xc3, 0xe5, 0xa6, 0x49, 0xf0, 0xc7, 0xab, 0x15, 0x2b, 0x8c, 0x38, - 0x2e, 0xe7, 0x24, 0x7e, 0x01, 0x94, 0xef, 0xe1, 0x0a, 0x33, 0xfb, 0xef, - 0x07, 0xae, 0x2e, 0xae, 0xf6, 0xf9, 0xe9, 0x4c, 0x55, 0x22, 0x20, 0xa6, - 0xa9, 0xe1, 0x28, 0xad, 0xe4, 0x54, 0xe0, 0xcd, 0x76, 0x49, 0x5d, 0x1d, - 0x63, 0x1e, 0x9d, 0xc1, 0x52, 0x32, 0x70, 0x07, 0x50, 0xb9, 0x65, 0x40, - 0x31, 0xdf, 0x57, 0xa0, 0xb1, 0xf2, 0x0b, 0xaa, 0x63, 0xad, 0x7e, 0x48, - 0xde, 0x77, 0x66, 0x33, 0xdc, 0x0a, 0x6a, 0xe9, 0x51, 0xcf, 0xf7, 0x41, - 0x13, 0xf2, 0xb7, 0xab, 0x5d, 0x8f, 0x04, 0x8f, 0xbb, 0xec, 0x46, 0x1e, - 0xea, 0x64, 0x8d, 0x0f, 0x62, 0xb2, 0x8c, 0x4c, 0xc6, 0x29, 0x4e, 0x51, - 0x18, 0x40, 0xe5, 0xa5, 0xe7, 0x65, 0xd2, 0x05, 0xef, 0xe2, 0x6b, 0xed, - 0xe4, 0x37, 0x3a, 0x18, 0xb5, 0xbf, 0x6f, 0xff, 0x95, 0xb8, 0xc7, 0x26, - 0xb7, 0x04, 0xe5, 0xe1, 0xfd, 0xc0, 0xd3, 0xbb, 0x89, 0xf8, 0xe1, 0xb1, - 0x0c, 0x6e, 0x35, 0x57, 0xd1, 0xd9, 0xb2, 0x75, 0x80, 0x5f, 0xdf, 0x6e, - 0xad, 0xfa, 0xb9, 0x3d, 0x7e, 0xa7, 0xb7, 0xfa, 0xcd, 0xc9, 0x8e, 0x66, - 0xd7, 0xff, 0xa8, 0x6f, 0xe9, 0x5b, 0x5a, 0x30, 0x42, 0x08, 0x4a, 0xa6, - 0x59, 0xfa, 0xc2, 0x63, 0xf0, 0xf5, 0x18, 0x14, 0xc2, 0x24, 0x38, 0x86, - 0x70, 0x30, 0x4f, 0x49, 0x14, 0xfe, 0xbd, 0x88, 0x42, 0x33, 0x38, 0xf3, - 0x27, 0x7e, 0x41, 0x56, 0xe5, 0x6e, 0x27, 0x3b, 0x0d, 0x45, 0xb3, 0x64, - 0x4d, 0x1e, 0xe4, 0x9b, 0x7e, 0x82, 0x70, 0x5b, 0xa3, 0x4f, 0x70, 0x88, - 0x70, 0x21, 0xcd, 0x26, 0x49, 0xd1, 0xc0, 0x0d, 0x32, 0x9b, 0xf2, 0xd1, - 0x7c, 0x7a, 0xc5, 0x5c, 0xc4, 0xe5, 0x45, 0xe7, 0x00, 0xf4, 0x7e, 0x28, - 0xf4, 0xff, 0xde, 0x87, 0x6e, 0x25, 0xb7, 0x5f, 0x82, 0xa3, 0xdb, 0xad, - 0xcb, 0x4f, 0x92, 0x87, 0x72, 0xc2, 0x43, 0xdd, 0xfe, 0x70, 0xc7, 0x12, - 0xfd, 0x84, 0xad, 0x89, 0x0b, 0xcd, 0x19, 0xd9, 0xf5, 0x73, 0xad, 0x18, - 0x64, 0x68, 0xad, 0x33, 0xaa, 0x98, 0xb4, 0x03, 0x8b, 0x05, 0x3c, 0xbf, - 0x87, 0x1b, 0xa6, 0xdd, 0x83, 0x84, 0xfa, 0xf4, 0x40, 0x5c, 0x8f, 0xd0, - 0xe1, 0xaf, 0xe6, 0xcd, 0xfe, 0x68, 0x65, 0x9a, 0x66, 0x23, 0x03, 0x8f, - 0x37, 0x23, 0xf6, 0x89, 0x36, 0x70, 0x17, 0x82, 0x11, 0x88, 0x5f, 0x31, - 0xb2, 0x56, 0xbe, 0x32, 0x83, 0xf8, 0xaa, 0x89, 0xfa, 0xb1, 0x86, 0xc6, - 0x22, 0x05, 0x60, 0x45, 0x22, 0x3a, 0x98, 0xde, 0x45, 0xca, 0x7e, 0x83, - 0xe4, 0x43, 0xb9, 0x36, 0xf7, 0x52, 0xdb, 0x1b, 0x1b, 0xe6, 0xb4, 0x72, - 0x4f, 0x56, 0x48, 0xff, 0x7d, 0x6c, 0x7d, 0x0f, 0x40, 0xd4, 0x6f, 0xd1, - 0xd8, 0x41, 0x64, 0x1e, 0xe0, 0x76, 0x4e, 0x68, 0x58, 0x02, 0x3d, 0xaa, - 0x90, 0xc1, 0xda, 0x5d, 0xa8, 0x7e, 0xb7, 0x95, 0x8c, 0xd0, 0x88, 0x38, - 0xa8, 0x21, 0xe5, 0xc2, 0x46, 0x3e, 0x37, 0xbd, 0x8e, 0xc8, 0x74, 0x98, - 0xed, 0x6c, 0x88, 0x7f, 0xfd, 0xeb, 0x62, 0x2e, 0xf2, 0x6a, 0xd4, 0xeb, - 0xf2, 0xf0, 0x66, 0x21, 0x72, 0x4a, 0x24, 0x32, 0xed, 0x00, 0x0c, 0x56, - 0xfa, 0x49, 0x9d, 0xc7, 0x08, 0x22, 0xc9, 0x52, 0xdc, 0xf0, 0x26, 0xc1, - 0x69, 0x58, 0x2a, 0xbe, 0x27, 0x5d, 0x5e, 0x44, 0xb3, 0x85, 0x0f, 0x68, - 0x25, 0xc4, 0x59, 0x8a, 0x6d, 0xca, 0xb1, 0xec, 0x69, 0x6d, 0x52, 0xd1, - 0x54, 0x61, 0x8c, 0xff, 0xe9, 0xf7, 0x62, 0x9b, 0x8b, 0xe6, 0xe6, 0xc9, - 0x43, 0xa9, 0xc0, 0xad, 0x3a, 0xfa, 0x3a, 0x41, 0x1a, 0xed, 0xa4, 0xc8, - 0x42, 0xeb, 0xba, 0xbb, 0xec, 0xde, 0x72, 0xf5, 0x55, 0x78, 0xff, 0x8d, - 0xb9, 0x8a, 0x62, 0xa3, 0xfb, 0x94, 0x23, 0xdb, 0x90, 0xf2, 0x57, 0x28, - 0x7b, 0x17, 0x51, 0xb3, 0xdd, 0x8b, 0x4f, 0x6d, 0x5a, 0xeb, 0x21, 0x59, - 0x50, 0x5f, 0x71, 0xe5, 0x95, 0xd6, 0x03, 0xf5, 0xad, 0x1b, 0x7b, 0xbb, - 0xe1, 0xc4, 0xae, 0x2e, 0x71, 0x15, 0x6c, 0x66, 0xd0, 0xfb, 0x01, 0x35, - 0x9c, 0x64, 0xae, 0x55, 0xc8, 0x82, 0xb5, 0x6d, 0x83, 0x2b, 0x5d, 0xf6, - 0xde, 0x79, 0x5d, 0x93, 0xb1, 0xfe, 0x2e, 0x60, 0x4d, 0x46, 0xd3, 0xd9, - 0xcc, 0xd2, 0x30, 0x7c, 0xec, 0xd4, 0xcb, 0x75, 0x9f, 0x78, 0xfd, 0x44, - 0xd9, 0x1d, 0x58, 0xac, 0xef, 0x02, 0x28, 0xaa, 0x8d, 0xbe, 0x3c, 0xec, - 0x51, 0x7e, 0x44, 0x40, 0xd7, 0xec, 0x52, 0x25, 0xf1, 0x99, 0x53, 0x65, - 0xfb, 0xbc, 0x10, 0x75, 0xa4, 0x27, 0x1b, 0x65, 0xdb, 0xe9, 0x8d, 0x90, - 0xa5, 0x14, 0xdc, 0x38, 0x31, 0xf1, 0x06, 0xf0, 0xa8, 0xea, 0xd6, 0xfb, - 0x7e, 0xb0, 0x18, 0x0d, 0x06, 0xbe, 0x92, 0xbc, 0xa0, 0x21, 0x9b, 0xfa, - 0x72, 0x4f, 0x0a, 0x4c, 0xa7, 0x8b, 0xd0, 0x39, 0xf1, 0xc3, 0x7b, 0x40, - 0x22, 0x5a, 0x11, 0x96, 0xe5, 0x50, 0xb5, 0xb1, 0x4e, 0xdf, 0x95, 0x03, - 0xe1, 0x6e, 0x16, 0x9d, 0x1f, 0xb8, 0xb7, 0x4c, 0x93, 0x3c, 0x8c, 0x19, - 0xbd, 0x57, 0x8f, 0x7d, 0xa5, 0x4d, 0x04, 0x1f, 0x11, 0x22, 0xd5, 0x3b, - 0xb6, 0x8f, 0xbd, 0x6d, 0x21, 0x89, 0xa3, 0xc9, 0xc5, 0xf6, 0x09, 0xf1, - 0x4a, 0x1f, 0xe9, 0xff, 0x96, 0x8e, 0x71, 0x28, 0x95, 0x68, 0xcb, 0xd5, - 0xd9, 0x3c, 0xe0, 0xa6, 0xc4, 0x49, 0xf4, 0x84, 0xa7, 0x57, 0x69, 0x73, - 0xc5, 0xd9, 0xc9, 0x14, 0x05, 0xa9, 0x06, 0xa5, 0x95, 0x21, 0xb2, 0x69, - 0x1b, 0x25, 0xbe, 0x20, 0x56, 0xf0, 0xdd, 0x2d, 0xed, 0xea, 0xaf, 0xc2, - 0x79, 0xb1, 0xea, 0xeb, 0xed, 0x27, 0x87, 0xe6, 0xc3, 0x4e, 0x5b, 0x08, - 0xde, 0x44, 0xb3, 0x01, 0xf9, 0x71, 0x1d, 0x3e, 0x2d, 0x1a, 0xc6, 0xfe, - 0x87, 0xe9, 0xa4, 0xea, 0x4c, 0xc7, 0x83, 0x80, 0xae, 0x03, 0x9a, 0x43, - 0x2f, 0x26, 0xa3, 0x86, 0xa0, 0x8d, 0xc2, 0xf4, 0x26, 0x24, 0x31, 0xab, - 0x5b, 0xc6, 0x0d, 0xf6, 0xc6, 0x07, 0x56, 0x9a, 0x69, 0x04, 0xc4, 0x50, - 0x0d, 0x7e, 0x25, 0x18, 0x88, 0x8c, 0x01, 0x98, 0xd4, 0x07, 0x72, 0xa4, - 0x26, 0xe1, 0x70, 0x26, 0xc1, 0x74, 0x74, 0x9f, 0xda, 0xc3, 0x40, 0x48, - 0xc2, 0x03, 0x8e, 0x05, 0x2c, 0x9d, 0x27, 0xbf, 0x50, 0x28, 0x77, 0xc3, - 0xd8, 0x9f, 0xeb, 0x0a, 0x3e, 0x9e, 0xe8, 0x88, 0x8e, 0x14, 0x98, 0xff, - 0xbd, 0x50, 0x3e, 0x5d, 0xd2, 0x3a, 0x70, 0x95, 0xe8, 0x1e, 0x77, 0x5f, - 0x45, 0xd8, 0x57, 0x00, 0xcc, 0xa2, 0x9f, 0x1f, 0xcd, 0xec, 0xa8, 0x0b, - 0x1a, 0x25, 0x7f, 0x2c, 0x72, 0x8b, 0x05, 0xce, 0xc0, 0x56, 0x0e, 0xcc, - 0x8e, 0x98, 0x5c, 0xbd, 0xf4, 0x64, 0xf8, 0x14, 0xf3, 0x1e, 0x6a, 0xd5, - 0xa1, 0x3a, 0x35, 0x06, 0xae, 0x3b, 0x25, 0x4c, 0xf5, 0x76, 0x55, 0xbe, - 0xde, 0x0a, 0xe3, 0xa0, 0x87, 0xcf, 0xfd, 0xfc, 0xdf, 0x3a, 0x83, 0x7f, - 0x0f, 0x77, 0x1c, 0x33, 0x46, 0x0a, 0x3b, 0x17, 0x72, 0x4c, 0x9b, 0x1f, - 0xb6, 0xd7, 0x72, 0x00, 0x21, 0x4d, 0x17, 0x3c, 0xd8, 0x1e, 0x22, 0xf1, - 0xcd, 0xb5, 0x7d, 0xf9, 0xc1, 0xa5, 0xba, 0x77, 0x2a, 0x0a, 0xd2, 0x9b, - 0x6a, 0x4d, 0x6a, 0x23, 0x7f, 0xc7, 0xe1, 0xff, 0x31, 0x69, 0x3b, 0xb8, - 0x9a, 0xb5, 0x53, 0x83, 0xa5, 0xa1, 0xc0, 0xd7, 0x8a, 0x07, 0x9a, 0x47, - 0xd3, 0x87, 0x8c, 0x66, 0x9c, 0xa3, 0x08, 0xa4, 0x48, 0xde, 0xdf, 0xf8, - 0x6e, 0xc8, 0xca, 0x3f, 0xcb, 0x10, 0x7d, 0x4d, 0xa8, 0x53, 0x7b, 0xfa, - 0xe5, 0xac, 0x0a, 0x98, 0xf1, 0x53, 0x1f, 0x3d, 0x19, 0x49, 0x70, 0x4a, - 0x76, 0x6d, 0xb7, 0x9d, 0x40, 0x1f, 0x80, 0x98, 0x91, 0xa7, 0xa9, 0x13, - 0xe7, 0x54, 0xa7, 0xc4, 0xa1, 0x00, 0x4c, 0xa4, 0xa2, 0x54, 0xcf, 0xff, - 0xb9, 0x54, 0xcd, 0x43, 0xcd, 0xe0, 0x4c, 0x90, 0xc2, 0x9a, 0xe4, 0xbc, - 0x6c, 0xc9, 0x1e, 0x86, 0x35, 0x4a, 0x5e, 0xce, 0x18, 0x6c, 0x63, 0xd7, - 0x93, 0x0c, 0x0d, 0xc2, 0xfb, 0x08, 0xbc, 0x37, 0x9f, 0xe9, 0x3f, 0x03, - 0x9e, 0x47, 0xbc, 0x87, 0xa2, 0x16, 0xb8, 0xc4, 0x1e, 0x8c, 0x80, 0xe7, - 0xfb, 0xc2, 0x24, 0xbd, 0x3e, 0xc2, 0x51, 0xac, 0x54, 0x92, 0x89, 0x04, - 0x0d, 0xfb, 0xf2, 0x5f, 0xf0, 0x52, 0xa2, 0xf9, 0xf5, 0xcd, 0x38, 0x4d, - 0xb9, 0xec, 0x60, 0x02, 0x82, 0xe1, 0x5c, 0x97, 0xa5, 0x2b, 0x66, 0x91, - 0x23, 0xab, 0x10, 0x40, 0x8d, 0xcd, 0x43, 0x95, 0xa2, 0xef, 0x8c, 0xe3, - 0x45, 0x02, 0x4d, 0xc8, 0x51, 0xa2, 0x8f, 0x90, 0x82, 0x05, 0x00, 0xd5, - 0x58, 0xad, 0x1b, 0x72, 0xc8, 0x20, 0x82, 0x72, 0x0f, 0x51, 0xc0, 0x50, - 0x2c, 0x71, 0x5a, 0x20, 0xc3, 0x20, 0xab, 0x72, 0x2d, 0x35, 0x51, 0x3b, - 0xb3, 0x37, 0x27, 0x35, 0xa8, 0x93, 0x89, 0xf5, 0x5c, 0xbc, 0x16, 0xe9, - 0x69, 0x3f, 0xdb, 0x15, 0xa0, 0xc7, 0x9a, 0xbc, 0xf6, 0xfb, 0xe6, 0x23, - 0x5d, 0xb6, 0xf3, 0xc7, 0xdb, 0x30, 0x4b, 0x5a, 0x06, 0x85, 0x82, 0x4e, - 0x5a, 0xce, 0xb3, 0xa6, 0x49, 0xac, 0x83, 0x6f, 0x03, 0x27, 0x1f, 0x75, - 0xde, 0x8c, 0xa1, 0xd3, 0x5b, 0x2a, 0xb9, 0x91, 0xbf, 0xe3, 0x17, 0x8c, - 0x23, 0x49, 0xbc, 0x6a, 0xdf, 0xc5, 0x14, 0x93, 0x26, 0x63, 0x67, 0xd3, - 0x62, 0x3b, 0xc4, 0x93, 0xda, 0xeb, 0xf6, 0x77, 0xed, 0x97, 0x76, 0x5a, - 0x89, 0x23, 0x00, 0xc1, 0x04, 0xcf, 0xb9, 0x36, 0x55, 0x13, 0x6d, 0x7e, - 0x72, 0x64, 0xe6, 0x45, 0x26, 0x35, 0xdc, 0x00, 0x99, 0x67, 0xb9, 0x97, - 0x74, 0xe4, 0x9a, 0x68, 0x5a, 0xcc, 0xa0, 0x25, 0xd1, 0x6c, 0x11, 0xdb, - 0x4c, 0x82, 0x6b, 0x33, 0xda, 0xf9, 0xd5, 0xcf, 0x35, 0x60, 0x7e, 0xd1, - 0x1a, 0xa9, 0x08, 0xaf, 0xea, 0x62, 0x3d, 0xfd, 0x5d, 0x06, 0x8e, 0xbb, - 0x03, 0x44, 0x5c, 0x12, 0xbe, 0x35, 0xa2, 0xd8, 0x09, 0x51, 0xfd, 0x57, - 0x14, 0x89, 0xc4, 0x9f, 0x36, 0x89, 0xdd, 0x6e, 0x68, 0xab, 0xa1, 0x3f, - 0x77, 0x0f, 0x8e, 0xa6, 0xbd, 0x95, 0xba, 0xd4, 0x33, 0x1f, 0x78, 0x2f, - 0x48, 0x27, 0x9a, 0xe8, 0x82, 0x46, 0x37, 0x2e, 0x17, 0x59, 0xdd, 0xe7, - 0x31, 0x4f, 0x26, 0x41, 0x68, 0xaa, 0x1f, 0x55, 0x9d, 0x4e, 0x39, 0x83, - 0x03, 0x9b, 0x70, 0x0f, 0x7f, 0x67, 0x2a, 0x3f, 0xef, 0xc5, 0xdf, 0xfe, - 0x24, 0x49, 0x03, 0x86, 0x31, 0x79, 0x54, 0xfa, 0x9f, 0x73, 0xe2, 0x36, - 0x2c, 0x2b, 0xdb, 0x10, 0xaf, 0x95, 0xe0, 0x50, 0x51, 0x47, 0x6f, 0xea, - 0x3b, 0x77, 0x8b, 0x35, 0x8c, 0x4b, 0xd9, 0x98, 0x09, 0x6a, 0x4a, 0x92, - 0x75, 0x18, 0xe2, 0x94, 0x88, 0xcd, 0x31, 0xde, 0x07, 0xdb, 0xe4, 0x5f, - 0x15, 0x32, 0x7a, 0xc9, 0xac, 0xbf, 0x26, 0x45, 0x7f, 0xde, 0x54, 0x0c, - 0x95, 0xd3, 0xce, 0x7e, 0x6c, 0x09, 0x51, 0x7d, 0x1e, 0xbd, 0x40, 0xd6, - 0x05, 0x8d, 0xb4, 0xc2, 0xfc, 0xb8, 0x53, 0x54, 0xe3, 0x8c, 0x6d, 0xfa, - 0x88, 0xbf, 0x46, 0x8f, 0x2e, 0x5b, 0x78, 0x74, 0x38, 0x4c, 0xa9, 0x1e, - 0x0c, 0x8e, 0x51, 0xe5, 0x55, 0x6f, 0xa6, 0xb7, 0x99, 0xee, 0xf2, 0xa2, - 0x38, 0x62, 0xb9, 0xdd, 0xc1, 0x59, 0xe7, 0x73, 0xf9, 0x6c, 0x36, 0xe4, - 0xd0, 0x5d, 0x29, 0xa5, 0xfb, 0xec, 0x77, 0x79, 0xd0, 0x48, 0x03, 0x61, - 0x81, 0x1b, 0x9a, 0x91, 0xa9, 0x71, 0x27, 0x96, 0x67, 0x85, 0xa6, 0xdc, - 0xef, 0x1b, 0xc7, 0xe1, 0x80, 0x9d, 0x49, 0xfe, 0x2f, 0x08, 0xe4, 0x25, - 0x1d, 0x44, 0x78, 0x1e, 0xc9, 0xba, 0xfb, 0x79, 0xd9, 0x5d, 0x36, 0xd5, - 0xfa, 0x40, 0xb3, 0x6f, 0x2e, 0x91, 0x5a, 0xc5, 0x4a, 0x02, 0x30, 0x82, - 0xf0, 0x87, 0x0b, 0xfb, 0x62, 0x5c, 0x12, 0x0a, 0xd4, 0x7c, 0xe8, 0xac, - 0xae, 0xf7, 0x21, 0x33, 0xeb, 0xc0, 0x9a, 0x25, 0xeb, 0xf4, 0x6a, 0x48, - 0xc9, 0xd2, 0xd4, 0x8f, 0xa5, 0x42, 0xf8, 0x23, 0xdf, 0x89, 0xd9, 0xee, - 0x4b, 0xaf, 0xea, 0xc9, 0x3a, 0xe1, 0xc5, 0x62, 0xe4, 0x9c, 0x14, 0x9b, - 0xe7, 0xb1, 0xf6, 0x2d, 0xa0, 0x87, 0x11, 0xb7, 0xe5, 0x7a, 0x98, 0x03, - 0x17, 0xbc, 0x62, 0x45, 0xcb, 0x42, 0x6c, 0xa4, 0x06, 0xb7, 0x5c, 0x86, - 0xa6, 0xc5, 0xaf, 0x02, 0xea, 0xac, 0xfb, 0x6e, 0x0a, 0xa2, 0x3b, 0x8d, - 0x05, 0x5e, 0x89, 0x42, 0x83, 0xc3, 0x2f, 0xc7, 0x9c, 0x4e, 0x9d, 0x4c, - 0xe4, 0x4e, 0x3d, 0x59, 0x4c, 0xe2, 0xde, 0x27, 0x13, 0x0d, 0x96, 0xb2, - 0xae, 0xfc, 0xba, 0xd3, 0xf4, 0x7a, 0x2d, 0xc9, 0xde, 0x91, 0x58, 0xcf, - 0xe8, 0xed, 0x78, 0x74, 0x62, 0x16, 0x83, 0xca, 0x6d, 0xa6, 0xc8, 0x74, - 0x24, 0x92, 0xbe, 0x58, 0xa7, 0x06, 0x58, 0x2d, 0x10, 0x44, 0xcd, 0x22, - 0xe3, 0xa9, 0xf9, 0x3a, 0x12, 0x2b, 0x9d, 0x0f, 0xa1, 0xce, 0xaf, 0xd5, - 0xf3, 0x66, 0x7b, 0xcc, 0x66, 0xec, 0x82, 0x8b, 0x92, 0x4f, 0x3f, 0x8c, - 0xf3, 0x4f, 0x7d, 0x2c, 0x05, 0xf3, 0x80, 0x01, 0xe7, 0x00, 0xf2, 0xf5, - 0xbd, 0xcd, 0x3b, 0x23, 0xb5, 0x8b, 0x4c, 0x68, 0xa2, 0x81, 0xaa, 0xc7, - 0xf6, 0x11, 0xf8, 0x0b, 0x55, 0xaf, 0x69, 0xf1, 0x18, 0x78, 0x63, 0x3d, - 0xcd, 0x58, 0x3e, 0xc5, 0x7e, 0x8f, 0xf2, 0xed, 0x5f, 0xf3, 0xe2, 0x9c, - 0x94, 0xb6, 0x64, 0x9c, 0x0c, 0x8d, 0xc7, 0xfa, 0xc9, 0x1f, 0x64, 0xdf, - 0x12, 0x2c, 0x60, 0xa6, 0x4d, 0x94, 0xa9, 0x01, 0x48, 0x40, 0xb4, 0xb9, - 0x43, 0x65, 0xcf, 0x6d, 0x25, 0x1f, 0xf0, 0xa1, 0x05, 0xc8, 0x58, 0x1d, - 0x93, 0xac, 0x16, 0x2e, 0x83, 0x04, 0x39, 0xd5, 0xd2, 0xb6, 0xdf, 0xa7, - 0x2b, 0x5b, 0x16, 0x2c, 0xed, 0x1c, 0x7b, 0x6d, 0x9f, 0x6b, 0xc7, 0xbf, - 0xf4, 0x00, 0xa1, 0x1b, 0x5d, 0x81, 0xbf, 0x27, 0xdc, 0xa5, 0x23, 0x76, - 0xbc, 0xe9, 0xd3, 0xf6, 0x7b, 0x9f, 0xb4, 0x6f, 0x5f, 0x39, 0x08, 0xec, - 0xfd, 0xf4, 0x7a, 0x63, 0x66, 0x79, 0x0f, 0x0d, 0xa2, 0x46, 0x7f, 0x94, - 0x58, 0x0d, 0xf3, 0x59, 0x95, 0x00, 0x9a, 0x01, 0xf9, 0x3f, 0x44, 0x64, - 0x04, 0xf0, 0xb1, 0xfe, 0x6f, 0x00, 0xa7, 0x26, 0x9a, 0x6b, 0x79, 0x01, - 0x82, 0x25, 0x1f, 0xc2, 0x21, 0x52, 0x13, 0x0f, 0x07, 0x15, 0xe9, 0x8c, - 0x79, 0xeb, 0xb0, 0x44, 0x68, 0x5c, 0x18, 0x3f, 0x47, 0xeb, 0x7e, 0x37, - 0xe2, 0x1b, 0x4e, 0xef, 0x75, 0x60, 0xfb, 0xa3, 0x6a, 0x50, 0xa6, 0xcf, - 0x2e, 0x44, 0x27, 0x45, 0x8c, 0xfe, 0x3a, 0xc6, 0x9f, 0xc4, 0x57, 0x80, - 0x31, 0xbb, 0x64, 0x08, 0x66, 0xc7, 0x35, 0xe5, 0xd2, 0x86, 0xd7, 0x4e, - 0xd8, 0x34, 0xd6, 0x2f, 0x1d, 0x1f, 0xe8, 0x1b, 0x79, 0xc0, 0xa0, 0x3c, - 0xb6, 0x5f, 0x9f, 0xd1, 0x42, 0xd2, 0x20, 0x36, 0xe1, 0x50, 0x10, 0x18, - 0xc1, 0xe9, 0xb0, 0xcc, 0x71, 0x14, 0x8a, 0x8e, 0x40, 0x37, 0xa5, 0x0b, - 0x6d, 0x6c, 0xfc, 0x98, 0x3c, 0xf6, 0x8f, 0x0f, 0xe8, 0x18, 0x3f, 0xaa, - 0x5b, 0xe6, 0x83, 0x84, 0xe0, 0x68, 0xa7, 0x4b, 0xb1, 0xbc, 0x3e, 0xa5, - 0xd5, 0x14, 0x6a, 0xdf, 0x63, 0x78, 0x15, 0x52, 0x5c, 0x1c, 0x74, 0xd4, - 0x90, 0xdd, 0x36, 0xe1, 0x4e, 0xa0, 0x42, 0x4b, 0x67, 0x67, 0x5d, 0xf4, - 0xb0, 0xb0, 0x4f, 0x9e, 0xf0, 0x6c, 0x68, 0xf8, 0x5a, 0x4a, 0xb1, 0xec, - 0x5c, 0x7b, 0x19, 0x8b, 0xbd, 0x39, 0x42, 0x74, 0x4f, 0xf5, 0x17, 0xfd, - 0xa4, 0xaa, 0xaf, 0xf8, 0x01, 0xdc, 0x40, 0xd2, 0x0f, 0x83, 0x0d, 0xe6, - 0x1e, 0xb8, 0xfd, 0xb7, 0x2c, 0xc9, 0x3a, 0x96, 0xe7, 0xee, 0xc5, 0x8e, - 0x8c, 0x89, 0x18, 0xb7, 0x32, 0x2a, 0x96, 0x9b, 0xc4, 0xc4, 0x93, 0xa1, - 0xbc, 0x2e, 0x17, 0x3f, 0x7f, 0xa3, 0xaf, 0x0e, 0xb5, 0x7f, 0xbc, 0x32, - 0x62, 0x50, 0x86, 0x02, 0x77, 0x25, 0x3f, 0x41, 0x82, 0x02, 0x07, 0xc9, - 0x43, 0xb2, 0xf4, 0x32, 0x65, 0xaa, 0x35, 0x36, 0x34, 0x90, 0xda, 0x1e, - 0x34, 0x16, 0x4f, 0xd0, 0x3e, 0x96, 0x76, 0x11, 0xd5, 0x64, 0xaf, 0x5a, - 0xaf, 0xbc, 0xa4, 0x2a, 0xd4, 0xf3, 0xba, 0x9d, 0x8b, 0x7d, 0x7e, 0xe5, - 0x2f, 0x59, 0xc5, 0x5a, 0x9a, 0x70, 0x00, 0xf5, 0xea, 0xec, 0x28, 0x55, - 0xd4, 0x4c, 0x25, 0x05, 0xa9, 0x65, 0x0e, 0x7e, 0x12, 0xc4, 0xb7, 0xa9, - 0xec, 0xf6, 0x7d, 0x92, 0x4e, 0x43, 0x67, 0x24, 0x8f, 0xe4, 0x1d, 0x5d, - 0x12, 0x6b, 0x76, 0xa4, 0x42, 0xba, 0x44, 0xfe, 0xa4, 0x8a, 0xf9, 0xf3, - 0x9c, 0xdc, 0x4b, 0x0c, 0x00, 0x41, 0x21, 0x19, 0xde, 0x7c, 0x56, 0xf1, - 0x6a, 0xa0, 0xed, 0xfe, 0xfb, 0x8e, 0x3f, 0x06, 0x85, 0x3f, 0x3e, 0x88, - 0xf0, 0x67, 0x6b, 0x17, 0xc7, 0xe1, 0x5f, 0x86, 0x03, 0x6e, 0x49, 0x46, - 0xbd, 0xec, 0xce, 0x0c, 0x1b, 0x05, 0x5c, 0x03, 0x85, 0xfd, 0xb5, 0xa1, - 0x1b, 0xfe, 0x19, 0x7b, 0xc3, 0x1f, 0xf3, 0xf0, 0xaf, 0xf8, 0xa8, 0xb2, - 0x15, 0x39, 0xdf, 0x89, 0x4a, 0x79, 0x00, 0x87, 0xa8, 0x6f, 0x2f, 0x05, - 0xd7, 0xa6, 0xd4, 0x4a, 0x9a, 0xf8, 0x28, 0x56, 0x36, 0x55, 0xd2, 0x41, - 0x54, 0xd9, 0x88, 0xf7, 0xe7, 0xdf, 0x7c, 0x4d, 0x37, 0xdc, 0x28, 0xe2, - 0x5a, 0x4a, 0x61, 0x5f, 0x66, 0x14, 0x53, 0x30, 0x5e, 0x90, 0x2d, 0xcc, - 0xa0, 0xe8, 0x63, 0xb6, 0x2b, 0x89, 0x97, 0x35, 0x93, 0xc2, 0xcd, 0xd9, - 0x0c, 0x7b, 0x95, 0x7f, 0x37, 0x45, 0x4f, 0x3b, 0x60, 0x48, 0x6f, 0x82, - 0x2d, 0x77, 0xeb, 0xfe, 0x7a, 0x2d, 0xc4, 0x42, 0x90, 0xc0, 0x62, 0x51, - 0x99, 0x5a, 0x7d, 0xff, 0x76, 0xbd, 0x60, 0x92, 0xb7, 0x59, 0xf8, 0xea, - 0x0c, 0x76, 0xf6, 0x67, 0x3c, 0x27, 0x39, 0x99, 0x8d, 0xf2, 0x4a, 0x30, - 0x39, 0x47, 0x04, 0x8b, 0x17, 0xe0, 0xfa, 0xfb, 0x20, 0xda, 0x9f, 0x36, - 0x61, 0x8c, 0xd7, 0x59, 0x08, 0xc4, 0x2f, 0xdb, 0x05, 0x1b, 0x25, 0x0c, - 0x6e, 0xaf, 0x78, 0x09, 0x7a, 0x64, 0x04, 0x98, 0x3e, 0x91, 0xa5, 0xcc, - 0x20, 0xcf, 0x47, 0xe1, 0x26, 0x8f, 0x9f, 0x10, 0x54, 0xc6, 0x71, 0x59, - 0x56, 0x5a, 0x07, 0xe0, 0xb2, 0x0a, 0x5e, 0xa0, 0x88, 0x34, 0x08, 0x31, - 0x0d, 0x37, 0x89, 0x70, 0x44, 0x92, 0x9f, 0xf3, 0x06, 0x1a, 0x15, 0x65, - 0x1c, 0xe2, 0x2d, 0xd3, 0xd9, 0x90, 0x3a, 0x28, 0x5d, 0x1d, 0x1f, 0x16, - 0x79, 0x91, 0xe1, 0xed, 0x97, 0x2b, 0x7c, 0x0d, 0xf8, 0xea, 0x1a, 0xf5, - 0x8d, 0xab, 0x4f, 0xdd, 0x09, 0x94, 0xea, 0xea, 0x8c, 0xa5, 0xa2, 0x77, - 0xd5, 0x15, 0xa7, 0x00, 0x68, 0xbc, 0x7d, 0x07, 0xdd, 0x17, 0x7e, 0x03, - 0xf9, 0x29, 0x5b, 0xaa, 0xa5, 0x5b, 0x91, 0x7f, 0xec, 0x3e, 0x75, 0xe7, - 0x4f, 0xd3, 0xdf, 0xa4, 0x69, 0x9f, 0xd0, 0x6d, 0x84, 0xdd, 0x32, 0x70, - 0x7c, 0xc4, 0x05, 0xa3, 0x74, 0xcd, 0x27, 0x3e, 0x6d, 0x07, 0x3a, 0x9f, - 0x96, 0xb4, 0x8a, 0xf9, 0xf1, 0x37, 0x30, 0x8d, 0x85, 0x0f, 0x35, 0x3b, - 0xc3, 0x22, 0xb4, 0xb9, 0x9f, 0x0a, 0x50, 0xa7, 0x2a, 0x27, 0xdc, 0xd8, - 0x67, 0xab, 0xa0, 0x16, 0xb2, 0xf2, 0xa6, 0x97, 0x49, 0xd9, 0x02, 0xd9, - 0x99, 0xae, 0x4c, 0x2e, 0x19, 0x59, 0xf2, 0x4c, 0x68, 0xc1, 0xf5, 0xc5, - 0x07, 0xa2, 0x09, 0xbb, 0xd4, 0x11, 0xa6, 0xbf, 0x90, 0xb0, 0xa0, 0xbd, - 0x41, 0x0e, 0x92, 0x97, 0x7b, 0x33, 0xfe, 0x9d, 0x1d, 0x14, 0x9f, 0xbe, - 0xfc, 0xb1, 0xf5, 0x3e, 0x95, 0x09, 0xda, 0x62, 0x76, 0x9a, 0x1c, 0x4b, - 0x55, 0x6f, 0xc5, 0x31, 0xb5, 0xb4, 0xcc, 0x85, 0x36, 0x62, 0x5f, 0xa7, - 0x4e, 0x57, 0x99, 0xd7, 0xb9, 0x2d, 0x3c, 0xc9, 0xbe, 0xd2, 0x6a, 0xd9, - 0xdb, 0xeb, 0xb4, 0x3c, 0xc0, 0xea, 0xee, 0x97, 0x43, 0xa4, 0x4e, 0xd8, - 0xce, 0xe3, 0xc0, 0xc3, 0xe2, 0x58, 0x1c, 0xc6, 0x7a, 0xde, 0xfc, 0x87, - 0xca, 0xc7, 0x13, 0x51, 0xce, 0x6b, 0x15, 0xcf, 0x1c, 0x6d, 0x3e, 0x36, - 0xb0, 0x0f, 0x0d, 0xdc, 0x4f, 0x51, 0xc6, 0x65, 0xbb, 0x28, 0x8e, 0xea, - 0x62, 0x8c, 0xf9, 0x79, 0x5e, 0x51, 0xd4, 0x6c, 0x77, 0xb2, 0x25, 0x9b, - 0xb8, 0xcc, 0xc3, 0x23, 0x04, 0x36, 0x81, 0xfd, 0xef, 0x80, 0xe4, 0x7e, - 0x92, 0xe6, 0xee, 0x1b, 0x3c, 0xcd, 0xf3, 0x68, 0xec, 0xca, 0x1e, 0x6d, - 0xb3, 0xd1, 0x40, 0x5a, 0xc8, 0xb6, 0x81, 0x60, 0x6a, 0x32, 0xa9, 0x11, - 0x93, 0xf7, 0xff, 0xa0, 0xab, 0x72, 0x26, 0x27, 0x11, 0xbf, 0x2c, 0xb4, - 0x88, 0x1c, 0x2b, 0x40, 0x4e, 0x9d, 0x88, 0x9b, 0x3b, 0x04, 0xdb, 0x3d, - 0x13, 0x9f, 0xbf, 0x10, 0x81, 0xa1, 0xe2, 0x0f, 0x1c, 0x22, 0xce, 0x64, - 0x2e, 0x53, 0xe0, 0xc7, 0x76, 0xd5, 0xf5, 0x52, 0x01, 0x78, 0x46, 0x94, - 0x50, 0x54, 0xc9, 0x68, 0xe6, 0x78, 0xa1, 0xd8, 0xff, 0xe6, 0xa0, 0x50, - 0xb6, 0x26, 0xce, 0x28, 0xb7, 0x02, 0xa5, 0x6d, 0x39, 0xd8, 0xac, 0xb7, - 0x1f, 0x55, 0xb6, 0xa4, 0x91, 0xdd, 0x67, 0x1e, 0x31, 0xd7, 0x2d, 0xcc, - 0xe3, 0x8f, 0x31, 0x9b, 0x39, 0xdc, 0x8e, 0xf3, 0xc7, 0xd4, 0x58, 0x42, - 0x93, 0x92, 0xd8, 0x3a, 0xce, 0x7b, 0xdc, 0x2c, 0xfb, 0x37, 0xf8, 0xff, - 0x7f, 0xc0, 0xa8, 0x6a, 0xc2, 0xc5, 0xd3, 0x7a, 0x76, 0x46, 0xd1, 0xa7, - 0x82, 0x0a, 0x27, 0xb0, 0xf7, 0xaf, 0xa5, 0x6b, 0xbe, 0xfa, 0x58, 0xd9, - 0x16, 0x1c, 0x8b, 0x3e, 0x7b, 0x7e, 0x9b, 0x61, 0x1c, 0x9f, 0x5d, 0xd1, - 0xd2, 0x44, 0x5f, 0x7b, 0x35, 0x42, 0x6b, 0xa5, 0x06, 0x26, 0x99, 0x83, - 0x58, 0xe6, 0x05, 0xd5, 0x28, 0x07, 0x5b, 0xad, 0xa0, 0xcf, 0xb3, 0xb0, - 0xa9, 0x75, 0x40, 0x3e, 0xe1, 0x39, 0xd1, 0x25, 0x21, 0x22, 0x8f, 0x5f, - 0x0e, 0x7a, 0xf0, 0xb5, 0x42, 0xeb, 0xf3, 0x4b, 0x3b, 0x89, 0xf8, 0x9e, - 0x5f, 0x60, 0x0f, 0xfd, 0xe3, 0x16, 0xc6, 0x45, 0x19, 0x72, 0xa1, 0x06, - 0xb0, 0xfc, 0x20, 0xa9, 0x59, 0xfd, 0x7b, 0x95, 0xd8, 0xfb, 0x0c, 0x3d, - 0xdc, 0xb7, 0xec, 0xbc, 0xf6, 0x95, 0x5f, 0x52, 0xb0, 0xcb, 0xe5, 0xe2, - 0x35, 0xb5, 0x5a, 0x5f, 0x6d, 0x92, 0x20, 0x6a, 0x2a, 0x18, 0x70, 0x9c, - 0xf0, 0xdf, 0x64, 0xb4, 0x83, 0x39, 0xe1, 0xcf, 0x22, 0xa2, 0x88, 0x9e, - 0x64, 0xc3, 0x6a, 0x32, 0xbc, 0x0b, 0x7b, 0xbc, 0xb8, 0x0b, 0xe0, 0xce, - 0x0e, 0x2a, 0xdc, 0xac, 0xff, 0x88, 0x24, 0x1d, 0x5b, 0xff, 0xb6, 0xc0, - 0xec, 0x0e, 0x40, 0x38, 0xf7, 0x01, 0x59, 0x66, 0x42, 0xba, 0xb0, 0xec, - 0xe2, 0x35, 0x61, 0xf0, 0x1e, 0x11, 0x24, 0x29, 0x59, 0x48, 0x1f, 0x69, - 0x0d, 0x50, 0x92, 0x8b, 0x68, 0x21, 0x19, 0x5e, 0xf7, 0xa6, 0x3e, 0x96, - 0x71, 0x26, 0xe8, 0x8c, 0x8e, 0x59, 0x48, 0x45, 0x66, 0xea, 0x8e, 0x7a, - 0x1b, 0xee, 0x55, 0x5a, 0x03, 0x8f, 0x14, 0x5c, 0x68, 0x15, 0x9b, 0x89, - 0xde, 0xb5, 0x38, 0xac, 0xbb, 0x86, 0x48, 0x32, 0x36, 0x20, 0x5a, 0x2b, - 0x2d, 0x4d, 0xbf, 0xa6, 0x4e, 0xf7, 0x35, 0x38, 0x21, 0x11, 0x8a, 0x5b, - 0x09, 0x14, 0x8e, 0xcc, 0x28, 0x00, 0x24, 0xcd, 0xb3, 0xb7, 0xec, 0x54, - 0x61, 0x85, 0x21, 0x94, 0xf7, 0xfd, 0x45, 0xa3, 0xde, 0x4b, 0x99, 0xc0, - 0x9a, 0x87, 0x79, 0x04, 0xc8, 0xd4, 0xd2, 0xf5, 0xf5, 0xeb, 0x00, 0x1b, - 0xa8, 0x25, 0xaf, 0x06, 0x49, 0xb0, 0x6e, 0xe5, 0xca, 0x51, 0x27, 0x55, - 0xd4, 0xa8, 0x74, 0x33, 0xa0, 0x4e, 0x89, 0xa4, 0xfd, 0x54, 0xf8, 0xa9, - 0x66, 0x95, 0x55, 0x5d, 0xec, 0x26, 0x17, 0xff, 0x7e, 0x1f, 0xb5, 0x3f, - 0xf8, 0xd0, 0x0b, 0x22, 0x05, 0x52, 0x02, 0x27, 0x79, 0x77, 0x75, 0xad, - 0xa1, 0xf7, 0x0f, 0x99, 0xcf, 0x70, 0xea, 0xc7, 0xcf, 0x0d, 0xd3, 0xd0, - 0x66, 0x01, 0x1c, 0xb7, 0xcc, 0x67, 0x3a, 0x9d, 0xd6, 0x3f, 0xa1, 0xb9, - 0xf4, 0xa9, 0x61, 0x1a, 0xe9, 0xeb, 0x42, 0xd2, 0xdb, 0x62, 0xd2, 0x9d, - 0xb7, 0xae, 0x06, 0x16, 0x1e, 0xd0, 0xdf, 0xe9, 0x17, 0xeb, 0xa9, 0xb0, - 0xdb, 0xe8, 0xf3, 0xd2, 0xa2, 0x64, 0x71, 0xe8, 0x7b, 0x7d, 0xd4, 0x3f, - 0x5e, 0x73, 0xb7, 0x6c, 0x86, 0x30, 0xdf, 0x30, 0x5b, 0x0f, 0x70, 0xb0, - 0xe0, 0xee, 0x29, 0x83, 0x15, 0x4e, 0x04, 0xac, 0xcb, 0x34, 0xe7, 0x21, - 0xeb, 0xcd, 0xa2, 0x08, 0xb6, 0x36, 0x87, 0x92, 0xa9, 0xb5, 0xc0, 0xb9, - 0xe6, 0x4a, 0x9f, 0xf0, 0xf2, 0xe1, 0x36, 0xe9, 0x22, 0x27, 0x46, 0xd8, - 0xf3, 0x81, 0xf4, 0xee, 0x08, 0x88, 0xc5, 0x5f, 0x17, 0xae, 0x8e, 0xac, - 0x12, 0x23, 0xa9, 0x92, 0x9c, 0xc1, 0x7e, 0xfa, 0x9f, 0x73, 0x60, 0x89, - 0xc7, 0xe5, 0x4d, 0x4c, 0xd3, 0xa9, 0x44, 0x48, 0xea, 0xcc, 0xc7, 0xaf, - 0xe2, 0x6a, 0x94, 0x6a, 0x78, 0x9e, 0x36, 0x49, 0x13, 0x0d, 0xb1, 0x53, - 0xee, 0x2a, 0xb5, 0xd3, 0x46, 0x71, 0xd8, 0xee, 0xdf, 0xac, 0x54, 0xe1, - 0x50, 0xca, 0xfd, 0xd2, 0xf1, 0x1c, 0xc6, 0x13, 0x96, 0x59, 0xf8, 0x36, - 0x05, 0x98, 0x6c, 0xe7, 0x3b, 0x11, 0x1d, 0xb0, 0x2c, 0xa8, 0xce, 0x3f, - 0xa5, 0xd4, 0xd6, 0xe5, 0xb3, 0x9a, 0xb7, 0x47, 0xd1, 0xab, 0x01, 0xc6, - 0xcd, 0x00, 0x95, 0x3e, 0xd2, 0x5d, 0x61, 0x63, 0xea, 0xe8, 0xec, 0x81, - 0x51, 0xc1, 0xe8, 0xc1, 0x0a, 0x13, 0x53, 0x7c, 0x1d, 0x86, 0x38, 0xd9, - 0xca, 0xb9, 0x0e, 0xbc, 0xf9, 0xcc, 0xac, 0x00, 0xe6, 0x10, 0x51, 0x54, - 0x69, 0x44, 0x80, 0x44, 0xd1, 0x2c, 0x3a, 0x6d, 0xaa, 0xee, 0x86, 0x71, - 0x12, 0xa3, 0x5c, 0x3b, 0x19, 0x71, 0x01, 0xdf, 0x62, 0x7d, 0x13, 0xdd, - 0x10, 0x72, 0x97, 0x8b, 0xc1, 0x3b, 0x4a, 0x1a, 0x3a, 0xdb, 0x6b, 0x0d, - 0x9b, 0x90, 0x70, 0x61, 0xa4, 0x5d, 0xac, 0x96, 0xdc, 0xb8, 0x00, 0x78, - 0x0f, 0x10, 0x40, 0xbd, 0xa8, 0xc3, 0x0d, 0x75, 0x5c, 0xcd, 0x42, 0x5f, - 0x09, 0xcf, 0x3e, 0x77, 0xcf, 0x72, 0x64, 0x18, 0x5a, 0x77, 0xe4, 0x35, - 0x76, 0x30, 0xd4, 0x90, 0xf6, 0x3b, 0xbc, 0x7e, 0x0c, 0x35, 0xfc, 0x82, - 0x9e, 0x1f, 0x3d, 0xdf, 0x9c, 0x8a, 0x91, 0xdf, 0xd8, 0xc2, 0x4b, 0xd4, - 0x3b, 0x31, 0xe6, 0xac, 0x36, 0x12, 0xa3, 0xa7, 0x13, 0x51, 0x44, 0x96, - 0x4f, 0xd3, 0x17, 0x5a, 0x8d, 0xcb, 0x21, 0x0e, 0xab, 0xa7, 0xb8, 0xca, - 0x07, 0xe7, 0x05, 0x4a, 0x99, 0x53, 0xcc, 0x46, 0x6c, 0x9f, 0x6a, 0xc1, - 0xe4, 0x6e, 0x90, 0x02, 0xbf, 0x83, 0x1c, 0xfd, 0xfc, 0x2d, 0xa4, 0xc1, - 0x6b, 0x7d, 0x0b, 0x20, 0xc2, 0xe3, 0x6b, 0xfe, 0x86, 0x60, 0xe7, 0x78, - 0x59, 0x60, 0x5e, 0x90, 0x4f, 0x91, 0xa1, 0xf2, 0x90, 0x9b, 0x5a, 0x2b, - 0x81, 0x7f, 0x0a, 0x94, 0x3c, 0xaf, 0x0e, 0x23, 0x12, 0x76, 0xcd, 0x62, - 0x47, 0xd3, 0xd2, 0x99, 0x52, 0x53, 0xc2, 0xd3, 0x60, 0xc1, 0x71, 0x15, - 0xb1, 0x2f, 0xdf, 0x6e, 0x0f, 0x6e, 0x4c, 0x31, 0x29, 0x78, 0x2c, 0xea, - 0xfb, 0xa7, 0x5f, 0x31, 0x68, 0xd4, 0x3d, 0x38, 0x87, 0xe0, 0x75, 0xd9, - 0xa8, 0x95, 0xde, 0xb2, 0x42, 0xfa, 0x20, 0x17, 0xc9, 0x7e, 0xba, 0x2a, - 0xd6, 0x34, 0x83, 0xeb, 0xd5, 0xa7, 0x78, 0xa1, 0x6d, 0xd4, 0x21, 0x29, - 0xa3, 0x71, 0xfe, 0xa7, 0x75, 0x48, 0xcd, 0xd3, 0xd5, 0x89, 0xb4, 0xab, - 0x23, 0xb2, 0x01, 0x37, 0xf8, 0xe2, 0xe2, 0xc5, 0xae, 0x90, 0x66, 0xa9, - 0xc5, 0xad, 0xf5, 0x34, 0xdf, 0x79, 0x05, 0x87, 0x74, 0xb7, 0x1c, 0x77, - 0x8d, 0xa7, 0x11, 0x59, 0x71, 0x8b, 0x2a, 0x50, 0xa7, 0xc9, 0xe4, 0xf1, - 0x6d, 0x98, 0xe2, 0x4f, 0x45, 0xa8, 0xea, 0xe7, 0x5b, 0x9f, 0xd0, 0xf4, - 0x45, 0x4c, 0xf8, 0x8c, 0x1e, 0x58, 0x13, 0x7b, 0xc8, 0xe2, 0xfe, 0xae, - 0x13, 0x87, 0x33, 0xff, 0x08, 0xe0, 0xcf, 0xb8, 0x8a, 0x51, 0xff, 0xbb, - 0x9e, 0xbb, 0x38, 0x45, 0x09, 0xf1, 0x88, 0x8c, 0x02, 0xd3, 0x17, 0x99, - 0x52, 0x37, 0xfe, 0x27, 0x81, 0xc6, 0x47, 0x74, 0x40, 0xf4, 0x87, 0x1f, - 0xd5, 0x73, 0x00, 0x91, 0x9e, 0x23, 0xda, 0xec, 0x9a, 0xe1, 0x3d, 0x7b, - 0xd6, 0x0b, 0x28, 0xde, 0x8d, 0xe3, 0x2f, 0xb8, 0xfd, 0x9a, 0xba, 0x0e, - 0xc7, 0xe9, 0x0d, 0x5d, 0x2b, 0x19, 0x77, 0xe8, 0xd5, 0x07, 0xa0, 0x1a, - 0x91, 0xb7, 0xb0, 0x6f, 0xfa, 0x96, 0x3a, 0x3b, 0xab, 0x1f, 0xfc, 0x25, - 0xa8, 0x85, 0x41, 0x81, 0x42, 0x5a, 0x8f, 0x5b, 0xe9, 0x69, 0xd5, 0xe9, - 0x12, 0xdc, 0xa0, 0xf5, 0xaf, 0xeb, 0x0f, 0x1c, 0x40, 0x9d, 0x16, 0x83, - 0xb8, 0xec, 0x2b, 0xcf, 0x5e, 0x8d, 0x06, 0x14, 0xa1, 0xd7, 0xac, 0xfb, - 0x35, 0x52, 0xfc, 0xeb, 0xea, 0x99, 0xd5, 0xa7, 0xda, 0x7c, 0x07, 0x32, - 0x02, 0xd9, 0x66, 0x07, 0x0d, 0x08, 0x28, 0x23, 0x12, 0x8f, 0xea, 0x1f, - 0x49, 0xce, 0x5f, 0x4c, 0x05, 0xfa, 0x89, 0x0b, 0x56, 0x04, 0x26, 0x54, - 0x51, 0xdb, 0x77, 0x34, 0x30, 0xd9, 0x82, 0x56, 0xf3, 0xf8, 0x74, 0x5c, - 0x7a, 0x95, 0x7f, 0xe5, 0xad, 0xff, 0xc9, 0x1d, 0x8e, 0x44, 0x02, 0x18, - 0x96, 0x72, 0x34, 0x81, 0xe4, 0x21, 0x44, 0x8a, 0x3d, 0x4d, 0x88, 0xa2, - 0x29, 0x42, 0x85, 0xa5, 0x92, 0x6b, 0x6c, 0x35, 0x15, 0xed, 0x0f, 0xc4, - 0x6d, 0x73, 0x5e, 0x03, 0x66, 0xb8, 0x55, 0xff, 0x63, 0x26, 0xa9, 0x1a, - 0x55, 0xe4, 0x97, 0x2d, 0xfd, 0xff, 0x2d, 0x72, 0xf2, 0x17, 0xe8, 0xee, - 0x24, 0x70, 0x4b, 0x9b, 0xfc, 0xa5, 0x4e, 0x93, 0xf5, 0x55, 0x4a, 0x28, - 0x07, 0xda, 0xc8, 0x0f, 0x27, 0x60, 0x76, 0x8f, 0x77, 0x7e, 0xb3, 0x00, - 0xb5, 0x58, 0x6c, 0x39, 0xe7, 0xad, 0x0c, 0xa2, 0xc9, 0x1a, 0x7a, 0x9d, - 0x48, 0xe3, 0x69, 0x39, 0xc4, 0xb1, 0x5c, 0x94, 0x09, 0x4e, 0xb7, 0x1a, - 0x09, 0x3c, 0x92, 0x1e, 0xa1, 0xc2, 0x5a, 0x95, 0xf2, 0x47, 0x6e, 0x70, - 0x2f, 0x01, 0x77, 0x73, 0x6b, 0x6b, 0xae, 0xf1, 0x37, 0x7e, 0x66, 0x55, - 0x1b, 0x5e, 0x42, 0x0c, 0xcc, 0xc0, 0x65, 0xb6, 0x1c, 0x6a, 0xe9, 0x8e, - 0xe0, 0x2f, 0x44, 0x9c, 0x68, 0x32, 0xd3, 0x95, 0x85, 0xc8, 0xf7, 0x3f, - 0xca, 0x49, 0x9f, 0x68, 0x05, 0xd9, 0x91, 0x24, 0xc0, 0x48, 0x64, 0x77, - 0x8e, 0x69, 0x6a, 0x00, 0x7c, 0xa3, 0xf5, 0x9f, 0xd0, 0xb3, 0xc3, 0x8e, - 0xc7, 0x32, 0x1a, 0x65, 0x72, 0x33, 0x68, 0xb2, 0x78, 0x2d, 0x7c, 0xe1, - 0x27, 0x57, 0x41, 0x7a, 0x08, 0x33, 0xff, 0xfc, 0xff, 0xff, 0x4f, 0x37, - 0x7b, 0x11, 0xaf, 0x91, 0x87, 0xfa, 0x10, 0x45, 0x62, 0xd4, 0xbf, 0xd7, - 0x33, 0x5f, 0x79, 0x44, 0xfb, 0xbc, 0xa7, 0xde, 0xee, 0xbb, 0xeb, 0x4f, - 0x70, 0x5c, 0x3a, 0x01, 0xe1, 0x0e, 0x2f, 0xad, 0x86, 0x65, 0x2b, 0xcc, - 0x6c, 0x5b, 0x31, 0x1b, 0x0b, 0x78, 0x90, 0x4a, 0x20, 0x1c, 0xe1, 0x21, - 0x05, 0x98, 0xb4, 0x1e, 0x10, 0x2c, 0x46, 0x2f, 0x1e, 0xed, 0x78, 0x59, - 0x9e, 0xec, 0x90, 0x3e, 0xd0, 0xde, 0x05, 0xda, 0x5c, 0x38, 0xb4, 0x1c, - 0x72, 0x84, 0x40, 0x3e, 0x90, 0xb6, 0x4d, 0x52, 0x01, 0x47, 0x11, 0xf5, - 0x2a, 0xec, 0x95, 0x77, 0xf2, 0x54, 0x1f, 0x95, 0x3a, 0xef, 0x23, 0xa2, - 0x0d, 0xd4, 0x35, 0xbe, 0x65, 0xa8, 0xe6, 0xac, 0x94, 0x6f, 0x90, 0xf6, - 0xb7, 0xa3, 0x6d, 0x0e, 0x17, 0x92, 0x78, 0x4f, 0x1a, 0x3b, 0x81, 0x59, - 0xb5, 0x36, 0xaf, 0xcd, 0xa0, 0xf1, 0x32, 0xc3, 0x13, 0x74, 0x5d, 0xeb, - 0xb0, 0xcf, 0x00, 0x2f, 0xa6, 0x84, 0xef, 0x4e, 0x0f, 0xcb, 0x74, 0xda, - 0x32, 0x99, 0x32, 0x92, 0x54, 0x48, 0xb3, 0x95, 0x56, 0xc2, 0x76, 0x3f, - 0x00, 0x9d, 0x7b, 0xc6, 0x3a, 0xd9, 0xf7, 0x5c, 0xbf, 0x92, 0x14, 0xa4, - 0x44, 0x74, 0xe0, 0x49, 0x56, 0x75, 0xc9, 0x2d, 0x4d, 0x63, 0x3c, 0xab, - 0x96, 0xa7, 0x61, 0xdc, 0x0f, 0x7b, 0x07, 0x36, 0xe7, 0xfc, 0x0a, 0xfb, - 0x61, 0x4a, 0xae, 0x7c, 0x68, 0x3c, 0xa0, 0x86, 0xab, 0xe8, 0x38, 0x8b, - 0x6f, 0xfd, 0xf0, 0x1c, 0x7b, 0x17, 0x88, 0x68, 0x64, 0xf7, 0xae, 0x11, - 0x12, 0xb0, 0x6e, 0x65, 0x7d, 0x9f, 0x3f, 0xcd, 0x4e, 0x2b, 0x9b, 0x03, - 0x7a, 0xf9, 0x53, 0x8f, 0xff, 0x77, 0x37, 0xdb, 0xeb, 0x80, 0x56, 0xbe, - 0xce, 0xb3, 0xc4, 0x2f, 0x2e, 0x22, 0x0a, 0x7e, 0xbc, 0xf5, 0xb5, 0xe6, - 0x29, 0xe7, 0xec, 0x01, 0x83, 0x76, 0x8a, 0x73, 0x5f, 0xab, 0x90, 0xba, - 0x68, 0xc3, 0x83, 0x24, 0x96, 0x3f, 0x30, 0x38, 0x54, 0xae, 0x87, 0xdd, - 0xe7, 0xaf, 0xa6, 0xa0, 0x7e, 0xcd, 0x2e, 0x72, 0x05, 0x86, 0x13, 0x9f, - 0xf0, 0x87, 0x21, 0x60, 0xd9, 0x56, 0x23, 0x32, 0xa3, 0xce, 0x02, 0xd6, - 0xad, 0xc2, 0xbc, 0x0e, 0x28, 0xd5, 0x1e, 0x74, 0xe9, 0xc2, 0xe1, 0x67, - 0x3b, 0xf0, 0xf6, 0x99, 0xc5, 0x33, 0x81, 0xca, 0xcb, 0x36, 0xf5, 0x32, - 0xa8, 0x7a, 0xe8, 0xc3, 0x4b, 0x41, 0x1b, 0x48, 0x33, 0x1e, 0xd0, 0xc4, - 0x41, 0x58, 0x73, 0x43, 0x03, 0xef, 0x2e, 0xeb, 0x58, 0x07, 0x9f, 0xe2, - 0x4f, 0x31, 0xcb, 0x02, 0x69, 0x7d, 0x3e, 0xef, 0x80, 0x5c, 0x97, 0x26, - 0xf3, 0x93, 0x97, 0x2a, 0x20, 0x81, 0x84, 0x67, 0x92, 0x29, 0x71, 0xff, - 0xcb, 0x79, 0x96, 0x34, 0x11, 0xf5, 0xcb, 0x56, 0x0e, 0x13, 0xae, 0x26, - 0xc5, 0x40, 0x70, 0xc0, 0xa5, 0x74, 0x8f, 0x5c, 0x16, 0x43, 0xc6, 0x36, - 0x81, 0x8d, 0x95, 0xb9, 0xc9, 0x52, 0x2c, 0x19, 0x02, 0xfc, 0x4d, 0x24, - 0x05, 0xef, 0xd4, 0xfe, 0x9a, 0xd5, 0xbf, 0x5b, 0x68, 0x6c, 0x0a, 0x52, - 0x41, 0xa5, 0xb9, 0x0d, 0x88, 0xd4, 0xa7, 0x84, 0xe9, 0x8b, 0x75, 0xbd, - 0x85, 0x36, 0x2b, 0x2b, 0x37, 0xd4, 0x6b, 0x46, 0xaa, 0xd8, 0xcb, 0x8e, - 0x30, 0xa6, 0x21, 0x0d, 0x42, 0x7e, 0xb1, 0x7f, 0x33, 0x89, 0x88, 0xcb, - 0xe2, 0x89, 0x35, 0xf4, 0x82, 0xc5, 0xe0, 0x58, 0x6d, 0x01, 0x93, 0x82, - 0xc6, 0x15, 0xda, 0xa3, 0x5b, 0xae, 0xdd, 0x03, 0xd9, 0xad, 0xb6, 0x81, - 0xa2, 0x7a, 0x3b, 0xa2, 0xc5, 0xbb, 0xbf, 0xa6, 0x61, 0x24, 0xc7, 0xf5, - 0x8b, 0xdf, 0xcc, 0xa8, 0xfd, 0x35, 0xfa, 0xae, 0x28, 0x99, 0x55, 0x52, - 0xf4, 0x40, 0x9b, 0x71, 0xd8, 0xbb, 0xd8, 0xdc, 0x7e, 0xdd, 0xad, 0xee, - 0xc9, 0xa1, 0x9b, 0xc9, 0x9a, 0xf0, 0x96, 0x34, 0xc2, 0xde, 0x5d, 0x0d, - 0x1d, 0xcd, 0x20, 0x86, 0x99, 0x34, 0x80, 0x90, 0x78, 0x99, 0x4b, 0x60, - 0x00, 0x26, 0x4e, 0x2d, 0x43, 0xc1, 0x17, 0x90, 0x8c, 0x72, 0x3f, 0xd0, - 0x4a, 0xec, 0x08, 0x1b, 0xe8, 0xa0, 0xa5, 0xb4, 0x54, 0x80, 0x36, 0x97, - 0x3c, 0xb0, 0x75, 0x2c, 0x9c, 0x5f, 0xf7, 0xde, 0xdd, 0x62, 0xfa, 0xe7, - 0xd3, 0xef, 0x84, 0x0b, 0x56, 0x32, 0xc9, 0xfb, 0x08, 0x8b, 0x71, 0xe2, - 0x5a, 0x0b, 0x24, 0xd9, 0x75, 0xcd, 0x1e, 0x0d, 0x9e, 0xf7, 0xf4, 0x5e, - 0x28, 0x60, 0xa5, 0xd8, 0x2e, 0x7c, 0x73, 0x90, 0xb5, 0xae, 0xc0, 0xd5, - 0xb0, 0x9c, 0xfb, 0xdb, 0x35, 0x2e, 0x36, 0x17, 0xe7, 0x85, 0x2e, 0xe2, - 0xab, 0x01, 0x14, 0xf6, 0x69, 0x12, 0x9a, 0x88, 0x6f, 0x19, 0xa9, 0x42, - 0x85, 0x5c, 0x5c, 0x85, 0x5e, 0xce, 0xcd, 0x29, 0x02, 0x78, 0x2d, 0x0a, - 0x0d, 0x1c, 0xf8, 0x61, 0x38, 0xd7, 0x51, 0x1a, 0x8f, 0xdd, 0xe0, 0xf5, - 0x74, 0xf3, 0xd8, 0xb6, 0x60, 0x6b, 0x22, 0x9f, 0xe8, 0xd3, 0x40, 0xc4, - 0xc6, 0x14, 0x6d, 0x23, 0xa2, 0x3b, 0xcb, 0x80, 0xa8, 0x5c, 0xf5, 0x3a, - 0x0c, 0x15, 0xa0, 0xc8, 0x28, 0xa8, 0xb0, 0x04, 0xef, 0xbf, 0x99, 0x51, - 0x7f, 0x02, 0x41, 0x08, 0xe8, 0x3c, 0x44, 0x7c, 0xd1, 0xd5, 0xa2, 0x38, - 0x61, 0x0a, 0xc3, 0xfd, 0x7e, 0xe3, 0x0a, 0xef, 0x5e, 0x81, 0x8f, 0xbb, - 0xb3, 0xd9, 0x65, 0xda, 0x3b, 0x45, 0x23, 0xdf, 0x5c, 0xdb, 0x05, 0x11, - 0x71, 0xfa, 0x4c, 0x4a, 0xf3, 0x56, 0xb6, 0x10, 0xfd, 0x27, 0x14, 0xdc, - 0x80, 0xb5, 0xd7, 0x6a, 0xe5, 0x66, 0x4e, 0xf0, 0xaa, 0x60, 0x72, 0x90, - 0x4c, 0x0e, 0x35, 0xb8, 0x1b, 0x86, 0xda, 0x3a, 0xe8, 0x00, 0x00, 0x09, - 0x05, 0x4f, 0x2f, 0x48, 0x3d, 0x16, 0x30, 0x9d, 0xc7, 0xff, 0x3c, 0xa7, - 0xff, 0xed, 0x38, 0x23, 0x17, 0x66, 0xc9, 0xea, 0xa8, 0xe6, 0xbe, 0xcc, - 0xf7, 0xfb, 0xdc, 0x91, 0xd1, 0x0e, 0xd3, 0x1b, 0x6b, 0x86, 0xd6, 0x69, - 0xa3, 0x23, 0x73, 0x4c, 0xf9, 0x72, 0x5b, 0x6b, 0x1f, 0x59, 0x64, 0x9e, - 0xde, 0x7f, 0x62, 0x0a, 0x58, 0x97, 0x73, 0x4b, 0x9c, 0xdf, 0x28, 0x14, - 0x61, 0x01, 0xdd, 0x14, 0xc6, 0xad, 0x7f, 0x46, 0x6e, 0x4e, 0xe2, 0xd1, - 0x79, 0xe7, 0x75, 0x7d, 0xc8, 0x89, 0x66, 0xd4, 0x37, 0x29, 0x9e, 0x9e, - 0x89, 0x19, 0xc9, 0xa1, 0x21, 0x8a, 0xaf, 0x3d, 0x0d, 0x7c, 0xdc, 0xe2, - 0x73, 0xcc, 0x8d, 0x01, 0x9b, 0xab, 0xd9, 0x9b, 0xd0, 0xf0, 0x09, 0x22, - 0xb9, 0xac, 0x82, 0x6b, 0x80, 0xb7, 0x69, 0xb2, 0xee, 0xa3, 0xe2, 0xc1, - 0x8d, 0x35, 0xeb, 0x03, 0x3d, 0x1c, 0xaa, 0xd7, 0x4b, 0xd1, 0x08, 0xfd, - 0xab, 0x84, 0x2e, 0xc4, 0xdd, 0xbd, 0xfd, 0x54, 0x04, 0xb5, 0x2d, 0xc8, - 0xea, 0xd3, 0xcd, 0x54, 0x04, 0x2c, 0xad, 0x42, 0x7d, 0xa4, 0x17, 0xcd, - 0xcf, 0x1f, 0x8e, 0xe0, 0x7b, 0x4e, 0x6e, 0xfa, 0x2d, 0xa8, 0xca, 0x03, - 0x01, 0xe2, 0xde, 0x32, 0xcf, 0xd6, 0x24, 0x91, 0x54, 0xc8, 0x4a, 0x6f, - 0x5a, 0x7f, 0x51, 0xa9, 0x87, 0x8a, 0x2b, 0x87, 0x87, 0x2b, 0xcf, 0x84, - 0x69, 0xa7, 0x1f, 0x91, 0x4b, 0x41, 0x2a, 0xa3, 0x9c, 0xef, 0x55, 0x31, - 0x3c, 0xe4, 0x84, 0x74, 0x76, 0x2b, 0x60, 0xb5, 0x2b, 0x68, 0xa5, 0x5a, - 0x6b, 0x58, 0xb9, 0x77, 0xf4, 0x0a, 0x8e, 0x25, 0x8b, 0x98, 0x2b, 0xa2, - 0x94, 0x6c, 0x8e, 0xa5, 0xee, 0x91, 0x1a, 0x22, 0x11, 0x51, 0xd4, 0xa4, - 0xaa, 0x0c, 0x0e, 0x9c, 0x43, 0x13, 0x17, 0xce, 0xb6, 0xca, 0xe4, 0x87, - 0xfa, 0x9d, 0x1a, 0xaf, 0xe3, 0xa3, 0x99, 0x7d, 0xa1, 0xb8, 0x00, 0x9d, - 0x5d, 0xd6, 0x0b, 0x3d, 0xb3, 0x86, 0x75, 0x1b, 0xd6, 0xb0, 0x2b, 0x21, - 0x16, 0x85, 0x34, 0x35, 0xa5, 0x7e, 0xa7, 0x5a, 0x3c, 0xba, 0x82, 0x78, - 0xdf, 0x95, 0x76, 0x57, 0x30, 0x3b, 0x2d, 0x17, 0x04, 0x25, 0x90, 0x3c, - 0x6e, 0xbc, 0xc1, 0x97, 0x17, 0xb6, 0xf4, 0xc0, 0x9f, 0xc0, 0xa3, 0xd0, - 0xea, 0x8a, 0x1c, 0x96, 0x55, 0xe2, 0x68, 0x49, 0xd9, 0x52, 0xa8, 0xa0, - 0x45, 0x86, 0x00, 0xc1, 0x0b, 0x82, 0x5a, 0x69, 0xfb, 0x0c, 0xc6, 0x13, - 0xad, 0x19, 0x1b, 0xc9, 0xc1, 0x80, 0x51, 0x72, 0x04, 0xa8, 0x7e, 0x0c, - 0x66, 0x2b, 0x07, 0xe1, 0xfa, 0x02, 0x95, 0xf9, 0x9e, 0xe9, 0x1a, 0xff, - 0x2f, 0xf7, 0x27, 0x01, 0x12, 0x27, 0x37, 0x65, 0x13, 0x99, 0x3a, 0xe9, - 0xa5, 0x53, 0xbe, 0xf3, 0x93, 0x02, 0x73, 0x24, 0x19, 0x9c, 0x4a, 0x5a, - 0x1d, 0x0d, 0x02, 0xbb, 0x53, 0x4c, 0x0d, 0x24, 0xa5, 0x7c, 0x50, 0x0e, - 0x1e, 0x7f, 0x25, 0xf6, 0xca, 0x96, 0x59, 0x2a, 0x24, 0x1a, 0x67, 0x4a, - 0x8b, 0x7f, 0xdd, 0x90, 0x36, 0x7f, 0xf0, 0x05, 0xae, 0x4e, 0xc9, 0xa9, - 0x6f, 0x1f, 0x8d, 0xfd, 0x1c, 0x70, 0xe1, 0xe5, 0xc7, 0xe7, 0x18, 0x27, - 0x58, 0xb6, 0xf7, 0x09, 0x31, 0x67, 0x94, 0x98, 0xc4, 0x89, 0x8d, 0xf2, - 0x95, 0xff, 0x55, 0xb6, 0xcc, 0x3c, 0x0e, 0xa7, 0xf9, 0x77, 0x7a, 0xfc, - 0x33, 0xfb, 0xa7, 0x07, 0x6f, 0x5d, 0x2e, 0x5f, 0x72, 0xba, 0xc6, 0x2f, - 0xd3, 0x34, 0x0e, 0x87, 0x51, 0x8d, 0x5b, 0xd7, 0x61, 0x85, 0x18, 0x2f, - 0xff, 0xd3, 0x92, 0xdb, 0x1c, 0xbd, 0x46, 0xaa, 0x9c, 0xae, 0x7b, 0xc0, - 0x45, 0xa0, 0x0d, 0xbd, 0x3c, 0xf4, 0x78, 0xd4, 0xd2, 0x47, 0x1f, 0x21, - 0x91, 0xcf, 0x5d, 0xf9, 0xca, 0x02, 0xe2, 0x6c, 0xe5, 0xdb, 0x9a, 0x7e, - 0x2d, 0x21, 0x17, 0x23, 0x90, 0x71, 0x0b, 0x7f, 0x87, 0xf1, 0x6c, 0xbc, - 0x2d, 0x31, 0x18, 0xa0, 0x2a, 0xd6, 0x44, 0xf4, 0xd4, 0xd5, 0x3b, 0x25, - 0x85, 0x90, 0xc6, 0x6d, 0xd3, 0x7e, 0xac, 0x6e, 0x0a, 0x49, 0xa5, 0xb2, - 0xd3, 0x8a, 0x25, 0x79, 0x08, 0xda, 0x2e, 0x2d, 0x1d, 0xbc, 0x8f, 0xc4, - 0x15, 0x1e, 0x15, 0xa4, 0xf6, 0xc5, 0x8b, 0xb9, 0x0e, 0x9b, 0x04, 0x77, - 0x3a, 0x20, 0xdc, 0xcc, 0x6b, 0x0d, 0x30, 0xc2, 0x43, 0x87, 0xae, 0xad, - 0x36, 0xd6, 0x84, 0x4f, 0xf3, 0x59, 0x60, 0x1e, 0x42, 0x83, 0x9c, 0xaa, - 0x00, 0x9b, 0x6d, 0x65, 0xac, 0x39, 0xc2, 0x6b, 0xad, 0x31, 0x4f, 0x3d, - 0xa5, 0x79, 0xc8, 0xe5, 0x7a, 0x91, 0xcc, 0xee, 0xef, 0x39, 0x7d, 0x91, - 0xd9, 0x10, 0xeb, 0x08, 0xbb, 0x78, 0xc0, 0xe3, 0x6c, 0xe7, 0xed, 0x46, - 0xd4, 0xb0, 0x21, 0x68, 0x58, 0x33, 0xa5, 0xe0, 0x73, 0x47, 0xc3, 0xc0, - 0x9e, 0x2b, 0xc8, 0x48, 0xca, 0xd3, 0x44, 0xd9, 0xc6, 0xb5, 0x9f, 0x44, - 0xe7, 0xf4, 0x80, 0xfb, 0x99, 0xbc, 0x3a, 0xde, 0x9e, 0x78, 0xcc, 0x17, - 0xf0, 0xd7, 0x8d, 0x77, 0xe3, 0x03, 0xad, 0xce, 0xda, 0xeb, 0xce, 0x44, - 0x5f, 0x30, 0x86, 0xff, 0xd0, 0xbf, 0x61, 0x52, 0xce, 0x49, 0x54, 0xfc, - 0xdb, 0x98, 0x9b, 0xcb, 0x58, 0x18, 0xce, 0xec, 0xf1, 0xde, 0xfc, 0x32, - 0xf8, 0x06, 0xb2, 0x15, 0xff, 0xd9, 0x4e, 0x81, 0xfb, 0x8c, 0x01, 0x17, - 0x79, 0x65, 0x02, 0xfe, 0x9e, 0x42, 0x91, 0x22, 0x86, 0xa9, 0xed, 0x7d, - 0xaa, 0xf4, 0x41, 0x79, 0xe7, 0xbe, 0x30, 0x75, 0x74, 0x71, 0x41, 0x2d, - 0x54, 0x6c, 0x44, 0x38, 0x50, 0xa9, 0xdf, 0x7f, 0x1f, 0x18, 0x7f, 0xf8, - 0x5e, 0xe4, 0x0e, 0x42, 0x0c, 0x84, 0x74, 0x48, 0x1a, 0xb8, 0x74, 0x72, - 0x08, 0x98, 0xf9, 0x71, 0xea, 0xea, 0x1f, 0xa8, 0x1c, 0xa3, 0x5e, 0x7e, - 0xe1, 0x46, 0x34, 0x2b, 0xac, 0x6e, 0x75, 0xa8, 0x96, 0x8d, 0x22, 0x61, - 0x56, 0xc7, 0x5c, 0x11, 0x47, 0xc8, 0xcd, 0x36, 0x01, 0x3a, 0x67, 0x05, - 0x5b, 0x61, 0x03, 0x46, 0xfc, 0x97, 0x62, 0xa2, 0x1d, 0x31, 0x5f, 0xe3, - 0x62, 0x8f, 0x8b, 0x4f, 0x7e, 0xc2, 0x93, 0x93, 0x52, 0x0e, 0x0c, 0xfc, - 0x4c, 0x69, 0x4d, 0xce, 0xfc, 0x54, 0x45, 0x96, 0x95, 0x67, 0xe6, 0x7c, - 0xc1, 0x21, 0xc7, 0x2e, 0xb9, 0x42, 0x2f, 0xab, 0x96, 0xeb, 0xa0, 0xd1, - 0x4e, 0x91, 0x89, 0xe1, 0xf2, 0x66, 0x27, 0xb2, 0xd1, 0xb8, 0xc9, 0x6a, - 0xc4, 0x0f, 0xcf, 0x9c, 0x76, 0x3f, 0xd0, 0x35, 0x12, 0xe1, 0x28, 0x89, - 0x3a, 0x08, 0xf5, 0x42, 0x39, 0x54, 0x0c, 0x8d, 0x85, 0x5f, 0x13, 0xb9, - 0xfc, 0x4d, 0x6c, 0xd9, 0xe4, 0x8c, 0xb6, 0x4a, 0x3b, 0x32, 0xc9, 0x6e, - 0xca, 0x33, 0xc3, 0x79, 0xda, 0xa6, 0x3c, 0xcb, 0x25, 0x32, 0xcb, 0x4c, - 0x9d, 0xa8, 0x73, 0x72, 0x88, 0x81, 0xb1, 0x3a, 0xe9, 0x9c, 0x5f, 0xf2, - 0x87, 0x43, 0xcd, 0x03, 0x4c, 0xd9, 0x53, 0x6e, 0x0a, 0xe4, 0x6b, 0x45, - 0xfe, 0x77, 0xd9, 0xdb, 0x4c, 0xd5, 0xf3, 0xd0, 0x51, 0x1b, 0x7c, 0x82, - 0xf9, 0x45, 0x00, 0x71, 0xfe, 0xb9, 0x78, 0x27, 0x8f, 0xa0, 0x70, 0x32, - 0xeb, 0xb7, 0x11, 0x9c, 0x33, 0x27, 0xf1, 0x05, 0x51, 0x5e, 0xe0, 0x26, - 0x09, 0xe6, 0x26, 0x8a, 0x99, 0xac, 0xed, 0x32, 0x46, 0x2f, 0x1e, 0x48, - 0xf2, 0x73, 0xdf, 0xb5, 0x67, 0x8c, 0x72, 0x7c, 0x10, 0xf9, 0xd1, 0xa3, - 0xf1, 0x65, 0x89, 0x9d, 0xde, 0x0b, 0x6d, 0xe7, 0x86, 0xbe, 0xbb, 0x67, - 0xc0, 0x50, 0x4f, 0x92, 0xde, 0xc2, 0xf4, 0xd1, 0x38, 0x7a, 0xf9, 0x38, - 0xef, 0x36, 0x61, 0x3c, 0x3e, 0x02, 0x11, 0xcc, 0xe4, 0x3a, 0xa0, 0xd9, - 0xdd, 0x41, 0x56, 0xef, 0xb4, 0xf1, 0x02, 0x47, 0xbb, 0x53, 0x3f, 0x0c, - 0x23, 0x6f, 0xf8, 0x42, 0x7c, 0x17, 0x1c, 0x88, 0xfb, 0x33, 0xbb, 0x9a, - 0xa1, 0x9d, 0xb1, 0x2c, 0x8a, 0x4f, 0x0a, 0xcc, 0x83, 0x13, 0xd2, 0xa7, - 0x00, 0xff, 0x05, 0x2a, 0xa5, 0xcf, 0x20, 0xd4, 0x63, 0x26, 0x54, 0x39, - 0x8c, 0xa2, 0xa6, 0x06, 0xa1, 0xc2, 0x4e, 0x85, 0x21, 0x84, 0xf1, 0x4f, - 0x6a, 0x5c, 0xce, 0x66, 0x05, 0xbc, 0x17, 0x2c, 0x10, 0x08, 0x0c, 0x90, - 0x6e, 0xf0, 0xff, 0xf6, 0xef, 0xf7, 0x79, 0x1d, 0x6b, 0x5f, 0x7c, 0xd2, - 0x03, 0x35, 0xc3, 0x2b, 0x06, 0x01, 0x8d, 0xfc, 0xc7, 0x1f, 0x19, 0xc5, - 0xda, 0x7e, 0xed, 0x25, 0x36, 0xf1, 0xed, 0xab, 0x4c, 0x03, 0x56, 0x94, - 0xb3, 0x08, 0x28, 0x1b, 0xc5, 0xbe, 0xf0, 0xf9, 0x43, 0x95, 0xc6, 0xb9, - 0xab, 0x08, 0xab, 0xe0, 0x03, 0x14, 0x3c, 0x65, 0xf8, 0x79, 0xea, 0x3c, - 0xcd, 0x1c, 0x73, 0xf1, 0x77, 0x78, 0x64, 0x75, 0x01, 0x2e, 0x94, 0x99, - 0xf4, 0x06, 0xf4, 0x70, 0x0c, 0x75, 0x32, 0xc7, 0x1f, 0xc2, 0x53, 0xee, - 0x13, 0x17, 0x50, 0xe1, 0x7b, 0xea, 0x47, 0x92, 0xc0, 0xc3, 0x27, 0x1b, - 0x18, 0x79, 0x10, 0x34, 0xec, 0x6f, 0xce, 0xb1, 0x50, 0x2f, 0x53, 0xec, - 0x48, 0xb7, 0x1e, 0x2b, 0x00, 0x11, 0x5a, 0x93, 0x1f, 0x5f, 0x8b, 0x4b, - 0xc8, 0xcf, 0x69, 0xbb, 0xb4, 0x1b, 0x9c, 0x1d, 0xde, 0x8d, 0xa9, 0xe9, - 0x47, 0xe8, 0xe9, 0xd9, 0xe7, 0xce, 0x0a, 0xe5, 0x2a, 0x81, 0xc7, 0x5f, - 0x2a, 0x62, 0xcb, 0xa2, 0x05, 0x80, 0x00, 0xdc, 0x39, 0xa1, 0x24, 0x18, - 0x0e, 0xf6, 0x82, 0x87, 0x93, 0x5c, 0xb3, 0x8f, 0xda, 0xae, 0x8f, 0x3b, - 0x0c, 0x1b, 0xe7, 0x43, 0x79, 0xc3, 0xdf, 0xef, 0xdf, 0xff, 0x0f, 0xff, - 0x79, 0xc9, 0xad, 0x25, 0xff, 0x7d, 0xec, 0xd2, 0x3a, 0xab, 0x74, 0xf6, - 0xe8, 0xb8, 0x28, 0x55, 0x78, 0x00, 0xa8, 0xa9, 0x84, 0x08, 0x67, 0x03, - 0x83, 0x79, 0xd1, 0x8f, 0x86, 0xf8, 0xc4, 0xce, 0x8b, 0x2d, 0x08, 0x65, - 0xb5, 0x74, 0x33, 0xc8, 0x35, 0x16, 0xf4, 0xc7, 0xef, 0x5c, 0x11, 0x7a, - 0xfb, 0x7f, 0x47, 0x9a, 0x7c, 0x92, 0x8c, 0x42, 0xd4, 0x2a, 0x7c, 0xfa, - 0xa5, 0x65, 0x06, 0x0e, 0xb9, 0x7c, 0x23, 0x79, 0x19, 0x17, 0x0c, 0x4d, - 0xd3, 0x2c, 0x18, 0x6a, 0x25, 0xe0, 0xb0, 0x1b, 0x0b, 0x09, 0x28, 0x88, - 0xcc, 0x02, 0x8b, 0x20, 0xa8, 0x41, 0xef, 0xca, 0xd5, 0xc1, 0x9f, 0x87, - 0x8b, 0x7a, 0xaa, 0xd8, 0x82, 0x7e, 0x0a, 0x03, 0xbd, 0xe5, 0x83, 0x0b, - 0xf7, 0x84, 0xea, 0x2c, 0x15, 0xfb, 0xf5, 0x0a, 0x88, 0xf8, 0x61, 0x8d, - 0x65, 0xa7, 0x75, 0xeb, 0x05, 0x6b, 0x44, 0x4e, 0xcf, 0x67, 0xd5, 0xc7, - 0xe3, 0x35, 0x80, 0x3a, 0x18, 0x31, 0x1c, 0x23, 0x7a, 0x2e, 0x95, 0x27, - 0xea, 0x6f, 0x4c, 0xf3, 0x50, 0x80, 0xe0, 0x75, 0x5c, 0x3b, 0x8b, 0x4c, - 0xe2, 0xec, 0xa5, 0x76, 0x71, 0xe8, 0xd5, 0xe7, 0xfc, 0xfa, 0xa2, 0xd4, - 0x8c, 0x46, 0x8d, 0xff, 0xe6, 0x39, 0x40, 0x38, 0x81, 0xb5, 0x65, 0xdb, - 0x29, 0x7d, 0x4f, 0xef, 0x47, 0xfd, 0xd6, 0x49, 0x06, 0x3b, 0xb6, 0xdc, - 0x9c, 0xf1, 0x3b, 0xd9, 0xa7, 0x26, 0xb9, 0x7e, 0xc1, 0x56, 0xe1, 0x87, - 0x74, 0x1d, 0xed, 0x6e, 0xe2, 0xdd, 0xee, 0xed, 0x06, 0xff, 0x5b, 0x36, - 0x7e, 0xe1, 0x72, 0x28, 0xb7, 0xc8, 0x28, 0x28, 0x4f, 0x00, 0x84, 0xdc, - 0xa1, 0x27, 0x57, 0x52, 0x19, 0x45, 0xe0, 0x2b, 0x45, 0x01, 0xb7, 0xa9, - 0x6c, 0x33, 0x3c, 0xc0, 0x31, 0xca, 0xd7, 0x43, 0x6c, 0x92, 0xf4, 0xc6, - 0x7a, 0x7b, 0x0f, 0x6c, 0x02, 0xfc, 0x0c, 0x54, 0xff, 0x16, 0x98, 0x7b, - 0xb5, 0x4f, 0xd5, 0xf6, 0x4f, 0xc2, 0x17, 0x2f, 0x86, 0xc1, 0xe9, 0x48, - 0x9e, 0x6d, 0xaa, 0xbe, 0xc8, 0x0a, 0x70, 0x8a, 0x7c, 0xf7, 0x5f, 0xb9, - 0x91, 0x2c, 0xc1, 0xc5, 0x57, 0xab, 0x8c, 0xef, 0xf0, 0xb9, 0xe3, 0x3e, - 0x2a, 0xfd, 0xaa, 0x3f, 0x75, 0xa4, 0xcc, 0x86, 0x2b, 0x51, 0x2e, 0xf7, - 0x57, 0x3e, 0xef, 0x6b, 0x7c, 0x82, 0x90, 0x8e, 0x08, 0x8f, 0x95, 0xd7, - 0xa9, 0xfa, 0x19, 0x77, 0xca, 0x3e, 0x80, 0xc3, 0xef, 0x25, 0xc2, 0x2c, - 0xa9, 0x04, 0x44, 0x6d, 0xe5, 0xc7, 0xd2, 0xd4, 0x79, 0xae, 0x41, 0x74, - 0x94, 0x87, 0x1a, 0x26, 0x87, 0x71, 0x62, 0x26, 0x02, 0x59, 0x7d, 0xd3, - 0xef, 0x3c, 0xe3, 0x47, 0x8e, 0x84, 0x4e, 0x24, 0x32, 0x85, 0xa7, 0xc7, - 0x06, 0xe0, 0x78, 0xe5, 0x69, 0x19, 0x19, 0xe5, 0xa7, 0x8d, 0xa8, 0xc8, - 0xff, 0xa9, 0x39, 0x6b, 0x4c, 0x13, 0x35, 0x8a, 0x8e, 0x86, 0x6e, 0xd7, - 0xdd, 0xf5, 0xfd, 0x9e, 0xe2, 0x01, 0x43, 0x5d, 0xb4, 0x5f, 0xba, 0x41, - 0xca, 0x3c, 0xec, 0x7f, 0xee, 0xa3, 0x3b, 0xe7, 0xf7, 0x14, 0xb8, 0xee, - 0x82, 0x3f, 0xf9, 0x2c, 0xca, 0x14, 0x90, 0x2a, 0xf6, 0x73, 0x38, 0x3b, - 0xb6, 0xff, 0xff, 0xa4, 0x55, 0x3f, 0x63, 0x4f, 0x0f, 0x60, 0x19, 0x79, - 0xdc, 0xe8, 0x02, 0x5d, 0x24, 0x75, 0x89, 0x55, 0x91, 0xe4, 0xa3, 0x87, - 0xa9, 0x05, 0x38, 0x69, 0x0e, 0xde, 0x9c, 0x84, 0x2d, 0xff, 0x5b, 0x18, - 0x49, 0xeb, 0x8b, 0xc7, 0x01, 0x08, 0x75, 0x63, 0x66, 0x3a, 0x98, 0x24, - 0x38, 0x6f, 0x0a, 0x9d, 0x17, 0x95, 0xec, 0x86, 0x43, 0x1d, 0xae, 0xe4, - 0x59, 0xfe, 0xdb, 0xed, 0xa0, 0xec, 0x4a, 0x4d, 0x0d, 0x00, 0x48, 0x56, - 0x0b, 0x09, 0xff, 0xbb, 0x85, 0xbf, 0x0d, 0x60, 0xd7, 0x10, 0xe8, 0x07, - 0xda, 0x3f, 0xb4, 0xd5, 0xf6, 0x16, 0x66, 0xf6, 0xc8, 0x36, 0x47, 0x1e, - 0xbb, 0x75, 0xd8, 0x13, 0xdf, 0xe4, 0x01, 0x11, 0xa8, 0xab, 0x05, 0xba, - 0xb9, 0x7e, 0xcd, 0x2b, 0xfe, 0x41, 0x6c, 0x60, 0x34, 0xde, 0x2e, 0x30, - 0xc2, 0x8e, 0xdd, 0x91, 0x28, 0x0e, 0x35, 0x41, 0x4c, 0x8b, 0x22, 0xc7, - 0xd2, 0xf7, 0xdc, 0x6b, 0x09, 0x31, 0x19, 0x56, 0x58, 0x2c, 0x71, 0xde, - 0x62, 0x6b, 0xdc, 0x7e, 0xc1, 0x86, 0x04, 0x28, 0x10, 0xcc, 0xd0, 0x09, - 0x97, 0x2e, 0xae, 0x33, 0xa7, 0xe0, 0xfa, 0x7c, 0x2d, 0x0f, 0xa1, 0x07, - 0xb3, 0x6d, 0x7c, 0x8c, 0xb3, 0x9a, 0xcb, 0x33, 0x8e, 0xc0, 0x04, 0x95, - 0xfd, 0xc4, 0xf9, 0x6a, 0xc3, 0xb8, 0xa7, 0xf5, 0x4f, 0x65, 0x2b, 0x83, - 0xd7, 0xae, 0xe6, 0x9a, 0x96, 0x3f, 0xe5, 0x7f, 0xd2, 0x2e, 0xee, 0x6f, - 0xdd, 0xb3, 0x55, 0x97, 0xa7, 0x69, 0x02, 0xf4, 0xb3, 0xd6, 0xc6, 0xf7, - 0x1a, 0x60, 0x0e, 0x6a, 0xed, 0x1f, 0x5d, 0x98, 0xfd, 0xef, 0x08, 0x1b, - 0xac, 0x64, 0x93, 0x1c, 0xe2, 0x3e, 0x08, 0x3b, 0x3c, 0x05, 0xff, 0x22, - 0xda, 0xc2, 0x07, 0xdb, 0xf7, 0x50, 0x91, 0xab, 0xb5, 0x41, 0xc2, 0x01, - 0xd2, 0x35, 0x15, 0x03, 0xfb, 0x6a, 0x6d, 0x56, 0xbb, 0x07, 0xd2, 0xc2, - 0xc9, 0x59, 0x85, 0xf8, 0x5e, 0x7c, 0x3c, 0xca, 0xc7, 0x70, 0x10, 0x16, - 0xb6, 0x52, 0xac, 0xab, 0x7b, 0x59, 0x0a, 0xf7, 0x0b, 0xde, 0xdc, 0x01, - 0x91, 0x48, 0x89, 0xc7, 0xb5, 0x48, 0x28, 0xf5, 0xa9, 0x99, 0x55, 0xee, - 0xc8, 0x39, 0x66, 0x99, 0xf5, 0x67, 0xd8, 0x04, 0x77, 0xdf, 0xf6, 0x83, - 0x19, 0x49, 0x8b, 0x11, 0x20, 0x24, 0x15, 0x3d, 0x0d, 0x32, 0xa3, 0x01, - 0x1d, 0x05, 0xa6, 0x06, 0xf5, 0x63, 0xa7, 0x3d, 0x9f, 0xf8, 0xe5, 0x53, - 0x5c, 0xaf, 0x01, 0xc1, 0xd4, 0x4a, 0xbb, 0x35, 0xbd, 0x05, 0x24, 0x0e, - 0x2b, 0x9e, 0x07, 0x86, 0xbc, 0xc2, 0x64, 0xd1, 0xc0, 0x04, 0xb9, 0x7c, - 0x38, 0x38, 0xd0, 0xc8, 0xd8, 0x14, 0x73, 0xfb, 0x49, 0x10, 0x90, 0x00, - 0x20, 0xf1, 0xc8, 0x46, 0x7e, 0x8e, 0x57, 0xf4, 0x7a, 0x56, 0x92, 0x23, - 0x10, 0xe0, 0x9c, 0xcd, 0x8f, 0x92, 0x9b, 0x43, 0x23, 0xe6, 0x6b, 0xdc, - 0x1c, 0x2c, 0x5a, 0x10, 0x9b, 0x0c, 0x92, 0x03, 0xbc, 0xcb, 0x27, 0x39, - 0x19, 0xed, 0xad, 0x5e, 0x76, 0x5f, 0x6e, 0x9f, 0x90, 0x36, 0xea, 0x95, - 0xa6, 0xad, 0x16, 0x28, 0x75, 0x9f, 0x54, 0x63, 0x4f, 0x45, 0xa9, 0xa0, - 0x62, 0x6d, 0xe4, 0x36, 0xf2, 0xb5, 0xae, 0x86, 0x45, 0x9c, 0x0f, 0xeb, - 0x88, 0x91, 0xbe, 0x9d, 0x6f, 0x3c, 0xb0, 0x16, 0xa2, 0x6a, 0xbe, 0x87, - 0x43, 0xa7, 0x79, 0xf8, 0x7f, 0x1f, 0xb6, 0x6c, 0xb4, 0xcf, 0x3f, 0xc4, - 0x12, 0x56, 0xde, 0x12, 0x3b, 0x57, 0xcc, 0x73, 0x34, 0xae, 0xcb, 0xc3, - 0x5a, 0x5b, 0x84, 0x79, 0x29, 0xab, 0xc0, 0x66, 0xc2, 0xaa, 0xef, 0x09, - 0x3c, 0x01, 0x2b, 0x57, 0x8c, 0xda, 0x71, 0x0d, 0x73, 0x9a, 0x57, 0x1d, - 0xe0, 0xbd, 0x0e, 0x33, 0xb5, 0xf2, 0x94, 0x05, 0x8f, 0x24, 0x00, 0x4b, - 0xbd, 0xbe, 0x29, 0x7d, 0xd3, 0xdb, 0x1e, 0x91, 0x52, 0xd4, 0x98, 0x21, - 0x62, 0x82, 0xb2, 0x04, 0x23, 0xd0, 0x0f, 0x5c, 0x53, 0x7e, 0x12, 0x36, - 0x13, 0x8a, 0xb6, 0x74, 0x9e, 0xb1, 0xcd, 0xbb, 0x8b, 0x57, 0x36, 0x4f, - 0xae, 0x4e, 0xf7, 0xa4, 0x3f, 0xdd, 0x9d, 0x92, 0xcd, 0x08, 0x5a, 0x76, - 0x0c, 0x46, 0x2b, 0xca, 0xe9, 0x24, 0xf2, 0xc8, 0x76, 0xb9, 0xab, 0x05, - 0x2f, 0x03, 0x9e, 0x78, 0x61, 0xf3, 0xd4, 0xdc, 0xb9, 0x43, 0x68, 0x38, - 0xc3, 0xde, 0x7f, 0x28, 0x80, 0x22, 0x55, 0x89, 0xc3, 0xe8, 0x64, 0x50, - 0x11, 0x6b, 0x55, 0xe2, 0x30, 0xd8, 0xb2, 0xd6, 0x0e, 0xc0, 0x1f, 0x15, - 0x42, 0x2e, 0xfe, 0x05, 0xff, 0x0e, 0xb5, 0xe4, 0x04, 0x64, 0x47, 0x3f, - 0x0a, 0x47, 0x9e, 0xe7, 0xcb, 0x79, 0x86, 0x83, 0x4f, 0x66, 0xca, 0xaf, - 0xd8, 0x71, 0x85, 0x6e, 0x6c, 0x27, 0xaa, 0x74, 0x79, 0xf3, 0x21, 0x2a, - 0xef, 0x27, 0xe0, 0x78, 0x54, 0x53, 0x19, 0xc4, 0xcb, 0x93, 0x4b, 0xcd, - 0xc7, 0xa5, 0xea, 0xcb, 0xeb, 0xa7, 0x21, 0x4c, 0x4a, 0x09, 0xf5, 0x68, - 0x1f, 0x72, 0xc8, 0x0f, 0xfe, 0xfc, 0xd5, 0xee, 0x98, 0xd4, 0xd4, 0xd5, - 0x64, 0x23, 0xfe, 0xcb, 0xb9, 0x88, 0x95, 0x91, 0xa9, 0xce, 0x85, 0x45, - 0xe1, 0x2f, 0x92, 0xe1, 0x3b, 0x59, 0xb2, 0x3a, 0x1a, 0x59, 0x88, 0xf2, - 0x32, 0xe3, 0x23, 0x73, 0xd7, 0xc3, 0x84, 0x9b, 0x9e, 0xb4, 0xb5, 0x59, - 0xe6, 0x53, 0x0c, 0x5f, 0x26, 0x97, 0x29, 0xe4, 0xc9, 0xad, 0x05, 0x50, - 0xc0, 0x50, 0x07, 0xcd, 0x2a, 0x11, 0x62, 0xd4, 0xe1, 0xde, 0x20, 0xaa, - 0xf5, 0x76, 0x8e, 0x32, 0x53, 0x09, 0x29, 0x5e, 0x0b, 0xf1, 0xf9, 0x31, - 0xf0, 0x7b, 0x37, 0x6e, 0x06, 0xb3, 0x25, 0xf3, 0xf8, 0x6d, 0xe0, 0x32, - 0x54, 0x74, 0xe9, 0x5a, 0x21, 0xa3, 0xbe, 0x35, 0x15, 0x61, 0xf1, 0x41, - 0xc7, 0x4d, 0xc1, 0xe5, 0x1b, 0x0e, 0x36, 0x93, 0x0b, 0x9b, 0x69, 0xf8, - 0x1c, 0x0f, 0x4d, 0x09, 0x1d, 0xbc, 0xf6, 0xfe, 0x4a, 0x98, 0x29, 0x3b, - 0x00, 0xa5, 0x71, 0xa6, 0xa8, 0xa1, 0x02, 0xf8, 0xbe, 0xb6, 0x41, 0x14, - 0xc4, 0x83, 0x94, 0x2e, 0x55, 0x04, 0x04, 0xba, 0xe8, 0x1e, 0xf6, 0x29, - 0xd4, 0xa3, 0x3b, 0xa4, 0xaa, 0xd2, 0xea, 0x22, 0xc1, 0xf9, 0x22, 0xfe, - 0x14, 0x12, 0x53, 0x22, 0xe7, 0xc6, 0x9c, 0xeb, 0x51, 0xa0, 0x28, 0x0a, - 0x24, 0xd7, 0xdc, 0xeb, 0x9b, 0x7f, 0x6e, 0x50, 0x31, 0x23, 0x82, 0xac, - 0x92, 0x53, 0xfc, 0xda, 0x16, 0xdf, 0x24, 0x69, 0x89, 0x37, 0x5a, 0xbc, - 0xc7, 0xff, 0xda, 0x1b, 0xda, 0xa9, 0xaf, 0x7a, 0x11, 0x9a, 0xb8, 0xf8, - 0x32, 0xd6, 0x91, 0xfc, 0xd9, 0x49, 0x25, 0x0b, 0x8a, 0xd7, 0x50, 0xf8, - 0xa6, 0xe8, 0x17, 0x1b, 0xa8, 0x7e, 0xf3, 0x9c, 0x82, 0x35, 0x5f, 0xfb, - 0x0c, 0x05, 0x8d, 0x50, 0x4b, 0x76, 0xaf, 0xa8, 0x93, 0xda, 0x94, 0x75, - 0xbf, 0x4a, 0x33, 0x4e, 0x4d, 0xa7, 0xb4, 0x80, 0xcb, 0xd3, 0xe3, 0xb3, - 0x1b, 0xda, 0x95, 0xe1, 0x22, 0x06, 0xe6, 0x97, 0x71, 0x36, 0xe4, 0x79, - 0xc9, 0xc0, 0xc9, 0x49, 0xbc, 0x4e, 0x4e, 0xe6, 0x78, 0x07, 0xc4, 0xbc, - 0x70, 0xee, 0x8a, 0x7f, 0x3f, 0x65, 0x66, 0x55, 0x6c, 0x83, 0x21, 0x2e, - 0xd9, 0x53, 0x50, 0xde, 0x64, 0xef, 0x9a, 0x01, 0x66, 0x3d, 0x1e, 0x92, - 0x5b, 0xa2, 0x29, 0xb4, 0x75, 0xd1, 0xc8, 0x0a, 0x63, 0xeb, 0xd6, 0x9e, - 0x5b, 0x76, 0x6a, 0x06, 0xf0, 0xfe, 0x56, 0xff, 0x1d, 0xa3, 0xe6, 0x23, - 0xed, 0xa1, 0xf9, 0x13, 0xdb, 0x3c, 0x7d, 0x7b, 0x5b, 0x5e, 0x55, 0x24, - 0x92, 0x3f, 0x16, 0xd4, 0x84, 0xbf, 0xa0, 0x67, 0x62, 0xfd, 0x69, 0xe8, - 0x16, 0x10, 0x43, 0x6d, 0x58, 0xca, 0x78, 0xfd, 0xaa, 0x19, 0x16, 0x00, - 0xec, 0x31, 0xd4, 0x56, 0xec, 0x4f, 0x52, 0xaa, 0xf0, 0x6d, 0xae, 0xc2, - 0x85, 0xb2, 0x8c, 0xa7, 0x8b, 0xbd, 0xab, 0x65, 0xdd, 0x7a, 0x4c, 0xdf, - 0x19, 0x9a, 0x93, 0xf1, 0x19, 0x2c, 0x70, 0xc8, 0xcd, 0x40, 0xe7, 0x13, - 0xca, 0x64, 0xc8, 0xed, 0xa4, 0x40, 0x66, 0xed, 0x2e, 0xc7, 0x04, 0x8e, - 0xd8, 0xe8, 0xf5, 0x35, 0x72, 0xc1, 0x5f, 0x8c, 0x9d, 0x94, 0xbc, 0xcb, - 0x7a, 0xf8, 0x64, 0xf6, 0xc0, 0x8e, 0x7c, 0xa3, 0x2d, 0x93, 0x4d, 0x99, - 0x50, 0x71, 0x60, 0xbb, 0x90, 0xba, 0x68, 0x9c, 0x91, 0xff, 0x3d, 0x0a, - 0x80, 0x04, 0x74, 0x27, 0x2e, 0x1e, 0x0e, 0x95, 0x01, 0x41, 0xae, 0xa5, - 0xb2, 0x5b, 0x95, 0x39, 0x2b, 0x71, 0x97, 0xe1, 0x0e, 0x35, 0x92, 0x5f, - 0x25, 0xf3, 0x5a, 0xab, 0xf2, 0x09, 0xd9, 0xcf, 0xe0, 0x04, 0xb8, 0xcf, - 0x16, 0x75, 0xb3, 0x27, 0xd7, 0x3a, 0xbc, 0xa4, 0x6c, 0x43, 0xfb, 0x73, - 0xa3, 0x90, 0x59, 0xe8, 0x63, 0x81, 0xd3, 0xc0, 0x75, 0xf6, 0x6f, 0x69, - 0xb4, 0x8b, 0x36, 0xa6, 0x58, 0xd6, 0x19, 0xde, 0xec, 0x80, 0xd6, 0x39, - 0x32, 0x1c, 0x55, 0x2e, 0x31, 0x9c, 0xde, 0x14, 0xd4, 0x73, 0x98, 0xc8, - 0xe0, 0x47, 0x36, 0xac, 0x81, 0xac, 0x96, 0x86, 0x4d, 0x04, 0x0b, 0x82, - 0xae, 0x64, 0x01, 0x33, 0x4c, 0x6d, 0xba, 0x12, 0xd2, 0xd2, 0x8e, 0x5f, - 0xcc, 0x9c, 0xaa, 0xfe, 0xeb, 0x46, 0xae, 0x7f, 0x0d, 0xf4, 0x61, 0x9b, - 0xda, 0x2d, 0xb4, 0x68, 0x3e, 0x9d, 0xf2, 0xda, 0x8a, 0xf7, 0x6f, 0x72, - 0x64, 0x45, 0x22, 0x13, 0x08, 0x0f, 0x79, 0xa0, 0xe5, 0xa2, 0x4d, 0x0e, - 0x3f, 0xf3, 0xc4, 0xe9, 0x0c, 0xd9, 0x48, 0x00, 0x65, 0x2d, 0xd4, 0x50, - 0xfd, 0xcd, 0x52, 0xf4, 0xc4, 0x29, 0xe1, 0xa2, 0x6f, 0xf1, 0x7b, 0x4d, - 0xf5, 0x30, 0xc9, 0xe7, 0xf4, 0xf3, 0xd2, 0x92, 0xe9, 0xf7, 0x07, 0x6f, - 0x8b, 0x59, 0xf5, 0x30, 0xad, 0xcf, 0xd9, 0xfd, 0xb1, 0x1a, 0x17, 0x75, - 0x1d, 0x47, 0x21, 0x95, 0x3d, 0x6e, 0xec, 0x80, 0xd0, 0x73, 0x4d, 0xc4, - 0x19, 0xb6, 0x72, 0xd3, 0x23, 0xa2, 0x8f, 0x63, 0x07, 0x1f, 0x29, 0xb2, - 0x59, 0x1e, 0x2c, 0x50, 0x5d, 0x95, 0x02, 0xf0, 0xb2, 0x56, 0x35, 0xac, - 0xda, 0xca, 0xe9, 0xe7, 0xa4, 0xe2, 0x92, 0xab, 0x73, 0x76, 0x85, 0xfc, - 0x31, 0x3a, 0xad, 0x14, 0xe8, 0xe2, 0x56, 0x60, 0xc0, 0x7b, 0xb1, 0xb4, - 0x6a, 0x13, 0x77, 0xf8, 0x7d, 0x5e, 0xf0, 0x82, 0xf2, 0xab, 0x30, 0xe0, - 0x5b, 0x4e, 0xff, 0x55, 0xc5, 0x89, 0x43, 0xbe, 0x8d, 0x96, 0xca, 0x2c, - 0xa9, 0x9e, 0x83, 0x1d, 0x61, 0x7a, 0xd3, 0x14, 0xac, 0x28, 0x32, 0xfe, - 0x97, 0x7a, 0xd6, 0x08, 0x54, 0xf0, 0xf2, 0x39, 0xb8, 0x0c, 0x95, 0xa6, - 0xdd, 0x78, 0xa0, 0x3c, 0xde, 0x30, 0x44, 0xc3, 0xa3, 0x8f, 0xc2, 0xf4, - 0xce, 0x3f, 0xda, 0x73, 0xe2, 0x22, 0x4f, 0xd4, 0x46, 0xc1, 0x71, 0x5d, - 0xa3, 0x7a, 0x05, 0xb5, 0x35, 0xbb, 0xf2, 0x46, 0x7b, 0xcc, 0xb9, 0x20, - 0xc0, 0x35, 0x90, 0x19, 0xba, 0x92, 0x6e, 0xa6, 0x2b, 0x0b, 0x63, 0x1f, - 0xed, 0xec, 0x05, 0xed, 0x20, 0xed, 0x07, 0x00, 0xa1, 0x13, 0xb1, 0x36, - 0xeb, 0x75, 0xa2, 0x60, 0x01, 0xb0, 0xbc, 0x2c, 0xdc, 0xb4, 0x19, 0x19, - 0x39, 0xc1, 0x9e, 0xb5, 0xed, 0xdf, 0x8f, 0xe4, 0x56, 0xec, 0xad, 0xc1, - 0xdf, 0x76, 0xce, 0x39, 0x24, 0x01, 0x78, 0x62, 0x07, 0x3a, 0x7c, 0x3b, - 0x48, 0x2b, 0xb3, 0xec, 0x34, 0x87, 0xfb, 0x82, 0xae, 0x63, 0x0a, 0x74, - 0x26, 0x6a, 0xde, 0xca, 0x06, 0xc1, 0x54, 0x24, 0x29, 0xb5, 0x04, 0x73, - 0x1f, 0x03, 0x49, 0x8b, 0xcd, 0x8a, 0xf6, 0xd9, 0xd3, 0x64, 0xd6, 0x20, - 0xea, 0x8b, 0x18, 0xf4, 0x9a, 0x6b, 0x05, 0x39, 0x8b, 0x1f, 0xd5, 0x2a, - 0xd5, 0x63, 0x63, 0xa7, 0x91, 0xa2, 0x86, 0x80, 0x69, 0xc7, 0xe2, 0x13, - 0x29, 0xc0, 0x87, 0x79, 0x3f, 0xa7, 0x94, 0xa6, 0xb8, 0x31, 0x56, 0xd4, - 0x45, 0x7e, 0x09, 0xea, 0x48, 0x19, 0xcc, 0xa5, 0xca, 0x25, 0x14, 0x7b, - 0x6d, 0xb2, 0x88, 0x19, 0x5a, 0xa0, 0x79, 0x15, 0x1a, 0xb1, 0xa2, 0x24, - 0x49, 0xda, 0x70, 0x89, 0x1c, 0x98, 0x64, 0x46, 0xeb, 0x2b, 0x66, 0xcf, - 0xca, 0x34, 0x01, 0x8e, 0xb9, 0x7e, 0x60, 0xf2, 0x7a, 0x60, 0x40, 0xdd, - 0x38, 0x11, 0xe3, 0xb8, 0x5e, 0x25, 0xa2, 0x69, 0xde, 0x42, 0x9b, 0xd1, - 0x98, 0xfb, 0x28, 0x56, 0xa1, 0xc5, 0x23, 0xd1, 0x36, 0x34, 0xa7, 0xde, - 0x08, 0xd4, 0x58, 0xe9, 0x30, 0x98, 0x85, 0x87, 0xaf, 0xca, 0x90, 0xc7, - 0xfa, 0x01, 0x34, 0xdd, 0x98, 0xc2, 0x85, 0xf4, 0xfd, 0xeb, 0xfa, 0x75, - 0x5f, 0xa5, 0xb1, 0x10, 0xae, 0xff, 0xfd, 0xba, 0x76, 0xaf, 0xfe, 0x24, - 0xda, 0x11, 0x6a, 0x11, 0x2d, 0x6d, 0x62, 0x63, 0xc5, 0x8d, 0x5f, 0x44, - 0xfe, 0x4f, 0xa0, 0xe8, 0x8c, 0x5b, 0x9c, 0x5d, 0xfe, 0xf8, 0xec, 0x2f, - 0x5f, 0x9b, 0x7a, 0x3c, 0x0e, 0x05, 0x4d, 0x57, 0xa2, 0x89, 0x73, 0xc5, - 0x24, 0x41, 0xf4, 0x3a, 0x22, 0x1b, 0xc7, 0x7f, 0xfb, 0xba, 0xd1, 0x74, - 0xfc, 0x4f, 0xaf, 0xdb, 0x2f, 0xc3, 0xf8, 0x4f, 0x00, 0xb3, 0x6a, 0x25, - 0xb6, 0xf7, 0x4a, 0xe1, 0x84, 0xfa, 0x29, 0xf8, 0x31, 0x4a, 0x3f, 0x06, - 0xfe, 0xc1, 0x82, 0x90, 0xe0, 0x5c, 0x07, 0xfb, 0xbb, 0x87, 0xb9, 0x91, - 0xc6, 0x21, 0x10, 0x4b, 0x80, 0x0a, 0xf6, 0xa7, 0xdc, 0x5c, 0x7f, 0xa9, - 0x62, 0x33, 0x95, 0x43, 0x2f, 0x17, 0xbd, 0x51, 0x6e, 0x4b, 0x21, 0x0a, - 0x02, 0x15, 0xc8, 0xef, 0x2f, 0xa7, 0xb0, 0xf7, 0x1e, 0xae, 0xce, 0xe3, - 0xc4, 0xe6, 0x08, 0x9f, 0x6a, 0xd7, 0x5a, 0x70, 0x80, 0xdf, 0x3a, 0xff, - 0x6d, 0xa5, 0xaa, 0xde, 0xfc, 0xe9, 0x3e, 0x14, 0xb6, 0x20, 0xd6, 0x95, - 0x61, 0xb4, 0xfe, 0xec, 0x39, 0x59, 0xd8, 0x43, 0xa9, 0x27, 0x11, 0xd6, - 0xe8, 0x75, 0xff, 0x9a, 0xc2, 0x64, 0xa7, 0x76, 0x2b, 0xf0, 0xb5, 0x0d, - 0xa6, 0x7d, 0xdf, 0xe7, 0xb8, 0xdf, 0x9e, 0xb2, 0x38, 0xab, 0x57, 0xcf, - 0x41, 0x1a, 0x6f, 0xc2, 0x1c, 0x86, 0xd9, 0x58, 0x19, 0x04, 0xe9, 0xbe, - 0x6b, 0xb9, 0x96, 0xb4, 0x8d, 0x50, 0x6b, 0x59, 0x67, 0xc6, 0xa6, 0xf5, - 0x6b, 0x2c, 0x89, 0xc1, 0x4e, 0x7c, 0x3d, 0x9e, 0x99, 0xc6, 0xf2, 0x75, - 0xd2, 0x7d, 0x4c, 0x0a, 0x9a, 0x26, 0xc1, 0x56, 0x66, 0x25, 0x24, 0xdc, - 0x42, 0xd8, 0xc6, 0xb2, 0xd0, 0xe1, 0xcd, 0x07, 0x29, 0xbe, 0x92, 0x26, - 0x26, 0x35, 0xed, 0x2f, 0xea, 0xb4, 0x52, 0xfe, 0xcc, 0x1a, 0xdf, 0xd2, - 0xe8, 0xde, 0x59, 0x77, 0x55, 0xe5, 0x26, 0xae, 0x38, 0x9e, 0xf2, 0xf3, - 0x65, 0x72, 0xfc, 0x25, 0xa8, 0xfb, 0x22, 0xda, 0x9a, 0x24, 0x8f, 0x73, - 0xc9, 0xcc, 0x2d, 0x62, 0xc1, 0xa5, 0x97, 0x49, 0x2e, 0x02, 0xb4, 0x05, - 0x13, 0x84, 0x02, 0x2a, 0xf4, 0x53, 0x60, 0x87, 0x82, 0x73, 0xfc, 0x6e, - 0x91, 0x1a, 0x3c, 0x28, 0xaf, 0x3e, 0xd5, 0xc8, 0xfe, 0x11, 0x39, 0x38, - 0x4c, 0x1e, 0xeb, 0x45, 0x3e, 0xca, 0x79, 0x91, 0x47, 0x89, 0x8d, 0xaf, - 0xb4, 0xea, 0xfe, 0xd7, 0x4d, 0x4f, 0x44, 0x06, 0x3e, 0x69, 0xa5, 0x1b, - 0x9a, 0x58, 0x2f, 0x68, 0xc1, 0x98, 0xd8, 0xe4, 0xfa, 0xac, 0xbd, 0x74, - 0x9e, 0x7a, 0x04, 0xa7, 0x17, 0x57, 0xca, 0x3e, 0x37, 0x17, 0x20, 0xd9, - 0x6a, 0x8e, 0x48, 0xec, 0x0f, 0x8a, 0x20, 0x9b, 0x1f, 0xa4, 0x6b, 0xbc, - 0xf2, 0x51, 0xac, 0xd6, 0x51, 0xb7, 0x36, 0x6b, 0x0d, 0x63, 0x1d, 0x0e, - 0x30, 0xd1, 0xd3, 0x87, 0xbb, 0x77, 0xd5, 0xa7, 0xdd, 0x7b, 0xcd, 0xf0, - 0xe7, 0x53, 0xe2, 0xc9, 0x7f, 0x9b, 0xaa, 0x7c, 0x50, 0x86, 0x40, 0x8e, - 0x4e, 0xeb, 0xf6, 0x4c, 0x86, 0xe7, 0xd9, 0xf9, 0xec, 0x20, 0x8b, 0x14, - 0xef, 0xf1, 0xce, 0xc9, 0xa0, 0x45, 0x8a, 0x1d, 0x80, 0x92, 0xed, 0xe8, - 0xbc, 0xcf, 0x61, 0xcc, 0x0a, 0x10, 0x95, 0x85, 0x33, 0x79, 0x9e, 0xdb, - 0x19, 0x4d, 0xac, 0x58, 0xa9, 0x24, 0x12, 0x41, 0x52, 0x97, 0x55, 0x71, - 0x9f, 0x48, 0xa3, 0xec, 0xb4, 0x72, 0xee, 0xa2, 0xe3, 0xd9, 0x32, 0x09, - 0x2d, 0x29, 0x88, 0x3f, 0x25, 0x4f, 0xfd, 0xa0, 0x21, 0xf1, 0x07, 0xb0, - 0xd4, 0x18, 0x9e, 0x36, 0xd1, 0xbd, 0xb7, 0xd5, 0x1c, 0xb2, 0x6a, 0x4c, - 0x5b, 0x1d, 0x33, 0x03, 0x33, 0x4e, 0x8f, 0x18, 0xfd, 0x72, 0x9e, 0x2e, - 0x70, 0xec, 0x71, 0x18, 0x61, 0x2a, 0xaa, 0xb8, 0x56, 0x03, 0x04, 0x69, - 0x33, 0xa9, 0x57, 0x57, 0xdc, 0x0d, 0xfd, 0x46, 0x0d, 0xba, 0x40, 0x77, - 0xf5, 0x80, 0xb7, 0x0f, 0x86, 0xb1, 0x1c, 0x2f, 0x83, 0xb1, 0xcd, 0x32, - 0x5f, 0x77, 0x9f, 0x70, 0x16, 0x8d, 0x6a, 0x6d, 0x32, 0xc7, 0xae, 0x01, - 0x20, 0x9f, 0x93, 0xbf, 0xb6, 0xd4, 0x2d, 0xdf, 0x4f, 0x72, 0x18, 0x7d, - 0x87, 0x3b, 0xde, 0xe1, 0x55, 0xbe, 0xb0, 0xa1, 0x3d, 0xf5, 0x67, 0xcf, - 0x26, 0x0b, 0x96, 0x4e, 0x38, 0xca, 0xf3, 0x9c, 0xf9, 0x74, 0x7b, 0x4f, - 0x37, 0x39, 0x9f, 0x1d, 0x13, 0xde, 0x5a, 0xe2, 0x70, 0x31, 0x51, 0x96, - 0x0f, 0xb8, 0xf3, 0x74, 0x06, 0x99, 0xd1, 0x34, 0x94, 0xee, 0xb6, 0x01, - 0x23, 0x07, 0x7c, 0xb4, 0x9a, 0x0c, 0x9e, 0x8c, 0xf0, 0x54, 0xb6, 0x83, - 0x00, 0x63, 0xea, 0x30, 0x8c, 0xdc, 0xcc, 0x48, 0xb1, 0xcc, 0xb1, 0xe6, - 0x90, 0xf9, 0x40, 0x8e, 0xf8, 0x7b, 0x84, 0x94, 0x6f, 0x1c, 0x8d, 0xbd, - 0x73, 0xed, 0x83, 0xcd, 0xfc, 0x30, 0xac, 0x03, 0xd7, 0x94, 0x62, 0x4c, - 0xaa, 0x79, 0xfd, 0xcc, 0x64, 0x3c, 0x62, 0x47, 0x51, 0xfb, 0x18, 0x9f, - 0x76, 0x14, 0x7e, 0xb4, 0xce, 0x47, 0x23, 0x5f, 0x06, 0x02, 0x89, 0x37, - 0x80, 0x88, 0xc6, 0xab, 0x89, 0x5c, 0xc5, 0xf5, 0x4d, 0x2a, 0x13, 0x63, - 0xc4, 0xfa, 0x2d, 0xb1, 0x07, 0x2b, 0xe3, 0x19, 0x63, 0x98, 0xbe, 0x5d, - 0x08, 0x8b, 0x8e, 0x70, 0xa7, 0x5d, 0x55, 0x7b, 0xa6, 0x87, 0x80, 0xaf, - 0x2f, 0x6e, 0x14, 0xb8, 0x8c, 0xff, 0xff, 0x8c, 0x4e, 0x3e, 0xdc, 0x0d, - 0x06, 0x65, 0x72, 0x24, 0xc5, 0x28, 0x9f, 0xd4, 0xb1, 0x3d, 0xab, 0xf4, - 0x13, 0x90, 0x54, 0xed, 0x89, 0xa2, 0xea, 0x0a, 0x9c, 0x7a, 0x25, 0x93, - 0xef, 0x69, 0x9a, 0x3f, 0x38, 0x68, 0xbc, 0xfe, 0x2c, 0x37, 0x85, 0xaa, - 0x21, 0xbd, 0x37, 0x09, 0x22, 0x37, 0xf2, 0x36, 0xe3, 0x05, 0x37, 0x1b, - 0xf3, 0x9a, 0x5a, 0x5c, 0xf2, 0xfe, 0x44, 0x7b, 0x36, 0xee, 0x3e, 0x2f, - 0xbb, 0x60, 0x6e, 0x6d, 0x21, 0x4e, 0x15, 0x92, 0xf6, 0x1f, 0x9b, 0x32, - 0x83, 0x58, 0x8c, 0x6e, 0x9c, 0xa2, 0xab, 0x4e, 0x61, 0xae, 0xc2, 0xc6, - 0x98, 0x14, 0x1a, 0x96, 0x41, 0xa0, 0x0f, 0x70, 0x4c, 0xfd, 0xb9, 0x1a, - 0xb1, 0x53, 0x9c, 0xdf, 0x6a, 0xab, 0xe3, 0xa4, 0x69, 0x23, 0xd7, 0xb1, - 0x2d, 0x40, 0xd1, 0x38, 0xb8, 0x6a, 0xbc, 0xe5, 0x33, 0xd3, 0x04, 0x37, - 0x6a, 0xac, 0x28, 0xf0, 0x0e, 0xeb, 0x4f, 0xc4, 0x75, 0xef, 0x36, 0xf9, - 0xaf, 0xfe, 0x1a, 0xd0, 0xcf, 0x99, 0x54, 0xb7, 0xd5, 0x69, 0xb2, 0xff, - 0x83, 0xa0, 0xe8, 0x0b, 0xef, 0x1e, 0x47, 0x8b, 0x72, 0xb2, 0xd3, 0x97, - 0x0b, 0xc8, 0x55, 0x5b, 0x7d, 0x66, 0x4d, 0xa4, 0x42, 0x61, 0xf7, 0x79, - 0x6c, 0x10, 0x22, 0x81, 0x41, 0x44, 0x91, 0x65, 0x29, 0x26, 0x17, 0x34, - 0x29, 0xb2, 0x39, 0xc0, 0xe2, 0x7b, 0xf9, 0xea, 0xc3, 0x15, 0xe7, 0xf4, - 0x19, 0x9e, 0x83, 0x84, 0xcb, 0x7d, 0x20, 0xae, 0x3a, 0xdf, 0xd4, 0x5d, - 0x30, 0x6a, 0xf3, 0x01, 0xe7, 0xa5, 0xe4, 0x99, 0x3d, 0x7e, 0xef, 0x57, - 0x0a, 0x53, 0xe9, 0x01, 0x93, 0x85, 0x24, 0x73, 0x56, 0x46, 0xbb, 0x4c, - 0x00, 0x12, 0xd5, 0xb3, 0xe8, 0x19, 0xfe, 0xc9, 0x23, 0xe0, 0xd4, 0xe4, - 0x59, 0x77, 0xc8, 0xca, 0x66, 0xde, 0x4e, 0x3e, 0xd4, 0xcb, 0x02, 0x6e, - 0x76, 0xe7, 0x51, 0x9e, 0x70, 0x2e, 0x77, 0xd9, 0xa6, 0xcd, 0x99, 0xf6, - 0xaf, 0x17, 0x4b, 0xfb, 0x6d, 0x61, 0x5d, 0x78, 0xb6, 0x42, 0x83, 0x6b, - 0x21, 0x83, 0x51, 0x91, 0x69, 0x27, 0x8c, 0xc6, 0xd7, 0x4a, 0xe7, 0xf6, - 0x00, 0x06, 0x17, 0x5b, 0xa5, 0x99, 0x87, 0x12, 0x38, 0x6e, 0x3a, 0x37, - 0xee, 0xad, 0x39, 0x97, 0xa8, 0x54, 0x93, 0x14, 0x13, 0xf4, 0x85, 0x34, - 0xfb, 0xea, 0xa6, 0xca, 0xaa, 0x57, 0x76, 0xd7, 0x05, 0x26, 0xc5, 0x32, - 0x7c, 0x7f, 0x52, 0xf7, 0x96, 0xec, 0x38, 0xc3, 0x77, 0x0d, 0x07, 0xde, - 0xe9, 0x83, 0x1f, 0x2c, 0x8a, 0x82, 0xac, 0x73, 0x10, 0x66, 0x7e, 0x44, - 0x16, 0x99, 0x05, 0xf7, 0x68, 0xc2, 0x5b, 0xd5, 0xa8, 0xb8, 0xac, 0xdd, - 0x98, 0x16, 0x21, 0xc3, 0xa5, 0xbc, 0xbe, 0xa9, 0xc2, 0xbf, 0xb0, 0x2d, - 0xf1, 0x31, 0xcd, 0x1a, 0x0b, 0x31, 0x90, 0xbf, 0x22, 0x94, 0x60, 0x36, - 0x86, 0xf6, 0x3d, 0x0e, 0x24, 0xea, 0x1a, 0xdc, 0x8b, 0x09, 0x83, 0xc2, - 0xf3, 0x80, 0x9c, 0xc1, 0x39, 0x9a, 0x6f, 0x65, 0xcf, 0x64, 0x9e, 0xa9, - 0x73, 0x87, 0x64, 0xce, 0xd4, 0xc2, 0xde, 0x8f, 0x25, 0x8a, 0x83, 0xa1, - 0xfa, 0xf5, 0x48, 0xd2, 0xbd, 0xc1, 0x4f, 0x58, 0x9b, 0x89, 0x12, 0x38, - 0x90, 0x54, 0xaf, 0xd4, 0x35, 0x6a, 0xa2, 0x42, 0x54, 0xdb, 0xb4, 0xa5, - 0xae, 0xd6, 0xd6, 0xbd, 0xe7, 0x4f, 0xda, 0xc8, 0xce, 0xd8, 0x24, 0x62, - 0xb6, 0x0a, 0x80, 0x2b, 0x41, 0x30, 0xfe, 0x14, 0x79, 0xa1, 0xaa, 0xb2, - 0xfa, 0xa8, 0x74, 0x1e, 0x22, 0x77, 0x1e, 0x05, 0xaf, 0xb0, 0x32, 0xce, - 0xba, 0x1b, 0xb5, 0xb5, 0x10, 0xab, 0x59, 0x7a, 0x90, 0x4e, 0xd4, 0x89, - 0x62, 0x5f, 0xcc, 0x0e, 0x32, 0x29, 0x17, 0x24, 0x41, 0x94, 0x27, 0x9f, - 0xff, 0x8a, 0xe4, 0x01, 0xb7, 0xc5, 0xdb, 0x94, 0xaf, 0x84, 0x3a, 0xcc, - 0x13, 0x50, 0x25, 0xb1, 0x2a, 0x87, 0x2b, 0x32, 0x84, 0x56, 0x0c, 0xea, - 0xda, 0xf4, 0x6d, 0xb2, 0xf1, 0x5c, 0xed, 0xfc, 0x17, 0x6a, 0x9e, 0x1b, - 0x6b, 0xe3, 0x54, 0x3c, 0x05, 0xfa, 0x92, 0x73, 0x6d, 0x9b, 0xfe, 0xf8, - 0x7d, 0x7a, 0xfb, 0x95, 0x94, 0xe0, 0x30, 0xad, 0x7c, 0x20, 0xa6, 0xc4, - 0x9b, 0x9e, 0xd3, 0xe8, 0x76, 0x64, 0xea, 0x9b, 0x16, 0x08, 0x49, 0xab, - 0x26, 0xa3, 0xd4, 0xbe, 0x16, 0x15, 0x28, 0x79, 0x12, 0x2f, 0x2c, 0x64, - 0xa3, 0x1e, 0x12, 0xf1, 0xcd, 0xed, 0x88, 0xb1, 0x37, 0xc0, 0x4f, 0x4d, - 0x8d, 0xe4, 0xc9, 0x00, 0x00, 0x00, 0x82, 0x74, 0x71, 0xaf, 0xff, 0xff, - 0xfd, 0x85, 0x62, 0x25, 0xb6, 0x91, 0x1e, 0x44, 0x9b, 0x4b, 0x3b, 0xd9, - 0x55, 0x21, 0xb7, 0x25, 0x79, 0x39, 0x5f, 0xb1, 0x02, 0x3d, 0xe4, 0xb1, - 0x75, 0x32, 0x03, 0x0b, 0x95, 0xc9, 0xbd, 0x37, 0xe4, 0x8a, 0x26, 0xd7, - 0x3b, 0x1b, 0xed, 0x05, 0xee, 0x89, 0xba, 0xa3, 0xd2, 0x6f, 0xd3, 0x65, - 0x92, 0x56, 0x16, 0x29, 0x49, 0xb0, 0x10, 0x82, 0x17, 0xa1, 0x06, 0xc7, - 0xfc, 0xbb, 0x75, 0xaa, 0xfc, 0xd7, 0x68, 0x62, 0x85, 0x4e, 0xb7, 0x41, - 0x10, 0x45, 0xb1, 0x5f, 0xef, 0x48, 0xf7, 0x1e, 0x6c, 0x2d, 0x26, 0xa5, - 0x99, 0xd3, 0x6d, 0xae, 0x52, 0xc4, 0x0a, 0xd1, 0x14, 0x1b, 0x02, 0x7f, - 0xd8, 0x16, 0xeb, 0xcd, 0x59, 0x7f, 0xec, 0x5e, 0xc6, 0x94, 0x22, 0xe1, - 0xcd, 0x09, 0x86, 0x0a, 0x0d, 0x73, 0xed, 0x09, 0x97, 0x88, 0x3c, 0x0e, - 0x54, 0x9b, 0xff, 0x77, 0x41, 0x32, 0x9e, 0x68, 0x3d, 0xcf, 0x8b, 0xda, - 0x47, 0x75, 0x8b, 0x03, 0xb9, 0x62, 0x81, 0xa5, 0xce, 0x37, 0xa3, 0x3f, - 0x3f, 0x87, 0xfe, 0x1b, 0xdd, 0x2a, 0xdb, 0x1c, 0x98, 0x41, 0x28, 0xd0, - 0xac, 0xe1, 0x9f, 0x80, 0xb3, 0x4c, 0x4b, 0xe9, 0x2b, 0xa9, 0xdd, 0x25, - 0x25, 0x14, 0x7c, 0xe9, 0x5f, 0x89, 0x91, 0x6b, 0xec, 0x6f, 0xf7, 0x8c, - 0xab, 0x8c, 0x8a, 0x28, 0x26, 0x79, 0x36, 0xbf, 0xbb, 0xfe, 0x4d, 0x46, - 0x59, 0x75, 0x98, 0xb3, 0x37, 0xe5, 0x1b, 0x3d, 0x4c, 0xdc, 0xf4, 0x9d, - 0x7e, 0xdc, 0xdf, 0x73, 0x47, 0x94, 0xcd, 0x32, 0x4a, 0x2a, 0x31, 0x6f, - 0x91, 0x92, 0x31, 0xba, 0xbc, 0xc2, 0xfb, 0x54, 0xb9, 0x0e, 0x61, 0x1a, - 0x91, 0xa7, 0x83, 0x0f, 0xee, 0xc7, 0x72, 0xd6, 0x69, 0x1b, 0x5a, 0xf7, - 0x8e, 0x5e, 0x7f, 0xc2, 0xfe, 0x3a, 0xb3, 0x7d, 0x1d, 0x91, 0x44, 0xa8, - 0x29, 0x05, 0x8f, 0x11, 0x23, 0x9b, 0xda, 0xf0, 0xc8, 0x6c, 0xf2, 0x43, - 0x81, 0x70, 0xb4, 0x98, 0x84, 0xa7, 0x83, 0x0b, 0x14, 0x22, 0xfb, 0xe9, - 0x16, 0x96, 0xbc, 0xe2, 0x47, 0x33, 0xcc, 0x3a, 0x62, 0xf9, 0xc9, 0xdf, - 0x89, 0x65, 0xcd, 0x61, 0xfe, 0x7a, 0x56, 0xe5, 0xd1, 0x5a, 0x09, 0x64, - 0xbf, 0x7b, 0x29, 0x58, 0x1b, 0x25, 0x71, 0x7e, 0xfb, 0x19, 0x00, 0x4c, - 0x85, 0x74, 0xe2, 0xe0, 0x9b, 0x59, 0x1b, 0x84, 0xee, 0xe2, 0x42, 0x75, - 0xc3, 0x76, 0x29, 0xf3, 0x79, 0x0f, 0xe0, 0x4a, 0x42, 0xbd, 0x28, 0x70, - 0xc9, 0x86, 0x6e, 0x8f, 0xfe, 0x28, 0xa4, 0xe8, 0x97, 0xeb, 0xaa, 0xb2, - 0x3e, 0x04, 0x95, 0xd8, 0x7f, 0x4e, 0x49, 0x7a, 0x95, 0x9a, 0xea, 0xd2, - 0x92, 0x98, 0xcd, 0xe2, 0x6b, 0x6d, 0xf0, 0xd1, 0xb2, 0xae, 0x52, 0x6e, - 0x9b, 0xce, 0x24, 0xa1, 0x66, 0x52, 0x66, 0xd1, 0x6b, 0xbd, 0xb3, 0xc7, - 0x47, 0x91, 0x30, 0x18, 0x13, 0xd0, 0xa7, 0xe3, 0x61, 0xd7, 0x0c, 0x51, - 0x35, 0x6f, 0xb6, 0xe8, 0xfe, 0xf9, 0x50, 0x24, 0xc0, 0x56, 0x8b, 0x18, - 0xe3, 0xae, 0x4e, 0x1b, 0x08, 0x8e, 0x09, 0xa2, 0x1c, 0xeb, 0x97, 0x18, - 0xe3, 0x0c, 0x4b, 0x62, 0xf3, 0xea, 0x76, 0xf8, 0x82, 0xb9, 0xc1, 0xc2, - 0x5a, 0x92, 0x42, 0x2d, 0x2d, 0x04, 0xef, 0x06, 0x86, 0x8f, 0xb9, 0xda, - 0x0a, 0x31, 0x3c, 0x14, 0xf5, 0x01, 0x6e, 0x88, 0xc5, 0x70, 0xeb, 0xaf, - 0xad, 0x33, 0x21, 0x18, 0xe8, 0xbd, 0xe9, 0x32, 0x63, 0x0a, 0xe8, 0xf0, - 0xfe, 0xdc, 0x14, 0x4d, 0x5a, 0x9d, 0xc6, 0xd4, 0xad, 0x24, 0x1f, 0x3c, - 0xe5, 0xdf, 0x14, 0x1d, 0xd4, 0x32, 0xc5, 0x25, 0x78, 0xbf, 0x67, 0x84, - 0x37, 0x51, 0x59, 0x41, 0xb9, 0x65, 0x22, 0xf1, 0x44, 0xfe, 0x12, 0x60, - 0xab, 0x47, 0x00, 0x79, 0x50, 0x0a, 0x3a, 0x26, 0x2b, 0x92, 0xb7, 0x0b, - 0xf0, 0x6a, 0xee, 0xc5, 0x41, 0x18, 0x98, 0x90, 0xe0, 0xd5, 0x1c, 0xef, - 0x78, 0xa5, 0x6f, 0xeb, 0x13, 0xb5, 0x7f, 0xa6, 0xeb, 0x06, 0x6c, 0xf1, - 0xad, 0x44, 0xaf, 0x8b, 0xc2, 0x74, 0x9b, 0x39, 0x99, 0xda, 0xee, 0xfe, - 0x07, 0x54, 0x9f, 0xc3, 0x05, 0x5e, 0x2d, 0x0a, 0x13, 0x1c, 0x50, 0x90, - 0x43, 0x44, 0x5a, 0x6c, 0x34, 0xe5, 0xec, 0x71, 0x4e, 0x37, 0x5c, 0xa4, - 0xa9, 0x84, 0x48, 0x80, 0x3d, 0xb6, 0x69, 0xa2, 0x84, 0x2d, 0xe7, 0xbd, - 0x05, 0x9d, 0xd7, 0x40, 0x05, 0xf6, 0x69, 0x06, 0xf5, 0x16, 0x3f, 0xed, - 0x09, 0xa0, 0x3e, 0x5b, 0x5c, 0x61, 0x7c, 0x6b, 0xc6, 0xb8, 0x77, 0x77, - 0x24, 0x12, 0x72, 0xfc, 0xf3, 0xf7, 0x31, 0xce, 0x04, 0xe9, 0xd7, 0x5a, - 0x84, 0x2e, 0xaf, 0x69, 0x04, 0x58, 0x38, 0x4b, 0xf4, 0x20, 0x3e, 0xf6, - 0x25, 0x89, 0x5f, 0xb3, 0x02, 0x72, 0x59, 0x4b, 0x82, 0x9f, 0x98, 0x3a, - 0x09, 0x32, 0xb6, 0x94, 0xdc, 0x52, 0xbb, 0xe0, 0x5f, 0xef, 0xd2, 0x7e, - 0x5b, 0x13, 0x9d, 0x96, 0x12, 0x10, 0xbf, 0x01, 0xb4, 0x31, 0xcc, 0xfd, - 0xee, 0x27, 0x9c, 0xdc, 0x56, 0xae, 0x9a, 0x94, 0xb9, 0xde, 0xcf, 0xf4, - 0x39, 0x80, 0x8f, 0xbe, 0x3e, 0xc9, 0x94, 0xe5, 0xaa, 0xb7, 0x77, 0xd0, - 0xb7, 0xaf, 0x83, 0xee, 0x3c, 0xa3, 0xe2, 0x22, 0xd8, 0xf1, 0x48, 0xcd, - 0xfe, 0x72, 0x2f, 0x7e, 0x36, 0xe9, 0x5e, 0xb8, 0x27, 0x05, 0xe6, 0x18, - 0xb9, 0x5d, 0x78, 0x5e, 0x01, 0x59, 0xd1, 0xe8, 0x3f, 0x5a, 0xf9, 0xaf, - 0x93, 0x68, 0x9f, 0x8e, 0xdd, 0xc6, 0xcb, 0x7c, 0xbe, 0x1e, 0x51, 0x9e, - 0x64, 0x48, 0xd0, 0x13, 0xfb, 0x63, 0xfe, 0xa5, 0x5c, 0xcb, 0x79, 0xb6, - 0xc7, 0xac, 0xe6, 0x89, 0xb9, 0x08, 0x8a, 0xb6, 0x3e, 0x63, 0xf2, 0x17, - 0x2c, 0x34, 0xa4, 0x30, 0xb7, 0x06, 0x41, 0x7c, 0x04, 0xa8, 0xf9, 0xe5, - 0x5b, 0x6f, 0x5a, 0x9d, 0x73, 0x5a, 0x60, 0x7a, 0x60, 0x1f, 0x7c, 0x32, - 0x5a, 0xa3, 0xb1, 0xc7, 0xf8, 0x20, 0x91, 0xb1, 0x85, 0xb8, 0xd3, 0x3a, - 0xd3, 0x7e, 0x55, 0x60, 0xba, 0x46, 0x43, 0x8c, 0x46, 0xdf, 0xa9, 0x3e, - 0xb8, 0x13, 0x52, 0x2c, 0x5c, 0xad, 0x4d, 0x26, 0x54, 0x87, 0x63, 0x3c, - 0x9a, 0x12, 0x95, 0x4c, 0x21, 0x28, 0xbc, 0xc5, 0xa1, 0x24, 0xc0, 0x11, - 0x9d, 0x28, 0x50, 0xb2, 0x10, 0xd9, 0x7f, 0x69, 0xaf, 0xc0, 0x14, 0xe6, - 0xeb, 0x73, 0xfc, 0xb8, 0x90, 0xb5, 0x06, 0x49, 0xc9, 0x73, 0x99, 0xfb, - 0x6e, 0x4d, 0x85, 0x0f, 0x1c, 0x76, 0x5b, 0x9e, 0x67, 0x22, 0x3a, 0x9e, - 0x85, 0xf6, 0x9f, 0x76, 0xe7, 0x55, 0xeb, 0xe6, 0xba, 0x16, 0xa4, 0x7a, - 0x73, 0xa7, 0xe1, 0xd9, 0xf9, 0x3c, 0x2f, 0xc1, 0x48, 0x46, 0xc2, 0x0a, - 0x0a, 0xd3, 0xd2, 0x59, 0x7c, 0x6e, 0xaf, 0xf0, 0xa5, 0x28, 0x62, 0xd1, - 0xb3, 0xd3, 0xe9, 0xf1, 0xcc, 0x2c, 0x1c, 0x04, 0xe6, 0x92, 0x2b, 0xce, - 0x8f, 0xbd, 0xce, 0x1f, 0x55, 0xc3, 0x29, 0xad, 0x24, 0x01, 0xfa, 0x3f, - 0xba, 0x88, 0x35, 0x74, 0x53, 0x56, 0xda, 0x50, 0x68, 0x66, 0x66, 0xb9, - 0xe2, 0x70, 0x70, 0x68, 0x1b, 0x6b, 0x16, 0xc4, 0xef, 0x8e, 0x58, 0x10, - 0x21, 0x37, 0x54, 0x1a, 0x23, 0xa3, 0x1e, 0x39, 0x56, 0xb3, 0x5a, 0x18, - 0x38, 0xf1, 0xef, 0xb4, 0x9a, 0xdc, 0x00, 0x0c, 0xcf, 0xcc, 0x0b, 0xc2, - 0xf1, 0xea, 0x05, 0xf7, 0xd9, 0xe8, 0xe1, 0xeb, 0x16, 0x28, 0x7f, 0x6d, - 0x0d, 0x2c, 0xfb, 0x8e, 0x71, 0x41, 0x99, 0xe8, 0x53, 0x1b, 0x4f, 0xbf, - 0xff, 0x1d, 0x4b, 0xfd, 0x83, 0xe1, 0x2a, 0x58, 0x96, 0xe8, 0x31, 0x55, - 0xd2, 0xb8, 0x39, 0xd8, 0x18, 0x26, 0x91, 0xfb, 0xac, 0x76, 0xbd, 0x52, - 0x65, 0xac, 0x37, 0xef, 0x3c, 0xde, 0x2f, 0xb0, 0x76, 0x55, 0xd4, 0xeb, - 0xd1, 0x1b, 0x1a, 0x3f, 0x43, 0x22, 0x35, 0x78, 0x43, 0x45, 0xb5, 0xaf, - 0x9b, 0x04, 0x11, 0x24, 0x4f, 0xe8, 0xde, 0xdd, 0x03, 0xd0, 0x5e, 0x50, - 0xd6, 0x1f, 0x7c, 0x4a, 0xc4, 0x9d, 0xb0, 0x9c, 0x85, 0x09, 0xb1, 0x89, - 0x18, 0x7f, 0x4a, 0x85, 0x9f, 0x7d, 0x2a, 0xfe, 0x7a, 0xb7, 0xfa, 0x66, - 0xd3, 0xe4, 0x28, 0x91, 0xea, 0xb7, 0xd9, 0x8a, 0x11, 0x8f, 0x6c, 0x25, - 0x65, 0x1a, 0x99, 0xb2, 0x0b, 0x4e, 0x20, 0x97, 0x9b, 0x43, 0x44, 0x6c, - 0xc0, 0xe6, 0x81, 0x76, 0x95, 0xd9, 0xd8, 0x01, 0x3c, 0xc9, 0x6f, 0x1f, - 0xf3, 0xfa, 0x0f, 0x13, 0x1b, 0x1f, 0xaa, 0x84, 0x5e, 0xbe, 0xec, 0x4e, - 0xb3, 0x2e, 0x0b, 0x16, 0x41, 0x2d, 0xfb, 0xb9, 0x9b, 0x59, 0xb7, 0x8d, - 0xd9, 0x61, 0xa3, 0x88, 0x7f, 0xc2, 0x4d, 0x87, 0x65, 0xc0, 0xf1, 0x67, - 0xf7, 0xc0, 0x0d, 0xc5, 0xcd, 0x56, 0x50, 0xc3, 0x93, 0xd7, 0x34, 0xb1, - 0xae, 0xb4, 0x47, 0x7b, 0xf4, 0x3d, 0x55, 0x99, 0xb7, 0x92, 0xc5, 0x34, - 0x94, 0x7b, 0x76, 0x1f, 0x26, 0x70, 0x0a, 0xce, 0xa8, 0xd7, 0x9f, 0x1d, - 0x63, 0x46, 0xcd, 0x0a, 0x36, 0x0b, 0x8c, 0x98, 0xd9, 0xc4, 0x1b, 0x16, - 0x69, 0x60, 0x47, 0xeb, 0x5a, 0xf1, 0xec, 0x33, 0x88, 0xac, 0x5c, 0x45, - 0xc0, 0x5a, 0x55, 0x53, 0x59, 0x3d, 0xee, 0xc1, 0xc5, 0xfa, 0x82, 0xe5, - 0x44, 0x83, 0xca, 0xa7, 0x0b, 0x1d, 0xc2, 0xaa, 0x6f, 0xe9, 0x73, 0x0c, - 0xf1, 0x37, 0x32, 0xab, 0xea, 0xe7, 0x08, 0x90, 0x52, 0x01, 0x6e, 0x80, - 0x8f, 0x03, 0x59, 0x3d, 0xc4, 0xcf, 0x2f, 0x1b, 0xce, 0xd8, 0x95, 0x23, - 0xfc, 0x9e, 0x8e, 0x0f, 0x6a, 0x20, 0xe8, 0xcf, 0x3f, 0xc6, 0x32, 0x42, - 0x74, 0x7f, 0x31, 0xef, 0x2d, 0xba, 0x52, 0x59, 0xfc, 0x9e, 0x0d, 0x86, - 0x4d, 0xd5, 0x1b, 0x94, 0x5a, 0x61, 0xc7, 0x9f, 0x06, 0x96, 0x6a, 0xaa, - 0x39, 0x2a, 0x94, 0x44, 0xf0, 0x7f, 0x67, 0x5b, 0x50, 0x93, 0xaa, 0xdf, - 0xcc, 0x40, 0xb9, 0x8a, 0xb8, 0x27, 0x41, 0x95, 0xcf, 0x91, 0xcf, 0x59, - 0xf6, 0x57, 0xc9, 0x55, 0x70, 0xae, 0xd7, 0xb6, 0x26, 0x02, 0xd2, 0x41, - 0x53, 0x72, 0xc8, 0xb3, 0xc7, 0x97, 0x39, 0x3d, 0x6a, 0x58, 0x60, 0xc1, - 0x14, 0xd2, 0x8b, 0x0a, 0x0a, 0x4a, 0xbe, 0xb2, 0xbe, 0x40, 0xc6, 0x4a, - 0x3c, 0xd2, 0xbd, 0xc6, 0x1a, 0x71, 0x2f, 0x8a, 0x76, 0x4d, 0x45, 0xe0, - 0xcb, 0x6d, 0xec, 0x74, 0x15, 0x24, 0x93, 0xf4, 0xf8, 0xcc, 0x5f, 0x27, - 0x4c, 0xe7, 0x29, 0x38, 0x4d, 0xa0, 0x1f, 0x7e, 0x8e, 0x8f, 0x36, 0x9c, - 0x2d, 0x3c, 0xd5, 0x90, 0x05, 0x77, 0x85, 0xd0, 0x58, 0xb9, 0x65, 0xd0, - 0x4b, 0x5c, 0x27, 0xe0, 0xc9, 0xff, 0x90, 0xfe, 0x8e, 0xd5, 0xf9, 0xf7, - 0x62, 0xf5, 0xa4, 0xbe, 0x58, 0xa2, 0x82, 0x29, 0x8a, 0x71, 0xd1, 0x68, - 0xba, 0x7e, 0x72, 0x02, 0x52, 0xeb, 0xf7, 0x01, 0x6b, 0x7b, 0x29, 0x93, - 0x4b, 0xd2, 0x84, 0x1f, 0xdf, 0x4b, 0x6a, 0x24, 0xd8, 0xc5, 0xd6, 0x13, - 0x94, 0xab, 0x7b, 0xfc, 0x17, 0xa0, 0x21, 0xf1, 0xbe, 0xcd, 0xba, 0x9b, - 0xcb, 0xe0, 0x3b, 0xda, 0x45, 0x0a, 0x84, 0x45, 0x99, 0x20, 0x9a, 0x30, - 0x23, 0xd8, 0xd8, 0x91, 0xaa, 0xb7, 0x3f, 0x30, 0xc9, 0x6e, 0xcb, 0x4d, - 0xdf, 0x8a, 0x9d, 0x75, 0x35, 0x8a, 0xbb, 0x93, 0xe3, 0x0c, 0x97, 0x3e, - 0xdf, 0x8f, 0xc6, 0xec, 0x70, 0xc4, 0x39, 0x7f, 0x05, 0xae, 0xa6, 0x0f, - 0x23, 0x1f, 0xac, 0x0f, 0xdd, 0xe4, 0x1a, 0xa1, 0x16, 0x03, 0x0b, 0xd5, - 0xa5, 0x79, 0x7b, 0xab, 0x3d, 0xe1, 0xc1, 0xaa, 0x5e, 0x3b, 0xf5, 0x83, - 0x8e, 0x38, 0x8c, 0x95, 0x8f, 0xfc, 0xf0, 0xb5, 0x70, 0x90, 0xc3, 0xe6, - 0x26, 0x86, 0x1c, 0x0c, 0xd8, 0x71, 0x22, 0x63, 0xb7, 0xe1, 0x8a, 0x64, - 0xe0, 0x2e, 0x1b, 0x2d, 0x12, 0x30, 0x2a, 0x65, 0x32, 0xdb, 0xf0, 0x2d, - 0x3b, 0xbb, 0x35, 0xd7, 0x05, 0x9f, 0x87, 0x1e, 0xad, 0x46, 0xeb, 0x8c, - 0x41, 0x10, 0x8d, 0xb2, 0xb3, 0x49, 0x68, 0xb7, 0x40, 0x5a, 0xae, 0x92, - 0xa6, 0xba, 0xae, 0x18, 0xab, 0xfb, 0x01, 0xd7, 0xb4, 0xe4, 0xfc, 0xdd, - 0x49, 0xd7, 0x16, 0x81, 0xd5, 0xb0, 0x5c, 0xb6, 0x9d, 0xcf, 0x3f, 0x92, - 0x67, 0x6e, 0xa9, 0x0d, 0x49, 0x77, 0xd8, 0x27, 0x6d, 0xd4, 0xe3, 0xb0, - 0x53, 0xac, 0xbc, 0x0f, 0xeb, 0xe1, 0x4e, 0x5d, 0x99, 0xce, 0x55, 0x41, - 0xa7, 0x96, 0x94, 0x0b, 0xa9, 0x00, 0x4b, 0xb6, 0xb4, 0xca, 0x8a, 0xe9, - 0x8a, 0xfc, 0xbe, 0x1c, 0xf4, 0x6c, 0x47, 0x99, 0xe2, 0x4a, 0x68, 0xc5, - 0x4c, 0x36, 0x40, 0xf7, 0xc4, 0xf2, 0xe0, 0x22, 0xbb, 0x18, 0x40, 0x8e, - 0x9f, 0xe9, 0x27, 0xea, 0x40, 0x0f, 0x26, 0xef, 0x7c, 0xad, 0xf3, 0xab, - 0x5f, 0x29, 0xdc, 0x6b, 0x9f, 0xab, 0xc5, 0xf5, 0x2a, 0x6c, 0x8c, 0x20, - 0xf6, 0xc7, 0xc4, 0x5a, 0x42, 0x7c, 0x99, 0x66, 0x6b, 0x25, 0x59, 0xee, - 0xe0, 0xf9, 0x4b, 0x05, 0x53, 0xac, 0x24, 0xf2, 0x0c, 0x87, 0xa5, 0xcb, - 0x6c, 0xed, 0x3e, 0x47, 0xec, 0x7b, 0x36, 0x9f, 0xb4, 0xfe, 0x3f, 0xfa, - 0x6d, 0xa4, 0x6b, 0x4e, 0x6e, 0x55, 0x32, 0xec, 0xd2, 0x0d, 0xba, 0x34, - 0xdc, 0x88, 0x98, 0xed, 0x8b, 0x45, 0xea, 0x6d, 0xd5, 0x01, 0xa7, 0xae, - 0xcd, 0x76, 0x44, 0x66, 0x9d, 0x7f, 0x8a, 0xee, 0x27, 0x26, 0x1d, 0xd2, - 0xdb, 0x69, 0xcc, 0xa5, 0xbb, 0xe5, 0x26, 0x87, 0xb2, 0xd7, 0x88, 0xb5, - 0x47, 0xe9, 0xe9, 0xc8, 0xd5, 0xcf, 0xdd, 0xfa, 0x09, 0xcb, 0xec, 0x26, - 0xab, 0xaa, 0x47, 0x12, 0x70, 0x5f, 0xa3, 0x9d, 0x65, 0xbb, 0x49, 0xc1, - 0xf6, 0x1e, 0x48, 0xea, 0x20, 0x73, 0x67, 0xc0, 0xa6, 0x4a, 0x95, 0x7f, - 0x41, 0x9e, 0x89, 0xb5, 0x02, 0x4f, 0x68, 0x2f, 0x64, 0x24, 0xc4, 0x82, - 0x0e, 0xe0, 0xe2, 0x07, 0x35, 0x98, 0x78, 0x8e, 0xc3, 0xba, 0x0b, 0xef, - 0x77, 0xe6, 0xbf, 0xe3, 0x23, 0x7b, 0xb4, 0x59, 0x11, 0xa1, 0xb7, 0xfc, - 0xce, 0x8a, 0x52, 0xa8, 0x34, 0x3f, 0x70, 0x8a, 0xd4, 0x1d, 0x0f, 0x13, - 0xfa, 0xf2, 0x67, 0x36, 0x6a, 0x42, 0x08, 0x6e, 0xc9, 0x5d, 0x98, 0xd6, - 0xc4, 0xc9, 0x19, 0xd3, 0x2f, 0xcd, 0xbd, 0x65, 0x72, 0xeb, 0x41, 0x83, - 0x10, 0x66, 0x54, 0x16, 0x25, 0xe1, 0xca, 0x17, 0x4e, 0x1c, 0x7b, 0x9f, - 0xb0, 0xf9, 0x2b, 0x81, 0xe6, 0xb7, 0x2d, 0x8b, 0x5f, 0xf3, 0xb3, 0xca, - 0x97, 0x82, 0x4e, 0x25, 0x77, 0xfe, 0x16, 0x74, 0xd2, 0x35, 0x12, 0x15, - 0xec, 0x8c, 0x83, 0x0a, 0xca, 0x21, 0x31, 0x68, 0x8b, 0xd7, 0x58, 0x46, - 0x24, 0x31, 0x26, 0xf5, 0x90, 0xdb, 0x7b, 0x3f, 0xe5, 0xbb, 0x1a, 0x28, - 0x54, 0x89, 0xfe, 0xa2, 0x60, 0x04, 0xdc, 0x09, 0x11, 0x6c, 0x6c, 0x66, - 0x14, 0x69, 0x28, 0x81, 0x9d, 0x52, 0x63, 0xbf, 0x7f, 0xe9, 0xfe, 0x62, - 0x48, 0x1c, 0x0a, 0xfe, 0x19, 0x28, 0x09, 0x2a, 0x83, 0xdd, 0xa8, 0x82, - 0xeb, 0xe7, 0x6b, 0xe5, 0x23, 0x7c, 0x58, 0x3e, 0xcd, 0x38, 0x32, 0xbe, - 0x47, 0xe4, 0x28, 0x96, 0xce, 0x77, 0x70, 0x7e, 0x65, 0xd9, 0xb1, 0x1b, - 0xef, 0x7e, 0x51, 0xf6, 0xac, 0xf0, 0x6c, 0xe5, 0xc7, 0x38, 0x03, 0xf7, - 0x9d, 0xf1, 0x73, 0x56, 0x02, 0xf1, 0xc2, 0x0f, 0x41, 0x27, 0x9f, 0x67, - 0xd3, 0xa6, 0x30, 0x29, 0x81, 0x65, 0x0b, 0x02, 0xf7, 0xac, 0xad, 0x4a, - 0xb0, 0x90, 0x63, 0x20, 0x11, 0x74, 0x28, 0xdd, 0xb7, 0x12, 0x76, 0xe9, - 0xe9, 0xe3, 0xcf, 0xae, 0xeb, 0x01, 0xbf, 0xf3, 0x82, 0x80, 0xdb, 0x00, - 0x08, 0xff, 0xe6, 0xce, 0x09, 0xfb, 0xc9, 0x3d, 0x31, 0x65, 0x39, 0x54, - 0x4a, 0x45, 0xc0, 0x1a, 0x1c, 0xb2, 0x90, 0x1e, 0x57, 0x50, 0xef, 0x3c, - 0x60, 0x5d, 0x1e, 0x4e, 0xa6, 0x0f, 0xab, 0xbb, 0x41, 0x8d, 0xf7, 0x4c, - 0xa6, 0xd8, 0xb2, 0x97, 0xfa, 0xfa, 0x47, 0xcf, 0xa1, 0xe7, 0x57, 0x73, - 0x74, 0xa0, 0x01, 0xf6, 0x6e, 0x92, 0x7a, 0xc0, 0x3f, 0x0d, 0x92, 0x49, - 0xa8, 0x28, 0xfd, 0xa2, 0x78, 0x9a, 0x3e, 0x15, 0x8a, 0x8a, 0x07, 0x05, - 0xc3, 0xd0, 0x24, 0x12, 0x25, 0x9a, 0x5a, 0x42, 0xfa, 0xfe, 0x9e, 0x41, - 0x21, 0xb5, 0xa5, 0x29, 0xb3, 0x09, 0xcb, 0x16, 0x70, 0x0f, 0xd0, 0x17, - 0x2b, 0x9f, 0xda, 0xf3, 0x29, 0x48, 0xa2, 0x32, 0xd7, 0x40, 0xb0, 0x4c, - 0x14, 0x1b, 0x33, 0xcd, 0x5d, 0x4f, 0xbe, 0x3a, 0x4a, 0x34, 0x2b, 0x6b, - 0xbe, 0x17, 0xc0, 0x86, 0x07, 0xfd, 0x2e, 0xc4, 0x8e, 0xec, 0xd7, 0x74, - 0xd7, 0x3a, 0xf7, 0x86, 0x6b, 0x55, 0x8a, 0xf5, 0x66, 0xd8, 0xb0, 0x41, - 0x5e, 0xc9, 0x3c, 0x21, 0x8e, 0x64, 0x55, 0xef, 0x95, 0xa3, 0x18, 0x64, - 0x18, 0xda, 0x8c, 0xd1, 0x29, 0xc5, 0xf3, 0xf0, 0xad, 0x38, 0x5f, 0xda, - 0x24, 0xf9, 0x66, 0xe0, 0xeb, 0xdc, 0xcb, 0x8b, 0x8e, 0xc9, 0x09, 0x0c, - 0x0e, 0xdd, 0xf3, 0x15, 0x86, 0xc3, 0xec, 0x38, 0x05, 0xdf, 0x27, 0x83, - 0xd6, 0x04, 0x68, 0xf0, 0x56, 0xa1, 0xd2, 0x02, 0xf0, 0x84, 0x41, 0x0b, - 0xdb, 0x66, 0xb3, 0x73, 0x86, 0x66, 0xce, 0x88, 0x4f, 0xb3, 0x39, 0x9c, - 0xa8, 0xca, 0xcf, 0x50, 0xd8, 0xa5, 0x6d, 0x56, 0x7b, 0x2c, 0xad, 0xc1, - 0x20, 0xc8, 0xec, 0x15, 0x2a, 0x88, 0x11, 0x3b, 0xea, 0xb2, 0xe6, 0x96, - 0xf4, 0x32, 0xdf, 0xf9, 0xa9, 0xaa, 0x37, 0x97, 0x68, 0xec, 0x7e, 0x7f, - 0x2b, 0x18, 0x2f, 0x0c, 0x75, 0x86, 0x53, 0x9d, 0x76, 0xf5, 0x98, 0x82, - 0xbb, 0x50, 0x86, 0xce, 0xdc, 0x0f, 0x43, 0x95, 0x89, 0x0e, 0x7f, 0x91, - 0x1d, 0x93, 0x70, 0x35, 0xef, 0x6a, 0x8e, 0x1c, 0x38, 0x58, 0xa5, 0x8f, - 0x2d, 0x8f, 0xea, 0x54, 0x70, 0xf1, 0xc8, 0x03, 0xce, 0x50, 0xd2, 0x23, - 0xdd, 0xd4, 0xc1, 0xd2, 0x12, 0x74, 0xbe, 0x79, 0x94, 0x2c, 0x45, 0x67, - 0x67, 0x6b, 0xa3, 0x4d, 0x22, 0x95, 0x91, 0x30, 0x7c, 0x8a, 0x30, 0x10, - 0x0a, 0x42, 0xcd, 0xaa, 0x46, 0x11, 0xf7, 0xa1, 0x87, 0x24, 0xfc, 0x0c, - 0xbb, 0x0c, 0xb7, 0x6f, 0x7f, 0x19, 0x09, 0x0a, 0x6b, 0x08, 0xc4, 0x2e, - 0x24, 0xec, 0xf8, 0x40, 0x69, 0x00, 0xad, 0x46, 0xda, 0x51, 0x74, 0xf5, - 0x8d, 0x76, 0x3e, 0x88, 0xd5, 0x7a, 0x87, 0xc9, 0x11, 0xce, 0x20, 0xc6, - 0x5d, 0x86, 0x44, 0x4b, 0xb3, 0x7a, 0x14, 0x83, 0x3a, 0x99, 0x82, 0x54, - 0x28, 0x69, 0x7b, 0x08, 0x09, 0x1e, 0x69, 0x86, 0x34, 0x0c, 0xdc, 0x3f, - 0x0a, 0x68, 0xd4, 0xc8, 0x09, 0x2b, 0x3e, 0x97, 0x7a, 0xc0, 0x11, 0x58, - 0x9b, 0xc8, 0x9a, 0x53, 0x4f, 0xbe, 0x42, 0x9a, 0x2b, 0xca, 0x7a, 0x27, - 0xc6, 0x54, 0x5d, 0xaf, 0x88, 0x0e, 0xe3, 0x22, 0x84, 0xad, 0xc2, 0xf5, - 0x8c, 0xd0, 0x55, 0xfc, 0x2a, 0x33, 0xe4, 0xd7, 0xbe, 0xc5, 0xcd, 0xe8, - 0x51, 0x82, 0xe5, 0xb8, 0xdb, 0x8a, 0x10, 0xd4, 0x3f, 0x93, 0x60, 0xf2, - 0xe6, 0x50, 0x93, 0xce, 0x43, 0xb6, 0x80, 0xb2, 0x2f, 0xb7, 0xff, 0x1a, - 0xdb, 0xb2, 0x7d, 0x71, 0xa2, 0x30, 0x93, 0x01, 0x4b, 0xaa, 0x03, 0x1a, - 0xf2, 0xce, 0x2b, 0x17, 0xcf, 0xcb, 0xa0, 0xe0, 0x5e, 0x03, 0xab, 0x71, - 0xc5, 0x04, 0x8f, 0x7c, 0x71, 0xce, 0x36, 0x1c, 0x29, 0xed, 0xfe, 0x11, - 0x7a, 0xfe, 0x6c, 0x82, 0xc8, 0x8d, 0xdb, 0x68, 0x25, 0x9d, 0xd2, 0x0f, - 0xd0, 0xa0, 0x26, 0xea, 0x8d, 0x03, 0xb4, 0xcb, 0x34, 0x0a, 0xf2, 0x23, - 0x4f, 0xe3, 0x8b, 0x62, 0xde, 0x22, 0xf0, 0x0c, 0x84, 0x05, 0xb4, 0xcf, - 0xa8, 0xb7, 0x95, 0xd2, 0x0a, 0xe7, 0x11, 0x19, 0x2a, 0xe9, 0x85, 0x5f, - 0x1e, 0x83, 0x22, 0x48, 0x4b, 0x2e, 0x9c, 0x0e, 0x1f, 0x44, 0x2c, 0xf2, - 0xdc, 0xc6, 0x4d, 0xb1, 0xc4, 0xfd, 0xe9, 0xaa, 0xb4, 0x93, 0x17, 0xf3, - 0xa7, 0xdd, 0x03, 0x68, 0xc3, 0x23, 0xd7, 0xd3, 0xcb, 0x53, 0x80, 0x66, - 0xb2, 0x96, 0x58, 0xea, 0x2e, 0x26, 0x76, 0xf8, 0xeb, 0x2d, 0x84, 0x1d, - 0xb2, 0x41, 0xd4, 0xdc, 0x9b, 0x94, 0x90, 0xb5, 0x6f, 0xde, 0xa3, 0x07, - 0x44, 0x91, 0xd5, 0xc5, 0x74, 0xb6, 0xbc, 0xbd, 0xc2, 0x0e, 0x28, 0xd4, - 0xd9, 0x1c, 0x7c, 0x5b, 0x47, 0xec, 0x17, 0x8a, 0x28, 0x2c, 0xcf, 0x8f, - 0xd5, 0xe4, 0x22, 0x67, 0x73, 0xde, 0xce, 0x35, 0xdb, 0x70, 0x2b, 0x83, - 0x65, 0x0b, 0xe0, 0x6a, 0x7a, 0x57, 0xdc, 0x88, 0x15, 0x1a, 0x54, 0xa2, - 0xdf, 0xc2, 0x4c, 0xca, 0x7f, 0xe0, 0x6a, 0xe7, 0x2d, 0x2e, 0x6b, 0xb5, - 0x92, 0xfd, 0xc8, 0x95, 0xe1, 0x50, 0xa2, 0x0a, 0xdd, 0x7d, 0x6c, 0x2a, - 0x0e, 0x00, 0x01, 0xc9, 0x6f, 0x73, 0x68, 0x0a, 0x47, 0x74, 0x61, 0xc4, - 0x7c, 0xd1, 0xe1, 0x7d, 0xd3, 0x86, 0xa8, 0xb4, 0xc8, 0x3c, 0x39, 0x87, - 0x1c, 0xa8, 0x36, 0x90, 0xd2, 0xcc, 0x8d, 0x56, 0xd0, 0x3a, 0xe7, 0x9a, - 0x97, 0x33, 0xd2, 0x88, 0x70, 0x90, 0x8b, 0x01, 0x17, 0x76, 0xb1, 0x49, - 0x55, 0x95, 0xed, 0x9c, 0x97, 0x80, 0xb5, 0xb2, 0x4b, 0x78, 0x49, 0x47, - 0x16, 0x02, 0xa6, 0x2a, 0xb0, 0x21, 0x84, 0x9f, 0x9d, 0xe1, 0xd4, 0x25, - 0x14, 0xaf, 0x30, 0xbe, 0xa0, 0x86, 0x05, 0x0e, 0x12, 0xe8, 0x07, 0x11, - 0xd8, 0xf0, 0xa3, 0x70, 0xe1, 0x9e, 0xf4, 0x1a, 0x50, 0xb2, 0x55, 0x7d, - 0xf4, 0xa8, 0x24, 0x5e, 0x79, 0x56, 0x1f, 0x93, 0x23, 0x6d, 0x50, 0x67, - 0x54, 0x9c, 0x96, 0xca, 0x1a, 0x69, 0xf8, 0xfe, 0xfa, 0xc7, 0x48, 0x6b, - 0xf9, 0x98, 0x61, 0x96, 0xa4, 0x94, 0x2d, 0x15, 0x6b, 0x44, 0x57, 0x23, - 0x06, 0xa3, 0x16, 0x91, 0x19, 0x7b, 0x02, 0xb4, 0x03, 0x8b, 0x79, 0xc3, - 0xb8, 0xc9, 0x25, 0xd5, 0x64, 0xa7, 0x42, 0xc3, 0xd3, 0x72, 0x2e, 0x6f, - 0x73, 0x85, 0xc9, 0x18, 0x1c, 0x8a, 0x7b, 0x8f, 0x4d, 0x49, 0xae, 0x00, - 0xe1, 0xe6, 0x4c, 0xb3, 0x9f, 0x37, 0xda, 0x2c, 0xd6, 0xd1, 0x33, 0x9b, - 0x3e, 0x97, 0x63, 0x44, 0xb1, 0x04, 0xc2, 0x63, 0x4a, 0x7a, 0x65, 0x14, - 0x24, 0xe9, 0x09, 0x9d, 0x48, 0x93, 0x72, 0x3c, 0xbd, 0x8b, 0x14, 0x95, - 0xb7, 0x84, 0x6d, 0x3f, 0xe7, 0xd6, 0xd1, 0x22, 0x9d, 0xd1, 0xb2, 0xd5, - 0x4e, 0xd2, 0xd3, 0x34, 0x0b, 0xea, 0x41, 0x54, 0xbc, 0x97, 0x4d, 0x96, - 0x77, 0x4d, 0xdc, 0xaf, 0xae, 0xbd, 0xa8, 0x42, 0x0d, 0x5d, 0x25, 0x4c, - 0x18, 0x8f, 0x89, 0xb9, 0x62, 0x3c, 0x57, 0x49, 0xa1, 0x07, 0x1e, 0xcb, - 0xb4, 0xf3, 0x43, 0x0b, 0x93, 0xfd, 0x12, 0x46, 0x32, 0xc4, 0x44, 0x5f, - 0x4e, 0xcd, 0x8d, 0xba, 0xb2, 0x47, 0x36, 0xde, 0x4c, 0x75, 0x81, 0x96, - 0xd8, 0xe4, 0x2f, 0xfe, 0x65, 0xb9, 0x1f, 0xa3, 0x60, 0x7d, 0xd4, 0x7e, - 0xa2, 0x9d, 0x2e, 0xd1, 0xba, 0x08, 0x1a, 0x39, 0x24, 0xc4, 0xab, 0xdb, - 0x16, 0xaf, 0x1d, 0x42, 0x55, 0x5e, 0x9a, 0xc5, 0xef, 0x2d, 0xb9, 0xab, - 0xe9, 0x32, 0xe8, 0x25, 0x69, 0xdb, 0x7b, 0x60, 0xb1, 0xe9, 0x90, 0x32, - 0x71, 0xb8, 0x33, 0xc7, 0x57, 0x0c, 0x50, 0x00, 0x97, 0x8c, 0x0f, 0x47, - 0x4c, 0x0c, 0x9f, 0x55, 0xac, 0x10, 0xfb, 0xd3, 0xe0, 0x81, 0x43, 0xba, - 0x06, 0x04, 0xaa, 0xf1, 0x1a, 0x33, 0x9e, 0x7b, 0xe8, 0xeb, 0xea, 0x05, - 0xff, 0x2c, 0x7e, 0xd4, 0x7d, 0xb4, 0xc1, 0xc3, 0xe4, 0xb5, 0x37, 0xc6, - 0x3c, 0x34, 0x34, 0x36, 0x76, 0x51, 0x67, 0x1a, 0x68, 0xe3, 0xee, 0x59, - 0x09, 0xb7, 0xe1, 0x19, 0x90, 0xb9, 0x4c, 0x89, 0xf4, 0x3b, 0x30, 0xce, - 0xe8, 0xa1, 0x90, 0xc6, 0xc3, 0x1f, 0x9e, 0x7e, 0x36, 0x0f, 0xd8, 0xac, - 0x84, 0x4e, 0xbd, 0x80, 0x06, 0x38, 0x77, 0x2a, 0x96, 0xa0, 0xef, 0xd9, - 0xf9, 0x54, 0xdf, 0x0b, 0x11, 0xdb, 0xf8, 0xb5, 0x21, 0xdd, 0x2d, 0xc6, - 0xc1, 0x09, 0x85, 0xec, 0x1b, 0xcb, 0x55, 0x14, 0x39, 0x13, 0xf9, 0xf5, - 0xc4, 0x65, 0xeb, 0xeb, 0x2e, 0xe7, 0x01, 0x47, 0x39, 0x9b, 0x57, 0x0f, - 0x1d, 0x64, 0x4d, 0xaf, 0x86, 0xaf, 0x7e, 0xc5, 0x88, 0x02, 0x7d, 0x2c, - 0x22, 0x70, 0xa8, 0x4d, 0x5c, 0x18, 0x5d, 0x7b, 0x07, 0x1a, 0x6b, 0x30, - 0x33, 0xff, 0x0b, 0x2e, 0xf6, 0x12, 0xa1, 0x2d, 0xe4, 0xab, 0x49, 0xa4, - 0x8d, 0xde, 0x12, 0xe5, 0x40, 0x79, 0xc3, 0x78, 0x68, 0xc2, 0x6a, 0x5f, - 0x7b, 0xe3, 0x00, 0x0d, 0xb8, 0xf1, 0x38, 0x29, 0x7d, 0xc9, 0x06, 0xd9, - 0x7e, 0xc8, 0xc3, 0x2c, 0xb1, 0x37, 0xf2, 0x01, 0x46, 0xf0, 0xca, 0xaa, - 0xed, 0xa1, 0xe6, 0x57, 0x2b, 0xc9, 0x28, 0x0a, 0x43, 0x77, 0x11, 0x55, - 0x78, 0x39, 0xb8, 0x0f, 0x70, 0x56, 0xc6, 0x3a, 0xf0, 0xa6, 0x92, 0xae, - 0x2b, 0xbf, 0x47, 0xc7, 0x25, 0xcd, 0xb1, 0x7e, 0x7f, 0x00, 0x0c, 0xab, - 0xa5, 0xe0, 0x1e, 0x18, 0x0a, 0xb4, 0xb2, 0x11, 0xd0, 0xab, 0x53, 0x8b, - 0x91, 0x63, 0x4a, 0x88, 0x94, 0xf7, 0xd1, 0x25, 0xa3, 0xa2, 0xb2, 0x60, - 0x77, 0x78, 0x8a, 0x82, 0xb8, 0x2e, 0xfb, 0x00, 0x37, 0x7e, 0xe9, 0xdd, - 0x80, 0x5c, 0x3a, 0x3e, 0x67, 0x32, 0x67, 0x44, 0xbe, 0x68, 0x61, 0xd8, - 0xa0, 0xcd, 0xb2, 0xb0, 0x7a, 0x79, 0x45, 0xdc, 0x94, 0x54, 0xd4, 0xa0, - 0xa4, 0xbb, 0x5a, 0x18, 0x85, 0x46, 0x8d, 0xe7, 0x26, 0x56, 0x92, 0x02, - 0xfd, 0x47, 0x9a, 0x32, 0x68, 0xc9, 0x03, 0x35, 0xd4, 0x70, 0x21, 0x8d, - 0x2f, 0x08, 0xab, 0x84, 0x30, 0xab, 0x27, 0x6e, 0x63, 0x50, 0xc6, 0x13, - 0x48, 0xc4, 0x60, 0xaf, 0xb1, 0xf7, 0xfd, 0x70, 0x62, 0xc4, 0x15, 0x23, - 0x16, 0x70, 0x1e, 0x3a, 0xe3, 0x47, 0x4f, 0xac, 0xdf, 0xd6, 0x5f, 0x96, - 0x51, 0x9b, 0x37, 0x40, 0x16, 0xb1, 0xce, 0xda, 0xd5, 0x7e, 0xe5, 0x64, - 0x06, 0x63, 0x03, 0x54, 0x34, 0xb3, 0xe9, 0x5c, 0x1e, 0x2e, 0x18, 0xe2, - 0x05, 0xf3, 0xe5, 0x35, 0x3b, 0x09, 0x15, 0xef, 0xb8, 0xc9, 0x7a, 0x3f, - 0x42, 0x51, 0x02, 0x7b, 0x3e, 0x3a, 0xcc, 0xf8, 0x5b, 0x95, 0x19, 0x99, - 0xd9, 0xa2, 0x93, 0x87, 0x44, 0x5c, 0x83, 0x25, 0xb6, 0xdd, 0x92, 0xdb, - 0x50, 0x3c, 0xde, 0x81, 0x08, 0x88, 0x86, 0xf3, 0x92, 0xbb, 0xa2, 0x6a, - 0x5a, 0x40, 0x69, 0x7f, 0xf4, 0xfc, 0x77, 0x92, 0xb5, 0x7d, 0xdf, 0x57, - 0x7c, 0x64, 0x8f, 0xd7, 0x73, 0x0b, 0x5c, 0xd5, 0x34, 0xa7, 0xce, 0xaa, - 0xb6, 0x61, 0xd0, 0x2c, 0x1d, 0x6c, 0xfb, 0xfb, 0x51, 0xa7, 0x98, 0x9f, - 0x6e, 0x65, 0x97, 0xed, 0x70, 0x6e, 0x7f, 0x99, 0x5d, 0x01, 0xf1, 0x3c, - 0xac, 0xbb, 0xc0, 0x27, 0xb8, 0xf9, 0x0c, 0xca, 0x07, 0x88, 0xde, 0x0e, - 0xd9, 0x12, 0x18, 0x6b, 0x5c, 0x86, 0x0c, 0x51, 0x19, 0x4e, 0xf8, 0x70, - 0x58, 0x7c, 0xc7, 0xd0, 0xf8, 0x87, 0x5b, 0xc1, 0x8a, 0x3b, 0x5e, 0xd7, - 0x16, 0x3c, 0xaf, 0xbf, 0x32, 0x65, 0xac, 0x27, 0x18, 0x25, 0xcb, 0x2c, - 0xd3, 0x19, 0x82, 0x74, 0xd7, 0x3a, 0xd0, 0xc5, 0x9f, 0x42, 0xa7, 0x92, - 0xc7, 0xae, 0x87, 0x7d, 0xab, 0x4f, 0x53, 0xa5, 0x73, 0x9c, 0xcc, 0x77, - 0x34, 0x20, 0x67, 0x3b, 0x18, 0xee, 0x5d, 0x8c, 0x0d, 0x44, 0xc8, 0xc3, - 0xb4, 0xcd, 0x34, 0x41, 0x3b, 0xad, 0xe5, 0x7c, 0xd0, 0xf4, 0xf2, 0xba, - 0xe1, 0xae, 0x36, 0xc7, 0xd2, 0x12, 0x49, 0xfc, 0xd3, 0x62, 0x29, 0xbe, - 0x02, 0xf1, 0xa8, 0xb7, 0xec, 0xec, 0xc9, 0x18, 0x91, 0x72, 0x91, 0xa0, - 0x63, 0xe7, 0x0a, 0xb8, 0x21, 0x1f, 0x34, 0x30, 0x23, 0xa7, 0xb9, 0x81, - 0xe5, 0x80, 0xf6, 0x5d, 0x32, 0xe8, 0x93, 0x4a, 0x8b, 0xa9, 0x85, 0xb0, - 0xa4, 0x25, 0xb7, 0xc0, 0x86, 0x3e, 0x93, 0x8e, 0x3b, 0x32, 0x75, 0x5b, - 0x4a, 0xf2, 0x10, 0xb7, 0xb6, 0x6b, 0x77, 0x3c, 0x92, 0x01, 0x84, 0xb8, - 0xf0, 0x4f, 0x08, 0xa7, 0xd7, 0xb6, 0x4d, 0x34, 0x15, 0xf8, 0x90, 0x9f, - 0x07, 0xe2, 0x26, 0x95, 0xad, 0x17, 0x1c, 0xd2, 0xc7, 0x25, 0x24, 0xd6, - 0xc5, 0x85, 0x0f, 0x59, 0xef, 0x9c, 0xf4, 0x5b, 0xb6, 0x58, 0x36, 0x9a, - 0x07, 0x9e, 0x3e, 0x67, 0x0d, 0x0c, 0x79, 0x20, 0x75, 0x0d, 0xd3, 0x86, - 0x3b, 0x92, 0xab, 0xb4, 0xf8, 0xad, 0x04, 0xc9, 0x87, 0x18, 0x45, 0xce, - 0x32, 0x29, 0x35, 0xcf, 0x9a, 0x9e, 0x42, 0xf6, 0x0a, 0x3c, 0xcd, 0x4a, - 0xb6, 0x28, 0x52, 0x70, 0x34, 0x43, 0x1d, 0x1a, 0x8d, 0x47, 0x19, 0x62, - 0x3d, 0x77, 0x6b, 0x2e, 0x8b, 0x33, 0x8f, 0xee, 0x32, 0xe6, 0xb8, 0x44, - 0x1a, 0xc4, 0x82, 0xae, 0x6f, 0xc2, 0x37, 0x18, 0x4f, 0xb3, 0xdd, 0xc0, - 0x2e, 0xb3, 0x3c, 0x5c, 0x53, 0x35, 0xbf, 0x92, 0x02, 0x22, 0xc9, 0x0c, - 0xee, 0x82, 0xcd, 0x3a, 0xb2, 0xd9, 0xf6, 0x29, 0x62, 0xbb, 0xf4, 0x75, - 0xd3, 0x70, 0x87, 0xd1, 0x36, 0x47, 0x40, 0xfe, 0x6e, 0x0e, 0x14, 0xf1, - 0xd1, 0x71, 0x02, 0x9d, 0x92, 0xec, 0xb5, 0x63, 0xc4, 0x59, 0xd5, 0xc3, - 0x27, 0x99, 0x05, 0x4c, 0xb6, 0xfa, 0xde, 0x2e, 0xf5, 0xdd, 0xa5, 0x00, - 0xa6, 0x66, 0xc9, 0xa7, 0x48, 0x7b, 0x3c, 0x11, 0xbd, 0x40, 0xf6, 0xf8, - 0x7f, 0x25, 0x82, 0x8c, 0x78, 0xbd, 0xf1, 0x32, 0x55, 0x5b, 0x7f, 0xb6, - 0xd5, 0xbb, 0x01, 0x55, 0x91, 0xd6, 0x4b, 0xd1, 0x54, 0xf9, 0x0c, 0x8e, - 0x21, 0x77, 0xe2, 0x6c, 0x2d, 0x1a, 0x97, 0x44, 0x40, 0x3f, 0x7f, 0xec, - 0x1e, 0x52, 0x3b, 0x8d, 0xd3, 0xbf, 0xa7, 0xa2, 0x15, 0xb4, 0x9d, 0xf2, - 0x24, 0x14, 0x2b, 0x6c, 0x83, 0x37, 0xae, 0x81, 0xb8, 0x87, 0xfd, 0x3f, - 0xf7, 0x4a, 0x51, 0x7d, 0xb6, 0x5b, 0x32, 0x1e, 0x40, 0xbe, 0xa7, 0x62, - 0x8d, 0x9c, 0xae, 0xcf, 0xd2, 0xbf, 0x88, 0x01, 0x05, 0x20, 0xe3, 0x70, - 0xa3, 0x66, 0x54, 0xbf, 0x65, 0xc8, 0x04, 0xbb, 0xd4, 0x87, 0x9a, 0xea, - 0xfc, 0x1c, 0x5e, 0x13, 0x20, 0x2a, 0x73, 0x06, 0x2c, 0x1f, 0x48, 0xa4, - 0xf6, 0x4c, 0x7c, 0xfb, 0xb6, 0x72, 0x39, 0x65, 0xc0, 0x49, 0xa3, 0x93, - 0x5d, 0x6c, 0x84, 0xfb, 0x23, 0xe6, 0x86, 0x26, 0x02, 0xa8, 0x4c, 0xfd, - 0x87, 0x0b, 0x58, 0xba, 0xc0, 0xac, 0x2d, 0x6d, 0xc5, 0x7f, 0xf4, 0xa0, - 0xf4, 0xce, 0xaf, 0x3e, 0x3d, 0x3b, 0xcf, 0x16, 0xae, 0x7e, 0x89, 0xb1, - 0x1a, 0xa5, 0x9d, 0x96, 0x27, 0xa3, 0x20, 0xcb, 0xf3, 0xe8, 0xe7, 0x32, - 0x28, 0x8d, 0xa8, 0xc8, 0x1b, 0x91, 0x7e, 0x0e, 0xea, 0x0a, 0x41, 0xce, - 0xae, 0x62, 0x37, 0x37, 0xf2, 0x1e, 0x84, 0xa8, 0x1f, 0x00, 0xe2, 0x6c, - 0x79, 0xb3, 0x7f, 0xfb, 0xf9, 0x88, 0x3d, 0x1a, 0x8d, 0xb1, 0x1c, 0xa1, - 0x0b, 0x2e, 0x21, 0x01, 0xde, 0x1b, 0x47, 0xb4, 0x8c, 0x47, 0x1d, 0x9c, - 0x71, 0x3f, 0x25, 0x75, 0xb8, 0xa8, 0x34, 0xc3, 0x83, 0x11, 0xab, 0x35, - 0xc2, 0x99, 0x38, 0xd0, 0x19, 0x90, 0x40, 0xf8, 0x2e, 0x33, 0xe2, 0x4d, - 0x1a, 0x15, 0xc4, 0xb5, 0x17, 0x3a, 0x63, 0x6f, 0x77, 0xe0, 0x8f, 0xac, - 0xef, 0x51, 0x42, 0xec, 0xed, 0xd2, 0xc3, 0x43, 0x47, 0xe6, 0x3e, 0x5b, - 0xe6, 0x97, 0xfe, 0x87, 0x38, 0xc6, 0x78, 0xd1, 0x50, 0xbe, 0xef, 0x08, - 0xd7, 0xe7, 0x5f, 0x26, 0xb7, 0xe0, 0x76, 0xff, 0x57, 0x95, 0x8b, 0xef, - 0x0f, 0xd9, 0x6d, 0xbb, 0x02, 0x0f, 0xee, 0xc9, 0xdb, 0x72, 0x63, 0xee, - 0xd6, 0x75, 0xa5, 0x3a, 0xcb, 0xbc, 0xe9, 0xc7, 0xee, 0xf0, 0x01, 0xae, - 0xf1, 0x13, 0x2d, 0xd2, 0xfc, 0xe9, 0x5c, 0xc4, 0xae, 0x59, 0x36, 0x3e, - 0xb4, 0xdb, 0x36, 0xc4, 0x77, 0xe1, 0xbf, 0x65, 0x40, 0xa7, 0x30, 0x24, - 0x2c, 0x3e, 0xe5, 0xac, 0xe6, 0x9f, 0x29, 0xbb, 0x4d, 0xf0, 0x24, 0x71, - 0x59, 0xef, 0xcd, 0xd8, 0x92, 0x5e, 0x85, 0x94, 0xc8, 0x59, 0x91, 0x38, - 0x1c, 0x99, 0xd1, 0xe1, 0xde, 0x4f, 0xfc, 0x46, 0x8a, 0x2f, 0x25, 0xe0, - 0xca, 0xd1, 0xee, 0x14, 0xd4, 0xaa, 0xd8, 0xf4, 0x34, 0xd7, 0xa3, 0xfb, - 0x6e, 0xce, 0xdf, 0x62, 0x08, 0x0c, 0x9c, 0xe8, 0xad, 0xfd, 0x0f, 0x79, - 0x85, 0xf6, 0xec, 0x5b, 0xf8, 0x35, 0x64, 0x55, 0xa8, 0x69, 0x54, 0x4f, - 0x78, 0x1a, 0xd7, 0x8b, 0x91, 0x28, 0x44, 0x18, 0x8a, 0xe8, 0xb5, 0xcf, - 0xb5, 0x14, 0xf3, 0x6e, 0x65, 0x6f, 0x48, 0x57, 0xc0, 0x8d, 0x09, 0xca, - 0x52, 0xf8, 0x19, 0xb6, 0xbc, 0x4a, 0x17, 0xd0, 0x8e, 0xd5, 0xd6, 0x5f, - 0x88, 0xcf, 0xc3, 0x62, 0x35, 0x63, 0x14, 0x05, 0x9d, 0x2c, 0x6e, 0x33, - 0x11, 0x88, 0x4f, 0xd7, 0x1e, 0x71, 0x67, 0xa6, 0xae, 0xfb, 0x66, 0xcb, - 0x8e, 0x9d, 0x39, 0x37, 0xbd, 0xa3, 0xf8, 0xba, 0x63, 0xf4, 0x01, 0xcc, - 0xd1, 0x98, 0x26, 0x83, 0xeb, 0xec, 0x43, 0x7f, 0x3f, 0xf2, 0xeb, 0x7f, - 0x82, 0x16, 0xed, 0xf6, 0x22, 0x36, 0x28, 0xda, 0xa6, 0xda, 0x64, 0x2f, - 0x3b, 0x50, 0x9c, 0x6e, 0xeb, 0xb7, 0x72, 0xf8, 0x27, 0x3f, 0xa2, 0x50, - 0xc7, 0xc8, 0x24, 0xab, 0xa7, 0x53, 0x14, 0x8c, 0x2a, 0x5d, 0xa9, 0x11, - 0xb6, 0xd5, 0x8e, 0xa0, 0x2a, 0x68, 0x0e, 0x4e, 0x48, 0x34, 0x39, 0x8c, - 0x0a, 0x29, 0x6d, 0x8d, 0x7b, 0x09, 0x9f, 0xeb, 0xd3, 0xeb, 0x83, 0x75, - 0xcc, 0x5a, 0xe4, 0xfe, 0x0c, 0x57, 0x31, 0x52, 0xd5, 0xdb, 0x2c, 0x16, - 0xdb, 0x0c, 0x9f, 0x04, 0x04, 0x0a, 0xdd, 0x78, 0x98, 0x31, 0xb0, 0xd4, - 0xcb, 0x84, 0x44, 0x08, 0xe6, 0xa3, 0x5b, 0xcd, 0x4a, 0xa8, 0x02, 0xce, - 0x4c, 0x05, 0x81, 0x4c, 0xae, 0xa8, 0x99, 0x04, 0xca, 0x91, 0xca, 0xdb, - 0x1d, 0xc1, 0xcc, 0xfc, 0xa1, 0x85, 0xb2, 0x2b, 0x88, 0x42, 0x0e, 0xc6, - 0x36, 0xfb, 0xe4, 0x23, 0x6e, 0xf9, 0x43, 0xba, 0x10, 0x0c, 0x82, 0xef, - 0x90, 0x1b, 0x8e, 0xa0, 0xf4, 0xae, 0xe8, 0x40, 0x72, 0x3a, 0x34, 0x1a, - 0xa2, 0xc5, 0x3d, 0x5c, 0xe5, 0xdb, 0xfc, 0x4e, 0xb0, 0xe5, 0x8a, 0xaf, - 0x19, 0x0d, 0xfb, 0x68, 0x06, 0xc2, 0x50, 0x0a, 0x5f, 0xf3, 0x6f, 0xdf, - 0x33, 0xcb, 0x5e, 0x61, 0x7e, 0xe0, 0x26, 0xd1, 0x1f, 0xb7, 0x26, 0x2f, - 0x17, 0x9b, 0x97, 0x42, 0x0f, 0xc2, 0x4a, 0x3d, 0xf1, 0x19, 0x0a, 0xf8, - 0xca, 0x95, 0xee, 0x56, 0x50, 0x57, 0xbe, 0x34, 0x4d, 0x55, 0x65, 0x96, - 0xe3, 0xfb, 0x05, 0x35, 0xe8, 0x4e, 0x2b, 0x71, 0x26, 0x71, 0xe8, 0xfd, - 0x2b, 0xf3, 0xa8, 0x5b, 0xaf, 0x6d, 0x01, 0x7c, 0x84, 0xde, 0xfb, 0x1f, - 0x6c, 0x7a, 0x22, 0xc4, 0xae, 0x85, 0x20, 0x40, 0x94, 0x2e, 0x44, 0x1d, - 0x0e, 0x66, 0x0e, 0xed, 0xac, 0x2f, 0xa8, 0xa6, 0x09, 0xcf, 0xe0, 0x33, - 0x93, 0xfc, 0x2f, 0xc3, 0xc1, 0xd1, 0x69, 0x6c, 0x12, 0xaf, 0xda, 0x31, - 0x68, 0xbc, 0xff, 0x8b, 0x90, 0xea, 0x94, 0xe9, 0xc7, 0xb3, 0x63, 0x66, - 0x0b, 0x64, 0xa7, 0x96, 0xf3, 0x1b, 0x37, 0xfc, 0x55, 0x37, 0x48, 0x38, - 0xc7, 0x0c, 0x74, 0xec, 0x7e, 0xc4, 0xc5, 0xe4, 0x0b, 0x85, 0x75, 0x05, - 0x57, 0x07, 0x35, 0xbc, 0x94, 0x0b, 0xf1, 0xb2, 0x6e, 0x70, 0x8b, 0xcf, - 0x70, 0x3f, 0xf4, 0xa2, 0xa5, 0x19, 0xde, 0x28, 0x5b, 0xa8, 0xda, 0x27, - 0xc8, 0x1b, 0x32, 0xf4, 0x68, 0x41, 0x69, 0x04, 0xd3, 0x9a, 0x26, 0xff, - 0xce, 0x1f, 0x77, 0x83, 0x97, 0xa2, 0x1b, 0x15, 0x89, 0xc4, 0xfa, 0xf3, - 0x17, 0x41, 0xf4, 0x6a, 0x52, 0xde, 0x37, 0x1c, 0x4c, 0x3f, 0x99, 0x5b, - 0x90, 0x8e, 0x51, 0xc6, 0x54, 0xd7, 0x8a, 0xb6, 0xd9, 0x8e, 0x63, 0x1a, - 0x2a, 0xeb, 0x9d, 0xb2, 0xeb, 0x18, 0xb1, 0x13, 0xda, 0x7c, 0x23, 0x6d, - 0xa7, 0x0f, 0xe2, 0x47, 0x8a, 0x4e, 0x5e, 0xd6, 0xc3, 0x4f, 0x67, 0x67, - 0xaa, 0x5f, 0x00, 0xcf, 0xc0, 0x0d, 0xac, 0x24, 0x9a, 0xc5, 0x88, 0xfa, - 0x3e, 0xb7, 0x80, 0xd8, 0xaf, 0x34, 0xd4, 0xf4, 0xd9, 0xca, 0x74, 0xe8, - 0xcf, 0xa5, 0x5f, 0x88, 0x65, 0x39, 0xc2, 0xff, 0xf2, 0x05, 0x72, 0xe9, - 0x71, 0x8e, 0xe0, 0xc4, 0xc6, 0x93, 0xbb, 0x58, 0x7a, 0x26, 0x5a, 0x37, - 0x90, 0xeb, 0xd9, 0xab, 0xc0, 0xf3, 0xd3, 0x9f, 0x1e, 0xea, 0xcf, 0x39, - 0x67, 0x15, 0x09, 0xe3, 0x94, 0x17, 0xea, 0x88, 0xf3, 0x72, 0x81, 0x42, - 0xa0, 0xcc, 0x4d, 0x4e, 0xb6, 0x31, 0x25, 0x2d, 0x4a, 0xe8, 0xa7, 0xbb, - 0xef, 0xab, 0x94, 0x14, 0xda, 0xfc, 0xcb, 0x98, 0x28, 0x24, 0x2c, 0x8a, - 0x5d, 0x91, 0x18, 0x67, 0xa5, 0x40, 0x0c, 0x1f, 0x29, 0xbc, 0x30, 0x61, - 0xfb, 0x0d, 0x54, 0x07, 0x50, 0x2b, 0xcb, 0xca, 0xeb, 0xbb, 0xa6, 0x39, - 0x24, 0x80, 0x52, 0x88, 0xf7, 0x5c, 0xa0, 0x39, 0xc1, 0xe8, 0xb7, 0x10, - 0xb9, 0xb5, 0x29, 0xdf, 0x56, 0xd6, 0x40, 0xcc, 0xf4, 0x26, 0x5a, 0xfc, - 0x50, 0xd3, 0x18, 0x7b, 0x31, 0xe6, 0xce, 0xd8, 0x16, 0xac, 0xe3, 0xe2, - 0xa5, 0x0d, 0x20, 0xd0, 0x70, 0x57, 0x02, 0x38, 0x68, 0x9c, 0x32, 0x84, - 0xee, 0x9a, 0x1b, 0x8b, 0x33, 0x65, 0x32, 0x8a, 0xb2, 0xe0, 0xb2, 0x0a, - 0x1d, 0xa8, 0x28, 0x38, 0x16, 0x39, 0xf3, 0xdc, 0x2b, 0x14, 0x6b, 0x79, - 0x14, 0xc1, 0x63, 0x58, 0x54, 0x78, 0xe0, 0xf3, 0x65, 0x16, 0x3d, 0xc5, - 0x78, 0x20, 0xb1, 0x93, 0x83, 0xde, 0x57, 0xac, 0x15, 0xce, 0x56, 0x84, - 0x35, 0x45, 0x99, 0x89, 0x31, 0x71, 0x01, 0xa9, 0x43, 0x86, 0x5b, 0x71, - 0xb7, 0x8c, 0x7f, 0x1b, 0x14, 0x95, 0xe5, 0x74, 0xaa, 0x97, 0x57, 0xd6, - 0x41, 0xd9, 0xd4, 0xd9, 0xdb, 0x95, 0xe1, 0xde, 0xe0, 0x1e, 0xa1, 0x88, - 0xc2, 0x30, 0x72, 0xa9, 0x54, 0x53, 0x8d, 0x93, 0x75, 0xc3, 0x25, 0x2d, - 0x4a, 0x07, 0x19, 0xec, 0x0e, 0x74, 0x2b, 0x1e, 0x03, 0xc3, 0x5e, 0xbd, - 0x43, 0x8e, 0xaa, 0x66, 0x98, 0x50, 0xc7, 0xfb, 0xef, 0x2b, 0x37, 0x8e, - 0xd8, 0xb5, 0x1e, 0x4f, 0x10, 0x7f, 0xe3, 0x2b, 0xf4, 0x99, 0x3d, 0x04, - 0xc3, 0xed, 0x07, 0x23, 0xf2, 0xcd, 0x2a, 0x7d, 0x2d, 0xc3, 0x53, 0x80, - 0x30, 0x82, 0x8a, 0x0d, 0x89, 0xb2, 0xc7, 0xce, 0xf3, 0xbb, 0xd8, 0x9a, - 0x98, 0xb4, 0x72, 0x45, 0x7d, 0x68, 0xa8, 0xb7, 0x52, 0x15, 0x30, 0x9e, - 0xd0, 0x5c, 0x87, 0x47, 0x83, 0x0a, 0xa7, 0x83, 0x75, 0x29, 0x0a, 0x78, - 0x8a, 0x86, 0x73, 0x05, 0x87, 0x65, 0x48, 0x45, 0xec, 0x09, 0x5e, 0x9b, - 0xc4, 0xe5, 0x12, 0xf7, 0x3b, 0xec, 0xdf, 0x19, 0xb8, 0x81, 0x05, 0xc9, - 0x97, 0xc9, 0x1f, 0x1e, 0x13, 0xc4, 0x36, 0xee, 0x79, 0x82, 0x52, 0xfb, - 0x6a, 0x38, 0xe5, 0x63, 0x56, 0x43, 0x48, 0xf9, 0xf7, 0x61, 0xe1, 0xf8, - 0xc8, 0x12, 0xf9, 0x8e, 0xb4, 0x0a, 0xcd, 0xa4, 0xa8, 0xbf, 0x59, 0x42, - 0xca, 0x4b, 0x6b, 0x23, 0x6c, 0x77, 0x07, 0xaf, 0xfc, 0xea, 0x77, 0xd6, - 0xf1, 0xa6, 0xc9, 0xf0, 0xd4, 0x23, 0x95, 0xb0, 0xdb, 0xee, 0x60, 0xf0, - 0x92, 0x5e, 0xdb, 0xec, 0xac, 0x62, 0xcf, 0xc3, 0x15, 0x7f, 0xff, 0x4a, - 0x7c, 0x29, 0x66, 0x91, 0x17, 0x00, 0xee, 0x56, 0x2b, 0xa7, 0x8b, 0x94, - 0x3c, 0xd3, 0x38, 0x66, 0x00, 0x80, 0x4f, 0x69, 0x91, 0x0f, 0x25, 0xfe, - 0xbd, 0x51, 0xf7, 0xa1, 0xcb, 0x29, 0xee, 0x5f, 0x54, 0xc5, 0xe9, 0x66, - 0x5e, 0xa4, 0xbe, 0x98, 0xab, 0xb4, 0x3b, 0x1a, 0x9f, 0x4d, 0xc9, 0x7d, - 0xeb, 0x7c, 0xe8, 0xa2, 0x51, 0x82, 0xb0, 0x54, 0xaa, 0x38, 0x47, 0xc2, - 0x6e, 0x29, 0x71, 0x08, 0xfb, 0xc1, 0xcb, 0x27, 0xef, 0x81, 0xcb, 0x8e, - 0xb4, 0x16, 0x00, 0xa1, 0xb2, 0x6b, 0x47, 0x5b, 0x3b, 0x3b, 0xf2, 0x7c, - 0x2d, 0x78, 0xd9, 0x42, 0xca, 0xd3, 0x41, 0x3e, 0x9d, 0xfd, 0x50, 0x32, - 0x8f, 0xeb, 0xb1, 0x73, 0x17, 0xe0, 0xda, 0xa4, 0x07, 0x74, 0x50, 0xe1, - 0xe0, 0x0d, 0xe7, 0x0a, 0x2c, 0x27, 0x39, 0xad, 0x4c, 0xbf, 0x4a, 0xe7, - 0x13, 0xda, 0x76, 0x0b, 0x24, 0x0a, 0x0d, 0x5a, 0x17, 0x26, 0x15, 0x72, - 0x03, 0xa1, 0xd4, 0x06, 0x42, 0xc8, 0x27, 0x7a, 0x53, 0x32, 0x76, 0xe3, - 0xef, 0xbd, 0x23, 0x3c, 0xa6, 0xbd, 0x80, 0x12, 0x0d, 0x06, 0x50, 0x76, - 0x9a, 0xdd, 0x51, 0x4c, 0x87, 0x0c, 0x85, 0x91, 0x6f, 0x48, 0x49, 0x84, - 0x20, 0xa2, 0xa3, 0x51, 0x82, 0x9d, 0xb1, 0x77, 0xca, 0x11, 0x73, 0x8d, - 0xa1, 0xb6, 0x89, 0x76, 0x01, 0xe5, 0x58, 0xe6, 0xca, 0xee, 0x29, 0x22, - 0x8c, 0x68, 0x3b, 0xbc, 0x19, 0x8a, 0x20, 0xd8, 0x8d, 0xd6, 0x95, 0x53, - 0x84, 0x65, 0xe7, 0x6b, 0xb2, 0x74, 0x76, 0xc9, 0xe3, 0x9d, 0x04, 0x47, - 0x6d, 0x22, 0xc9, 0x17, 0xdf, 0x5d, 0x6f, 0x0a, 0x04, 0xfe, 0xbc, 0x82, - 0xca, 0x3c, 0xcb, 0xe1, 0xab, 0xc8, 0xdb, 0x34, 0xd2, 0xde, 0xd9, 0x79, - 0x84, 0xb2, 0x7e, 0x4d, 0x62, 0xc1, 0xf2, 0xa3, 0x65, 0xda, 0x0b, 0x0f, - 0xa5, 0x24, 0x73, 0xa9, 0x07, 0x4d, 0xfa, 0x1d, 0x6b, 0x46, 0x77, 0x7e, - 0xfa, 0xcd, 0x8c, 0x43, 0x26, 0x71, 0x65, 0x5e, 0x12, 0xea, 0xcc, 0x62, - 0x66, 0x16, 0xdb, 0x97, 0x47, 0x40, 0xe6, 0x62, 0x5c, 0x30, 0x8e, 0x56, - 0x50, 0x75, 0xe0, 0x0b, 0x49, 0xae, 0xa4, 0xbf, 0x44, 0xea, 0xee, 0xe8, - 0xeb, 0x05, 0xf6, 0x9e, 0x44, 0xd0, 0x01, 0xc0, 0x4e, 0x92, 0xb9, 0x0e, - 0xe2, 0x48, 0xe0, 0xb6, 0xee, 0x4e, 0x7e, 0xec, 0xdf, 0x93, 0xe7, 0x39, - 0x3c, 0xc5, 0xf2, 0x21, 0xe9, 0x83, 0x77, 0x2e, 0xd7, 0x08, 0xc2, 0x05, - 0x14, 0x81, 0x57, 0x69, 0xf6, 0x5d, 0x31, 0x86, 0x4a, 0x55, 0xcd, 0xeb, - 0x96, 0xf1, 0xba, 0x3b, 0x80, 0x3d, 0x06, 0xd7, 0xb8, 0x04, 0xda, 0x66, - 0x0e, 0x04, 0x2a, 0x39, 0x8d, 0xfb, 0xe2, 0x1d, 0xe6, 0x94, 0x7b, 0x9c, - 0x12, 0xbb, 0xf0, 0x57, 0x13, 0x05, 0x02, 0xd3, 0xe5, 0x8d, 0x2e, 0x3a, - 0x19, 0x48, 0x46, 0xbc, 0x32, 0xdb, 0xaf, 0xa8, 0xf0, 0x8f, 0xd5, 0xd0, - 0xd4, 0xac, 0xda, 0xcb, 0x01, 0xbc, 0x02, 0xc9, 0xce, 0x33, 0x08, 0x42, - 0x45, 0x3c, 0xb3, 0x13, 0x2c, 0x24, 0xaa, 0x92, 0x37, 0x48, 0xbf, 0x40, - 0xed, 0xe0, 0xe6, 0xc8, 0x77, 0xb3, 0x53, 0xa5, 0x28, 0xd8, 0x19, 0xfc, - 0x33, 0xf5, 0x5d, 0x51, 0xa5, 0x2a, 0xb2, 0xb1, 0x6e, 0x57, 0x9b, 0x48, - 0xdc, 0x00, 0x22, 0xa9, 0x0d, 0x23, 0x7a, 0xb4, 0xb4, 0x3d, 0x8a, 0x95, - 0xb3, 0x9e, 0x6b, 0x03, 0x87, 0x69, 0xb0, 0x2f, 0xcb, 0x69, 0x7b, 0xb2, - 0xc6, 0x8d, 0x51, 0x3b, 0x73, 0x80, 0x9f, 0x04, 0xb1, 0x9f, 0x4d, 0x97, - 0x7a, 0xb8, 0x76, 0x01, 0xf9, 0x77, 0xfe, 0x31, 0x7f, 0x6b, 0x6c, 0xd0, - 0x45, 0x85, 0x1b, 0xd3, 0xab, 0x7b, 0x11, 0x99, 0xfa, 0x36, 0xad, 0x25, - 0xaf, 0x57, 0x87, 0x3c, 0xa9, 0x4c, 0xe0, 0x42, 0xa9, 0x0c, 0x47, 0x7a, - 0x8b, 0xb4, 0x54, 0x31, 0xf3, 0x77, 0xee, 0x08, 0xb2, 0x8e, 0x07, 0x9e, - 0x2a, 0x41, 0x8f, 0xf7, 0x76, 0x17, 0x83, 0x26, 0xb4, 0x80, 0xad, 0x27, - 0x2d, 0x59, 0x3a, 0xca, 0x9d, 0x0b, 0xbf, 0x79, 0x39, 0x8b, 0x20, 0xf0, - 0x7d, 0x4c, 0xe9, 0x0e, 0xd9, 0x46, 0x39, 0x60, 0x0e, 0xa4, 0x7f, 0x8d, - 0xf5, 0x0c, 0x8c, 0xbb, 0x25, 0x78, 0xe7, 0x43, 0x09, 0x87, 0xad, 0x20, - 0xfc, 0x51, 0xa6, 0x71, 0x6a, 0xdf, 0xfd, 0xde, 0x29, 0x6d, 0xbb, 0x19, - 0x73, 0x3a, 0x5e, 0xa5, 0x41, 0x2c, 0xef, 0x5b, 0x42, 0x57, 0xc6, 0x6f, - 0x8e, 0x63, 0xf1, 0x0d, 0x4b, 0xb7, 0xb2, 0xa4, 0x94, 0x67, 0x35, 0xa4, - 0xae, 0x7e, 0x8d, 0x07, 0xe5, 0x3c, 0x87, 0xa4, 0xd9, 0x25, 0x7d, 0xde, - 0xb6, 0x9e, 0x85, 0x3b, 0xc7, 0x8c, 0x12, 0x41, 0xa1, 0x85, 0x00, 0xd9, - 0xcb, 0xc7, 0x4d, 0x1d, 0xac, 0xc7, 0x0e, 0x46, 0x4e, 0x7d, 0xb1, 0x42, - 0x9d, 0x8a, 0x26, 0x8c, 0x3e, 0x21, 0x8e, 0x82, 0xa1, 0x33, 0xa8, 0xe2, - 0xf6, 0x84, 0x36, 0xc2, 0x3b, 0x29, 0x14, 0x90, 0xaf, 0x84, 0x9a, 0x78, - 0x7e, 0x85, 0x3d, 0x7f, 0x30, 0x10, 0x4c, 0xcd, 0x12, 0x3e, 0x40, 0xe9, - 0xd0, 0x0c, 0x84, 0x69, 0xdf, 0xac, 0x2d, 0xc0, 0x7d, 0xdc, 0x3b, 0xef, - 0x69, 0x82, 0x02, 0x65, 0x81, 0xdb, 0x57, 0x3b, 0xa8, 0x56, 0x2a, 0xe7, - 0x11, 0x0b, 0x34, 0x3e, 0x6f, 0x81, 0x63, 0xe8, 0xd4, 0x3c, 0x18, 0xcf, - 0xdc, 0xff, 0x15, 0x3e, 0xe9, 0x98, 0xf8, 0x66, 0x1a, 0x44, 0x50, 0xb2, - 0xec, 0xbf, 0xc9, 0xc8, 0x1b, 0xe4, 0x11, 0xe5, 0x00, 0x76, 0x01, 0x6d, - 0x91, 0xde, 0xd4, 0xa8, 0x2e, 0x33, 0xa6, 0x69, 0x08, 0x15, 0xf7, 0x42, - 0xfa, 0x11, 0x93, 0xb8, 0x4f, 0x27, 0xdd, 0x35, 0xdf, 0x3a, 0x8f, 0x19, - 0xd1, 0x9f, 0x72, 0x15, 0x1d, 0xad, 0x32, 0x8e, 0xb8, 0x28, 0xd6, 0xad, - 0xe5, 0xad, 0xbe, 0x0f, 0x75, 0x7d, 0x14, 0xbc, 0x46, 0x1e, 0x13, 0x6b, - 0x86, 0xdf, 0x2f, 0xd1, 0xfd, 0x51, 0x7e, 0x88, 0x7d, 0xf8, 0xc0, 0x31, - 0x67, 0x31, 0x8a, 0x6b, 0x28, 0x35, 0xe2, 0x06, 0xa1, 0xa0, 0x73, 0x5c, - 0x40, 0x57, 0xb7, 0x26, 0x0e, 0x84, 0xab, 0x5b, 0x9e, 0x6d, 0x01, 0x34, - 0x51, 0x6f, 0x6f, 0xfd, 0x7f, 0x0d, 0x33, 0x50, 0x98, 0x7d, 0xd1, 0xd0, - 0x05, 0xaf, 0x27, 0x4c, 0x5a, 0xa9, 0xa8, 0x0a, 0x4e, 0x24, 0x6b, 0x67, - 0x23, 0xd3, 0xb9, 0x16, 0x6e, 0x61, 0x25, 0x63, 0xad, 0x19, 0xab, 0xe8, - 0x65, 0x8f, 0x0f, 0xb4, 0xa6, 0xd8, 0x4f, 0x78, 0xec, 0xa2, 0x36, 0x5f, - 0x3b, 0xe0, 0xcb, 0xd5, 0x85, 0x64, 0xa0, 0x1f, 0x96, 0x4f, 0xef, 0x0f, - 0x79, 0x99, 0xe4, 0x67, 0x47, 0x40, 0xe8, 0xc5, 0xdf, 0x05, 0x63, 0xa3, - 0x24, 0x04, 0x7e, 0x98, 0x3c, 0x8c, 0xfb, 0xec, 0x96, 0xb4, 0x41, 0x49, - 0x93, 0x07, 0xad, 0x84, 0xe2, 0x23, 0x36, 0xcc, 0x57, 0x60, 0xa0, 0xc2, - 0xbb, 0xc8, 0x8a, 0xa5, 0x67, 0x61, 0x2a, 0x40, 0xbe, 0x0e, 0xae, 0x62, - 0xa5, 0x1e, 0x09, 0xe1, 0x32, 0x43, 0xd1, 0xb1, 0x25, 0xdd, 0xeb, 0x2f, - 0x92, 0x55, 0x86, 0x9f, 0x1a, 0xa6, 0xd7, 0x7c, 0x91, 0xb4, 0xab, 0xde, - 0x80, 0xd4, 0xc6, 0x42, 0x1f, 0x63, 0x45, 0xca, 0xbf, 0xd2, 0x81, 0xec, - 0x5f, 0xf8, 0x0a, 0xd6, 0x81, 0x5e, 0x90, 0x3d, 0x57, 0x33, 0x31, 0xf2, - 0x29, 0x2c, 0x66, 0x78, 0xce, 0xbf, 0xb5, 0xca, 0x15, 0xca, 0xad, 0x3f, - 0xcc, 0x4c, 0xc9, 0x15, 0xb4, 0xff, 0x60, 0x2f, 0xe6, 0x3c, 0x34, 0x46, - 0x4b, 0x13, 0xe8, 0x03, 0xf1, 0xfa, 0xa9, 0x4d, 0x5b, 0x2a, 0x3e, 0xfd, - 0x62, 0x7e, 0x7b, 0x84, 0x2e, 0x53, 0xa0, 0x8e, 0x6f, 0xd4, 0xaa, 0xb8, - 0x29, 0x71, 0xfc, 0x0f, 0xb1, 0x7f, 0x54, 0x00, 0x16, 0x14, 0xd2, 0xd2, - 0x1a, 0xd7, 0xec, 0x56, 0xcf, 0xed, 0xc1, 0x6d, 0xa5, 0x5e, 0xfc, 0xcf, - 0x42, 0x43, 0x8a, 0xa6, 0xc0, 0x6c, 0x13, 0xbf, 0xdd, 0xaa, 0x94, 0x08, - 0xfb, 0x4e, 0x24, 0xce, 0x4d, 0xb8, 0xc9, 0x16, 0xb7, 0xf1, 0x04, 0x1a, - 0x8c, 0x9c, 0xc2, 0x19, 0x91, 0x4f, 0xb3, 0x9f, 0x56, 0xc7, 0x30, 0xc4, - 0x40, 0x7c, 0x32, 0xff, 0xd2, 0x2d, 0x3d, 0x35, 0xd1, 0x76, 0x40, 0x4b, - 0xb9, 0x11, 0x05, 0x92, 0x85, 0x02, 0x57, 0xc4, 0xea, 0x67, 0xe9, 0xf0, - 0xd8, 0x9f, 0x06, 0xa2, 0x79, 0xe0, 0x6f, 0x01, 0x81, 0xff, 0xd8, 0x99, - 0xd7, 0x82, 0xbb, 0x5e, 0x1a, 0x7c, 0x44, 0xc4, 0xb0, 0xb8, 0x9a, 0xba, - 0x60, 0x22, 0x93, 0xb0, 0x0b, 0x0e, 0x1d, 0xbc, 0x1d, 0x94, 0xad, 0x60, - 0xbd, 0xed, 0xb2, 0x91, 0x73, 0xef, 0xdc, 0x6b, 0xfc, 0x04, 0xf1, 0xcb, - 0x52, 0xb8, 0xa1, 0xf4, 0x13, 0x7e, 0x12, 0xef, 0xac, 0x42, 0x5a, 0x35, - 0x3e, 0x56, 0x20, 0x5d, 0x28, 0x4a, 0x9d, 0xc4, 0xd7, 0x81, 0x91, 0x97, - 0x2d, 0x62, 0xc3, 0x03, 0x8c, 0x2e, 0xd3, 0x77, 0x62, 0x23, 0x5a, 0xb8, - 0xbb, 0x76, 0x97, 0x2f, 0x12, 0x65, 0x11, 0x96, 0x38, 0x29, 0xf9, 0xee, - 0xd3, 0x63, 0xd5, 0xfb, 0x6a, 0xc1, 0x1e, 0x83, 0x87, 0xea, 0x6b, 0xe0, - 0xe9, 0xcb, 0xeb, 0x68, 0xca, 0x4c, 0x76, 0x60, 0x55, 0xc1, 0x5b, 0x6a, - 0x3a, 0xf2, 0xab, 0xbc, 0xc4, 0x36, 0x10, 0xe2, 0xce, 0xa0, 0x91, 0x99, - 0x5d, 0xd9, 0x9e, 0xae, 0x1d, 0xaa, 0xcb, 0xfb, 0x96, 0xe7, 0x6c, 0x56, - 0x00, 0xcc, 0xf3, 0x4f, 0xcf, 0x32, 0x82, 0x4d, 0x25, 0x99, 0x38, 0x84, - 0xd4, 0x14, 0x28, 0xbd, 0x7a, 0x1e, 0xd0, 0x3d, 0x12, 0x7d, 0x5a, 0x85, - 0x62, 0xfb, 0x4c, 0xfe, 0x61, 0xc0, 0xda, 0x5c, 0x29, 0xdc, 0xe0, 0xbf, - 0x50, 0x3f, 0x58, 0x4b, 0x10, 0xe3, 0x38, 0xe1, 0xcb, 0xf9, 0xd9, 0xf6, - 0xf2, 0x83, 0xc9, 0xe1, 0x3d, 0x11, 0xe7, 0xe9, 0x26, 0x5e, 0xd1, 0xf6, - 0x67, 0xe9, 0xbd, 0x11, 0x17, 0xd9, 0xaf, 0x44, 0xc5, 0x75, 0x69, 0x19, - 0x98, 0x9c, 0x35, 0x39, 0xda, 0xe6, 0x1c, 0x65, 0x55, 0xac, 0xfc, 0x0a, - 0xf0, 0xc1, 0x57, 0x5b, 0xc1, 0x59, 0x86, 0x52, 0x38, 0x0e, 0xa6, 0x3a, - 0x43, 0x07, 0x9e, 0x7c, 0x93, 0x65, 0x88, 0x91, 0x8f, 0x48, 0xf7, 0x64, - 0x7e, 0xe9, 0x38, 0xaf, 0xd6, 0x93, 0x41, 0xf4, 0x48, 0xd9, 0x28, 0x70, - 0xf9, 0x75, 0xf7, 0x8d, 0xd2, 0x5b, 0x65, 0x4e, 0x01, 0x5e, 0x6a, 0x19, - 0x53, 0xde, 0x13, 0x89, 0xa4, 0x45, 0x96, 0xe9, 0x37, 0x2d, 0x5f, 0xeb, - 0xb7, 0x48, 0xda, 0x24, 0xf9, 0x5f, 0xed, 0xb0, 0xf3, 0x1d, 0x29, 0x19, - 0x2a, 0xe7, 0xa8, 0xe0, 0x93, 0xa9, 0x48, 0x1e, 0xc2, 0xe5, 0x0a, 0x7a, - 0x75, 0x06, 0xe1, 0x7f, 0xc4, 0xf4, 0x65, 0xff, 0x9a, 0x3b, 0x93, 0x8f, - 0x71, 0xee, 0x92, 0xad, 0xb9, 0x20, 0x1c, 0x76, 0x72, 0x45, 0x95, 0xa6, - 0xd8, 0xec, 0x97, 0x23, 0x5e, 0x37, 0x3e, 0x28, 0xf2, 0x3f, 0xc7, 0xdf, - 0x46, 0x04, 0x32, 0x79, 0xd3, 0x5b, 0xd8, 0xab, 0x35, 0x34, 0x51, 0xe4, - 0x3f, 0x69, 0xb4, 0xd9, 0xe3, 0xd4, 0xc6, 0xbb, 0x2f, 0x54, 0x4b, 0xaa, - 0x1d, 0x91, 0xd3, 0xd0, 0xc7, 0xe0, 0x78, 0x9c, 0xc9, 0x34, 0xc3, 0xbb, - 0x1c, 0x1d, 0x15, 0xa8, 0x8c, 0x4f, 0x2d, 0x93, 0x10, 0x4a, 0x15, 0x0f, - 0x0e, 0xa8, 0x7d, 0x66, 0x70, 0x63, 0xa8, 0x2d, 0x0b, 0x6c, 0xce, 0x86, - 0xb4, 0xd8, 0xc6, 0x09, 0xdd, 0xcd, 0x98, 0x74, 0x49, 0x03, 0xf6, 0xb3, - 0x6b, 0x10, 0xb1, 0x17, 0x04, 0x36, 0x10, 0x1d, 0x1e, 0x75, 0xa3, 0xdb, - 0x9b, 0x5a, 0x39, 0x1c, 0xfa, 0x56, 0x5d, 0x35, 0x11, 0x16, 0x5d, 0x3b, - 0x0d, 0x39, 0xd9, 0x3a, 0x82, 0x2c, 0x56, 0xd1, 0xb2, 0xa0, 0x56, 0x85, - 0xf4, 0xdd, 0x2c, 0xe6, 0x5d, 0xa1, 0x4a, 0x88, 0x06, 0x00, 0x1a, 0x59, - 0xbb, 0xd0, 0x68, 0x29, 0x0b, 0xba, 0xa5, 0xc6, 0x89, 0xe6, 0x4b, 0x9c, - 0xdc, 0xf1, 0x12, 0x63, 0x64, 0x75, 0xc7, 0xc4, 0xaa, 0xdc, 0x66, 0x3e, - 0xaf, 0xa5, 0xdf, 0xef, 0xb0, 0x7f, 0x6d, 0x7b, 0x22, 0x70, 0xdb, 0x33, - 0x14, 0x45, 0x74, 0xf6, 0xe1, 0x2c, 0x47, 0x5e, 0x6e, 0xa6, 0x3c, 0x58, - 0x8d, 0xcc, 0x03, 0x12, 0x8b, 0xc6, 0xd0, 0xf7, 0x4d, 0xab, 0xcd, 0x90, - 0x84, 0x9b, 0xb9, 0x3b, 0xe5, 0xe2, 0x23, 0x00, 0x3d, 0xfd, 0x8f, 0xba, - 0x33, 0x71, 0x7b, 0xf9, 0xeb, 0xe8, 0x80, 0xe4, 0x61, 0x5d, 0x4a, 0xd7, - 0xe8, 0x0e, 0x12, 0x05, 0xa7, 0xcd, 0x40, 0xeb, 0xe4, 0x59, 0x1c, 0xeb, - 0x9a, 0xb1, 0xf4, 0xb7, 0x99, 0x26, 0xd1, 0x30, 0xc5, 0x66, 0xfc, 0x50, - 0xd6, 0x7d, 0x63, 0xe9, 0x0e, 0xa5, 0xf3, 0x3d, 0x8e, 0x98, 0xc3, 0xde, - 0x4a, 0xc9, 0xd7, 0xaf, 0xae, 0x73, 0x8d, 0xa3, 0x63, 0x78, 0xc8, 0x68, - 0xe7, 0x7f, 0xb7, 0x75, 0xe0, 0x2a, 0x52, 0x6b, 0xdb, 0x27, 0xe0, 0x94, - 0xab, 0x75, 0xd0, 0x84, 0xec, 0x65, 0xec, 0x2b, 0x53, 0x3a, 0x34, 0xf4, - 0x75, 0x46, 0x5e, 0x66, 0x2c, 0xf5, 0x40, 0x29, 0x84, 0xc6, 0x4d, 0xee, - 0xb6, 0x7e, 0xdb, 0x4d, 0x61, 0xe4, 0xe0, 0xd6, 0xfb, 0xb9, 0x7d, 0xd5, - 0xc5, 0xcb, 0x32, 0x7d, 0x9b, 0x9c, 0x2c, 0x0e, 0xbe, 0xea, 0xab, 0xd0, - 0x12, 0x90, 0x21, 0x06, 0x37, 0xaa, 0xeb, 0x8f, 0xdd, 0x08, 0x68, 0xbc, - 0xda, 0xd7, 0x1c, 0x11, 0x14, 0x7a, 0x4d, 0xf2, 0xf8, 0xf3, 0x10, 0xd2, - 0x5e, 0xca, 0x10, 0x15, 0xfa, 0x77, 0xd8, 0xb9, 0x7f, 0xfe, 0x6b, 0xa8, - 0x7a, 0xea, 0x0a, 0xe4, 0xd1, 0x2e, 0x2f, 0xa2, 0x81, 0x6f, 0xf5, 0xca, - 0xa6, 0xd2, 0x70, 0x34, 0xff, 0x69, 0x72, 0x6b, 0x20, 0x69, 0x8c, 0x9a, - 0x38, 0x5e, 0xfd, 0x95, 0xef, 0xb5, 0x07, 0x94, 0x2a, 0x43, 0x58, 0x45, - 0xa0, 0xf6, 0x13, 0xdd, 0x16, 0xdc, 0xa1, 0x65, 0xbc, 0xc8, 0x2e, 0x86, - 0xa0, 0x2a, 0xee, 0xb6, 0x22, 0x29, 0xeb, 0xca, 0x54, 0x97, 0x60, 0x33, - 0x84, 0xb6, 0xbb, 0xa6, 0x26, 0x4e, 0x55, 0x8c, 0x1f, 0xc3, 0x6e, 0x92, - 0xa5, 0xcf, 0x39, 0x67, 0xd5, 0x69, 0x8f, 0x7f, 0xa0, 0x4c, 0x7c, 0x8e, - 0x33, 0x3f, 0xcb, 0x14, 0x13, 0x77, 0xae, 0x86, 0xb9, 0x49, 0xe1, 0x53, - 0x9c, 0x2c, 0x8a, 0xc6, 0x7b, 0xd9, 0x0a, 0xc5, 0x10, 0x9d, 0xde, 0x8d, - 0x9d, 0x74, 0x34, 0xb5, 0xf6, 0xbe, 0x04, 0xa7, 0x56, 0xda, 0xd4, 0x8a, - 0x70, 0xdd, 0x50, 0x96, 0xe8, 0x65, 0x3a, 0xa7, 0x43, 0xe8, 0xc4, 0x19, - 0xfa, 0xfe, 0xb3, 0xa6, 0x72, 0x76, 0xd6, 0xdf, 0x8a, 0xe6, 0x8e, 0x1a, - 0x51, 0xa6, 0x21, 0x8f, 0x80, 0xd3, 0x48, 0xa1, 0xc3, 0xd4, 0xd5, 0xde, - 0x66, 0x84, 0x80, 0x68, 0x2b, 0x14, 0xa2, 0x75, 0xe5, 0x99, 0x00, 0x52, - 0xa5, 0x0a, 0x11, 0xd7, 0x85, 0x6b, 0xc8, 0xc6, 0x74, 0x16, 0xc8, 0x14, - 0x6a, 0xcb, 0x02, 0x91, 0x02, 0x05, 0x82, 0xca, 0x8b, 0x94, 0x2a, 0x3e, - 0x51, 0x6b, 0x9d, 0xda, 0x73, 0xf0, 0x77, 0x46, 0x90, 0x34, 0x22, 0xa7, - 0xa7, 0xd8, 0x29, 0xbf, 0x13, 0x6d, 0x65, 0x02, 0x0c, 0x01, 0x3b, 0x75, - 0xa1, 0x00, 0xb7, 0x09, 0xf8, 0x65, 0x04, 0x08, 0x2f, 0xab, 0xf0, 0x6b, - 0x28, 0x53, 0x9b, 0xdc, 0xbd, 0x3f, 0xf0, 0x5a, 0xd3, 0x47, 0x5c, 0x52, - 0xb9, 0xa6, 0xba, 0x04, 0x57, 0x39, 0x71, 0x13, 0x4c, 0xa1, 0xaf, 0xc6, - 0x46, 0x5e, 0x3e, 0x4c, 0xa1, 0xa2, 0xf0, 0x41, 0x95, 0x42, 0x3f, 0x64, - 0xbb, 0x45, 0xbc, 0xc2, 0x00, 0x87, 0x42, 0x0c, 0x8e, 0xdd, 0xcd, 0x37, - 0x57, 0xe5, 0x39, 0xd8, 0x81, 0x5d, 0x07, 0x85, 0x34, 0x52, 0x05, 0xb3, - 0x0f, 0x0a, 0x46, 0x2d, 0x40, 0xac, 0x3a, 0xd8, 0x4e, 0xf9, 0xc7, 0xbe, - 0xfd, 0x5c, 0xdd, 0x83, 0x60, 0x07, 0xda, 0x7d, 0x45, 0x1f, 0x21, 0xf8, - 0xa5, 0xe2, 0x2d, 0xe8, 0xe5, 0x2f, 0xc6, 0x19, 0x16, 0x4b, 0x2f, 0x48, - 0x72, 0x57, 0x30, 0xcd, 0xa6, 0x27, 0xa6, 0x19, 0x41, 0x64, 0x73, 0x1b, - 0x29, 0x3d, 0x4b, 0x10, 0xa5, 0x41, 0x22, 0x6b, 0x9c, 0x82, 0xc4, 0xb9, - 0x69, 0xa3, 0x9c, 0x9d, 0x8a, 0xcd, 0x17, 0x2e, 0xa0, 0x12, 0x9e, 0xf2, - 0x22, 0x54, 0xe7, 0xaa, 0x50, 0x92, 0xc6, 0xed, 0x77, 0xd4, 0x89, 0xe8, - 0xcf, 0x73, 0x6f, 0x66, 0x55, 0x6c, 0xb3, 0x5d, 0x4b, 0x8d, 0x5b, 0x72, - 0xb0, 0xa8, 0xfb, 0x18, 0x37, 0xae, 0x85, 0x25, 0x07, 0x8b, 0xfe, 0x67, - 0x9b, 0x2a, 0x99, 0x7b, 0x2d, 0x94, 0x6f, 0x6d, 0x9e, 0x83, 0x7d, 0xf0, - 0xec, 0x24, 0x3c, 0x2d, 0xf6, 0x4d, 0x0a, 0x08, 0xbb, 0x54, 0xbd, 0x01, - 0x7c, 0xd3, 0xf5, 0x4f, 0x7f, 0xac, 0xc6, 0x33, 0x4c, 0x78, 0x7f, 0x7a, - 0xd1, 0x0f, 0xad, 0xb9, 0x10, 0x4a, 0xba, 0x26, 0x19, 0xf5, 0xe0, 0x36, - 0xbf, 0xf7, 0xff, 0x79, 0x91, 0xba, 0x0e, 0x35, 0x0c, 0x53, 0xb0, 0x0b, - 0xd6, 0xd9, 0x84, 0x36, 0xa2, 0x85, 0xa3, 0x88, 0x1c, 0x7f, 0xde, 0xb7, - 0x3b, 0xb9, 0x8b, 0x38, 0x85, 0x91, 0xf9, 0x8b, 0x41, 0xc0, 0x92, 0x8b, - 0x8d, 0x1d, 0x74, 0x99, 0x6b, 0xa9, 0x1c, 0xd9, 0x2d, 0xff, 0xfb, 0x01, - 0xd6, 0xa3, 0xf0, 0x57, 0xbe, 0x67, 0x15, 0xa9, 0xa2, 0x30, 0xc8, 0x5a, - 0xb0, 0xf1, 0x31, 0x95, 0xb7, 0x86, 0x37, 0xa7, 0xd4, 0xb7, 0xf4, 0x2c, - 0xb9, 0xb4, 0x1c, 0x5e, 0x37, 0xd6, 0x1c, 0x4d, 0x83, 0xe5, 0x77, 0xdd, - 0xa7, 0xd9, 0x31, 0xc7, 0xc1, 0x47, 0x5b, 0x81, 0x9f, 0x08, 0xb4, 0x51, - 0x1f, 0x5e, 0x27, 0x7c, 0xde, 0xe4, 0x7f, 0xc2, 0x2d, 0x91, 0x38, 0x2d, - 0x35, 0x44, 0x0a, 0xbf, 0xf0, 0xd6, 0x29, 0xca, 0xae, 0x2e, 0x67, 0xba, - 0xc7, 0xe4, 0xd1, 0xb7, 0x7a, 0x5b, 0xff, 0xcf, 0xd6, 0x0b, 0x1b, 0x02, - 0xc0, 0x7b, 0x56, 0x51, 0x61, 0x8d, 0xf6, 0x0f, 0x88, 0x5c, 0xe1, 0xe1, - 0x8b, 0x79, 0x65, 0xfb, 0x11, 0xf1, 0x8e, 0x11, 0x78, 0xed, 0x89, 0xc5, - 0x13, 0xd1, 0xe0, 0x2e, 0xd5, 0xd4, 0x0c, 0x86, 0xca, 0xd5, 0xa0, 0x12, - 0x0e, 0xc1, 0xdf, 0x57, 0xcc, 0xb9, 0x64, 0x0c, 0x37, 0x77, 0xbc, 0x5c, - 0x94, 0xe4, 0x60, 0x80, 0xfb, 0x6e, 0x44, 0xa8, 0xa7, 0xa3, 0xd1, 0xec, - 0x0d, 0x5e, 0x7b, 0xa0, 0x0e, 0x2c, 0x52, 0x0a, 0x7e, 0xb7, 0x21, 0xe4, - 0x87, 0x75, 0xb1, 0x4e, 0x12, 0x45, 0x82, 0xe4, 0xe6, 0x68, 0x1b, 0xc6, - 0x90, 0xc0, 0x09, 0xfc, 0xc1, 0x8b, 0x26, 0x60, 0xa5, 0xf6, 0xb9, 0x16, - 0x75, 0x83, 0xc7, 0x99, 0xab, 0xc3, 0x90, 0x3e, 0x7b, 0x1f, 0xde, 0xd5, - 0x93, 0x08, 0xf8, 0x11, 0x7a, 0xfc, 0x66, 0xc6, 0xb1, 0xff, 0x82, 0x89, - 0x63, 0x64, 0xd4, 0xd6, 0x84, 0xb9, 0x49, 0x1e, 0x3a, 0x26, 0xaf, 0x05, - 0xfc, 0xdb, 0xc4, 0xf2, 0xa5, 0xd8, 0xec, 0xd1, 0xe4, 0xfb, 0xae, 0x7e, - 0x8a, 0x34, 0x33, 0x31, 0x9d, 0x81, 0xd1, 0x6e, 0xf7, 0x95, 0x1d, 0xc5, - 0x4c, 0x3a, 0x92, 0x02, 0x05, 0xa8, 0x89, 0x37, 0x89, 0x28, 0x1a, 0xaf, - 0xa8, 0x3c, 0xe9, 0x1c, 0x2e, 0x47, 0xb3, 0xc9, 0xb9, 0xbf, 0x59, 0x1a, - 0xed, 0xf1, 0xa9, 0xeb, 0xb5, 0x5a, 0x73, 0x22, 0xa2, 0x65, 0x5a, 0xcc, - 0xef, 0x69, 0x8e, 0xb0, 0x9c, 0xe9, 0xb8, 0x06, 0x69, 0x44, 0x58, 0xb2, - 0x42, 0x45, 0x09, 0x71, 0xa8, 0x17, 0x57, 0xd8, 0xd9, 0x61, 0x63, 0x79, - 0x13, 0x2b, 0xee, 0xf8, 0x59, 0x1e, 0x71, 0x19, 0x69, 0x05, 0xea, 0xb0, - 0xef, 0xde, 0x3b, 0xef, 0x85, 0x2a, 0x76, 0x57, 0xb5, 0x7c, 0xf0, 0x6b, - 0xa9, 0x89, 0x9a, 0x48, 0xc8, 0x74, 0x5a, 0x47, 0xcd, 0xcc, 0x1a, 0x1c, - 0x80, 0x6e, 0xd1, 0xd9, 0xab, 0x09, 0x02, 0x66, 0x86, 0x73, 0x85, 0xbe, - 0x45, 0x26, 0x9a, 0x74, 0xa9, 0x82, 0xd6, 0xa1, 0xc3, 0xf3, 0x24, 0x7f, - 0xe4, 0x5b, 0xd0, 0xf3, 0x29, 0xd9, 0xd1, 0x00, 0x9a, 0xa8, 0x67, 0x1f, - 0xa4, 0xcd, 0x17, 0x7c, 0x9d, 0x2d, 0xaa, 0x34, 0x1b, 0xba, 0x39, 0x53, - 0x10, 0x8a, 0xea, 0x65, 0xbe, 0xb4, 0x2c, 0x22, 0xe6, 0xea, 0x7e, 0x25, - 0x65, 0x41, 0xf9, 0xf1, 0xe0, 0x8d, 0x14, 0xfd, 0x78, 0x9c, 0x7b, 0xb1, - 0x67, 0x15, 0xee, 0x67, 0x49, 0x0a, 0x76, 0x1f, 0x21, 0x66, 0xb5, 0xd3, - 0x38, 0x43, 0x9e, 0x10, 0xfa, 0xd7, 0x6b, 0xf3, 0x6b, 0x67, 0xa2, 0x76, - 0xa4, 0x56, 0x47, 0x13, 0x29, 0xb6, 0x8d, 0xe9, 0xe7, 0xc8, 0x10, 0xe6, - 0x4f, 0x2c, 0x68, 0xd3, 0xfb, 0x83, 0xfa, 0xd9, 0xfc, 0x9f, 0xe7, 0x30, - 0xbe, 0x0a, 0x0d, 0xf2, 0xca, 0x18, 0xcb, 0x83, 0x86, 0x6e, 0x83, 0x32, - 0x0b, 0xd9, 0xe8, 0x06, 0x40, 0x59, 0x7b, 0x12, 0x42, 0x6b, 0xf1, 0xa2, - 0xaf, 0xe2, 0x1d, 0x0d, 0x11, 0xd9, 0x59, 0x0e, 0xa3, 0x49, 0xbd, 0xdd, - 0x1a, 0x29, 0x09, 0x4e, 0x6e, 0x0b, 0x4f, 0x88, 0x5d, 0x79, 0xda, 0x93, - 0x08, 0x65, 0xd9, 0x56, 0x4b, 0xef, 0x8c, 0x44, 0xe8, 0x14, 0x58, 0x6b, - 0xfc, 0x9f, 0x8b, 0x57, 0x59, 0xe6, 0xdd, 0xd6, 0xf2, 0x3e, 0x2a, 0x7e, - 0x80, 0x7f, 0x52, 0x14, 0x86, 0xe9, 0xe1, 0xc5, 0x5f, 0x47, 0x07, 0x85, - 0x99, 0xa7, 0x4e, 0x0c, 0x37, 0x6c, 0xdc, 0x60, 0xe9, 0xe7, 0x5e, 0xe0, - 0x35, 0x98, 0xe5, 0x30, 0x3d, 0x12, 0xdb, 0x41, 0x3c, 0xce, 0xee, 0x05, - 0xb7, 0xb1, 0x13, 0xcc, 0x69, 0xf5, 0xcc, 0xe7, 0xa8, 0x38, 0x5a, 0xb5, - 0xfb, 0x65, 0xac, 0xc5, 0xa1, 0x0a, 0x34, 0x08, 0x93, 0x15, 0x5b, 0xfa, - 0x18, 0x20, 0x00, 0x05, 0x01, 0x13, 0xe9, 0x07, 0xb5, 0x9d, 0x98, 0x7f, - 0xab, 0x49, 0xb2, 0xb4, 0x51, 0x0f, 0xfa, 0x5c, 0x03, 0x62, 0x46, 0xb3, - 0xe8, 0x03, 0xce, 0xfe, 0x84, 0x29, 0xd5, 0x36, 0x4c, 0x42, 0x36, 0x1f, - 0x75, 0x1f, 0x98, 0x91, 0xd7, 0x1a, 0x5c, 0x84, 0x60, 0xb5, 0xe3, 0x32, - 0xa7, 0xfb, 0xd8, 0x30, 0x10, 0x5f, 0x15, 0x35, 0x58, 0x41, 0xa2, 0xf8, - 0xf7, 0xea, 0xbc, 0x21, 0x49, 0x81, 0x46, 0xf2, 0xd5, 0xbb, 0x4c, 0x7f, - 0x89, 0x06, 0xe9, 0xd6, 0x19, 0x51, 0x1a, 0x06, 0x93, 0x37, 0x92, 0x11, - 0x87, 0x5a, 0x7d, 0x68, 0x75, 0x4c, 0xf7, 0x59, 0xd2, 0x1a, 0x62, 0xae, - 0xe7, 0xb0, 0xc0, 0x50, 0x52, 0xfd, 0x66, 0x30, 0x34, 0xb3, 0x42, 0x1a, - 0x42, 0xd9, 0xdc, 0x6d, 0xe1, 0x58, 0xbd, 0x30, 0x2e, 0x19, 0xed, 0xcd, - 0xc3, 0xe1, 0xd1, 0xd2, 0x16, 0x93, 0x0a, 0xe4, 0x8f, 0xa5, 0xc6, 0xc7, - 0xb8, 0x26, 0x89, 0xa1, 0x2f, 0x6d, 0x3d, 0xf3, 0xc9, 0xeb, 0x6b, 0x26, - 0xdb, 0xe9, 0x4e, 0x37, 0x76, 0x8f, 0x9c, 0x99, 0x53, 0x16, 0x7b, 0x9b, - 0x8d, 0x5c, 0xa6, 0x9e, 0x20, 0x26, 0xca, 0xcb, 0xde, 0x87, 0xe1, 0x30, - 0xcf, 0xa1, 0xa1, 0x1f, 0xa0, 0xe0, 0x10, 0x41, 0x91, 0xf5, 0xac, 0x96, - 0x88, 0xd3, 0x31, 0x2b, 0x00, 0x41, 0x11, 0xb4, 0x1c, 0x90, 0xb5, 0xdd, - 0x05, 0x25, 0x66, 0xc0, 0x43, 0x47, 0x0b, 0xcb, 0xb5, 0x62, 0x47, 0xb7, - 0xb2, 0x9b, 0x3b, 0x17, 0x87, 0xa0, 0x09, 0x6a, 0x85, 0x8a, 0xce, 0xcc, - 0x41, 0xb2, 0x04, 0x3a, 0x4f, 0xd0, 0x2e, 0x6c, 0xa7, 0xb4, 0x1b, 0x6f, - 0x37, 0x0e, 0x1f, 0x87, 0x59, 0x39, 0x96, 0x74, 0x32, 0xfa, 0xc1, 0xc2, - 0xb2, 0x2e, 0xba, 0xc1, 0x47, 0xf8, 0x42, 0xbf, 0x6c, 0x89, 0xe3, 0x75, - 0xf2, 0x05, 0x0e, 0x96, 0x22, 0x1d, 0x6e, 0x2f, 0x5f, 0xc3, 0x8d, 0x71, - 0x0a, 0xcd, 0x4f, 0xe7, 0xe7, 0xd6, 0x82, 0x8c, 0x9c, 0xb0, 0x4f, 0xe5, - 0x86, 0x91, 0x65, 0xf7, 0xe4, 0x3e, 0x00, 0xb3, 0x8f, 0x9d, 0xb6, 0xeb, - 0xf2, 0xcc, 0xc5, 0x9b, 0x32, 0xb4, 0xd8, 0x17, 0x7e, 0xa9, 0x4f, 0xe0, - 0xa1, 0xb3, 0x7e, 0x40, 0x0d, 0x53, 0xa0, 0xbe, 0x81, 0x03, 0x0d, 0x94, - 0x4b, 0x71, 0xfb, 0xb2, 0x82, 0x41, 0x3a, 0x6c, 0xf1, 0x9a, 0xe0, 0x49, - 0x53, 0x8a, 0xc4, 0x9e, 0x64, 0xef, 0x2a, 0xaf, 0xa3, 0x43, 0xc2, 0x7c, - 0x5b, 0x93, 0xac, 0xc6, 0xaa, 0x02, 0x68, 0x05, 0xeb, 0x90, 0x50, 0x65, - 0xda, 0x26, 0x8f, 0x61, 0xcf, 0x29, 0x8a, 0xbe, 0x3a, 0x6f, 0x5a, 0xe7, - 0x30, 0xb7, 0x4f, 0x75, 0x09, 0xae, 0xce, 0x62, 0xe0, 0x3a, 0x65, 0xb4, - 0x9c, 0x12, 0x3b, 0x14, 0x4e, 0x4e, 0x19, 0x57, 0xb2, 0x20, 0xcd, 0x81, - 0xd3, 0xf7, 0xe0, 0x11, 0xf5, 0xbe, 0x15, 0x31, 0xf1, 0x24, 0x9d, 0x06, - 0x2f, 0x0f, 0x18, 0x36, 0xc7, 0x2f, 0x55, 0x74, 0x5c, 0x08, 0xaa, 0x1a, - 0xde, 0x0e, 0x50, 0x5d, 0xd5, 0xc9, 0xf1, 0x89, 0x9f, 0xd0, 0x5d, 0x45, - 0xef, 0x0a, 0x01, 0xdd, 0xd2, 0x41, 0xe8, 0xa0, 0x1a, 0xc9, 0xea, 0xc3, - 0xe2, 0x34, 0x48, 0xe6, 0x0c, 0x24, 0xdb, 0xa2, 0xef, 0xe2, 0x61, 0x16, - 0xcb, 0xde, 0x0e, 0x26, 0x6f, 0x76, 0xb0, 0x28, 0x53, 0xa8, 0x78, 0xb8, - 0x5e, 0x39, 0x42, 0x78, 0x5a, 0x28, 0x7e, 0x11, 0x77, 0x20, 0x90, 0xa9, - 0xca, 0x8b, 0xd6, 0xaa, 0xc3, 0xb4, 0x0e, 0x70, 0xc5, 0x8a, 0xb5, 0x6e, - 0x74, 0x82, 0x21, 0xa6, 0x69, 0xe9, 0xc1, 0x9e, 0xef, 0x3e, 0x93, 0xed, - 0xc0, 0x6f, 0x26, 0xdc, 0x46, 0xa6, 0x50, 0xda, 0x86, 0xd2, 0xe8, 0xf1, - 0x8c, 0xbc, 0xad, 0x40, 0x58, 0x1e, 0x6b, 0x6f, 0xb1, 0x42, 0x6d, 0x47, - 0xf5, 0x24, 0xd6, 0xf7, 0x78, 0x1c, 0x63, 0xb9, 0xd0, 0xe1, 0xd5, 0x82, - 0x0f, 0xd3, 0x14, 0x56, 0x6a, 0xd2, 0xa7, 0xb7, 0xc3, 0x48, 0x9f, 0xfe, - 0xa2, 0xa8, 0x51, 0x3f, 0x20, 0x42, 0x9c, 0x8c, 0xd2, 0xe8, 0xd7, 0xce, - 0xfa, 0xb1, 0xe8, 0x60, 0x3f, 0xcc, 0xf5, 0xd2, 0xf8, 0x38, 0x40, 0xc5, - 0xa8, 0xc4, 0x58, 0x63, 0xb6, 0xf4, 0x0d, 0x46, 0x3c, 0x45, 0xb2, 0xea, - 0x98, 0x9c, 0x8e, 0x86, 0x2b, 0x89, 0x20, 0xab, 0x45, 0xf7, 0x71, 0x9c, - 0x09, 0x97, 0x4b, 0x33, 0x1e, 0x4b, 0x4f, 0x12, 0x5b, 0xe5, 0x60, 0xdb, - 0xc2, 0xb9, 0x86, 0x83, 0x38, 0x8a, 0x2f, 0xd6, 0xa4, 0x2f, 0xc6, 0x81, - 0x97, 0xc4, 0xfd, 0xa4, 0xbf, 0xe9, 0xc5, 0x05, 0x24, 0x3b, 0xb1, 0xc4, - 0x22, 0xde, 0x73, 0x5a, 0x61, 0x78, 0x36, 0xe1, 0xa3, 0xf4, 0x52, 0x1d, - 0xaa, 0xfc, 0xbd, 0x32, 0xda, 0x56, 0x69, 0x41, 0x96, 0x3f, 0xdb, 0xa9, - 0xad, 0xe5, 0x79, 0xcb, 0x50, 0xb4, 0x31, 0x4c, 0x35, 0xf9, 0xb8, 0xbf, - 0xa8, 0x88, 0xd1, 0x05, 0xe6, 0x35, 0xbc, 0xfd, 0x39, 0x1f, 0x92, 0xef, - 0xb3, 0xe0, 0x46, 0x66, 0x2b, 0xa4, 0xf2, 0x04, 0xeb, 0xa2, 0x56, 0xdc, - 0xc8, 0x42, 0x76, 0x6c, 0x95, 0x8c, 0x8d, 0xc7, 0x4e, 0x6b, 0x54, 0xc7, - 0x5f, 0x48, 0x3f, 0xce, 0x20, 0xdd, 0x34, 0xb0, 0x92, 0x7d, 0x60, 0x93, - 0x4d, 0x20, 0xf3, 0x7c, 0x31, 0xda, 0x9c, 0x46, 0x0e, 0x21, 0x50, 0xb9, - 0xaf, 0x37, 0x93, 0xfb, 0x58, 0xce, 0x54, 0xce, 0x88, 0x65, 0x93, 0x7b, - 0x7b, 0xd3, 0x18, 0xe5, 0xc0, 0x51, 0xee, 0x0c, 0x37, 0x73, 0x30, 0x61, - 0x57, 0xb0, 0x30, 0xda, 0x54, 0xb0, 0x97, 0x4f, 0x44, 0xee, 0x14, 0x13, - 0xbc, 0x3b, 0xe6, 0xb1, 0x4b, 0xc6, 0xae, 0x0e, 0x13, 0x31, 0xc3, 0x65, - 0x2e, 0x28, 0xa8, 0x2c, 0xc5, 0xbb, 0x19, 0x5d, 0xf5, 0x9d, 0xfa, 0x7a, - 0x9a, 0xf8, 0x36, 0x4a, 0x8b, 0xfe, 0xdb, 0x55, 0xaf, 0x6f, 0x37, 0x27, - 0xfc, 0x59, 0x41, 0x02, 0x08, 0xe8, 0xda, 0x90, 0x6c, 0x42, 0x15, 0xe7, - 0xce, 0xdc, 0xce, 0x7d, 0x96, 0xc1, 0xc6, 0x61, 0x6a, 0x00, 0xba, 0x69, - 0xc7, 0x49, 0xa5, 0x80, 0x01, 0x9f, 0x69, 0x86, 0xa4, 0xb2, 0xd5, 0x0f, - 0x7a, 0x43, 0xee, 0x92, 0x1d, 0x73, 0xcf, 0x84, 0xc7, 0x4d, 0x83, 0x25, - 0x7b, 0xc7, 0x9d, 0x7e, 0xab, 0x73, 0xb2, 0x42, 0x6c, 0x72, 0x25, 0x4f, - 0xc1, 0xda, 0xfe, 0x15, 0x47, 0x1a, 0xd8, 0x39, 0x84, 0xc0, 0x10, 0xf3, - 0xf7, 0xa8, 0x8e, 0x76, 0xe1, 0x63, 0xa2, 0xb3, 0x51, 0xf3, 0x79, 0xb6, - 0xc0, 0xa4, 0xbf, 0xbe, 0xb7, 0xf1, 0xf0, 0x2a, 0x24, 0xf7, 0x79, 0x51, - 0x88, 0x93, 0x01, 0x49, 0xf3, 0xaf, 0x4a, 0x21, 0xc1, 0xbf, 0xbb, 0xf6, - 0x6b, 0xe1, 0x70, 0x63, 0x29, 0x40, 0x87, 0x78, 0xb5, 0x07, 0xa4, 0x46, - 0x90, 0xc8, 0x45, 0x0b, 0x58, 0x08, 0xbf, 0xdf, 0x9c, 0x9d, 0xd7, 0x01, - 0xf8, 0xb5, 0x81, 0x03, 0xa4, 0x73, 0x7f, 0x52, 0xfa, 0x24, 0x08, 0x27, - 0x8f, 0x35, 0xd7, 0x76, 0xd5, 0x3f, 0xe0, 0x4c, 0x99, 0xb8, 0x52, 0x55, - 0x5c, 0x3f, 0xbd, 0x23, 0x8b, 0x8a, 0xca, 0xec, 0xdd, 0xb9, 0xbb, 0x18, - 0x68, 0x39, 0xcd, 0xd2, 0xa3, 0x96, 0x51, 0x61, 0xe2, 0x72, 0x3a, 0x6b, - 0xf8, 0x22, 0xe2, 0x9d, 0xe6, 0x86, 0x4a, 0x08, 0xb9, 0x64, 0x0e, 0x28, - 0x4b, 0xc9, 0xd4, 0x9e, 0x91, 0x84, 0x6b, 0xf2, 0x00, 0x1e, 0xea, 0x30, - 0xa4, 0x4c, 0x3b, 0x67, 0xff, 0xd5, 0x12, 0xb7, 0x1f, 0x62, 0xa5, 0x99, - 0x05, 0xbd, 0x69, 0x23, 0xb5, 0x33, 0xb0, 0x63, 0x64, 0x88, 0x9e, 0xa7, - 0x8b, 0x69, 0xf4, 0x92, 0x2e, 0xd7, 0x43, 0x3d, 0x19, 0x78, 0xc2, 0x0f, - 0x91, 0x40, 0x0b, 0x8f, 0xef, 0xa6, 0x3e, 0x08, 0x3c, 0x54, 0x8d, 0x7c, - 0x84, 0x47, 0x73, 0xe3, 0x7e, 0x70, 0x68, 0x11, 0x82, 0xcd, 0xfe, 0x77, - 0x4e, 0x91, 0x4c, 0x26, 0x56, 0xa0, 0x6f, 0x81, 0x97, 0x1f, 0xff, 0x05, - 0x83, 0xbd, 0x41, 0xf8, 0x9d, 0x98, 0x91, 0xf5, 0xb0, 0xd7, 0x07, 0x1b, - 0x13, 0x63, 0x52, 0xd7, 0xe4, 0x1a, 0xe5, 0xe0, 0x12, 0x9a, 0x55, 0xe9, - 0x40, 0xf1, 0xb3, 0xcc, 0xbb, 0x82, 0xbb, 0xda, 0xfc, 0xe6, 0x83, 0xb3, - 0x3d, 0xe6, 0x77, 0x74, 0x78, 0x7f, 0xe5, 0x14, 0x0c, 0xea, 0x87, 0x61, - 0x3d, 0x85, 0xe3, 0x08, 0x7f, 0x72, 0x08, 0x02, 0xc8, 0xc9, 0xef, 0xb4, - 0x04, 0x9a, 0x3e, 0xe3, 0xad, 0x52, 0x89, 0xea, 0x27, 0x5f, 0x47, 0xe2, - 0xa6, 0xba, 0xc4, 0x63, 0xe3, 0xd0, 0x2b, 0x10, 0x60, 0xe7, 0x59, 0x74, - 0xae, 0x7d, 0x6d, 0x55, 0x83, 0x13, 0x75, 0x11, 0x82, 0x22, 0x95, 0x09, - 0x8b, 0x8c, 0x6c, 0x10, 0xa4, 0x52, 0x15, 0x41, 0xb5, 0x3e, 0x81, 0x82, - 0x44, 0x5d, 0xa7, 0xd9, 0x1b, 0xd2, 0xcb, 0x11, 0xd0, 0x53, 0xf4, 0x74, - 0x36, 0xba, 0xf1, 0xe6, 0x4b, 0x23, 0x2b, 0x0b, 0xb5, 0xa3, 0xe7, 0xe3, - 0x38, 0xe5, 0x1d, 0x45, 0xf2, 0xf6, 0xe9, 0xfd, 0x9d, 0xb8, 0x69, 0xd5, - 0x96, 0xf2, 0xa7, 0x2f, 0x24, 0x6b, 0x55, 0x20, 0xe6, 0xf7, 0xe2, 0xcf, - 0x18, 0x91, 0xb2, 0x41, 0x70, 0xda, 0x7a, 0xfc, 0x07, 0x6f, 0x45, 0xd9, - 0xdd, 0x53, 0xb9, 0x29, 0x82, 0x9d, 0xdb, 0x9e, 0xea, 0xdd, 0x6b, 0x32, - 0x9e, 0xb1, 0x4a, 0x80, 0x5a, 0xf8, 0x6d, 0x00, 0xd8, 0xcd, 0x25, 0x2d, - 0x9b, 0x52, 0xdf, 0x91, 0xdf, 0x55, 0x9b, 0xce, 0x8a, 0xc3, 0xe8, 0x9c, - 0xf2, 0xd5, 0x66, 0x11, 0x8c, 0x27, 0x1c, 0x29, 0x5f, 0x27, 0xf7, 0x7d, - 0x19, 0x2d, 0xbc, 0x00, 0x16, 0x9c, 0x32, 0x5f, 0x7c, 0xfc, 0x15, 0xe4, - 0x16, 0xc6, 0x58, 0xeb, 0x9b, 0x40, 0x8f, 0xc7, 0xbb, 0x05, 0xda, 0xa6, - 0xf7, 0xbb, 0x74, 0x36, 0xcd, 0xf4, 0xa0, 0xde, 0x71, 0xc3, 0xd5, 0x89, - 0xd1, 0x19, 0x99, 0xb6, 0x7f, 0xd5, 0xf4, 0xb8, 0x8f, 0x11, 0xea, 0x5d, - 0xc2, 0x40, 0x51, 0xcb, 0x6a, 0x5c, 0xc2, 0x8a, 0x11, 0x22, 0xd9, 0x53, - 0xb1, 0x1e, 0x48, 0xcc, 0xb8, 0x6b, 0xeb, 0x9a, 0x69, 0xe1, 0x5a, 0x39, - 0x84, 0x4e, 0x8d, 0xcb, 0xef, 0x8a, 0x5b, 0xac, 0x73, 0x72, 0xe0, 0xf4, - 0xf8, 0x60, 0x76, 0xcd, 0x28, 0xf1, 0x78, 0x08, 0x29, 0x14, 0x07, 0x14, - 0xfe, 0x4c, 0x5b, 0x03, 0x27, 0xcd, 0x98, 0x3c, 0x9c, 0x90, 0x14, 0xc4, - 0x67, 0xa6, 0x66, 0xf0, 0xc6, 0x19, 0x91, 0x61, 0xa4, 0x33, 0x9f, 0xef, - 0xbe, 0x5f, 0x07, 0xaf, 0x41, 0x02, 0x13, 0x88, 0x2b, 0xf6, 0x77, 0xa1, - 0x42, 0x82, 0xef, 0x42, 0x8c, 0x7f, 0x05, 0x3f, 0xb3, 0x8d, 0x14, 0x58, - 0x62, 0xe9, 0x5e, 0xb0, 0xab, 0x80, 0xdf, 0xf0, 0x3c, 0x97, 0x81, 0xb2, - 0x0f, 0x98, 0xd3, 0xd0, 0x93, 0x33, 0x0f, 0x91, 0x1c, 0xcc, 0xde, 0xf8, - 0xf5, 0x77, 0xb6, 0xfa, 0x34, 0x4b, 0x0c, 0x9f, 0x22, 0xeb, 0x74, 0x6c, - 0xc6, 0xf5, 0x2e, 0xa4, 0x07, 0x31, 0xa4, 0x23, 0xde, 0xd1, 0x9b, 0x4c, - 0x15, 0x9f, 0xe4, 0xd1, 0x8b, 0x3b, 0x2d, 0x01, 0x17, 0x83, 0xea, 0x39, - 0x62, 0xd5, 0x0b, 0xae, 0x5a, 0x17, 0x73, 0xcd, 0x34, 0xa0, 0x53, 0x65, - 0x3c, 0x44, 0x19, 0x13, 0x53, 0x3f, 0x04, 0xf0, 0x55, 0x48, 0xe8, 0x02, - 0xd9, 0xd8, 0xdd, 0x94, 0x68, 0x19, 0x33, 0xeb, 0x93, 0x04, 0x61, 0xe0, - 0xea, 0x3b, 0x4c, 0x9a, 0xe6, 0x90, 0x78, 0x60, 0x25, 0xad, 0x98, 0x5a, - 0x76, 0xfb, 0x5d, 0xb0, 0x74, 0xc8, 0x91, 0xcc, 0x80, 0xd1, 0xc1, 0x9c, - 0xd3, 0x21, 0x88, 0x0b, 0x9a, 0x88, 0x02, 0xd8, 0x6b, 0xb3, 0xad, 0x46, - 0x2e, 0xac, 0x45, 0xc1, 0x1b, 0x04, 0x27, 0x1c, 0xb2, 0x53, 0xed, 0x34, - 0x59, 0x62, 0xf0, 0xf8, 0x7c, 0xee, 0xce, 0x91, 0x93, 0x68, 0x3f, 0xad, - 0xb8, 0xdd, 0xa1, 0x59, 0x8b, 0x21, 0x80, 0x12, 0x63, 0x00, 0xc9, 0xc9, - 0xe6, 0x2e, 0x5c, 0x7f, 0xb5, 0x25, 0x6f, 0xfb, 0x71, 0xf8, 0x8a, 0x58, - 0x3c, 0x25, 0xfa, 0x14, 0xd1, 0xbf, 0x33, 0x28, 0x64, 0x84, 0x42, 0x73, - 0x13, 0x7c, 0xc8, 0x68, 0xbb, 0x64, 0x67, 0x84, 0xbf, 0xce, 0x46, 0xfd, - 0xdc, 0x56, 0x8b, 0x6e, 0x11, 0xc5, 0x83, 0x98, 0x6b, 0x67, 0x19, 0xee, - 0xfd, 0xb2, 0xf1, 0xe9, 0xac, 0x0f, 0xbf, 0x9b, 0xc0, 0xba, 0xbe, 0x6d, - 0xf0, 0x57, 0xa7, 0x2b, 0xeb, 0xca, 0xef, 0x03, 0xe0, 0xb5, 0xe1, 0xfb, - 0x57, 0x67, 0xa3, 0xba, 0xb6, 0x84, 0xab, 0xae, 0xce, 0x45, 0xee, 0x0a, - 0x43, 0x96, 0xe3, 0x81, 0x09, 0x11, 0x5d, 0x27, 0xcb, 0xca, 0x3c, 0xca, - 0xb0, 0x24, 0x78, 0x2f, 0x6a, 0xa8, 0x8d, 0xa5, 0x81, 0xb4, 0x49, 0x80, - 0x2b, 0x44, 0xd7, 0x32, 0xbc, 0x1f, 0xef, 0x2f, 0xbb, 0x1c, 0xa4, 0x9f, - 0xcc, 0x19, 0x48, 0x9f, 0x3c, 0x48, 0x31, 0xfa, 0x84, 0x81, 0xe7, 0x02, - 0x83, 0xbc, 0x55, 0xaa, 0x67, 0x36, 0x65, 0x82, 0xbf, 0x30, 0xa5, 0xe4, - 0x4c, 0x12, 0x47, 0xee, 0x67, 0xf1, 0x87, 0x68, 0x91, 0x4a, 0x14, 0xdf, - 0x4b, 0x88, 0xca, 0xe2, 0xfa, 0x2f, 0xef, 0xed, 0x68, 0xc4, 0x44, 0xa2, - 0x02, 0xba, 0x4d, 0x05, 0x9c, 0x65, 0xc0, 0x88, 0x46, 0x84, 0x8a, 0x35, - 0x40, 0x59, 0x8d, 0x96, 0x61, 0x17, 0x3e, 0x4e, 0x81, 0x31, 0xf5, 0x7f, - 0xa3, 0x32, 0xc2, 0xea, 0xc7, 0x7b, 0x2d, 0xad, 0x4e, 0x1e, 0x45, 0x29, - 0x56, 0xfc, 0xc5, 0x56, 0xd9, 0x99, 0x97, 0x30, 0x4f, 0x51, 0x3d, 0xb8, - 0x72, 0x88, 0x82, 0x66, 0xb4, 0x1f, 0xd8, 0xd8, 0x00, 0xfd, 0x53, 0x94, - 0x5b, 0x6e, 0xe5, 0x1e, 0xb2, 0xb6, 0xe7, 0x5a, 0x80, 0xa2, 0xa6, 0x0f, - 0x0b, 0x53, 0xa9, 0x83, 0x6c, 0x17, 0x14, 0x63, 0xe9, 0x51, 0xc9, 0x47, - 0xca, 0x50, 0xdc, 0x26, 0x90, 0xb8, 0x66, 0x0f, 0x2e, 0x4c, 0xb4, 0x98, - 0x89, 0x5d, 0x63, 0x8a, 0x06, 0xf6, 0x9d, 0xd3, 0xaa, 0xad, 0x15, 0x68, - 0xf2, 0xdf, 0xad, 0x27, 0x43, 0xf5, 0x30, 0x08, 0xd1, 0x2a, 0xf3, 0x18, - 0x22, 0xb0, 0x84, 0x39, 0x16, 0x7a, 0x7b, 0x9f, 0x93, 0x92, 0x57, 0x35, - 0xcb, 0xdf, 0x78, 0x4a, 0xc4, 0x99, 0xd9, 0xe5, 0x72, 0xac, 0x80, 0xea, - 0xab, 0x8d, 0x1f, 0xde, 0x34, 0xdc, 0x1f, 0x5f, 0x3a, 0xfc, 0x07, 0x9b, - 0xef, 0x62, 0xeb, 0x15, 0x69, 0x9b, 0x20, 0x53, 0x02, 0x43, 0x4b, 0x65, - 0x51, 0x54, 0xb5, 0x2e, 0xad, 0x53, 0x0a, 0x72, 0xa2, 0x19, 0xd4, 0x0c, - 0x77, 0x8e, 0xd4, 0x5a, 0x9c, 0x4d, 0x8e, 0x1e, 0x8e, 0x72, 0x2b, 0xdc, - 0x0d, 0x36, 0x73, 0xbd, 0xe4, 0x80, 0x3e, 0xae, 0x32, 0x36, 0x7f, 0x29, - 0x50, 0xd9, 0x26, 0xd8, 0xb5, 0xea, 0xf4, 0x30, 0x23, 0xdb, 0x4e, 0x5e, - 0xfa, 0x01, 0x85, 0xe2, 0xe6, 0x35, 0x2b, 0x01, 0x6b, 0x3e, 0xe4, 0xf3, - 0xcc, 0x04, 0x1c, 0x47, 0x38, 0xeb, 0xa5, 0x0e, 0x59, 0x48, 0x2f, 0x67, - 0xe6, 0x80, 0x1d, 0x4a, 0x54, 0xab, 0x90, 0x5a, 0x16, 0x7d, 0x35, 0x58, - 0xf6, 0x61, 0x6a, 0xaa, 0x7a, 0xd0, 0x0f, 0xb0, 0x85, 0xf0, 0x59, 0x2c, - 0x5a, 0x09, 0x97, 0xa6, 0x10, 0xce, 0x65, 0x1d, 0x2e, 0xe9, 0xed, 0x66, - 0xc6, 0x0e, 0x1b, 0x94, 0x8e, 0x67, 0x6b, 0xea, 0xb0, 0xc1, 0xd5, 0x5d, - 0x0f, 0xdd, 0xe7, 0xc0, 0xdd, 0xc1, 0x4e, 0x3f, 0x80, 0xa6, 0x1f, 0x78, - 0x73, 0x75, 0x80, 0xd3, 0x1d, 0xd0, 0x35, 0x1b, 0xb2, 0x14, 0xd6, 0xf8, - 0x20, 0xcf, 0x54, 0x61, 0xe7, 0xbd, 0x2b, 0x55, 0x95, 0xbc, 0x02, 0x5b, - 0x40, 0xc3, 0x58, 0xe5, 0x96, 0x26, 0x30, 0x9a, 0xa4, 0x9c, 0x82, 0x4b, - 0x14, 0xa9, 0x35, 0x4c, 0x61, 0x6e, 0x25, 0xa9, 0xf9, 0x4a, 0xf8, 0x93, - 0xd7, 0x77, 0x6c, 0xb5, 0x2c, 0x53, 0xbc, 0x36, 0x7d, 0x57, 0xca, 0x05, - 0x1e, 0x6f, 0x70, 0x70, 0x01, 0x5c, 0x6a, 0xc4, 0x27, 0xa0, 0x45, 0xb1, - 0xc8, 0x7f, 0x5b, 0x61, 0x5d, 0x4a, 0x67, 0xc6, 0x0a, 0x6b, 0xb8, 0x56, - 0x35, 0x8e, 0xa9, 0x88, 0x99, 0x13, 0xa1, 0xe8, 0x79, 0x1b, 0x34, 0x2d, - 0x2d, 0xe2, 0xab, 0x68, 0x0b, 0xde, 0xb2, 0x49, 0xa8, 0xa8, 0x3c, 0x1d, - 0xd6, 0x6f, 0x28, 0x3d, 0xfc, 0xe2, 0x31, 0x27, 0x8d, 0x3b, 0x74, 0xe0, - 0x84, 0xc7, 0x72, 0x03, 0x20, 0x2a, 0x76, 0x3d, 0x9c, 0xdc, 0x69, 0x3d, - 0x30, 0x41, 0x07, 0xcb, 0x45, 0x72, 0x18, 0xab, 0xd1, 0xd9, 0x8e, 0x3c, - 0xa6, 0xe2, 0x51, 0x40, 0xf3, 0x09, 0xcc, 0xb3, 0x31, 0x91, 0x63, 0xd5, - 0x61, 0x4f, 0x16, 0x0e, 0x07, 0x00, 0x3a, 0x21, 0x70, 0x8d, 0x26, 0xef, - 0x01, 0x67, 0xb7, 0xbc, 0x8f, 0xaa, 0x1a, 0x77, 0x3d, 0x5b, 0xcc, 0x03, - 0xde, 0xcc, 0x1e, 0xa5, 0xe6, 0x01, 0xbb, 0x8f, 0x84, 0x48, 0x0f, 0x1f, - 0xb6, 0x2e, 0x46, 0xe8, 0xe6, 0x78, 0x0f, 0xd0, 0x62, 0xae, 0xe5, 0x6e, - 0xbc, 0x18, 0xe6, 0xc5, 0x88, 0x81, 0x9d, 0x2d, 0x4e, 0xa7, 0xf9, 0x5b, - 0xc1, 0xd0, 0x79, 0x56, 0x45, 0x68, 0x19, 0x81, 0x3d, 0xc6, 0xcc, 0xe2, - 0xac, 0x05, 0x44, 0xcf, 0x07, 0x8a, 0xec, 0x2b, 0xaf, 0xac, 0x5b, 0x91, - 0xba, 0x3b, 0xa9, 0x5b, 0x40, 0x7f, 0x5f, 0x78, 0xd1, 0x66, 0x0f, 0xc0, - 0x0b, 0x26, 0x74, 0x74, 0x54, 0x89, 0xc0, 0xb7, 0x7b, 0x33, 0x9a, 0xf5, - 0x4f, 0x57, 0x5d, 0xfb, 0x67, 0x86, 0x89, 0x17, 0xbd, 0x6e, 0x74, 0x40, - 0xb6, 0x9a, 0xe1, 0xf4, 0x5b, 0x8f, 0x23, 0x38, 0x85, 0xec, 0xda, 0x68, - 0x17, 0x4b, 0xb7, 0xfd, 0x33, 0xba, 0xea, 0xca, 0xdf, 0x16, 0x6b, 0x4c, - 0xc9, 0x26, 0xa6, 0xe7, 0x9c, 0xc2, 0x6a, 0x4f, 0xf6, 0x2c, 0xf3, 0x46, - 0xde, 0x40, 0xcb, 0xa4, 0xa7, 0x7b, 0x05, 0x01, 0x03, 0xb5, 0x0a, 0x14, - 0x25, 0x86, 0x43, 0x66, 0xdf, 0x06, 0xcc, 0xd9, 0xf0, 0xa7, 0xb9, 0x4d, - 0x8c, 0xf3, 0x7c, 0xc6, 0xd1, 0xa0, 0x67, 0x2f, 0x7f, 0xd3, 0x41, 0xa0, - 0xe0, 0x35, 0x75, 0x16, 0xa2, 0xfe, 0x57, 0xed, 0x33, 0x73, 0xfa, 0x6a, - 0x24, 0xc3, 0x72, 0x32, 0xa9, 0x46, 0x42, 0x61, 0x4c, 0xf5, 0xad, 0x71, - 0x04, 0xd0, 0x91, 0xe0, 0x93, 0x1c, 0x4e, 0x63, 0xc4, 0x2f, 0x8e, 0x9b, - 0xc8, 0xf5, 0x77, 0x5c, 0xdc, 0xd7, 0x75, 0xc4, 0x45, 0x72, 0x38, 0x34, - 0xca, 0xc2, 0xac, 0x70, 0xc7, 0x85, 0xb1, 0xbb, 0xf3, 0xe6, 0xea, 0x95, - 0x8e, 0x67, 0xc6, 0x6e, 0x86, 0x44, 0x7e, 0x9c, 0x66, 0x15, 0x1b, 0xae, - 0x80, 0x99, 0x6b, 0xf8, 0xa4, 0x39, 0x0e, 0x82, 0x15, 0x1e, 0xca, 0x2f, - 0xc0, 0xf2, 0x0b, 0x61, 0xf6, 0xef, 0xd8, 0x40, 0xa0, 0x2b, 0x5a, 0x5b, - 0xc7, 0x35, 0x6d, 0xc4, 0x1f, 0xba, 0xcd, 0x37, 0x02, 0xa8, 0xe5, 0x7b, - 0x43, 0xdb, 0xb7, 0x72, 0xb5, 0xe8, 0x5a, 0x4f, 0x9e, 0x02, 0xda, 0x93, - 0x47, 0x04, 0xe0, 0xee, 0xcd, 0x3e, 0xba, 0xca, 0x15, 0xcd, 0xfa, 0x00, - 0x6a, 0xa0, 0x22, 0xe1, 0x18, 0xbc, 0xcd, 0x74, 0x7f, 0xc7, 0x69, 0x1e, - 0x85, 0x41, 0xb7, 0x59, 0x94, 0xd8, 0xcf, 0xc3, 0x85, 0x20, 0x33, 0x89, - 0x8d, 0x01, 0x88, 0xd0, 0xea, 0xad, 0x55, 0x58, 0xe4, 0xc3, 0x2d, 0x7a, - 0x0a, 0xd9, 0x97, 0xf0, 0x13, 0x32, 0xfb, 0x37, 0xde, 0x00, 0x93, 0xc1, - 0x3b, 0x7c, 0x91, 0xdd, 0xa4, 0x51, 0x9d, 0xd2, 0xc2, 0x50, 0xbf, 0x80, - 0x9c, 0x55, 0xc1, 0x56, 0x4c, 0x41, 0x4e, 0x90, 0x5f, 0x44, 0x8f, 0x31, - 0x9a, 0x11, 0x51, 0x15, 0x0a, 0xa3, 0xd9, 0x3d, 0x0d, 0xa2, 0x35, 0xd0, - 0x70, 0xd2, 0xa5, 0x58, 0xa5, 0x1d, 0x89, 0x9b, 0x53, 0x3e, 0x12, 0x7e, - 0x3f, 0x9a, 0xf7, 0x07, 0xf9, 0xe3, 0xf5, 0x15, 0xc8, 0x49, 0x25, 0xe6, - 0x91, 0x7f, 0xd4, 0x6a, 0xd8, 0x4c, 0x24, 0xa6, 0xf4, 0x89, 0x9d, 0xa6, - 0x8a, 0x75, 0x0b, 0xde, 0xd0, 0xeb, 0xc3, 0x4e, 0x75, 0xb8, 0xfd, 0x36, - 0x6b, 0x12, 0xca, 0x97, 0x06, 0xaf, 0xc0, 0xe0, 0x9d, 0x99, 0xba, 0xe2, - 0x5c, 0xb6, 0x3c, 0x6f, 0x25, 0x9d, 0x72, 0x43, 0x59, 0xd9, 0xb9, 0xad, - 0x17, 0x07, 0x7d, 0xd1, 0xe6, 0xf2, 0x84, 0xba, 0x50, 0xea, 0x92, 0xf2, - 0xb2, 0x9c, 0xa0, 0x18, 0x57, 0xb9, 0xe5, 0x0b, 0x95, 0xe2, 0xc4, 0x68, - 0x7e, 0xe0, 0x83, 0xc3, 0x3a, 0x46, 0x20, 0x9f, 0x1e, 0xcb, 0x20, 0x33, - 0xb6, 0xb7, 0xcf, 0x1a, 0x5c, 0x58, 0xac, 0xeb, 0x29, 0x8b, 0x22, 0xaa, - 0x00, 0xa0, 0x33, 0x32, 0xa4, 0xfe, 0x17, 0x98, 0xed, 0xa1, 0xd8, 0x52, - 0x5d, 0x16, 0x6f, 0xc0, 0x4a, 0x62, 0x94, 0x70, 0x4b, 0xb6, 0x66, 0x57, - 0x8b, 0x58, 0x20, 0xf4, 0x7c, 0xe8, 0x3f, 0xda, 0x79, 0x8a, 0x33, 0x4c, - 0xe2, 0xbc, 0xa9, 0x31, 0x1c, 0x3a, 0xf3, 0xbb, 0xe8, 0x32, 0x2a, 0x45, - 0x96, 0x10, 0xe1, 0x92, 0x83, 0xa3, 0xbc, 0x0e, 0xfb, 0xa6, 0x2d, 0x9b, - 0x2d, 0xa0, 0x98, 0x71, 0xd8, 0x2c, 0x68, 0x23, 0x0d, 0x34, 0x94, 0xdd, - 0x4b, 0xd8, 0xd5, 0x04, 0xb3, 0x6d, 0xdb, 0x76, 0x32, 0xa0, 0x21, 0x44, - 0x99, 0xb4, 0x98, 0x2c, 0x22, 0xed, 0x7e, 0xce, 0x74, 0x72, 0xee, 0xaf, - 0x71, 0x59, 0x39, 0x3b, 0x4c, 0xba, 0x8b, 0x1e, 0x19, 0x27, 0xca, 0x05, - 0x5d, 0xf6, 0x35, 0xe3, 0xb4, 0x12, 0xd6, 0x1f, 0xef, 0x6b, 0xfd, 0x0c, - 0x4a, 0x78, 0xd7, 0xa3, 0x28, 0x7a, 0xb8, 0x67, 0xf6, 0x9b, 0x75, 0xb5, - 0x7d, 0xcd, 0x4d, 0x9a, 0x46, 0xc2, 0x8d, 0x24, 0xdf, 0x70, 0x31, 0x7c, - 0xc4, 0x9c, 0x54, 0x56, 0x36, 0xf7, 0xdf, 0x3d, 0xe3, 0xe0, 0xdd, 0xd7, - 0xc5, 0x7d, 0x34, 0x77, 0x10, 0x23, 0x3e, 0x44, 0xb1, 0xf8, 0x7c, 0x30, - 0x5f, 0x6e, 0x0e, 0xb0, 0xb6, 0x49, 0x10, 0x21, 0x1c, 0x79, 0x22, 0x5c, - 0x87, 0x1d, 0x61, 0x43, 0x27, 0x82, 0x58, 0x14, 0x32, 0x30, 0x5c, 0x8b, - 0x8b, 0x3c, 0xf1, 0x05, 0xf1, 0xc6, 0xf4, 0x42, 0x5f, 0x5a, 0x57, 0x30, - 0x88, 0x0b, 0x40, 0xfa, 0x24, 0x08, 0xca, 0x25, 0x97, 0x5a, 0xf3, 0x11, - 0x0c, 0xc2, 0x4f, 0x8e, 0x1d, 0x31, 0x04, 0x6d, 0x06, 0xb0, 0xfc, 0xea, - 0x81, 0xa8, 0x47, 0x8b, 0xbf, 0x30, 0x7f, 0xc1, 0x87, 0x12, 0xaa, 0x35, - 0xe1, 0xce, 0xc3, 0xa8, 0xfc, 0x12, 0xca, 0x76, 0xbf, 0xe9, 0x22, 0x00, - 0x89, 0x5f, 0xa4, 0xd5, 0xce, 0xcb, 0xb9, 0x2c, 0xe4, 0xb5, 0x27, 0x60, - 0xe5, 0xd6, 0x7b, 0xcc, 0xde, 0xbc, 0xc3, 0x9e, 0x77, 0x7e, 0x73, 0xb6, - 0xb8, 0x78, 0x5d, 0x32, 0x75, 0xe6, 0x0c, 0x0a, 0x66, 0x52, 0x31, 0xfb, - 0xb4, 0xcc, 0x46, 0x43, 0xef, 0x00, 0xee, 0xf4, 0x66, 0x7b, 0x35, 0x7a, - 0x7c, 0x63, 0xbd, 0x1d, 0xd0, 0xab, 0xe0, 0x01, 0x79, 0x1e, 0xbf, 0xc1, - 0x4b, 0x3a, 0xe5, 0xc3, 0xb9, 0x7a, 0x1a, 0x0d, 0xc3, 0x21, 0xb0, 0xa0, - 0xf9, 0xbf, 0x06, 0x1b, 0x5d, 0x3d, 0xa8, 0x64, 0x20, 0x5c, 0x65, 0xbf, - 0x81, 0x49, 0xb8, 0x8a, 0xa1, 0xc7, 0x60, 0x96, 0x72, 0xb1, 0x34, 0xf8, - 0xf4, 0xd4, 0x81, 0xb2, 0x3f, 0xa5, 0xc9, 0x76, 0x90, 0x73, 0x39, 0x42, - 0xdb, 0x80, 0xed, 0x8c, 0xf4, 0xea, 0x7c, 0xc5, 0xe7, 0xd0, 0xad, 0x4e, - 0x12, 0x60, 0x94, 0x80, 0xaf, 0x9e, 0x5c, 0x86, 0x9c, 0x04, 0x95, 0xbe, - 0x7b, 0xee, 0x1c, 0x92, 0x02, 0xc5, 0x79, 0xe3, 0x99, 0x23, 0x93, 0xab, - 0xec, 0x1d, 0x70, 0x50, 0xdb, 0x53, 0x41, 0x80, 0x0d, 0x91, 0x98, 0x4e, - 0xa2, 0x67, 0xf4, 0x25, 0xdc, 0xdf, 0xc8, 0xab, 0xf1, 0x48, 0xc5, 0x16, - 0xb3, 0x21, 0xe3, 0x8e, 0x25, 0x0b, 0x26, 0x81, 0x2e, 0xa8, 0x17, 0x78, - 0x38, 0x7f, 0x94, 0xd5, 0x9e, 0x05, 0x43, 0x38, 0xac, 0xd7, 0x62, 0x2e, - 0x0c, 0x6e, 0x91, 0x78, 0xb9, 0x20, 0xd0, 0x06, 0x84, 0x67, 0x33, 0xb3, - 0x3a, 0x5c, 0xef, 0xe7, 0x08, 0x9d, 0xd4, 0x89, 0x8b, 0xe2, 0x58, 0x53, - 0xa7, 0x6a, 0x17, 0x19, 0xbd, 0x75, 0x76, 0x69, 0x79, 0x40, 0x7a, 0x14, - 0x0f, 0x0b, 0xc2, 0x62, 0x0a, 0x82, 0xc4, 0x02, 0x01, 0x27, 0x9d, 0xc3, - 0x6e, 0x4d, 0x60, 0xd2, 0x5c, 0xd6, 0xee, 0x97, 0x6d, 0x80, 0xbd, 0x27, - 0xde, 0x31, 0xd8, 0x31, 0x81, 0x63, 0x87, 0x02, 0x06, 0x7a, 0x1a, 0x8c, - 0xd8, 0x6c, 0x91, 0x36, 0x3f, 0xd3, 0xc3, 0x6f, 0x37, 0xc7, 0x7a, 0xf7, - 0x46, 0xc6, 0x87, 0x8d, 0x9a, 0x6f, 0xfe, 0x5b, 0xdc, 0x01, 0x3e, 0xe9, - 0xd6, 0xd4, 0x75, 0x27, 0xd3, 0x79, 0x5e, 0xea, 0x7c, 0x92, 0xb0, 0xde, - 0x99, 0x9c, 0xd4, 0x08, 0x04, 0xcf, 0xe0, 0x94, 0x69, 0xb1, 0x69, 0xe6, - 0x3b, 0x22, 0x01, 0x29, 0xf3, 0x5d, 0xd0, 0x6b, 0x61, 0x78, 0x67, 0x93, - 0x4c, 0xd1, 0x65, 0xb0, 0x45, 0xd8, 0x88, 0x35, 0x5a, 0x4b, 0x8a, 0xca, - 0xf6, 0xb7, 0x2d, 0x4b, 0x8e, 0x7e, 0xba, 0x49, 0x2a, 0x5c, 0xf3, 0xe1, - 0x01, 0xa3, 0xd2, 0xd8, 0xa8, 0x69, 0xbd, 0x0e, 0x50, 0x16, 0x18, 0x54, - 0xb8, 0xa2, 0xaa, 0x36, 0xd1, 0x8a, 0x16, 0xdc, 0x8b, 0x9a, 0x40, 0x73, - 0xaf, 0xc3, 0x92, 0xb6, 0x02, 0xdc, 0x73, 0x29, 0xec, 0xb3, 0x7a, 0x9d, - 0x00, 0xdd, 0x59, 0x59, 0x39, 0x80, 0x5d, 0x07, 0xbf, 0x87, 0xab, 0x2e, - 0x87, 0x5b, 0x3c, 0xe4, 0x8a, 0x47, 0xef, 0x0a, 0x31, 0x8a, 0x2b, 0x90, - 0xff, 0x44, 0xb1, 0xb2, 0x90, 0xe3, 0xc7, 0x08, 0x9a, 0xb9, 0x5a, 0xef, - 0xf3, 0xcb, 0x32, 0x20, 0x0f, 0x2e, 0xa1, 0x4a, 0x1d, 0x59, 0x61, 0x24, - 0xc2, 0xc7, 0x9b, 0x68, 0x1d, 0x02, 0xb8, 0xe0, 0xbb, 0x8f, 0xbd, 0xf5, - 0x19, 0x54, 0xc7, 0x6e, 0x44, 0x16, 0x94, 0x7f, 0x23, 0x33, 0xbb, 0x05, - 0x30, 0x8f, 0xd4, 0xe3, 0x28, 0xb3, 0xbb, 0x17, 0x5e, 0x3a, 0xff, 0x6d, - 0x75, 0x21, 0x23, 0x60, 0x51, 0xfe, 0xbb, 0x53, 0xff, 0x9f, 0x74, 0xd7, - 0x45, 0x29, 0xbd, 0x5c, 0xef, 0x94, 0x36, 0x0e, 0x63, 0x20, 0xd8, 0xaa, - 0x1c, 0x3c, 0xf9, 0x5d, 0xb9, 0x4d, 0x2d, 0x7a, 0x0e, 0xe5, 0x6d, 0x9b, - 0xd6, 0xd3, 0x21, 0x85, 0x14, 0xc9, 0x80, 0x4f, 0x3d, 0xc5, 0xd2, 0x79, - 0xcf, 0xf0, 0x4f, 0xa3, 0x49, 0x58, 0x5d, 0xcc, 0xf6, 0xf9, 0xda, 0x5f, - 0x20, 0x32, 0x60, 0x6a, 0x73, 0xb4, 0x45, 0xfe, 0x60, 0x00, 0x07, 0xd3, - 0xc0, 0x8a, 0x6a, 0xc3, 0x96, 0xb6, 0x12, 0x6b, 0xbd, 0x3e, 0xd3, 0x67, - 0x7b, 0x70, 0xf5, 0xc7, 0xaf, 0xaa, 0x81, 0x6c, 0x67, 0x1e, 0xf4, 0x32, - 0xac, 0xd7, 0x9f, 0x93, 0x79, 0x0c, 0xa7, 0x2f, 0x9a, 0x9d, 0x45, 0xb9, - 0xba, 0x6e, 0x4c, 0xee, 0xa0, 0x93, 0x41, 0xc4, 0xb7, 0x32, 0x3b, 0x72, - 0xe0, 0x9a, 0xe6, 0x61, 0x38, 0x18, 0x4a, 0x26, 0xcd, 0x08, 0xa1, 0xda, - 0x55, 0xb5, 0x35, 0x12, 0x86, 0x7a, 0x9d, 0x28, 0xd0, 0x37, 0x5e, 0x0e, - 0x96, 0x12, 0xa2, 0x39, 0x78, 0x75, 0x02, 0x08, 0x3d, 0x48, 0x4f, 0x6c, - 0x6b, 0x2e, 0x01, 0x50, 0x38, 0x25, 0x57, 0xa6, 0x8a, 0xc6, 0xee, 0x3d, - 0xf6, 0xfe, 0x02, 0x0a, 0x2a, 0x19, 0x36, 0x1e, 0xeb, 0xc1, 0xa2, 0xd0, - 0x18, 0xc0, 0x60, 0x49, 0xa4, 0x7d, 0xde, 0x0a, 0x52, 0x5b, 0x4c, 0x51, - 0x52, 0x55, 0xe9, 0xce, 0xc0, 0x77, 0x4b, 0xd3, 0xda, 0x8a, 0x58, 0x1d, - 0xc0, 0x33, 0x5d, 0x1a, 0x86, 0xd1, 0xdf, 0xe7, 0x28, 0x61, 0x5f, 0x53, - 0x2d, 0x20, 0xe2, 0xa8, 0x97, 0xda, 0x1c, 0xe3, 0x71, 0x95, 0xff, 0xbc, - 0xa9, 0x8d, 0xe6, 0xd2, 0xe5, 0x41, 0xb4, 0x9e, 0x19, 0xba, 0x00, 0x1f, - 0x78, 0x52, 0x3b, 0x3a, 0x50, 0x85, 0xbb, 0xa5, 0x2a, 0x3f, 0x46, 0x59, - 0x08, 0xae, 0x2f, 0x18, 0x58, 0x02, 0x46, 0x60, 0xaf, 0x5d, 0xe7, 0x6f, - 0xaa, 0x11, 0xee, 0x37, 0x22, 0xb6, 0xef, 0x62, 0xba, 0x0a, 0xc2, 0x24, - 0xaa, 0xf9, 0x54, 0xc2, 0x4f, 0xb0, 0xb4, 0x32, 0xa7, 0x59, 0x16, 0xa3, - 0x2b, 0xfb, 0x69, 0x7d, 0x51, 0xba, 0xd3, 0x00, 0xa5, 0xe6, 0x5c, 0xb6, - 0xd4, 0xcc, 0x5a, 0x50, 0xd4, 0x46, 0x77, 0x7d, 0x0b, 0x1a, 0xf1, 0xce, - 0x88, 0x51, 0xbd, 0x87, 0xc9, 0xfa, 0x33, 0x99, 0xeb, 0xc0, 0x5d, 0xee, - 0x04, 0x37, 0x21, 0x51, 0x15, 0x08, 0xf3, 0x70, 0x34, 0xb2, 0xfe, 0x74, - 0x1c, 0x91, 0x38, 0x2e, 0x54, 0x7b, 0xf8, 0xd3, 0xd7, 0x1c, 0xa4, 0x42, - 0x62, 0x76, 0x1d, 0x25, 0x10, 0xad, 0xc6, 0x12, 0xef, 0x07, 0xcb, 0x3b, - 0x9d, 0x5d, 0x66, 0x27, 0xe2, 0x82, 0x57, 0xb5, 0x36, 0xd7, 0x31, 0xdb, - 0x71, 0x2e, 0xb8, 0x55, 0xea, 0xc2, 0x25, 0x54, 0xf8, 0x1f, 0x6b, 0xcf, - 0xdd, 0x4a, 0x1f, 0xc6, 0x69, 0x3c, 0xf9, 0xc1, 0x96, 0x0d, 0xaf, 0xda, - 0xc2, 0x7e, 0x88, 0x10, 0x8e, 0xb6, 0x89, 0x2f, 0x1f, 0x09, 0xae, 0x7e, - 0x2d, 0x65, 0xec, 0xea, 0xa4, 0x6f, 0xd3, 0x54, 0x33, 0xea, 0x1b, 0x63, - 0x1c, 0x27, 0x91, 0x00, 0x77, 0x34, 0x5b, 0x73, 0x1b, 0xf1, 0xd6, 0xbd, - 0xcc, 0x86, 0xa2, 0x38, 0x8a, 0xd5, 0x55, 0xe2, 0x9f, 0x90, 0xdd, 0xb9, - 0xfa, 0xd9, 0xe2, 0x82, 0x24, 0xe9, 0x17, 0xfc, 0x8b, 0xb3, 0x8b, 0xeb, - 0x41, 0xed, 0xe5, 0xd9, 0xbd, 0x78, 0x20, 0xde, 0x20, 0xed, 0x98, 0x17, - 0x8a, 0x7f, 0x5d, 0x40, 0xbd, 0x0a, 0x03, 0x5d, 0xe2, 0x22, 0x65, 0x94, - 0xd3, 0x11, 0xb2, 0xc9, 0x83, 0x9b, 0xc6, 0xb7, 0x3f, 0x27, 0x03, 0x47, - 0x16, 0xd2, 0xfd, 0x6c, 0x5a, 0x19, 0x0c, 0x77, 0xb7, 0xd2, 0x41, 0x89, - 0xd9, 0xeb, 0x1b, 0x56, 0xfa, 0xb4, 0xbe, 0x0b, 0xd1, 0x43, 0x5d, 0xfb, - 0x13, 0x41, 0x54, 0x66, 0xc2, 0x23, 0x96, 0x9a, 0x79, 0x38, 0xaf, 0x6f, - 0x46, 0x44, 0x18, 0x5c, 0x11, 0xd6, 0xb1, 0xf7, 0xfa, 0x84, 0x2a, 0x2e, - 0x9d, 0x23, 0x4f, 0xfe, 0x72, 0xc8, 0x87, 0x9e, 0x17, 0x0a, 0xe4, 0xf8, - 0x38, 0x27, 0x36, 0x16, 0x72, 0xf4, 0xc0, 0xae, 0xd8, 0x4a, 0x83, 0xd8, - 0xf3, 0x6e, 0x7f, 0x5a, 0x6a, 0x65, 0xd5, 0x12, 0x91, 0x42, 0x50, 0x28, - 0xc2, 0xfe, 0x02, 0xa4, 0x57, 0xf1, 0xb3, 0x0a, 0x86, 0xaa, 0x67, 0xda, - 0x0d, 0xe2, 0x54, 0xda, 0x44, 0x38, 0x44, 0xf4, 0x9f, 0xfc, 0x56, 0xe6, - 0x05, 0x4a, 0x5f, 0x33, 0xcb, 0x64, 0x17, 0xb2, 0xd1, 0x1d, 0x08, 0x07, - 0x51, 0x57, 0xd3, 0x3a, 0xc6, 0x54, 0x52, 0x6c, 0x03, 0xe9, 0x2e, 0x3f, - 0x92, 0x05, 0xe4, 0x53, 0x80, 0xeb, 0xbe, 0xdf, 0x29, 0xb4, 0xed, 0xea, - 0xb4, 0x5e, 0x97, 0xdf, 0x2a, 0xa2, 0x20, 0x69, 0x27, 0x94, 0xa6, 0x77, - 0xb1, 0xae, 0x0a, 0x5a, 0x05, 0x1e, 0x34, 0x49, 0x27, 0x0c, 0x5d, 0xa2, - 0x77, 0xd0, 0xeb, 0x4a, 0x96, 0x53, 0xf4, 0xbc, 0x0f, 0x8e, 0x58, 0x3a, - 0x8b, 0xbc, 0xf2, 0xe3, 0x09, 0xe8, 0xd8, 0xf2, 0xf1, 0x17, 0xe3, 0x9a, - 0x18, 0xa5, 0x6d, 0x3e, 0x52, 0x0b, 0xc0, 0xc5, 0x95, 0xf6, 0xb8, 0x15, - 0xfc, 0x8b, 0x67, 0xd9, 0x28, 0x88, 0x27, 0xb5, 0x0a, 0x62, 0xdf, 0x4d, - 0x31, 0x62, 0xca, 0x12, 0x9e, 0xa3, 0x09, 0x25, 0x90, 0x94, 0x18, 0x26, - 0xa9, 0x41, 0x21, 0x21, 0x37, 0xb6, 0x4d, 0xcd, 0x99, 0x7b, 0x22, 0xe2, - 0x3f, 0x6b, 0x71, 0x5b, 0x84, 0xeb, 0x19, 0xca, 0x15, 0xa7, 0x6d, 0x65, - 0x57, 0x3e, 0x15, 0xcb, 0x1a, 0xb9, 0x66, 0xf2, 0x18, 0xa1, 0xfc, 0xd7, - 0xd8, 0x1a, 0xd0, 0x08, 0x5f, 0xd6, 0xe9, 0x18, 0x0e, 0x0d, 0x08, 0x13, - 0x1d, 0xd8, 0xb2, 0x45, 0x74, 0xb8, 0x46, 0xea, 0x2f, 0xe4, 0x24, 0xca, - 0x74, 0x21, 0xee, 0xf8, 0x5c, 0x1d, 0xed, 0x8b, 0x23, 0x76, 0x6a, 0x10, - 0xd5, 0x3a, 0x19, 0x9b, 0xfe, 0x6b, 0xc0, 0xcf, 0xf1, 0x29, 0x22, 0xec, - 0x22, 0x55, 0xc4, 0xc2, 0xae, 0xb2, 0x52, 0x92, 0x8b, 0x18, 0xbc, 0xbc, - 0x25, 0xb0, 0x4c, 0xf2, 0x08, 0x05, 0x71, 0xa1, 0xe9, 0xdd, 0x4c, 0xc8, - 0x91, 0xe7, 0xe7, 0x61, 0xc0, 0xf6, 0x12, 0x59, 0x4f, 0xb6, 0x98, 0x81, - 0xe0, 0x15, 0x29, 0xbe, 0x08, 0x4a, 0x6a, 0x73, 0x53, 0xff, 0x5f, 0x22, - 0x3d, 0xa0, 0xfd, 0xb3, 0xf1, 0xa5, 0x30, 0x57, 0xdb, 0x14, 0x12, 0xf3, - 0x1a, 0xa1, 0x53, 0x16, 0xe1, 0x90, 0xe7, 0x53, 0x18, 0xc8, 0x53, 0x00, - 0x80, 0x3e, 0xc4, 0xc8, 0xa4, 0x70, 0x2f, 0x6f, 0xc6, 0x7a, 0x5b, 0x5a, - 0xe7, 0x9c, 0xa7, 0x0e, 0x80, 0x99, 0x71, 0x37, 0x60, 0x23, 0x11, 0x31, - 0xc1, 0xbb, 0xb1, 0x92, 0x96, 0x07, 0xf5, 0xad, 0xaa, 0x66, 0xbd, 0x0b, - 0x28, 0x85, 0x30, 0x02, 0x85, 0x83, 0x73, 0x68, 0x9e, 0xdf, 0xfc, 0x19, - 0xc3, 0xb2, 0x50, 0x17, 0xa9, 0x72, 0xf3, 0x91, 0x77, 0xdd, 0x4f, 0xae, - 0xc1, 0xb6, 0xc0, 0x7e, 0x31, 0x87, 0xc0, 0x2f, 0xe6, 0x8f, 0x6a, 0xc8, - 0x3d, 0xbb, 0xe9, 0x49, 0x8f, 0xc5, 0x0d, 0x68, 0xc9, 0x5d, 0x90, 0x39, - 0x65, 0x5e, 0x07, 0x38, 0xd1, 0x66, 0x6a, 0xc5, 0x8b, 0xb8, 0xd3, 0xb7, - 0x24, 0x1a, 0xd2, 0x03, 0x1b, 0xed, 0xfb, 0x41, 0x07, 0x43, 0x74, 0xe3, - 0x1a, 0x54, 0x1a, 0xc0, 0xc5, 0x87, 0x70, 0x52, 0x31, 0x22, 0x50, 0x8c, - 0x31, 0x4b, 0x5c, 0xd9, 0x4d, 0xba, 0xaf, 0xc6, 0x1f, 0x4f, 0x4d, 0xa1, - 0x5a, 0xa2, 0x52, 0x7a, 0xe6, 0xe3, 0x0f, 0xcc, 0xf6, 0x5c, 0xd4, 0xdb, - 0x96, 0xf2, 0xc7, 0x2e, 0x69, 0x2d, 0xb5, 0x46, 0x1a, 0x2d, 0xbc, 0xf7, - 0xe1, 0x78, 0x86, 0x2c, 0x41, 0x8b, 0x70, 0x17, 0xaa, 0xe4, 0x7c, 0x8b, - 0xdb, 0xfa, 0xdc, 0x09, 0x53, 0xaf, 0xa9, 0xa3, 0xb8, 0x66, 0x16, 0x16, - 0xb7, 0x8f, 0xf6, 0x1f, 0x0a, 0x36, 0x4b, 0x06, 0x40, 0xef, 0xef, 0x1e, - 0x8d, 0x46, 0x7d, 0x35, 0x43, 0xfe, 0xa6, 0x8b, 0xe9, 0x19, 0x31, 0x2c, - 0x2c, 0xb8, 0x96, 0x30, 0xa4, 0x8c, 0x36, 0x2a, 0x64, 0x27, 0x72, 0xad, - 0x62, 0xfb, 0x70, 0x90, 0x58, 0xe7, 0x51, 0x59, 0x01, 0xc2, 0x98, 0x43, - 0xee, 0x7f, 0xc1, 0x36, 0x85, 0xc7, 0x32, 0xd5, 0x25, 0x7d, 0x56, 0xef, - 0xa4, 0x1d, 0x29, 0x8c, 0x44, 0xba, 0x7b, 0x82, 0x85, 0xee, 0x4a, 0x2c, - 0x45, 0xd0, 0xdf, 0xcc, 0x8c, 0x77, 0x02, 0xf7, 0x41, 0x0c, 0x44, 0x16, - 0x19, 0xc6, 0xd4, 0x25, 0xa6, 0xae, 0xfb, 0x07, 0x74, 0x90, 0x40, 0x5a, - 0x68, 0x6e, 0x4a, 0xaa, 0xe2, 0xb8, 0xa9, 0x90, 0xb0, 0x20, 0x5f, 0x48, - 0xe7, 0xb4, 0xe8, 0xa8, 0xa3, 0x70, 0xb5, 0x5a, 0xb8, 0xc4, 0xf9, 0x8a, - 0x61, 0x62, 0x99, 0xc3, 0x95, 0xaa, 0xd7, 0x21, 0x5e, 0x1b, 0x86, 0xe0, - 0xba, 0xa9, 0x5b, 0xf8, 0x0b, 0x3b, 0xa1, 0x69, 0x35, 0xe3, 0x6b, 0xe9, - 0x7e, 0x14, 0x00, 0x91, 0xe5, 0x67, 0x92, 0xcb, 0xb9, 0xc6, 0xae, 0x3a, - 0x6b, 0xaa, 0x4c, 0x80, 0x5e, 0x30, 0xaf, 0x0c, 0xf5, 0x26, 0xfc, 0x5e, - 0xbb, 0xbe, 0x34, 0x21, 0x42, 0x44, 0x7f, 0x31, 0x9c, 0x6e, 0x37, 0x0f, - 0xa0, 0xaa, 0x69, 0x66, 0xbc, 0x25, 0x48, 0xe5, 0x41, 0x51, 0xf8, 0x04, - 0x4f, 0xd3, 0x19, 0x97, 0x75, 0xb4, 0xd5, 0xe9, 0x08, 0x72, 0x56, 0x9c, - 0xe0, 0x48, 0x1a, 0x71, 0x2a, 0x3b, 0x38, 0x9d, 0x15, 0xd9, 0x00, 0xc8, - 0x43, 0x03, 0x5a, 0x7d, 0x20, 0xde, 0xc3, 0xfd, 0x9b, 0xb9, 0x35, 0xc8, - 0x88, 0x34, 0xf3, 0x16, 0xf1, 0xb2, 0xbf, 0xd1, 0xc8, 0x71, 0x46, 0xaf, - 0x30, 0x5e, 0x82, 0xb8, 0x37, 0x71, 0x80, 0x06, 0x17, 0x89, 0x06, 0x39, - 0xe2, 0x89, 0x40, 0x87, 0x60, 0x74, 0x08, 0x42, 0xd5, 0x47, 0x58, 0x9d, - 0xc4, 0x56, 0xa3, 0xa4, 0x21, 0xfa, 0x80, 0x41, 0x3c, 0x0b, 0xb4, 0x6e, - 0xc9, 0x49, 0x28, 0x93, 0x21, 0x2a, 0xef, 0xdd, 0xcb, 0x2c, 0x2f, 0xfa, - 0x1d, 0x45, 0x2a, 0xb7, 0xef, 0x4c, 0xd2, 0xdc, 0xf0, 0x0e, 0x21, 0xf3, - 0x51, 0xed, 0x61, 0x03, 0xc3, 0x0f, 0x4c, 0x75, 0xdd, 0xde, 0x8b, 0x0a, - 0x41, 0x2c, 0xd9, 0x01, 0xab, 0x95, 0xd1, 0xba, 0x09, 0x32, 0x3c, 0xb4, - 0x0e, 0xf0, 0x44, 0xcd, 0xfe, 0x96, 0xe3, 0xa8, 0x53, 0x51, 0xb8, 0xe8, - 0x6c, 0xa8, 0x0d, 0xa4, 0x8e, 0x35, 0x23, 0x02, 0x78, 0xe9, 0x08, 0x35, - 0x9f, 0x8e, 0x01, 0x66, 0x64, 0x85, 0xa9, 0x66, 0xa7, 0x48, 0x67, 0x82, - 0x69, 0xe5, 0x4a, 0x06, 0x6f, 0x2c, 0x0b, 0xac, 0xc2, 0x49, 0x82, 0x76, - 0xcd, 0xae, 0x9d, 0x50, 0x64, 0x7a, 0x0a, 0x2a, 0xc1, 0x13, 0xed, 0xe4, - 0x0c, 0xb1, 0xd3, 0x6a, 0x9d, 0xed, 0x87, 0x2f, 0x19, 0x2c, 0x3e, 0x64, - 0x59, 0x65, 0xe6, 0x1a, 0x43, 0xed, 0xef, 0x28, 0x92, 0xd7, 0xf6, 0x72, - 0xe5, 0xb6, 0x4b, 0xcd, 0x03, 0x90, 0xac, 0xa5, 0xad, 0x4b, 0xae, 0x85, - 0x42, 0x82, 0xff, 0x64, 0xfd, 0xb3, 0x42, 0x24, 0x28, 0x9c, 0xec, 0xe9, - 0xe5, 0xb6, 0xcc, 0xec, 0xc8, 0x4c, 0xd2, 0x21, 0x82, 0xcd, 0xe1, 0x5c, - 0x74, 0x2e, 0xe9, 0x78, 0xf6, 0x3b, 0x97, 0x09, 0x89, 0x6a, 0xd0, 0xb3, - 0x62, 0xd6, 0x21, 0x41, 0x76, 0x83, 0xaa, 0x34, 0x19, 0x85, 0x29, 0x5b, - 0x1f, 0x6c, 0xf8, 0xc7, 0x8e, 0xe7, 0x78, 0x59, 0x20, 0x83, 0x8a, 0x20, - 0xe8, 0x83, 0xdd, 0x1e, 0xd8, 0x11, 0x1f, 0x1c, 0x71, 0x1d, 0x1f, 0x0c, - 0xb2, 0x77, 0xc9, 0xf2, 0x3d, 0x7b, 0xcb, 0xad, 0xa7, 0x92, 0x6a, 0x72, - 0x07, 0x2c, 0x06, 0x66, 0xea, 0x3b, 0xd6, 0x9f, 0xcd, 0xf0, 0xa1, 0x95, - 0xc4, 0xc3, 0x7b, 0xbb, 0xad, 0xe0, 0x11, 0x1b, 0x8f, 0x80, 0xec, 0xf1, - 0x86, 0x1d, 0xd2, 0x1c, 0x1c, 0x00, 0xda, 0xba, 0xe5, 0x29, 0x68, 0x9a, - 0xff, 0x7f, 0x02, 0x0c, 0x01, 0x4f, 0x22, 0x85, 0x96, 0x85, 0x4c, 0xad, - 0x29, 0x92, 0xa6, 0x7d, 0xa5, 0x02, 0x8f, 0x19, 0xd1, 0x01, 0x49, 0x11, - 0x72, 0x6a, 0x8d, 0x86, 0x96, 0xd4, 0xce, 0x72, 0x6f, 0x61, 0x34, 0x08, - 0xbd, 0x2c, 0x07, 0xdc, 0x10, 0x74, 0x5e, 0xa8, 0xdf, 0xb7, 0x53, 0xfd, - 0x6c, 0x2a, 0x99, 0x75, 0x39, 0x7d, 0x7d, 0xda, 0x3b, 0x8f, 0x29, 0x55, - 0xae, 0x70, 0x17, 0x1d, 0x9b, 0x2c, 0x50, 0xcc, 0xa8, 0x5f, 0xf1, 0xf6, - 0xaa, 0x29, 0x28, 0x46, 0x75, 0xac, 0x4c, 0xbe, 0x4e, 0x36, 0x94, 0x67, - 0x91, 0x55, 0x70, 0x3a, 0x8b, 0x33, 0x51, 0x49, 0x29, 0x11, 0xd9, 0xdc, - 0x1b, 0xc1, 0x85, 0x48, 0x3e, 0xd3, 0x40, 0x00, 0xe7, 0x63, 0xaa, 0x49, - 0xdd, 0x96, 0x9a, 0xad, 0x3f, 0xf6, 0xb3, 0xfe, 0xc5, 0x00, 0x6c, 0x5e, - 0x3c, 0xcc, 0x04, 0x23, 0x01, 0xa7, 0xaa, 0xaa, 0x19, 0x14, 0x89, 0x42, - 0xf0, 0x05, 0x56, 0x61, 0x99, 0xc7, 0x8f, 0x8d, 0x43, 0xe7, 0xc0, 0xf1, - 0x84, 0x9f, 0x57, 0x2c, 0xda, 0x87, 0xa0, 0x3d, 0x2e, 0xfd, 0xd6, 0xf9, - 0xc3, 0x23, 0x1d, 0xe2, 0x9b, 0xeb, 0x21, 0xef, 0xf1, 0x27, 0xdc, 0x9e, - 0xc0, 0x50, 0xe7, 0xea, 0x6c, 0xee, 0x1a, 0x8d, 0x82, 0x18, 0x01, 0x34, - 0x72, 0x53, 0x62, 0x1f, 0x4a, 0xcf, 0x07, 0x0a, 0x04, 0xa5, 0x49, 0x73, - 0x37, 0x13, 0xe1, 0xb7, 0x22, 0xac, 0x16, 0xbc, 0x3d, 0xe1, 0x34, 0x75, - 0xca, 0x54, 0x1b, 0x1b, 0xb2, 0xe6, 0xe4, 0x41, 0x83, 0xb8, 0xc9, 0xec, - 0xd1, 0xaf, 0x9b, 0x25, 0x59, 0x76, 0xc0, 0x7b, 0x10, 0xa8, 0xda, 0xb6, - 0x14, 0xdc, 0xc2, 0x33, 0xa7, 0xfb, 0x35, 0x8e, 0x8f, 0x3d, 0x6c, 0x42, - 0xbe, 0x4f, 0x40, 0x08, 0xe0, 0x9f, 0xd3, 0xb2, 0xaa, 0xc9, 0x73, 0x2c, - 0x66, 0x43, 0x01, 0xa4, 0xb9, 0x26, 0x9a, 0x01, 0x96, 0x5f, 0x12, 0x10, - 0x0f, 0xf8, 0x2d, 0x43, 0x07, 0xab, 0x33, 0x73, 0x3a, 0x58, 0xf1, 0x31, - 0x98, 0x61, 0x25, 0x28, 0xa4, 0x69, 0x1a, 0x77, 0xce, 0x55, 0x71, 0xe9, - 0x3e, 0x3b, 0x38, 0xd3, 0xa8, 0x9c, 0x13, 0xa1, 0xe7, 0xae, 0xa7, 0x96, - 0x3a, 0x31, 0x0d, 0x85, 0xb0, 0xa3, 0xb1, 0x1a, 0x8f, 0x19, 0x41, 0xfa, - 0xe9, 0x34, 0x42, 0x42, 0x89, 0x00, 0x03, 0x18, 0x60, 0x07, 0x12, 0x34, - 0xa3, 0x2c, 0x7e, 0x8e, 0x9f, 0x22, 0x0b, 0x2c, 0xd8, 0x23, 0xb4, 0x8e, - 0xff, 0x0b, 0xfc, 0xd8, 0x37, 0x9e, 0x63, 0xc7, 0xe4, 0x9d, 0xf6, 0xbf, - 0x65, 0xca, 0x65, 0xb7, 0xbd, 0xfb, 0x55, 0x08, 0x66, 0x34, 0x60, 0xea, - 0x3e, 0xcd, 0x9e, 0xa1, 0x7b, 0xd6, 0x26, 0x25, 0x1a, 0xb7, 0x51, 0x8c, - 0xda, 0x4b, 0xf4, 0xc4, 0xcc, 0x3f, 0x7c, 0xb5, 0x94, 0x85, 0x36, 0xb3, - 0xd7, 0x7c, 0xe4, 0x91, 0x88, 0xce, 0x79, 0x5d, 0xbd, 0x71, 0x48, 0x34, - 0xf5, 0x29, 0xba, 0x84, 0x9a, 0x0f, 0xb8, 0x4c, 0xa3, 0x2f, 0x7e, 0x17, - 0xc4, 0x37, 0x17, 0x57, 0x33, 0x9e, 0xce, 0xea, 0x7f, 0xd9, 0x32, 0x3c, - 0x69, 0xed, 0xb4, 0x50, 0xc9, 0xd4, 0xaf, 0x89, 0x30, 0x6e, 0xe6, 0xec, - 0x90, 0x00, 0x4c, 0xa0, 0x00, 0x77, 0xf9, 0x61, 0x45, 0x41, 0x77, 0x55, - 0x97, 0xaf, 0xe6, 0x92, 0x25, 0xb5, 0x10, 0x0e, 0x48, 0xf4, 0xc0, 0xc2, - 0x52, 0x09, 0xc7, 0x6c, 0x2d, 0x31, 0x6f, 0xd1, 0x64, 0xb5, 0x54, 0x13, - 0x1e, 0xc6, 0x93, 0xf8, 0x5c, 0x7f, 0x90, 0xa1, 0x4e, 0x15, 0xeb, 0x93, - 0x14, 0x95, 0x75, 0x48, 0xa5, 0x19, 0x70, 0x64, 0xee, 0xff, 0x57, 0xc9, - 0x9a, 0xf9, 0x3f, 0x38, 0x5b, 0x34, 0x20, 0x2d, 0x65, 0xb9, 0xc3, 0xac, - 0x89, 0x21, 0x4f, 0x12, 0xc6, 0x31, 0xd7, 0x16, 0x35, 0xb3, 0x58, 0x78, - 0xd6, 0xe7, 0x15, 0xa2, 0x66, 0xa6, 0xe3, 0x3c, 0x31, 0xc4, 0xf2, 0xcc, - 0x89, 0xc6, 0xa7, 0x31, 0xa8, 0x37, 0xb2, 0x4c, 0x19, 0xe1, 0x3e, 0x82, - 0x61, 0x72, 0xa1, 0x8c, 0xe1, 0xac, 0xad, 0x84, 0x72, 0x0f, 0xfb, 0x1f, - 0xd5, 0x40, 0x47, 0x98, 0x3a, 0x6c, 0xf8, 0xce, 0x54, 0x01, 0x07, 0xcc, - 0x19, 0x5a, 0x41, 0x17, 0x65, 0x69, 0x71, 0x96, 0x13, 0x38, 0xa6, 0xd1, - 0x97, 0xfd, 0xdc, 0x7b, 0x3c, 0x52, 0xf7, 0x1f, 0x8b, 0x7a, 0x3a, 0x65, - 0xe7, 0xbb, 0xe5, 0x8a, 0x7f, 0x4d, 0x5f, 0xa2, 0x74, 0xc7, 0x7b, 0x85, - 0xdf, 0x43, 0x9c, 0x2e, 0x63, 0x12, 0x40, 0xc5, 0xad, 0xa9, 0xe8, 0xd4, - 0x5b, 0xb0, 0x81, 0x57, 0xdb, 0x24, 0x21, 0x6e, 0x10, 0xaa, 0x05, 0x09, - 0x4b, 0x4c, 0x37, 0x0b, 0x35, 0x07, 0xa5, 0xb9, 0x3c, 0xdf, 0xb9, 0x9e, - 0x9d, 0x9d, 0x4f, 0x0e, 0x11, 0x86, 0x39, 0xd8, 0x32, 0x28, 0xfe, 0x5b, - 0x8d, 0xeb, 0x99, 0x2d, 0x06, 0xe9, 0xf1, 0x73, 0xa6, 0x69, 0xd5, 0xb7, - 0xd6, 0x7a, 0xbe, 0xe7, 0x84, 0xc1, 0x37, 0x94, 0xe6, 0xfa, 0x2a, 0x17, - 0xb3, 0x40, 0xed, 0x02, 0x9c, 0xc5, 0x50, 0x47, 0x4b, 0xfe, 0x56, 0xdb, - 0x74, 0x9d, 0x68, 0x7f, 0x36, 0xd4, 0xeb, 0x2c, 0x81, 0xa2, 0x24, 0xa8, - 0x30, 0x0c, 0x71, 0xd3, 0x98, 0xa0, 0xec, 0xb8, 0x7e, 0x95, 0x07, 0x5c, - 0xca, 0x90, 0x52, 0xbd, 0xa3, 0xaf, 0x20, 0x4f, 0x67, 0xc9, 0x29, 0x2c, - 0x7c, 0xf8, 0x3f, 0x29, 0x96, 0xa5, 0x12, 0x66, 0xb3, 0x57, 0x74, 0x32, - 0x9a, 0x17, 0x24, 0x41, 0x29, 0xb2, 0xff, 0x7a, 0xf2, 0xee, 0x63, 0x8c, - 0x33, 0xe8, 0x8d, 0x4c, 0x46, 0x51, 0x4c, 0x34, 0x97, 0x50, 0x56, 0x7d, - 0x9a, 0x62, 0x01, 0xef, 0x54, 0xd9, 0x70, 0xbb, 0x40, 0xbe, 0x68, 0x12, - 0x59, 0x9e, 0xe6, 0x75, 0xae, 0x05, 0xe2, 0x6a, 0x7f, 0xae, 0x91, 0x37, - 0x3c, 0xd6, 0x82, 0x31, 0x7c, 0x83, 0x21, 0xff, 0xb0, 0x5d, 0x01, 0xc1, - 0xee, 0xc6, 0xff, 0x77, 0x94, 0xe0, 0x0e, 0xe0, 0xe6, 0x64, 0x86, 0xf2, - 0xea, 0xb9, 0x7a, 0xa4, 0xc4, 0x42, 0xf4, 0xbd, 0x71, 0x7d, 0xa4, 0xd6, - 0x27, 0x34, 0x69, 0x4d, 0xa2, 0x82, 0xa7, 0x70, 0xcf, 0xc4, 0x0f, 0x85, - 0xe4, 0x8a, 0x9f, 0x45, 0x20, 0x15, 0x27, 0x14, 0xf8, 0x7f, 0xb1, 0x1b, - 0xf6, 0x65, 0xf2, 0xa9, 0xed, 0x01, 0xec, 0x56, 0x3a, 0xae, 0xcb, 0x39, - 0x0a, 0xd6, 0x50, 0xe5, 0x53, 0x9a, 0x3e, 0x68, 0xf7, 0x98, 0x44, 0x0d, - 0x1a, 0x3a, 0x9b, 0xc5, 0xb5, 0x26, 0x52, 0x04, 0x0b, 0x8f, 0x0b, 0x46, - 0x1d, 0x93, 0x2d, 0xd8, 0x2f, 0xfe, 0x9d, 0x73, 0x54, 0x2b, 0xb5, 0x8a, - 0xb6, 0xd4, 0x8b, 0x23, 0xfd, 0x05, 0x28, 0xe5, 0xe8, 0xef, 0xf5, 0xa1, - 0x91, 0xaf, 0x8a, 0x73, 0x3e, 0xd7, 0x57, 0xd1, 0xcd, 0x3b, 0xc6, 0xee, - 0x28, 0xb5, 0x87, 0xd4, 0xa4, 0x92, 0xaa, 0x93, 0xa2, 0x42, 0xbd, 0xb2, - 0x1b, 0xcb, 0x24, 0xcb, 0x4c, 0x71, 0x31, 0xce, 0x00, 0xeb, 0x82, 0xf9, - 0xdb, 0xe9, 0xab, 0xf2, 0x24, 0x0e, 0x79, 0xbc, 0x72, 0x7c, 0xce, 0x40, - 0xcb, 0xc6, 0x3e, 0xb4, 0xb7, 0x16, 0xdf, 0x8b, 0xb2, 0x10, 0x98, 0x9d, - 0xf7, 0x8d, 0x0b, 0x4d, 0xb9, 0xa7, 0xd8, 0x3d, 0xc1, 0xa0, 0x6d, 0x4a, - 0x8b, 0x54, 0x8a, 0xfe, 0xcd, 0x20, 0x80, 0x11, 0x61, 0x6d, 0x6d, 0x1b, - 0xec, 0x36, 0x9b, 0x0b, 0x80, 0xf8, 0x27, 0x76, 0x48, 0x04, 0x6a, 0x29, - 0x34, 0x2d, 0x0c, 0x3b, 0xcf, 0xe5, 0x52, 0x8b, 0x5a, 0x00, 0x05, 0xe3, - 0x24, 0xe7, 0x93, 0xd9, 0xe2, 0x50, 0x02, 0xa4, 0x45, 0xd2, 0x25, 0x37, - 0xbf, 0x8c, 0x77, 0x1e, 0xc9, 0x40, 0x04, 0x3c, 0x16, 0x19, 0x3d, 0x40, - 0xce, 0x9d, 0xe3, 0xa6, 0xbe, 0x19, 0x0f, 0x22, 0xe7, 0xdd, 0x9b, 0x25, - 0xaa, 0x32, 0x54, 0x1b, 0x84, 0x7b, 0xa4, 0x5f, 0xd3, 0xaf, 0x22, 0x23, - 0x3f, 0xec, 0x17, 0xe8, 0x49, 0x2a, 0xb6, 0xd8, 0xd0, 0x0d, 0x9d, 0x72, - 0xd5, 0xae, 0x06, 0xcb, 0x25, 0x52, 0xa8, 0xdc, 0x4c, 0x5a, 0xe3, 0x16, - 0xba, 0x25, 0x7c, 0xc8, 0x49, 0xf0, 0x51, 0xf6, 0x48, 0x17, 0xe5, 0x63, - 0xb3, 0xe5, 0x32, 0x56, 0x2a, 0x87, 0xa9, 0xbf, 0x7b, 0xaa, 0x7f, 0x1e, - 0xf1, 0x98, 0x38, 0x2b, 0xa4, 0x5a, 0x3e, 0x0d, 0xb5, 0x02, 0xbf, 0x74, - 0x8f, 0x5b, 0xd2, 0x2c, 0x0a, 0x6f, 0x2c, 0x18, 0x40, 0x32, 0x97, 0x2b, - 0x82, 0xaa, 0x18, 0xe6, 0x54, 0x49, 0xc0, 0x4f, 0xbd, 0x87, 0xd7, 0xe8, - 0x0f, 0x4e, 0xcb, 0x0b, 0xfd, 0x9d, 0xe2, 0xdf, 0xb4, 0xa4, 0xe9, 0x3a, - 0x7b, 0x5b, 0x57, 0x20, 0x50, 0x62, 0x7f, 0xca, 0x22, 0x08, 0x03, 0x71, - 0x6c, 0x6e, 0x90, 0x50, 0x23, 0x98, 0x35, 0x32, 0x8c, 0x29, 0xac, 0xa5, - 0x59, 0x53, 0x5e, 0xd9, 0xee, 0x2e, 0x0c, 0x0e, 0xa8, 0x36, 0xce, 0xf8, - 0xe1, 0xd0, 0xf0, 0xbe, 0xde, 0x53, 0x62, 0xac, 0x1f, 0xcb, 0x8b, 0x17, - 0x10, 0xd5, 0x34, 0xcb, 0x85, 0x8c, 0xf5, 0x54, 0x51, 0x8c, 0xf3, 0x4d, - 0x44, 0x90, 0x2d, 0x0b, 0x2c, 0x14, 0x0d, 0xc5, 0xe8, 0x9b, 0x76, 0xa5, - 0x1a, 0x0e, 0x56, 0xf1, 0x51, 0xaf, 0x4f, 0x07, 0xf5, 0x2e, 0xfd, 0xaa, - 0x98, 0xe7, 0x76, 0x8e, 0xb0, 0x8d, 0x19, 0x75, 0x8b, 0xbf, 0xa0, 0x54, - 0x2a, 0x96, 0x76, 0xfc, 0x56, 0x20, 0xf6, 0x3b, 0x58, 0xbc, 0x16, 0x87, - 0xa9, 0x16, 0x7a, 0xda, 0x0a, 0x81, 0x67, 0x51, 0x40, 0x33, 0x37, 0x54, - 0x36, 0x7c, 0x41, 0x6d, 0xc7, 0x6f, 0x3c, 0xf0, 0x0b, 0x3c, 0x37, 0xe8, - 0x9d, 0xf4, 0x9a, 0x79, 0xf8, 0x8e, 0x23, 0x27, 0x7c, 0x5a, 0x7d, 0xc3, - 0xde, 0x1e, 0xa8, 0xd8, 0x7a, 0x0d, 0x4e, 0x2c, 0x2f, 0x18, 0xa6, 0xeb, - 0xcd, 0x33, 0xd1, 0xe2, 0x1d, 0x3a, 0x5b, 0xd1, 0x4f, 0x06, 0xc4, 0x80, - 0x96, 0x7c, 0xeb, 0x22, 0xe8, 0xb3, 0x80, 0x5f, 0x3a, 0x30, 0x16, 0x13, - 0x8b, 0x48, 0xc6, 0x4b, 0x92, 0x24, 0xd3, 0xc6, 0x0e, 0xd3, 0x3f, 0xab, - 0xc1, 0x71, 0x0b, 0xfc, 0xe0, 0x45, 0xbe, 0xaa, 0xd3, 0xc9, 0xe1, 0x00, - 0x7c, 0x37, 0x48, 0xb1, 0x62, 0xaf, 0x6d, 0x62, 0xf9, 0x31, 0xb9, 0x92, - 0xbc, 0x79, 0x7e, 0xe5, 0x61, 0xae, 0xcc, 0x4b, 0x19, 0x31, 0xf4, 0x51, - 0xbf, 0x1d, 0x22, 0x25, 0x6e, 0xe3, 0xf5, 0x88, 0x70, 0x01, 0x77, 0xff, - 0x03, 0x6f, 0x61, 0x2b, 0x82, 0x1b, 0x3a, 0xc3, 0x6b, 0x1b, 0xe5, 0xef, - 0xc5, 0x40, 0x50, 0x49, 0x4b, 0x39, 0x33, 0x7c, 0x22, 0x5b, 0x5b, 0xbc, - 0xbe, 0x6e, 0x3d, 0x09, 0xfc, 0xa0, 0x6e, 0xb8, 0x76, 0x78, 0x0f, 0xeb, - 0x0c, 0xf4, 0x23, 0x79, 0x98, 0x9b, 0xf3, 0xc4, 0xfd, 0xbe, 0xb2, 0x85, - 0x45, 0xdc, 0xa0, 0x9b, 0xed, 0x82, 0xa9, 0x36, 0xcd, 0x94, 0xf6, 0x2b, - 0x60, 0x9d, 0xf4, 0x27, 0xe6, 0xbd, 0xf2, 0x6a, 0x91, 0xaf, 0xd8, 0x10, - 0xf1, 0xf4, 0xd4, 0xee, 0x7f, 0x33, 0x16, 0x04, 0xaf, 0xae, 0xd9, 0x88, - 0x28, 0x4e, 0xa8, 0xde, 0xce, 0x60, 0x02, 0x16, 0x45, 0x3e, 0x39, 0x7f, - 0x1c, 0xfc, 0xa3, 0x81, 0x97, 0x17, 0xf8, 0xbd, 0xad, 0xca, 0x32, 0x02, - 0x86, 0x46, 0xaa, 0xff, 0x7a, 0x39, 0xf9, 0xf0, 0xee, 0xa8, 0xaf, 0x56, - 0x74, 0x11, 0x92, 0xbf, 0xb4, 0x0a, 0x12, 0x80, 0x3d, 0x21, 0xd4, 0xca, - 0x28, 0x99, 0xb4, 0xd9, 0x99, 0x72, 0xe3, 0xdf, 0x0e, 0x31, 0xfb, 0x42, - 0xd6, 0xc3, 0x10, 0xd2, 0x28, 0x45, 0x67, 0x67, 0xfd, 0x81, 0xc8, 0x80, - 0x46, 0xed, 0xb2, 0x53, 0x54, 0x13, 0xbf, 0x21, 0x6e, 0xed, 0xe4, 0x3f, - 0x8c, 0xb7, 0x4b, 0x28, 0x5c, 0x2f, 0x4a, 0x78, 0x3c, 0x56, 0x09, 0x8b, - 0x36, 0x45, 0x81, 0xcb, 0x17, 0xbc, 0x3f, 0x86, 0x87, 0xdf, 0x64, 0xfa, - 0x76, 0x04, 0xd8, 0xb2, 0xa8, 0x3d, 0xf6, 0x69, 0x1c, 0xbc, 0x80, 0x19, - 0xea, 0x37, 0x1c, 0xf3, 0x28, 0xa8, 0x80, 0x1c, 0xc5, 0x85, 0x3c, 0xb8, - 0xc3, 0x29, 0x61, 0xba, 0x90, 0xc9, 0x6b, 0x25, 0xfb, 0xa6, 0x37, 0x7a, - 0x5c, 0xd6, 0x2a, 0xdd, 0xdb, 0x30, 0x40, 0x3b, 0x8e, 0x8d, 0xee, 0xd0, - 0xb8, 0x7e, 0xee, 0xe7, 0x2e, 0xd0, 0x34, 0xdf, 0x27, 0x6f, 0x23, 0xf5, - 0x5c, 0x2c, 0x13, 0x67, 0x4c, 0xb8, 0xb3, 0x52, 0xbc, 0xb6, 0x98, 0xf8, - 0x3f, 0x98, 0x20, 0x0a, 0x76, 0x7a, 0x27, 0x17, 0xa6, 0xab, 0x4b, 0x70, - 0x3d, 0x6d, 0xdc, 0x5d, 0x0a, 0xc7, 0x48, 0x82, 0x47, 0x8b, 0x62, 0x54, - 0x0b, 0x5a, 0x05, 0x03, 0x4d, 0x6f, 0xa4, 0xcb, 0x2b, 0x7c, 0x07, 0xe6, - 0x17, 0x9e, 0x8b, 0xb9, 0x52, 0x9e, 0xbf, 0x0f, 0x71, 0x9a, 0x61, 0x90, - 0x45, 0x59, 0x09, 0xa5, 0x90, 0x28, 0xfa, 0x49, 0x2e, 0x06, 0x21, 0x1b, - 0x7b, 0x13, 0x43, 0x75, 0x14, 0x95, 0x17, 0x8a, 0x91, 0x74, 0x47, 0x0c, - 0x90, 0x4b, 0xd5, 0xa0, 0x91, 0x80, 0x91, 0xa3, 0xa2, 0x39, 0x00, 0xdd, - 0x87, 0x4d, 0x2e, 0x90, 0x0a, 0x61, 0xca, 0x0f, 0xb3, 0x8b, 0xae, 0x04, - 0xa9, 0x04, 0xa6, 0xd9, 0x6e, 0x04, 0x83, 0xd8, 0xa4, 0xcc, 0x4a, 0x05, - 0x80, 0x53, 0x07, 0xa0, 0xe8, 0x68, 0xae, 0x64, 0x44, 0x9e, 0x51, 0xfb, - 0x41, 0xae, 0xb9, 0x68, 0x26, 0xfb, 0x8d, 0xae, 0x3f, 0xc7, 0x60, 0xbd, - 0x6c, 0x26, 0xe1, 0x63, 0xa1, 0x9a, 0xe8, 0x17, 0x84, 0x52, 0xee, 0xb0, - 0xa0, 0x8a, 0x83, 0x09, 0xcc, 0xbd, 0xd8, 0x68, 0x64, 0x4b, 0xcd, 0x72, - 0x39, 0xd1, 0xa0, 0xc0, 0x04, 0x46, 0xc6, 0xa8, 0x5e, 0x4d, 0x01, 0x7f, - 0x14, 0xdc, 0xd0, 0x42, 0xc3, 0xa0, 0xae, 0x45, 0x80, 0x4e, 0x52, 0x85, - 0x12, 0xa8, 0x0c, 0x86, 0x7a, 0xf8, 0x2d, 0x5a, 0x47, 0x5d, 0xa1, 0x99, - 0x33, 0x25, 0x3b, 0x4a, 0xc8, 0x3f, 0x57, 0xbf, 0x79, 0x07, 0xe8, 0x73, - 0x5b, 0x77, 0x52, 0x3a, 0x87, 0xe2, 0x67, 0x27, 0x4c, 0xda, 0xa6, 0x66, - 0x48, 0xe0, 0x99, 0x3d, 0xd0, 0xbe, 0x39, 0x09, 0xf7, 0xfb, 0x79, 0xce, - 0xe7, 0xf0, 0x47, 0xd0, 0x80, 0x3a, 0x6e, 0x26, 0x25, 0x27, 0xf7, 0x78, - 0xec, 0x53, 0xd4, 0x0b, 0x34, 0x42, 0x4a, 0x5c, 0xf9, 0x1f, 0xab, 0x86, - 0xd5, 0x2f, 0x5a, 0x4b, 0xc2, 0x53, 0x10, 0x40, 0xda, 0x75, 0x1b, 0x88, - 0x8d, 0x33, 0xdd, 0xe1, 0x29, 0x5f, 0xe5, 0x30, 0x95, 0xfc, 0x8b, 0x13, - 0x29, 0x3a, 0x7c, 0x5d, 0xa2, 0x24, 0x88, 0xf9, 0xa5, 0x30, 0xcb, 0xb1, - 0xb4, 0xae, 0x0f, 0x60, 0x59, 0x89, 0x6c, 0x98, 0x82, 0xef, 0xb7, 0x28, - 0xcf, 0x7b, 0xfe, 0xfa, 0x88, 0x0d, 0x62, 0x70, 0x49, 0x90, 0xd3, 0x31, - 0xe0, 0x0e, 0xb2, 0x74, 0x9b, 0x45, 0x4b, 0x43, 0xf4, 0xc4, 0xa9, 0xec, - 0x44, 0xd7, 0xb9, 0x21, 0x78, 0xf8, 0x18, 0xfe, 0x3e, 0xf5, 0xb2, 0x76, - 0x5b, 0x01, 0x70, 0xe6, 0xb8, 0xef, 0xc3, 0xcf, 0x0c, 0xb3, 0x0e, 0x6b, - 0xaa, 0xc9, 0xcf, 0xcf, 0x4a, 0x84, 0xa6, 0x40, 0x7d, 0xe9, 0xb7, 0x8d, - 0xcb, 0x7a, 0x7a, 0x29, 0xbd, 0x12, 0xf9, 0x88, 0x3f, 0xdc, 0x69, 0xa8, - 0x70, 0xc3, 0xf5, 0x01, 0x6f, 0x84, 0x5f, 0x1a, 0x21, 0xc0, 0x10, 0x58, - 0xaf, 0x2d, 0x10, 0x68, 0xbf, 0xc4, 0xdd, 0x50, 0xc9, 0x1d, 0x44, 0xf7, - 0x86, 0x86, 0x87, 0x0b, 0xa6, 0x1d, 0xef, 0xf3, 0x72, 0x0d, 0x34, 0xe6, - 0x68, 0xe7, 0x09, 0x9c, 0x93, 0x9b, 0x83, 0x2f, 0x81, 0x28, 0xfb, 0x4f, - 0x03, 0x83, 0xac, 0x75, 0x00, 0x14, 0x51, 0xb2, 0x21, 0x73, 0x35, 0x37, - 0x25, 0xab, 0xc0, 0x1c, 0x4d, 0x21, 0x0a, 0xab, 0x28, 0xa0, 0xe7, 0x5b, - 0x47, 0x5a, 0x07, 0x58, 0xa9, 0x85, 0xfc, 0x19, 0x43, 0x32, 0xc5, 0xea, - 0x89, 0x84, 0x57, 0xe6, 0x7e, 0xa3, 0x95, 0x81, 0x61, 0x6b, 0xbd, 0xc5, - 0x35, 0xf2, 0xc4, 0x24, 0xcd, 0xf0, 0x42, 0xff, 0xe0, 0x5e, 0xc2, 0xed, - 0x43, 0xd7, 0xea, 0x72, 0x34, 0x7f, 0x8b, 0x14, 0xc1, 0x85, 0xe5, 0x74, - 0x0e, 0x76, 0xa1, 0xe5, 0xd5, 0xa4, 0x5a, 0xe1, 0xc4, 0xe9, 0xf4, 0xa4, - 0xd2, 0xa8, 0xd3, 0x11, 0xc9, 0xb8, 0xeb, 0xa4, 0xd7, 0x30, 0xba, 0x49, - 0xb5, 0x62, 0xa2, 0xc4, 0x30, 0x26, 0x5b, 0x0d, 0x45, 0xaa, 0xce, 0x7b, - 0x6d, 0xb3, 0xe9, 0x90, 0x38, 0xf8, 0xaa, 0xc0, 0xb0, 0x00, 0x9b, 0x45, - 0x03, 0x34, 0x2d, 0x23, 0xa2, 0x75, 0xda, 0x59, 0xa0, 0xcb, 0x01, 0xcb, - 0xf5, 0x74, 0x60, 0x19, 0x47, 0x9f, 0xc9, 0x2b, 0xfa, 0x0c, 0xef, 0xde, - 0x1b, 0x7e, 0x33, 0x53, 0xbd, 0x78, 0x6f, 0x88, 0x34, 0x86, 0x80, 0x9a, - 0xd1, 0xbd, 0x6b, 0x89, 0x4f, 0xb0, 0x21, 0x7d, 0xf1, 0xcb, 0xc0, 0x23, - 0xc9, 0xf0, 0xbd, 0xa3, 0x6b, 0x79, 0xc3, 0xa5, 0x15, 0x09, 0xbc, 0xe0, - 0x25, 0x38, 0xed, 0x61, 0x4d, 0x7e, 0xc7, 0x68, 0xa7, 0x19, 0x2e, 0xb6, - 0xc8, 0xa0, 0x36, 0x8c, 0xda, 0xdf, 0xce, 0x3b, 0x8f, 0x95, 0x41, 0x5b, - 0x71, 0x95, 0xe3, 0xd3, 0x18, 0x89, 0x2e, 0x2b, 0x71, 0x11, 0x14, 0xf2, - 0x33, 0x84, 0x11, 0x69, 0xb0, 0x43, 0x0b, 0xd2, 0x45, 0xbd, 0x68, 0xfe, - 0xc4, 0x9e, 0x32, 0xc5, 0x77, 0x13, 0xea, 0xba, 0x8c, 0x5d, 0x20, 0x44, - 0x30, 0xe5, 0x25, 0xca, 0x75, 0x13, 0xef, 0xd8, 0x15, 0x6d, 0x8d, 0xe6, - 0xef, 0xe1, 0xe7, 0x6c, 0x83, 0xd8, 0x15, 0x6c, 0x6a, 0x66, 0x40, 0x9c, - 0x1b, 0xc2, 0x41, 0x41, 0xc0, 0x20, 0x66, 0x39, 0x87, 0x72, 0xc7, 0x59, - 0xdb, 0x0f, 0x4e, 0x15, 0x3a, 0x6d, 0x6f, 0x23, 0x55, 0x92, 0x59, 0xdc, - 0x46, 0xff, 0xd6, 0x19, 0x94, 0x01, 0xb5, 0x58, 0x16, 0x3c, 0x0b, 0x2e, - 0xdc, 0xa6, 0x4d, 0xf0, 0xcc, 0xcb, 0x8c, 0xab, 0xc1, 0xca, 0xa9, 0x36, - 0x13, 0x7e, 0xf2, 0x29, 0x13, 0xf0, 0x25, 0x1e, 0xd4, 0x8c, 0x21, 0x7a, - 0x93, 0xce, 0xc7, 0xb2, 0xca, 0x79, 0x69, 0x2d, 0xd4, 0x40, 0x0e, 0x59, - 0xae, 0x49, 0xaa, 0xea, 0xd3, 0x24, 0x01, 0xc6, 0x02, 0x36, 0x0d, 0x5e, - 0xd6, 0x00, 0x03, 0x03, 0x04, 0xe2, 0x9c, 0x01, 0x26, 0xbe, 0xd7, 0x28, - 0xde, 0x72, 0x44, 0xf7, 0xca, 0x5e, 0x20, 0xdb, 0x3a, 0x35, 0x63, 0xe9, - 0x90, 0x05, 0xfd, 0xb8, 0x3e, 0x98, 0x71, 0x42, 0x9d, 0x55, 0x96, 0xa4, - 0xd3, 0x78, 0x3b, 0x2c, 0xa5, 0x4a, 0x29, 0x40, 0xda, 0x42, 0x50, 0x9a, - 0x8a, 0x92, 0xec, 0x22, 0x92, 0xfd, 0x9f, 0x04, 0xe3, 0xa1, 0x9d, 0xea, - 0x01, 0x35, 0x88, 0xb2, 0xa9, 0x86, 0xcc, 0x2b, 0x48, 0x44, 0x9e, 0x96, - 0x1e, 0xf9, 0x85, 0xa2, 0x30, 0xab, 0xb5, 0x5b, 0xf1, 0x53, 0xb6, 0x0e, - 0xaa, 0xee, 0x0f, 0xd0, 0x80, 0x66, 0x6f, 0x47, 0xbd, 0x18, 0x3f, 0x04, - 0x5c, 0x6c, 0xdb, 0xe6, 0xc1, 0x02, 0x0c, 0xb1, 0x31, 0x93, 0x91, 0x16, - 0x7c, 0xfd, 0x70, 0x7f, 0x91, 0x66, 0x00, 0x13, 0x74, 0x6b, 0x65, 0xf9, - 0xdf, 0x33, 0xfc, 0xb5, 0xb3, 0x84, 0x59, 0xa4, 0xb0, 0x18, 0x8f, 0x5b, - 0x38, 0xc1, 0x2f, 0x83, 0x00, 0x97, 0x33, 0x14, 0x68, 0x0d, 0x64, 0x93, - 0xac, 0xbd, 0xfa, 0xdf, 0x6b, 0x97, 0x20, 0x42, 0x7e, 0x7e, 0xde, 0x2d, - 0x90, 0x32, 0x7d, 0x0f, 0x8b, 0xde, 0x2e, 0x7f, 0x10, 0x33, 0x59, 0xeb, - 0x85, 0xf7, 0x1f, 0x5a, 0x62, 0x1e, 0x3c, 0x14, 0xc2, 0x8a, 0xf7, 0xe2, - 0xeb, 0xbf, 0x9d, 0xd2, 0xe9, 0xe5, 0x6d, 0xa1, 0xa0, 0x87, 0x95, 0xa5, - 0x64, 0x72, 0xf3, 0xf3, 0x4f, 0x76, 0x7a, 0x2d, 0x53, 0x76, 0x5a, 0xfe, - 0xa5, 0xd0, 0xd2, 0xfa, 0xdd, 0x33, 0xb2, 0xaa, 0x67, 0x5f, 0x5c, 0x54, - 0xcb, 0xe7, 0xe2, 0x40, 0xcf, 0x69, 0x1d, 0xe8, 0x68, 0xba, 0x9c, 0xa8, - 0x96, 0xe7, 0xef, 0xce, 0xae, 0xfe, 0x70, 0x88, 0xcd, 0x1a, 0xec, 0xa3, - 0xd7, 0x6b, 0xf3, 0x1b, 0x1d, 0x2f, 0xc6, 0x83, 0x5e, 0x92, 0xb0, 0x11, - 0x74, 0x75, 0x1c, 0x6d, 0x62, 0xc8, 0x14, 0x6c, 0x33, 0x1a, 0x92, 0x25, - 0x6b, 0x61, 0x04, 0x29, 0xf1, 0x27, 0x36, 0xd3, 0x35, 0x5d, 0xd8, 0x01, - 0x6d, 0x31, 0xaa, 0xac, 0x61, 0xe6, 0xeb, 0x96, 0xd2, 0x39, 0x3b, 0xb8, - 0xa3, 0x0a, 0xde, 0x40, 0xc4, 0xaa, 0x59, 0x09, 0x0f, 0x82, 0x67, 0xe0, - 0xa6, 0xc3, 0x74, 0x2d, 0x37, 0x34, 0x5a, 0x47, 0x9d, 0xf8, 0x8e, 0x72, - 0xee, 0x8d, 0x74, 0x5d, 0x68, 0x3a, 0xc0, 0x2a, 0x80, 0x80, 0x16, 0x8b, - 0x14, 0x9d, 0xca, 0x04, 0xf4, 0x6c, 0x3b, 0x78, 0x6f, 0x38, 0x09, 0xb9, - 0xf6, 0xe0, 0x6b, 0x61, 0x65, 0x10, 0x34, 0x22, 0xe9, 0xac, 0x0f, 0x0b, - 0x27, 0x12, 0x0b, 0x77, 0x11, 0x29, 0x53, 0xb9, 0xdd, 0x98, 0x02, 0x1b, - 0xa1, 0x63, 0x63, 0x46, 0x1d, 0xb7, 0x73, 0x35, 0x2c, 0xf9, 0xb7, 0x39, - 0x50, 0x5a, 0xe9, 0xd5, 0x10, 0x9d, 0xa4, 0xc0, 0xe9, 0xe0, 0xa1, 0x42, - 0xe0, 0xd3, 0x39, 0x6d, 0x78, 0xa3, 0x42, 0x49, 0x42, 0xc1, 0x24, 0xe8, - 0x06, 0xc1, 0x08, 0xb7, 0xa4, 0xe4, 0xcc, 0xb7, 0x04, 0xf5, 0x65, 0x26, - 0x3d, 0xd0, 0xaa, 0x88, 0x7f, 0xec, 0x42, 0x19, 0xe2, 0xc3, 0x78, 0x9b, - 0x55, 0x77, 0xf7, 0x57, 0x79, 0x8b, 0xc0, 0x90, 0x47, 0xba, 0x0e, 0x58, - 0x23, 0x51, 0x01, 0x03, 0xcf, 0xd9, 0x1f, 0x97, 0xba, 0x05, 0x43, 0x59, - 0x9b, 0x3f, 0xad, 0x42, 0x82, 0xd8, 0xdf, 0x23, 0x3b, 0xf9, 0x0c, 0x66, - 0xa7, 0xed, 0x26, 0xc1, 0xc7, 0x82, 0x92, 0xf2, 0x7b, 0xe9, 0xbd, 0x7d, - 0x97, 0xb2, 0x04, 0xce, 0x6e, 0x60, 0x1c, 0x4e, 0x8e, 0x64, 0xa3, 0xa0, - 0x75, 0x49, 0x8a, 0xb3, 0x4a, 0x2d, 0xea, 0xef, 0x47, 0x8f, 0xaf, 0x8a, - 0x81, 0x5f, 0xb3, 0xee, 0x31, 0x69, 0x1f, 0x67, 0xe6, 0x73, 0xc5, 0x9a, - 0xc3, 0x74, 0xb0, 0x4e, 0x52, 0x0e, 0x2f, 0x73, 0xb9, 0x17, 0x8c, 0x2b, - 0x28, 0xce, 0xd5, 0x42, 0xcf, 0x0b, 0xf5, 0x35, 0x81, 0x53, 0x72, 0xea, - 0x0c, 0xaa, 0xad, 0xee, 0x42, 0x8c, 0x74, 0x78, 0x6b, 0x03, 0xf2, 0x6e, - 0x03, 0x66, 0x5f, 0x56, 0x2b, 0x51, 0x95, 0x22, 0xf5, 0x8d, 0xd6, 0x09, - 0x53, 0x60, 0xe7, 0xdf, 0x50, 0x13, 0x70, 0x18, 0x65, 0x29, 0x99, 0x62, - 0x56, 0xb4, 0x35, 0xb7, 0x64, 0x93, 0xb7, 0x48, 0x32, 0xbc, 0x15, 0xe8, - 0x87, 0xe5, 0xdb, 0xf6, 0xd2, 0x6a, 0x71, 0x02, 0x01, 0x69, 0x87, 0x79, - 0xa6, 0x86, 0xfc, 0x1f, 0x4d, 0x0a, 0x88, 0x0d, 0x51, 0x7f, 0xdc, 0x55, - 0x06, 0x96, 0xd0, 0x0f, 0x34, 0xa9, 0x5e, 0xda, 0x34, 0x75, 0x0f, 0x0f, - 0x9b, 0x9c, 0x49, 0xea, 0xac, 0x1e, 0x48, 0x72, 0xa2, 0x96, 0x2d, 0x7a, - 0x74, 0x74, 0x0f, 0x4b, 0x6e, 0x10, 0x6c, 0x00, 0xa7, 0x6a, 0xfd, 0x43, - 0xbc, 0x9a, 0x4a, 0x71, 0x68, 0xad, 0xef, 0x90, 0x15, 0x11, 0x5b, 0x4d, - 0x0c, 0xd4, 0xe5, 0xf4, 0x81, 0x1f, 0x01, 0x8b, 0x2d, 0x87, 0xb2, 0xeb, - 0x6f, 0xaf, 0x3c, 0xe6, 0xef, 0x37, 0x65, 0x6d, 0x6d, 0x3c, 0x49, 0xa1, - 0x85, 0x5a, 0x25, 0xf1, 0x9f, 0x04, 0xd9, 0x16, 0x36, 0xfa, 0x18, 0xc7, - 0x8e, 0x5a, 0x6c, 0x57, 0xb7, 0x73, 0xf7, 0xf5, 0xbd, 0xb0, 0x5c, 0x00, - 0x60, 0xc8, 0xe3, 0xda, 0x05, 0x50, 0x0f, 0xad, 0x18, 0xf3, 0xa9, 0x49, - 0xb1, 0xe0, 0x10, 0xe3, 0xd8, 0x06, 0x7f, 0x5f, 0xda, 0x82, 0xf7, 0xd7, - 0x67, 0xa1, 0xc6, 0xe2, 0x20, 0x89, 0xca, 0x94, 0xc0, 0xc0, 0xf3, 0x8e, - 0xbf, 0x79, 0x24, 0x48, 0x6e, 0x09, 0x68, 0x60, 0x0a, 0xa0, 0x1a, 0x66, - 0x54, 0xa0, 0xbc, 0x77, 0xb1, 0xd7, 0xf4, 0x24, 0x7e, 0x47, 0xdc, 0x8d, - 0x6e, 0x4b, 0xd4, 0x74, 0x6b, 0xde, 0x8c, 0xb0, 0xd2, 0xed, 0x8e, 0x40, - 0xd4, 0x14, 0x51, 0x81, 0xad, 0x82, 0x51, 0x4d, 0xe2, 0xf9, 0x72, 0x66, - 0xd9, 0x51, 0x9f, 0x1f, 0x41, 0x70, 0x3a, 0x60, 0xe1, 0x5d, 0x39, 0x35, - 0xb3, 0x66, 0xdb, 0xc0, 0xbd, 0x12, 0xd6, 0xf8, 0x5e, 0x3e, 0x2f, 0x9c, - 0x96, 0x1a, 0x62, 0xb7, 0xa4, 0x2f, 0x3b, 0xd2, 0x41, 0x36, 0x06, 0x4b, - 0xe6, 0x58, 0x53, 0x5e, 0x10, 0xbf, 0xa2, 0x21, 0xf2, 0x1d, 0xd2, 0x93, - 0xb6, 0x71, 0x8c, 0xe5, 0x51, 0x5d, 0xad, 0x7b, 0x24, 0x28, 0x9f, 0x70, - 0x70, 0xdc, 0x3a, 0x3a, 0xff, 0x6e, 0x91, 0x13, 0xe3, 0xfa, 0x3d, 0xfe, - 0x35, 0x38, 0x69, 0x03, 0xfb, 0x69, 0x8d, 0x2b, 0xe3, 0x0f, 0x16, 0x3e, - 0x5e, 0x8a, 0x3e, 0x1e, 0x50, 0x98, 0xce, 0x00, 0x8f, 0x0e, 0xbe, 0xbb, - 0x22, 0x09, 0xd5, 0x13, 0x9f, 0x12, 0x66, 0x81, 0xfa, 0x34, 0x81, 0x58, - 0xa1, 0x04, 0x17, 0x22, 0x1a, 0xe7, 0x51, 0x05, 0x98, 0x8d, 0x9d, 0x83, - 0xda, 0x24, 0xb6, 0x2f, 0x82, 0xbc, 0x15, 0xe0, 0x51, 0x7b, 0xb8, 0x70, - 0x7d, 0xf2, 0xaa, 0x19, 0x6c, 0x16, 0xdc, 0xf5, 0x27, 0xa7, 0xd6, 0x7e, - 0xca, 0x94, 0x0b, 0xe7, 0x37, 0x40, 0xd6, 0x17, 0x93, 0x7a, 0x32, 0xc9, - 0x4d, 0x9b, 0xd9, 0xbc, 0x2c, 0xa6, 0x1e, 0xdc, 0xb2, 0x9b, 0x00, 0xba, - 0x86, 0xf4, 0xce, 0x87, 0xb4, 0x3f, 0x9a, 0x1a, 0xc7, 0xa7, 0xd0, 0x49, - 0x41, 0x39, 0xe9, 0x99, 0x0b, 0x88, 0x54, 0x27, 0xf0, 0x76, 0xec, 0x01, - 0x3d, 0x3e, 0x2a, 0x39, 0x12, 0xa1, 0x34, 0xda, 0xab, 0x41, 0x8b, 0x86, - 0x80, 0x4c, 0x46, 0x03, 0x15, 0x64, 0x49, 0x29, 0x6b, 0xb9, 0xc4, 0xb0, - 0x34, 0xae, 0x6c, 0x44, 0x0d, 0xff, 0xa6, 0x91, 0x94, 0x43, 0xf0, 0xaf, - 0x4b, 0x3b, 0xef, 0x0f, 0x70, 0x4f, 0xcd, 0x9d, 0x78, 0xeb, 0xb7, 0x3b, - 0x1e, 0x08, 0x86, 0xa4, 0x02, 0x8c, 0xa2, 0xaf, 0x23, 0x43, 0xe6, 0x35, - 0x0e, 0xfc, 0x31, 0xdc, 0xeb, 0xf8, 0xa3, 0x81, 0xec, 0xde, 0x68, 0x87, - 0x2b, 0x8b, 0x93, 0xf4, 0xf7, 0x4c, 0xd8, 0x6c, 0xcc, 0x40, 0xe9, 0x5f, - 0xe0, 0x60, 0xfd, 0x6e, 0xd4, 0x52, 0x8e, 0x65, 0x89, 0xd6, 0xcc, 0x01, - 0xb4, 0x0c, 0x03, 0xdd, 0xb1, 0x1f, 0x7d, 0x0e, 0x5e, 0x09, 0x62, 0x5b, - 0xe0, 0x3f, 0x32, 0xd8, 0x7a, 0x8b, 0x84, 0xa9, 0x82, 0x90, 0xf9, 0x06, - 0xef, 0xea, 0xe2, 0x3b, 0x6e, 0x1e, 0x2c, 0x02, 0x97, 0xad, 0xae, 0x67, - 0xb4, 0x7d, 0xc6, 0xd5, 0xf3, 0xd5, 0xad, 0xb4, 0xcc, 0xa4, 0x87, 0x1d, - 0x9e, 0x0e, 0xfb, 0xc0, 0x4d, 0xd5, 0xcd, 0xd1, 0xb2, 0xfb, 0xe9, 0x02, - 0x7d, 0x40, 0xc2, 0x86, 0xb4, 0x5d, 0xe0, 0x07, 0x9b, 0x36, 0x03, 0x8f, - 0x93, 0xa3, 0x68, 0x91, 0x05, 0xea, 0x05, 0x55, 0x25, 0xd1, 0x6e, 0x4e, - 0x5b, 0xd6, 0x01, 0x0a, 0x9b, 0x66, 0x47, 0x56, 0xb5, 0x7d, 0xf4, 0x6c, - 0xe1, 0x43, 0xa0, 0x94, 0x7e, 0x4c, 0x9a, 0x48, 0xd0, 0x22, 0x54, 0x55, - 0x1b, 0x9d, 0x70, 0xe6, 0x34, 0x8c, 0x3e, 0xbb, 0xe5, 0xa6, 0x28, 0x89, - 0x66, 0xc8, 0xd4, 0xd5, 0x83, 0x1b, 0xaf, 0x55, 0xc3, 0x58, 0xce, 0x82, - 0x1e, 0x66, 0xa4, 0xbe, 0x37, 0x9c, 0x07, 0xe5, 0x1e, 0xac, 0x80, 0x6d, - 0x82, 0xe4, 0xf0, 0x8d, 0x81, 0x20, 0xb2, 0x71, 0xee, 0x28, 0x39, 0x74, - 0x11, 0xbb, 0xc6, 0xe5, 0x93, 0xde, 0xdf, 0x32, 0x8a, 0x1a, 0x9a, 0x37, - 0xf6, 0x0d, 0xf3, 0x07, 0x2f, 0x2f, 0x2c, 0x84, 0x71, 0xc8, 0x32, 0x45, - 0xb3, 0x70, 0x99, 0x93, 0x22, 0x64, 0xa3, 0x22, 0x54, 0x08, 0xd6, 0xd0, - 0xb6, 0x64, 0xaf, 0xc6, 0x03, 0x0c, 0x2f, 0x48, 0x75, 0x02, 0xda, 0x7c, - 0xb3, 0xfa, 0xab, 0x03, 0x09, 0xbf, 0xd0, 0xdd, 0xdb, 0xa5, 0x45, 0xef, - 0xec, 0xe9, 0x6e, 0x5b, 0xba, 0xbd, 0xbc, 0xa2, 0x01, 0x2b, 0xc0, 0x5f, - 0xa1, 0x7d, 0x9a, 0x05, 0x19, 0xfe, 0x63, 0xaa, 0x49, 0xcc, 0x3c, 0x7f, - 0x88, 0x41, 0x60, 0x12, 0x76, 0xa7, 0x50, 0x9f, 0x3e, 0x91, 0x0e, 0x6f, - 0x55, 0x94, 0x83, 0xf8, 0x54, 0xde, 0x07, 0x3b, 0x20, 0x9f, 0xc8, 0x50, - 0x13, 0xba, 0x48, 0x9a, 0xc4, 0x36, 0x05, 0xc9, 0x05, 0x62, 0x6e, 0x3e, - 0x42, 0xfa, 0xc9, 0x5d, 0x6f, 0x63, 0xd9, 0x30, 0x8d, 0x48, 0x93, 0xd4, - 0x08, 0x39, 0x81, 0x0f, 0x1f, 0x23, 0x51, 0x94, 0x2b, 0xa0, 0x0a, 0x5f, - 0x2c, 0x6d, 0x89, 0x0a, 0x24, 0x47, 0x3a, 0x57, 0x16, 0xaa, 0x4b, 0xab, - 0x8c, 0x87, 0x5d, 0x2a, 0xc1, 0x10, 0x26, 0x98, 0x7c, 0x0d, 0x52, 0x83, - 0xcc, 0x81, 0x04, 0x1b, 0x54, 0xd4, 0xf2, 0x09, 0xac, 0xe1, 0x70, 0x8e, - 0xe4, 0x2f, 0xc2, 0xc0, 0x8e, 0x77, 0x19, 0x8e, 0x34, 0x44, 0xe1, 0x42, - 0x3e, 0x60, 0x0e, 0xa0, 0x6e, 0xd9, 0xea, 0x13, 0xa4, 0xe8, 0x33, 0xbd, - 0xa5, 0xd4, 0x95, 0x05, 0x0f, 0xf9, 0x8c, 0x8d, 0x1f, 0x90, 0x68, 0x15, - 0x2a, 0xe4, 0xb2, 0x12, 0xc3, 0x6d, 0x6b, 0xbf, 0x15, 0xd6, 0x07, 0xd8, - 0x3d, 0xbf, 0x34, 0xe6, 0x4c, 0x18, 0x6b, 0x05, 0x78, 0x3b, 0x04, 0x3f, - 0x21, 0x5c, 0xc2, 0xba, 0xa0, 0x75, 0xdf, 0xc4, 0x97, 0x98, 0xd7, 0xd0, - 0x12, 0x27, 0xd2, 0x44, 0xde, 0x75, 0x4b, 0x9c, 0x0b, 0x39, 0x36, 0x60, - 0x69, 0x81, 0xb4, 0xa3, 0x75, 0xe8, 0x67, 0xd2, 0xfa, 0x3a, 0x5d, 0x6f, - 0x13, 0x20, 0x55, 0xe5, 0xbb, 0x2f, 0xd3, 0x4e, 0x3f, 0x08, 0x17, 0xc7, - 0x77, 0xfa, 0xad, 0x4d, 0xc6, 0xad, 0xe3, 0x10, 0x20, 0xf5, 0xb2, 0x90, - 0xbf, 0xf6, 0xef, 0xe9, 0x24, 0x9f, 0xd1, 0xfd, 0xa4, 0xfa, 0xd5, 0x5b, - 0xc2, 0xb4, 0x5a, 0xa1, 0xd2, 0xcc, 0x59, 0xd6, 0x43, 0xf7, 0xff, 0x06, - 0xf9, 0xeb, 0xef, 0x70, 0x4d, 0x3f, 0x67, 0x15, 0x80, 0x9a, 0x4f, 0xf8, - 0x9c, 0xce, 0xff, 0x62, 0x40, 0x82, 0x1c, 0x96, 0xc5, 0xd5, 0xac, 0x75, - 0x99, 0x92, 0xc4, 0xae, 0x9a, 0xd6, 0x6b, 0x09, 0x0e, 0x30, 0x9b, 0xa6, - 0xa6, 0x64, 0x5d, 0x52, 0x3d, 0x5f, 0x6c, 0x72, 0x0d, 0xdd, 0x11, 0x4d, - 0x71, 0xee, 0xb7, 0xe7, 0xf8, 0xe4, 0xd7, 0x78, 0x42, 0xe1, 0x4c, 0x24, - 0xf5, 0x60, 0x28, 0x30, 0x86, 0x92, 0x98, 0x6b, 0x4e, 0x8c, 0x1f, 0x79, - 0x89, 0x90, 0xb8, 0x49, 0x19, 0xfc, 0x04, 0x5a, 0xe4, 0x35, 0x45, 0x16, - 0x73, 0x17, 0x85, 0xa5, 0xe7, 0xb0, 0xba, 0xdb, 0x20, 0x1c, 0x52, 0x46, - 0xce, 0xbe, 0x82, 0xeb, 0x66, 0x20, 0x84, 0xaf, 0x5d, 0x35, 0xfa, 0xc8, - 0xb6, 0xf3, 0x5e, 0x80, 0x6a, 0xcd, 0xfd, 0xb7, 0x56, 0x87, 0x88, 0xfd, - 0x92, 0xaf, 0x74, 0xa6, 0xb7, 0xbc, 0x20, 0x60, 0x85, 0x30, 0x55, 0xf9, - 0xa0, 0x51, 0xf5, 0x74, 0x65, 0x7c, 0x64, 0xf8, 0x11, 0x2c, 0x6c, 0x30, - 0xf5, 0xb8, 0x6e, 0x33, 0xda, 0x9c, 0x33, 0xe1, 0xce, 0x14, 0x24, 0xfc, - 0x2f, 0x65, 0xba, 0x2f, 0x51, 0xe0, 0x3b, 0x2b, 0x67, 0x9b, 0xaf, 0x7c, - 0xac, 0x9e, 0x9a, 0xa6, 0x24, 0x87, 0x5a, 0xfd, 0xb4, 0x56, 0x51, 0xa4, - 0x62, 0x7f, 0x69, 0xd9, 0x3c, 0xce, 0x45, 0xfa, 0x97, 0xfd, 0xc5, 0xe3, - 0x36, 0xa0, 0x3a, 0x10, 0xf5, 0xe5, 0x88, 0x5c, 0x97, 0x34, 0x10, 0xab, - 0xbc, 0xe5, 0x45, 0xd3, 0xd6, 0xd6, 0x3f, 0x2e, 0x65, 0x64, 0xed, 0x7b, - 0x37, 0xae, 0x4e, 0xcc, 0xb0, 0x4b, 0x8c, 0xe6, 0x3a, 0x78, 0xb2, 0xea, - 0xfd, 0x0f, 0xbf, 0x7e, 0x23, 0xf8, 0x10, 0x97, 0xa2, 0xd0, 0xa8, 0x9a, - 0x74, 0x3a, 0x51, 0xaa, 0x95, 0x11, 0x04, 0x89, 0x0b, 0xb2, 0x20, 0xcd, - 0xec, 0x3d, 0xe5, 0xdf, 0x65, 0xfb, 0xe1, 0x13, 0xcb, 0x23, 0xee, 0x89, - 0x58, 0x2c, 0xa5, 0xc6, 0xef, 0xfa, 0x5d, 0x79, 0x5f, 0x73, 0x7d, 0x0a, - 0x51, 0xb1, 0x26, 0x9a, 0x7a, 0xb9, 0x16, 0x3e, 0xb3, 0x0f, 0x0b, 0x25, - 0x9f, 0xe9, 0xb6, 0xb5, 0xe7, 0x98, 0x52, 0x2e, 0xcc, 0x29, 0xc6, 0x4f, - 0xd3, 0xc7, 0x73, 0x40, 0xbb, 0xfb, 0x48, 0x57, 0x3f, 0xea, 0xf8, 0x12, - 0x79, 0x0f, 0x15, 0x86, 0x8f, 0x9d, 0xcc, 0xde, 0x73, 0xed, 0xc1, 0x25, - 0x72, 0x20, 0xb1, 0x04, 0xef, 0x56, 0x50, 0x16, 0x81, 0x96, 0x7b, 0x5f, - 0x50, 0x39, 0x8b, 0x1b, 0x5d, 0xcb, 0xce, 0x73, 0xe3, 0x05, 0x31, 0x63, - 0x5b, 0xcd, 0x45, 0x30, 0xa5, 0xee, 0x10, 0x39, 0xd6, 0xc6, 0x6d, 0x3b, - 0xda, 0xe7, 0x23, 0x4d, 0x55, 0x44, 0x05, 0x82, 0x9f, 0x63, 0x7a, 0x10, - 0x1b, 0x7d, 0x1c, 0xcf, 0x30, 0x93, 0xe1, 0x6c, 0xc5, 0xa1, 0x17, 0x45, - 0x8a, 0x4e, 0x76, 0xb0, 0xf8, 0x03, 0x61, 0x72, 0x8a, 0x42, 0x7b, 0x49, - 0xca, 0x9a, 0xf4, 0x83, 0x64, 0xce, 0xa5, 0xd0, 0xf1, 0x58, 0xa8, 0xfb, - 0x53, 0x90, 0xde, 0x2f, 0x14, 0x40, 0x49, 0x04, 0xd4, 0xb4, 0xd9, 0x5f, - 0x8d, 0x1c, 0x3e, 0x67, 0x35, 0x53, 0x03, 0x28, 0x45, 0xb9, 0x98, 0x77, - 0x33, 0x37, 0x81, 0x26, 0xae, 0xcb, 0x50, 0x22, 0x02, 0x8c, 0xe6, 0xda, - 0xf6, 0x0e, 0x9f, 0xd6, 0x40, 0xd9, 0x2d, 0xa3, 0xa0, 0xca, 0xaa, 0x4d, - 0xe0, 0x70, 0x39, 0x94, 0xb2, 0xa1, 0xf3, 0x57, 0xa6, 0x3f, 0x60, 0x56, - 0x7f, 0xc2, 0x80, 0x54, 0x1d, 0xff, 0x9b, 0x35, 0x71, 0x4a, 0xd6, 0xcd, - 0x54, 0xd0, 0xdb, 0x0b, 0xb2, 0xba, 0xda, 0xe1, 0xe6, 0xd1, 0x23, 0x2b, - 0x29, 0xc0, 0xdb, 0xa8, 0x63, 0x59, 0x8e, 0x84, 0xe1, 0x83, 0xa3, 0x73, - 0x9e, 0xd3, 0xb3, 0xb5, 0x70, 0x0e, 0xe7, 0xed, 0x44, 0xff, 0x25, 0x26, - 0xbf, 0x7c, 0xd5, 0xc7, 0xe2, 0xf7, 0xe0, 0x4c, 0xeb, 0x3f, 0xe1, 0x57, - 0xaa, 0xb5, 0x3f, 0x6c, 0xb4, 0x98, 0x42, 0xfd, 0xb5, 0x68, 0x96, 0xb3, - 0x46, 0x33, 0x84, 0xaa, 0x63, 0xe0, 0x0b, 0xb3, 0x5c, 0x5f, 0x2f, 0x1f, - 0xf1, 0x2f, 0xf9, 0x26, 0x7a, 0x66, 0x67, 0x0f, 0xa8, 0x09, 0x05, 0x28, - 0x3a, 0x51, 0x38, 0x0d, 0x92, 0x45, 0xba, 0xb7, 0xe2, 0x16, 0xad, 0xad, - 0x17, 0x16, 0x0f, 0x15, 0x8c, 0x12, 0xca, 0x21, 0x5d, 0xa7, 0x64, 0x1b, - 0xef, 0xf3, 0x55, 0x09, 0x26, 0xa6, 0x95, 0x8d, 0xa2, 0x69, 0x08, 0x42, - 0x0d, 0xa4, 0xc8, 0x74, 0xe9, 0xbc, 0x1f, 0x2f, 0x88, 0x99, 0x52, 0x9d, - 0xd5, 0x6d, 0x09, 0xc3, 0xf1, 0x8f, 0x1d, 0x7d, 0xd5, 0x48, 0x1f, 0x60, - 0x74, 0x25, 0xdf, 0xe6, 0x29, 0xf5, 0x19, 0x4f, 0xe3, 0x89, 0x03, 0x2c, - 0x58, 0xcd, 0x46, 0x63, 0xdd, 0xa8, 0x94, 0x86, 0x91, 0xb7, 0xb0, 0x8e, - 0x76, 0xd2, 0x3c, 0x87, 0x3d, 0xf7, 0xf2, 0xda, 0xe6, 0xcd, 0x70, 0xf3, - 0x5b, 0x43, 0x83, 0x7b, 0x5e, 0xb7, 0xcd, 0xde, 0xdb, 0x8d, 0x95, 0x91, - 0x14, 0x6d, 0xb5, 0xba, 0xb7, 0xae, 0x4a, 0xf1, 0x5b, 0xcd, 0x81, 0xbb, - 0xcd, 0x2c, 0x32, 0x4e, 0xdf, 0xac, 0x5a, 0x77, 0x7e, 0x5d, 0x8a, 0x0b, - 0x24, 0xe1, 0x32, 0x1e, 0x34, 0x6f, 0x48, 0xaa, 0x83, 0x6c, 0x1e, 0x94, - 0x76, 0x7c, 0xf7, 0xa0, 0xf7, 0xc1, 0xfb, 0xac, 0x8a, 0x56, 0xe7, 0xad, - 0x4a, 0xf3, 0xe4, 0xc8, 0xca, 0xfd, 0xab, 0xd6, 0xda, 0x4d, 0xb3, 0xe3, - 0xc9, 0xd2, 0xf9, 0x26, 0x45, 0x62, 0x84, 0xe9, 0xb6, 0xfe, 0xea, 0xbc, - 0xb1, 0xce, 0xf5, 0xb9, 0xe4, 0xe8, 0x9e, 0xc2, 0xed, 0x6d, 0x08, 0xeb, - 0x3b, 0x67, 0xcf, 0x3e, 0x69, 0x2a, 0x66, 0xf9, 0x52, 0xd5, 0x52, 0xf1, - 0x48, 0x6f, 0xa5, 0x9c, 0xe6, 0xc1, 0xd1, 0xbd, 0xff, 0xfd, 0x55, 0x03, - 0x31, 0xaa, 0x57, 0xae, 0x3f, 0x15, 0x29, 0x3d, 0xe2, 0x85, 0x76, 0x4d, - 0x57, 0xdc, 0x0b, 0x3c, 0x5b, 0xb5, 0xcb, 0x92, 0xcb, 0x8f, 0x1d, 0xf4, - 0xad, 0x2f, 0xc7, 0x54, 0xe2, 0xdc, 0xfa, 0xe1, 0xd7, 0xd1, 0xbf, 0x0d, - 0x1f, 0x69, 0x02, 0xdb, 0xb3, 0x74, 0xba, 0x4b, 0x5a, 0x96, 0xf8, 0xa8, - 0x2f, 0xfa, 0x5e, 0x18, 0xb7, 0xf5, 0x09, 0xbf, 0x44, 0xb4, 0xcc, 0xf7, - 0x57, 0xd9, 0x05, 0x6b, 0x7a, 0x57, 0x55, 0x59, 0xbe, 0x51, 0x96, 0x0c, - 0x2a, 0xc7, 0x59, 0xf9, 0x00, 0xad, 0xcd, 0xc6, 0x55, 0xee, 0x0b, 0xe2, - 0xfc, 0xf5, 0x8d, 0x3b, 0x9b, 0x8b, 0x19, 0x42, 0x7b, 0x1a, 0xba, 0x6c, - 0x99, 0x9a, 0xb4, 0x00, 0xee, 0x12, 0xf9, 0x3b, 0x98, 0x9a, 0x51, 0x9c, - 0xdc, 0xa7, 0xc5, 0x89, 0x76, 0xda, 0x16, 0x7c, 0xe7, 0x1e, 0xb3, 0xe5, - 0x9e, 0x20, 0x9f, 0xe7, 0x4c, 0xd9, 0x14, 0xef, 0x07, 0xcf, 0xb2, 0xb7, - 0x82, 0xec, 0xcf, 0x2e, 0xd6, 0x77, 0x91, 0x42, 0x2d, 0x38, 0xc4, 0xba, - 0x6b, 0x75, 0x26, 0x23, 0x85, 0xe6, 0x86, 0x37, 0x22, 0x26, 0xc5, 0x79, - 0xe9, 0x87, 0xf1, 0x43, 0xb6, 0xcf, 0xba, 0x79, 0xcd, 0x6e, 0x40, 0x77, - 0x2f, 0xec, 0x6b, 0x64, 0xba, 0x28, 0x61, 0x7c, 0xed, 0x60, 0x8c, 0x69, - 0x4a, 0xa8, 0xc9, 0x00, 0x59, 0xc5, 0x41, 0x8e, 0x87, 0x01, 0x2a, 0x1f, - 0x0c, 0xc4, 0x76, 0x30, 0x27, 0x56, 0xd3, 0x22, 0x86, 0x54, 0x6c, 0xc0, - 0xd8, 0x1c, 0x5b, 0x78, 0x34, 0xcc, 0xd2, 0x0f, 0x0f, 0x82, 0x80, 0x67, - 0x75, 0x09, 0x49, 0xaa, 0x14, 0xe6, 0x64, 0x89, 0xab, 0xd0, 0xeb, 0x7e, - 0x5a, 0x95, 0x80, 0xd7, 0x5a, 0x89, 0x32, 0x4d, 0xbd, 0x12, 0x3f, 0x94, - 0xbf, 0x13, 0xe7, 0x49, 0x22, 0x17, 0xc3, 0x02, 0xc3, 0xe1, 0x15, 0x46, - 0x68, 0xbc, 0xd6, 0x60, 0x89, 0x89, 0x23, 0x98, 0xd8, 0x03, 0xbf, 0x24, - 0x71, 0x0b, 0x00, 0xcb, 0x0e, 0x6c, 0xb2, 0x93, 0xcf, 0xf1, 0x3d, 0x1c, - 0xb3, 0xef, 0x86, 0xb5, 0xd7, 0x08, 0x4f, 0x43, 0x29, 0xb6, 0xf2, 0x0e, - 0x08, 0x2d, 0xb5, 0x4b, 0x0d, 0x74, 0xe5, 0xb6, 0x0d, 0x6c, 0xee, 0xf8, - 0xb4, 0x81, 0x00, 0x39, 0x53, 0x6a, 0x89, 0x75, 0x42, 0x0f, 0x78, 0x7f, - 0x2e, 0xcb, 0xe4, 0x63, 0x97, 0x30, 0x8b, 0x32, 0xad, 0xaa, 0xd8, 0xf9, - 0xc4, 0xe5, 0x82, 0x9b, 0x2b, 0xde, 0xc1, 0x2d, 0x82, 0x64, 0xed, 0x51, - 0x2a, 0x63, 0x66, 0xef, 0x18, 0x48, 0x94, 0x8d, 0xfc, 0x67, 0xc8, 0x1c, - 0x57, 0xe7, 0xef, 0x12, 0x2e, 0x88, 0xc4, 0xfe, 0x7e, 0xab, 0xd2, 0x74, - 0x5a, 0xa4, 0x73, 0xf4, 0x28, 0x9f, 0xc8, 0x78, 0x29, 0xc8, 0xce, 0xa7, - 0x86, 0xea, 0x22, 0xa3, 0xb9, 0x99, 0x19, 0x33, 0xd9, 0x89, 0xd6, 0xc0, - 0x20, 0x9f, 0x98, 0x72, 0x8e, 0x9b, 0xfe, 0x5b, 0xff, 0xbb, 0x61, 0x11, - 0x11, 0x04, 0x49, 0xe4, 0xb5, 0x3f, 0x5b, 0x53, 0xb7, 0x58, 0x61, 0x97, - 0x90, 0xc9, 0x9b, 0x08, 0xdf, 0xd5, 0x81, 0xad, 0x7a, 0x50, 0x57, 0xbf, - 0xba, 0x03, 0xfa, 0xef, 0x9e, 0x74, 0x52, 0xe7, 0x5f, 0x16, 0xab, 0xa3, - 0x94, 0xeb, 0x8b, 0x0a, 0xe6, 0x85, 0x16, 0xb1, 0x7e, 0x55, 0x10, 0x60, - 0x92, 0x6b, 0x00, 0x07, 0x1d, 0xc4, 0x32, 0x3c, 0x29, 0x7a, 0x78, 0xa7, - 0x58, 0x23, 0x79, 0xfd, 0x6c, 0x57, 0x9e, 0x63, 0xc6, 0x50, 0xe8, 0x7d, - 0x23, 0xe8, 0xc7, 0x8a, 0x41, 0x94, 0x58, 0x0c, 0xf0, 0x33, 0x75, 0x0a, - 0x20, 0x45, 0x74, 0xcd, 0x5d, 0x33, 0x9c, 0x4d, 0x97, 0x6c, 0xbe, 0xee, - 0xdb, 0xb5, 0x8b, 0x61, 0x69, 0xfd, 0xd4, 0xa1, 0x2a, 0x52, 0x7e, 0x08, - 0x36, 0x4b, 0xfa, 0xe9, 0xf4, 0x5b, 0x3d, 0x0c, 0x2f, 0x4e, 0x06, 0xb8, - 0xfe, 0x96, 0x6d, 0xf5, 0x9c, 0x4e, 0x45, 0xa6, 0x68, 0x5b, 0x78, 0xf0, - 0x1d, 0x2e, 0x83, 0x59, 0x35, 0xc0, 0x99, 0x66, 0x98, 0x85, 0xe4, 0xc3, - 0x33, 0xac, 0x61, 0x9d, 0x9f, 0xe1, 0x14, 0x4c, 0x78, 0xf3, 0xff, 0x0a, - 0x97, 0xf7, 0x64, 0xb4, 0x0c, 0x93, 0x0c, 0x71, 0xe9, 0x01, 0x90, 0xae, - 0x18, 0xe3, 0x4a, 0xc3, 0x04, 0x9e, 0xce, 0x9d, 0x10, 0x32, 0x42, 0x54, - 0xdb, 0xbd, 0x40, 0x72, 0x89, 0xc6, 0x32, 0xda, 0x08, 0x82, 0xea, 0x41, - 0xe2, 0x4a, 0x40, 0x50, 0x41, 0xaf, 0x90, 0x81, 0x94, 0x9f, 0xac, 0x9a, - 0xa0, 0x3b, 0xc2, 0x62, 0x38, 0x40, 0xe0, 0xc6, 0x7a, 0x56, 0x6e, 0x69, - 0xb6, 0xe5, 0xdc, 0xd6, 0x24, 0x77, 0x7c, 0xf6, 0x38, 0xfe, 0x3c, 0x98, - 0xcc, 0xe1, 0x95, 0x87, 0x68, 0xc3, 0x76, 0x5a, 0x9e, 0x89, 0xb6, 0x9f, - 0xf3, 0xd6, 0x3c, 0x1f, 0x88, 0xcc, 0x59, 0x4b, 0x9e, 0x09, 0x31, 0xff, - 0xa3, 0x12, 0xa3, 0xa9, 0x22, 0x65, 0xaf, 0xc9, 0xd3, 0x58, 0x79, 0xa3, - 0x0c, 0x7e, 0x82, 0xa2, 0x83, 0xd2, 0xa1, 0x34, 0x5b, 0x54, 0x17, 0x36, - 0x72, 0x5b, 0x73, 0x64, 0x36, 0x3e, 0x4d, 0xb8, 0xfd, 0x0d, 0x13, 0xa0, - 0x8a, 0xd0, 0x36, 0x87, 0x63, 0x82, 0x98, 0x99, 0x3e, 0x49, 0x09, 0xb1, - 0x55, 0x0d, 0x26, 0x6a, 0xda, 0x9c, 0x5a, 0x10, 0x0f, 0xdd, 0xa7, 0xdf, - 0xaa, 0x0b, 0x1c, 0xa1, 0xee, 0x6e, 0xe1, 0xd3, 0xff, 0x82, 0xeb, 0x26, - 0xa3, 0xbc, 0x33, 0x71, 0xb5, 0xb7, 0xfe, 0x30, 0xd6, 0x28, 0x65, 0x01, - 0xc2, 0x6a, 0x36, 0xa2, 0x76, 0x69, 0x53, 0x19, 0x43, 0x1f, 0xdf, 0x4d, - 0x55, 0x1b, 0xf2, 0xa1, 0xdb, 0x3f, 0xbc, 0x73, 0x05, 0x82, 0xb1, 0xab, - 0xca, 0x04, 0x99, 0xb9, 0x93, 0x3f, 0x19, 0x6e, 0x30, 0xef, 0x87, 0xc9, - 0xbf, 0x78, 0x38, 0x83, 0xf9, 0x5c, 0x60, 0xc1, 0x84, 0xc7, 0x2b, 0xcb, - 0xf4, 0x3d, 0x16, 0xf3, 0x5b, 0xc2, 0xf4, 0x07, 0x2f, 0xf6, 0xe4, 0x6a, - 0x3c, 0x4a, 0xc3, 0x23, 0x5f, 0x1d, 0x6d, 0xb1, 0xe9, 0x2b, 0xa7, 0xf7, - 0x91, 0x44, 0xca, 0x0a, 0xce, 0xa1, 0x59, 0xf8, 0x7f, 0x08, 0x17, 0x66, - 0xbc, 0xa7, 0x1b, 0x4c, 0x41, 0x50, 0xee, 0x4f, 0xbc, 0xed, 0x50, 0xbd, - 0xf6, 0xfa, 0xa1, 0xd2, 0x81, 0x23, 0x9e, 0x9e, 0x4a, 0x78, 0xa1, 0xe1, - 0xe9, 0xf1, 0xac, 0xe4, 0xb9, 0x1c, 0x71, 0x75, 0x5c, 0xdd, 0x28, 0x22, - 0x21, 0x86, 0xaa, 0xcf, 0x2f, 0xed, 0x02, 0x78, 0x53, 0xa2, 0xf4, 0x7c, - 0x49, 0x46, 0xa0, 0xe0, 0x04, 0x14, 0x3a, 0xac, 0x48, 0x38, 0xc1, 0x7a, - 0x8f, 0x22, 0x13, 0xb5, 0x90, 0x24, 0x51, 0xe6, 0xe5, 0x44, 0x77, 0xe8, - 0xbe, 0x6f, 0xb4, 0xe2, 0xa0, 0xa4, 0x38, 0xad, 0x3a, 0xb8, 0x21, 0xbc, - 0x0e, 0x69, 0x2f, 0xc7, 0xfe, 0x53, 0x5a, 0x06, 0xb7, 0x88, 0x42, 0xbd, - 0xbe, 0x8d, 0x1f, 0x1d, 0xe4, 0xf3, 0xda, 0xa1, 0xcd, 0x03, 0x3e, 0x33, - 0x6a, 0x6d, 0x31, 0x35, 0xbf, 0x5f, 0xb3, 0x0d, 0x6f, 0xf8, 0x7c, 0x16, - 0xde, 0xa8, 0xcb, 0x69, 0xf3, 0x91, 0x09, 0xb5, 0xe2, 0x9d, 0x7b, 0xdf, - 0x23, 0x10, 0xb4, 0xd3, 0x40, 0x1c, 0xdc, 0x33, 0x90, 0x05, 0x5a, 0x9b, - 0x83, 0xd8, 0x8e, 0x49, 0xd7, 0x1e, 0x91, 0xf8, 0x1c, 0xbd, 0xcf, 0x01, - 0x54, 0xb6, 0x4f, 0x01, 0x86, 0x90, 0xda, 0x68, 0x41, 0x72, 0xea, 0x2e, - 0xe3, 0xb1, 0x44, 0x06, 0x19, 0x9d, 0xc2, 0x7c, 0x4d, 0x86, 0xe9, 0x0d, - 0x71, 0x5f, 0x63, 0xc2, 0xdd, 0x78, 0x7f, 0x4e, 0x6f, 0x16, 0x11, 0x3d, - 0x35, 0xd9, 0xb4, 0xf0, 0xb4, 0xa7, 0x88, 0xc4, 0x7d, 0x80, 0x04, 0x96, - 0x1b, 0xae, 0x78, 0x0a, 0x3d, 0x8f, 0xe4, 0x14, 0x31, 0xa0, 0x2f, 0x6c, - 0xac, 0xd6, 0x06, 0xf4, 0x03, 0x44, 0xfb, 0xaa, 0x3d, 0xa9, 0x7e, 0xf1, - 0xf2, 0x86, 0x3d, 0x58, 0xdc, 0xb4, 0xba, 0x67, 0xf8, 0xc6, 0x71, 0x0d, - 0xf0, 0x1a, 0xfe, 0x5d, 0x9b, 0x9d, 0x48, 0x91, 0x27, 0x44, 0xd2, 0x3c, - 0x2b, 0x1d, 0x91, 0xb5, 0x46, 0x3e, 0x39, 0x0d, 0xb5, 0xe8, 0x36, 0xeb, - 0xe3, 0xf2, 0xb6, 0x8a, 0xe6, 0xb2, 0xbd, 0x6d, 0xa3, 0xe0, 0x3f, 0xf9, - 0xf3, 0xef, 0xe6, 0xc8, 0xd1, 0x88, 0x48, 0xda, 0xf5, 0xd4, 0x3d, 0x16, - 0xee, 0x95, 0x28, 0xee, 0x79, 0x4d, 0xe1, 0xbb, 0xb0, 0x96, 0x57, 0xea, - 0x27, 0xfb, 0x95, 0x31, 0x49, 0x14, 0xba, 0xc3, 0xa5, 0xd2, 0xf9, 0x60, - 0xf4, 0xdd, 0x95, 0x78, 0x38, 0xa4, 0x5f, 0x44, 0x49, 0xc6, 0x7d, 0x24, - 0x63, 0x30, 0x49, 0x83, 0x07, 0x2d, 0xb6, 0xa8, 0xd7, 0x35, 0x36, 0xa1, - 0x10, 0xfd, 0xda, 0xa8, 0x62, 0x99, 0x18, 0xec, 0x73, 0x4a, 0x03, 0x91, - 0x82, 0x8d, 0xf8, 0x1c, 0xa4, 0x9d, 0xd5, 0x57, 0x45, 0x79, 0xd1, 0xaa, - 0xbf, 0x24, 0xba, 0xeb, 0x8b, 0x18, 0x6f, 0x42, 0x7f, 0x34, 0x14, 0xc9, - 0x07, 0x7e, 0xfe, 0x0a, 0xc9, 0x27, 0x28, 0x7e, 0x31, 0x03, 0x9e, 0xb7, - 0x13, 0xbb, 0x3f, 0x95, 0xec, 0x6b, 0x81, 0x60, 0xa6, 0x52, 0x3a, 0xf2, - 0x13, 0xb4, 0x4d, 0xbb, 0xd2, 0x54, 0x60, 0xfb, 0x74, 0x9f, 0x2d, 0xd6, - 0xaa, 0xf3, 0x8b, 0xfa, 0x5f, 0xb2, 0x88, 0x64, 0x77, 0x17, 0x0a, 0xc6, - 0xa4, 0x47, 0x2a, 0xe2, 0xf3, 0x50, 0x72, 0xba, 0x21, 0x2d, 0xbf, 0xe2, - 0xf7, 0x23, 0xd3, 0x27, 0x2d, 0x5f, 0xf6, 0x00, 0x44, 0xfe, 0xe6, 0xc4, - 0xfb, 0x1f, 0xb1, 0x58, 0x7c, 0x2c, 0x80, 0x2e, 0x34, 0x01, 0x6f, 0xce, - 0xd4, 0x3b, 0x70, 0x40, 0x5e, 0x77, 0x56, 0x17, 0xac, 0xb8, 0xd7, 0xe3, - 0x5d, 0x94, 0x06, 0x0c, 0x85, 0xbd, 0x6e, 0xf1, 0xd7, 0x0d, 0xc7, 0x5d, - 0x13, 0x9e, 0xed, 0x57, 0xd3, 0x85, 0xcb, 0x5c, 0x4d, 0x44, 0x1c, 0xe8, - 0x05, 0xcc, 0xd0, 0x74, 0xad, 0x83, 0x6e, 0x30, 0x27, 0x71, 0x4b, 0xe6, - 0x38, 0x09, 0x8a, 0x6b, 0xb6, 0xd2, 0x1a, 0xb8, 0xb4, 0xc0, 0x54, 0xb3, - 0x18, 0x80, 0xf2, 0x77, 0x25, 0xf5, 0x68, 0x09, 0x6e, 0x2e, 0x17, 0x39, - 0x9d, 0xda, 0x22, 0x1a, 0xce, 0xae, 0x40, 0xf3, 0x0a, 0x88, 0xbc, 0xf4, - 0x8b, 0x7d, 0x4a, 0x9f, 0xec, 0x9a, 0x1a, 0xb8, 0xd7, 0x5e, 0x03, 0x56, - 0x4d, 0xf7, 0x03, 0x19, 0x9b, 0x9c, 0xaf, 0x8c, 0x5e, 0xf9, 0x99, 0x21, - 0xa2, 0xb9, 0xa7, 0x46, 0x34, 0x0b, 0x16, 0x47, 0x8d, 0xfa, 0xca, 0x91, - 0x49, 0x2e, 0x5f, 0x58, 0xf5, 0x81, 0xd4, 0xf9, 0x4b, 0x68, 0x45, 0x1b, - 0xdb, 0x67, 0xd5, 0x6a, 0x85, 0xc8, 0xb9, 0x71, 0x53, 0x31, 0x45, 0xd8, - 0x5f, 0x70, 0xc1, 0xce, 0x4a, 0xd0, 0x51, 0x43, 0xd3, 0x95, 0xe7, 0x69, - 0x6b, 0xcc, 0x19, 0x2c, 0xf7, 0xc2, 0x89, 0x7a, 0x50, 0x41, 0x65, 0x15, - 0x09, 0x2a, 0x76, 0x2d, 0x12, 0xb8, 0xd9, 0x7b, 0x33, 0x9f, 0xb1, 0xaf, - 0x81, 0xa5, 0xc8, 0x53, 0xc4, 0x8f, 0xe8, 0x89, 0x80, 0xef, 0x93, 0x66, - 0xb7, 0x15, 0x74, 0x4a, 0xf9, 0x41, 0x3d, 0x95, 0x75, 0x92, 0xa2, 0x16, - 0x76, 0xe0, 0xa3, 0x5d, 0x55, 0x9b, 0x3b, 0x6d, 0x0d, 0x06, 0x62, 0x46, - 0x11, 0xd6, 0xe5, 0xeb, 0x6d, 0x93, 0x62, 0x11, 0x5c, 0xcb, 0x22, 0x86, - 0x4d, 0x68, 0x0b, 0xa2, 0x63, 0x74, 0x67, 0x79, 0x6d, 0x66, 0x2d, 0x51, - 0x8e, 0xd5, 0xaa, 0x45, 0xc2, 0x34, 0x0f, 0xad, 0x4c, 0xef, 0xa5, 0x90, - 0x94, 0x19, 0x4d, 0x48, 0xf9, 0xb5, 0x92, 0xa7, 0xdb, 0x37, 0xc8, 0x6f, - 0x24, 0x85, 0xf3, 0xc4, 0xd9, 0x26, 0x2c, 0x64, 0x7f, 0xa8, 0x86, 0x47, - 0x46, 0x35, 0xc2, 0xdf, 0x54, 0x42, 0x52, 0x1f, 0x43, 0x43, 0xcb, 0x50, - 0x1b, 0xbf, 0xf6, 0xd8, 0x11, 0x7d, 0x31, 0x4c, 0xc3, 0x2d, 0x70, 0xb3, - 0xa0, 0x6b, 0x6d, 0xcc, 0x88, 0xc3, 0xa7, 0x59, 0xe0, 0x2f, 0xaa, 0xdb, - 0x98, 0x9d, 0x9f, 0x7b, 0x28, 0x79, 0x0b, 0xa7, 0x7a, 0x90, 0x9f, 0x11, - 0x3a, 0xca, 0x3a, 0xc5, 0xd1, 0x6f, 0x0b, 0x90, 0xe9, 0x7a, 0x9d, 0x72, - 0x7a, 0xb5, 0x84, 0xf3, 0x46, 0xf2, 0x61, 0x96, 0xda, 0xf3, 0x3a, 0x72, - 0x50, 0x67, 0xc0, 0xe7, 0xe3, 0x4c, 0x82, 0xb6, 0x38, 0x72, 0x02, 0x05, - 0xcd, 0x8e, 0xe6, 0xf1, 0x9b, 0x21, 0x00, 0x4c, 0xfe, 0x78, 0xf6, 0x73, - 0x49, 0x95, 0x8b, 0x41, 0x5e, 0x30, 0xf8, 0x1e, 0xc2, 0x96, 0x3b, 0x4f, - 0xfd, 0x9a, 0x10, 0xc2, 0x1f, 0x54, 0x14, 0x7e, 0x14, 0x4d, 0x69, 0xd9, - 0xc8, 0xa3, 0xfa, 0x4a, 0x7d, 0x02, 0x0e, 0x32, 0x88, 0x02, 0x22, 0x31, - 0x6d, 0x13, 0xab, 0xd1, 0x1a, 0xcf, 0x80, 0xc7, 0x11, 0xbc, 0xa7, 0xd7, - 0x73, 0xc1, 0xc5, 0x15, 0x52, 0x7e, 0x82, 0xe7, 0x4f, 0x84, 0xc8, 0x50, - 0xa8, 0xb3, 0xb4, 0x70, 0x5e, 0x95, 0x71, 0x48, 0x31, 0x26, 0xc9, 0x91, - 0xb4, 0x53, 0xcc, 0x82, 0xd0, 0xf0, 0xf9, 0x84, 0x1f, 0xff, 0x49, 0x08, - 0x40, 0xfe, 0x39, 0x3c, 0x64, 0x72, 0x1c, 0x8b, 0x9f, 0x02, 0xc9, 0x27, - 0x23, 0xda, 0x4b, 0x86, 0x00, 0x4d, 0x84, 0x63, 0x23, 0x58, 0x60, 0x80, - 0x2a, 0x2a, 0xa8, 0xf0, 0x70, 0x86, 0x2c, 0xf6, 0x4a, 0xcc, 0x4f, 0xa5, - 0x9e, 0x98, 0x31, 0x90, 0xa6, 0x70, 0x6a, 0xd1, 0x31, 0xd5, 0x10, 0x06, - 0x63, 0xc6, 0x2e, 0x70, 0x22, 0x79, 0x7f, 0x21, 0x71, 0x5a, 0x01, 0xef, - 0x3f, 0x15, 0x2f, 0xed, 0x8c, 0x29, 0x01, 0x11, 0x52, 0xa2, 0xc2, 0xa3, - 0x6b, 0xdf, 0xcc, 0x6a, 0xae, 0x8b, 0x57, 0x11, 0x22, 0x5c, 0xa8, 0x90, - 0x93, 0xa2, 0x68, 0x85, 0x66, 0xcc, 0x9f, 0xa8, 0x13, 0x65, 0x41, 0x6c, - 0xee, 0x6f, 0xba, 0xc9, 0x0a, 0xa6, 0x0b, 0x5a, 0x5f, 0x72, 0x49, 0x05, - 0x55, 0xcf, 0xb7, 0x81, 0x16, 0xd5, 0xf2, 0xdb, 0x2e, 0x74, 0xd1, 0x40, - 0x7f, 0xf8, 0x96, 0xc5, 0xe4, 0x29, 0x4f, 0xc4, 0x0e, 0x1b, 0x9c, 0x86, - 0xf9, 0xfd, 0x0b, 0x4e, 0x64, 0x8b, 0xdc, 0x9a, 0xef, 0x59, 0xdb, 0x28, - 0x7f, 0x7f, 0xda, 0x16, 0x59, 0x0b, 0x2e, 0x42, 0x65, 0xe4, 0x0f, 0xbb, - 0xbe, 0xe6, 0x09, 0x3d, 0xa3, 0x95, 0xc9, 0x38, 0xa3, 0xb6, 0x4e, 0x07, - 0x9c, 0x7e, 0xe8, 0xe4, 0x77, 0x04, 0xa9, 0xdd, 0x75, 0x3f, 0x46, 0x90, - 0xe0, 0xc8, 0x25, 0x0d, 0x4b, 0x44, 0xc5, 0x7a, 0x03, 0x73, 0xd6, 0x9e, - 0xd9, 0x40, 0x10, 0x99, 0x85, 0x2b, 0x09, 0xa5, 0xa1, 0xff, 0xff, 0x96, - 0x83, 0xb2, 0x22, 0x18, 0xb5, 0x97, 0x9b, 0xd8, 0x87, 0xe4, 0xdb, 0x63, - 0xa2, 0x34, 0x65, 0xaa, 0x8f, 0x19, 0x61, 0x28, 0x0a, 0x1f, 0xda, 0x61, - 0xda, 0x6e, 0x93, 0x42, 0xff, 0xdd, 0x72, 0xad, 0x4c, 0x57, 0x0f, 0xc2, - 0x50, 0x75, 0xb3, 0x32, 0x7a, 0x86, 0x14, 0x7a, 0xbb, 0xac, 0xdb, 0x01, - 0x67, 0x7b, 0x24, 0x97, 0xbd, 0xee, 0xf0, 0x75, 0x2f, 0x5d, 0xff, 0x4f, - 0x66, 0x0c, 0x65, 0x36, 0x12, 0x15, 0x77, 0x13, 0xfe, 0x10, 0x35, 0x6d, - 0x93, 0x2b, 0x55, 0x94, 0xbe, 0xe3, 0x75, 0xc6, 0xba, 0xe0, 0x57, 0x09, - 0xf5, 0x46, 0x4e, 0x75, 0x8d, 0xb5, 0x54, 0x5b, 0x41, 0xa4, 0x19, 0xb0, - 0xbb, 0xda, 0x9f, 0xb6, 0xed, 0xc6, 0x10, 0x62, 0xb6, 0xfb, 0x6e, 0xf4, - 0xef, 0x5d, 0xec, 0x66, 0xcb, 0xee, 0x15, 0x41, 0x22, 0x2a, 0x8e, 0x3c, - 0xca, 0x74, 0xe1, 0x41, 0x64, 0xaf, 0x53, 0x03, 0xbb, 0xa3, 0x80, 0xbe, - 0xc6, 0x1b, 0x72, 0x42, 0x32, 0x9a, 0xc6, 0xe6, 0x6f, 0x72, 0x64, 0x4c, - 0x11, 0xdb, 0x59, 0xa3, 0x57, 0x49, 0x92, 0x63, 0x9c, 0x1f, 0x16, 0x9e, - 0xf7, 0x17, 0x43, 0x66, 0x06, 0x41, 0x8b, 0x0d, 0xbe, 0x29, 0xfe, 0xec, - 0x51, 0x80, 0xc6, 0x0c, 0xbc, 0xf8, 0xa7, 0x0d, 0x99, 0xee, 0x05, 0x54, - 0x02, 0x9f, 0x89, 0x37, 0xa5, 0x1c, 0x91, 0x34, 0xac, 0xc6, 0x0b, 0x2e, - 0x06, 0x0c, 0x96, 0xd8, 0xaa, 0x76, 0x73, 0x8b, 0x62, 0xe7, 0x83, 0x92, - 0xbd, 0x65, 0x5a, 0x46, 0x78, 0x01, 0x11, 0xbd, 0x7a, 0x43, 0xd9, 0xce, - 0x01, 0x3b, 0x7b, 0x79, 0x3b, 0xb4, 0x42, 0x1f, 0xc1, 0x2d, 0x00, 0x2b, - 0xa9, 0x5a, 0xad, 0xf8, 0x74, 0xc8, 0xba, 0xdd, 0x5a, 0x4f, 0x85, 0x8a, - 0x34, 0xd4, 0xad, 0x60, 0xd2, 0xfb, 0x3f, 0x03, 0xf3, 0x52, 0x57, 0x08, - 0x16, 0x1e, 0x4d, 0x92, 0x38, 0xfb, 0x07, 0x40, 0x68, 0xef, 0x8b, 0xba, - 0xd6, 0xbd, 0xc8, 0xbc, 0x1f, 0x2a, 0xab, 0x82, 0x16, 0x01, 0x44, 0x77, - 0x76, 0x54, 0xfa, 0x90, 0xd4, 0x11, 0x4c, 0xb1, 0x9c, 0x5f, 0xc6, 0xce, - 0xf5, 0x3e, 0x31, 0x7a, 0x23, 0x55, 0x69, 0xc1, 0x13, 0x7e, 0x47, 0x69, - 0xa0, 0x68, 0x1f, 0xf6, 0x3b, 0x01, 0xbb, 0x2c, 0xce, 0xb1, 0x8d, 0x6e, - 0x06, 0x9d, 0xe4, 0x8c, 0xe2, 0xe3, 0xc9, 0xd4, 0x33, 0x68, 0x68, 0x7c, - 0xfd, 0x4d, 0xcd, 0x0f, 0x6d, 0xd5, 0xfe, 0x93, 0x5a, 0x1c, 0x48, 0x6a, - 0x84, 0x63, 0x95, 0x3c, 0xaf, 0x89, 0x65, 0xee, 0x74, 0x51, 0xcb, 0xad, - 0x0b, 0xc2, 0xb6, 0xb2, 0x22, 0xb3, 0xcb, 0x0f, 0x79, 0xe8, 0xa9, 0x85, - 0x46, 0x9f, 0x13, 0x6d, 0x5b, 0xc5, 0x50, 0xe9, 0xed, 0xa3, 0x91, 0xaa, - 0x0c, 0x2f, 0xad, 0xac, 0x64, 0x53, 0xb3, 0x8b, 0x0c, 0xf0, 0xa5, 0xf0, - 0x7c, 0x1b, 0x8a, 0x3c, 0xce, 0x7a, 0x40, 0x84, 0x1b, 0x32, 0x6f, 0x10, - 0xde, 0x3e, 0x15, 0x8b, 0xea, 0xb3, 0x67, 0xee, 0x50, 0xef, 0x17, 0xff, - 0x16, 0x71, 0xbc, 0xdc, 0x89, 0xb4, 0x95, 0xb8, 0x4b, 0x87, 0xd4, 0x5f, - 0xa8, 0x99, 0xca, 0xed, 0x1f, 0xd9, 0xdb, 0x87, 0x8a, 0x02, 0xa5, 0x45, - 0xb6, 0x51, 0xe1, 0xce, 0x8a, 0x1c, 0xc2, 0xb4, 0xd3, 0xe0, 0xdb, 0xb5, - 0x37, 0x88, 0xd7, 0x95, 0xd1, 0x5b, 0x59, 0x4d, 0xef, 0x86, 0x39, 0xf8, - 0xb1, 0xed, 0x9d, 0xaf, 0xfa, 0x7e, 0x2e, 0x11, 0x11, 0xde, 0x75, 0x03, - 0xd5, 0x0e, 0x92, 0xad, 0x75, 0xbb, 0xfa, 0x38, 0xc3, 0xef, 0x74, 0x71, - 0xe6, 0x96, 0x33, 0xd7, 0x40, 0xd2, 0x4c, 0x06, 0xee, 0x4a, 0x2b, 0x54, - 0x2d, 0xd4, 0x77, 0xe4, 0xfc, 0x27, 0x80, 0x83, 0xbe, 0x33, 0xbb, 0xd9, - 0x29, 0x7a, 0x45, 0x43, 0xc2, 0x54, 0x79, 0xcd, 0x33, 0x45, 0xe2, 0x1c, - 0xda, 0x91, 0x3e, 0x56, 0xbb, 0x7e, 0x56, 0x3b, 0xa3, 0x2a, 0xc3, 0x5a, - 0x1e, 0x5f, 0x03, 0x27, 0xaa, 0x10, 0x22, 0x62, 0x31, 0x1c, 0x31, 0x66, - 0x3f, 0x52, 0xc1, 0xa7, 0x1f, 0x0e, 0x4d, 0xe8, 0xc0, 0x9a, 0x2f, 0x2b, - 0x55, 0x0b, 0xa6, 0x60, 0x7c, 0xc2, 0x57, 0xa7, 0x3e, 0x94, 0x38, 0x0f, - 0x94, 0x52, 0x06, 0x5d, 0xfc, 0x5b, 0xc4, 0x75, 0x22, 0x00, 0x2e, 0x16, - 0x8c, 0x75, 0x0e, 0x07, 0x0e, 0x99, 0x2e, 0x2b, 0x73, 0xf2, 0x89, 0x7e, - 0xe4, 0xb4, 0x96, 0x5e, 0x84, 0x86, 0x71, 0x32, 0xc5, 0x0a, 0x3a, 0x3f, - 0xc1, 0x51, 0xac, 0x3d, 0xb3, 0x93, 0x7a, 0x53, 0x10, 0x74, 0x99, 0x02, - 0xa1, 0x86, 0xe0, 0xad, 0xd1, 0xf0, 0x1f, 0xb1, 0x67, 0xa1, 0xac, 0xc1, - 0x87, 0x79, 0xb9, 0x4e, 0x2a, 0x74, 0xc7, 0x54, 0xcc, 0x49, 0x28, 0x71, - 0x04, 0xad, 0xec, 0xae, 0xf6, 0xb0, 0x4b, 0x37, 0x3f, 0xa3, 0x5e, 0x52, - 0x74, 0x00, 0xa2, 0x72, 0x21, 0x45, 0x54, 0xb6, 0xb4, 0x9c, 0x96, 0xbd, - 0x31, 0x9e, 0x28, 0xf6, 0x6f, 0xb5, 0x61, 0xa4, 0x00, 0x51, 0x22, 0xbb, - 0xe2, 0x3a, 0x4d, 0xab, 0x3c, 0x7e, 0x40, 0x95, 0x81, 0x97, 0x1d, 0xbe, - 0x60, 0xb0, 0xe5, 0x7b, 0xf0, 0x63, 0xd3, 0x4e, 0x49, 0x72, 0x07, 0xa9, - 0x19, 0xb4, 0x4f, 0x12, 0x44, 0x21, 0xe2, 0x3f, 0x85, 0x27, 0x1b, 0xe2, - 0xc6, 0x8c, 0xc7, 0x1a, 0x2e, 0xc1, 0x6e, 0x05, 0x1d, 0xc4, 0x69, 0x76, - 0xb3, 0x96, 0xe0, 0xa7, 0x4c, 0x70, 0xeb, 0x2b, 0x47, 0x38, 0x54, 0x40, - 0x60, 0x02, 0x55, 0x3a, 0xb6, 0xa1, 0xac, 0x96, 0xae, 0xa8, 0x7f, 0x11, - 0x45, 0xa5, 0x43, 0x61, 0x47, 0x86, 0x80, 0x27, 0x5f, 0xf3, 0x53, 0x9b, - 0x91, 0x25, 0x02, 0x4d, 0xaf, 0x3b, 0x85, 0x11, 0x55, 0xf6, 0x74, 0xf4, - 0xc3, 0xd5, 0xdd, 0xc0, 0x05, 0x14, 0xd8, 0xd1, 0x90, 0xc8, 0x7e, 0x55, - 0xf7, 0xb3, 0x53, 0x2d, 0x87, 0x72, 0x66, 0x29, 0x46, 0x22, 0x92, 0xdc, - 0xd7, 0x88, 0x47, 0xce, 0x9a, 0xc9, 0x8c, 0x12, 0xc3, 0xd6, 0x71, 0xf9, - 0xf9, 0xb7, 0x5d, 0xb9, 0xcd, 0x01, 0x5e, 0x83, 0x6f, 0x67, 0xf4, 0x40, - 0xac, 0xd9, 0xfa, 0x35, 0x72, 0x0c, 0x97, 0x83, 0xa3, 0x3d, 0x10, 0xca, - 0xbf, 0xd2, 0xa6, 0xc9, 0x17, 0xf5, 0x59, 0xef, 0xb0, 0xb0, 0x1d, 0x8d, - 0x9c, 0x00, 0x83, 0x25, 0x43, 0x41, 0x1c, 0x43, 0x1b, 0xa0, 0x30, 0xb6, - 0xee, 0x3f, 0xf2, 0x70, 0x04, 0x28, 0xb0, 0x20, 0xab, 0x45, 0x65, 0x9a, - 0x49, 0x4f, 0x4d, 0x5c, 0x4f, 0x2a, 0x11, 0x64, 0x2c, 0xa9, 0x39, 0x36, - 0xb7, 0xe2, 0x5d, 0x1d, 0xa4, 0x61, 0x88, 0x24, 0xf5, 0x52, 0xde, 0x0f, - 0x1b, 0x35, 0x32, 0xb7, 0xde, 0x18, 0x11, 0x52, 0x23, 0x90, 0x3c, 0x49, - 0xc2, 0xd1, 0x93, 0x73, 0x98, 0x64, 0x00, 0x6a, 0x37, 0x90, 0xe7, 0xb8, - 0x40, 0x7e, 0xc0, 0x2f, 0xbb, 0x55, 0x5e, 0xf1, 0xf6, 0x25, 0x22, 0x5b, - 0x93, 0xb8, 0xe2, 0x29, 0x8a, 0x81, 0xa8, 0x6d, 0xcc, 0xcf, 0xe5, 0xc1, - 0x7e, 0x1a, 0xc3, 0xe7, 0xd7, 0xb8, 0xd3, 0x88, 0xb1, 0xcb, 0x71, 0x87, - 0x5e, 0x28, 0xf5, 0x19, 0x4c, 0xd5, 0xe8, 0xc8, 0xa8, 0x77, 0x57, 0x02, - 0x9d, 0x4b, 0x97, 0x52, 0xba, 0x6a, 0x3a, 0xa1, 0x5e, 0x50, 0x89, 0xdc, - 0x4f, 0xfd, 0xdf, 0x62, 0xae, 0xd7, 0x88, 0xc6, 0x37, 0xda, 0x61, 0x89, - 0x68, 0x19, 0x05, 0xf6, 0xa6, 0xad, 0xfc, 0x1a, 0xcd, 0xbf, 0x0e, 0x49, - 0x28, 0xf7, 0xd3, 0x29, 0xc2, 0xd7, 0xfc, 0x81, 0x85, 0xad, 0xa8, 0x40, - 0x87, 0xd8, 0xed, 0xd1, 0xce, 0x5f, 0xa4, 0xfd, 0x32, 0xb2, 0x8e, 0xa4, - 0xd6, 0xd8, 0x99, 0x4f, 0x78, 0x89, 0xc4, 0x64, 0x92, 0x61, 0x18, 0xd3, - 0x77, 0x76, 0xab, 0xce, 0x93, 0x42, 0x86, 0x9b, 0xce, 0x36, 0x1d, 0x13, - 0x05, 0x0a, 0x27, 0x86, 0xf1, 0xaf, 0xee, 0xa1, 0x73, 0xcb, 0xae, 0x14, - 0x9f, 0x10, 0x1d, 0xc5, 0x4d, 0x37, 0x09, 0xd4, 0x7a, 0x30, 0x34, 0xbe, - 0x84, 0x94, 0xf6, 0x7b, 0x16, 0xac, 0xef, 0x25, 0x33, 0x4a, 0x89, 0x86, - 0xed, 0x65, 0x27, 0xf0, 0xc0, 0x82, 0x3d, 0x90, 0x33, 0x69, 0x9c, 0x73, - 0x7d, 0x69, 0xa0, 0xaf, 0x85, 0xaf, 0xc3, 0x00, 0x19, 0xa0, 0xb0, 0xf1, - 0x3b, 0xea, 0x1a, 0x64, 0xbe, 0xf1, 0x30, 0xb2, 0xd7, 0x26, 0xcb, 0x98, - 0xaa, 0x04, 0x45, 0x6b, 0x16, 0xb6, 0x69, 0x90, 0x50, 0xd0, 0x05, 0xfa, - 0xad, 0xcf, 0x77, 0xf5, 0xb2, 0x96, 0xfa, 0xb8, 0x47, 0x8f, 0x23, 0xc2, - 0x2c, 0x8f, 0x94, 0xfb, 0x40, 0xf8, 0x65, 0x68, 0xc7, 0x80, 0x2e, 0x93, - 0x46, 0xa7, 0xaa, 0xbb, 0xae, 0x6f, 0x52, 0x03, 0x77, 0x6b, 0xdf, 0x82, - 0x6c, 0x9a, 0xb2, 0xf7, 0xd4, 0x90, 0xbf, 0x3c, 0x35, 0x4b, 0xbd, 0xe5, - 0xd5, 0x2f, 0x63, 0x82, 0x2b, 0xf0, 0xc5, 0xb8, 0x90, 0xb8, 0x81, 0xa1, - 0x71, 0x96, 0x66, 0x29, 0x3d, 0xeb, 0x8c, 0xc8, 0x24, 0x69, 0xc8, 0xb2, - 0x91, 0xdf, 0xc4, 0x52, 0xfa, 0x30, 0xcf, 0xa8, 0x39, 0x1d, 0x7b, 0x09, - 0xd5, 0xe1, 0xb3, 0x6e, 0x21, 0xa8, 0x08, 0x8e, 0x70, 0xd9, 0xb3, 0xc7, - 0x6d, 0x6a, 0x53, 0x9b, 0xf8, 0xbc, 0x9e, 0x8f, 0x6c, 0xa3, 0x84, 0x24, - 0xae, 0x70, 0x5b, 0x12, 0xb5, 0x8c, 0xb4, 0xf1, 0x75, 0xae, 0x5a, 0x24, - 0xe0, 0x08, 0x5d, 0xe8, 0x7e, 0xa9, 0xf4, 0xd8, 0x25, 0x72, 0xf2, 0xca, - 0x6f, 0x87, 0x38, 0xc7, 0x1b, 0xca, 0x3c, 0x82, 0xc7, 0x1b, 0xa1, 0xcb, - 0xf1, 0x94, 0xe4, 0x6c, 0xdd, 0x1c, 0x51, 0x6e, 0x4c, 0x06, 0x8e, 0x49, - 0x50, 0x29, 0x84, 0x17, 0xe7, 0xdc, 0x69, 0xdf, 0xb6, 0x7c, 0xe4, 0xc0, - 0xa2, 0xef, 0x1d, 0x6c, 0x84, 0x4c, 0x06, 0xc4, 0x0e, 0xda, 0xe7, 0x46, - 0xd3, 0xd4, 0x94, 0x22, 0x11, 0xc9, 0x07, 0xed, 0xf0, 0xfd, 0x06, 0x7e, - 0x3b, 0x52, 0x3a, 0x2b, 0x97, 0x6a, 0xb9, 0x5a, 0xff, 0xb2, 0xa6, 0xe3, - 0x8b, 0x48, 0xde, 0x07, 0xe0, 0xa0, 0x8d, 0xd5, 0x27, 0x61, 0x98, 0x32, - 0x23, 0x85, 0x30, 0xbc, 0xb6, 0x40, 0x94, 0xe2, 0x7f, 0xd8, 0xbf, 0x43, - 0x74, 0xa9, 0x3c, 0x0d, 0xc9, 0x57, 0x4f, 0x9a, 0x44, 0xa2, 0xd6, 0x97, - 0x82, 0x09, 0xff, 0x0d, 0x83, 0xae, 0x1c, 0xcc, 0xab, 0x93, 0xe6, 0xcf, - 0xcb, 0x77, 0x35, 0xe8, 0xc2, 0x93, 0xdc, 0xa5, 0x29, 0x34, 0x26, 0x54, - 0x40, 0x5e, 0x0c, 0x46, 0xfb, 0x16, 0x9b, 0x1e, 0xb8, 0x3e, 0xb7, 0xce, - 0xe5, 0x16, 0x2b, 0x58, 0x9c, 0x60, 0x06, 0xfd, 0x0c, 0x40, 0x51, 0x63, - 0xf5, 0x19, 0x2f, 0xfa, 0x1e, 0x3a, 0xc6, 0x5b, 0x52, 0x71, 0xe7, 0x52, - 0x55, 0x42, 0x64, 0x6b, 0x49, 0x75, 0x2b, 0x63, 0xca, 0x4a, 0xbc, 0x51, - 0xd8, 0x59, 0x17, 0x14, 0xed, 0xe1, 0xed, 0x7b, 0xbf, 0x59, 0x89, 0x6a, - 0x06, 0x3b, 0x0b, 0xe4, 0xec, 0xcd, 0x4f, 0x48, 0x52, 0x41, 0x6f, 0xf6, - 0x75, 0x7e, 0xd9, 0xb2, 0x4e, 0x52, 0xde, 0xa2, 0xb2, 0xb4, 0xdf, 0x1a, - 0x70, 0x39, 0x2a, 0x0b, 0xc6, 0x26, 0xa1, 0xc5, 0x62, 0x4b, 0xff, 0x8f, - 0x11, 0xf1, 0x67, 0x03, 0x03, 0x51, 0x8c, 0xd9, 0x8a, 0x22, 0x8b, 0x51, - 0x52, 0x86, 0x2c, 0x3a, 0xb5, 0x57, 0x25, 0xc0, 0xea, 0x7c, 0x65, 0x7a, - 0xc2, 0xea, 0x37, 0x37, 0x38, 0xfe, 0x91, 0x50, 0xda, 0x1e, 0xc9, 0x3b, - 0x91, 0x2b, 0x29, 0x79, 0x67, 0x07, 0x5f, 0xf1, 0x74, 0x20, 0x21, 0x63, - 0xe0, 0xdf, 0xa7, 0x71, 0xdb, 0xe9, 0x7e, 0x15, 0x65, 0x04, 0xf9, 0xa2, - 0x64, 0xcd, 0x79, 0x79, 0x75, 0x33, 0x1a, 0x79, 0x3a, 0xe3, 0xf3, 0xa8, - 0x57, 0x65, 0xec, 0xe0, 0xea, 0x08, 0x5a, 0x53, 0x25, 0x7a, 0x93, 0x7b, - 0x51, 0x0a, 0x52, 0xac, 0x1b, 0x40, 0x38, 0xfa, 0x77, 0xb6, 0xa2, 0x3f, - 0xb1, 0x79, 0x69, 0xd8, 0xd2, 0x9e, 0x3d, 0x21, 0x54, 0x0c, 0xdf, 0x25, - 0xb3, 0xa2, 0xc7, 0x05, 0x78, 0x9d, 0x7f, 0xb1, 0x5e, 0xb5, 0x9e, 0x28, - 0x38, 0x3b, 0x7f, 0x13, 0xa7, 0xd9, 0x58, 0xf0, 0x1c, 0x04, 0xa4, 0x36, - 0x59, 0x78, 0xa9, 0x49, 0x46, 0xbd, 0xb8, 0x5c, 0x69, 0xef, 0x20, 0x54, - 0xad, 0x1c, 0xdd, 0x5c, 0x64, 0xf3, 0xbc, 0x07, 0xd1, 0xba, 0x9d, 0x2e, - 0xe1, 0xae, 0x31, 0x71, 0xb6, 0xc8, 0x16, 0xbd, 0x80, 0x77, 0x4c, 0x3c, - 0xb7, 0xd8, 0x4d, 0x5d, 0x4a, 0x58, 0x62, 0x7a, 0xb1, 0x80, 0x5b, 0x49, - 0x82, 0x42, 0x37, 0xe0, 0xc1, 0xbe, 0x9e, 0x71, 0x98, 0x3a, 0x9e, 0x88, - 0x61, 0x5b, 0x37, 0xb4, 0x98, 0x4d, 0x71, 0x15, 0x64, 0x36, 0xb3, 0xd4, - 0x2d, 0x5b, 0x80, 0x17, 0xae, 0x33, 0xa7, 0x65, 0xe1, 0xc4, 0x82, 0x3e, - 0x5e, 0xba, 0x56, 0x8f, 0x06, 0x33, 0x54, 0xee, 0xa3, 0x69, 0xf9, 0x2e, - 0xe0, 0xfe, 0x91, 0x7f, 0xfc, 0xfb, 0x57, 0xf7, 0x3a, 0x2c, 0xf4, 0x02, - 0x1b, 0xfc, 0x04, 0x50, 0x13, 0x19, 0x1c, 0x3c, 0x30, 0x66, 0xa5, 0x7f, - 0xb8, 0x8d, 0x53, 0xb6, 0x20, 0x9e, 0x24, 0x7d, 0xa4, 0x72, 0xa4, 0x17, - 0x23, 0x1e, 0xe7, 0x4e, 0x4b, 0xe8, 0x51, 0x82, 0x8d, 0x2a, 0xcd, 0x49, - 0x11, 0xe5, 0x64, 0xeb, 0x05, 0xc1, 0x78, 0xe4, 0xac, 0x9a, 0x41, 0x41, - 0xcb, 0x63, 0x5e, 0x23, 0xf1, 0xfb, 0x9a, 0xdc, 0x29, 0xcc, 0xae, 0xf5, - 0x21, 0x71, 0x77, 0xea, 0xa0, 0x53, 0x4b, 0xd9, 0x2b, 0x51, 0xc0, 0x9d, - 0x88, 0xaf, 0xed, 0x0b, 0x81, 0x17, 0x79, 0xbb, 0x4a, 0xb6, 0xa4, 0x97, - 0x39, 0x22, 0xcf, 0x72, 0xa6, 0xbd, 0x02, 0x15, 0xe0, 0xae, 0x2f, 0x5c, - 0xfc, 0x25, 0x60, 0xc3, 0xcd, 0x05, 0x6d, 0x4d, 0x4e, 0x06, 0x2d, 0xae, - 0x94, 0xfc, 0x2b, 0x9a, 0xec, 0x30, 0x4e, 0x56, 0x5c, 0xc6, 0xf7, 0x02, - 0x6d, 0x85, 0x26, 0x9a, 0xb6, 0x86, 0xcf, 0x64, 0xf6, 0xec, 0x6c, 0x4f, - 0x7d, 0x94, 0x0f, 0xd4, 0x1b, 0x38, 0x77, 0x2f, 0x45, 0x8c, 0x67, 0xce, - 0xc6, 0xd3, 0xa0, 0x59, 0x18, 0x4e, 0x27, 0x81, 0x12, 0x73, 0x4c, 0x23, - 0x12, 0x84, 0x4e, 0xe6, 0x4a, 0x45, 0x08, 0x4b, 0xba, 0x8b, 0x99, 0x8a, - 0xf8, 0xca, 0x0b, 0x9f, 0x78, 0xec, 0x3c, 0x51, 0xd7, 0x27, 0x83, 0x4d, - 0x05, 0x7c, 0x99, 0xa3, 0xe6, 0x38, 0x05, 0x20, 0x92, 0x7a, 0x67, 0x31, - 0xb5, 0xa7, 0x28, 0x83, 0xb2, 0x24, 0xa3, 0xa8, 0xab, 0xfb, 0xc2, 0xdf, - 0x2e, 0x03, 0xee, 0xd0, 0x50, 0x8e, 0x74, 0x4a, 0xcd, 0x0d, 0x29, 0x57, - 0x60, 0x8c, 0x07, 0xe1, 0x22, 0x9b, 0x11, 0xa1, 0xed, 0x92, 0x9c, 0x8d, - 0x2e, 0x5a, 0xd8, 0x7c, 0xbf, 0xfa, 0xb9, 0x96, 0x06, 0xa7, 0x05, 0xc5, - 0x01, 0x74, 0x2d, 0x1a, 0x22, 0x38, 0x11, 0x4f, 0x4d, 0xc2, 0xba, 0xf6, - 0x4b, 0x21, 0x2a, 0xca, 0xa4, 0x7f, 0xa9, 0xfe, 0xe3, 0xc8, 0x63, 0x28, - 0xa3, 0x6f, 0xc8, 0xb5, 0xeb, 0xe6, 0xcf, 0x8e, 0xd6, 0x21, 0x60, 0x4e, - 0x36, 0x64, 0xcc, 0x44, 0x03, 0xc9, 0x77, 0xb5, 0x19, 0x9a, 0x16, 0x98, - 0x98, 0x1d, 0x38, 0x8b, 0x54, 0xc7, 0x3e, 0xd5, 0xe7, 0x97, 0x63, 0x6b, - 0x29, 0xf3, 0x54, 0xd3, 0xe3, 0xfd, 0x30, 0x4f, 0xb0, 0xeb, 0x00, 0xfa, - 0x8e, 0xe3, 0x58, 0xa6, 0x14, 0xa0, 0x1b, 0x0c, 0x36, 0x03, 0x84, 0x6f, - 0x68, 0xe5, 0x3a, 0xb3, 0xa9, 0x97, 0xc6, 0xe9, 0xf0, 0x1d, 0x56, 0x20, - 0x49, 0x1c, 0x62, 0x01, 0x54, 0x10, 0x63, 0x31, 0xfc, 0x9d, 0xf6, 0xba, - 0x27, 0xfe, 0x57, 0xd2, 0x24, 0x21, 0x26, 0xbb, 0x0c, 0x66, 0x60, 0x7c, - 0x31, 0x88, 0x79, 0x67, 0xdb, 0x54, 0x31, 0x81, 0xc2, 0x69, 0xd1, 0xec, - 0x0c, 0xb9, 0x2e, 0x86, 0x20, 0x19, 0x22, 0x67, 0xfe, 0xf4, 0x83, 0x27, - 0x9c, 0x79, 0xa6, 0x0d, 0x58, 0xe5, 0xbe, 0x79, 0xb3, 0x11, 0x93, 0xc6, - 0x7e, 0x74, 0xb6, 0xcb, 0x71, 0x02, 0x0c, 0x52, 0x73, 0xff, 0x59, 0xed, - 0xc9, 0x84, 0xf4, 0x38, 0x6a, 0xf0, 0x77, 0x52, 0x57, 0x3d, 0x54, 0xb2, - 0xf0, 0xd3, 0x75, 0xf4, 0x4e, 0x58, 0x18, 0x15, 0x68, 0xee, 0x34, 0xe7, - 0xd9, 0xa5, 0xab, 0xbe, 0x95, 0x36, 0x46, 0xb5, 0x2d, 0xe3, 0x47, 0x99, - 0xfb, 0x54, 0x86, 0x5a, 0xca, 0x52, 0x12, 0x52, 0x18, 0x60, 0x08, 0x21, - 0x80, 0xde, 0xdd, 0x6b, 0xaa, 0xea, 0x2e, 0x6d, 0x70, 0x80, 0xd5, 0x01, - 0x44, 0xc9, 0x49, 0xa1, 0xeb, 0x04, 0x7c, 0xba, 0xa0, 0x4a, 0xfb, 0x86, - 0x48, 0x54, 0x88, 0x45, 0x73, 0x60, 0x3a, 0x7c, 0x6c, 0xd7, 0xc3, 0xaf, - 0x92, 0x2d, 0x97, 0x41, 0xc7, 0x8d, 0xab, 0x7a, 0xa2, 0xa9, 0x3f, 0xe4, - 0xe9, 0x16, 0xb9, 0x23, 0x44, 0x32, 0xe6, 0x4f, 0xd6, 0x39, 0x79, 0x78, - 0xeb, 0x26, 0xc6, 0x84, 0x28, 0x3e, 0xcc, 0x81, 0x8a, 0xaa, 0xec, 0xc2, - 0x05, 0x5c, 0x9d, 0x22, 0xd9, 0x6f, 0x9a, 0xa2, 0x32, 0xad, 0x20, 0x77, - 0x75, 0xf8, 0x8a, 0x85, 0x22, 0x4a, 0xe9, 0xa0, 0x5f, 0x87, 0x81, 0x95, - 0x2f, 0x61, 0xff, 0x8a, 0x86, 0x0d, 0x12, 0x89, 0x62, 0xab, 0x36, 0xf9, - 0x8c, 0x05, 0x6f, 0x6e, 0x23, 0x2c, 0xb3, 0x7c, 0x7c, 0xe1, 0x30, 0x9d, - 0x07, 0x21, 0x41, 0xd6, 0xef, 0x35, 0xc2, 0x08, 0x2e, 0xf7, 0x2f, 0x9b, - 0xb0, 0xad, 0x36, 0x2f, 0xd4, 0x8d, 0x65, 0xe1, 0xba, 0x26, 0x28, 0x80, - 0xfe, 0x52, 0x27, 0x67, 0x15, 0x43, 0x27, 0x3e, 0x8f, 0x54, 0xf3, 0x79, - 0x7b, 0x39, 0xec, 0x34, 0x97, 0x6b, 0xb3, 0xbf, 0xb6, 0x03, 0xba, 0xfa, - 0x0a, 0x9d, 0xbe, 0x6d, 0x70, 0x79, 0x33, 0x0e, 0x91, 0x46, 0x3f, 0xa3, - 0xa1, 0x24, 0x97, 0x32, 0xbe, 0xf3, 0x4d, 0xba, 0x8e, 0xa4, 0x2d, 0x0b, - 0xeb, 0x67, 0xa6, 0x11, 0x5c, 0xfa, 0xfe, 0x0e, 0xaf, 0x17, 0xc2, 0x74, - 0x0e, 0x45, 0x39, 0xdb, 0xdb, 0xf7, 0xae, 0xcf, 0xc0, 0x75, 0xe7, 0xcc, - 0x12, 0x2e, 0x1a, 0xb2, 0x0d, 0xe5, 0x5d, 0xe8, 0x2d, 0x52, 0x67, 0x44, - 0xab, 0x2e, 0x13, 0x6b, 0xb7, 0x0c, 0xa7, 0xbe, 0x65, 0x08, 0xc5, 0x74, - 0xba, 0xf1, 0x45, 0xac, 0x2d, 0xe6, 0xc2, 0x33, 0x5e, 0xf0, 0xa0, 0x49, - 0xf6, 0xd0, 0xdc, 0x02, 0x0b, 0x0a, 0x73, 0x03, 0x16, 0x30, 0xfc, 0xb4, - 0xad, 0xe5, 0xac, 0x9e, 0x18, 0xae, 0x79, 0xee, 0xb4, 0xf1, 0x30, 0xcd, - 0x76, 0xba, 0x36, 0x8e, 0xfe, 0xce, 0x0d, 0x83, 0xb7, 0xb7, 0x87, 0x36, - 0xb0, 0x17, 0x64, 0xf2, 0xa1, 0x52, 0xdc, 0x13, 0xd0, 0xd6, 0xd9, 0xd2, - 0xf8, 0xa1, 0x81, 0xf0, 0x96, 0x8f, 0x69, 0xe5, 0x8e, 0x1f, 0x66, 0xcc, - 0xac, 0xe6, 0x65, 0x28, 0x55, 0x32, 0x03, 0xfa, 0xa1, 0x69, 0xeb, 0x6f, - 0xbf, 0x2e, 0xff, 0xfe, 0x5b, 0xaf, 0x8e, 0x44, 0x6d, 0x10, 0x17, 0xfd, - 0x14, 0x67, 0xd9, 0x5d, 0xe3, 0xc7, 0x84, 0xd6, 0xe3, 0x1e, 0x11, 0x4f, - 0xa9, 0x10, 0x48, 0x2c, 0x7b, 0x04, 0x6a, 0x78, 0x36, 0x2d, 0xfb, 0xe0, - 0x1f, 0x39, 0x94, 0x67, 0xf2, 0xb5, 0xf0, 0xcf, 0xef, 0x2d, 0x2e, 0xe8, - 0x50, 0x1f, 0xab, 0x72, 0xb4, 0xf0, 0x62, 0xd5, 0xca, 0xf4, 0x69, 0xa0, - 0x79, 0x62, 0x9f, 0xff, 0x97, 0xa2, 0xc7, 0xd0, 0x6b, 0xd1, 0x78, 0x51, - 0x75, 0x95, 0x23, 0x33, 0xf9, 0x41, 0xc4, 0x46, 0xea, 0x91, 0x01, 0x0c, - 0x66, 0xa3, 0x78, 0x17, 0x6d, 0xc1, 0x32, 0x38, 0x4e, 0x16, 0x49, 0x5d, - 0x34, 0x86, 0x02, 0x85, 0xc7, 0x88, 0xca, 0x26, 0x97, 0xbd, 0xe5, 0xd8, - 0xd9, 0xb4, 0xc6, 0xbd, 0xfa, 0x59, 0xaf, 0x09, 0xae, 0x2e, 0x0d, 0x1d, - 0xc0, 0x10, 0x5a, 0xe7, 0x6b, 0x87, 0xab, 0xcc, 0x7c, 0xc1, 0x57, 0x83, - 0x61, 0xe9, 0x25, 0x07, 0xc9, 0x54, 0x6c, 0x95, 0x76, 0xca, 0x84, 0xbc, - 0x21, 0x26, 0x38, 0x1f, 0x14, 0x6c, 0x29, 0xbc, 0xd1, 0xf9, 0xc0, 0x4d, - 0xb2, 0xd0, 0x5b, 0x28, 0x75, 0x09, 0x9b, 0x08, 0x1b, 0x73, 0xe3, 0xa7, - 0x4d, 0xd8, 0x4d, 0x6b, 0x57, 0xec, 0x0c, 0xd0, 0x9a, 0xd0, 0xd1, 0xca, - 0x0c, 0xcf, 0x49, 0xc3, 0x19, 0x49, 0x0a, 0x51, 0x01, 0x98, 0x6e, 0x82, - 0x1f, 0x1e, 0x17, 0x06, 0xec, 0x8f, 0xc3, 0xf8, 0xc0, 0x0d, 0xbd, 0x5c, - 0xcc, 0x17, 0x74, 0x87, 0x2b, 0x2a, 0x4a, 0xce, 0x62, 0xc4, 0x0c, 0xa2, - 0x8e, 0x84, 0x44, 0xdd, 0x84, 0x31, 0x36, 0xfe, 0x1d, 0x31, 0xc8, 0x91, - 0xe2, 0x4c, 0x1f, 0xca, 0xa4, 0xca, 0x01, 0x6a, 0x41, 0x14, 0x91, 0x5d, - 0xd5, 0x2c, 0xb2, 0x31, 0xd1, 0x3d, 0xff, 0xde, 0xce, 0x96, 0x86, 0x29, - 0xad, 0xea, 0x4e, 0x95, 0x4e, 0xed, 0x75, 0x7f, 0xa9, 0xb1, 0xbe, 0xc2, - 0x13, 0xb7, 0x31, 0xc9, 0x84, 0x95, 0xb6, 0x1f, 0x92, 0x70, 0x69, 0x43, - 0x4a, 0x1a, 0xdd, 0x2e, 0x11, 0x38, 0xa8, 0xb1, 0x09, 0x76, 0x65, 0xe9, - 0x0c, 0xe2, 0xe5, 0xb3, 0x43, 0x2d, 0x7c, 0xbe, 0xb9, 0x04, 0xb6, 0x84, - 0x5d, 0x6b, 0x77, 0x6f, 0x5a, 0x21, 0x2c, 0x93, 0x2f, 0xb8, 0x35, 0x1a, - 0xf6, 0x46, 0xb1, 0x95, 0x73, 0x17, 0x59, 0xc8, 0x02, 0xe3, 0x31, 0xbd, - 0x43, 0x35, 0x99, 0x89, 0x20, 0xf2, 0xc4, 0x80, 0x0f, 0x73, 0x23, 0x1b, - 0x4f, 0xeb, 0xc4, 0x8a, 0x8b, 0xd3, 0x25, 0x6b, 0x87, 0xcc, 0x43, 0x6b, - 0x92, 0x65, 0xfb, 0xb5, 0x1f, 0x5e, 0xf5, 0x7b, 0x54, 0x7d, 0xc5, 0x77, - 0xef, 0x7c, 0xb1, 0xfe, 0x50, 0x6e, 0xa4, 0x0d, 0xc6, 0xc7, 0x2c, 0x4d, - 0xd2, 0xba, 0x55, 0x60, 0xeb, 0x3f, 0xe3, 0xbf, 0x6e, 0x13, 0xea, 0x84, - 0xd5, 0x41, 0x43, 0x29, 0x6c, 0xf2, 0x2c, 0xbb, 0xa4, 0x89, 0x4a, 0xf3, - 0xc0, 0x2b, 0x82, 0x50, 0x4b, 0x51, 0x5b, 0x95, 0x77, 0x60, 0xf4, 0xd6, - 0x7a, 0x15, 0x37, 0x38, 0xe7, 0x8b, 0x93, 0xce, 0xd0, 0x1b, 0x60, 0x3b, - 0x86, 0xfa, 0x91, 0xf2, 0x87, 0xfa, 0x08, 0xb0, 0x38, 0x99, 0x53, 0xf0, - 0x76, 0x42, 0x87, 0x9f, 0x66, 0xd6, 0xa4, 0xfd, 0x9e, 0x86, 0xa8, 0xf7, - 0xf2, 0xa1, 0xaa, 0xa2, 0x48, 0x5f, 0x79, 0x21, 0x21, 0xb7, 0xa1, 0x00, - 0x48, 0x2e, 0x33, 0x7e, 0x82, 0x05, 0x1c, 0x86, 0x22, 0x68, 0xa6, 0x05, - 0xeb, 0xba, 0xad, 0xf6, 0x39, 0xbd, 0x52, 0x6e, 0x6c, 0x5f, 0x0e, 0x7f, - 0xeb, 0x62, 0xfb, 0x1d, 0x6c, 0xfd, 0xa1, 0xd9, 0xf5, 0x55, 0xfc, 0xe9, - 0x06, 0xcd, 0xda, 0x85, 0xc2, 0x5c, 0xb2, 0x4e, 0x3a, 0xf4, 0xdf, 0xc6, - 0x7f, 0x54, 0xfb, 0xdd, 0x21, 0x26, 0x44, 0x9f, 0x3b, 0x88, 0x8c, 0xff, - 0x25, 0x1c, 0xb3, 0x16, 0x55, 0xcd, 0x51, 0x77, 0x9c, 0x08, 0x76, 0xe3, - 0xa9, 0x2f, 0xa0, 0x99, 0xc4, 0x31, 0x53, 0xc4, 0x77, 0xab, 0x7f, 0x79, - 0x82, 0xb0, 0x5a, 0x93, 0x88, 0xde, 0xbd, 0x3e, 0x04, 0xa1, 0xe6, 0x60, - 0xc5, 0xe7, 0xae, 0x89, 0x42, 0x71, 0x6d, 0x30, 0x91, 0x89, 0xe0, 0x26, - 0x57, 0x0a, 0x2d, 0x50, 0x83, 0xe7, 0x9d, 0x77, 0xc5, 0xe3, 0x4c, 0x4b, - 0x7a, 0x5b, 0x9e, 0xab, 0x26, 0x12, 0x24, 0xa6, 0xd9, 0x91, 0xee, 0x31, - 0x6b, 0x3c, 0x06, 0x28, 0x25, 0x4f, 0xe3, 0x0b, 0xbd, 0xe3, 0x13, 0xcb, - 0x97, 0x0c, 0x20, 0xba, 0x8a, 0xbd, 0x02, 0xff, 0xe0, 0xc6, 0x5c, 0xa6, - 0x3c, 0x4f, 0xd6, 0xdd, 0x45, 0x82, 0x35, 0x35, 0x46, 0xca, 0xf9, 0x67, - 0xb7, 0x47, 0x43, 0x9a, 0x5f, 0x32, 0x3a, 0xa9, 0x83, 0x86, 0xa0, 0xc8, - 0x35, 0x06, 0xc2, 0x36, 0x9d, 0xed, 0x39, 0x56, 0xa5, 0x10, 0xcb, 0x39, - 0x0d, 0xa7, 0x65, 0x0b, 0x77, 0x34, 0x98, 0xee, 0xe5, 0xee, 0xc1, 0x17, - 0x35, 0x46, 0xcd, 0x8a, 0xf6, 0xed, 0x42, 0x4a, 0x9e, 0x8a, 0xfe, 0x41, - 0x00, 0x4e, 0x77, 0x8c, 0x53, 0xd6, 0xb1, 0x9b, 0x08, 0xde, 0x57, 0xf5, - 0xa0, 0x92, 0x09, 0xba, 0x1b, 0x45, 0xb3, 0x11, 0x4a, 0xc4, 0xc8, 0x68, - 0xb3, 0x75, 0x4c, 0xd6, 0x3f, 0x40, 0xbd, 0xc4, 0x05, 0xd5, 0x00, 0xea, - 0xb6, 0xc1, 0x38, 0x77, 0x51, 0xea, 0xab, 0x4b, 0xf1, 0x2b, 0x27, 0x68, - 0xfb, 0x95, 0xe4, 0xf2, 0xee, 0xe0, 0x07, 0xa2, 0x10, 0xa6, 0xfa, 0xfa, - 0xd3, 0xc7, 0xf3, 0x7f, 0x4b, 0xc1, 0xed, 0x51, 0xac, 0x2a, 0xaa, 0x2b, - 0x4e, 0x20, 0x76, 0x02, 0x52, 0x1f, 0x70, 0x58, 0x06, 0x97, 0x10, 0x59, - 0x96, 0x36, 0x40, 0xa4, 0x1d, 0x90, 0xf6, 0xfa, 0x92, 0x1b, 0xf5, 0x85, - 0x18, 0xdf, 0x2b, 0xfe, 0xa6, 0x90, 0xc3, 0x44, 0xce, 0xd9, 0x53, 0xb3, - 0x4e, 0x56, 0x92, 0x7d, 0x3d, 0x05, 0x3e, 0x16, 0x42, 0x81, 0x0e, 0x3d, - 0xcc, 0xb7, 0x7e, 0x34, 0x4a, 0xe6, 0x6d, 0x79, 0x4d, 0x3d, 0x9b, 0xbd, - 0x8b, 0xb3, 0xdc, 0xe7, 0xb5, 0xa7, 0x67, 0xe8, 0xf8, 0x7e, 0x27, 0x27, - 0x9c, 0xa3, 0xfe, 0x0d, 0x76, 0x02, 0x54, 0x98, 0x4f, 0x7a, 0x98, 0x96, - 0x21, 0xbe, 0xc7, 0x76, 0xce, 0xcf, 0x64, 0x99, 0x0b, 0x44, 0x8b, 0x53, - 0x85, 0x59, 0x91, 0x46, 0x80, 0x2a, 0x49, 0x6c, 0xa6, 0x7f, 0x4d, 0x12, - 0xdb, 0xe8, 0x19, 0x0e, 0x92, 0xa8, 0xab, 0x60, 0x59, 0x4a, 0x16, 0x38, - 0xfb, 0xd7, 0xd5, 0xb6, 0x60, 0xa4, 0xc6, 0x6f, 0x1a, 0xc9, 0x7f, 0x3b, - 0x6b, 0x4d, 0xff, 0x7e, 0xb1, 0x6a, 0x6a, 0x52, 0x42, 0xe2, 0x0a, 0x60, - 0xe8, 0x9c, 0xf1, 0x96, 0x5c, 0x1b, 0x5f, 0x07, 0xb9, 0x6f, 0x22, 0x4c, - 0x68, 0x0e, 0x4f, 0x43, 0xe2, 0xcf, 0x4c, 0x11, 0x88, 0xed, 0x2c, 0x4a, - 0xc1, 0x40, 0x17, 0xa4, 0xf2, 0xc1, 0xaa, 0x0e, 0x24, 0x13, 0x3b, 0xbc, - 0x3a, 0x6a, 0xe0, 0xe0, 0x5f, 0x03, 0x2e, 0x9c, 0x1e, 0x0d, 0xc0, 0x8c, - 0xa7, 0x30, 0x52, 0x95, 0xb2, 0x22, 0xb5, 0x7b, 0xb4, 0x6b, 0x01, 0x9b, - 0x3d, 0xbc, 0xd6, 0x79, 0xa1, 0x28, 0x58, 0x76, 0x97, 0xec, 0xae, 0xf6, - 0x65, 0x20, 0x01, 0xc0, 0x5e, 0xe2, 0x4d, 0x21, 0xcf, 0x3a, 0x1e, 0x7b, - 0x05, 0x04, 0x62, 0xe3, 0x72, 0x6c, 0x54, 0x31, 0x52, 0x41, 0xa1, 0x74, - 0x4b, 0x65, 0xd0, 0xef, 0x05, 0xcf, 0x65, 0x1f, 0x6c, 0x98, 0x89, 0xb1, - 0xff, 0xad, 0xe7, 0x37, 0x6d, 0xee, 0x10, 0xf3, 0x62, 0x1a, 0xf5, 0x96, - 0x1a, 0x41, 0x40, 0x7d, 0x33, 0x50, 0x04, 0xa2, 0x25, 0xb7, 0xf3, 0x16, - 0x6f, 0xae, 0x9f, 0xb8, 0x51, 0x4f, 0x38, 0xa3, 0x0c, 0xf0, 0x0a, 0x53, - 0x2f, 0x19, 0x88, 0x67, 0xac, 0x31, 0x7f, 0xdd, 0x82, 0x01, 0xd8, 0xca, - 0xc1, 0xe2, 0x32, 0xcb, 0x74, 0xed, 0x24, 0x3b, 0x33, 0xa9, 0xa1, 0xe2, - 0xfc, 0x1f, 0x8b, 0x6f, 0xaf, 0x4c, 0x67, 0x96, 0xce, 0x0f, 0x03, 0xd9, - 0x75, 0xcb, 0x8f, 0xad, 0xe3, 0xa2, 0xa6, 0xd9, 0x74, 0xb6, 0x99, 0xef, - 0x24, 0x75, 0x76, 0x34, 0xc7, 0x91, 0xc6, 0xb5, 0x8c, 0xaf, 0xe6, 0x28, - 0xfe, 0x06, 0x6e, 0x0b, 0xc9, 0x04, 0x92, 0xaf, 0x71, 0xa2, 0x9c, 0x31, - 0xbf, 0x8f, 0x6f, 0xd1, 0xcc, 0x00, 0xdd, 0x97, 0x9f, 0xb8, 0x8d, 0x4b, - 0x97, 0x8a, 0xda, 0x66, 0x65, 0x10, 0x20, 0xcb, 0x46, 0xc1, 0x6f, 0xdc, - 0x75, 0x69, 0x5d, 0x74, 0x5b, 0x3f, 0x70, 0xf8, 0xa2, 0xff, 0xf7, 0xba, - 0x3e, 0xfa, 0x13, 0x7c, 0xf3, 0x27, 0x74, 0x3e, 0x5c, 0x6b, 0x4d, 0x14, - 0xd4, 0x61, 0xbe, 0xe1, 0x20, 0xed, 0xfa, 0x43, 0x68, 0xa5, 0xcc, 0xdd, - 0x8b, 0x82, 0x21, 0xa0, 0x21, 0x4d, 0x5a, 0x2a, 0x90, 0xae, 0x33, 0x39, - 0x3b, 0xac, 0xb6, 0x85, 0xec, 0x28, 0x1c, 0xc8, 0x3a, 0xad, 0x0b, 0x67, - 0xa9, 0xd1, 0xc7, 0x29, 0x6c, 0x54, 0x94, 0x03, 0x5e, 0x90, 0x3a, 0x06, - 0xdd, 0xbb, 0x4b, 0x4d, 0xdb, 0x06, 0x8b, 0x98, 0x3c, 0xf2, 0x54, 0x25, - 0xc6, 0x29, 0x21, 0x0e, 0x87, 0xc3, 0xe8, 0x0c, 0x51, 0x79, 0x48, 0x77, - 0x7a, 0x61, 0x16, 0x7d, 0xca, 0x36, 0x24, 0xe8, 0xca, 0xab, 0xc6, 0x67, - 0x95, 0xa7, 0x8f, 0xc3, 0x69, 0xc3, 0x51, 0x94, 0x4e, 0x7c, 0x5a, 0x41, - 0x61, 0x1d, 0xf2, 0x6a, 0x14, 0x0a, 0xda, 0x90, 0xba, 0x96, 0x67, 0xa2, - 0x31, 0x02, 0xc9, 0xfa, 0x43, 0xb5, 0x51, 0xeb, 0x75, 0x42, 0xa4, 0x7e, - 0x12, 0x93, 0x85, 0xad, 0x62, 0xb2, 0x95, 0x93, 0xba, 0x8a, 0x8e, 0x90, - 0x53, 0x66, 0x0b, 0x4f, 0x2f, 0xa0, 0x3b, 0x5a, 0x81, 0xa9, 0x62, 0x66, - 0xf2, 0xe9, 0xcb, 0x61, 0x12, 0x17, 0x2b, 0x08, 0xf3, 0x95, 0x79, 0x98, - 0xe5, 0x3a, 0x59, 0xdf, 0x45, 0xe6, 0x6a, 0x08, 0x33, 0xad, 0x67, 0x11, - 0xed, 0x0a, 0x51, 0xeb, 0xc0, 0xa6, 0x1c, 0x68, 0xc9, 0x79, 0x98, 0xb7, - 0x0a, 0xb4, 0x46, 0x6b, 0x28, 0x8a, 0xe1, 0x98, 0x65, 0x0e, 0x9b, 0xa0, - 0xac, 0xb2, 0xe8, 0x4e, 0x75, 0xf0, 0xf4, 0xfe, 0xa5, 0x08, 0x43, 0xd8, - 0x1e, 0x20, 0x8e, 0x8d, 0x77, 0xaa, 0xfd, 0x45, 0xfd, 0x8d, 0xbe, 0xef, - 0xd0, 0x69, 0x6b, 0x20, 0x88, 0x0a, 0x08, 0x19, 0x8e, 0x8d, 0x6e, 0x29, - 0x53, 0xbd, 0xf5, 0xc8, 0x38, 0xca, 0x30, 0xd0, 0x07, 0x62, 0x59, 0x70, - 0x2e, 0xa0, 0x0b, 0x00, 0xd5, 0x2b, 0x8d, 0x9e, 0x03, 0x84, 0x49, 0x01, - 0xfe, 0x8b, 0x5b, 0x5c, 0x4d, 0x22, 0x80, 0x7a, 0xea, 0x2b, 0xa2, 0xd2, - 0x1a, 0xc7, 0x01, 0xc2, 0x46, 0x1e, 0x20, 0x8a, 0xb4, 0x93, 0x4f, 0x56, - 0xec, 0xd2, 0xf5, 0x01, 0x6e, 0x38, 0x57, 0x94, 0xe9, 0x9e, 0xb2, 0x61, - 0x6f, 0x29, 0x8c, 0x81, 0xbe, 0x92, 0xc5, 0x9e, 0x71, 0xc1, 0xb3, 0x6b, - 0x62, 0x03, 0x35, 0xd8, 0x71, 0x02, 0x50, 0x3e, 0x48, 0xad, 0xd2, 0x77, - 0x1c, 0x50, 0x88, 0xf5, 0xc9, 0x2b, 0x11, 0xe2, 0x62, 0xb4, 0x6f, 0xf3, - 0x7b, 0xeb, 0xba, 0xe7, 0x7f, 0x08, 0xbc, 0x1d, 0xef, 0xd0, 0x54, 0xa9, - 0x2c, 0xb1, 0x8b, 0x27, 0xd5, 0x33, 0xfe, 0xf0, 0x32, 0xb9, 0x99, 0x1a, - 0xac, 0x8e, 0x6c, 0x6e, 0xe0, 0x88, 0x22, 0xe3, 0xe9, 0x4d, 0xd7, 0x90, - 0x91, 0x1f, 0x0d, 0xdf, 0x43, 0xfe, 0x4a, 0x1d, 0x46, 0xc0, 0xea, 0x7c, - 0xf8, 0x5a, 0x34, 0x78, 0x60, 0x8d, 0xbd, 0xea, 0xfa, 0xca, 0xdb, 0x07, - 0xfd, 0x76, 0x97, 0xbd, 0xfd, 0x5b, 0xa6, 0xc2, 0xf4, 0x5e, 0x77, 0xe9, - 0x7a, 0xae, 0x61, 0xc0, 0x9e, 0xf7, 0x07, 0xd1, 0xde, 0x62, 0xe6, 0xe3, - 0xa1, 0xfc, 0xcf, 0x8a, 0x61, 0x9e, 0xbb, 0x05, 0x75, 0xcd, 0x2e, 0x8f, - 0xa6, 0xa1, 0x2c, 0x91, 0xf8, 0x25, 0xf0, 0xa5, 0x11, 0xd0, 0xa8, 0x6a, - 0x74, 0x08, 0x72, 0xfc, 0xa3, 0xe3, 0x44, 0x0c, 0x96, 0x7b, 0x60, 0x71, - 0xff, 0x04, 0xa3, 0x57, 0x6f, 0x34, 0xe8, 0xf0, 0xc9, 0x6b, 0x75, 0x76, - 0xeb, 0xc2, 0x59, 0xfd, 0x31, 0x38, 0xbf, 0x51, 0x8c, 0x5c, 0xf0, 0xd9, - 0x8e, 0x98, 0x01, 0x61, 0x45, 0x54, 0xa9, 0x7a, 0x28, 0x2b, 0x56, 0x18, - 0x76, 0x64, 0x68, 0x09, 0x2f, 0x20, 0xd0, 0x87, 0xd6, 0x8f, 0x39, 0x79, - 0x11, 0x11, 0x52, 0xf5, 0xa6, 0x93, 0x49, 0xe4, 0xcf, 0xba, 0xff, 0x5e, - 0x61, 0x4f, 0x30, 0xee, 0x38, 0xb7, 0xfc, 0xac, 0xeb, 0x3c, 0xa1, 0x2a, - 0x35, 0x32, 0xb4, 0x9c, 0x6b, 0x54, 0xfc, 0xd8, 0xe3, 0x1b, 0xf4, 0x53, - 0x36, 0xf3, 0x92, 0xca, 0x13, 0x4e, 0xbb, 0xc7, 0x9f, 0x95, 0x27, 0xc5, - 0x17, 0x99, 0x13, 0xbb, 0xbe, 0x6b, 0xf3, 0x24, 0x55, 0x4d, 0x5c, 0x7d, - 0x30, 0x35, 0x87, 0x5e, 0x56, 0x54, 0xb4, 0xdc, 0x54, 0xf1, 0x1c, 0x4c, - 0xca, 0x1e, 0xde, 0xdb, 0xaa, 0x04, 0x54, 0xe8, 0x1e, 0x30, 0x7f, 0xde, - 0xba, 0xa9, 0x66, 0xc5, 0x71, 0xda, 0x70, 0x44, 0x41, 0x72, 0x91, 0x4f, - 0xcc, 0x77, 0x55, 0x24, 0xff, 0x09, 0xe2, 0xbb, 0x5c, 0xbc, 0x19, 0xe0, - 0x15, 0xf2, 0x6a, 0x1d, 0x08, 0xca, 0xd9, 0x95, 0x10, 0x67, 0x51, 0x35, - 0xaf, 0xd4, 0xd7, 0x36, 0x40, 0x84, 0xb4, 0x39, 0x43, 0x4b, 0x43, 0x73, - 0x3b, 0xc6, 0x92, 0xe5, 0x19, 0x57, 0x56, 0x86, 0xfa, 0x1e, 0x8a, 0xe2, - 0x57, 0xb2, 0x0c, 0x5a, 0xde, 0x6c, 0x5d, 0xef, 0xb8, 0x0b, 0x38, 0xc6, - 0x91, 0x2e, 0x84, 0xf2, 0x49, 0xe4, 0x3b, 0xda, 0x5d, 0xcc, 0xcb, 0x6f, - 0x61, 0x20, 0xd5, 0xb6, 0xf5, 0xab, 0x02, 0x47, 0xbd, 0x53, 0xf2, 0x10, - 0x89, 0xfc, 0x3f, 0x69, 0xb3, 0xd2, 0x45, 0x9f, 0xdf, 0x3b, 0x99, 0x89, - 0x4a, 0x4f, 0x84, 0x48, 0x16, 0x75, 0x90, 0xa9, 0x74, 0xf6, 0xaf, 0xee, - 0x8e, 0x8a, 0x35, 0x90, 0x4b, 0x80, 0x06, 0x48, 0x04, 0x75, 0x72, 0xce, - 0xa8, 0xd4, 0xf8, 0xe5, 0x95, 0xb4, 0xab, 0x39, 0x69, 0x0d, 0x1a, 0x9b, - 0x82, 0xd7, 0x81, 0x2f, 0x07, 0x21, 0x29, 0x91, 0xda, 0x0c, 0x32, 0x18, - 0x64, 0x36, 0xc0, 0x37, 0x69, 0xde, 0x1a, 0xb4, 0xce, 0x50, 0x29, 0x02, - 0x0c, 0x91, 0x3c, 0xe5, 0x80, 0x28, 0x79, 0x66, 0x8e, 0xa6, 0x0a, 0x6e, - 0x9d, 0xb1, 0xf8, 0xab, 0x19, 0xae, 0x23, 0xea, 0x34, 0x10, 0x12, 0x06, - 0xd5, 0xcf, 0xb5, 0xf7, 0x5c, 0x29, 0xb3, 0x0c, 0xf9, 0xc4, 0x29, 0x28, - 0x64, 0x03, 0x6f, 0x05, 0x41, 0xc0, 0xf4, 0x59, 0x91, 0xaa, 0x5c, 0x0b, - 0x13, 0x62, 0xdd, 0x48, 0x13, 0xf7, 0x8e, 0xbf, 0xec, 0xb2, 0xb0, 0xe5, - 0x81, 0xdc, 0xd3, 0x3f, 0x0c, 0xf0, 0x67, 0x5b, 0x8b, 0x04, 0xf5, 0x1e, - 0x00, 0xcb, 0xcf, 0x13, 0xe3, 0xa7, 0xc8, 0x19, 0x0b, 0xe7, 0xbe, 0x61, - 0xa4, 0xf9, 0x63, 0x11, 0xa9, 0x0d, 0x1f, 0x04, 0xbf, 0x73, 0xc9, 0x5d, - 0x93, 0x84, 0x9a, 0x14, 0xa6, 0xa4, 0x28, 0x22, 0x00, 0x69, 0xea, 0x0a, - 0x78, 0xc4, 0x29, 0x6b, 0x57, 0x22, 0x36, 0xae, 0x2c, 0x02, 0xc3, 0x08, - 0xd0, 0x4c, 0x80, 0x62, 0xe5, 0x4e, 0xda, 0xbc, 0x0f, 0x83, 0x0e, 0xc3, - 0x95, 0x1e, 0x5f, 0x27, 0xac, 0xd1, 0x63, 0x91, 0xdf, 0xaf, 0x8e, 0x5b, - 0xb1, 0x6b, 0x47, 0x29, 0x07, 0xa7, 0xd0, 0x1f, 0x51, 0xdf, 0x8b, 0x2b, - 0xd7, 0xac, 0xd1, 0x78, 0x19, 0x02, 0x6a, 0x64, 0x65, 0x0a, 0x75, 0xb3, - 0x3a, 0x44, 0x42, 0x19, 0x4d, 0x2d, 0x3a, 0x1c, 0x24, 0xcb, 0x4d, 0x7e, - 0xa2, 0xfa, 0x87, 0x92, 0xfc, 0x08, 0x92, 0x5c, 0x4a, 0xfc, 0x7c, 0xbf, - 0x3b, 0xfc, 0x7f, 0xcf, 0x0e, 0x52, 0x0e, 0xad, 0xf6, 0x36, 0x14, 0xc6, - 0xa2, 0x46, 0x9c, 0x3a, 0xd9, 0xa2, 0x47, 0x74, 0x58, 0x81, 0x79, 0x21, - 0xa0, 0x7d, 0x72, 0xbd, 0x70, 0x1d, 0x11, 0xe7, 0x48, 0x84, 0xde, 0xf1, - 0xc5, 0xbf, 0xa5, 0xee, 0xa1, 0xfd, 0xa3, 0x72, 0x77, 0x27, 0x24, 0xc8, - 0xdf, 0x64, 0x9b, 0x22, 0x14, 0x56, 0x7d, 0x1a, 0x9d, 0xc0, 0x18, 0x88, - 0x30, 0x8b, 0xf6, 0x1f, 0xb3, 0xb6, 0x5d, 0x49, 0x87, 0x0f, 0x78, 0x93, - 0xdf, 0x9c, 0x1e, 0x22, 0x27, 0x95, 0x65, 0xc1, 0x3a, 0xd9, 0x42, 0x40, - 0xba, 0xac, 0xa2, 0x2c, 0xc4, 0xb2, 0x74, 0xfd, 0x57, 0xb4, 0x88, 0xa2, - 0xf7, 0x28, 0xbc, 0x50, 0x79, 0xc8, 0x38, 0x75, 0x06, 0x17, 0x9f, 0xb7, - 0xd2, 0xf4, 0x3a, 0xbb, 0x56, 0xfc, 0xde, 0x3c, 0xca, 0x3e, 0xcc, 0x71, - 0xae, 0x79, 0x6c, 0x4e, 0x8c, 0x75, 0x11, 0xb5, 0x30, 0xb4, 0x63, 0xde, - 0xfe, 0x95, 0x65, 0xb7, 0x35, 0x7c, 0x09, 0x46, 0x78, 0xb7, 0xa3, 0x24, - 0x0f, 0x06, 0x22, 0xf6, 0x60, 0x76, 0xd0, 0xee, 0x63, 0x1d, 0xaa, 0x2b, - 0x68, 0x2a, 0x89, 0x4d, 0x4b, 0xbc, 0xf4, 0xfe, 0x78, 0x35, 0xa7, 0x2f, - 0x48, 0xa6, 0xf1, 0xc9, 0x33, 0xa3, 0x2d, 0x3e, 0x5e, 0x5d, 0xdd, 0xdc, - 0x54, 0xae, 0xad, 0x20, 0xd0, 0x5c, 0x40, 0x6b, 0x21, 0x6f, 0x10, 0xd5, - 0xbb, 0x5d, 0x90, 0x3f, 0xd3, 0x34, 0x5c, 0x82, 0x53, 0xa0, 0x46, 0x8f, - 0xfb, 0x2f, 0xf3, 0xc2, 0x5f, 0x44, 0xf1, 0xa6, 0x83, 0x79, 0x6b, 0xf5, - 0x1f, 0x41, 0x45, 0xcb, 0x99, 0x2e, 0x7c, 0xd5, 0x23, 0xff, 0x92, 0x4e, - 0x9b, 0xc3, 0xc2, 0x67, 0x68, 0x24, 0xa0, 0x57, 0xa0, 0xb6, 0x29, 0xcb, - 0x25, 0xb1, 0x87, 0x56, 0x13, 0x86, 0x70, 0xb9, 0x42, 0x2b, 0x9c, 0xa4, - 0x18, 0xa7, 0x0c, 0xd6, 0x8b, 0xb0, 0xfc, 0xe0, 0xe3, 0x7e, 0x95, 0x3d, - 0x5e, 0x9b, 0x83, 0x09, 0x88, 0xf8, 0x9e, 0x91, 0x68, 0x70, 0x13, 0xdc, - 0x6f, 0x91, 0x47, 0x5a, 0x31, 0x7d, 0xc8, 0x79, 0x04, 0x39, 0x0b, 0xdb, - 0x2e, 0xe3, 0xe9, 0xfb, 0xbb, 0x07, 0x0b, 0x21, 0x93, 0xc3, 0xc6, 0xaf, - 0x1a, 0xb3, 0x25, 0xd7, 0xd4, 0x1e, 0x3e, 0xf0, 0xaf, 0x3c, 0xaa, 0xea, - 0xd3, 0x8a, 0x41, 0x2a, 0x8e, 0x83, 0x6c, 0xe3, 0xad, 0x0c, 0x12, 0xa3, - 0xc3, 0x67, 0x40, 0x0f, 0x14, 0x0f, 0xbe, 0xf6, 0x4c, 0x86, 0x08, 0xd1, - 0xc8, 0x4f, 0x75, 0xcf, 0x62, 0xde, 0x6a, 0x24, 0x7c, 0x67, 0x7f, 0x2b, - 0x2e, 0x97, 0x42, 0xa7, 0x2a, 0x07, 0x96, 0xa8, 0x36, 0xc1, 0xd1, 0xe9, - 0x6b, 0xb2, 0xdc, 0x36, 0x9a, 0x6e, 0x19, 0x99, 0xf6, 0x36, 0x28, 0xdb, - 0xdc, 0xb0, 0x8d, 0x33, 0x6d, 0x22, 0x8c, 0xe3, 0x78, 0x55, 0x56, 0xed, - 0xe7, 0x68, 0xdb, 0xd5, 0x77, 0x5e, 0x25, 0x6c, 0xdf, 0x41, 0x5d, 0x7e, - 0xce, 0x33, 0xd6, 0xee, 0x35, 0x04, 0xa7, 0xda, 0x94, 0x27, 0x0e, 0xd8, - 0x57, 0x3c, 0x6b, 0x18, 0x04, 0x93, 0x64, 0xb8, 0xf4, 0x5b, 0x3e, 0xe1, - 0xfb, 0x0c, 0xb8, 0x72, 0x4e, 0x27, 0xb8, 0xa4, 0x53, 0xc4, 0x27, 0xfc, - 0x22, 0x76, 0x78, 0xf2, 0x52, 0x00, 0xe5, 0x3b, 0xff, 0x10, 0xba, 0x75, - 0x52, 0xd7, 0xe8, 0xb9, 0x3f, 0xcb, 0x56, 0xc3, 0x2e, 0x3d, 0x5d, 0xcc, - 0x67, 0x88, 0x7b, 0x33, 0x6c, 0x9e, 0xa4, 0x0f, 0x80, 0xa3, 0x62, 0x3f, - 0x03, 0x89, 0x06, 0x82, 0x93, 0xbb, 0x32, 0xcd, 0xe8, 0x99, 0x5a, 0x3a, - 0x4c, 0xf6, 0x42, 0x0d, 0x56, 0x60, 0x3c, 0xdc, 0xcf, 0x6b, 0xc2, 0x5a, - 0x1d, 0x35, 0x8d, 0xd1, 0x11, 0x31, 0xe0, 0x30, 0xba, 0xa6, 0x48, 0xfc, - 0x94, 0x6a, 0x31, 0x29, 0xc7, 0xa6, 0x47, 0xaf, 0x14, 0x93, 0x33, 0x2b, - 0x3e, 0x34, 0x5d, 0x79, 0xb7, 0xca, 0xea, 0xac, 0xa7, 0xf3, 0xfa, 0x65, - 0x57, 0x4c, 0xcd, 0x2c, 0x0b, 0xa5, 0xbc, 0x25, 0x8a, 0x2a, 0xa2, 0xfe, - 0x40, 0xf7, 0x28, 0x30, 0x4a, 0x1e, 0x4c, 0x29, 0x82, 0x86, 0x04, 0x2a, - 0x63, 0xc3, 0xcf, 0xd4, 0x81, 0xda, 0xb8, 0x43, 0x71, 0x57, 0x3b, 0xf6, - 0x58, 0xf1, 0xae, 0x84, 0xa8, 0xd0, 0xa0, 0x3b, 0xfe, 0x5a, 0x39, 0x8a, - 0xf2, 0x35, 0x00, 0x58, 0xb6, 0x25, 0x46, 0x62, 0x05, 0xab, 0x27, 0x98, - 0x28, 0x4e, 0x37, 0xbc, 0xe2, 0xd7, 0x30, 0x2c, 0xae, 0x1c, 0xea, 0x59, - 0x96, 0x72, 0xa9, 0x9d, 0xa8, 0x9e, 0xed, 0x24, 0xc0, 0x48, 0x63, 0xad, - 0x54, 0x2d, 0x17, 0x0f, 0xa1, 0xff, 0x72, 0xac, 0xbb, 0xa6, 0x62, 0x3a, - 0x83, 0x71, 0xd8, 0x02, 0x51, 0x7c, 0xaa, 0x9e, 0x3b, 0x72, 0xdc, 0x10, - 0xa7, 0xd5, 0x1b, 0xa1, 0x7a, 0x7a, 0x21, 0x99, 0x5a, 0x6f, 0x83, 0x07, - 0x5f, 0x71, 0xa3, 0x2b, 0x6d, 0x81, 0xd3, 0x20, 0x18, 0xc2, 0x08, 0xd5, - 0xe8, 0x00, 0xaa, 0xfb, 0x3b, 0x3c, 0xd7, 0xba, 0x4d, 0xa2, 0x67, 0x96, - 0x42, 0x89, 0xb7, 0x4b, 0x6c, 0x0f, 0xa0, 0x0d, 0x07, 0x82, 0x33, 0xf7, - 0x8d, 0xdc, 0xf2, 0x7d, 0x61, 0x02, 0x1b, 0xd6, 0x78, 0xfe, 0x24, 0x11, - 0xbd, 0xb1, 0x0e, 0x82, 0x97, 0x3c, 0x44, 0x82, 0xb0, 0x4d, 0x58, 0xa8, - 0x9f, 0x4c, 0x28, 0x52, 0x7c, 0xbe, 0xeb, 0xc1, 0x18, 0x22, 0x55, 0xb0, - 0xb3, 0x23, 0x8d, 0x2a, 0xc2, 0xcb, 0x73, 0x58, 0x74, 0x07, 0xe1, 0xa6, - 0xb7, 0x71, 0x1d, 0x93, 0xff, 0x43, 0xba, 0xe0, 0xad, 0x93, 0x42, 0x12, - 0xa9, 0x54, 0xab, 0xc9, 0x29, 0x7e, 0x5a, 0xf1, 0xf0, 0x99, 0xb9, 0x59, - 0x22, 0x05, 0xb4, 0xd4, 0xfb, 0xf6, 0xca, 0xb2, 0x81, 0x12, 0x28, 0xf8, - 0x2a, 0x57, 0xc9, 0x14, 0x60, 0x4c, 0xd0, 0xcd, 0x2e, 0x3a, 0xd6, 0x65, - 0x63, 0x88, 0xe7, 0xff, 0xdc, 0x21, 0xfd, 0xe4, 0xd9, 0x91, 0xc2, 0xa5, - 0xd2, 0x93, 0xa3, 0xd7, 0x81, 0x19, 0x79, 0x5a, 0x02, 0x08, 0xae, 0x45, - 0xa2, 0xb2, 0x2a, 0x38, 0x02, 0x8a, 0x67, 0x49, 0x00, 0xb8, 0x74, 0xec, - 0xd9, 0x78, 0xd7, 0x97, 0xd2, 0xba, 0xd7, 0x7f, 0xd3, 0x1c, 0x6f, 0x40, - 0x2c, 0x4c, 0xb6, 0x95, 0xf1, 0x2b, 0xa1, 0x19, 0x66, 0x76, 0x35, 0xf2, - 0x04, 0x1f, 0xcc, 0x0b, 0x0b, 0x89, 0x97, 0x4a, 0xf7, 0x49, 0x66, 0x25, - 0x90, 0x22, 0x3f, 0x9a, 0xf2, 0x9c, 0x7a, 0x68, 0xed, 0x73, 0x42, 0x9c, - 0x83, 0x27, 0xbf, 0x44, 0x9e, 0x77, 0xcd, 0x21, 0xb6, 0x4b, 0xe5, 0x9f, - 0x97, 0x48, 0x78, 0x86, 0x1d, 0x3c, 0x20, 0xc3, 0xb9, 0xbf, 0x42, 0xdd, - 0x29, 0x2f, 0xd9, 0x2b, 0xd9, 0x7a, 0xc1, 0x1c, 0xca, 0x2b, 0x9c, 0xcd, - 0xd0, 0x76, 0x86, 0x06, 0xcd, 0x23, 0x3e, 0x41, 0x15, 0xd2, 0x57, 0xe9, - 0x7b, 0xca, 0x6f, 0x02, 0x26, 0x43, 0xa8, 0xd6, 0x87, 0x83, 0xed, 0xb3, - 0xa8, 0x84, 0x54, 0xad, 0x8f, 0x83, 0x7a, 0x34, 0xc3, 0x6a, 0x5d, 0x97, - 0x1e, 0xb9, 0x93, 0x58, 0x6b, 0x67, 0x4d, 0x3b, 0x6b, 0x69, 0x86, 0xfb, - 0x40, 0xa6, 0x76, 0xee, 0x74, 0xaa, 0x54, 0x25, 0x5d, 0x24, 0x8c, 0x52, - 0xc2, 0x31, 0xd0, 0x86, 0xab, 0xd2, 0x59, 0x6f, 0x46, 0x8a, 0x18, 0x53, - 0x0a, 0xf3, 0x94, 0xe0, 0x6c, 0x2c, 0x69, 0xf9, 0x47, 0x49, 0x7e, 0xc5, - 0xb0, 0x80, 0x72, 0xf7, 0xc1, 0x4e, 0xc2, 0x9f, 0x7e, 0x8b, 0x94, 0x1c, - 0xb3, 0x00, 0xa1, 0xdc, 0x13, 0x66, 0x73, 0x7b, 0x91, 0x2a, 0x78, 0xe6, - 0x11, 0xd4, 0x7a, 0xa0, 0x98, 0xe6, 0x2e, 0x4b, 0x73, 0x4d, 0x19, 0xe2, - 0x8c, 0x7b, 0x13, 0xf6, 0x03, 0x32, 0x78, 0x4c, 0x99, 0xdf, 0xd8, 0x75, - 0x2b, 0x2b, 0x01, 0x35, 0x0c, 0xea, 0xb4, 0x80, 0x2c, 0x82, 0x83, 0xe1, - 0xd2, 0x81, 0x38, 0xad, 0x34, 0x71, 0xf8, 0x56, 0xfc, 0x05, 0xa0, 0xa5, - 0x6d, 0xfa, 0x67, 0x01, 0x78, 0x8d, 0x1c, 0xb4, 0x72, 0x06, 0x7b, 0x8e, - 0xf9, 0x11, 0x72, 0xc6, 0xe6, 0x9b, 0x7d, 0x7c, 0x6d, 0x6d, 0x20, 0xd9, - 0x60, 0xa1, 0x76, 0x65, 0x0a, 0x13, 0x41, 0x96, 0xea, 0x24, 0x56, 0xbf, - 0x45, 0xf0, 0x0e, 0xa1, 0xe1, 0x6c, 0x70, 0x9d, 0x16, 0x76, 0xf5, 0x22, - 0x63, 0xd9, 0x1b, 0xf4, 0x83, 0x39, 0xc9, 0xad, 0xde, 0xa4, 0x83, 0x95, - 0x1a, 0x0d, 0xba, 0xd6, 0x48, 0xff, 0x7a, 0x41, 0x46, 0x27, 0x02, 0x0f, - 0x47, 0xff, 0x6a, 0x1d, 0xe3, 0xba, 0xc3, 0x24, 0xc4, 0x9f, 0x02, 0xc2, - 0x65, 0xd6, 0xd1, 0x32, 0x40, 0x91, 0x50, 0x74, 0x75, 0x44, 0x3e, 0xf8, - 0x24, 0xc8, 0xdd, 0xdb, 0xaa, 0xd3, 0xff, 0x08, 0x0d, 0x2e, 0x61, 0x41, - 0x87, 0xbc, 0x8a, 0x96, 0xd8, 0xd5, 0xe2, 0x25, 0x65, 0xd4, 0xa8, 0xe1, - 0x61, 0x3d, 0x11, 0x00, 0xff, 0xcf, 0x25, 0x87, 0xd3, 0xa8, 0x6b, 0x88, - 0x73, 0xa2, 0xb8, 0xa4, 0x96, 0xa8, 0xcf, 0x6c, 0xd3, 0xb8, 0xb0, 0x07, - 0x7a, 0xdc, 0xf0, 0x52, 0x27, 0xfe, 0xe1, 0x44, 0x93, 0x2c, 0x9f, 0x91, - 0x68, 0xbe, 0x37, 0x0f, 0x8c, 0x89, 0x4c, 0x2e, 0x8e, 0x1c, 0xe9, 0xdc, - 0xeb, 0x68, 0x91, 0x1b, 0x8d, 0x69, 0x88, 0x7e, 0xea, 0x56, 0xa3, 0x79, - 0x72, 0x62, 0xd2, 0x63, 0xfb, 0x32, 0xa3, 0xa0, 0xcc, 0x2c, 0x4e, 0xaa, - 0xb4, 0x0a, 0x19, 0xa4, 0x8d, 0x8c, 0x03, 0x31, 0x20, 0x7a, 0x9b, 0x09, - 0x63, 0x4b, 0x81, 0x4b, 0x50, 0x33, 0x42, 0xe0, 0x24, 0x82, 0x66, 0xb2, - 0x7f, 0x44, 0x19, 0xed, 0x44, 0x17, 0x4b, 0x66, 0x9e, 0x22, 0x28, 0x80, - 0x55, 0xdf, 0xb6, 0xad, 0xce, 0x1b, 0xb0, 0xcd, 0x5d, 0x73, 0xe0, 0x2d, - 0x3c, 0xf0, 0xc4, 0xd8, 0x4d, 0x05, 0x0c, 0x31, 0x3b, 0xb1, 0xfc, 0xf9, - 0x49, 0xcd, 0xc3, 0x04, 0x65, 0xb0, 0x0e, 0xcc, 0xd3, 0xd4, 0xb4, 0xef, - 0xe3, 0xd6, 0xb1, 0xd5, 0x3a, 0xa3, 0x96, 0x54, 0x84, 0x1a, 0x4a, 0x2f, - 0x05, 0xb3, 0x86, 0x99, 0x65, 0x31, 0xc1, 0xed, 0x46, 0xfb, 0x7e, 0x36, - 0xc8, 0x10, 0x5a, 0x8a, 0x4f, 0x64, 0xf7, 0x66, 0xad, 0x79, 0x0e, 0xd4, - 0x6e, 0x65, 0x81, 0x2e, 0x4a, 0xcb, 0x32, 0xf2, 0xe2, 0x86, 0x59, 0xb5, - 0x65, 0x4f, 0x9e, 0xf1, 0x42, 0x0b, 0xdc, 0x67, 0xb2, 0x78, 0xf7, 0x60, - 0x1a, 0xb8, 0xa6, 0x8f, 0x4d, 0x55, 0x2f, 0xeb, 0x45, 0x05, 0x5b, 0xb4, - 0xc5, 0x67, 0xbc, 0x2b, 0x2c, 0xbe, 0x75, 0xe1, 0x5c, 0xa3, 0x2a, 0xdf, - 0xb9, 0xc9, 0x6e, 0xc7, 0x20, 0xe9, 0x90, 0xdf, 0x24, 0x56, 0x72, 0xf7, - 0xa1, 0xc7, 0x3e, 0xbc, 0x69, 0x7d, 0x4c, 0xc7, 0xcc, 0xfc, 0xbe, 0xe4, - 0x3e, 0xe0, 0x8a, 0xd1, 0x06, 0xb5, 0x95, 0xcd, 0xc0, 0xb7, 0x77, 0x13, - 0x8a, 0xfb, 0x56, 0xb7, 0x94, 0x8a, 0x77, 0x52, 0xcb, 0x00, 0x87, 0x1b, - 0xc8, 0xd2, 0xb3, 0xe3, 0x50, 0xf1, 0xb3, 0xdc, 0x3f, 0x62, 0x0c, 0xbf, - 0xad, 0xf7, 0x92, 0xf0, 0x57, 0xfb, 0xc2, 0xaa, 0x91, 0x4b, 0xc9, 0x1a, - 0x96, 0x19, 0xed, 0x52, 0x52, 0x0c, 0x0a, 0x39, 0x14, 0x4d, 0x77, 0xc8, - 0x5a, 0xdb, 0x46, 0xbb, 0xd6, 0x80, 0x6a, 0xd2, 0xe3, 0xaa, 0xd8, 0xda, - 0x28, 0xb9, 0xc4, 0x85, 0x7d, 0x50, 0xbc, 0x5d, 0xbe, 0xa7, 0xfa, 0x90, - 0xbe, 0x3f, 0x18, 0x46, 0xb5, 0xf9, 0x5d, 0xd4, 0xfa, 0xa3, 0x8b, 0x97, - 0x1c, 0x81, 0xb8, 0x06, 0x4a, 0x4a, 0x74, 0xcb, 0xb5, 0x07, 0xcc, 0xea, - 0xa2, 0xa3, 0x16, 0x2f, 0x88, 0xff, 0xb6, 0xc3, 0x05, 0x4f, 0x0a, 0x5c, - 0x20, 0xea, 0x05, 0x43, 0xca, 0x7c, 0x60, 0x00, 0x43, 0xd3, 0xfa, 0x19, - 0x1e, 0x5b, 0x77, 0xbb, 0x5b, 0xff, 0x3b, 0xa4, 0xfb, 0x96, 0xe9, 0x9f, - 0x45, 0x6f, 0x87, 0xce, 0x02, 0x26, 0x7b, 0x8a, 0xbe, 0x92, 0xe4, 0xf1, - 0x38, 0x51, 0x5a, 0xe0, 0x16, 0x83, 0x8a, 0xc2, 0x84, 0x8a, 0x34, 0x9c, - 0x14, 0xa3, 0xa6, 0x9d, 0x9f, 0xac, 0x44, 0x0c, 0x5b, 0x03, 0x9b, 0x8e, - 0xa5, 0xd5, 0x4d, 0xae, 0x42, 0xa8, 0x29, 0x75, 0xdd, 0x5e, 0xee, 0x3c, - 0xa8, 0x3d, 0xb9, 0xcb, 0x12, 0x33, 0x0c, 0x21, 0x6a, 0xe1, 0x29, 0xf7, - 0xde, 0x63, 0x8d, 0x38, 0x78, 0xdf, 0x5a, 0x6e, 0x8f, 0x60, 0x7b, 0xab, - 0xdf, 0x29, 0x67, 0xb2, 0x5c, 0x56, 0x50, 0x08, 0x37, 0x13, 0x67, 0xf6, - 0xc3, 0xe3, 0xed, 0x29, 0xc7, 0xd5, 0xdb, 0xcc, 0x3a, 0x98, 0x92, 0xba, - 0x8f, 0x11, 0x5c, 0x79, 0x21, 0x8a, 0x46, 0x1b, 0x97, 0x49, 0x3d, 0x49, - 0xca, 0xf9, 0x4a, 0xf7, 0x49, 0x37, 0x9e, 0x2c, 0x17, 0xae, 0x5d, 0xa3, - 0x35, 0x6d, 0xdb, 0xc7, 0xaf, 0xfb, 0x50, 0xfd, 0xf8, 0xd4, 0x4f, 0x2e, - 0x4b, 0xc1, 0xa1, 0x9d, 0xdf, 0x32, 0x72, 0x5b, 0x1d, 0x67, 0x7e, 0x91, - 0xf3, 0x46, 0xed, 0xdd, 0x1f, 0x69, 0x89, 0x34, 0xb7, 0x0a, 0x16, 0xbf, - 0xa1, 0x29, 0xf5, 0x4d, 0xf8, 0x3a, 0xb3, 0xfa, 0xf7, 0x0b, 0xeb, 0x64, - 0xad, 0x3c, 0x47, 0x3e, 0x14, 0x37, 0x5b, 0xde, 0xf0, 0xe7, 0x27, 0xce, - 0x4b, 0xe5, 0x1f, 0x72, 0xad, 0x7b, 0xca, 0x8c, 0xb8, 0x69, 0xef, 0x39, - 0x98, 0x13, 0xcd, 0xaa, 0xe7, 0x58, 0x90, 0x51, 0x8b, 0xfd, 0xbb, 0x51, - 0xe4, 0xa8, 0x80, 0xb3, 0x58, 0x59, 0x1f, 0x7b, 0x96, 0xcc, 0x7e, 0xa8, - 0xef, 0xc5, 0x98, 0xa0, 0x22, 0x8e, 0xbc, 0x5e, 0x25, 0x01, 0x0f, 0x70, - 0x04, 0x93, 0x5f, 0x96, 0xc2, 0x9e, 0x1d, 0xbb, 0xf5, 0x88, 0xd4, 0xf2, - 0x7e, 0xfd, 0x4f, 0x3b, 0xf0, 0xbe, 0xe6, 0xad, 0x41, 0x82, 0xf4, 0x0b, - 0x2e, 0xa8, 0xbc, 0xfd, 0xb5, 0xc7, 0xd6, 0x72, 0xb5, 0x48, 0x7b, 0x12, - 0x18, 0xbf, 0x9e, 0x26, 0x11, 0x49, 0x58, 0xab, 0x53, 0x86, 0xa4, 0xa4, - 0x91, 0x35, 0x35, 0x5e, 0x91, 0x33, 0xe0, 0xe6, 0x03, 0xee, 0x2e, 0x8d, - 0x22, 0xfb, 0x12, 0x87, 0xdc, 0xd8, 0x17, 0x3a, 0xdb, 0x08, 0xfb, 0x33, - 0xf0, 0x6e, 0x94, 0x4b, 0xfc, 0x35, 0x59, 0x9f, 0x79, 0xfd, 0x6f, 0x11, - 0x72, 0x33, 0xa0, 0xdb, 0x08, 0xbc, 0x75, 0x7a, 0x44, 0xdb, 0x9b, 0xac, - 0x50, 0x2d, 0xff, 0xec, 0x87, 0x52, 0xee, 0xf7, 0xeb, 0x24, 0xd9, 0x7e, - 0xab, 0xd4, 0x0d, 0x3d, 0x3a, 0x69, 0x57, 0x82, 0x0f, 0x79, 0xca, 0x5b, - 0xea, 0x3d, 0x09, 0x5a, 0xaf, 0xf7, 0x5f, 0xe1, 0x4a, 0x1a, 0x84, 0xdb, - 0xe7, 0x7a, 0x74, 0x0d, 0xdf, 0x21, 0x67, 0x7f, 0x99, 0x29, 0x01, 0x31, - 0xd1, 0x84, 0x0e, 0xf6, 0xd3, 0x62, 0xfc, 0x80, 0xd4, 0x95, 0xc1, 0x8b, - 0x12, 0x90, 0xe6, 0x5c, 0xd2, 0xf5, 0x19, 0x8a, 0xad, 0x09, 0xf8, 0x24, - 0x28, 0x05, 0x1f, 0x2a, 0xc6, 0x6d, 0xdf, 0xaf, 0xdf, 0xa5, 0xcb, 0xa4, - 0x04, 0x51, 0xd0, 0x1f, 0x68, 0xd3, 0xc0, 0x63, 0xbb, 0xd1, 0xa4, 0x43, - 0x7d, 0xc4, 0x6e, 0x7d, 0x25, 0xe6, 0x73, 0xfe, 0x96, 0xbd, 0xb1, 0x27, - 0x76, 0x97, 0xf6, 0x64, 0xfc, 0x1c, 0x12, 0x7f, 0xec, 0xea, 0x2e, 0xa5, - 0x98, 0xe9, 0xc6, 0x8f, 0xf9, 0x15, 0xb3, 0x0a, 0xc8, 0xf7, 0xca, 0x23, - 0x0f, 0x7e, 0x42, 0x79, 0x10, 0x31, 0x96, 0x78, 0x7d, 0x05, 0x2c, 0x82, - 0xea, 0xaf, 0x59, 0xc9, 0x77, 0xb4, 0xa7, 0xa4, 0x48, 0x31, 0xa6, 0x29, - 0x7b, 0x9d, 0x83, 0x87, 0xfc, 0x11, 0x96, 0x3d, 0x78, 0x02, 0xc6, 0xfe, - 0x7d, 0x81, 0x3b, 0xa1, 0xf3, 0xc6, 0xf2, 0xdb, 0x45, 0xfc, 0xe3, 0xfb, - 0x04, 0x35, 0xbd, 0xaa, 0xdb, 0x97, 0xaa, 0x6a, 0x4e, 0xac, 0xc3, 0x98, - 0xff, 0x70, 0xad, 0xa1, 0xab, 0x15, 0x43, 0xcf, 0x31, 0x0d, 0xd1, 0x5c, - 0xe5, 0xf5, 0x4e, 0x0c, 0x45, 0x22, 0xc1, 0x27, 0x4f, 0x82, 0x90, 0x39, - 0x97, 0xb9, 0x1d, 0x5e, 0xe3, 0x7d, 0x0e, 0x90, 0x04, 0x3a, 0xc2, 0x71, - 0xbb, 0x17, 0x64, 0xe2, 0xd0, 0x97, 0x0d, 0x79, 0x29, 0xbc, 0x67, 0x30, - 0xd0, 0xb8, 0x42, 0x3c, 0x64, 0x7f, 0x98, 0x4d, 0x13, 0x95, 0x87, 0xe4, - 0x17, 0xd9, 0x00, 0x02, 0x6b, 0x4b, 0x67, 0x7d, 0x6c, 0x24, 0x3f, 0x5b, - 0xe2, 0x6f, 0x9d, 0xa4, 0xf7, 0x00, 0x4f, 0x96, 0x1f, 0x23, 0xb3, 0x42, - 0x87, 0x8c, 0xa1, 0x48, 0x51, 0x15, 0x16, 0x82, 0xf9, 0xb8, 0x65, 0xf4, - 0x4e, 0x87, 0x59, 0xf7, 0x9b, 0x12, 0xf5, 0x3b, 0xc2, 0xff, 0xe6, 0xcc, - 0xfc, 0x62, 0x4c, 0xd9, 0x85, 0x2b, 0x45, 0xdc, 0x04, 0x2c, 0x47, 0x69, - 0x58, 0xc4, 0x0a, 0x95, 0xd9, 0xfe, 0xf7, 0x09, 0xd9, 0xd3, 0x8e, 0xf1, - 0xc6, 0xe7, 0xc3, 0x51, 0xf3, 0x69, 0x18, 0xeb, 0x7b, 0xf2, 0x00, 0x80, - 0x23, 0x75, 0x1f, 0x1e, 0x0f, 0xba, 0xab, 0x41, 0xe1, 0xa9, 0x35, 0xd0, - 0x5d, 0x5a, 0x49, 0xbf, 0x1f, 0x88, 0x40, 0xa6, 0x77, 0x4a, 0x40, 0xcf, - 0x6b, 0xb8, 0xec, 0x9a, 0x45, 0x05, 0xbf, 0xe5, 0x0f, 0xde, 0xd4, 0xaf, - 0xeb, 0x73, 0xef, 0x70, 0xa9, 0xe5, 0xfe, 0xba, 0x03, 0xd9, 0xea, 0xfa, - 0x8f, 0x0b, 0x37, 0xcd, 0xc1, 0xcd, 0x95, 0xd7, 0x65, 0x12, 0xfc, 0x18, - 0x43, 0x2b, 0xbb, 0xcd, 0x65, 0xc9, 0x25, 0x4a, 0x9b, 0x70, 0xcb, 0xe2, - 0x95, 0x39, 0x55, 0x90, 0xe9, 0xf5, 0x8c, 0x97, 0x6d, 0xd4, 0xbe, 0x1c, - 0xc0, 0x6b, 0x7c, 0x14, 0x59, 0x09, 0xae, 0xbd, 0x09, 0x8a, 0x41, 0xba, - 0x79, 0xde, 0x29, 0x91, 0x63, 0x29, 0xda, 0x07, 0xe4, 0xbc, 0xe0, 0x27, - 0xa4, 0xdb, 0xe5, 0x85, 0x80, 0xe9, 0xdd, 0x55, 0xbe, 0xc3, 0xb5, 0x4e, - 0x33, 0x89, 0xda, 0x2d, 0x42, 0x74, 0xdc, 0x02, 0x06, 0x16, 0x46, 0xeb, - 0xce, 0xb0, 0x7b, 0x73, 0x3d, 0x0b, 0x90, 0xcb, 0x16, 0x48, 0x75, 0x7e, - 0x4c, 0x1d, 0x13, 0x53, 0x57, 0x57, 0x89, 0x75, 0x43, 0x43, 0x55, 0x26, - 0x4d, 0x7a, 0xa5, 0xdf, 0x59, 0xdf, 0x47, 0x44, 0xb1, 0xdc, 0x55, 0x8f, - 0xec, 0x3e, 0x5f, 0x3f, 0x8a, 0x2a, 0xd0, 0x9c, 0x1f, 0xe7, 0xef, 0x41, - 0x2d, 0x6f, 0x66, 0xb1, 0x08, 0x5a, 0x2b, 0xcb, 0xfc, 0xdb, 0x6c, 0x2e, - 0x28, 0x66, 0xa6, 0x8f, 0xcb, 0x9a, 0x88, 0x81, 0x7b, 0x51, 0x0a, 0x6c, - 0x65, 0xba, 0x0a, 0xf6, 0xd5, 0x49, 0x1a, 0xf8, 0x35, 0x68, 0x07, 0x1b, - 0x0d, 0x12, 0xce, 0x75, 0xb1, 0x48, 0xfc, 0x8f, 0x6f, 0xf2, 0xb4, 0x33, - 0xdd, 0xf2, 0xce, 0xa1, 0xa8, 0x75, 0x86, 0x20, 0x0a, 0x25, 0xe1, 0x6f, - 0xf4, 0x6a, 0x93, 0x49, 0xe3, 0xd6, 0x9e, 0x4f, 0xbf, 0xc2, 0x48, 0xfe, - 0x21, 0x01, 0x13, 0xde, 0x3b, 0x62, 0x4a, 0xff, 0x83, 0xe7, 0x55, 0x2a, - 0x81, 0x9f, 0xbd, 0x43, 0xe1, 0x4d, 0x6d, 0x80, 0x5c, 0xd3, 0xa9, 0x51, - 0x03, 0xf0, 0x01, 0x17, 0x10, 0x1f, 0xe5, 0x0f, 0xbb, 0x0a, 0x87, 0x67, - 0xff, 0x64, 0xcc, 0x19, 0xc8, 0xba, 0xd4, 0xba, 0x2c, 0xd7, 0x71, 0xd0, - 0x05, 0xa9, 0xa9, 0x7e, 0x01, 0xac, 0x48, 0xdb, 0xee, 0x24, 0xc2, 0x16, - 0xfa, 0x04, 0x8a, 0x83, 0x9a, 0x42, 0x96, 0x22, 0x84, 0xe5, 0x2b, 0xa3, - 0x74, 0xb9, 0xc2, 0x98, 0xd0, 0x2a, 0x58, 0xab, 0x03, 0xf1, 0xfc, 0xb2, - 0x1a, 0x2d, 0xed, 0x46, 0x33, 0xb6, 0x5b, 0xb6, 0xa4, 0x9e, 0xf4, 0x54, - 0xba, 0x93, 0xf4, 0x6a, 0x4a, 0x91, 0xce, 0xa5, 0x17, 0x3b, 0x01, 0xd3, - 0x40, 0x17, 0xa0, 0xfa, 0x9f, 0x70, 0xa5, 0x45, 0x2c, 0x6b, 0xb1, 0xb9, - 0x5b, 0x6d, 0xdd, 0xc3, 0xcb, 0x68, 0xd0, 0x7e, 0x12, 0x9e, 0xc5, 0xf0, - 0x7a, 0x8e, 0xd0, 0xe2, 0xc5, 0xf1, 0x3c, 0xb0, 0x32, 0x73, 0xeb, 0xc9, - 0x04, 0xbe, 0xc3, 0x57, 0xcd, 0x84, 0xa2, 0x6f, 0x74, 0xb1, 0x59, 0xa7, - 0x8d, 0x6b, 0xad, 0x5b, 0x1b, 0x2d, 0x8b, 0xf3, 0x07, 0x5c, 0xb5, 0x1c, - 0x83, 0xee, 0x82, 0x18, 0x7c, 0xf1, 0xc0, 0x8e, 0x64, 0xd6, 0x48, 0xef, - 0x28, 0x5e, 0x28, 0x20, 0x3c, 0x91, 0xb1, 0xcd, 0xa3, 0x1e, 0x37, 0x2a, - 0x66, 0xba, 0x3d, 0x5a, 0x11, 0xb1, 0x6b, 0x77, 0x29, 0xb3, 0x46, 0x15, - 0x8e, 0x59, 0xc2, 0x2e, 0xc4, 0x5a, 0x03, 0xa1, 0x60, 0xb5, 0x03, 0x63, - 0x46, 0xbf, 0x94, 0x4f, 0xef, 0xa7, 0x2f, 0x9d, 0x20, 0x40, 0xfa, 0x5f, - 0xf2, 0xad, 0x2b, 0x0c, 0x70, 0xed, 0xdf, 0x98, 0x08, 0xf6, 0x94, 0x1c, - 0x93, 0x8e, 0x59, 0xf4, 0xe3, 0x87, 0x94, 0xe4, 0xfc, 0xae, 0x3e, 0x08, - 0x07, 0xc4, 0x96, 0x90, 0x6a, 0x0e, 0xbb, 0x5b, 0x76, 0x61, 0xf6, 0x76, - 0x2b, 0x71, 0x03, 0x41, 0xc2, 0x8f, 0x84, 0x2b, 0xad, 0x39, 0x52, 0x26, - 0xa5, 0x64, 0xfe, 0x3c, 0x84, 0x84, 0x25, 0x21, 0xe7, 0x9a, 0x54, 0xc0, - 0xf1, 0xfb, 0xdf, 0x74, 0x16, 0xbe, 0x98, 0xd2, 0x5b, 0xfd, 0x3a, 0xd9, - 0xe5, 0x38, 0x0a, 0x81, 0x06, 0x62, 0xbd, 0xe4, 0x85, 0x25, 0xbd, 0x35, - 0x64, 0x40, 0xc0, 0x33, 0x2d, 0x20, 0x8d, 0xc9, 0xa3, 0xcd, 0xdb, 0x01, - 0xec, 0xec, 0xa4, 0x5f, 0xde, 0xb4, 0xe0, 0x6d, 0xd2, 0x13, 0x9d, 0x92, - 0xb8, 0x1d, 0xa8, 0xe8, 0xb8, 0xe0, 0x80, 0x19, 0xbe, 0x5a, 0x0e, 0x5a, - 0xaf, 0x91, 0xe0, 0xe8, 0x27, 0xe1, 0x81, 0xef, 0xa4, 0x71, 0xff, 0xe8, - 0x0a, 0x76, 0x8d, 0x56, 0x8b, 0x39, 0x18, 0x54, 0x81, 0xf2, 0xa8, 0x0b, - 0x56, 0x7e, 0x55, 0x46, 0x18, 0x8e, 0xb2, 0x3e, 0xad, 0xf1, 0x02, 0x4e, - 0xc5, 0x08, 0xf6, 0xb1, 0xce, 0x85, 0xf4, 0xab, 0x02, 0xfc, 0x45, 0x42, - 0x1c, 0xe8, 0xa1, 0xb7, 0x29, 0xd0, 0x76, 0x58, 0xdc, 0xd6, 0x6c, 0xdf, - 0x90, 0x59, 0x36, 0xd0, 0x2e, 0xd2, 0x9b, 0x86, 0xa2, 0x2b, 0x62, 0xc8, - 0x47, 0x67, 0x89, 0xab, 0xa3, 0xae, 0xf9, 0x92, 0xc3, 0x82, 0x64, 0x2a, - 0x63, 0x01, 0x91, 0xd3, 0x08, 0xca, 0xe7, 0x36, 0x17, 0x77, 0xbb, 0xee, - 0xd0, 0x43, 0x3f, 0x4e, 0x53, 0xc7, 0x2a, 0x55, 0x0f, 0x03, 0xdd, 0xb2, - 0x30, 0xb8, 0x1c, 0x66, 0x95, 0x5c, 0x93, 0x39, 0xba, 0x4d, 0xc6, 0xe2, - 0xd2, 0xf0, 0x67, 0x2d, 0x1d, 0xea, 0xe3, 0xe7, 0x21, 0x0c, 0x1d, 0x84, - 0xaf, 0xe0, 0xf1, 0x2a, 0x76, 0x1f, 0x9c, 0x93, 0xfc, 0x50, 0x5b, 0xea, - 0x73, 0x82, 0xa2, 0x96, 0xa1, 0x6e, 0x8b, 0xd3, 0xbe, 0x95, 0x5d, 0xd7, - 0x0a, 0xe4, 0xc4, 0xc6, 0x6b, 0x5f, 0xd3, 0xe9, 0x50, 0x7e, 0xc0, 0x5d, - 0x5b, 0xb6, 0x3e, 0x9c, 0xad, 0x74, 0x1b, 0xe1, 0xbf, 0xa3, 0x2c, 0x8e, - 0xb0, 0x99, 0x52, 0x5f, 0x51, 0x52, 0x68, 0x91, 0x96, 0x4c, 0xed, 0xd3, - 0x37, 0x7c, 0xb1, 0x8a, 0x75, 0xb7, 0xfc, 0xff, 0x1e, 0xfd, 0x60, 0xe0, - 0x09, 0x8b, 0xdb, 0x60, 0xa6, 0xde, 0x34, 0x1d, 0x9b, 0x0a, 0xf3, 0x49, - 0xd5, 0xf2, 0xbb, 0xa7, 0xee, 0xce, 0x2e, 0x45, 0xca, 0xc0, 0x5e, 0x95, - 0xfe, 0xb3, 0xc6, 0xc6, 0xde, 0x22, 0xfd, 0x91, 0x7a, 0x4a, 0x3c, 0x7d, - 0xec, 0xb0, 0x21, 0xd4, 0xb7, 0xd2, 0x42, 0x9b, 0x8b, 0xa8, 0x2f, 0x60, - 0xa2, 0x78, 0x03, 0x47, 0x8e, 0x01, 0x57, 0xe7, 0x7e, 0xf0, 0x91, 0xb5, - 0xfb, 0x86, 0xd4, 0xc1, 0x1c, 0xf6, 0xf9, 0x88, 0x30, 0xbb, 0x04, 0x4a, - 0x52, 0xfb, 0xd3, 0x08, 0x0a, 0xa8, 0x97, 0x2c, 0xad, 0xa5, 0xf2, 0xf4, - 0x63, 0x65, 0x17, 0x53, 0xa7, 0xeb, 0x6d, 0x93, 0xb8, 0xbc, 0x1d, 0xc9, - 0x17, 0x59, 0x7e, 0x3f, 0x7c, 0xf0, 0x27, 0x2e, 0xe8, 0xe4, 0x9e, 0x0c, - 0xcd, 0xe4, 0x9a, 0xbc, 0x7e, 0xcf, 0xf5, 0x46, 0xb7, 0x01, 0x3e, 0x73, - 0xd2, 0x32, 0x77, 0x1c, 0x97, 0x54, 0xe9, 0xdb, 0xc7, 0x20, 0xc1, 0xb7, - 0xc9, 0xd0, 0x55, 0x6f, 0xb9, 0x2e, 0x58, 0x63, 0xd6, 0xc0, 0x0c, 0x86, - 0xe8, 0xcf, 0x55, 0x02, 0xde, 0x2e, 0x8a, 0xe0, 0x26, 0x23, 0xd3, 0x43, - 0xb8, 0x78, 0x79, 0x16, 0x11, 0x0d, 0xc6, 0x17, 0x8b, 0x89, 0xf6, 0x4a, - 0xfd, 0xc1, 0xd7, 0x6b, 0x25, 0xa4, 0xde, 0x3d, 0xd4, 0xea, 0x08, 0x38, - 0xbb, 0x51, 0x6f, 0x4f, 0xb7, 0x74, 0xd9, 0x22, 0x63, 0x90, 0x79, 0x6b, - 0x7a, 0x4a, 0xde, 0x68, 0xb1, 0x75, 0x1c, 0x7e, 0xb5, 0xd4, 0x3a, 0x43, - 0xc2, 0xdb, 0x42, 0x53, 0x4f, 0xe4, 0xad, 0xfc, 0xdf, 0x56, 0xc6, 0xbb, - 0x5c, 0x5c, 0x2f, 0xaf, 0xdb, 0xed, 0xb3, 0x08, 0xd3, 0x75, 0x56, 0x9d, - 0xb1, 0x6c, 0x45, 0x55, 0x7e, 0x92, 0xd0, 0x17, 0xb8, 0x2a, 0x14, 0xd2, - 0x6d, 0x15, 0x91, 0xa0, 0x27, 0x55, 0x10, 0xf6, 0x90, 0xba, 0x26, 0x22, - 0x0c, 0x2a, 0xa3, 0xbf, 0xf3, 0xac, 0x6e, 0x0f, 0x3f, 0xfb, 0xa8, 0x3d, - 0x06, 0xb9, 0x32, 0x06, 0xb6, 0x9e, 0x84, 0x35, 0x91, 0xff, 0xe5, 0x4e, - 0x53, 0x1c, 0xe1, 0x43, 0x90, 0x7a, 0x61, 0x4d, 0x08, 0xf3, 0xae, 0xb5, - 0xde, 0x13, 0xb4, 0x6a, 0x11, 0x6d, 0xcc, 0x50, 0x99, 0xf7, 0xf7, 0x33, - 0xf9, 0x56, 0x64, 0x27, 0x71, 0x42, 0xc2, 0x21, 0x12, 0x76, 0x2a, 0xb0, - 0x12, 0xb1, 0x72, 0x28, 0xdb, 0xc3, 0xdf, 0x0a, 0x42, 0xf6, 0x40, 0xd8, - 0xbb, 0x34, 0x8c, 0x0f, 0xad, 0x17, 0xe7, 0xba, 0x22, 0x7f, 0x4e, 0x72, - 0xd2, 0x56, 0xbc, 0x93, 0x28, 0x3a, 0x37, 0x33, 0x8f, 0x22, 0xc0, 0x18, - 0x1e, 0x8b, 0x3f, 0xf7, 0x43, 0x89, 0x09, 0x1d, 0x6d, 0xba, 0xcb, 0x1d, - 0xee, 0x4d, 0x9f, 0x45, 0xbe, 0x24, 0x24, 0x86, 0xd3, 0x4c, 0xb3, 0xef, - 0x77, 0x5b, 0xa8, 0x66, 0xcb, 0x7a, 0x2f, 0x88, 0xd0, 0x98, 0xb4, 0x51, - 0x7e, 0x26, 0x6b, 0x50, 0x1d, 0xa9, 0xe4, 0xe4, 0x17, 0x90, 0xc2, 0x89, - 0x5b, 0xc5, 0xd5, 0x9f, 0x9b, 0x1d, 0x66, 0x0f, 0xec, 0x83, 0x91, 0x6e, - 0x6c, 0x20, 0x3f, 0x55, 0xea, 0xd7, 0x4e, 0x76, 0xc9, 0x55, 0xf1, 0xbc, - 0xbc, 0x9e, 0x9d, 0x3b, 0x63, 0x7c, 0x71, 0xbd, 0x6f, 0x2f, 0xfe, 0xe0, - 0x19, 0x8e, 0xef, 0xca, 0x19, 0x8b, 0xf7, 0x00, 0xa5, 0x08, 0x6a, 0xf1, - 0xaa, 0xf3, 0x4e, 0x78, 0x36, 0xbd, 0x8f, 0xdf, 0x36, 0x30, 0xe3, 0xd3, - 0xdb, 0x24, 0x21, 0x3c, 0xe3, 0x18, 0xb4, 0x0d, 0xc5, 0x04, 0x88, 0x48, - 0x82, 0xe3, 0x06, 0x45, 0xe1, 0x6f, 0xe5, 0x2d, 0x6c, 0x54, 0x65, 0x6c, - 0x61, 0xac, 0xf8, 0x96, 0x3c, 0xf9, 0x31, 0xa5, 0x78, 0xb1, 0xd3, 0x96, - 0x01, 0xf0, 0x14, 0xc2, 0xbb, 0xdd, 0x3e, 0x4f, 0x85, 0xb2, 0xa3, 0x81, - 0xff, 0x14, 0xf0, 0xec, 0x41, 0x4a, 0x5e, 0x63, 0x33, 0xd3, 0x9b, 0xce, - 0x9d, 0x26, 0x47, 0x17, 0x2e, 0x33, 0xfb, 0xb0, 0x72, 0x49, 0x42, 0x64, - 0xe2, 0xd9, 0x41, 0xc1, 0x3c, 0x4b, 0x7e, 0xe7, 0x39, 0xd6, 0x11, 0xc9, - 0x2b, 0x32, 0x6a, 0x39, 0xe8, 0x74, 0xf1, 0x40, 0x2f, 0xdf, 0x77, 0x19, - 0x32, 0x75, 0x79, 0xb2, 0x5e, 0x55, 0x40, 0xce, 0x39, 0x16, 0x3b, 0xf8, - 0x6d, 0x59, 0x7f, 0x2a, 0xa4, 0x00, 0xd7, 0x28, 0x98, 0x61, 0x77, 0xed, - 0xff, 0xd7, 0x24, 0xc7, 0x4a, 0x9c, 0xd2, 0x59, 0xaa, 0x30, 0x17, 0xdf, - 0x3c, 0xb9, 0x82, 0x27, 0xaf, 0x2d, 0xa3, 0x15, 0x52, 0xb7, 0x25, 0x83, - 0x60, 0xed, 0x37, 0xf1, 0x45, 0x4b, 0x9c, 0xf5, 0x09, 0xa9, 0x1b, 0xbc, - 0x13, 0x47, 0xd5, 0x8b, 0x03, 0xd3, 0x0d, 0x51, 0xb2, 0x62, 0x5b, 0x69, - 0x66, 0x8a, 0x7b, 0xfb, 0x43, 0x6b, 0x76, 0x88, 0x5b, 0x6e, 0x6e, 0x6b, - 0x2f, 0x4c, 0x95, 0x25, 0x2e, 0x6f, 0x55, 0xf8, 0x4c, 0xdb, 0x3f, 0x51, - 0x34, 0x78, 0x3c, 0xc7, 0x2a, 0x10, 0xa7, 0x1b, 0x28, 0x80, 0x56, 0xc9, - 0x0c, 0x03, 0xdd, 0xe7, 0x67, 0x44, 0xfe, 0x7f, 0xdc, 0xcd, 0x14, 0x15, - 0xcb, 0xe0, 0x74, 0x38, 0xc9, 0xc7, 0x1c, 0xe2, 0x9f, 0x81, 0xab, 0xfc, - 0x02, 0x4c, 0xb4, 0x6c, 0x86, 0x1d, 0x73, 0x4b, 0x77, 0x4e, 0x35, 0x78, - 0xb5, 0x68, 0x60, 0xc2, 0x62, 0xf0, 0xa5, 0xa3, 0x0b, 0xf1, 0xea, 0x33, - 0xea, 0x95, 0x24, 0x06, 0x6f, 0xca, 0x19, 0x32, 0xfa, 0xbe, 0xbe, 0x80, - 0xda, 0x43, 0xac, 0x51, 0xd1, 0xa8, 0xc1, 0x6e, 0xc6, 0xd8, 0xaf, 0xaa, - 0xde, 0x1c, 0xf4, 0xfb, 0x49, 0x2d, 0xea, 0xa6, 0x9d, 0x47, 0x92, 0x0b, - 0x6d, 0x9c, 0x75, 0xda, 0xd2, 0x6d, 0x64, 0xbd, 0x08, 0x13, 0x38, 0x3c, - 0xfd, 0x57, 0x5b, 0x0b, 0x05, 0xb4, 0x7c, 0x7a, 0x46, 0x5c, 0x6e, 0x24, - 0x7a, 0x96, 0xb1, 0x57, 0x4f, 0x62, 0x43, 0x00, 0x13, 0x6b, 0x9d, 0x30, - 0xa9, 0x35, 0x5a, 0x4a, 0xd0, 0x2a, 0xd1, 0xcf, 0xdd, 0xc8, 0x14, 0x41, - 0x7c, 0x78, 0xad, 0xf7, 0xa4, 0x5d, 0x32, 0x38, 0x6a, 0x41, 0xc9, 0xd2, - 0xe3, 0xc0, 0x9d, 0xf5, 0x84, 0x25, 0x2b, 0xfe, 0x09, 0x99, 0xdc, 0x82, - 0x55, 0x86, 0x2d, 0x08, 0x6a, 0xee, 0x1f, 0xb6, 0xa0, 0xb3, 0xfd, 0x3f, - 0x23, 0x0b, 0xa4, 0x30, 0x96, 0xa0, 0x70, 0xda, 0xd9, 0xda, 0xb6, 0xbf, - 0xa6, 0x19, 0x00, 0x06, 0xa4, 0x6c, 0xb5, 0xb0, 0x46, 0x71, 0x0d, 0x98, - 0x60, 0x85, 0xbd, 0x45, 0x84, 0x86, 0xc9, 0x18, 0x62, 0xed, 0x4d, 0x8a, - 0x23, 0x34, 0xd0, 0x00, 0xdc, 0x43, 0x7c, 0xa6, 0x94, 0x65, 0x58, 0x64, - 0x41, 0xa2, 0xd8, 0x40, 0xc0, 0x74, 0x90, 0x9b, 0xda, 0x0c, 0xdc, 0x94, - 0x7b, 0x4b, 0xd7, 0x6e, 0x42, 0xbe, 0x99, 0xac, 0x17, 0x58, 0x71, 0x03, - 0x88, 0x1f, 0xe3, 0xc9, 0xac, 0x69, 0x10, 0xf4, 0x2d, 0xf7, 0xd3, 0x9b, - 0xb5, 0xa4, 0xcd, 0xf7, 0xa2, 0xdc, 0x04, 0x82, 0x32, 0x12, 0x18, 0x83, - 0x35, 0xd3, 0x0e, 0xca, 0xa8, 0x6c, 0x5d, 0x5c, 0x78, 0xce, 0x4c, 0xa9, - 0x13, 0x8d, 0xce, 0x3f, 0xac, 0xc8, 0x00, 0x18, 0x9f, 0x34, 0xab, 0xc3, - 0x8e, 0xe3, 0x4d, 0x58, 0xbc, 0x79, 0xa2, 0x04, 0x97, 0x6c, 0x25, 0x38, - 0x9b, 0x45, 0x28, 0x39, 0x92, 0x57, 0x13, 0xac, 0x55, 0xb8, 0x63, 0x09, - 0xc1, 0x75, 0x61, 0x3a, 0x13, 0x20, 0xf4, 0x7c, 0x74, 0xa2, 0xcf, 0xc2, - 0x5d, 0x18, 0xe2, 0x91, 0x24, 0x4f, 0xa3, 0x6e, 0x0a, 0x70, 0x8d, 0x6f, - 0x8f, 0xd3, 0xa6, 0x2e, 0x32, 0x4c, 0x44, 0x40, 0xd0, 0xf1, 0xe2, 0xe9, - 0xb5, 0xf9, 0x14, 0xe5, 0x73, 0x4d, 0x80, 0xc4, 0x5c, 0xc0, 0x32, 0xd4, - 0xb1, 0x9a, 0xf6, 0x94, 0x3a, 0xc8, 0x04, 0x61, 0xb5, 0xb3, 0x5e, 0xbb, - 0x44, 0x8e, 0xdf, 0x4e, 0xb3, 0x2a, 0xad, 0xed, 0xdd, 0x9e, 0x71, 0xf6, - 0x48, 0x41, 0xb5, 0xdb, 0xf8, 0x81, 0x28, 0x81, 0x29, 0xf0, 0x8e, 0xb9, - 0xb7, 0xb3, 0x08, 0x60, 0x99, 0xb8, 0xef, 0x97, 0x8c, 0x9a, 0x65, 0x7a, - 0x3b, 0x13, 0x38, 0xbd, 0x07, 0x80, 0xc2, 0xba, 0x31, 0x4c, 0x56, 0x10, - 0x2f, 0x87, 0xbd, 0x9c, 0xb5, 0x13, 0x90, 0x83, 0x34, 0x2e, 0x65, 0xb4, - 0x0c, 0x84, 0xd1, 0x93, 0x4e, 0xaa, 0x26, 0x76, 0xf2, 0xc0, 0xdd, 0xe0, - 0x90, 0x16, 0x02, 0x1f, 0x3c, 0xbe, 0x51, 0xf6, 0xbf, 0xbc, 0xca, 0x22, - 0x46, 0xdb, 0x2b, 0xb9, 0x4f, 0x23, 0xe9, 0xee, 0x7c, 0x8f, 0x33, 0xab, - 0x4f, 0x98, 0xa8, 0xe5, 0x0e, 0xb9, 0x5a, 0x38, 0x9a, 0xae, 0xca, 0x9c, - 0xbe, 0x76, 0x28, 0xb6, 0xfd, 0x42, 0x14, 0x07, 0xbe, 0x2a, 0xdb, 0xab, - 0x0f, 0x03, 0x80, 0xfe, 0x78, 0x30, 0x5d, 0xea, 0x66, 0x19, 0xcf, 0x35, - 0x6d, 0x25, 0xe5, 0x55, 0xeb, 0x79, 0xd1, 0x2d, 0x97, 0x81, 0x7c, 0x15, - 0xfc, 0xfa, 0x5d, 0xbf, 0x85, 0xe0, 0x06, 0x4e, 0xf5, 0x36, 0xd6, 0x31, - 0x62, 0x11, 0x5f, 0xb8, 0x2b, 0x08, 0xdd, 0x50, 0x60, 0x91, 0x45, 0x0d, - 0xbd, 0xa7, 0x0a, 0x2a, 0xdf, 0x44, 0xa6, 0x07, 0xf4, 0x53, 0xe1, 0x40, - 0xa2, 0xcc, 0xa8, 0xa8, 0x86, 0x76, 0x64, 0xc8, 0xd8, 0x6c, 0x48, 0x0b, - 0x38, 0xbf, 0xe2, 0x13, 0xd0, 0xaa, 0xc4, 0xff, 0x83, 0xc0, 0x5e, 0xda, - 0x69, 0x38, 0xf3, 0x5b, 0xba, 0x82, 0x48, 0xa8, 0x28, 0x0d, 0xb2, 0xc6, - 0x77, 0xdc, 0x37, 0x8e, 0xb4, 0x94, 0x22, 0xa1, 0x42, 0xa9, 0xf3, 0x3e, - 0x3c, 0x1e, 0x75, 0x43, 0xdc, 0x0b, 0x9c, 0x77, 0x84, 0x2f, 0xf5, 0x27, - 0xd8, 0xcb, 0x0f, 0x5a, 0x87, 0x30, 0x52, 0x71, 0x71, 0xa0, 0x6d, 0xf3, - 0xaf, 0x2e, 0x68, 0xed, 0xa2, 0x6e, 0x10, 0x2c, 0xc6, 0xdb, 0xc0, 0x77, - 0x52, 0xbc, 0xe2, 0xa3, 0x69, 0x5f, 0x2f, 0x0f, 0x68, 0xd9, 0x2d, 0x29, - 0x3e, 0xf0, 0x83, 0x6f, 0x05, 0xca, 0xc9, 0x2a, 0x72, 0x86, 0x95, 0xbc, - 0xde, 0xab, 0x44, 0x7f, 0xbc, 0x2a, 0xad, 0xa8, 0x29, 0x03, 0x3e, 0xd4, - 0x0e, 0x3d, 0x2f, 0xde, 0x0e, 0xc4, 0xcf, 0x61, 0x47, 0xb7, 0x29, 0x77, - 0xd1, 0x58, 0x43, 0xf8, 0xa2, 0xaa, 0x1d, 0xb1, 0x8d, 0x6f, 0x31, 0xb3, - 0x5e, 0xab, 0x83, 0x55, 0xa2, 0xe0, 0xab, 0x60, 0x9e, 0x31, 0x0b, 0xf6, - 0x9c, 0x9e, 0x13, 0x4f, 0xe7, 0x26, 0xc3, 0x97, 0x89, 0xea, 0x60, 0x1d, - 0xeb, 0xd9, 0xfc, 0x11, 0xdf, 0xde, 0xe7, 0xd2, 0x3b, 0x65, 0xd8, 0x19, - 0x8e, 0xbd, 0x4d, 0xaf, 0xcc, 0xa5, 0x46, 0x02, 0x0c, 0xd7, 0x9f, 0x2f, - 0xf7, 0xf3, 0x38, 0xb5, 0x01, 0x56, 0xc4, 0xef, 0x0a, 0x19, 0xca, 0x28, - 0x1a, 0xc0, 0x1a, 0x55, 0x64, 0x81, 0x19, 0xf6, 0x52, 0xeb, 0xef, 0x70, - 0xa8, 0xfb, 0xa2, 0xb3, 0xae, 0x57, 0xd1, 0x4c, 0x3c, 0xc1, 0x82, 0x49, - 0x39, 0x04, 0x19, 0xdd, 0xab, 0xb6, 0x31, 0x7c, 0xde, 0x9d, 0xee, 0xc9, - 0xf6, 0xbd, 0x5c, 0xf4, 0xff, 0xfb, 0x5c, 0xf2, 0x02, 0x08, 0x41, 0x4f, - 0xff, 0xa9, 0xb2, 0x95, 0x0b, 0x01, 0xa9, 0x3c, 0xd3, 0x71, 0x48, 0xef, - 0xf1, 0x51, 0xea, 0xe8, 0xc1, 0xff, 0x62, 0xb2, 0x95, 0xc7, 0xd6, 0xc1, - 0xc7, 0xaa, 0xd6, 0x05, 0xd7, 0x64, 0xe7, 0x6e, 0x18, 0xbb, 0x51, 0xa2, - 0x7f, 0x19, 0x0f, 0x60, 0x2a, 0x3c, 0xf9, 0x70, 0xad, 0xb6, 0xe0, 0xa7, - 0xb1, 0x21, 0x9c, 0x45, 0xa9, 0x4f, 0x2b, 0xda, 0x53, 0x32, 0x07, 0x46, - 0x12, 0xb6, 0xf9, 0x97, 0x8a, 0x39, 0xc7, 0xc7, 0xb8, 0x19, 0xca, 0x18, - 0x74, 0xcc, 0x10, 0xef, 0x4d, 0x12, 0x90, 0xfd, 0xbb, 0xd8, 0x1b, 0x3d, - 0x31, 0x34, 0x79, 0x1d, 0x0b, 0x8c, 0x5e, 0xfd, 0x99, 0xbf, 0x78, 0x56, - 0x7b, 0x25, 0x24, 0x4f, 0x4b, 0xda, 0x8d, 0xbf, 0xd6, 0x5f, 0xb7, 0xfa, - 0x63, 0xf1, 0x99, 0xa7, 0x63, 0x39, 0x82, 0x1a, 0x79, 0x5b, 0x0c, 0xc4, - 0xcd, 0xfd, 0xfb, 0x66, 0xdc, 0xc7, 0x22, 0xa8, 0x44, 0x19, 0xc5, 0xf3, - 0xeb, 0x44, 0xbb, 0x98, 0xc0, 0x47, 0xc3, 0xa3, 0x0c, 0x12, 0x82, 0xd8, - 0x75, 0x66, 0x50, 0x1f, 0xae, 0xe0, 0x05, 0x5a, 0x42, 0x78, 0x9a, 0xbf, - 0x70, 0xd5, 0x20, 0xae, 0xb1, 0xf5, 0x91, 0xe4, 0x33, 0x46, 0x58, 0x6a, - 0xf8, 0x7c, 0xe5, 0x06, 0x98, 0xbc, 0xdb, 0xd6, 0xfd, 0xcb, 0xee, 0x6b, - 0x6b, 0x8b, 0xd4, 0x96, 0x25, 0xbd, 0xe8, 0x44, 0xb0, 0x62, 0xcb, 0xaf, - 0xad, 0x11, 0x55, 0xe7, 0x69, 0xe2, 0x6a, 0x78, 0x44, 0xe2, 0x93, 0xdc, - 0x0f, 0x4e, 0x63, 0x18, 0x69, 0xda, 0xe8, 0xcc, 0xae, 0x35, 0x20, 0x9a, - 0xd7, 0x49, 0xe7, 0xf0, 0xf7, 0x94, 0x10, 0xea, 0x0f, 0x2c, 0x4e, 0x1b, - 0xfe, 0x0d, 0xc5, 0xc1, 0x0f, 0x88, 0x84, 0x99, 0x34, 0x8d, 0xd8, 0x25, - 0xfa, 0x88, 0x84, 0x29, 0x98, 0xd1, 0x6d, 0x51, 0x70, 0xd5, 0x58, 0x7c, - 0x65, 0xd8, 0x0c, 0x53, 0xd5, 0x78, 0xb2, 0x7c, 0x0d, 0x60, 0x0a, 0x82, - 0x37, 0x20, 0x12, 0x9c, 0x37, 0x20, 0xca, 0xdc, 0xbd, 0xfd, 0xbf, 0xe8, - 0xdf, 0xe3, 0x16, 0x43, 0x4d, 0x1d, 0xb5, 0x3e, 0x75, 0x83, 0xfb, 0x43, - 0x78, 0x46, 0xe6, 0x9c, 0x00, 0x18, 0xde, 0xa6, 0xdc, 0xfa, 0x57, 0x3c, - 0x7b, 0x98, 0x0e, 0xc9, 0x39, 0x1e, 0x01, 0xc1, 0x7d, 0x5f, 0x29, 0x47, - 0x40, 0xf4, 0x1c, 0x56, 0x0f, 0x02, 0xc0, 0xa2, 0xde, 0x1a, 0x3c, 0x9f, - 0x64, 0x1a, 0x8c, 0x42, 0x16, 0x96, 0xb0, 0x30, 0x25, 0x99, 0xb5, 0xbf, - 0xf7, 0x4e, 0xce, 0x02, 0xd0, 0x54, 0x55, 0x29, 0xa3, 0xf6, 0xf0, 0x6d, - 0xc8, 0x10, 0x38, 0x96, 0x2d, 0xfa, 0x3e, 0x30, 0xae, 0xa0, 0xea, 0x0f, - 0x48, 0x73, 0x93, 0x69, 0x94, 0x4e, 0xe8, 0x44, 0xdc, 0x16, 0xe4, 0xad, - 0x9b, 0xa1, 0x38, 0x09, 0x82, 0x9d, 0x4b, 0x7c, 0xf5, 0x32, 0x95, 0x72, - 0x27, 0x43, 0x0e, 0x86, 0x00, 0x0e, 0x23, 0x94, 0x5c, 0x85, 0x66, 0xe3, - 0x39, 0x79, 0xa3, 0x70, 0xb5, 0x47, 0x94, 0x0e, 0x11, 0xbb, 0x6b, 0x51, - 0x4d, 0x91, 0xc6, 0xc8, 0x2d, 0xab, 0x4c, 0xfc, 0x52, 0x42, 0x99, 0x74, - 0x13, 0x86, 0xb2, 0x1f, 0x1c, 0x70, 0x71, 0x36, 0xbf, 0xa5, 0x92, 0x38, - 0xda, 0x33, 0x8e, 0x97, 0x89, 0xae, 0xf0, 0xd1, 0x06, 0x6f, 0x86, 0xc9, - 0x5d, 0x2a, 0xe7, 0x80, 0x04, 0x94, 0xdc, 0xdb, 0xd5, 0x5a, 0x6d, 0x0c, - 0xac, 0x84, 0x07, 0xfd, 0xcb, 0xf5, 0xa7, 0x7c, 0x96, 0xc5, 0x4b, 0xd6, - 0x00, 0x43, 0x9e, 0x34, 0x27, 0x56, 0x01, 0x18, 0x8e, 0x05, 0xe5, 0x20, - 0x38, 0xd0, 0x67, 0x44, 0xe0, 0xc5, 0x9f, 0x10, 0x48, 0x9d, 0x6a, 0xf5, - 0x79, 0x84, 0x83, 0x32, 0xc3, 0x61, 0xf5, 0x80, 0xd9, 0xbf, 0xfe, 0x7e, - 0xca, 0xcc, 0xad, 0x8d, 0x40, 0x58, 0x62, 0xc6, 0xe5, 0x24, 0x17, 0x75, - 0x58, 0x7d, 0x48, 0x85, 0xc9, 0xac, 0xc6, 0x1e, 0x36, 0x83, 0x76, 0xcf, - 0xc3, 0x9e, 0xb2, 0xd6, 0xc5, 0x76, 0x4e, 0x67, 0xfd, 0x24, 0xcd, 0xb6, - 0x7e, 0xf7, 0x92, 0x2a, 0x30, 0x9d, 0xfd, 0x36, 0x81, 0x9a, 0xe6, 0x25, - 0x31, 0x1f, 0xb8, 0x52, 0xb9, 0x7b, 0x56, 0xf5, 0xff, 0x9a, 0xdf, 0x5a, - 0x1a, 0xf8, 0xa1, 0x30, 0xc5, 0x8c, 0x0d, 0x3c, 0xc4, 0x5f, 0x33, 0xaf, - 0x36, 0xe3, 0x8e, 0x4e, 0x45, 0x22, 0xa4, 0xfa, 0x5f, 0x34, 0x7a, 0x42, - 0x50, 0x14, 0x23, 0xa2, 0x2f, 0xb6, 0xea, 0xc6, 0xe3, 0xd7, 0xa6, 0x73, - 0x83, 0xb3, 0xdc, 0xd6, 0x1b, 0x65, 0xa8, 0xae, 0xc6, 0xc2, 0xe6, 0x10, - 0xaf, 0x46, 0x5c, 0x8e, 0xbe, 0x88, 0x11, 0xae, 0x34, 0xe5, 0x95, 0xf0, - 0x49, 0x08, 0x1c, 0xfa, 0x30, 0xb6, 0x07, 0x4b, 0x71, 0x6e, 0x88, 0xaa, - 0xf2, 0xfe, 0xc1, 0x01, 0x42, 0xba, 0x38, 0x50, 0xb8, 0xdf, 0x14, 0x11, - 0x5f, 0xf8, 0x58, 0x19, 0x9d, 0x18, 0xa2, 0x0d, 0x0a, 0x7d, 0x3e, 0xed, - 0x84, 0xfa, 0xb4, 0x17, 0x78, 0x7f, 0xd3, 0x86, 0x0f, 0xd2, 0xa0, 0xbf, - 0xc6, 0xdf, 0xaa, 0xdc, 0x6c, 0xd0, 0x04, 0x84, 0x18, 0xe4, 0x0e, 0x2f, - 0x27, 0x50, 0x1f, 0xa0, 0xe4, 0x03, 0x65, 0xce, 0xd0, 0xdf, 0x42, 0x2b, - 0x69, 0x17, 0x9b, 0xa6, 0x27, 0xb7, 0xbc, 0x08, 0x26, 0xe5, 0x76, 0x82, - 0x69, 0x99, 0x7d, 0x7b, 0xc6, 0x4b, 0x61, 0xe5, 0xac, 0x21, 0x4b, 0xe1, - 0x7f, 0x05, 0x7a, 0x3f, 0xdb, 0x74, 0x21, 0x58, 0xe2, 0x49, 0x65, 0x6d, - 0xc6, 0xc0, 0x94, 0x15, 0x58, 0x90, 0x97, 0xc5, 0xe2, 0xaf, 0xe0, 0x2f, - 0x9d, 0xc5, 0xdb, 0xde, 0xc9, 0xbc, 0xc4, 0x11, 0xf3, 0xe4, 0x40, 0x2d, - 0xbe, 0x36, 0x59, 0x58, 0x0f, 0x10, 0x05, 0x6e, 0x8b, 0x12, 0x11, 0xfe, - 0xdb, 0x96, 0x9a, 0x2b, 0x9c, 0x72, 0xc3, 0xa4, 0xbd, 0xfa, 0x08, 0x83, - 0xed, 0x20, 0x2e, 0x0e, 0xd3, 0x80, 0x35, 0xb7, 0xda, 0xdd, 0xaa, 0xff, - 0xb1, 0x63, 0x67, 0x53, 0xf8, 0x6e, 0x75, 0x2f, 0x7d, 0x11, 0x1b, 0x4e, - 0xb8, 0x5e, 0x4f, 0xb3, 0x30, 0xc7, 0xfe, 0xc1, 0xa3, 0xc8, 0x3f, 0x3b, - 0x2d, 0x28, 0x92, 0xd0, 0xa8, 0x65, 0x5f, 0x1e, 0x4e, 0xf7, 0xf3, 0xe6, - 0x8f, 0x30, 0x7c, 0x55, 0x8a, 0x47, 0x4a, 0xb3, 0x86, 0xd5, 0x03, 0x5c, - 0x9b, 0x96, 0x54, 0xad, 0xee, 0x80, 0x7a, 0x76, 0xa6, 0x98, 0x65, 0x69, - 0xdf, 0x4f, 0x85, 0x63, 0xa4, 0xdf, 0xf1, 0xcc, 0x1a, 0x64, 0xa0, 0x8a, - 0x81, 0x09, 0x2c, 0xfd, 0x66, 0xc7, 0xb6, 0xd2, 0x41, 0x14, 0xeb, 0xad, - 0x25, 0xef, 0x72, 0xb1, 0xba, 0x69, 0xb1, 0x9b, 0x74, 0x8d, 0x00, 0xc6, - 0xd3, 0x10, 0x40, 0x8d, 0x7f, 0xf7, 0xdc, 0xf6, 0x29, 0x2d, 0xff, 0xe9, - 0xb5, 0x6a, 0x5d, 0x3b, 0x25, 0xb6, 0x24, 0xe1, 0x30, 0x97, 0xfc, 0xa4, - 0xf3, 0xf6, 0x2c, 0x7d, 0x47, 0x0a, 0xff, 0x20, 0x45, 0xd2, 0x58, 0x27, - 0x67, 0x53, 0x43, 0x2c, 0x58, 0xdd, 0x64, 0x5d, 0xb5, 0xd5, 0x47, 0x5a, - 0x9b, 0x6f, 0xb0, 0x9e, 0x33, 0x61, 0xa1, 0x15, 0xc8, 0x5b, 0x79, 0x16, - 0x79, 0x2c, 0x1a, 0xfd, 0x59, 0xf2, 0x7b, 0xd7, 0x8c, 0xa5, 0xf4, 0xbc, - 0x6b, 0x30, 0x7c, 0xe5, 0x70, 0xd0, 0x18, 0x6e, 0xf0, 0x5c, 0x67, 0x16, - 0xe1, 0x7e, 0xff, 0xc8, 0x2f, 0x11, 0x90, 0x7c, 0x1f, 0xf4, 0xd2, 0x21, - 0x0a, 0x74, 0x1a, 0x76, 0xb1, 0xad, 0xc3, 0xf8, 0x77, 0xff, 0xbb, 0x3a, - 0x89, 0x9a, 0xe6, 0x80, 0xed, 0xf4, 0x79, 0x5f, 0xa7, 0xef, 0xd8, 0x53, - 0x6e, 0x67, 0xce, 0xb6, 0xe4, 0x25, 0x2e, 0xf9, 0xaf, 0x60, 0x53, 0x95, - 0x31, 0xd8, 0x95, 0x9f, 0x4c, 0x9c, 0x2b, 0x55, 0x8b, 0x78, 0x0d, 0x17, - 0x96, 0xb0, 0xdf, 0xa3, 0x04, 0xa4, 0xc1, 0xe1, 0x4a, 0x0d, 0x9e, 0x4d, - 0xcb, 0x2d, 0x96, 0x83, 0xa9, 0xea, 0xd4, 0xcc, 0xf1, 0x78, 0x47, 0xed, - 0xb8, 0xbd, 0x29, 0x4c, 0x46, 0xc8, 0x68, 0x82, 0x6a, 0x17, 0xfa, 0x87, - 0x36, 0xf9, 0xe9, 0xa9, 0x52, 0xc3, 0x47, 0x7d, 0x3d, 0x69, 0xa3, 0x54, - 0xd8, 0x39, 0xd9, 0x57, 0x37, 0xa5, 0x6e, 0xbd, 0xb9, 0x08, 0x03, 0x52, - 0x84, 0xa5, 0xd4, 0x2d, 0x5c, 0xd1, 0xd2, 0x54, 0xad, 0xb5, 0xfa, 0x5a, - 0x6b, 0x69, 0xb6, 0xb0, 0x99, 0xaa, 0x73, 0xab, 0x6e, 0x24, 0xec, 0x63, - 0x6c, 0x3e, 0x33, 0x4b, 0x17, 0x1c, 0xd8, 0xac, 0xf9, 0x8d, 0xa7, 0xef, - 0xd2, 0x00, 0x8c, 0x84, 0xfa, 0x2d, 0x41, 0xce, 0xaf, 0x2b, 0x43, 0x49, - 0xa3, 0xae, 0xab, 0x81, 0xee, 0xc8, 0xf3, 0x02, 0xd7, 0x39, 0xdc, 0x43, - 0x68, 0xff, 0xf4, 0xba, 0xf0, 0xdd, 0x67, 0x6e, 0x4f, 0x50, 0x8c, 0xdb, - 0xb2, 0xb1, 0x9b, 0x7c, 0x45, 0xd4, 0x28, 0xc4, 0xff, 0x59, 0xe3, 0x6f, - 0x77, 0x2b, 0x1a, 0x69, 0xd6, 0x7f, 0xfe, 0x8d, 0x66, 0x3f, 0x83, 0x94, - 0xe5, 0xd9, 0x0d, 0x9a, 0xcb, 0x4e, 0x88, 0xb1, 0x22, 0xe0, 0xe3, 0xb2, - 0x3b, 0x26, 0x46, 0x1d, 0xb1, 0x19, 0x94, 0xc3, 0xf2, 0xcc, 0xcb, 0xa3, - 0xde, 0xb5, 0xee, 0xbf, 0x7a, 0x69, 0x59, 0xb7, 0x07, 0xb7, 0x79, 0x53, - 0x17, 0xb1, 0x63, 0xeb, 0xb9, 0x56, 0xe6, 0x08, 0x6c, 0x06, 0xa1, 0xec, - 0x9e, 0x48, 0x4e, 0xcb, 0xb2, 0xa2, 0xc7, 0x65, 0x87, 0x4d, 0x9d, 0x2a, - 0xfd, 0x27, 0xbf, 0x53, 0xca, 0xf4, 0x7f, 0x5d, 0xdf, 0x32, 0x0c, 0x55, - 0xe4, 0xff, 0xa3, 0x5f, 0xb2, 0xa4, 0xc4, 0x86, 0x16, 0x57, 0x79, 0xbb, - 0xb3, 0xf4, 0xb5, 0x32, 0x0b, 0x09, 0x02, 0x4b, 0x7c, 0x38, 0xa1, 0xc7, - 0x79, 0x19, 0x0b, 0xbb, 0x9b, 0xeb, 0xca, 0x86, 0x1c, 0x84, 0x43, 0x6e, - 0x02, 0x0e, 0x86, 0x20, 0xee, 0x47, 0x5d, 0x8c, 0xdd, 0xf9, 0x36, 0xf7, - 0x06, 0x97, 0x5c, 0x92, 0xe9, 0xe8, 0xb8, 0x5b, 0xf5, 0x99, 0x8c, 0x0d, - 0x54, 0x38, 0xcc, 0x73, 0xba, 0x99, 0xd1, 0x7b, 0x46, 0x4e, 0xfa, 0x10, - 0x43, 0x3d, 0x1f, 0xd8, 0xd2, 0x38, 0x87, 0x28, 0x85, 0x61, 0x38, 0x96, - 0xef, 0x6a, 0x48, 0xb0, 0x72, 0xb8, 0x6a, 0xcb, 0x91, 0xb6, 0x2d, 0x67, - 0x25, 0xbe, 0x64, 0x4d, 0xf4, 0x2e, 0x46, 0x2c, 0x68, 0x2c, 0xef, 0x8c, - 0x75, 0x9d, 0x6e, 0xde, 0xcd, 0xaa, 0xe3, 0x88, 0x2d, 0x98, 0x74, 0xae, - 0xa5, 0xbc, 0x0a, 0x80, 0x4b, 0x6b, 0x67, 0xfe, 0xc7, 0xcf, 0x8c, 0x4e, - 0x53, 0x4e, 0x52, 0xdf, 0x50, 0x79, 0x3a, 0x9e, 0xc6, 0xb6, 0x0c, 0x74, - 0xff, 0x18, 0xda, 0xb6, 0xc9, 0x40, 0x70, 0x27, 0xa8, 0x16, 0x70, 0x88, - 0x38, 0xb4, 0x0f, 0x6d, 0xf1, 0x5d, 0xe3, 0x1a, 0xeb, 0x27, 0x9a, 0x8b, - 0x39, 0xeb, 0xcf, 0xff, 0x7b, 0x66, 0xbe, 0x17, 0x53, 0xcb, 0x2f, 0x17, - 0xc3, 0xf3, 0x4b, 0x2b, 0xaf, 0x2c, 0x90, 0x32, 0x8a, 0x31, 0x49, 0x70, - 0x0a, 0xed, 0x7f, 0xad, 0xc6, 0xc9, 0xf4, 0x20, 0x4c, 0x08, 0x36, 0x17, - 0xbe, 0x97, 0x26, 0xff, 0x0d, 0x26, 0x5b, 0x76, 0x83, 0x79, 0x78, 0xa4, - 0x11, 0xf7, 0x90, 0xcf, 0x1c, 0x9d, 0xee, 0xa2, 0x1c, 0xc1, 0xc4, 0x57, - 0x9c, 0xb1, 0x1d, 0xc4, 0xfb, 0xf9, 0xa8, 0x87, 0x66, 0xe7, 0xa3, 0xf1, - 0xe1, 0x43, 0xb9, 0x16, 0x56, 0x7b, 0x52, 0x1d, 0xa0, 0xf4, 0x7b, 0xa9, - 0xee, 0x26, 0x16, 0x5a, 0x2f, 0xdb, 0xf9, 0x17, 0x30, 0x29, 0x47, 0xcc, - 0x98, 0x54, 0x8a, 0x74, 0xd8, 0x11, 0xab, 0xbc, 0x6b, 0xb3, 0x02, 0x55, - 0x8c, 0xe6, 0xf2, 0xa0, 0x41, 0xa3, 0xfb, 0xe8, 0x0d, 0xa9, 0x81, 0xea, - 0x50, 0x05, 0x4f, 0x56, 0x96, 0x18, 0x9a, 0x87, 0x98, 0x4e, 0xf3, 0x7d, - 0xbc, 0x37, 0x5d, 0xf6, 0xa1, 0x6c, 0x1b, 0x6c, 0x59, 0x75, 0x87, 0x41, - 0xb9, 0xa8, 0xe6, 0xff, 0xb9, 0x0a, 0x48, 0x38, 0x0c, 0x01, 0xe5, 0xf7, - 0xc5, 0x0d, 0x43, 0x76, 0xfc, 0xee, 0x89, 0xe5, 0xa1, 0x67, 0x01, 0x64, - 0x15, 0x45, 0x0e, 0xf5, 0x9c, 0xe7, 0xc4, 0x76, 0x4b, 0x3d, 0xc9, 0xd7, - 0x0e, 0x6c, 0x99, 0xa0, 0xd8, 0x50, 0x44, 0xdc, 0x3a, 0xcf, 0xf8, 0xbf, - 0x05, 0x33, 0x1c, 0xd2, 0xbd, 0xe0, 0x5f, 0xf5, 0x64, 0xb0, 0x6b, 0x94, - 0xec, 0x73, 0x06, 0xd7, 0x03, 0xef, 0xdf, 0xd0, 0xfe, 0x70, 0xf2, 0x23, - 0xb4, 0x47, 0xae, 0x6e, 0xcb, 0x23, 0xc4, 0x12, 0xe1, 0x72, 0xd0, 0xd0, - 0xa9, 0x67, 0x80, 0x4d, 0x8d, 0x8f, 0x92, 0x54, 0xce, 0xce, 0x81, 0xae, - 0x22, 0xf3, 0xaa, 0xec, 0x5f, 0x5b, 0xda, 0xed, 0xd5, 0xbc, 0x43, 0x1a, - 0x3d, 0xd0, 0x5f, 0xa2, 0xb8, 0x25, 0x6d, 0x1c, 0x21, 0x75, 0x32, 0xf7, - 0x35, 0x8f, 0xae, 0xc1, 0x1b, 0x6d, 0x50, 0xa0, 0x9b, 0xf9, 0x5e, 0xe6, - 0x2a, 0x08, 0xf7, 0x30, 0xac, 0xc4, 0xfb, 0x6b, 0x05, 0x48, 0x47, 0x3a, - 0x78, 0x0b, 0x36, 0x82, 0x89, 0xac, 0x91, 0x94, 0xd5, 0x87, 0xd8, 0x69, - 0x59, 0x7b, 0x6e, 0xb6, 0x60, 0xce, 0xa0, 0x56, 0x95, 0x74, 0x92, 0xb4, - 0x68, 0x4d, 0x04, 0x4b, 0xfe, 0xd7, 0xcf, 0x25, 0x68, 0x73, 0x7d, 0x6e, - 0xc7, 0xa1, 0x47, 0x5d, 0x95, 0xa1, 0x05, 0x06, 0x6d, 0xe4, 0x63, 0xdc, - 0x30, 0x7a, 0x19, 0xb3, 0xf2, 0x18, 0x32, 0xda, 0x09, 0xfb, 0x37, 0x96, - 0x7e, 0x5e, 0x1f, 0xf2, 0x43, 0xe5, 0xc0, 0xe1, 0xc0, 0xa2, 0x54, 0x49, - 0x2d, 0x3a, 0x91, 0x3c, 0x72, 0x90, 0xbf, 0x56, 0xc3, 0x00, 0x30, 0xcd, - 0xd0, 0x3c, 0x0d, 0xc3, 0xe7, 0x76, 0x79, 0xaa, 0x0a, 0xc4, 0x10, 0x1e, - 0x3d, 0x80, 0x6d, 0x8b, 0xfe, 0xc6, 0xed, 0x42, 0x37, 0x1d, 0x87, 0x4b, - 0x5d, 0x98, 0xe1, 0x1a, 0x1c, 0x08, 0x61, 0xc1, 0xe2, 0x2f, 0xaf, 0x8b, - 0xc2, 0x50, 0x72, 0xad, 0xe8, 0xe5, 0x56, 0x09, 0xb4, 0xce, 0xaf, 0xbc, - 0x96, 0x0b, 0xf5, 0x89, 0xdb, 0xc8, 0x71, 0x72, 0x80, 0x09, 0xcb, 0x3d, - 0x9b, 0xf5, 0x68, 0xbf, 0xfc, 0x90, 0x95, 0x8b, 0x82, 0x83, 0xce, 0x8a, - 0xc3, 0x52, 0x58, 0xfe, 0x45, 0x13, 0x76, 0x1c, 0x4b, 0xfc, 0xf7, 0xf1, - 0x1c, 0x51, 0xaa, 0x5c, 0x70, 0x92, 0xf9, 0x69, 0x47, 0x65, 0x72, 0xf1, - 0xa9, 0xf9, 0xc0, 0xb8, 0xe0, 0xca, 0xd9, 0x92, 0xc8, 0x92, 0x0e, 0x8c, - 0x3b, 0x70, 0x92, 0xa3, 0x71, 0xd3, 0xf5, 0x4c, 0x05, 0x95, 0x56, 0x98, - 0xac, 0x86, 0x93, 0x9a, 0xb6, 0xe4, 0x5a, 0x92, 0xa6, 0x70, 0xa4, 0x06, - 0x32, 0xc7, 0x67, 0x9d, 0xbd, 0xff, 0xa2, 0x94, 0x8d, 0xf2, 0xd7, 0xe4, - 0x00, 0x36, 0xa8, 0x6b, 0x12, 0x47, 0x8c, 0xb3, 0x48, 0x97, 0xbd, 0xe2, - 0x1f, 0x2f, 0xa1, 0x00, 0x41, 0xa5, 0x3f, 0xfc, 0xa1, 0xa2, 0xc7, 0x24, - 0x4b, 0xaf, 0xc8, 0x90, 0x0d, 0x51, 0x3a, 0x5b, 0x7e, 0xe5, 0xbf, 0xd0, - 0xc6, 0xb0, 0x20, 0x61, 0xdd, 0x09, 0x10, 0x48, 0x51, 0x3e, 0xdc, 0xb8, - 0x30, 0xba, 0x12, 0x31, 0x50, 0x75, 0x8e, 0xe3, 0x40, 0x5c, 0xa7, 0x14, - 0x6e, 0xa2, 0xce, 0x36, 0x83, 0x1d, 0xdf, 0xb8, 0xd4, 0xc7, 0x50, 0xb7, - 0xf8, 0x6a, 0x57, 0x37, 0x29, 0x93, 0x57, 0xc7, 0x75, 0x6f, 0x41, 0xf8, - 0x5f, 0xf3, 0x7d, 0x9d, 0x3d, 0x8c, 0xb6, 0xb4, 0x81, 0x08, 0xf3, 0x44, - 0xdd, 0x3f, 0x63, 0xa9, 0xcd, 0xa6, 0xd7, 0x21, 0xee, 0x2d, 0x41, 0xbd, - 0xa0, 0x83, 0x05, 0xbc, 0x1d, 0x92, 0xb4, 0x1d, 0x36, 0xfb, 0xef, 0x6c, - 0x9b, 0x68, 0x93, 0x52, 0x59, 0x16, 0x43, 0x14, 0x30, 0xc3, 0x8f, 0x9d, - 0x75, 0xd1, 0x3b, 0x19, 0xfd, 0x62, 0x81, 0xf3, 0x29, 0x8e, 0xe1, 0xf8, - 0xc1, 0xba, 0x9c, 0x66, 0x95, 0x93, 0x79, 0x34, 0x25, 0x1f, 0x03, 0xf1, - 0x06, 0x06, 0xfd, 0x1c, 0x17, 0x00, 0x8e, 0x21, 0x59, 0xae, 0xae, 0x71, - 0x80, 0xe9, 0xe5, 0x5d, 0x86, 0x2c, 0xce, 0xaa, 0x45, 0x7a, 0xdf, 0xe5, - 0x3f, 0xfb, 0xf0, 0x69, 0x6c, 0xcf, 0x30, 0x97, 0x5f, 0xe1, 0xb4, 0xe8, - 0x94, 0xf0, 0x1f, 0x70, 0x6e, 0x0a, 0x4c, 0xeb, 0x08, 0xdc, 0x6f, 0xd6, - 0xe7, 0x9c, 0x3c, 0x1b, 0x16, 0xa5, 0x02, 0xff, 0x26, 0x91, 0x99, 0x6d, - 0x1a, 0x17, 0x73, 0xfe, 0xa2, 0xdd, 0xf5, 0xf2, 0x42, 0xda, 0xa6, 0xe2, - 0x7a, 0x9f, 0xd3, 0x28, 0xc5, 0x0a, 0xa8, 0x1f, 0x45, 0x78, 0xe2, 0x1c, - 0x52, 0xdd, 0x9f, 0x72, 0xf5, 0x67, 0x83, 0x56, 0x0a, 0xc2, 0x11, 0x2a, - 0x92, 0x35, 0xb5, 0xc7, 0xdd, 0xbc, 0x5f, 0xd8, 0x3b, 0x95, 0xb0, 0x01, - 0xcd, 0x58, 0x4b, 0xd4, 0x7d, 0x0e, 0x5e, 0x91, 0xa7, 0x76, 0xdc, 0xc6, - 0xb9, 0x54, 0xa6, 0x45, 0xf4, 0xa2, 0xd3, 0x58, 0x35, 0x02, 0x3b, 0xa2, - 0x9b, 0x53, 0x5c, 0x31, 0xac, 0x1c, 0x91, 0x33, 0xf3, 0x8b, 0xb5, 0x2a, - 0x44, 0x1c, 0xd4, 0x4f, 0x64, 0xad, 0xda, 0x46, 0x9e, 0xba, 0x9a, 0x13, - 0xb6, 0xad, 0x81, 0x43, 0xdb, 0x1b, 0x91, 0xf6, 0x84, 0xec, 0xd0, 0x6b, - 0xcf, 0x06, 0xff, 0x08, 0xe5, 0x0b, 0x45, 0xa4, 0x5b, 0x44, 0x9b, 0xdc, - 0x3f, 0xb5, 0x4a, 0xb0, 0x12, 0x4f, 0xd7, 0xb0, 0xb0, 0x24, 0x07, 0xf9, - 0xf9, 0xc9, 0x16, 0x16, 0x58, 0x1b, 0x56, 0x66, 0x42, 0x3c, 0xee, 0x55, - 0xe0, 0xd5, 0xc6, 0xdb, 0xa5, 0x3b, 0x96, 0xff, 0x66, 0x19, 0xf8, 0xcd, - 0xd0, 0x7a, 0x28, 0xe2, 0x12, 0xb5, 0x6c, 0x6a, 0xdb, 0xc1, 0xd1, 0xf7, - 0x2d, 0x46, 0xe6, 0x57, 0x3e, 0x1b, 0x9e, 0xcd, 0x46, 0xe9, 0x59, 0xed, - 0x29, 0xc3, 0xfb, 0xf8, 0x9c, 0x97, 0xe2, 0x7e, 0xf3, 0x97, 0xef, 0x2d, - 0xc4, 0x65, 0x37, 0x38, 0x31, 0x62, 0xd7, 0x83, 0x20, 0xb3, 0xc8, 0xc1, - 0x38, 0xb3, 0x5e, 0x6a, 0x62, 0x90, 0x79, 0x81, 0x66, 0x39, 0x69, 0x23, - 0xed, 0x67, 0xdc, 0x28, 0x4d, 0x17, 0x5b, 0x50, 0xeb, 0xf8, 0x55, 0xd0, - 0x5d, 0x19, 0x39, 0x58, 0x3d, 0x2d, 0xfb, 0xc2, 0x37, 0x76, 0xe8, 0x94, - 0x65, 0xcc, 0x39, 0x5e, 0x50, 0xb2, 0xed, 0xa0, 0x1d, 0xdd, 0x0b, 0x3a, - 0x74, 0x24, 0xba, 0x17, 0x27, 0x4c, 0xf9, 0x1d, 0xae, 0xd1, 0x63, 0x37, - 0xcd, 0x07, 0x37, 0xcd, 0x89, 0xda, 0xa8, 0x3b, 0x21, 0xd1, 0x50, 0xd3, - 0xf6, 0x3b, 0x01, 0x03, 0xd2, 0x9e, 0xb8, 0x76, 0xe0, 0xeb, 0x43, 0xd4, - 0x6b, 0x22, 0x02, 0x16, 0x4b, 0x6c, 0x25, 0x65, 0x20, 0x86, 0x09, 0x61, - 0x73, 0xa3, 0x59, 0x12, 0x59, 0xf5, 0xe5, 0x4c, 0x14, 0xef, 0x9d, 0x3f, - 0xac, 0x5b, 0xad, 0x90, 0x0b, 0x85, 0x81, 0x7c, 0x63, 0x43, 0xc7, 0x28, - 0xe3, 0x9c, 0x04, 0xc5, 0x85, 0x45, 0xf0, 0x4a, 0x68, 0x76, 0x1c, 0x53, - 0xc4, 0xb4, 0xab, 0xde, 0x80, 0x96, 0x36, 0x6b, 0xd1, 0xfc, 0xa9, 0x38, - 0xc9, 0xf2, 0x72, 0x3c, 0x45, 0x37, 0xc7, 0xb2, 0xeb, 0xe2, 0x03, 0x34, - 0x76, 0x94, 0x2f, 0x69, 0x71, 0x41, 0xc8, 0x9e, 0x52, 0x7e, 0xf7, 0x5b, - 0x49, 0xd6, 0x77, 0x06, 0x7a, 0xd7, 0x04, 0x01, 0x46, 0x2e, 0x65, 0x10, - 0xd2, 0xee, 0x26, 0xdb, 0xb9, 0xf0, 0xbe, 0x5b, 0x92, 0x2d, 0xf6, 0x57, - 0xb2, 0x33, 0x25, 0x0a, 0xec, 0x45, 0xf6, 0xd4, 0xcb, 0x85, 0xe0, 0xc1, - 0x77, 0xe7, 0x7c, 0x02, 0x92, 0x98, 0xb1, 0x02, 0xd8, 0xcb, 0xe0, 0x38, - 0x50, 0xfc, 0x11, 0x2e, 0x8b, 0xc3, 0xdf, 0xa2, 0x91, 0x32, 0x07, 0xea, - 0x82, 0xc5, 0x4d, 0x67, 0x19, 0xe6, 0x45, 0x3f, 0xd0, 0xdc, 0x50, 0x87, - 0x9c, 0xdb, 0x25, 0x75, 0xd1, 0x47, 0x68, 0x60, 0xc0, 0x82, 0xd0, 0x23, - 0xbd, 0x48, 0x2e, 0x00, 0xc9, 0x8d, 0xfb, 0x92, 0x08, 0xda, 0xea, 0xfb, - 0x60, 0xb4, 0x7c, 0xb4, 0xe7, 0xec, 0x58, 0x76, 0x40, 0xa6, 0x6d, 0xe0, - 0x2e, 0x3c, 0xe0, 0xa8, 0x2b, 0x23, 0xbe, 0x67, 0x6b, 0x59, 0x1a, 0xa2, - 0x1d, 0x23, 0x05, 0xa2, 0xfa, 0x8c, 0x69, 0xbf, 0x80, 0x21, 0x43, 0x0c, - 0x85, 0x8a, 0x8f, 0x30, 0x99, 0x10, 0xf0, 0xc2, 0xf6, 0x8f, 0xfc, 0xaa, - 0x2f, 0x11, 0x9f, 0xea, 0xd0, 0xc2, 0xe3, 0xba, 0x05, 0x20, 0x2c, 0x3a, - 0x1b, 0xb0, 0xfb, 0x1e, 0x5f, 0x78, 0xac, 0xd5, 0xc4, 0x73, 0x26, 0x7a, - 0xa6, 0x6f, 0x56, 0xde, 0x5a, 0x63, 0x7d, 0xa2, 0x8e, 0x30, 0xd9, 0xaf, - 0x87, 0x54, 0xe6, 0xbd, 0x6a, 0x8c, 0x51, 0x32, 0x6f, 0x05, 0x83, 0xea, - 0x53, 0xc3, 0xba, 0xac, 0x4a, 0x2b, 0x87, 0x2e, 0x1f, 0x21, 0x77, 0x58, - 0x8b, 0x80, 0xe3, 0xff, 0x92, 0x41, 0x97, 0x0f, 0x76, 0x30, 0xe2, 0xe0, - 0x99, 0x90, 0xb2, 0xb1, 0x00, 0xb1, 0xaa, 0x79, 0x04, 0x4f, 0x34, 0xff, - 0x73, 0x35, 0x7f, 0x9d, 0x7d, 0x29, 0x1e, 0x45, 0x43, 0xb3, 0x46, 0xc6, - 0xa6, 0x39, 0xe1, 0x52, 0xe6, 0x8b, 0xd4, 0xa5, 0x71, 0x96, 0xd7, 0x0a, - 0x02, 0x23, 0xf8, 0xf3, 0x02, 0x03, 0x31, 0xe5, 0xa2, 0x81, 0x9b, 0xb0, - 0xb5, 0x12, 0x09, 0x6f, 0x30, 0x58, 0x2a, 0xeb, 0x3c, 0x03, 0x46, 0xe7, - 0x30, 0xb6, 0x21, 0x55, 0x30, 0x01, 0x0e, 0x94, 0xb9, 0x5f, 0xa6, 0x72, - 0xd1, 0xb3, 0x5e, 0xc4, 0xde, 0xf3, 0xbb, 0x95, 0x91, 0x19, 0x31, 0x82, - 0x7a, 0x63, 0xa1, 0xbf, 0xdf, 0x42, 0x2c, 0x90, 0x26, 0xad, 0xc9, 0xc8, - 0x78, 0x6d, 0x91, 0xdb, 0x34, 0x6e, 0x0b, 0x6f, 0x35, 0x7d, 0x6a, 0x2d, - 0x69, 0x11, 0x2f, 0x46, 0x64, 0x2f, 0xa8, 0xb6, 0xd6, 0xf0, 0x97, 0x8b, - 0x5c, 0x7d, 0xbb, 0x90, 0x10, 0xb8, 0x07, 0x26, 0xf9, 0x7e, 0xba, 0xf0, - 0xbf, 0x64, 0xf3, 0x6d, 0xa2, 0x14, 0xa3, 0xe6, 0x0e, 0x0b, 0xda, 0x64, - 0x26, 0x81, 0x64, 0x3b, 0xff, 0x82, 0x10, 0x0a, 0xc7, 0xac, 0xa7, 0x35, - 0x94, 0xd4, 0x31, 0x0b, 0x1d, 0x4e, 0x78, 0xc8, 0xf0, 0xef, 0xa8, 0x77, - 0xac, 0xcf, 0x11, 0x89, 0x93, 0x43, 0x4c, 0x18, 0x1f, 0xbc, 0x96, 0xe8, - 0x32, 0x19, 0xed, 0x48, 0x97, 0x98, 0x86, 0xb6, 0x6f, 0x33, 0x03, 0xda, - 0x53, 0xba, 0x68, 0x8c, 0xba, 0x99, 0xba, 0x78, 0xf3, 0x58, 0x10, 0x1b, - 0x4d, 0x93, 0x8a, 0x02, 0xcb, 0x73, 0x33, 0x79, 0x91, 0x2e, 0x83, 0xee, - 0xd7, 0x91, 0x83, 0x98, 0xdf, 0x3b, 0x50, 0x49, 0x4e, 0x83, 0x75, 0x34, - 0x27, 0x4d, 0x39, 0x65, 0x66, 0x95, 0x04, 0x5e, 0x97, 0x56, 0x9c, 0x5e, - 0xfd, 0x2a, 0x4d, 0xf6, 0x2d, 0xe2, 0x9b, 0xd3, 0xbf, 0xfb, 0x2c, 0x08, - 0x52, 0x3c, 0x76, 0x07, 0x58, 0x40, 0xb9, 0x51, 0x5c, 0x42, 0x52, 0x0d, - 0x62, 0xcc, 0x88, 0xf9, 0xc2, 0x26, 0x22, 0xb4, 0xd0, 0x91, 0x5f, 0x7d, - 0xe8, 0x9a, 0x0a, 0x86, 0x8e, 0xe9, 0xf6, 0x1d, 0xcd, 0x66, 0x83, 0xc0, - 0x13, 0xf6, 0x4d, 0xe3, 0xd2, 0xce, 0x8f, 0xa1, 0x0a, 0xc2, 0x14, 0x0e, - 0xb6, 0xb5, 0xb9, 0x93, 0x11, 0xd5, 0xa7, 0xa0, 0xb0, 0xb9, 0x8a, 0x93, - 0x46, 0xdd, 0xa2, 0xb3, 0x0e, 0x0b, 0x63, 0xf5, 0x93, 0x24, 0xc0, 0x76, - 0x30, 0x56, 0xe8, 0x4f, 0xb2, 0x0a, 0x67, 0x6e, 0x67, 0x16, 0x6c, 0x6a, - 0x52, 0x9a, 0xe2, 0x2d, 0xa9, 0xcf, 0xdf, 0x46, 0xf3, 0x99, 0xfd, 0xfd, - 0xdb, 0x2e, 0x87, 0x4d, 0x6e, 0x0f, 0xa6, 0x23, 0x4a, 0x36, 0x56, 0x11, - 0xcf, 0x1b, 0x8a, 0x67, 0x32, 0x75, 0x13, 0x85, 0x71, 0xec, 0x91, 0x43, - 0x16, 0x9a, 0xb4, 0x64, 0xf9, 0xf3, 0xd3, 0x0e, 0xa4, 0x2c, 0x15, 0x6f, - 0x4a, 0x49, 0x12, 0xed, 0x31, 0x2b, 0x47, 0xa2, 0x65, 0xa7, 0x04, 0xea, - 0x8d, 0xe3, 0x3f, 0xfd, 0x9a, 0x79, 0x8a, 0x99, 0x9c, 0xcf, 0xaf, 0xdb, - 0x5d, 0x62, 0xa8, 0x3e, 0x9d, 0x89, 0x8c, 0x91, 0xd9, 0x8b, 0xbe, 0x76, - 0xc8, 0xb9, 0x4f, 0x03, 0xa6, 0xe4, 0xa0, 0xc0, 0x85, 0x2c, 0xb3, 0xa8, - 0xdb, 0x67, 0xb4, 0x22, 0xc0, 0xe9, 0x3c, 0x87, 0x6a, 0x96, 0xd7, 0xb3, - 0xd8, 0xe9, 0xae, 0x69, 0x44, 0x49, 0xf3, 0x15, 0x21, 0x3a, 0x71, 0xb1, - 0xc0, 0xe8, 0x78, 0xb3, 0x76, 0xbf, 0x92, 0x41, 0x44, 0xd1, 0x58, 0x2a, - 0x2f, 0xe0, 0xff, 0xa9, 0x0a, 0xaa, 0xa9, 0x69, 0xa1, 0x58, 0xeb, 0x71, - 0x58, 0xc0, 0xd4, 0x4a, 0xa2, 0x32, 0x1c, 0x1b, 0x04, 0xea, 0x77, 0xb3, - 0xb4, 0x2c, 0xf3, 0x07, 0xb9, 0x1f, 0x8e, 0x4e, 0x1e, 0xe2, 0x26, 0xaf, - 0xe5, 0x64, 0xa2, 0x0d, 0xa0, 0x8d, 0xc9, 0xb0, 0xee, 0xf0, 0xbb, 0x4f, - 0x66, 0x6d, 0x48, 0xb9, 0x1b, 0xb6, 0x39, 0x95, 0xce, 0x54, 0x30, 0x18, - 0xf7, 0xfb, 0x98, 0x67, 0x1a, 0xf6, 0xb4, 0x17, 0x31, 0xd4, 0x88, 0xae, - 0x53, 0x49, 0x86, 0x80, 0x2e, 0x9c, 0x7b, 0x30, 0x1f, 0x6a, 0x3d, 0xc2, - 0xa4, 0x83, 0x30, 0x4a, 0x23, 0xd4, 0xa9, 0xb1, 0xeb, 0x37, 0xad, 0x09, - 0xfd, 0x2a, 0x07, 0xb3, 0xbc, 0x98, 0x39, 0xb4, 0x6c, 0x9d, 0x90, 0x69, - 0x8e, 0xd2, 0xd6, 0x5f, 0xbc, 0x0d, 0x29, 0x27, 0x12, 0xa6, 0x82, 0xc4, - 0x59, 0xac, 0x71, 0x95, 0xbd, 0xcc, 0x28, 0x82, 0x43, 0xab, 0xb8, 0x44, - 0xfe, 0xfe, 0x3b, 0x4c, 0x9a, 0x2e, 0x93, 0x37, 0xaf, 0xb4, 0xeb, 0x9f, - 0x58, 0xdd, 0x2b, 0x9f, 0xc4, 0xd4, 0x44, 0xad, 0xaf, 0x39, 0x49, 0xb7, - 0x43, 0x66, 0x5e, 0x4c, 0xe5, 0x3a, 0x65, 0xe1, 0xb7, 0xf8, 0xa8, 0xdd, - 0xf5, 0x6b, 0x37, 0x13, 0xb2, 0xba, 0x0f, 0x57, 0x66, 0x95, 0xf1, 0x4d, - 0x92, 0x52, 0x39, 0xde, 0x85, 0x41, 0xae, 0xc5, 0xe4, 0xa0, 0xa3, 0xab, - 0xd8, 0x25, 0xab, 0xe1, 0x2a, 0x91, 0x31, 0xbb, 0x41, 0x0e, 0xab, 0x52, - 0x6f, 0xf3, 0x58, 0xa7, 0xfc, 0x9f, 0x36, 0x3f, 0x43, 0x8b, 0xcd, 0x0a, - 0xa0, 0xe2, 0xb9, 0xcb, 0x18, 0x47, 0x83, 0x4a, 0x81, 0x6f, 0xe9, 0x56, - 0xcf, 0x2b, 0xad, 0x48, 0x76, 0xe4, 0xba, 0x03, 0xb0, 0x2b, 0x2d, 0x7d, - 0xd6, 0x3c, 0xec, 0xcb, 0xb7, 0x23, 0x16, 0xbc, 0x2c, 0x2f, 0x90, 0xff, - 0xa5, 0x7a, 0xe5, 0x9a, 0xf7, 0xc3, 0x60, 0xd9, 0x91, 0x5a, 0x99, 0x2b, - 0x3f, 0xe7, 0xfa, 0x90, 0xd6, 0x3a, 0xf7, 0x1a, 0x73, 0xe5, 0x36, 0x02, - 0xec, 0xf4, 0x18, 0x41, 0xde, 0x90, 0x4c, 0xb5, 0xd9, 0xe3, 0x9c, 0x38, - 0xb7, 0x73, 0xc7, 0x05, 0x5e, 0xd8, 0xc0, 0x1a, 0xd9, 0x44, 0xa9, 0x9e, - 0x20, 0x0d, 0xbd, 0x12, 0xe5, 0xcb, 0x18, 0xcc, 0xaf, 0x05, 0xcc, 0xbb, - 0x60, 0x56, 0xbe, 0x38, 0xfa, 0x18, 0x2c, 0xf9, 0x76, 0x81, 0x2f, 0x88, - 0xc5, 0xf6, 0xdb, 0x37, 0xd4, 0x55, 0x00, 0x30, 0x9b, 0x84, 0xef, 0xdd, - 0xba, 0x75, 0xe2, 0x52, 0xb2, 0x23, 0xa7, 0xc8, 0x0e, 0xcf, 0xe8, 0x7f, - 0xbb, 0xda, 0xdb, 0x27, 0xf8, 0xcf, 0x9f, 0xe4, 0x3c, 0xd7, 0xc8, 0x0c, - 0x7a, 0x99, 0x08, 0x02, 0xa2, 0xe0, 0xa8, 0x43, 0x70, 0xcd, 0x7f, 0x79, - 0x6f, 0x25, 0x2b, 0x47, 0x6c, 0xe3, 0x8f, 0xa1, 0x6a, 0x1c, 0x7c, 0x6a, - 0x77, 0x92, 0xd2, 0x01, 0x5c, 0xa9, 0xb3, 0xd2, 0x1f, 0x26, 0xba, 0xb8, - 0x94, 0x59, 0xf9, 0x50, 0x0c, 0xc3, 0x72, 0xe8, 0x7a, 0x8b, 0x51, 0x85, - 0x4b, 0xf7, 0xa8, 0x3e, 0x9d, 0x52, 0x4f, 0xb1, 0xa8, 0x90, 0x59, 0x2c, - 0x2f, 0xac, 0xed, 0xbf, 0x22, 0xf0, 0x38, 0x35, 0x03, 0xb3, 0xbb, 0x0e, - 0xc8, 0x61, 0xf2, 0x60, 0x5e, 0xe1, 0xdb, 0xd3, 0x7b, 0x88, 0x5e, 0x54, - 0x9d, 0xe8, 0xc3, 0xdc, 0xcd, 0x48, 0x54, 0x3a, 0x96, 0xd3, 0xda, 0x72, - 0xe2, 0x96, 0xb6, 0x50, 0xb1, 0xe6, 0x28, 0x5f, 0xf3, 0x1a, 0x6b, 0x7c, - 0x29, 0x8e, 0x12, 0x00, 0x10, 0x50, 0xe3, 0x08, 0x3f, 0x3e, 0x19, 0xf5, - 0xf7, 0xc5, 0x1a, 0xa4, 0x44, 0x48, 0xfc, 0xa9, 0x39, 0x10, 0xcb, 0x4c, - 0xa2, 0xcb, 0x60, 0xf5, 0xf8, 0x4b, 0xfb, 0xe4, 0x5d, 0xf3, 0x87, 0x92, - 0x62, 0xee, 0x66, 0x91, 0x0e, 0x3d, 0x5d, 0xe4, 0x2c, 0x58, 0xe5, 0xce, - 0x8e, 0x52, 0xe5, 0x6e, 0xad, 0xf5, 0xc8, 0x54, 0x1c, 0x33, 0x38, 0xfa, - 0x2b, 0x06, 0x4d, 0xde, 0x3b, 0xbe, 0x16, 0xf6, 0x42, 0x44, 0x57, 0xc6, - 0x74, 0xe1, 0xcd, 0xa7, 0x09, 0x30, 0x88, 0x80, 0xd5, 0x60, 0xe9, 0x39, - 0x95, 0x29, 0x8f, 0xe5, 0x67, 0x59, 0x23, 0xcc, 0x44, 0xe2, 0x43, 0x77, - 0xa2, 0x9f, 0xc0, 0xab, 0xe9, 0x6e, 0xc0, 0x97, 0x6c, 0xd8, 0xa0, 0x6b, - 0xc9, 0x3d, 0xb6, 0xf9, 0x4d, 0x34, 0xad, 0xe0, 0x18, 0xe7, 0xe3, 0xc7, - 0xa3, 0x57, 0xd0, 0x93, 0x1b, 0xfc, 0x5a, 0x9c, 0xa2, 0x7c, 0xf8, 0x40, - 0x53, 0xa4, 0xb2, 0xa4, 0x18, 0x4f, 0x67, 0xf7, 0x2e, 0xe2, 0x43, 0x5b, - 0x30, 0xfe, 0x18, 0x52, 0xc5, 0x38, 0xfa, 0xe0, 0x9a, 0x48, 0x66, 0x32, - 0x66, 0x4d, 0x09, 0xa5, 0x64, 0x3d, 0xed, 0x4f, 0x50, 0xb9, 0x09, 0xca, - 0x46, 0xe8, 0x9e, 0x72, 0x95, 0xe5, 0x6f, 0x26, 0x5c, 0x36, 0x0f, 0xcf, - 0x8e, 0x06, 0x6d, 0x9b, 0xc0, 0xf0, 0x56, 0x6f, 0xbd, 0x4b, 0x01, 0xba, - 0x33, 0x33, 0x86, 0xb9, 0xa4, 0xd6, 0xcd, 0xe0, 0x19, 0x00, 0x17, 0xf0, - 0xdb, 0x6e, 0x94, 0x6d, 0x00, 0x1b, 0x0e, 0x8f, 0x9b, 0x24, 0x00, 0x69, - 0x25, 0x6e, 0xc8, 0x3f, 0xd2, 0x0e, 0x4b, 0x66, 0x72, 0x25, 0x75, 0x3a, - 0xe0, 0x44, 0x5c, 0xad, 0x7c, 0x00, 0xde, 0xdb, 0x2b, 0xcf, 0xc5, 0x36, - 0x98, 0xa3, 0x6f, 0x31, 0xeb, 0x3d, 0x57, 0x72, 0x71, 0xdc, 0xc3, 0x37, - 0x49, 0x9b, 0x01, 0x06, 0xb9, 0x89, 0x0f, 0x7f, 0x7b, 0x04, 0x66, 0x26, - 0x41, 0xdd, 0xb2, 0x74, 0xca, 0xed, 0xef, 0xc2, 0x35, 0xe8, 0x78, 0x49, - 0x00, 0x47, 0x9a, 0x4a, 0x58, 0x1c, 0xcd, 0xd3, 0x0f, 0x99, 0xeb, 0x8d, - 0x2e, 0xab, 0x73, 0x47, 0x39, 0xaf, 0x6c, 0x89, 0x28, 0xbc, 0x2e, 0x4c, - 0x44, 0x9e, 0x6d, 0x9e, 0x43, 0xe1, 0x43, 0x2f, 0x3c, 0x6d, 0x4b, 0xe5, - 0xef, 0xfa, 0x14, 0xb5, 0x55, 0xcf, 0x03, 0x96, 0xaf, 0x2c, 0x2b, 0xf3, - 0x43, 0x84, 0xbb, 0x53, 0x44, 0xb7, 0x42, 0x5f, 0x37, 0xf1, 0x60, 0xbb, - 0xb4, 0xd6, 0x5e, 0x6e, 0xc9, 0x71, 0x98, 0xa0, 0xe7, 0x5a, 0xe3, 0x3e, - 0x5b, 0x55, 0xff, 0x17, 0x2e, 0x21, 0xdd, 0x79, 0x28, 0xfd, 0x8e, 0x34, - 0xd8, 0xe9, 0x35, 0x3e, 0x88, 0x60, 0x1a, 0x89, 0x0b, 0x0d, 0xb5, 0xb6, - 0xd8, 0x58, 0x17, 0xd2, 0x66, 0xe6, 0xe2, 0x3d, 0x71, 0x67, 0xfd, 0x26, - 0x73, 0x71, 0x83, 0xb7, 0x76, 0x4b, 0x1e, 0x9f, 0x9c, 0x88, 0x5a, 0x5e, - 0x8c, 0x19, 0x9a, 0x7b, 0xbd, 0x6e, 0x23, 0x3e, 0x62, 0x9c, 0xac, 0x64, - 0xd1, 0x0b, 0x74, 0xb2, 0xac, 0xa4, 0xc9, 0x12, 0xdf, 0x2a, 0xd2, 0xa2, - 0xef, 0x7c, 0x98, 0x1b, 0x33, 0x13, 0xa4, 0xb2, 0x5b, 0x8b, 0xbb, 0x97, - 0x89, 0x73, 0x12, 0x6f, 0xee, 0xd9, 0xd2, 0x19, 0xdc, 0x59, 0x28, 0xe6, - 0xe1, 0x45, 0x8c, 0x53, 0x39, 0xec, 0x01, 0xd8, 0x30, 0x69, 0x12, 0x8b, - 0x06, 0x10, 0x9c, 0x5c, 0x76, 0x6b, 0x5d, 0x5c, 0xce, 0xa5, 0x3e, 0x19, - 0xfb, 0x9e, 0x39, 0x51, 0xfc, 0xab, 0x9a, 0x16, 0xd0, 0xa6, 0xb0, 0x7a, - 0xa6, 0x8f, 0x56, 0x70, 0x13, 0x16, 0x33, 0xf5, 0x2f, 0xee, 0xbe, 0x2f, - 0x0d, 0xd4, 0x9b, 0xaa, 0xe7, 0x5d, 0x8b, 0x2a, 0xa4, 0x34, 0xa2, 0x14, - 0xd6, 0xde, 0x4c, 0x87, 0x30, 0x49, 0x33, 0xb9, 0xf9, 0x6c, 0x64, 0xf7, - 0x92, 0x58, 0xe9, 0x40, 0x2f, 0x3d, 0x84, 0x85, 0x1a, 0xb8, 0xad, 0xc6, - 0xe8, 0x15, 0x60, 0xd0, 0x91, 0x16, 0x47, 0x1b, 0xc2, 0xef, 0x73, 0xfa, - 0xfe, 0x7d, 0x17, 0x69, 0xd0, 0x65, 0x63, 0x3d, 0x92, 0x97, 0x6a, 0xa6, - 0x4b, 0xf3, 0xc4, 0x3d, 0x4d, 0x52, 0x2a, 0x03, 0xf5, 0x7e, 0x75, 0x30, - 0xb7, 0xf5, 0xf3, 0xac, 0xc7, 0x3a, 0x17, 0x8e, 0x30, 0xfe, 0x12, 0x6d, - 0xce, 0xcf, 0x53, 0x2d, 0xb6, 0x22, 0xa7, 0x05, 0xcc, 0x81, 0x29, 0xec, - 0xd1, 0xfd, 0x9e, 0xde, 0xfa, 0x2d, 0xc9, 0x15, 0x18, 0x33, 0x46, 0xac, - 0xed, 0x01, 0xbd, 0x0a, 0xa0, 0x54, 0x01, 0xa0, 0xa2, 0xe4, 0xc9, 0x13, - 0xa6, 0x7e, 0xa3, 0x7d, 0x8f, 0x0a, 0x68, 0xc8, 0x4c, 0xaf, 0x80, 0x5c, - 0x11, 0xb1, 0x40, 0x99, 0xaa, 0x29, 0x74, 0x44, 0x1d, 0xff, 0xf7, 0x26, - 0xad, 0xbf, 0x8a, 0x8a, 0x24, 0x72, 0x39, 0x59, 0x04, 0x27, 0x19, 0xf1, - 0x2d, 0x8a, 0xc8, 0x1f, 0x11, 0x1d, 0x55, 0x63, 0x7c, 0x8f, 0x47, 0x8a, - 0x60, 0x4a, 0x3a, 0x1c, 0xb7, 0xf0, 0xb6, 0x56, 0x3f, 0xad, 0xe1, 0x0d, - 0xd1, 0xe2, 0x70, 0x67, 0x88, 0xc9, 0x77, 0x25, 0x39, 0x1d, 0x89, 0x34, - 0x53, 0xe3, 0x1b, 0x82, 0x9d, 0x72, 0xc6, 0x37, 0xec, 0xb4, 0x50, 0x04, - 0x49, 0x13, 0x34, 0x16, 0x0b, 0x8e, 0x9f, 0xc9, 0xf9, 0xec, 0x02, 0xc2, - 0x23, 0x49, 0x92, 0x98, 0x43, 0x0d, 0x63, 0x00, 0x00, 0x00, 0x4a, 0xa0, - 0x7f, 0xec, 0x15, 0xdb, 0xff, 0xda, 0xbf, 0xb1, 0xa2, 0xe7, 0x17, 0x57, - 0xf6, 0xb0, 0x7c, 0xb7, 0x23, 0x2f, 0x0a, 0x01, 0x17, 0xfa, 0xde, 0x3d, - 0x82, 0x6e, 0x61, 0x16, 0xaf, 0x7b, 0xd8, 0x48, 0xfb, 0x43, 0x4d, 0xa0, - 0xcf, 0xff, 0x7e, 0x7b, 0xca, 0x17, 0x0c, 0xf1, 0x7b, 0xb9, 0xb4, 0xb8, - 0x68, 0xf5, 0x86, 0x1d, 0xcc, 0xfd, 0xec, 0xbc, 0x71, 0xd9, 0xf5, 0x77, - 0x7d, 0x07, 0xe9, 0x3f, 0xf6, 0x64, 0x84, 0xbd, 0xe1, 0x05, 0x95, 0x37, - 0x19, 0x6f, 0xc9, 0xdd, 0x9e, 0x52, 0xbf, 0xe7, 0xb9, 0x6f, 0xd7, 0x0a, - 0x3e, 0xc4, 0xba, 0x7a, 0xeb, 0x14, 0x3d, 0xc2, 0x25, 0x62, 0x2f, 0x1f, - 0x5c, 0xbd, 0x82, 0x23, 0xa7, 0x37, 0xe0, 0x39, 0xae, 0xae, 0x9d, 0x37, - 0x71, 0x3b, 0xa6, 0xb0, 0x37, 0x26, 0x64, 0x40, 0x01, 0x3a, 0x0d, 0x77, - 0xe2, 0x84, 0xd4, 0x06, 0xd0, 0x4b, 0x9b, 0x0d, 0xef, 0x71, 0x91, 0xb6, - 0x69, 0xab, 0xe1, 0x7e, 0xdc, 0x94, 0x53, 0xef, 0x25, 0xad, 0x9c, 0x3b, - 0x95, 0x4c, 0xa7, 0x3c, 0xf2, 0xf3, 0x1a, 0x03, 0xbe, 0x87, 0xf7, 0x4d, - 0x68, 0xad, 0x54, 0x3f, 0x7d, 0x23, 0xcd, 0xa1, 0x3a, 0xc0, 0xee, 0x97, - 0x05, 0x22, 0xc4, 0xdd, 0x60, 0x17, 0x63, 0x11, 0x3a, 0xdb, 0x73, 0x6f, - 0xdd, 0x07, 0xd9, 0x43, 0x3f, 0xea, 0x26, 0x96, 0xfa, 0x12, 0x7f, 0x3d, - 0xd6, 0xed, 0xac, 0x20, 0x23, 0x24, 0xcf, 0x8e, 0x88, 0x3d, 0x75, 0xe7, - 0x2c, 0xa3, 0xdb, 0x1e, 0x82, 0xd8, 0xf0, 0x3a, 0x20, 0x56, 0xf8, 0x84, - 0x89, 0xe7, 0xf9, 0x88, 0x1b, 0x69, 0xd3, 0xf7, 0xa5, 0x79, 0x80, 0xc8, - 0x7b, 0xe4, 0x92, 0x30, 0x51, 0x49, 0x1c, 0x3e, 0x64, 0xc2, 0x7b, 0x51, - 0x9c, 0x50, 0x63, 0x20, 0x70, 0xec, 0x78, 0xbe, 0xe6, 0x83, 0xab, 0x49, - 0xf9, 0xa8, 0x28, 0x01, 0x35, 0x36, 0xf9, 0xee, 0xf4, 0x55, 0x88, 0x65, - 0xa8, 0xdb, 0x0c, 0x23, 0xa8, 0xeb, 0x96, 0x25, 0x49, 0x5a, 0x3d, 0xf2, - 0x82, 0xea, 0xc6, 0xca, 0xca, 0xc7, 0x2a, 0x5c, 0xc6, 0xfc, 0x5f, 0x5d, - 0xab, 0x87, 0xf6, 0xb9, 0xae, 0x41, 0x34, 0x2e, 0x90, 0x26, 0x9f, 0xff, - 0x12, 0x47, 0xb8, 0x6a, 0x03, 0x7e, 0x54, 0x65, 0xde, 0xca, 0x5f, 0xf3, - 0xcf, 0x7a, 0x86, 0x11, 0x28, 0xac, 0x84, 0x3a, 0xd4, 0x65, 0x97, 0xe2, - 0xc5, 0xe4, 0x63, 0x69, 0xa8, 0x04, 0xae, 0x53, 0xc6, 0xba, 0x4e, 0xc7, - 0x55, 0x27, 0x3e, 0xa4, 0x02, 0x2a, 0x45, 0x51, 0xc7, 0x1f, 0xc8, 0x0d, - 0x15, 0x07, 0x1b, 0x4d, 0x01, 0x91, 0xbe, 0x30, 0xf6, 0xa3, 0x6e, 0x68, - 0x95, 0xad, 0x16, 0x58, 0xbb, 0x44, 0x55, 0x3b, 0xc3, 0xb2, 0x87, 0x36, - 0x93, 0x1e, 0xa4, 0xa3, 0xef, 0x5d, 0xc2, 0xcc, 0xab, 0x98, 0xfb, 0x71, - 0xf3, 0xdf, 0x36, 0x64, 0x4c, 0xc6, 0xa8, 0xb3, 0x09, 0x26, 0x30, 0xce, - 0x96, 0x7d, 0x3b, 0xee, 0x4d, 0x04, 0xc6, 0x74, 0x54, 0xc9, 0xa6, 0x2e, - 0x38, 0xd7, 0x0d, 0xc8, 0xb8, 0xe7, 0xf6, 0xd1, 0xf6, 0x0b, 0xf4, 0x7f, - 0xe2, 0xbf, 0xa4, 0xfa, 0x28, 0xeb, 0xd6, 0x6d, 0x3a, 0xc2, 0x8f, 0xf0, - 0x50, 0x80, 0xab, 0xbb, 0x07, 0x29, 0xdd, 0x7b, 0x06, 0xe0, 0x0c, 0x7e, - 0x4a, 0x5d, 0x9b, 0xe6, 0x35, 0xb5, 0x6d, 0x27, 0x9a, 0x28, 0x3a, 0xf2, - 0xc0, 0x2f, 0x23, 0x8e, 0x48, 0x46, 0x39, 0x7d, 0xc4, 0x03, 0x9c, 0x02, - 0xd0, 0x68, 0x04, 0x26, 0x02, 0x14, 0xc7, 0x2e, 0x75, 0xa6, 0xac, 0x1e, - 0x72, 0x05, 0x3a, 0xbb, 0x9b, 0x41, 0x7a, 0x00, 0x3a, 0x5e, 0xd8, 0x97, - 0xef, 0xea, 0x62, 0x49, 0x4d, 0xc8, 0x71, 0x4a, 0x0c, 0x5d, 0x00, 0x68, - 0xa8, 0x72, 0x03, 0xe3, 0xed, 0x74, 0xbc, 0x66, 0xd5, 0x37, 0xab, 0x86, - 0x77, 0x49, 0xb1, 0x42, 0x14, 0x3e, 0x2a, 0xc8, 0xbd, 0x71, 0x38, 0xef, - 0x7f, 0x64, 0xfa, 0x46, 0xb2, 0xd4, 0xbb, 0x0d, 0x05, 0xd1, 0xb4, 0xa1, - 0x29, 0xb7, 0x50, 0x4c, 0x67, 0x3a, 0x39, 0x38, 0x9f, 0xca, 0x5a, 0x82, - 0x2f, 0xc8, 0x57, 0xe4, 0x66, 0x82, 0x60, 0x40, 0xb1, 0x3b, 0xca, 0x75, - 0xdd, 0x8e, 0x61, 0x05, 0x3f, 0xd5, 0x10, 0xdf, 0x50, 0x10, 0x3e, 0x01, - 0x8a, 0x5a, 0xaa, 0x9a, 0xb7, 0x62, 0xaf, 0x41, 0x36, 0xa5, 0x02, 0x2a, - 0xb7, 0x3f, 0x11, 0x8b, 0x0a, 0x68, 0x97, 0x22, 0x8b, 0xd2, 0x58, 0x54, - 0xba, 0x52, 0xcd, 0x03, 0x3d, 0xb1, 0x9a, 0x45, 0xa5, 0xc4, 0xc3, 0xfe, - 0x9b, 0x71, 0x18, 0x70, 0xae, 0x7f, 0xa4, 0x5f, 0xec, 0xf1, 0x65, 0x04, - 0xa1, 0xf0, 0xb9, 0x95, 0x5d, 0x4c, 0x6c, 0x2a, 0xe8, 0x4d, 0x28, 0x32, - 0xd1, 0x1b, 0x8c, 0x45, 0x9f, 0xf7, 0xe6, 0x98, 0xc4, 0x8b, 0x35, 0x0a, - 0xea, 0x70, 0x20, 0xff, 0x8d, 0x76, 0x68, 0x34, 0x10, 0x5b, 0x75, 0x8c, - 0x95, 0xb4, 0x2d, 0x33, 0xbe, 0xb5, 0x13, 0x52, 0xe3, 0xa6, 0x53, 0x96, - 0x33, 0x4f, 0x0b, 0x00, 0xea, 0x37, 0xf2, 0x7d, 0x57, 0x2b, 0x76, 0xf3, - 0xc8, 0x58, 0x8d, 0x9a, 0xa9, 0x35, 0xa8, 0xb7, 0x4b, 0xb5, 0xcf, 0xfb, - 0xd4, 0xd6, 0x24, 0x74, 0x31, 0xcc, 0x9c, 0xfe, 0x93, 0x46, 0x16, 0x97, - 0x8f, 0xbc, 0x1f, 0x59, 0x79, 0xa2, 0xce, 0x6f, 0x2d, 0xfc, 0x36, 0x27, - 0xdd, 0x4a, 0x4a, 0x73, 0xd5, 0xd5, 0xb4, 0x14, 0xa1, 0x1e, 0xc0, 0x0c, - 0xc3, 0xf3, 0x90, 0x5d, 0x4b, 0x5c, 0xaa, 0xe3, 0x10, 0xfb, 0x67, 0x76, - 0x57, 0x9b, 0xc0, 0x76, 0x18, 0x2f, 0x8d, 0x33, 0x59, 0x1f, 0xfa, 0x75, - 0x5f, 0x2d, 0x86, 0xb9, 0x81, 0x21, 0xe9, 0x9a, 0x7f, 0xcc, 0xf9, 0xcb, - 0x55, 0x19, 0xe8, 0x70, 0x81, 0xdf, 0x90, 0x13, 0xda, 0xbf, 0x83, 0xf8, - 0xe8, 0x44, 0x87, 0x8a, 0x86, 0x38, 0x4f, 0xbc, 0x5c, 0x74, 0x75, 0xe3, - 0x65, 0xd4, 0x29, 0xa2, 0x09, 0xc7, 0xcc, 0xa3, 0x07, 0x90, 0xab, 0x17, - 0xb7, 0x78, 0x69, 0xbb, 0x17, 0xf8, 0x12, 0x51, 0xc5, 0xa6, 0x92, 0xc8, - 0xab, 0x68, 0xb1, 0xcf, 0xcd, 0xf9, 0xbc, 0x37, 0x08, 0x56, 0xfa, 0x1a, - 0x05, 0xba, 0x80, 0xb4, 0xa8, 0x64, 0xa5, 0x12, 0xa1, 0xa5, 0xb9, 0x0e, - 0x3f, 0x6d, 0x86, 0x29, 0x49, 0x9e, 0x69, 0x73, 0x73, 0xab, 0xda, 0xd0, - 0x4c, 0xac, 0x1e, 0xb3, 0xdc, 0xde, 0x08, 0xd1, 0x8b, 0xb1, 0x29, 0xc0, - 0x42, 0xa8, 0xc0, 0xcd, 0xd1, 0x52, 0xb9, 0x5d, 0xf2, 0x54, 0xf5, 0x94, - 0x5b, 0xab, 0xe1, 0xda, 0x7b, 0xc3, 0x10, 0xb4, 0x9c, 0x2f, 0x54, 0xe4, - 0x9c, 0x04, 0xf6, 0xd8, 0x22, 0xde, 0x15, 0xcb, 0x56, 0xee, 0x09, 0x57, - 0x27, 0x2e, 0xd0, 0xf5, 0x80, 0x2e, 0x45, 0xb5, 0xb3, 0xac, 0xcd, 0x9f, - 0x51, 0x31, 0x22, 0x97, 0x7b, 0x5b, 0x5a, 0xe8, 0x5b, 0x5b, 0x2a, 0x05, - 0xab, 0x00, 0xba, 0x22, 0x77, 0xea, 0x4c, 0x84, 0x51, 0xa6, 0x60, 0x18, - 0x2b, 0x0c, 0xe7, 0xf9, 0x5e, 0x46, 0x10, 0xbb, 0xc6, 0x76, 0xa3, 0x07, - 0xee, 0xd6, 0x8b, 0x45, 0x22, 0xd6, 0x61, 0x3d, 0xac, 0x81, 0x4b, 0x04, - 0xc1, 0x8d, 0x62, 0x84, 0x94, 0x6c, 0x5f, 0xe3, 0x73, 0x97, 0xa0, 0xbd, - 0x38, 0x0b, 0xd9, 0xa9, 0x72, 0xa3, 0xbc, 0xf2, 0xdd, 0x80, 0x70, 0x0f, - 0x08, 0x99, 0xa0, 0x4f, 0xb8, 0x22, 0x24, 0x27, 0x29, 0xf6, 0x95, 0x95, - 0x5d, 0xc8, 0xac, 0x13, 0x1b, 0x30, 0x4b, 0x1e, 0x49, 0x35, 0x81, 0x7a, - 0x11, 0xc0, 0x94, 0x0c, 0xe0, 0xaf, 0x9b, 0x8f, 0x57, 0xed, 0x38, 0x2c, - 0x31, 0x66, 0x94, 0x46, 0x90, 0x40, 0x67, 0x52, 0xa5, 0xb5, 0xcb, 0x69, - 0x63, 0x8d, 0xde, 0x3b, 0xe9, 0x94, 0x8a, 0x0c, 0xf3, 0x23, 0x21, 0xb4, - 0x5d, 0xd7, 0x57, 0x3d, 0x55, 0x3f, 0x85, 0x1f, 0x2f, 0x22, 0x7f, 0xf2, - 0x16, 0xa6, 0x94, 0x53, 0x47, 0x20, 0x46, 0x4c, 0xe4, 0x42, 0xcf, 0x4f, - 0x74, 0x83, 0x02, 0xaa, 0xd5, 0x04, 0x43, 0xa1, 0xfa, 0x91, 0xd0, 0x4c, - 0x35, 0x1d, 0x4a, 0xa4, 0x36, 0x7f, 0xb5, 0x85, 0x17, 0x69, 0x60, 0xac, - 0x72, 0x52, 0xc7, 0x88, 0x70, 0x8b, 0xff, 0x88, 0x1d, 0xde, 0x7d, 0xbb, - 0xc1, 0xac, 0xe7, 0x84, 0xff, 0x50, 0xe6, 0x9c, 0x1c, 0xf4, 0xb0, 0xc4, - 0x8c, 0x71, 0x5d, 0x4f, 0x26, 0x04, 0x23, 0xf6, 0x57, 0xa0, 0x78, 0x74, - 0x3c, 0x5c, 0x9f, 0x40, 0x74, 0xca, 0x90, 0x9a, 0x6a, 0x7b, 0x04, 0x00, - 0xe4, 0x44, 0x00, 0xa3, 0x2e, 0x58, 0x1f, 0xb0, 0xf0, 0x5c, 0x91, 0x81, - 0xc4, 0x84, 0xf9, 0x9f, 0x45, 0x44, 0x07, 0xfc, 0x28, 0x0d, 0xef, 0x69, - 0x3a, 0x84, 0xf1, 0xa5, 0x03, 0x68, 0x82, 0x18, 0x0b, 0xaa, 0x34, 0x8c, - 0x7f, 0x38, 0xb6, 0xdf, 0xdb, 0x00, 0x5e, 0x81, 0xe7, 0xa8, 0x1a, 0x70, - 0x91, 0xd6, 0x5a, 0xaa, 0xab, 0x00, 0x0b, 0x6f, 0x08, 0xf7, 0xdc, 0x56, - 0x4f, 0x05, 0xa9, 0x7e, 0x57, 0x90, 0x60, 0x28, 0xd5, 0xe7, 0x01, 0x1f, - 0xeb, 0x9b, 0x85, 0xeb, 0x01, 0x0b, 0xd7, 0xaf, 0xa3, 0x11, 0x4a, 0xf6, - 0x2b, 0xd3, 0xac, 0x75, 0xf5, 0xf4, 0xb5, 0x11, 0x5a, 0x64, 0x8f, 0x69, - 0x9f, 0x26, 0xf0, 0x83, 0x0f, 0xae, 0x11, 0xae, 0xc0, 0x45, 0x0c, 0x93, - 0xf1, 0xa8, 0xe9, 0xbb, 0x1f, 0x29, 0x40, 0xdb, 0x3b, 0x18, 0x30, 0xef, - 0xce, 0x8f, 0x80, 0xd8, 0x86, 0xd2, 0x36, 0x84, 0xdc, 0x09, 0x90, 0x65, - 0x94, 0x61, 0x9f, 0x53, 0xed, 0xb7, 0xd9, 0x58, 0x79, 0x9d, 0x4c, 0xef, - 0xb8, 0xbe, 0x82, 0xe8, 0x52, 0x39, 0xa5, 0x91, 0x59, 0x28, 0x5c, 0x4b, - 0x65, 0xa5, 0x41, 0x79, 0x9d, 0xc4, 0x48, 0x47, 0xe6, 0x5c, 0x2d, 0x69, - 0x67, 0xe0, 0xd2, 0x9d, 0x6e, 0x35, 0xc5, 0xcc, 0xf1, 0xb5, 0x1c, 0xc9, - 0xc0, 0x00, 0x93, 0x23, 0x96, 0x7e, 0xbf, 0x72, 0x30, 0x88, 0xb3, 0x1d, - 0x14, 0x12, 0xa5, 0x2a, 0x72, 0xbb, 0x1a, 0x85, 0x05, 0x6b, 0x87, 0xed, - 0xce, 0x24, 0x81, 0xcb, 0x4b, 0x45, 0xeb, 0x33, 0xb9, 0xfb, 0x71, 0xd9, - 0xcf, 0x33, 0x63, 0x3c, 0x7c, 0x6a, 0xe8, 0xe9, 0x06, 0x0d, 0x1d, 0xec, - 0xb6, 0x23, 0x14, 0xbe, 0xc7, 0x51, 0x8b, 0x14, 0x34, 0xfb, 0xaf, 0xa4, - 0x77, 0x30, 0xec, 0xe4, 0x2c, 0x30, 0x5b, 0x6b, 0x0a, 0x08, 0xf1, 0xce, - 0xa7, 0x27, 0xf7, 0xe0, 0x70, 0x47, 0x02, 0xea, 0xf2, 0x93, 0x80, 0x1e, - 0x38, 0xd1, 0xb7, 0xf2, 0xd9, 0x6f, 0x8f, 0x09, 0x20, 0xc9, 0x9f, 0x09, - 0xdd, 0x05, 0x60, 0x72, 0xf8, 0x96, 0xb3, 0xa0, 0x25, 0x29, 0xd9, 0xf3, - 0x44, 0xf6, 0xdc, 0xb4, 0xbb, 0x10, 0x1f, 0xfd, 0xe9, 0x96, 0xb1, 0x7f, - 0x49, 0x45, 0x81, 0x1b, 0x63, 0xd2, 0x29, 0x78, 0x85, 0xb2, 0x44, 0xb5, - 0x50, 0x96, 0x62, 0x0c, 0x85, 0xa7, 0x71, 0xad, 0xaf, 0x4f, 0x7d, 0xbe, - 0xb1, 0xdc, 0x5b, 0x0d, 0x0f, 0x62, 0x3f, 0x06, 0x05, 0xec, 0x29, 0xf5, - 0xc7, 0xba, 0x95, 0x1c, 0xc0, 0x57, 0xff, 0x07, 0x96, 0xc0, 0x65, 0x8f, - 0x72, 0xef, 0x8a, 0x94, 0x40, 0xe5, 0xd2, 0x09, 0x76, 0xc1, 0x90, 0x7b, - 0x61, 0x26, 0xef, 0x56, 0x87, 0x0f, 0x54, 0x0a, 0xe4, 0x20, 0x8d, 0x46, - 0xfc, 0x04, 0x78, 0x47, 0x38, 0x6a, 0xc8, 0xa6, 0x1c, 0xa3, 0x4b, 0x24, - 0x01, 0xd7, 0x3e, 0x04, 0x0e, 0x91, 0xfb, 0xce, 0xd6, 0x78, 0xdf, 0x0f, - 0x5e, 0xb8, 0xa9, 0xf2, 0xf5, 0x6e, 0xd8, 0x88, 0xc0, 0xb6, 0x9e, 0xea, - 0x18, 0x6e, 0x77, 0xed, 0xa0, 0x8e, 0x98, 0x7a, 0x00, 0x59, 0xc5, 0x23, - 0xd2, 0x79, 0x47, 0xce, 0xee, 0xfa, 0xc0, 0x05, 0x40, 0x19, 0xd6, 0xb0, - 0x72, 0x58, 0xf2, 0xa7, 0x49, 0x14, 0x56, 0xa2, 0x50, 0x8e, 0xf6, 0xf2, - 0x33, 0x95, 0x41, 0x4c, 0xea, 0xb7, 0x3e, 0x9b, 0xb3, 0x63, 0x0a, 0xdc, - 0x4b, 0xb7, 0xe9, 0x5f, 0x5c, 0x2e, 0x5d, 0xac, 0x07, 0x03, 0xef, 0xda, - 0x70, 0x36, 0xb7, 0xf3, 0x69, 0x4f, 0x21, 0xde, 0x0c, 0x7d, 0xe5, 0x71, - 0x79, 0xd4, 0xd4, 0xd7, 0xb8, 0xb2, 0xcf, 0xae, 0xd0, 0xd3, 0xae, 0xe2, - 0x88, 0xda, 0x7d, 0x24, 0x2b, 0x07, 0x80, 0x01, 0x0b, 0x8b, 0xbc, 0x3d, - 0xc9, 0x50, 0x2a, 0x4c, 0xf3, 0x08, 0x5b, 0xc1, 0x51, 0x03, 0x35, 0x29, - 0x27, 0x56, 0xd3, 0xb6, 0xdb, 0x5f, 0x54, 0x8b, 0x31, 0xeb, 0x63, 0xe6, - 0x3e, 0x8a, 0x24, 0x5d, 0xe3, 0xa3, 0x3a, 0x28, 0x51, 0xd6, 0x07, 0x71, - 0x73, 0x54, 0x1b, 0x37, 0xc0, 0xf7, 0xcd, 0x54, 0x74, 0x4e, 0xcf, 0x5a, - 0x12, 0x8a, 0x89, 0xf0, 0x07, 0xf9, 0x30, 0xbf, 0x35, 0xd1, 0xd0, 0x84, - 0x1c, 0xe2, 0x9e, 0x23, 0x94, 0x00, 0xa9, 0x5c, 0xdf, 0x1e, 0x66, 0x3c, - 0xdf, 0x8b, 0x4e, 0xfc, 0x4d, 0x00, 0x97, 0x3d, 0xd1, 0xe8, 0x52, 0x79, - 0xda, 0x4e, 0xab, 0x47, 0x24, 0x03, 0xb7, 0xb5, 0xdf, 0x82, 0x6f, 0xfe, - 0xb2, 0x3c, 0x43, 0x0f, 0x73, 0x7c, 0x50, 0xdc, 0xb0, 0x80, 0xd8, 0x2d, - 0x8e, 0xb6, 0x42, 0x52, 0x4e, 0x44, 0x9c, 0x2b, 0x89, 0x29, 0xe4, 0x01, - 0x56, 0x02, 0x7d, 0xba, 0x20, 0x8d, 0x43, 0x16, 0x4a, 0x7a, 0x22, 0x7b, - 0xfc, 0xba, 0x7a, 0xdf, 0xbe, 0x96, 0x76, 0x40, 0xc6, 0x43, 0xb3, 0xe3, - 0xca, 0x22, 0x1b, 0x5e, 0x9a, 0x2a, 0x75, 0xd5, 0xfc, 0x23, 0xa6, 0xf1, - 0xca, 0xad, 0xa8, 0x82, 0xd7, 0xb7, 0x21, 0xd4, 0x20, 0xcd, 0x3c, 0xe9, - 0x20, 0x23, 0x1a, 0xae, 0xa2, 0xe6, 0x72, 0x2c, 0xf2, 0x77, 0x3c, 0x0f, - 0x70, 0x61, 0xc3, 0x49, 0x0d, 0x1c, 0x54, 0x64, 0xcd, 0x50, 0x2a, 0x89, - 0x09, 0x62, 0x2c, 0x13, 0x36, 0x07, 0x54, 0x90, 0x31, 0x7a, 0xcc, 0x90, - 0x73, 0x8d, 0xae, 0x4c, 0xab, 0x3e, 0x93, 0xa9, 0x5a, 0x2d, 0x8f, 0xcc, - 0x7c, 0x9a, 0x1a, 0x75, 0xb2, 0x18, 0x8b, 0xc7, 0xd5, 0x4f, 0x1e, 0x65, - 0xbf, 0x64, 0x7b, 0xac, 0xf6, 0x9f, 0x26, 0x38, 0x91, 0x66, 0xc9, 0xee, - 0xea, 0x33, 0x87, 0xb3, 0xe2, 0xcc, 0x4a, 0xab, 0x13, 0xfa, 0x0b, 0xea, - 0x4b, 0x99, 0x98, 0xef, 0xa4, 0x98, 0x38, 0x61, 0x57, 0xaf, 0x33, 0x1e, - 0xbf, 0x8a, 0xf6, 0xba, 0x47, 0x43, 0x0d, 0xb8, 0x56, 0xd6, 0x3a, 0xef, - 0x41, 0x4c, 0xd9, 0xc7, 0x6f, 0x34, 0x59, 0xb4, 0xe0, 0x19, 0xc8, 0x74, - 0x11, 0x79, 0xd5, 0xcf, 0x15, 0x40, 0x1a, 0xaa, 0xeb, 0xb8, 0x6c, 0x96, - 0x76, 0x6f, 0xb9, 0x01, 0xe0, 0xd0, 0x7e, 0x09, 0x3a, 0x2a, 0x4a, 0xd9, - 0xba, 0x90, 0xa9, 0x2a, 0x59, 0xb7, 0xb4, 0x3f, 0x37, 0x49, 0xe8, 0x32, - 0x57, 0xfd, 0x51, 0x87, 0xe8, 0x2f, 0x38, 0xcd, 0xce, 0x98, 0xdc, 0x54, - 0xa6, 0xc8, 0x89, 0xd8, 0x8b, 0x03, 0x2b, 0x54, 0xad, 0xf3, 0xd9, 0x16, - 0xd9, 0x53, 0xec, 0xf8, 0x5c, 0xb7, 0xa5, 0x6b, 0xb2, 0x09, 0xd6, 0x17, - 0xcb, 0xbb, 0x45, 0x71, 0xdb, 0x67, 0xd8, 0x49, 0x73, 0x2b, 0x80, 0xfc, - 0x01, 0xcd, 0x4e, 0x18, 0xda, 0xb5, 0x9a, 0x9c, 0xcd, 0xac, 0x53, 0x3c, - 0x09, 0x85, 0x69, 0x76, 0xa9, 0xdf, 0x9a, 0x8d, 0x00, 0xd2, 0xea, 0xf7, - 0xb3, 0xa7, 0x86, 0x51, 0xb6, 0xd8, 0xeb, 0x02, 0xd4, 0x4b, 0xc7, 0xa6, - 0x76, 0x57, 0xc0, 0xf8, 0xb5, 0x52, 0xfd, 0x18, 0x3f, 0xf4, 0x24, 0x78, - 0xd8, 0xdc, 0xd0, 0x14, 0x00, 0xb9, 0xef, 0x04, 0xe6, 0x62, 0xf4, 0x2f, - 0x7c, 0x72, 0x01, 0x93, 0x17, 0xb5, 0xbf, 0x85, 0x2e, 0x2d, 0x79, 0xdc, - 0xb9, 0xc8, 0xdd, 0x6a, 0xd2, 0x83, 0xd1, 0x74, 0x01, 0x4d, 0xac, 0xab, - 0x6e, 0xbd, 0x21, 0x1d, 0xf7, 0x0b, 0xe2, 0x68, 0xff, 0x46, 0x9d, 0xd8, - 0x72, 0x19, 0xeb, 0x33, 0x61, 0x96, 0x93, 0x3b, 0x40, 0xd0, 0x5b, 0x10, - 0x03, 0x0d, 0x36, 0xa0, 0xd3, 0x95, 0x51, 0x99, 0x76, 0x11, 0x67, 0xc9, - 0x72, 0xba, 0x90, 0x59, 0x45, 0x8a, 0x35, 0x9b, 0x65, 0xbb, 0xc4, 0x6e, - 0xa7, 0x11, 0x6b, 0x44, 0xa8, 0xff, 0x2a, 0xc2, 0x47, 0xc8, 0x6e, 0x9b, - 0x89, 0x7e, 0xcc, 0x56, 0xe6, 0x3f, 0x04, 0x7d, 0x43, 0x15, 0x42, 0xfa, - 0xfb, 0x5c, 0x2e, 0x1d, 0xad, 0xbc, 0xe6, 0x73, 0x34, 0x48, 0xcd, 0xf5, - 0x10, 0x5e, 0x4a, 0x69, 0x1b, 0xe7, 0x09, 0xcb, 0xf6, 0x12, 0xff, 0xea, - 0xdd, 0x53, 0x57, 0x61, 0x53, 0x15, 0x58, 0x6c, 0xf2, 0x74, 0xdd, 0x05, - 0xf6, 0x98, 0x78, 0x34, 0x74, 0x88, 0xee, 0x86, 0xfc, 0x48, 0xc3, 0x37, - 0xe8, 0xfb, 0x05, 0xcd, 0xfb, 0x80, 0xd5, 0xee, 0xf6, 0xdc, 0xbc, 0x05, - 0xe7, 0x4d, 0x18, 0x7e, 0xe3, 0x08, 0xa6, 0xf3, 0xc0, 0x84, 0x3c, 0xf0, - 0xda, 0x27, 0xa9, 0xfb, 0xa6, 0xef, 0x4a, 0xaa, 0x32, 0x8c, 0xc0, 0x46, - 0x9f, 0x65, 0xbb, 0x5d, 0x9d, 0xf3, 0x5b, 0x73, 0x9a, 0xe9, 0x73, 0x81, - 0x73, 0xd6, 0xcb, 0xb7, 0x52, 0x21, 0x67, 0xce, 0xa4, 0x45, 0x7f, 0xe0, - 0x83, 0x1d, 0x9e, 0x60, 0x99, 0xd9, 0x7d, 0x5e, 0x53, 0xaf, 0x6b, 0x9e, - 0x5d, 0xfc, 0x11, 0x16, 0xf6, 0xa0, 0xd9, 0xb8, 0x6e, 0xe5, 0x13, 0x3b, - 0xbc, 0xd6, 0x43, 0x23, 0xde, 0x43, 0x1f, 0xc4, 0x2f, 0xba, 0x46, 0x03, - 0x7d, 0x76, 0x21, 0xc0, 0xf6, 0x87, 0x95, 0xd8, 0x04, 0x9e, 0x4f, 0x9c, - 0x0f, 0x11, 0x41, 0x2c, 0x06, 0x02, 0xeb, 0x2c, 0xac, 0x68, 0x49, 0x59, - 0x89, 0x71, 0xde, 0x1b, 0x0b, 0x25, 0xc1, 0x83, 0x71, 0x31, 0x66, 0xee, - 0xdf, 0xd7, 0x1f, 0xa0, 0xae, 0x13, 0x69, 0x0f, 0x61, 0x60, 0x2b, 0xf5, - 0xb5, 0x36, 0xac, 0x52, 0x19, 0xc7, 0x00, 0xe2, 0xd2, 0x0d, 0xff, 0xe5, - 0x0f, 0xb7, 0x5a, 0x04, 0x3b, 0xe1, 0x60, 0x6f, 0xf0, 0x45, 0x49, 0x83, - 0x97, 0x87, 0x5c, 0xbc, 0x82, 0x15, 0x47, 0x9d, 0x45, 0x01, 0x89, 0x99, - 0x10, 0x8a, 0xb7, 0x7a, 0xfc, 0x75, 0x67, 0x82, 0xf0, 0xa9, 0x8b, 0xd9, - 0x0c, 0x71, 0xa9, 0x00, 0x39, 0xff, 0x0a, 0xde, 0x5b, 0x78, 0x4b, 0x89, - 0x07, 0x23, 0xff, 0x31, 0xb3, 0xaa, 0xa4, 0x2c, 0xb0, 0x2f, 0x69, 0xd0, - 0x5a, 0x39, 0x5c, 0x76, 0x51, 0x80, 0x16, 0x2e, 0x43, 0xa9, 0xde, 0xbe, - 0x7e, 0xa6, 0xad, 0x04, 0x15, 0x53, 0x85, 0x40, 0x4b, 0xc7, 0x00, 0x46, - 0x60, 0x69, 0xca, 0x95, 0xfd, 0x5a, 0x67, 0xc2, 0xd7, 0x11, 0xae, 0x55, - 0xca, 0x06, 0xd8, 0x1f, 0x4c, 0x02, 0x75, 0x5e, 0x38, 0x6f, 0x76, 0x9e, - 0x07, 0xff, 0x59, 0x0a, 0x62, 0x3d, 0xa1, 0x11, 0xe2, 0xc2, 0xea, 0xa7, - 0x90, 0x19, 0x52, 0x2b, 0xf6, 0x5b, 0x35, 0x0c, 0x0a, 0x51, 0x3d, 0x1b, - 0x1e, 0x82, 0x13, 0xfa, 0x8a, 0x7b, 0x43, 0x22, 0xdf, 0x99, 0xda, 0x19, - 0x2a, 0xdc, 0x33, 0x4c, 0xba, 0x42, 0x1b, 0xc5, 0x45, 0xf0, 0xa6, 0x50, - 0x01, 0x05, 0x4e, 0xce, 0x93, 0x04, 0xc2, 0x0a, 0x81, 0xa0, 0x10, 0xfd, - 0xf3, 0x46, 0x6f, 0xb0, 0x6d, 0x84, 0x8c, 0x46, 0xcc, 0xe2, 0xa6, 0x1c, - 0x27, 0x2c, 0xc3, 0x97, 0xc8, 0x24, 0x6e, 0x2b, 0x8d, 0x9f, 0x7a, 0xfd, - 0x5a, 0x55, 0x21, 0x45, 0xa4, 0xbb, 0xc1, 0xa8, 0x2d, 0xd3, 0xc9, 0x7e, - 0x13, 0xdb, 0x0f, 0xbf, 0x93, 0xb5, 0x8c, 0x99, 0x11, 0x96, 0x35, 0xc3, - 0x8a, 0x1f, 0xde, 0xc3, 0x89, 0x7a, 0x57, 0x1c, 0x08, 0xf0, 0x1f, 0x10, - 0xa3, 0x5b, 0xbc, 0x3f, 0xfc, 0x34, 0x0c, 0x28, 0x82, 0xac, 0xeb, 0xbf, - 0x31, 0x67, 0x6f, 0x3e, 0xa3, 0xcd, 0xc1, 0x44, 0x57, 0x8a, 0xac, 0x05, - 0xb8, 0xf1, 0xdd, 0xab, 0xb8, 0x9f, 0xb6, 0x35, 0x11, 0x38, 0x96, 0xd7, - 0x67, 0xe7, 0x7f, 0xe5, 0x0e, 0xd8, 0x87, 0x26, 0x6d, 0x49, 0x9f, 0x68, - 0x6a, 0xba, 0xfa, 0x01, 0x06, 0xca, 0xe6, 0xac, 0xac, 0x14, 0x63, 0xd9, - 0x95, 0x8a, 0x22, 0x79, 0x1e, 0x03, 0xdf, 0x83, 0x96, 0x71, 0x4d, 0x05, - 0x81, 0xb9, 0x95, 0x20, 0x9e, 0x09, 0xc5, 0xdd, 0x5c, 0x1e, 0x9e, 0x24, - 0x76, 0xc9, 0xe3, 0x0f, 0x11, 0xb8, 0xf0, 0x04, 0xa4, 0x5d, 0x3d, 0xc4, - 0x12, 0xe8, 0xfd, 0x00, 0x0d, 0xb3, 0x97, 0x95, 0xfe, 0xe8, 0x3b, 0xe8, - 0xa0, 0x0b, 0xae, 0x56, 0xd4, 0x03, 0xe7, 0xcd, 0xae, 0x53, 0xde, 0xbb, - 0x69, 0xde, 0xc3, 0x81, 0x87, 0x45, 0x08, 0x51, 0xa7, 0x02, 0x14, 0x11, - 0x23, 0x1d, 0x3e, 0x0d, 0xe6, 0x82, 0x05, 0x18, 0x63, 0x3c, 0x76, 0x5a, - 0x27, 0xd2, 0x59, 0xde, 0xe8, 0x94, 0x7a, 0x43, 0x47, 0xa9, 0x2d, 0xc4, - 0x6f, 0xf9, 0x77, 0x27, 0x9c, 0xad, 0xe3, 0x4d, 0x8b, 0xc8, 0x1d, 0xfe, - 0x2e, 0xfe, 0x4b, 0xa6, 0x39, 0x25, 0x4b, 0x90, 0xb2, 0x54, 0x69, 0xb2, - 0x4c, 0xca, 0x17, 0xdd, 0xa8, 0x49, 0xd0, 0xbb, 0x86, 0xca, 0x3b, 0xc4, - 0x89, 0x10, 0x78, 0x1f, 0x90, 0x7e, 0xe9, 0xef, 0x89, 0xc3, 0x98, 0x23, - 0xcf, 0xbb, 0xce, 0xdc, 0xa7, 0x4a, 0xd2, 0x2b, 0xe7, 0x45, 0xdf, 0xb4, - 0x6e, 0xd1, 0xff, 0x2a, 0x7f, 0xa5, 0x89, 0x82, 0x28, 0x2f, 0xa5, 0xbb, - 0xee, 0xd1, 0x7f, 0xfc, 0x52, 0xb6, 0x27, 0xa0, 0xa3, 0x42, 0xf5, 0x2d, - 0x12, 0x3a, 0xb6, 0xd5, 0x9d, 0x2c, 0x62, 0xb8, 0x5e, 0x88, 0xe5, 0xb0, - 0x3c, 0xe8, 0x70, 0xd6, 0x73, 0x35, 0xe0, 0xe7, 0xb8, 0x16, 0x1c, 0xb7, - 0x82, 0xcc, 0xa3, 0x8b, 0x6c, 0xc1, 0x9d, 0x45, 0x51, 0x8f, 0xa8, 0xb1, - 0xaf, 0x7c, 0x5d, 0xd2, 0x67, 0x9f, 0xf0, 0xa3, 0x4d, 0x1f, 0x10, 0xf1, - 0x58, 0x8c, 0x9b, 0x14, 0xd2, 0x2d, 0xa9, 0x42, 0x90, 0xf6, 0xb6, 0x08, - 0x9d, 0x5a, 0xe0, 0x1f, 0x7a, 0x0f, 0x56, 0x2c, 0x06, 0x3d, 0xcd, 0x98, - 0x73, 0x71, 0x10, 0xc9, 0xf2, 0xa9, 0x18, 0x51, 0x6b, 0xa6, 0x96, 0xde, - 0xfb, 0xff, 0x3c, 0x18, 0x82, 0x0d, 0xa8, 0x7e, 0x80, 0xd8, 0x46, 0x3f, - 0xac, 0x10, 0xbd, 0xb7, 0xf8, 0x0b, 0x80, 0x2f, 0x7b, 0xda, 0x27, 0xdb, - 0xa8, 0x30, 0x1a, 0x78, 0x36, 0xa8, 0x0c, 0xe2, 0x78, 0x4c, 0x99, 0xbd, - 0xf9, 0xb0, 0x3d, 0xaa, 0x20, 0x88, 0xd3, 0xfd, 0x75, 0x08, 0x36, 0x3d, - 0x53, 0x46, 0xbf, 0xdb, 0xef, 0x94, 0x0f, 0xa2, 0x4c, 0x49, 0x44, 0x85, - 0xda, 0x9f, 0x94, 0xb9, 0xed, 0x68, 0x9f, 0x39, 0xa9, 0x47, 0xb8, 0x46, - 0x35, 0x45, 0x74, 0x11, 0x78, 0xf5, 0x47, 0xd2, 0x04, 0x19, 0x82, 0xcc, - 0x8f, 0x9e, 0xba, 0x50, 0x31, 0xff, 0x44, 0xeb, 0x7c, 0xe5, 0xbb, 0x0a, - 0xa4, 0x37, 0x6c, 0xd0, 0x89, 0x84, 0x1d, 0x2c, 0xe5, 0x17, 0x0c, 0x45, - 0x0b, 0x03, 0x46, 0xb4, 0xc7, 0xda, 0x4a, 0x5d, 0xb7, 0xb1, 0xb6, 0xc3, - 0x54, 0xf2, 0xf2, 0x4c, 0x22, 0x49, 0x95, 0x97, 0x8a, 0xba, 0xcf, 0x20, - 0x83, 0x47, 0xf4, 0xf7, 0xb0, 0x60, 0x19, 0x37, 0xc7, 0xb0, 0x56, 0x00, - 0x16, 0xe2, 0xca, 0x87, 0x62, 0x9f, 0x73, 0x82, 0x55, 0xb8, 0x89, 0x33, - 0xc7, 0xe6, 0xf3, 0xda, 0x3f, 0x4d, 0x85, 0x3b, 0x46, 0x6f, 0xb1, 0xd3, - 0x24, 0x7e, 0xb2, 0x92, 0x20, 0xd1, 0x28, 0xb3, 0x4d, 0xe3, 0x4d, 0xac, - 0xe6, 0xaa, 0x9f, 0x86, 0x2f, 0x15, 0x07, 0x38, 0x54, 0xa5, 0xce, 0xc2, - 0x77, 0x05, 0xd0, 0x63, 0x07, 0x5b, 0xc1, 0x4c, 0x1f, 0xe3, 0x02, 0xf5, - 0xf1, 0x58, 0xd4, 0x37, 0xef, 0xf8, 0xcb, 0x20, 0x6c, 0x32, 0x73, 0xb1, - 0x0f, 0x4c, 0x67, 0x11, 0x2f, 0x97, 0x66, 0x4d, 0x95, 0xe0, 0x2e, 0x80, - 0x99, 0x4d, 0x42, 0x6c, 0xb3, 0x99, 0x35, 0xe0, 0xae, 0x16, 0xc5, 0xe6, - 0x7e, 0xd0, 0x77, 0x80, 0x74, 0x34, 0x3c, 0x6e, 0xe8, 0x8a, 0x95, 0x62, - 0xbb, 0x47, 0x6e, 0x09, 0xb2, 0x90, 0x96, 0xc3, 0x9c, 0xd5, 0xca, 0x3a, - 0xc8, 0xeb, 0x4d, 0x0e, 0xb2, 0x18, 0xf4, 0xd3, 0x54, 0x54, 0x94, 0xe2, - 0x80, 0x0c, 0x92, 0x2b, 0xd2, 0xa3, 0xe5, 0x85, 0x75, 0x92, 0xcf, 0x4d, - 0xc1, 0x55, 0xe0, 0xad, 0x15, 0x79, 0x00, 0xa5, 0x1a, 0x89, 0x31, 0x40, - 0xfa, 0x39, 0xfc, 0x52, 0x35, 0xde, 0x10, 0x9c, 0xad, 0x44, 0xc7, 0x15, - 0x55, 0x6d, 0xec, 0x28, 0xf2, 0xfb, 0x51, 0x35, 0x1e, 0xce, 0xa0, 0x62, - 0x7b, 0x21, 0x4d, 0x17, 0xc2, 0x44, 0xbe, 0x77, 0x57, 0x5b, 0x17, 0xf0, - 0x2b, 0x18, 0xaf, 0x6a, 0x8f, 0x32, 0x31, 0xa4, 0x33, 0xe5, 0x94, 0x85, - 0xcf, 0x21, 0x83, 0x87, 0x56, 0xcc, 0x43, 0xd7, 0x69, 0x38, 0x97, 0x88, - 0xa5, 0xeb, 0x7f, 0x9a, 0x1b, 0x88, 0x91, 0xcc, 0xf8, 0x50, 0x33, 0xeb, - 0x61, 0xa4, 0x06, 0x30, 0x0b, 0x33, 0x30, 0x31, 0x1d, 0xec, 0x99, 0x82, - 0xc5, 0x1b, 0xb0, 0x14, 0x9e, 0x66, 0xc5, 0x6b, 0x07, 0x77, 0xf5, 0x39, - 0xd8, 0x83, 0x81, 0xa2, 0xf4, 0x2c, 0x40, 0xbc, 0x89, 0x61, 0xa7, 0xc3, - 0x04, 0x60, 0x8c, 0xe9, 0x81, 0x84, 0xed, 0x46, 0x4c, 0xc8, 0xb0, 0x11, - 0x95, 0x6d, 0x10, 0xb3, 0x81, 0x3b, 0xf4, 0x73, 0xfb, 0xcb, 0x66, 0xeb, - 0xfc, 0x54, 0x96, 0x2a, 0xa3, 0xaa, 0xb5, 0x28, 0x0b, 0xe4, 0xee, 0xe6, - 0x7e, 0xb3, 0xeb, 0x0f, 0x0f, 0x7d, 0x91, 0x53, 0x2c, 0x68, 0xc4, 0xf0, - 0xb2, 0x9e, 0xee, 0x29, 0x4a, 0x8a, 0x39, 0x6e, 0x2f, 0x7b, 0xfc, 0x0d, - 0x41, 0x1a, 0xc6, 0xc1, 0x2d, 0x93, 0xaf, 0xa4, 0x11, 0x20, 0xcd, 0xbf, - 0x11, 0xe4, 0xe8, 0x5d, 0x8b, 0x0b, 0x6a, 0x9a, 0x6a, 0xac, 0x1f, 0xc9, - 0xf9, 0xd9, 0x9d, 0xdb, 0x4b, 0x2f, 0x9e, 0x8e, 0x8d, 0x12, 0xdd, 0xe1, - 0xb9, 0xc9, 0x32, 0x76, 0x0b, 0xc6, 0xf7, 0x08, 0x48, 0x6a, 0xb3, 0x70, - 0x96, 0x69, 0x9b, 0xfa, 0x31, 0x28, 0xa1, 0xf4, 0x25, 0xe6, 0x30, 0x52, - 0x1a, 0x89, 0xe5, 0x4b, 0xbf, 0xc2, 0x25, 0x30, 0x4d, 0xa2, 0xf6, 0x00, - 0x99, 0x23, 0x57, 0xfd, 0x79, 0xb6, 0x4c, 0x0d, 0xa8, 0x5a, 0x1e, 0xf7, - 0xb2, 0x85, 0x17, 0x74, 0x5e, 0xb9, 0xc2, 0x69, 0x29, 0x67, 0x03, 0xb5, - 0x35, 0xc1, 0xd2, 0xc5, 0x70, 0x1a, 0x94, 0x12, 0xe8, 0x2e, 0x59, 0x81, - 0xbd, 0xce, 0x72, 0x9a, 0x4d, 0x03, 0x42, 0x51, 0xaa, 0x0c, 0xa5, 0x9c, - 0x91, 0xf9, 0xd1, 0x92, 0xc5, 0xbd, 0xef, 0x6c, 0x8d, 0x7d, 0x73, 0x4c, - 0x43, 0x41, 0xcf, 0x65, 0xd9, 0xca, 0x38, 0x98, 0x7a, 0x82, 0x56, 0x83, - 0x48, 0x08, 0x4d, 0x00, 0x82, 0x25, 0xb9, 0xba, 0xf3, 0x31, 0x96, 0x26, - 0xcc, 0x14, 0x56, 0x5a, 0x3c, 0x62, 0x2b, 0xf3, 0x56, 0x33, 0xdf, 0xe2, - 0x9f, 0x1e, 0xcf, 0x35, 0x03, 0xad, 0x94, 0x89, 0x60, 0x82, 0x18, 0xce, - 0x0d, 0x81, 0xcc, 0x35, 0x96, 0xbd, 0xda, 0x22, 0x58, 0x1c, 0xe9, 0x26, - 0x96, 0x4c, 0x0a, 0x98, 0xc5, 0xbb, 0x8f, 0x10, 0xb9, 0x1d, 0x0e, 0x05, - 0x59, 0xef, 0x95, 0x22, 0xcd, 0xa9, 0xbb, 0x75, 0x68, 0xac, 0xfc, 0xf5, - 0x32, 0x64, 0x38, 0x36, 0xc4, 0x82, 0x02, 0xd5, 0x95, 0x1d, 0xb8, 0xf5, - 0x0e, 0x42, 0xa4, 0x69, 0x32, 0x82, 0x3d, 0x68, 0x15, 0xf9, 0x13, 0x66, - 0x9e, 0x4f, 0xd0, 0xfa, 0x32, 0x95, 0x42, 0xd1, 0xf7, 0x43, 0xb1, 0x0c, - 0x0e, 0x91, 0xfc, 0xa0, 0xcb, 0x0f, 0xda, 0xac, 0x67, 0xf7, 0x64, 0x2e, - 0x5f, 0xc7, 0x08, 0xeb, 0xfd, 0x75, 0xf7, 0x74, 0x8e, 0xb9, 0xff, 0x57, - 0xe3, 0xe0, 0x73, 0xcd, 0xdf, 0xec, 0x20, 0x27, 0xb8, 0x52, 0x43, 0xce, - 0x8c, 0xd0, 0x0f, 0xdd, 0x1a, 0xb2, 0x9c, 0x1e, 0xb9, 0x7b, 0x5b, 0x1c, - 0xed, 0xd4, 0x54, 0xc1, 0x80, 0x6c, 0x5f, 0xdb, 0xb1, 0x68, 0x9f, 0xac, - 0x8a, 0x82, 0xc2, 0x33, 0x9e, 0xa8, 0x22, 0xe6, 0xf2, 0x13, 0x60, 0xf7, - 0x1f, 0x4e, 0x67, 0xbc, 0xa7, 0x5c, 0xf4, 0xa9, 0xa9, 0xf3, 0x8f, 0xb2, - 0x36, 0x43, 0xd5, 0x5c, 0x4c, 0x1f, 0x0b, 0x02, 0x55, 0xad, 0xfd, 0x14, - 0x54, 0x4f, 0x0e, 0x5d, 0xe4, 0x08, 0xaa, 0xda, 0x65, 0xee, 0x39, 0xf3, - 0x79, 0x42, 0x0e, 0xa7, 0xd1, 0x95, 0x5b, 0xcf, 0x06, 0xb4, 0xfa, 0x9d, - 0xd1, 0x6b, 0x0d, 0x50, 0xa3, 0x00, 0x57, 0x04, 0x13, 0xfd, 0x3c, 0xe7, - 0x0b, 0xf4, 0x62, 0x92, 0xc8, 0x88, 0x44, 0x4c, 0x18, 0x1f, 0xde, 0x59, - 0x9f, 0x45, 0xc9, 0x32, 0xdf, 0x6e, 0xa7, 0x00, 0x08, 0x03, 0x18, 0xe0, - 0xb7, 0x53, 0x52, 0x81, 0x8a, 0x6f, 0x05, 0x21, 0x3e, 0xc3, 0xa8, 0x8f, - 0xc1, 0xc4, 0x50, 0xe2, 0x3b, 0x26, 0x35, 0xbb, 0x69, 0xe1, 0x6b, 0xb7, - 0xed, 0xf3, 0x5b, 0x4e, 0xc8, 0x36, 0xf0, 0xe8, 0x0e, 0xa0, 0x2f, 0x43, - 0x8b, 0x0d, 0x8b, 0x1f, 0xad, 0xa3, 0x6e, 0x8a, 0x6a, 0x80, 0x33, 0x8b, - 0xe0, 0x6f, 0x39, 0xa4, 0x43, 0xbc, 0x9b, 0x41, 0x60, 0x8c, 0xca, 0x5e, - 0x25, 0x1f, 0xd4, 0x33, 0xaf, 0xef, 0xe2, 0xed, 0x9c, 0x2d, 0x0c, 0x66, - 0x8f, 0x44, 0x47, 0x02, 0x50, 0x38, 0x99, 0x9e, 0x42, 0x9d, 0xd2, 0x3f, - 0x94, 0xbc, 0x38, 0xcd, 0x56, 0x68, 0x69, 0x39, 0x64, 0x05, 0x1c, 0x5f, - 0x0c, 0xbb, 0xed, 0x6d, 0xb2, 0x31, 0xd7, 0x33, 0x83, 0x51, 0xb1, 0x26, - 0x04, 0x67, 0x35, 0x8e, 0x8c, 0x74, 0x90, 0x9b, 0x46, 0xca, 0x0a, 0x7a, - 0x6c, 0xae, 0xe3, 0x7c, 0x87, 0x42, 0xd0, 0xbb, 0x82, 0x27, 0x1c, 0x3e, - 0xde, 0x81, 0xcb, 0xd3, 0x5f, 0x6c, 0x5a, 0xae, 0xd6, 0xff, 0x51, 0x51, - 0xa6, 0x9c, 0xfa, 0x14, 0x4c, 0x88, 0x51, 0x55, 0xab, 0xeb, 0x4b, 0xbc, - 0xa7, 0x62, 0x81, 0x4a, 0x26, 0xde, 0x21, 0x79, 0x26, 0x6d, 0xe9, 0xb6, - 0x3f, 0x72, 0xb8, 0x51, 0x79, 0x72, 0x3e, 0x83, 0x82, 0xd2, 0x95, 0xbf, - 0x70, 0xa5, 0xbc, 0xd7, 0x07, 0x68, 0xaa, 0x00, 0x2c, 0xf8, 0xfe, 0x45, - 0xd9, 0xd7, 0x33, 0x61, 0xce, 0xa9, 0xe9, 0xe1, 0x77, 0xa9, 0x8b, 0x7f, - 0xda, 0x26, 0x2c, 0x6a, 0xda, 0x31, 0x7a, 0xb9, 0x2f, 0xa2, 0xef, 0x74, - 0x93, 0x2c, 0x53, 0x2a, 0x81, 0xd5, 0x61, 0x15, 0x1d, 0xa8, 0x1d, 0x7f, - 0xd1, 0x82, 0xee, 0xe1, 0x34, 0x42, 0x5d, 0xea, 0xdd, 0x87, 0x6a, 0x25, - 0x95, 0xdf, 0xaf, 0xb8, 0x24, 0x4f, 0x1c, 0xc2, 0x2f, 0xdc, 0xf7, 0x25, - 0xe6, 0xea, 0x64, 0x84, 0x37, 0xba, 0x3a, 0x1e, 0xf2, 0x5e, 0x74, 0xaf, - 0x32, 0x8e, 0xa7, 0x9d, 0x74, 0x6b, 0x26, 0x09, 0x4c, 0x12, 0x28, 0xf2, - 0x1b, 0x69, 0x30, 0xf3, 0x11, 0xf0, 0x5b, 0xbf, 0xad, 0x2a, 0xa4, 0x11, - 0x51, 0x6f, 0x11, 0xe4, 0x5b, 0xf5, 0xad, 0x04, 0x4f, 0xe1, 0x73, 0x59, - 0xdb, 0x24, 0x2a, 0x78, 0x6c, 0xdf, 0x95, 0xe1, 0x7c, 0x92, 0xf8, 0x69, - 0x36, 0xdd, 0x62, 0xf2, 0x6c, 0xbd, 0xe7, 0xfd, 0x49, 0xc5, 0x30, 0xa3, - 0xdc, 0x5e, 0xd7, 0x37, 0xd3, 0x3e, 0x7f, 0x3d, 0x5c, 0x4d, 0xee, 0x18, - 0xdb, 0xff, 0xb9, 0x7c, 0x33, 0xa5, 0x6d, 0x23, 0x76, 0x3d, 0x81, 0x99, - 0x0b, 0x43, 0x7f, 0xbf, 0x35, 0xf9, 0x9f, 0x43, 0xae, 0x73, 0x4d, 0x56, - 0x17, 0x36, 0x82, 0x8b, 0x13, 0xaf, 0x03, 0xa4, 0x8e, 0xc4, 0xa0, 0x31, - 0x0e, 0xa5, 0x55, 0x43, 0x0d, 0xe3, 0x19, 0xaf, 0xa2, 0x6e, 0x3a, 0x31, - 0xa4, 0x07, 0x3f, 0x28, 0x89, 0x8c, 0x47, 0x9f, 0x74, 0xa9, 0x64, 0x9a, - 0xa6, 0x0e, 0x55, 0xd2, 0xd5, 0x18, 0x89, 0x88, 0x5b, 0x3f, 0xc5, 0x3a, - 0x3e, 0x6a, 0xc8, 0x9d, 0x80, 0x31, 0xb5, 0xc4, 0xc2, 0xe0, 0x5f, 0xb0, - 0x6f, 0xba, 0x17, 0x99, 0x21, 0x7d, 0x29, 0x8c, 0xfe, 0x5c, 0x4b, 0x1f, - 0x3f, 0x3c, 0xcc, 0x58, 0x06, 0x67, 0x36, 0xd0, 0x78, 0xad, 0x7a, 0x30, - 0xb3, 0x66, 0xd1, 0xc5, 0x84, 0x90, 0x93, 0x46, 0xd2, 0x65, 0xfa, 0x30, - 0x0e, 0x34, 0x64, 0xd4, 0x01, 0x56, 0x5a, 0x61, 0x92, 0xf7, 0xaa, 0xf2, - 0x99, 0x6e, 0xc7, 0x6a, 0xd1, 0x90, 0xeb, 0x59, 0x8c, 0xac, 0x8b, 0xe4, - 0x18, 0x23, 0x03, 0x64, 0x01, 0x9d, 0x8d, 0x29, 0xf7, 0x01, 0x38, 0x5f, - 0x4d, 0x45, 0x0a, 0x8c, 0x6f, 0x02, 0xc5, 0x10, 0x03, 0x3a, 0xda, 0xbc, - 0x0d, 0x52, 0x2c, 0x87, 0xf8, 0x47, 0x32, 0x64, 0x74, 0xb5, 0x84, 0x2f, - 0xe5, 0x50, 0x0c, 0xc6, 0xf7, 0x14, 0x25, 0x20, 0x76, 0xd2, 0xcf, 0x14, - 0xe3, 0x6e, 0xef, 0x1e, 0x54, 0x83, 0xa6, 0xf4, 0x13, 0x62, 0x22, 0xf0, - 0x97, 0x12, 0xf1, 0x2e, 0x49, 0x40, 0x4c, 0x7d, 0xe5, 0x2f, 0xa5, 0x0e, - 0x1c, 0x2c, 0xce, 0x5e, 0xfe, 0x55, 0xb2, 0xee, 0x71, 0x7a, 0x89, 0xfd, - 0x60, 0xf3, 0xe6, 0x36, 0xc5, 0xd7, 0x5b, 0xd1, 0xb3, 0x72, 0x4d, 0x55, - 0x65, 0xf6, 0x47, 0x16, 0x8e, 0x7e, 0xd1, 0xb3, 0x2e, 0xfe, 0xdc, 0xfb, - 0x0e, 0x50, 0x3c, 0x99, 0x1c, 0x5c, 0x2e, 0x4a, 0xce, 0x9f, 0x78, 0x49, - 0x32, 0x7c, 0x48, 0x99, 0x6a, 0x6c, 0x1d, 0xd0, 0x09, 0x08, 0x26, 0x02, - 0x2d, 0x09, 0xf9, 0xff, 0x1a, 0xcd, 0xe8, 0xa2, 0xc8, 0x81, 0xbf, 0xf1, - 0x28, 0x6f, 0xf2, 0xf5, 0xd1, 0x4e, 0xa3, 0x0f, 0xbd, 0x15, 0xc2, 0x3e, - 0x33, 0x32, 0xdf, 0x04, 0x2d, 0x5f, 0x6b, 0xb7, 0x95, 0xbf, 0x88, 0x2f, - 0xa1, 0x2e, 0xf1, 0x51, 0x59, 0xd2, 0x02, 0xf7, 0x22, 0xfb, 0x87, 0x36, - 0x39, 0xe7, 0xa2, 0xb9, 0x5e, 0x34, 0x71, 0xda, 0xf7, 0x15, 0x23, 0x2c, - 0xed, 0xae, 0xbd, 0x88, 0xaf, 0xf1, 0x8d, 0xa1, 0x25, 0x9a, 0xc2, 0x61, - 0xbc, 0xa3, 0xf6, 0x44, 0xd0, 0x9c, 0x57, 0x19, 0x19, 0x8a, 0x30, 0xee, - 0x00, 0xab, 0x8f, 0x6d, 0xd2, 0xb4, 0x08, 0x64, 0x08, 0xc9, 0x4e, 0xb9, - 0x1e, 0x6f, 0x28, 0xcc, 0xc4, 0x0c, 0x4e, 0x4d, 0xd4, 0x40, 0x0f, 0x04, - 0x8e, 0xba, 0x68, 0xb9, 0x71, 0x3b, 0x98, 0x9c, 0x4f, 0xeb, 0x9e, 0x29, - 0xff, 0xd3, 0xb6, 0x2d, 0xe5, 0x14, 0xda, 0x25, 0x27, 0x93, 0xb3, 0x6e, - 0x63, 0x8f, 0x25, 0x41, 0xb3, 0xc6, 0xa3, 0xe6, 0x76, 0x98, 0x46, 0xd1, - 0xbc, 0x54, 0x8d, 0x78, 0xe4, 0xc6, 0x15, 0xf7, 0xc1, 0xe6, 0xeb, 0x61, - 0xa9, 0x41, 0x86, 0x65, 0x3e, 0xb9, 0xa2, 0x69, 0x19, 0x42, 0x77, 0xa9, - 0x64, 0xa9, 0x55, 0xc6, 0x62, 0x77, 0x41, 0x99, 0x38, 0x7e, 0xfb, 0x46, - 0xd2, 0x9d, 0x02, 0xf3, 0x6e, 0x07, 0x45, 0x70, 0x49, 0x98, 0xff, 0xd2, - 0x88, 0x57, 0xa3, 0x63, 0x6a, 0x37, 0x84, 0xdc, 0xe7, 0x30, 0x14, 0x02, - 0xb2, 0xb1, 0x82, 0x2d, 0x87, 0x0d, 0x5e, 0xf4, 0xc5, 0xe5, 0x84, 0x02, - 0x02, 0xdf, 0xf2, 0x4e, 0x69, 0x52, 0x4f, 0x40, 0xfc, 0x01, 0x16, 0x53, - 0xb0, 0xca, 0x33, 0x80, 0x98, 0xe3, 0x3a, 0x1b, 0x50, 0x45, 0x82, 0x1f, - 0xa9, 0x39, 0x94, 0xe5, 0xf9, 0x27, 0x52, 0x01, 0xe9, 0x53, 0xf2, 0x0a, - 0x89, 0xab, 0x8a, 0x58, 0x00, 0xf5, 0xbc, 0x79, 0x35, 0x44, 0x27, 0xef, - 0xc2, 0x07, 0xa5, 0x42, 0xa9, 0xd2, 0xc2, 0xb0, 0x78, 0x8b, 0x81, 0xe6, - 0x00, 0x07, 0x2d, 0x94, 0xe0, 0x21, 0x56, 0x6e, 0x79, 0x87, 0x20, 0x53, - 0x8f, 0xea, 0x48, 0x7f, 0x3e, 0x48, 0xf6, 0x09, 0x82, 0x93, 0x22, 0x35, - 0x5c, 0x6d, 0x1b, 0xc1, 0xcd, 0x48, 0xbb, 0x6a, 0xd7, 0xe5, 0x07, 0x31, - 0x5c, 0x8a, 0x7a, 0x96, 0x2e, 0x43, 0x6e, 0x38, 0x2d, 0x00, 0x51, 0x9d, - 0x12, 0x65, 0x5c, 0x4e, 0xcb, 0xcb, 0x44, 0xe4, 0xa9, 0xe2, 0xf9, 0x35, - 0xb6, 0xdd, 0xbf, 0x0f, 0x18, 0xa9, 0x57, 0xe8, 0x3f, 0xce, 0xf8, 0x09, - 0x04, 0xcd, 0xff, 0x4f, 0x9b, 0x30, 0x57, 0x48, 0xd5, 0xce, 0x4f, 0x46, - 0x1a, 0xae, 0xa6, 0x2c, 0x5f, 0x72, 0x4d, 0xaf, 0x66, 0x41, 0x42, 0x70, - 0xe7, 0xac, 0xd4, 0xba, 0x5c, 0x5f, 0x2f, 0xc4, 0xa3, 0xfe, 0x17, 0xf6, - 0xeb, 0xdf, 0x38, 0x20, 0x05, 0x16, 0xfb, 0xdf, 0x8d, 0xf8, 0x9f, 0x22, - 0x41, 0xab, 0xbc, 0xa8, 0x87, 0xe1, 0x96, 0xe0, 0x42, 0x2a, 0x65, 0x3f, - 0x56, 0x96, 0xf0, 0x5a, 0xdd, 0xeb, 0x46, 0x23, 0x29, 0x58, 0xe7, 0xb2, - 0x32, 0x37, 0x99, 0x7f, 0x4d, 0x33, 0x52, 0x7e, 0x0d, 0x5f, 0xce, 0x79, - 0x3d, 0x48, 0x19, 0x55, 0x8a, 0xb9, 0x1d, 0xfd, 0xe7, 0x36, 0xb8, 0x0f, - 0xf1, 0xa8, 0xa2, 0xdb, 0x0e, 0xd9, 0x35, 0x11, 0xa0, 0xd0, 0xa9, 0xf3, - 0x16, 0xea, 0x2b, 0x2b, 0x57, 0x5d, 0x40, 0x92, 0x25, 0xff, 0x38, 0x70, - 0xeb, 0x3a, 0x01, 0xcf, 0xb6, 0x73, 0x4e, 0x73, 0xa6, 0x2b, 0xdf, 0xae, - 0x52, 0xf2, 0xec, 0xde, 0xd7, 0xb7, 0x23, 0x1d, 0xc2, 0x9c, 0x40, 0x5d, - 0xd3, 0x83, 0x8a, 0x92, 0x2e, 0xde, 0x5e, 0xb5, 0xcb, 0x31, 0x95, 0xa1, - 0x3e, 0x43, 0xc9, 0xfa, 0x0e, 0x64, 0x77, 0xe1, 0x1e, 0x9d, 0xd2, 0x78, - 0xc6, 0x5a, 0x30, 0xe5, 0x50, 0xf2, 0xcd, 0x8c, 0x1e, 0x2c, 0x32, 0xf4, - 0x03, 0x25, 0xe2, 0x67, 0xd5, 0xe5, 0x2b, 0x31, 0x4f, 0x5a, 0xea, 0xd0, - 0xe8, 0x25, 0x6b, 0xf5, 0xbe, 0x5d, 0x72, 0xec, 0xc2, 0xcd, 0x2f, 0x12, - 0x95, 0x42, 0xda, 0xc9, 0x70, 0x8d, 0xa8, 0x20, 0x23, 0x22, 0x37, 0x28, - 0x28, 0xdb, 0xa6, 0xf9, 0xe3, 0x35, 0xd1, 0x68, 0x53, 0x82, 0x9c, 0x2e, - 0x65, 0xa2, 0xbc, 0x62, 0x06, 0xdd, 0x6e, 0x27, 0xa0, 0x14, 0xe3, 0xf6, - 0xac, 0x8f, 0x82, 0xdf, 0x2a, 0x1a, 0xbb, 0x8f, 0x2c, 0xd8, 0x8f, 0x8a, - 0x06, 0xca, 0xa6, 0xf5, 0x30, 0x41, 0xb8, 0xbf, 0xfe, 0x7d, 0x53, 0x40, - 0xc3, 0x3f, 0x3a, 0x1b, 0xa7, 0xc0, 0x64, 0xb1, 0x2a, 0x51, 0xf1, 0x04, - 0xbd, 0x19, 0xb9, 0xaf, 0x17, 0xf2, 0x9e, 0x5a, 0x1e, 0x40, 0x78, 0xc3, - 0xd3, 0xef, 0x96, 0x78, 0x5d, 0x2f, 0x1a, 0xf0, 0x6f, 0xaf, 0x72, 0x52, - 0xae, 0x61, 0x93, 0x4f, 0x36, 0x76, 0x34, 0x8b, 0xf4, 0x0e, 0xd5, 0xd0, - 0xee, 0xe7, 0x8f, 0x91, 0x0d, 0x49, 0x7a, 0x45, 0x31, 0xa2, 0x60, 0xd9, - 0x8f, 0x51, 0x5c, 0x3f, 0x92, 0xca, 0x4e, 0x0d, 0x92, 0x04, 0x5d, 0x17, - 0x56, 0xa6, 0x02, 0x6c, 0x9b, 0x59, 0x32, 0x2c, 0x24, 0x5d, 0x86, 0x85, - 0x73, 0x1b, 0x9e, 0x56, 0xcf, 0x96, 0x08, 0x07, 0xc8, 0x5d, 0x78, 0x1d, - 0x51, 0x5d, 0x2a, 0x3f, 0x15, 0x40, 0xde, 0x32, 0xe5, 0x79, 0x2e, 0x9f, - 0x0b, 0x0b, 0x5a, 0xa4, 0x6b, 0xb3, 0xba, 0x69, 0xee, 0x77, 0x36, 0x08, - 0xf4, 0x8d, 0x00, 0x94, 0x86, 0x53, 0x7e, 0xd1, 0xee, 0x64, 0x7c, 0x88, - 0x9d, 0xf3, 0x01, 0xfd, 0xfc, 0xf6, 0x9d, 0xb4, 0xe6, 0xac, 0x08, 0x29, - 0x2c, 0x86, 0xb3, 0xe1, 0xf7, 0xb0, 0x7b, 0x0d, 0x9d, 0x31, 0xe1, 0x7b, - 0x9a, 0x35, 0x0a, 0x6c, 0x97, 0x19, 0xcc, 0x09, 0x07, 0x81, 0x4d, 0xbe, - 0xf0, 0xe9, 0x56, 0xb0, 0xd0, 0x4e, 0x4d, 0x18, 0x9b, 0x07, 0xe5, 0xdd, - 0x80, 0x04, 0x68, 0x70, 0x83, 0xae, 0xb5, 0x6e, 0x28, 0x80, 0x1a, 0xac, - 0xab, 0xe8, 0xcb, 0x56, 0xef, 0xab, 0x34, 0x48, 0x17, 0xe8, 0xca, 0x74, - 0x6e, 0xff, 0xbc, 0x9f, 0x0c, 0xcb, 0xcb, 0x7b, 0xe0, 0x16, 0x93, 0x5c, - 0xdf, 0x18, 0x51, 0x3b, 0x97, 0x57, 0x6e, 0xef, 0xac, 0x1d, 0xc4, 0x93, - 0xc1, 0x5d, 0x29, 0x32, 0x98, 0x18, 0x9e, 0x3a, 0x0d, 0x45, 0x90, 0xeb, - 0xf8, 0xb9, 0xbe, 0xd4, 0x35, 0x6f, 0xb5, 0xea, 0xe7, 0xf6, 0xc7, 0x6f, - 0x2b, 0xf1, 0xe7, 0x40, 0x98, 0xe7, 0x04, 0x5e, 0x1b, 0x1c, 0x19, 0x5f, - 0xf6, 0x6a, 0xce, 0x56, 0x07, 0x18, 0xcf, 0x78, 0xca, 0x25, 0xb7, 0x35, - 0xa3, 0xf0, 0xf7, 0x3b, 0xdd, 0x1a, 0x16, 0x5d, 0x97, 0x3e, 0x7d, 0x21, - 0xce, 0x62, 0x6a, 0xf1, 0x1a, 0xcc, 0x8b, 0xb5, 0x19, 0xd1, 0x03, 0x94, - 0x33, 0x86, 0xe2, 0xc2, 0x43, 0xb5, 0xa8, 0xdc, 0x4c, 0xd5, 0x67, 0x29, - 0x2e, 0x4e, 0x81, 0xe6, 0x06, 0x1b, 0x81, 0x39, 0xd1, 0x66, 0xcb, 0x18, - 0x7c, 0xd0, 0x04, 0x17, 0xdd, 0x83, 0x02, 0xbf, 0xf5, 0xaa, 0xe9, 0xec, - 0xdb, 0x1a, 0xc9, 0xca, 0x9d, 0x53, 0xe7, 0x01, 0xc8, 0xa7, 0xcf, 0x49, - 0xc0, 0x8f, 0x53, 0x40, 0x28, 0x51, 0x62, 0x5f, 0xd5, 0xf9, 0x6a, 0x01, - 0x7b, 0x7f, 0x09, 0x13, 0x57, 0xf9, 0xc9, 0x56, 0xd6, 0x88, 0xbb, 0x13, - 0x7b, 0x53, 0xcc, 0x79, 0x7e, 0x2e, 0x13, 0x42, 0xfc, 0x37, 0x48, 0xf0, - 0x04, 0x0a, 0x5b, 0x88, 0x74, 0xd1, 0x85, 0x56, 0x8c, 0x92, 0xf4, 0x5a, - 0x99, 0x1f, 0x3a, 0xbe, 0x57, 0xcc, 0xa7, 0x77, 0xb5, 0x27, 0x2c, 0x09, - 0x0d, 0x8f, 0x41, 0x67, 0xd5, 0xdc, 0x3a, 0x55, 0x3d, 0xd5, 0x13, 0x96, - 0x64, 0xe4, 0xb8, 0xa6, 0x5a, 0xa3, 0x22, 0x84, 0xae, 0x7a, 0x24, 0xee, - 0x93, 0x86, 0x7d, 0x52, 0x31, 0xb4, 0xb0, 0x89, 0x04, 0x46, 0x8d, 0x86, - 0x63, 0xcb, 0xd4, 0xd2, 0xaf, 0x0a, 0x69, 0xad, 0xa9, 0x96, 0x42, 0xf1, - 0x1e, 0xef, 0x07, 0xa9, 0x24, 0xb7, 0xca, 0xfa, 0xda, 0x68, 0x51, 0xb6, - 0xde, 0x6f, 0x5d, 0x46, 0x79, 0xc1, 0xa6, 0xbe, 0x43, 0x9a, 0x90, 0x41, - 0xd1, 0xc4, 0x99, 0x5b, 0x3d, 0xd4, 0x25, 0xb9, 0xa4, 0xdb, 0xfc, 0x29, - 0xfd, 0x27, 0x26, 0xeb, 0x23, 0x6f, 0xa3, 0xdf, 0x70, 0x7b, 0x07, 0xae, - 0x96, 0x58, 0x3a, 0xe7, 0x2b, 0x26, 0x31, 0xd8, 0xb9, 0xf5, 0x45, 0x10, - 0xc0, 0x2e, 0x33, 0x98, 0xe5, 0x24, 0xcf, 0xc4, 0x54, 0x6e, 0x12, 0x5b, - 0x1b, 0xbe, 0xc2, 0x4a, 0x56, 0x03, 0x76, 0x1e, 0x87, 0x5e, 0x2f, 0x9e, - 0xe5, 0xd7, 0x90, 0x4e, 0x45, 0x5f, 0x42, 0x56, 0x49, 0x2c, 0xee, 0x52, - 0xa0, 0x5a, 0xb4, 0xc5, 0xc2, 0x2d, 0x62, 0xd7, 0xc6, 0xc8, 0x75, 0xee, - 0x9e, 0x6a, 0x90, 0x1a, 0x8e, 0x69, 0x3f, 0x93, 0x26, 0x70, 0x8c, 0xaa, - 0x55, 0x82, 0x51, 0x80, 0x59, 0x23, 0xc8, 0xec, 0x9e, 0xc3, 0x9b, 0x06, - 0xd6, 0x21, 0x19, 0x45, 0xab, 0xa4, 0x33, 0x0a, 0x0e, 0x1d, 0x0e, 0xdc, - 0x7c, 0x4d, 0x9c, 0xa4, 0xa7, 0xfa, 0x49, 0x67, 0x9a, 0x5b, 0xc0, 0x7b, - 0x59, 0x9b, 0x97, 0xc5, 0xf6, 0x76, 0x03, 0x22, 0x17, 0xa4, 0xf5, 0x35, - 0x34, 0x25, 0xcd, 0xba, 0xc3, 0x24, 0xec, 0xe5, 0xe5, 0x0e, 0x86, 0xbd, - 0xa9, 0xdf, 0xd0, 0xfd, 0x82, 0xf9, 0x8a, 0x18, 0x29, 0x51, 0x00, 0xb6, - 0xff, 0xf5, 0x47, 0x6d, 0xf2, 0x19, 0xf0, 0xed, 0x4e, 0xa0, 0x4d, 0x48, - 0x84, 0xa1, 0xb8, 0x94, 0xc2, 0xf1, 0x48, 0x16, 0x87, 0xbd, 0x73, 0x18, - 0xa7, 0x79, 0x64, 0x7a, 0x07, 0xc8, 0xc4, 0x52, 0x52, 0xab, 0x57, 0xfd, - 0xec, 0x77, 0xf8, 0x1d, 0x54, 0x11, 0xf5, 0x45, 0x4a, 0x37, 0x8e, 0x31, - 0xca, 0xb9, 0x2a, 0x8a, 0xe8, 0x2f, 0x0d, 0x19, 0x01, 0x35, 0xcd, 0x77, - 0x21, 0xa8, 0xeb, 0x04, 0x87, 0xa1, 0x59, 0x28, 0x79, 0xd7, 0xc7, 0xd0, - 0x2a, 0x21, 0xaf, 0xc0, 0x02, 0xac, 0x27, 0xd5, 0xf0, 0x28, 0xd2, 0x09, - 0x4c, 0x14, 0x4f, 0xf4, 0xcc, 0xa6, 0x8b, 0x03, 0xe6, 0xcb, 0x90, 0xaf, - 0xb8, 0x1c, 0xf5, 0xd7, 0xb6, 0x87, 0xa2, 0xd9, 0x78, 0x96, 0xa6, 0xc0, - 0x65, 0x61, 0xcf, 0x46, 0x82, 0x9b, 0x17, 0x39, 0xe1, 0xc0, 0x7f, 0xa7, - 0x87, 0x50, 0xd0, 0x05, 0xcd, 0xa4, 0xbb, 0xdf, 0xc9, 0xe0, 0x59, 0x1e, - 0x70, 0xa4, 0xa3, 0x9c, 0x26, 0x80, 0xaa, 0x6c, 0x21, 0x4a, 0xa1, 0xb9, - 0x35, 0x61, 0xff, 0xb3, 0x5d, 0x3c, 0x1a, 0x19, 0xbc, 0xf7, 0x95, 0xf1, - 0x37, 0x55, 0x45, 0xfe, 0x2e, 0x85, 0x96, 0x39, 0xa5, 0xc8, 0x82, 0x6b, - 0x73, 0xaf, 0x23, 0xe2, 0x5c, 0xb3, 0x68, 0xc5, 0x78, 0xb3, 0x04, 0x49, - 0x99, 0x72, 0x9c, 0x3f, 0x08, 0xf5, 0x02, 0x3b, 0x89, 0x07, 0x3f, 0x38, - 0x2c, 0xcd, 0x9a, 0x7a, 0xdb, 0xfd, 0xe8, 0x84, 0xc9, 0x50, 0xd2, 0x67, - 0x02, 0x63, 0xbe, 0x57, 0x2d, 0xe4, 0x00, 0x02, 0xa2, 0x10, 0x34, 0x25, - 0xcf, 0x41, 0x45, 0x49, 0x01, 0xef, 0xb5, 0xd7, 0x43, 0x99, 0x12, 0x25, - 0xe8, 0xb9, 0x0c, 0x5a, 0xde, 0xfd, 0x91, 0xcf, 0xf2, 0x53, 0x9b, 0xf0, - 0x13, 0x5e, 0x70, 0x72, 0x39, 0x3e, 0x3c, 0x18, 0xf3, 0x1a, 0x73, 0x42, - 0x00, 0xd2, 0x07, 0xff, 0xdf, 0x66, 0xfb, 0x2b, 0x50, 0x62, 0x2c, 0x1c, - 0x71, 0x4f, 0x00, 0x44, 0xc5, 0xa3, 0xb3, 0xad, 0x09, 0xd9, 0x26, 0x51, - 0xe8, 0xa9, 0x39, 0x1f, 0x0e, 0xa6, 0xb2, 0x03, 0x17, 0x34, 0x07, 0x6a, - 0x22, 0xdf, 0xfb, 0xcf, 0x9f, 0xb1, 0xc6, 0x38, 0xa7, 0x92, 0xd6, 0x71, - 0x84, 0x76, 0x3d, 0xaa, 0x21, 0x88, 0x0a, 0x37, 0x46, 0x51, 0x41, 0x60, - 0xc9, 0x8b, 0x31, 0x8c, 0x94, 0x5b, 0x37, 0xae, 0x71, 0x31, 0xdf, 0xb6, - 0x8b, 0xaa, 0xa7, 0x68, 0x86, 0xa3, 0x2f, 0xcf, 0xbb, 0x2e, 0x40, 0xd1, - 0x36, 0xb2, 0xa2, 0xdb, 0x2c, 0x1a, 0x78, 0x34, 0xdd, 0x1b, 0xa4, 0x53, - 0xe7, 0xcc, 0x42, 0xfe, 0x84, 0xf0, 0x32, 0x0d, 0xfc, 0x0c, 0x4a, 0x9f, - 0x1d, 0x3f, 0xcc, 0x19, 0x40, 0x08, 0x36, 0x01, 0x74, 0x1a, 0xbc, 0x16, - 0x73, 0x3a, 0xc6, 0xb1, 0x1c, 0x06, 0xaa, 0xe7, 0xe2, 0xca, 0x01, 0x13, - 0x79, 0x71, 0xb0, 0x1d, 0x0b, 0xb2, 0x10, 0x10, 0x2e, 0xe1, 0x8b, 0x96, - 0x9f, 0xb2, 0xe1, 0xcf, 0x91, 0x62, 0x06, 0x66, 0xf4, 0x07, 0x7f, 0xbc, - 0xb5, 0xd4, 0xc5, 0xa8, 0x2e, 0xee, 0xb2, 0x8d, 0x9a, 0xa2, 0x23, 0xaf, - 0xd4, 0x86, 0x8e, 0x03, 0xe6, 0x96, 0x8a, 0x29, 0x87, 0x47, 0xa3, 0x63, - 0x81, 0x2b, 0x17, 0xd1, 0x24, 0xa7, 0xc1, 0xec, 0x7d, 0x76, 0x6d, 0x62, - 0xab, 0x88, 0x16, 0x5e, 0x63, 0x92, 0x74, 0x78, 0xee, 0x49, 0x14, 0x18, - 0x69, 0x8b, 0x02, 0x72, 0xc5, 0x21, 0x45, 0x03, 0xe0, 0xa1, 0xde, 0xd1, - 0x9d, 0x25, 0xb1, 0x1e, 0x9b, 0x45, 0x6b, 0xd7, 0x80, 0x0d, 0x04, 0x68, - 0x15, 0x5f, 0x9b, 0x27, 0xab, 0x78, 0x6b, 0x11, 0xa8, 0x7d, 0x29, 0x39, - 0x6f, 0x1d, 0x12, 0xc9, 0x3b, 0xc0, 0x12, 0x96, 0xa0, 0xf2, 0x27, 0xcc, - 0x97, 0x22, 0x6c, 0x55, 0xc2, 0xfd, 0xc2, 0xe0, 0xa6, 0x99, 0xaf, 0x44, - 0xe5, 0x96, 0xa8, 0x59, 0xe4, 0xb0, 0xfc, 0xa5, 0x68, 0x24, 0x50, 0x60, - 0xfa, 0xba, 0x20, 0x8f, 0x75, 0xab, 0xbe, 0xe5, 0x32, 0x02, 0x3b, 0xd4, - 0x83, 0x19, 0xeb, 0x0d, 0x19, 0x14, 0x10, 0x7d, 0xb7, 0xc0, 0x58, 0x62, - 0xa2, 0xb6, 0x75, 0xbf, 0x93, 0x78, 0xff, 0x40, 0x06, 0x1c, 0x62, 0x4a, - 0x18, 0x28, 0xb6, 0xcf, 0xf3, 0x6b, 0xee, 0xf3, 0x3e, 0xd9, 0x59, 0xf7, - 0x95, 0xd7, 0x91, 0x2f, 0x5c, 0x4a, 0xd6, 0xe4, 0x44, 0xa4, 0x51, 0x0d, - 0xec, 0xa1, 0x26, 0xd2, 0xc6, 0x15, 0xd5, 0x43, 0xff, 0xac, 0x70, 0x98, - 0xbf, 0xa2, 0xec, 0x43, 0xf9, 0x14, 0xf2, 0x9d, 0xc3, 0xaa, 0x42, 0x88, - 0xd0, 0x96, 0x78, 0xd9, 0x8a, 0x0e, 0x3e, 0x1c, 0xc4, 0xef, 0x49, 0x24, - 0x2a, 0xf7, 0x4f, 0xf3, 0xc1, 0xeb, 0x18, 0x17, 0x3c, 0x18, 0x58, 0x86, - 0xa3, 0x3a, 0x3f, 0x41, 0x9a, 0x04, 0x4e, 0xed, 0x64, 0xfe, 0x46, 0x36, - 0x4f, 0x62, 0xff, 0xae, 0x6c, 0x08, 0xa2, 0x2a, 0x76, 0xe4, 0x52, 0xaa, - 0x7c, 0xe8, 0xa6, 0xdd, 0x08, 0x51, 0xe5, 0xf4, 0x7d, 0x84, 0x61, 0x75, - 0xa7, 0x90, 0x3c, 0x5e, 0x67, 0x3d, 0xec, 0x11, 0xbd, 0x1b, 0x87, 0x03, - 0x48, 0x92, 0x58, 0x90, 0x6b, 0x90, 0x47, 0xfb, 0x30, 0x87, 0x6d, 0x0f, - 0x56, 0x78, 0x6a, 0x9b, 0x5d, 0xe9, 0xb5, 0xed, 0xbc, 0xfb, 0xa3, 0x58, - 0x04, 0x67, 0x2c, 0x94, 0x47, 0xed, 0xc3, 0x78, 0x77, 0x19, 0x25, 0x65, - 0xa1, 0xb9, 0x34, 0x34, 0xfe, 0x84, 0x29, 0x5c, 0x31, 0xc9, 0x57, 0x1e, - 0xbd, 0xa1, 0xd7, 0x6d, 0x7e, 0x11, 0x1e, 0xf9, 0x5e, 0xa8, 0x19, 0xda, - 0xe3, 0xad, 0xef, 0x4e, 0x0a, 0x69, 0x55, 0x6e, 0xb9, 0xbd, 0x6d, 0x02, - 0x14, 0x56, 0xff, 0xfe, 0xc2, 0x84, 0xbc, 0x2b, 0xc4, 0x21, 0x1d, 0xb3, - 0x39, 0x40, 0x09, 0x06, 0xb2, 0x0b, 0x64, 0x1b, 0xfc, 0xb1, 0x9e, 0x21, - 0x8d, 0x49, 0xd1, 0x67, 0x52, 0x0d, 0xa5, 0xae, 0x69, 0xbc, 0x37, 0xbe, - 0xff, 0xd0, 0x95, 0xad, 0x3e, 0x76, 0xbc, 0x82, 0x89, 0x15, 0x0a, 0x4e, - 0x4f, 0x7c, 0x5e, 0xa4, 0xda, 0xb4, 0xb1, 0x9d, 0x80, 0x57, 0x7b, 0x1b, - 0x56, 0x1b, 0xee, 0x25, 0x53, 0x1c, 0xeb, 0x35, 0x5d, 0x8f, 0x25, 0x4e, - 0x62, 0x26, 0xc2, 0x50, 0x2a, 0x9f, 0x27, 0x84, 0x4c, 0x21, 0x31, 0x18, - 0x54, 0xf7, 0xe3, 0x00, 0xe1, 0x39, 0xa6, 0xa1, 0x99, 0x93, 0x5f, 0xc1, - 0x95, 0x13, 0x6d, 0x32, 0x9e, 0x02, 0x53, 0x67, 0x87, 0x13, 0xdb, 0x41, - 0x1c, 0xef, 0x66, 0x6a, 0xc8, 0xf8, 0x6f, 0xeb, 0x51, 0xea, 0xed, 0xe2, - 0x5d, 0x5a, 0x26, 0xde, 0xa8, 0x53, 0xb8, 0x8e, 0x3b, 0x5a, 0x93, 0xf9, - 0xec, 0x1c, 0xaf, 0x12, 0x9d, 0x69, 0xb8, 0x6c, 0xf9, 0x77, 0xd9, 0xa6, - 0x45, 0x71, 0x7b, 0xd0, 0x16, 0x7a, 0xe2, 0x32, 0x40, 0x2d, 0xe3, 0x34, - 0x41, 0x9c, 0x4c, 0x2d, 0x19, 0x82, 0x11, 0x90, 0x39, 0xea, 0x9e, 0xd1, - 0x91, 0x6f, 0x06, 0x9f, 0x09, 0x7d, 0x26, 0x14, 0x35, 0x0b, 0xc2, 0xc1, - 0x24, 0x4b, 0xc7, 0xdc, 0xb8, 0x0a, 0x98, 0x94, 0x8e, 0x7a, 0x04, 0x7b, - 0x08, 0x95, 0x0e, 0x6f, 0x6c, 0x42, 0x1a, 0xd4, 0x2b, 0x93, 0x16, 0xe9, - 0xee, 0x8f, 0xff, 0x36, 0xde, 0x77, 0x5b, 0xec, 0x60, 0x34, 0x99, 0xbe, - 0x0a, 0x29, 0xdc, 0x8c, 0x1e, 0x5a, 0xc4, 0x8b, 0x01, 0x97, 0xd4, 0xd1, - 0x37, 0xe7, 0x69, 0x29, 0xe6, 0x8a, 0x69, 0xb9, 0xe0, 0xc2, 0x0d, 0x62, - 0x26, 0xd8, 0xa6, 0x8a, 0x09, 0xd6, 0x87, 0xfc, 0xea, 0x18, 0x1b, 0x55, - 0x31, 0xae, 0x48, 0xa7, 0x3f, 0x72, 0xc8, 0xf1, 0xe1, 0x2f, 0x32, 0x10, - 0x7d, 0xf8, 0xa0, 0xd4, 0x57, 0xd1, 0x7b, 0x80, 0x60, 0x3d, 0x20, 0x1a, - 0x53, 0x88, 0x5a, 0xc2, 0xb8, 0x86, 0xc3, 0xe2, 0x3b, 0x01, 0x95, 0xe6, - 0xbe, 0x0b, 0x36, 0x60, 0xaa, 0x72, 0xef, 0x18, 0x0f, 0x52, 0x4d, 0x56, - 0x78, 0x79, 0x9c, 0xaf, 0xb1, 0x23, 0x61, 0x4c, 0x5b, 0x2d, 0x9c, 0x96, - 0x1a, 0x09, 0x17, 0x4d, 0x87, 0x8c, 0xe6, 0xfb, 0xbd, 0x9f, 0x62, 0x13, - 0xce, 0x61, 0x4b, 0x4e, 0x28, 0xf6, 0xa3, 0x19, 0xe6, 0x9e, 0xf7, 0x7d, - 0x19, 0xde, 0x05, 0x39, 0xf8, 0x0b, 0xbc, 0x47, 0xcb, 0x64, 0xa8, 0xf2, - 0x26, 0x97, 0x73, 0xdb, 0x7b, 0x8b, 0x64, 0xc1, 0xec, 0x10, 0xc3, 0xce, - 0xf4, 0xfb, 0x74, 0x33, 0xeb, 0x48, 0xd3, 0x86, 0x04, 0x6b, 0x1a, 0xa6, - 0xd2, 0x3c, 0x4a, 0xa2, 0x91, 0x35, 0x05, 0x21, 0x12, 0x93, 0xdb, 0x4e, - 0xf3, 0x74, 0x63, 0x32, 0xd5, 0x15, 0xb3, 0x1b, 0xa1, 0x0c, 0x72, 0xfc, - 0x35, 0x79, 0xf5, 0x39, 0x4a, 0x0b, 0x6b, 0x35, 0xd4, 0xa8, 0x59, 0x8e, - 0xe1, 0x41, 0x5f, 0x80, 0xc0, 0x7e, 0x8c, 0xea, 0x61, 0x71, 0x03, 0x6d, - 0xd0, 0x6d, 0x03, 0xec, 0x5c, 0x50, 0xec, 0xea, 0x70, 0x75, 0x65, 0x6a, - 0xc1, 0x5d, 0xbc, 0x4f, 0xf5, 0xc9, 0xaa, 0x3f, 0x84, 0x90, 0x5d, 0x52, - 0x5b, 0xde, 0xc4, 0xa8, 0x80, 0xbb, 0xff, 0x1b, 0x21, 0xd3, 0xc0, 0x32, - 0x4c, 0xea, 0x2f, 0xd1, 0xc4, 0x8d, 0x41, 0x5d, 0x89, 0x5c, 0xb9, 0xc3, - 0x5c, 0x92, 0x7e, 0xd8, 0x91, 0xed, 0xdc, 0xc3, 0xfe, 0x78, 0xb8, 0xd0, - 0x4c, 0x29, 0x9e, 0x1e, 0x52, 0xe8, 0x1a, 0x89, 0xa9, 0xb1, 0xd3, 0x9f, - 0x4d, 0x69, 0xf1, 0x02, 0x95, 0xd6, 0x0e, 0xc5, 0xea, 0x88, 0xe6, 0x3b, - 0x20, 0x37, 0xd5, 0xfc, 0xec, 0x38, 0xcc, 0xd1, 0x24, 0x29, 0x54, 0x13, - 0xd8, 0xb9, 0x55, 0x35, 0x72, 0xd9, 0x21, 0x43, 0xcd, 0xfa, 0x83, 0xa1, - 0x82, 0x73, 0x52, 0xf5, 0x05, 0x34, 0xfa, 0xe6, 0xf2, 0xfc, 0xeb, 0xe2, - 0xaa, 0xc7, 0x0f, 0x6a, 0xeb, 0xb9, 0x74, 0xf0, 0xde, 0x04, 0xd6, 0xc0, - 0xf7, 0x5e, 0xdb, 0x3e, 0xc4, 0xbf, 0x1b, 0xc9, 0x59, 0xf0, 0x55, 0x0a, - 0x8e, 0xdb, 0x84, 0xaf, 0x5d, 0xcf, 0x4d, 0xe8, 0xed, 0xc3, 0x01, 0xd1, - 0xb4, 0xd6, 0xe0, 0x19, 0xb9, 0x1d, 0x6c, 0x26, 0x9d, 0xdb, 0xac, 0xb3, - 0x60, 0x9b, 0xa4, 0xa9, 0xfb, 0xb4, 0xba, 0x4d, 0x0e, 0xb3, 0x38, 0x60, - 0xb1, 0x26, 0x76, 0x74, 0xb8, 0x4b, 0x42, 0xa3, 0x93, 0x7a, 0xca, 0xc9, - 0x14, 0xb3, 0xce, 0xd8, 0x4b, 0xc9, 0x51, 0x75, 0x4e, 0x87, 0xb0, 0xc7, - 0x0c, 0x53, 0xa3, 0xc3, 0x06, 0xd2, 0x93, 0xaa, 0xb5, 0x57, 0xad, 0xbc, - 0x02, 0xf8, 0x0d, 0xa8, 0x22, 0x63, 0x2e, 0x61, 0x56, 0xd1, 0xa9, 0x35, - 0x69, 0x83, 0x45, 0x82, 0xe1, 0x83, 0x4b, 0xae, 0x45, 0x3d, 0xdc, 0x83, - 0x87, 0x58, 0x1f, 0xe2, 0x69, 0xb8, 0x16, 0x55, 0xcb, 0xcc, 0x51, 0xc0, - 0xe7, 0x92, 0x9b, 0x62, 0x64, 0x57, 0x59, 0x01, 0x80, 0x10, 0xc0, 0xa9, - 0x26, 0x20, 0xa8, 0x10, 0x0b, 0xbe, 0x1f, 0x71, 0x51, 0xe3, 0x71, 0x3d, - 0x89, 0x77, 0x49, 0x77, 0xd1, 0x00, 0x19, 0xb0, 0x0e, 0x55, 0x0e, 0x91, - 0x0b, 0x79, 0xdb, 0xbe, 0x0f, 0x04, 0xd8, 0x25, 0xfb, 0xc5, 0x11, 0x99, - 0x48, 0xa6, 0xe6, 0x8f, 0xf9, 0x31, 0x31, 0x75, 0x6e, 0x13, 0x21, 0x5f, - 0x8a, 0xd9, 0xc4, 0xd7, 0xb9, 0x7a, 0x29, 0x4f, 0x58, 0x0d, 0x41, 0x4c, - 0x17, 0x4f, 0xb6, 0x35, 0xf3, 0x71, 0x2b, 0x11, 0x47, 0x16, 0x3b, 0xe7, - 0x02, 0xa0, 0xb5, 0x9b, 0x24, 0xf1, 0x52, 0xd6, 0x70, 0xf8, 0x20, 0x6a, - 0x4d, 0xfc, 0x10, 0x9f, 0x8e, 0x1f, 0xbe, 0x11, 0x1d, 0x50, 0x27, 0xf8, - 0x4e, 0x03, 0x4b, 0x22, 0x09, 0xcf, 0xab, 0xc4, 0x69, 0x17, 0x5e, 0x3a, - 0x0a, 0x7d, 0xc5, 0x76, 0x4a, 0xf4, 0x74, 0xce, 0x2d, 0x60, 0x0e, 0x20, - 0xa6, 0x7e, 0x8c, 0x9e, 0x83, 0x34, 0x45, 0x73, 0xfc, 0xdb, 0xd5, 0xe7, - 0x97, 0x58, 0x60, 0x63, 0x98, 0x5f, 0xa3, 0xea, 0x4e, 0x9a, 0x7a, 0x17, - 0x38, 0x6b, 0xb1, 0xba, 0x67, 0xb3, 0x62, 0x3a, 0x69, 0x9b, 0x94, 0xa6, - 0x6c, 0x0a, 0x32, 0x96, 0x8f, 0x6e, 0xe6, 0x1a, 0x50, 0x2d, 0x36, 0x77, - 0xed, 0x7b, 0xaf, 0xa4, 0xf1, 0xd8, 0x3c, 0x69, 0x6b, 0x01, 0xec, 0xa2, - 0x72, 0x74, 0x5d, 0xcb, 0x65, 0x42, 0xb8, 0x9a, 0x89, 0x33, 0xa2, 0x0c, - 0x07, 0xc8, 0x66, 0xd4, 0x57, 0x3b, 0x0c, 0x04, 0xda, 0x65, 0xc4, 0xfb, - 0xb1, 0xcc, 0x43, 0xe2, 0x0c, 0x1f, 0xf4, 0x5a, 0x85, 0xa5, 0x78, 0xfb, - 0xc5, 0x49, 0x85, 0xc1, 0x7f, 0x52, 0xec, 0xc6, 0x47, 0x0e, 0xe7, 0x93, - 0x2f, 0x51, 0xbf, 0x35, 0x71, 0x21, 0x3c, 0x7b, 0x35, 0x91, 0xe9, 0x12, - 0xc8, 0x7b, 0xeb, 0x76, 0x1a, 0x4a, 0xca, 0xc8, 0x63, 0xa5, 0xce, 0x20, - 0xf4, 0x1b, 0x26, 0x30, 0x5c, 0x00, 0xe7, 0x83, 0xf6, 0x57, 0x6b, 0x47, - 0x02, 0x09, 0x7c, 0x8e, 0x6d, 0x4f, 0x39, 0x9c, 0x73, 0x6c, 0x91, 0xb9, - 0xda, 0x93, 0x18, 0xa2, 0x27, 0x2f, 0x4f, 0x59, 0x79, 0x36, 0xab, 0x16, - 0x7e, 0x4e, 0x41, 0x55, 0x20, 0x76, 0xd7, 0xf3, 0xa1, 0x89, 0x1b, 0xce, - 0xbc, 0x7e, 0xaf, 0x8b, 0x82, 0x24, 0x74, 0x65, 0xe6, 0xa0, 0xf6, 0x33, - 0xc0, 0xb3, 0xae, 0x19, 0x96, 0x51, 0xd5, 0xaa, 0xe8, 0xa4, 0x4d, 0xf9, - 0x7d, 0x84, 0x21, 0x30, 0xe4, 0xf9, 0x61, 0xfe, 0xd0, 0x2a, 0xf0, 0xb4, - 0x93, 0x97, 0xb8, 0x40, 0x6a, 0x41, 0xb0, 0xc0, 0x1c, 0x9a, 0x9a, 0x9d, - 0x51, 0x03, 0x30, 0x89, 0xe1, 0xde, 0x8c, 0x23, 0x0f, 0x00, 0x04, 0x01, - 0x45, 0x71, 0x33, 0x43, 0xfd, 0x8b, 0x5a, 0xf2, 0x2d, 0x1c, 0xe6, 0x45, - 0xc7, 0xac, 0xac, 0x3b, 0x35, 0x7a, 0xb9, 0x85, 0x37, 0xd2, 0x37, 0x8b, - 0x52, 0xb6, 0x0b, 0xe6, 0x86, 0xae, 0x15, 0x8e, 0xff, 0x71, 0x8b, 0xcb, - 0x42, 0x9d, 0xd6, 0x9d, 0xfb, 0x64, 0x97, 0x59, 0x81, 0xb7, 0x81, 0x95, - 0x06, 0xba, 0x82, 0x09, 0xdf, 0x32, 0x17, 0x48, 0xfd, 0x5d, 0x3a, 0x1c, - 0xcc, 0x75, 0xcd, 0x69, 0x34, 0xd9, 0x57, 0xb0, 0xc1, 0x04, 0xbb, 0x71, - 0x3c, 0x1e, 0xf6, 0xf5, 0xa9, 0x06, 0x72, 0x02, 0x9c, 0x0c, 0x9b, 0x5d, - 0x8d, 0x58, 0x67, 0x4f, 0xf8, 0x74, 0xf2, 0x6f, 0x9a, 0x56, 0xba, 0xf1, - 0x0d, 0x0b, 0x9a, 0x21, 0xd0, 0x7a, 0x4c, 0x38, 0x82, 0x83, 0x51, 0xe4, - 0xad, 0x3f, 0xb1, 0x37, 0x32, 0xca, 0xc0, 0x2a, 0xf5, 0x0d, 0x85, 0x0d, - 0xf1, 0x59, 0x79, 0xcd, 0x3b, 0x10, 0x7c, 0xba, 0x07, 0x88, 0x29, 0xe0, - 0xef, 0x97, 0x7b, 0xcc, 0xfc, 0x64, 0xd3, 0x39, 0x1d, 0x34, 0x7a, 0x46, - 0x9d, 0xb9, 0xe8, 0x99, 0x71, 0x16, 0x95, 0x4a, 0xac, 0xf5, 0xd0, 0xcd, - 0x47, 0xd1, 0xbb, 0xdc, 0x0b, 0x4a, 0xcc, 0x4a, 0xb7, 0x67, 0x3f, 0xb6, - 0xd9, 0x38, 0x44, 0x29, 0x71, 0xa9, 0x4a, 0x0e, 0x57, 0x3e, 0xed, 0x60, - 0xef, 0xe9, 0xd4, 0xc4, 0x4e, 0xeb, 0x82, 0xab, 0xb8, 0x01, 0x51, 0x9d, - 0xad, 0xaa, 0xdc, 0xc1, 0xad, 0xf2, 0x00, 0x6e, 0x60, 0xfe, 0x63, 0xe3, - 0x49, 0x9a, 0xe0, 0x7f, 0x03, 0xe6, 0xcb, 0x82, 0xab, 0x25, 0xbc, 0x90, - 0xea, 0xbe, 0xd9, 0xf0, 0x3b, 0x92, 0x81, 0x64, 0x15, 0xb7, 0xa3, 0x78, - 0xe3, 0xd1, 0xb2, 0x46, 0x8e, 0xdc, 0x30, 0xb4, 0x56, 0x18, 0x82, 0x65, - 0xf4, 0x26, 0x08, 0x85, 0x66, 0x02, 0xb6, 0x69, 0x88, 0x3d, 0x18, 0x66, - 0xf4, 0x73, 0x74, 0x11, 0x8d, 0x16, 0xd8, 0x9a, 0x4f, 0xfe, 0x3d, 0x14, - 0x91, 0x76, 0x3a, 0xed, 0x00, 0x1d, 0x1e, 0x2f, 0xdd, 0x9f, 0xc2, 0xa2, - 0x54, 0x18, 0x4f, 0x1f, 0xd3, 0x2e, 0x64, 0x74, 0xfd, 0x84, 0xc2, 0x84, - 0x88, 0x27, 0xb2, 0xdd, 0x71, 0xd6, 0x38, 0x91, 0xcd, 0xcd, 0x86, 0xe9, - 0x89, 0x06, 0x8e, 0x91, 0x1d, 0xac, 0xbb, 0x55, 0xa5, 0x82, 0x07, 0x5a, - 0x19, 0x02, 0x7e, 0xc8, 0x44, 0xe2, 0x9a, 0x9b, 0xb5, 0xf1, 0xcb, 0x5a, - 0x03, 0x34, 0x8f, 0x28, 0x1d, 0xa8, 0x2d, 0xd7, 0x9b, 0x55, 0xde, 0x42, - 0x2e, 0xdd, 0x9a, 0x84, 0x9a, 0x09, 0x57, 0xca, 0xdd, 0x0b, 0x01, 0xc7, - 0x8f, 0xc8, 0x08, 0x21, 0x8d, 0xf2, 0x11, 0xb3, 0x94, 0x6e, 0x00, 0xc3, - 0xac, 0x19, 0x0f, 0x80, 0x21, 0xc8, 0x8e, 0x5f, 0x83, 0x0d, 0x19, 0x9d, - 0x14, 0x4a, 0xa5, 0x6e, 0x24, 0xe9, 0x24, 0x75, 0xbc, 0x10, 0xe9, 0xc2, - 0x75, 0xe0, 0x60, 0xa5, 0x60, 0xd3, 0x64, 0x6e, 0x6e, 0xe3, 0x2e, 0x93, - 0x81, 0x42, 0x66, 0xa0, 0xa4, 0x96, 0xae, 0x46, 0xc9, 0xc3, 0xe4, 0x74, - 0xac, 0xc8, 0x62, 0xc3, 0xd7, 0x4e, 0xa1, 0x38, 0x7f, 0x6f, 0xd0, 0x13, - 0x0e, 0x68, 0x2e, 0x85, 0x1d, 0x83, 0xab, 0xc2, 0x7a, 0x2a, 0x1b, 0x1d, - 0xaf, 0x09, 0x32, 0x41, 0xd0, 0xfb, 0xd3, 0x57, 0x13, 0x18, 0x5a, 0x87, - 0xf5, 0xc5, 0xca, 0xda, 0x3e, 0xaa, 0x2c, 0x9c, 0x3a, 0x8a, 0x07, 0x42, - 0x98, 0x7a, 0xfa, 0xc5, 0xc8, 0x1d, 0xec, 0xa4, 0x65, 0xea, 0x01, 0x80, - 0x35, 0x9c, 0x93, 0xd0, 0xdd, 0x49, 0x55, 0x58, 0x99, 0xfc, 0x4a, 0x32, - 0xe3, 0xdc, 0x73, 0xde, 0x10, 0xcd, 0x77, 0xba, 0x20, 0x3a, 0x60, 0x88, - 0x8a, 0x06, 0xc2, 0x64, 0x4e, 0xd8, 0xc5, 0x03, 0x2c, 0x46, 0xf8, 0x48, - 0x34, 0x1e, 0xa6, 0x17, 0x24, 0xb2, 0x37, 0xc3, 0x52, 0xfc, 0xf9, 0x42, - 0xfa, 0x51, 0x05, 0x03, 0xf3, 0x48, 0x38, 0x14, 0x38, 0xfa, 0x54, 0xb4, - 0x87, 0xee, 0x5a, 0xfe, 0xef, 0xd1, 0x7b, 0x8b, 0x37, 0xf5, 0xc5, 0x7f, - 0x29, 0xf7, 0x12, 0x00, 0x84, 0xd0, 0x30, 0xc8, 0x03, 0x4b, 0xa5, 0xf9, - 0x4a, 0x2c, 0xae, 0x69, 0x1c, 0xea, 0x5f, 0x3b, 0xda, 0xe8, 0x15, 0xe5, - 0xb9, 0xf9, 0x51, 0x02, 0x1c, 0x9a, 0xc6, 0x27, 0xb9, 0x5d, 0x7e, 0x96, - 0x64, 0xd0, 0x34, 0xc9, 0x18, 0xe4, 0x6b, 0x0b, 0x83, 0xb6, 0x2b, 0x49, - 0x13, 0x75, 0x08, 0xbd, 0xf5, 0x5a, 0x53, 0xf6, 0xd4, 0xa6, 0x76, 0x87, - 0xc9, 0x18, 0x5c, 0x10, 0x73, 0x3f, 0x47, 0x81, 0x31, 0x72, 0x35, 0xcf, - 0x9c, 0x97, 0xd5, 0x55, 0x1a, 0x01, 0x5f, 0x0f, 0x56, 0x53, 0xa1, 0x07, - 0x55, 0x4a, 0x57, 0x79, 0xd9, 0xbe, 0x69, 0x91, 0x57, 0x6e, 0x3e, 0x4a, - 0xc3, 0xe8, 0xce, 0x3f, 0x1b, 0x5c, 0xc7, 0x82, 0x92, 0x6d, 0xcd, 0xbf, - 0x4d, 0x8b, 0xf4, 0x0c, 0x2c, 0x54, 0x65, 0x2d, 0xb3, 0x03, 0x21, 0x54, - 0x67, 0xd7, 0x91, 0xf7, 0x4c, 0xf4, 0x17, 0x79, 0x56, 0xe3, 0x15, 0xfc, - 0x69, 0xb7, 0xab, 0x84, 0xc5, 0x92, 0x3e, 0x9a, 0x47, 0x54, 0xb4, 0xf1, - 0x6e, 0xc3, 0xf2, 0x4a, 0x36, 0xcf, 0x35, 0x7a, 0xb4, 0xc8, 0x64, 0x91, - 0xb2, 0x5b, 0x6e, 0x68, 0x3e, 0x95, 0x9e, 0xeb, 0x8d, 0xb0, 0x66, 0x62, - 0xf4, 0xc3, 0x6c, 0xf2, 0xb0, 0x9d, 0x32, 0xc5, 0x95, 0x2d, 0xb9, 0x72, - 0xd5, 0xc8, 0xe2, 0x58, 0x10, 0xda, 0xb2, 0x1f, 0xc0, 0x54, 0xdb, 0x49, - 0x96, 0x9f, 0xb0, 0x21, 0x3b, 0x6a, 0x42, 0x8b, 0xdc, 0xfa, 0x4b, 0x4e, - 0x2b, 0xe0, 0xa1, 0x0d, 0x43, 0xbc, 0x5b, 0x9b, 0x05, 0xc9, 0x9f, 0x40, - 0x15, 0x1a, 0x65, 0x69, 0x40, 0xab, 0x80, 0x01, 0xe9, 0x5e, 0xac, 0x8b, - 0xb4, 0x64, 0x9b, 0xac, 0x11, 0x72, 0x57, 0xa3, 0x24, 0x18, 0x55, 0x2a, - 0x6f, 0x32, 0xb7, 0xe1, 0x3f, 0x7c, 0x42, 0x0a, 0x0a, 0xc8, 0xe7, 0x17, - 0x7d, 0x1e, 0x67, 0xdc, 0xea, 0x92, 0x84, 0x65, 0xc2, 0xbc, 0x84, 0x2c, - 0x54, 0x08, 0xab, 0x25, 0x8e, 0x59, 0x3d, 0x5a, 0x1b, 0xb6, 0xb7, 0x17, - 0xd5, 0x0f, 0x98, 0x2f, 0x7c, 0x17, 0x10, 0x3c, 0x04, 0x84, 0x46, 0x34, - 0x1e, 0x32, 0x3b, 0x70, 0xda, 0x4f, 0xde, 0x29, 0xe7, 0x87, 0x41, 0xb9, - 0x4d, 0x29, 0x3b, 0xd3, 0x14, 0x39, 0x35, 0x7a, 0x84, 0x6e, 0x80, 0xb2, - 0xc2, 0xe2, 0x28, 0x91, 0xc0, 0x61, 0xbb, 0x4d, 0x19, 0x8a, 0xac, 0x96, - 0x25, 0xba, 0x65, 0x41, 0xc9, 0xd0, 0xbc, 0xd6, 0x2e, 0xf6, 0x88, 0xd1, - 0x75, 0xe7, 0x6b, 0x86, 0xa1, 0x87, 0x4e, 0xae, 0xdb, 0x0c, 0x1a, 0x03, - 0x87, 0x4b, 0xd1, 0xb2, 0x37, 0x00, 0x22, 0x29, 0x7d, 0xc8, 0x37, 0x4a, - 0x29, 0xc6, 0xd3, 0x12, 0xd1, 0x3d, 0xdf, 0x00, 0x19, 0xab, 0x70, 0x65, - 0x31, 0x76, 0x68, 0x76, 0x40, 0x0d, 0x7a, 0xb6, 0x5a, 0xe1, 0xbe, 0x95, - 0xa7, 0x2a, 0x77, 0xb6, 0xf7, 0x5b, 0x94, 0xc3, 0xba, 0x4e, 0x6b, 0x93, - 0x4f, 0x98, 0x6b, 0xda, 0x28, 0xa3, 0x41, 0x28, 0xbc, 0xed, 0xa9, 0x51, - 0x26, 0x98, 0xf6, 0xef, 0xa6, 0x55, 0x3e, 0x6d, 0xc1, 0x87, 0x59, 0xb9, - 0xb0, 0xdc, 0xea, 0x6f, 0x2c, 0x2a, 0xa3, 0x14, 0x43, 0x6d, 0x72, 0xfc, - 0x06, 0x06, 0x9c, 0xd5, 0xfa, 0xe9, 0xfb, 0x9f, 0x57, 0xb1, 0x4f, 0x69, - 0x47, 0xee, 0xb2, 0x59, 0x44, 0xe3, 0x88, 0x44, 0x04, 0xa4, 0xb2, 0x7b, - 0x3e, 0xed, 0xb3, 0xde, 0x60, 0x71, 0x23, 0xdb, 0x88, 0x6b, 0x54, 0x6d, - 0xee, 0xd6, 0xc1, 0x29, 0xdb, 0x19, 0xfa, 0x36, 0x5b, 0xba, 0x1c, 0x93, - 0x1c, 0xfd, 0x6c, 0x32, 0x6d, 0xdc, 0x92, 0x85, 0x92, 0xf9, 0x50, 0xad, - 0x97, 0x43, 0x32, 0xe2, 0x23, 0x27, 0x84, 0x16, 0x9d, 0x11, 0x15, 0x2b, - 0x73, 0x14, 0xd6, 0xc3, 0x98, 0xa7, 0x48, 0xac, 0x6e, 0xca, 0x23, 0x1b, - 0x6a, 0xa8, 0x27, 0x4c, 0xfd, 0x69, 0x17, 0x8e, 0x0e, 0x52, 0x5e, 0x36, - 0x36, 0x46, 0x18, 0xb5, 0xa1, 0xf7, 0x5f, 0x02, 0xcf, 0x2d, 0xeb, 0x6f, - 0xcc, 0x61, 0x12, 0x32, 0x2a, 0x7a, 0xae, 0x2d, 0x7c, 0x30, 0xd4, 0x72, - 0xb1, 0xdf, 0x01, 0x89, 0xe0, 0x00, 0x9e, 0x48, 0x48, 0x04, 0x42, 0xb2, - 0x15, 0x30, 0xc5, 0xc1, 0x51, 0x49, 0x3c, 0x67, 0x57, 0xd6, 0xd7, 0xf8, - 0x30, 0xc6, 0xa7, 0x97, 0x84, 0x7f, 0x03, 0x6c, 0xdf, 0xd2, 0xb4, 0xf8, - 0x40, 0xcf, 0x6c, 0x6a, 0x72, 0xa1, 0x85, 0xb4, 0x6d, 0x5a, 0x3f, 0xa1, - 0xac, 0xbb, 0xd2, 0xac, 0x97, 0xfb, 0x33, 0x53, 0xfe, 0xf9, 0x4b, 0xae, - 0x0e, 0xa1, 0x39, 0xfc, 0x8c, 0xdb, 0xf9, 0x4f, 0xbf, 0xe8, 0x48, 0x91, - 0xc1, 0xe3, 0x01, 0xf3, 0x4b, 0xd6, 0x24, 0xcc, 0xd0, 0x11, 0x77, 0x52, - 0x5a, 0x09, 0x6f, 0xa9, 0x42, 0x32, 0x0b, 0x7a, 0xf4, 0xa0, 0xf4, 0x04, - 0x5a, 0x10, 0x72, 0x84, 0x4c, 0x25, 0x51, 0xbb, 0xb9, 0xd2, 0xf9, 0xbc, - 0x2d, 0xc2, 0x32, 0xf7, 0xa3, 0xd1, 0x27, 0x6f, 0x9a, 0xa0, 0xda, 0xc9, - 0x46, 0xcf, 0xfb, 0x3f, 0xb5, 0xf8, 0x3d, 0xe8, 0xd2, 0x72, 0x93, 0x66, - 0x78, 0x2c, 0x77, 0x2d, 0x10, 0x78, 0x3f, 0xa8, 0x87, 0x90, 0x5d, 0xe4, - 0x2c, 0x77, 0xf4, 0x1d, 0x02, 0x23, 0xf5, 0xf2, 0xdc, 0x71, 0x15, 0xa4, - 0xc0, 0xda, 0x00, 0x80, 0xcc, 0x62, 0x91, 0x43, 0xc5, 0xe5, 0x80, 0x09, - 0x46, 0xaa, 0x1b, 0x7a, 0x10, 0x8f, 0x56, 0x45, 0x72, 0xa9, 0xa6, 0x87, - 0x1b, 0x92, 0xb3, 0x95, 0x13, 0x76, 0xf4, 0x88, 0x44, 0xd8, 0x39, 0x6c, - 0x82, 0x4d, 0x00, 0x90, 0x79, 0xc6, 0x84, 0x10, 0xb4, 0x2e, 0x54, 0x14, - 0x8a, 0x42, 0x3e, 0x4c, 0x35, 0x7e, 0x8b, 0xbb, 0x0c, 0x49, 0x7c, 0xff, - 0xa0, 0x58, 0xc2, 0x35, 0x67, 0xf3, 0x49, 0x3e, 0xa2, 0x41, 0x78, 0xb9, - 0x47, 0x4d, 0x0d, 0xfd, 0x26, 0xb2, 0xf1, 0xe7, 0x0b, 0x63, 0xb1, 0xa7, - 0x31, 0x10, 0x27, 0x1e, 0x53, 0x86, 0x6a, 0xf7, 0xb3, 0x10, 0xd9, 0x81, - 0x64, 0x2e, 0xe4, 0xbd, 0xdf, 0x0a, 0x15, 0x54, 0xa3, 0xe9, 0x57, 0xc0, - 0xdf, 0xd9, 0xb9, 0xeb, 0x42, 0xe8, 0x76, 0xf0, 0x3c, 0xcb, 0xbf, 0xbf, - 0xae, 0x57, 0xd5, 0xe9, 0x5a, 0x78, 0x6e, 0x21, 0xc4, 0xc9, 0x36, 0x22, - 0x6a, 0x99, 0x27, 0xfd, 0xf5, 0xd6, 0xc8, 0x42, 0x80, 0xc6, 0x06, 0x30, - 0x08, 0xa0, 0x25, 0x3f, 0x0e, 0xf0, 0x8e, 0xe0, 0x0d, 0xb6, 0x0a, 0xe5, - 0x08, 0x13, 0x3d, 0xe8, 0x2d, 0x35, 0x82, 0x28, 0x84, 0xb9, 0x2e, 0x8a, - 0x78, 0xd0, 0xeb, 0xa7, 0xaf, 0xa5, 0x11, 0x2a, 0x83, 0x72, 0xe8, 0x07, - 0x93, 0xaa, 0xff, 0x11, 0xd0, 0x95, 0x33, 0xc4, 0x00, 0x76, 0xc0, 0xab, - 0xe6, 0x29, 0xda, 0xb3, 0x67, 0x2f, 0x5d, 0xed, 0xf9, 0x89, 0xfb, 0x62, - 0x2d, 0x7a, 0x8f, 0xd8, 0xa7, 0x92, 0xd1, 0xf0, 0x4c, 0x73, 0x34, 0xa1, - 0xff, 0x4c, 0xa7, 0x3c, 0x0e, 0x4a, 0x4b, 0x0e, 0xd2, 0x3e, 0xdd, 0x9d, - 0xa5, 0x3c, 0xed, 0xc2, 0x50, 0x46, 0x5e, 0xcd, 0x81, 0x81, 0x49, 0xca, - 0x9e, 0x50, 0x40, 0xc1, 0xae, 0xd8, 0x30, 0xc9, 0x64, 0x4b, 0x52, 0x84, - 0x57, 0x0d, 0xa2, 0x11, 0x40, 0x00, 0x07, 0x10, 0x43, 0x49, 0x18, 0x33, - 0x5a, 0x29, 0xfd, 0xb1, 0xe6, 0x37, 0x44, 0x7d, 0xad, 0xe8, 0xda, 0x6d, - 0x19, 0x8b, 0x31, 0x8c, 0x01, 0xb0, 0xcb, 0xa4, 0x8d, 0x14, 0x42, 0x66, - 0xa5, 0x7b, 0x25, 0x00, 0xe6, 0x92, 0x5b, 0xef, 0x21, 0xe6, 0x16, 0x1b, - 0xbf, 0xce, 0x80, 0x80, 0x8c, 0x97, 0xcf, 0x66, 0xd5, 0xa1, 0xe5, 0xbc, - 0x82, 0x6b, 0xab, 0x0c, 0x68, 0x74, 0x39, 0x71, 0x9c, 0x98, 0x42, 0xa1, - 0xc3, 0xe6, 0x75, 0xb1, 0x5e, 0xea, 0x2c, 0xe1, 0xb1, 0x14, 0x52, 0x65, - 0x5e, 0xb1, 0xa3, 0x51, 0x8d, 0x19, 0xb7, 0xee, 0x1f, 0x29, 0x99, 0xf7, - 0x20, 0x01, 0x26, 0xa3, 0xd5, 0xf0, 0x80, 0x24, 0xf7, 0x8a, 0xcb, 0x1c, - 0x33, 0xc1, 0x9a, 0x0c, 0x0c, 0x27, 0xb9, 0x6c, 0x18, 0x39, 0xb6, 0x87, - 0x9d, 0x35, 0x30, 0xff, 0xaa, 0xeb, 0xb3, 0x1f, 0x59, 0xd1, 0xb5, 0x06, - 0x6f, 0x62, 0xba, 0x2d, 0x61, 0xd6, 0xf4, 0xf4, 0xb7, 0x86, 0xda, 0x83, - 0x2b, 0x94, 0xf6, 0x1d, 0x68, 0x63, 0x27, 0xeb, 0xb0, 0xd0, 0xd2, 0x24, - 0xfd, 0xbe, 0xed, 0x91, 0xfc, 0xb1, 0xc9, 0x09, 0xda, 0x54, 0x0a, 0x76, - 0x75, 0xea, 0xc4, 0xba, 0xb7, 0x7e, 0x1b, 0xb2, 0x0b, 0x53, 0x53, 0xed, - 0x54, 0xd0, 0xa6, 0xc1, 0x85, 0xa1, 0x1a, 0x62, 0x16, 0xde, 0xca, 0xe9, - 0xd9, 0x55, 0x31, 0x5c, 0x6c, 0x0b, 0x60, 0x3b, 0x39, 0x29, 0x5c, 0x49, - 0x88, 0x20, 0xc5, 0x80, 0x47, 0xfd, 0x94, 0x0f, 0xac, 0x81, 0x9c, 0x98, - 0xe9, 0xfd, 0x05, 0x70, 0x85, 0xa3, 0xbf, 0x4b, 0xf9, 0x57, 0xbe, 0xe3, - 0x01, 0xde, 0xb3, 0x23, 0xf3, 0x64, 0xd4, 0xe0, 0x89, 0x3c, 0xfb, 0xe3, - 0x45, 0x3e, 0xda, 0x03, 0x0b, 0xd8, 0x80, 0xae, 0x07, 0x50, 0x19, 0x59, - 0x25, 0x7f, 0x93, 0x07, 0x75, 0xd2, 0x9a, 0x94, 0x94, 0xdf, 0x8f, 0x8c, - 0xd0, 0xc7, 0x38, 0x37, 0xf4, 0xbb, 0x27, 0x02, 0xbb, 0x40, 0x44, 0x3b, - 0xea, 0xfd, 0xb4, 0xdd, 0x6a, 0x29, 0x7d, 0x3c, 0x83, 0xef, 0xc4, 0x47, - 0x88, 0x9d, 0xed, 0xf1, 0x24, 0x62, 0xae, 0xe0, 0x9d, 0xa9, 0xb2, 0x47, - 0x4d, 0xfc, 0xb2, 0xc4, 0x2e, 0xd7, 0x6e, 0x0b, 0x65, 0xf8, 0xe9, 0x12, - 0xc7, 0xb7, 0x19, 0x33, 0x4b, 0x1f, 0x70, 0xa3, 0x35, 0x51, 0x38, 0xf8, - 0x4c, 0x59, 0xf5, 0xe9, 0xf8, 0xff, 0x4b, 0x2d, 0x3d, 0x5a, 0xdc, 0x67, - 0x5c, 0xfd, 0x17, 0x82, 0x13, 0xde, 0x2d, 0x99, 0xab, 0x85, 0xe0, 0xfa, - 0xe2, 0x3d, 0x1b, 0x95, 0x0f, 0xd2, 0xd4, 0xc8, 0x51, 0x31, 0x03, 0x1b, - 0xa6, 0xf3, 0xb0, 0x54, 0x0d, 0x58, 0x84, 0xfd, 0x34, 0x01, 0xeb, 0xd3, - 0xc4, 0x12, 0x05, 0x84, 0x06, 0xa3, 0x3a, 0x18, 0xc9, 0x2d, 0xad, 0x73, - 0x1e, 0x3b, 0x1b, 0xbb, 0x29, 0xcb, 0x59, 0xd3, 0x02, 0x81, 0xaf, 0x4d, - 0x62, 0x39, 0xad, 0x3d, 0xa4, 0x79, 0xd8, 0x0d, 0x9c, 0x44, 0xdc, 0x0c, - 0x16, 0xd6, 0xfd, 0xdf, 0x2d, 0xd9, 0x1e, 0x74, 0x14, 0xc4, 0x61, 0x26, - 0x13, 0x49, 0xed, 0xfb, 0xcb, 0x71, 0xd6, 0x72, 0x87, 0xe8, 0x5a, 0xcf, - 0xa2, 0x59, 0xf5, 0x45, 0x47, 0xae, 0xc9, 0x8d, 0x86, 0x0a, 0x2a, 0x3b, - 0xd2, 0x57, 0x50, 0x95, 0x5f, 0x52, 0x43, 0xc7, 0xad, 0xb3, 0x8b, 0x44, - 0xee, 0x9a, 0x9f, 0x84, 0x04, 0x36, 0x8c, 0x6f, 0x76, 0xbd, 0xcd, 0xd8, - 0xf3, 0x32, 0x32, 0x4f, 0xdd, 0x8d, 0x78, 0x75, 0x81, 0x75, 0x27, 0x18, - 0x73, 0xc4, 0xde, 0x0c, 0x3b, 0x58, 0x2e, 0x36, 0x2c, 0xba, 0x0d, 0x06, - 0x53, 0x52, 0x6c, 0x0d, 0xf1, 0x4e, 0xf8, 0xfc, 0x59, 0xe1, 0xd5, 0x38, - 0x4b, 0x25, 0x48, 0x9e, 0x35, 0xfa, 0x83, 0x32, 0xe4, 0x9c, 0x27, 0x81, - 0x7a, 0x02, 0x40, 0x2b, 0xd4, 0x4e, 0xa2, 0x1b, 0xca, 0xa9, 0xa6, 0x8b, - 0x71, 0x95, 0x57, 0xfd, 0x5f, 0x36, 0x44, 0xbd, 0x12, 0x99, 0x27, 0x7c, - 0x46, 0xee, 0xab, 0x3c, 0xb4, 0xae, 0xc8, 0x58, 0xc2, 0x6d, 0x1d, 0x6c, - 0xb9, 0x07, 0xa5, 0xcf, 0xbd, 0x53, 0x70, 0x79, 0x5a, 0xb1, 0x91, 0x5a, - 0x31, 0x0a, 0x21, 0x2f, 0x97, 0x88, 0xde, 0x22, 0xf3, 0x49, 0x68, 0xab, - 0xeb, 0xb2, 0xfc, 0x13, 0xff, 0x88, 0xa7, 0xcd, 0x0d, 0x52, 0x89, 0xb8, - 0x0d, 0xde, 0xe8, 0xfa, 0xbc, 0x38, 0xcf, 0x8f, 0x11, 0x5f, 0xb4, 0xa0, - 0xe9, 0x80, 0x5f, 0x0b, 0x1b, 0x04, 0xc9, 0xd6, 0x26, 0x21, 0xdd, 0xc6, - 0x13, 0xda, 0x8a, 0x0a, 0xa8, 0x39, 0x1e, 0xcd, 0x70, 0xf2, 0x2a, 0x05, - 0x0c, 0xda, 0x34, 0xc3, 0x8a, 0x2e, 0xe1, 0x75, 0x4c, 0x80, 0x29, 0x67, - 0x72, 0xe8, 0xdc, 0x4e, 0xe1, 0xed, 0x3c, 0x9f, 0xbf, 0x24, 0x16, 0x11, - 0x32, 0xc2, 0x7d, 0x2e, 0x6b, 0xed, 0x04, 0xbe, 0x1f, 0x79, 0x2b, 0xc7, - 0xfc, 0xc7, 0x62, 0x21, 0xed, 0x64, 0x84, 0xba, 0xa4, 0xae, 0xa6, 0x61, - 0x5e, 0xeb, 0xf8, 0x54, 0xf9, 0x85, 0xe7, 0x2e, 0xbb, 0xd6, 0x70, 0x8d, - 0x28, 0x60, 0x27, 0x02, 0x3a, 0xc5, 0xb3, 0xa5, 0xf0, 0x12, 0x32, 0x88, - 0x56, 0x8d, 0x5b, 0xa9, 0xc2, 0x0b, 0x51, 0x8b, 0x43, 0x84, 0x93, 0xc9, - 0xc8, 0xb9, 0x6c, 0xad, 0x00, 0x31, 0x96, 0x2e, 0x84, 0x65, 0x4c, 0x1e, - 0x44, 0x22, 0x62, 0xda, 0xa5, 0x92, 0x23, 0x62, 0x84, 0x99, 0x64, 0xca, - 0x16, 0xff, 0xb7, 0x08, 0xe6, 0xcf, 0xde, 0xf2, 0xb9, 0x9b, 0x51, 0x03, - 0x15, 0xc0, 0x20, 0x4e, 0x30, 0x2b, 0x09, 0x60, 0x90, 0x91, 0xb8, 0x67, - 0xe2, 0x3b, 0x4e, 0x9b, 0x10, 0xe9, 0x1c, 0x32, 0x34, 0x89, 0xd6, 0xb1, - 0x3a, 0x3d, 0x89, 0xa6, 0xd0, 0x2a, 0x5e, 0x1d, 0xea, 0x47, 0x75, 0xc7, - 0xc9, 0xed, 0x8f, 0x76, 0xa4, 0xe7, 0x5d, 0x96, 0xcd, 0x5e, 0x65, 0x51, - 0x4b, 0x47, 0xe1, 0x87, 0xcb, 0x83, 0xb2, 0xfc, 0x52, 0x2b, 0x15, 0x15, - 0x81, 0x95, 0x7c, 0x27, 0x33, 0xe3, 0x6f, 0xaa, 0x3c, 0xc9, 0x0d, 0xe3, - 0x45, 0xba, 0xfe, 0x1d, 0x9d, 0xd4, 0xf1, 0xb8, 0xd2, 0xba, 0xf8, 0x98, - 0xde, 0x26, 0x7e, 0xc5, 0x0b, 0x41, 0x8f, 0x00, 0x9e, 0xc3, 0xd0, 0x91, - 0x72, 0x10, 0x38, 0x1b, 0x67, 0x33, 0x7e, 0x7b, 0x71, 0xb0, 0x8b, 0x87, - 0x23, 0x60, 0x26, 0x8f, 0x58, 0x9f, 0x57, 0x81, 0xe3, 0x47, 0xe5, 0x66, - 0xd5, 0xa2, 0x59, 0x3e, 0x82, 0xac, 0xe1, 0xf6, 0x26, 0x1a, 0xa8, 0x32, - 0x46, 0xca, 0xb0, 0x0a, 0x54, 0xc6, 0xdd, 0x4b, 0xe7, 0x6c, 0x5a, 0x41, - 0xf1, 0x3d, 0xb0, 0x00, 0x4b, 0x45, 0x29, 0x49, 0x0f, 0x8b, 0x04, 0xcd, - 0x18, 0xbc, 0xb1, 0xd8, 0xe2, 0x4b, 0x95, 0x06, 0x2c, 0x13, 0xfc, 0xab, - 0xd1, 0x60, 0x71, 0x1a, 0x91, 0x46, 0xdb, 0x8d, 0x8c, 0x71, 0x4b, 0x27, - 0xef, 0x51, 0xbc, 0xd7, 0x12, 0x5c, 0xfe, 0xce, 0xde, 0x4f, 0x9d, 0x86, - 0x4b, 0xfa, 0x46, 0x2f, 0x71, 0xbe, 0x97, 0x29, 0x6d, 0x64, 0xc0, 0x3f, - 0x1b, 0x47, 0x20, 0xb1, 0x19, 0xc2, 0x62, 0x30, 0xa6, 0x98, 0xfd, 0xee, - 0xad, 0xe8, 0xb9, 0x75, 0x8b, 0xd0, 0x8e, 0xa8, 0x82, 0x24, 0xe0, 0x0f, - 0x27, 0x04, 0x50, 0xc8, 0xe7, 0x3a, 0x0d, 0x57, 0x18, 0x67, 0x81, 0x12, - 0xa5, 0xf9, 0xa0, 0x15, 0x4d, 0x0d, 0x30, 0xa7, 0x8d, 0x35, 0x75, 0x95, - 0x75, 0x69, 0x90, 0x57, 0xde, 0x42, 0x82, 0x5d, 0x53, 0xf4, 0xc7, 0x6f, - 0x9b, 0x5e, 0x4a, 0x5f, 0x6c, 0x76, 0x2a, 0x06, 0xea, 0xeb, 0xa5, 0xa3, - 0x1d, 0xea, 0xe8, 0xb3, 0xf6, 0xb6, 0x01, 0x60, 0x62, 0x5c, 0x4e, 0x73, - 0x0a, 0xea, 0x25, 0x05, 0x38, 0x91, 0x0d, 0xe8, 0x47, 0x15, 0x3f, 0x54, - 0x3a, 0xa4, 0x52, 0x07, 0x5e, 0xb9, 0x1c, 0x55, 0x46, 0x4f, 0x5f, 0xde, - 0xe0, 0x0e, 0x62, 0x59, 0x36, 0xb6, 0x3d, 0xb7, 0xa5, 0x03, 0xc7, 0x29, - 0x14, 0x60, 0x97, 0x4d, 0x15, 0x9f, 0x5e, 0x32, 0xb1, 0x74, 0x99, 0x5f, - 0x5e, 0x14, 0x73, 0x06, 0x6a, 0x64, 0xe2, 0xe9, 0xf7, 0xda, 0x08, 0x88, - 0xbd, 0xb8, 0x4e, 0xa0, 0xa2, 0x94, 0x50, 0x41, 0x8f, 0x19, 0x8a, 0x95, - 0x86, 0x65, 0xcc, 0x64, 0x51, 0x74, 0x10, 0x1f, 0x1a, 0x81, 0x89, 0x4d, - 0x19, 0x2a, 0x84, 0x1b, 0x76, 0xc1, 0x7e, 0x7f, 0xde, 0x3f, 0x1c, 0x88, - 0x7e, 0x97, 0xa1, 0x82, 0x93, 0xea, 0x75, 0xa1, 0xd8, 0xf3, 0x73, 0x46, - 0x82, 0x3d, 0xe1, 0x60, 0xbd, 0xe7, 0x52, 0x26, 0xf8, 0xf3, 0xfa, 0x10, - 0x07, 0x06, 0x48, 0xc2, 0xa3, 0x47, 0x11, 0xc8, 0x92, 0xb9, 0x95, 0x10, - 0x01, 0xc1, 0x0b, 0xbd, 0x7b, 0xd1, 0x46, 0xdf, 0x0d, 0xb1, 0x61, 0x53, - 0x34, 0xe1, 0x34, 0x4a, 0x8a, 0xdf, 0x70, 0xce, 0x5d, 0xd0, 0x33, 0xb5, - 0x1e, 0x5e, 0xe6, 0x42, 0x30, 0x24, 0x32, 0xb7, 0xd6, 0xe4, 0xd4, 0x62, - 0x88, 0xd4, 0x7e, 0xb4, 0xd7, 0x87, 0x8c, 0xa5, 0xed, 0x43, 0xf2, 0x76, - 0x1c, 0x7b, 0x1d, 0xb4, 0x74, 0x4d, 0xc8, 0xa0, 0xb1, 0xc8, 0x9d, 0x67, - 0x59, 0x53, 0x71, 0x82, 0x17, 0x84, 0x6a, 0x7b, 0x10, 0xad, 0xc2, 0xb1, - 0x06, 0xff, 0xb1, 0xf0, 0xc0, 0xad, 0xa3, 0x12, 0x77, 0x30, 0xac, 0xe8, - 0x13, 0x1a, 0x8b, 0x2b, 0xcd, 0x01, 0xeb, 0x79, 0x0b, 0x30, 0x93, 0x24, - 0xe7, 0xf4, 0x44, 0xc4, 0x49, 0xf1, 0xc1, 0x3c, 0x22, 0x4e, 0x26, 0x20, - 0x37, 0x73, 0xe5, 0x37, 0x72, 0x33, 0xfb, 0x0d, 0x34, 0x5a, 0x3e, 0x35, - 0x58, 0xad, 0xdf, 0x8e, 0xa7, 0xba, 0xcb, 0x87, 0xb6, 0x2a, 0x27, 0xba, - 0xb7, 0x79, 0x38, 0xcb, 0x23, 0xa2, 0xb0, 0xbd, 0x26, 0xc4, 0xfe, 0xcd, - 0x7d, 0x12, 0x03, 0xfc, 0xd9, 0x9d, 0x52, 0x2f, 0x10, 0xd7, 0x7e, 0xe4, - 0x27, 0xa6, 0xa8, 0xba, 0xe3, 0x2d, 0xa7, 0xd6, 0x94, 0x3a, 0x28, 0x84, - 0x33, 0x13, 0xd7, 0x93, 0xe6, 0xd4, 0x03, 0x8a, 0x5d, 0xea, 0xd1, 0x32, - 0x30, 0x3b, 0x35, 0xe5, 0xaf, 0xcf, 0x18, 0xa0, 0x06, 0x0a, 0xc3, 0x53, - 0x40, 0x3b, 0x87, 0x56, 0x41, 0xcb, 0xf2, 0xa0, 0x72, 0x6d, 0xa4, 0xb5, - 0xab, 0x1d, 0xfc, 0xc1, 0xf3, 0x33, 0x06, 0x68, 0x63, 0x49, 0x03, 0x5e, - 0xb7, 0x93, 0x0c, 0x99, 0x07, 0xd9, 0x3a, 0x35, 0x5a, 0x54, 0x3b, 0x0b, - 0xf3, 0xaf, 0x17, 0xe5, 0x34, 0x3d, 0xe5, 0x0e, 0x25, 0xf0, 0x82, 0xf9, - 0xc7, 0x4e, 0xaf, 0x56, 0x63, 0x1b, 0xa8, 0x30, 0x55, 0xa4, 0x6b, 0x91, - 0x67, 0x49, 0xe2, 0x81, 0x1b, 0x93, 0x11, 0x6a, 0x9b, 0x38, 0xbe, 0x94, - 0xa4, 0x1c, 0x7d, 0x2e, 0x4e, 0x14, 0x0f, 0xd2, 0x30, 0xad, 0x39, 0xf1, - 0x68, 0x86, 0x55, 0x89, 0x5d, 0xac, 0xde, 0x4e, 0x12, 0xf2, 0xb1, 0x4c, - 0xf9, 0x0b, 0x7a, 0x96, 0xe6, 0x6e, 0x2e, 0x82, 0xbb, 0x58, 0xf5, 0xeb, - 0x81, 0x72, 0x23, 0x2e, 0x01, 0xef, 0x8d, 0xe2, 0x95, 0xe7, 0x8e, 0xef, - 0x82, 0x8a, 0xde, 0x76, 0xea, 0x5b, 0x16, 0xcb, 0xf5, 0x33, 0x70, 0xad, - 0xa4, 0x6f, 0x20, 0x92, 0x84, 0x15, 0x0a, 0x20, 0x47, 0x0a, 0x8e, 0x85, - 0x4e, 0xf2, 0xe9, 0xea, 0xa2, 0x7c, 0x4b, 0x95, 0xe6, 0x25, 0xef, 0xed, - 0x93, 0x7c, 0xca, 0x85, 0xe3, 0x14, 0x22, 0x67, 0x67, 0x62, 0x0f, 0x78, - 0x4d, 0x79, 0x05, 0xd0, 0x88, 0xfd, 0x8a, 0xf2, 0x54, 0xbb, 0x40, 0x87, - 0xcc, 0x70, 0x46, 0x96, 0x17, 0x04, 0xd5, 0x83, 0x87, 0x4a, 0x5a, 0x0b, - 0xc1, 0xd3, 0x34, 0x25, 0x99, 0xcd, 0x8b, 0x6a, 0xde, 0xac, 0x39, 0xe9, - 0x08, 0x05, 0xea, 0xb0, 0x21, 0x6b, 0xf5, 0x92, 0x2d, 0xd6, 0xcf, 0x1f, - 0x9a, 0x1c, 0x73, 0xb3, 0x04, 0x37, 0xd7, 0x5b, 0x5e, 0xfe, 0xa2, 0x9d, - 0x7e, 0x90, 0xf2, 0x19, 0x61, 0x17, 0xef, 0xa1, 0x64, 0x0d, 0x3a, 0x0c, - 0xc5, 0x83, 0xf9, 0xca, 0xe2, 0xd7, 0x8e, 0x40, 0xdd, 0x8c, 0xb5, 0xf6, - 0x20, 0x00, 0x16, 0x5e, 0x04, 0x10, 0x85, 0x69, 0x79, 0x8f, 0x62, 0x71, - 0x32, 0xf2, 0x5e, 0xfd, 0x53, 0x39, 0x1e, 0x5c, 0x60, 0xe7, 0xd9, 0x87, - 0xfc, 0x99, 0x86, 0xd1, 0x20, 0x8e, 0x8b, 0x5d, 0xdf, 0xc3, 0xbe, 0x99, - 0x25, 0x15, 0xea, 0x6e, 0x12, 0x74, 0x8f, 0x8d, 0x8c, 0x8a, 0xa5, 0xf8, - 0x29, 0x00, 0x4b, 0x7e, 0x93, 0x1d, 0x64, 0x91, 0xde, 0xf7, 0x18, 0x49, - 0xa5, 0x46, 0x54, 0x27, 0x95, 0x7a, 0xed, 0x24, 0x84, 0x5b, 0x2c, 0x9a, - 0x39, 0x40, 0x46, 0x04, 0x56, 0x57, 0x77, 0x1c, 0x61, 0x6d, 0x86, 0xef, - 0xda, 0x23, 0x3b, 0xfb, 0x28, 0x5a, 0xdf, 0xae, 0x31, 0x6b, 0x09, 0x3d, - 0x43, 0xb2, 0x11, 0x91, 0xc8, 0x5c, 0x9f, 0x97, 0x71, 0xff, 0xf4, 0x40, - 0x14, 0x7d, 0xb4, 0x7b, 0x53, 0x50, 0x97, 0xac, 0x15, 0x86, 0x32, 0x42, - 0xc5, 0xac, 0xc1, 0x4d, 0x78, 0x4b, 0x9d, 0xe3, 0xb6, 0xd4, 0x22, 0x8f, - 0x62, 0x65, 0x11, 0xce, 0xe8, 0x05, 0x3f, 0x53, 0x73, 0x90, 0xa1, 0x26, - 0x23, 0xe6, 0x7a, 0xfe, 0x4e, 0x17, 0x05, 0xce, 0x54, 0x2e, 0xbd, 0xe1, - 0x75, 0x7d, 0x69, 0xcd, 0xa4, 0xd0, 0xfd, 0x55, 0xf6, 0x43, 0x53, 0xd6, - 0xed, 0x40, 0x68, 0xc6, 0x10, 0xa7, 0xef, 0x96, 0x73, 0xca, 0x8a, 0xc7, - 0x7b, 0x37, 0x30, 0x3b, 0xad, 0xef, 0xb8, 0x5e, 0x5d, 0x13, 0x78, 0xfc, - 0x9c, 0xe5, 0x20, 0xa2, 0x47, 0x13, 0x01, 0xc1, 0xba, 0x3a, 0xab, 0x2d, - 0xaa, 0xe1, 0xfc, 0x87, 0xec, 0xf4, 0x87, 0x99, 0xe0, 0x14, 0xb1, 0x3e, - 0xf8, 0xb2, 0xe4, 0x90, 0xcf, 0xc0, 0x0c, 0x0d, 0xde, 0x6f, 0xbb, 0x4e, - 0x01, 0x66, 0x8e, 0xb3, 0xaa, 0x32, 0xcd, 0xa3, 0x1a, 0x3c, 0x46, 0x65, - 0x07, 0x98, 0x32, 0x74, 0x6b, 0x60, 0xd5, 0x6f, 0xbb, 0xe1, 0x55, 0xb2, - 0x18, 0xbd, 0xa0, 0x5c, 0xdc, 0x70, 0xa1, 0xf0, 0x03, 0x08, 0x62, 0xed, - 0x9c, 0xbd, 0xbf, 0x8b, 0x8c, 0x8e, 0x24, 0x3d, 0xaf, 0x07, 0x7b, 0x42, - 0xa1, 0x0b, 0xe2, 0xb5, 0x4d, 0x09, 0xef, 0x4c, 0x0a, 0xfc, 0x35, 0x5d, - 0x17, 0xb8, 0x4f, 0x71, 0x11, 0xc7, 0x4b, 0x80, 0x06, 0x29, 0x97, 0x12, - 0x6d, 0x1c, 0x8a, 0x53, 0x42, 0x73, 0xe0, 0x00, 0x18, 0x18, 0x1c, 0x5c, - 0x32, 0xa9, 0x61, 0x3e, 0x55, 0x4f, 0xee, 0x7c, 0xe3, 0x82, 0x8c, 0xab, - 0x04, 0x41, 0x9c, 0xfb, 0x8c, 0x85, 0xad, 0x93, 0x46, 0x94, 0x01, 0x2a, - 0x0c, 0x2f, 0xd2, 0x92, 0x3b, 0xcf, 0x99, 0xc9, 0x02, 0x75, 0x8d, 0x5e, - 0x2b, 0x7f, 0x4b, 0xa8, 0x80, 0x60, 0x8b, 0xe8, 0x96, 0x4c, 0xd8, 0x80, - 0xfc, 0x32, 0xe6, 0x2e, 0x7a, 0x39, 0xe3, 0xfc, 0xd9, 0x53, 0x83, 0x3a, - 0x6a, 0x08, 0x49, 0x7b, 0x7b, 0xcb, 0xc9, 0x2d, 0x5c, 0x91, 0x6a, 0x6f, - 0x6a, 0x8d, 0x54, 0x22, 0x36, 0xe5, 0x91, 0x48, 0x03, 0x36, 0x5d, 0xa1, - 0x03, 0x59, 0xd1, 0xa8, 0xe0, 0x5c, 0xce, 0xaf, 0x58, 0x16, 0x7f, 0xee, - 0xc4, 0x43, 0xb3, 0x66, 0xb9, 0x10, 0xb3, 0x49, 0x9b, 0x5a, 0x33, 0x51, - 0xa4, 0x20, 0xec, 0xb9, 0x6c, 0x2e, 0x4f, 0xfd, 0x49, 0xae, 0x72, 0xa4, - 0x81, 0x6b, 0x86, 0xd0, 0xd1, 0x44, 0x61, 0xab, 0x8d, 0x3e, 0x6b, 0xc5, - 0x88, 0x38, 0x48, 0x24, 0xee, 0x46, 0x4a, 0xa1, 0xca, 0x7d, 0x21, 0x80, - 0x07, 0x1d, 0xa5, 0xa0, 0x96, 0xc1, 0xb5, 0x20, 0xdb, 0x9f, 0xdc, 0x8e, - 0xae, 0x3c, 0x3f, 0xea, 0xd0, 0xb1, 0xd1, 0xc2, 0x74, 0x94, 0x84, 0x37, - 0x3d, 0x88, 0x20, 0xc4, 0xc7, 0x8c, 0xdb, 0x61, 0xda, 0x0c, 0x72, 0x06, - 0x4d, 0xdb, 0x72, 0x0e, 0x9e, 0xd8, 0xbf, 0x4b, 0x35, 0xd2, 0xf6, 0xb7, - 0x32, 0x7e, 0xdb, 0x97, 0x43, 0x3e, 0xf7, 0x48, 0xeb, 0xba, 0x3d, 0x55, - 0x3d, 0x7b, 0xa4, 0x3b, 0x7e, 0x24, 0x21, 0xba, 0x12, 0x47, 0xa2, 0x8a, - 0x41, 0x63, 0x72, 0x67, 0x97, 0x62, 0xaf, 0x03, 0x6f, 0x3f, 0xb1, 0x72, - 0x04, 0x40, 0x06, 0x68, 0x54, 0x92, 0x24, 0x6c, 0x48, 0x0e, 0x2c, 0x78, - 0x04, 0x2e, 0x82, 0x51, 0xaf, 0xb3, 0xc2, 0x71, 0xb3, 0x29, 0x21, 0x43, - 0x79, 0x0f, 0x1c, 0x08, 0x10, 0x12, 0x2b, 0x62, 0x56, 0xfe, 0x18, 0xb8, - 0x36, 0xc7, 0xdd, 0xf1, 0x29, 0xde, 0x05, 0x94, 0xb3, 0x8b, 0x77, 0x98, - 0x3d, 0x74, 0x39, 0xc5, 0xa8, 0x1c, 0xea, 0x88, 0x5d, 0x42, 0xe4, 0xa8, - 0x8d, 0xf8, 0x32, 0x42, 0x93, 0x8a, 0x4b, 0xa0, 0x9e, 0x27, 0xe1, 0x36, - 0x29, 0xec, 0xeb, 0xe0, 0x7b, 0x2a, 0xfc, 0x82, 0x63, 0xe4, 0xba, 0x41, - 0x68, 0x34, 0x14, 0x5c, 0xbf, 0x3a, 0x4d, 0xc4, 0xd5, 0xac, 0x45, 0xb7, - 0x83, 0x1e, 0x47, 0x27, 0xb8, 0xfe, 0x9e, 0x62, 0x61, 0xf5, 0x52, 0x57, - 0x39, 0x4f, 0xfb, 0x96, 0x5c, 0x3e, 0xa1, 0x28, 0xb2, 0x9d, 0x0f, 0x0e, - 0x99, 0xac, 0xac, 0xae, 0x57, 0x31, 0x51, 0x25, 0x19, 0x43, 0x50, 0x4f, - 0x3c, 0xb2, 0x48, 0xec, 0xff, 0x26, 0xe1, 0xc4, 0xff, 0x59, 0x63, 0x9a, - 0xd3, 0x0b, 0xb5, 0x70, 0xf4, 0xaa, 0x4f, 0x85, 0xbb, 0x22, 0x13, 0x57, - 0x72, 0xe8, 0x00, 0x61, 0xd7, 0xab, 0x07, 0x81, 0x18, 0xe2, 0x66, 0xb3, - 0x5f, 0xe5, 0x89, 0x46, 0x64, 0x47, 0x52, 0xae, 0xc9, 0xd6, 0xd0, 0x15, - 0x60, 0xc7, 0x72, 0xb6, 0x87, 0xe9, 0xcd, 0x46, 0x03, 0x60, 0x56, 0xe2, - 0x0a, 0x64, 0x1e, 0x2b, 0x50, 0xea, 0xb3, 0x8a, 0x15, 0x98, 0x9b, 0xab, - 0x44, 0x99, 0x6b, 0x2a, 0x49, 0xbb, 0xfd, 0x29, 0x94, 0xef, 0xf5, 0x4e, - 0x99, 0x9a, 0xf0, 0x7d, 0xcc, 0x1c, 0xe9, 0xbb, 0x33, 0x44, 0x43, 0xd5, - 0x63, 0x36, 0x74, 0x9c, 0x2c, 0x1a, 0x52, 0x35, 0x07, 0xd8, 0x7e, 0x73, - 0x50, 0x80, 0x9d, 0x28, 0x74, 0x97, 0x10, 0xc6, 0x60, 0x34, 0x9c, 0xe0, - 0x82, 0x39, 0xd4, 0x86, 0x24, 0xc4, 0x5f, 0xf6, 0xcb, 0xd5, 0x32, 0x3a, - 0x20, 0xac, 0xc1, 0xa6, 0x2a, 0xf5, 0xc9, 0x93, 0x45, 0xc5, 0xc9, 0x09, - 0xc0, 0x67, 0x20, 0xa5, 0x8d, 0x50, 0xad, 0xaf, 0xf5, 0xf1, 0x5b, 0xdb, - 0x14, 0xee, 0xea, 0x70, 0x0c, 0x86, 0x77, 0xa3, 0x4d, 0x89, 0xd5, 0x1a, - 0xd7, 0x22, 0xde, 0xb5, 0x0b, 0x66, 0xc7, 0x96, 0x9c, 0xb1, 0xbb, 0x37, - 0x47, 0xda, 0x81, 0x0b, 0x01, 0x7f, 0x10, 0x93, 0xfb, 0xd6, 0x93, 0x69, - 0x07, 0xd1, 0x26, 0x81, 0xe2, 0xff, 0x45, 0x35, 0x37, 0x23, 0x7e, 0x4b, - 0xc8, 0x0a, 0x02, 0x59, 0x33, 0x2e, 0x51, 0xa5, 0x37, 0x31, 0xb8, 0x71, - 0x00, 0xcf, 0x07, 0xe1, 0x6d, 0x36, 0x22, 0x32, 0x6e, 0x48, 0x47, 0xb0, - 0x3b, 0x71, 0x03, 0x83, 0xb2, 0x61, 0xc8, 0xac, 0x5f, 0x6e, 0x08, 0x31, - 0x10, 0x4e, 0xdf, 0x77, 0xd8, 0x49, 0x68, 0x9b, 0x4d, 0xd4, 0x01, 0xc1, - 0xf1, 0x28, 0x43, 0xf5, 0x4f, 0x89, 0xdb, 0x3b, 0xfb, 0x1d, 0xee, 0x86, - 0x0b, 0x02, 0x57, 0xd0, 0xf2, 0xf9, 0x8a, 0xd5, 0xf0, 0xf4, 0x9c, 0x25, - 0xfd, 0xf1, 0x07, 0x30, 0x16, 0xb6, 0x22, 0xd1, 0x84, 0x5e, 0xda, 0x60, - 0xe5, 0xd5, 0x60, 0xe0, 0xad, 0x67, 0xbe, 0xd7, 0x67, 0x6e, 0xe9, 0xd3, - 0x0e, 0x01, 0xd8, 0xda, 0x04, 0x00, 0xac, 0xee, 0xc5, 0xe3, 0x33, 0x4b, - 0xda, 0x49, 0x1a, 0x41, 0x2d, 0x36, 0xa4, 0x2e, 0x3c, 0x47, 0x1a, 0xe0, - 0x18, 0xd9, 0x4f, 0xf3, 0xec, 0xb0, 0x42, 0x5a, 0x81, 0xa2, 0x9e, 0x54, - 0x16, 0x8c, 0x93, 0x6c, 0xba, 0x23, 0x83, 0x04, 0xe5, 0xc7, 0xfb, 0x38, - 0xd0, 0xfb, 0x64, 0x69, 0xe3, 0x1d, 0x50, 0x09, 0x94, 0xef, 0x6c, 0x97, - 0xbd, 0xda, 0xfd, 0xdd, 0xd9, 0x84, 0x38, 0x1f, 0xd8, 0x8d, 0x40, 0xe8, - 0xa0, 0x4f, 0x4e, 0x55, 0xf2, 0x7a, 0x49, 0xf9, 0x87, 0xaa, 0x6e, 0xf6, - 0xc7, 0xd8, 0x66, 0x3c, 0x3b, 0xfc, 0x68, 0xd9, 0x44, 0x2c, 0x19, 0xc0, - 0x2a, 0x88, 0x6a, 0x62, 0x7c, 0x6e, 0xbe, 0x88, 0x18, 0x43, 0x9b, 0xdf, - 0xf4, 0x88, 0x37, 0xda, 0xfd, 0x5a, 0x3b, 0x2e, 0xae, 0x2f, 0xf9, 0x48, - 0x0a, 0x0b, 0x24, 0x1e, 0x3b, 0x21, 0x9c, 0x1b, 0xd8, 0xc4, 0x85, 0xcd, - 0x12, 0xa4, 0x87, 0x4f, 0xed, 0xca, 0xbc, 0x4e, 0x9f, 0xeb, 0xd9, 0x8f, - 0xda, 0xfd, 0xf4, 0xc3, 0x6d, 0x13, 0xa6, 0x73, 0x47, 0x50, 0x99, 0x59, - 0x81, 0xa8, 0xd6, 0xfb, 0x46, 0xca, 0x1a, 0xde, 0x32, 0x2b, 0xa1, 0x04, - 0x29, 0x95, 0x7f, 0xb6, 0x2e, 0x30, 0x2f, 0x8e, 0xc8, 0xe4, 0x44, 0x2f, - 0xe9, 0xfd, 0x5c, 0x05, 0x22, 0x8d, 0xfc, 0x57, 0x39, 0xd1, 0x8d, 0x62, - 0xc1, 0xee, 0x30, 0x4b, 0xa4, 0xbe, 0x9d, 0x01, 0xd2, 0x87, 0x98, 0xb8, - 0x05, 0xe4, 0xf8, 0x1f, 0x61, 0x0d, 0x79, 0x1e, 0x74, 0xb9, 0x24, 0x5c, - 0xe0, 0x32, 0xfc, 0x25, 0xf9, 0xef, 0x9f, 0xaf, 0x7e, 0xfd, 0x3a, 0x03, - 0x30, 0x09, 0x81, 0x61, 0x44, 0xa3, 0xf4, 0xd6, 0x1a, 0x85, 0x92, 0x6f, - 0xf5, 0x9c, 0x76, 0x0d, 0xb3, 0xb3, 0x32, 0x36, 0x2c, 0xeb, 0xa5, 0x08, - 0xc0, 0x2b, 0x32, 0xd6, 0x8d, 0x0a, 0x03, 0xbb, 0x06, 0x97, 0x4f, 0xf3, - 0xe3, 0x2a, 0x81, 0xd6, 0x3b, 0x09, 0x4a, 0xfc, 0x14, 0x5a, 0xa5, 0x35, - 0x08, 0xec, 0xb6, 0x89, 0x25, 0x5a, 0x63, 0x52, 0x00, 0x6b, 0xa0, 0x5c, - 0x04, 0x4a, 0x2c, 0xbd, 0x87, 0x28, 0xd8, 0xe4, 0x58, 0xbd, 0xd6, 0x34, - 0xe0, 0x55, 0x73, 0x47, 0x41, 0xf1, 0x30, 0xc2, 0xd8, 0x6b, 0x68, 0x2c, - 0xb6, 0xf7, 0x4a, 0x6e, 0x81, 0x32, 0xbd, 0x43, 0x74, 0xf4, 0x5a, 0xd0, - 0x9e, 0xe1, 0x20, 0xb0, 0x7f, 0x2f, 0xe0, 0x9b, 0xd9, 0xc6, 0x21, 0x72, - 0xa4, 0xd6, 0x7e, 0x8d, 0x8e, 0xc2, 0x68, 0xe2, 0x83, 0x7b, 0x86, 0x34, - 0x4d, 0xec, 0xe6, 0x01, 0xf3, 0x6b, 0xb3, 0x6b, 0x74, 0x07, 0x4c, 0x52, - 0x95, 0x6b, 0x19, 0xe0, 0xbd, 0x2e, 0x53, 0x56, 0x6c, 0x50, 0x07, 0x14, - 0xb8, 0xf5, 0xad, 0x98, 0xbb, 0x93, 0x45, 0xd1, 0xc0, 0x7e, 0x09, 0x1b, - 0xe1, 0xcb, 0x90, 0xd4, 0xe2, 0x79, 0x19, 0xba, 0xea, 0x7c, 0xda, 0xda, - 0x4f, 0x6e, 0x3c, 0xd1, 0xb0, 0x27, 0x2a, 0xb0, 0x5d, 0xed, 0xb0, 0xb0, - 0xff, 0x72, 0x65, 0x1f, 0xbc, 0xb6, 0x38, 0x6b, 0xe8, 0xcf, 0x66, 0xd4, - 0x35, 0x5e, 0xfd, 0x9c, 0x01, 0x4e, 0xf9, 0x92, 0x1e, 0x09, 0x7b, 0x0f, - 0x98, 0x11, 0x27, 0xa2, 0x70, 0xb7, 0xf5, 0x93, 0xdd, 0xbe, 0x69, 0xb8, - 0x9d, 0x1d, 0x8b, 0x70, 0x6c, 0x37, 0x4b, 0xfb, 0x78, 0xb2, 0x66, 0x7e, - 0xc5, 0xdb, 0xe2, 0xa1, 0xd6, 0x54, 0xc6, 0x3f, 0xbf, 0xf7, 0xd6, 0xae, - 0xd0, 0x46, 0xcb, 0x8d, 0x73, 0xbb, 0x01, 0x79, 0xc9, 0x0d, 0xdf, 0x81, - 0x63, 0xd4, 0xaf, 0xc4, 0x9e, 0x51, 0xdc, 0x6f, 0x72, 0xde, 0xf8, 0xc7, - 0x35, 0xd3, 0xc4, 0xc0, 0xdc, 0x40, 0x80, 0x27, 0x62, 0x36, 0x55, 0xaf, - 0xd1, 0x44, 0xc1, 0xe4, 0xb7, 0x3c, 0x00, 0xf2, 0x8d, 0x1b, 0x88, 0xdd, - 0x76, 0x9d, 0xc0, 0x3b, 0x29, 0x27, 0xba, 0xd3, 0x7b, 0x9c, 0xb1, 0x92, - 0xaa, 0xaa, 0xaf, 0x49, 0x4e, 0x36, 0x14, 0xe3, 0x95, 0x86, 0xee, 0x5a, - 0x75, 0xcc, 0x12, 0xde, 0xc8, 0xca, 0x02, 0x04, 0xdc, 0x6b, 0x7d, 0x0d, - 0x4b, 0xd2, 0x68, 0x75, 0xeb, 0x32, 0x5f, 0x3c, 0xa3, 0x40, 0x9c, 0x88, - 0xda, 0x61, 0xc9, 0xa3, 0xd3, 0xe0, 0xc4, 0x82, 0x13, 0x9c, 0x5c, 0x9f, - 0x53, 0xeb, 0xb3, 0x0a, 0x80, 0xb4, 0xe2, 0x6e, 0x3c, 0xbc, 0xac, 0x7e, - 0xd7, 0xfe, 0x9a, 0x68, 0xcb, 0x32, 0x05, 0x14, 0x20, 0x73, 0xe7, 0x05, - 0xb1, 0x43, 0xd9, 0x71, 0x14, 0xfb, 0x7b, 0x02, 0x01, 0x41, 0xe0, 0xe2, - 0xe4, 0x78, 0xba, 0xb6, 0x13, 0xad, 0xdc, 0x0e, 0xd5, 0x38, 0x67, 0xd8, - 0x56, 0xc4, 0xbd, 0x47, 0x14, 0x49, 0x24, 0x65, 0x4e, 0x83, 0x87, 0x20, - 0x90, 0xe7, 0x3c, 0x39, 0x83, 0x35, 0x88, 0x3f, 0x9c, 0xbc, 0xfa, 0xba, - 0x9f, 0xdf, 0xfa, 0x4d, 0xc1, 0x18, 0x64, 0xd7, 0xa0, 0x87, 0xa8, 0xac, - 0x58, 0xef, 0x1e, 0xae, 0xb8, 0x58, 0x8b, 0xe3, 0x3c, 0x8e, 0xdf, 0x9a, - 0x12, 0x37, 0x8e, 0x62, 0x79, 0xe5, 0xbe, 0xe0, 0x7a, 0x16, 0xa3, 0xdf, - 0x99, 0x98, 0x14, 0x56, 0x6e, 0xa8, 0x0a, 0x05, 0x0f, 0xf0, 0x70, 0x9f, - 0xcd, 0xfd, 0xb4, 0x23, 0xb3, 0x0b, 0xe1, 0x1d, 0xe6, 0xf8, 0xa7, 0x46, - 0x24, 0x7f, 0xef, 0xc4, 0x15, 0xe0, 0x7f, 0xfd, 0xa3, 0x7b, 0x5c, 0x1d, - 0x62, 0x0f, 0x5d, 0x91, 0x53, 0x27, 0xb3, 0xde, 0xa0, 0xee, 0xd2, 0xf9, - 0x19, 0x16, 0xca, 0x3e, 0x0d, 0x94, 0xa8, 0x78, 0x60, 0xc5, 0xc2, 0x2d, - 0xba, 0xbd, 0x33, 0x79, 0x7c, 0x73, 0x08, 0x5a, 0x95, 0x1d, 0xe6, 0x5e, - 0x1c, 0x24, 0xaa, 0x34, 0xf0, 0x70, 0xcf, 0xc2, 0xbe, 0x35, 0x43, 0x51, - 0x35, 0x05, 0x2f, 0x5e, 0xca, 0x04, 0x1e, 0x08, 0x6e, 0x13, 0xa5, 0x64, - 0xbd, 0xe8, 0xb1, 0x63, 0x38, 0xca, 0x4d, 0xc7, 0xf2, 0xde, 0x31, 0xc7, - 0xb0, 0x74, 0x0b, 0xef, 0x96, 0x32, 0xb0, 0xfc, 0xf3, 0x7f, 0xe4, 0xd0, - 0xf6, 0x78, 0xa0, 0x36, 0x1e, 0x6b, 0x84, 0xa6, 0x30, 0x0d, 0x74, 0xb9, - 0x96, 0xec, 0xcc, 0xdd, 0x07, 0x95, 0x8b, 0xa6, 0xf5, 0x00, 0x6c, 0x84, - 0x43, 0xfd, 0xe4, 0x3c, 0xbe, 0x34, 0x4d, 0x45, 0xf9, 0x05, 0x95, 0x58, - 0x6d, 0x36, 0xa5, 0x14, 0x00, 0x18, 0x6f, 0x31, 0x27, 0x2e, 0x97, 0x16, - 0x7b, 0xb8, 0xd8, 0x8d, 0x14, 0x93, 0xd6, 0xa9, 0xb3, 0x8d, 0x9d, 0x35, - 0x54, 0xbd, 0xac, 0x82, 0x4b, 0x8f, 0x72, 0x55, 0xbe, 0x9f, 0x14, 0x6c, - 0x87, 0x2f, 0x51, 0xe4, 0x3c, 0x02, 0x7e, 0x4f, 0xf6, 0x73, 0x2e, 0x19, - 0xb9, 0x62, 0x0a, 0x6c, 0x69, 0x35, 0x6d, 0x4b, 0x06, 0x44, 0x5d, 0x90, - 0xd7, 0x12, 0x5c, 0x9b, 0xba, 0x00, 0x53, 0x38, 0x09, 0xd8, 0x52, 0xdb, - 0x2d, 0xdd, 0x30, 0xda, 0x09, 0xa9, 0x14, 0xfb, 0x2f, 0xb3, 0x58, 0xdf, - 0xcd, 0xe8, 0x9b, 0x69, 0xa4, 0x98, 0x14, 0x3e, 0xc5, 0x34, 0xef, 0xca, - 0xee, 0xf9, 0xed, 0x34, 0x60, 0x8d, 0xd4, 0x0a, 0x0e, 0xa7, 0xf8, 0xbb, - 0x94, 0x4d, 0x47, 0x92, 0x2e, 0x09, 0xf4, 0xdf, 0x60, 0xf8, 0x35, 0x49, - 0xff, 0xe8, 0xfd, 0x1b, 0xf3, 0xcf, 0x2b, 0x11, 0xf6, 0x4e, 0x3a, 0x24, - 0x38, 0xe1, 0x82, 0xc7, 0xe5, 0x35, 0xd6, 0xe0, 0x71, 0x70, 0x53, 0x71, - 0xc9, 0x0d, 0x1f, 0xfe, 0x04, 0xeb, 0x0c, 0xa4, 0x04, 0xf7, 0x70, 0x1f, - 0x49, 0x01, 0x89, 0x55, 0x09, 0x01, 0x54, 0x56, 0xb4, 0xf5, 0xd5, 0x48, - 0xff, 0x8d, 0xcf, 0xea, 0xcb, 0x1c, 0xb0, 0x51, 0xf7, 0xb5, 0x96, 0x88, - 0x82, 0xb4, 0xd6, 0x2e, 0xba, 0x02, 0x9b, 0xcb, 0x26, 0x84, 0x65, 0x7d, - 0x83, 0x6c, 0x8a, 0x73, 0x31, 0x73, 0xd5, 0xdd, 0x15, 0x0a, 0xec, 0x48, - 0xf9, 0xe3, 0x2f, 0x7a, 0x59, 0x58, 0xf5, 0xb5, 0x14, 0xf5, 0x74, 0x36, - 0xb4, 0x46, 0x62, 0x55, 0xcf, 0x3c, 0x2f, 0x80, 0xa5, 0x20, 0x2a, 0xc7, - 0xd5, 0x09, 0xdd, 0xc1, 0xa5, 0xdc, 0xf1, 0x3a, 0xbd, 0xe7, 0xc7, 0x12, - 0x25, 0x2b, 0x28, 0xc8, 0x72, 0x2e, 0x98, 0x0b, 0x8f, 0x21, 0x2f, 0x04, - 0xe0, 0x7c, 0x51, 0xfd, 0x6a, 0xb0, 0x12, 0xf4, 0x5e, 0x99, 0xb7, 0x02, - 0x4a, 0x6e, 0x02, 0xd2, 0xd9, 0x81, 0xef, 0x6a, 0x11, 0xbc, 0x53, 0x82, - 0x51, 0xb6, 0xdc, 0x0e, 0x02, 0x60, 0xb3, 0x46, 0x63, 0xe1, 0xf6, 0x03, - 0x35, 0xee, 0xb7, 0x3b, 0x28, 0x8b, 0xa2, 0x8e, 0xfc, 0x80, 0x2e, 0x75, - 0xdf, 0xdf, 0xeb, 0x15, 0xba, 0x34, 0xda, 0xc8, 0x34, 0xcd, 0x71, 0xf6, - 0x47, 0x07, 0x32, 0x53, 0x1e, 0xe8, 0xd6, 0x9b, 0x0a, 0x3d, 0x34, 0xe2, - 0xc7, 0x5c, 0x63, 0x60, 0xd4, 0xd9, 0x5d, 0x3d, 0xb1, 0x51, 0x88, 0xc5, - 0x06, 0x26, 0xea, 0xb3, 0xc2, 0x8e, 0xdc, 0xb3, 0x41, 0x5c, 0xba, 0xcd, - 0x52, 0x55, 0xe6, 0x58, 0xef, 0x97, 0x1e, 0x29, 0xfa, 0x70, 0x64, 0xa6, - 0x01, 0x23, 0x41, 0x2e, 0xa8, 0x59, 0x87, 0x70, 0xf4, 0xae, 0xf8, 0xd8, - 0x4a, 0x25, 0x27, 0xbc, 0xed, 0xf8, 0x06, 0xfa, 0x5d, 0x28, 0x14, 0x48, - 0xb5, 0x63, 0x7a, 0x7e, 0xae, 0x55, 0x22, 0x05, 0xa3, 0xb2, 0xa1, 0xbb, - 0x65, 0xa3, 0xa6, 0xeb, 0x12, 0x52, 0x00, 0xd0, 0x99, 0xc3, 0x29, 0x13, - 0x9b, 0x11, 0xeb, 0xd5, 0x35, 0xa2, 0x76, 0x82, 0x7c, 0x0f, 0xba, 0xaa, - 0x64, 0x05, 0x7a, 0xb6, 0x77, 0xed, 0x76, 0xd6, 0x04, 0x7c, 0x7b, 0x2e, - 0x81, 0xef, 0xc4, 0x95, 0xcc, 0x1d, 0x69, 0x63, 0x5f, 0xae, 0x81, 0x70, - 0xb2, 0x64, 0x4e, 0x59, 0xb5, 0xd5, 0x4e, 0x50, 0xc3, 0x8d, 0xe3, 0x74, - 0x7e, 0xa8, 0x42, 0x68, 0x63, 0xe2, 0x68, 0x91, 0x1c, 0x76, 0x3f, 0x00, - 0x1d, 0x1d, 0x52, 0x3f, 0x60, 0x92, 0x84, 0x46, 0x41, 0x00, 0xb9, 0x6d, - 0x38, 0x27, 0x8d, 0xca, 0x11, 0x5c, 0xba, 0x17, 0xc7, 0x9c, 0x7f, 0x7b, - 0x44, 0xe2, 0x6f, 0x66, 0xcd, 0x36, 0xb0, 0x7a, 0x16, 0x79, 0x1e, 0x65, - 0x62, 0x31, 0x52, 0x17, 0xec, 0x70, 0x94, 0x81, 0xaf, 0x48, 0x95, 0xde, - 0x3d, 0x3c, 0x62, 0x44, 0x16, 0x71, 0x77, 0x80, 0xa8, 0x7c, 0x1c, 0x6d, - 0xb2, 0x13, 0x0a, 0x1c, 0xf6, 0xd2, 0x88, 0x85, 0xf9, 0x19, 0x9b, 0x91, - 0x77, 0x08, 0x3f, 0x1c, 0xd6, 0xbc, 0x13, 0x66, 0x1d, 0xea, 0x5c, 0x12, - 0x75, 0x17, 0x24, 0xf4, 0xc4, 0xbf, 0xac, 0xa1, 0x4b, 0x60, 0x2c, 0x1b, - 0xda, 0x44, 0x07, 0x81, 0x9c, 0x76, 0x63, 0xa2, 0x49, 0x6b, 0xb5, 0x3b, - 0x13, 0xf5, 0xa2, 0x10, 0x3b, 0x5e, 0xe6, 0xf8, 0xf9, 0x2b, 0xdb, 0xc4, - 0x8c, 0xd0, 0x7b, 0x28, 0xfa, 0x67, 0x7d, 0xc5, 0xb9, 0x25, 0xd3, 0x01, - 0x5e, 0x01, 0x10, 0x72, 0xfd, 0xf8, 0x4f, 0xe7, 0x68, 0x38, 0xba, 0x56, - 0x88, 0x33, 0xa5, 0x09, 0xb4, 0xd4, 0xcf, 0x31, 0x80, 0x57, 0xa5, 0xfe, - 0xce, 0x3e, 0x34, 0x99, 0x61, 0x9d, 0xa3, 0x09, 0x1f, 0x6f, 0x39, 0x53, - 0x64, 0xe5, 0xdf, 0xe0, 0x93, 0x6c, 0xbd, 0x68, 0xb5, 0x16, 0xdf, 0x11, - 0x60, 0x8d, 0x6a, 0xdc, 0x24, 0xa2, 0xc2, 0xde, 0xc8, 0xf7, 0xac, 0x8d, - 0xee, 0x6b, 0x8a, 0xae, 0x29, 0x06, 0xa9, 0xed, 0xaa, 0xa3, 0xab, 0x94, - 0x6f, 0xe0, 0x00, 0x19, 0x44, 0xa0, 0x1c, 0x1f, 0x85, 0xca, 0xc9, 0x6e, - 0x0b, 0x43, 0x7c, 0xc6, 0xdb, 0x20, 0x32, 0x06, 0x6b, 0x49, 0xd4, 0x54, - 0x88, 0x62, 0x93, 0xf0, 0xf1, 0xad, 0x7c, 0xb3, 0xf8, 0x30, 0xc9, 0x00, - 0x69, 0x11, 0x37, 0xa5, 0xb2, 0xa8, 0x21, 0x9c, 0x85, 0x74, 0x0b, 0xa1, - 0x14, 0x0d, 0x9b, 0x4a, 0x23, 0x22, 0xe0, 0x7a, 0x66, 0x19, 0xe0, 0xaf, - 0x47, 0xfb, 0x2a, 0x5d, 0x1e, 0x88, 0xb3, 0xe3, 0x23, 0x70, 0xfe, 0xc7, - 0x7b, 0x6b, 0x34, 0x7d, 0xb1, 0x8a, 0xcc, 0x1a, 0x69, 0x0d, 0x5a, 0xe7, - 0x34, 0xb9, 0x63, 0xc4, 0xd9, 0xc6, 0x06, 0x80, 0x7f, 0x4f, 0x00, 0x7a, - 0x94, 0x55, 0x08, 0x14, 0xee, 0xc5, 0x2a, 0x12, 0x88, 0x28, 0x45, 0xb0, - 0x12, 0x66, 0x34, 0xa3, 0xd3, 0x31, 0x3f, 0x05, 0x8e, 0x1f, 0x40, 0x3d, - 0x34, 0x16, 0x44, 0xca, 0x87, 0xa0, 0x60, 0xcd, 0xc6, 0x26, 0x37, 0x9f, - 0x56, 0x01, 0x8d, 0xc6, 0x90, 0xda, 0x5f, 0x3a, 0xc6, 0xc9, 0xf0, 0x90, - 0x1e, 0x88, 0x67, 0x69, 0xa1, 0x5b, 0xec, 0x8b, 0xa5, 0xe7, 0xa2, 0xfd, - 0xe3, 0x2c, 0x6f, 0x58, 0x82, 0x78, 0x0f, 0xcd, 0x6b, 0x54, 0x85, 0xa6, - 0x00, 0x29, 0x88, 0xdc, 0x67, 0x21, 0xcc, 0x0a, 0x88, 0xbb, 0xb4, 0x12, - 0x38, 0xee, 0x06, 0x59, 0x61, 0x08, 0x6a, 0xef, 0x52, 0xd6, 0x23, 0x63, - 0xd3, 0x26, 0x3a, 0x1a, 0x73, 0xc0, 0x2c, 0xf1, 0xf4, 0x60, 0xd0, 0x94, - 0x04, 0x3a, 0x31, 0x6d, 0xa1, 0x24, 0xab, 0x57, 0x57, 0x92, 0xd2, 0x3f, - 0x15, 0xf8, 0xde, 0x83, 0x91, 0x1c, 0xa2, 0x23, 0xd0, 0x82, 0x3e, 0xe3, - 0x59, 0x5b, 0x1f, 0xb1, 0x28, 0x1a, 0x54, 0xee, 0x60, 0x3f, 0xf1, 0xb8, - 0x9d, 0xee, 0xb1, 0xcb, 0x1d, 0x8b, 0x0f, 0x44, 0x63, 0xb9, 0x37, 0xfc, - 0x4e, 0xc6, 0xe9, 0xc9, 0xf4, 0x6d, 0x23, 0xaa, 0x25, 0xe9, 0xcf, 0x46, - 0x67, 0xbd, 0x28, 0x98, 0xf8, 0x5e, 0xba, 0xe3, 0x77, 0x00, 0x54, 0x30, - 0x52, 0xa8, 0x18, 0xd5, 0x7d, 0xb4, 0x76, 0x8f, 0xb8, 0xb1, 0x5c, 0x16, - 0xf8, 0xc0, 0x1d, 0x13, 0x6e, 0xf9, 0x50, 0x89, 0x95, 0xf0, 0x35, 0x77, - 0xd7, 0x7f, 0x17, 0x18, 0xe9, 0xf0, 0xa0, 0x6d, 0x10, 0x97, 0x9e, 0x18, - 0x10, 0xc4, 0xe3, 0xf4, 0x2b, 0x00, 0xde, 0x2d, 0x24, 0xd4, 0xcf, 0xa2, - 0x8a, 0x2b, 0x0a, 0x80, 0x18, 0x15, 0xef, 0x00, 0x9a, 0xf2, 0x7a, 0x01, - 0x09, 0x9b, 0xb4, 0xc4, 0xeb, 0x96, 0x70, 0xda, 0xf6, 0xef, 0x43, 0x77, - 0x9c, 0xae, 0x0a, 0xca, 0xfd, 0xc5, 0xb0, 0x85, 0xf8, 0xca, 0xa6, 0x49, - 0x01, 0xd7, 0x1a, 0x44, 0xfe, 0xe5, 0x1b, 0x91, 0x62, 0x63, 0xc5, 0x70, - 0x23, 0x56, 0x45, 0x74, 0xcb, 0x0c, 0x8f, 0xff, 0x95, 0xd1, 0x40, 0x00, - 0x0e, 0x86, 0x10, 0x2b, 0xb8, 0x40, 0x92, 0x80, 0x4f, 0xed, 0xb6, 0x5b, - 0x94, 0x60, 0x9f, 0x09, 0x51, 0x87, 0xa7, 0x31, 0x51, 0x06, 0xfe, 0x85, - 0xb8, 0x05, 0xe7, 0xd1, 0x44, 0x8b, 0x20, 0x13, 0x85, 0xaa, 0x09, 0xc8, - 0x8b, 0xa9, 0xec, 0x3f, 0xb7, 0x9d, 0x5b, 0x96, 0x50, 0xf1, 0x16, 0xf4, - 0x1d, 0x84, 0x3f, 0x9a, 0x40, 0x14, 0x2c, 0xa3, 0xa3, 0xaf, 0x01, 0xe8, - 0x83, 0xd4, 0x08, 0x68, 0x02, 0x58, 0xf4, 0x0c, 0xd5, 0x3a, 0xd2, 0x81, - 0x01, 0xeb, 0xf9, 0x91, 0x9c, 0x6e, 0x0f, 0x80, 0xce, 0xf7, 0x0e, 0x93, - 0xf7, 0xfe, 0x82, 0xd3, 0x0e, 0x48, 0x8d, 0xc7, 0x26, 0xd0, 0x8e, 0x5a, - 0xa3, 0xd7, 0x9a, 0xc3, 0x75, 0xc7, 0x42, 0xdc, 0x31, 0x53, 0x5d, 0xdf, - 0xab, 0xfa, 0x2d, 0x0c, 0x24, 0x3f, 0x94, 0x20, 0x84, 0xc2, 0xed, 0x0d, - 0x90, 0x8a, 0x98, 0x56, 0x17, 0xd0, 0xa6, 0x6a, 0x6e, 0xf0, 0x0f, 0x8c, - 0x5b, 0x49, 0xa6, 0x33, 0xef, 0x69, 0xab, 0x7e, 0x68, 0x52, 0xca, 0x5b, - 0xe6, 0x32, 0x2a, 0x2d, 0x57, 0xb5, 0x4e, 0x1a, 0xfa, 0x1b, 0xfa, 0xd2, - 0x02, 0x56, 0x79, 0x45, 0xc6, 0x65, 0x80, 0x3a, 0x14, 0xd6, 0xf9, 0x3b, - 0x57, 0x8b, 0xe5, 0xf4, 0x09, 0x31, 0x8c, 0xc9, 0x24, 0x8b, 0x4e, 0x40, - 0xf7, 0xf6, 0x5b, 0xa8, 0x49, 0x45, 0x9f, 0xca, 0x8d, 0x16, 0x1f, 0x2d, - 0x40, 0x8f, 0x82, 0x10, 0x64, 0xbc, 0xe9, 0xaf, 0x9d, 0xae, 0x82, 0x03, - 0x71, 0xb3, 0x77, 0xb2, 0x59, 0x4f, 0x58, 0xa6, 0xa5, 0x9c, 0xfc, 0x42, - 0x3a, 0x78, 0x60, 0xd6, 0xbd, 0xfd, 0x54, 0xc6, 0x2e, 0x36, 0xd9, 0xd0, - 0xe8, 0x12, 0xf4, 0xe3, 0xdd, 0x4c, 0xa5, 0x79, 0x9c, 0xff, 0x81, 0x46, - 0x30, 0xe1, 0xb3, 0x5c, 0xd6, 0x2c, 0x8b, 0x44, 0xe5, 0xd2, 0xe8, 0x04, - 0x0d, 0x49, 0x4d, 0xc6, 0xb8, 0x58, 0xf5, 0x78, 0x1e, 0xd0, 0x4d, 0x5d, - 0x99, 0xcb, 0xbe, 0x7c, 0x8f, 0xf7, 0x1e, 0x59, 0xfb, 0x1a, 0x4e, 0xa4, - 0xf1, 0x5d, 0xfc, 0x00, 0x04, 0x7d, 0x4d, 0xc4, 0x07, 0xb3, 0xb2, 0xd4, - 0xf3, 0xa3, 0xc0, 0xbc, 0xdd, 0x63, 0xc8, 0x23, 0x03, 0x97, 0x5b, 0xc0, - 0xc8, 0x87, 0x72, 0xeb, 0xb5, 0xa3, 0xdb, 0xe2, 0x3e, 0x4a, 0x26, 0x0a, - 0xd2, 0x54, 0x45, 0x71, 0x89, 0xaf, 0xa1, 0xd6, 0x21, 0xf9, 0x7f, 0x15, - 0xc0, 0xcd, 0x40, 0xa7, 0xb0, 0x1a, 0x7a, 0xfe, 0x34, 0xbf, 0x73, 0xf0, - 0x90, 0x43, 0x1f, 0x6f, 0x4e, 0x0a, 0xa6, 0x33, 0xf3, 0x33, 0xc9, 0x9d, - 0x85, 0x25, 0xa9, 0x13, 0xdc, 0x2b, 0xd1, 0xe7, 0x01, 0x85, 0x50, 0xb8, - 0x4c, 0xa6, 0xb7, 0x6d, 0xf0, 0x96, 0x0f, 0x00, 0xb3, 0x46, 0x2e, 0x94, - 0xf0, 0xd3, 0x67, 0xe9, 0xc0, 0x29, 0x4e, 0x75, 0xf7, 0xfa, 0x23, 0x06, - 0x5e, 0xee, 0x22, 0xba, 0x94, 0x84, 0xf9, 0x59, 0x26, 0x65, 0x70, 0x2a, - 0x81, 0xf6, 0xf9, 0x48, 0x0c, 0x38, 0xf4, 0x0c, 0x6c, 0x59, 0x8b, 0x06, - 0xa7, 0x07, 0x82, 0x8c, 0x8e, 0x9b, 0x09, 0xed, 0x98, 0x26, 0x3e, 0xb9, - 0x79, 0xcd, 0x4b, 0x03, 0xfa, 0x25, 0x77, 0x47, 0xe9, 0x63, 0xbf, 0xa9, - 0x41, 0x29, 0x97, 0x1f, 0xb7, 0x7f, 0x6f, 0xd1, 0xb5, 0xab, 0xae, 0x80, - 0xbb, 0xdc, 0x46, 0x29, 0x83, 0x4a, 0x62, 0x48, 0xfd, 0x42, 0x4a, 0xba, - 0xee, 0xcb, 0x99, 0xce, 0x6d, 0x5b, 0x7d, 0x0e, 0xf8, 0x35, 0x37, 0xb9, - 0xcd, 0xab, 0xf8, 0x49, 0xfa, 0xa9, 0xdb, 0xdb, 0xec, 0x05, 0x97, 0x09, - 0x6f, 0x7d, 0x0f, 0x07, 0xad, 0x27, 0x73, 0xf8, 0x51, 0x58, 0x7b, 0x1d, - 0x0f, 0x15, 0xb9, 0x24, 0x76, 0x84, 0x06, 0x0f, 0x2d, 0x9f, 0xb6, 0x8a, - 0x42, 0x70, 0x97, 0x59, 0x81, 0x7f, 0xa9, 0x5c, 0xbb, 0x89, 0x26, 0xaf, - 0xcd, 0x32, 0x32, 0x3a, 0x64, 0x24, 0xc9, 0xd5, 0xec, 0x62, 0xd6, 0x53, - 0xda, 0xfe, 0xf5, 0xd1, 0x5a, 0x46, 0x0c, 0x29, 0x94, 0x6c, 0x15, 0x33, - 0x63, 0xba, 0x25, 0xbd, 0x44, 0x3e, 0x4b, 0x5e, 0x5b, 0xe0, 0xf6, 0x2d, - 0xcf, 0x7a, 0x44, 0x3d, 0xc2, 0xc4, 0xdd, 0x76, 0x3a, 0xd1, 0x72, 0xd9, - 0x23, 0xb2, 0xf0, 0xc5, 0x78, 0xe3, 0x0f, 0x79, 0xb2, 0x0c, 0x07, 0x03, - 0x1e, 0x3e, 0x5a, 0xc7, 0x5b, 0x88, 0x1b, 0x32, 0x2c, 0x33, 0x04, 0xd8, - 0x2b, 0xeb, 0xa6, 0x84, 0xe9, 0xee, 0x1d, 0xed, 0x95, 0x98, 0x25, 0x80, - 0x07, 0x10, 0x0b, 0x9b, 0xf8, 0x63, 0xe0, 0xc4, 0xe2, 0x1d, 0x9d, 0x0e, - 0xc8, 0xba, 0xbb, 0x24, 0x27, 0x1c, 0xf4, 0x14, 0x9c, 0x56, 0x9e, 0xd3, - 0x00, 0x26, 0x61, 0x6a, 0xb8, 0x06, 0xa4, 0x09, 0xf2, 0x0d, 0x1a, 0x68, - 0x6c, 0x65, 0xdf, 0xce, 0x9c, 0x66, 0x07, 0x06, 0x4a, 0xba, 0x8b, 0x20, - 0x66, 0x4d, 0x4b, 0x88, 0x72, 0xd1, 0xa2, 0xaa, 0xd7, 0xb6, 0x07, 0x79, - 0x42, 0x54, 0x87, 0x4c, 0x91, 0xbf, 0xa8, 0x96, 0xf3, 0x76, 0xba, 0xb3, - 0xb6, 0x2b, 0x00, 0x04, 0xf1, 0xf0, 0x14, 0xe4, 0x63, 0x66, 0xc5, 0xdc, - 0x23, 0xb4, 0x6d, 0x93, 0x0c, 0x10, 0x49, 0x7a, 0x20, 0xb9, 0x07, 0x58, - 0xd8, 0xf6, 0x9e, 0x4e, 0x6a, 0x1b, 0x9d, 0x13, 0x24, 0xe5, 0xd9, 0x7b, - 0xa5, 0x86, 0xa6, 0x39, 0xef, 0xd3, 0xbd, 0x5b, 0xa9, 0x2b, 0x78, 0x6f, - 0xd8, 0x59, 0x4f, 0x20, 0x30, 0x8f, 0x38, 0x7c, 0x70, 0x32, 0xab, 0x11, - 0x00, 0xef, 0x47, 0x3e, 0xf5, 0x27, 0xa4, 0x7b, 0xfb, 0xc8, 0x26, 0x87, - 0x5a, 0x26, 0x8d, 0xee, 0xa2, 0x01, 0x98, 0x97, 0x2c, 0x57, 0x2f, 0x4e, - 0xf6, 0x52, 0x7a, 0x4e, 0x9c, 0xf5, 0x9e, 0x48, 0x58, 0xf4, 0x99, 0x30, - 0xe2, 0x36, 0x0e, 0xc5, 0x3c, 0x74, 0x30, 0xb4, 0x2f, 0x2e, 0xd5, 0xb5, - 0x4d, 0x39, 0x1f, 0xa0, 0xbd, 0x93, 0x39, 0xc1, 0x46, 0xcc, 0xe1, 0xbc, - 0x24, 0x5c, 0x35, 0x57, 0x8e, 0x0a, 0x80, 0xca, 0xd1, 0x89, 0x4d, 0x05, - 0xcf, 0xd6, 0x4a, 0xcf, 0xa4, 0xb7, 0xb8, 0xa3, 0x72, 0xb7, 0xa0, 0xda, - 0xb3, 0x81, 0xf5, 0x28, 0xae, 0xde, 0x90, 0x6a, 0x61, 0x3d, 0x60, 0xac, - 0xf7, 0xe6, 0xb4, 0xdf, 0xba, 0x08, 0x30, 0xd3, 0x1e, 0xc1, 0xe4, 0x39, - 0x93, 0xb3, 0xf8, 0x57, 0xa6, 0x9d, 0xb5, 0xbb, 0x7e, 0xe6, 0xe7, 0xb1, - 0x30, 0x24, 0x89, 0x2f, 0x4a, 0xec, 0xf8, 0xd9, 0x5a, 0x76, 0x1c, 0x2d, - 0xfc, 0xe0, 0xd5, 0x13, 0xfd, 0x48, 0x97, 0x34, 0x59, 0xa9, 0x73, 0x60, - 0x0f, 0x89, 0xf0, 0x5b, 0xbe, 0xf1, 0xd7, 0x2c, 0x8e, 0x07, 0x12, 0x23, - 0x62, 0x1c, 0xe8, 0xae, 0x1a, 0xef, 0x85, 0xab, 0x94, 0x73, 0xd0, 0xb9, - 0x48, 0x56, 0x9f, 0x5e, 0x5b, 0x88, 0x75, 0xf8, 0x36, 0x91, 0x1f, 0xa4, - 0xd7, 0xac, 0x94, 0x33, 0xcb, 0x26, 0xed, 0x87, 0x73, 0xc7, 0x7f, 0x2e, - 0x34, 0xdc, 0x30, 0x50, 0x2a, 0xb7, 0xac, 0x31, 0x99, 0x80, 0x86, 0xdc, - 0xcb, 0x0d, 0xbf, 0xce, 0x11, 0x14, 0x71, 0xf1, 0xa2, 0xa6, 0x83, 0xfc, - 0x30, 0x35, 0xf0, 0xb1, 0x36, 0x90, 0x65, 0xbc, 0x04, 0xa7, 0x03, 0x93, - 0x8b, 0x79, 0xd6, 0xb0, 0x00, 0xe1, 0x72, 0x1a, 0x13, 0x18, 0x38, 0xc3, - 0x5c, 0xfd, 0x9b, 0x07, 0x65, 0x16, 0x55, 0xab, 0x52, 0x16, 0x4c, 0xf2, - 0xaf, 0x7f, 0xcd, 0x2e, 0x54, 0x0b, 0x5f, 0xcf, 0xc5, 0x2a, 0xdf, 0xa0, - 0xb1, 0x23, 0xbd, 0xf7, 0xeb, 0x5b, 0xc6, 0x2c, 0x12, 0xd2, 0xe4, 0x1f, - 0x8b, 0xf8, 0xdb, 0xd6, 0x47, 0x76, 0x41, 0x6b, 0x4a, 0x9a, 0x63, 0x43, - 0x6d, 0xfa, 0x33, 0x6c, 0xf6, 0x9f, 0xa2, 0x27, 0x98, 0x06, 0x6d, 0xe0, - 0x79, 0x70, 0xf2, 0xd4, 0x83, 0xa4, 0x48, 0x01, 0x7d, 0xd6, 0x00, 0xbd, - 0xbf, 0xa3, 0xfc, 0xad, 0x9b, 0x1e, 0x92, 0xdc, 0xa7, 0xf4, 0x01, 0xe9, - 0x68, 0xc2, 0xb3, 0x5a, 0xeb, 0xc1, 0xe1, 0x74, 0xa8, 0xc1, 0x44, 0x55, - 0xc3, 0x59, 0x41, 0x19, 0xd4, 0x71, 0x56, 0xd6, 0x06, 0x24, 0x36, 0x47, - 0xfa, 0x8d, 0xa4, 0xb3, 0xa8, 0x54, 0xed, 0x46, 0x1a, 0xc3, 0xdd, 0x72, - 0xab, 0x07, 0x1e, 0xbe, 0x80, 0xfc, 0x25, 0x15, 0xd5, 0x52, 0x1b, 0x61, - 0x12, 0x88, 0x12, 0x01, 0x53, 0x57, 0xb7, 0xcc, 0x16, 0xc5, 0xc2, 0x49, - 0xe6, 0x28, 0xa3, 0xf6, 0x44, 0xd9, 0xb3, 0xed, 0xf9, 0x7f, 0x20, 0xad, - 0x80, 0xe5, 0x9a, 0x4b, 0xa6, 0x8e, 0xda, 0x94, 0x1c, 0x80, 0x60, 0x23, - 0xda, 0x75, 0x29, 0x1e, 0x3e, 0xdd, 0xba, 0x06, 0x88, 0x51, 0x25, 0xca, - 0x6e, 0x06, 0x39, 0x50, 0xa7, 0xf0, 0x90, 0xbe, 0xc9, 0x45, 0x8e, 0xf8, - 0x48, 0xae, 0xa5, 0xa3, 0xc0, 0x18, 0xaa, 0x0f, 0xbe, 0x81, 0x67, 0xe4, - 0xb4, 0x03, 0x2b, 0xe4, 0xb9, 0x47, 0x81, 0x8c, 0x6d, 0x48, 0xfd, 0xe7, - 0x55, 0xc6, 0xea, 0xb9, 0x65, 0xae, 0xd0, 0x57, 0x92, 0x20, 0x4c, 0xde, - 0xeb, 0x7b, 0xa8, 0x75, 0x57, 0xd7, 0x5a, 0xa3, 0xb9, 0x70, 0x9f, 0xb9, - 0xfb, 0xe4, 0x9b, 0x14, 0x24, 0x31, 0x31, 0xb6, 0xe9, 0x3f, 0xd5, 0x7e, - 0x5e, 0xf2, 0xa1, 0x9d, 0xe0, 0x02, 0x4d, 0x90, 0x3f, 0x48, 0x68, 0x95, - 0x37, 0xe6, 0x70, 0x60, 0xa8, 0x59, 0x01, 0x82, 0x4c, 0x66, 0x51, 0xc0, - 0xd3, 0x41, 0x00, 0xa7, 0x70, 0x9f, 0x4e, 0xd0, 0x44, 0x8a, 0x7b, 0x46, - 0x04, 0x1d, 0x06, 0x4c, 0x38, 0x8d, 0xe5, 0x63, 0x6b, 0x9d, 0x75, 0x9c, - 0xa2, 0x69, 0x9a, 0x22, 0x4b, 0x23, 0xe2, 0x8f, 0xe4, 0x15, 0xef, 0x76, - 0xf6, 0x36, 0xf8, 0xcd, 0xc1, 0x12, 0x55, 0xb0, 0xa7, 0xe5, 0xb9, 0xfb, - 0xd3, 0x92, 0xf9, 0xe1, 0x0c, 0xb1, 0xc7, 0x17, 0x90, 0x1a, 0x78, 0x04, - 0xec, 0x88, 0x6b, 0x00, 0xeb, 0xe5, 0x90, 0xec, 0x84, 0x8c, 0xb2, 0x2c, - 0x0d, 0xc5, 0x48, 0xc6, 0x34, 0x8b, 0x9a, 0x44, 0x45, 0x5d, 0x27, 0x40, - 0x36, 0x82, 0x91, 0x2b, 0xcc, 0x37, 0x5e, 0xc3, 0xd7, 0xef, 0x10, 0x43, - 0x7a, 0x07, 0x80, 0x21, 0xd8, 0x50, 0x8d, 0xbd, 0x75, 0xae, 0x89, 0x0f, - 0xe2, 0x6f, 0x30, 0x48, 0x00, 0xa1, 0xb8, 0xe8, 0x86, 0x61, 0xdb, 0xa2, - 0x26, 0x31, 0x28, 0xfa, 0x64, 0xfb, 0x0f, 0x87, 0x35, 0xef, 0x00, 0x4a, - 0x39, 0xb0, 0xf0, 0x26, 0x2a, 0x6e, 0xae, 0x4e, 0xad, 0x71, 0xb2, 0x64, - 0x4b, 0xc9, 0xda, 0x49, 0x97, 0x1b, 0x6a, 0x3a, 0xe9, 0x01, 0x43, 0xa0, - 0x8f, 0xbc, 0xf5, 0xa0, 0x06, 0xd6, 0x80, 0x70, 0x37, 0x27, 0x85, 0xf8, - 0x81, 0x07, 0x69, 0x80, 0x5a, 0xf4, 0x27, 0x4b, 0x41, 0x47, 0xf9, 0xc0, - 0x61, 0x8f, 0x79, 0xb2, 0xea, 0xfb, 0x99, 0xf1, 0x23, 0x94, 0xc0, 0xce, - 0x69, 0x9a, 0x32, 0x09, 0x02, 0x1a, 0x84, 0x66, 0xd5, 0x50, 0x58, 0xa8, - 0x4a, 0xdb, 0xb2, 0x33, 0x7d, 0x7f, 0xb4, 0xa2, 0xe7, 0x8a, 0x5b, 0xc6, - 0x9d, 0x5c, 0xbf, 0x75, 0x50, 0xac, 0xea, 0xe5, 0x01, 0x41, 0x12, 0x29, - 0x56, 0x15, 0x58, 0x6c, 0xa4, 0x85, 0x71, 0x9a, 0x31, 0x3c, 0xc2, 0x9b, - 0xd3, 0x9a, 0xcd, 0xed, 0x9a, 0xb5, 0x48, 0xf5, 0xc6, 0xdc, 0xa8, 0x51, - 0x9e, 0x45, 0x8a, 0x50, 0xab, 0x8d, 0x5e, 0x74, 0x00, 0xd7, 0x6f, 0x48, - 0x7a, 0xc3, 0xb0, 0x7f, 0x21, 0x3b, 0x7b, 0x9a, 0x40, 0x24, 0xae, 0x42, - 0x28, 0x90, 0xd6, 0x38, 0xdc, 0x86, 0x6c, 0xd9, 0x62, 0x9e, 0x2f, 0x48, - 0xbc, 0x83, 0x43, 0x51, 0x6c, 0x2b, 0x09, 0x05, 0x78, 0xf0, 0xa1, 0x5c, - 0x9c, 0x02, 0x5e, 0xa8, 0x5a, 0xc8, 0x6a, 0x13, 0x01, 0xa7, 0xa3, 0x7d, - 0xff, 0x0b, 0xe3, 0x53, 0x0e, 0xae, 0x6c, 0xae, 0xfb, 0x86, 0xaf, 0xf7, - 0x00, 0x87, 0x86, 0x76, 0x59, 0x34, 0x88, 0x14, 0x73, 0xef, 0xe3, 0xe1, - 0xfd, 0x5a, 0x6c, 0xd2, 0x42, 0x83, 0x55, 0xae, 0x3f, 0x1e, 0x25, 0x09, - 0xd6, 0xd7, 0x19, 0x38, 0xb6, 0x47, 0x4b, 0x00, 0x70, 0x22, 0xb5, 0x54, - 0x19, 0xd1, 0x5c, 0x46, 0xe9, 0x2a, 0x16, 0x39, 0xf0, 0x37, 0x67, 0xa3, - 0x25, 0xe5, 0xbf, 0xe3, 0x12, 0x36, 0xdc, 0x6f, 0xad, 0x51, 0xf0, 0x0f, - 0x88, 0x4a, 0xb9, 0x3a, 0x14, 0x94, 0x56, 0xf8, 0x3a, 0xf6, 0x5b, 0x45, - 0x80, 0x03, 0x2e, 0xe3, 0xfd, 0x55, 0xee, 0x16, 0x5c, 0x33, 0xe4, 0x73, - 0x4e, 0x84, 0x60, 0x28, 0x62, 0x70, 0x7a, 0x1b, 0xca, 0xb6, 0xad, 0x17, - 0xa4, 0x3c, 0x08, 0xb6, 0x00, 0x82, 0x38, 0x7f, 0xbe, 0x4d, 0x67, 0x4a, - 0x5f, 0x64, 0x3b, 0x37, 0x51, 0x99, 0x9e, 0xd9, 0x98, 0x99, 0xc5, 0x96, - 0x10, 0x68, 0x46, 0xc8, 0xed, 0x01, 0x0d, 0x39, 0x04, 0xbc, 0xe0, 0x1a, - 0x61, 0xc9, 0x6c, 0x61, 0xd6, 0xf6, 0xee, 0xb3, 0xec, 0xda, 0xf4, 0x73, - 0x94, 0x92, 0xc8, 0x01, 0xd9, 0x21, 0xd9, 0xd7, 0x86, 0xf8, 0xd4, 0xfb, - 0x85, 0x70, 0x5e, 0x8d, 0x0e, 0xbd, 0x58, 0x79, 0xeb, 0x0b, 0xd7, 0xd4, - 0xbf, 0x2d, 0xa7, 0x4e, 0xc0, 0xef, 0x22, 0x04, 0x90, 0x3f, 0x6f, 0xaf, - 0xe5, 0xb8, 0x3f, 0xb5, 0x70, 0x26, 0x08, 0xe3, 0xa0, 0x05, 0xae, 0x1d, - 0x5a, 0xec, 0xc7, 0xbd, 0x22, 0xc9, 0x13, 0xc9, 0xc1, 0xfc, 0xe0, 0xac, - 0x29, 0xb7, 0x5a, 0xab, 0xc1, 0x3e, 0x34, 0xf0, 0xf2, 0x73, 0x19, 0x71, - 0xde, 0x3f, 0xa3, 0x28, 0xc1, 0xb4, 0x6d, 0xbe, 0x7b, 0x06, 0xa5, 0x92, - 0x15, 0x7a, 0x46, 0x63, 0x8a, 0x4c, 0x31, 0x7d, 0xa0, 0x43, 0x3e, 0xca, - 0x05, 0x02, 0x2e, 0xb1, 0x1d, 0x81, 0xd7, 0x3b, 0x16, 0xf8, 0x98, 0x01, - 0x6f, 0xff, 0x7a, 0x3a, 0xfd, 0x32, 0x70, 0xb1, 0xf0, 0x20, 0xa7, 0x3e, - 0x78, 0x43, 0xde, 0x9c, 0xf9, 0xff, 0x51, 0xd2, 0x1b, 0xe8, 0xa5, 0x51, - 0x7b, 0x23, 0x31, 0x2c, 0xa2, 0x59, 0x37, 0x67, 0x6a, 0x79, 0xd2, 0x9f, - 0x6c, 0xbd, 0x85, 0xa5, 0xab, 0xfa, 0x4f, 0xea, 0x8a, 0xe8, 0xcd, 0x4d, - 0xd8, 0xbc, 0x04, 0x60, 0x5a, 0xff, 0xbf, 0x5b, 0xbb, 0x23, 0xef, 0xe4, - 0xb7, 0xb8, 0x2e, 0x14, 0x4f, 0xbc, 0xf5, 0x5b, 0xa2, 0x96, 0x56, 0xba, - 0xd7, 0x7f, 0x44, 0x35, 0xed, 0xcc, 0x05, 0xd8, 0xc8, 0xe2, 0x7a, 0x71, - 0x39, 0x2f, 0xd9, 0x51, 0xd5, 0x30, 0x10, 0x54, 0xc2, 0xa6, 0x42, 0xd3, - 0x8c, 0x64, 0x00, 0x87, 0xc3, 0xd7, 0xec, 0x00, 0xaa, 0xcf, 0xe1, 0xaf, - 0x9e, 0x74, 0xf0, 0x0b, 0xf4, 0x0f, 0x97, 0xc9, 0x0d, 0xbe, 0x7e, 0x01, - 0xcf, 0xe9, 0x85, 0x08, 0x83, 0x35, 0x08, 0x05, 0xa2, 0x5d, 0x83, 0x7f, - 0x6a, 0xe5, 0xad, 0x42, 0xcb, 0xa3, 0x02, 0x1f, 0x39, 0x68, 0x6e, 0x3d, - 0xf2, 0x8a, 0x1b, 0x1d, 0x9e, 0x5f, 0x1d, 0x76, 0x6b, 0x97, 0xc2, 0xcc, - 0x7e, 0x0c, 0x72, 0x4b, 0xa9, 0x0f, 0x8f, 0x14, 0x31, 0x46, 0x80, 0x0e, - 0x25, 0xac, 0xbc, 0xb9, 0x6f, 0x43, 0xe5, 0xa8, 0x53, 0xe8, 0x48, 0xf2, - 0x6e, 0xae, 0xfa, 0x3a, 0xa9, 0x08, 0x27, 0xb3, 0x0d, 0xd6, 0xfb, 0x77, - 0xfa, 0x28, 0x96, 0x5a, 0x17, 0x31, 0xd7, 0x97, 0x84, 0x2b, 0xae, 0xe5, - 0x8a, 0x9e, 0x04, 0xfe, 0x74, 0x93, 0x6b, 0x35, 0xcd, 0x68, 0x14, 0x14, - 0x83, 0xbc, 0xe5, 0x59, 0x82, 0x65, 0x67, 0x47, 0xdc, 0x34, 0x4c, 0x7e, - 0x8f, 0x65, 0x70, 0xb1, 0xfc, 0xd5, 0x60, 0x2a, 0x95, 0x23, 0x90, 0x5b, - 0x07, 0xfc, 0x45, 0x09, 0x52, 0xfa, 0xbb, 0x8f, 0xf4, 0x33, 0xd1, 0x4b, - 0x8a, 0x5a, 0xc3, 0xe1, 0x20, 0x9c, 0x40, 0x2d, 0x0b, 0xd2, 0xe6, 0x85, - 0xea, 0x93, 0x33, 0x7c, 0xeb, 0x08, 0x42, 0xef, 0x93, 0x0a, 0x1b, 0x9a, - 0x4b, 0xbd, 0xef, 0x2d, 0x8a, 0x84, 0x1f, 0x61, 0xe1, 0xed, 0x08, 0x43, - 0xc8, 0x64, 0x56, 0x21, 0x8c, 0x1a, 0x56, 0x58, 0x24, 0xa5, 0x78, 0x5d, - 0x4f, 0x71, 0xca, 0xa1, 0xae, 0x05, 0x96, 0x4c, 0x98, 0x9c, 0x7d, 0x19, - 0x7b, 0x38, 0x59, 0xa9, 0x73, 0xed, 0x37, 0xce, 0x62, 0x45, 0x14, 0xb7, - 0x5b, 0x1d, 0x09, 0x1f, 0xc3, 0x6e, 0x57, 0xf8, 0x64, 0xde, 0xe7, 0xb3, - 0x25, 0xc0, 0x5c, 0xac, 0xb5, 0xe3, 0x9e, 0xf3, 0x0d, 0xf8, 0xf8, 0x80, - 0xf6, 0x8b, 0x25, 0x94, 0xda, 0x14, 0x5f, 0x61, 0x13, 0xf5, 0x2a, 0x6d, - 0xe7, 0xf5, 0xaf, 0x5c, 0xf6, 0xdb, 0x11, 0xaf, 0xbf, 0x28, 0xa0, 0xe9, - 0x02, 0xa7, 0x4f, 0x26, 0x6f, 0xef, 0xa1, 0x95, 0xa7, 0x3e, 0x5e, 0x86, - 0x34, 0x79, 0xb1, 0x24, 0xc5, 0x5e, 0xd8, 0x59, 0x75, 0xf7, 0xf1, 0xd0, - 0x50, 0xa7, 0x5c, 0x83, 0x37, 0xbe, 0x03, 0x82, 0xb9, 0xa6, 0xdb, 0x20, - 0xe8, 0x8e, 0x06, 0x58, 0xea, 0xea, 0xfd, 0x53, 0x27, 0xeb, 0x62, 0x9f, - 0xab, 0x54, 0x17, 0xa0, 0x92, 0x57, 0xc9, 0x3a, 0x1c, 0x7b, 0xad, 0xd1, - 0xd7, 0x4e, 0x26, 0x1f, 0xd7, 0x5d, 0x05, 0xc1, 0x4c, 0xee, 0x6b, 0x4f, - 0x6b, 0xb4, 0x96, 0x5d, 0x9f, 0x40, 0x37, 0x32, 0x26, 0x65, 0xb8, 0xfb, - 0x5f, 0xb3, 0xc4, 0x96, 0x9a, 0xe9, 0x2c, 0x57, 0xc5, 0x0c, 0x82, 0xbc, - 0xcf, 0x8a, 0xba, 0xfa, 0x34, 0x9b, 0xa0, 0xd5, 0x7e, 0x0a, 0xab, 0x02, - 0xe9, 0x0a, 0xb8, 0x40, 0xf9, 0x15, 0xa7, 0x39, 0xe0, 0xec, 0x2d, 0x32, - 0x7f, 0x22, 0x00, 0x8f, 0x44, 0x0a, 0x78, 0x31, 0xa3, 0xd1, 0x40, 0x00, - 0x05, 0x42, 0x1c, 0x27, 0x11, 0xf2, 0x13, 0x74, 0xf4, 0x8a, 0xa0, 0x92, - 0xe6, 0x11, 0xef, 0x3a, 0x05, 0x0b, 0x08, 0x01, 0x26, 0x1f, 0x1a, 0x54, - 0xbd, 0x6d, 0x05, 0x38, 0x83, 0x2d, 0x74, 0x16, 0xc9, 0x6b, 0xa9, 0x54, - 0x9f, 0x7e, 0xed, 0xef, 0x5a, 0xd8, 0x83, 0x38, 0x3d, 0x57, 0x34, 0x49, - 0x8c, 0xbd, 0x9d, 0x0d, 0x16, 0x46, 0xa2, 0xec, 0xbf, 0x0f, 0x8f, 0x64, - 0x53, 0x63, 0x03, 0x99, 0xa6, 0xa8, 0xcc, 0x91, 0xd4, 0x7a, 0xa9, 0x4e, - 0xf5, 0xe0, 0xe9, 0xc4, 0x52, 0x36, 0x82, 0x6d, 0xa6, 0x2c, 0x23, 0xa0, - 0x1e, 0xca, 0xf3, 0x54, 0xd9, 0x1b, 0x31, 0x79, 0xb1, 0x2c, 0x8f, 0xec, - 0x0b, 0x81, 0xa3, 0x0f, 0x21, 0xee, 0x86, 0x30, 0x5a, 0xb1, 0xe2, 0x18, - 0x4e, 0xb2, 0x88, 0x08, 0xe0, 0x67, 0x70, 0xdd, 0x56, 0x9b, 0x34, 0xf6, - 0xc9, 0x19, 0x46, 0x07, 0x90, 0x1c, 0xf6, 0x31, 0x33, 0x91, 0x65, 0xf2, - 0xb2, 0xe4, 0xb1, 0xb5, 0xb9, 0x97, 0x6f, 0x5b, 0x29, 0xde, 0x51, 0x43, - 0xa7, 0xac, 0x7e, 0x43, 0xc5, 0x4d, 0x2b, 0xef, 0x2b, 0xd8, 0xcf, 0x88, - 0x1d, 0x5b, 0xa3, 0xda, 0x13, 0xf8, 0x55, 0x35, 0xb3, 0xb8, 0x5b, 0xe9, - 0x7c, 0x48, 0x70, 0xa7, 0xa8, 0xde, 0xe8, 0x0f, 0x08, 0xc1, 0x66, 0x43, - 0xfe, 0xd5, 0x19, 0x6d, 0x05, 0x53, 0x48, 0x2c, 0x6f, 0x21, 0x48, 0x88, - 0x9f, 0xaf, 0xa5, 0x1b, 0x3c, 0x3f, 0xcf, 0xcf, 0x3d, 0xd5, 0xcb, 0x5b, - 0xf8, 0xb6, 0x3c, 0x1c, 0xe2, 0x7f, 0xd3, 0xae, 0x74, 0x26, 0xd4, 0xc1, - 0x27, 0xad, 0xb5, 0xf9, 0x8a, 0x43, 0x92, 0xfe, 0xac, 0x56, 0xc7, 0x86, - 0x44, 0xcd, 0x78, 0xb9, 0xd6, 0xf1, 0xec, 0x34, 0x24, 0x4b, 0x03, 0xdc, - 0xa6, 0x42, 0x66, 0xd1, 0xf6, 0x5e, 0x98, 0xba, 0x86, 0x9f, 0xdd, 0xf2, - 0xb9, 0x0e, 0x91, 0xf6, 0x7c, 0x82, 0xaa, 0x94, 0x0e, 0x34, 0x18, 0x7b, - 0x9f, 0x11, 0x73, 0x6a, 0x57, 0x8e, 0x0d, 0x43, 0xb8, 0x0c, 0xe1, 0x0e, - 0xc3, 0x1a, 0x6e, 0xbe, 0x4d, 0xb7, 0x22, 0xe1, 0xca, 0x7d, 0x4a, 0x5c, - 0xdb, 0x72, 0x2c, 0x29, 0xe7, 0xa8, 0x66, 0x08, 0xfd, 0x84, 0x58, 0x77, - 0x02, 0x96, 0xd0, 0xcc, 0xac, 0x07, 0xd9, 0x62, 0xdd, 0xbe, 0xfc, 0xdb, - 0x13, 0x65, 0x5a, 0xbc, 0xe1, 0x02, 0xd5, 0x57, 0x2e, 0xda, 0x58, 0x13, - 0x11, 0xa9, 0xe5, 0x1f, 0x5d, 0xd2, 0xff, 0xc4, 0x0c, 0x11, 0x2e, 0x4d, - 0x39, 0x6e, 0x7b, 0x86, 0x4e, 0xbf, 0xa2, 0x28, 0xdb, 0x7c, 0x5b, 0x72, - 0x2d, 0x8a, 0xaf, 0xff, 0x2b, 0x4c, 0x77, 0x4d, 0xe5, 0xcf, 0x3b, 0xd4, - 0x86, 0x64, 0x82, 0x9e, 0x6e, 0x4b, 0xdf, 0x4b, 0xa5, 0x80, 0xe4, 0xde, - 0x00, 0xcd, 0xb9, 0x8c, 0xfe, 0x54, 0xf9, 0xc1, 0x88, 0x09, 0x7b, 0x05, - 0x30, 0xbb, 0xa6, 0x8d, 0x9c, 0x9d, 0xdb, 0x02, 0x7f, 0x83, 0x60, 0xd0, - 0x33, 0x15, 0xf8, 0xf0, 0xaa, 0x38, 0x11, 0x2a, 0x75, 0xad, 0x21, 0x5f, - 0x1b, 0x1f, 0xdf, 0x89, 0x83, 0xc5, 0x3f, 0xc7, 0x19, 0xad, 0x80, 0x98, - 0xb6, 0x6a, 0x29, 0x36, 0x15, 0x87, 0x36, 0x14, 0x66, 0xef, 0x19, 0x10, - 0xc2, 0xae, 0x11, 0xe1, 0xd2, 0x05, 0x7d, 0xcb, 0xfe, 0x2b, 0x2a, 0x67, - 0xbf, 0xf5, 0xe4, 0xd3, 0xe2, 0x13, 0x40, 0xfc, 0x38, 0x88, 0xe6, 0x26, - 0x99, 0x6d, 0xc2, 0x36, 0x2b, 0x56, 0x56, 0x0e, 0xaa, 0xc8, 0x50, 0xe8, - 0x9f, 0x6e, 0x03, 0xc9, 0x3d, 0x82, 0x25, 0x86, 0x43, 0xde, 0xdd, 0x25, - 0x00, 0x33, 0x63, 0x06, 0xfa, 0xc1, 0xe2, 0xf3, 0x1a, 0x3a, 0x99, 0x95, - 0xa1, 0x87, 0x98, 0x5d, 0xa3, 0x69, 0x6b, 0x96, 0xc2, 0x71, 0x02, 0xe8, - 0xde, 0x3d, 0x89, 0x93, 0x1b, 0xfa, 0x51, 0x78, 0x8e, 0x42, 0x04, 0xee, - 0x22, 0x31, 0x23, 0xd6, 0xfa, 0x6f, 0xcf, 0x1b, 0x07, 0x4e, 0x5a, 0x3f, - 0xca, 0xa7, 0x08, 0xda, 0x85, 0xf5, 0xc0, 0x05, 0x4a, 0xb0, 0xe0, 0x20, - 0x38, 0x84, 0x26, 0x5b, 0x98, 0xb5, 0xa6, 0x33, 0xe2, 0x28, 0x26, 0x81, - 0x58, 0xd9, 0x0c, 0x3a, 0xf3, 0x95, 0x74, 0xa5, 0x0a, 0x32, 0x3f, 0x8c, - 0x6c, 0x02, 0x1a, 0xb5, 0x94, 0x40, 0xde, 0xef, 0xc5, 0x87, 0x67, 0x8a, - 0xdc, 0x94, 0xb9, 0xd1, 0x39, 0xe5, 0xae, 0x6d, 0x7d, 0x77, 0xe3, 0x93, - 0x8d, 0x8e, 0x05, 0xca, 0x81, 0xf2, 0x93, 0x0c, 0xc1, 0x08, 0x50, 0xc6, - 0xa7, 0x29, 0xcb, 0xce, 0x3c, 0x3a, 0x02, 0xae, 0xf8, 0x4a, 0x93, 0x18, - 0xe5, 0x5d, 0x7f, 0x45, 0x3f, 0x2f, 0x38, 0xdc, 0x97, 0x0f, 0x97, 0x08, - 0x7c, 0x94, 0xcd, 0x64, 0xe9, 0x51, 0x40, 0x6c, 0x52, 0x6a, 0x18, 0x33, - 0x57, 0x16, 0xb0, 0x6f, 0x14, 0x10, 0x00, 0x1d, 0x8c, 0x85, 0xa6, 0x0a, - 0x37, 0xeb, 0xed, 0xb3, 0x0a, 0xe9, 0x70, 0x58, 0xd8, 0x30, 0xd6, 0x80, - 0x5b, 0x4b, 0x05, 0x48, 0x01, 0x8d, 0x85, 0xe2, 0xf2, 0xd3, 0x83, 0xe6, - 0x08, 0xae, 0x06, 0x1c, 0x07, 0xc5, 0x95, 0xfe, 0xce, 0x07, 0xcb, 0xcc, - 0xd1, 0xf2, 0x67, 0x85, 0xa8, 0x73, 0x08, 0xcc, 0x77, 0x90, 0x99, 0x09, - 0xdc, 0x54, 0x07, 0x81, 0x14, 0x69, 0x77, 0xfe, 0x4a, 0xb2, 0x70, 0x77, - 0x76, 0x16, 0xe6, 0x12, 0x54, 0xa3, 0xc1, 0x51, 0x81, 0x8f, 0xfe, 0x7a, - 0xe8, 0x0f, 0x12, 0xc9, 0x2e, 0x7c, 0xc1, 0x70, 0x24, 0x93, 0xd4, 0x06, - 0x14, 0x64, 0x4c, 0xa0, 0x62, 0x61, 0xe9, 0x7f, 0xd6, 0x57, 0x28, 0x42, - 0xd2, 0x4c, 0x87, 0xb6, 0xb8, 0x74, 0x34, 0x05, 0xb6, 0xad, 0xad, 0x65, - 0x75, 0x74, 0x39, 0x0c, 0x2f, 0x8c, 0xae, 0xc7, 0x54, 0xd5, 0xc5, 0x59, - 0x56, 0x1a, 0xa5, 0xe0, 0x34, 0xfd, 0x2e, 0xdc, 0x3e, 0x91, 0x9f, 0xa8, - 0x79, 0xc3, 0x63, 0x9a, 0x1f, 0x62, 0xd6, 0x0f, 0xe6, 0x22, 0x27, 0x80, - 0x43, 0xe5, 0xba, 0x60, 0xaa, 0xcf, 0x75, 0xd7, 0x1f, 0x3e, 0x5b, 0x75, - 0x0b, 0x6e, 0x36, 0xf8, 0x98, 0x5d, 0xf6, 0x0e, 0xee, 0x60, 0x52, 0x4b, - 0xfd, 0x7c, 0xe1, 0xd0, 0xac, 0x41, 0xad, 0x29, 0x8c, 0x8f, 0x40, 0xe7, - 0x6e, 0xd1, 0xfa, 0xea, 0xd7, 0x9a, 0x52, 0xf8, 0xa0, 0x13, 0xe0, 0x8d, - 0xb5, 0x17, 0xaf, 0x90, 0x72, 0x07, 0x1c, 0x83, 0x65, 0x76, 0x08, 0x5d, - 0xe6, 0x25, 0xc9, 0x26, 0xef, 0x78, 0x17, 0x52, 0xb1, 0x6f, 0x9f, 0x2e, - 0x47, 0x04, 0x46, 0x4f, 0x00, 0x96, 0x9b, 0x08, 0x70, 0x72, 0x15, 0xf4, - 0x13, 0x86, 0xd5, 0x22, 0x10, 0x4d, 0xf9, 0xe7, 0x36, 0x27, 0x91, 0xf8, - 0xdd, 0x36, 0xa9, 0x42, 0x68, 0x5c, 0x8f, 0xcf, 0x24, 0xf7, 0xb6, 0xc4, - 0x59, 0x6f, 0x67, 0x41, 0xc1, 0xfb, 0xd7, 0xd5, 0xba, 0x9c, 0xbe, 0xa1, - 0xfb, 0x0a, 0x71, 0x45, 0xd0, 0xd4, 0xcb, 0x05, 0x56, 0x00, 0x47, 0x57, - 0xb4, 0x65, 0x0a, 0x69, 0x02, 0x1a, 0x5e, 0x36, 0x61, 0xd2, 0x39, 0xff, - 0x1e, 0xbd, 0x37, 0x6d, 0xa6, 0x15, 0x33, 0x94, 0x17, 0x06, 0xf3, 0xc6, - 0xf4, 0xa3, 0xc2, 0x04, 0x2d, 0x77, 0x44, 0xdd, 0x51, 0xa3, 0xc8, 0x3c, - 0xee, 0x8a, 0x97, 0x84, 0x2a, 0xb7, 0x39, 0xb9, 0xdc, 0xd6, 0x0f, 0x26, - 0x82, 0x61, 0x77, 0x69, 0x81, 0x9c, 0x7d, 0x13, 0x7a, 0xc4, 0x80, 0x8f, - 0x65, 0x5e, 0x41, 0x41, 0x9f, 0xb2, 0x86, 0x0d, 0x20, 0x33, 0x9d, 0x6a, - 0x35, 0x5f, 0x3d, 0xe6, 0x93, 0x77, 0x6f, 0xf8, 0xad, 0xd0, 0xd2, 0x97, - 0xc5, 0xa9, 0x31, 0xc7, 0x51, 0x26, 0xb0, 0xb5, 0x27, 0x0b, 0x37, 0x03, - 0xc8, 0x4d, 0x65, 0xc7, 0x5d, 0x05, 0x44, 0x63, 0xf3, 0x55, 0x97, 0xb9, - 0xa8, 0x9d, 0x53, 0xe5, 0x40, 0xd0, 0x4e, 0xaa, 0xb6, 0x65, 0x99, 0x0c, - 0x5e, 0x5a, 0x18, 0x09, 0x32, 0x29, 0x9c, 0xc6, 0x90, 0x66, 0x90, 0x74, - 0x9f, 0xfb, 0x10, 0xa7, 0xea, 0x35, 0x13, 0x05, 0xe5, 0x38, 0xfd, 0x45, - 0x86, 0x26, 0x2d, 0x17, 0x80, 0x8f, 0x44, 0xcd, 0x92, 0xfa, 0x47, 0xc4, - 0xef, 0x9e, 0xda, 0x5c, 0x1e, 0x14, 0x85, 0xd8, 0xf7, 0xc2, 0x17, 0xd7, - 0x9e, 0xd7, 0xa7, 0x36, 0xec, 0x6a, 0x33, 0x5b, 0xad, 0x7d, 0xcb, 0x72, - 0x82, 0xaf, 0x65, 0x8d, 0x13, 0x1d, 0x3d, 0xd5, 0x19, 0xc2, 0xb8, 0x84, - 0x64, 0xce, 0xe8, 0x93, 0x86, 0x5f, 0x00, 0x95, 0x26, 0x4e, 0x2e, 0x33, - 0x1d, 0x0c, 0x48, 0x3c, 0x5b, 0xbe, 0x74, 0xda, 0x97, 0xde, 0x5d, 0xb9, - 0x3e, 0x65, 0x4d, 0x88, 0x3d, 0x05, 0x2d, 0x3a, 0x6b, 0xc7, 0x2f, 0x8c, - 0x0d, 0x02, 0x8e, 0x8b, 0x2c, 0x07, 0xa3, 0x24, 0xcb, 0xf6, 0x13, 0x63, - 0xd8, 0xee, 0x86, 0xda, 0x2e, 0x53, 0x87, 0xe3, 0x36, 0x81, 0x58, 0x08, - 0x6e, 0x6a, 0xfa, 0xd5, 0xc1, 0x8b, 0xb8, 0x10, 0x0a, 0xff, 0x56, 0x2a, - 0x4b, 0x0e, 0x0d, 0x63, 0x31, 0xb5, 0x66, 0xe6, 0x7c, 0x53, 0x8e, 0x46, - 0x24, 0x28, 0x9c, 0x55, 0x40, 0x5b, 0xe6, 0xc2, 0x14, 0xfa, 0xa9, 0x56, - 0xce, 0x88, 0x0f, 0x6d, 0xc5, 0x9c, 0x45, 0x25, 0x5e, 0xf5, 0x82, 0x61, - 0x0f, 0x2b, 0x70, 0x9f, 0xbe, 0xd0, 0xdd, 0xd0, 0x9c, 0x0b, 0x8d, 0x97, - 0xcd, 0x75, 0xe4, 0x9a, 0x63, 0x28, 0x1c, 0x09, 0xc3, 0x14, 0x77, 0x9e, - 0xba, 0x03, 0xcf, 0x89, 0xc6, 0xfe, 0xc3, 0xf1, 0x24, 0xb3, 0xc5, 0xf2, - 0xf7, 0xf2, 0xac, 0x1d, 0xc9, 0xb8, 0xb1, 0x9d, 0xfd, 0x2c, 0xd5, 0x27, - 0xe3, 0x0e, 0x46, 0x22, 0x6a, 0xa8, 0xc1, 0x2a, 0xa6, 0x6f, 0xcc, 0xed, - 0x99, 0xba, 0x5f, 0x5f, 0x72, 0x3d, 0xdf, 0xb9, 0xed, 0x02, 0x5f, 0xaa, - 0xe6, 0x2a, 0x25, 0x12, 0xfe, 0x27, 0xaf, 0xed, 0xa2, 0x63, 0xf4, 0x27, - 0x5c, 0xb6, 0xea, 0x00, 0x0a, 0x0b, 0x10, 0xdb, 0xf4, 0x9a, 0x3c, 0x90, - 0x96, 0xaf, 0x31, 0x7f, 0x94, 0x25, 0xaf, 0x41, 0x8c, 0x7f, 0xf5, 0xe3, - 0x4a, 0xb4, 0x96, 0x88, 0x8e, 0x67, 0x52, 0x39, 0x00, 0x0b, 0xe0, 0xad, - 0x81, 0x4c, 0xf9, 0xb1, 0x18, 0xc8, 0x07, 0xa3, 0x85, 0x5d, 0x15, 0xc7, - 0x3f, 0x69, 0x0c, 0x6b, 0x40, 0x74, 0x74, 0x92, 0x25, 0x4a, 0xc7, 0x66, - 0xf1, 0x70, 0x17, 0xc5, 0x0c, 0x7e, 0x63, 0x96, 0xf8, 0xfe, 0xba, 0xa3, - 0xd4, 0x39, 0x8d, 0xd8, 0x8b, 0xe8, 0x5e, 0x3b, 0x13, 0x34, 0x4d, 0x5e, - 0xca, 0x8e, 0x63, 0xa1, 0x53, 0x61, 0x4c, 0xf0, 0x92, 0x16, 0x05, 0x2f, - 0x0a, 0x02, 0x7f, 0x06, 0xfa, 0x19, 0xc8, 0x8b, 0x38, 0x14, 0x86, 0xa5, - 0x97, 0x94, 0xd7, 0xce, 0xbe, 0x9e, 0xb4, 0x5c, 0x29, 0xf9, 0x7b, 0x5b, - 0x05, 0x1b, 0xc1, 0x97, 0x92, 0xf2, 0x58, 0xd7, 0xbf, 0xb6, 0x3e, 0x29, - 0xde, 0x1e, 0x16, 0x46, 0xbe, 0x7d, 0x1c, 0xf8, 0xc4, 0xaa, 0xe8, 0x02, - 0x18, 0x1d, 0x79, 0x5d, 0x8b, 0xae, 0x7b, 0x2b, 0xe3, 0x75, 0x8b, 0x5a, - 0xb8, 0x2e, 0xb5, 0xb8, 0x84, 0xf5, 0x10, 0x26, 0x6e, 0x3c, 0xbf, 0x3d, - 0x4d, 0xb0, 0x2c, 0x49, 0xe2, 0x8d, 0xf6, 0x38, 0x32, 0xf2, 0xfa, 0x3e, - 0x8d, 0xa0, 0x48, 0x15, 0x21, 0x2e, 0xaa, 0xe6, 0xf9, 0x73, 0x14, 0x79, - 0xaf, 0x8f, 0xaa, 0xcb, 0x6e, 0x0c, 0xeb, 0x21, 0xc3, 0x02, 0x96, 0x07, - 0x21, 0x56, 0x6c, 0x41, 0x5f, 0x28, 0x2b, 0x61, 0xaf, 0xd7, 0xdb, 0xdf, - 0x01, 0x94, 0x38, 0xfa, 0x49, 0x77, 0x05, 0x99, 0xc5, 0xec, 0x94, 0xfc, - 0x89, 0xfc, 0xb0, 0x6d, 0x6a, 0x83, 0xce, 0xe7, 0xd9, 0xb6, 0xfe, 0x4f, - 0x65, 0x03, 0x05, 0x7f, 0xdb, 0xd6, 0xd8, 0x11, 0xcd, 0x8b, 0x3d, 0x0c, - 0x6f, 0x0f, 0x8c, 0x0b, 0x92, 0x03, 0x7a, 0xf2, 0xb1, 0xb6, 0x66, 0x7a, - 0x14, 0x03, 0x4d, 0x49, 0x7a, 0xcb, 0x52, 0x6f, 0xc7, 0x07, 0xee, 0xbb, - 0x8a, 0x95, 0x80, 0xe2, 0xa2, 0x35, 0x75, 0x97, 0x66, 0x42, 0x5e, 0xa5, - 0xae, 0x37, 0x71, 0x3c, 0x59, 0xf1, 0x5b, 0xe8, 0xa5, 0x7a, 0x89, 0x63, - 0xf8, 0x9b, 0x7b, 0x06, 0x6e, 0x3f, 0x46, 0x10, 0xe6, 0xb6, 0xaf, 0x7b, - 0x2e, 0x80, 0xd4, 0x8e, 0xbe, 0x44, 0x06, 0x02, 0x01, 0xb4, 0xd8, 0x6b, - 0xce, 0x83, 0xa2, 0xec, 0xa3, 0x16, 0xbe, 0x79, 0xd6, 0xdc, 0xd4, 0xc1, - 0xd4, 0x6d, 0xc4, 0xdb, 0x3f, 0x81, 0xb2, 0xe3, 0x02, 0xe8, 0xeb, 0x75, - 0x6e, 0x36, 0x00, 0xe7, 0xcc, 0x8b, 0x7d, 0x5d, 0xf1, 0xd7, 0xca, 0x2b, - 0xe5, 0x08, 0x59, 0xf2, 0x0f, 0x55, 0x98, 0xa3, 0xfd, 0xa1, 0x23, 0xb2, - 0x9f, 0x00, 0x52, 0x55, 0x68, 0x98, 0xea, 0xd7, 0xbd, 0x7b, 0x4f, 0xd1, - 0x02, 0xa9, 0xe4, 0x3f, 0x56, 0xbf, 0xb1, 0x44, 0x39, 0x4f, 0x27, 0xa9, - 0x59, 0x87, 0xc0, 0x26, 0xde, 0x60, 0xfa, 0xea, 0xbf, 0xff, 0xe5, 0x0f, - 0x14, 0xbf, 0xab, 0xfd, 0x25, 0xaa, 0x70, 0xd6, 0xf5, 0xac, 0xf1, 0x65, - 0xd3, 0x43, 0x4c, 0x98, 0x70, 0x16, 0xf1, 0x3c, 0x92, 0x9d, 0x7c, 0x37, - 0x77, 0xfa, 0x61, 0x95, 0x6d, 0x14, 0xb9, 0x24, 0x3f, 0xf8, 0x9e, 0x36, - 0x48, 0xdb, 0xab, 0x01, 0xac, 0x19, 0x07, 0x54, 0x80, 0x5c, 0x5f, 0xf4, - 0xde, 0xd8, 0x5b, 0x94, 0xd9, 0xe4, 0xc1, 0x50, 0x08, 0x8d, 0xa2, 0x93, - 0xd6, 0x8a, 0x7c, 0xad, 0xd8, 0x35, 0xcd, 0xba, 0x2f, 0xf1, 0xbf, 0x0f, - 0x42, 0xbe, 0xf4, 0x23, 0x09, 0x43, 0x08, 0xce, 0xea, 0x33, 0xa9, 0x1a, - 0x44, 0x77, 0xdf, 0x54, 0x35, 0xfe, 0xd8, 0xa8, 0x9f, 0x57, 0xda, 0xe2, - 0xd1, 0x5b, 0x0f, 0x8f, 0x1a, 0x2b, 0xa5, 0x32, 0x79, 0xfb, 0xc6, 0xef, - 0x7b, 0x17, 0x7f, 0xea, 0x1d, 0xfe, 0x6c, 0x29, 0xe8, 0x3b, 0xa8, 0x30, - 0xe1, 0xc8, 0x69, 0x02, 0x75, 0x3e, 0x7e, 0x1a, 0x81, 0xee, 0xb4, 0x32, - 0x14, 0x66, 0x5f, 0xfc, 0x74, 0xeb, 0x3e, 0xf9, 0xc8, 0x91, 0x27, 0x76, - 0xeb, 0x53, 0x1e, 0x03, 0xe3, 0x19, 0x3e, 0xb9, 0xca, 0xc2, 0xf8, 0xa8, - 0xb7, 0x1a, 0xc7, 0xc6, 0x24, 0xbf, 0xf1, 0x3b, 0x6a, 0xb0, 0x29, 0xc3, - 0x09, 0xca, 0x1a, 0x52, 0x1b, 0xa5, 0x1b, 0xfd, 0x24, 0xa6, 0xeb, 0xaf, - 0x05, 0x3e, 0xab, 0x66, 0x3a, 0xcd, 0x44, 0x58, 0x53, 0x6c, 0x72, 0xaf, - 0x5f, 0x34, 0x0c, 0x9f, 0xdd, 0x20, 0xd8, 0x5b, 0x66, 0x4e, 0x6a, 0x4d, - 0xab, 0x43, 0xcd, 0x13, 0x07, 0x73, 0xe8, 0x8d, 0xd1, 0x40, 0xb4, 0x47, - 0xee, 0x74, 0x7f, 0x68, 0xf1, 0xb3, 0x09, 0x1e, 0x20, 0x5e, 0x6a, 0xc8, - 0xa0, 0xaf, 0xea, 0xfe, 0xc5, 0xe4, 0xed, 0xf9, 0x26, 0xf5, 0xb7, 0x1a, - 0x0f, 0xee, 0xe5, 0x7c, 0xcd, 0x12, 0x38, 0x4b, 0x1e, 0xb0, 0x8a, 0xfd, - 0xf0, 0x68, 0xbb, 0x90, 0xae, 0xfc, 0x65, 0x9b, 0xcb, 0x7a, 0x51, 0x69, - 0x9b, 0xc8, 0xc5, 0x23, 0x9e, 0x96, 0x2f, 0x9e, 0xee, 0xb5, 0xca, 0xa9, - 0xaa, 0x73, 0xed, 0xa8, 0xa6, 0x15, 0x5d, 0x17, 0xf2, 0x90, 0xd8, 0x18, - 0x99, 0xd4, 0xf0, 0x7f, 0x03, 0x69, 0x68, 0x54, 0xc0, 0x58, 0x88, 0x64, - 0xea, 0x95, 0x66, 0x79, 0x85, 0x19, 0x95, 0xd4, 0x52, 0x76, 0x0f, 0x18, - 0xfc, 0x4f, 0x2f, 0x12, 0xc9, 0xa5, 0x57, 0x2c, 0x05, 0x2d, 0x40, 0xec, - 0xfd, 0xb4, 0xfe, 0x9e, 0x7c, 0xdd, 0x26, 0xa7, 0xc2, 0xfd, 0x94, 0xfb, - 0x71, 0xeb, 0xab, 0x10, 0xe6, 0xb0, 0xaa, 0xd4, 0xfd, 0x65, 0x11, 0xbf, - 0xb1, 0xa6, 0xb3, 0x7d, 0x98, 0xe4, 0x0e, 0x8f, 0x8d, 0x28, 0x39, 0xee, - 0x25, 0x2d, 0x00, 0x11, 0xc7, 0x58, 0x03, 0xd9, 0x87, 0xdf, 0x7b, 0xe0, - 0x7f, 0x88, 0x48, 0xa4, 0x82, 0xb4, 0xbd, 0x7a, 0x41, 0xe8, 0x63, 0x79, - 0x1a, 0x74, 0x89, 0x19, 0x1f, 0x24, 0x84, 0x46, 0xfe, 0x2f, 0x4e, 0x5b, - 0x53, 0x2f, 0xf5, 0x3a, 0x41, 0x70, 0x48, 0xc9, 0x13, 0xe7, 0x02, 0xac, - 0xc7, 0x9f, 0x79, 0x1e, 0x6a, 0xb9, 0x97, 0x43, 0x39, 0x39, 0xd3, 0xaf, - 0xaa, 0x5a, 0xf1, 0xc5, 0x17, 0x9d, 0x10, 0x2a, 0x68, 0x47, 0x26, 0xae, - 0x7c, 0x1f, 0x4d, 0x01, 0x93, 0xfa, 0x02, 0xc7, 0x02, 0xd8, 0x79, 0x0a, - 0x26, 0x01, 0xa7, 0x18, 0x09, 0x3b, 0xa4, 0x11, 0xba, 0x42, 0x40, 0xad, - 0x5f, 0x9b, 0x15, 0x43, 0xee, 0x58, 0x13, 0x7a, 0x42, 0x6c, 0xc5, 0xd4, - 0x37, 0xf7, 0x73, 0x43, 0xb4, 0xac, 0x9a, 0xd9, 0x1e, 0xbc, 0x90, 0xa5, - 0xbe, 0x5b, 0x16, 0xa9, 0x55, 0xe5, 0x6b, 0x9a, 0x80, 0xc5, 0x76, 0xc3, - 0x37, 0x3d, 0x8f, 0x47, 0x89, 0x70, 0xf2, 0x01, 0x30, 0x64, 0x77, 0x5a, - 0xfa, 0xbd, 0x93, 0x2f, 0x77, 0x01, 0x54, 0xb2, 0x84, 0x49, 0xff, 0xd8, - 0x53, 0x04, 0x98, 0xdd, 0x8d, 0x6f, 0xb3, 0x27, 0x9e, 0x6f, 0xe8, 0xce, - 0x3f, 0xd4, 0x3a, 0xf1, 0x38, 0x99, 0x9e, 0xef, 0x14, 0x54, 0x2d, 0xf8, - 0x92, 0x69, 0x2c, 0xeb, 0x3c, 0xaa, 0xb8, 0xf6, 0x18, 0xbb, 0x83, 0xc2, - 0xd4, 0xeb, 0x19, 0xca, 0x9e, 0xd7, 0x9e, 0xf5, 0xa2, 0xf3, 0x6c, 0x15, - 0x6c, 0xdb, 0x1b, 0x8a, 0xa0, 0xd1, 0x8c, 0x4d, 0x38, 0xae, 0xd0, 0xcb, - 0x25, 0xd4, 0x21, 0x95, 0xee, 0xeb, 0x44, 0x41, 0x73, 0x2b, 0xe1, 0x32, - 0x8b, 0x33, 0xd3, 0x10, 0xb7, 0x78, 0x33, 0x23, 0xa4, 0x03, 0x6c, 0x28, - 0xd6, 0x9d, 0x51, 0x11, 0xa9, 0xc4, 0xe5, 0x86, 0xaa, 0x35, 0x0d, 0x27, - 0xc4, 0x32, 0x44, 0xec, 0x8c, 0xb5, 0xa6, 0x25, 0xc5, 0x61, 0x0a, 0xd9, - 0x99, 0x8f, 0x6b, 0x7b, 0x17, 0xa3, 0xf7, 0x97, 0x51, 0xdc, 0x0d, 0x67, - 0xbd, 0xe9, 0xe7, 0x33, 0xae, 0x34, 0xed, 0x7c, 0x2f, 0xe5, 0xbd, 0x6a, - 0x79, 0x91, 0xdd, 0xe9, 0x9e, 0xdb, 0xfd, 0xc3, 0xf9, 0xe4, 0x7c, 0x8a, - 0x18, 0x39, 0xa3, 0x07, 0xa6, 0x50, 0x6d, 0xfe, 0xa9, 0xa2, 0xf7, 0x9d, - 0xef, 0xab, 0x03, 0x78, 0xab, 0xed, 0xee, 0x3d, 0x6d, 0x03, 0x7c, 0x45, - 0x34, 0x4f, 0xb0, 0x76, 0x18, 0xb8, 0x51, 0xe3, 0x13, 0x07, 0x5a, 0x5f, - 0xe6, 0xee, 0x4c, 0x0c, 0xc8, 0x77, 0x50, 0x97, 0x21, 0x3f, 0x08, 0x9a, - 0xe5, 0x55, 0xea, 0x0e, 0x10, 0xe2, 0xa9, 0x2f, 0x85, 0x7f, 0x71, 0x57, - 0x42, 0xda, 0x20, 0xc6, 0xde, 0xc5, 0x1f, 0x7e, 0x73, 0xb8, 0xf4, 0x8a, - 0x2a, 0x04, 0x70, 0x79, 0xef, 0xfc, 0xfd, 0xe9, 0x8a, 0x98, 0x24, 0x9f, - 0x8f, 0x22, 0xa9, 0xdd, 0x08, 0x45, 0x2e, 0x69, 0x5a, 0x57, 0xd3, 0xc9, - 0xd9, 0xce, 0xa2, 0xcc, 0x79, 0xae, 0x39, 0x22, 0xe4, 0x26, 0x2e, 0x81, - 0x8a, 0x1a, 0x11, 0x01, 0x87, 0x59, 0x39, 0x23, 0x5a, 0x5f, 0xb1, 0xa0, - 0xa5, 0xfc, 0x9a, 0x9c, 0x2e, 0xb0, 0x78, 0x86, 0xdb, 0x02, 0xb0, 0xf8, - 0xe7, 0x8c, 0xad, 0x05, 0xe5, 0xa7, 0x6f, 0x16, 0x40, 0xd5, 0x47, 0xe2, - 0xd4, 0x5a, 0x56, 0x13, 0x8b, 0xc3, 0xd1, 0xd1, 0xd8, 0x7c, 0x39, 0x64, - 0x6f, 0x20, 0x51, 0x3f, 0x13, 0xf3, 0x39, 0x57, 0x34, 0xe6, 0xac, 0x28, - 0xe7, 0x8d, 0xd4, 0x10, 0x5c, 0x7e, 0xee, 0x09, 0xa1, 0x65, 0x2d, 0x81, - 0xdc, 0xb3, 0x7e, 0xa2, 0xa6, 0x65, 0x3c, 0x19, 0x33, 0x08, 0x19, 0x17, - 0xb4, 0x12, 0x54, 0x36, 0xa8, 0x16, 0xe3, 0x2e, 0xd6, 0xcb, 0xa6, 0xf2, - 0x0f, 0x51, 0x99, 0x3d, 0x78, 0xce, 0x92, 0xca, 0x96, 0xc5, 0x1f, 0x89, - 0x58, 0x01, 0xed, 0x56, 0xa7, 0x33, 0x78, 0x35, 0xf9, 0x6e, 0xad, 0xff, - 0xee, 0x91, 0x43, 0x21, 0x0c, 0x65, 0x1f, 0xfb, 0x8d, 0x02, 0x41, 0xda, - 0x14, 0xf5, 0x59, 0xf8, 0x4c, 0x60, 0xa9, 0xa5, 0xa9, 0xd4, 0xc2, 0x38, - 0x8f, 0xce, 0xe0, 0x06, 0xa4, 0x9a, 0x02, 0xb8, 0x84, 0x3a, 0x03, 0xa1, - 0xab, 0xbd, 0x75, 0xb5, 0x23, 0x6f, 0xa5, 0x01, 0xfd, 0xba, 0x89, 0xbe, - 0xf2, 0xf7, 0x2a, 0x9e, 0xa8, 0x68, 0x18, 0xd4, 0xa0, 0x4b, 0xbd, 0x23, - 0x6c, 0xc2, 0xe5, 0x04, 0x9d, 0x10, 0x69, 0x14, 0xea, 0x83, 0xf1, 0x11, - 0x69, 0x08, 0x38, 0xfa, 0x98, 0x86, 0x59, 0x43, 0x37, 0x4c, 0xac, 0xad, - 0xf5, 0x22, 0x18, 0x8b, 0x8e, 0x1a, 0xaf, 0x2c, 0x70, 0x72, 0xec, 0x63, - 0x35, 0xc9, 0x2e, 0x92, 0xa7, 0x7b, 0x14, 0xb9, 0x03, 0x0c, 0xf4, 0x9d, - 0x09, 0xcd, 0x07, 0xf2, 0x94, 0x53, 0x08, 0x0c, 0xd9, 0x74, 0x35, 0xcf, - 0xab, 0xd9, 0xe9, 0xa2, 0x99, 0x77, 0x07, 0x3f, 0x3c, 0xf7, 0x48, 0xb5, - 0xf3, 0x7a, 0x07, 0xee, 0xfd, 0x51, 0x82, 0xba, 0x47, 0x91, 0x0d, 0x44, - 0xb3, 0xeb, 0x33, 0x15, 0x95, 0x62, 0x5e, 0xe1, 0x6e, 0x22, 0xe6, 0xad, - 0xa8, 0x43, 0xd7, 0xef, 0xba, 0xb3, 0x16, 0x73, 0xbe, 0x81, 0xfb, 0x25, - 0x10, 0x4d, 0x83, 0xfb, 0x13, 0x39, 0x7a, 0x46, 0x7d, 0x60, 0x54, 0x63, - 0xa3, 0x1a, 0xa3, 0x46, 0x78, 0xd3, 0xe9, 0xd7, 0x5a, 0x3f, 0xc6, 0xc5, - 0x4a, 0xce, 0xa5, 0x62, 0x93, 0x49, 0xde, 0xfc, 0x71, 0xf6, 0xe4, 0x6c, - 0x5f, 0x3d, 0x35, 0xea, 0x7d, 0xed, 0x25, 0x4a, 0xf1, 0x47, 0x61, 0xed, - 0x75, 0x6a, 0x0c, 0x04, 0x28, 0x2f, 0xca, 0xdf, 0x8b, 0x5a, 0x8c, 0x1b, - 0x42, 0xf0, 0xeb, 0x59, 0x18, 0x09, 0x82, 0x51, 0x1e, 0xc1, 0x6d, 0x46, - 0xe4, 0xe3, 0x32, 0x1d, 0xe8, 0xc5, 0x8d, 0x31, 0xd2, 0x15, 0x14, 0xdb, - 0x38, 0x76, 0xc6, 0xdc, 0xdb, 0xd1, 0x7e, 0x38, 0x41, 0xb6, 0x7a, 0x78, - 0x7d, 0xa9, 0xbf, 0xae, 0xe3, 0x99, 0x7c, 0x69, 0x59, 0xd1, 0xc6, 0x2b, - 0x3d, 0xf3, 0x9a, 0xc4, 0x35, 0x59, 0x5b, 0x45, 0x87, 0x2a, 0x14, 0xad, - 0x49, 0x81, 0x0f, 0x5a, 0x3d, 0x4c, 0xcc, 0x69, 0x7b, 0x95, 0x64, 0x32, - 0x24, 0xd0, 0xd4, 0xa0, 0xaa, 0xf2, 0x5a, 0x6b, 0x43, 0xc4, 0xf5, 0x85, - 0x64, 0x4e, 0xea, 0x03, 0x2e, 0x9b, 0x25, 0x8e, 0xf5, 0x4e, 0xed, 0xfb, - 0xa4, 0x00, 0x7d, 0x7a, 0x1f, 0x26, 0x88, 0x36, 0x22, 0xb2, 0x33, 0x14, - 0x47, 0xc0, 0xaa, 0x83, 0x69, 0xdf, 0x49, 0x69, 0x1d, 0x58, 0x5d, 0x1d, - 0x80, 0xc9, 0x5c, 0xfe, 0xfe, 0x58, 0x9a, 0x78, 0x26, 0xf6, 0xa0, 0x72, - 0xaa, 0x07, 0xd8, 0xbd, 0x80, 0x10, 0xb0, 0x7d, 0xa7, 0x17, 0x04, 0xde, - 0x13, 0x21, 0x17, 0x85, 0xca, 0xa3, 0x40, 0x92, 0xe4, 0x93, 0xd8, 0xb4, - 0x31, 0xb0, 0x56, 0x04, 0x2c, 0x35, 0xa6, 0xd9, 0xe3, 0x4f, 0x61, 0xdf, - 0x96, 0xff, 0xd7, 0x65, 0xf5, 0x92, 0x11, 0xf3, 0x81, 0x3e, 0x03, 0x2b, - 0xf1, 0x6a, 0xfc, 0x8b, 0x36, 0x0c, 0x4a, 0x4e, 0xa4, 0xf7, 0x4f, 0x28, - 0x34, 0xac, 0x4e, 0x5d, 0xb3, 0x86, 0x1c, 0xe7, 0x96, 0x80, 0xb6, 0x71, - 0x40, 0x6d, 0xd9, 0x38, 0xca, 0xb9, 0xd2, 0xbd, 0xe4, 0xc7, 0x71, 0xd3, - 0x22, 0x7a, 0x36, 0x8e, 0x75, 0xb5, 0x8c, 0xe6, 0x22, 0xfc, 0x91, 0x91, - 0xef, 0x3e, 0x91, 0x2e, 0x6c, 0x94, 0x8e, 0xf2, 0x9b, 0x5a, 0xf2, 0x45, - 0x63, 0x61, 0x8b, 0x70, 0x95, 0x7d, 0x5c, 0x2d, 0x50, 0xac, 0x1d, 0xbf, - 0x95, 0x26, 0x15, 0x91, 0xd0, 0x88, 0xe9, 0xb5, 0x54, 0xa4, 0x2e, 0x3f, - 0x8e, 0x7a, 0x1e, 0xc4, 0x1f, 0x33, 0x6b, 0xfc, 0x1f, 0x35, 0x58, 0xbf, - 0x5c, 0xae, 0xe6, 0x0b, 0x59, 0x7d, 0xb5, 0x73, 0x44, 0x29, 0x2d, 0x68, - 0x7e, 0xc9, 0x92, 0x1d, 0xa3, 0x66, 0xe6, 0xb3, 0x1e, 0x5e, 0x99, 0x09, - 0x21, 0xb8, 0xe9, 0x28, 0x7a, 0xf2, 0x2d, 0xb3, 0xf0, 0xae, 0x3d, 0xb0, - 0xe5, 0xb3, 0x85, 0x13, 0x75, 0xbe, 0xb7, 0x9f, 0xfb, 0xe6, 0x38, 0x9f, - 0xfa, 0x3f, 0x5c, 0x3e, 0x82, 0xf3, 0xc2, 0x63, 0xcb, 0xff, 0xee, 0x2f, - 0x2f, 0xbc, 0xe3, 0xe5, 0x57, 0x7e, 0xba, 0x20, 0xfd, 0x41, 0xbd, 0x3b, - 0x63, 0x0d, 0x2f, 0xfa, 0xbd, 0x38, 0xf0, 0x69, 0x69, 0x5d, 0x29, 0xc5, - 0xb3, 0xa1, 0xde, 0x52, 0xbe, 0x0c, 0x67, 0xe5, 0x05, 0x5d, 0xf2, 0x06, - 0x6a, 0xe0, 0x15, 0x40, 0x0f, 0x97, 0x51, 0xf5, 0x40, 0x49, 0x56, 0x27, - 0x8b, 0x81, 0xc6, 0x7b, 0x69, 0xf1, 0xf6, 0x77, 0x43, 0xb2, 0xc2, 0x6a, - 0x0c, 0x88, 0x2e, 0xc4, 0xc6, 0xad, 0x81, 0xad, 0x10, 0x64, 0xbc, 0xbc, - 0x7c, 0x69, 0xee, 0xa5, 0xb3, 0x2d, 0x63, 0x28, 0x87, 0x63, 0xe7, 0xb0, - 0x00, 0x6b, 0x32, 0xcf, 0x6f, 0x8f, 0x5b, 0x12, 0xf5, 0x79, 0x08, 0x36, - 0x88, 0x64, 0xad, 0xce, 0x39, 0x77, 0x4c, 0x79, 0x4d, 0x3b, 0xd8, 0xf3, - 0x06, 0xf0, 0xac, 0x54, 0x43, 0xe4, 0xd9, 0x30, 0x63, 0x01, 0x1b, 0x14, - 0x87, 0x8f, 0x06, 0x00, 0x67, 0xf1, 0x5a, 0x5d, 0xd0, 0xf6, 0x52, 0xfa, - 0xe5, 0x39, 0x56, 0xb8, 0xd6, 0x9d, 0xf5, 0x3e, 0x52, 0x88, 0xe2, 0xab, - 0xe0, 0x53, 0x0a, 0x4c, 0xd5, 0xcb, 0x1a, 0x63, 0xa2, 0xcc, 0x2b, 0x40, - 0x7f, 0xca, 0xc7, 0x6f, 0xff, 0xa8, 0x0e, 0x9f, 0x62, 0xe5, 0x22, 0x9f, - 0x1d, 0xa2, 0xa9, 0xeb, 0x3b, 0x5f, 0x98, 0x64, 0x14, 0x0b, 0x27, 0x25, - 0x14, 0x89, 0x6d, 0x2b, 0xff, 0xb9, 0xfc, 0xf6, 0x1f, 0xff, 0xd8, 0xe8, - 0x65, 0x31, 0xd8, 0x50, 0x5f, 0x47, 0xed, 0xf5, 0x9a, 0xd3, 0x62, 0xf5, - 0x8b, 0x92, 0x51, 0x81, 0x4a, 0xde, 0x6b, 0xc1, 0x85, 0xcc, 0x18, 0x42, - 0xbc, 0x0d, 0xe5, 0x25, 0x68, 0x41, 0x34, 0x13, 0x49, 0x59, 0x5d, 0x9c, - 0x29, 0x2c, 0x0d, 0xe0, 0xfb, 0x8d, 0x72, 0x09, 0xf5, 0x0f, 0x84, 0x1f, - 0x78, 0xe2, 0x4f, 0x6f, 0x68, 0x54, 0x43, 0xa3, 0xba, 0x5b, 0x4a, 0x1f, - 0x60, 0xda, 0x13, 0x6a, 0xd1, 0x4e, 0x5c, 0xff, 0x53, 0x37, 0xbb, 0x22, - 0x44, 0xeb, 0x66, 0x1c, 0xfc, 0x9a, 0xec, 0x6b, 0x8b, 0x52, 0x1a, 0x43, - 0x3c, 0x0e, 0x88, 0x09, 0x65, 0x5e, 0xc3, 0x33, 0xeb, 0x47, 0x27, 0x9f, - 0xb3, 0xaf, 0xd8, 0x3c, 0x0a, 0xda, 0x7a, 0xda, 0xbf, 0x4c, 0x4c, 0x5e, - 0xf8, 0x5d, 0x77, 0xcf, 0xa9, 0x67, 0xf8, 0x93, 0x22, 0x3f, 0xe2, 0xb4, - 0xfc, 0xb4, 0x1c, 0x70, 0x45, 0xdc, 0x14, 0xd9, 0x32, 0xe2, 0x81, 0x80, - 0xa2, 0x8c, 0xea, 0xb8, 0x85, 0xf2, 0xc0, 0xbc, 0xe5, 0x35, 0xc6, 0x05, - 0xcf, 0x2a, 0x3a, 0xcc, 0xfa, 0x9f, 0x17, 0xc2, 0x28, 0x91, 0xe2, 0xab, - 0xc6, 0x3c, 0x6d, 0xbc, 0x60, 0xff, 0xaa, 0x52, 0x01, 0x7a, 0x6f, 0x7e, - 0xbd, 0x75, 0xdf, 0x7e, 0x0d, 0xd1, 0x99, 0xa2, 0x1e, 0x26, 0x14, 0x61, - 0x77, 0x4c, 0x5c, 0x06, 0xd0, 0x8f, 0x43, 0x34, 0x18, 0xfb, 0xb7, 0xf4, - 0x46, 0x73, 0xc8, 0x2e, 0x2c, 0xc4, 0x46, 0x28, 0x6d, 0x0d, 0xec, 0x7b, - 0x3e, 0x6e, 0xff, 0x16, 0x27, 0xc9, 0x14, 0xa8, 0x7a, 0x1a, 0x1d, 0x94, - 0xe4, 0x3b, 0xfc, 0x94, 0x16, 0xe0, 0x0c, 0xef, 0x8e, 0x8a, 0x15, 0x80, - 0x19, 0xfb, 0x2a, 0x21, 0xca, 0xbe, 0x0e, 0xb2, 0xd8, 0xbb, 0xfa, 0xaa, - 0xd5, 0x5e, 0x39, 0xb3, 0xda, 0xab, 0x9e, 0x24, 0x36, 0x49, 0x8c, 0x4b, - 0xf7, 0x25, 0x56, 0x2c, 0x29, 0xab, 0x99, 0x36, 0x90, 0xa5, 0xcf, 0x5e, - 0xa4, 0x4b, 0xe5, 0xfb, 0xc8, 0xb7, 0xad, 0x15, 0x49, 0xcb, 0xaa, 0xca, - 0x8d, 0x80, 0x21, 0x2e, 0x72, 0x96, 0xc0, 0xb5, 0xde, 0x2b, 0xf5, 0x40, - 0x18, 0x46, 0xb0, 0x3b, 0x34, 0x5e, 0x67, 0xeb, 0x6e, 0xe6, 0x0d, 0xfd, - 0x9c, 0x34, 0x71, 0xa1, 0xfc, 0x43, 0x5d, 0x07, 0xbc, 0x96, 0xac, 0xb3, - 0xfb, 0x79, 0x8f, 0xbb, 0xe2, 0x0e, 0x35, 0x29, 0xd5, 0x0b, 0xf0, 0x25, - 0xf0, 0xe9, 0x2b, 0x9e, 0xab, 0xa1, 0x57, 0x09, 0x70, 0x88, 0xb0, 0xf5, - 0x10, 0x0c, 0x8f, 0xf1, 0x1f, 0x14, 0xa8, 0x55, 0x5e, 0xdd, 0xc2, 0xa4, - 0xba, 0xbc, 0xfa, 0x24, 0x6e, 0x1f, 0xe8, 0x34, 0x9a, 0xa7, 0x4b, 0x2c, - 0x04, 0x71, 0xc9, 0x43, 0x64, 0xd1, 0x11, 0xcf, 0xd1, 0x50, 0x0b, 0xf7, - 0xc9, 0xa9, 0x85, 0xb1, 0x0b, 0xce, 0x72, 0x72, 0xf2, 0xaa, 0xcd, 0xae, - 0xc9, 0x6b, 0x33, 0x5f, 0x4a, 0xa6, 0x07, 0xcd, 0x4b, 0xfb, 0x2f, 0x12, - 0x27, 0xf9, 0xee, 0xf3, 0x5e, 0x60, 0x2f, 0x2f, 0x8f, 0x6d, 0x56, 0xcb, - 0x12, 0x7f, 0xdf, 0xfd, 0x6c, 0x25, 0xb4, 0x18, 0x82, 0x2e, 0x91, 0x4b, - 0xa9, 0xc2, 0x50, 0x71, 0x1e, 0xbf, 0x4a, 0xdc, 0x6f, 0x1f, 0x15, 0x6f, - 0x0b, 0xdf, 0x91, 0x5e, 0x7e, 0xf1, 0xf8, 0x1f, 0x5f, 0xd8, 0x43, 0x2b, - 0x18, 0xb7, 0xd4, 0x48, 0x5f, 0xb7, 0x8c, 0x7d, 0xa8, 0xd0, 0x21, 0x18, - 0xd8, 0x32, 0xd7, 0xb9, 0xf3, 0x56, 0x4b, 0x54, 0xc2, 0x36, 0x8b, 0xe1, - 0xa5, 0x23, 0x4e, 0xdc, 0x8d, 0x32, 0x03, 0x31, 0x78, 0x99, 0x64, 0x32, - 0x44, 0x1d, 0x8e, 0xa0, 0xce, 0x0b, 0x51, 0x2f, 0xb6, 0x64, 0xe6, 0x04, - 0xd8, 0x32, 0xb9, 0x17, 0xff, 0x9d, 0x87, 0x3f, 0x41, 0x32, 0x66, 0x94, - 0x91, 0xf2, 0x60, 0x82, 0x19, 0x31, 0x5f, 0x80, 0x8d, 0x54, 0xe0, 0x98, - 0x07, 0x03, 0x81, 0x93, 0xe1, 0x67, 0x17, 0x1b, 0x58, 0x62, 0x57, 0x77, - 0xa2, 0x4b, 0x2a, 0x7a, 0x77, 0x59, 0x1f, 0x85, 0xdb, 0x3b, 0xcf, 0x2f, - 0x7a, 0x7c, 0xce, 0xbf, 0xa6, 0x77, 0x9c, 0x89, 0x83, 0xeb, 0xd9, 0xb9, - 0x21, 0xd7, 0x02, 0x6c, 0x78, 0x12, 0x0f, 0x84, 0x29, 0x26, 0xee, 0x5e, - 0xb3, 0xd0, 0xa4, 0x48, 0x82, 0x84, 0x4f, 0x1d, 0x77, 0x8d, 0xca, 0x77, - 0x7a, 0x10, 0x38, 0x78, 0x0f, 0xde, 0xd9, 0x8d, 0x8b, 0xeb, 0x04, 0xf4, - 0x53, 0xff, 0x0b, 0xae, 0x3f, 0x02, 0x16, 0x89, 0x09, 0xa2, 0x20, 0x04, - 0x90, 0xf6, 0x72, 0x66, 0xd2, 0x52, 0x50, 0x40, 0x6d, 0x77, 0x7d, 0x7c, - 0xf7, 0x38, 0xa6, 0x8b, 0xc4, 0x52, 0xa2, 0xba, 0x33, 0x76, 0x75, 0xc1, - 0xf2, 0x26, 0xf1, 0x87, 0x92, 0xa0, 0xc7, 0xa4, 0x80, 0xf8, 0x4e, 0xc7, - 0x9d, 0x42, 0xaf, 0x6e, 0xce, 0x38, 0x9d, 0xa5, 0x73, 0xf1, 0x3e, 0x75, - 0x26, 0xac, 0x33, 0xee, 0x5a, 0x51, 0xf9, 0x1e, 0x56, 0xcb, 0x6d, 0x1e, - 0x3f, 0x1a, 0x94, 0xe9, 0x0d, 0x14, 0x7b, 0xc0, 0x4a, 0xfa, 0xf9, 0x36, - 0x98, 0xdb, 0x64, 0xc1, 0x11, 0x33, 0x2d, 0x4f, 0x29, 0xa0, 0xff, 0x56, - 0xef, 0x40, 0xba, 0xf0, 0x75, 0xf0, 0xdd, 0x9c, 0x89, 0x02, 0x1b, 0xa5, - 0xb0, 0xdf, 0x6f, 0xae, 0x45, 0xca, 0xbf, 0x2e, 0x63, 0xd7, 0x75, 0x11, - 0x83, 0x3c, 0x21, 0x5d, 0xc6, 0xc8, 0x88, 0x60, 0xf8, 0x62, 0x11, 0xf5, - 0x49, 0xdc, 0x01, 0xa7, 0x04, 0x60, 0xed, 0xac, 0x4b, 0x04, 0x45, 0x80, - 0xa8, 0xf3, 0x7a, 0xc1, 0x65, 0x71, 0x76, 0x54, 0x6a, 0x4b, 0x7d, 0xef, - 0xb8, 0x05, 0xd6, 0x2a, 0x5d, 0x9e, 0x8a, 0x8c, 0x82, 0xe6, 0x71, 0x89, - 0x07, 0x6c, 0xcf, 0xf7, 0xf5, 0xb8, 0xfc, 0xfc, 0x83, 0x11, 0xdd, 0xc3, - 0x60, 0x75, 0x8f, 0xb4, 0x2a, 0xdf, 0xcc, 0xe5, 0x3d, 0x89, 0xce, 0x8d, - 0x90, 0x6e, 0xed, 0x36, 0x97, 0xf5, 0x44, 0x20, 0xcf, 0xc4, 0xc2, 0x1f, - 0xbc, 0xf4, 0x7a, 0x02, 0x6b, 0xa0, 0x9c, 0xad, 0xde, 0xf7, 0x4e, 0xda, - 0x6b, 0xd9, 0x5e, 0x74, 0xb2, 0x2c, 0xae, 0x89, 0x74, 0x5d, 0x3e, 0x40, - 0x41, 0x8d, 0x4b, 0x38, 0xba, 0x69, 0x1e, 0xe6, 0x42, 0x04, 0x6c, 0xa4, - 0x24, 0x46, 0xc8, 0x8e, 0xa3, 0xfb, 0x11, 0x11, 0x55, 0x0b, 0xb6, 0xcf, - 0xde, 0xb6, 0x8a, 0x99, 0x92, 0xb0, 0x2f, 0x7d, 0x5d, 0xac, 0x9b, 0xea, - 0x41, 0x03, 0x79, 0x5b, 0x95, 0x37, 0xeb, 0x9c, 0xae, 0x8c, 0xe8, 0xee, - 0x8b, 0x75, 0xf0, 0xd9, 0x92, 0xfd, 0x94, 0xb9, 0x4a, 0x88, 0x95, 0x9b, - 0x41, 0xdf, 0xe5, 0x86, 0x51, 0xcf, 0x7b, 0xa9, 0xe6, 0xad, 0x69, 0xf2, - 0x27, 0x96, 0x80, 0xc7, 0xcb, 0x92, 0xb3, 0xb4, 0x9e, 0xca, 0xd6, 0xb7, - 0xc8, 0x49, 0x49, 0x89, 0x5c, 0xd3, 0xa5, 0xf1, 0xf7, 0x56, 0x35, 0x59, - 0x40, 0x1f, 0xa7, 0x9e, 0x6c, 0x2e, 0x6d, 0xfe, 0x99, 0x7e, 0xc9, 0xb9, - 0xe3, 0xf4, 0xb8, 0xa5, 0x20, 0xe2, 0xec, 0x50, 0x67, 0x48, 0x50, 0xfc, - 0x7f, 0x7d, 0xbf, 0x26, 0x88, 0x2f, 0x35, 0xd3, 0xea, 0xc1, 0x94, 0x05, - 0xd7, 0x7f, 0x8c, 0x01, 0x1d, 0x98, 0x00, 0x39, 0x5f, 0x85, 0x1c, 0x6c, - 0x78, 0xf1, 0xe8, 0xa6, 0xca, 0xa2, 0x6d, 0x0e, 0x05, 0x53, 0x9e, 0xf1, - 0x1a, 0xee, 0xed, 0x97, 0x1d, 0x3b, 0xc5, 0x26, 0xf7, 0x62, 0x40, 0xa5, - 0x5d, 0xba, 0x18, 0x56, 0xcd, 0x8f, 0x7f, 0xd8, 0xa9, 0x4e, 0x9b, 0xbb, - 0x97, 0xbe, 0xfe, 0x4a, 0xe7, 0x65, 0x07, 0xa1, 0x49, 0xd6, 0xf7, 0x9c, - 0xf8, 0x8e, 0xd7, 0x4f, 0x6d, 0xf7, 0xe2, 0x81, 0x51, 0x37, 0x72, 0x61, - 0x2c, 0xae, 0x92, 0x34, 0x56, 0x5a, 0x39, 0xa8, 0xb9, 0x71, 0x83, 0xec, - 0x10, 0xfd, 0x66, 0x46, 0xed, 0xbc, 0xcc, 0x3e, 0xac, 0xb2, 0x15, 0xd0, - 0xd6, 0x77, 0x17, 0x83, 0x11, 0x50, 0x0b, 0xdc, 0xdf, 0xa6, 0x56, 0x85, - 0x11, 0x2e, 0xe6, 0x87, 0x6b, 0x57, 0x77, 0x1a, 0xae, 0x2e, 0x9b, 0x69, - 0xc2, 0x16, 0x40, 0x0c, 0x3c, 0xba, 0xd8, 0xe7, 0xe2, 0xdc, 0x7d, 0x05, - 0x09, 0x39, 0x97, 0xea, 0xe6, 0xe5, 0x3a, 0xac, 0x26, 0x82, 0x8a, 0x16, - 0xba, 0xa3, 0xf4, 0xae, 0xee, 0xa5, 0x0a, 0x39, 0xa3, 0x70, 0xc7, 0xde, - 0xf7, 0x61, 0xd2, 0x1c, 0x28, 0xe1, 0x34, 0x5f, 0xf3, 0xf7, 0xce, 0xf9, - 0xde, 0xb4, 0xfd, 0xba, 0x71, 0xd9, 0x69, 0xd3, 0x92, 0x35, 0x1c, 0xb9, - 0x91, 0x20, 0x34, 0x85, 0x2b, 0x49, 0xc5, 0x80, 0xeb, 0x9f, 0x61, 0x5e, - 0xd6, 0x8c, 0xa0, 0x83, 0xe1, 0x61, 0x8e, 0x61, 0xd2, 0x64, 0x41, 0x88, - 0xf5, 0xf6, 0x51, 0x22, 0x3b, 0x1d, 0x2c, 0x7d, 0x66, 0x26, 0x4f, 0x5e, - 0xe3, 0x78, 0xbc, 0x4b, 0x00, 0x00, 0x96, 0x6e, 0x01, 0xab, 0x0a, 0xf3, - 0xdc, 0xc9, 0x97, 0xa0, 0xf6, 0x30, 0x47, 0x56, 0x66, 0x79, 0xa2, 0xb2, - 0x1d, 0x98, 0x98, 0x46, 0xbb, 0x78, 0x73, 0x55, 0xe9, 0x6c, 0xbe, 0xcf, - 0xf1, 0x08, 0x47, 0x98, 0xa8, 0xdc, 0x9f, 0xbe, 0x9a, 0x43, 0x6b, 0x32, - 0x73, 0xa9, 0xc2, 0x4e, 0xa5, 0xfa, 0xe1, 0xe6, 0xd7, 0x4e, 0xf5, 0xff, - 0xf3, 0x69, 0x8b, 0x2c, 0x7e, 0x53, 0x19, 0x5b, 0xb0, 0xb5, 0x0e, 0xb2, - 0x0e, 0x21, 0x49, 0xac, 0xfc, 0x27, 0x5d, 0x32, 0x73, 0x36, 0x3d, 0x26, - 0x50, 0x27, 0x6c, 0xbc, 0x24, 0xb9, 0xf7, 0x50, 0x3a, 0xfb, 0x84, 0x2c, - 0xd2, 0x25, 0x61, 0x4b, 0x89, 0xef, 0xd2, 0x17, 0x2f, 0xff, 0x20, 0xba, - 0xa4, 0x5d, 0xb5, 0x94, 0xf3, 0xe0, 0x29, 0x64, 0x70, 0xfe, 0x81, 0xa1, - 0x72, 0x93, 0x95, 0x6b, 0x55, 0x0f, 0x8b, 0x18, 0xca, 0x85, 0xe6, 0x2c, - 0xb8, 0x90, 0x42, 0xbc, 0x5e, 0x5a, 0x9c, 0xd3, 0x30, 0x33, 0x27, 0xa3, - 0x9c, 0xb8, 0x69, 0x36, 0xca, 0xaa, 0xbe, 0x24, 0x54, 0x92, 0x5a, 0x5d, - 0x41, 0xcc, 0x27, 0xf9, 0x99, 0x4f, 0x10, 0x0b, 0xb7, 0xf3, 0x06, 0xd7, - 0x9d, 0x73, 0x22, 0x57, 0xd8, 0x3a, 0x73, 0x22, 0x77, 0x38, 0x00, 0x0e, - 0xd4, 0xad, 0x95, 0xac, 0x80, 0xf1, 0xae, 0xf5, 0x4a, 0xff, 0xd7, 0x57, - 0x34, 0xd3, 0xd2, 0xb0, 0xee, 0x61, 0xb1, 0x76, 0x17, 0x7e, 0xc1, 0xdd, - 0xdc, 0xab, 0x7c, 0x10, 0x95, 0x33, 0xec, 0x73, 0x01, 0x91, 0x51, 0xd9, - 0x6d, 0x6e, 0x2b, 0x29, 0x70, 0x41, 0xd8, 0xe7, 0xbe, 0x86, 0x91, 0x13, - 0x57, 0x9c, 0x91, 0x88, 0x83, 0x7a, 0xe7, 0xff, 0x1c, 0x8e, 0xbc, 0x04, - 0x1a, 0x89, 0xca, 0x29, 0x37, 0x96, 0x4d, 0xb7, 0xf1, 0x5a, 0x2d, 0x38, - 0xe2, 0x38, 0x83, 0xff, 0xe9, 0xa1, 0x89, 0xd5, 0xfc, 0xc5, 0xf2, 0xa9, - 0x1b, 0x3d, 0x82, 0x39, 0x90, 0xe2, 0x17, 0xfd, 0xf6, 0x4b, 0x22, 0x32, - 0x6e, 0xa2, 0x78, 0x46, 0x50, 0xaf, 0xb5, 0x75, 0x8a, 0x6b, 0x28, 0x11, - 0xd4, 0x49, 0x6c, 0x3d, 0x56, 0x4e, 0x2d, 0x2b, 0x56, 0x75, 0x41, 0xbf, - 0x2d, 0x15, 0x0d, 0xbb, 0x6c, 0x7b, 0x3d, 0xa6, 0xf5, 0xbe, 0x92, 0xeb, - 0x32, 0xaa, 0x92, 0x0d, 0x72, 0xd4, 0xa5, 0x8d, 0x83, 0xfb, 0x25, 0xc9, - 0xcc, 0x53, 0xb0, 0x78, 0xea, 0x73, 0x04, 0xd1, 0x06, 0x05, 0x16, 0x60, - 0xdb, 0xec, 0x49, 0x7a, 0x82, 0x2a, 0xc7, 0x51, 0xa4, 0x17, 0xf8, 0x41, - 0x91, 0xb2, 0xed, 0x70, 0xbe, 0x00, 0x73, 0xe4, 0xb0, 0x35, 0x8d, 0xbc, - 0xe4, 0x06, 0xa1, 0xcd, 0x29, 0xe8, 0x16, 0xaa, 0x34, 0xcf, 0xaa, 0xe0, - 0xc8, 0x75, 0x8b, 0x0d, 0x5e, 0x78, 0x10, 0x03, 0x9f, 0xf8, 0x98, 0xbe, - 0x52, 0x88, 0x60, 0x22, 0xf7, 0xc5, 0x11, 0x1e, 0xc4, 0xf1, 0x81, 0x1d, - 0x6b, 0x38, 0xb3, 0xf4, 0xad, 0x8f, 0x2a, 0xc9, 0x58, 0x97, 0x4c, 0x7b, - 0xea, 0x6f, 0x49, 0x04, 0x1e, 0xcd, 0xc1, 0x81, 0x73, 0x24, 0xe5, 0xf1, - 0x78, 0x27, 0x13, 0x01, 0x87, 0xc3, 0x45, 0xa1, 0x6c, 0x80, 0xbd, 0x5b, - 0x94, 0x8f, 0x5a, 0x69, 0x01, 0x02, 0xb6, 0xbf, 0x9c, 0x63, 0xa3, 0x3d, - 0x57, 0xb0, 0x3c, 0x6c, 0x09, 0x96, 0x73, 0x8f, 0x60, 0xc2, 0x98, 0xbb, - 0x34, 0x34, 0x7e, 0x22, 0xd4, 0xf5, 0xc9, 0x55, 0x48, 0x2b, 0x84, 0x4c, - 0xb9, 0x1f, 0x9e, 0x82, 0x9b, 0xaf, 0xfc, 0x73, 0xaa, 0x6a, 0x0f, 0x21, - 0xa3, 0xfe, 0xa8, 0x37, 0x52, 0xea, 0xea, 0x98, 0x0a, 0x09, 0x33, 0x34, - 0x10, 0xad, 0xbf, 0xe6, 0x38, 0xc1, 0xf0, 0xb3, 0xfd, 0xe7, 0xad, 0x8f, - 0xd5, 0x46, 0x19, 0xaf, 0xfc, 0xd9, 0x02, 0x73, 0xfe, 0xae, 0x7c, 0x4f, - 0xb5, 0xb0, 0x4d, 0x47, 0x83, 0xa0, 0xff, 0xb4, 0x02, 0xd2, 0x3c, 0x5e, - 0x64, 0x36, 0x5a, 0x75, 0x39, 0x56, 0xc3, 0x7b, 0x5c, 0x71, 0xed, 0xe4, - 0x05, 0x4e, 0xd5, 0x18, 0xe0, 0x03, 0xa2, 0x37, 0xe3, 0xa7, 0x00, 0xef, - 0xd0, 0x8a, 0x34, 0x6f, 0x24, 0x56, 0xdf, 0xa5, 0xc5, 0xde, 0xff, 0x90, - 0x05, 0x08, 0xfa, 0xd4, 0xf4, 0xb8, 0x06, 0xd0, 0x24, 0x48, 0x65, 0x39, - 0xe3, 0x00, 0xb5, 0x44, 0x20, 0xeb, 0xc1, 0xb9, 0x71, 0x05, 0x75, 0xb7, - 0xf6, 0x52, 0x87, 0x6c, 0xc0, 0xf1, 0x5f, 0x13, 0x69, 0xca, 0x85, 0xe7, - 0x59, 0x0b, 0xac, 0x1e, 0xa0, 0xb1, 0x4a, 0x6b, 0xfb, 0xab, 0xf7, 0x47, - 0x8f, 0x9a, 0xfb, 0x77, 0x58, 0x7a, 0x99, 0x0a, 0x17, 0xa3, 0x15, 0xc9, - 0x68, 0x19, 0x2b, 0xef, 0xee, 0xeb, 0xda, 0xbf, 0x57, 0xfe, 0x94, 0x88, - 0xdc, 0x34, 0x5d, 0xde, 0x96, 0x93, 0x6a, 0x7b, 0x74, 0xbb, 0xff, 0xe8, - 0x6f, 0x39, 0x1a, 0x01, 0xd3, 0x1f, 0xb3, 0xe7, 0x28, 0x7d, 0x0a, 0x6f, - 0x2a, 0x04, 0xa6, 0xa9, 0x88, 0xb8, 0xa9, 0x0a, 0x12, 0xd0, 0xdd, 0xb3, - 0x96, 0x67, 0xfe, 0x3e, 0xef, 0x6c, 0xae, 0xab, 0xc4, 0x30, 0x29, 0x62, - 0x0c, 0x17, 0x88, 0x2a, 0x87, 0xd3, 0x51, 0x39, 0xeb, 0x5c, 0x68, 0xaf, - 0x03, 0x47, 0xe8, 0xfd, 0xf7, 0x0d, 0x61, 0x54, 0x24, 0x21, 0x64, 0xd7, - 0xcc, 0xc1, 0x6b, 0x3f, 0xf2, 0x62, 0x0f, 0x8b, 0xce, 0x12, 0x34, 0x49, - 0x0a, 0xf8, 0x1d, 0x6b, 0xe2, 0x25, 0xd0, 0x23, 0x30, 0x63, 0x35, 0xb4, - 0xc3, 0xae, 0x7b, 0x2b, 0xb5, 0xe8, 0xe3, 0x85, 0xa9, 0x54, 0x32, 0xdf, - 0xce, 0x8b, 0xac, 0x01, 0xaa, 0x8e, 0x82, 0x6e, 0x30, 0xc5, 0x4b, 0x56, - 0xed, 0xea, 0x1d, 0xf5, 0xc5, 0x76, 0x56, 0x63, 0x99, 0x37, 0xa9, 0x21, - 0x8b, 0xea, 0x18, 0xfd, 0xd1, 0xa7, 0xc7, 0x27, 0x66, 0x6e, 0x7a, 0x86, - 0x70, 0xd1, 0xcd, 0x06, 0x80, 0xa6, 0xa0, 0x95, 0xd3, 0x59, 0x21, 0x58, - 0xc1, 0x03, 0x3c, 0x33, 0x07, 0xcf, 0xe4, 0x3a, 0x3c, 0x69, 0x20, 0x35, - 0x58, 0x56, 0x10, 0x94, 0xff, 0x4f, 0x92, 0xe4, 0xd0, 0xcc, 0x04, 0x72, - 0x3c, 0x35, 0x81, 0x5d, 0x31, 0x29, 0x99, 0x4c, 0x52, 0x19, 0x77, 0xa3, - 0x38, 0x2f, 0x58, 0x6e, 0x02, 0xc7, 0x2e, 0xd0, 0x7b, 0x14, 0x76, 0x94, - 0x8c, 0x1e, 0xeb, 0xee, 0xb2, 0x4c, 0x01, 0x50, 0x59, 0xcd, 0x2c, 0x33, - 0x6b, 0x46, 0xf5, 0xa6, 0x2e, 0xa9, 0x68, 0x2b, 0x4e, 0x9d, 0x7d, 0x19, - 0xdb, 0xa0, 0x60, 0xf1, 0xd4, 0x10, 0xc8, 0xa7, 0x18, 0x63, 0x67, 0x26, - 0xf6, 0x31, 0x18, 0x9b, 0xf3, 0x03, 0xec, 0xab, 0x98, 0x2c, 0xed, 0x87, - 0x19, 0x0f, 0x38, 0x85, 0x0e, 0x79, 0xd4, 0xe7, 0xcf, 0x39, 0x32, 0xdf, - 0xee, 0xdd, 0xc7, 0xa0, 0x18, 0x78, 0x4a, 0x6e, 0x93, 0x21, 0xc3, 0x26, - 0x12, 0x0c, 0x6c, 0xe6, 0x16, 0x46, 0x85, 0x7f, 0x76, 0xca, 0x53, 0x8d, - 0xa3, 0xae, 0xa3, 0xd0, 0x31, 0x55, 0x10, 0x32, 0xfe, 0xdf, 0x6d, 0x2b, - 0xf6, 0xf7, 0xba, 0x07, 0x5f, 0xca, 0xf8, 0x95, 0x02, 0xd6, 0xad, 0xc1, - 0x9e, 0x7c, 0xb5, 0xba, 0x1a, 0xfe, 0x64, 0xd1, 0x6a, 0x35, 0x96, 0x43, - 0x61, 0x5d, 0x3d, 0x5a, 0x20, 0x4b, 0x4a, 0x11, 0x39, 0xf5, 0xb3, 0xd1, - 0x81, 0x5f, 0xd0, 0x59, 0xef, 0x10, 0x88, 0x2d, 0x24, 0xe1, 0x2c, 0xd5, - 0x74, 0x5e, 0xf7, 0x6b, 0xd3, 0x5a, 0x16, 0xb8, 0x23, 0x72, 0x4a, 0x8e, - 0x0b, 0xcf, 0x56, 0xc5, 0x41, 0x66, 0x16, 0xb7, 0x90, 0x32, 0xd1, 0xb8, - 0x6e, 0x8f, 0xc6, 0x5b, 0xa4, 0x2d, 0x4a, 0x62, 0xac, 0xb4, 0x7d, 0x87, - 0x0d, 0xc4, 0x4d, 0x4e, 0x56, 0x9f, 0x78, 0x92, 0x41, 0xf4, 0xd0, 0x9d, - 0xf1, 0x5d, 0x73, 0x38, 0xd9, 0xe1, 0xaf, 0xc4, 0xe4, 0x5d, 0x21, 0x6a, - 0x02, 0x38, 0x7d, 0x28, 0xd4, 0x9a, 0xea, 0xc2, 0x8c, 0x70, 0x53, 0x37, - 0x85, 0x97, 0x6f, 0xaa, 0xc3, 0x28, 0x0d, 0xab, 0x4d, 0x02, 0x4b, 0x9d, - 0x1c, 0xca, 0x11, 0x47, 0xf2, 0xf1, 0x97, 0x0f, 0x1a, 0xa9, 0x18, 0xc3, - 0x2e, 0x97, 0xd7, 0xff, 0xe4, 0x28, 0x3a, 0x7c, 0x47, 0x5b, 0xde, 0x35, - 0x01, 0x5f, 0xbe, 0x42, 0x25, 0xfb, 0x72, 0x89, 0x19, 0xfe, 0x52, 0x27, - 0xe9, 0xaf, 0x9e, 0x53, 0x36, 0x7c, 0x0f, 0xe5, 0x66, 0xc9, 0x8a, 0xb8, - 0xcb, 0xd3, 0x6f, 0x3d, 0xe7, 0x61, 0xf7, 0x80, 0x93, 0x8f, 0xac, 0x8f, - 0x8f, 0xf8, 0xce, 0x80, 0xe7, 0x20, 0x3b, 0xc7, 0x00, 0x9e, 0x20, 0x42, - 0x55, 0xd6, 0x0f, 0x87, 0xea, 0xb8, 0xe3, 0xa9, 0x4b, 0xa0, 0xe0, 0xff, - 0x64, 0xaa, 0x8d, 0x14, 0xf1, 0xc6, 0x73, 0x31, 0x88, 0x0c, 0x41, 0xb2, - 0xa7, 0x51, 0xc3, 0x26, 0x39, 0xc7, 0x87, 0xce, 0xc6, 0x76, 0xc8, 0x10, - 0xbd, 0xc2, 0xc1, 0x42, 0xdb, 0x7b, 0x1b, 0x21, 0x03, 0x3b, 0xab, 0x2a, - 0xd5, 0xf7, 0x2c, 0x9f, 0x23, 0x00, 0xf4, 0xd2, 0xd2, 0xdc, 0x0b, 0xcf, - 0xad, 0xa9, 0xd5, 0x04, 0xc2, 0xbc, 0xef, 0xc3, 0xf1, 0xc1, 0xe1, 0xf9, - 0x12, 0xf0, 0x30, 0x3a, 0x37, 0x62, 0x14, 0x70, 0x66, 0x5d, 0x59, 0x98, - 0x86, 0x61, 0xb6, 0xee, 0xcf, 0x32, 0xf8, 0x47, 0x27, 0x36, 0xc8, 0xe3, - 0x4b, 0xbd, 0x44, 0xdd, 0x6b, 0x9f, 0x96, 0x9e, 0xe5, 0xc7, 0x52, 0x3c, - 0x95, 0x20, 0x0c, 0xf0, 0xc6, 0x21, 0x82, 0xa8, 0x16, 0x80, 0x67, 0x31, - 0x33, 0xd8, 0x23, 0x7b, 0xe7, 0x87, 0x7b, 0xcf, 0x04, 0x63, 0xc1, 0xd1, - 0xfc, 0x5d, 0xf6, 0xb1, 0x32, 0x0c, 0x42, 0xc5, 0xa1, 0x12, 0x93, 0xd1, - 0x32, 0x2d, 0xaf, 0x23, 0x9c, 0x68, 0x5c, 0xfe, 0xb0, 0x00, 0x06, 0x21, - 0xa0, 0xd7, 0x92, 0x4e, 0xf7, 0x08, 0x27, 0x26, 0x17, 0x0e, 0x05, 0x8b, - 0x9c, 0x62, 0x64, 0x19, 0xc3, 0xdc, 0xa9, 0x2f, 0x32, 0xf0, 0x91, 0xd0, - 0x86, 0xd6, 0x42, 0xc8, 0x7d, 0x9d, 0x44, 0xc5, 0x1b, 0x93, 0xb3, 0xb6, - 0x7d, 0x10, 0x3b, 0xab, 0x6f, 0x02, 0x4c, 0xe5, 0xf5, 0x37, 0xb4, 0x0c, - 0x8d, 0xec, 0x72, 0x64, 0x22, 0x5d, 0x77, 0x54, 0x0a, 0x62, 0xb4, 0x8d, - 0xae, 0x85, 0xb4, 0x6e, 0x72, 0x0f, 0xdc, 0x2d, 0x6f, 0x5f, 0xa5, 0xf2, - 0xeb, 0x95, 0x9a, 0xf2, 0x4c, 0x2a, 0x8b, 0xa9, 0x8e, 0x68, 0x45, 0x2c, - 0xab, 0x14, 0x71, 0x69, 0x89, 0x9b, 0x23, 0xdb, 0x3b, 0x30, 0x34, 0x9c, - 0xee, 0xef, 0x78, 0x95, 0xf9, 0x1c, 0x2d, 0xce, 0x17, 0xa4, 0x46, 0x9a, - 0x63, 0x4a, 0xaa, 0x42, 0x37, 0x8e, 0xac, 0xe4, 0x58, 0x23, 0xe8, 0x4a, - 0xc4, 0x91, 0x07, 0xad, 0x3a, 0x4e, 0x6f, 0x6b, 0x53, 0xee, 0x6a, 0xc4, - 0x9b, 0xbc, 0x18, 0x86, 0x29, 0x4d, 0x01, 0x3e, 0x7f, 0x2c, 0x79, 0x54, - 0xb5, 0xb1, 0x1a, 0x5a, 0xb9, 0x3d, 0x37, 0x1f, 0x8b, 0x89, 0x58, 0xc4, - 0x45, 0x6b, 0xc0, 0x58, 0x21, 0xc7, 0xaf, 0xa0, 0x1d, 0x11, 0x3b, 0xd3, - 0xf8, 0x1d, 0x31, 0xf2, 0x33, 0x5b, 0x63, 0x54, 0x0c, 0x00, 0xd9, 0x98, - 0x4b, 0x42, 0xd9, 0x4e, 0xd8, 0x11, 0x04, 0x49, 0x67, 0x47, 0x27, 0xff, - 0x8b, 0xe0, 0x04, 0x96, 0x08, 0xbe, 0x46, 0xf2, 0xff, 0x07, 0xa4, 0xe9, - 0x22, 0xbf, 0x4b, 0x44, 0x01, 0x40, 0xfe, 0xf4, 0xe7, 0xe6, 0x8e, 0x95, - 0xb3, 0x99, 0x75, 0xd1, 0xe7, 0x59, 0x89, 0xc9, 0x9d, 0xe4, 0x79, 0x80, - 0x3c, 0x25, 0xd6, 0xf1, 0xa1, 0xc8, 0xca, 0x27, 0x14, 0x56, 0xc4, 0x6b, - 0xc2, 0xda, 0x99, 0x0e, 0x7c, 0xe2, 0xf7, 0x5e, 0x0e, 0x84, 0x37, 0x74, - 0xeb, 0x98, 0x81, 0x07, 0x9c, 0xb5, 0x4a, 0x2e, 0x16, 0x3f, 0xab, 0x3e, - 0x6d, 0x49, 0x89, 0xce, 0x92, 0x27, 0x97, 0x3a, 0xdd, 0x4f, 0xd5, 0x51, - 0xe3, 0x4e, 0x2e, 0x7b, 0x48, 0xaa, 0x17, 0xfb, 0x49, 0xf1, 0x6e, 0xbf, - 0xd5, 0x6b, 0xce, 0xc2, 0x7a, 0x74, 0x53, 0x5c, 0x51, 0xb2, 0x4b, 0xa7, - 0x7e, 0xf3, 0x44, 0xfb, 0xa6, 0x23, 0xf1, 0xe4, 0x0d, 0xe7, 0x7e, 0x27, - 0x58, 0xcc, 0x94, 0x73, 0xbf, 0x93, 0x56, 0xe8, 0x2f, 0x96, 0x97, 0x42, - 0x3a, 0x9b, 0x5f, 0xa7, 0x15, 0x7b, 0x06, 0xe4, 0xb6, 0x0e, 0xb3, 0xfb, - 0x2f, 0xcc, 0xfb, 0x79, 0xcc, 0x97, 0x7c, 0xf6, 0xe5, 0x25, 0xbb, 0x68, - 0x43, 0x87, 0x58, 0xc7, 0xb9, 0x52, 0xd8, 0x39, 0x7d, 0x16, 0x3b, 0x07, - 0x32, 0x23, 0x7d, 0x70, 0x3c, 0xcf, 0x96, 0x35, 0xf0, 0xbe, 0xd9, 0x25, - 0x84, 0x5b, 0x56, 0x1a, 0xeb, 0xf6, 0x8d, 0x9a, 0x03, 0xab, 0x3e, 0xb5, - 0x8a, 0x14, 0xce, 0xd2, 0x0c, 0x78, 0xeb, 0xb9, 0x1e, 0xdb, 0x10, 0x1c, - 0x5c, 0xd4, 0xf5, 0x19, 0xbb, 0x09, 0xd2, 0x88, 0x26, 0x5a, 0xba, 0x28, - 0x0d, 0x04, 0x87, 0xdb, 0xc0, 0x6d, 0x23, 0x2c, 0xfb, 0x97, 0xf8, 0x8b, - 0x3c, 0x3a, 0x29, 0x27, 0xcb, 0x6a, 0x17, 0x68, 0x1c, 0x8f, 0x16, 0x90, - 0x6f, 0x2f, 0x71, 0xea, 0x68, 0xe4, 0xc6, 0xc1, 0xee, 0xf3, 0xb5, 0x4a, - 0xe0, 0xcc, 0x3f, 0xba, 0x8f, 0x98, 0x45, 0xdf, 0x62, 0x5d, 0x9d, 0x29, - 0x65, 0x62, 0x7c, 0x0e, 0x2e, 0x83, 0x37, 0xfb, 0x47, 0x70, 0x06, 0xbc, - 0x70, 0x32, 0x99, 0xd1, 0x42, 0xcb, 0x75, 0x7f, 0x41, 0x46, 0x38, 0x82, - 0x88, 0x6d, 0x0d, 0x30, 0x9a, 0x99, 0xcc, 0x67, 0xbe, 0x60, 0xa5, 0xa4, - 0x6e, 0xc4, 0x0e, 0xb3, 0xfa, 0x0d, 0xa7, 0x9b, 0x22, 0xaa, 0x87, 0xf9, - 0x55, 0x3f, 0xe1, 0x18, 0x9a, 0xbf, 0xf0, 0x37, 0xb3, 0xd2, 0x7c, 0x7f, - 0x61, 0xde, 0x21, 0xc7, 0x0e, 0x03, 0xe5, 0x10, 0x0b, 0x54, 0x71, 0x70, - 0x72, 0x23, 0x77, 0x17, 0xc2, 0xee, 0xc4, 0xff, 0xdf, 0xa2, 0x8c, 0xdd, - 0xad, 0x8c, 0x63, 0xe4, 0x8a, 0xd0, 0x02, 0xa1, 0x38, 0xc4, 0x32, 0x97, - 0x4b, 0x76, 0x97, 0x97, 0xd1, 0xd6, 0xc5, 0x7c, 0x94, 0x3b, 0x6f, 0x97, - 0x3d, 0x0d, 0xb6, 0xd9, 0x78, 0x28, 0xcd, 0x3f, 0x71, 0xca, 0x28, 0x5e, - 0xf7, 0xaa, 0x93, 0xfb, 0xb3, 0xb5, 0x5c, 0x05, 0x92, 0xd2, 0xf2, 0x51, - 0x9e, 0x6d, 0xbb, 0xec, 0x7c, 0x64, 0xec, 0x50, 0x27, 0x08, 0x17, 0x72, - 0xe3, 0xb1, 0x5c, 0xf2, 0x7f, 0x8b, 0x96, 0xea, 0xa1, 0x73, 0x46, 0xa2, - 0x6e, 0x47, 0xff, 0x92, 0x5f, 0xba, 0x8c, 0xd9, 0x96, 0xae, 0xf6, 0x99, - 0x95, 0x96, 0xf1, 0x21, 0x82, 0xf3, 0x9c, 0x59, 0x92, 0x28, 0x38, 0x38, - 0xdf, 0xc1, 0x9a, 0xa3, 0xaf, 0x5f, 0xc5, 0xad, 0xec, 0x66, 0xdf, 0x88, - 0x14, 0x5e, 0x11, 0x30, 0x7d, 0x62, 0xbe, 0x46, 0xd0, 0xfa, 0x84, 0x61, - 0x8e, 0xd5, 0x9a, 0x87, 0x59, 0x2b, 0x32, 0xc1, 0x0d, 0xfa, 0x4c, 0xa6, - 0xd9, 0x5e, 0x09, 0x78, 0x24, 0xf7, 0x72, 0x5a, 0x33, 0x64, 0x07, 0xc0, - 0x71, 0x81, 0xdf, 0x96, 0x6d, 0x36, 0x5f, 0x26, 0xee, 0xa2, 0xc1, 0x81, - 0x75, 0x67, 0xef, 0x99, 0x1b, 0x5f, 0x04, 0x2e, 0x30, 0x57, 0xe3, 0xfe, - 0x9a, 0xf2, 0x3a, 0x94, 0x48, 0xf6, 0x08, 0x62, 0x79, 0x0c, 0x7e, 0xdb, - 0x62, 0xff, 0x0f, 0x79, 0x5a, 0xc6, 0xac, 0x16, 0x20, 0x62, 0xdd, 0xb0, - 0xee, 0x29, 0x28, 0x1d, 0x79, 0xce, 0xb8, 0x44, 0xaa, 0xb4, 0x9c, 0xb2, - 0x54, 0x86, 0x18, 0xda, 0xed, 0x68, 0xff, 0x59, 0xeb, 0x07, 0xca, 0x28, - 0xf1, 0x10, 0x9e, 0xdc, 0x14, 0x55, 0x4f, 0x17, 0x62, 0x81, 0xcc, 0xbe, - 0xd1, 0xf5, 0x39, 0xe3, 0xc5, 0x75, 0x55, 0x3b, 0x06, 0x6b, 0x98, 0x9f, - 0x9d, 0x48, 0x4d, 0xa3, 0x52, 0x96, 0x64, 0x76, 0xa6, 0x16, 0x91, 0x04, - 0x02, 0x9b, 0x38, 0x75, 0x41, 0x09, 0xa3, 0xe9, 0xab, 0xf0, 0x9a, 0xb2, - 0x14, 0xb7, 0x8d, 0x7d, 0xab, 0x58, 0xbd, 0xaa, 0xe8, 0x69, 0x45, 0x93, - 0x06, 0xe9, 0x91, 0xd1, 0x03, 0x60, 0xc5, 0x32, 0x35, 0x95, 0xd8, 0xf8, - 0x82, 0x19, 0xef, 0x91, 0x2e, 0xc2, 0xbb, 0x91, 0x79, 0x6f, 0x80, 0x1e, - 0x60, 0x4b, 0x08, 0x9f, 0xe8, 0x1e, 0x47, 0x56, 0xc8, 0x40, 0xc3, 0x12, - 0x1a, 0x67, 0x17, 0x36, 0x3c, 0xc8, 0x46, 0xd0, 0x2c, 0xe5, 0xe6, 0x43, - 0x4f, 0xa7, 0x4a, 0x1d, 0x32, 0xfa, 0x91, 0x01, 0x6d, 0xb9, 0xab, 0x26, - 0x22, 0x9e, 0xd9, 0xe8, 0x7e, 0xa2, 0xff, 0xd2, 0xb8, 0xe3, 0x30, 0x40, - 0x80, 0xc4, 0x48, 0xf3, 0xcd, 0x45, 0xfe, 0x72, 0x6e, 0x6b, 0x56, 0xfe, - 0x88, 0x22, 0x8d, 0xf2, 0x7f, 0xe3, 0x7d, 0xb8, 0x83, 0x53, 0xa7, 0x42, - 0x54, 0xfc, 0x1e, 0x1d, 0xb5, 0xba, 0x2e, 0x70, 0xb4, 0x93, 0x41, 0x30, - 0x3d, 0x4c, 0x05, 0x36, 0x58, 0x1f, 0x18, 0x14, 0x71, 0xc6, 0xdd, 0x98, - 0x90, 0x4d, 0x97, 0xad, 0x02, 0xff, 0x2a, 0x61, 0xae, 0x82, 0xa1, 0xb0, - 0xf2, 0xe1, 0x74, 0x15, 0x07, 0x79, 0x5d, 0xb8, 0x14, 0x52, 0xa5, 0x48, - 0xed, 0xc0, 0xfc, 0x5b, 0x91, 0x74, 0xb9, 0xff, 0xb6, 0xc9, 0x3f, 0xd9, - 0xb2, 0xbf, 0xb1, 0x66, 0x91, 0xc8, 0x0a, 0xaf, 0x48, 0x98, 0x25, 0x8a, - 0x07, 0xab, 0x16, 0x97, 0xfc, 0xdf, 0xc8, 0xcc, 0x67, 0xe0, 0x9f, 0x81, - 0x18, 0xcb, 0x8a, 0x5e, 0x6c, 0xa2, 0xc8, 0x01, 0xbe, 0x3f, 0xe4, 0x84, - 0xb8, 0x70, 0x70, 0xc2, 0xee, 0x43, 0xfc, 0xb7, 0xb7, 0xc9, 0x43, 0x78, - 0xf2, 0x87, 0x37, 0xbd, 0xdb, 0xe7, 0x96, 0xda, 0x6d, 0x49, 0xef, 0x01, - 0xc0, 0xcd, 0xdb, 0x03, 0x4f, 0x77, 0xf6, 0xdb, 0xc0, 0x8f, 0x0a, 0x1d, - 0x3f, 0xd8, 0x60, 0x64, 0x6d, 0x56, 0x52, 0xa2, 0x50, 0x76, 0x35, 0x32, - 0x8b, 0x76, 0x77, 0xad, 0x69, 0xa7, 0x79, 0x45, 0x71, 0xb9, 0x9c, 0x73, - 0xd5, 0xb6, 0x35, 0x2e, 0x51, 0x6d, 0x47, 0x8a, 0x11, 0xfd, 0xf6, 0x5b, - 0x07, 0xd9, 0x7e, 0xf8, 0xb0, 0x2e, 0x5d, 0xac, 0xdf, 0xa5, 0x8a, 0x1e, - 0xae, 0x61, 0xcf, 0xf4, 0x1c, 0x73, 0x95, 0x06, 0x69, 0x5e, 0xe7, 0xfd, - 0x52, 0x91, 0xec, 0xba, 0x8c, 0x38, 0x91, 0xea, 0x94, 0xf4, 0x0b, 0x7f, - 0xd8, 0xce, 0xbf, 0x76, 0xca, 0xf2, 0xc8, 0x02, 0x02, 0xde, 0x99, 0x1a, - 0xa4, 0x80, 0x24, 0x3e, 0x60, 0xd1, 0x76, 0xf5, 0xac, 0x0d, 0xc3, 0x7f, - 0x2b, 0xce, 0x3e, 0xf2, 0x33, 0x87, 0x77, 0xc2, 0x08, 0xba, 0x55, 0xbb, - 0x26, 0x12, 0x20, 0xa1, 0xde, 0xf0, 0x83, 0xe1, 0x48, 0xc5, 0x70, 0x49, - 0x29, 0x3b, 0x19, 0xda, 0xd1, 0x46, 0x60, 0x27, 0x2d, 0x15, 0x85, 0xd5, - 0x62, 0x94, 0x1d, 0x8f, 0x60, 0x7e, 0x56, 0xb9, 0x43, 0x92, 0xc8, 0x1a, - 0x4c, 0xca, 0x13, 0x53, 0x57, 0xb2, 0xb4, 0xb8, 0x4f, 0xa7, 0x5f, 0x4f, - 0x41, 0x8e, 0xcf, 0x44, 0x60, 0x05, 0x5f, 0x40, 0x60, 0xee, 0x67, 0x0b, - 0x67, 0xa1, 0xff, 0x3f, 0x63, 0x3b, 0x90, 0x56, 0x9d, 0x73, 0x27, 0xd7, - 0xd2, 0x64, 0xae, 0x38, 0x33, 0x58, 0xc0, 0xd6, 0x24, 0x7c, 0x99, 0xe9, - 0xe9, 0x6f, 0x7e, 0xdb, 0x35, 0x10, 0x94, 0xe9, 0xb7, 0x98, 0x26, 0xec, - 0xfc, 0x23, 0xcb, 0xc8, 0x21, 0x68, 0xe9, 0x9b, 0xdb, 0x2d, 0x08, 0x7f, - 0x3b, 0x33, 0xa7, 0xc9, 0x98, 0x87, 0x72, 0x3d, 0xfe, 0xfe, 0x67, 0x3f, - 0xee, 0x8b, 0xec, 0x65, 0x89, 0x38, 0xab, 0x4d, 0xfb, 0x63, 0xd0, 0x69, - 0xa4, 0x1e, 0x68, 0xa2, 0xc3, 0x41, 0xfd, 0x0e, 0x0a, 0xd1, 0x71, 0xd8, - 0xd7, 0xc9, 0xa0, 0x16, 0x7b, 0xa0, 0xbb, 0x83, 0x22, 0x8d, 0x70, 0xbb, - 0x1c, 0xf5, 0xcf, 0xbe, 0xb0, 0xf9, 0x2b, 0xfd, 0x7d, 0x4c, 0xb9, 0xd8, - 0x09, 0x42, 0x46, 0x33, 0x21, 0x96, 0x24, 0x51, 0xf8, 0xdf, 0x85, 0x01, - 0xf7, 0x88, 0xaa, 0xb2, 0xa7, 0xc8, 0x1c, 0x2b, 0xa9, 0x76, 0x6b, 0x91, - 0x61, 0xfd, 0x5b, 0x87, 0xc0, 0x92, 0xde, 0x3e, 0x35, 0x99, 0x1b, 0x5a, - 0xf3, 0x17, 0x7e, 0x1a, 0x6d, 0xd2, 0x78, 0x32, 0x13, 0x96, 0x2d, 0xbe, - 0x42, 0x06, 0xee, 0x4b, 0x50, 0x8f, 0xdf, 0x1e, 0xcb, 0x06, 0x35, 0x9f, - 0xf9, 0xbc, 0x42, 0xe2, 0x5d, 0xc8, 0xbc, 0xa1, 0x89, 0x75, 0x5d, 0xe1, - 0xdc, 0xbe, 0x4c, 0x6f, 0xfa, 0x77, 0xd5, 0x68, 0xf0, 0xde, 0xdd, 0xc7, - 0xae, 0x93, 0x16, 0x1f, 0xff, 0x47, 0xec, 0xb5, 0x0d, 0x62, 0xc2, 0xf6, - 0xbc, 0xed, 0xd5, 0x82, 0x7d, 0x23, 0x76, 0xf3, 0xa1, 0x63, 0xac, 0x68, - 0x36, 0x2d, 0xe6, 0x02, 0x1c, 0x26, 0x96, 0xee, 0x2a, 0x11, 0xe3, 0x24, - 0x6a, 0x5c, 0xf9, 0xca, 0x7f, 0x01, 0xcb, 0x37, 0x0b, 0x94, 0x99, 0xfe, - 0x04, 0xef, 0x4d, 0x3e, 0x3d, 0x3c, 0x0d, 0x27, 0x0a, 0xbd, 0x47, 0xa5, - 0xa0, 0x9b, 0x21, 0xfe, 0x79, 0xa9, 0xd2, 0x50, 0x25, 0x1f, 0x1b, 0xc6, - 0x52, 0x14, 0xa9, 0x3a, 0xa1, 0x0c, 0xcd, 0x61, 0xe8, 0x1b, 0xbd, 0x5c, - 0x76, 0x08, 0x5f, 0xdf, 0x58, 0xe3, 0x2c, 0x5c, 0x48, 0x22, 0xb5, 0x73, - 0x8a, 0xcc, 0x79, 0x52, 0xcd, 0xd2, 0x23, 0x69, 0xce, 0x53, 0xff, 0xef, - 0x95, 0xde, 0x6c, 0xe0, 0xe3, 0x14, 0xfa, 0x26, 0xb2, 0x6c, 0x5e, 0xb3, - 0x3d, 0xae, 0x4a, 0xff, 0x64, 0xc3, 0xdb, 0x7c, 0xf3, 0xb6, 0x67, 0xff, - 0xed, 0x13, 0x93, 0x6e, 0xd7, 0xf7, 0x4e, 0x7b, 0x96, 0x80, 0xa7, 0xcc, - 0x14, 0xea, 0xb1, 0xd0, 0xe1, 0x8b, 0x64, 0x5c, 0xed, 0x4a, 0x32, 0x9a, - 0x86, 0x79, 0xf3, 0xb2, 0x30, 0x95, 0xe6, 0x9a, 0xc9, 0x8a, 0x4d, 0x69, - 0xd4, 0xf3, 0x1a, 0x5a, 0x87, 0xb3, 0x7d, 0xc2, 0xa3, 0x97, 0x2b, 0x26, - 0x8b, 0xe6, 0xe1, 0xf7, 0x55, 0xd2, 0x82, 0xa2, 0x4b, 0xd4, 0x7a, 0x4b, - 0x98, 0xdd, 0x59, 0x8d, 0x6a, 0x76, 0xe2, 0x33, 0x93, 0x86, 0x6b, 0x4b, - 0x61, 0xd4, 0x5e, 0x1b, 0x96, 0xb7, 0xd5, 0xbb, 0x4b, 0x67, 0x20, 0x8f, - 0xdb, 0x9f, 0x01, 0xc1, 0x5c, 0x2a, 0x53, 0xf6, 0x67, 0x1f, 0xd9, 0x16, - 0x43, 0x33, 0xd2, 0xca, 0xb9, 0x76, 0xe8, 0x88, 0x63, 0xe2, 0xa5, 0x28, - 0xc8, 0x0d, 0x06, 0xc1, 0xd1, 0x54, 0x71, 0x22, 0x24, 0x98, 0xb5, 0xab, - 0xc6, 0x55, 0xc5, 0x19, 0x9b, 0xa6, 0x9d, 0x31, 0x8c, 0xd6, 0xc3, 0x3e, - 0x6e, 0x51, 0x26, 0x3b, 0xde, 0x7f, 0xcc, 0x7c, 0x98, 0x0d, 0xb4, 0xa1, - 0xf6, 0x63, 0x37, 0xfa, 0x35, 0xc5, 0x2a, 0xd1, 0x25, 0xe1, 0x85, 0xda, - 0xc9, 0xbc, 0xe0, 0x9d, 0x08, 0xf4, 0x70, 0xec, 0xb4, 0x6a, 0x66, 0xa5, - 0xd3, 0xf1, 0xba, 0x5a, 0x48, 0x6d, 0xa5, 0xf2, 0x0e, 0x1c, 0x68, 0x12, - 0x79, 0xb0, 0xb4, 0x99, 0xda, 0xa5, 0x19, 0xa6, 0xc5, 0x8f, 0x69, 0x60, - 0xd2, 0xca, 0xa1, 0x24, 0x7e, 0x03, 0xcd, 0x3d, 0x12, 0x2c, 0xe2, 0x9a, - 0x2a, 0xb0, 0x21, 0xda, 0xa2, 0xd7, 0x30, 0x6b, 0x47, 0xf0, 0x90, 0xcf, - 0x4b, 0x91, 0x33, 0x26, 0xb3, 0xeb, 0x2b, 0x9b, 0x76, 0xdb, 0xf6, 0x45, - 0xcd, 0x43, 0xe3, 0x70, 0x46, 0x89, 0x6a, 0xd4, 0x8a, 0x23, 0x25, 0x92, - 0x01, 0x70, 0xea, 0xcf, 0xca, 0xec, 0xe5, 0xb1, 0x6b, 0x55, 0x10, 0xd8, - 0xf2, 0x30, 0xbc, 0x32, 0xe4, 0x57, 0xfa, 0xc1, 0x81, 0x5c, 0xea, 0x67, - 0x13, 0xaa, 0x76, 0x26, 0x0b, 0xc5, 0xc7, 0x85, 0x9f, 0xb3, 0x40, 0xbc, - 0xfe, 0x64, 0xe2, 0xa6, 0xdc, 0x62, 0x11, 0xef, 0xd3, 0x42, 0x33, 0xbd, - 0x6e, 0x0d, 0x94, 0xdd, 0x99, 0xfe, 0x1a, 0xe3, 0x18, 0xe0, 0x55, 0xa3, - 0x4c, 0xcc, 0xce, 0x8f, 0xee, 0x5f, 0xd8, 0x43, 0xa6, 0xbe, 0x37, 0x4e, - 0xc5, 0x31, 0xfc, 0x3f, 0x80, 0x29, 0x33, 0x26, 0x08, 0x93, 0xb4, 0x6b, - 0xb0, 0xd3, 0xbb, 0xbc, 0x01, 0x17, 0x6a, 0x59, 0x0c, 0xca, 0x65, 0xaa, - 0x07, 0xae, 0xfc, 0x0a, 0xf4, 0x93, 0xcb, 0x4b, 0x7f, 0x29, 0xbc, 0xa8, - 0x3c, 0xc8, 0xeb, 0x5c, 0x44, 0xf5, 0xea, 0x06, 0xe2, 0x8e, 0x2b, 0xe2, - 0xd9, 0x48, 0x7e, 0x07, 0x89, 0xbc, 0x84, 0x09, 0xd0, 0x68, 0x33, 0x34, - 0x18, 0x6c, 0xa5, 0x50, 0x2c, 0xa4, 0xcc, 0xda, 0xda, 0xeb, 0x3f, 0xfa, - 0x76, 0x5c, 0x7f, 0x5f, 0xeb, 0x8c, 0x5a, 0xd6, 0x16, 0x0b, 0xf6, 0x85, - 0x70, 0x40, 0x47, 0x8f, 0xa3, 0x77, 0xdb, 0xbf, 0xb3, 0xbc, 0xb0, 0xa9, - 0xbf, 0xbe, 0x1d, 0x4f, 0x2f, 0x96, 0x9d, 0x87, 0xcc, 0x6d, 0x2e, 0xa4, - 0x84, 0xfa, 0x89, 0xb9, 0x05, 0xc5, 0x6e, 0x60, 0x00, 0xaa, 0x82, 0x25, - 0x0e, 0xa7, 0x61, 0xa7, 0xc9, 0x55, 0x99, 0xb3, 0x8e, 0x99, 0x41, 0xc8, - 0x1a, 0x7e, 0x1d, 0xd6, 0x5f, 0x4c, 0x22, 0xfb, 0x82, 0x2b, 0xaf, 0x7d, - 0x3b, 0x85, 0x18, 0xfe, 0x23, 0x3c, 0x0c, 0x8c, 0x95, 0xac, 0xc1, 0x20, - 0x2c, 0x37, 0x77, 0x32, 0xf0, 0x22, 0xbd, 0x5f, 0x93, 0xa2, 0xe6, 0x87, - 0x4d, 0x40, 0xd7, 0xd1, 0x45, 0x48, 0x77, 0xea, 0xc7, 0x8d, 0xc1, 0x23, - 0x40, 0xcd, 0x46, 0x69, 0xf6, 0x08, 0x85, 0x1a, 0x75, 0xa2, 0x7c, 0x73, - 0xf7, 0xfa, 0xe3, 0x18, 0x88, 0xb9, 0xde, 0x8d, 0x3c, 0x65, 0xdb, 0x3f, - 0xd4, 0x95, 0x91, 0x79, 0x6c, 0x9c, 0xaa, 0xa0, 0x0f, 0xf0, 0x9f, 0x6e, - 0xe7, 0x9b, 0xf9, 0x93, 0x83, 0xa1, 0x00, 0x83, 0xa9, 0x1f, 0x52, 0xc0, - 0xce, 0x89, 0xab, 0x7a, 0x88, 0x93, 0x72, 0x8c, 0xa7, 0xc4, 0xbb, 0x7d, - 0xcb, 0xc0, 0xd7, 0xa4, 0x15, 0x2a, 0x70, 0x16, 0x30, 0x27, 0xac, 0xf8, - 0x61, 0xbd, 0x87, 0x00, 0xc9, 0x29, 0x67, 0xb8, 0x27, 0xcb, 0xbc, 0xae, - 0x3f, 0xd7, 0xd8, 0xd3, 0x1f, 0x36, 0x07, 0x65, 0xea, 0x69, 0x7d, 0x98, - 0xd9, 0x3b, 0xd6, 0xf5, 0xff, 0x63, 0x32, 0xe6, 0xf4, 0x72, 0x1f, 0x18, - 0x1f, 0x61, 0xb0, 0x58, 0x54, 0xcc, 0x76, 0xbc, 0xb6, 0xc3, 0xfb, 0x43, - 0xd3, 0x79, 0x34, 0x55, 0x7f, 0x44, 0x59, 0x3a, 0x82, 0xdc, 0x7f, 0x09, - 0x0d, 0x8c, 0xf9, 0x86, 0x11, 0x64, 0x41, 0x9a, 0xae, 0xd4, 0x16, 0x47, - 0xfc, 0xfe, 0x0a, 0x0f, 0x94, 0x78, 0x9f, 0x8e, 0x73, 0xcc, 0xfc, 0x25, - 0x30, 0x08, 0x18, 0x3b, 0xcd, 0x2c, 0x9b, 0xe6, 0x27, 0x57, 0x55, 0xe4, - 0x37, 0x73, 0x61, 0x2e, 0x8f, 0x07, 0x27, 0xc8, 0x35, 0x72, 0x8d, 0x12, - 0x88, 0x52, 0x67, 0xef, 0xc2, 0xe1, 0x8e, 0x18, 0x8b, 0xfd, 0x91, 0x9e, - 0xaa, 0x32, 0x71, 0x02, 0x71, 0x5e, 0xbd, 0x71, 0x29, 0xc9, 0xb0, 0xb3, - 0x48, 0x1a, 0x7b, 0x41, 0xd9, 0x78, 0x1e, 0x31, 0x97, 0xe9, 0xfb, 0x34, - 0xb0, 0xa7, 0x82, 0x28, 0xcd, 0x6f, 0x2c, 0x7b, 0x5a, 0xcb, 0x2d, 0xed, - 0xd1, 0x95, 0xbe, 0xe7, 0x1f, 0xb3, 0xc0, 0xaa, 0xce, 0x11, 0xd7, 0x59, - 0xe7, 0x8e, 0x52, 0x8d, 0x07, 0x2f, 0xd5, 0xc5, 0x63, 0x65, 0xae, 0x93, - 0x06, 0x4d, 0xa8, 0xe3, 0xb4, 0x80, 0xc6, 0xa8, 0x2d, 0x25, 0x90, 0xa3, - 0x3a, 0x48, 0x5c, 0xde, 0x43, 0x9e, 0xe2, 0x9f, 0x4d, 0x19, 0x7b, 0xf2, - 0xc3, 0xae, 0x84, 0xc3, 0xdd, 0xce, 0x5e, 0x9f, 0x9f, 0x61, 0x99, 0x70, - 0x4f, 0xee, 0x08, 0xd5, 0xa9, 0x52, 0x19, 0x71, 0xd1, 0x3d, 0x52, 0xbd, - 0x39, 0xbe, 0xbf, 0x29, 0x30, 0x27, 0x4c, 0x60, 0x57, 0xcf, 0x1f, 0x4e, - 0xa6, 0xae, 0x21, 0xee, 0x44, 0x4b, 0xf7, 0xa2, 0x8a, 0x66, 0xa0, 0xfc, - 0x96, 0xa0, 0x82, 0x9c, 0xa5, 0xab, 0xf6, 0x4c, 0xba, 0x2d, 0x72, 0xd5, - 0xad, 0x03, 0x7d, 0x70, 0x89, 0xf1, 0xb3, 0x11, 0xb4, 0xf3, 0xdd, 0x28, - 0xf0, 0x23, 0xf0, 0x22, 0x3d, 0x91, 0x3b, 0x34, 0x1a, 0xd5, 0xa0, 0x11, - 0x2a, 0xe7, 0xdc, 0x62, 0xc9, 0x39, 0x0a, 0x27, 0x93, 0x4b, 0x81, 0x62, - 0x31, 0xe0, 0xb7, 0x5f, 0xa7, 0xed, 0x5a, 0xd3, 0xa5, 0xfb, 0x87, 0x1e, - 0x48, 0x3c, 0x5f, 0x69, 0xa6, 0x61, 0x31, 0x77, 0x59, 0x65, 0x9e, 0x3a, - 0x39, 0x11, 0x1c, 0x70, 0xc5, 0xbe, 0x8d, 0xd9, 0xf1, 0xdc, 0x31, 0x97, - 0xb2, 0x72, 0x6a, 0x78, 0xdd, 0x7d, 0x50, 0x54, 0x10, 0x70, 0x66, 0x6c, - 0xc1, 0x41, 0x89, 0x9d, 0x7e, 0xbd, 0x15, 0x52, 0x4a, 0x6e, 0x80, 0x06, - 0x13, 0x08, 0x81, 0xf1, 0x7a, 0xaf, 0x40, 0xfb, 0x22, 0xa5, 0x45, 0x73, - 0xec, 0xbc, 0x37, 0x8e, 0xb3, 0xfb, 0x1d, 0x7e, 0x5d, 0xa6, 0xe4, 0x9e, - 0xa1, 0x43, 0xf9, 0xa3, 0xad, 0x19, 0x86, 0xc3, 0x2a, 0xcd, 0xb8, 0xcd, - 0x2d, 0xcc, 0xd7, 0xa1, 0xf3, 0x8c, 0xb2, 0x34, 0x7e, 0x0a, 0xdb, 0x57, - 0x0e, 0x33, 0x41, 0x51, 0xcf, 0x75, 0xea, 0x52, 0x74, 0x5c, 0xa7, 0x08, - 0xb4, 0xef, 0x4a, 0xb7, 0xb2, 0x3b, 0x81, 0x97, 0xe2, 0x3a, 0x29, 0x3f, - 0x71, 0xd1, 0xb0, 0x46, 0x83, 0x3e, 0xcf, 0x91, 0x2b, 0xc0, 0xe4, 0x9e, - 0xa8, 0x66, 0x3f, 0xd6, 0x8f, 0x67, 0x26, 0x8e, 0x28, 0xca, 0x79, 0x04, - 0x2e, 0xe2, 0x1f, 0xd4, 0x43, 0x37, 0xbb, 0xe1, 0xdb, 0xe5, 0x62, 0xeb, - 0x29, 0x02, 0xdf, 0xe2, 0xf7, 0x73, 0x69, 0x74, 0xbc, 0xbc, 0x98, 0x22, - 0x28, 0x56, 0x45, 0xc5, 0xe7, 0xf2, 0xec, 0x96, 0x61, 0xa9, 0xf3, 0x4b, - 0x43, 0x7b, 0xb2, 0x41, 0x2d, 0xe7, 0xc7, 0x88, 0xf5, 0x17, 0x1a, 0xf4, - 0xbe, 0x0f, 0x49, 0xc6, 0x67, 0xd4, 0xd9, 0xe9, 0x55, 0x40, 0x3a, 0x4b, - 0xe8, 0xa8, 0x56, 0x53, 0x31, 0xf6, 0xe8, 0xaa, 0xfc, 0xab, 0x39, 0xe0, - 0xe6, 0xb1, 0xd7, 0x89, 0xa1, 0x2b, 0xf2, 0xd5, 0x59, 0x3f, 0x67, 0x90, - 0x65, 0x2d, 0xa3, 0xb7, 0x39, 0x81, 0xb3, 0x1e, 0xfb, 0x7c, 0x25, 0x76, - 0xa9, 0x1e, 0x05, 0x38, 0x0c, 0xd0, 0xcd, 0x20, 0x7f, 0x31, 0x76, 0xb1, - 0xfb, 0xba, 0xa1, 0x3b, 0xd7, 0x2c, 0x2a, 0x61, 0x2e, 0x4a, 0xb3, 0x24, - 0x70, 0x35, 0xb1, 0x88, 0x87, 0xaf, 0x37, 0xbd, 0x29, 0xf0, 0xcb, 0x22, - 0xa6, 0xcf, 0x0b, 0xc8, 0x31, 0x09, 0x51, 0xf8, 0x8f, 0x22, 0x6c, 0xdd, - 0x57, 0x51, 0xf2, 0x43, 0xf7, 0xba, 0x9c, 0xcb, 0x25, 0xde, 0x6e, 0x9c, - 0xc1, 0xac, 0x4a, 0x01, 0xaf, 0x87, 0x8b, 0x80, 0x65, 0xb4, 0x75, 0x2d, - 0xd8, 0x68, 0xd4, 0x03, 0x88, 0x13, 0x37, 0xfe, 0x29, 0xa2, 0x6c, 0x03, - 0xe2, 0xe6, 0xe9, 0x19, 0xc4, 0x85, 0xb6, 0x66, 0xf9, 0x7b, 0xe5, 0x63, - 0x2e, 0x8c, 0xd3, 0x7c, 0x70, 0x93, 0x15, 0x74, 0x98, 0x50, 0xcb, 0x5f, - 0x73, 0xcb, 0x05, 0xa5, 0xa0, 0x56, 0x40, 0x22, 0x57, 0x04, 0xb2, 0xa9, - 0xfb, 0xab, 0xfb, 0x40, 0x2a, 0x91, 0x6b, 0x48, 0x84, 0x77, 0x14, 0xe9, - 0x15, 0x3a, 0x9f, 0xed, 0xf9, 0x3d, 0xcc, 0x34, 0x8a, 0x56, 0x42, 0xea, - 0xa9, 0x4c, 0x9b, 0xa0, 0xb4, 0x75, 0x13, 0x22, 0xca, 0x8c, 0x6e, 0x80, - 0xd5, 0xf2, 0xfe, 0x9a, 0xce, 0x3c, 0x49, 0x7b, 0x6e, 0x61, 0xc0, 0x56, - 0xe5, 0x5d, 0x4f, 0xb7, 0x5e, 0x7d, 0x56, 0x5d, 0x85, 0xd9, 0xe8, 0x03, - 0xdb, 0x30, 0x1f, 0x22, 0x38, 0xdb, 0xff, 0x08, 0xae, 0xf1, 0x9c, 0xf7, - 0x47, 0x96, 0xe0, 0x89, 0x83, 0xea, 0x03, 0xc0, 0x1d, 0xb5, 0xbb, 0xbe, - 0x79, 0x76, 0x9b, 0x2f, 0xda, 0xe7, 0x65, 0x1f, 0xba, 0x02, 0x14, 0xae, - 0x2e, 0xf2, 0x09, 0x6b, 0x40, 0x51, 0x08, 0xc2, 0xb7, 0x5c, 0xa5, 0xf1, - 0xf4, 0x55, 0xd8, 0x12, 0xa4, 0xeb, 0x97, 0xc1, 0x33, 0x0d, 0xe4, 0x83, - 0x5f, 0xf3, 0xd6, 0xdb, 0xf9, 0xe7, 0x8c, 0x0b, 0x6f, 0xb6, 0x1d, 0x12, - 0x10, 0xaf, 0x4d, 0x41, 0x47, 0x50, 0x6d, 0x72, 0xf1, 0x03, 0xe6, 0x8e, - 0xe5, 0xbf, 0xb5, 0xe1, 0x34, 0xda, 0x8b, 0x52, 0x17, 0xcb, 0xcf, 0x1c, - 0xb6, 0x79, 0x32, 0x15, 0x82, 0x67, 0x47, 0x21, 0xa4, 0xc5, 0xc4, 0xab, - 0x74, 0xdb, 0xae, 0x95, 0xbd, 0xbf, 0x59, 0x68, 0x4f, 0x4b, 0x82, 0x51, - 0xba, 0xf2, 0x29, 0x78, 0x9f, 0xaa, 0x42, 0x67, 0x90, 0xcb, 0x83, 0x8b, - 0xeb, 0x24, 0x76, 0x30, 0x9a, 0xef, 0xe9, 0x95, 0xd2, 0x1c, 0xf6, 0x25, - 0xa2, 0x09, 0x8f, 0x2c, 0x04, 0xdc, 0x77, 0xff, 0x42, 0xe1, 0x7a, 0xca, - 0x98, 0x7b, 0xc0, 0xa1, 0x63, 0x3e, 0x59, 0x7c, 0xf7, 0xd4, 0xb2, 0x38, - 0x0a, 0x2b, 0x8f, 0x79, 0x96, 0x5f, 0xc0, 0x34, 0x36, 0xb9, 0xea, 0xc5, - 0xf7, 0x75, 0x1f, 0x5a, 0x72, 0x65, 0x67, 0x63, 0x0a, 0xd9, 0xb5, 0xe8, - 0x72, 0xc0, 0xf9, 0x06, 0xed, 0xc5, 0xa1, 0x8f, 0x62, 0x0e, 0x08, 0x62, - 0x70, 0x56, 0xf9, 0x70, 0xab, 0x56, 0xe1, 0x86, 0x9f, 0xb0, 0x9d, 0x2a, - 0x8a, 0x85, 0xe5, 0xd9, 0xe9, 0xe4, 0x87, 0xa6, 0x7f, 0x6e, 0xd4, 0xda, - 0x74, 0xc8, 0x43, 0x5a, 0x37, 0xa0, 0xbc, 0x93, 0x4c, 0x32, 0xc4, 0x81, - 0xf5, 0x88, 0x49, 0xf2, 0x13, 0x5f, 0x57, 0x59, 0xc1, 0xc9, 0x95, 0xa1, - 0x19, 0x4d, 0x06, 0xb2, 0x4c, 0x3d, 0x54, 0x41, 0x96, 0x59, 0xbf, 0xf3, - 0x67, 0xb8, 0xb3, 0x49, 0x79, 0x89, 0x33, 0x21, 0x94, 0x3a, 0xf1, 0x3c, - 0x94, 0x1e, 0xa1, 0xf9, 0x3a, 0x07, 0x66, 0xdd, 0xf1, 0x9b, 0xf9, 0x9e, - 0x33, 0xce, 0xae, 0xb7, 0x8b, 0x59, 0x1a, 0x71, 0x7f, 0x8f, 0xc7, 0x8c, - 0x76, 0x79, 0x70, 0xe9, 0x76, 0xff, 0xa7, 0x42, 0x2d, 0xd9, 0x70, 0xa7, - 0x42, 0x3c, 0xe0, 0xcf, 0xe5, 0x4f, 0xd8, 0xdf, 0x0e, 0xeb, 0x7c, 0x65, - 0x38, 0x67, 0xdb, 0x3e, 0xdc, 0x00, 0x25, 0xe1, 0xcd, 0x4e, 0x48, 0x6c, - 0x19, 0x46, 0xb4, 0x57, 0xf0, 0xad, 0x0b, 0xd2, 0x31, 0x9e, 0x3f, 0xb9, - 0x54, 0xdb, 0xdc, 0xd4, 0xae, 0x7f, 0x55, 0xee, 0xb0, 0x9b, 0x42, 0xa8, - 0x36, 0xac, 0x90, 0xcb, 0xbb, 0x78, 0x49, 0xb0, 0xdf, 0x8b, 0x5a, 0xf5, - 0x59, 0x00, 0x18, 0x57, 0x38, 0x79, 0xaf, 0xb2, 0x78, 0x68, 0x1c, 0x32, - 0x44, 0xa0, 0xa1, 0x2a, 0xc9, 0x9e, 0x3c, 0xe2, 0x83, 0x9c, 0xe6, 0x2f, - 0x67, 0x32, 0x64, 0xe4, 0x21, 0xed, 0x37, 0xd8, 0x6d, 0x74, 0x1e, 0xfc, - 0x33, 0xc9, 0x6e, 0x9e, 0x3d, 0x09, 0xeb, 0x93, 0x68, 0xeb, 0xd4, 0xde, - 0x39, 0x8d, 0x7b, 0xd7, 0xf3, 0x37, 0xd8, 0xd9, 0x0f, 0xb5, 0x23, 0x96, - 0x5f, 0x3c, 0x2b, 0x14, 0x8d, 0xbb, 0x51, 0x1f, 0x7f, 0xba, 0xb6, 0x13, - 0x54, 0x77, 0xb3, 0xcb, 0x18, 0xa0, 0xdc, 0xa4, 0x26, 0x16, 0x84, 0xbe, - 0xa8, 0x64, 0x13, 0x4f, 0x2e, 0xfe, 0xd4, 0x12, 0x36, 0x97, 0xf3, 0xb9, - 0xe0, 0x50, 0xe1, 0xf2, 0xbd, 0xdb, 0x29, 0xeb, 0x8d, 0x81, 0x4b, 0x40, - 0xfb, 0x56, 0x39, 0x65, 0x8a, 0x20, 0x7e, 0x64, 0x47, 0x5d, 0x8d, 0x60, - 0xfb, 0xd4, 0x0b, 0xa7, 0x7b, 0xe7, 0x25, 0xb4, 0x0b, 0xef, 0x6d, 0xbc, - 0x4b, 0xdb, 0xa2, 0xb4, 0x4e, 0x4f, 0x5d, 0x0f, 0xe4, 0xe0, 0xc1, 0xdb, - 0x28, 0x5e, 0x63, 0x75, 0xb0, 0x37, 0x43, 0x96, 0x1d, 0x9f, 0x4e, 0xf0, - 0x09, 0xe1, 0x14, 0x9f, 0xab, 0x12, 0xfd, 0x4c, 0x26, 0x23, 0xb3, 0xf3, - 0xe9, 0xfd, 0x34, 0x6a, 0x87, 0xed, 0x6d, 0x43, 0x47, 0x31, 0x59, 0x8d, - 0xa4, 0xfc, 0x85, 0xe6, 0x25, 0xf1, 0xf1, 0xfd, 0xae, 0xe7, 0xd7, 0x3a, - 0x1d, 0x86, 0x1d, 0x45, 0xef, 0x18, 0x82, 0x2d, 0xc7, 0xb1, 0xdf, 0xe1, - 0x11, 0xec, 0xe5, 0x55, 0xbe, 0xb0, 0x63, 0xba, 0xde, 0xc2, 0x3b, 0xaa, - 0x30, 0xcb, 0x4b, 0xaf, 0x62, 0x0a, 0x22, 0x8d, 0x14, 0x63, 0xdc, 0x86, - 0x3b, 0xac, 0x45, 0xca, 0xd4, 0x4e, 0x60, 0x40, 0xcb, 0xd8, 0xfb, 0xda, - 0x88, 0xd3, 0x31, 0x37, 0xec, 0x71, 0xbf, 0x44, 0x2d, 0x1e, 0x1d, 0x33, - 0x62, 0x0d, 0x3e, 0xf6, 0x34, 0x9f, 0x9d, 0x15, 0xe4, 0x2b, 0x03, 0x0c, - 0xd1, 0x52, 0xd4, 0xf9, 0xd5, 0x4b, 0x54, 0xf6, 0x6d, 0x04, 0x94, 0xcf, - 0xeb, 0xf3, 0x31, 0xb9, 0xb9, 0x40, 0x3c, 0xd8, 0x23, 0xa0, 0xc3, 0x2f, - 0x0d, 0xa3, 0x86, 0x84, 0x88, 0x74, 0xd5, 0x04, 0xc4, 0x19, 0xac, 0x2e, - 0xa2, 0x3f, 0xcc, 0xbf, 0xaa, 0xe1, 0x29, 0xb0, 0x1f, 0x74, 0x9d, 0x1d, - 0xee, 0xbd, 0x2b, 0x31, 0xc4, 0xdd, 0x71, 0xf1, 0xd7, 0x13, 0x1e, 0xcd, - 0xcf, 0x0f, 0x97, 0x5c, 0xbb, 0x61, 0xd5, 0xa3, 0x45, 0x6f, 0x91, 0xcf, - 0x73, 0x4a, 0x43, 0x8d, 0xcc, 0xbf, 0xcf, 0x16, 0x15, 0xa2, 0x60, 0xe4, - 0xfe, 0x0f, 0x2c, 0xf1, 0x6b, 0xb5, 0x59, 0x02, 0xf4, 0x99, 0x4d, 0x55, - 0x1a, 0x33, 0x8e, 0xe5, 0xe0, 0x95, 0x08, 0x41, 0xcf, 0x72, 0x01, 0x57, - 0x3e, 0x4a, 0xa0, 0xd9, 0x71, 0xfe, 0xe9, 0x9e, 0x4b, 0x70, 0xfd, 0x7b, - 0x67, 0x29, 0x96, 0x9d, 0xed, 0x7f, 0xc8, 0x06, 0x60, 0xa3, 0xe4, 0x34, - 0x17, 0xde, 0xe8, 0xa3, 0xf0, 0xfe, 0x0d, 0xa3, 0x69, 0xd3, 0x73, 0x82, - 0x49, 0x3a, 0xcb, 0xdb, 0x36, 0x30, 0xed, 0x2a, 0xfd, 0x3f, 0xd7, 0xb7, - 0x6e, 0xf8, 0xe2, 0x14, 0xf7, 0xb7, 0xf8, 0x0f, 0x32, 0xdd, 0x8e, 0x8e, - 0xe1, 0x5c, 0x5e, 0x6a, 0x06, 0xd7, 0xef, 0x21, 0xf5, 0xc3, 0xf5, 0x79, - 0x0b, 0x12, 0xf7, 0x1b, 0x89, 0x7e, 0x6d, 0x57, 0x10, 0x3e, 0x6e, 0x74, - 0x88, 0xe6, 0xfd, 0x72, 0x20, 0xc3, 0x83, 0xd1, 0x2e, 0xb7, 0xb8, 0xbb, - 0xc8, 0x75, 0x81, 0x14, 0x46, 0x1d, 0xee, 0x36, 0x6c, 0x0b, 0xe1, 0x0d, - 0x15, 0xec, 0x0d, 0x5d, 0x30, 0x08, 0xbc, 0x42, 0xde, 0xa8, 0x64, 0x1b, - 0x3d, 0xbf, 0xe7, 0x14, 0x2a, 0x83, 0x90, 0x5e, 0x48, 0xfd, 0x96, 0x70, - 0x36, 0x2d, 0xa4, 0xeb, 0x28, 0xe7, 0x70, 0xe4, 0xfe, 0xb9, 0xed, 0x40, - 0xbc, 0x29, 0x34, 0x79, 0xec, 0x19, 0x79, 0xa1, 0xf3, 0x9d, 0x49, 0x8a, - 0xf0, 0x2d, 0x2b, 0x02, 0xd9, 0x50, 0x9e, 0xa7, 0xf4, 0xf8, 0x61, 0xad, - 0x79, 0xe0, 0x46, 0xe4, 0xe3, 0x78, 0x3c, 0x57, 0x9b, 0x56, 0xb6, 0x14, - 0xa8, 0x2f, 0xf8, 0xca, 0x5f, 0x1e, 0xd8, 0xa6, 0x9c, 0x2c, 0x2d, 0x14, - 0xf9, 0xff, 0x98, 0x1c, 0xef, 0x10, 0xe9, 0x75, 0x2e, 0x27, 0xde, 0x78, - 0x8a, 0xe0, 0x7b, 0xba, 0xa5, 0x97, 0x77, 0x2a, 0x20, 0xcb, 0xc2, 0x53, - 0x2e, 0x8b, 0x34, 0xbd, 0x28, 0xba, 0x57, 0xed, 0x10, 0xc1, 0xfd, 0x87, - 0x7c, 0x0e, 0x15, 0x63, 0x84, 0xb6, 0x54, 0xfb, 0x81, 0x05, 0xa5, 0x3c, - 0x0f, 0x63, 0x48, 0xbb, 0x54, 0x03, 0x7e, 0x2b, 0x2e, 0x9d, 0xfb, 0xcf, - 0x86, 0xd7, 0x04, 0xf7, 0x28, 0x84, 0x96, 0x5a, 0x6f, 0x8e, 0x6f, 0x1d, - 0x86, 0x2c, 0xf0, 0xe5, 0x33, 0xfd, 0x5d, 0xb3, 0xc3, 0xbf, 0xf7, 0x81, - 0x34, 0x33, 0x5c, 0x72, 0xa7, 0x7f, 0xf0, 0x5d, 0x88, 0x19, 0x2f, 0xbc, - 0xc4, 0x1c, 0xc5, 0xd3, 0xc2, 0x4d, 0xf9, 0xa5, 0x68, 0x94, 0x50, 0x97, - 0xb5, 0x54, 0x7d, 0xa2, 0xd0, 0x8c, 0xc0, 0xcf, 0x03, 0xd1, 0x93, 0x64, - 0xaf, 0xf1, 0x6b, 0xb5, 0xd3, 0x7e, 0x08, 0xb1, 0x44, 0x45, 0x84, 0x74, - 0xb8, 0x14, 0x9d, 0xc0, 0x63, 0x1c, 0x7b, 0xbc, 0x78, 0x43, 0x83, 0x1a, - 0xb2, 0xdc, 0x61, 0x9a, 0xbe, 0x22, 0xa5, 0x6f, 0x00, 0xb1, 0x99, 0x94, - 0x18, 0xf9, 0xbb, 0xd2, 0xb9, 0x6e, 0x1b, 0xb6, 0x2d, 0x36, 0x8d, 0xd3, - 0x68, 0xf6, 0x77, 0x32, 0xbd, 0x39, 0x6a, 0xb3, 0x12, 0x1d, 0x58, 0x2c, - 0x8a, 0x8e, 0x5b, 0x97, 0x09, 0x85, 0x92, 0x7e, 0xca, 0x42, 0xdc, 0x24, - 0x8a, 0x8b, 0x40, 0xbd, 0x66, 0x42, 0x5d, 0xa2, 0x21, 0x44, 0xdd, 0x93, - 0x8b, 0x43, 0xd6, 0xa6, 0x4b, 0x38, 0xe3, 0x0d, 0x3a, 0x69, 0x0d, 0xd9, - 0xac, 0x3f, 0xde, 0xe7, 0x48, 0x45, 0x29, 0xd6, 0x64, 0x3a, 0x86, 0x55, - 0xb4, 0x01, 0x1e, 0xa1, 0x2c, 0xff, 0xdb, 0x8f, 0x40, 0xde, 0xc0, 0xef, - 0x18, 0xc4, 0x57, 0x96, 0x35, 0xbe, 0xe2, 0x21, 0x3e, 0xde, 0x88, 0x33, - 0xd5, 0x68, 0x24, 0x07, 0xb0, 0x6c, 0xa2, 0xe7, 0xef, 0xff, 0xc6, 0x95, - 0x16, 0x85, 0x26, 0xc2, 0xf0, 0xe7, 0x59, 0x94, 0xbc, 0x02, 0x0d, 0x90, - 0x56, 0x67, 0x1a, 0x19, 0x9a, 0x1f, 0xf1, 0x4c, 0xdb, 0x96, 0xfd, 0xa3, - 0x6f, 0x87, 0x0e, 0xa0, 0xf7, 0x27, 0x95, 0x3a, 0x41, 0x5e, 0x84, 0x18, - 0x97, 0x0e, 0x0c, 0xb1, 0x7e, 0x0c, 0x72, 0xbd, 0xe4, 0x16, 0x6b, 0x3d, - 0x9f, 0x35, 0x11, 0xa3, 0x23, 0x22, 0x92, 0x93, 0x64, 0x1b, 0x38, 0x5e, - 0xb8, 0x20, 0x37, 0xa5, 0x79, 0x93, 0xfc, 0xa9, 0xc2, 0x8d, 0x76, 0xc5, - 0xa5, 0x7d, 0x03, 0xf4, 0x65, 0x6e, 0x04, 0xf1, 0x17, 0xc3, 0x24, 0xfa, - 0xc1, 0x64, 0xc2, 0xa6, 0xc1, 0x1f, 0x91, 0xc5, 0x16, 0x0c, 0xd4, 0x13, - 0x5e, 0xb9, 0x39, 0x3b, 0xe0, 0xf2, 0xc1, 0xe0, 0xa4, 0xa7, 0xcf, 0x33, - 0xcd, 0xbc, 0x22, 0xa2, 0x00, 0x35, 0x13, 0x55, 0x37, 0xda, 0x3a, 0x6f, - 0x9f, 0x93, 0xb2, 0xa2, 0xa5, 0x33, 0x95, 0x96, 0x1b, 0x6f, 0xfe, 0x0e, - 0x57, 0xd6, 0x57, 0xbd, 0x21, 0x82, 0xb0, 0x43, 0x58, 0x80, 0xd1, 0xc6, - 0x45, 0x66, 0x7a, 0x67, 0xde, 0xdd, 0x68, 0x79, 0x1a, 0x9c, 0x3d, 0x4e, - 0xd3, 0x26, 0x79, 0x0a, 0xcc, 0x36, 0x8d, 0x5a, 0xbf, 0x91, 0x69, 0x21, - 0xe1, 0xd6, 0xd6, 0xcf, 0x52, 0x0d, 0x56, 0xc8, 0x35, 0x1f, 0x19, 0x71, - 0xde, 0xc8, 0x73, 0x8e, 0x31, 0xf5, 0x1d, 0xf5, 0x63, 0x31, 0x66, 0xcf, - 0xb2, 0x60, 0xbf, 0x03, 0x39, 0x40, 0xa4, 0xb7, 0x2a, 0x03, 0x58, 0x78, - 0xd8, 0x33, 0x80, 0x6e, 0xbd, 0xf2, 0xf2, 0xaf, 0x88, 0x29, 0xa3, 0x07, - 0xc1, 0x20, 0xfe, 0xc8, 0x75, 0x25, 0xe6, 0x52, 0xe9, 0x57, 0x6c, 0x7b, - 0x16, 0xcf, 0x2c, 0x61, 0xf9, 0x3a, 0xa8, 0xa2, 0x67, 0x62, 0x9c, 0x7c, - 0xd1, 0xf4, 0xab, 0x54, 0x8c, 0xbb, 0x0d, 0x92, 0xde, 0x05, 0x54, 0x1a, - 0x5b, 0x84, 0x75, 0x2f, 0x30, 0x2a, 0x30, 0x50, 0xdb, 0x42, 0xb7, 0xfe, - 0xff, 0x18, 0x9b, 0xbd, 0x70, 0x2f, 0x47, 0x34, 0x44, 0x34, 0x58, 0x43, - 0x0c, 0x29, 0xea, 0xc6, 0xbd, 0x1c, 0xfd, 0xf6, 0x6e, 0x3c, 0xe2, 0x21, - 0x55, 0xc3, 0x1f, 0x82, 0x25, 0xd2, 0x5d, 0x4e, 0x81, 0x8f, 0xaa, 0x6d, - 0x92, 0x64, 0x90, 0x72, 0xbe, 0x03, 0xda, 0xac, 0xd0, 0x1c, 0x66, 0xc2, - 0x50, 0xd3, 0xd8, 0xca, 0xe1, 0xe0, 0xe3, 0xfb, 0xc7, 0xa5, 0x59, 0x71, - 0x4f, 0xdc, 0x1b, 0x4f, 0xd0, 0x75, 0x57, 0x0b, 0x1f, 0x99, 0x45, 0x25, - 0x20, 0xf1, 0xd9, 0xe4, 0x55, 0x47, 0xd2, 0xc1, 0x13, 0x04, 0x56, 0xc4, - 0x37, 0x61, 0x27, 0xaa, 0xb2, 0xfb, 0x52, 0x73, 0xbf, 0xd8, 0x3e, 0x0d, - 0xf4, 0xe8, 0x19, 0x21, 0x13, 0x90, 0xfb, 0x93, 0xd4, 0x94, 0x5b, 0x0d, - 0x93, 0xc9, 0x00, 0xaa, 0xb9, 0x6f, 0x41, 0x5c, 0xcf, 0x9e, 0x27, 0x2a, - 0xf9, 0xb5, 0x09, 0xc9, 0xc3, 0xeb, 0x8b, 0x09, 0xce, 0x27, 0x54, 0x1d, - 0x41, 0x0c, 0x13, 0x17, 0xca, 0x2e, 0x90, 0xa4, 0xa1, 0x0d, 0xad, 0xa0, - 0x16, 0x7c, 0x57, 0x21, 0x91, 0x27, 0x07, 0xaf, 0x71, 0x96, 0x96, 0xa5, - 0x74, 0x51, 0x45, 0xc5, 0x07, 0xd4, 0x7d, 0xae, 0xb8, 0xf6, 0xe0, 0x95, - 0x70, 0xe7, 0xe4, 0xbb, 0x91, 0x6b, 0xe0, 0xa6, 0xbe, 0x9c, 0x26, 0x81, - 0x16, 0xbf, 0x80, 0xb9, 0x7c, 0x18, 0x34, 0x98, 0xab, 0x60, 0xa1, 0x7f, - 0x18, 0xcb, 0x29, 0xc6, 0xe4, 0x50, 0xe7, 0x20, 0x52, 0xc1, 0x43, 0xd0, - 0x9f, 0x10, 0x38, 0xf9, 0x3a, 0xf2, 0x56, 0xb1, 0x08, 0x4c, 0x2c, 0xac, - 0x07, 0xb3, 0xd6, 0x7e, 0xa8, 0x46, 0x1c, 0x71, 0x1f, 0x92, 0xf5, 0x6e, - 0x04, 0x3b, 0x56, 0xf2, 0x92, 0x8c, 0x59, 0xb6, 0x77, 0xb6, 0x9c, 0xdf, - 0xda, 0x41, 0xb4, 0x9e, 0x67, 0xb6, 0x51, 0xd8, 0xb6, 0x47, 0xbb, 0xfa, - 0x3e, 0xe9, 0xcf, 0x50, 0x63, 0xd3, 0x18, 0xa4, 0x32, 0x39, 0xda, 0xb1, - 0xf4, 0xae, 0xcd, 0xbc, 0x83, 0xe6, 0xcb, 0x45, 0xbc, 0xd2, 0xea, 0xcb, - 0xba, 0xb1, 0x34, 0x44, 0xea, 0x89, 0xed, 0xe0, 0x56, 0x51, 0xd9, 0x36, - 0x32, 0xcf, 0x65, 0xb0, 0x6b, 0xfa, 0x66, 0x45, 0x40, 0xed, 0x2c, 0x58, - 0x25, 0xf6, 0xdd, 0x9a, 0xd1, 0x92, 0xf3, 0x0b, 0xad, 0x78, 0x62, 0xbe, - 0x6b, 0x7f, 0xc5, 0x4f, 0x3e, 0x98, 0x23, 0x86, 0x77, 0xb3, 0x9f, 0xe3, - 0x88, 0xcd, 0xab, 0x9b, 0x2e, 0x3c, 0x55, 0x72, 0x57, 0xe6, 0x03, 0x23, - 0x30, 0x34, 0x0c, 0x62, 0xda, 0x30, 0xc6, 0xfb, 0xad, 0xf6, 0x19, 0x7b, - 0xde, 0x63, 0xbe, 0x34, 0x1e, 0xd1, 0x27, 0x9b, 0x9f, 0xea, 0x90, 0x53, - 0x40, 0x0e, 0x9b, 0xef, 0x5b, 0xa5, 0x69, 0xde, 0xaf, 0x6b, 0x01, 0x8e, - 0x2c, 0xf1, 0xab, 0x0e, 0xe7, 0xaf, 0x59, 0xf0, 0xa3, 0x11, 0xb5, 0x00, - 0x7c, 0x8f, 0x5e, 0x02, 0x73, 0x1c, 0x88, 0x43, 0x68, 0x8d, 0xa3, 0x3a, - 0x36, 0x11, 0xdb, 0x26, 0x92, 0x25, 0x69, 0x7a, 0xa7, 0xed, 0xd0, 0xc3, - 0x3b, 0x05, 0xd3, 0x46, 0x22, 0x88, 0x21, 0xf3, 0xa1, 0x87, 0x6d, 0x87, - 0xdc, 0xed, 0x4c, 0xad, 0xac, 0xf1, 0xc1, 0x61, 0x70, 0xe8, 0xd2, 0x54, - 0x44, 0xb1, 0x49, 0xae, 0x25, 0xc9, 0x91, 0x46, 0xde, 0x89, 0x9a, 0x3a, - 0xcb, 0xfe, 0xb8, 0xaf, 0xcb, 0x39, 0x4e, 0x30, 0x87, 0xb7, 0x88, 0xcc, - 0xdd, 0x7e, 0x01, 0xa2, 0xad, 0x1b, 0x01, 0xd2, 0x6e, 0x47, 0xf6, 0xa5, - 0xfb, 0xf7, 0x73, 0x5f, 0x2c, 0x24, 0xd0, 0x9f, 0xe9, 0x8e, 0x49, 0xbb, - 0x85, 0x9d, 0x45, 0x8b, 0x63, 0xbb, 0x7a, 0x79, 0xd0, 0xfa, 0x85, 0xe9, - 0x4f, 0xad, 0xa2, 0x19, 0xd4, 0xfc, 0x24, 0x89, 0x44, 0x7d, 0x89, 0x33, - 0x34, 0x07, 0x25, 0x22, 0x90, 0x96, 0x45, 0x5e, 0x7e, 0xe3, 0x57, 0x3f, - 0x57, 0xd3, 0xc7, 0x60, 0xa1, 0x26, 0x14, 0xad, 0x19, 0x51, 0x39, 0x9d, - 0x70, 0x48, 0xf4, 0x8b, 0x06, 0xf1, 0xc7, 0x73, 0xe9, 0xe9, 0xca, 0xb0, - 0x7d, 0x7c, 0x8f, 0xf4, 0xda, 0x8e, 0x83, 0x99, 0x9d, 0x64, 0x65, 0x82, - 0xb3, 0xf1, 0x85, 0xd5, 0x64, 0xfe, 0xb0, 0x1e, 0x3d, 0x1a, 0x30, 0xfd, - 0xe1, 0x6b, 0xe1, 0x65, 0x26, 0x93, 0x53, 0x4d, 0x90, 0x7d, 0xe1, 0xc8, - 0xe8, 0x50, 0x24, 0x0f, 0x62, 0x73, 0x73, 0x1f, 0x5f, 0xce, 0x9b, 0x36, - 0xe9, 0x16, 0xf6, 0x78, 0x8e, 0x5d, 0x3e, 0x99, 0x79, 0x19, 0x36, 0x2f, - 0x96, 0x9a, 0x27, 0x34, 0x95, 0x2d, 0x28, 0x22, 0x0f, 0x30, 0x81, 0x49, - 0x49, 0xcd, 0x47, 0x24, 0xa5, 0xde, 0xd9, 0x3a, 0x31, 0x9b, 0xf6, 0x84, - 0x48, 0xda, 0x0f, 0xbb, 0x87, 0x59, 0xdc, 0xcc, 0x57, 0xf3, 0x02, 0x53, - 0xe6, 0xda, 0xfe, 0x97, 0x1e, 0xc7, 0xf8, 0x34, 0xf6, 0x3f, 0xf7, 0x4f, - 0x07, 0x5d, 0xe3, 0x77, 0x80, 0x85, 0xb5, 0xa7, 0xff, 0x60, 0x06, 0xd7, - 0xec, 0x67, 0xd3, 0x25, 0x31, 0xd9, 0x9b, 0x41, 0x24, 0x93, 0xdf, 0x68, - 0x1d, 0x95, 0x42, 0x39, 0x5d, 0xdc, 0xa8, 0x5c, 0x73, 0xfc, 0x08, 0x97, - 0x47, 0xa2, 0x0f, 0xc7, 0x1a, 0xc8, 0xea, 0x7e, 0x61, 0x44, 0x64, 0xd9, - 0xef, 0x43, 0x3c, 0x88, 0x83, 0x6b, 0x6f, 0x40, 0x70, 0xb1, 0xad, 0x13, - 0x3a, 0x8a, 0x80, 0xae, 0xe6, 0xfa, 0xc3, 0x71, 0x7d, 0xd7, 0x3d, 0xfd, - 0xdb, 0x36, 0x04, 0x62, 0x92, 0xc6, 0x70, 0x78, 0x49, 0xc3, 0x42, 0x96, - 0x94, 0xed, 0x64, 0xc0, 0xf1, 0x95, 0x05, 0x30, 0x4a, 0x1b, 0x13, 0x46, - 0x88, 0xf8, 0x3d, 0x51, 0xdd, 0x6a, 0xb9, 0xfa, 0xd7, 0xe2, 0xae, 0xcd, - 0xa6, 0x1f, 0x15, 0xef, 0xc7, 0x04, 0x9e, 0x7a, 0x46, 0x02, 0x3e, 0xc8, - 0x76, 0xad, 0x9c, 0xba, 0x04, 0xad, 0x58, 0x0c, 0x31, 0x53, 0x15, 0x79, - 0x57, 0x23, 0xc0, 0x14, 0xcd, 0x01, 0x78, 0x3f, 0xe8, 0x80, 0x77, 0x8a, - 0x57, 0x33, 0xa5, 0xc5, 0x2e, 0xa4, 0xa6, 0xae, 0xd2, 0x2c, 0x64, 0xbf, - 0x55, 0xf8, 0x59, 0xf5, 0x81, 0xa0, 0xf4, 0x66, 0x94, 0x25, 0x0f, 0xfb, - 0x6b, 0xb8, 0x52, 0x0d, 0xb6, 0x21, 0x08, 0xba, 0xa9, 0x93, 0xac, 0xd6, - 0x3b, 0x71, 0xe6, 0xaa, 0xd5, 0x27, 0x68, 0x82, 0xd1, 0x34, 0xdb, 0x80, - 0x69, 0x1c, 0x9b, 0x4b, 0xce, 0x9d, 0xa8, 0x5b, 0xc1, 0x62, 0x05, 0xf7, - 0xce, 0x87, 0x66, 0xf4, 0x13, 0x4b, 0xca, 0x75, 0x1e, 0x3f, 0xe6, 0x4b, - 0xaf, 0x40, 0xe7, 0xf4, 0x91, 0x64, 0x13, 0x60, 0x52, 0xd3, 0x43, 0x28, - 0xab, 0x23, 0xd2, 0x9c, 0x05, 0x34, 0x19, 0xf2, 0x53, 0xb7, 0x77, 0xa7, - 0x6f, 0x81, 0x36, 0x94, 0xd7, 0x31, 0x52, 0x89, 0x00, 0x6e, 0x08, 0x30, - 0x24, 0x38, 0xb3, 0x95, 0x86, 0xfe, 0x91, 0x1f, 0x47, 0xe4, 0x9e, 0xf6, - 0x3c, 0x18, 0xdd, 0x38, 0xde, 0x59, 0x6e, 0x6f, 0xc6, 0x2d, 0x3f, 0x81, - 0x49, 0x62, 0xfd, 0x2b, 0xe3, 0xab, 0x70, 0xa3, 0x85, 0xdc, 0x78, 0xad, - 0x97, 0xa7, 0x08, 0xd6, 0x91, 0x34, 0xb2, 0xe4, 0x12, 0x1c, 0xe3, 0x1e, - 0xba, 0xf8, 0x69, 0xbc, 0x07, 0x2c, 0x3b, 0x76, 0xa5, 0xda, 0xc7, 0x85, - 0x2f, 0xb0, 0xb7, 0xc3, 0xd8, 0x1a, 0x69, 0x03, 0x76, 0x14, 0x54, 0x88, - 0x94, 0x9e, 0xb5, 0x2e, 0xd7, 0x0c, 0x90, 0x92, 0x05, 0x19, 0x1e, 0x31, - 0xe7, 0x92, 0xf8, 0x00, 0x29, 0x59, 0x48, 0x68, 0x5a, 0x9f, 0xcd, 0xa6, - 0xde, 0x34, 0x23, 0xdf, 0x82, 0xe3, 0x82, 0x1b, 0x33, 0x65, 0x31, 0xa5, - 0x57, 0xa8, 0x15, 0x29, 0xcb, 0x6f, 0xab, 0x0c, 0x6b, 0x56, 0x5e, 0x29, - 0xf4, 0x20, 0xa3, 0x4e, 0x81, 0xcf, 0x7b, 0x70, 0x06, 0xba, 0x7c, 0x7c, - 0x3e, 0x8e, 0x36, 0x9e, 0x71, 0xaa, 0xa8, 0xc7, 0xfb, 0x39, 0xb0, 0x2e, - 0xfd, 0xef, 0x2c, 0x7a, 0x20, 0xea, 0xc8, 0x00, 0x62, 0x76, 0x9f, 0xc8, - 0x55, 0x3f, 0x6f, 0xd4, 0x0d, 0x15, 0xf8, 0xd2, 0xda, 0xc3, 0x47, 0x0e, - 0x9d, 0xa8, 0x4a, 0xe7, 0xff, 0x6a, 0xe7, 0x90, 0x49, 0xba, 0xc5, 0x12, - 0x01, 0x73, 0xaa, 0xbe, 0x90, 0xc2, 0x7c, 0xf5, 0xc6, 0xd5, 0x66, 0x2a, - 0x73, 0x7d, 0x05, 0x2a, 0xef, 0x2c, 0x50, 0x00, 0x6a, 0xa6, 0x82, 0x48, - 0x4f, 0x03, 0x5b, 0x80, 0x8a, 0x38, 0x5c, 0xeb, 0x81, 0xc3, 0x59, 0xf7, - 0x46, 0xd9, 0x87, 0x7b, 0xb7, 0x59, 0xe8, 0x00, 0xde, 0x6d, 0x0d, 0x7c, - 0x90, 0x78, 0x23, 0xb8, 0xb1, 0xa2, 0x67, 0x7c, 0x6f, 0xd8, 0xe9, 0x2e, - 0x6b, 0x94, 0xd7, 0xac, 0x10, 0x9b, 0xa4, 0x13, 0x27, 0xb8, 0x2b, 0x4e, - 0x73, 0x88, 0x38, 0x06, 0xa6, 0xa6, 0x67, 0x68, 0xbc, 0xd0, 0x85, 0xaa, - 0x14, 0xf9, 0x33, 0x7e, 0xff, 0x4a, 0x22, 0x67, 0x74, 0xfd, 0x64, 0x0c, - 0x83, 0xee, 0x9c, 0xa1, 0x0e, 0xe2, 0x9e, 0x68, 0xa8, 0x1e, 0x59, 0x2d, - 0x1e, 0x73, 0x37, 0xab, 0x6b, 0x21, 0x9d, 0x91, 0x9d, 0xce, 0x03, 0x30, - 0xbe, 0x0d, 0x32, 0x94, 0xa5, 0xf1, 0x28, 0xe1, 0x2f, 0x8b, 0xda, 0x43, - 0xf6, 0x2c, 0xf4, 0x2f, 0xd7, 0x1e, 0x9e, 0xa3, 0x09, 0xdb, 0xb3, 0x76, - 0xc0, 0xa1, 0xf1, 0x09, 0xc0, 0xaa, 0x77, 0xc4, 0x35, 0x89, 0xfe, 0xbd, - 0x84, 0x6f, 0x4c, 0x66, 0xcf, 0x5f, 0x08, 0x28, 0x16, 0xb1, 0x0d, 0xb7, - 0xc2, 0xc3, 0x19, 0xf2, 0x0e, 0x6a, 0xba, 0x42, 0x38, 0xdb, 0x13, 0xc2, - 0xf4, 0x73, 0xef, 0x80, 0x50, 0x2c, 0x9d, 0x39, 0xa3, 0x16, 0xd7, 0x5c, - 0x58, 0xae, 0x5b, 0xbc, 0x56, 0xf0, 0x79, 0x5c, 0xfe, 0xba, 0x1a, 0xc8, - 0x37, 0x07, 0x93, 0x06, 0xfe, 0x7c, 0xa4, 0xc3, 0xa4, 0xe5, 0x75, 0x74, - 0xbd, 0xe2, 0x62, 0x10, 0x25, 0xd9, 0xae, 0x71, 0x7c, 0x53, 0x67, 0xac, - 0x6a, 0x13, 0xec, 0x22, 0x40, 0x62, 0x40, 0xe7, 0xa4, 0xff, 0x6c, 0xd3, - 0x75, 0xee, 0x19, 0x52, 0xe4, 0xac, 0x7f, 0x07, 0x41, 0x58, 0x05, 0xb3, - 0xdd, 0xd4, 0xd0, 0xca, 0xd6, 0xe7, 0x3e, 0x57, 0x4f, 0x13, 0x7d, 0x20, - 0xbf, 0xcb, 0x39, 0xa0, 0x9e, 0xf8, 0x6d, 0x5b, 0x43, 0x6a, 0x79, 0xb9, - 0xdc, 0xd7, 0xb3, 0xf0, 0xd1, 0x17, 0x15, 0x01, 0xb2, 0xd4, 0x60, 0xaa, - 0x9c, 0x5f, 0xd2, 0xc2, 0xe7, 0x31, 0x07, 0xc5, 0x31, 0x12, 0xd8, 0x34, - 0x53, 0x1f, 0x53, 0x85, 0x4b, 0xd7, 0xbf, 0x87, 0x20, 0x86, 0x74, 0x45, - 0x77, 0x97, 0xa5, 0x95, 0xc0, 0xde, 0x7f, 0x09, 0xbd, 0x2d, 0x27, 0x17, - 0xb8, 0x37, 0xa7, 0xeb, 0xf0, 0xc4, 0x2f, 0xcb, 0x52, 0x8b, 0x39, 0x3f, - 0x56, 0x7a, 0x13, 0x30, 0x89, 0xd1, 0xc2, 0x92, 0x53, 0x82, 0x33, 0xef, - 0x64, 0xe2, 0xc9, 0x19, 0xfe, 0xdf, 0x8a, 0xf5, 0x60, 0x58, 0x25, 0x98, - 0xad, 0xfb, 0xb6, 0xaf, 0x63, 0xc4, 0xe4, 0xd0, 0xe1, 0xf1, 0x82, 0x81, - 0x82, 0x8b, 0x87, 0xce, 0x2c, 0xd1, 0x0a, 0xaa, 0x78, 0x88, 0x21, 0x06, - 0x44, 0x78, 0xae, 0x16, 0x90, 0xb6, 0xfb, 0x58, 0x85, 0x3a, 0x7d, 0xb3, - 0x6c, 0xe9, 0x1d, 0x5f, 0x96, 0x42, 0xcc, 0xea, 0x58, 0x26, 0x37, 0x67, - 0x5d, 0x85, 0x09, 0x66, 0x23, 0x9c, 0x26, 0xeb, 0x25, 0x88, 0xae, 0x79, - 0xa5, 0x87, 0x3e, 0xad, 0x9c, 0xda, 0x06, 0x1d, 0xc5, 0xba, 0x24, 0xe1, - 0x42, 0x0a, 0xae, 0xc0, 0x41, 0xd5, 0xf2, 0x55, 0x4f, 0xdb, 0x96, 0x37, - 0xb7, 0xac, 0x8c, 0xc6, 0x74, 0x3a, 0xc5, 0x09, 0x60, 0x2e, 0xe0, 0xe2, - 0x39, 0x4c, 0x9d, 0x81, 0x11, 0x40, 0xf1, 0x8a, 0x23, 0x3d, 0xb0, 0x6c, - 0x0c, 0xfe, 0x2e, 0x11, 0x84, 0x14, 0x2e, 0xbb, 0x8d, 0x19, 0x6b, 0x20, - 0xbf, 0xb9, 0x6f, 0xcd, 0x01, 0xea, 0xe8, 0x36, 0x7a, 0x3c, 0xfc, 0xb3, - 0x2c, 0x7d, 0x07, 0x96, 0x29, 0x14, 0x62, 0x23, 0x08, 0x8f, 0x62, 0x90, - 0x0f, 0x60, 0x58, 0xe8, 0x81, 0x3d, 0xe0, 0x74, 0x62, 0x8d, 0x84, 0x31, - 0x45, 0xce, 0xc6, 0x79, 0x11, 0x5c, 0xf0, 0x04, 0x95, 0x0b, 0x7d, 0xf4, - 0x32, 0xcf, 0x85, 0x83, 0x37, 0x1d, 0x7a, 0x64, 0x9a, 0x7c, 0x7b, 0x79, - 0x9d, 0x2d, 0x54, 0xd9, 0x5c, 0x9a, 0xed, 0x1d, 0xa6, 0x4d, 0x35, 0x22, - 0x36, 0x84, 0xa4, 0x3a, 0x7e, 0x3e, 0x38, 0xca, 0x8b, 0x5d, 0x1d, 0xab, - 0x84, 0x2f, 0x00, 0xa6, 0x4b, 0xce, 0xb3, 0x85, 0x7e, 0x17, 0xdc, 0xa9, - 0xcc, 0x42, 0xbf, 0x5a, 0x25, 0x69, 0xf5, 0xed, 0xd3, 0x73, 0xfd, 0xf7, - 0x56, 0x24, 0x10, 0xbd, 0xcc, 0xe0, 0xdb, 0xe1, 0x32, 0xac, 0x66, 0xcf, - 0x69, 0x2c, 0x02, 0x1b, 0x2d, 0x99, 0x66, 0xf1, 0x57, 0xcb, 0x8d, 0x74, - 0xa7, 0xa0, 0x05, 0x8e, 0x57, 0x0d, 0xc7, 0xce, 0xce, 0xcf, 0xcc, 0x20, - 0xc4, 0x87, 0x42, 0x91, 0xa7, 0x86, 0xdf, 0xbb, 0xe6, 0x56, 0x7a, 0x59, - 0xa6, 0x60, 0xe1, 0xfd, 0x73, 0x68, 0x97, 0xf8, 0x40, 0xc9, 0x16, 0xca, - 0xb5, 0xa8, 0xbe, 0x37, 0xb0, 0x84, 0x2e, 0x1a, 0xf3, 0x6f, 0x76, 0x06, - 0x6a, 0x44, 0xe4, 0xad, 0x23, 0xb5, 0x9c, 0xc6, 0xf2, 0xff, 0xdd, 0xf4, - 0xf8, 0xeb, 0x89, 0x7f, 0xf9, 0xc8, 0x87, 0x99, 0x5f, 0x7c, 0x93, 0x86, - 0xb6, 0xe1, 0xaf, 0x7b, 0xa2, 0x1a, 0xde, 0x9d, 0x34, 0xe1, 0x73, 0x24, - 0x1b, 0xb0, 0x35, 0xb4, 0x3f, 0xb7, 0x61, 0x0a, 0x20, 0x1e, 0xec, 0x2a, - 0x4f, 0x06, 0x6b, 0x53, 0x41, 0xd9, 0x5f, 0x69, 0x46, 0xfa, 0x5f, 0x57, - 0xd2, 0xfb, 0x75, 0x32, 0xfb, 0xa0, 0x91, 0x8d, 0x05, 0x8f, 0xfe, 0x86, - 0x4d, 0x90, 0xa8, 0x74, 0x5a, 0x71, 0x95, 0xd2, 0x13, 0xeb, 0xcf, 0x05, - 0xe6, 0x38, 0x6b, 0x89, 0xb4, 0x08, 0xc0, 0x16, 0x95, 0xe9, 0xe9, 0x2f, - 0x36, 0x87, 0x3a, 0xb4, 0x42, 0xc4, 0x68, 0x49, 0x65, 0x3a, 0x94, 0xea, - 0xa6, 0x63, 0x08, 0x22, 0xf7, 0xa4, 0x4c, 0x81, 0x0b, 0x04, 0xe5, 0xda, - 0x5e, 0x28, 0xd6, 0xa3, 0x08, 0x37, 0x59, 0x03, 0xdd, 0x0d, 0xfa, 0x70, - 0xb3, 0x77, 0xc9, 0xc2, 0xc6, 0xf6, 0x8c, 0x2d, 0x26, 0x31, 0xec, 0x2c, - 0xf1, 0x2d, 0x05, 0xaa, 0x32, 0x2a, 0xe9, 0xb9, 0xc2, 0xd0, 0x82, 0x61, - 0x1e, 0xcf, 0xa4, 0x3c, 0x12, 0x16, 0xf0, 0x4d, 0x66, 0xa0, 0x2b, 0xa1, - 0xa6, 0x0c, 0xe9, 0x32, 0xce, 0xae, 0x90, 0x7a, 0xf0, 0x74, 0x99, 0x82, - 0xc6, 0x39, 0xdb, 0x9b, 0x75, 0xe2, 0xd3, 0x56, 0x36, 0xc0, 0x1d, 0x19, - 0xd6, 0x31, 0x10, 0xca, 0xaa, 0xb4, 0x1e, 0x13, 0x63, 0x69, 0xe8, 0xe4, - 0xf8, 0x5d, 0x13, 0x7e, 0xa9, 0x5e, 0x64, 0x79, 0x58, 0xc6, 0xf6, 0xc9, - 0x1b, 0x50, 0xc6, 0xd5, 0x96, 0xaa, 0x06, 0xd5, 0x90, 0xbd, 0xa9, 0xf3, - 0x8a, 0xed, 0x58, 0x78, 0xba, 0x9f, 0x8b, 0x3d, 0x46, 0x6f, 0x55, 0x1d, - 0xf9, 0x14, 0x7d, 0x7b, 0xdd, 0x03, 0x78, 0x9d, 0x06, 0x7d, 0xaf, 0x1b, - 0x49, 0xa0, 0x82, 0xb3, 0xeb, 0x2f, 0x81, 0x8a, 0x08, 0x8b, 0xbc, 0xce, - 0xf5, 0x26, 0xe8, 0x7e, 0xb9, 0xe9, 0x28, 0x57, 0x76, 0x01, 0x61, 0xca, - 0x5f, 0xa9, 0x30, 0x7f, 0xa5, 0x16, 0x7f, 0x24, 0xdf, 0x78, 0xf5, 0xc2, - 0xd5, 0x91, 0x39, 0x82, 0x7e, 0x8a, 0x6d, 0x5b, 0x88, 0x97, 0xce, 0x9a, - 0xf0, 0x8e, 0x0f, 0xce, 0x12, 0x68, 0x60, 0x2a, 0x9b, 0x39, 0x85, 0xdf, - 0x39, 0x19, 0x24, 0xe6, 0x46, 0x59, 0xe3, 0x17, 0xb1, 0x8d, 0xec, 0x97, - 0x7e, 0x95, 0x0c, 0xfb, 0x48, 0xe5, 0xab, 0xf4, 0xef, 0xc6, 0x63, 0x4f, - 0xa3, 0x5e, 0x92, 0x52, 0x2d, 0x23, 0x3e, 0x7c, 0x5e, 0x57, 0xe1, 0x56, - 0x26, 0xce, 0xd6, 0xfe, 0x2a, 0xec, 0xec, 0x47, 0xc7, 0x80, 0x4b, 0x83, - 0xee, 0xf6, 0x43, 0x06, 0x9a, 0xf8, 0x6b, 0x82, 0x50, 0x0c, 0x03, 0x5d, - 0x4d, 0x30, 0x09, 0x00, 0x24, 0x3d, 0x85, 0x39, 0x5d, 0x05, 0x59, 0x28, - 0x72, 0x38, 0xea, 0x56, 0xc9, 0xb8, 0xfc, 0xf8, 0x52, 0xfa, 0x3c, 0x0a, - 0x1f, 0x5e, 0xad, 0x91, 0xf2, 0xf4, 0x90, 0xb4, 0xc2, 0xb3, 0x4d, 0xdb, - 0xef, 0x64, 0xba, 0x89, 0x72, 0x10, 0x0a, 0xa4, 0x84, 0xff, 0x88, 0x38, - 0xab, 0x0f, 0x1b, 0x73, 0xfc, 0x3e, 0x92, 0x48, 0x5a, 0xee, 0x70, 0xcb, - 0x80, 0x82, 0x88, 0xb0, 0xfa, 0x85, 0xcd, 0xb7, 0xcc, 0x84, 0x25, 0x3f, - 0x99, 0x5f, 0xdb, 0xf4, 0x4d, 0x8f, 0x0e, 0x31, 0x96, 0xf9, 0xab, 0x2b, - 0x22, 0xdf, 0xcf, 0x5a, 0x81, 0x50, 0x84, 0x0d, 0xc4, 0xde, 0x90, 0xc4, - 0x1a, 0x2f, 0xe0, 0x59, 0x1f, 0x39, 0x1b, 0x56, 0x4f, 0x77, 0x26, 0xf3, - 0xcb, 0x96, 0xf7, 0x0b, 0x39, 0x23, 0xe0, 0x2c, 0x1c, 0x0a, 0x03, 0x58, - 0xd0, 0xd8, 0x7a, 0xce, 0x24, 0xb5, 0x08, 0x95, 0x43, 0x58, 0xbe, 0x37, - 0x83, 0xc2, 0x7a, 0xf3, 0xe2, 0x68, 0xd3, 0x29, 0x61, 0xc9, 0xf6, 0x68, - 0xc4, 0x9c, 0x13, 0x04, 0xf0, 0xb5, 0x72, 0x8a, 0xdd, 0x50, 0xdf, 0xdf, - 0xe5, 0x09, 0x65, 0x61, 0x14, 0x98, 0x91, 0x1b, 0xc8, 0xcc, 0x7c, 0xa3, - 0x5d, 0x05, 0x64, 0x13, 0x46, 0xac, 0xdb, 0x64, 0x01, 0x59, 0x84, 0x2b, - 0x77, 0xc7, 0xb1, 0xab, 0x0a, 0x09, 0x8a, 0x4c, 0x7d, 0xee, 0x92, 0x44, - 0x36, 0x4d, 0xe5, 0xcb, 0x20, 0x39, 0x3b, 0x23, 0xfd, 0xf3, 0x5c, 0x09, - 0x30, 0xff, 0x19, 0xaf, 0xe3, 0xe8, 0x46, 0x46, 0x02, 0x62, 0x81, 0x41, - 0x3c, 0xd6, 0x23, 0xa0, 0x66, 0x7b, 0x09, 0xed, 0xe4, 0xbe, 0x11, 0x57, - 0x4f, 0xb7, 0xbb, 0x72, 0xc9, 0x31, 0x8c, 0xdd, 0x98, 0x1e, 0x60, 0x87, - 0xae, 0x49, 0x61, 0x71, 0x17, 0x79, 0xeb, 0x08, 0x64, 0x06, 0x4f, 0x88, - 0x55, 0xa6, 0x65, 0xe5, 0x02, 0x64, 0x4a, 0x26, 0xc2, 0x60, 0x07, 0xfb, - 0xba, 0x82, 0xad, 0x6e, 0xc1, 0xb2, 0x87, 0xb2, 0xb0, 0x87, 0x43, 0x3d, - 0x94, 0xb1, 0xa1, 0xd0, 0xc7, 0xeb, 0xa0, 0xad, 0x02, 0x07, 0x3f, 0x76, - 0x99, 0xbc, 0x7d, 0x8c, 0xec, 0x8a, 0x95, 0x5b, 0x84, 0xce, 0xd9, 0x10, - 0x0d, 0xec, 0x2d, 0x2e, 0xc3, 0xf6, 0xb3, 0xd3, 0x27, 0xbf, 0x0e, 0x5d, - 0x57, 0xf1, 0x7f, 0xeb, 0x86, 0xd3, 0x96, 0xce, 0xde, 0x48, 0xf8, 0xf7, - 0xa5, 0x08, 0x22, 0x5b, 0xf5, 0x9d, 0xd5, 0xb4, 0x18, 0x43, 0x40, 0x12, - 0x40, 0x61, 0xa9, 0xcc, 0xe2, 0x6e, 0x22, 0x0f, 0x57, 0x2d, 0x56, 0x8d, - 0x46, 0xac, 0x93, 0x12, 0xb9, 0xaa, 0x3e, 0x76, 0x87, 0xcf, 0x14, 0x2d, - 0x5a, 0x6a, 0x9a, 0x96, 0x3c, 0x88, 0x34, 0x46, 0x03, 0xa0, 0xe4, 0x1e, - 0x36, 0x59, 0x3e, 0x04, 0xa9, 0xff, 0xb9, 0x08, 0x55, 0xa7, 0x9b, 0x76, - 0x9c, 0xdc, 0x8b, 0xf0, 0x58, 0x76, 0x88, 0x6c, 0xca, 0xc0, 0x39, 0x8a, - 0x17, 0x29, 0xf6, 0xcb, 0xa3, 0xd6, 0x1f, 0xb6, 0x91, 0xee, 0xaa, 0xe6, - 0xc3, 0x8a, 0x2b, 0x54, 0xd1, 0x47, 0x67, 0x2f, 0x7b, 0x1d, 0xfd, 0xb3, - 0xba, 0xb9, 0x44, 0xc9, 0x41, 0xcd, 0x43, 0x49, 0x3f, 0xb3, 0x6b, 0x17, - 0xb6, 0x13, 0xae, 0x31, 0x94, 0x37, 0x08, 0x32, 0xf6, 0x3c, 0xcb, 0x3c, - 0xe4, 0xf5, 0xa7, 0x2d, 0x86, 0x32, 0x5e, 0x85, 0x82, 0x85, 0x43, 0x9b, - 0x35, 0xe6, 0xd5, 0x0f, 0x15, 0x9f, 0xc3, 0x28, 0xd5, 0x36, 0x41, 0x5b, - 0x7e, 0x14, 0x08, 0x96, 0x20, 0x6d, 0x18, 0x92, 0xdf, 0xf4, 0xca, 0x26, - 0x33, 0xa9, 0x2f, 0xd2, 0xc9, 0xaf, 0xc5, 0xf1, 0xc1, 0x05, 0x82, 0x79, - 0x3a, 0x92, 0xd6, 0x0c, 0xcf, 0xc0, 0xb0, 0xe1, 0xb0, 0x05, 0xf2, 0xe2, - 0x2c, 0x27, 0xe7, 0x6b, 0x43, 0x0f, 0x7a, 0x22, 0xc9, 0x62, 0xda, 0x61, - 0xce, 0xde, 0x15, 0xb5, 0x7c, 0x2b, 0x08, 0x7e, 0x2e, 0xed, 0xf5, 0xff, - 0x9c, 0xa6, 0xaf, 0x56, 0xb9, 0xc2, 0x36, 0xd8, 0x4c, 0x83, 0xcb, 0xeb, - 0xe1, 0x7f, 0x3a, 0xd7, 0xf7, 0x37, 0xf2, 0x30, 0xa7, 0x38, 0xd2, 0x07, - 0xd4, 0x88, 0xc8, 0xc5, 0x29, 0xb4, 0x93, 0xb3, 0xe6, 0xd0, 0x74, 0x0b, - 0x14, 0x77, 0x74, 0x97, 0x21, 0xce, 0xa1, 0x71, 0xa3, 0xb5, 0xa6, 0x5f, - 0xdb, 0x11, 0xf4, 0xc4, 0xa3, 0x21, 0xf1, 0x9b, 0xc4, 0xee, 0xa5, 0x84, - 0x1e, 0x03, 0xd6, 0x5f, 0xc6, 0xf1, 0xf8, 0x0b, 0xc0, 0x6c, 0x1a, 0x31, - 0x68, 0x80, 0x79, 0x3f, 0x65, 0x5a, 0xf8, 0x68, 0xf3, 0x69, 0x2e, 0x48, - 0x68, 0x04, 0x38, 0xe1, 0xdd, 0xe7, 0x9f, 0x02, 0x8d, 0xea, 0x87, 0x3e, - 0x53, 0x26, 0xbe, 0xcc, 0x6f, 0xfa, 0x47, 0x19, 0x84, 0x82, 0xf3, 0xf4, - 0x1d, 0x59, 0xe4, 0xb4, 0xe2, 0x68, 0x40, 0xa8, 0x33, 0x39, 0x34, 0x4b, - 0x01, 0x38, 0xb7, 0x8b, 0x1f, 0x0d, 0xdc, 0x63, 0x3a, 0x49, 0x61, 0xfa, - 0x45, 0x16, 0x7c, 0x3f, 0x38, 0xb6, 0x0d, 0x1d, 0xd8, 0xa7, 0x13, 0xad, - 0x04, 0x32, 0xb8, 0x3a, 0x92, 0x39, 0x40, 0x4c, 0x8c, 0xb7, 0xb3, 0x82, - 0xb1, 0xbc, 0x37, 0xe9, 0x70, 0xc1, 0x12, 0x5f, 0x42, 0xb8, 0xda, 0x3c, - 0x6d, 0xe6, 0x0f, 0xfc, 0x94, 0x5f, 0x6c, 0x62, 0x3c, 0x95, 0xc2, 0x8b, - 0xb8, 0x9f, 0x4b, 0xcb, 0xef, 0x96, 0x27, 0x1c, 0xa0, 0x32, 0x64, 0x6d, - 0xc6, 0x6c, 0xb4, 0x29, 0x3f, 0x0f, 0xc9, 0xae, 0xea, 0x8b, 0x2a, 0x9e, - 0x50, 0xdd, 0x7c, 0x99, 0xb8, 0xd9, 0x73, 0x28, 0x01, 0x5c, 0x6e, 0x5b, - 0xe5, 0x1b, 0x6e, 0xa3, 0x0b, 0xc5, 0x70, 0x08, 0x69, 0x7b, 0xfc, 0x1d, - 0x40, 0x5a, 0x40, 0x5f, 0x0c, 0xb7, 0xde, 0xaf, 0x9b, 0xdf, 0xe8, 0x27, - 0xe4, 0x46, 0x7b, 0x1b, 0xf3, 0x81, 0x0a, 0x64, 0x27, 0x7a, 0x14, 0xc4, - 0xdd, 0x3b, 0x1e, 0x89, 0xa9, 0xff, 0xbb, 0x4d, 0xf3, 0x5a, 0x40, 0xd1, - 0x4c, 0x96, 0xaa, 0x35, 0xe2, 0x3c, 0x96, 0xf9, 0x57, 0xb9, 0x59, 0x04, - 0x33, 0xab, 0xe5, 0x01, 0x2c, 0x27, 0xef, 0xbf, 0x9e, 0x99, 0x8e, 0x05, - 0x54, 0x6a, 0xb4, 0x8c, 0x7c, 0x98, 0x22, 0x08, 0xb8, 0x25, 0xa6, 0x85, - 0xe8, 0xc8, 0xd9, 0x91, 0x73, 0x5a, 0x15, 0xb2, 0x4b, 0xf5, 0xca, 0xe1, - 0x70, 0xdc, 0x93, 0xde, 0x0e, 0xe0, 0x1a, 0x35, 0xeb, 0x69, 0xee, 0x2b, - 0xb6, 0xd3, 0x39, 0x69, 0x80, 0x77, 0xd8, 0x96, 0x60, 0x3a, 0xb9, 0x3b, - 0xa7, 0xcc, 0x57, 0xb5, 0xaa, 0x57, 0x96, 0xb7, 0xee, 0x65, 0x88, 0xe4, - 0xf6, 0xe8, 0xc5, 0xd9, 0x0f, 0xe5, 0xfb, 0xcb, 0x6b, 0x0d, 0x7f, 0x00, - 0x2e, 0xe7, 0x77, 0x43, 0x29, 0xf6, 0xbe, 0xe6, 0xf2, 0xac, 0x73, 0x0a, - 0x6b, 0xd5, 0x16, 0x45, 0x4a, 0x00, 0x2c, 0x61, 0x2a, 0x21, 0xec, 0xaa, - 0x99, 0x99, 0x6f, 0xe1, 0x25, 0x5c, 0x49, 0x13, 0x6b, 0xd1, 0x10, 0x9a, - 0x0c, 0x7d, 0x3e, 0x96, 0xf7, 0x65, 0x4d, 0xb3, 0xaa, 0xe9, 0xf0, 0x80, - 0x40, 0x39, 0x08, 0xb4, 0x93, 0xbb, 0xd8, 0xf8, 0x49, 0xdd, 0xdc, 0x25, - 0x2b, 0xeb, 0x18, 0x43, 0x5f, 0x76, 0xa5, 0x10, 0x7f, 0x75, 0xd0, 0x2e, - 0x69, 0x65, 0xe7, 0xc1, 0xa9, 0x80, 0x24, 0xb0, 0x7f, 0xf9, 0x88, 0xcb, - 0xfc, 0x83, 0x9f, 0x3f, 0x0b, 0xa4, 0x8e, 0x12, 0x71, 0xae, 0x98, 0x2e, - 0xb6, 0x45, 0xde, 0x2e, 0x95, 0x77, 0x11, 0xbb, 0x89, 0x4c, 0x13, 0x66, - 0x78, 0x70, 0x97, 0x0b, 0x19, 0x0e, 0x39, 0x44, 0x93, 0x5a, 0x4a, 0xa2, - 0xb5, 0x15, 0x7a, 0x05, 0xd4, 0x2c, 0xed, 0x3f, 0x7c, 0x37, 0xa8, 0x95, - 0x21, 0x96, 0x9b, 0x82, 0xb7, 0x10, 0xfe, 0x92, 0x2c, 0x17, 0x7f, 0xfc, - 0x03, 0x54, 0x81, 0x75, 0x66, 0x01, 0xfd, 0xcc, 0xf7, 0xef, 0x45, 0x86, - 0x7c, 0x05, 0xbd, 0x05, 0x13, 0x67, 0x5e, 0xa1, 0x74, 0x5e, 0x3c, 0xd3, - 0xdf, 0xdb, 0x03, 0xa9, 0x6e, 0xd3, 0xcb, 0xcb, 0x8f, 0x40, 0xd5, 0x33, - 0x93, 0xf1, 0x7c, 0x6a, 0x53, 0x5a, 0x15, 0x60, 0x6c, 0xc7, 0x1d, 0xaf, - 0xf8, 0xa1, 0xf7, 0x7d, 0xd3, 0x33, 0x73, 0xe5, 0x83, 0xf3, 0x63, 0x1b, - 0xaf, 0xd9, 0xb6, 0xaa, 0xba, 0xe2, 0x2a, 0xdf, 0xe1, 0xee, 0xc5, 0x7b, - 0xd4, 0x76, 0x22, 0xbb, 0xa9, 0x83, 0x52, 0x5d, 0x08, 0x4b, 0x38, 0x6a, - 0xb8, 0x9f, 0xfa, 0xc7, 0x60, 0x5f, 0x31, 0x86, 0x70, 0x94, 0x8d, 0x6b, - 0xdd, 0x21, 0x39, 0xd7, 0xb5, 0x4a, 0x3c, 0x31, 0xb7, 0xa4, 0x44, 0x22, - 0x9a, 0xa3, 0x2c, 0x6a, 0xd2, 0xcf, 0xaf, 0xc9, 0x95, 0x25, 0x74, 0xcb, - 0x2b, 0x2f, 0xcc, 0x6f, 0xc5, 0xcf, 0xc7, 0xee, 0x7a, 0x07, 0xf7, 0x20, - 0xce, 0x42, 0x98, 0x6a, 0x6d, 0xff, 0xeb, 0x81, 0xff, 0xe2, 0x1a, 0xfd, - 0xeb, 0x12, 0x57, 0xfa, 0xd4, 0x2e, 0x50, 0xf8, 0x25, 0x49, 0xb2, 0xff, - 0x13, 0x20, 0x4b, 0xca, 0xcc, 0x2b, 0xbc, 0xe7, 0xc6, 0x23, 0x60, 0x60, - 0xb7, 0xef, 0x5e, 0x94, 0xb9, 0xa2, 0x6b, 0x9c, 0xfd, 0x8c, 0x8e, 0xbf, - 0x4c, 0xe5, 0x69, 0xe0, 0xea, 0xab, 0xe6, 0x31, 0x30, 0xf1, 0x75, 0xa4, - 0xe9, 0x12, 0x60, 0x7e, 0xf0, 0xf6, 0xd8, 0x28, 0x86, 0xda, 0x51, 0x85, - 0xce, 0x55, 0x74, 0x26, 0x9d, 0x25, 0x19, 0x92, 0x1e, 0x37, 0xd7, 0xc3, - 0xae, 0x00, 0x1b, 0x7b, 0x4d, 0x88, 0x33, 0x1a, 0xbe, 0x41, 0x44, 0xa6, - 0x12, 0x2b, 0x0f, 0xae, 0xab, 0x47, 0xce, 0x6a, 0xf3, 0x53, 0x76, 0x1c, - 0xa4, 0xc9, 0x04, 0x83, 0xbd, 0x13, 0x7e, 0xec, 0x19, 0xea, 0xbb, 0x20, - 0x79, 0x0b, 0x12, 0x1e, 0x85, 0xcc, 0x7d, 0xa1, 0x1b, 0x06, 0xc2, 0x7f, - 0x71, 0x6b, 0x62, 0xcc, 0xe7, 0x39, 0x80, 0xff, 0xc3, 0x50, 0x1e, 0xea, - 0x37, 0x35, 0xbd, 0x38, 0x4c, 0x24, 0x8c, 0x62, 0x5b, 0x72, 0xab, 0x1b, - 0x24, 0x3a, 0xc9, 0xc0, 0x7f, 0xd3, 0xdd, 0xb9, 0x59, 0x61, 0xd2, 0xad, - 0x6b, 0x89, 0x18, 0x5b, 0xa2, 0x15, 0x98, 0xb5, 0xf7, 0x07, 0xe7, 0x10, - 0x92, 0x6a, 0x25, 0xb5, 0x9a, 0x48, 0xe9, 0xad, 0xc8, 0x87, 0x95, 0x8d, - 0x28, 0x2a, 0x5c, 0xca, 0xc0, 0x42, 0xa1, 0x10, 0x07, 0x1d, 0xe2, 0x8b, - 0xde, 0x92, 0xe2, 0xce, 0x23, 0xe7, 0x7b, 0x37, 0x00, 0x87, 0x41, 0x78, - 0x30, 0x8b, 0x79, 0x55, 0xa6, 0x72, 0xee, 0x80, 0xd3, 0x55, 0xd1, 0x78, - 0x57, 0x76, 0x6e, 0xe5, 0xe9, 0x7e, 0x9e, 0x00, 0xc3, 0xeb, 0x48, 0x4f, - 0x61, 0x20, 0xfc, 0x15, 0xa3, 0x27, 0xe7, 0x36, 0x3d, 0xf7, 0xcf, 0xca, - 0xa3, 0x89, 0xe6, 0xfa, 0x9f, 0xee, 0x48, 0xbf, 0x26, 0x56, 0xa9, 0x88, - 0x3f, 0x9e, 0xa0, 0x65, 0x93, 0xe9, 0x0c, 0x3d, 0x97, 0x4a, 0xf4, 0x8d, - 0x47, 0x8e, 0x59, 0x8d, 0x38, 0xa8, 0x32, 0xe1, 0xe0, 0x04, 0x2f, 0xf1, - 0xf3, 0xe5, 0xc8, 0xc5, 0x22, 0xb0, 0x7e, 0x29, 0x1e, 0xe1, 0x53, 0x3a, - 0x12, 0x02, 0xaa, 0xa2, 0xd9, 0x4e, 0x93, 0xf5, 0x55, 0x6c, 0xa7, 0x1d, - 0x6c, 0xe6, 0x6e, 0x37, 0x98, 0xb7, 0x9f, 0x30, 0xa8, 0x38, 0x02, 0xaf, - 0x52, 0xde, 0xe7, 0x65, 0xd9, 0xf2, 0xd6, 0xef, 0x27, 0xc1, 0x78, 0xc4, - 0xcb, 0x1c, 0x43, 0x18, 0x72, 0x00, 0x0c, 0xf8, 0x11, 0x89, 0x43, 0xe5, - 0xf3, 0x5a, 0xa3, 0xc0, 0x85, 0xa0, 0x68, 0x8d, 0xa7, 0xcb, 0x00, 0x2d, - 0x5d, 0x2e, 0x6e, 0xad, 0xf3, 0xaf, 0x7c, 0x6c, 0x47, 0x42, 0x48, 0xf9, - 0x36, 0xaa, 0x27, 0x9d, 0x7a, 0x03, 0x7b, 0x09, 0x1e, 0x31, 0x57, 0x39, - 0x10, 0x27, 0xb8, 0xdd, 0xc9, 0xc8, 0x84, 0x5d, 0x20, 0xc5, 0x10, 0xf0, - 0xee, 0xec, 0x29, 0x2f, 0xa3, 0xd6, 0x2a, 0x51, 0x88, 0x21, 0xb3, 0xc7, - 0x18, 0x73, 0x1c, 0xb0, 0xee, 0x51, 0x9e, 0xf9, 0x78, 0x51, 0x84, 0x00, - 0x37, 0x2d, 0xde, 0x9d, 0xf3, 0xc1, 0x66, 0xf8, 0xf9, 0xac, 0x5c, 0xc4, - 0x46, 0xb8, 0x27, 0xb0, 0xab, 0x25, 0x55, 0x04, 0xf0, 0xb0, 0xe9, 0xcd, - 0x4f, 0xdf, 0xc6, 0x7a, 0x9c, 0x26, 0x85, 0xec, 0xa4, 0x54, 0x9a, 0xb1, - 0x5e, 0xa5, 0xb0, 0xba, 0x72, 0x1f, 0x6d, 0xec, 0xdc, 0xe1, 0x61, 0xe3, - 0xb6, 0x66, 0xb7, 0xd8, 0x6b, 0xff, 0x68, 0x9f, 0xc8, 0xfd, 0xd0, 0xfa, - 0x3e, 0x0c, 0xae, 0x25, 0x29, 0x95, 0x56, 0x67, 0x44, 0xb7, 0xf0, 0xb4, - 0xe8, 0x44, 0x36, 0x2c, 0xe0, 0x27, 0xa9, 0x21, 0xdb, 0x0f, 0xdd, 0x8c, - 0xac, 0x29, 0x4a, 0xb2, 0x55, 0xa7, 0x03, 0xe4, 0xfd, 0x78, 0x16, 0xe6, - 0xac, 0x21, 0xa8, 0x3a, 0x58, 0xbe, 0x4c, 0xdc, 0x57, 0xa8, 0xdf, 0x2d, - 0x6b, 0x4a, 0xf2, 0xe8, 0x84, 0x32, 0x68, 0xf8, 0x4b, 0x4b, 0x4d, 0x11, - 0x76, 0x6f, 0xfe, 0xbb, 0x5c, 0x0a, 0x52, 0x82, 0x8d, 0x28, 0xf4, 0x9c, - 0xa6, 0x68, 0x95, 0x37, 0x44, 0x04, 0x64, 0xe4, 0xae, 0x0d, 0x17, 0xf4, - 0x0c, 0x58, 0x7f, 0xf3, 0x8a, 0xf4, 0xea, 0x04, 0x3c, 0xc7, 0xa0, 0x49, - 0x70, 0x8a, 0xb2, 0x1f, 0xfb, 0x73, 0x8e, 0xe9, 0xc2, 0x2d, 0x74, 0xf5, - 0x62, 0x3d, 0x0e, 0x7d, 0xfe, 0xa6, 0x67, 0xd5, 0x34, 0x10, 0xa1, 0x7e, - 0xf3, 0x81, 0x28, 0x5c, 0xcc, 0x41, 0x98, 0x32, 0x33, 0x06, 0x9b, 0x02, - 0x72, 0x72, 0x94, 0xd3, 0x3b, 0x27, 0xcf, 0x7a, 0xb7, 0x26, 0xe5, 0xc4, - 0x30, 0x96, 0xae, 0x02, 0x4d, 0xa6, 0x8c, 0xcf, 0x25, 0x1a, 0x0b, 0x5d, - 0x17, 0x89, 0x91, 0x55, 0x04, 0x68, 0xd2, 0xb0, 0xb4, 0x1a, 0x61, 0xe1, - 0xb7, 0x0d, 0x53, 0x4f, 0x6e, 0xa2, 0xd0, 0x34, 0x5d, 0x25, 0x9d, 0x81, - 0xdc, 0x3a, 0xa8, 0xbe, 0x4f, 0xd6, 0x69, 0x91, 0x49, 0xdd, 0x36, 0xc5, - 0xbc, 0x19, 0x93, 0xaf, 0xcf, 0xf0, 0xe1, 0x77, 0x1b, 0xaf, 0xe3, 0x0d, - 0x1b, 0x71, 0xad, 0xdb, 0x5e, 0x0f, 0xda, 0xa5, 0x53, 0x58, 0xc7, 0xc5, - 0x0d, 0xa5, 0xe5, 0x15, 0xea, 0x38, 0x3d, 0xe9, 0xc8, 0x93, 0x69, 0xdd, - 0x7f, 0x56, 0xa8, 0xc2, 0x38, 0xda, 0x0d, 0xe7, 0xe4, 0x19, 0x2b, 0xaa, - 0x22, 0xb7, 0x8e, 0x83, 0x43, 0xaa, 0x52, 0x64, 0xb0, 0x78, 0x16, 0xdb, - 0x15, 0x77, 0xc8, 0x6f, 0x79, 0xab, 0x8c, 0x0f, 0x51, 0x49, 0xab, 0x04, - 0xb8, 0xae, 0xec, 0x15, 0xa0, 0x95, 0x35, 0x28, 0xf1, 0x18, 0xc0, 0x7a, - 0x53, 0x1f, 0x9f, 0xd3, 0x20, 0x59, 0xa3, 0x33, 0xab, 0x1e, 0x20, 0x21, - 0xa1, 0x66, 0x99, 0x12, 0x6d, 0xdc, 0x8b, 0x73, 0xb3, 0x48, 0x83, 0x6e, - 0xa8, 0xf9, 0xd5, 0x98, 0x67, 0x6d, 0x77, 0x67, 0xcf, 0x58, 0xc3, 0xf6, - 0xd8, 0x03, 0xd8, 0xa7, 0xa6, 0x6b, 0x12, 0xa6, 0x88, 0xb3, 0x8a, 0x9c, - 0x72, 0x0a, 0x55, 0x65, 0xa2, 0x81, 0x3b, 0x2f, 0x85, 0x5a, 0xe8, 0xa4, - 0x96, 0xb1, 0xd4, 0x19, 0x68, 0x41, 0x1f, 0x0e, 0x1a, 0xd7, 0x3f, 0x78, - 0x3a, 0xce, 0x2b, 0x5e, 0x38, 0xe4, 0x24, 0xf5, 0x4c, 0x63, 0x75, 0x62, - 0xdc, 0x0e, 0xb4, 0xc7, 0xe0, 0x7f, 0x71, 0x86, 0x64, 0xa1, 0x45, 0x1f, - 0x72, 0xc1, 0x45, 0x8a, 0x60, 0x33, 0x21, 0x01, 0xeb, 0xa1, 0x5e, 0x51, - 0x4e, 0x85, 0xd8, 0x3e, 0x4b, 0xd2, 0x33, 0x89, 0x09, 0x47, 0xbf, 0xbd, - 0xb1, 0xe1, 0x22, 0xd2, 0x0f, 0xec, 0xa5, 0x51, 0x1e, 0xab, 0x96, 0x82, - 0xe3, 0x48, 0x45, 0x47, 0x6a, 0xee, 0xca, 0x07, 0x5e, 0xb3, 0xc9, 0x7a, - 0xe1, 0xf2, 0x42, 0xba, 0x3b, 0x2e, 0x5a, 0x86, 0x1f, 0x11, 0x4a, 0x1a, - 0xe6, 0xb7, 0xc8, 0xd8, 0xc4, 0x85, 0xed, 0x61, 0xf3, 0xf9, 0xd2, 0xdb, - 0x33, 0x5c, 0x3e, 0x94, 0xe1, 0xb7, 0x71, 0x69, 0xff, 0x79, 0x25, 0x0f, - 0x40, 0xea, 0xc8, 0x79, 0xb6, 0xdb, 0x09, 0xf8, 0xd9, 0x8c, 0xfe, 0x04, - 0x3b, 0x9a, 0x2f, 0xf1, 0x18, 0xad, 0xdd, 0xcc, 0xf6, 0x37, 0x3c, 0x41, - 0x87, 0x9a, 0xbe, 0x9f, 0x61, 0x92, 0x95, 0x5a, 0x44, 0xeb, 0xb4, 0x27, - 0xed, 0xbf, 0x38, 0xef, 0xd4, 0xc1, 0x5f, 0x0d, 0x2c, 0x41, 0x84, 0x92, - 0x3e, 0x3e, 0xb9, 0x83, 0x7a, 0xaa, 0x28, 0x25, 0xb0, 0x80, 0x33, 0x17, - 0xb7, 0x79, 0x6a, 0xcb, 0x19, 0x9b, 0x78, 0xd6, 0x8e, 0x51, 0x3b, 0x86, - 0x2f, 0x9c, 0x28, 0xb4, 0x87, 0x6d, 0x92, 0x2a, 0x48, 0xed, 0xd6, 0xde, - 0x94, 0x52, 0xe0, 0xf3, 0x63, 0x36, 0x1d, 0x14, 0x9c, 0xfc, 0x38, 0xf1, - 0x9a, 0x4e, 0xde, 0xc9, 0x8f, 0xd4, 0x1a, 0x15, 0xc7, 0x8e, 0x14, 0xb1, - 0xbc, 0x4e, 0x6e, 0xad, 0x88, 0xc0, 0x02, 0xd1, 0x02, 0x66, 0xb3, 0x4c, - 0x52, 0x8e, 0x3e, 0x48, 0x02, 0x1f, 0xcb, 0x60, 0x37, 0x78, 0x5c, 0x4d, - 0x01, 0x50, 0xe8, 0xb9, 0xf2, 0x1b, 0x3b, 0xed, 0x90, 0x50, 0x1e, 0x36, - 0x08, 0x1f, 0x5d, 0x78, 0x6c, 0x36, 0xdc, 0xbf, 0x03, 0x95, 0xf3, 0x43, - 0x07, 0x01, 0x99, 0xd6, 0x31, 0x4a, 0x1e, 0x9d, 0x39, 0x69, 0x75, 0xaf, - 0x8c, 0x7a, 0xb9, 0x90, 0xa0, 0xbd, 0x83, 0xbb, 0x71, 0x21, 0x58, 0xa3, - 0x61, 0xa1, 0xb6, 0x33, 0xd2, 0xb1, 0x82, 0x24, 0x59, 0xad, 0x0f, 0xc1, - 0x98, 0x06, 0x7c, 0x9d, 0x28, 0x30, 0xd5, 0x64, 0x32, 0x53, 0xa9, 0x38, - 0x04, 0x1c, 0xc3, 0x00, 0xc3, 0xa4, 0xfc, 0x58, 0xbb, 0xa2, 0x07, 0x2b, - 0xd4, 0x2b, 0xb9, 0xcd, 0x9f, 0x7c, 0x72, 0xb1, 0x2a, 0x76, 0x8a, 0xca, - 0x71, 0x73, 0x00, 0xa0, 0x90, 0xd8, 0xaf, 0x79, 0x03, 0x29, 0x26, 0x8f, - 0x23, 0xc9, 0x38, 0x41, 0xd4, 0x6a, 0x03, 0x64, 0x91, 0x53, 0x9b, 0x95, - 0xbc, 0x88, 0x6d, 0xf9, 0xca, 0xf3, 0x04, 0x69, 0x8a, 0x07, 0x01, 0x4a, - 0x3c, 0x1a, 0x6a, 0x82, 0x99, 0x85, 0x7b, 0x69, 0x6b, 0x51, 0x88, 0x00, - 0x0b, 0xc9, 0xca, 0x8e, 0x9f, 0x64, 0x89, 0x8d, 0x19, 0x82, 0xa1, 0xf2, - 0x3e, 0xf9, 0xba, 0x70, 0x7e, 0xbc, 0x36, 0x45, 0xef, 0x8f, 0x70, 0xe2, - 0x94, 0x37, 0xb5, 0xa7, 0x1f, 0xcb, 0x2d, 0x99, 0x7d, 0x30, 0x7f, 0xcf, - 0xe2, 0x91, 0xff, 0x96, 0xcb, 0x8e, 0x3a, 0x19, 0xc8, 0xc3, 0xd7, 0xa4, - 0x6a, 0x43, 0xf0, 0x8d, 0x0e, 0x77, 0x37, 0x6d, 0x94, 0xbe, 0x0b, 0x68, - 0x96, 0x9e, 0xaa, 0x0c, 0xf7, 0x23, 0xae, 0xcb, 0x77, 0x2a, 0x78, 0xaa, - 0xf8, 0x03, 0x15, 0x90, 0xc0, 0x6f, 0x24, 0x64, 0x98, 0xf3, 0xb8, 0x8b, - 0xaa, 0xf5, 0x16, 0x79, 0x89, 0xb7, 0x29, 0xeb, 0xfe, 0xd9, 0xbe, 0x54, - 0xa0, 0x4b, 0xb5, 0x3c, 0xb2, 0xc8, 0x39, 0x44, 0xe0, 0x4a, 0xd4, 0xa6, - 0xf2, 0x8a, 0xc5, 0x21, 0xf5, 0xc2, 0x86, 0x5a, 0xcc, 0x16, 0x49, 0x25, - 0x38, 0x39, 0x59, 0xea, 0x48, 0x83, 0xa3, 0xb3, 0x47, 0x6a, 0x9f, 0xc7, - 0x2b, 0x91, 0x8a, 0x50, 0x78, 0x47, 0xc5, 0x9d, 0x15, 0x2f, 0xda, 0x23, - 0xf5, 0xf2, 0xd6, 0x19, 0x17, 0x26, 0x90, 0xf0, 0xb4, 0x7c, 0xee, 0x3b, - 0x75, 0xb6, 0xd7, 0xa4, 0x43, 0x1f, 0x9b, 0x89, 0x9f, 0x14, 0x66, 0x92, - 0x2f, 0xd2, 0x0e, 0xab, 0x3b, 0x88, 0x01, 0x57, 0x9c, 0xb1, 0x0e, 0xae, - 0x89, 0x89, 0x9d, 0x07, 0x55, 0x5f, 0xb6, 0x9b, 0x8c, 0x61, 0x30, 0xfc, - 0x85, 0xc9, 0x80, 0x2f, 0x52, 0x1c, 0x05, 0x59, 0x3c, 0xe8, 0x76, 0x34, - 0x26, 0xc6, 0x63, 0x6b, 0xa1, 0x82, 0xe8, 0x9a, 0x60, 0x3b, 0x46, 0x55, - 0xc3, 0xfc, 0x25, 0x9a, 0x7e, 0x84, 0x55, 0x1f, 0x86, 0x54, 0x7c, 0xc0, - 0xa5, 0xa9, 0x54, 0x9a, 0x15, 0x6e, 0xcf, 0xb9, 0x54, 0x5c, 0x60, 0xd5, - 0x15, 0x95, 0xb6, 0x5f, 0x5a, 0x76, 0xd0, 0xc0, 0xed, 0xb8, 0xde, 0xe4, - 0x70, 0x56, 0xe9, 0xb4, 0x0a, 0xaa, 0x90, 0xfc, 0x69, 0xf1, 0x25, 0xc4, - 0xe3, 0x1f, 0x7b, 0x9e, 0x01, 0x6d, 0xad, 0xcd, 0xcd, 0xfc, 0xba, 0x88, - 0xdb, 0x91, 0x4b, 0xa8, 0xb1, 0x96, 0xc6, 0xbd, 0xf2, 0x14, 0x61, 0x40, - 0xe1, 0x55, 0x33, 0xfc, 0x98, 0x29, 0x90, 0x9b, 0x3d, 0x5e, 0x9c, 0x28, - 0xb0, 0x59, 0x6b, 0x2b, 0x4e, 0xca, 0x6b, 0x00, 0x0b, 0xb2, 0xa2, 0xf8, - 0x3f, 0x80, 0xda, 0x23, 0x44, 0x1c, 0x4c, 0x7e, 0xba, 0x6e, 0xfd, 0x55, - 0x3c, 0x7a, 0x21, 0xb2, 0x5b, 0x3f, 0xe4, 0xa2, 0xbf, 0xf4, 0x17, 0x5f, - 0x88, 0x10, 0x03, 0xfc, 0x81, 0xb0, 0x23, 0x98, 0xe7, 0x2a, 0x0e, 0xe0, - 0x0b, 0xb9, 0xf5, 0xc4, 0x44, 0xd2, 0xa9, 0x24, 0x1a, 0xab, 0x2a, 0x46, - 0x65, 0x1f, 0x7b, 0xf5, 0xfb, 0xfc, 0xf3, 0x8f, 0xf0, 0x27, 0xeb, 0x82, - 0x2d, 0x39, 0xff, 0xdf, 0x08, 0xf6, 0xc2, 0x48, 0x49, 0x31, 0xb9, 0x85, - 0x11, 0xec, 0x86, 0x80, 0xe3, 0x68, 0x01, 0x82, 0x5f, 0xc1, 0x55, 0xfc, - 0x05, 0xc9, 0xb6, 0x5b, 0xac, 0x04, 0xf1, 0x11, 0x48, 0x0e, 0xd0, 0xc3, - 0x9f, 0xb2, 0x2c, 0xad, 0x48, 0xe4, 0x19, 0x06, 0x10, 0x5d, 0x7d, 0xa1, - 0x65, 0xbf, 0xbf, 0xf7, 0x95, 0x32, 0x4e, 0x33, 0x95, 0x86, 0x9e, 0x1c, - 0x1c, 0x17, 0x09, 0x45, 0x21, 0x8e, 0x48, 0xa5, 0x9f, 0x6f, 0xe8, 0x52, - 0x0e, 0xc0, 0x37, 0x22, 0x8a, 0x75, 0x9f, 0xff, 0x8b, 0xd3, 0xc0, 0x2b, - 0xb8, 0xe8, 0xb9, 0xbd, 0x22, 0x40, 0x92, 0x2e, 0x3e, 0xbf, 0x4c, 0x21, - 0x23, 0x24, 0xc1, 0xcc, 0x0d, 0xfd, 0x43, 0xf6, 0xdd, 0xb8, 0x38, 0x70, - 0x1c, 0x68, 0x70, 0xb6, 0xc2, 0x92, 0x2e, 0x83, 0xcc, 0xe8, 0xb2, 0xc2, - 0x10, 0x02, 0x5e, 0x67, 0x2f, 0xd4, 0xb7, 0x42, 0xbf, 0x70, 0x52, 0xed, - 0xaf, 0x3d, 0x3f, 0xe5, 0x6d, 0xbf, 0x72, 0xec, 0x44, 0xf3, 0x69, 0x7c, - 0x33, 0x20, 0xf5, 0x20, 0xe8, 0x12, 0x07, 0x00, 0x86, 0xc5, 0xec, 0xee, - 0x7b, 0x93, 0xae, 0x2b, 0xb7, 0x08, 0x93, 0x60, 0x81, 0x51, 0xc1, 0xce, - 0xec, 0x7f, 0x23, 0x5c, 0x5c, 0xde, 0xcc, 0x4b, 0x3d, 0x8b, 0x63, 0x47, - 0xc0, 0x0c, 0x3c, 0x02, 0x98, 0xc9, 0x15, 0xa6, 0xc0, 0x2d, 0xdb, 0xb1, - 0xfc, 0x6f, 0x04, 0x2a, 0x41, 0x2a, 0x05, 0xba, 0x17, 0x59, 0xe5, 0x73, - 0xdf, 0x3b, 0xb7, 0x18, 0x6d, 0xd2, 0xe2, 0x2a, 0x15, 0x94, 0x5f, 0xd0, - 0xfe, 0x04, 0x45, 0x4c, 0xc2, 0xa9, 0x57, 0x6b, 0x06, 0x7f, 0x93, 0x2a, - 0xd7, 0x03, 0x12, 0x31, 0x15, 0xc1, 0x78, 0x08, 0xfb, 0x70, 0x35, 0x4b, - 0x8a, 0x9f, 0xc7, 0x03, 0xb5, 0x8b, 0xce, 0x2b, 0x4d, 0x71, 0xd0, 0x6d, - 0x79, 0x81, 0xf7, 0xec, 0xad, 0xe9, 0x8b, 0xa9, 0x33, 0xbe, 0x69, 0xb9, - 0x66, 0x34, 0xc7, 0x2b, 0x67, 0xec, 0x1f, 0x44, 0x4e, 0x75, 0xcc, 0xe3, - 0x77, 0xa9, 0x8c, 0x5b, 0x40, 0x58, 0x18, 0x80, 0xfc, 0xe3, 0xdb, 0x2d, - 0xfe, 0xfb, 0x40, 0x58, 0x94, 0x17, 0x59, 0xe7, 0x6e, 0x11, 0xaf, 0x76, - 0x04, 0xd0, 0x66, 0x9f, 0x36, 0x49, 0xb7, 0x34, 0xac, 0xf4, 0xae, 0x3f, - 0x65, 0xe6, 0xea, 0x63, 0xfe, 0x15, 0x4a, 0x52, 0x82, 0x28, 0x88, 0x0d, - 0x18, 0xd9, 0xeb, 0x05, 0xa3, 0x14, 0x45, 0x06, 0xba, 0x35, 0x17, 0xba, - 0xb9, 0xfc, 0x27, 0xd8, 0x07, 0x18, 0xe5, 0xb6, 0x3b, 0xd3, 0xaa, 0x63, - 0x60, 0x8e, 0x2a, 0x47, 0x32, 0x36, 0xef, 0xf6, 0xa3, 0x13, 0x3b, 0x02, - 0xba, 0xf4, 0x24, 0x77, 0x34, 0xe9, 0x7a, 0x55, 0x87, 0xf8, 0x57, 0x00, - 0x4d, 0xad, 0xd5, 0x1f, 0xdc, 0xca, 0x58, 0x30, 0xdb, 0xe3, 0xb5, 0x9a, - 0x7d, 0x42, 0xda, 0x60, 0xcc, 0x1c, 0xd5, 0x7d, 0xa5, 0xcc, 0x38, 0x9b, - 0xba, 0xa1, 0x1f, 0x28, 0x67, 0x3d, 0x9e, 0xd3, 0x18, 0x4f, 0xdf, 0xc7, - 0x9f, 0x4a, 0x41, 0x4b, 0x3e, 0x16, 0xcb, 0xa6, 0xdb, 0x5c, 0xdf, 0xce, - 0x48, 0xac, 0xc6, 0xf5, 0xc8, 0x6a, 0x68, 0xdc, 0xf4, 0xb4, 0xfa, 0xcb, - 0xf4, 0x90, 0x33, 0x5c, 0x43, 0xea, 0xe7, 0xbe, 0x30, 0xaf, 0xf3, 0xaa, - 0xed, 0x95, 0x88, 0x47, 0x83, 0x56, 0x65, 0x5e, 0x6d, 0x3e, 0xe7, 0x00, - 0x24, 0x2d, 0xd5, 0xe7, 0xeb, 0x22, 0x5b, 0x86, 0x42, 0xc6, 0x41, 0x55, - 0x7a, 0xea, 0xd1, 0x94, 0x04, 0xb5, 0xea, 0x7f, 0x4c, 0x49, 0xcf, 0xb2, - 0x25, 0x4f, 0x2d, 0x9f, 0xf5, 0xde, 0xf3, 0xe4, 0x5f, 0x3d, 0xbb, 0xd4, - 0x67, 0x74, 0xed, 0x05, 0xf2, 0xc5, 0x50, 0x45, 0xef, 0x65, 0x57, 0xf8, - 0x63, 0x1a, 0x6a, 0x64, 0x3f, 0xc1, 0xb9, 0xb4, 0xda, 0x3c, 0x93, 0x62, - 0xf1, 0xe0, 0xc6, 0x6c, 0x30, 0x1e, 0x4a, 0x26, 0x65, 0x6f, 0xae, 0x6c, - 0xb2, 0xc3, 0xd1, 0x03, 0xa4, 0x4a, 0x6a, 0xcf, 0x31, 0x40, 0xa3, 0x40, - 0xa5, 0x39, 0x90, 0x9b, 0x33, 0x09, 0xa0, 0x62, 0x94, 0x9a, 0x00, 0xec, - 0xc5, 0x58, 0x46, 0x93, 0x67, 0x78, 0xa4, 0xf4, 0x6b, 0x25, 0x0d, 0x10, - 0x4b, 0x5c, 0xd1, 0xc5, 0xf2, 0x2a, 0x0b, 0xc1, 0x46, 0xa2, 0xd0, 0x37, - 0x9b, 0x12, 0xae, 0x5c, 0x5f, 0x7f, 0xdb, 0x96, 0x15, 0xf0, 0xc1, 0x4a, - 0xdb, 0x05, 0x85, 0xc1, 0x08, 0xc9, 0x40, 0x8c, 0x85, 0x7b, 0x6f, 0x2a, - 0x6b, 0x9d, 0xa9, 0x9d, 0xff, 0x54, 0xa5, 0xdb, 0xef, 0x45, 0x4f, 0xc2, - 0x88, 0xb4, 0xd3, 0x86, 0x33, 0x8e, 0xe9, 0x0f, 0xb3, 0x6d, 0xe8, 0x6f, - 0x88, 0xa3, 0xaf, 0xb0, 0x89, 0x3e, 0x1e, 0x1d, 0x8d, 0x10, 0x86, 0x4e, - 0xf1, 0x59, 0x85, 0xe2, 0x66, 0xcc, 0x5c, 0x6f, 0x6a, 0xce, 0xce, 0x60, - 0xcf, 0x15, 0xeb, 0x1d, 0x8d, 0xaa, 0x67, 0xf6, 0xf8, 0xb0, 0xd9, 0x0c, - 0x01, 0xa2, 0x37, 0x6c, 0x8f, 0xb8, 0x79, 0x4f, 0xc3, 0xeb, 0x46, 0x54, - 0xc2, 0x85, 0x54, 0xe4, 0x2b, 0x52, 0x3f, 0x10, 0x8e, 0xba, 0x47, 0xfc, - 0x5b, 0x0b, 0x41, 0x17, 0xad, 0x5c, 0x07, 0xf5, 0x0c, 0xc3, 0x03, 0xcc, - 0x35, 0x9d, 0x64, 0x2e, 0x2d, 0xbb, 0xdc, 0x96, 0x02, 0xb4, 0x52, 0xb8, - 0xe9, 0x77, 0x08, 0x19, 0x87, 0x86, 0xe2, 0xdc, 0x82, 0x7f, 0x7d, 0xfe, - 0xac, 0x06, 0x98, 0xd8, 0x3b, 0x7f, 0xbf, 0xdb, 0x35, 0x70, 0x48, 0xeb, - 0xd1, 0xfb, 0xc4, 0xa4, 0x42, 0x9d, 0x92, 0xbe, 0xa8, 0x4a, 0x25, 0xa7, - 0x78, 0xd7, 0xa1, 0x83, 0x03, 0xeb, 0xc7, 0xb2, 0xc3, 0x46, 0x7f, 0xc4, - 0x73, 0xbf, 0xf5, 0xe3, 0x1e, 0x91, 0x3d, 0x01, 0xcd, 0x32, 0xc9, 0x25, - 0xd9, 0x8f, 0x7e, 0x4a, 0x4f, 0xb7, 0x95, 0xc0, 0x73, 0xd0, 0x2f, 0xd6, - 0x0d, 0x48, 0xcc, 0xc7, 0xd6, 0x05, 0x0a, 0xe3, 0xca, 0x8c, 0x0b, 0x6b, - 0xb4, 0x1a, 0x45, 0xdc, 0x8a, 0xae, 0xea, 0xae, 0xc7, 0xd3, 0x1e, 0x3b, - 0xc3, 0xff, 0x6d, 0x20, 0x07, 0x82, 0x80, 0x6a, 0x10, 0x36, 0x30, 0x71, - 0xb0, 0x68, 0x56, 0x81, 0x1c, 0x6b, 0x98, 0x7a, 0xac, 0x1d, 0xd6, 0x2b, - 0xb8, 0x73, 0x21, 0x1b, 0x70, 0xd3, 0x5a, 0xe1, 0x0e, 0x14, 0x90, 0x8d, - 0x5c, 0xa6, 0xd4, 0x2a, 0xf8, 0xd3, 0x6d, 0x9f, 0x4f, 0x33, 0x92, 0x7d, - 0xee, 0x9d, 0x2f, 0x72, 0xf5, 0x93, 0xfc, 0x31, 0x25, 0xaa, 0xd4, 0xef, - 0x1a, 0xd9, 0xd6, 0x1f, 0xa1, 0x39, 0x70, 0xdb, 0xf8, 0xd6, 0x02, 0xad, - 0x9e, 0xe0, 0xd3, 0x40, 0x68, 0x30, 0x11, 0xe8, 0x93, 0x37, 0x50, 0x72, - 0x19, 0x3a, 0xab, 0x65, 0x9c, 0x28, 0xc9, 0x67, 0x0a, 0x6b, 0xf0, 0x80, - 0x58, 0x2c, 0xc4, 0x67, 0x06, 0x88, 0x4f, 0x6d, 0xa9, 0xfc, 0x9e, 0xe8, - 0xfc, 0xde, 0xd8, 0xb1, 0xe0, 0xcb, 0x32, 0x9c, 0x79, 0x89, 0x8e, 0x2d, - 0x0b, 0xe1, 0xae, 0x09, 0x77, 0x97, 0xe2, 0xf2, 0x36, 0x47, 0x0e, 0x87, - 0xe8, 0x67, 0x7e, 0xe7, 0x33, 0x8d, 0xc1, 0x61, 0x41, 0xa0, 0xc8, 0x05, - 0x8d, 0x80, 0x26, 0xe6, 0x29, 0x3c, 0x00, 0x50, 0x79, 0x25, 0xd1, 0xb3, - 0xa4, 0x0a, 0x75, 0x83, 0x4b, 0xf0, 0x6b, 0xbc, 0xf1, 0x24, 0xe0, 0xa8, - 0x5b, 0x48, 0xf0, 0x49, 0x88, 0x66, 0x7a, 0xeb, 0x0e, 0x95, 0x88, 0x64, - 0xe4, 0x46, 0x13, 0xfe, 0xe3, 0xbe, 0x74, 0xf3, 0xb6, 0x7b, 0x45, 0x2d, - 0xc1, 0x37, 0x93, 0x52, 0xb9, 0xf0, 0x1f, 0xc6, 0xe2, 0x48, 0x1a, 0xfd, - 0xf9, 0x69, 0x71, 0x12, 0xf1, 0x98, 0x9b, 0x03, 0xce, 0x02, 0x58, 0xf9, - 0xd4, 0xb3, 0x20, 0x63, 0xd5, 0x5e, 0x1f, 0x30, 0x65, 0x73, 0x08, 0x81, - 0x41, 0x89, 0x5b, 0x7e, 0x1a, 0x2f, 0xc3, 0x9f, 0x5d, 0x6a, 0x61, 0xdb, - 0x83, 0x15, 0xda, 0x95, 0xb7, 0x4c, 0x96, 0x63, 0xd3, 0x1b, 0x9d, 0xfe, - 0x0b, 0x11, 0xf0, 0x60, 0x01, 0x7b, 0xf5, 0x01, 0x26, 0xbd, 0xad, 0x61, - 0xbb, 0xb8, 0x1c, 0x8f, 0x03, 0xe6, 0x8c, 0x39, 0xa6, 0x4f, 0x59, 0xbb, - 0x56, 0xa2, 0x5f, 0xe4, 0x19, 0x23, 0x23, 0xf0, 0x9c, 0x52, 0xd4, 0x41, - 0x5b, 0xd3, 0xc1, 0xd9, 0x26, 0x96, 0xe5, 0xf4, 0xdf, 0x64, 0x7e, 0xa3, - 0xea, 0x67, 0xa3, 0x39, 0x0d, 0x64, 0x77, 0xc7, 0xe5, 0x67, 0x87, 0xd5, - 0xd3, 0x71, 0x98, 0xb9, 0x25, 0xa1, 0x0b, 0x64, 0xa1, 0x3b, 0x69, 0x34, - 0xea, 0x73, 0xca, 0xeb, 0x2d, 0x9c, 0x29, 0x3d, 0xdd, 0x6d, 0x48, 0x28, - 0xd8, 0x96, 0x25, 0x7e, 0x0b, 0x86, 0xda, 0x1f, 0x3b, 0xbf, 0x05, 0x60, - 0xa8, 0xbe, 0x46, 0xb2, 0x4d, 0x1d, 0x1f, 0x4e, 0xba, 0xf9, 0x13, 0x8f, - 0x7b, 0x51, 0x48, 0xb7, 0xd7, 0x2f, 0x70, 0x35, 0xaa, 0x9a, 0xa0, 0xd7, - 0xc3, 0x8a, 0x46, 0x66, 0xd9, 0xd0, 0x6f, 0x63, 0x65, 0x12, 0x04, 0xd8, - 0xa5, 0x6b, 0x03, 0x3f, 0x90, 0x5c, 0x1d, 0xad, 0xf0, 0xdb, 0x2b, 0x01, - 0x16, 0x39, 0xf5, 0x07, 0xa0, 0x3a, 0x38, 0x20, 0x69, 0x1c, 0x91, 0x6b, - 0xec, 0x52, 0x54, 0x1f, 0x7e, 0xd9, 0x30, 0x00, 0x39, 0x9e, 0x07, 0x31, - 0x84, 0x2f, 0xe7, 0x81, 0x77, 0xe6, 0x5e, 0xcc, 0x59, 0x8e, 0x7c, 0x98, - 0x5a, 0xea, 0x63, 0x89, 0x95, 0x59, 0xdd, 0xcf, 0xac, 0x0a, 0x5c, 0x78, - 0x11, 0x2f, 0xa1, 0xf5, 0xc8, 0xf0, 0x2b, 0xb6, 0x01, 0xa5, 0x8a, 0x83, - 0xac, 0x78, 0x3a, 0x74, 0xcf, 0xb6, 0x99, 0x3c, 0x87, 0xc4, 0x8e, 0x4c, - 0x49, 0xbd, 0xff, 0x63, 0x5b, 0x1d, 0xb9, 0xe9, 0xf5, 0x24, 0x69, 0x28, - 0xbb, 0x1d, 0x9e, 0x71, 0x9d, 0xaa, 0xcf, 0x8f, 0x6e, 0xd6, 0x82, 0xce, - 0x5b, 0x35, 0x7d, 0xc3, 0x1b, 0x5d, 0x8c, 0x75, 0x77, 0x46, 0xa5, 0x3b, - 0x73, 0x3e, 0x1a, 0x2e, 0xcc, 0x23, 0x2f, 0xf6, 0x57, 0x21, 0xfe, 0x8f, - 0xcb, 0x04, 0x4d, 0x7d, 0xa3, 0x51, 0x57, 0x4b, 0xee, 0xdf, 0xfb, 0xbe, - 0x5b, 0x90, 0xc6, 0x36, 0x66, 0x99, 0x92, 0xd2, 0xea, 0xbf, 0xea, 0xd0, - 0x11, 0xea, 0x89, 0x8b, 0x1b, 0x82, 0x7d, 0x8d, 0x4a, 0x51, 0xbb, 0x49, - 0x6a, 0xaf, 0x74, 0x43, 0x14, 0xea, 0x02, 0xdc, 0xc1, 0x9e, 0xe1, 0x30, - 0x9b, 0xdb, 0x65, 0x6a, 0x93, 0x6d, 0x8b, 0x90, 0x9f, 0x4e, 0xec, 0xd3, - 0x7d, 0x26, 0xbb, 0xfd, 0x93, 0xb6, 0x64, 0x8d, 0xb8, 0x2c, 0x90, 0x10, - 0xfe, 0xdd, 0x1c, 0x3f, 0xe2, 0xa0, 0xad, 0x9f, 0xa8, 0xa0, 0x37, 0x56, - 0x5a, 0x36, 0xfa, 0x89, 0x47, 0xbb, 0x05, 0x5e, 0x23, 0x2c, 0x92, 0xdb, - 0x81, 0x3d, 0x13, 0x7a, 0x5f, 0xd3, 0x27, 0x2f, 0xf7, 0xcb, 0x73, 0xe2, - 0x4a, 0x84, 0x53, 0x6c, 0x8d, 0x0c, 0x5e, 0x54, 0x4d, 0xfb, 0x00, 0x8b, - 0x55, 0xf1, 0x36, 0xcf, 0x0f, 0x80, 0x2c, 0xc7, 0x48, 0x79, 0xe5, 0x4c, - 0x54, 0x6a, 0x8a, 0xf1, 0x75, 0x53, 0x88, 0xbb, 0xd3, 0xc6, 0x83, 0xf8, - 0x26, 0xc2, 0xd3, 0x76, 0x7d, 0x79, 0xd8, 0x65, 0x90, 0x3e, 0xaa, 0x2c, - 0xc6, 0x81, 0x81, 0x15, 0x73, 0xbf, 0xf3, 0x2e, 0xf9, 0xdf, 0x11, 0x5b, - 0x3d, 0x98, 0xea, 0x82, 0x39, 0x8c, 0xb1, 0xbd, 0xef, 0x2b, 0x91, 0xfb, - 0x16, 0x59, 0x41, 0xf8, 0x3d, 0x4b, 0xac, 0xb3, 0xf2, 0x02, 0x4e, 0xd4, - 0x31, 0x57, 0xde, 0xf6, 0xe6, 0x1f, 0x50, 0x26, 0x68, 0xda, 0xbc, 0x03, - 0xee, 0xe1, 0x36, 0x8f, 0x2b, 0x10, 0xb3, 0xd1, 0xb6, 0x14, 0x00, 0xfd, - 0xea, 0x8a, 0xd7, 0xc3, 0xcf, 0x6f, 0x3c, 0x73, 0xf9, 0x7e, 0xb7, 0xd4, - 0x96, 0xa5, 0x4d, 0x06, 0x4b, 0xd3, 0x2b, 0xec, 0xf8, 0x4f, 0x79, 0x57, - 0x36, 0x70, 0x78, 0x9d, 0x95, 0x26, 0x56, 0xf6, 0xc7, 0x11, 0x78, 0xef, - 0x93, 0xa3, 0x6a, 0xc5, 0xad, 0x33, 0x67, 0x82, 0x6b, 0x8b, 0x3c, 0xce, - 0xcd, 0x31, 0x3b, 0xa7, 0x07, 0x88, 0xb4, 0x1d, 0x19, 0x16, 0x7a, 0x78, - 0x4d, 0xec, 0x00, 0x61, 0x22, 0x73, 0x63, 0x37, 0xfa, 0x1d, 0x5f, 0xc1, - 0xce, 0xf4, 0xa9, 0xa9, 0xfc, 0x86, 0x85, 0x46, 0xd8, 0x37, 0xbe, 0xc1, - 0x23, 0x25, 0xf8, 0x9f, 0xeb, 0xaa, 0x17, 0x1b, 0xce, 0x03, 0x42, 0x66, - 0x7a, 0xb5, 0x36, 0x58, 0x4f, 0x97, 0xc3, 0x54, 0x43, 0x54, 0xcf, 0x6c, - 0xd3, 0xc2, 0xed, 0x0d, 0x9f, 0xc2, 0xb0, 0xd1, 0x7f, 0x87, 0xd1, 0x30, - 0xcf, 0x4e, 0xf1, 0x4b, 0x45, 0xe5, 0xff, 0x76, 0x55, 0x3c, 0x9e, 0x39, - 0x8b, 0x23, 0xfa, 0xef, 0xbc, 0x79, 0xc5, 0xab, 0xea, 0xdf, 0x2f, 0xf4, - 0x80, 0xcc, 0x7f, 0x85, 0x17, 0x05, 0x56, 0x8a, 0x38, 0x25, 0xab, 0x40, - 0x6d, 0x29, 0xcd, 0xf3, 0x82, 0xcd, 0x20, 0xfb, 0xfb, 0xda, 0x60, 0x6f, - 0xd4, 0x32, 0x8a, 0x12, 0x45, 0xbb, 0xea, 0x29, 0x65, 0x81, 0xc6, 0x90, - 0x0d, 0x31, 0x29, 0xc3, 0xd5, 0xeb, 0x43, 0x8f, 0x0e, 0xe5, 0x7a, 0xd6, - 0x64, 0x1c, 0x7c, 0xe2, 0x38, 0xe4, 0x9c, 0x5b, 0xe1, 0x78, 0xca, 0x88, - 0x32, 0x0a, 0xc3, 0x5f, 0xb6, 0x7a, 0x94, 0x15, 0xdf, 0x69, 0x10, 0x16, - 0xca, 0xb9, 0xd3, 0x96, 0x94, 0xd2, 0x19, 0x68, 0x5c, 0x6b, 0xce, 0x78, - 0xa3, 0x79, 0x6c, 0x05, 0xbe, 0x67, 0xb9, 0xc2, 0x27, 0x85, 0x1c, 0x57, - 0x2e, 0x9c, 0xbe, 0x4e, 0x6e, 0xb1, 0xad, 0x56, 0x8e, 0xa7, 0xcc, 0x69, - 0x7b, 0x5b, 0x6b, 0x12, 0x80, 0x80, 0x67, 0x6c, 0x39, 0x89, 0x07, 0xee, - 0x8f, 0x2a, 0x1c, 0xc1, 0x35, 0x50, 0xa9, 0xb9, 0x64, 0x59, 0x0b, 0x80, - 0xe9, 0xbc, 0xd6, 0x36, 0x13, 0xfa, 0xf0, 0xe6, 0x73, 0x45, 0x8c, 0x7b, - 0x02, 0x3f, 0x9c, 0x36, 0xa5, 0x6f, 0xd4, 0x8e, 0x88, 0x56, 0xef, 0x6a, - 0x10, 0x70, 0x6d, 0x40, 0x26, 0xab, 0x81, 0xfd, 0x4d, 0xcd, 0x4a, 0x4a, - 0x0a, 0xb8, 0x86, 0x0a, 0x20, 0x32, 0x23, 0x0e, 0x1e, 0x40, 0x78, 0x50, - 0x01, 0x7e, 0x64, 0xf1, 0x9c, 0x4d, 0x98, 0x83, 0x62, 0x92, 0xdb, 0xe4, - 0x57, 0x5a, 0xa2, 0xbf, 0xa5, 0x85, 0xd1, 0x46, 0x12, 0xb7, 0x29, 0x09, - 0x51, 0x15, 0xe2, 0x3c, 0x04, 0x4c, 0xdc, 0x10, 0xd5, 0x19, 0x03, 0x6b, - 0xee, 0xfd, 0x3c, 0x8e, 0xd4, 0xb1, 0x32, 0x0b, 0xd2, 0x71, 0x95, 0xef, - 0x99, 0x50, 0xbb, 0xb6, 0x2d, 0x51, 0x9a, 0x5f, 0x0e, 0x80, 0x4f, 0x79, - 0x15, 0xe9, 0x4d, 0xdb, 0xcc, 0x5d, 0x3c, 0x4b, 0xd6, 0x7a, 0xdb, 0x1b, - 0x2e, 0x2a, 0x2e, 0xd6, 0x8f, 0xaf, 0x43, 0xa1, 0xaf, 0xbe, 0x52, 0xd5, - 0xaf, 0xe2, 0xd4, 0x68, 0x59, 0xec, 0x81, 0x88, 0xa5, 0x61, 0xb5, 0x41, - 0x29, 0x0a, 0xeb, 0x61, 0x93, 0x0a, 0xaf, 0xae, 0x08, 0x6f, 0x0a, 0xb9, - 0x99, 0x6e, 0x6e, 0x94, 0x80, 0xfd, 0x14, 0x46, 0xc7, 0xd3, 0x9f, 0xe4, - 0xee, 0x15, 0x24, 0xf2, 0x36, 0x53, 0xf6, 0x63, 0xba, 0x51, 0x34, 0x71, - 0x2b, 0xca, 0x5d, 0xe6, 0x6c, 0x5b, 0x5c, 0x6c, 0xbd, 0x2c, 0x96, 0x39, - 0xe2, 0x0a, 0x99, 0x00, 0x88, 0xaf, 0x03, 0x48, 0x27, 0xb8, 0x1b, 0x5b, - 0x95, 0x7f, 0x83, 0x7b, 0xf6, 0x76, 0x8d, 0x60, 0x02, 0x05, 0x99, 0x0a, - 0xaf, 0xda, 0xfb, 0xe1, 0x45, 0x55, 0x46, 0x04, 0x24, 0xd3, 0x7c, 0x9f, - 0x8b, 0x40, 0x3d, 0x26, 0x6e, 0xc9, 0xfe, 0x7d, 0xa3, 0xc9, 0x8c, 0x5a, - 0x5b, 0xc6, 0xb4, 0x5b, 0xe6, 0xe4, 0xfb, 0x1c, 0x90, 0x7a, 0x17, 0x9f, - 0x4c, 0xaa, 0xff, 0x45, 0x67, 0x3a, 0x1a, 0xeb, 0xa1, 0xa0, 0x2a, 0x27, - 0xa6, 0xfa, 0x01, 0x41, 0x9a, 0x7a, 0xb3, 0x8b, 0x41, 0x2b, 0xe2, 0x9d, - 0x24, 0xa1, 0x9e, 0xd2, 0xfd, 0x81, 0x9b, 0x2f, 0x10, 0x28, 0x94, 0xda, - 0x7b, 0x20, 0x59, 0x01, 0xfd, 0x2d, 0x2d, 0xbc, 0x34, 0xb4, 0xcd, 0xd6, - 0x93, 0xae, 0xdb, 0x01, 0x86, 0x29, 0xa8, 0x2a, 0xf9, 0x9d, 0x72, 0x06, - 0xdb, 0x59, 0x72, 0x06, 0xbd, 0x62, 0x0f, 0x59, 0x0d, 0xd0, 0x36, 0x75, - 0xed, 0xde, 0xf9, 0x22, 0x92, 0x99, 0x34, 0x34, 0x01, 0xb4, 0x76, 0xb5, - 0x74, 0x08, 0xfe, 0x0a, 0x19, 0x1d, 0xda, 0xca, 0x7d, 0x06, 0x8c, 0x60, - 0x77, 0x85, 0x75, 0x0f, 0x75, 0xd1, 0x97, 0x28, 0xca, 0xaf, 0xba, 0xc8, - 0x35, 0xcc, 0xa9, 0x2d, 0xb1, 0xbc, 0x1d, 0x0e, 0xbe, 0x4b, 0x68, 0xa8, - 0x4b, 0x00, 0xc3, 0xbe, 0x0e, 0x78, 0xdc, 0x12, 0x80, 0xc6, 0x75, 0x20, - 0xf9, 0xb0, 0x05, 0x24, 0xde, 0x3d, 0x25, 0x34, 0x44, 0x9c, 0xb9, 0x66, - 0x70, 0x4a, 0xba, 0xa9, 0x3b, 0xe3, 0x80, 0xe2, 0xad, 0x35, 0x4d, 0x0d, - 0xe4, 0xbb, 0x4f, 0x7b, 0x97, 0x32, 0x4b, 0x8d, 0x83, 0x13, 0xb8, 0x46, - 0x59, 0xbb, 0x12, 0xe3, 0xce, 0x44, 0xb4, 0xbe, 0x8a, 0x79, 0xd0, 0x3c, - 0xfe, 0x77, 0x9e, 0xc7, 0xa7, 0x69, 0xc8, 0x39, 0x60, 0xfd, 0x77, 0x05, - 0x5a, 0x93, 0xa2, 0x11, 0xec, 0x9e, 0xe5, 0x6d, 0x90, 0xb7, 0x7e, 0x36, - 0x8e, 0x13, 0x07, 0xb8, 0x33, 0x70, 0x97, 0xab, 0x4b, 0x25, 0xb3, 0xa3, - 0xfa, 0x17, 0x71, 0x22, 0xa7, 0xda, 0x29, 0x66, 0xe2, 0x19, 0x19, 0x3d, - 0x08, 0x87, 0xa1, 0xb5, 0x93, 0x30, 0x7a, 0x85, 0x23, 0x64, 0xf4, 0x4c, - 0x06, 0x42, 0x2d, 0x44, 0x0b, 0xb1, 0xa2, 0x6d, 0xff, 0x1b, 0xa1, 0x19, - 0xd7, 0xe5, 0x88, 0x2e, 0x97, 0x60, 0xbf, 0xa9, 0x79, 0x25, 0x8d, 0xec, - 0x05, 0x34, 0xfc, 0x7e, 0x5f, 0xb9, 0xf7, 0x6d, 0x64, 0x55, 0x81, 0x5f, - 0x45, 0x98, 0xec, 0x1d, 0x22, 0x8c, 0xb9, 0x72, 0x3c, 0x4f, 0x85, 0x75, - 0x01, 0x19, 0xb7, 0x19, 0xa9, 0xda, 0x49, 0x01, 0x58, 0x25, 0xb6, 0x1b, - 0x6e, 0x6b, 0xaa, 0x5d, 0x87, 0xff, 0xd1, 0xf3, 0x97, 0x05, 0x3d, 0x11, - 0xc5, 0x87, 0x68, 0x12, 0x4d, 0x0c, 0x4a, 0x7d, 0x68, 0x23, 0x12, 0xe9, - 0xa3, 0xe6, 0xbb, 0xaf, 0x43, 0xc2, 0x4b, 0xb4, 0x75, 0xfb, 0xe9, 0xbd, - 0x02, 0xf3, 0x6f, 0x6f, 0x8b, 0x60, 0x2e, 0x0a, 0xc9, 0x4c, 0xfc, 0xdd, - 0xe2, 0x64, 0x86, 0x50, 0x48, 0xfc, 0xdf, 0x46, 0x0a, 0x7a, 0x39, 0xd8, - 0x7b, 0x79, 0x4d, 0xbf, 0x31, 0x36, 0xd9, 0x0f, 0x56, 0x85, 0x8d, 0xfb, - 0xb7, 0x52, 0xa6, 0xf1, 0x4f, 0xf7, 0x78, 0xc1, 0xb9, 0x33, 0x4e, 0xeb, - 0x3c, 0x17, 0xb4, 0xd4, 0x51, 0x1d, 0xe5, 0xc5, 0xc7, 0xac, 0x48, 0x8c, - 0x31, 0xcf, 0x50, 0x7c, 0xb3, 0x03, 0x53, 0xcb, 0x59, 0xbe, 0x4d, 0xa5, - 0xd3, 0x5f, 0xd3, 0x0d, 0x76, 0x08, 0xa4, 0xcc, 0x96, 0xcd, 0xc6, 0x79, - 0x1d, 0xe1, 0xd8, 0x79, 0xd9, 0x75, 0x3f, 0x97, 0x6b, 0x0a, 0xab, 0x83, - 0xe5, 0xbf, 0x3e, 0xa8, 0x78, 0xb8, 0x65, 0x00, 0x1f, 0x9b, 0x96, 0xde, - 0xb3, 0x22, 0x50, 0x5c, 0x1d, 0x9e, 0xab, 0x7f, 0x75, 0x90, 0x5c, 0xed, - 0xd1, 0xcd, 0x3d, 0xa9, 0x09, 0xd4, 0x89, 0x1b, 0x6a, 0x94, 0xce, 0x53, - 0xb0, 0x08, 0x3a, 0xf9, 0x55, 0xdf, 0xf6, 0x5d, 0x76, 0xba, 0x9f, 0x87, - 0x32, 0xa0, 0x05, 0x0f, 0xea, 0x49, 0x97, 0xaf, 0xc5, 0x9e, 0x0e, 0x0a, - 0xeb, 0x9c, 0xf3, 0x21, 0xe8, 0x74, 0xce, 0x91, 0x6f, 0x45, 0x67, 0xe0, - 0x04, 0xfe, 0xfb, 0x6c, 0x94, 0x65, 0xe3, 0x60, 0x83, 0x47, 0xe9, 0x56, - 0x4a, 0x0c, 0xa2, 0x1a, 0xb6, 0x71, 0xba, 0xe7, 0x41, 0xe7, 0x65, 0x3f, - 0x61, 0xee, 0x9b, 0xfa, 0x62, 0xa9, 0x47, 0x15, 0x00, 0xc3, 0x39, 0x0c, - 0x97, 0x71, 0x17, 0xa6, 0xfe, 0x8b, 0x24, 0x1d, 0x1b, 0x6d, 0x4e, 0x4b, - 0x5d, 0xbe, 0x3c, 0xc8, 0xa3, 0xf4, 0xfc, 0xd4, 0x74, 0x2d, 0xb1, 0xff, - 0x39, 0x62, 0x43, 0x20, 0x83, 0x66, 0x36, 0x4d, 0x31, 0x49, 0xbd, 0xbe, - 0xb5, 0x55, 0x89, 0x02, 0x80, 0x13, 0x69, 0x3c, 0xc9, 0x5a, 0x75, 0x3c, - 0x88, 0x12, 0xd5, 0xed, 0xdc, 0x3f, 0x5e, 0xc0, 0x12, 0x58, 0x17, 0x2d, - 0xca, 0xc1, 0xd1, 0x52, 0xd7, 0x56, 0x4d, 0xbb, 0xcb, 0xeb, 0x7c, 0xd9, - 0xe7, 0x6a, 0xac, 0x76, 0xe6, 0x50, 0xa4, 0x19, 0x65, 0xae, 0x1c, 0x32, - 0x3f, 0xee, 0xd4, 0x30, 0x83, 0x1f, 0x56, 0xf8, 0x53, 0x71, 0xc1, 0xe2, - 0x14, 0x94, 0x10, 0x29, 0xe9, 0x28, 0xb6, 0xbc, 0x26, 0xbb, 0xd0, 0x4e, - 0x00, 0xed, 0x43, 0xec, 0x7e, 0xae, 0x70, 0xc5, 0x93, 0x69, 0x41, 0x65, - 0x5a, 0x58, 0x0c, 0x6b, 0x4c, 0x13, 0x30, 0x92, 0x8f, 0x18, 0x3e, 0xf6, - 0x26, 0x9d, 0x62, 0x23, 0x55, 0xae, 0x6e, 0x8f, 0x90, 0x32, 0xdd, 0x9b, - 0xd7, 0x14, 0x8a, 0xf3, 0xe8, 0x89, 0xc4, 0xca, 0xd4, 0xc2, 0x80, 0xae, - 0x56, 0x00, 0x1b, 0x95, 0x5c, 0xc4, 0x38, 0xf8, 0x28, 0x2e, 0xac, 0x5b, - 0x7d, 0x78, 0xd6, 0xdb, 0x9a, 0xa9, 0x3f, 0x27, 0xb9, 0x71, 0xe3, 0xcf, - 0x8c, 0xfa, 0x6d, 0xf8, 0x64, 0x1c, 0xa3, 0x66, 0xe1, 0x28, 0x3d, 0x3d, - 0xbc, 0x71, 0xe2, 0x46, 0x2e, 0x7c, 0x57, 0x83, 0x73, 0x93, 0xea, 0xcf, - 0x53, 0xc1, 0xca, 0x14, 0x55, 0xfd, 0x56, 0x58, 0xc0, 0x56, 0xfa, 0x3c, - 0xcb, 0x8d, 0xb7, 0x4f, 0x31, 0x14, 0x75, 0x92, 0x71, 0x33, 0x95, 0x54, - 0x23, 0x9e, 0x83, 0x32, 0xa3, 0x0e, 0x29, 0x60, 0x4c, 0xdb, 0xe3, 0x39, - 0xa5, 0x45, 0x20, 0x5b, 0x82, 0x24, 0x3a, 0xef, 0xfc, 0xd2, 0xf3, 0xe9, - 0x64, 0x2c, 0xed, 0x79, 0xfd, 0x2f, 0x64, 0x2f, 0xab, 0x27, 0x30, 0x51, - 0xc3, 0x63, 0x09, 0xb7, 0xb0, 0x99, 0xe6, 0xb7, 0x34, 0x2c, 0xa2, 0x4e, - 0x62, 0x7b, 0x6c, 0x41, 0x90, 0xd6, 0x16, 0x9f, 0x04, 0xf6, 0x6d, 0x63, - 0xee, 0xe4, 0x36, 0x68, 0x0d, 0x34, 0x71, 0x42, 0xac, 0xdd, 0xbe, 0x7f, - 0xd1, 0x96, 0x72, 0xca, 0x5f, 0x12, 0xa2, 0x5d, 0x01, 0xc4, 0x48, 0x92, - 0x2b, 0xba, 0x23, 0x70, 0xab, 0x13, 0x91, 0x27, 0x5e, 0xfd, 0x27, 0x1f, - 0x2c, 0x72, 0x8e, 0x4d, 0x36, 0x2e, 0x58, 0x2f, 0x6b, 0x01, 0xab, 0x5a, - 0x2c, 0xea, 0x74, 0x55, 0xb5, 0x5a, 0x26, 0xc7, 0x2d, 0x96, 0x9b, 0x4d, - 0xd2, 0x05, 0x79, 0xee, 0xe8, 0xd5, 0x2a, 0xf4, 0x74, 0x61, 0x18, 0x25, - 0x6e, 0xa0, 0x34, 0xae, 0x9d, 0xdc, 0x0a, 0xcd, 0x53, 0xff, 0xc3, 0x52, - 0x88, 0x0f, 0x1d, 0xff, 0xd6, 0xff, 0xb6, 0x6c, 0x1e, 0x73, 0x53, 0x91, - 0xc4, 0x86, 0x1b, 0x8f, 0x9e, 0xee, 0xee, 0xa4, 0x95, 0x3e, 0xff, 0x76, - 0x81, 0x16, 0x90, 0x3f, 0x4d, 0xb6, 0x39, 0x4f, 0x86, 0xf8, 0x35, 0xeb, - 0x19, 0x80, 0xe7, 0xfd, 0x65, 0x20, 0x7a, 0x03, 0x7b, 0x69, 0xec, 0xda, - 0xf2, 0xb8, 0x0c, 0x06, 0x65, 0xa6, 0x4b, 0xe4, 0x38, 0xc9, 0x6d, 0xd3, - 0x39, 0x40, 0x4e, 0x83, 0xfb, 0x98, 0x8b, 0xe9, 0x13, 0xb4, 0xd6, 0x30, - 0x95, 0x4b, 0xf7, 0x91, 0x1f, 0xa9, 0xc3, 0xa3, 0xd7, 0x26, 0x7f, 0x4f, - 0x30, 0x51, 0xfb, 0x20, 0x62, 0x82, 0x1c, 0xef, 0xd0, 0x54, 0xd3, 0x00, - 0x55, 0x3c, 0xa1, 0xdc, 0x4d, 0x08, 0x4f, 0xef, 0x61, 0x4e, 0xd4, 0x75, - 0x60, 0xff, 0x8a, 0xb7, 0x13, 0xfd, 0x1f, 0xb8, 0xfb, 0xf2, 0x51, 0x7a, - 0x68, 0xf1, 0xb5, 0xc5, 0xbb, 0x41, 0xa8, 0x2f, 0x0b, 0x8d, 0x2b, 0xc3, - 0x88, 0x48, 0xd0, 0xe5, 0xb3, 0xd7, 0xee, 0x75, 0x81, 0x73, 0x99, 0x28, - 0x0e, 0xb5, 0x86, 0x01, 0x4f, 0x5d, 0x38, 0xf0, 0x47, 0x08, 0x27, 0xd1, - 0xaf, 0xe6, 0x9b, 0xf9, 0x4f, 0xd6, 0xe4, 0x01, 0x10, 0x7a, 0x61, 0x2f, - 0xb0, 0xed, 0x18, 0xdb, 0xab, 0x9e, 0xde, 0x8c, 0xfc, 0x36, 0x88, 0x91, - 0xf4, 0x85, 0x76, 0x6e, 0xa9, 0x4b, 0x28, 0xda, 0xc9, 0x64, 0xee, 0xff, - 0xe5, 0xfb, 0x53, 0xa6, 0x23, 0x8d, 0xe8, 0xdc, 0xdb, 0x52, 0x38, 0x11, - 0x0b, 0xf2, 0xe0, 0x37, 0x31, 0xad, 0x88, 0xba, 0x4e, 0x25, 0x8c, 0x0a, - 0xc6, 0xc1, 0x98, 0x74, 0x03, 0x33, 0x3d, 0xea, 0x3c, 0xaa, 0x2a, 0x0a, - 0x30, 0xf4, 0x3a, 0xef, 0xa8, 0x99, 0xe7, 0xba, 0x9f, 0x90, 0x8e, 0x4a, - 0xb3, 0x7c, 0xa7, 0x1f, 0xd4, 0x51, 0x1d, 0x09, 0x60, 0x23, 0x1f, 0x57, - 0xcb, 0xb9, 0x11, 0x51, 0x64, 0xc0, 0x15, 0x5a, 0x2e, 0x77, 0x12, 0x58, - 0xae, 0x45, 0xc7, 0x80, 0x56, 0xde, 0x0a, 0xf2, 0xd2, 0x44, 0x6f, 0x84, - 0x16, 0x79, 0x38, 0x65, 0xa7, 0x1b, 0xd1, 0x49, 0x60, 0xdb, 0x05, 0x91, - 0x8f, 0xd9, 0x20, 0x8c, 0x88, 0x1f, 0xe8, 0x04, 0xf3, 0x7e, 0xde, 0x22, - 0x04, 0xf3, 0x01, 0xcc, 0x83, 0x8a, 0x14, 0x47, 0xd4, 0xba, 0x1b, 0x89, - 0x28, 0x5f, 0x69, 0x60, 0x69, 0xbb, 0xb4, 0x00, 0x96, 0xee, 0xb2, 0xfd, - 0xc7, 0xab, 0xd6, 0x23, 0x5f, 0x7f, 0x5e, 0xec, 0xf7, 0x1d, 0x36, 0xb4, - 0x60, 0xbb, 0x50, 0x4c, 0xe9, 0x9a, 0xc1, 0x9a, 0x8d, 0x8d, 0x57, 0x8e, - 0x4a, 0xf0, 0x06, 0xc6, 0x67, 0x1f, 0x55, 0x3a, 0x2d, 0xce, 0x77, 0x5e, - 0x2a, 0xc2, 0x76, 0xe1, 0xbc, 0x23, 0x31, 0xd2, 0x7f, 0x21, 0x89, 0xde, - 0xe1, 0xcc, 0x47, 0x35, 0xdf, 0x09, 0x85, 0x95, 0x02, 0x2e, 0x30, 0xb4, - 0xcc, 0xad, 0x6a, 0x48, 0x7c, 0xa7, 0xa6, 0x9c, 0xf9, 0xce, 0xba, 0x00, - 0x91, 0xcf, 0x0d, 0xc0, 0x74, 0x4f, 0x3c, 0x31, 0x0d, 0x3b, 0x5e, 0xcd, - 0x46, 0xab, 0xf9, 0x9f, 0x3b, 0xb3, 0x61, 0xbe, 0x15, 0xe7, 0xc7, 0xb1, - 0xe2, 0xda, 0xae, 0x95, 0xb9, 0x63, 0x93, 0xcf, 0x62, 0x72, 0xb0, 0x91, - 0x3e, 0xfa, 0xff, 0x1e, 0x0a, 0x58, 0x23, 0x21, 0xef, 0x34, 0xca, 0x7b, - 0x69, 0x40, 0x12, 0x25, 0xd8, 0xaf, 0x74, 0xd5, 0xb7, 0xfb, 0x52, 0x63, - 0xb4, 0x4f, 0x2e, 0x59, 0xcd, 0xdb, 0x86, 0x98, 0x54, 0xde, 0x37, 0xcd, - 0x40, 0x5b, 0x9f, 0x0a, 0xab, 0x8d, 0x26, 0x91, 0x94, 0x1f, 0x73, 0x48, - 0x27, 0x5e, 0xc1, 0x6a, 0x45, 0x42, 0x24, 0xbf, 0x00, 0x41, 0xfc, 0xe9, - 0x65, 0x26, 0x5a, 0xba, 0x38, 0x3d, 0xf2, 0xa2, 0x35, 0x37, 0x14, 0x8d, - 0xc5, 0x98, 0xec, 0xa3, 0x5e, 0x73, 0xad, 0x3e, 0x18, 0x28, 0xdc, 0x32, - 0x6a, 0xad, 0x5b, 0x69, 0x84, 0x3c, 0x79, 0x83, 0x5d, 0x7c, 0x00, 0x93, - 0xcf, 0xd7, 0xff, 0x94, 0xaa, 0x36, 0xa3, 0xbb, 0xa3, 0xdc, 0xb2, 0x8a, - 0x65, 0x02, 0x16, 0xd0, 0x2a, 0xd5, 0xbc, 0xb9, 0xf1, 0xb2, 0x5c, 0x20, - 0x7a, 0xcc, 0xcb, 0x84, 0xa5, 0x48, 0xc3, 0x93, 0xf4, 0xd9, 0x91, 0xd0, - 0xf7, 0x9f, 0x99, 0xb8, 0xa3, 0xb9, 0x1f, 0x3d, 0x83, 0x80, 0x1e, 0x1c, - 0x5b, 0x9a, 0x87, 0x71, 0xbb, 0x2a, 0x86, 0x52, 0x88, 0xd3, 0xb4, 0xf8, - 0x39, 0xf2, 0xb5, 0x68, 0x49, 0xc8, 0xb9, 0x87, 0x22, 0x82, 0xa6, 0x4a, - 0xcf, 0x86, 0x7b, 0x27, 0x0c, 0x18, 0x01, 0x2a, 0x49, 0xdf, 0xc3, 0xf8, - 0x92, 0x90, 0x26, 0xa8, 0x30, 0x7f, 0x7b, 0x48, 0xd2, 0xcf, 0x17, 0xac, - 0x96, 0x69, 0x5e, 0x48, 0xd0, 0x42, 0x02, 0x56, 0xa5, 0x87, 0xdd, 0x98, - 0x5b, 0x3e, 0x9f, 0x04, 0x08, 0xc7, 0xe6, 0xfa, 0x91, 0xf8, 0xc8, 0x8c, - 0xa7, 0xaa, 0x4c, 0xfd, 0x05, 0x57, 0xa8, 0xab, 0xae, 0xce, 0xdc, 0x74, - 0xe1, 0x9d, 0xa1, 0xfd, 0x3b, 0x43, 0x29, 0x82, 0xab, 0xf7, 0x7e, 0x22, - 0xa8, 0x9a, 0x2f, 0x8b, 0xa0, 0x8e, 0x41, 0x05, 0xe3, 0xd8, 0x8a, 0x83, - 0x02, 0x48, 0x74, 0x7c, 0x51, 0x09, 0xac, 0x94, 0x44, 0x8f, 0x4a, 0x97, - 0x0f, 0xb1, 0xfd, 0xf5, 0xbe, 0x84, 0x4e, 0x68, 0x48, 0x2b, 0x05, 0xfb, - 0x03, 0x04, 0x23, 0xfc, 0xf5, 0x60, 0x0e, 0x3f, 0xea, 0xb9, 0xdf, 0xe3, - 0x91, 0x14, 0x3e, 0x2d, 0x3a, 0x7e, 0x90, 0xf6, 0x52, 0x3c, 0x5f, 0x9d, - 0x56, 0x38, 0xa9, 0x10, 0xa1, 0xec, 0x65, 0xc6, 0x67, 0xb8, 0x14, 0x39, - 0xaf, 0x2d, 0xba, 0x46, 0x7b, 0x7f, 0x2e, 0xdd, 0x72, 0xd1, 0x5a, 0x60, - 0xf4, 0xbf, 0x57, 0x2c, 0x27, 0xb4, 0x8f, 0x22, 0xde, 0x3c, 0x3a, 0xfc, - 0xbe, 0xf9, 0xc7, 0x3c, 0x6c, 0x36, 0xf0, 0x5c, 0xfb, 0xcd, 0x40, 0xc6, - 0x87, 0xa3, 0xe7, 0x68, 0x9f, 0x86, 0x4b, 0x1b, 0xb1, 0x90, 0x49, 0xa1, - 0x6d, 0xd2, 0x34, 0xc2, 0xa6, 0x55, 0xf3, 0x52, 0x43, 0xf3, 0x41, 0x97, - 0x7e, 0x66, 0x46, 0x2b, 0xac, 0xb4, 0x20, 0xd9, 0xd6, 0x2d, 0x05, 0x00, - 0x3b, 0xce, 0xb2, 0xfa, 0x17, 0xa0, 0x11, 0xbb, 0xa8, 0x6b, 0xba, 0x25, - 0xaa, 0x15, 0x3f, 0x67, 0x4e, 0x18, 0x04, 0xb5, 0x75, 0x0e, 0x29, 0xc0, - 0x3e, 0x44, 0x65, 0xfc, 0x19, 0x4e, 0xe0, 0x06, 0x16, 0x37, 0x1f, 0xd7, - 0x0d, 0xc5, 0x26, 0x96, 0x1e, 0x3b, 0xdc, 0x52, 0xd6, 0x45, 0xaa, 0x9f, - 0x11, 0xe8, 0x44, 0x2d, 0xb8, 0xd4, 0x4e, 0xc5, 0x96, 0x06, 0x1e, 0x9e, - 0x04, 0x2e, 0x88, 0xf3, 0x32, 0xde, 0x8f, 0x2e, 0x97, 0x39, 0xe7, 0xef, - 0x1c, 0xba, 0xca, 0xfd, 0x33, 0x0c, 0xc4, 0x04, 0xfd, 0xe6, 0xdc, 0x98, - 0x3d, 0x20, 0xc8, 0x8d, 0x83, 0x82, 0x19, 0xfd, 0xbb, 0xb6, 0xcb, 0xf6, - 0x63, 0x1d, 0x23, 0xd9, 0xe8, 0xf4, 0x60, 0x29, 0x63, 0x61, 0xc6, 0x2b, - 0x3f, 0x37, 0xdd, 0x94, 0x50, 0x38, 0x81, 0xef, 0xb0, 0xf4, 0x0f, 0xba, - 0xa8, 0x7a, 0x47, 0xe5, 0x19, 0xf7, 0x4d, 0x52, 0x8f, 0xfe, 0x33, 0xde, - 0x2e, 0xc1, 0xb8, 0x9d, 0xb0, 0x84, 0xfa, 0x7f, 0x7f, 0x0f, 0x32, 0x23, - 0x86, 0x89, 0xce, 0xfe, 0xe7, 0x73, 0xb8, 0x69, 0xa8, 0x91, 0xa6, 0x24, - 0x97, 0x84, 0x51, 0x3e, 0x7f, 0x4d, 0xed, 0x98, 0x50, 0xa7, 0xc6, 0xb4, - 0x56, 0x68, 0xe2, 0x81, 0x12, 0x78, 0x01, 0x13, 0x82, 0x00, 0x50, 0x7e, - 0x69, 0xa5, 0xf9, 0xbb, 0xaa, 0x7a, 0xd8, 0x0d, 0xe9, 0x07, 0x49, 0x89, - 0xc5, 0xa1, 0xe9, 0x0c, 0xeb, 0x3c, 0xd3, 0xd0, 0x3a, 0x69, 0xce, 0x9e, - 0x67, 0xc1, 0x08, 0x75, 0x7d, 0x71, 0xed, 0x15, 0x1b, 0x3a, 0x57, 0xaf, - 0x2b, 0x9b, 0x8c, 0x37, 0x8a, 0x45, 0x86, 0x3a, 0xb0, 0xcd, 0xde, 0x5c, - 0x5f, 0x17, 0x41, 0x95, 0x73, 0x7e, 0x16, 0x9d, 0x6b, 0x30, 0xe3, 0xff, - 0xe6, 0xa8, 0x91, 0x94, 0xb5, 0x7c, 0xcb, 0xd3, 0x85, 0x1f, 0x5c, 0x15, - 0xdc, 0xd9, 0x5f, 0x2b, 0x52, 0x62, 0xac, 0x54, 0x05, 0xd6, 0x00, 0x3c, - 0xd7, 0x88, 0xe8, 0x6e, 0xca, 0x58, 0x72, 0xe8, 0xa2, 0x70, 0x96, 0xf0, - 0x2d, 0x2e, 0x03, 0x32, 0x1b, 0x37, 0x49, 0x8e, 0x89, 0x93, 0xe4, 0x12, - 0xe7, 0x59, 0xbf, 0x8e, 0xd0, 0x8b, 0x58, 0x2f, 0x2b, 0x65, 0xf7, 0x3d, - 0x4f, 0xe2, 0xff, 0xad, 0x7d, 0xf3, 0xe7, 0x0a, 0x59, 0x82, 0xf2, 0x10, - 0xaa, 0x31, 0xa7, 0x3c, 0x75, 0xfc, 0x98, 0x26, 0x75, 0x0c, 0x28, 0xa8, - 0x49, 0x99, 0x5f, 0xeb, 0x6f, 0xa7, 0x39, 0x2a, 0x8e, 0xef, 0xeb, 0x66, - 0x57, 0x90, 0x03, 0x2b, 0xb1, 0x1d, 0xd4, 0x7a, 0xdc, 0x01, 0x77, 0xa3, - 0x0a, 0xfc, 0xc2, 0xe7, 0x21, 0xf7, 0xe4, 0x2f, 0x8a, 0x22, 0x7b, 0x79, - 0x46, 0xf1, 0x72, 0x07, 0xb2, 0x5f, 0x84, 0xed, 0xca, 0x37, 0xc8, 0xef, - 0xc1, 0x82, 0xc0, 0x01, 0xf1, 0xd7, 0xc4, 0x2f, 0x1b, 0xbb, 0x8a, 0xb9, - 0xdb, 0x68, 0x40, 0xb6, 0x7d, 0x14, 0x7e, 0x27, 0xa4, 0x62, 0xc4, 0x85, - 0xc3, 0xb7, 0x58, 0xa0, 0x37, 0xfa, 0x6d, 0x2c, 0x92, 0xca, 0x80, 0x8c, - 0x6a, 0x68, 0xef, 0x76, 0x61, 0xb1, 0x13, 0xd9, 0x01, 0xcd, 0xa9, 0xb7, - 0x5f, 0x0b, 0x8f, 0x18, 0xa1, 0x66, 0xea, 0x6b, 0xeb, 0xd2, 0xb5, 0x4c, - 0xee, 0x52, 0x22, 0x59, 0xc8, 0x26, 0x9f, 0x01, 0x92, 0x48, 0x41, 0x37, - 0xec, 0xc6, 0x27, 0xbe, 0x56, 0x42, 0x04, 0x6d, 0x83, 0xa1, 0x96, 0x31, - 0x03, 0xff, 0x39, 0xf3, 0x2b, 0xf1, 0x6d, 0x7f, 0x2f, 0xd6, 0xec, 0xf0, - 0x18, 0xf2, 0xc8, 0xbc, 0xe3, 0x80, 0x47, 0x08, 0x2d, 0x54, 0xb4, 0xe3, - 0x0a, 0x9b, 0x2a, 0xec, 0x5b, 0xdb, 0xb3, 0x31, 0x3b, 0xc5, 0xd9, 0xf1, - 0x5f, 0x5a, 0xb9, 0x9b, 0x46, 0x8a, 0x79, 0xd9, 0x59, 0x56, 0x43, 0x4d, - 0x60, 0xa6, 0x10, 0xae, 0xca, 0x77, 0xef, 0xa1, 0x5f, 0x20, 0xb5, 0xa9, - 0x22, 0xcb, 0xeb, 0xe8, 0x48, 0xe8, 0xc1, 0x29, 0xf8, 0xce, 0x38, 0xd1, - 0x31, 0x2f, 0x1a, 0xea, 0x36, 0x25, 0xd1, 0x5e, 0x6a, 0x60, 0x94, 0x9c, - 0xf8, 0x1d, 0x3c, 0xf1, 0x75, 0x08, 0x06, 0x6f, 0xaa, 0x5e, 0x78, 0x41, - 0x11, 0x94, 0xe4, 0xa3, 0x79, 0x67, 0x78, 0x46, 0xc9, 0x1f, 0xa2, 0xbc, - 0x75, 0xb2, 0xc5, 0x15, 0xee, 0x0b, 0x88, 0xf9, 0xff, 0xdf, 0x41, 0xa1, - 0xb8, 0x3a, 0x5f, 0xbb, 0x20, 0x1f, 0x1f, 0x81, 0xba, 0xc5, 0xbd, 0x7f, - 0x29, 0xdd, 0xcb, 0x05, 0x0e, 0x74, 0xe4, 0x48, 0x0d, 0x02, 0xaa, 0xae, - 0xb6, 0x93, 0x5b, 0xa0, 0x3f, 0x65, 0xe6, 0x18, 0xfd, 0xac, 0xac, 0x85, - 0x93, 0x54, 0xf6, 0x26, 0xff, 0xa6, 0xe8, 0x9f, 0x86, 0x87, 0xe2, 0xd4, - 0xe6, 0x92, 0x59, 0xda, 0x16, 0xed, 0xcf, 0x93, 0x2b, 0x17, 0x7d, 0x35, - 0x0b, 0x19, 0x9a, 0x8c, 0x08, 0x27, 0xf3, 0xeb, 0x69, 0x50, 0xe1, 0x33, - 0xf6, 0xa1, 0xfe, 0x75, 0x6d, 0x0e, 0xe5, 0x0e, 0x22, 0xe7, 0xf9, 0x21, - 0x44, 0x4f, 0x84, 0x5c, 0xfb, 0x32, 0x3e, 0xe1, 0xf8, 0xd4, 0x02, 0x53, - 0x9b, 0x8c, 0xb9, 0x07, 0xaa, 0x15, 0x9a, 0x76, 0x58, 0x49, 0x08, 0x33, - 0x4d, 0x5c, 0x4f, 0xf4, 0x28, 0x4b, 0x33, 0xb4, 0x51, 0x9b, 0xe9, 0x13, - 0x4a, 0x52, 0x5c, 0x83, 0xbf, 0xf7, 0xd3, 0x48, 0xcb, 0x98, 0x0c, 0xb4, - 0x5d, 0xcd, 0x97, 0x4a, 0x1f, 0xc2, 0x19, 0x95, 0x03, 0x8a, 0x56, 0x35, - 0xef, 0x6a, 0x84, 0xa4, 0x62, 0xe8, 0x9a, 0x0a, 0x52, 0xfb, 0xe8, 0x61, - 0xd5, 0xbc, 0xee, 0x27, 0xad, 0xfd, 0x5b, 0xb0, 0x03, 0xb9, 0xde, 0xd3, - 0xf6, 0x74, 0x86, 0xc2, 0x0d, 0xaa, 0x4d, 0x89, 0x2e, 0x88, 0x44, 0x1a, - 0x18, 0xc8, 0xf0, 0x21, 0x3e, 0x95, 0x6e, 0x58, 0x06, 0xdd, 0x1c, 0x27, - 0xbb, 0x5f, 0x52, 0x10, 0xa5, 0x68, 0xb2, 0x95, 0x85, 0xea, 0x11, 0x16, - 0x67, 0x6d, 0x2d, 0x35, 0x47, 0x13, 0x6d, 0x8e, 0x4b, 0x17, 0x1c, 0x7f, - 0x72, 0xc8, 0xd8, 0x2f, 0x0b, 0x16, 0xf4, 0x04, 0x7a, 0x5e, 0xfa, 0x24, - 0x2c, 0xae, 0xde, 0x8d, 0x9b, 0x48, 0xe1, 0x65, 0x83, 0x0c, 0xff, 0xcf, - 0x3e, 0x14, 0xf9, 0x1b, 0x8d, 0xf7, 0xbe, 0x38, 0xbf, 0x2d, 0x5a, 0x5a, - 0xed, 0xb6, 0x70, 0xc6, 0xab, 0x7b, 0xa3, 0xe9, 0xc8, 0x31, 0x4f, 0x9c, - 0x9a, 0x98, 0x88, 0xc4, 0x72, 0x22, 0xe2, 0x85, 0x12, 0xf4, 0xea, 0x52, - 0xb6, 0x48, 0x2f, 0x53, 0x12, 0xc6, 0xf9, 0xe5, 0x3c, 0xdc, 0x74, 0x17, - 0xcc, 0xe3, 0xe5, 0x04, 0x5d, 0xc1, 0x47, 0xa7, 0xc0, 0xb9, 0xc7, 0xb9, - 0x39, 0x98, 0xaf, 0xcf, 0x60, 0xb5, 0x7f, 0x82, 0xa7, 0xb9, 0x0a, 0x25, - 0xfb, 0x70, 0xa2, 0x43, 0xf2, 0xc1, 0x8a, 0x99, 0x36, 0xbc, 0x03, 0x73, - 0x9a, 0xf1, 0x97, 0x65, 0xff, 0xe6, 0xe2, 0x37, 0xba, 0xac, 0x0d, 0xc1, - 0x93, 0x05, 0x4b, 0xf5, 0x69, 0x45, 0x9b, 0x83, 0xc2, 0x44, 0xea, 0x23, - 0x65, 0x5c, 0x22, 0xb2, 0x97, 0x2f, 0x8d, 0xab, 0x51, 0x61, 0xa1, 0xa6, - 0x8a, 0x6a, 0x1c, 0xf6, 0xff, 0xc2, 0x83, 0xfb, 0x56, 0xef, 0xf0, 0xbd, - 0x67, 0x6e, 0xe6, 0x50, 0x2f, 0xa0, 0xe6, 0x26, 0x2d, 0x68, 0x7e, 0x97, - 0x09, 0x4c, 0x0a, 0x17, 0x26, 0x98, 0x69, 0x3a, 0x3e, 0x06, 0x15, 0x20, - 0x99, 0x38, 0x59, 0x7d, 0x54, 0x5c, 0x34, 0xd7, 0x9a, 0x51, 0xcc, 0x36, - 0x28, 0xc1, 0x0b, 0x9c, 0x6c, 0xd2, 0x03, 0xc6, 0x8f, 0x1e, 0x40, 0xa2, - 0xd6, 0xa3, 0x34, 0xf2, 0xb1, 0x21, 0xef, 0x93, 0xd5, 0x51, 0xfb, 0x77, - 0x76, 0x92, 0x05, 0x8f, 0xad, 0x36, 0x12, 0x33, 0xce, 0x3e, 0x8f, 0xa9, - 0x2c, 0x67, 0xe7, 0x4f, 0x02, 0x02, 0xbd, 0x83, 0xcc, 0x16, 0xea, 0xf7, - 0x64, 0x7f, 0xde, 0xa0, 0x37, 0xf5, 0x89, 0xa2, 0x3e, 0xa2, 0xca, 0x8f, - 0xe1, 0x8a, 0x65, 0x7f, 0x37, 0x12, 0xd9, 0x1e, 0x6f, 0x7f, 0xce, 0x73, - 0x87, 0xdc, 0xd3, 0xa6, 0xec, 0xe0, 0x59, 0x62, 0xaf, 0x6d, 0xaa, 0x89, - 0xe8, 0x51, 0xfa, 0xa8, 0x9a, 0x75, 0xf9, 0x64, 0xf2, 0x36, 0xd3, 0xbd, - 0x89, 0x9d, 0x14, 0x4e, 0xf5, 0x36, 0x81, 0x29, 0x4c, 0x37, 0x84, 0xd9, - 0x9b, 0x6f, 0xf1, 0x60, 0x27, 0xef, 0x03, 0x8a, 0xd6, 0xbc, 0x73, 0xe3, - 0x91, 0xd0, 0x75, 0x58, 0xb7, 0x0e, 0x49, 0x16, 0x0e, 0x44, 0xf9, 0x13, - 0x3f, 0xe7, 0x80, 0xfb, 0x41, 0xf6, 0xdf, 0x14, 0x35, 0x39, 0x30, 0xb9, - 0x31, 0x14, 0x4b, 0xba, 0x35, 0x5a, 0x14, 0x1d, 0xdf, 0x56, 0x88, 0x98, - 0xa8, 0xae, 0x8b, 0x73, 0xb9, 0xb9, 0xcd, 0xa5, 0x63, 0x21, 0x2b, 0xb2, - 0xb9, 0x76, 0xe8, 0x52, 0x33, 0x20, 0xff, 0x90, 0x66, 0x5f, 0xbc, 0x38, - 0xeb, 0xf9, 0xd0, 0x57, 0x9d, 0xb6, 0xfa, 0xf6, 0x83, 0xf8, 0xbe, 0x69, - 0x97, 0xb4, 0x2e, 0x60, 0xa1, 0x4f, 0x00, 0x9b, 0x7a, 0xae, 0xa2, 0x7f, - 0x5e, 0x36, 0x6d, 0x1e, 0x6d, 0x4f, 0xc4, 0xbc, 0xfb, 0xb3, 0x3a, 0x01, - 0x65, 0x45, 0xb0, 0x46, 0x24, 0xe0, 0xf8, 0xc8, 0x39, 0xa3, 0x28, 0x99, - 0xb9, 0xc1, 0xdf, 0xa1, 0xbc, 0x7e, 0x8c, 0x2f, 0x05, 0xde, 0x81, 0xc2, - 0xe8, 0x1a, 0xf1, 0x25, 0xca, 0xd0, 0xc0, 0xd6, 0xdc, 0xc3, 0x7e, 0x4e, - 0x48, 0xdb, 0xf6, 0x5a, 0x76, 0x6f, 0x67, 0x37, 0x1c, 0xc9, 0xcf, 0x11, - 0xcc, 0x79, 0x24, 0xea, 0xbb, 0xab, 0x47, 0xb1, 0x80, 0x54, 0xe3, 0x99, - 0xa6, 0x96, 0x68, 0x10, 0xb9, 0xae, 0x54, 0xbe, 0xfc, 0x76, 0x2c, 0x47, - 0x3d, 0xff, 0x2b, 0xf5, 0xec, 0x88, 0xb8, 0x07, 0xb6, 0x6e, 0xbf, 0xbe, - 0x46, 0xdb, 0x11, 0x2e, 0x7c, 0x7f, 0xae, 0xa3, 0x17, 0x48, 0x4c, 0x05, - 0xb6, 0xd7, 0x29, 0x42, 0xb7, 0xcd, 0x1a, 0xb2, 0xbb, 0x21, 0x74, 0x8b, - 0x60, 0xcd, 0x07, 0x75, 0x44, 0x0c, 0x05, 0x85, 0x9a, 0xd4, 0x1f, 0xd2, - 0x74, 0xa3, 0x8e, 0x5a, 0x20, 0x3e, 0x60, 0xb8, 0x80, 0x35, 0xac, 0xca, - 0x5b, 0x79, 0x5b, 0x9d, 0xcc, 0xaa, 0xbe, 0x44, 0x86, 0x11, 0x06, 0x97, - 0x2c, 0xd7, 0xd0, 0xb6, 0xb4, 0xca, 0x4b, 0x6a, 0xd6, 0x01, 0xfe, 0x81, - 0x06, 0xdd, 0x34, 0x12, 0xd3, 0xa6, 0xfb, 0xc7, 0x33, 0x41, 0xd1, 0x55, - 0x54, 0x54, 0xb5, 0xf7, 0x6e, 0x65, 0x69, 0xff, 0xe6, 0xf9, 0x96, 0x6d, - 0x9c, 0xc9, 0x37, 0x16, 0xd3, 0x0e, 0x92, 0xbc, 0xd1, 0x15, 0x6a, 0x5b, - 0x69, 0xd8, 0xa5, 0xb6, 0xdc, 0xb6, 0xd8, 0x17, 0xc2, 0x5a, 0x3f, 0xd2, - 0xeb, 0xd9, 0x04, 0xc9, 0x1f, 0xee, 0xdc, 0x8b, 0x27, 0x48, 0xad, 0xc3, - 0x12, 0x8d, 0x0f, 0xf6, 0x4b, 0x46, 0xd6, 0x86, 0x8c, 0x1c, 0xae, 0x81, - 0x6e, 0xd6, 0xb5, 0xae, 0x50, 0xaf, 0x52, 0x95, 0x61, 0xcc, 0x1d, 0x86, - 0x11, 0x12, 0x3f, 0x56, 0x4c, 0x98, 0xa8, 0x91, 0x9c, 0x26, 0x98, 0xe7, - 0x56, 0x0d, 0xc9, 0x20, 0x4e, 0xe0, 0x67, 0x5e, 0xe9, 0xe0, 0x99, 0xed, - 0x93, 0x29, 0x9a, 0xfb, 0x71, 0x24, 0x02, 0x5a, 0x6d, 0xe5, 0xec, 0x4b, - 0xc5, 0x7d, 0x35, 0x3d, 0xd7, 0x55, 0xc3, 0x7f, 0x69, 0x5d, 0x5b, 0x87, - 0xba, 0x9a, 0x78, 0x39, 0xa8, 0x31, 0x63, 0x3b, 0xdb, 0xc2, 0xed, 0xc2, - 0xf8, 0xc8, 0xee, 0xa5, 0x46, 0xf3, 0xb0, 0x0e, 0x76, 0x0a, 0x6e, 0x83, - 0xc4, 0x2f, 0xf4, 0xa4, 0x8c, 0x73, 0xab, 0xf8, 0xcf, 0xe2, 0xf8, 0x4d, - 0xa5, 0x74, 0x58, 0xae, 0x13, 0xe2, 0xc7, 0x9a, 0x15, 0xf9, 0x18, 0x30, - 0x1a, 0xa3, 0x31, 0x65, 0xec, 0x9f, 0xf7, 0xa5, 0x7f, 0x3a, 0x1b, 0xf1, - 0x3e, 0x96, 0xb6, 0x23, 0xac, 0xd8, 0xa9, 0x9d, 0x5c, 0x77, 0x63, 0xb4, - 0xa8, 0xc8, 0x07, 0x1b, 0x30, 0xe0, 0xea, 0xce, 0xc9, 0x8e, 0x7b, 0x25, - 0x95, 0x09, 0x8e, 0xff, 0xf1, 0xad, 0x12, 0x10, 0x32, 0xbb, 0x6a, 0xfa, - 0x52, 0x58, 0xa3, 0x4c, 0x5c, 0x14, 0x61, 0x33, 0x46, 0x76, 0x7d, 0xf1, - 0x28, 0xb8, 0xdb, 0xe8, 0xf6, 0x3e, 0xdd, 0x17, 0xfb, 0x5a, 0x33, 0x93, - 0x67, 0x1e, 0x9b, 0x31, 0xdd, 0x24, 0x76, 0xab, 0x88, 0x50, 0x71, 0x52, - 0xcc, 0x30, 0x55, 0x04, 0xf2, 0x62, 0x5f, 0x3d, 0x2e, 0xc0, 0x6d, 0x81, - 0x9c, 0xcf, 0xbe, 0x0f, 0x72, 0x04, 0xc1, 0xcb, 0x7a, 0x85, 0x7c, 0x88, - 0x1a, 0xe4, 0xbf, 0x5a, 0x25, 0x14, 0x7b, 0x8b, 0x61, 0x4a, 0x78, 0xbf, - 0x75, 0xe6, 0x6f, 0x8f, 0xf5, 0xce, 0x2e, 0xbf, 0xe0, 0xa2, 0x17, 0xc1, - 0xc3, 0x17, 0x62, 0x36, 0x6f, 0xd3, 0x0e, 0x39, 0xba, 0x76, 0x6c, 0x66, - 0x8d, 0xcd, 0x7b, 0xb4, 0xe3, 0x11, 0x8b, 0xeb, 0x7d, 0x83, 0x39, 0xbc, - 0xca, 0x55, 0x70, 0xe1, 0x6f, 0x27, 0x46, 0x0e, 0x78, 0x78, 0x77, 0x16, - 0xab, 0x03, 0xcc, 0x3e, 0xd2, 0xf3, 0xb6, 0xfd, 0x60, 0xe8, 0x35, 0x1f, - 0xf3, 0x5f, 0x2b, 0x9b, 0x5b, 0x57, 0xe6, 0xb4, 0xe3, 0x3e, 0x28, 0x8c, - 0xd0, 0xdc, 0xe2, 0xc7, 0xb2, 0x48, 0x6b, 0x76, 0x6e, 0x4d, 0xe4, 0x88, - 0xf8, 0xdb, 0x66, 0x58, 0xda, 0x66, 0x1c, 0x03, 0x60, 0xc6, 0x8e, 0xf6, - 0x96, 0x46, 0x45, 0x0b, 0xc1, 0x93, 0xa1, 0x3b, 0xbe, 0x73, 0xe6, 0x59, - 0x6d, 0x8e, 0xd6, 0x04, 0xe6, 0x7c, 0x1b, 0xd0, 0x38, 0xb2, 0x50, 0x62, - 0x2d, 0x03, 0x2a, 0xc5, 0x3a, 0x7f, 0xf3, 0x2e, 0x23, 0x4c, 0x64, 0x00, - 0x77, 0xba, 0xa7, 0xaf, 0x81, 0x84, 0x37, 0x6b, 0xf8, 0xe2, 0x93, 0xbe, - 0x63, 0x6f, 0x7f, 0xe5, 0x39, 0xfb, 0xad, 0xca, 0xe4, 0x32, 0x70, 0x51, - 0x58, 0xb3, 0xac, 0xa2, 0xb6, 0xd2, 0x2f, 0x3c, 0xf5, 0x91, 0xf8, 0xd9, - 0x3e, 0xaa, 0x6a, 0xe2, 0x15, 0x49, 0x85, 0x6e, 0xde, 0xae, 0x51, 0xe9, - 0x5b, 0x56, 0x2a, 0x7f, 0x87, 0x02, 0x71, 0x89, 0x42, 0x86, 0x09, 0x1f, - 0xe2, 0x2a, 0xb7, 0x8e, 0x78, 0xc0, 0xd0, 0xc9, 0xca, 0x94, 0xeb, 0x5f, - 0xd5, 0x04, 0x8d, 0x5a, 0x67, 0x47, 0x10, 0x4a, 0xa7, 0x70, 0x62, 0x4f, - 0x15, 0x18, 0xd3, 0x19, 0x45, 0x0b, 0x14, 0xef, 0x54, 0xf4, 0x50, 0x64, - 0x1a, 0xc8, 0x65, 0xd1, 0x2f, 0x6c, 0xb5, 0x95, 0xb9, 0x42, 0x45, 0x36, - 0x8d, 0x2b, 0x69, 0x23, 0xcc, 0xfb, 0x47, 0x5d, 0x81, 0x37, 0x78, 0xc1, - 0x41, 0xcb, 0x21, 0xd5, 0xed, 0x9d, 0x01, 0x01, 0x60, 0x82, 0x5c, 0x55, - 0x55, 0xa4, 0xe3, 0xfb, 0xb5, 0x1e, 0x8f, 0x8d, 0x70, 0xd3, 0xaf, 0xa6, - 0x2c, 0x4e, 0x66, 0x23, 0xd4, 0xa4, 0x18, 0xd6, 0x71, 0x0a, 0x14, 0xa7, - 0xfb, 0x05, 0x15, 0xea, 0xaa, 0xaa, 0x5e, 0xa3, 0x07, 0x86, 0xdd, 0xce, - 0x60, 0x27, 0x29, 0x5a, 0x49, 0x75, 0xb7, 0xe0, 0x2c, 0xba, 0xff, 0x64, - 0x45, 0x0f, 0xe5, 0x40, 0xbd, 0x94, 0x0b, 0x3d, 0xd5, 0x6b, 0x0b, 0x5f, - 0x52, 0x70, 0xf7, 0x7c, 0x04, 0x82, 0x6b, 0x07, 0xa1, 0xec, 0xa4, 0xae, - 0x79, 0x3b, 0x0f, 0x95, 0x92, 0x1b, 0x04, 0xae, 0xbd, 0xba, 0xdb, 0xf5, - 0xd2, 0x14, 0x6b, 0xf5, 0x6e, 0x7f, 0x6a, 0x98, 0xa1, 0xea, 0x33, 0x08, - 0x38, 0x3d, 0xac, 0x83, 0xd2, 0xf2, 0x07, 0xdb, 0x00, 0x94, 0x84, 0xb6, - 0x19, 0xf9, 0x5a, 0x96, 0xf8, 0x4c, 0xaa, 0x4e, 0xba, 0x8c, 0x11, 0x2e, - 0x08, 0xbb, 0x15, 0xed, 0xb5, 0x19, 0x3a, 0x2a, 0xa8, 0xde, 0xf4, 0xb2, - 0xbf, 0xa0, 0xae, 0x87, 0x54, 0xae, 0x6d, 0x2b, 0xae, 0xfd, 0x06, 0x61, - 0x35, 0x9a, 0xa4, 0x2d, 0x6d, 0x80, 0xb0, 0x1b, 0x47, 0x5b, 0xd5, 0x64, - 0xe5, 0xdc, 0x4e, 0xa1, 0x15, 0xe9, 0x71, 0xd2, 0xcc, 0x29, 0x53, 0x36, - 0x87, 0x94, 0x1a, 0x0f, 0xcb, 0x3c, 0x1e, 0xdf, 0x20, 0xc4, 0xe5, 0x3f, - 0x29, 0x78, 0xf8, 0xc1, 0xf5, 0xab, 0x59, 0x89, 0xd6, 0x95, 0xf9, 0x7b, - 0x4f, 0x8d, 0x12, 0x9b, 0xa3, 0x24, 0x37, 0xc3, 0xf4, 0xb0, 0x7c, 0xca, - 0x40, 0xe7, 0x0b, 0x13, 0x11, 0x63, 0xf1, 0x71, 0x39, 0x11, 0x04, 0xb0, - 0xfb, 0x85, 0x07, 0xb7, 0xc0, 0xdd, 0x75, 0xca, 0xb9, 0x56, 0x15, 0x66, - 0xc4, 0x91, 0x3e, 0xff, 0xb3, 0x6e, 0x0d, 0x35, 0x47, 0x6f, 0xde, 0xf2, - 0xd4, 0x06, 0xfb, 0x73, 0x84, 0xc6, 0x33, 0xd4, 0x06, 0x74, 0x9d, 0x37, - 0x29, 0x9c, 0xe4, 0x17, 0x22, 0xac, 0xb3, 0xe9, 0x26, 0xe4, 0xf9, 0x37, - 0x56, 0xcd, 0xd0, 0x4d, 0x90, 0xe0, 0x75, 0x90, 0x64, 0xe2, 0xf3, 0x67, - 0x07, 0xdb, 0xde, 0xbe, 0xdd, 0x50, 0x24, 0x86, 0x28, 0xf9, 0x3b, 0xb5, - 0x2d, 0x92, 0xaf, 0x78, 0x7a, 0x2d, 0xf7, 0xe7, 0xc9, 0x34, 0xc7, 0xd1, - 0x40, 0x25, 0x0a, 0x92, 0x74, 0x7c, 0x8f, 0xb7, 0xfd, 0x9a, 0x13, 0x79, - 0xd9, 0x8e, 0x70, 0xa5, 0x9a, 0xcc, 0xfe, 0x9b, 0x64, 0x04, 0xe0, 0xff, - 0x66, 0x8d, 0x84, 0xc7, 0xae, 0x3c, 0xfb, 0x66, 0x21, 0x61, 0x09, 0x04, - 0x45, 0x11, 0x29, 0x46, 0x8a, 0x49, 0x23, 0x8d, 0xbb, 0xcc, 0xbe, 0x11, - 0x02, 0x90, 0x58, 0xcb, 0xe8, 0xd9, 0xd4, 0xad, 0x19, 0x10, 0xd1, 0x9e, - 0x70, 0x02, 0x40, 0x02, 0x2f, 0xbe, 0xef, 0xe9, 0x9a, 0xda, 0x80, 0xd3, - 0xf3, 0x0f, 0x47, 0xe2, 0x6c, 0xfc, 0x58, 0xac, 0x59, 0x54, 0x2c, 0x51, - 0x4c, 0xa5, 0x70, 0x90, 0xa9, 0x83, 0x5b, 0x5e, 0xbc, 0xd3, 0x1e, 0x40, - 0x3c, 0x9d, 0x65, 0xa5, 0xc0, 0x0f, 0x66, 0x20, 0x7f, 0x3c, 0xaf, 0x9f, - 0xc0, 0x23, 0x6f, 0x52, 0x6f, 0x1d, 0x7a, 0xfd, 0xf1, 0x70, 0xda, 0x07, - 0x0a, 0xd8, 0x90, 0xc9, 0x68, 0x58, 0x36, 0xf0, 0xc3, 0x50, 0xf0, 0xe7, - 0x68, 0xe2, 0xb5, 0x43, 0x9a, 0x5e, 0x6a, 0x03, 0x81, 0xe6, 0x65, 0x9b, - 0xb5, 0x8c, 0xa6, 0xb5, 0xfe, 0x7f, 0x3d, 0xde, 0xc7, 0x75, 0x5e, 0x1b, - 0xf4, 0x7f, 0xbe, 0x65, 0x44, 0x8b, 0xd1, 0x47, 0xb5, 0xf5, 0x27, 0xcc, - 0xf7, 0xc2, 0x76, 0xc1, 0x5f, 0x26, 0x08, 0xb1, 0x5d, 0x0a, 0x2b, 0xd4, - 0xcf, 0xf0, 0xc7, 0x32, 0xf6, 0xad, 0xac, 0x2b, 0x70, 0x72, 0xd5, 0x3c, - 0x23, 0xc8, 0xb1, 0x3a, 0xd9, 0x22, 0xb9, 0x93, 0x62, 0x87, 0x1d, 0xab, - 0x48, 0xbe, 0xa8, 0x03, 0x68, 0xa4, 0xf1, 0x58, 0x75, 0x17, 0x35, 0x7b, - 0x1f, 0x1e, 0x4b, 0x55, 0x12, 0x8e, 0x6a, 0x08, 0xd1, 0x9c, 0x21, 0x44, - 0xc6, 0x3b, 0xfb, 0x55, 0x3f, 0x9d, 0x9e, 0xda, 0x3b, 0xf8, 0xb7, 0x79, - 0x50, 0xe3, 0x6e, 0x4d, 0xd6, 0x9e, 0x44, 0x9f, 0xb7, 0x39, 0x9a, 0x70, - 0x51, 0x2b, 0x7a, 0xe5, 0x60, 0xc8, 0xd9, 0x2a, 0xe0, 0xa5, 0xcf, 0xeb, - 0x46, 0xdb, 0xb7, 0xbc, 0x4a, 0x2b, 0x36, 0xb0, 0xc2, 0x24, 0xfb, 0x7f, - 0xb9, 0x53, 0x7c, 0x63, 0xbb, 0x88, 0x09, 0xba, 0xe9, 0x0e, 0x46, 0x57, - 0x28, 0xd7, 0x7e, 0xff, 0xde, 0x33, 0x23, 0xa7, 0xee, 0x00, 0xe2, 0x28, - 0x52, 0x88, 0xc4, 0xb6, 0xa9, 0xe4, 0x64, 0xe3, 0xea, 0x57, 0xab, 0x1b, - 0x2b, 0xec, 0x36, 0xe9, 0x07, 0xbd, 0x47, 0x94, 0xad, 0xfa, 0x1a, 0x9e, - 0x38, 0x44, 0x79, 0x2c, 0x76, 0x45, 0x3a, 0x59, 0xdb, 0xb5, 0xf1, 0x4b, - 0x96, 0x73, 0xcc, 0xc9, 0x84, 0x05, 0x4b, 0xdb, 0x81, 0x98, 0x58, 0xf8, - 0x1a, 0xc8, 0x89, 0xa7, 0x26, 0xa4, 0xf9, 0xd4, 0x65, 0x77, 0xc6, 0xd6, - 0x18, 0xfc, 0x99, 0x48, 0x72, 0xaa, 0xf0, 0x8a, 0xca, 0x3f, 0xbc, 0x45, - 0xf6, 0xc5, 0x08, 0xd7, 0x9f, 0x7a, 0xa5, 0x81, 0xe9, 0xfb, 0x50, 0xd0, - 0x42, 0xbe, 0x48, 0x25, 0x37, 0x2a, 0x86, 0xe9, 0x39, 0xdc, 0x6a, 0x9f, - 0x08, 0x1e, 0x06, 0xa4, 0x35, 0x1d, 0x99, 0xeb, 0xb8, 0x76, 0xeb, 0x80, - 0x9f, 0x1e, 0x40, 0xae, 0xef, 0xd5, 0xf8, 0x74, 0x8a, 0x85, 0x57, 0x11, - 0x21, 0x1d, 0xbd, 0xe8, 0xc3, 0x65, 0x6f, 0x53, 0xe9, 0xda, 0xbf, 0xb8, - 0x4e, 0xcc, 0x2b, 0x91, 0xb0, 0xa3, 0xc3, 0xa3, 0xe0, 0xa1, 0x9d, 0x05, - 0x9e, 0xff, 0xc6, 0x64, 0xb3, 0x8d, 0xc1, 0xaf, 0xde, 0x4d, 0x8f, 0x26, - 0x78, 0x04, 0xc9, 0xfb, 0xe6, 0x06, 0x17, 0x86, 0x42, 0xc2, 0xa5, 0xd3, - 0xf4, 0xe0, 0x81, 0xbd, 0x16, 0xd3, 0xc6, 0x1a, 0xd7, 0xd9, 0xed, 0x24, - 0x22, 0x7a, 0xeb, 0x95, 0xa3, 0x1a, 0x96, 0x81, 0x13, 0x48, 0x15, 0x70, - 0x18, 0xf8, 0x2f, 0x98, 0xf3, 0x61, 0x49, 0xaa, 0x69, 0x92, 0x63, 0x6e, - 0xd2, 0xe3, 0xa6, 0x45, 0x75, 0x71, 0xc8, 0x29, 0xc0, 0x21, 0xfa, 0x6a, - 0xe6, 0xdf, 0x40, 0xbb, 0x94, 0x75, 0xba, 0xf2, 0x6c, 0x44, 0xb6, 0xd6, - 0x28, 0xf5, 0x7f, 0x99, 0xb8, 0x56, 0x08, 0xba, 0x30, 0x45, 0x31, 0x87, - 0x46, 0xdc, 0xf5, 0xcf, 0xbe, 0x65, 0xbd, 0x63, 0xf0, 0xcb, 0x7b, 0x58, - 0x83, 0x79, 0xbe, 0xd8, 0xda, 0x9e, 0xce, 0x54, 0x40, 0x19, 0xf0, 0xe5, - 0x3d, 0x99, 0x98, 0x7b, 0xce, 0xbc, 0x8f, 0x0f, 0x72, 0x4d, 0xdc, 0xf1, - 0xae, 0x44, 0x13, 0x7c, 0xa7, 0x6c, 0x17, 0x8a, 0xe8, 0xeb, 0x6b, 0xad, - 0xc8, 0x3a, 0xce, 0x4a, 0x60, 0xb7, 0x93, 0x5e, 0x32, 0x94, 0xa6, 0x64, - 0x15, 0x09, 0xe7, 0x69, 0x07, 0x42, 0xf1, 0x4b, 0x59, 0x3d, 0xf4, 0xb2, - 0xf9, 0x10, 0xca, 0xef, 0x64, 0x86, 0x3d, 0x58, 0xac, 0x90, 0x45, 0x4b, - 0xe8, 0x27, 0xff, 0x2b, 0x16, 0xb2, 0x33, 0x43, 0x7c, 0xa7, 0xef, 0xc6, - 0xbb, 0x7a, 0xfa, 0xce, 0xda, 0x03, 0x95, 0x68, 0x3c, 0xff, 0x1b, 0xcd, - 0x84, 0x94, 0x41, 0xac, 0x05, 0x88, 0x19, 0x51, 0xf1, 0x9c, 0x5e, 0x55, - 0x2f, 0x69, 0x4a, 0xe7, 0x91, 0x36, 0x1f, 0x20, 0x51, 0xa4, 0xc6, 0x9d, - 0xc5, 0x33, 0x80, 0xe0, 0x9d, 0x09, 0x42, 0x63, 0x20, 0x6a, 0x8f, 0x4f, - 0xa9, 0x2d, 0xef, 0x33, 0x63, 0x57, 0xed, 0x39, 0xea, 0x34, 0x5b, 0x51, - 0x8b, 0x59, 0xcd, 0x80, 0x9c, 0xa3, 0x66, 0x26, 0x51, 0x1c, 0x78, 0x1c, - 0xbf, 0x72, 0x11, 0xfe, 0xb3, 0xba, 0x21, 0xe0, 0x8c, 0xea, 0xea, 0xb2, - 0x49, 0x02, 0xd3, 0x10, 0x64, 0x74, 0xbf, 0xf0, 0x1e, 0x39, 0xd0, 0x9d, - 0x9b, 0x19, 0x69, 0xe0, 0xa4, 0x33, 0xdc, 0xcc, 0x3d, 0x95, 0x9d, 0xd4, - 0x10, 0xcd, 0xa5, 0x8e, 0xd4, 0x4a, 0xec, 0x04, 0xf5, 0x9d, 0x47, 0x28, - 0x2a, 0x1c, 0xa0, 0x1a, 0x3c, 0x74, 0xd2, 0x86, 0xda, 0x60, 0x0e, 0x68, - 0x33, 0x1f, 0x21, 0xdf, 0x32, 0x61, 0xf2, 0x3e, 0x7c, 0xf7, 0x2a, 0xd8, - 0xa2, 0xa7, 0xcb, 0xa3, 0x4d, 0xe6, 0x3c, 0x48, 0xb5, 0x5c, 0x44, 0xd4, - 0x5a, 0x91, 0x94, 0xda, 0xdf, 0x9b, 0x47, 0xa5, 0x0a, 0x1f, 0x74, 0x66, - 0x95, 0x95, 0x9c, 0x04, 0x4c, 0xaa, 0x20, 0x26, 0xe7, 0x28, 0xc4, 0x7a, - 0x38, 0xf9, 0x53, 0x33, 0x95, 0x96, 0x4e, 0xaf, 0x27, 0x11, 0x0a, 0x4d, - 0x23, 0xc5, 0x77, 0xe0, 0x60, 0xcb, 0x95, 0xc6, 0x98, 0x44, 0xcb, 0xec, - 0x2d, 0xa0, 0x37, 0x38, 0x79, 0x72, 0x39, 0x76, 0xee, 0xd2, 0x4a, 0xf9, - 0x50, 0x2f, 0xe2, 0x84, 0x17, 0x97, 0x97, 0x4c, 0xab, 0xc5, 0xb8, 0xae, - 0xb5, 0x99, 0x4d, 0xd6, 0xe9, 0x02, 0x6f, 0x2d, 0x3a, 0x5c, 0x12, 0x5f, - 0x1d, 0x5a, 0x74, 0x34, 0xd1, 0x94, 0x36, 0x0d, 0xc5, 0x63, 0x84, 0x12, - 0x9a, 0xa3, 0xa1, 0x73, 0x48, 0x2c, 0x9f, 0x60, 0x93, 0x4f, 0x84, 0xd9, - 0x9a, 0xd6, 0x3f, 0x70, 0x79, 0x4d, 0x96, 0x55, 0x6e, 0x5b, 0x52, 0x1c, - 0x02, 0xea, 0xae, 0xfb, 0x4f, 0xc1, 0xab, 0x43, 0x87, 0x67, 0x61, 0xd5, - 0x83, 0x9d, 0x35, 0xf5, 0x76, 0x0f, 0xc6, 0x9f, 0xf3, 0xdc, 0x29, 0x48, - 0x41, 0xa8, 0x23, 0x66, 0x43, 0x63, 0x5c, 0x28, 0x20, 0xf6, 0x33, 0xe6, - 0x00, 0x38, 0xaa, 0x7f, 0x05, 0xf5, 0xd7, 0x89, 0xc6, 0x6a, 0xaa, 0x24, - 0xcd, 0xde, 0x6c, 0xf9, 0xbc, 0xa8, 0xc3, 0xbd, 0x88, 0xeb, 0x1b, 0x73, - 0x1d, 0xb4, 0x50, 0x40, 0x75, 0x29, 0x75, 0x64, 0x83, 0xc4, 0x1c, 0x13, - 0x6a, 0xa3, 0x6e, 0xec, 0x0b, 0x5e, 0xce, 0xb4, 0x32, 0x72, 0x4e, 0xb8, - 0x54, 0x03, 0x57, 0x7e, 0x04, 0x1a, 0x8f, 0xea, 0x38, 0xac, 0x87, 0x3d, - 0x6a, 0x1a, 0x44, 0xfe, 0x34, 0x54, 0x60, 0xab, 0xfe, 0xbf, 0x2e, 0x95, - 0xdb, 0xf6, 0x49, 0x66, 0x58, 0x4d, 0xff, 0x93, 0xbf, 0x8f, 0x8a, 0xf9, - 0x16, 0xd0, 0xa2, 0x9e, 0x7d, 0xbe, 0x4f, 0xd0, 0xa3, 0xc7, 0xe1, 0x52, - 0x24, 0x4d, 0x15, 0x01, 0xfb, 0xca, 0x49, 0xec, 0x30, 0x85, 0xc9, 0x99, - 0x78, 0x0a, 0xcb, 0x79, 0x24, 0x56, 0x08, 0x4e, 0x27, 0x93, 0x63, 0xcd, - 0x0e, 0xed, 0x39, 0x4a, 0x3a, 0x79, 0x03, 0x19, 0xa7, 0x53, 0x03, 0xaa, - 0xf4, 0x71, 0xce, 0x03, 0x64, 0xaf, 0x55, 0x29, 0x53, 0x38, 0x23, 0x23, - 0xbc, 0x27, 0xbf, 0x42, 0x31, 0xd5, 0xab, 0xe9, 0xb1, 0xad, 0xda, 0x3f, - 0xbc, 0xff, 0x9e, 0x58, 0x91, 0x4f, 0x5e, 0xb5, 0x0d, 0x3b, 0xc0, 0x9d, - 0x76, 0x6c, 0xf0, 0x49, 0xb8, 0xf4, 0xc7, 0x81, 0x37, 0x2e, 0x98, 0x13, - 0xa5, 0x7e, 0x9b, 0x84, 0x73, 0x38, 0x8d, 0x66, 0x95, 0xbc, 0x17, 0xf0, - 0x01, 0x96, 0x3b, 0xa4, 0xb8, 0x54, 0xfc, 0x21, 0x9e, 0x7a, 0x91, 0xc0, - 0x19, 0x72, 0xd8, 0xd2, 0xe7, 0x3a, 0x63, 0xf0, 0xf2, 0xca, 0xf1, 0x86, - 0x0a, 0xdc, 0x1a, 0x87, 0xdc, 0xdb, 0x5f, 0x07, 0xad, 0xc1, 0xd4, 0xeb, - 0x3d, 0x15, 0x78, 0x3e, 0x9f, 0x03, 0xfb, 0x07, 0xff, 0xbe, 0x0d, 0xd2, - 0xea, 0xf0, 0x7d, 0xc1, 0x18, 0x19, 0x06, 0x35, 0xcc, 0xea, 0x47, 0x08, - 0x17, 0xe5, 0x7f, 0x1b, 0x3c, 0xcd, 0x6b, 0xf5, 0xd9, 0x48, 0xb9, 0x1e, - 0x44, 0x31, 0x41, 0x36, 0xcc, 0x11, 0x21, 0xcd, 0xa5, 0xe4, 0x77, 0x3e, - 0xca, 0xae, 0x06, 0x8a, 0x57, 0x36, 0xf1, 0xd4, 0x3f, 0x20, 0x1c, 0x3d, - 0x47, 0x9d, 0x2e, 0x13, 0x53, 0xf9, 0xb0, 0xf9, 0x33, 0x6e, 0x46, 0xcd, - 0xf2, 0x89, 0x77, 0x3b, 0xad, 0xe7, 0x3d, 0x1c, 0x95, 0x29, 0x48, 0x16, - 0x23, 0xa2, 0x22, 0x87, 0xe6, 0x31, 0x68, 0xd1, 0xd1, 0xa1, 0x6f, 0xe9, - 0x5a, 0xc3, 0x24, 0xc5, 0x40, 0x9a, 0x74, 0xc1, 0x80, 0x0b, 0xc5, 0xf6, - 0x32, 0x1d, 0x5c, 0xf4, 0x28, 0x3f, 0x57, 0x3e, 0x87, 0x93, 0xd5, 0x82, - 0x23, 0x77, 0xa9, 0x95, 0x3a, 0x01, 0x55, 0x87, 0x72, 0xf5, 0xe7, 0x10, - 0x6f, 0x10, 0xf8, 0x18, 0x69, 0x95, 0x08, 0x3c, 0xa8, 0xe1, 0x65, 0x88, - 0x4d, 0xbd, 0x2a, 0x9c, 0x61, 0xb9, 0x26, 0x1e, 0x98, 0x98, 0x88, 0x8c, - 0x62, 0x47, 0x37, 0x0b, 0x4d, 0xd0, 0xe6, 0x1b, 0x9d, 0x13, 0xf3, 0xcf, - 0xe1, 0xdb, 0x3b, 0xe6, 0xcc, 0x92, 0x85, 0xc3, 0xba, 0x68, 0xfd, 0xc8, - 0x90, 0xa8, 0xd5, 0x23, 0xd2, 0xe5, 0x90, 0x8b, 0x54, 0xc7, 0x8f, 0x45, - 0x17, 0xb7, 0x33, 0x30, 0xca, 0x67, 0x3a, 0x61, 0x9f, 0x70, 0xf4, 0xc5, - 0xa1, 0xae, 0x62, 0x3a, 0x1b, 0xb9, 0x5c, 0x0d, 0x40, 0x18, 0xab, 0x6b, - 0x37, 0x43, 0xf9, 0xec, 0xe4, 0x4f, 0xb7, 0x3f, 0x99, 0xfe, 0xaa, 0x5d, - 0x23, 0x27, 0x88, 0x44, 0xef, 0xd3, 0xcb, 0xfb, 0x3b, 0xc4, 0xcb, 0x78, - 0x72, 0x7c, 0x70, 0x03, 0x1b, 0xa8, 0xf7, 0xe9, 0xda, 0xc4, 0xee, 0x9a, - 0x79, 0xbb, 0x8a, 0xc6, 0x59, 0xd6, 0x51, 0x67, 0xd7, 0xf6, 0xcb, 0x61, - 0x8d, 0xe0, 0xf2, 0xaf, 0xa7, 0x8c, 0xa9, 0x4c, 0x9c, 0x6f, 0xec, 0x2c, - 0x33, 0x44, 0x85, 0x1f, 0x36, 0xdc, 0xc7, 0x47, 0xdd, 0xe0, 0x9c, 0xec, - 0xf0, 0xaf, 0xf2, 0x2f, 0x88, 0x45, 0x89, 0xf9, 0xd2, 0xc7, 0xba, 0xce, - 0x57, 0x24, 0x3d, 0x74, 0xa0, 0x8d, 0xe7, 0x4d, 0x7b, 0xa3, 0xda, 0x67, - 0x72, 0x29, 0x32, 0x0d, 0x3b, 0x6b, 0x74, 0xf7, 0xaa, 0xa3, 0x81, 0x8d, - 0x0b, 0x25, 0xfa, 0xd2, 0xbc, 0xb7, 0xb1, 0xa6, 0x33, 0xc5, 0xf8, 0x05, - 0x26, 0xb6, 0xdf, 0x96, 0x18, 0xd5, 0xf3, 0xab, 0xac, 0x20, 0x54, 0x95, - 0x0a, 0xb9, 0x29, 0x34, 0x5f, 0xd4, 0xc4, 0xdd, 0x5b, 0xb4, 0x60, 0xaf, - 0xe2, 0x87, 0xf9, 0x1b, 0x96, 0xd0, 0x75, 0x4a, 0x68, 0xcc, 0x4f, 0xef, - 0x48, 0x3a, 0x97, 0x4c, 0xa6, 0x57, 0x89, 0x9d, 0xfc, 0x36, 0x8b, 0x3a, - 0xb8, 0xa5, 0x20, 0x19, 0xf8, 0x98, 0x45, 0xb4, 0x48, 0xfc, 0xc8, 0xca, - 0xf7, 0x26, 0x1d, 0x57, 0xd2, 0xe7, 0x41, 0x86, 0x8e, 0x38, 0x9b, 0xb2, - 0x25, 0xf3, 0xfd, 0x26, 0x4d, 0xf6, 0x42, 0x69, 0x7d, 0x49, 0x8b, 0xbf, - 0x4d, 0x9f, 0xf7, 0x21, 0xcf, 0x2b, 0xbe, 0x63, 0x7e, 0xdc, 0x3e, 0x15, - 0xc9, 0x6f, 0x54, 0xf6, 0x21, 0x57, 0xcc, 0xb5, 0x4a, 0x0c, 0x6d, 0x67, - 0xcd, 0xff, 0xb2, 0xe1, 0x40, 0x57, 0x03, 0x8a, 0x57, 0xec, 0x97, 0x08, - 0x3b, 0xfe, 0xa9, 0xeb, 0x35, 0xaf, 0x11, 0x58, 0xcd, 0x42, 0x4e, 0xa0, - 0x6b, 0xf3, 0xb6, 0x30, 0x6a, 0xf0, 0xff, 0x0c, 0xe9, 0x27, 0x8c, 0x83, - 0x0f, 0x90, 0xe7, 0xc5, 0x40, 0xdc, 0xa0, 0xa5, 0x4f, 0xd7, 0x93, 0x45, - 0x2b, 0x10, 0x08, 0xa3, 0x89, 0x8a, 0xff, 0x7d, 0x1d, 0x55, 0x84, 0x05, - 0x89, 0x44, 0x33, 0x0e, 0x5d, 0xd2, 0x33, 0x71, 0xf7, 0xbe, 0x3c, 0xa1, - 0xfc, 0xa0, 0x7e, 0xbf, 0x86, 0x02, 0xb1, 0xb9, 0xf9, 0xec, 0xd7, 0x59, - 0x7f, 0xb9, 0x4e, 0x6c, 0xd7, 0x4f, 0x9f, 0xb0, 0x3d, 0x5d, 0x58, 0x59, - 0x00, 0x82, 0xa7, 0xf5, 0xb9, 0x33, 0x17, 0x43, 0x17, 0xef, 0xcb, 0x99, - 0x1a, 0x08, 0x15, 0x00, 0xd3, 0x53, 0xb9, 0x95, 0xe3, 0x11, 0x15, 0x49, - 0x07, 0x98, 0x6f, 0x2f, 0x97, 0x81, 0xf0, 0x61, 0xa7, 0xc0, 0xbe, 0xeb, - 0x3a, 0x30, 0xb1, 0x40, 0x3a, 0x0b, 0x1b, 0x9d, 0x8d, 0x4e, 0x94, 0x94, - 0x66, 0xe0, 0x57, 0x56, 0xb0, 0xf3, 0xf2, 0xcc, 0x0e, 0x88, 0xb8, 0xc4, - 0xfc, 0xfb, 0x93, 0xe6, 0x08, 0xa2, 0x25, 0xbf, 0xb1, 0x57, 0x8e, 0xb4, - 0x4d, 0x9e, 0x97, 0x01, 0xd3, 0x15, 0xa2, 0xea, 0x3f, 0x4b, 0x97, 0x91, - 0xf7, 0x4e, 0xb5, 0x03, 0xd2, 0x60, 0xd7, 0xca, 0x9c, 0x67, 0x68, 0x55, - 0x03, 0xd1, 0xbe, 0x3d, 0xb5, 0x71, 0x9a, 0x5e, 0xea, 0x68, 0x32, 0x7c, - 0x3d, 0xc4, 0x73, 0xf2, 0x5c, 0x2a, 0xb2, 0x17, 0xa0, 0x37, 0x3a, 0x8b, - 0x8f, 0x77, 0xa7, 0xe2, 0x5f, 0x6b, 0x06, 0xa4, 0x74, 0x97, 0xaa, 0xbe, - 0x3b, 0x03, 0xf6, 0x0c, 0xd6, 0x3a, 0xb0, 0x5a, 0x8c, 0x60, 0xdc, 0x1a, - 0x5a, 0xdc, 0xfc, 0xa6, 0x8d, 0x2b, 0x99, 0x88, 0xfc, 0xb8, 0x3e, 0xf8, - 0x66, 0x6c, 0xa7, 0x00, 0xff, 0xcb, 0x08, 0x99, 0x9c, 0x55, 0xe9, 0xdb, - 0x6b, 0x48, 0x62, 0xe5, 0x75, 0x73, 0x20, 0x79, 0x06, 0xea, 0xb4, 0x34, - 0xac, 0x92, 0xb4, 0x05, 0xff, 0x4e, 0x08, 0xa6, 0xc4, 0x19, 0x53, 0xe6, - 0xcf, 0xcc, 0xc8, 0xbb, 0xa4, 0x73, 0xe9, 0xec, 0xa9, 0x8a, 0x4e, 0xef, - 0xc6, 0xdf, 0xd3, 0xe9, 0xe0, 0x29, 0x0d, 0xe5, 0xb1, 0xf8, 0xaf, 0x27, - 0xbc, 0xd1, 0xe2, 0x03, 0x73, 0x4d, 0x19, 0x11, 0x4e, 0x3d, 0x33, 0xc7, - 0xab, 0x87, 0xa8, 0x31, 0x73, 0xa0, 0x47, 0xd3, 0x17, 0xfa, 0x11, 0xcc, - 0x07, 0x87, 0x7c, 0x78, 0xae, 0xac, 0x7a, 0x77, 0x6a, 0x26, 0x99, 0x95, - 0xb7, 0xd3, 0x4b, 0xf1, 0xb0, 0x46, 0x53, 0xff, 0x82, 0xde, 0xb6, 0x39, - 0xf5, 0xde, 0x8f, 0x12, 0x91, 0x1c, 0x27, 0xd5, 0x9d, 0xf2, 0x38, 0xa7, - 0x80, 0x2b, 0xf2, 0xa2, 0xbf, 0x41, 0x8b, 0x89, 0xf5, 0x27, 0x8d, 0xdf, - 0xc0, 0x79, 0xe4, 0x66, 0x67, 0x81, 0x6c, 0xcb, 0xa6, 0xf7, 0x92, 0x2a, - 0xf1, 0xf5, 0x22, 0x77, 0xd7, 0xe0, 0xf8, 0xa9, 0x9f, 0x2c, 0xd4, 0x11, - 0x6d, 0x10, 0xd1, 0xcf, 0x93, 0x35, 0x87, 0x61, 0xad, 0x5d, 0x0b, 0x52, - 0x71, 0x3d, 0x4c, 0x57, 0x69, 0xfa, 0xc1, 0x9a, 0xe4, 0xba, 0xeb, 0x9f, - 0xd3, 0xd4, 0x07, 0x87, 0x5a, 0x43, 0x29, 0x9d, 0x73, 0xfc, 0x4b, 0x94, - 0x42, 0x59, 0x78, 0x16, 0x91, 0x19, 0xdd, 0xf1, 0x38, 0x04, 0xa5, 0x5b, - 0x7e, 0x02, 0xe1, 0x6c, 0xd9, 0xd1, 0x17, 0x85, 0xe8, 0xcb, 0x9c, 0x38, - 0x3c, 0xa9, 0xa6, 0x13, 0x7d, 0x0a, 0xda, 0x53, 0x1c, 0x31, 0x25, 0xd7, - 0x21, 0x91, 0x74, 0xf8, 0x4c, 0xcf, 0xb2, 0xc6, 0x1c, 0xc7, 0xf6, 0x90, - 0x96, 0x40, 0x44, 0x24, 0xfe, 0x47, 0xe0, 0xe5, 0xe6, 0x40, 0x6c, 0x47, - 0x21, 0xaa, 0x48, 0xcb, 0x17, 0x4b, 0x1f, 0x49, 0x31, 0x89, 0xaa, 0xc6, - 0x84, 0x2b, 0x42, 0x28, 0xf9, 0x45, 0x3c, 0xa8, 0xa7, 0xfa, 0x68, 0x08, - 0x84, 0x28, 0x9b, 0x08, 0x2d, 0xe0, 0x9e, 0x6c, 0x1c, 0xe4, 0x51, 0xc0, - 0x6d, 0x76, 0x35, 0x0b, 0xd2, 0x4c, 0xe6, 0x6f, 0xcf, 0xfd, 0xde, 0x51, - 0xbd, 0xc3, 0x60, 0xf0, 0xeb, 0x53, 0xba, 0xfd, 0x3c, 0xa7, 0xfd, 0x64, - 0x9a, 0xfc, 0xb4, 0xb2, 0x5b, 0x63, 0xa9, 0xd5, 0x34, 0x98, 0x23, 0x6d, - 0x7b, 0x8a, 0xa8, 0x9a, 0x03, 0x76, 0x9b, 0xdf, 0x9c, 0x20, 0x89, 0x78, - 0xf1, 0x46, 0x0f, 0x99, 0x51, 0xf0, 0x9b, 0x19, 0x12, 0xc0, 0x96, 0x64, - 0xf8, 0x90, 0xa0, 0x4a, 0xa9, 0xec, 0xdf, 0x8e, 0xa1, 0x2c, 0x25, 0x01, - 0xcd, 0x38, 0x15, 0x8b, 0x0b, 0x33, 0xec, 0xbb, 0xa2, 0x64, 0x4f, 0xd0, - 0x35, 0x47, 0x2f, 0x20, 0x5d, 0x3c, 0x0f, 0x20, 0xca, 0x3b, 0x6a, 0xb2, - 0x76, 0x7a, 0xaa, 0x9a, 0xd1, 0x83, 0xd1, 0xab, 0x07, 0xc0, 0x19, 0x97, - 0x83, 0xf1, 0xe5, 0xe1, 0x81, 0x70, 0x84, 0x39, 0x4c, 0x17, 0x36, 0x04, - 0xc0, 0x99, 0x48, 0x51, 0x2a, 0x8e, 0x80, 0x94, 0x67, 0xcd, 0x1e, 0x03, - 0x99, 0x9e, 0x23, 0x26, 0xbd, 0x0e, 0x4b, 0x46, 0xfc, 0x8e, 0xc4, 0x8e, - 0x8a, 0xc1, 0xfd, 0x7f, 0xa1, 0x11, 0x87, 0x5f, 0x03, 0x5e, 0x9f, 0x25, - 0xb2, 0x3f, 0xf0, 0xcd, 0xdb, 0x30, 0x20, 0x8c, 0xb6, 0x4a, 0x08, 0xf1, - 0x7b, 0x21, 0xd6, 0x68, 0xbe, 0x96, 0xcf, 0x17, 0x3f, 0x15, 0x10, 0x07, - 0xb5, 0xd2, 0x34, 0xee, 0x73, 0xcd, 0x69, 0xdb, 0x4c, 0x19, 0xc2, 0xca, - 0xa2, 0x96, 0x92, 0xab, 0x8f, 0x20, 0xf2, 0xf2, 0x5d, 0xe1, 0xb4, 0xfa, - 0x82, 0xa9, 0xd7, 0xc9, 0xb2, 0x64, 0x25, 0xbb, 0x09, 0xa6, 0x4d, 0xf8, - 0x12, 0x8d, 0x7c, 0x65, 0x81, 0xba, 0x6c, 0x5f, 0x5b, 0x72, 0x04, 0x67, - 0x51, 0x66, 0xbb, 0xb6, 0x5c, 0x83, 0x6d, 0xc1, 0x18, 0xde, 0x84, 0x4a, - 0x9d, 0xb6, 0x46, 0x9f, 0xa5, 0x6f, 0x0a, 0x97, 0x5c, 0x16, 0xe7, 0x24, - 0x54, 0x3a, 0x12, 0xbd, 0x76, 0xec, 0xd7, 0x14, 0x8a, 0x0e, 0xed, 0xb8, - 0xc9, 0xf6, 0x2c, 0x58, 0x49, 0x1a, 0x4a, 0x5a, 0xaf, 0xb8, 0xfb, 0x0a, - 0xe5, 0x0f, 0xfd, 0x63, 0xbb, 0x21, 0x81, 0xdf, 0x9d, 0x14, 0x55, 0x46, - 0x30, 0x28, 0x47, 0x11, 0x1d, 0x2b, 0xc5, 0x81, 0xa0, 0x41, 0xdb, 0x3b, - 0xfe, 0xb6, 0xe7, 0xe6, 0x9d, 0xa4, 0xe0, 0xda, 0x45, 0x04, 0xe4, 0x2d, - 0x88, 0x60, 0x14, 0xc1, 0xe3, 0xb4, 0xc0, 0x16, 0xa6, 0x22, 0x4f, 0x55, - 0x26, 0x6e, 0x67, 0x73, 0xf1, 0x42, 0x9a, 0x2f, 0xbe, 0x46, 0xd5, 0x35, - 0xe6, 0x28, 0x98, 0xa4, 0x20, 0x85, 0x54, 0x4f, 0x17, 0x09, 0xa1, 0x75, - 0x73, 0xd5, 0x6b, 0xc8, 0x79, 0xc2, 0x63, 0xd3, 0xe0, 0x03, 0x5c, 0x6b, - 0x97, 0x9d, 0x41, 0x48, 0xff, 0x7d, 0x50, 0xba, 0x88, 0x62, 0xc9, 0x6c, - 0x8c, 0x39, 0x29, 0x91, 0x3f, 0xd0, 0xa7, 0x9c, 0x06, 0x17, 0x13, 0x41, - 0x43, 0x37, 0x12, 0xf2, 0x4b, 0xf4, 0x3d, 0xca, 0x63, 0xf1, 0x60, 0xf2, - 0xb0, 0xe0, 0x17, 0xc6, 0x13, 0x00, 0x35, 0x2a, 0x2e, 0xc7, 0x50, 0x19, - 0x80, 0x41, 0x26, 0x8b, 0xf9, 0x77, 0xab, 0x44, 0xd0, 0x53, 0x5e, 0xb1, - 0x16, 0xd2, 0x61, 0xdc, 0xad, 0xe9, 0xd1, 0x18, 0x54, 0x52, 0xa4, 0xe2, - 0x70, 0xee, 0xb0, 0x3e, 0x25, 0x95, 0x61, 0xe3, 0x4f, 0xfa, 0x1a, 0xd1, - 0xb0, 0xef, 0x93, 0xba, 0xff, 0xc7, 0x0c, 0x53, 0xfa, 0x8e, 0x51, 0x87, - 0x18, 0xf4, 0x9b, 0x59, 0x5f, 0xec, 0x16, 0x0a, 0xb8, 0x45, 0xf4, 0x12, - 0x18, 0xdb, 0x75, 0xd3, 0x61, 0x7d, 0xc2, 0x44, 0xf9, 0xdd, 0x21, 0x50, - 0xea, 0xde, 0x04, 0x5d, 0x59, 0x82, 0xbf, 0x1a, 0xbb, 0x07, 0xf6, 0x32, - 0x66, 0x00, 0x46, 0x1e, 0x1e, 0x62, 0x90, 0xb0, 0x63, 0x45, 0xe7, 0x40, - 0x83, 0xb3, 0x9e, 0x81, 0xa8, 0x0e, 0x6f, 0x3f, 0xbf, 0x50, 0x36, 0xcb, - 0x07, 0x2c, 0x0a, 0xb2, 0xe5, 0x15, 0x27, 0xb2, 0x02, 0x96, 0x30, 0x36, - 0x89, 0x87, 0xd6, 0x82, 0x13, 0xb9, 0xcb, 0x77, 0x78, 0xc2, 0xf2, 0xa6, - 0xdd, 0xa2, 0xa3, 0x9a, 0xc8, 0xdc, 0xb5, 0x99, 0x3f, 0x3d, 0x68, 0x99, - 0xd9, 0x31, 0xa6, 0xf6, 0x9c, 0xd2, 0x67, 0x19, 0xd8, 0x2c, 0x01, 0xb7, - 0xc6, 0xa8, 0xa1, 0xc5, 0x5a, 0x41, 0x08, 0xee, 0xe8, 0x2f, 0x9b, 0x9e, - 0xfc, 0x91, 0xd4, 0x4b, 0x04, 0x03, 0x3e, 0xbf, 0x9b, 0x90, 0x5c, 0x73, - 0xc4, 0x55, 0x43, 0x7e, 0x08, 0x8e, 0x63, 0x4c, 0xd0, 0xd0, 0xc8, 0x74, - 0x40, 0x9d, 0x4a, 0x41, 0x67, 0x4b, 0xc9, 0x27, 0xdb, 0xef, 0x44, 0x79, - 0xeb, 0x05, 0x86, 0x53, 0xcd, 0x95, 0x5b, 0x43, 0xab, 0x31, 0xf4, 0xd3, - 0x50, 0xda, 0x40, 0xfe, 0x6b, 0x9d, 0x85, 0x7f, 0xf8, 0x00, 0x28, 0xce, - 0x66, 0x72, 0xbe, 0x3e, 0xc1, 0xc4, 0xfc, 0x85, 0x6a, 0x61, 0x1e, 0xab, - 0x7e, 0xb6, 0xc8, 0xc4, 0xa4, 0x6f, 0x16, 0xd4, 0x56, 0xf4, 0xaa, 0x34, - 0x12, 0xdf, 0x94, 0x31, 0xce, 0xaf, 0x43, 0x63, 0x8f, 0x1d, 0xe4, 0x4b, - 0xc4, 0xba, 0x5e, 0x7f, 0x6d, 0x75, 0x73, 0x24, 0x09, 0x45, 0xa7, 0x5f, - 0x59, 0x40, 0x1a, 0x0e, 0x63, 0xe0, 0x86, 0xb3, 0xe7, 0x88, 0xec, 0x97, - 0xb7, 0x36, 0x7f, 0xd5, 0x91, 0x78, 0x23, 0x3e, 0x60, 0xdb, 0xae, 0x7f, - 0xc6, 0x8c, 0x43, 0xfb, 0x99, 0xe6, 0xc8, 0xd3, 0xc3, 0xd6, 0xb4, 0x99, - 0xb7, 0xaa, 0xcc, 0xd0, 0xb2, 0x48, 0x97, 0xc7, 0x2e, 0x77, 0x21, 0x93, - 0x32, 0x9a, 0x4a, 0x62, 0x2a, 0xa3, 0x59, 0x5a, 0x39, 0x6a, 0x2f, 0xaf, - 0xec, 0x42, 0xbd, 0xdd, 0x70, 0x0f, 0xeb, 0x27, 0x0a, 0xc2, 0x92, 0x15, - 0xe5, 0x7e, 0xf5, 0x8f, 0x85, 0x30, 0xd9, 0x7d, 0x3f, 0xa5, 0x9e, 0x2a, - 0x3f, 0xd3, 0x82, 0x23, 0x2c, 0x9a, 0x6a, 0xf0, 0x4b, 0xf9, 0x87, 0xde, - 0x5e, 0xe7, 0x8f, 0x8d, 0x8f, 0x6b, 0x77, 0xc3, 0x62, 0x81, 0x2d, 0x68, - 0x8a, 0x90, 0x80, 0x56, 0x4e, 0x30, 0xbc, 0xef, 0x22, 0xbd, 0x24, 0x72, - 0xb4, 0xf3, 0x65, 0x01, 0x01, 0xf6, 0xb0, 0xbe, 0x7a, 0x76, 0x87, 0xb9, - 0xc3, 0xbe, 0x3c, 0x99, 0x76, 0x93, 0xe2, 0x5b, 0x58, 0x88, 0xae, 0x59, - 0xfb, 0x13, 0x7f, 0x5b, 0xf0, 0x79, 0xd6, 0xd1, 0x27, 0x21, 0x14, 0x5e, - 0x18, 0x21, 0x02, 0xb9, 0xe5, 0x51, 0x7c, 0x87, 0xb0, 0x82, 0xa7, 0x8d, - 0x06, 0x6f, 0x94, 0x01, 0x64, 0x72, 0x35, 0xc3, 0x37, 0x5a, 0xae, 0x51, - 0x87, 0x54, 0xcd, 0xd3, 0x8f, 0x62, 0x8c, 0xc9, 0xf7, 0x17, 0xe6, 0x40, - 0x39, 0x0f, 0x9b, 0x9f, 0x2a, 0x5c, 0xe2, 0x29, 0x84, 0x54, 0xcb, 0xd5, - 0x72, 0xac, 0x37, 0x0e, 0xbf, 0x56, 0x77, 0x6d, 0xdb, 0x96, 0x63, 0xa0, - 0xad, 0xfe, 0xc8, 0x6a, 0x57, 0xd1, 0x21, 0x63, 0x42, 0x7a, 0xe1, 0x40, - 0x5a, 0x47, 0x75, 0xb7, 0xd1, 0x7a, 0x5b, 0xde, 0x69, 0x57, 0x90, 0xff, - 0xcb, 0x0b, 0x30, 0xf5, 0xda, 0xab, 0xa6, 0x07, 0xf9, 0xd7, 0x80, 0x1d, - 0xe4, 0xe1, 0xf1, 0x79, 0x28, 0xe3, 0xfe, 0x7a, 0x3a, 0xd3, 0xb3, 0x44, - 0x7e, 0x4d, 0xaf, 0x0a, 0x22, 0x89, 0x54, 0x0d, 0x12, 0x44, 0xdc, 0xb0, - 0x07, 0xa0, 0xd4, 0x24, 0x7f, 0xc5, 0xad, 0x6c, 0x53, 0x5c, 0x2a, 0x50, - 0x8d, 0x6a, 0x74, 0x30, 0x09, 0x14, 0x2c, 0x09, 0x9d, 0x30, 0xb5, 0xc8, - 0x09, 0x3b, 0x22, 0xb8, 0xe9, 0x41, 0xe6, 0x3d, 0x73, 0x15, 0xb7, 0xa3, - 0x6d, 0xb7, 0xad, 0x3d, 0xeb, 0xad, 0x97, 0x15, 0xb9, 0xc2, 0x19, 0x0f, - 0xb2, 0x50, 0xde, 0xab, 0x4d, 0x05, 0xb4, 0x6a, 0x4a, 0x01, 0x65, 0xb0, - 0x6e, 0xa5, 0x7c, 0xab, 0x15, 0xc0, 0xb1, 0x7d, 0xdf, 0x38, 0x08, 0xf9, - 0x89, 0x71, 0x42, 0x11, 0x0c, 0xcf, 0x79, 0x73, 0x46, 0x33, 0x0d, 0x14, - 0x4e, 0xf4, 0x55, 0x47, 0x02, 0x7f, 0x91, 0xeb, 0xa5, 0x23, 0xad, 0xf9, - 0xe6, 0xfc, 0x22, 0xc3, 0x05, 0x38, 0xdf, 0x72, 0xf5, 0x16, 0x6e, 0x45, - 0xc1, 0xac, 0x60, 0x50, 0x8d, 0xaa, 0x29, 0x0c, 0x7e, 0x39, 0x21, 0xeb, - 0x8b, 0x45, 0x76, 0x60, 0xb7, 0x98, 0x9a, 0x2e, 0x7c, 0xa0, 0x71, 0xb4, - 0x38, 0x3b, 0x41, 0xea, 0xdf, 0x1a, 0x17, 0x5e, 0x13, 0xbe, 0x11, 0x72, - 0x66, 0x1f, 0xad, 0x54, 0xd9, 0xee, 0x4d, 0xef, 0x6a, 0x32, 0x5f, 0x14, - 0x3f, 0x3b, 0xf4, 0x23, 0x67, 0xa6, 0x12, 0x72, 0x69, 0xd5, 0x62, 0x9e, - 0xd5, 0xe5, 0xec, 0x4b, 0x7a, 0x4b, 0x96, 0xde, 0xcc, 0x90, 0x9e, 0xbd, - 0x40, 0xbb, 0x8b, 0xa6, 0x38, 0xd4, 0x37, 0x22, 0x7e, 0x0f, 0x86, 0x43, - 0x94, 0x3b, 0x72, 0xb7, 0x00, 0x0f, 0x5a, 0x62, 0x6d, 0x87, 0xd1, 0xb1, - 0xdf, 0x2a, 0x3e, 0xda, 0x1c, 0x86, 0x2c, 0x08, 0xf1, 0x81, 0x18, 0xf9, - 0x20, 0x51, 0x3b, 0x68, 0x1e, 0x7d, 0x04, 0xc0, 0x04, 0x29, 0xad, 0x63, - 0xe9, 0x03, 0xcf, 0x73, 0x5d, 0x27, 0x2e, 0xa5, 0x49, 0xe9, 0x57, 0xe1, - 0x9a, 0x89, 0x2f, 0x52, 0xa8, 0x9b, 0x56, 0x66, 0xa0, 0x54, 0xd3, 0x1b, - 0x06, 0x70, 0x5f, 0x07, 0xc9, 0x5b, 0x56, 0xf0, 0xa9, 0xd6, 0x5f, 0x9b, - 0xd0, 0x7b, 0x59, 0x98, 0xa1, 0x3f, 0xf3, 0x32, 0x9d, 0xda, 0x64, 0xa0, - 0xbb, 0x33, 0x82, 0x69, 0x61, 0x1e, 0xc3, 0xb7, 0xab, 0x88, 0xe7, 0x40, - 0xb6, 0x07, 0x41, 0x6c, 0x96, 0x4d, 0xda, 0x95, 0x05, 0x30, 0x15, 0x69, - 0xc1, 0xdb, 0x8e, 0xda, 0x04, 0xff, 0x26, 0x19, 0xbe, 0x7a, 0x53, 0xcf, - 0xe1, 0xab, 0x95, 0x24, 0xb6, 0xcb, 0xd0, 0xd8, 0xa8, 0x8e, 0x56, 0x9c, - 0x38, 0x69, 0xb9, 0x80, 0x73, 0xbc, 0xde, 0xbd, 0xf6, 0xde, 0xd2, 0xd1, - 0x95, 0x01, 0x55, 0x51, 0x56, 0x13, 0x25, 0xf2, 0x43, 0x6b, 0x88, 0xc0, - 0xd2, 0x32, 0x01, 0xb6, 0x05, 0x10, 0x57, 0x44, 0x89, 0x06, 0x9e, 0x19, - 0xf9, 0x04, 0x8a, 0xff, 0xb9, 0x6c, 0xb3, 0x10, 0x13, 0x4e, 0x49, 0xae, - 0xfe, 0x8b, 0xb0, 0xe4, 0xc3, 0xdb, 0xf9, 0x00, 0x84, 0xc1, 0x3f, 0x48, - 0x18, 0xd9, 0x3f, 0xb8, 0x53, 0x31, 0xa9, 0x62, 0xdd, 0x61, 0x54, 0xd0, - 0xd5, 0x32, 0x3e, 0xad, 0x02, 0x47, 0xc5, 0x28, 0x51, 0x50, 0xa6, 0x0e, - 0xb8, 0x94, 0xee, 0x03, 0x47, 0xae, 0x4c, 0x3b, 0x43, 0x5b, 0xd6, 0x4c, - 0x49, 0x3e, 0x65, 0xbc, 0xfc, 0x7f, 0x35, 0xfc, 0x4a, 0xdd, 0xda, 0xb3, - 0x33, 0x76, 0xf2, 0x08, 0xb7, 0x54, 0xc7, 0x28, 0x1a, 0xc1, 0xa8, 0xe8, - 0xf4, 0x35, 0xd3, 0xd4, 0x29, 0x1d, 0xe5, 0x68, 0x42, 0x1a, 0x22, 0x69, - 0x63, 0xe9, 0x72, 0x54, 0xcd, 0x93, 0xde, 0x93, 0xba, 0x4f, 0xa6, 0x2d, - 0x05, 0xaa, 0x53, 0x99, 0xbc, 0x29, 0x15, 0x3b, 0xbe, 0xba, 0x37, 0x09, - 0x12, 0xe7, 0xf3, 0x2a, 0x8f, 0x51, 0x11, 0x1a, 0x71, 0x3c, 0xb9, 0x46, - 0x05, 0x22, 0xd6, 0x3a, 0xe3, 0x2e, 0xc5, 0x04, 0x81, 0x4e, 0x0e, 0x6e, - 0xad, 0x83, 0xa7, 0x20, 0x6b, 0xcc, 0x7a, 0x92, 0x8b, 0x3e, 0xf8, 0x67, - 0x69, 0x59, 0x16, 0x1e, 0xe1, 0x24, 0xbe, 0xbc, 0x4a, 0x0d, 0x80, 0x06, - 0xcd, 0x77, 0x89, 0x14, 0x64, 0xbf, 0x5b, 0x2a, 0x35, 0x09, 0xe3, 0x86, - 0x73, 0x90, 0xc3, 0x2d, 0xff, 0x1a, 0xc9, 0x83, 0x6e, 0x5d, 0xd9, 0xea, - 0xa2, 0xf1, 0xc0, 0xe6, 0x26, 0xa4, 0xc7, 0x9c, 0xd9, 0x61, 0xa8, 0xa8, - 0xa9, 0xfe, 0xfd, 0xf3, 0xdd, 0x86, 0x18, 0x57, 0xe9, 0x4d, 0xec, 0x0e, - 0x26, 0x49, 0xe5, 0xaa, 0x9e, 0x14, 0xc5, 0xfe, 0xbb, 0xdc, 0x3c, 0x8d, - 0x3b, 0x47, 0xb3, 0xd9, 0xe1, 0x0d, 0x8d, 0x2a, 0xb6, 0xff, 0xaa, 0xcc, - 0x5c, 0xd2, 0x21, 0xea, 0xa7, 0x1d, 0x97, 0xd7, 0xd1, 0xa9, 0xa7, 0x27, - 0x98, 0x4f, 0x89, 0x11, 0xb6, 0xc9, 0x51, 0x8e, 0x49, 0xef, 0xb3, 0x0c, - 0x7e, 0x59, 0xb1, 0x8e, 0x0e, 0xb1, 0x1b, 0x67, 0x5c, 0x29, 0xf9, 0x92, - 0x77, 0x11, 0x8f, 0x34, 0x8e, 0xb2, 0x1c, 0x02, 0xab, 0x55, 0x8c, 0x71, - 0xcb, 0xeb, 0x63, 0xfe, 0x3b, 0x96, 0x5c, 0x5f, 0x0b, 0xa7, 0xc8, 0xfc, - 0x02, 0xdf, 0x77, 0x29, 0x81, 0x93, 0x78, 0x40, 0xf9, 0xb9, 0x3a, 0x53, - 0xd5, 0x5c, 0x75, 0x39, 0xa1, 0x0e, 0x24, 0x42, 0x15, 0x95, 0xfc, 0x10, - 0xbc, 0x2f, 0xbf, 0xb5, 0xb5, 0x02, 0xaf, 0xdf, 0x0b, 0x8d, 0xdf, 0x06, - 0x5e, 0x89, 0xab, 0x10, 0xe8, 0x2d, 0x48, 0x6a, 0x3f, 0x20, 0x9f, 0x52, - 0x1d, 0x82, 0xab, 0x31, 0xfb, 0xeb, 0x86, 0xe1, 0xb2, 0x8b, 0x16, 0x9c, - 0xdd, 0xa9, 0x19, 0xb7, 0xbc, 0xe4, 0x1f, 0x7a, 0x95, 0x87, 0x22, 0xac, - 0x85, 0x66, 0x18, 0x5a, 0x56, 0xc5, 0x9f, 0xb3, 0xf2, 0x7b, 0x1e, 0x3e, - 0x61, 0xb5, 0x19, 0x04, 0x11, 0xe6, 0xe7, 0x43, 0x78, 0x2a, 0x3b, 0x3b, - 0x34, 0x71, 0x6a, 0x74, 0x2b, 0xb7, 0x03, 0x50, 0xe3, 0x76, 0x1c, 0x4a, - 0xf2, 0xda, 0xd6, 0x79, 0x69, 0x78, 0x20, 0xff, 0x44, 0xd3, 0x7f, 0x04, - 0x82, 0x70, 0x5e, 0x80, 0xf2, 0x5a, 0x22, 0xc0, 0xf4, 0x61, 0x65, 0x92, - 0x7f, 0xc7, 0x86, 0xa9, 0xe5, 0xf6, 0x67, 0x30, 0xfc, 0x59, 0x60, 0xb2, - 0xff, 0x17, 0xc0, 0xef, 0xd6, 0xec, 0xdb, 0xfe, 0xbf, 0x9e, 0xa6, 0x86, - 0x83, 0x6e, 0xa9, 0xdc, 0xd2, 0xf5, 0x61, 0x06, 0xd5, 0xe2, 0x74, 0x83, - 0x9d, 0x36, 0x80, 0xe7, 0xb0, 0xa9, 0x5f, 0xdc, 0x2e, 0x33, 0x99, 0x0e, - 0xa4, 0xd7, 0xae, 0xaf, 0x4e, 0x67, 0xa1, 0x1e, 0x3b, 0x1c, 0x9e, 0x57, - 0x12, 0xd0, 0xe5, 0x87, 0x6a, 0xa3, 0xea, 0xf1, 0x40, 0x64, 0x9b, 0x7a, - 0x20, 0x6b, 0x9d, 0xb0, 0x75, 0xf2, 0x16, 0x5f, 0x57, 0x0f, 0xa7, 0xfe, - 0x5c, 0x16, 0x0a, 0xd4, 0x7d, 0x19, 0x8f, 0x69, 0xb2, 0x42, 0x70, 0x90, - 0xca, 0x56, 0x04, 0xb7, 0x60, 0x8f, 0xa8, 0x32, 0x1a, 0xf5, 0x30, 0x87, - 0x7d, 0x2f, 0x0e, 0xd9, 0xec, 0x24, 0x7c, 0xae, 0xdf, 0x16, 0x88, 0xf8, - 0x89, 0x1a, 0x47, 0xb6, 0xd9, 0x3b, 0x6f, 0xda, 0xdc, 0x56, 0x42, 0x5a, - 0xe6, 0xbe, 0xfe, 0x5d, 0x91, 0x70, 0x2e, 0xe7, 0x5c, 0x78, 0x57, 0x16, - 0xb8, 0xfe, 0x97, 0x30, 0x0d, 0x6f, 0xe8, 0x62, 0xa0, 0xa3, 0x25, 0xa6, - 0x96, 0x46, 0x87, 0xaa, 0xa7, 0x8f, 0xdf, 0x84, 0x6d, 0x28, 0x43, 0x6a, - 0xea, 0x7a, 0xe4, 0x10, 0xb1, 0x03, 0xcb, 0xbf, 0xb8, 0x4a, 0x89, 0x53, - 0xbe, 0xb7, 0xac, 0xbd, 0x98, 0x71, 0xad, 0x72, 0xb4, 0xd1, 0x74, 0xb2, - 0xeb, 0x83, 0x65, 0x32, 0x33, 0x8b, 0x1a, 0xfe, 0xb7, 0x95, 0x1e, 0x38, - 0xa7, 0xf9, 0xa5, 0x21, 0x52, 0x3f, 0x8c, 0xeb, 0x98, 0x5d, 0xce, 0x5d, - 0x1e, 0x45, 0xdd, 0xd5, 0xae, 0x62, 0x43, 0xab, 0x45, 0x2d, 0xaa, 0xfb, - 0x6d, 0x52, 0xdc, 0x43, 0xc2, 0x60, 0x11, 0xdd, 0x3f, 0x1b, 0x00, 0xec, - 0x88, 0x50, 0x9f, 0x39, 0xf1, 0xa8, 0x0a, 0xa4, 0x4c, 0xea, 0xd2, 0xe5, - 0x18, 0x0b, 0x19, 0x9e, 0xc2, 0x08, 0x0f, 0x5b, 0x2e, 0x44, 0x4c, 0xa7, - 0xe1, 0xd5, 0x72, 0x56, 0xba, 0xad, 0x7a, 0x06, 0xb6, 0x06, 0x1b, 0xff, - 0xe4, 0x85, 0x3d, 0xf9, 0x7e, 0x08, 0x8b, 0x71, 0x7d, 0x4b, 0x85, 0x8f, - 0x6a, 0x12, 0x20, 0x2e, 0x5c, 0x1c, 0x7e, 0xc8, 0xc6, 0xee, 0x5c, 0x8f, - 0x01, 0x6b, 0x68, 0x63, 0xc0, 0xfb, 0x87, 0x5e, 0x02, 0x29, 0x3f, 0x72, - 0x20, 0x3f, 0x4e, 0x32, 0x2c, 0x41, 0xdf, 0x59, 0x8c, 0xec, 0x8e, 0x9a, - 0x96, 0x46, 0xb6, 0x41, 0xe2, 0x25, 0xbc, 0x85, 0xef, 0xd4, 0xed, 0x60, - 0xf7, 0x52, 0xc2, 0xa3, 0x81, 0xe7, 0x2d, 0xbb, 0x25, 0xaa, 0x14, 0x2d, - 0x6c, 0xe2, 0x9d, 0xad, 0x63, 0xc6, 0x03, 0x3c, 0x94, 0x75, 0x8e, 0x92, - 0x39, 0x55, 0x89, 0xb0, 0xb3, 0x5f, 0x00, 0x85, 0xb5, 0xc9, 0x6b, 0x8f, - 0xc6, 0x05, 0xd4, 0xc5, 0x01, 0xc9, 0x82, 0xd2, 0x25, 0x86, 0x4e, 0x7a, - 0x11, 0xdc, 0xaf, 0x99, 0xcc, 0xb4, 0x02, 0x55, 0x45, 0xe5, 0xe5, 0x21, - 0x5c, 0xff, 0xf0, 0xaa, 0x98, 0xc1, 0xf2, 0xce, 0xeb, 0x98, 0xdd, 0x9c, - 0xf2, 0xd6, 0xc0, 0xa2, 0xae, 0x0e, 0xf4, 0x26, 0x3f, 0xfc, 0x5a, 0xb0, - 0xa1, 0xb3, 0x66, 0xa7, 0x9e, 0x3d, 0xca, 0x0e, 0xc6, 0x4e, 0x63, 0x81, - 0xca, 0x82, 0xa9, 0x59, 0xaf, 0x26, 0x98, 0x75, 0x81, 0x77, 0x50, 0x0a, - 0x82, 0x77, 0x68, 0x29, 0x40, 0x35, 0x30, 0x6c, 0xe7, 0xb6, 0x40, 0x72, - 0xeb, 0x40, 0x27, 0xb0, 0x14, 0x2e, 0x37, 0x4b, 0x21, 0x17, 0x91, 0xd8, - 0x88, 0x32, 0x8b, 0x3a, 0xd3, 0x17, 0xea, 0x51, 0x88, 0xbc, 0x7a, 0xeb, - 0xa2, 0x5a, 0x72, 0x7d, 0xff, 0x6e, 0x4f, 0x07, 0xc6, 0xc0, 0x0c, 0x20, - 0x69, 0x2e, 0xdd, 0xa0, 0x1f, 0xec, 0xc7, 0x77, 0x31, 0xcb, 0x76, 0x3c, - 0x1f, 0xff, 0x08, 0xcb, 0x35, 0x20, 0xe7, 0xed, 0xb9, 0xfb, 0x3e, 0xb0, - 0x33, 0xbb, 0x7a, 0x90, 0x8a, 0x90, 0x08, 0x7a, 0xd3, 0x63, 0xa3, 0x59, - 0xe3, 0x28, 0xcc, 0xa0, 0x2a, 0xd3, 0x39, 0xc9, 0x11, 0x54, 0xac, 0xaa, - 0x54, 0xa7, 0x77, 0x1a, 0xf9, 0x2e, 0x28, 0x6b, 0x18, 0x3c, 0x45, 0x31, - 0x90, 0xfc, 0x1e, 0xdd, 0xf2, 0xff, 0x55, 0xec, 0xb3, 0x6d, 0x50, 0xec, - 0x5e, 0xad, 0x2b, 0x2e, 0x66, 0x2e, 0x47, 0x0f, 0x8c, 0x6d, 0xe5, 0xb0, - 0x6c, 0x06, 0xea, 0x34, 0x5d, 0x8f, 0xda, 0x89, 0x3f, 0xb7, 0xbc, 0x11, - 0x18, 0xee, 0x1b, 0x31, 0x6f, 0x89, 0x41, 0x22, 0xa9, 0x12, 0xed, 0xea, - 0xf5, 0x71, 0x76, 0xf0, 0xda, 0x07, 0xff, 0xd9, 0x0c, 0xed, 0x64, 0x48, - 0x80, 0xee, 0x7b, 0xf4, 0x71, 0x65, 0x37, 0x5e, 0x1a, 0x72, 0xbf, 0x2e, - 0xa5, 0xb6, 0xdb, 0x74, 0xdf, 0xf2, 0x65, 0xba, 0xa0, 0x03, 0x5e, 0x41, - 0x48, 0xeb, 0xfa, 0xac, 0x70, 0xd6, 0x54, 0xeb, 0xe7, 0x0b, 0x4e, 0x76, - 0xbb, 0xc2, 0x12, 0x1f, 0x43, 0x33, 0x36, 0x1d, 0xef, 0xd7, 0xab, 0x52, - 0xf6, 0x51, 0xe5, 0xe8, 0x19, 0x9d, 0x9f, 0xaa, 0xe7, 0x1e, 0x0c, 0x4e, - 0x95, 0x52, 0x99, 0x8c, 0xf3, 0x8d, 0x03, 0xf2, 0xa4, 0xf6, 0x1c, 0x7a, - 0x4b, 0xfe, 0x0c, 0x4c, 0x75, 0x55, 0x52, 0x3b, 0x17, 0x45, 0xe0, 0x81, - 0xf2, 0xb8, 0x3e, 0x44, 0x0e, 0x2c, 0xd2, 0xf4, 0x23, 0x44, 0x88, 0x7b, - 0xc4, 0xf6, 0x4f, 0x72, 0x11, 0x69, 0x6f, 0x59, 0x46, 0x99, 0x7d, 0x45, - 0x58, 0xeb, 0x52, 0x84, 0x3b, 0x22, 0x1c, 0x7f, 0xef, 0xaa, 0xc2, 0xb7, - 0x69, 0xcd, 0x1e, 0x7d, 0xf1, 0xcd, 0x85, 0x63, 0xb0, 0x54, 0x44, 0x1b, - 0x5d, 0x98, 0xb9, 0x61, 0xa1, 0xa3, 0x12, 0x20, 0xab, 0xdd, 0xaa, 0xa3, - 0xd3, 0x31, 0x11, 0x82, 0x8a, 0x02, 0xe5, 0x12, 0x7a, 0x1e, 0xc4, 0x3e, - 0x72, 0x5a, 0x98, 0x7f, 0xe8, 0x51, 0xd9, 0x3d, 0xe4, 0xbe, 0x8d, 0x86, - 0x35, 0x4b, 0x32, 0x34, 0x0d, 0xf0, 0x55, 0x7d, 0x2b, 0x94, 0xee, 0xcc, - 0xaa, 0x60, 0x32, 0x23, 0xf9, 0x61, 0xaf, 0xae, 0xf3, 0x30, 0xda, 0x13, - 0xf0, 0xb0, 0x4e, 0xaf, 0x6f, 0xbe, 0x95, 0x52, 0xf9, 0x2e, 0x3a, 0x52, - 0xa2, 0x8d, 0xc5, 0xc1, 0xdd, 0xcf, 0xf0, 0xce, 0x7a, 0xb0, 0x64, 0xe6, - 0xd0, 0x8e, 0xfe, 0x17, 0x65, 0x9e, 0x03, 0xb3, 0x79, 0xff, 0x77, 0x3b, - 0x4e, 0x27, 0xd2, 0x5c, 0x87, 0x6c, 0xda, 0x1b, 0xbf, 0xf8, 0x10, 0x15, - 0x21, 0x2b, 0x3f, 0x35, 0xff, 0xa2, 0xfa, 0x77, 0x1d, 0xa9, 0x48, 0x47, - 0x68, 0x0b, 0xaf, 0x25, 0xdc, 0xaa, 0x4e, 0x02, 0x21, 0xb3, 0x35, 0x4f, - 0xcc, 0xe5, 0xf8, 0x70, 0xff, 0x6c, 0x02, 0x4d, 0x94, 0xf3, 0x40, 0x70, - 0xac, 0x8e, 0x47, 0xd3, 0x02, 0x07, 0x29, 0x18, 0xb1, 0xe8, 0xfc, 0xc8, - 0xdc, 0x86, 0x29, 0x50, 0x21, 0xc1, 0x9b, 0x1b, 0x53, 0x5e, 0xff, 0x0b, - 0xb7, 0xb4, 0xb5, 0xf6, 0xed, 0x51, 0xec, 0x14, 0x83, 0x4a, 0x97, 0x09, - 0xdb, 0xf8, 0x06, 0x09, 0xfb, 0x51, 0xfc, 0xb8, 0x70, 0x76, 0x95, 0x3e, - 0x42, 0x07, 0xd7, 0x93, 0x53, 0xaf, 0xa4, 0x59, 0x10, 0x93, 0x89, 0x0a, - 0xf6, 0x3c, 0x70, 0x52, 0xb5, 0x24, 0x90, 0x2e, 0x7d, 0x82, 0x91, 0x01, - 0xa6, 0x6c, 0x31, 0x74, 0x64, 0x54, 0x63, 0x31, 0x81, 0xc7, 0x7d, 0xb1, - 0xfa, 0xc4, 0x2d, 0x96, 0xfa, 0x6a, 0x03, 0x4d, 0x39, 0x34, 0x1d, 0x33, - 0x9a, 0x28, 0x40, 0xf4, 0xb3, 0xc8, 0xa3, 0xfa, 0x86, 0xd7, 0x05, 0x6b, - 0x78, 0xfe, 0x4c, 0xab, 0x89, 0xeb, 0x21, 0x07, 0xfe, 0x02, 0x63, 0x12, - 0x5c, 0xed, 0x3d, 0x43, 0xb9, 0x6e, 0x22, 0x15, 0x80, 0x39, 0x39, 0x24, - 0x0a, 0x61, 0x67, 0xa0, 0x07, 0x99, 0xaa, 0x92, 0x3e, 0xeb, 0x96, 0x1c, - 0x4e, 0x36, 0x65, 0xe4, 0xaf, 0x5f, 0x5e, 0x5e, 0xb2, 0xba, 0xe8, 0xef, - 0x33, 0xb9, 0x91, 0x11, 0x94, 0x49, 0xaa, 0x79, 0x2c, 0xa4, 0xf3, 0x14, - 0x7b, 0x65, 0x76, 0xb3, 0xe9, 0x68, 0xdf, 0x62, 0x30, 0xa0, 0x5d, 0xc3, - 0xeb, 0x80, 0x75, 0x3c, 0x11, 0xc5, 0x7e, 0x73, 0x06, 0x3e, 0x7e, 0x80, - 0x0c, 0x99, 0x2c, 0xc3, 0xcd, 0x59, 0x03, 0xd9, 0x0f, 0x2c, 0x9f, 0x2f, - 0x84, 0xe8, 0xfc, 0xa7, 0x48, 0x52, 0xa1, 0x71, 0xec, 0xb2, 0x11, 0xec, - 0x66, 0x7f, 0xc6, 0xcf, 0xb2, 0x20, 0xfd, 0x33, 0x4a, 0x2b, 0xee, 0xa7, - 0x92, 0x60, 0x3d, 0x73, 0xb1, 0xbd, 0xf4, 0x37, 0x53, 0x8f, 0xe6, 0x5b, - 0xbb, 0x50, 0x1a, 0x2c, 0xfa, 0xd4, 0x4c, 0xfd, 0x53, 0x7e, 0x66, 0x78, - 0x73, 0xaa, 0x6a, 0x7b, 0x68, 0x9c, 0xb4, 0xb0, 0x93, 0xf0, 0x94, 0xbd, - 0x59, 0xc8, 0x32, 0x03, 0x92, 0x9b, 0xf8, 0x39, 0x71, 0x48, 0xcc, 0x16, - 0x5c, 0x34, 0x10, 0x40, 0x13, 0x18, 0xbe, 0x6c, 0x7e, 0xc0, 0xfd, 0xbf, - 0x48, 0x7b, 0xdd, 0x52, 0x5f, 0xe4, 0x67, 0x3f, 0x98, 0x01, 0x54, 0xa2, - 0xbc, 0xbb, 0x55, 0x1e, 0x04, 0x11, 0x5e, 0xa9, 0xc2, 0x03, 0xac, 0x82, - 0x11, 0xc9, 0xe0, 0x4f, 0x3f, 0x78, 0x31, 0x8b, 0x5a, 0xa4, 0x5a, 0x58, - 0xe6, 0xfe, 0xf5, 0x6a, 0xd9, 0x9c, 0x59, 0xc2, 0xe8, 0x09, 0xf2, 0xdb, - 0x50, 0x9c, 0xc6, 0x97, 0xb5, 0x09, 0x2b, 0xad, 0xbd, 0xa0, 0x99, 0x1a, - 0x3a, 0x69, 0x34, 0xad, 0x58, 0x07, 0x01, 0x1c, 0x57, 0x13, 0x04, 0xaf, - 0x5e, 0x2e, 0xd7, 0x42, 0xd9, 0x3e, 0xf4, 0xdc, 0x09, 0x6c, 0x57, 0xb3, - 0x22, 0x37, 0x33, 0x0b, 0xf0, 0x97, 0x88, 0x0e, 0x55, 0x41, 0xbe, 0x14, - 0xeb, 0x9a, 0xcb, 0xc7, 0xc5, 0x34, 0xe8, 0x99, 0xfa, 0x33, 0x16, 0xb3, - 0x50, 0x22, 0x83, 0x7b, 0x1d, 0x7c, 0x0b, 0xc9, 0x05, 0x9f, 0x82, 0x21, - 0x02, 0xb6, 0x56, 0xe6, 0xdb, 0x70, 0xab, 0xcf, 0xc3, 0x46, 0x05, 0x18, - 0xc6, 0x94, 0xc9, 0xef, 0x26, 0xf8, 0x07, 0x6e, 0x54, 0xdd, 0x27, 0x88, - 0x35, 0x2b, 0x9e, 0x83, 0x54, 0x08, 0x08, 0x68, 0x44, 0x65, 0x8f, 0x50, - 0x5b, 0x58, 0xd9, 0xf0, 0x3e, 0x90, 0x3d, 0x04, 0x07, 0xa3, 0xa7, 0x7f, - 0x1a, 0x7f, 0xe6, 0x1c, 0xe1, 0x08, 0x2d, 0x19, 0x53, 0xe8, 0xd7, 0x24, - 0x85, 0xe6, 0x5c, 0xe7, 0xcc, 0x83, 0x97, 0xfc, 0x5f, 0xe7, 0xee, 0x6e, - 0xe9, 0xaa, 0x72, 0xc4, 0xff, 0x5e, 0x3c, 0x9b, 0xad, 0x28, 0xe9, 0x5a, - 0x23, 0xf8, 0xfd, 0xca, 0x4c, 0x75, 0x77, 0xe6, 0x64, 0x08, 0xa5, 0x7d, - 0xf6, 0x37, 0xa6, 0x70, 0xf2, 0x81, 0x21, 0x97, 0xfa, 0x91, 0x18, 0xd2, - 0x30, 0xdd, 0x7d, 0xa1, 0x3c, 0x09, 0xe7, 0x8f, 0x13, 0x5f, 0x7c, 0x8e, - 0x55, 0xcd, 0xcf, 0x8b, 0xbf, 0xd5, 0xe8, 0xf3, 0xa2, 0xa5, 0x62, 0xe5, - 0x0c, 0x5a, 0x00, 0x0e, 0xe9, 0x36, 0xe1, 0xda, 0x7f, 0xc6, 0xe1, 0xc5, - 0x54, 0x4a, 0x87, 0x87, 0xc9, 0xf0, 0xfa, 0xd0, 0x14, 0x54, 0x62, 0xad, - 0xb6, 0xc9, 0x56, 0x2b, 0xc5, 0x21, 0xa8, 0x0e, 0xc1, 0xcd, 0x9f, 0x41, - 0xda, 0x52, 0x35, 0xb6, 0x83, 0x6b, 0x24, 0x37, 0xf5, 0xf8, 0x15, 0xbe, - 0xdc, 0x9e, 0x03, 0x66, 0xcc, 0x23, 0xb4, 0xd6, 0xcd, 0x08, 0xfc, 0xd5, - 0xb2, 0xa7, 0xa2, 0x35, 0xc3, 0x3a, 0x86, 0xfd, 0x69, 0xe5, 0xeb, 0x7b, - 0x5d, 0xd1, 0xad, 0x19, 0x3a, 0xf8, 0xae, 0xcc, 0xfc, 0x50, 0xf1, 0x1e, - 0xcc, 0x97, 0x87, 0x1c, 0xe1, 0x51, 0x84, 0xb0, 0x75, 0x6c, 0x4f, 0x17, - 0x69, 0xf7, 0xf6, 0x3b, 0xc7, 0x7f, 0x78, 0x41, 0xf8, 0xb5, 0x01, 0x36, - 0x69, 0x66, 0x52, 0x05, 0x5e, 0x17, 0x54, 0xfe, 0x33, 0x0a, 0x8d, 0xf2, - 0x69, 0xad, 0x71, 0xa8, 0x4f, 0x4e, 0xb2, 0xb1, 0x55, 0x31, 0x0c, 0xe3, - 0x73, 0x6c, 0xdd, 0xdf, 0xc2, 0x4c, 0x3e, 0x5a, 0x6b, 0xac, 0x57, 0xbd, - 0x95, 0x56, 0x6d, 0x71, 0x96, 0xf5, 0xa1, 0x1d, 0x6c, 0xa6, 0x2c, 0x9e, - 0x2d, 0xd1, 0xed, 0xb2, 0xaa, 0xcd, 0x10, 0xcd, 0x5a, 0x7d, 0x35, 0xb8, - 0xb9, 0xfc, 0x44, 0x6c, 0xf4, 0x28, 0xc5, 0xcd, 0xa7, 0x6e, 0xdc, 0x03, - 0x66, 0xb0, 0xc5, 0x4e, 0xca, 0x97, 0x42, 0x77, 0x0c, 0xec, 0x0b, 0xdb, - 0xfe, 0xee, 0xa1, 0x2a, 0x73, 0x32, 0xff, 0x07, 0x50, 0x29, 0x91, 0x1b, - 0x41, 0xb0, 0xb7, 0xae, 0xe4, 0xbb, 0xd2, 0x95, 0xf3, 0xbb, 0x85, 0x63, - 0x0f, 0xec, 0x44, 0x29, 0xd2, 0x90, 0x31, 0xbc, 0x20, 0x4e, 0x84, 0x75, - 0x92, 0x50, 0xe8, 0xa5, 0xcf, 0xd8, 0x15, 0xb3, 0xb2, 0x2d, 0x6d, 0x33, - 0xe6, 0xec, 0x05, 0x65, 0xc8, 0x51, 0x1e, 0x31, 0xf4, 0xfa, 0xd6, 0x7c, - 0xe2, 0x55, 0x71, 0x33, 0x5f, 0x32, 0xce, 0x81, 0xaa, 0x7c, 0x64, 0x81, - 0xc5, 0xc4, 0x2c, 0x95, 0xc1, 0xb3, 0xe6, 0x98, 0x39, 0x4f, 0x6e, 0x14, - 0x49, 0x5f, 0xc5, 0xe4, 0x88, 0xed, 0x00, 0x43, 0x87, 0xa5, 0xe6, 0xfd, - 0xf0, 0x86, 0xb6, 0x24, 0x1c, 0xb5, 0xf7, 0x7c, 0x6f, 0x51, 0xf3, 0x8a, - 0xbc, 0xf9, 0xb5, 0xcc, 0x10, 0x8c, 0x3d, 0x53, 0x39, 0xd7, 0x26, 0x9c, - 0x4c, 0x9a, 0x1c, 0xe0, 0xa5, 0x62, 0xb4, 0xb9, 0x13, 0xfa, 0x18, 0xd1, - 0xbe, 0x3e, 0xb3, 0x6f, 0x2b, 0xce, 0xc3, 0x6d, 0xa5, 0xc2, 0x02, 0x0c, - 0x2c, 0xe1, 0xa9, 0xa7, 0x3e, 0x0c, 0x5b, 0x1d, 0x7c, 0xbd, 0xcf, 0x76, - 0xde, 0x2f, 0xea, 0x3f, 0xa3, 0x2b, 0xaf, 0x06, 0xaa, 0xa2, 0x59, 0xf3, - 0xe8, 0x09, 0xf8, 0xb9, 0x3c, 0x13, 0x45, 0x12, 0xdd, 0x68, 0xb0, 0xb2, - 0x21, 0xcf, 0xd3, 0xb7, 0x59, 0xdd, 0x09, 0xc9, 0xac, 0x57, 0x8b, 0x10, - 0xfb, 0x83, 0xee, 0xa4, 0xf2, 0xc9, 0x9d, 0x04, 0x82, 0xf6, 0xa1, 0xcf, - 0x9e, 0x91, 0xfa, 0xa8, 0x2f, 0x87, 0x60, 0x70, 0xd8, 0xed, 0x6d, 0x10, - 0xe3, 0x86, 0xc1, 0x44, 0x6f, 0x71, 0x9b, 0xee, 0xb4, 0xfd, 0x9d, 0x6f, - 0x14, 0xca, 0x36, 0xaf, 0x8a, 0xbb, 0x63, 0xca, 0x8e, 0xff, 0xd8, 0xa7, - 0xda, 0x48, 0x32, 0x78, 0x20, 0xd1, 0x2b, 0x5c, 0x63, 0xe4, 0x7a, 0xea, - 0x45, 0x2d, 0x53, 0xca, 0x37, 0x82, 0xa2, 0xda, 0x32, 0x0e, 0x92, 0x83, - 0xec, 0xd2, 0xa1, 0xeb, 0x5f, 0xfe, 0x85, 0xd5, 0x5c, 0x8c, 0xab, 0xda, - 0x60, 0xc5, 0x9c, 0xd5, 0x75, 0xcd, 0xd1, 0xff, 0x5a, 0xc4, 0x10, 0x7f, - 0x3d, 0x47, 0xb9, 0x05, 0x9f, 0xaf, 0xca, 0x15, 0xd7, 0xf8, 0x98, 0x53, - 0x1a, 0xe0, 0x35, 0x04, 0x19, 0x45, 0xd5, 0x86, 0xc1, 0x6c, 0xb1, 0x90, - 0x7a, 0x4d, 0x45, 0x7a, 0xc1, 0x7c, 0x17, 0xcd, 0x9f, 0x59, 0xc5, 0x7c, - 0x4e, 0x20, 0x6d, 0xe9, 0x7b, 0x90, 0x37, 0x61, 0xfb, 0xe6, 0x8c, 0x82, - 0xfe, 0x22, 0x42, 0xe4, 0x32, 0xc4, 0x97, 0x1f, 0x9b, 0xe3, 0x7e, 0x5d, - 0x01, 0x0c, 0xa4, 0xc2, 0x6f, 0xed, 0xb0, 0xf0, 0x8d, 0x63, 0x3a, 0xf6, - 0xa1, 0x0d, 0xd3, 0xca, 0x50, 0xf8, 0x01, 0x1a, 0xf7, 0xf8, 0x49, 0x39, - 0x6e, 0x04, 0x25, 0xfe, 0x42, 0xdd, 0xa9, 0xa2, 0xe7, 0x87, 0x86, 0x58, - 0x72, 0x01, 0x86, 0x29, 0x98, 0xa2, 0x89, 0xa0, 0x0e, 0xe4, 0xcf, 0xd7, - 0x00, 0x36, 0xce, 0x33, 0xa6, 0xfa, 0x0c, 0x41, 0x54, 0x96, 0x23, 0x96, - 0x0c, 0xdd, 0x1d, 0x82, 0x03, 0x76, 0x1e, 0x06, 0xba, 0x26, 0x01, 0xe2, - 0x02, 0xdb, 0xef, 0x29, 0x5a, 0xb2, 0xbe, 0x2a, 0xed, 0x90, 0x8f, 0x8a, - 0x50, 0x97, 0xbb, 0x00, 0xbf, 0x9d, 0x4e, 0xeb, 0x18, 0x41, 0x94, 0xb3, - 0xef, 0x63, 0x26, 0xb3, 0x21, 0x32, 0xe0, 0x9b, 0x26, 0x70, 0xbe, 0xd9, - 0xe2, 0x3c, 0x04, 0x23, 0xb0, 0x80, 0xab, 0x75, 0xce, 0xfc, 0x1a, 0xf2, - 0x80, 0x54, 0x02, 0xad, 0xc7, 0xf3, 0xa0, 0x30, 0x72, 0x56, 0x8f, 0x26, - 0x39, 0x8f, 0xa8, 0xb9, 0xf3, 0x9b, 0xfa, 0x2b, 0xf9, 0x6e, 0xae, 0x3f, - 0xc2, 0xd5, 0x87, 0xc2, 0x33, 0x74, 0x2b, 0xb6, 0xa1, 0x45, 0x8c, 0x29, - 0xb2, 0xcb, 0x1c, 0x06, 0x45, 0x83, 0x88, 0xd5, 0xac, 0x8f, 0x2d, 0x52, - 0x21, 0xb0, 0x90, 0x86, 0xe0, 0x73, 0xdb, 0x75, 0x0b, 0x86, 0x2d, 0xc7, - 0x1a, 0x77, 0x51, 0x34, 0xaa, 0xc7, 0xc0, 0x73, 0x6a, 0x2f, 0xca, 0x36, - 0x86, 0xe4, 0xc9, 0x60, 0x34, 0x27, 0x67, 0xef, 0xd5, 0x89, 0x1f, 0x63, - 0xd8, 0xc4, 0x91, 0x9e, 0x33, 0xc1, 0xeb, 0xfb, 0x40, 0xd5, 0xe2, 0x3d, - 0xe6, 0x0d, 0x82, 0x9e, 0xd4, 0x23, 0x87, 0x4e, 0xbf, 0x52, 0x24, 0xd1, - 0x0c, 0x29, 0x5e, 0xf5, 0x20, 0x1c, 0x36, 0x8d, 0xa2, 0x9a, 0x77, 0x90, - 0xa1, 0xc6, 0x7a, 0x65, 0x14, 0x8f, 0xf5, 0xb2, 0xf8, 0x5d, 0x70, 0xce, - 0xd3, 0xde, 0x89, 0x15, 0x9d, 0x34, 0x9f, 0xec, 0x8a, 0xd8, 0xc4, 0x19, - 0x15, 0xcd, 0x6b, 0xd4, 0x07, 0x2a, 0x42, 0x69, 0xfc, 0x1b, 0x7c, 0x9f, - 0xde, 0x81, 0x92, 0x28, 0x93, 0x53, 0xaf, 0x6c, 0xdf, 0xb1, 0xff, 0xab, - 0x07, 0x07, 0x8f, 0x3f, 0xe0, 0xdc, 0x16, 0x8c, 0xd1, 0xaa, 0x11, 0x09, - 0xa1, 0x2b, 0xfc, 0x54, 0x1a, 0x8f, 0x37, 0x19, 0x42, 0xab, 0x1b, 0xac, - 0x5a, 0x06, 0x9c, 0x61, 0xb2, 0x02, 0xdf, 0x35, 0x87, 0xdf, 0x1a, 0x63, - 0xcf, 0x4c, 0x3e, 0x76, 0x2e, 0x7a, 0xce, 0x6d, 0x7f, 0xda, 0xea, 0xe9, - 0x63, 0x4b, 0x2e, 0x8a, 0xf7, 0x11, 0x0f, 0x4f, 0x4f, 0x6e, 0x80, 0x12, - 0x76, 0x8e, 0xdd, 0xc0, 0x41, 0x24, 0xc6, 0x22, 0x13, 0xd2, 0xd3, 0x8a, - 0x28, 0x8c, 0x21, 0x6e, 0xde, 0xc0, 0x11, 0xa8, 0xaf, 0x4b, 0x07, 0x12, - 0x95, 0xc3, 0x44, 0xa4, 0x8d, 0x88, 0x07, 0x9c, 0x51, 0x75, 0xb0, 0x9f, - 0xd9, 0xc2, 0x48, 0x63, 0xd4, 0xef, 0xbb, 0x11, 0x39, 0x70, 0x56, 0x53, - 0xc5, 0x9b, 0xd9, 0xd3, 0x88, 0x52, 0xd4, 0x47, 0x18, 0x9c, 0xfc, 0xd1, - 0xca, 0x89, 0x24, 0x45, 0x9d, 0x43, 0x96, 0xa2, 0x66, 0x70, 0x1f, 0x16, - 0x6c, 0x41, 0xb2, 0x45, 0x6d, 0x32, 0x10, 0x46, 0xa9, 0xe5, 0xb9, 0xb1, - 0x20, 0x1c, 0x59, 0xd9, 0xdc, 0xca, 0x67, 0x4e, 0x92, 0xc2, 0x20, 0xcf, - 0x8a, 0x29, 0x7a, 0xac, 0x48, 0xc4, 0xd6, 0x29, 0xb9, 0x6e, 0x57, 0x15, - 0xb0, 0xd5, 0xd8, 0x23, 0xe4, 0xd0, 0xb1, 0xbf, 0x45, 0x29, 0x9e, 0x5b, - 0x1f, 0xd1, 0xdf, 0x80, 0x1a, 0x87, 0xe0, 0x30, 0x7d, 0x53, 0xb6, 0x7c, - 0x70, 0x8c, 0x35, 0x6f, 0xec, 0x8e, 0xc6, 0x03, 0x73, 0x19, 0x86, 0x57, - 0x63, 0x6f, 0x74, 0x98, 0x36, 0xe2, 0x6e, 0x77, 0x62, 0x83, 0xc4, 0xf0, - 0xc2, 0xdc, 0xf8, 0x00, 0x06, 0xab, 0x02, 0x05, 0x79, 0x35, 0x9e, 0xbe, - 0x56, 0x86, 0xad, 0xd5, 0x07, 0xa4, 0x29, 0x31, 0x71, 0x9a, 0x5f, 0x02, - 0xfc, 0x23, 0xd3, 0x1d, 0x0f, 0xc1, 0xc0, 0x0a, 0x79, 0x8a, 0xaa, 0x4d, - 0x4c, 0x32, 0x26, 0x3c, 0x46, 0xa2, 0x04, 0xae, 0x94, 0x60, 0xb0, 0x1c, - 0x3d, 0xc7, 0x5e, 0xde, 0xe8, 0xa3, 0x20, 0xd9, 0x09, 0xbb, 0x05, 0xf8, - 0x92, 0x56, 0xd3, 0x27, 0x5f, 0xe7, 0x42, 0x18, 0xb3, 0x76, 0x0c, 0xa2, - 0xd5, 0x91, 0xec, 0x68, 0x05, 0xa0, 0x9e, 0x76, 0x0c, 0x03, 0xdd, 0x56, - 0x2c, 0xd6, 0x87, 0xde, 0xf2, 0x3f, 0xcc, 0xb1, 0xd3, 0xd9, 0x45, 0x97, - 0xac, 0x77, 0xbc, 0xbc, 0x29, 0x5a, 0xbe, 0x3d, 0x60, 0x11, 0x42, 0x8e, - 0xe9, 0x23, 0x5e, 0xed, 0xea, 0x78, 0xc0, 0x44, 0xa8, 0xe7, 0xf6, 0xb3, - 0xa5, 0xcc, 0x0e, 0xfa, 0xdd, 0x1b, 0xf7, 0x42, 0x7e, 0x6c, 0xd2, 0xd1, - 0x6c, 0x4d, 0xca, 0x49, 0x78, 0xd1, 0x8c, 0x2f, 0xde, 0xa2, 0xad, 0xc9, - 0x1f, 0xa2, 0x83, 0x40, 0x33, 0xec, 0x2e, 0x1c, 0x4f, 0x86, 0xf4, 0xcf, - 0x3e, 0x3b, 0xdb, 0xf8, 0xaa, 0x50, 0x1a, 0x5d, 0x5a, 0x48, 0xdd, 0x42, - 0xd2, 0xce, 0x27, 0x34, 0x21, 0x8a, 0x08, 0xed, 0x66, 0x84, 0x86, 0xe8, - 0xc4, 0x9c, 0x2b, 0x14, 0x34, 0xdb, 0x9a, 0xf0, 0xa3, 0xe9, 0x14, 0x70, - 0x6e, 0x95, 0x10, 0x4e, 0x9e, 0x7f, 0x45, 0x36, 0x5f, 0x2f, 0xd9, 0x6a, - 0x83, 0x3c, 0x81, 0x55, 0x2d, 0xbc, 0xb9, 0xcc, 0x4f, 0xf4, 0xcf, 0x81, - 0xc5, 0x96, 0xb2, 0x13, 0x52, 0x3f, 0xef, 0x03, 0x67, 0x20, 0xe6, 0x0b, - 0xed, 0x7d, 0x3b, 0x89, 0x42, 0x07, 0xa3, 0xf1, 0xc4, 0x3a, 0xe1, 0xed, - 0x0c, 0x49, 0x41, 0x63, 0xa7, 0xf1, 0xe3, 0xcf, 0xc9, 0x95, 0xcf, 0x5d, - 0xba, 0x3e, 0xc4, 0xf1, 0x5b, 0x42, 0xb1, 0x07, 0x1f, 0x34, 0x45, 0x4f, - 0x32, 0xdc, 0x32, 0x5d, 0x6b, 0xed, 0x9b, 0x0a, 0x87, 0x52, 0x04, 0x69, - 0x84, 0xee, 0x60, 0x17, 0x68, 0xb9, 0xcb, 0x5f, 0x10, 0x99, 0x79, 0x22, - 0xa0, 0xab, 0x67, 0x71, 0x22, 0xcc, 0x6f, 0xc4, 0x8a, 0x5a, 0xc0, 0xd9, - 0x47, 0xee, 0x68, 0x48, 0x46, 0xae, 0x1f, 0x19, 0x10, 0xbe, 0x6b, 0xdb, - 0xc5, 0xd1, 0xda, 0x48, 0x56, 0x8b, 0xfb, 0x3f, 0x53, 0x88, 0x5f, 0x58, - 0xbb, 0x50, 0xaa, 0x04, 0xe3, 0xcf, 0x9b, 0x89, 0x21, 0x93, 0x62, 0x63, - 0xf8, 0x53, 0x9a, 0xd8, 0xba, 0x61, 0x9e, 0x67, 0x09, 0x03, 0x5f, 0x92, - 0xa6, 0x68, 0x26, 0xc6, 0x24, 0x04, 0x91, 0x0a, 0x32, 0x16, 0x73, 0xa2, - 0x81, 0x1b, 0xa2, 0xa4, 0xb2, 0x17, 0x5b, 0x51, 0x05, 0xcb, 0xb5, 0x4f, - 0xe7, 0x40, 0xc2, 0xf0, 0xee, 0xf8, 0x4f, 0x70, 0xc2, 0xb4, 0xa2, 0x06, - 0x83, 0xe1, 0x13, 0x88, 0xfd, 0x13, 0xc8, 0x8a, 0x0f, 0xb2, 0x50, 0xbe, - 0xc3, 0x66, 0xbe, 0x04, 0xde, 0x47, 0x54, 0xc7, 0x1b, 0x01, 0xf7, 0xdb, - 0x56, 0xe7, 0xb4, 0x9f, 0xf5, 0x20, 0x5b, 0x8c, 0xcb, 0x9f, 0x5f, 0xd4, - 0xb2, 0x47, 0x72, 0x6b, 0x5b, 0x45, 0x27, 0x9a, 0xbb, 0x4c, 0xcd, 0x37, - 0xd4, 0x06, 0x68, 0x2d, 0x50, 0x40, 0x19, 0xcc, 0x76, 0x57, 0x98, 0xe2, - 0x07, 0xb6, 0xf4, 0x98, 0x1d, 0x95, 0x0f, 0x96, 0x9c, 0x2a, 0x1b, 0xb8, - 0x69, 0xb0, 0xaf, 0x1b, 0xbc, 0x6a, 0xc4, 0xb8, 0x9c, 0x2e, 0x2d, 0x2f, - 0x9c, 0xa7, 0xaf, 0x5c, 0x6c, 0x32, 0x8b, 0x31, 0x45, 0x6e, 0x85, 0x89, - 0x39, 0xa9, 0x8d, 0x15, 0x66, 0xd2, 0xd6, 0x48, 0x65, 0xda, 0x44, 0x6d, - 0x63, 0xdd, 0x30, 0xe9, 0x02, 0xc8, 0x64, 0x5c, 0x79, 0x42, 0xe7, 0x3e, - 0x7e, 0x74, 0x86, 0xfa, 0x78, 0x3e, 0x73, 0x7d, 0x79, 0xa8, 0xb7, 0xd1, - 0xbf, 0x01, 0x4f, 0x4b, 0x7b, 0xc5, 0x50, 0xae, 0x89, 0x69, 0x10, 0x73, - 0x17, 0x14, 0x98, 0x9f, 0x8c, 0xe4, 0x83, 0x49, 0xfc, 0x79, 0xc2, 0x53, - 0xfc, 0x1d, 0x16, 0xe9, 0x8b, 0x33, 0xce, 0xcc, 0x81, 0x57, 0xed, 0xd0, - 0x9d, 0xc6, 0x27, 0x1d, 0x77, 0x72, 0x65, 0x02, 0xc0, 0x0e, 0x6c, 0x88, - 0x9e, 0xb7, 0x25, 0x19, 0x94, 0x7f, 0xdf, 0x75, 0x95, 0xf9, 0x2c, 0x00, - 0xf2, 0x69, 0x2a, 0x63, 0x4d, 0x06, 0xef, 0xa9, 0x91, 0x63, 0x41, 0xe9, - 0x04, 0x3d, 0x55, 0x0c, 0x78, 0x64, 0xf9, 0x85, 0x7b, 0x03, 0x82, 0xad, - 0x3d, 0x09, 0x49, 0xb1, 0xaf, 0x2c, 0xe1, 0x93, 0xbd, 0xd6, 0x4f, 0x66, - 0xa8, 0xc8, 0x9e, 0xa5, 0x36, 0x61, 0x67, 0xb0, 0xb7, 0x8e, 0x38, 0x57, - 0x1f, 0x5a, 0x66, 0x8d, 0xde, 0x6f, 0x08, 0xb2, 0x2a, 0x72, 0x85, 0xef, - 0x13, 0x11, 0x72, 0x3b, 0x9b, 0xa6, 0xce, 0xc3, 0x67, 0x24, 0x20, 0xeb, - 0xc5, 0x5a, 0x5d, 0x77, 0x37, 0xc9, 0x47, 0x0c, 0x4f, 0x10, 0x0d, 0x79, - 0x23, 0xfd, 0xff, 0x50, 0xe1, 0xe0, 0xb9, 0x08, 0x0e, 0x54, 0x10, 0x47, - 0x48, 0x98, 0x60, 0xda, 0x8c, 0x6f, 0x30, 0xb3, 0x93, 0xcd, 0x6e, 0xcf, - 0x10, 0x65, 0xd5, 0xa2, 0xcc, 0x06, 0x84, 0x6a, 0x1e, 0x3e, 0x88, 0x7c, - 0x86, 0x11, 0x01, 0x5b, 0x27, 0xff, 0x61, 0x4f, 0x1b, 0xce, 0xe6, 0x17, - 0x17, 0xfe, 0xcb, 0xe2, 0xb3, 0xfa, 0x39, 0x8d, 0xf8, 0xf1, 0x4d, 0xe9, - 0xe7, 0x6d, 0x2e, 0xeb, 0x85, 0x30, 0x81, 0x24, 0xbf, 0xb3, 0x67, 0x9b, - 0x49, 0xd8, 0x46, 0x0b, 0xc3, 0x57, 0xee, 0x70, 0x8b, 0xab, 0x36, 0x23, - 0x95, 0x4c, 0x24, 0xec, 0x6f, 0x35, 0xd1, 0xd3, 0xb2, 0x69, 0x86, 0x14, - 0xa7, 0x4a, 0x38, 0xb3, 0x26, 0x28, 0x35, 0xf4, 0x34, 0x6f, 0x50, 0xf9, - 0xec, 0xa8, 0x47, 0x96, 0xb8, 0x69, 0x7a, 0x4a, 0x85, 0xf1, 0x64, 0x90, - 0xc1, 0x30, 0x25, 0xba, 0x7a, 0x36, 0x59, 0x6a, 0x5b, 0x7e, 0xf3, 0x48, - 0x0d, 0xba, 0x04, 0xd8, 0x8e, 0xc2, 0x1c, 0x63, 0x9f, 0x53, 0x36, 0x22, - 0x4c, 0xeb, 0x27, 0xda, 0x61, 0xfc, 0x32, 0xb1, 0xfc, 0x51, 0xfe, 0x95, - 0x5d, 0x64, 0xe3, 0x79, 0x34, 0x15, 0x03, 0x19, 0x7a, 0x3c, 0xc8, 0x5f, - 0x36, 0xb2, 0x24, 0xb1, 0x52, 0xc2, 0x69, 0xc9, 0xcd, 0xf4, 0x27, 0x6f, - 0x02, 0xf5, 0xcf, 0x2f, 0x24, 0xe0, 0xf2, 0x3c, 0x8a, 0xa1, 0x2e, 0x58, - 0x3d, 0x7c, 0x9f, 0x90, 0x35, 0x6c, 0x9d, 0xb1, 0xa8, 0xdf, 0xae, 0xde, - 0xe9, 0xb4, 0xa1, 0xe8, 0xe1, 0xe5, 0x5c, 0x51, 0x1a, 0xce, 0x7a, 0xc7, - 0x46, 0xb1, 0x72, 0x10, 0xc0, 0xaa, 0xd9, 0x62, 0x3e, 0x72, 0x1a, 0x67, - 0x4e, 0x73, 0x72, 0x96, 0x29, 0x8f, 0x69, 0x52, 0xb6, 0xc6, 0x3c, 0x5e, - 0xbd, 0xfa, 0x41, 0x89, 0x21, 0x29, 0x06, 0xbb, 0xca, 0xc0, 0xd1, 0x30, - 0xb7, 0xdf, 0x12, 0x2b, 0xcd, 0x53, 0x5e, 0x99, 0x67, 0x07, 0x03, 0xac, - 0x97, 0xa2, 0x3e, 0x87, 0x39, 0x68, 0x8f, 0xac, 0xfe, 0xcb, 0x0c, 0x18, - 0xe3, 0x0b, 0xa1, 0xdf, 0x99, 0x1f, 0x7f, 0x32, 0xbc, 0xb1, 0x52, 0x30, - 0xbb, 0x12, 0x3c, 0x5a, 0x0d, 0xdf, 0x21, 0xe2, 0xa1, 0xb8, 0x7e, 0xbc, - 0x99, 0x78, 0xca, 0x54, 0x38, 0x98, 0x93, 0xdc, 0x25, 0xf8, 0x17, 0x85, - 0x57, 0x7f, 0xb8, 0x3e, 0xb3, 0x8d, 0x65, 0x11, 0x24, 0x89, 0x2d, 0xff, - 0x96, 0x26, 0x65, 0x20, 0xb5, 0xd6, 0xf6, 0x99, 0xe0, 0xfd, 0xf3, 0x90, - 0x28, 0x29, 0x2a, 0x76, 0x72, 0x18, 0x4a, 0xd9, 0x1c, 0xad, 0x89, 0xa1, - 0xa9, 0x53, 0x0a, 0x73, 0x14, 0x06, 0xea, 0xa2, 0xd7, 0xcb, 0x8f, 0xc0, - 0xf8, 0xce, 0x95, 0x42, 0xb7, 0x3c, 0x90, 0x34, 0xa1, 0x45, 0xc1, 0x1d, - 0xd2, 0x94, 0x3d, 0x17, 0xfd, 0x1a, 0xfd, 0x5c, 0x43, 0x89, 0x12, 0x09, - 0xec, 0x1f, 0xf0, 0x46, 0x16, 0x11, 0x6b, 0xcd, 0xd5, 0x61, 0x3b, 0xa2, - 0x36, 0x97, 0x78, 0x40, 0x2e, 0xdc, 0x01, 0x08, 0x13, 0x65, 0x15, 0xfd, - 0xef, 0xd6, 0xa1, 0x9e, 0xf2, 0x7b, 0x80, 0x88, 0x64, 0xdc, 0x7c, 0x91, - 0xbb, 0x95, 0x5c, 0x6f, 0xee, 0x23, 0xa5, 0xec, 0x60, 0x68, 0x21, 0xba, - 0x98, 0x6b, 0x6f, 0xe0, 0xb6, 0x99, 0x13, 0x28, 0xd8, 0x8d, 0x10, 0x05, - 0xda, 0xe6, 0x20, 0xcb, 0xb2, 0xba, 0xb7, 0x9a, 0x73, 0x40, 0xa3, 0x14, - 0x8e, 0x74, 0xe4, 0xa4, 0x85, 0x15, 0xdf, 0x17, 0x1e, 0x64, 0xce, 0x53, - 0x45, 0x8f, 0x4d, 0x9c, 0x5f, 0x7a, 0x4f, 0xc7, 0xd4, 0xec, 0xeb, 0x96, - 0x22, 0x68, 0x1f, 0x1a, 0xa0, 0xac, 0x84, 0x9f, 0xe4, 0x2f, 0xb8, 0x78, - 0x13, 0x84, 0xea, 0x0b, 0x9c, 0xd6, 0x1e, 0x74, 0x9a, 0x7a, 0x5d, 0x94, - 0x1d, 0x47, 0xa1, 0x48, 0xe2, 0x6c, 0x8f, 0x14, 0xb0, 0xea, 0x94, 0x66, - 0xbd, 0xd0, 0x50, 0x0f, 0xfb, 0xd1, 0x9a, 0x6e, 0xb4, 0xcf, 0xb8, 0xfc, - 0xe5, 0x63, 0xe8, 0x6d, 0x9f, 0xeb, 0xe9, 0xa2, 0x73, 0x2e, 0xa4, 0xc3, - 0x4c, 0x17, 0xb0, 0xf5, 0xaf, 0x8e, 0xe3, 0xe8, 0x84, 0x64, 0x2e, 0x0a, - 0x14, 0xa3, 0x37, 0x31, 0x8a, 0xd3, 0x55, 0x80, 0x62, 0x21, 0x29, 0x6b, - 0x39, 0x47, 0x79, 0x31, 0x7f, 0x0f, 0xd3, 0xea, 0xb3, 0xdc, 0x81, 0x1c, - 0x9f, 0xf0, 0x9c, 0x25, 0xc6, 0xdf, 0xdc, 0x1c, 0x79, 0xad, 0xa8, 0xb7, - 0xf5, 0x6c, 0xed, 0xcc, 0x89, 0xc0, 0x26, 0x08, 0x8f, 0x4e, 0xb4, 0xa0, - 0xcb, 0x11, 0xb1, 0xe7, 0x6c, 0x33, 0x72, 0x81, 0x39, 0xe8, 0x26, 0x07, - 0xd5, 0x9b, 0xcf, 0x9b, 0x82, 0xf9, 0x25, 0x25, 0x8e, 0x00, 0x7b, 0xf0, - 0x6a, 0xcb, 0xf0, 0xc6, 0xb3, 0xb3, 0xd4, 0x6b, 0x43, 0x7d, 0xf8, 0x4b, - 0x77, 0xfd, 0x66, 0xd4, 0x15, 0x56, 0x0c, 0x58, 0x06, 0x69, 0x53, 0xce, - 0xe3, 0xfa, 0x0b, 0x99, 0x7c, 0x41, 0xf1, 0x08, 0xb3, 0x44, 0x65, 0x27, - 0xdd, 0x2b, 0xcc, 0xf1, 0xe6, 0xb9, 0xc4, 0x8c, 0x20, 0xa1, 0x79, 0x79, - 0x6a, 0x91, 0xc1, 0x9c, 0x88, 0x50, 0xcf, 0x5b, 0x03, 0x13, 0x4e, 0x3d, - 0x62, 0xd4, 0x0b, 0x3e, 0x5b, 0xaa, 0x83, 0xfe, 0x6f, 0x7d, 0xc3, 0x49, - 0x00, 0x09, 0x9a, 0x87, 0xed, 0x7a, 0xc4, 0xd8, 0xe7, 0xd0, 0xf7, 0xd2, - 0x50, 0xdd, 0x3d, 0xf5, 0x59, 0x14, 0x52, 0x7a, 0xd6, 0x6f, 0x65, 0x7b, - 0x98, 0xf8, 0x8c, 0x89, 0x14, 0xfb, 0x1e, 0x61, 0xe7, 0x09, 0xa6, 0xe2, - 0xf8, 0x1f, 0x9c, 0x7e, 0x80, 0x4c, 0x9e, 0x28, 0xec, 0x00, 0x80, 0xf2, - 0x9f, 0xe5, 0x4c, 0x8c, 0xb5, 0x30, 0x70, 0x59, 0x06, 0x4a, 0xca, 0x0e, - 0x06, 0x0e, 0xa6, 0xfe, 0x06, 0x5e, 0x9a, 0xe4, 0x58, 0x99, 0x51, 0xdf, - 0xe6, 0x62, 0xc8, 0xb5, 0x88, 0xca, 0x4f, 0x7b, 0x39, 0x2f, 0xed, 0x9f, - 0x58, 0x3c, 0x54, 0x1f, 0xfc, 0x90, 0x55, 0x08, 0x9d, 0x5d, 0xd9, 0x5f, - 0x42, 0x5a, 0x91, 0xd1, 0xcb, 0x3c, 0x2e, 0xa9, 0xc2, 0x85, 0xe3, 0xa6, - 0xc8, 0x7a, 0x99, 0xc5, 0x08, 0x24, 0xf3, 0x22, 0x98, 0x8b, 0xb9, 0x33, - 0x7d, 0xc1, 0xe3, 0xba, 0xd0, 0x88, 0xcb, 0x7d, 0x5a, 0x63, 0xb7, 0xad, - 0x88, 0x10, 0x86, 0x4c, 0x77, 0x9b, 0xac, 0x61, 0xc1, 0xcf, 0xd3, 0x7c, - 0x4c, 0x19, 0xe5, 0x6a, 0xe5, 0x6e, 0x74, 0x1f, 0x40, 0xac, 0x9a, 0xbc, - 0x64, 0x8c, 0x61, 0x12, 0x30, 0x74, 0xde, 0x31, 0xbc, 0x40, 0x63, 0x02, - 0x98, 0x42, 0x17, 0xce, 0xb9, 0x93, 0x05, 0x41, 0x2b, 0x5d, 0x56, 0x7a, - 0x15, 0xd4, 0xbf, 0xc5, 0xb5, 0x72, 0x62, 0x07, 0xed, 0x92, 0x6a, 0xa0, - 0x6b, 0x48, 0x41, 0x47, 0x78, 0x3f, 0xf2, 0x67, 0x98, 0x65, 0x9b, 0xfc, - 0xf4, 0x00, 0x76, 0x64, 0xbe, 0x8a, 0xd1, 0x88, 0x98, 0xe0, 0x0c, 0xc5, - 0xc1, 0x28, 0x25, 0x24, 0x21, 0x0f, 0x47, 0x1b, 0x7f, 0x81, 0xca, 0x74, - 0x0f, 0x88, 0xe6, 0x83, 0xd3, 0x42, 0x22, 0xba, 0x8b, 0xd4, 0x22, 0x0c, - 0xa6, 0x7a, 0xdb, 0x36, 0x86, 0x4b, 0xe3, 0xa2, 0xde, 0x18, 0x8c, 0x4d, - 0x3c, 0xd7, 0x30, 0x55, 0x85, 0xb4, 0xde, 0x69, 0xa1, 0x65, 0x88, 0x72, - 0xe9, 0xfb, 0xd1, 0x12, 0x58, 0x9c, 0x02, 0x10, 0x26, 0xe7, 0x4b, 0x9e, - 0x31, 0x78, 0xbc, 0x15, 0xe7, 0xdc, 0xd8, 0x9e, 0xa2, 0xb5, 0x7f, 0x70, - 0x0a, 0x98, 0x88, 0x4c, 0xb7, 0x48, 0x76, 0x6e, 0x66, 0xe8, 0x09, 0xeb, - 0xda, 0x43, 0xda, 0x2d, 0x76, 0x9d, 0xdc, 0x61, 0x23, 0xcf, 0xd7, 0x00, - 0x8e, 0x2f, 0xc9, 0x98, 0x9a, 0x51, 0x51, 0x98, 0x1b, 0xa9, 0x45, 0x0b, - 0x9b, 0x08, 0xf3, 0xfb, 0x65, 0xaf, 0xa8, 0x86, 0x7a, 0xc9, 0x6c, 0x81, - 0xa2, 0x5f, 0x8d, 0x7a, 0xb9, 0xfe, 0x62, 0x01, 0xe8, 0x1a, 0x4c, 0x94, - 0xe8, 0xa1, 0x4a, 0x52, 0xfa, 0x1e, 0xff, 0xd7, 0xe5, 0xff, 0x8a, 0x84, - 0x24, 0x0d, 0x54, 0x7f, 0x9d, 0x5c, 0xdf, 0xf6, 0xa2, 0xc4, 0x64, 0xf7, - 0x75, 0xfa, 0x5a, 0xb3, 0xf4, 0xbb, 0xea, 0x0d, 0x3c, 0x32, 0xbe, 0x5c, - 0xc9, 0x9b, 0xb0, 0x29, 0x64, 0x7b, 0x11, 0xdc, 0xfc, 0x72, 0xfa, 0x95, - 0x67, 0xa5, 0xb9, 0x2f, 0xbc, 0xff, 0x73, 0xe6, 0x1e, 0xa6, 0xa6, 0x08, - 0x51, 0xb1, 0x1a, 0xb7, 0xda, 0x8f, 0xbe, 0x00, 0xd1, 0x69, 0x38, 0x20, - 0x52, 0x12, 0x3f, 0xdd, 0xde, 0x78, 0xb9, 0xb0, 0x90, 0xe7, 0x1d, 0x48, - 0x4d, 0xb9, 0x9c, 0x31, 0x82, 0x5b, 0x81, 0xd5, 0xe8, 0xef, 0xe9, 0xdd, - 0x1b, 0x83, 0x44, 0x1d, 0x59, 0x51, 0x5f, 0xeb, 0x70, 0xb1, 0x86, 0xe0, - 0x27, 0x08, 0xc6, 0xe2, 0x37, 0xd0, 0xea, 0x28, 0xd0, 0x28, 0xd8, 0x57, - 0x2e, 0x38, 0x2e, 0xa5, 0x3d, 0x73, 0x08, 0xac, 0x2d, 0xbb, 0x92, 0xf6, - 0x3c, 0xa7, 0x42, 0x8f, 0x2f, 0xbc, 0x3a, 0xd9, 0xc4, 0xc0, 0xf8, 0xb2, - 0xce, 0x93, 0x1a, 0xa4, 0x04, 0x6a, 0x91, 0xe4, 0xbf, 0x51, 0x16, 0xd2, - 0x39, 0xf3, 0x9d, 0x83, 0x17, 0xe6, 0x71, 0xd6, 0x52, 0x0a, 0x1e, 0x65, - 0xc7, 0x0b, 0x5a, 0xd3, 0x94, 0x91, 0xb8, 0x0a, 0xaf, 0x74, 0x37, 0xeb, - 0x44, 0xa4, 0x5a, 0x85, 0xae, 0x2f, 0x4a, 0x50, 0x27, 0x5f, 0x0e, 0x52, - 0x59, 0xac, 0xe8, 0xdd, 0x4b, 0x7a, 0xb9, 0x72, 0xcf, 0x41, 0x68, 0xda, - 0xf2, 0xe2, 0xc6, 0x3f, 0xfc, 0xa7, 0x45, 0xd4, 0x42, 0xe5, 0xe1, 0x38, - 0xbc, 0xe0, 0x7c, 0x1d, 0xad, 0x3e, 0xbf, 0xfc, 0x87, 0x21, 0x2f, 0x80, - 0xbb, 0x84, 0x2c, 0xb8, 0x75, 0x43, 0x4f, 0x29, 0x13, 0x1e, 0x2a, 0x45, - 0x42, 0x62, 0x35, 0x67, 0x47, 0x36, 0xf1, 0xe4, 0x32, 0xc6, 0x2b, 0x59, - 0x72, 0x52, 0x7f, 0xb4, 0x35, 0x71, 0x8f, 0xed, 0x1b, 0x80, 0xe9, 0x35, - 0xc1, 0xa5, 0xb1, 0xd6, 0xfe, 0x17, 0x7a, 0xcc, 0x91, 0x38, 0x09, 0xac, - 0xe3, 0xe7, 0x28, 0xa0, 0xef, 0x8a, 0xf2, 0x03, 0x0d, 0x76, 0x41, 0x24, - 0x40, 0x8e, 0x1d, 0x66, 0x5b, 0xea, 0x06, 0xd9, 0xef, 0xfa, 0xa6, 0x28, - 0x0a, 0xd5, 0x9c, 0xe1, 0xfb, 0xb0, 0x95, 0x48, 0x82, 0x62, 0xac, 0x11, - 0x1b, 0x56, 0x8d, 0xb6, 0xff, 0x13, 0xcc, 0xe7, 0x0d, 0x0c, 0x1f, 0xdb, - 0x1a, 0x0b, 0xf8, 0x88, 0xc0, 0x27, 0x23, 0xec, 0x05, 0x11, 0xbe, 0xae, - 0xfb, 0xed, 0x4f, 0xef, 0x21, 0xc6, 0xa1, 0x23, 0x6d, 0x2c, 0x81, 0xc7, - 0xe4, 0x64, 0x5e, 0x94, 0x9f, 0xc4, 0x76, 0xb8, 0x3a, 0x23, 0xda, 0xc5, - 0xa3, 0x20, 0x54, 0xa7, 0x80, 0xde, 0x06, 0xc5, 0x2b, 0x91, 0x2c, 0xa8, - 0x10, 0xb7, 0x84, 0x09, 0x32, 0xb3, 0x5d, 0x04, 0x0e, 0xe0, 0xcf, 0x13, - 0xb7, 0x3a, 0xbf, 0x8e, 0xdf, 0x5b, 0xd5, 0xbc, 0x3d, 0x60, 0x43, 0x24, - 0xca, 0x77, 0xbf, 0x38, 0x9f, 0x2a, 0x97, 0x60, 0xef, 0x81, 0x9a, 0xd0, - 0x5a, 0x11, 0x58, 0xce, 0xb3, 0xb9, 0x1c, 0xa8, 0xce, 0x4b, 0x7c, 0xa8, - 0xbf, 0x2a, 0x95, 0xca, 0x16, 0xc4, 0xc6, 0x7f, 0x73, 0x2b, 0x15, 0x4d, - 0x70, 0x7d, 0x9f, 0x82, 0x4f, 0x65, 0x2f, 0xf8, 0xe2, 0x22, 0x41, 0x17, - 0x23, 0xa3, 0x31, 0x6c, 0x59, 0x12, 0xf4, 0xf0, 0xf6, 0x3a, 0x25, 0xe9, - 0x74, 0x2e, 0xc8, 0x0b, 0x38, 0xdc, 0x4d, 0x0a, 0x30, 0x12, 0x52, 0x69, - 0x78, 0xc5, 0x0f, 0x91, 0x3e, 0x8c, 0xea, 0x37, 0x8d, 0x87, 0x15, 0x2c, - 0xa2, 0xe7, 0x5c, 0x2d, 0x6b, 0x12, 0x5e, 0xcb, 0x68, 0x47, 0x32, 0x89, - 0x00, 0xc0, 0xbd, 0xa8, 0x9c, 0x26, 0x96, 0xb7, 0x04, 0xae, 0xa0, 0x13, - 0xad, 0x2f, 0xd4, 0x02, 0x04, 0x58, 0xaf, 0xec, 0xa7, 0x3c, 0xda, 0x3e, - 0x42, 0x26, 0xe5, 0x13, 0x00, 0xa8, 0x96, 0xc5, 0xc4, 0x6f, 0xa9, 0x84, - 0x3c, 0xf3, 0x21, 0x6a, 0xd5, 0x08, 0xa4, 0x74, 0x42, 0x1b, 0xa3, 0x36, - 0x05, 0x1e, 0xfb, 0x72, 0x49, 0x94, 0x63, 0xce, 0xea, 0xdd, 0xb1, 0x26, - 0x0b, 0x77, 0x11, 0x54, 0x3a, 0x6a, 0x09, 0xe2, 0x95, 0x81, 0xbb, 0xa6, - 0x29, 0xb0, 0xe4, 0x9d, 0x54, 0xc0, 0x45, 0xf0, 0x07, 0x73, 0x50, 0xea, - 0x92, 0x75, 0x1c, 0x41, 0x3b, 0x1c, 0xe5, 0x67, 0x3d, 0x10, 0x65, 0xa7, - 0x1c, 0xfc, 0x3e, 0xa7, 0x97, 0x17, 0xb2, 0x5d, 0x48, 0x8e, 0xa1, 0xa8, - 0xb7, 0xcd, 0x1b, 0xd1, 0x39, 0x3a, 0x74, 0xa1, 0xdf, 0xc4, 0x62, 0x84, - 0xd9, 0x45, 0x20, 0x3a, 0x5f, 0x94, 0x7b, 0xbb, 0xba, 0x10, 0xc2, 0x6a, - 0xa7, 0x0f, 0x8e, 0x8f, 0xaf, 0x92, 0x7f, 0x94, 0x04, 0xc5, 0x2a, 0x8c, - 0x00, 0x15, 0x7c, 0x00, 0x76, 0x80, 0xf6, 0xd8, 0x13, 0x75, 0x36, 0x24, - 0xe7, 0x82, 0x55, 0xdf, 0xe6, 0xdd, 0xc7, 0xcf, 0xde, 0x13, 0x55, 0xb9, - 0x38, 0x28, 0x2a, 0x6d, 0xa1, 0x87, 0x03, 0xc2, 0xf0, 0x06, 0x4d, 0xb8, - 0x8e, 0x39, 0x8f, 0xb3, 0xa6, 0x6c, 0xe1, 0xe8, 0xde, 0xb6, 0x09, 0xfc, - 0xbf, 0x63, 0x05, 0x82, 0xc4, 0x40, 0x5c, 0xd8, 0x35, 0xf9, 0x8e, 0x82, - 0x3c, 0xcd, 0x89, 0x3f, 0x86, 0x1e, 0xcd, 0xe6, 0xe1, 0xa3, 0x29, 0xc0, - 0x0d, 0x41, 0x03, 0x83, 0x83, 0xdc, 0x10, 0xa2, 0x99, 0x9c, 0xeb, 0x71, - 0x2b, 0x53, 0x2d, 0x1f, 0xdb, 0x34, 0xaa, 0x1a, 0x52, 0xc7, 0x29, 0xdf, - 0x48, 0x39, 0x6c, 0x45, 0xb2, 0x8b, 0x0f, 0xf1, 0x2e, 0x28, 0x8e, 0x7d, - 0xfa, 0x2d, 0x62, 0xa1, 0x29, 0x46, 0xb1, 0xfa, 0x2e, 0x31, 0x9e, 0x7e, - 0xc5, 0x31, 0x69, 0xf2, 0x03, 0x4e, 0xef, 0x52, 0x08, 0x68, 0xfc, 0x16, - 0x8c, 0xa0, 0x5c, 0x60, 0x6b, 0x48, 0xc3, 0xf7, 0xee, 0xcf, 0x5a, 0x6a, - 0xef, 0xb4, 0xe4, 0xe1, 0xbe, 0x53, 0xe7, 0x9f, 0x06, 0xe3, 0x79, 0x82, - 0x5f, 0xe9, 0x5e, 0xc7, 0x0a, 0x20, 0xb8, 0xd2, 0x0f, 0x8d, 0x8d, 0x72, - 0xd0, 0x42, 0x4b, 0x3d, 0x06, 0xf7, 0x5e, 0xdb, 0x1c, 0x0b, 0x31, 0xa7, - 0xf2, 0xc9, 0x53, 0xf5, 0x05, 0x90, 0xb3, 0x7b, 0x38, 0xf4, 0xcb, 0x2e, - 0x32, 0x6b, 0xa8, 0x0d, 0x62, 0xc4, 0xbc, 0x88, 0x95, 0x3d, 0x75, 0xc6, - 0x6f, 0x0e, 0x00, 0x0c, 0xaf, 0xf0, 0xfe, 0x33, 0x98, 0x49, 0x18, 0x72, - 0x40, 0x26, 0x30, 0xb3, 0x3b, 0x79, 0x14, 0x1c, 0xdf, 0x21, 0x45, 0x8c, - 0x7f, 0x19, 0xe9, 0xa8, 0x1c, 0xd3, 0x3a, 0x8b, 0x6e, 0x43, 0xc0, 0x0a, - 0x32, 0x3e, 0xe2, 0xbd, 0x4c, 0x75, 0xe6, 0xd9, 0x7a, 0x18, 0x39, 0x15, - 0x02, 0xdd, 0xfe, 0xae, 0x77, 0x38, 0x46, 0xc0, 0x94, 0x48, 0x91, 0xb5, - 0x15, 0xff, 0x52, 0x28, 0x78, 0xf1, 0x5b, 0x19, 0x67, 0x61, 0x6c, 0xcb, - 0xed, 0x8d, 0xba, 0x36, 0xed, 0x85, 0x12, 0xb3, 0x22, 0x31, 0x7a, 0x62, - 0x73, 0xe1, 0xf1, 0xb6, 0xab, 0x86, 0x16, 0x12, 0x75, 0xee, 0x10, 0xe4, - 0x60, 0xcf, 0x33, 0xe6, 0xad, 0x57, 0x68, 0x85, 0x07, 0xfa, 0x65, 0xf2, - 0xa2, 0xc6, 0x9a, 0xcf, 0x33, 0x6e, 0x7d, 0x39, 0xd3, 0xc3, 0x65, 0x25, - 0x20, 0xa7, 0xe4, 0x21, 0x8d, 0x8d, 0xb9, 0x7c, 0x03, 0xab, 0xc5, 0x2d, - 0xd7, 0x1f, 0x4a, 0xa3, 0xbc, 0x92, 0x74, 0xc6, 0x23, 0xe7, 0x7a, 0xd9, - 0xe4, 0xfc, 0x4d, 0xfb, 0x3b, 0x92, 0x09, 0x69, 0x95, 0xa7, 0x8f, 0x0d, - 0x53, 0xd9, 0x33, 0xb5, 0x09, 0x2b, 0x1f, 0x9c, 0x1a, 0x9b, 0xd4, 0x73, - 0x5a, 0xe6, 0xfe, 0xd9, 0x7a, 0x9d, 0xe1, 0xa5, 0x87, 0x14, 0x35, 0xcb, - 0xd7, 0xea, 0x0d, 0x14, 0x95, 0xd3, 0xc2, 0x06, 0x2b, 0xa6, 0xf9, 0x57, - 0x6c, 0x1d, 0x55, 0x1d, 0x7e, 0x7c, 0xc2, 0xf9, 0xd8, 0x70, 0x52, 0x33, - 0x23, 0xf1, 0x6a, 0xf1, 0x3e, 0x70, 0x25, 0x50, 0xcc, 0xc8, 0xd7, 0x25, - 0x54, 0x2f, 0x5b, 0x40, 0xe5, 0x58, 0xe5, 0x12, 0x45, 0x58, 0x53, 0xef, - 0x67, 0x01, 0xfb, 0x10, 0x9f, 0x76, 0x4c, 0xac, 0x8c, 0x52, 0xda, 0xfc, - 0xa2, 0x2f, 0x29, 0xc4, 0x28, 0xaf, 0x69, 0x5d, 0xe5, 0xdb, 0x41, 0x90, - 0xb6, 0x36, 0xb9, 0x5e, 0x25, 0x24, 0xcd, 0x76, 0x7b, 0x62, 0xa7, 0xfa, - 0x9e, 0xef, 0xf9, 0x01, 0xbe, 0x5d, 0x13, 0xb5, 0x19, 0x93, 0x40, 0x5f, - 0xa8, 0x77, 0xa3, 0x40, 0x77, 0x44, 0xdc, 0x97, 0x70, 0x35, 0x3d, 0x28, - 0x13, 0xf4, 0xda, 0xc9, 0xa9, 0x18, 0x3c, 0xa1, 0x57, 0x4f, 0x3c, 0x85, - 0x7e, 0x17, 0x9d, 0xf2, 0xf2, 0xaf, 0x21, 0xd5, 0xb6, 0x26, 0x4e, 0xc9, - 0x6b, 0xcf, 0xa3, 0xe8, 0x3a, 0x92, 0x61, 0xdb, 0x3b, 0x7f, 0x97, 0xd6, - 0x9b, 0xc2, 0x8f, 0x8a, 0x70, 0xfa, 0xaf, 0x04, 0x72, 0xa6, 0x02, 0x35, - 0x91, 0xb0, 0x81, 0x66, 0xeb, 0xd8, 0x62, 0x84, 0x07, 0x7b, 0x1f, 0x79, - 0x7c, 0x4e, 0x27, 0x7b, 0x81, 0x34, 0x99, 0xab, 0xe8, 0xc8, 0xd3, 0x57, - 0x0c, 0x8f, 0x43, 0x0d, 0xc2, 0x7f, 0xf2, 0xe6, 0x0d, 0x9c, 0x2f, 0xae, - 0xeb, 0xc0, 0x4d, 0x03, 0x6e, 0x0b, 0x52, 0x94, 0xa0, 0x52, 0xc6, 0x49, - 0xb1, 0x9b, 0xce, 0x5b, 0x6a, 0x8c, 0xcd, 0x37, 0x93, 0x49, 0xce, 0x82, - 0x6d, 0x0c, 0x5a, 0xbd, 0x1e, 0x92, 0xd5, 0xd8, 0x65, 0xfd, 0x50, 0x70, - 0x6f, 0x4d, 0x37, 0xac, 0xbc, 0xae, 0x82, 0xe2, 0x4a, 0x5f, 0x25, 0x88, - 0x9f, 0x78, 0xf1, 0x09, 0x03, 0x9f, 0x17, 0xca, 0x2a, 0xb4, 0xa6, 0xbb, - 0x19, 0xec, 0xcc, 0xbb, 0xe5, 0xbc, 0xab, 0xc6, 0x44, 0xed, 0x05, 0x58, - 0xd6, 0x11, 0xb9, 0x15, 0xad, 0xf7, 0x09, 0x49, 0x77, 0xb6, 0x89, 0x6f, - 0x12, 0x94, 0xc8, 0x90, 0xdc, 0x92, 0x04, 0x65, 0x44, 0x52, 0x9e, 0x99, - 0xc7, 0xf4, 0x5e, 0x16, 0x47, 0x41, 0xa8, 0xd3, 0x8b, 0x81, 0x0d, 0xde, - 0x90, 0x69, 0xeb, 0xa2, 0xc7, 0x12, 0x42, 0x17, 0x1b, 0x1e, 0x2b, 0x47, - 0x42, 0xaf, 0x96, 0x1f, 0x99, 0x90, 0x5c, 0x19, 0xe9, 0x91, 0x20, 0x62, - 0x5a, 0x42, 0x3c, 0x3a, 0x4e, 0xe5, 0x21, 0x8a, 0xe1, 0x7f, 0x4d, 0x35, - 0x5b, 0x3f, 0xb9, 0x7b, 0x78, 0x83, 0x0a, 0x9d, 0x78, 0x93, 0x0d, 0x08, - 0xcc, 0x5b, 0x5d, 0x02, 0x12, 0x44, 0x10, 0x1a, 0x67, 0x1b, 0xa3, 0xec, - 0x74, 0xae, 0xfc, 0x3e, 0x88, 0xac, 0x93, 0x43, 0x8b, 0x54, 0xea, 0x93, - 0x4c, 0x85, 0x12, 0xaa, 0x76, 0xe0, 0x48, 0x7c, 0x5d, 0x00, 0x20, 0x4e, - 0x8f, 0xa0, 0x07, 0x36, 0x1d, 0x64, 0x51, 0x14, 0xed, 0x07, 0x7b, 0x42, - 0x26, 0xc2, 0xfa, 0x5f, 0xab, 0xc7, 0xaf, 0xec, 0x73, 0x1a, 0x96, 0xb5, - 0x4c, 0x2a, 0xa4, 0x8d, 0xe0, 0x3f, 0x04, 0x51, 0xdb, 0x65, 0xbf, 0x93, - 0x23, 0x8f, 0x6b, 0x69, 0x5c, 0xd3, 0xe3, 0xbc, 0x57, 0xc6, 0x1c, 0x6c, - 0xc2, 0x53, 0x11, 0x19, 0x08, 0x03, 0x58, 0xe1, 0x44, 0xb5, 0x8d, 0x11, - 0x49, 0xa3, 0x34, 0xac, 0x2a, 0x72, 0x62, 0xda, 0xab, 0x20, 0x35, 0x9d, - 0x3f, 0x5f, 0xc8, 0xd6, 0x79, 0x4f, 0xac, 0x1b, 0xcc, 0x80, 0xb6, 0x50, - 0x48, 0x84, 0x6a, 0xaa, 0xd3, 0x81, 0x04, 0x28, 0xe2, 0x5c, 0x91, 0x25, - 0x97, 0xb7, 0x4e, 0x2c, 0x4b, 0xa0, 0xac, 0x4e, 0x0c, 0x2a, 0x07, 0x9e, - 0x9a, 0x06, 0xdd, 0xc2, 0xfd, 0x0b, 0x85, 0x0a, 0x64, 0x33, 0x34, 0x6b, - 0x9c, 0x52, 0x99, 0x2d, 0xf2, 0xd2, 0x4d, 0xbe, 0x8c, 0xff, 0x40, 0xc2, - 0xbd, 0x16, 0x89, 0x7d, 0x30, 0xe1, 0x52, 0x6d, 0x02, 0x67, 0x1b, 0x4c, - 0xd2, 0xaa, 0xf7, 0xb9, 0x93, 0xcf, 0xf4, 0xb9, 0x65, 0x2e, 0x10, 0x4f, - 0x02, 0xbd, 0xbd, 0x17, 0xda, 0xb5, 0x4b, 0xf7, 0x54, 0x1f, 0x29, 0x1a, - 0xfd, 0xfa, 0xfd, 0xc5, 0x70, 0x34, 0x6b, 0xce, 0x1b, 0x0c, 0x19, 0x2b, - 0x20, 0x28, 0xe2, 0x9b, 0xc0, 0xd6, 0x36, 0x22, 0xd3, 0x9f, 0x8e, 0xc1, - 0x46, 0xcd, 0x68, 0x00, 0xd9, 0x6a, 0x4c, 0xc5, 0x1a, 0x7d, 0xb5, 0x2a, - 0xb7, 0xde, 0x19, 0x58, 0x04, 0x55, 0x43, 0x53, 0x91, 0xed, 0x83, 0xec, - 0x98, 0xf0, 0x89, 0x4b, 0xa1, 0xfc, 0xc1, 0xea, 0xda, 0xc4, 0xeb, 0x57, - 0xae, 0x2a, 0xcb, 0x8c, 0x75, 0x58, 0xbc, 0x5a, 0x81, 0x95, 0x10, 0x74, - 0xfb, 0xd5, 0x35, 0xb5, 0x3e, 0xe1, 0x74, 0x4c, 0x6b, 0x10, 0x26, 0x02, - 0xea, 0xa3, 0xfe, 0xc7, 0xd1, 0x75, 0xa4, 0xf5, 0xce, 0x02, 0x5e, 0x2f, - 0x8d, 0xf9, 0xc0, 0xc8, 0xd3, 0xa9, 0xa9, 0xc3, 0xd9, 0x32, 0x08, 0x95, - 0x24, 0xe9, 0x9f, 0x69, 0x71, 0xa5, 0xbf, 0x97, 0x47, 0x1c, 0x4b, 0x97, - 0x29, 0xbe, 0x30, 0x31, 0xe2, 0xe8, 0x78, 0x55, 0x73, 0xdc, 0x0b, 0x15, - 0x86, 0x47, 0xc9, 0x31, 0xce, 0xf9, 0x31, 0xa8, 0xe6, 0x32, 0x53, 0x2e, - 0x93, 0xc7, 0x6c, 0xfc, 0xa7, 0x49, 0x81, 0x09, 0x6b, 0x91, 0x61, 0x24, - 0x7d, 0x88, 0x84, 0x44, 0x56, 0x43, 0x6c, 0xf4, 0x51, 0x01, 0x8e, 0x28, - 0x5d, 0xd4, 0xc5, 0x37, 0x5f, 0xf6, 0x8a, 0x68, 0xb8, 0x58, 0xad, 0x39, - 0x36, 0x20, 0x6d, 0x74, 0x8a, 0xbe, 0xcc, 0x66, 0x02, 0xaa, 0x72, 0x55, - 0xea, 0xa6, 0xd5, 0x5b, 0x65, 0x89, 0x03, 0x7a, 0x34, 0x71, 0x39, 0x7c, - 0x37, 0x0f, 0x3f, 0x5a, 0x49, 0xf2, 0x6d, 0xf8, 0x6e, 0x9e, 0xbe, 0x60, - 0x7d, 0x80, 0xa5, 0xb4, 0xeb, 0x8c, 0x40, 0x9e, 0x06, 0xc2, 0x0d, 0x56, - 0x01, 0xcc, 0x0e, 0xc2, 0x66, 0xe9, 0xf8, 0x43, 0xdd, 0xbe, 0x94, 0x37, - 0x63, 0x28, 0x3f, 0x9d, 0xd1, 0x06, 0x7f, 0x1d, 0xdc, 0x6f, 0x5b, 0xd8, - 0xb1, 0x72, 0x30, 0x4a, 0xa4, 0x11, 0x1f, 0xc4, 0x5a, 0x47, 0xe7, 0xcd, - 0x8b, 0xc2, 0x8e, 0x01, 0x65, 0x0d, 0xe7, 0x01, 0x21, 0x2a, 0x74, 0x62, - 0xe5, 0xce, 0x64, 0x3a, 0x23, 0x96, 0x4b, 0x75, 0x8a, 0xbd, 0xdb, 0xa2, - 0x56, 0xc6, 0x08, 0x52, 0xad, 0x25, 0x3d, 0x3e, 0x32, 0x7b, 0x47, 0x05, - 0x11, 0x38, 0xf7, 0x05, 0xaa, 0x48, 0xd7, 0x96, 0xdf, 0x3e, 0x0e, 0x57, - 0xbd, 0x9b, 0x75, 0x74, 0x18, 0x4e, 0xaf, 0xfc, 0x74, 0xf0, 0xef, 0xd8, - 0x63, 0xb7, 0xa3, 0x19, 0x1c, 0xbd, 0xbb, 0xe0, 0xc5, 0xe0, 0xb0, 0x69, - 0x6f, 0xc8, 0x05, 0x20, 0x4e, 0x5d, 0xef, 0x9b, 0x51, 0x64, 0x43, 0xf9, - 0x28, 0x8c, 0xa1, 0x7e, 0x0e, 0x4b, 0x0f, 0xed, 0x63, 0x62, 0xbc, 0x78, - 0x35, 0x4d, 0xd0, 0x21, 0x39, 0x33, 0x93, 0xa7, 0xb9, 0x04, 0xb5, 0xed, - 0xde, 0x2a, 0x0b, 0xc8, 0xa5, 0x9f, 0x82, 0x5d, 0x37, 0x68, 0x25, 0x51, - 0x4a, 0x54, 0x99, 0x54, 0x50, 0xcd, 0xa3, 0x6c, 0xd1, 0xe9, 0x83, 0x26, - 0x67, 0x0b, 0xb0, 0x78, 0x34, 0x62, 0x87, 0x3a, 0x4c, 0xce, 0x71, 0xe6, - 0x20, 0xd2, 0x8b, 0x0e, 0xa8, 0x42, 0xe5, 0x98, 0x9d, 0xd5, 0x0e, 0x62, - 0xe8, 0x40, 0x66, 0x35, 0xf2, 0x6d, 0x80, 0xc6, 0x56, 0xa4, 0x78, 0x20, - 0xf5, 0x12, 0x9f, 0x3e, 0xa6, 0x17, 0x4a, 0x05, 0xbd, 0xa6, 0x4b, 0xa4, - 0x89, 0x89, 0xcf, 0x3b, 0xdb, 0xc8, 0x42, 0xfc, 0xbb, 0x6d, 0x34, 0x89, - 0x78, 0x96, 0x54, 0x48, 0xd0, 0x8b, 0x04, 0x86, 0xfa, 0x32, 0x34, 0xc6, - 0x9e, 0xcb, 0x5a, 0x9a, 0xc6, 0xc4, 0xb0, 0xfa, 0xf7, 0x30, 0xec, 0xdf, - 0xb3, 0x42, 0x0c, 0x0b, 0x41, 0x09, 0x0d, 0xe9, 0x09, 0xda, 0x2a, 0xf3, - 0x8a, 0x29, 0xab, 0xcd, 0x10, 0x38, 0x39, 0x79, 0xd4, 0x20, 0xc4, 0xa7, - 0xbb, 0xb6, 0x73, 0x84, 0x2e, 0x7a, 0x0b, 0x3d, 0xb8, 0xa8, 0xde, 0xcb, - 0x7c, 0x92, 0x68, 0xbe, 0x81, 0x16, 0xdc, 0x0e, 0x55, 0xbb, 0x64, 0x19, - 0xe2, 0x7c, 0xde, 0x01, 0x15, 0x23, 0x2d, 0x97, 0x5f, 0x98, 0x20, 0x18, - 0x9d, 0x61, 0x6e, 0x3f, 0x03, 0x01, 0x14, 0x2a, 0x96, 0xd8, 0x2a, 0x13, - 0xfa, 0xad, 0x23, 0x60, 0xe8, 0x67, 0xfd, 0x48, 0x68, 0xe7, 0x0b, 0x60, - 0x77, 0x60, 0x7d, 0x35, 0x76, 0xb9, 0xd0, 0xd9, 0xcd, 0xaa, 0x72, 0x2e, - 0x6c, 0x9c, 0xcd, 0xd6, 0xba, 0x04, 0x1c, 0x05, 0x80, 0x80, 0x39, 0x6a, - 0xa3, 0xd0, 0x17, 0x3d, 0x52, 0x57, 0x2a, 0x5d, 0x6f, 0xae, 0x90, 0x8d, - 0xea, 0xaf, 0xc2, 0x60, 0x0f, 0xb7, 0x68, 0x5f, 0x26, 0x59, 0x3a, 0xc4, - 0xdd, 0x20, 0x05, 0xe4, 0xab, 0x43, 0xb3, 0x26, 0x9d, 0x59, 0x12, 0x6b, - 0x7e, 0x87, 0x69, 0x6d, 0xa5, 0x96, 0xf8, 0xd8, 0xc7, 0x00, 0xdd, 0x77, - 0xf6, 0x14, 0x33, 0x6c, 0xdf, 0xc4, 0x08, 0xb5, 0xb9, 0x87, 0xb6, 0xa0, - 0x6c, 0xe9, 0xe8, 0x28, 0x8b, 0x3b, 0x5a, 0xaf, 0x8e, 0xc5, 0xe0, 0x3a, - 0x3b, 0xe2, 0x90, 0x0e, 0xb2, 0x15, 0x2a, 0x56, 0xa3, 0x35, 0xa0, 0xf4, - 0x77, 0x61, 0xfc, 0x2d, 0xe8, 0xae, 0x62, 0x14, 0xa4, 0xfa, 0x2e, 0x79, - 0x38, 0xd1, 0x70, 0x9d, 0x4a, 0x0d, 0xed, 0x37, 0xd5, 0x60, 0x6c, 0x17, - 0xa3, 0xc7, 0x4c, 0x23, 0xfd, 0xa2, 0xd1, 0x52, 0x83, 0xee, 0xde, 0x81, - 0x4b, 0x11, 0xdb, 0x56, 0x73, 0x47, 0x1d, 0xa2, 0xa5, 0x39, 0xcb, 0x57, - 0x80, 0x37, 0xe0, 0x74, 0xae, 0x49, 0xa0, 0xdd, 0x43, 0x8b, 0xf2, 0x11, - 0x89, 0xaa, 0x48, 0x43, 0x79, 0x07, 0x4c, 0x6a, 0x22, 0x6e, 0xe1, 0xd4, - 0x97, 0x5c, 0x0e, 0xa2, 0xd3, 0x86, 0x04, 0x0f, 0x17, 0xbc, 0x56, 0xa7, - 0x0b, 0x16, 0xe8, 0x9d, 0x92, 0xc9, 0x51, 0xfd, 0x26, 0x04, 0x15, 0xb5, - 0x39, 0x06, 0x00, 0xa4, 0x0e, 0x4d, 0x1d, 0xdc, 0x84, 0x38, 0x41, 0x91, - 0x46, 0x64, 0xee, 0xeb, 0x00, 0xfb, 0x88, 0xe0, 0x64, 0x41, 0x97, 0x78, - 0x5e, 0xa2, 0x15, 0xa8, 0x51, 0x42, 0xbd, 0x95, 0xbf, 0x3c, 0x1b, 0x82, - 0x3d, 0xad, 0xc5, 0x9e, 0x5c, 0x64, 0xa7, 0x1f, 0xd0, 0x7b, 0x4d, 0xc7, - 0x36, 0x15, 0x4c, 0xa9, 0x04, 0x29, 0x2b, 0x7e, 0x51, 0x2a, 0x20, 0xbe, - 0x41, 0x94, 0x0f, 0x58, 0x94, 0xf1, 0x6b, 0x2e, 0x63, 0x2b, 0xc8, 0x26, - 0x4c, 0x1e, 0xf3, 0x33, 0x13, 0x14, 0x58, 0x7d, 0x1a, 0x49, 0x56, 0xbf, - 0x8e, 0x69, 0xda, 0x9b, 0x6e, 0x94, 0xb9, 0x2a, 0x91, 0x8e, 0x23, 0xaf, - 0x58, 0x5a, 0x28, 0x9d, 0x94, 0xfc, 0x39, 0xc7, 0x9d, 0xbe, 0x55, 0x28, - 0x6e, 0x05, 0xb9, 0xf4, 0xeb, 0x75, 0xe1, 0xd0, 0xdb, 0xe7, 0xd9, 0x02, - 0xcb, 0x84, 0xc7, 0xa9, 0xa1, 0xd4, 0x20, 0x2d, 0x01, 0x27, 0x38, 0xd5, - 0x21, 0x0a, 0x88, 0xd8, 0x3b, 0x4b, 0xd4, 0xa3, 0xf8, 0x42, 0x20, 0x59, - 0xa1, 0x13, 0x3f, 0x12, 0x1c, 0x05, 0xf2, 0xa2, 0xda, 0x25, 0x75, 0x6d, - 0x2c, 0x50, 0x80, 0x64, 0xff, 0x65, 0xdb, 0x40, 0x8c, 0xc6, 0x68, 0xd7, - 0x38, 0x15, 0x6f, 0x40, 0xa3, 0x11, 0xe0, 0x02, 0x51, 0x3e, 0x26, 0x12, - 0xdd, 0xcb, 0xe4, 0x28, 0xd6, 0xbf, 0xcf, 0xb4, 0xe4, 0x90, 0xe1, 0xf6, - 0xc7, 0xf0, 0xf2, 0x7a, 0x0e, 0x2f, 0xa4, 0xd2, 0x1b, 0xca, 0x4e, 0x06, - 0xcb, 0x16, 0xda, 0x48, 0xfd, 0x81, 0x78, 0x81, 0x7e, 0xc5, 0x96, 0x85, - 0x43, 0x04, 0x23, 0xca, 0x16, 0x76, 0x74, 0xe1, 0x87, 0x13, 0x8b, 0xa7, - 0x0b, 0x48, 0x9e, 0x70, 0xf8, 0xf7, 0xda, 0x96, 0x70, 0xdc, 0xaa, 0xfd, - 0x1a, 0xe2, 0xa4, 0xcd, 0x8f, 0xfd, 0x30, 0xdf, 0x6e, 0xc3, 0x9d, 0x5a, - 0x3f, 0x7f, 0xc8, 0x96, 0x6f, 0x30, 0x19, 0xcb, 0xc1, 0x43, 0xdb, 0x44, - 0xa0, 0xab, 0x9b, 0xd9, 0xd1, 0x1b, 0x5f, 0xf6, 0x38, 0x6b, 0xf5, 0x3b, - 0xf0, 0xe8, 0x96, 0x58, 0x00, 0xa6, 0x74, 0xfb, 0x6c, 0xee, 0xb1, 0x76, - 0xbf, 0x3b, 0xdf, 0xaa, 0xc0, 0x96, 0xea, 0x2e, 0x73, 0xb6, 0x61, 0x7a, - 0xb2, 0x9b, 0xd7, 0x49, 0xee, 0x4c, 0x2d, 0x46, 0x7a, 0xba, 0xdf, 0x7a, - 0x28, 0xd7, 0xaf, 0xaf, 0x49, 0xc1, 0x80, 0x76, 0x35, 0xff, 0xf6, 0x16, - 0xed, 0x6c, 0x4e, 0xea, 0xad, 0x87, 0x08, 0xa7, 0x5d, 0x52, 0xb4, 0xf2, - 0x82, 0x7b, 0x52, 0xae, 0x53, 0x88, 0xee, 0x05, 0x34, 0xb7, 0x54, 0xa5, - 0x6f, 0xc1, 0xa4, 0xa3, 0x0c, 0x2c, 0x79, 0x01, 0x8e, 0x94, 0x5b, 0x8a, - 0xe4, 0x2e, 0xd0, 0x72, 0x1f, 0x48, 0x3e, 0xcd, 0x5a, 0xba, 0x30, 0x5e, - 0x0d, 0xb3, 0xba, 0x91, 0x6a, 0xb8, 0x4d, 0x8e, 0x2f, 0x7c, 0x8c, 0xa7, - 0x17, 0xe1, 0x9d, 0x8d, 0x0a, 0x22, 0x24, 0x8d, 0x90, 0xfd, 0xc8, 0xa3, - 0x7b, 0x53, 0x9c, 0x32, 0x6f, 0x9f, 0x2b, 0xe5, 0x6a, 0x0a, 0x90, 0xc8, - 0x37, 0x6a, 0xf3, 0x6a, 0x60, 0xd9, 0xc2, 0xc4, 0x96, 0x9d, 0x53, 0xa6, - 0x95, 0xf4, 0xa7, 0xab, 0x30, 0x39, 0x0a, 0xf7, 0x0b, 0x36, 0xe2, 0x55, - 0x2f, 0x8f, 0xc7, 0xd1, 0xc8, 0x47, 0x44, 0x98, 0x20, 0xf6, 0x16, 0x50, - 0x66, 0x83, 0x91, 0x9c, 0x1a, 0x65, 0x7e, 0x5b, 0x81, 0xde, 0xca, 0x13, - 0xfa, 0x42, 0x47, 0x57, 0xeb, 0x9a, 0x84, 0xd7, 0x50, 0xaf, 0xa0, 0xae, - 0x0f, 0x5d, 0xe7, 0xcc, 0x65, 0xa0, 0x93, 0x45, 0x1d, 0x2e, 0x72, 0x3b, - 0x41, 0xf6, 0xd0, 0x3d, 0xf4, 0xaa, 0x82, 0x37, 0x81, 0xd1, 0xf7, 0x59, - 0x0f, 0x9d, 0x6d, 0xb4, 0x3d, 0xd4, 0x53, 0x60, 0xbf, 0x11, 0x12, 0x33, - 0xaf, 0xd5, 0x40, 0x09, 0xe3, 0x41, 0xac, 0x28, 0x31, 0x63, 0xf5, 0x93, - 0x43, 0xc7, 0x8d, 0x28, 0xba, 0x1a, 0x6a, 0x35, 0x46, 0x1b, 0x99, 0xd7, - 0x2b, 0x74, 0x0a, 0xf4, 0x89, 0x33, 0x96, 0xdc, 0x60, 0x6b, 0xd5, 0xa7, - 0x68, 0x5f, 0xbf, 0x1c, 0xbf, 0x5a, 0xe2, 0x96, 0x07, 0xbf, 0x3c, 0x0a, - 0xc2, 0x3f, 0x27, 0x89, 0x5e, 0x9a, 0x52, 0x27, 0x4b, 0xe6, 0xca, 0xcf, - 0x4d, 0x15, 0x53, 0x64, 0xc6, 0x7f, 0x89, 0xd1, 0x3e, 0xc0, 0x6b, 0x9e, - 0xd2, 0x30, 0xdc, 0xdf, 0x6c, 0xf5, 0x03, 0xac, 0xcb, 0x02, 0x4c, 0x79, - 0xf1, 0xd4, 0x9b, 0xd6, 0xe1, 0x86, 0x56, 0xc8, 0x36, 0xaf, 0x02, 0xd4, - 0xd4, 0x8c, 0xb9, 0xd9, 0xea, 0x50, 0x75, 0x97, 0xd7, 0x01, 0x3f, 0x7d, - 0x1a, 0x6b, 0x6a, 0x4b, 0x13, 0xfc, 0xce, 0x22, 0xd0, 0x1f, 0x0b, 0x32, - 0xbe, 0x7f, 0x01, 0x01, 0xfb, 0x7e, 0xcd, 0xb1, 0x26, 0x2a, 0x47, 0x74, - 0xaf, 0xa8, 0x1d, 0xe2, 0xf3, 0xcf, 0xb2, 0x23, 0x69, 0xeb, 0x9e, 0xfd, - 0xcf, 0xdf, 0x5d, 0x7d, 0xd2, 0x65, 0x2c, 0xf4, 0x38, 0xb4, 0x07, 0x38, - 0x67, 0x0c, 0x6b, 0x04, 0x77, 0xa4, 0x77, 0x8d, 0x94, 0x4c, 0xf2, 0x55, - 0x77, 0x95, 0x4e, 0xc2, 0x4e, 0xb7, 0x7a, 0xf9, 0xc1, 0x8b, 0x8b, 0x2a, - 0xc9, 0x71, 0xd9, 0x69, 0xf4, 0x35, 0x67, 0x86, 0xb4, 0xbc, 0x2d, 0x91, - 0x3e, 0x3c, 0xba, 0x73, 0x8a, 0xba, 0x37, 0xc2, 0x39, 0xaa, 0x4d, 0x5c, - 0x8b, 0x3c, 0x8d, 0xd1, 0x64, 0x70, 0x6c, 0xf1, 0x9c, 0x25, 0x26, 0xf4, - 0xd1, 0xdb, 0x33, 0x9c, 0x1e, 0xc5, 0xb0, 0x21, 0xf9, 0xaf, 0x77, 0x5a, - 0xdc, 0x7b, 0xec, 0xcd, 0xc4, 0x78, 0x12, 0xa0, 0x2a, 0xab, 0x2a, 0xaf, - 0xbe, 0xd7, 0x00, 0xcf, 0x22, 0x2c, 0xd5, 0x0b, 0xce, 0xc6, 0x6e, 0xc3, - 0x82, 0xbf, 0x1d, 0xf0, 0x6e, 0x61, 0x96, 0xbb, 0x0a, 0xdc, 0x1e, 0x86, - 0x8c, 0x37, 0xb8, 0xa5, 0x10, 0x75, 0xfe, 0xb4, 0x7e, 0x01, 0x4d, 0x20, - 0x4d, 0xa4, 0x64, 0x1d, 0x4b, 0x56, 0x89, 0x7c, 0x27, 0xb0, 0x41, 0x54, - 0xab, 0x5e, 0xcb, 0x36, 0x56, 0xac, 0xbb, 0xfb, 0x53, 0x14, 0xad, 0x5f, - 0xeb, 0xaf, 0x19, 0xe7, 0x72, 0xfe, 0x90, 0xb3, 0x29, 0x66, 0x7e, 0x90, - 0xab, 0x06, 0x3a, 0x73, 0x37, 0x6a, 0xd1, 0x7e, 0xc9, 0x33, 0xbd, 0x25, - 0x81, 0xf6, 0x30, 0x70, 0x66, 0x5f, 0x08, 0xa0, 0x11, 0xd5, 0x0a, 0xa1, - 0xc4, 0xa1, 0xef, 0x94, 0xaa, 0x45, 0xf3, 0x12, 0xa6, 0x1b, 0x66, 0xca, - 0x34, 0x3e, 0xc8, 0x23, 0xbd, 0x7d, 0x70, 0x96, 0x81, 0xaa, 0x05, 0x22, - 0xaa, 0x2e, 0xe4, 0x1c, 0xd4, 0x75, 0xdd, 0xcc, 0x57, 0x81, 0xac, 0x68, - 0xb0, 0x68, 0xbe, 0x06, 0x72, 0x4a, 0x11, 0x0b, 0xf4, 0xa7, 0x18, 0x7d, - 0x9a, 0xf7, 0xe1, 0x4b, 0x1c, 0xc0, 0x77, 0x3d, 0x25, 0x54, 0xe6, 0x40, - 0xd6, 0x09, 0x12, 0x77, 0x57, 0xc6, 0xa7, 0x89, 0x79, 0x4c, 0xf6, 0x7e, - 0xe3, 0xe6, 0x86, 0xf9, 0x1d, 0xf6, 0x0d, 0xa4, 0xb8, 0x03, 0x37, 0x47, - 0x84, 0xfa, 0x9f, 0xd6, 0x62, 0x19, 0xc3, 0x27, 0xa3, 0x52, 0xfd, 0x06, - 0x39, 0x89, 0x81, 0x78, 0x94, 0x1d, 0x9e, 0x01, 0xd0, 0xed, 0xea, 0x22, - 0x11, 0x94, 0x71, 0x97, 0x81, 0x16, 0x16, 0xaf, 0xe5, 0x29, 0x9a, 0xb6, - 0xaa, 0x06, 0xf6, 0xff, 0x9c, 0x7c, 0x6d, 0xa7, 0xf0, 0xfc, 0x28, 0xac, - 0xef, 0x60, 0x36, 0x6c, 0x50, 0x8c, 0x78, 0x85, 0xb9, 0xb0, 0x76, 0x00, - 0xdd, 0xbd, 0xbd, 0xab, 0x02, 0xf2, 0x7a, 0x19, 0x54, 0x19, 0xde, 0xad, - 0x93, 0x69, 0x4b, 0x4b, 0x53, 0xbe, 0x27, 0x60, 0xc2, 0x28, 0xf4, 0x5b, - 0xbf, 0xb5, 0xad, 0x61, 0xc9, 0xf6, 0x71, 0x4b, 0x09, 0x00, 0xfc, 0xd6, - 0xff, 0xe2, 0xea, 0xea, 0x91, 0x35, 0xa8, 0x85, 0xa1, 0x03, 0xcb, 0x4e, - 0x94, 0x8b, 0x6a, 0x1b, 0x15, 0xbe, 0x5d, 0x24, 0xc3, 0x10, 0x8b, 0x0c, - 0x03, 0x69, 0xe0, 0xdd, 0x33, 0x08, 0xb9, 0x72, 0xa8, 0x05, 0xd3, 0xa1, - 0x48, 0x48, 0xe4, 0x5a, 0x74, 0xce, 0x22, 0x49, 0xef, 0x2b, 0xe4, 0x14, - 0xba, 0x22, 0x94, 0xcd, 0x42, 0xe2, 0x64, 0xe8, 0xce, 0xf8, 0x81, 0x4b, - 0xd4, 0xe8, 0x7a, 0xec, 0x63, 0xd3, 0x12, 0xa8, 0x11, 0x9f, 0xd4, 0x30, - 0x65, 0x80, 0x1d, 0x00, 0x26, 0x2b, 0xa2, 0x97, 0x90, 0x65, 0xfa, 0xe9, - 0x81, 0xa1, 0xdc, 0xc7, 0xbc, 0xdc, 0x7c, 0xee, 0x52, 0xae, 0x2a, 0x69, - 0xaf, 0x81, 0xf9, 0xed, 0x04, 0x37, 0xbc, 0x41, 0xda, 0x3a, 0x3d, 0xdb, - 0x21, 0x22, 0xe7, 0x8e, 0xec, 0xe3, 0xf3, 0xb1, 0xed, 0xdb, 0xaf, 0x6f, - 0xc3, 0x96, 0xa2, 0xcf, 0x6a, 0xdd, 0xb5, 0x35, 0xf9, 0x77, 0xdc, 0xb0, - 0x30, 0x26, 0xd9, 0x0b, 0x5c, 0xac, 0x38, 0xb2, 0xe2, 0x5d, 0x8c, 0x0f, - 0xcc, 0x57, 0x81, 0x99, 0x3b, 0xab, 0xc6, 0xa7, 0x61, 0xdd, 0xc8, 0x7a, - 0xdc, 0x96, 0x99, 0x8f, 0xed, 0x6e, 0x16, 0x82, 0x47, 0xcf, 0x08, 0x6f, - 0x61, 0x07, 0xa3, 0x7f, 0x7b, 0x7e, 0x32, 0x60, 0x56, 0x2b, 0x42, 0x60, - 0xb7, 0xa6, 0xbc, 0xe8, 0x8a, 0x79, 0x2c, 0x56, 0x58, 0x57, 0xe6, 0xbb, - 0xe2, 0x4d, 0x65, 0x50, 0x49, 0x33, 0x46, 0xb0, 0xfb, 0x89, 0x8a, 0x9c, - 0xc4, 0x2e, 0x8c, 0x34, 0xa2, 0xee, 0x6d, 0xb7, 0x19, 0x4c, 0x3f, 0x30, - 0xd5, 0xf9, 0x80, 0x11, 0xe9, 0x66, 0x9a, 0x71, 0xdf, 0x1b, 0xbc, 0x1d, - 0x2f, 0x7b, 0x6e, 0x84, 0x74, 0xb6, 0xca, 0x3f, 0xaa, 0x41, 0xae, 0x1a, - 0x3d, 0x34, 0xca, 0xb5, 0xf8, 0x13, 0xbb, 0x96, 0x9d, 0x3f, 0x3c, 0x15, - 0xf0, 0xc8, 0x90, 0xbc, 0x5b, 0x4a, 0xa0, 0x71, 0x63, 0x74, 0x1b, 0x49, - 0x61, 0xfe, 0x37, 0xac, 0x82, 0xbb, 0x68, 0x3a, 0x06, 0xf7, 0xda, 0x84, - 0x59, 0x91, 0x0e, 0xcd, 0xb9, 0x53, 0x2d, 0xbb, 0xe9, 0x58, 0xd1, 0x23, - 0x42, 0x64, 0x49, 0x64, 0x15, 0x02, 0xe8, 0x06, 0x17, 0xaa, 0xef, 0x13, - 0xb3, 0xc0, 0x47, 0xf2, 0xfa, 0xd5, 0x97, 0xd1, 0x2f, 0xc8, 0x69, 0xa3, - 0x21, 0xa7, 0xbe, 0x7f, 0x59, 0x7e, 0x68, 0x82, 0x2f, 0x04, 0x13, 0x38, - 0x5a, 0x73, 0x88, 0x70, 0xde, 0x4b, 0xd6, 0xc5, 0x9a, 0x67, 0x4b, 0x04, - 0xf6, 0xf4, 0xf9, 0xd2, 0xd2, 0xf9, 0x02, 0x03, 0x04, 0x69, 0xc5, 0x1c, - 0x2e, 0x63, 0xb2, 0x25, 0x3b, 0x07, 0x79, 0x40, 0x65, 0x5a, 0xa8, 0xc1, - 0x48, 0x9f, 0xef, 0x48, 0x50, 0x75, 0x35, 0xc3, 0x4e, 0xfd, 0x16, 0x05, - 0x93, 0x81, 0x2e, 0x31, 0xdf, 0xce, 0x7a, 0xde, 0x9c, 0xc4, 0x5a, 0xa1, - 0x9e, 0x9d, 0x5b, 0x13, 0xbc, 0x5e, 0x97, 0x43, 0xcc, 0xa2, 0x47, 0xf1, - 0x19, 0x5e, 0x84, 0xaa, 0x5a, 0x7a, 0x26, 0x8a, 0x01, 0x10, 0xd1, 0xe3, - 0xc7, 0xcd, 0x9b, 0x57, 0x3e, 0xf5, 0x1f, 0x62, 0xd3, 0x39, 0xd5, 0x56, - 0xce, 0x38, 0x0a, 0x11, 0x0e, 0x00, 0xbe, 0xf0, 0x8b, 0xc7, 0xb4, 0x68, - 0x30, 0x2b, 0x08, 0x93, 0xf8, 0xb3, 0x12, 0x67, 0x5a, 0x07, 0x34, 0xcf, - 0x80, 0x54, 0x2e, 0xa9, 0x3f, 0x00, 0x15, 0x97, 0x34, 0x1f, 0x8e, 0xed, - 0xcf, 0xf0, 0x70, 0xae, 0x80, 0xe8, 0x4d, 0xeb, 0x20, 0x53, 0x4b, 0x19, - 0x88, 0xfb, 0x29, 0x3d, 0x15, 0xfc, 0x60, 0x3d, 0x1e, 0xb2, 0x99, 0xe6, - 0x01, 0xb5, 0x5b, 0x86, 0x8c, 0x5a, 0x91, 0x1d, 0x32, 0xdc, 0x0c, 0xf2, - 0xb0, 0x4f, 0xda, 0xdb, 0xc6, 0x7a, 0x8a, 0x36, 0x20, 0x24, 0xfc, 0xcb, - 0xd1, 0xc1, 0xbf, 0x18, 0xd0, 0x02, 0xb7, 0xa5, 0xfc, 0xeb, 0x50, 0x1a, - 0x27, 0xb0, 0xd5, 0x67, 0x4a, 0xaa, 0x3b, 0x9b, 0x5c, 0x87, 0x3c, 0xd1, - 0x4a, 0x4c, 0x5c, 0xd3, 0x85, 0x54, 0x43, 0xe0, 0xdc, 0xe2, 0x15, 0x64, - 0x0f, 0x45, 0x6c, 0x21, 0xc0, 0xa9, 0x22, 0x88, 0x22, 0xa9, 0x9a, 0x32, - 0x98, 0x8b, 0x0a, 0xd9, 0x35, 0x6a, 0x3e, 0x3b, 0xfc, 0x22, 0x8f, 0xf7, - 0xd3, 0x67, 0x2b, 0x57, 0x8b, 0x6d, 0x84, 0x68, 0xf7, 0xa1, 0xe0, 0xd5, - 0xaf, 0xb5, 0x05, 0x0c, 0xbf, 0xe4, 0x2e, 0x6c, 0x29, 0x6d, 0xd2, 0xb0, - 0x57, 0x26, 0x80, 0xe4, 0xb1, 0xa0, 0x4d, 0x85, 0x7c, 0xe5, 0x64, 0x25, - 0x0a, 0x15, 0x1b, 0xf7, 0x52, 0xd8, 0x04, 0x6d, 0xbb, 0xc2, 0xdf, 0xfe, - 0xde, 0xa5, 0xd2, 0xd5, 0x75, 0x92, 0x2f, 0x9a, 0xdd, 0x5d, 0x0f, 0xf3, - 0xe0, 0xfa, 0x7a, 0x54, 0xbb, 0x40, 0x76, 0xac, 0x35, 0x74, 0x02, 0xc6, - 0x59, 0xbf, 0x7f, 0x80, 0x74, 0xac, 0x3b, 0x1d, 0x3a, 0xa2, 0xb1, 0x9b, - 0xd6, 0xf7, 0x46, 0x1b, 0xe6, 0x31, 0xc5, 0x06, 0xc6, 0xe2, 0xac, 0x08, - 0x80, 0x1e, 0xdc, 0xc4, 0xf6, 0x15, 0x95, 0x54, 0xb9, 0x62, 0xe5, 0x04, - 0x5e, 0x0a, 0xa8, 0xcb, 0x84, 0x37, 0xb3, 0xfa, 0xdc, 0xd0, 0x20, 0xcc, - 0x75, 0x98, 0xb5, 0x6c, 0x3c, 0x76, 0x6f, 0x34, 0x0e, 0x83, 0x43, 0xae, - 0x8d, 0xe1, 0x20, 0x38, 0x6b, 0x5f, 0xee, 0xf2, 0x4c, 0x34, 0xc2, 0xd7, - 0x51, 0xc4, 0x4b, 0x4c, 0x48, 0x49, 0xeb, 0xc7, 0x35, 0x30, 0xd9, 0x7a, - 0x7f, 0xcf, 0x70, 0xe2, 0xc0, 0xf5, 0x36, 0xbc, 0x5c, 0x2b, 0x5e, 0xae, - 0x09, 0xe1, 0x38, 0x1f, 0x7b, 0x9e, 0xca, 0xdb, 0x86, 0xec, 0x77, 0xe6, - 0x38, 0x17, 0xce, 0x7b, 0x2e, 0xcf, 0x6a, 0x54, 0xda, 0xb6, 0x0e, 0x51, - 0xda, 0x50, 0xd9, 0x0c, 0xa6, 0xe4, 0xa0, 0xeb, 0xf0, 0xb6, 0xb9, 0xd4, - 0x91, 0x12, 0x8a, 0x51, 0xf0, 0xef, 0xda, 0xa8, 0x69, 0xec, 0x1f, 0x7f, - 0x08, 0xcd, 0x8c, 0xdd, 0x12, 0x96, 0xa2, 0xef, 0xac, 0x52, 0xc9, 0x4b, - 0x94, 0xea, 0x69, 0x50, 0x55, 0x3c, 0xc4, 0x4f, 0x7e, 0x52, 0x94, 0xb4, - 0xb4, 0x1c, 0xa1, 0x7f, 0x29, 0xf2, 0x32, 0xdd, 0x94, 0xdf, 0xea, 0x47, - 0x6c, 0x67, 0xcf, 0xe0, 0x12, 0x7a, 0x29, 0xbf, 0xd9, 0x2c, 0xcb, 0x4f, - 0x01, 0xb0, 0x62, 0x9f, 0xf0, 0xf2, 0x58, 0xa5, 0xff, 0x13, 0x3e, 0x7f, - 0x95, 0xfc, 0x9b, 0xf2, 0xc3, 0x8c, 0x69, 0x6b, 0xa7, 0xec, 0xf7, 0x33, - 0x70, 0x00, 0x08, 0x57, 0x2d, 0x0b, 0xe9, 0xd3, 0xfd, 0x43, 0x98, 0xea, - 0x90, 0x3c, 0x0e, 0x41, 0x00, 0xb9, 0x12, 0xcb, 0x22, 0x0f, 0x98, 0x42, - 0xab, 0x07, 0xad, 0x06, 0x65, 0xb3, 0xd7, 0xc9, 0x54, 0x16, 0x33, 0x97, - 0xca, 0x2d, 0x1d, 0xd9, 0x67, 0xe0, 0x7c, 0x50, 0x58, 0x05, 0x3f, 0x63, - 0xc2, 0x5d, 0x57, 0x0d, 0x47, 0xfb, 0x97, 0x8c, 0x6a, 0xff, 0x70, 0x25, - 0xe5, 0x7f, 0x68, 0x4c, 0x81, 0x84, 0x08, 0x89, 0xf8, 0x8a, 0x04, 0xa6, - 0x5b, 0xa3, 0x32, 0x20, 0x85, 0x1a, 0xf7, 0x70, 0x3f, 0xf2, 0xbc, 0x29, - 0x5d, 0x78, 0xa6, 0x0d, 0x82, 0x1d, 0x7d, 0x5c, 0x3b, 0xa3, 0x18, 0xab, - 0x5a, 0xfc, 0xd3, 0xda, 0xc1, 0x20, 0x9f, 0xbb, 0x3c, 0x7e, 0x70, 0xca, - 0x49, 0x65, 0x6b, 0xcd, 0x6e, 0x34, 0xe5, 0x39, 0x5d, 0x58, 0x44, 0x34, - 0x50, 0xc8, 0x73, 0x56, 0x39, 0x8e, 0xf7, 0xf6, 0xec, 0x42, 0x9a, 0x82, - 0x87, 0x89, 0x7a, 0x48, 0x84, 0xd8, 0x2c, 0xce, 0xc7, 0xbd, 0x9e, 0xfe, - 0xa5, 0x1b, 0xe6, 0xa4, 0xb3, 0x4c, 0xa2, 0xde, 0xae, 0x12, 0x29, 0x8e, - 0x3c, 0x42, 0x18, 0xf5, 0xd8, 0x1e, 0xbb, 0x06, 0xa4, 0xc5, 0xff, 0xd0, - 0x71, 0xce, 0x1b, 0xec, 0x77, 0x1a, 0x04, 0xd5, 0x5d, 0xd1, 0x46, 0xff, - 0x5b, 0x79, 0x4f, 0x9b, 0x1e, 0x14, 0x7a, 0xd7, 0x28, 0x98, 0x23, 0x12, - 0x77, 0x52, 0xa6, 0x7d, 0x81, 0x44, 0xc5, 0x40, 0x73, 0x46, 0x28, 0x67, - 0x08, 0xc1, 0xf3, 0xde, 0x01, 0xc1, 0x9d, 0x29, 0xcf, 0x7e, 0x62, 0x1c, - 0xad, 0xb9, 0xfb, 0xf8, 0x97, 0x5e, 0x73, 0xe0, 0x95, 0x6f, 0x0a, 0x00, - 0xce, 0xd2, 0x9d, 0x42, 0xf8, 0x74, 0x4d, 0x5d, 0x0a, 0x7c, 0x9c, 0xda, - 0x31, 0x8e, 0x80, 0x36, 0x1c, 0x3f, 0x05, 0x04, 0x5e, 0x37, 0x8a, 0xcf, - 0xde, 0x66, 0x2b, 0x5f, 0xda, 0x65, 0x54, 0x42, 0x6c, 0x16, 0x4f, 0x3e, - 0xd3, 0xd1, 0x1b, 0xcd, 0xe0, 0xc8, 0x8d, 0x40, 0x64, 0xad, 0x8e, 0x4d, - 0xc2, 0xa7, 0x46, 0x40, 0x1b, 0x15, 0x13, 0x2d, 0x82, 0x50, 0x46, 0xe0, - 0x1e, 0x53, 0x10, 0x74, 0x7c, 0xf9, 0x64, 0xef, 0xb5, 0xf8, 0xeb, 0xe9, - 0x07, 0x15, 0x85, 0x37, 0xc7, 0xb4, 0xdf, 0xa3, 0x51, 0x55, 0xd6, 0xd8, - 0x7e, 0xac, 0x18, 0x38, 0x61, 0xd0, 0x8e, 0x17, 0x32, 0x0d, 0xd2, 0x73, - 0x16, 0x72, 0x43, 0xae, 0xf5, 0x87, 0x92, 0x72, 0x47, 0xb1, 0xe7, 0xb0, - 0xff, 0x35, 0x62, 0x69, 0xaa, 0x32, 0xe8, 0x0d, 0xa1, 0x73, 0xa9, 0x5c, - 0xc2, 0x60, 0x51, 0x00, 0x4a, 0xab, 0xf8, 0x1b, 0x16, 0xf9, 0xe0, 0x74, - 0x8b, 0xe6, 0xe4, 0x6f, 0x7e, 0x79, 0x9e, 0x81, 0xc7, 0x6d, 0xf7, 0xaa, - 0x22, 0xae, 0xc7, 0x7b, 0x7c, 0xdf, 0x04, 0x57, 0x47, 0x5d, 0xfd, 0x05, - 0x89, 0x4c, 0xac, 0x31, 0xf0, 0x25, 0x4d, 0x12, 0x03, 0x80, 0x69, 0xae, - 0x31, 0xfd, 0x4f, 0x63, 0xf1, 0xc1, 0xd9, 0x32, 0xa9, 0x1c, 0x26, 0x43, - 0x1e, 0x71, 0x07, 0xe6, 0xae, 0x88, 0x7b, 0xb4, 0x5d, 0xea, 0x47, 0x04, - 0xe4, 0x86, 0x7e, 0x03, 0x31, 0x88, 0x7c, 0x79, 0x5e, 0x0f, 0xb8, 0xd7, - 0x92, 0x63, 0x6d, 0x77, 0xab, 0x47, 0x53, 0x5e, 0x17, 0xe6, 0xef, 0x66, - 0x12, 0x25, 0x4c, 0x27, 0x16, 0x04, 0x51, 0xd0, 0x74, 0x41, 0xb0, 0x5e, - 0x41, 0x66, 0x58, 0x23, 0x3f, 0xad, 0xd1, 0x47, 0xba, 0x9d, 0xd3, 0xa5, - 0x2d, 0x20, 0xb8, 0xa6, 0x4e, 0x7e, 0x4a, 0x00, 0xf6, 0x0f, 0x9b, 0x1a, - 0x62, 0x30, 0x3d, 0x8e, 0xae, 0xd2, 0x89, 0xe1, 0x98, 0x4b, 0x3e, 0xf0, - 0xe8, 0x84, 0x5b, 0xf9, 0x54, 0xd9, 0xae, 0xfd, 0xed, 0x58, 0x80, 0xd3, - 0x66, 0xe6, 0x0f, 0x69, 0x91, 0xdf, 0xca, 0xb8, 0x97, 0xb5, 0x6b, 0xdc, - 0x0d, 0xcf, 0x2e, 0xd8, 0xb8, 0xe6, 0xd2, 0xbf, 0xf9, 0x08, 0x32, 0xf1, - 0xc0, 0x2e, 0x7a, 0xbd, 0x69, 0xa7, 0xd0, 0x5e, 0x52, 0xd3, 0x63, 0xf0, - 0x0e, 0xb9, 0x42, 0xa0, 0xcb, 0x30, 0x9b, 0xdd, 0x60, 0x95, 0xe6, 0xf4, - 0xeb, 0x48, 0xdc, 0x81, 0xdd, 0x81, 0xfa, 0xa6, 0x1e, 0x31, 0x1b, 0x85, - 0xd6, 0x83, 0x16, 0x55, 0xe9, 0x05, 0x0a, 0xf2, 0x24, 0x9e, 0x8c, 0xd5, - 0x43, 0xe8, 0x96, 0xce, 0x10, 0x60, 0x23, 0xfe, 0x55, 0x88, 0x21, 0x10, - 0x12, 0x5f, 0x96, 0xfa, 0xbf, 0xf2, 0xf9, 0xda, 0x0b, 0x1d, 0x40, 0x94, - 0x19, 0xda, 0x0f, 0x4b, 0xe2, 0xc4, 0xe6, 0x8a, 0x81, 0x07, 0x27, 0x3f, - 0x1c, 0xef, 0x37, 0xbb, 0xaa, 0xb1, 0x14, 0x23, 0x59, 0x0d, 0x3e, 0x9f, - 0x1a, 0x7e, 0x34, 0xaa, 0x9b, 0xd9, 0x25, 0x94, 0x2a, 0xa8, 0x0f, 0xa2, - 0xe6, 0xec, 0x48, 0x36, 0xf5, 0x03, 0xf0, 0x36, 0xb9, 0xf6, 0xd9, 0x4d, - 0xc2, 0xf7, 0x4e, 0x87, 0x20, 0xf0, 0x33, 0x26, 0x2b, 0x8b, 0xf2, 0xd7, - 0x14, 0x58, 0xde, 0x9d, 0x9e, 0x7d, 0xf0, 0x6a, 0x74, 0x9b, 0xd7, 0x50, - 0xcf, 0xbc, 0x8d, 0xd0, 0xe7, 0x88, 0xce, 0x4d, 0x18, 0x47, 0x0a, 0x0d, - 0x21, 0x7d, 0x96, 0x11, 0xa9, 0xf0, 0x06, 0x38, 0x47, 0xf1, 0x4c, 0xf4, - 0xb9, 0x1a, 0x54, 0xd5, 0x02, 0xe0, 0xdb, 0x00, 0x0a, 0x45, 0x42, 0x76, - 0x9f, 0xbf, 0x4b, 0xa7, 0xad, 0xf0, 0x42, 0x57, 0xd5, 0xb8, 0x1e, 0xb5, - 0x54, 0x2c, 0x4d, 0xff, 0x3f, 0x0c, 0xf7, 0xde, 0xdb, 0x3d, 0x80, 0xc1, - 0xdb, 0x32, 0x2c, 0x43, 0x25, 0x18, 0x90, 0x59, 0xac, 0xc7, 0xb9, 0x35, - 0xb8, 0x88, 0xfe, 0x76, 0x71, 0x80, 0xdc, 0xe8, 0xdd, 0x5a, 0xfa, 0x44, - 0x38, 0x0a, 0xec, 0x07, 0x2c, 0xe8, 0xd2, 0x6a, 0xd1, 0x2a, 0xc8, 0x18, - 0x4e, 0x79, 0xf7, 0x4f, 0x60, 0xf6, 0xdf, 0x04, 0xc8, 0x16, 0x69, 0x96, - 0x66, 0x06, 0xaf, 0xac, 0x68, 0x73, 0xe7, 0x4b, 0x71, 0x86, 0xae, 0x87, - 0xaf, 0xe8, 0x03, 0x7a, 0xb9, 0xb6, 0x0b, 0xbd, 0x1e, 0x43, 0xe2, 0xa7, - 0x88, 0x59, 0x80, 0xee, 0x97, 0xe7, 0x68, 0x9f, 0xef, 0x89, 0x44, 0xbf, - 0x25, 0xf4, 0xde, 0x42, 0x65, 0x35, 0x91, 0x42, 0xbd, 0x33, 0x60, 0x24, - 0xbb, 0xc5, 0xc3, 0x67, 0xe1, 0x5d, 0xd3, 0x62, 0xc8, 0x47, 0xee, 0x2b, - 0x47, 0xac, 0xb9, 0x2d, 0xf4, 0x8f, 0x62, 0x16, 0x32, 0xd6, 0xce, 0x06, - 0x3e, 0x32, 0x30, 0x93, 0x72, 0x64, 0x41, 0xa5, 0x2d, 0x03, 0x05, 0x6d, - 0x0b, 0x2d, 0x7e, 0xb4, 0xfb, 0x86, 0x82, 0x10, 0xe9, 0x3a, 0x16, 0x29, - 0x50, 0x86, 0xdb, 0x8c, 0x93, 0x0e, 0x03, 0x66, 0x20, 0xc4, 0x3b, 0x8c, - 0x4a, 0x32, 0xd6, 0x3c, 0x4d, 0xb8, 0x1c, 0x57, 0xf3, 0x8e, 0x06, 0xa4, - 0x54, 0xd1, 0xd0, 0xab, 0x62, 0x16, 0xb7, 0x5b, 0x4e, 0x8e, 0xfa, 0x8d, - 0x78, 0xb0, 0x97, 0x67, 0x26, 0x26, 0xec, 0x9a, 0xfb, 0xc3, 0xee, 0x4b, - 0xc5, 0xeb, 0x6c, 0x5d, 0x2e, 0xb4, 0x2f, 0x74, 0x03, 0xf7, 0x20, 0x99, - 0x0c, 0x39, 0x23, 0xe1, 0x4e, 0xfe, 0x35, 0x41, 0xe8, 0x59, 0xaa, 0xdd, - 0xf8, 0xfe, 0xa5, 0x2d, 0x2c, 0x95, 0x00, 0x1a, 0xc9, 0x9c, 0x3c, 0xb2, - 0xd3, 0xa6, 0xfd, 0x6b, 0xe3, 0x59, 0xa9, 0x1d, 0x07, 0x18, 0xca, 0xde, - 0x3c, 0x0e, 0x5f, 0x6c, 0x7a, 0xd1, 0x70, 0xe9, 0x2d, 0xb5, 0x61, 0x1b, - 0x81, 0x6b, 0x0e, 0x5a, 0x9b, 0x3e, 0x21, 0xf8, 0xab, 0xba, 0xd9, 0xb1, - 0x2a, 0x8a, 0x81, 0x9f, 0x5e, 0x2c, 0x64, 0xaa, 0xdd, 0x59, 0xd0, 0xa6, - 0x9a, 0xb1, 0x83, 0x5c, 0x18, 0xfa, 0xe0, 0x8f, 0xf8, 0xa3, 0x13, 0x02, - 0x37, 0x43, 0xb0, 0x7b, 0x3e, 0x83, 0x6e, 0xdf, 0x87, 0xbc, 0x34, 0xf3, - 0x54, 0xa1, 0x9e, 0x43, 0x1a, 0xa1, 0x66, 0x36, 0xee, 0x58, 0x34, 0x34, - 0x3a, 0xa2, 0x19, 0xa8, 0xfd, 0x51, 0xcf, 0xae, 0x0a, 0x5a, 0x77, 0x0f, - 0xcf, 0x54, 0x38, 0x77, 0x2c, 0xcf, 0x14, 0xdf, 0x4a, 0x2d, 0x6b, 0x9b, - 0x57, 0x08, 0x5a, 0x5d, 0xfb, 0x57, 0x2c, 0x4b, 0x75, 0x70, 0x74, 0x4d, - 0x31, 0xf2, 0x67, 0xbf, 0xc9, 0x16, 0x35, 0x62, 0xa7, 0x1a, 0xfd, 0xc1, - 0xa9, 0x33, 0x86, 0x96, 0x9d, 0xdf, 0x02, 0xcf, 0xf8, 0x0b, 0x6e, 0xc1, - 0x3f, 0xf6, 0x05, 0x00, 0xae, 0xb1, 0x7f, 0x39, 0xff, 0x8d, 0x10, 0x0e, - 0xf0, 0xfd, 0x50, 0x55, 0x86, 0x71, 0xbc, 0xdc, 0xd7, 0x33, 0x41, 0xae, - 0x4d, 0x37, 0x5d, 0xd0, 0x67, 0x3f, 0xda, 0x62, 0x0b, 0x01, 0xe2, 0x87, - 0x6c, 0xcd, 0x32, 0x4b, 0x07, 0x54, 0xe9, 0x6f, 0x13, 0x82, 0x12, 0x2e, - 0x3b, 0x3e, 0x9b, 0x36, 0x13, 0x10, 0x2c, 0xd0, 0xff, 0xd8, 0x80, 0x17, - 0x79, 0xd3, 0x12, 0x8a, 0x4a, 0x13, 0xf8, 0xf9, 0xd1, 0x93, 0x41, 0xca, - 0x4c, 0xad, 0xa5, 0x96, 0x12, 0xc6, 0x78, 0xfb, 0x94, 0xa8, 0x89, 0x53, - 0x0c, 0xc2, 0x0c, 0xf8, 0x7d, 0x55, 0x5a, 0xff, 0xea, 0xd2, 0x93, 0x95, - 0xa0, 0x18, 0x92, 0xb1, 0xf9, 0xfb, 0x30, 0x4f, 0xd5, 0xce, 0xe5, 0xb1, - 0x19, 0x69, 0x1b, 0x23, 0xd3, 0x3b, 0x31, 0xe0, 0x7b, 0x65, 0xc7, 0x38, - 0x78, 0x74, 0x00, 0x0f, 0x42, 0x19, 0x4a, 0x5c, 0xb0, 0x90, 0xdd, 0xb6, - 0x45, 0x8d, 0x6b, 0x5f, 0xe7, 0xe3, 0x0b, 0x37, 0xea, 0xde, 0xa6, 0xc5, - 0x73, 0xa2, 0x96, 0xb6, 0x33, 0x3e, 0x6b, 0xb0, 0x4f, 0xa5, 0xe3, 0xfc, - 0x15, 0x6d, 0xfc, 0x7d, 0x39, 0x8e, 0x0b, 0xf3, 0x0e, 0x2a, 0x1e, 0x21, - 0xce, 0x89, 0x13, 0x80, 0xe2, 0x67, 0x0b, 0x4a, 0x92, 0xa6, 0x2d, 0x7c, - 0x4b, 0xc7, 0x93, 0x20, 0x0e, 0x77, 0xde, 0xcf, 0xb1, 0x38, 0x9c, 0x49, - 0x61, 0x99, 0xd3, 0x45, 0xc7, 0xc1, 0x39, 0x4b, 0x28, 0x99, 0xb1, 0xab, - 0x6e, 0x00, 0xbb, 0x6f, 0x5a, 0xdd, 0x7c, 0x06, 0x43, 0x3c, 0x49, 0xcf, - 0x39, 0xe8, 0x6e, 0x44, 0xc9, 0xc7, 0x25, 0xdb, 0x7b, 0x40, 0xee, 0xf5, - 0xb4, 0xc1, 0x3b, 0x1c, 0x4e, 0xd0, 0x05, 0x1b, 0x0a, 0x65, 0x64, 0x5e, - 0x81, 0xd9, 0x7c, 0xf5, 0x61, 0x7a, 0x2f, 0x2f, 0x8d, 0x2d, 0xea, 0x15, - 0x71, 0x23, 0x11, 0x44, 0x31, 0xf9, 0x86, 0xb3, 0x62, 0x76, 0x05, 0x67, - 0xcf, 0xb6, 0x72, 0x8f, 0x9a, 0xe4, 0x69, 0xd0, 0x61, 0x0f, 0x98, 0xd7, - 0xc1, 0x00, 0x31, 0xd6, 0x9c, 0xf1, 0xb8, 0x7a, 0x07, 0x23, 0xc4, 0x9a, - 0xf9, 0xc3, 0x07, 0x1a, 0x9b, 0x8e, 0xba, 0xa7, 0x6f, 0x12, 0xcd, 0x98, - 0x2f, 0xbe, 0x3d, 0x8e, 0xc3, 0x04, 0xc1, 0xf4, 0xba, 0x29, 0x29, 0x0c, - 0x54, 0x98, 0x70, 0xdc, 0xbe, 0x57, 0xa9, 0x54, 0xdd, 0x67, 0x1e, 0x98, - 0xff, 0x04, 0x59, 0x07, 0x5f, 0xa1, 0x1b, 0xe4, 0xe2, 0x1d, 0x0f, 0x05, - 0xfd, 0x55, 0x4d, 0x6f, 0xec, 0xe6, 0x1d, 0x82, 0xf3, 0x2e, 0x37, 0x35, - 0xc6, 0xff, 0x79, 0x38, 0x9f, 0x7b, 0x47, 0x0b, 0x68, 0x26, 0xc2, 0x46, - 0x11, 0x88, 0xae, 0x4a, 0xe0, 0xfe, 0x53, 0x7f, 0x67, 0x1b, 0xb4, 0xd5, - 0x52, 0x42, 0xee, 0x5b, 0xa9, 0x07, 0x54, 0x30, 0x4d, 0xb7, 0x15, 0xf1, - 0x2c, 0x6c, 0x35, 0x80, 0xb5, 0x90, 0x58, 0xc3, 0xae, 0xcc, 0x7e, 0xc9, - 0x9c, 0x40, 0x03, 0xdc, 0xf2, 0x62, 0x76, 0x84, 0x9e, 0x99, 0x37, 0xc3, - 0x6d, 0x99, 0x99, 0x23, 0x14, 0xb3, 0xa3, 0xd3, 0x27, 0x3c, 0x6b, 0xb6, - 0x2e, 0xb5, 0xc0, 0xb8, 0x4d, 0xa4, 0xf5, 0x85, 0x37, 0x33, 0xf7, 0x4f, - 0x10, 0x65, 0x59, 0x16, 0xad, 0x5f, 0xaf, 0xc8, 0x35, 0x92, 0xd7, 0xed, - 0x8a, 0xaa, 0x83, 0xb8, 0xbd, 0x06, 0x29, 0x38, 0x9f, 0xec, 0xf1, 0x6f, - 0xdf, 0xe4, 0x51, 0xad, 0x58, 0x98, 0x6c, 0x90, 0xb6, 0x8c, 0x12, 0x9a, - 0x51, 0xa7, 0xbd, 0x93, 0x72, 0x51, 0x27, 0x82, 0x0e, 0xee, 0x0b, 0xde, - 0x2b, 0xf1, 0x80, 0x04, 0x95, 0xf6, 0xed, 0xbc, 0x33, 0xe6, 0xae, 0xf2, - 0x56, 0x88, 0xe6, 0x08, 0x31, 0x2c, 0xbc, 0xfe, 0xdb, 0x00, 0x21, 0x54, - 0x3e, 0x41, 0x7c, 0x0b, 0xa4, 0x97, 0x68, 0x7f, 0xf0, 0xf3, 0x42, 0x8c, - 0x9e, 0xb9, 0x3b, 0x2a, 0xc6, 0xbc, 0xd0, 0x69, 0x64, 0x9f, 0x31, 0xbb, - 0x45, 0x3e, 0x7d, 0x47, 0x32, 0x85, 0x8b, 0x23, 0xff, 0x41, 0xff, 0xe6, - 0x4d, 0xb3, 0x98, 0xaf, 0xa6, 0x6f, 0x1a, 0x84, 0x55, 0xa4, 0x45, 0xa3, - 0xff, 0x4f, 0x2c, 0x18, 0x38, 0x03, 0x25, 0x19, 0x93, 0xe8, 0x0f, 0x78, - 0xf4, 0x50, 0x06, 0xfe, 0xc7, 0xcf, 0x10, 0x03, 0x46, 0x99, 0xca, 0x71, - 0xd8, 0x1e, 0xac, 0x62, 0xba, 0x55, 0x88, 0x93, 0x19, 0x43, 0x18, 0x82, - 0xeb, 0x9a, 0x6c, 0xc2, 0xf4, 0xa3, 0xbf, 0x69, 0x76, 0x20, 0x9b, 0xb7, - 0xbb, 0x1c, 0x06, 0x3f, 0xcb, 0xb8, 0xc7, 0xbd, 0xad, 0x08, 0x31, 0xf2, - 0xdc, 0x49, 0xc3, 0x0d, 0xb7, 0x48, 0x07, 0x25, 0x15, 0x46, 0x49, 0x09, - 0x01, 0xcf, 0xa9, 0x65, 0xc5, 0x21, 0x6b, 0xe6, 0x72, 0x18, 0x46, 0x03, - 0xe4, 0xa2, 0xcc, 0x53, 0x55, 0xdc, 0x94, 0xf2, 0x72, 0xae, 0x48, 0x98, - 0x0d, 0x63, 0xf3, 0x7a, 0x6d, 0x3c, 0x6a, 0x5c, 0x51, 0x69, 0xa7, 0x53, - 0x26, 0x39, 0x14, 0xce, 0x22, 0xbc, 0x7b, 0xe0, 0x99, 0xed, 0x6f, 0x94, - 0x4e, 0x02, 0x33, 0x5a, 0xcc, 0x6f, 0xf8, 0xaf, 0x31, 0xbc, 0xae, 0x9e, - 0x10, 0xc3, 0xaf, 0x2d, 0x50, 0x31, 0x34, 0x66, 0xe0, 0xc1, 0x55, 0xd1, - 0xee, 0x16, 0x21, 0xac, 0xdc, 0x80, 0x64, 0xd5, 0xf9, 0x49, 0xa2, 0xf8, - 0xe6, 0xad, 0x46, 0x7e, 0x40, 0x7f, 0xec, 0x2f, 0x29, 0xea, 0xec, 0x16, - 0xaf, 0xca, 0x71, 0xff, 0x80, 0x2e, 0x9f, 0x65, 0xbd, 0x69, 0x74, 0x4f, - 0x4f, 0x93, 0xf4, 0x36, 0x2e, 0xd4, 0xc5, 0x14, 0x5e, 0x67, 0x99, 0x03, - 0x75, 0xa4, 0x4c, 0x1e, 0x00, 0x66, 0xf6, 0xf1, 0x1a, 0xb4, 0xcb, 0x49, - 0x6e, 0x78, 0xf9, 0x44, 0x05, 0x4f, 0x3a, 0x97, 0x60, 0xe4, 0x59, 0xe9, - 0x78, 0x60, 0x9d, 0x47, 0xf1, 0xc1, 0xcc, 0x1a, 0x42, 0x57, 0xa0, 0x0c, - 0x69, 0xa3, 0x9a, 0x78, 0xb5, 0xf2, 0xe6, 0xa7, 0xf2, 0x06, 0xc4, 0xa8, - 0xdb, 0xc2, 0xc9, 0xe5, 0x78, 0xa9, 0x81, 0xd0, 0x6c, 0x18, 0xe8, 0x09, - 0xa2, 0x13, 0xbe, 0x07, 0xc6, 0x11, 0xec, 0xc5, 0xc2, 0xa2, 0xe9, 0xed, - 0x97, 0x03, 0x0a, 0x6d, 0xdd, 0x40, 0x2d, 0x20, 0x58, 0x7b, 0x63, 0x55, - 0xd5, 0x9c, 0x67, 0x6b, 0xf8, 0xc8, 0x2b, 0x58, 0x0c, 0xb9, 0x5c, 0xd2, - 0x2a, 0xb6, 0xc9, 0x82, 0x96, 0xbf, 0x81, 0x55, 0x71, 0x1a, 0x59, 0x9f, - 0x26, 0xce, 0x06, 0x1e, 0x02, 0xca, 0x4c, 0x34, 0xa9, 0x15, 0xda, 0xfb, - 0x5b, 0xa9, 0xd2, 0x34, 0xe3, 0xf6, 0xa1, 0xe5, 0xc1, 0xe2, 0x9a, 0x75, - 0x5d, 0x30, 0xf8, 0x88, 0xc7, 0xd2, 0x1c, 0x6b, 0x60, 0x82, 0x43, 0xe7, - 0xeb, 0x4d, 0x42, 0x87, 0x27, 0xdd, 0x7e, 0x0e, 0x68, 0x21, 0xda, 0x3a, - 0x54, 0x88, 0x0b, 0x6d, 0x14, 0x88, 0xd4, 0x26, 0x7e, 0x97, 0x26, 0xd0, - 0x1f, 0x00, 0x81, 0xe1, 0x6d, 0x56, 0xf6, 0xf1, 0x4d, 0x79, 0x28, 0x7b, - 0xc3, 0x5e, 0x5a, 0x59, 0x07, 0x48, 0x06, 0x14, 0x4f, 0x70, 0x2c, 0xc3, - 0x40, 0x62, 0xc7, 0x38, 0x22, 0xb9, 0x7e, 0xcf, 0x25, 0x34, 0xcc, 0x6b, - 0x50, 0x74, 0xbd, 0xfd, 0x8f, 0xd8, 0xf1, 0x27, 0x54, 0xf1, 0x53, 0x93, - 0xb3, 0x94, 0x12, 0x0b, 0x5b, 0x3e, 0x7e, 0xb2, 0xda, 0xe7, 0x19, 0x32, - 0xc4, 0x81, 0xc0, 0x21, 0x17, 0x9b, 0xf3, 0x63, 0x36, 0xdc, 0x57, 0x56, - 0x0d, 0x6e, 0x35, 0xe5, 0xdc, 0xe4, 0x4a, 0xe9, 0x4f, 0xd9, 0xc6, 0x6a, - 0xff, 0x80, 0xdb, 0xdd, 0x42, 0xe1, 0x99, 0x93, 0x14, 0x1e, 0x60, 0xeb, - 0xbf, 0x13, 0x32, 0x4b, 0xf8, 0xa5, 0xc7, 0xee, 0xf4, 0x72, 0x23, 0xa6, - 0x63, 0x08, 0x07, 0x69, 0x4d, 0x71, 0x2e, 0x74, 0xc2, 0xd8, 0x52, 0x76, - 0x75, 0x5f, 0x66, 0xd7, 0xba, 0x27, 0x74, 0x5d, 0x5e, 0x34, 0x22, 0x97, - 0x53, 0x09, 0xdd, 0x35, 0xac, 0x57, 0xd6, 0xdd, 0xbf, 0xe1, 0x61, 0x6e, - 0x04, 0xfa, 0x8e, 0x09, 0x03, 0xe8, 0x68, 0xf0, 0x85, 0x1d, 0x49, 0x6a, - 0x31, 0xbf, 0xd8, 0x18, 0x88, 0x7b, 0x06, 0xa6, 0xbb, 0x53, 0xd2, 0xab, - 0x4b, 0x20, 0x00, 0xe7, 0x6b, 0xc9, 0xd1, 0x2d, 0xbf, 0x21, 0x4d, 0x7a, - 0x79, 0xa4, 0x00, 0x41, 0x35, 0x91, 0x76, 0xbb, 0xb3, 0xc6, 0xda, 0xd7, - 0x54, 0x53, 0xa5, 0xb0, 0x03, 0x61, 0x33, 0x67, 0xa7, 0x29, 0x76, 0xa5, - 0x66, 0x2c, 0xf3, 0x5f, 0xdd, 0x9a, 0xab, 0xb1, 0x9d, 0xaa, 0x37, 0x6b, - 0x01, 0x43, 0x40, 0x95, 0x3f, 0xe1, 0xdb, 0xdf, 0x9b, 0x70, 0xfc, 0xd6, - 0x4a, 0x45, 0xec, 0x90, 0xa5, 0x77, 0x87, 0xe9, 0xcf, 0xdc, 0x11, 0x39, - 0x78, 0x02, 0x42, 0xfd, 0x72, 0xf8, 0x55, 0xf2, 0x13, 0xf7, 0x56, 0x7b, - 0x01, 0x70, 0x9a, 0xeb, 0x8b, 0x83, 0x6a, 0x30, 0x11, 0xd2, 0x87, 0x3f, - 0x6b, 0x00, 0xf4, 0x73, 0x9b, 0x44, 0xc3, 0xa7, 0xd8, 0xeb, 0xa6, 0xb6, - 0x7b, 0x98, 0x1a, 0x11, 0x17, 0x80, 0xb4, 0xb6, 0x85, 0x88, 0x16, 0x7f, - 0xb9, 0xb6, 0xae, 0x0a, 0x89, 0x30, 0x38, 0x09, 0x78, 0x39, 0x44, 0x04, - 0x85, 0x88, 0x64, 0x42, 0xf1, 0x7c, 0x42, 0x3f, 0xdb, 0x8a, 0x9e, 0x11, - 0x56, 0x04, 0x3d, 0x4f, 0x96, 0xb2, 0xe0, 0xa6, 0x03, 0x40, 0x2f, 0x22, - 0x10, 0xd5, 0xd6, 0x99, 0xff, 0x12, 0xd6, 0x58, 0x0a, 0xd9, 0x03, 0x6c, - 0xce, 0x50, 0xf1, 0x13, 0xdb, 0xb9, 0xd5, 0x9b, 0xae, 0xeb, 0xc2, 0x97, - 0x3d, 0xd1, 0x50, 0xa4, 0xd4, 0xa3, 0xf2, 0x9b, 0x47, 0xf2, 0xf0, 0x87, - 0xb3, 0x36, 0x10, 0xc1, 0x7f, 0x02, 0x19, 0x4f, 0xc4, 0xb6, 0x2a, 0x8b, - 0x9b, 0x2c, 0xe2, 0x66, 0x58, 0xc3, 0x1f, 0x16, 0xaf, 0x78, 0x33, 0xf9, - 0x9a, 0xe4, 0x15, 0x05, 0x12, 0x86, 0x9a, 0xce, 0xb6, 0x47, 0x7b, 0x0e, - 0x52, 0xde, 0xd3, 0xad, 0x47, 0xc9, 0x1d, 0xd3, 0x76, 0xde, 0x32, 0x38, - 0xca, 0x08, 0x08, 0xc7, 0xc1, 0xf0, 0x98, 0x86, 0x8c, 0xfb, 0xf4, 0xf2, - 0x6b, 0xfa, 0x60, 0x6b, 0xd0, 0xaf, 0xe0, 0x32, 0x1f, 0x7f, 0x0e, 0x60, - 0x08, 0x34, 0x05, 0xf8, 0x4f, 0xab, 0x9c, 0xb9, 0xa3, 0xb0, 0x6a, 0xda, - 0xb6, 0x0b, 0x15, 0x35, 0x21, 0x31, 0xbf, 0x8d, 0x79, 0x55, 0x29, 0xd7, - 0x25, 0x1b, 0xe8, 0x62, 0x32, 0xd5, 0x35, 0x7a, 0x7a, 0x25, 0x2e, 0x4b, - 0xb5, 0xa1, 0xe7, 0x7e, 0xbe, 0xa3, 0xcb, 0x68, 0x1f, 0x44, 0xc6, 0x42, - 0xf2, 0x04, 0xa7, 0xc2, 0x55, 0xef, 0x80, 0xe5, 0x8e, 0x28, 0x21, 0xd1, - 0x01, 0xe3, 0x8c, 0x43, 0xef, 0xec, 0xbe, 0x60, 0x45, 0xcf, 0x98, 0x23, - 0x99, 0x7e, 0x7b, 0x68, 0x5d, 0xc1, 0x1b, 0x6a, 0x12, 0xcc, 0xd6, 0xbe, - 0x70, 0x68, 0x5c, 0x86, 0xcc, 0xb9, 0x35, 0x37, 0xdd, 0x75, 0xff, 0xfb, - 0x72, 0xd0, 0x6a, 0xd2, 0x81, 0x96, 0x74, 0x2e, 0x66, 0x75, 0x64, 0x6f, - 0xf3, 0x8c, 0x7b, 0xad, 0xbc, 0x1c, 0xba, 0x60, 0x68, 0x3c, 0x1c, 0x69, - 0xe2, 0x73, 0x2a, 0xcb, 0xe0, 0x44, 0xfc, 0xb0, 0x8d, 0xab, 0x3a, 0x06, - 0x49, 0x22, 0x3c, 0x86, 0xad, 0x0f, 0x17, 0x08, 0x44, 0x94, 0x36, 0x50, - 0x5b, 0x4a, 0xe5, 0xe2, 0x36, 0xf5, 0x23, 0xb2, 0x1a, 0x71, 0x54, 0x08, - 0x70, 0x0a, 0x60, 0x2c, 0xec, 0xb0, 0xaf, 0x95, 0xbf, 0xd0, 0x6a, 0x19, - 0x91, 0x53, 0x13, 0xad, 0x3a, 0x14, 0xe2, 0x22, 0x71, 0xd7, 0x86, 0x10, - 0x97, 0x88, 0x29, 0xce, 0x18, 0x9f, 0x20, 0xf8, 0x2e, 0x80, 0x19, 0xac, - 0xdd, 0x87, 0x6d, 0xb9, 0x6a, 0x63, 0x9e, 0x30, 0xd5, 0x44, 0xc0, 0xd7, - 0xf8, 0x0e, 0x52, 0xab, 0x7a, 0x71, 0xff, 0x63, 0x23, 0x27, 0x43, 0x97, - 0x8d, 0x96, 0xda, 0xaa, 0x0c, 0x14, 0x5a, 0xb9, 0xb4, 0x0f, 0xb8, 0x56, - 0xb1, 0x49, 0x90, 0xaa, 0x3a, 0x63, 0xa8, 0xe2, 0x17, 0x96, 0x10, 0x58, - 0x72, 0xa7, 0xd7, 0x9f, 0x0f, 0xff, 0x99, 0x3d, 0x60, 0x8f, 0xd1, 0xa3, - 0x94, 0x37, 0xb1, 0x67, 0xf2, 0x6f, 0x97, 0x95, 0x8c, 0x88, 0x40, 0x57, - 0x8c, 0x55, 0x99, 0xe2, 0xcf, 0x15, 0x40, 0x24, 0x1e, 0xe4, 0x9d, 0xff, - 0x6f, 0xc9, 0xd8, 0xb1, 0x48, 0xb1, 0x1f, 0xc8, 0xaa, 0xa2, 0x14, 0xfb, - 0x7d, 0x13, 0xd8, 0xc7, 0xe4, 0x97, 0xe5, 0xd3, 0xc3, 0x8b, 0xae, 0x1c, - 0x8d, 0x21, 0x61, 0x25, 0x78, 0x3f, 0x8d, 0x37, 0x81, 0x73, 0x6f, 0x6e, - 0xa0, 0xbf, 0xbc, 0xda, 0xc1, 0x21, 0x7b, 0x69, 0x7e, 0x06, 0xc6, 0x44, - 0x1b, 0x0b, 0x52, 0xc8, 0xe8, 0xfb, 0x35, 0x32, 0xa6, 0x98, 0x81, 0xe6, - 0x65, 0xba, 0x8c, 0x98, 0x79, 0x68, 0xac, 0xe6, 0x75, 0xb4, 0x58, 0x9b, - 0xec, 0xa5, 0x1c, 0x0f, 0x35, 0xc5, 0x1e, 0x65, 0xb4, 0xe9, 0x14, 0x22, - 0xaf, 0x91, 0x15, 0xeb, 0x8d, 0x57, 0x54, 0xb3, 0x87, 0x61, 0xe9, 0xf7, - 0x65, 0x23, 0x95, 0x68, 0x83, 0xf2, 0x6f, 0xb3, 0x65, 0x1d, 0xc2, 0x50, - 0xde, 0xd1, 0x65, 0xcb, 0x5b, 0xbc, 0xfe, 0x44, 0xc1, 0x08, 0xc5, 0x75, - 0x0c, 0xdc, 0x59, 0xe2, 0xfe, 0x46, 0x25, 0xfc, 0x77, 0xaf, 0xc3, 0xee, - 0x1a, 0xc8, 0x41, 0xb5, 0x30, 0xc5, 0xf9, 0xd1, 0x06, 0x0f, 0x92, 0x89, - 0x93, 0x0a, 0x84, 0xa3, 0x60, 0xf5, 0x09, 0xb0, 0x42, 0x1d, 0x62, 0x33, - 0xaf, 0xb4, 0xbd, 0xe9, 0x99, 0x16, 0x72, 0x33, 0x18, 0x13, 0x98, 0xd3, - 0x0e, 0x24, 0xb3, 0x10, 0xe9, 0x43, 0xb9, 0x89, 0xac, 0x2f, 0x6f, 0x42, - 0xc3, 0xc5, 0x06, 0xa1, 0xbc, 0xc5, 0x0d, 0x7a, 0xdb, 0xcf, 0x15, 0x89, - 0xc6, 0x48, 0x95, 0x79, 0x42, 0xe2, 0xa8, 0xca, 0x5b, 0xb9, 0x51, 0x79, - 0x67, 0xdf, 0x5d, 0x90, 0xc0, 0x95, 0x32, 0x4f, 0xc1, 0x50, 0x79, 0x7c, - 0xae, 0x4f, 0x59, 0x6a, 0x1a, 0xf9, 0x3b, 0x0a, 0x87, 0xb8, 0xab, 0x1f, - 0x92, 0xe4, 0x0e, 0x72, 0x38, 0x6a, 0x10, 0x5a, 0x24, 0x2b, 0x30, 0x75, - 0xcd, 0x29, 0xf8, 0x12, 0x95, 0xdf, 0x11, 0x6c, 0x33, 0x9a, 0x02, 0x5e, - 0xf9, 0x6c, 0x4d, 0x52, 0xb3, 0x77, 0xe1, 0x9c, 0xac, 0xb8, 0x38, 0x00, - 0x2b, 0x16, 0xb1, 0xeb, 0x1d, 0xe9, 0x57, 0xcb, 0x6e, 0xdf, 0x57, 0xdf, - 0xd8, 0x6c, 0xa9, 0x56, 0xe3, 0x8d, 0xff, 0xa1, 0xb8, 0x6a, 0x3d, 0xad, - 0xb5, 0x6c, 0x42, 0xb6, 0x1f, 0x18, 0x22, 0xd3, 0xcb, 0xf7, 0x32, 0x8d, - 0x94, 0x95, 0x15, 0x82, 0x94, 0x9b, 0xee, 0xcd, 0x35, 0xf0, 0x00, 0x21, - 0x95, 0x13, 0xf6, 0x17, 0x23, 0x12, 0xf7, 0xd2, 0xbc, 0x71, 0xbe, 0x9d, - 0x24, 0xef, 0x54, 0x17, 0xfc, 0xcd, 0x02, 0x13, 0x0d, 0xcf, 0x74, 0x64, - 0xa4, 0xc4, 0x8d, 0xdb, 0x1c, 0xd2, 0x56, 0x86, 0x64, 0xf3, 0x26, 0xc2, - 0x57, 0x94, 0x50, 0x3c, 0x3d, 0x78, 0x36, 0x2d, 0x2e, 0xb4, 0x69, 0xc9, - 0xb7, 0xf8, 0xfc, 0x4e, 0xf3, 0xfd, 0xde, 0x23, 0x3a, 0xe3, 0x0c, 0x3c, - 0xf1, 0xe3, 0xeb, 0xb8, 0xaa, 0x0c, 0x32, 0xed, 0x9a, 0x88, 0xa9, 0x11, - 0xd5, 0x06, 0xc4, 0x9c, 0x0f, 0x56, 0x2e, 0xa6, 0xe7, 0x42, 0xf0, 0x5d, - 0xa0, 0xc4, 0xeb, 0xd7, 0x70, 0x43, 0x39, 0x8b, 0x18, 0x7a, 0xab, 0x83, - 0xff, 0x00, 0xc1, 0x7b, 0xc3, 0xe9, 0xff, 0x07, 0x6e, 0xf9, 0x21, 0x0d, - 0x9c, 0xad, 0xb6, 0x22, 0xd8, 0x88, 0x91, 0x49, 0x92, 0x6c, 0xa2, 0x7f, - 0x61, 0x37, 0x9f, 0xc7, 0xae, 0x6e, 0x15, 0xd7, 0x8f, 0x0d, 0xd3, 0x81, - 0x2a, 0xd2, 0xba, 0xe2, 0xdf, 0x85, 0x30, 0x54, 0x09, 0x8c, 0xe8, 0x7e, - 0x94, 0xbb, 0x78, 0x06, 0x33, 0x17, 0x2c, 0x67, 0x33, 0x10, 0xa8, 0x8a, - 0x3f, 0x67, 0x30, 0x62, 0xc8, 0xf5, 0xa3, 0x39, 0xbb, 0xd4, 0x9d, 0x6f, - 0x07, 0x1d, 0xae, 0x59, 0x2b, 0xb7, 0x94, 0x87, 0x04, 0x7f, 0x57, 0x25, - 0x17, 0x42, 0x17, 0xd8, 0x9d, 0x5f, 0x5d, 0xee, 0x41, 0x08, 0x31, 0xf1, - 0x42, 0x5c, 0xc7, 0x32, 0xd8, 0xc1, 0xc4, 0x3a, 0xff, 0x04, 0xa9, 0x15, - 0xbf, 0x8f, 0x17, 0xe1, 0x20, 0xad, 0x8f, 0xb9, 0xd6, 0x3a, 0x18, 0x86, - 0xc1, 0x20, 0x29, 0xca, 0xb4, 0xec, 0x55, 0xc5, 0xbd, 0x23, 0xd5, 0x84, - 0x52, 0xc6, 0xe8, 0xbe, 0x80, 0x8b, 0x07, 0x0d, 0xb4, 0xc0, 0xfd, 0xb4, - 0xbd, 0xb2, 0x76, 0x6e, 0x4a, 0xd9, 0xe6, 0x2e, 0xe2, 0x52, 0xfe, 0xca, - 0x02, 0x01, 0x18, 0x41, 0x81, 0xbf, 0xfc, 0x47, 0x8b, 0xf4, 0x1f, 0x54, - 0x65, 0xe8, 0xec, 0x8b, 0x8d, 0x6b, 0x73, 0x2b, 0xcf, 0xd5, 0x92, 0xd6, - 0xfa, 0x89, 0x2d, 0x67, 0x97, 0x7a, 0xe4, 0x0c, 0x02, 0x08, 0x32, 0x07, - 0x3f, 0x6f, 0x48, 0x03, 0xfb, 0x1d, 0xde, 0xd3, 0xe1, 0x42, 0x50, 0xf9, - 0xbf, 0xc1, 0x8b, 0x1a, 0x1d, 0x30, 0x6a, 0xd1, 0xd2, 0xb2, 0xf8, 0xd6, - 0xfb, 0x27, 0x24, 0x63, 0xfb, 0xf0, 0x74, 0x5a, 0x40, 0xe7, 0x5e, 0xac, - 0xc6, 0x5f, 0x44, 0x18, 0x3b, 0x73, 0x92, 0x0f, 0x8d, 0x17, 0x3e, 0xa4, - 0x58, 0x19, 0xae, 0xf5, 0xd1, 0x1e, 0x2d, 0xab, 0x0a, 0x77, 0x06, 0xe8, - 0x07, 0x35, 0xd7, 0x91, 0xe5, 0x36, 0xa7, 0x90, 0x23, 0x54, 0x44, 0x95, - 0xa7, 0xdf, 0x79, 0x05, 0xfb, 0xad, 0xc7, 0xcc, 0x87, 0x4f, 0x7e, 0x50, - 0x09, 0xe4, 0x50, 0x12, 0xad, 0x26, 0xd9, 0x44, 0xff, 0xc2, 0xd0, 0x23, - 0xe2, 0x08, 0x90, 0x7a, 0xca, 0x30, 0x98, 0x5b, 0xe0, 0x31, 0x06, 0x18, - 0x24, 0x82, 0xb5, 0x69, 0xfc, 0xce, 0xa2, 0xbd, 0x3d, 0xe3, 0x44, 0xa9, - 0x6e, 0xce, 0x8b, 0x32, 0x97, 0xf8, 0x6f, 0x2d, 0x5d, 0xca, 0x6d, 0x2b, - 0xdc, 0x0d, 0xd7, 0xe3, 0x7c, 0x9b, 0xd1, 0xe7, 0xd6, 0x04, 0xa5, 0x6b, - 0xf9, 0xa4, 0x33, 0xc9, 0xfe, 0x13, 0x56, 0xaa, 0xd2, 0x6e, 0xfc, 0xee, - 0xb7, 0xcd, 0xc1, 0xcc, 0xe0, 0x57, 0xf3, 0x08, 0x7d, 0x99, 0x05, 0xf0, - 0xf1, 0x91, 0xb2, 0x2b, 0x91, 0x80, 0x99, 0x63, 0x97, 0x1a, 0x5e, 0x93, - 0x89, 0x16, 0xcd, 0x5e, 0xf9, 0xe7, 0x3c, 0x53, 0xbe, 0x94, 0x38, 0x5a, - 0x3b, 0xd5, 0x16, 0xe0, 0x74, 0x96, 0x4f, 0x2f, 0x6d, 0xee, 0x9e, 0xd3, - 0xbb, 0x58, 0xff, 0x7e, 0xb6, 0x0b, 0x18, 0xe1, 0xf7, 0x04, 0x67, 0x7b, - 0x0d, 0x55, 0x57, 0x82, 0xe4, 0x1e, 0x8c, 0x31, 0xf0, 0xe9, 0x15, 0x55, - 0xda, 0x43, 0xc4, 0xba, 0x7a, 0x26, 0xf2, 0xe0, 0x05, 0xb1, 0x8e, 0x5f, - 0x50, 0x7c, 0x76, 0x00, 0x84, 0xf0, 0x3d, 0x58, 0x3d, 0xe3, 0x58, 0xca, - 0x9e, 0xb0, 0x95, 0xa7, 0x92, 0x47, 0xc7, 0xe0, 0x70, 0x3a, 0xd3, 0x27, - 0x06, 0xb6, 0x0d, 0x26, 0xc1, 0x87, 0xdf, 0xb3, 0x01, 0xd2, 0xea, 0x77, - 0x71, 0x30, 0xdb, 0x9e, 0x3d, 0x0b, 0xed, 0x2d, 0xb5, 0x39, 0x4f, 0x4b, - 0x0d, 0x26, 0xeb, 0xff, 0x73, 0x0c, 0xde, 0x01, 0xca, 0xb8, 0x8e, 0x6e, - 0xff, 0x0a, 0xda, 0xea, 0x4c, 0x02, 0x3e, 0x5b, 0x0b, 0x79, 0xeb, 0xb2, - 0x26, 0xb7, 0x01, 0xfe, 0xcc, 0x2f, 0x44, 0xa1, 0x14, 0x14, 0x57, 0x97, - 0xab, 0xc0, 0xac, 0x0b, 0x43, 0x73, 0x67, 0xff, 0xbf, 0x51, 0xae, 0xaa, - 0xa0, 0x28, 0xbe, 0xd9, 0xc7, 0x8b, 0xf4, 0x3f, 0xdb, 0x61, 0x01, 0x1a, - 0x65, 0x90, 0x05, 0xcb, 0x0c, 0x43, 0xd0, 0x2e, 0xf4, 0xce, 0xcc, 0xe9, - 0x88, 0xe8, 0x8b, 0x8a, 0x1c, 0x87, 0x29, 0xc4, 0xe1, 0xcb, 0xaa, 0xfd, - 0x70, 0xe5, 0xd4, 0x3f, 0x2a, 0xbf, 0x2f, 0x3a, 0x63, 0x29, 0x0c, 0xcf, - 0xe7, 0x61, 0xb3, 0xfc, 0xf4, 0x52, 0x35, 0x2f, 0x09, 0x57, 0x57, 0x78, - 0xd0, 0xb6, 0x81, 0xa1, 0x58, 0xfe, 0x65, 0xf9, 0x1d, 0x15, 0x57, 0xbe, - 0xbc, 0x95, 0x46, 0xfc, 0x5e, 0x1c, 0x9d, 0x84, 0x0e, 0x4d, 0x11, 0x14, - 0x9e, 0x65, 0xd6, 0xc9, 0xb9, 0xe5, 0x87, 0x33, 0x68, 0xa8, 0x5f, 0x82, - 0x90, 0xaf, 0x90, 0xe6, 0xbd, 0x62, 0x31, 0xf0, 0xfa, 0x5b, 0xcf, 0x2c, - 0x67, 0xe7, 0xf4, 0x05, 0xe3, 0xb9, 0x45, 0x92, 0x16, 0xbf, 0x0f, 0x5a, - 0x74, 0xd1, 0xdb, 0x24, 0x16, 0x9e, 0xb9, 0xd8, 0x2c, 0xc2, 0x46, 0x24, - 0xbc, 0xaa, 0x1b, 0x9f, 0xd0, 0xad, 0x18, 0x11, 0xb9, 0x9e, 0x8e, 0x46, - 0x75, 0xf3, 0x81, 0x37, 0x46, 0x99, 0x43, 0xad, 0x69, 0xf8, 0x75, 0x79, - 0xae, 0x2c, 0xeb, 0xb1, 0x77, 0x29, 0x47, 0x15, 0x95, 0x21, 0xa0, 0xf6, - 0xec, 0xb9, 0xcc, 0xa0, 0x6a, 0xfd, 0x47, 0x0f, 0x98, 0x5f, 0x12, 0xaf, - 0xed, 0x8b, 0x11, 0xe4, 0xcf, 0x93, 0x31, 0x79, 0x50, 0x08, 0xb0, 0x28, - 0x91, 0x56, 0xd9, 0x05, 0x16, 0x43, 0xc5, 0x84, 0x50, 0x43, 0x0f, 0x47, - 0xc9, 0x3a, 0xb4, 0xef, 0x39, 0xf0, 0xb1, 0xb5, 0x2c, 0xab, 0x3b, 0xbb, - 0xed, 0xaf, 0x64, 0x59, 0x5e, 0x6b, 0xa0, 0x0c, 0x6c, 0xf6, 0x4f, 0x69, - 0x4f, 0xf1, 0xaa, 0x02, 0x1d, 0x25, 0xa0, 0x39, 0xc8, 0xc7, 0xb4, 0x99, - 0xb8, 0x77, 0xf3, 0x10, 0x1a, 0x52, 0x50, 0x3a, 0xcc, 0x14, 0x90, 0x85, - 0x75, 0x63, 0xf8, 0x31, 0x14, 0x56, 0x0c, 0xa0, 0xc2, 0x83, 0x1f, 0xa7, - 0xcc, 0xc3, 0x69, 0xd8, 0xef, 0x2e, 0x30, 0x13, 0xbb, 0x15, 0xfc, 0x61, - 0xbc, 0x01, 0x89, 0x41, 0xbe, 0x04, 0x2f, 0x64, 0x3e, 0xa4, 0x0b, 0xf1, - 0x5e, 0x93, 0x7a, 0x85, 0xb0, 0x23, 0xbd, 0xbc, 0x89, 0xc6, 0xb4, 0x27, - 0xdd, 0x41, 0x51, 0xde, 0xe2, 0x05, 0x43, 0xf6, 0x91, 0x80, 0xfa, 0xb8, - 0xab, 0xc5, 0xf5, 0xc8, 0xca, 0x24, 0xa0, 0xc5, 0x50, 0x86, 0x29, 0x82, - 0x84, 0xfd, 0x34, 0x6e, 0xe2, 0x38, 0xd0, 0x86, 0xbe, 0x04, 0xee, 0x50, - 0x56, 0x79, 0x9d, 0x5b, 0xcf, 0xc4, 0x77, 0x8c, 0x60, 0xd9, 0x0b, 0xe6, - 0xc5, 0x7c, 0xef, 0x7f, 0x5e, 0x55, 0x6d, 0x27, 0xc0, 0x6a, 0xdc, 0xe1, - 0x1d, 0x99, 0x87, 0x11, 0xf1, 0x5d, 0xf5, 0xc8, 0x57, 0xd4, 0x30, 0x61, - 0xa1, 0x26, 0xd5, 0x59, 0x67, 0x60, 0xbb, 0x22, 0x96, 0xac, 0x97, 0x11, - 0xda, 0x21, 0xcf, 0xcf, 0x6c, 0x47, 0xbc, 0x17, 0xd6, 0xda, 0x03, 0x2e, - 0x95, 0x2d, 0x88, 0x54, 0xd9, 0xcd, 0x38, 0xb2, 0x08, 0xd7, 0x70, 0x52, - 0x0c, 0xed, 0x83, 0x23, 0x0f, 0xfc, 0x9a, 0x61, 0xca, 0x33, 0x05, 0x62, - 0x41, 0xde, 0x5c, 0xd2, 0xf8, 0x0a, 0xf3, 0xef, 0x2d, 0x2d, 0xc1, 0xb5, - 0x90, 0x01, 0x68, 0x02, 0x69, 0xdb, 0xe8, 0x24, 0xe4, 0x08, 0xa9, 0x17, - 0x04, 0x13, 0xab, 0xdc, 0xa7, 0x9e, 0x6c, 0x74, 0x76, 0x18, 0xe2, 0x55, - 0x05, 0xb6, 0xef, 0x3d, 0x19, 0xc7, 0x64, 0x63, 0xdf, 0x81, 0xc0, 0x97, - 0x4d, 0x78, 0x70, 0xc5, 0xcd, 0x8a, 0xa8, 0x88, 0xf4, 0xd2, 0xb0, 0x4e, - 0xfd, 0xe8, 0x79, 0x75, 0x70, 0x1f, 0x1c, 0xf9, 0x6e, 0xb4, 0xbe, 0xae, - 0x91, 0x65, 0xb4, 0x68, 0xcb, 0xa0, 0x7a, 0x3e, 0x5e, 0x5f, 0x02, 0x8f, - 0x52, 0x00, 0x4b, 0x49, 0x5d, 0x57, 0x9a, 0x37, 0x8d, 0x0a, 0x35, 0xbd, - 0x62, 0x4b, 0x26, 0x13, 0xf8, 0xe5, 0xec, 0xcd, 0x80, 0x47, 0x31, 0x1a, - 0x94, 0x5f, 0x79, 0x11, 0x81, 0x83, 0x41, 0xcf, 0x48, 0x5b, 0x52, 0xb2, - 0x84, 0xfd, 0x9c, 0x40, 0x92, 0xee, 0xb4, 0xad, 0x20, 0x3b, 0xfb, 0x61, - 0x0c, 0xf6, 0x39, 0x73, 0xfc, 0xf9, 0x97, 0x05, 0x41, 0x48, 0x97, 0xea, - 0x3d, 0x49, 0x15, 0x14, 0xad, 0xf4, 0x09, 0xc7, 0x1d, 0x1e, 0xe8, 0x39, - 0x8c, 0xc2, 0x0a, 0x50, 0x94, 0xd0, 0x9c, 0x40, 0x4d, 0x9b, 0xe7, 0x70, - 0x33, 0xbc, 0xd9, 0xf1, 0x37, 0xcb, 0xe1, 0xaf, 0x71, 0x9b, 0xa0, 0xa0, - 0xc7, 0x0d, 0x0b, 0xeb, 0x62, 0x92, 0x35, 0xb8, 0xaf, 0xa9, 0x36, 0x38, - 0x4a, 0x96, 0x01, 0xb0, 0x23, 0x8c, 0x0f, 0x4f, 0x61, 0xdf, 0xb1, 0x7d, - 0xaa, 0xc4, 0xe8, 0x6e, 0xde, 0x5b, 0x76, 0x0e, 0x36, 0xf0, 0x95, 0x1b, - 0x66, 0xcd, 0xcc, 0xe1, 0xd4, 0xe5, 0x59, 0x2b, 0xe6, 0x42, 0x20, 0x75, - 0xc0, 0x7b, 0xdd, 0x26, 0xb8, 0x73, 0xbb, 0x13, 0x55, 0x01, 0xd5, 0xd3, - 0xf2, 0x3d, 0x7c, 0x17, 0x43, 0x8f, 0x11, 0x8f, 0xdf, 0x60, 0x3a, 0xd2, - 0x96, 0x05, 0xf6, 0x55, 0x95, 0x5b, 0x15, 0x8f, 0xbe, 0x32, 0x83, 0xb3, - 0xd6, 0xbf, 0xc9, 0x04, 0x1d, 0x8f, 0x81, 0xab, 0x53, 0x81, 0x28, 0x7d, - 0x05, 0x33, 0xb5, 0xd7, 0xf2, 0x4e, 0x74, 0x0e, 0xfc, 0x81, 0xdf, 0x30, - 0x0e, 0x34, 0x04, 0x7c, 0x79, 0xd5, 0x4a, 0x5c, 0x52, 0xe8, 0xe0, 0x1a, - 0x6b, 0x17, 0x8d, 0x3a, 0xc4, 0x5f, 0xb5, 0x8f, 0x33, 0x65, 0xf7, 0xed, - 0xd2, 0x31, 0xab, 0x15, 0xa1, 0x2f, 0xe4, 0x9a, 0xb4, 0xd4, 0x92, 0x58, - 0x54, 0xc2, 0x97, 0x20, 0x22, 0x1c, 0x70, 0x29, 0x2c, 0xfe, 0xb0, 0x08, - 0x57, 0x98, 0x5c, 0x4d, 0x54, 0x9c, 0x32, 0x49, 0x31, 0x2b, 0xc5, 0x17, - 0x17, 0x1c, 0x76, 0x73, 0x5b, 0x26, 0xe3, 0xef, 0xa9, 0x28, 0x20, 0x90, - 0x33, 0x49, 0x3c, 0xc0, 0x03, 0x7a, 0xf5, 0x3e, 0xd2, 0x7d, 0xbd, 0x35, - 0x06, 0x78, 0x89, 0xb4, 0x6c, 0x6c, 0x3f, 0xeb, 0xac, 0x34, 0xaf, 0x9e, - 0xfc, 0x19, 0xbe, 0x37, 0x9c, 0x54, 0x6d, 0x81, 0xdb, 0xa3, 0x4c, 0x22, - 0x46, 0x78, 0x2d, 0x62, 0x61, 0xc5, 0xed, 0xe9, 0xe8, 0xe4, 0x71, 0xe8, - 0xf8, 0x23, 0x15, 0x4a, 0x4f, 0x0e, 0xaa, 0x56, 0xad, 0x44, 0xde, 0x43, - 0x19, 0xcb, 0xaf, 0x89, 0x52, 0x82, 0x58, 0xc4, 0xac, 0xa0, 0x8e, 0x9d, - 0x20, 0x99, 0xf2, 0xd2, 0xc3, 0x2e, 0xb7, 0x04, 0x94, 0x6f, 0xc1, 0x1e, - 0x4e, 0x09, 0x90, 0x36, 0xb2, 0x37, 0x6d, 0x58, 0x09, 0x72, 0xcf, 0xac, - 0xcb, 0xb8, 0xdd, 0x07, 0x07, 0x8b, 0x99, 0x90, 0x1a, 0xb9, 0xf4, 0x5b, - 0xd6, 0xe4, 0x51, 0x0a, 0x49, 0x5d, 0x34, 0x3d, 0xe4, 0xe3, 0x4a, 0xb7, - 0xc7, 0xe1, 0x1c, 0x47, 0xc6, 0x83, 0x0a, 0x6f, 0xb4, 0x1e, 0x62, 0xb4, - 0x3e, 0x73, 0xa7, 0xc4, 0xc6, 0x36, 0x86, 0x95, 0xf3, 0xe8, 0x59, 0xab, - 0xe3, 0x2a, 0x1e, 0xb5, 0xce, 0x85, 0xe5, 0x26, 0x54, 0x52, 0x32, 0x28, - 0xe7, 0x00, 0x4d, 0xdd, 0x1c, 0x66, 0x0f, 0x0d, 0xcf, 0x9e, 0xdb, 0xfa, - 0xb7, 0x62, 0xa4, 0x81, 0x24, 0x58, 0xe5, 0xd8, 0xa4, 0xdb, 0x29, 0x61, - 0xbe, 0x15, 0x93, 0x83, 0x56, 0x11, 0x56, 0xfa, 0x6a, 0xb4, 0xb4, 0x58, - 0x65, 0x9f, 0x52, 0x1e, 0xdb, 0x74, 0x14, 0x0d, 0x72, 0x4e, 0xc7, 0x85, - 0x97, 0x51, 0x36, 0xd8, 0x37, 0x09, 0xb8, 0xd2, 0x4f, 0xb3, 0x77, 0x56, - 0x13, 0xe3, 0x76, 0xcd, 0x24, 0x45, 0x8d, 0xc8, 0x20, 0xa4, 0x1e, 0x93, - 0xd7, 0xa0, 0x8a, 0x21, 0x5a, 0xa1, 0x6b, 0x01, 0xf1, 0x94, 0xb4, 0xe0, - 0x33, 0xc5, 0xbe, 0x18, 0xd4, 0xdc, 0xea, 0xd1, 0xbc, 0xe9, 0x58, 0x73, - 0x21, 0x58, 0x28, 0x4e, 0xb6, 0x02, 0x6a, 0xca, 0x70, 0x11, 0x78, 0x35, - 0xc8, 0x78, 0xf5, 0x4d, 0xb8, 0xda, 0x51, 0x3e, 0x6c, 0xd5, 0x46, 0x31, - 0x5d, 0x69, 0xfb, 0xc2, 0x6f, 0x2f, 0xae, 0xa9, 0x79, 0x6c, 0x0b, 0xfd, - 0x6b, 0xed, 0xe0, 0x35, 0xac, 0xc9, 0x11, 0x5f, 0x06, 0x90, 0x80, 0x59, - 0x47, 0xcb, 0xd8, 0x21, 0xed, 0x08, 0x46, 0x87, 0xd4, 0x4b, 0xf1, 0x15, - 0x74, 0x32, 0x72, 0x66, 0xde, 0x6a, 0xb9, 0xf1, 0x8d, 0x27, 0xdc, 0x59, - 0x44, 0xa3, 0x11, 0x32, 0xd8, 0x57, 0xb6, 0x9e, 0xe7, 0x09, 0xaa, 0x58, - 0xa6, 0x87, 0x1e, 0xb9, 0xc8, 0xcd, 0xde, 0xa9, 0xbe, 0x53, 0x6d, 0x42, - 0xaa, 0x87, 0x74, 0x96, 0x50, 0xaf, 0xdd, 0xf1, 0xe2, 0xcf, 0xa3, 0x99, - 0xbd, 0x6f, 0xb8, 0x48, 0xcc, 0x80, 0x73, 0xa8, 0xbb, 0x69, 0x72, 0xa6, - 0x41, 0x16, 0xad, 0xc3, 0xa6, 0x8c, 0x23, 0x2a, 0xf0, 0x02, 0xfc, 0x56, - 0x1a, 0x41, 0xd3, 0xe9, 0xcf, 0x08, 0x05, 0xb2, 0xd8, 0x56, 0xb7, 0x7a, - 0x19, 0xa1, 0x89, 0x1e, 0x31, 0x03, 0x50, 0x4d, 0x19, 0x4e, 0x64, 0x3e, - 0xd5, 0xfb, 0x16, 0xfd, 0x91, 0x33, 0x83, 0x67, 0x04, 0xc9, 0xea, 0x98, - 0x17, 0xe2, 0x9d, 0x2a, 0x82, 0x7b, 0x2c, 0xb8, 0xbf, 0x35, 0x05, 0xa8, - 0x1b, 0x66, 0xed, 0x7c, 0x12, 0x42, 0x1e, 0xee, 0x1b, 0xa9, 0xa4, 0xab, - 0x25, 0x8c, 0x01, 0x8e, 0x5e, 0x7b, 0x77, 0x40, 0x7e, 0x49, 0xbf, 0x2a, - 0x19, 0x1e, 0x6b, 0xcc, 0x34, 0x45, 0x4f, 0xa8, 0x22, 0xf5, 0x14, 0x68, - 0x87, 0x53, 0x7e, 0x5f, 0xa1, 0x46, 0x9d, 0xfe, 0x9d, 0x44, 0xaa, 0x52, - 0xc3, 0xab, 0xf2, 0xc0, 0x5d, 0xfe, 0x88, 0xe2, 0x99, 0x1f, 0xf2, 0xd9, - 0xa5, 0x75, 0x40, 0xfa, 0x99, 0xbe, 0x9d, 0xc2, 0xfd, 0x0a, 0xd4, 0x7b, - 0xdd, 0x17, 0xed, 0x2a, 0x75, 0xc7, 0x4c, 0xd4, 0x3a, 0x76, 0xb3, 0x72, - 0xa5, 0x48, 0x8f, 0x10, 0xf3, 0x2b, 0x1f, 0x2f, 0xa5, 0x3c, 0xe8, 0x8b, - 0x39, 0x5d, 0x30, 0x7d, 0x49, 0xfb, 0x4b, 0x20, 0x63, 0x98, 0xb8, 0x59, - 0x53, 0xc8, 0x3c, 0x59, 0xc6, 0x63, 0xb6, 0xe4, 0x70, 0x6b, 0xbc, 0x1b, - 0x0e, 0x0b, 0x29, 0x69, 0xc7, 0xc4, 0xbf, 0xfa, 0x58, 0x29, 0xa5, 0x19, - 0x3c, 0x55, 0x78, 0xfc, 0xcb, 0xf1, 0x8a, 0xab, 0x7c, 0xa0, 0x25, 0x48, - 0x5d, 0x4b, 0x5b, 0x49, 0xca, 0xa7, 0xf8, 0x23, 0x68, 0x84, 0x1f, 0xd2, - 0x6b, 0xdf, 0x5c, 0xcc, 0x8d, 0x4d, 0x97, 0xa5, 0xc7, 0x7e, 0xa4, 0xda, - 0x26, 0xbe, 0xfb, 0x9c, 0x8d, 0xaa, 0x4d, 0xb0, 0x38, 0x05, 0x08, 0x68, - 0xf4, 0x43, 0x28, 0x44, 0xf8, 0x65, 0x54, 0xc7, 0x50, 0xe7, 0x9d, 0x58, - 0x15, 0x01, 0x38, 0x55, 0xfb, 0xc5, 0x4a, 0x42, 0xa8, 0x24, 0xac, 0x84, - 0x9b, 0xb3, 0x52, 0x74, 0xf0, 0xdb, 0xdc, 0x37, 0x32, 0x79, 0x54, 0xf2, - 0x68, 0x1b, 0x0c, 0x3a, 0x96, 0x20, 0xcc, 0x8d, 0x05, 0xc3, 0xe5, 0x2b, - 0x2f, 0xe6, 0xb8, 0xfc, 0x39, 0xa4, 0xc0, 0xd6, 0x91, 0xc0, 0x88, 0xf6, - 0xcb, 0x11, 0x67, 0x11, 0xcf, 0x0f, 0x1d, 0xd9, 0xea, 0x84, 0xa4, 0xe3, - 0xa6, 0x34, 0x41, 0x7a, 0x9d, 0x37, 0x38, 0x13, 0xe6, 0xbd, 0xba, 0xa7, - 0xfd, 0x13, 0x43, 0xb4, 0x00, 0xab, 0xe2, 0x14, 0xd4, 0x62, 0x48, 0x3d, - 0x73, 0x0a, 0x26, 0xcb, 0xf5, 0x75, 0xd0, 0x3c, 0x00, 0xb1, 0x5a, 0xc9, - 0xa3, 0xe1, 0xd6, 0x2e, 0x06, 0xc3, 0xda, 0x4c, 0x72, 0xd7, 0x6f, 0x98, - 0x89, 0x7d, 0x6f, 0xb8, 0xe7, 0x52, 0x3c, 0xc1, 0x64, 0x87, 0x47, 0x18, - 0x8c, 0xe7, 0x8e, 0x5e, 0x01, 0xf5, 0x9b, 0x35, 0x82, 0x33, 0xb7, 0xcb, - 0x9c, 0x99, 0x6a, 0x38, 0x9d, 0x2d, 0xbb, 0x5e, 0x7e, 0x0d, 0xdc, 0x3a, - 0xda, 0xc0, 0xba, 0x87, 0x07, 0xda, 0x94, 0x75, 0xa4, 0xf9, 0xed, 0xb9, - 0xe5, 0xc7, 0xdb, 0xe8, 0x2c, 0xac, 0x4c, 0x65, 0xc4, 0x9f, 0xd9, 0x7b, - 0xb9, 0x8f, 0x3a, 0xd5, 0x0c, 0x14, 0x40, 0x19, 0x54, 0x21, 0xad, 0xc0, - 0x55, 0x68, 0x99, 0xbe, 0xf4, 0xab, 0x89, 0xdc, 0x11, 0x06, 0xb9, 0x59, - 0xfc, 0x4a, 0xda, 0x72, 0xe4, 0x27, 0xf5, 0x26, 0xb9, 0xb6, 0xfe, 0x87, - 0x6e, 0x3f, 0xaf, 0x63, 0xcc, 0xd7, 0x1e, 0x95, 0x8e, 0x2b, 0xb5, 0xba, - 0x0a, 0x54, 0x37, 0x91, 0xf9, 0x7b, 0xc4, 0x4e, 0xe2, 0xe6, 0x11, 0x1e, - 0xb4, 0x9f, 0xcd, 0x45, 0xf3, 0x53, 0x71, 0x3b, 0xbc, 0xfa, 0x45, 0x2c, - 0x0b, 0x9d, 0x62, 0x7d, 0x73, 0x5a, 0xb0, 0x26, 0x86, 0x30, 0x54, 0x33, - 0x72, 0xc9, 0xae, 0x1b, 0xfe, 0xbe, 0x36, 0x24, 0xd0, 0xcc, 0xcd, 0xd8, - 0xd4, 0x66, 0x49, 0x8f, 0xdd, 0x4e, 0xb2, 0xa9, 0x66, 0x6e, 0x78, 0xcc, - 0xb5, 0x3e, 0xf3, 0xba, 0xe9, 0x8c, 0x38, 0x3e, 0xc1, 0xdd, 0xef, 0x5c, - 0x89, 0xfb, 0x5e, 0xca, 0x12, 0xfd, 0x19, 0x80, 0x73, 0x56, 0x39, 0x23, - 0x19, 0x2a, 0x3e, 0xae, 0xb5, 0xc0, 0xf0, 0x81, 0x88, 0x0f, 0x60, 0xae, - 0x16, 0xa6, 0x3e, 0x5c, 0xbb, 0xda, 0x7d, 0x9c, 0x38, 0xdd, 0x97, 0xd7, - 0x31, 0x5f, 0x0b, 0x50, 0x45, 0x6f, 0xc5, 0x96, 0x49, 0x8e, 0x5f, 0x47, - 0xe4, 0xaa, 0xeb, 0x7d, 0x58, 0x7a, 0x51, 0xfc, 0xc2, 0x81, 0x5b, 0xc1, - 0x8d, 0xc2, 0xf1, 0xd5, 0xbb, 0x8a, 0x1e, 0xe9, 0xd8, 0x9c, 0x45, 0x51, - 0x0a, 0x8c, 0x42, 0xff, 0xcd, 0xce, 0x09, 0xf7, 0x89, 0x45, 0xee, 0x3b, - 0x3b, 0x51, 0x4f, 0xdc, 0xf1, 0x16, 0x4b, 0x8f, 0xa1, 0x78, 0xcb, 0x9a, - 0x44, 0xbe, 0xde, 0x09, 0x77, 0x2d, 0xdb, 0x68, 0x04, 0x9d, 0x9e, 0x41, - 0x7a, 0x1e, 0x8d, 0xf0, 0x09, 0x46, 0xb7, 0xd2, 0x6a, 0xc8, 0x8f, 0x8b, - 0x2d, 0xb0, 0x81, 0x96, 0xda, 0xbe, 0x70, 0xf1, 0x19, 0xfc, 0x53, 0x45, - 0xdb, 0x25, 0x87, 0x66, 0x5c, 0x1f, 0x49, 0xec, 0x0f, 0x5a, 0xb3, 0xab, - 0xb0, 0x0c, 0x43, 0x98, 0xcc, 0x38, 0xac, 0x53, 0xbf, 0x2e, 0x2f, 0x1f, - 0x66, 0x63, 0x8b, 0xfe, 0xc5, 0x82, 0x65, 0xd5, 0xcb, 0xdf, 0xc1, 0xa2, - 0x23, 0x2f, 0xd3, 0x37, 0x05, 0x7f, 0x16, 0xdb, 0xfc, 0x1f, 0x1d, 0xea, - 0xf9, 0x5f, 0x06, 0x86, 0x35, 0xff, 0x0f, 0xf6, 0x68, 0x60, 0xd9, 0x29, - 0xc9, 0x72, 0xc0, 0xe9, 0x87, 0x24, 0xe2, 0x97, 0x5a, 0x80, 0x0a, 0x09, - 0x51, 0xe0, 0x65, 0x9a, 0x25, 0x6a, 0xd4, 0x79, 0x9c, 0xb4, 0xe4, 0xa6, - 0xef, 0x5c, 0x33, 0xdf, 0xc1, 0xd9, 0xb1, 0x6e, 0x6d, 0x34, 0x1d, 0x16, - 0x3b, 0xc2, 0x4e, 0x5c, 0x3a, 0xbe, 0x1b, 0x05, 0x7e, 0x22, 0x05, 0x0e, - 0x8b, 0x76, 0x39, 0xc5, 0xa7, 0x0f, 0xe2, 0x7d, 0x11, 0x81, 0x7e, 0x32, - 0x1c, 0xcb, 0xf3, 0xe3, 0xbc, 0x6e, 0x48, 0x5c, 0xa5, 0xbf, 0x95, 0x18, - 0xb5, 0x38, 0x63, 0xdd, 0xca, 0xa1, 0xaf, 0x7c, 0x4c, 0x97, 0xff, 0x71, - 0xe6, 0x06, 0x21, 0xec, 0x11, 0x88, 0xf5, 0x88, 0x47, 0xcf, 0x94, 0x7f, - 0x45, 0xd1, 0x08, 0x7b, 0xfd, 0xf5, 0xef, 0xf0, 0x32, 0x15, 0x91, 0xa2, - 0x3e, 0xbc, 0xca, 0x41, 0x39, 0xe7, 0xed, 0x91, 0x67, 0x49, 0x97, 0x38, - 0x4e, 0x63, 0xe9, 0xa0, 0x27, 0x2f, 0xe0, 0x39, 0xbb, 0x8d, 0x2c, 0xb1, - 0x18, 0x20, 0x63, 0x7e, 0x8a, 0x34, 0x5a, 0x40, 0x58, 0x80, 0xab, 0x01, - 0x56, 0xab, 0x01, 0x52, 0xf8, 0xbf, 0x21, 0x88, 0xe6, 0xec, 0x7f, 0xef, - 0x2d, 0xda, 0x7f, 0x5e, 0x0f, 0xa6, 0x43, 0xc6, 0x47, 0xf6, 0xcb, 0x7a, - 0xcc, 0xb6, 0xbb, 0x8a, 0x0b, 0x1c, 0x33, 0x85, 0xe6, 0xa3, 0xad, 0x35, - 0x7a, 0xb7, 0x74, 0x75, 0xfc, 0xe6, 0xa0, 0x81, 0x18, 0x22, 0xbf, 0x25, - 0xe8, 0xc7, 0xd4, 0xc1, 0x57, 0x30, 0x32, 0x51, 0x82, 0x37, 0x34, 0x95, - 0xdf, 0x3a, 0x96, 0xc1, 0xa6, 0xdc, 0x63, 0x18, 0x84, 0xd6, 0xd0, 0xb9, - 0xa0, 0x52, 0x6b, 0x7b, 0x39, 0x8b, 0x1e, 0x4d, 0xdc, 0xa1, 0xaf, 0x4e, - 0x42, 0xba, 0xa5, 0x3b, 0x41, 0x02, 0xd1, 0x4d, 0x03, 0x81, 0xe9, 0x14, - 0xf0, 0x97, 0x3f, 0x6a, 0x61, 0xe8, 0x8e, 0xe5, 0xd6, 0xc3, 0x2d, 0x8b, - 0xa6, 0x50, 0x0b, 0xb9, 0x8d, 0x09, 0x77, 0xd2, 0xc6, 0x7a, 0x86, 0x36, - 0x8a, 0x9e, 0x8a, 0x46, 0x96, 0x26, 0x7d, 0xe7, 0x97, 0xf6, 0x62, 0xa4, - 0x42, 0x98, 0x07, 0x2d, 0x6f, 0x78, 0x8c, 0xcf, 0x8a, 0x4e, 0xf9, 0x8d, - 0xef, 0x28, 0x80, 0x18, 0x62, 0x92, 0x37, 0xa2, 0x26, 0x69, 0x9c, 0x54, - 0x1f, 0x12, 0x86, 0xd5, 0x4b, 0xc8, 0xc1, 0xf2, 0x61, 0xb2, 0x8b, 0xee, - 0x4f, 0x47, 0xcc, 0xcf, 0x7b, 0xae, 0x23, 0xd0, 0x33, 0x5e, 0x08, 0x74, - 0xb2, 0x34, 0x94, 0xca, 0xf0, 0xfb, 0x5a, 0x70, 0xad, 0x82, 0x00, 0x93, - 0x4a, 0xbf, 0x19, 0xe5, 0x66, 0xf8, 0x41, 0xfc, 0xc2, 0x85, 0x12, 0x5e, - 0x82, 0x46, 0xcd, 0xb3, 0x2d, 0xac, 0x47, 0x58, 0x43, 0x37, 0x90, 0x42, - 0x8e, 0x26, 0x0b, 0xd2, 0x05, 0x8e, 0x9f, 0x56, 0x74, 0xcd, 0xf9, 0x44, - 0xe0, 0xfd, 0x6e, 0x4f, 0x74, 0xbc, 0xd5, 0x39, 0x93, 0xbf, 0xba, 0x47, - 0xd8, 0x8d, 0x00, 0xb5, 0x1c, 0xf4, 0x50, 0xa8, 0xcf, 0xf1, 0x25, 0xaf, - 0x27, 0xdc, 0x5c, 0x43, 0xce, 0x73, 0xf6, 0xe8, 0xd8, 0x95, 0x98, 0xef, - 0x4b, 0xf3, 0xc4, 0x5a, 0x91, 0xef, 0xa8, 0x40, 0x4f, 0xe7, 0xc1, 0x94, - 0x9a, 0xdd, 0xf7, 0x38, 0x1e, 0x81, 0x60, 0xb8, 0xb7, 0x46, 0x2d, 0xa9, - 0x23, 0x5a, 0x62, 0x90, 0x97, 0xc6, 0xdf, 0x6f, 0xf8, 0xe3, 0xc5, 0xe0, - 0x1b, 0x82, 0xba, 0xb1, 0x18, 0x3d, 0x48, 0xee, 0x01, 0x32, 0x48, 0x10, - 0x78, 0x36, 0xa6, 0x55, 0xfa, 0xff, 0xa5, 0xc8, 0x15, 0x59, 0x2a, 0x88, - 0xc3, 0xea, 0xd0, 0x2e, 0x15, 0xfb, 0x3f, 0x08, 0xf2, 0xaf, 0x29, 0x10, - 0xa6, 0xa4, 0x28, 0xb0, 0xc1, 0xe8, 0x3d, 0x15, 0xfb, 0xc7, 0xc4, 0x83, - 0x37, 0x48, 0x97, 0x39, 0xb3, 0xfe, 0xe5, 0x70, 0xfb, 0x43, 0xb2, 0x9e, - 0x82, 0x20, 0x94, 0xbe, 0x59, 0xe4, 0xa7, 0x02, 0x63, 0x10, 0xa2, 0xae, - 0xc4, 0x61, 0x57, 0x1d, 0x20, 0x1b, 0x37, 0xf9, 0x73, 0x6f, 0x8c, 0xc8, - 0xa3, 0x40, 0x57, 0x82, 0x82, 0xb2, 0x0c, 0x75, 0xb4, 0xfe, 0xd8, 0x2c, - 0xd2, 0xa0, 0x18, 0x5d, 0x61, 0x10, 0x40, 0xc2, 0x99, 0xd6, 0x6b, 0xd3, - 0x54, 0x26, 0x54, 0x07, 0xa1, 0x28, 0x5d, 0xff, 0x37, 0x17, 0xff, 0xa2, - 0x33, 0x87, 0xee, 0x51, 0x6a, 0x27, 0x96, 0x35, 0xe3, 0x87, 0x8a, 0x1e, - 0x26, 0x56, 0xc8, 0x71, 0x34, 0x53, 0x25, 0x7a, 0x10, 0x5e, 0x8c, 0x37, - 0xe8, 0x03, 0x25, 0xf9, 0x70, 0x0a, 0xb5, 0x41, 0xce, 0xc8, 0x7f, 0x36, - 0x1d, 0x19, 0x52, 0xf3, 0x54, 0x2c, 0x27, 0xea, 0xdb, 0x7a, 0x44, 0xea, - 0x19, 0x8c, 0x11, 0x0e, 0x41, 0x2f, 0xd1, 0xa4, 0xa6, 0x1a, 0x2e, 0x89, - 0xc3, 0x78, 0x19, 0x95, 0xce, 0xbc, 0x00, 0x06, 0x90, 0xb4, 0x1f, 0x9b, - 0x14, 0xbc, 0x13, 0x9b, 0xfc, 0x68, 0xfa, 0x9c, 0x39, 0x6f, 0xc2, 0x64, - 0xcc, 0xdc, 0xf8, 0x7e, 0xae, 0x8e, 0x05, 0xcf, 0xe1, 0xab, 0x38, 0x46, - 0xbd, 0x58, 0x8d, 0x49, 0xc5, 0xa0, 0x75, 0x44, 0xbd, 0xca, 0x79, 0xf8, - 0xbe, 0xb7, 0xe4, 0x8a, 0x93, 0x29, 0xb8, 0x5d, 0xe7, 0x3c, 0x4f, 0xb8, - 0x33, 0x62, 0x4a, 0xbb, 0xaf, 0xf3, 0xb5, 0xfc, 0xf5, 0x30, 0x8e, 0x11, - 0x8a, 0x01, 0x20, 0x3e, 0xde, 0xaf, 0x95, 0xb5, 0xd9, 0x39, 0x5f, 0xa4, - 0x1c, 0x8f, 0x2f, 0x30, 0xa6, 0x22, 0x3b, 0x86, 0xc6, 0x2a, 0xff, 0x6d, - 0x8e, 0x83, 0x9c, 0xc8, 0x42, 0x74, 0x3d, 0x76, 0x55, 0xab, 0xe5, 0x17, - 0xda, 0x64, 0xff, 0x96, 0xcd, 0x30, 0xe7, 0xe7, 0x6a, 0x1b, 0x46, 0xa0, - 0x24, 0x99, 0x18, 0x21, 0x39, 0xeb, 0x6a, 0xb5, 0xd1, 0x11, 0xdd, 0xf2, - 0xb4, 0x6a, 0xac, 0x55, 0x3e, 0xf9, 0xbe, 0x20, 0x0c, 0x51, 0x24, 0xe9, - 0xae, 0xdf, 0x59, 0xa8, 0xef, 0xcd, 0xfc, 0xea, 0xb6, 0xe0, 0x61, 0x7d, - 0xd3, 0x2a, 0x8f, 0x21, 0xde, 0x20, 0xa8, 0x2e, 0xbe, 0x28, 0x62, 0xaa, - 0x95, 0xae, 0x25, 0x14, 0xd0, 0x55, 0x0f, 0x90, 0xb4, 0x03, 0xad, 0xf9, - 0xb4, 0x93, 0x0d, 0x7a, 0xff, 0xa9, 0x5b, 0x61, 0x3a, 0x36, 0xe0, 0x15, - 0xc9, 0x82, 0xe8, 0x1d, 0x22, 0xd8, 0x57, 0xa4, 0x75, 0x06, 0xe8, 0x86, - 0x06, 0x2c, 0x0a, 0xd3, 0x13, 0x62, 0x90, 0xba, 0xf2, 0xde, 0x77, 0xe3, - 0x80, 0x51, 0x99, 0xb3, 0xcc, 0x8d, 0x43, 0xdb, 0xc0, 0xcc, 0x45, 0x87, - 0xb8, 0x2a, 0xa8, 0x81, 0x20, 0x3b, 0xa1, 0xa0, 0x0c, 0xc6, 0x91, 0x53, - 0x4b, 0x21, 0xd5, 0x5f, 0x39, 0x12, 0x0b, 0x27, 0x9f, 0x15, 0x4a, 0xea, - 0xec, 0x49, 0x71, 0x4c, 0x2d, 0x2d, 0xa0, 0x89, 0x8f, 0x0c, 0x98, 0x20, - 0x5a, 0x45, 0xf2, 0xdf, 0x2e, 0x58, 0x48, 0xcc, 0x2c, 0xba, 0x93, 0x0f, - 0x96, 0x6f, 0x0d, 0x30, 0xcd, 0x82, 0xc4, 0xd1, 0xc0, 0x6a, 0xeb, 0x5e, - 0x5d, 0x02, 0xaa, 0x46, 0xab, 0x7f, 0x5f, 0x80, 0x72, 0x25, 0xad, 0xc4, - 0x04, 0x5e, 0x10, 0xee, 0xa4, 0xf6, 0x83, 0x50, 0x0e, 0x24, 0x2b, 0xdc, - 0xaf, 0x8c, 0x0f, 0x2e, 0x88, 0x88, 0xe5, 0xb6, 0xe0, 0x18, 0xfd, 0xdb, - 0xbd, 0x80, 0xe2, 0x53, 0x0e, 0xdb, 0x6d, 0x2b, 0x1c, 0x28, 0xd2, 0x33, - 0xd6, 0x43, 0x32, 0xc5, 0x3a, 0x1a, 0x7e, 0xee, 0x4b, 0x01, 0x28, 0xb3, - 0x8b, 0x43, 0xf8, 0xea, 0x4f, 0xe4, 0x19, 0x07, 0x95, 0x76, 0x1f, 0xec, - 0x1d, 0xe7, 0x6d, 0xac, 0xe5, 0x64, 0x9e, 0x3d, 0x16, 0x83, 0x56, 0x35, - 0xf3, 0xaa, 0xd0, 0xcd, 0x3b, 0x64, 0x81, 0x90, 0x0d, 0xdf, 0x3c, 0x86, - 0x17, 0xff, 0xf6, 0x9d, 0x64, 0x42, 0xcc, 0xc5, 0x41, 0x9b, 0x4d, 0x26, - 0x2b, 0x47, 0xa8, 0x53, 0xf9, 0x58, 0xc3, 0x51, 0x00, 0x31, 0x19, 0xa3, - 0xef, 0xeb, 0x21, 0x6d, 0x78, 0x7f, 0x45, 0xe6, 0x24, 0xcb, 0x90, 0x09, - 0xe8, 0x95, 0x0a, 0xde, 0x34, 0xfd, 0x21, 0xaf, 0x61, 0x34, 0x5d, 0xd3, - 0x61, 0x49, 0x4d, 0x26, 0x00, 0xbc, 0x13, 0xc4, 0xbb, 0x96, 0xfa, 0x3e, - 0x3d, 0x8c, 0xe7, 0x4f, 0xfa, 0x27, 0xb5, 0x46, 0x71, 0xf3, 0x01, 0x68, - 0xe9, 0x09, 0x28, 0xe7, 0x0f, 0x97, 0x0e, 0x69, 0xe3, 0x30, 0x86, 0xef, - 0x0d, 0x25, 0x33, 0x43, 0x4c, 0xc8, 0x8a, 0xbb, 0x13, 0x27, 0x08, 0x46, - 0x54, 0xa6, 0x28, 0x57, 0xf5, 0xcc, 0x61, 0x55, 0x67, 0xae, 0x43, 0x88, - 0xa9, 0x27, 0xe1, 0x3c, 0x61, 0xda, 0x9b, 0x18, 0xc8, 0x60, 0x06, 0x27, - 0xf7, 0x67, 0x45, 0xbd, 0xb9, 0x0c, 0x96, 0x73, 0x30, 0x1a, 0x9a, 0x5f, - 0xfa, 0x16, 0xa5, 0xbe, 0xc7, 0xed, 0x4a, 0x98, 0xf8, 0x13, 0xaa, 0x89, - 0x92, 0xa2, 0x77, 0xb6, 0x66, 0x9d, 0x20, 0x83, 0xd2, 0x25, 0xbb, 0x9e, - 0x70, 0xb8, 0x27, 0x63, 0x93, 0x29, 0x55, 0x61, 0x7c, 0xa3, 0x34, 0xeb, - 0xa5, 0x3d, 0xa6, 0x71, 0x75, 0x77, 0x55, 0xc9, 0xf7, 0x44, 0xad, 0xa0, - 0xac, 0xb5, 0x46, 0x41, 0x23, 0x57, 0x4d, 0x3b, 0x1e, 0xea, 0x38, 0x3b, - 0xab, 0xe5, 0x2b, 0xcc, 0x2b, 0x5a, 0xae, 0x84, 0xf1, 0x22, 0xc5, 0x2e, - 0xec, 0xe8, 0x0c, 0xbe, 0xb9, 0xe1, 0x20, 0xaa, 0x59, 0xc0, 0xd9, 0x40, - 0xe0, 0x5d, 0xdc, 0x73, 0x01, 0x0b, 0x1a, 0x08, 0x82, 0x98, 0x8e, 0x92, - 0x3d, 0xf2, 0x74, 0xa2, 0xfe, 0x47, 0x17, 0x46, 0x3e, 0xc6, 0xaa, 0xa3, - 0xc0, 0xcd, 0xd0, 0x2e, 0xbe, 0x5b, 0xd8, 0x6c, 0x10, 0xc3, 0x1b, 0x2d, - 0xd2, 0x83, 0x70, 0xa0, 0xf4, 0x66, 0xad, 0x9f, 0x89, 0x5c, 0x8b, 0xde, - 0xb0, 0x7c, 0x46, 0x9d, 0x2a, 0xd4, 0x9a, 0x75, 0x29, 0x0b, 0x62, 0x0a, - 0xb4, 0x1f, 0xeb, 0x81, 0x76, 0x70, 0x71, 0x37, 0xc6, 0xa0, 0xce, 0xab, - 0x75, 0xeb, 0x73, 0xac, 0x1a, 0x1d, 0x8b, 0x39, 0x13, 0xca, 0xfa, 0x17, - 0x62, 0x75, 0xf2, 0x2e, 0xe3, 0x62, 0xb2, 0xad, 0x96, 0x89, 0x0f, 0xd3, - 0x0a, 0xfb, 0x90, 0x83, 0x36, 0x43, 0x5f, 0x43, 0x52, 0x9f, 0x5a, 0xab, - 0xd5, 0xb6, 0xdf, 0x69, 0x69, 0x2c, 0xca, 0x5a, 0x20, 0xc7, 0x2a, 0x1f, - 0x90, 0x41, 0x24, 0x71, 0xf3, 0x54, 0x0c, 0x7c, 0x06, 0xfc, 0x5d, 0x33, - 0xc5, 0x56, 0x2c, 0x4a, 0x90, 0x4e, 0x36, 0x46, 0xa1, 0xef, 0x0d, 0x57, - 0xd0, 0x1c, 0x2b, 0xdd, 0x26, 0x94, 0xb4, 0xea, 0xbc, 0xd0, 0xb2, 0x89, - 0xb5, 0x53, 0x28, 0xf6, 0x80, 0xf6, 0xb7, 0xb4, 0x73, 0x8b, 0xad, 0x60, - 0x3c, 0x4c, 0x44, 0xc0, 0x1b, 0xe0, 0xb4, 0xf2, 0x97, 0xa0, 0xc2, 0x94, - 0x33, 0x4f, 0x96, 0x48, 0xe8, 0x35, 0x23, 0x9f, 0xaa, 0x64, 0x25, 0x11, - 0x50, 0x60, 0x81, 0x35, 0x62, 0xa0, 0x1e, 0x6b, 0xaf, 0x41, 0xda, 0xdb, - 0x40, 0x51, 0xd4, 0xa0, 0x02, 0x2f, 0xff, 0x6e, 0xf0, 0x11, 0x1c, 0xb6, - 0x7c, 0x1d, 0x79, 0xba, 0x05, 0x8c, 0x49, 0x96, 0xf5, 0x2d, 0xf4, 0x46, - 0x83, 0x80, 0xf1, 0x9f, 0xc2, 0xd9, 0x64, 0x88, 0x0f, 0x07, 0x5b, 0xd0, - 0x3a, 0x32, 0x93, 0xed, 0xf3, 0x41, 0xc7, 0x0e, 0x1b, 0xbd, 0x1b, 0x75, - 0x49, 0x68, 0xb1, 0xeb, 0x5f, 0xa4, 0x3e, 0xda, 0xec, 0x8a, 0xa3, 0x85, - 0x08, 0x8a, 0x90, 0x10, 0x1a, 0x59, 0x6a, 0x46, 0xfe, 0xe2, 0x38, 0x7c, - 0x17, 0x93, 0x13, 0x88, 0xee, 0xfc, 0x55, 0xc7, 0x9b, 0xcf, 0x31, 0x8c, - 0x8d, 0xd8, 0x32, 0xa6, 0x38, 0xae, 0x61, 0x94, 0xdb, 0x41, 0x32, 0x81, - 0x64, 0xe6, 0x44, 0x55, 0x04, 0x08, 0xc0, 0xbb, 0xa6, 0x9b, 0x9f, 0x06, - 0xa1, 0x1b, 0xbd, 0x1e, 0xe9, 0x7d, 0xd6, 0x7d, 0x6f, 0x30, 0x69, 0xb8, - 0xad, 0x77, 0x0a, 0xfb, 0x35, 0x03, 0x29, 0x16, 0xa7, 0xa6, 0x7d, 0x17, - 0xe2, 0xdb, 0x6e, 0xf0, 0xa4, 0x0e, 0x14, 0x5a, 0xb7, 0x18, 0xb7, 0x9f, - 0x1b, 0xbf, 0xa9, 0xae, 0x7e, 0xbf, 0x47, 0x79, 0xbe, 0xae, 0x53, 0x11, - 0x8f, 0x21, 0x92, 0x1f, 0x4a, 0x4a, 0x17, 0xbd, 0x38, 0x03, 0x2e, 0x28, - 0x76, 0xff, 0x3f, 0x0b, 0x43, 0x28, 0xf8, 0xa2, 0xa2, 0x58, 0xee, 0xec, - 0x4e, 0x01, 0x77, 0x81, 0x0f, 0x27, 0xdf, 0xc5, 0x6f, 0x43, 0xba, 0xad, - 0x28, 0x08, 0xa8, 0xdc, 0xde, 0xdf, 0x3e, 0x9f, 0xc5, 0x15, 0x39, 0xf5, - 0xea, 0x11, 0xf4, 0xe1, 0xe8, 0xfa, 0x24, 0x02, 0xa2, 0xbc, 0xd0, 0xca, - 0xc0, 0xc7, 0x22, 0x5a, 0x3b, 0x77, 0x18, 0x0b, 0x32, 0xb8, 0x52, 0xba, - 0xa5, 0x8d, 0x2b, 0x80, 0xda, 0x29, 0x1a, 0xaf, 0x99, 0x48, 0xf6, 0x81, - 0xd7, 0x5c, 0x11, 0x75, 0xe3, 0x10, 0xca, 0x14, 0xa5, 0x3e, 0x1a, 0x6a, - 0xf9, 0x30, 0x87, 0xcd, 0x6c, 0xd3, 0x55, 0xc2, 0x15, 0x7e, 0x8c, 0x4e, - 0x19, 0x17, 0x3c, 0xcf, 0xa9, 0xdd, 0xda, 0x9d, 0xfa, 0xfb, 0x18, 0x17, - 0x11, 0x76, 0x30, 0x2b, 0x9d, 0x60, 0x9d, 0xb5, 0x9a, 0x0f, 0xf4, 0x61, - 0xca, 0xd6, 0x29, 0x76, 0xd4, 0x85, 0x7e, 0xba, 0x7d, 0xff, 0x31, 0x17, - 0x12, 0xdd, 0xe6, 0xf2, 0x98, 0xf0, 0x5e, 0x5c, 0x1c, 0x1f, 0xc5, 0x00, - 0x9d, 0xee, 0xc5, 0xc0, 0xd9, 0xa5, 0xbd, 0xd0, 0x30, 0x8e, 0x24, 0x30, - 0x87, 0xfb, 0x9f, 0xcd, 0x51, 0xef, 0x20, 0xf0, 0x67, 0x41, 0x1c, 0x73, - 0xc5, 0x8f, 0x4d, 0xcb, 0x30, 0x3f, 0xa3, 0xd8, 0xb1, 0xc7, 0x9c, 0xb7, - 0xff, 0x4b, 0xd5, 0xae, 0xad, 0x89, 0x9b, 0xd0, 0x99, 0xd7, 0x52, 0xf7, - 0x7a, 0xa7, 0x5d, 0x1d, 0x5f, 0x15, 0xe7, 0x09, 0x84, 0xb4, 0x61, 0x78, - 0x47, 0x8f, 0xb1, 0x9f, 0x54, 0xaf, 0xc3, 0x5d, 0xf1, 0xad, 0xc7, 0xdf, - 0x0e, 0xd8, 0x99, 0x78, 0xf4, 0x86, 0x9e, 0x77, 0x0f, 0xc6, 0x93, 0xdd, - 0xc8, 0xa6, 0x71, 0x6d, 0x19, 0xee, 0x64, 0x6c, 0x6e, 0x53, 0xc0, 0xd3, - 0xa3, 0xf5, 0x2d, 0xe7, 0xec, 0x73, 0x34, 0x09, 0x1d, 0x34, 0x0d, 0x8c, - 0xae, 0xf9, 0x62, 0x6a, 0xf5, 0x67, 0x20, 0x46, 0x2b, 0xfc, 0x2f, 0x77, - 0xee, 0xa3, 0x68, 0xbf, 0x0e, 0x17, 0x5c, 0x8e, 0x44, 0x97, 0x95, 0x68, - 0x65, 0xee, 0xf8, 0xb1, 0x13, 0x29, 0xef, 0x10, 0xc7, 0x7b, 0xa6, 0x85, - 0xf3, 0xb7, 0xcb, 0x85, 0xa6, 0x38, 0xc4, 0xb1, 0xa1, 0xb8, 0x20, 0x6f, - 0x22, 0xd7, 0xd9, 0x54, 0x85, 0x6c, 0x6f, 0xb1, 0x1c, 0xa1, 0xb0, 0x13, - 0xab, 0x4e, 0xa6, 0x62, 0x59, 0x69, 0x6f, 0xf7, 0xfd, 0xfd, 0x8c, 0x48, - 0xe4, 0x2f, 0x64, 0x30, 0x75, 0x45, 0xe3, 0xa5, 0x02, 0xf3, 0x6b, 0x11, - 0x3f, 0xe2, 0xc2, 0x7b, 0x9d, 0x8a, 0x48, 0xfd, 0xa1, 0xa4, 0xe3, 0xf7, - 0xcc, 0xd5, 0xca, 0x3f, 0x64, 0x2e, 0x55, 0xcb, 0x67, 0x97, 0xca, 0xe7, - 0x45, 0x17, 0xdc, 0x68, 0x01, 0x84, 0xe5, 0xf4, 0x9a, 0x76, 0xfe, 0xb4, - 0x1b, 0xdc, 0x83, 0xee, 0x33, 0xa3, 0x74, 0x42, 0x22, 0x6c, 0xbe, 0x72, - 0x62, 0xa2, 0x39, 0x33, 0x3a, 0xea, 0x14, 0x4f, 0xf5, 0xf1, 0x9a, 0xbe, - 0xa9, 0x4f, 0xb1, 0xfc, 0xee, 0x1c, 0xbe, 0xba, 0x69, 0x03, 0x66, 0x3e, - 0x4f, 0x23, 0xe8, 0x95, 0x3f, 0xdb, 0xd0, 0x0a, 0xef, 0x19, 0xff, 0x4d, - 0xe8, 0x1e, 0x67, 0x70, 0x36, 0xca, 0x58, 0xf4, 0x4c, 0x97, 0xa5, 0x34, - 0xf7, 0xf2, 0xd4, 0xd3, 0x1e, 0x85, 0x18, 0x0e, 0x15, 0xf8, 0x9e, 0xe8, - 0x06, 0xbb, 0x7d, 0x77, 0x47, 0x7a, 0xe2, 0xc3, 0x10, 0x13, 0x19, 0xc3, - 0xfb, 0xa7, 0xf8, 0x97, 0xf5, 0x73, 0xe2, 0xf5, 0x25, 0x63, 0x71, 0x6b, - 0x52, 0xba, 0x93, 0x23, 0x67, 0x5a, 0x11, 0x3a, 0x8c, 0x8c, 0x6e, 0xd4, - 0x57, 0x94, 0x75, 0x74, 0x89, 0xdb, 0xb7, 0x11, 0xb0, 0x21, 0x1c, 0xee, - 0x83, 0x41, 0x34, 0x7c, 0x99, 0xa7, 0xbd, 0xfb, 0xfc, 0x08, 0xf6, 0xf3, - 0x0f, 0xc9, 0x5b, 0x3f, 0xbd, 0xb1, 0xda, 0xda, 0xf9, 0x0d, 0xe8, 0x06, - 0xe0, 0xf0, 0x45, 0x44, 0x74, 0x66, 0xc8, 0xb5, 0xa1, 0xf1, 0xa3, 0x3a, - 0x3e, 0x75, 0x18, 0xb2, 0x91, 0x0e, 0xd0, 0x68, 0x61, 0xd4, 0xc9, 0xba, - 0xb3, 0xad, 0x83, 0x13, 0xe2, 0x41, 0xc7, 0xeb, 0xa1, 0x03, 0x4d, 0xfc, - 0xf3, 0x67, 0x11, 0x58, 0xc0, 0x55, 0x08, 0xa3, 0x6f, 0x37, 0x12, 0x15, - 0xc7, 0x59, 0x1c, 0x60, 0xa6, 0x4e, 0xcb, 0xe1, 0xb1, 0x5b, 0xf7, 0x20, - 0xed, 0x73, 0x23, 0x16, 0x43, 0x4b, 0x66, 0xe7, 0xf5, 0xe0, 0x90, 0x4a, - 0x5f, 0xd5, 0x2d, 0x9c, 0xfc, 0x9c, 0x45, 0xf4, 0x48, 0xe9, 0x91, 0xb6, - 0xf7, 0x44, 0xb9, 0x6a, 0xb1, 0x48, 0x6c, 0x6f, 0x67, 0xcd, 0x37, 0xe7, - 0x96, 0xcd, 0x99, 0x7f, 0xf0, 0xfe, 0x0e, 0x52, 0x7d, 0xdd, 0x0b, 0xae, - 0x85, 0x8b, 0x1f, 0x99, 0xb1, 0xfa, 0x05, 0xff, 0x4d, 0xa7, 0x7c, 0xeb, - 0x17, 0x35, 0x44, 0xfa, 0x31, 0x6b, 0x57, 0x18, 0x23, 0x8f, 0xee, 0xd7, - 0x80, 0xfb, 0xd2, 0xc2, 0xc5, 0xce, 0x98, 0xd7, 0x73, 0x9b, 0x44, 0x27, - 0x96, 0x96, 0x82, 0x98, 0x0d, 0x47, 0x7f, 0xf0, 0x44, 0x9a, 0x12, 0x21, - 0x22, 0xa8, 0x57, 0x34, 0xf9, 0x68, 0x4c, 0x98, 0xc6, 0xed, 0xa1, 0xb6, - 0x68, 0xd2, 0xf2, 0x56, 0x10, 0xfa, 0x78, 0x78, 0x07, 0xe9, 0xf0, 0x08, - 0x81, 0x7c, 0x1d, 0x65, 0x18, 0x8f, 0x3d, 0x6b, 0xf7, 0x09, 0xe9, 0x11, - 0x58, 0x62, 0x05, 0xbe, 0xf9, 0x8f, 0xfb, 0xb7, 0x20, 0xee, 0x53, 0x46, - 0x62, 0xb8, 0x9c, 0x12, 0x2d, 0x4b, 0x67, 0x7b, 0xe1, 0xec, 0xb3, 0x98, - 0x6c, 0xe1, 0x89, 0x82, 0x0a, 0xe1, 0x9c, 0xfa, 0x25, 0x79, 0xa0, 0x74, - 0x4f, 0xe4, 0x0e, 0x6f, 0xc2, 0xe4, 0x6e, 0x8e, 0xb3, 0xbf, 0x24, 0x06, - 0x5c, 0x47, 0xf3, 0xfe, 0x4a, 0xc4, 0x6a, 0x77, 0x33, 0x87, 0x82, 0x92, - 0x09, 0xd6, 0xf4, 0x11, 0xe3, 0x43, 0x85, 0x75, 0x99, 0x70, 0x14, 0x16, - 0x5d, 0xbd, 0xd9, 0x20, 0x04, 0x51, 0x89, 0x10, 0x30, 0xea, 0x88, 0x84, - 0x5a, 0x16, 0x2f, 0x34, 0x85, 0x3b, 0x1f, 0x1d, 0x28, 0x8b, 0x0c, 0xe3, - 0xcd, 0xb8, 0x82, 0xa7, 0xd7, 0xae, 0x16, 0x29, 0x29, 0x80, 0x7f, 0x15, - 0xb2, 0x69, 0xf4, 0xff, 0x72, 0x85, 0xda, 0x1c, 0xb7, 0xc8, 0x21, 0x6b, - 0x35, 0xc8, 0x49, 0x90, 0x07, 0xf3, 0x91, 0x6a, 0x51, 0x1d, 0x78, 0x35, - 0x4a, 0xc6, 0xa7, 0xe1, 0x7a, 0x1c, 0x08, 0x48, 0x2e, 0xdc, 0xef, 0xa9, - 0xf5, 0xab, 0x69, 0x1a, 0x59, 0xf9, 0xd6, 0x35, 0xa2, 0x42, 0x59, 0xc2, - 0xd0, 0x30, 0x31, 0xb4, 0x5b, 0x2c, 0xaf, 0x8d, 0x3e, 0x08, 0x5e, 0xe2, - 0xb8, 0x45, 0xa9, 0x82, 0x5e, 0x47, 0x94, 0xb2, 0xc5, 0xd1, 0xdd, 0x35, - 0xf5, 0x84, 0x8c, 0xc4, 0x92, 0xa7, 0xf9, 0x57, 0x0b, 0x7e, 0x9f, 0xab, - 0x9c, 0xd3, 0x9a, 0x68, 0xd6, 0xa1, 0x91, 0x93, 0x84, 0xbe, 0x0c, 0xfc, - 0x75, 0x01, 0x58, 0xde, 0xf4, 0xeb, 0x47, 0x6e, 0x61, 0x1d, 0x6f, 0x6d, - 0x94, 0xb6, 0x3a, 0xe1, 0x44, 0x0d, 0xf5, 0x31, 0xc3, 0xc9, 0x3b, 0xd3, - 0xa3, 0x5c, 0x5f, 0x96, 0xa1, 0xf0, 0x52, 0x22, 0x87, 0xa9, 0x38, 0x69, - 0x4a, 0xef, 0x4d, 0xb0, 0xc6, 0x78, 0xd1, 0xd6, 0x8c, 0xf8, 0x8f, 0x8f, - 0x04, 0xb4, 0x54, 0xae, 0x55, 0x6c, 0x5c, 0x6e, 0x98, 0x7d, 0x92, 0x47, - 0x14, 0x42, 0x1e, 0xb3, 0x9d, 0xbc, 0xa4, 0x17, 0xd0, 0xbe, 0xf0, 0x53, - 0x50, 0x9c, 0xc0, 0xc6, 0x76, 0xfe, 0xf6, 0x95, 0x67, 0xf8, 0x69, 0x5c, - 0x2f, 0x98, 0xee, 0xbf, 0xdc, 0x62, 0x16, 0x39, 0x45, 0x01, 0xe1, 0x9d, - 0x8a, 0x33, 0x23, 0x49, 0xd3, 0x80, 0x4f, 0x72, 0x3a, 0xfe, 0x81, 0xe7, - 0x65, 0x53, 0xda, 0xc1, 0x92, 0x3e, 0x89, 0x8f, 0x65, 0xc6, 0x7d, 0x90, - 0x7f, 0x6e, 0x58, 0xc4, 0xba, 0xad, 0xdf, 0x6c, 0xce, 0x0c, 0x66, 0xec, - 0xc0, 0xfc, 0xf2, 0xac, 0x5f, 0xb4, 0xb4, 0xab, 0x8b, 0x0d, 0xb6, 0xac, - 0x29, 0x73, 0xbf, 0x5f, 0x13, 0x54, 0x89, 0xaf, 0xb8, 0x56, 0x00, 0x41, - 0x48, 0x4d, 0x4b, 0x13, 0xb3, 0xb8, 0x92, 0xc4, 0xff, 0x61, 0x26, 0x5e, - 0xfb, 0x76, 0xae, 0x05, 0xbb, 0x03, 0xaa, 0x46, 0x45, 0x5b, 0xcd, 0xd4, - 0x7e, 0x5f, 0x81, 0x50, 0x8c, 0x66, 0x57, 0x49, 0x8f, 0x3a, 0x5e, 0xf3, - 0x43, 0xac, 0x95, 0xb6, 0xdb, 0x18, 0x82, 0xbe, 0x29, 0xea, 0x2b, 0xd9, - 0xc0, 0xeb, 0xfe, 0xd5, 0xd3, 0x37, 0xf9, 0xa3, 0xcc, 0xb1, 0xd2, 0xe4, - 0x7b, 0x03, 0x0a, 0x84, 0x6a, 0xbe, 0x8c, 0x79, 0x98, 0x14, 0x41, 0x61, - 0x4d, 0x48, 0xa9, 0x33, 0x0e, 0x41, 0xf7, 0x03, 0xf8, 0x0f, 0xcc, 0x2a, - 0xc0, 0x37, 0x6e, 0x57, 0x24, 0x42, 0xd7, 0xed, 0xf7, 0x11, 0xd2, 0x84, - 0x91, 0x1f, 0x97, 0x69, 0x85, 0xc3, 0xec, 0xe0, 0xa2, 0x9b, 0xcb, 0x5b, - 0x24, 0x88, 0x29, 0x04, 0x05, 0x56, 0x5a, 0x30, 0x43, 0xc5, 0xba, 0x2a, - 0xc1, 0x8e, 0x19, 0x2b, 0x31, 0x6b, 0x5c, 0xbf, 0x12, 0x75, 0xb8, 0x5d, - 0x23, 0xce, 0x81, 0x45, 0xec, 0x93, 0x29, 0xcb, 0x5c, 0x18, 0xc6, 0x90, - 0x50, 0xd6, 0x1a, 0x48, 0x1d, 0x7d, 0xb7, 0x5c, 0x78, 0xcc, 0x0e, 0xc5, - 0xf5, 0x85, 0xc7, 0x28, 0x60, 0x5d, 0x4b, 0x4d, 0xb0, 0x39, 0x64, 0x47, - 0x55, 0xb9, 0xe7, 0x3a, 0x57, 0xbc, 0xc3, 0xa7, 0xe2, 0x8a, 0xf9, 0x85, - 0x0c, 0xff, 0x3b, 0x3c, 0x74, 0x6c, 0x96, 0xa4, 0xd5, 0x26, 0xe0, 0xb4, - 0xa6, 0x4c, 0xb0, 0x83, 0x1f, 0x54, 0x7b, 0x67, 0x7a, 0x2b, 0x9d, 0x79, - 0x08, 0x30, 0xd3, 0xe8, 0x62, 0x5e, 0x65, 0x2a, 0x5e, 0x7a, 0xf4, 0xbe, - 0x53, 0xac, 0x5d, 0xf4, 0x2f, 0x75, 0x9a, 0xb6, 0xb3, 0x3c, 0xe9, 0x58, - 0xe9, 0x12, 0x7f, 0x7e, 0xb8, 0xd6, 0x53, 0x5e, 0x4a, 0x3f, 0x70, 0x8b, - 0x67, 0x32, 0x50, 0x5c, 0xd3, 0x10, 0xd9, 0x8d, 0x47, 0x73, 0xc5, 0x21, - 0x44, 0x47, 0xe9, 0x4b, 0x89, 0xea, 0x86, 0x21, 0x4e, 0x2c, 0xea, 0x5e, - 0x70, 0x65, 0x28, 0xa0, 0x1d, 0x3e, 0x15, 0x9c, 0xa3, 0xd7, 0x62, 0xa5, - 0x13, 0x0d, 0x6f, 0x2f, 0x1f, 0xdd, 0x97, 0x28, 0xa5, 0x36, 0x75, 0xc8, - 0xdd, 0xfa, 0x02, 0x43, 0xf8, 0x6c, 0x13, 0xef, 0x93, 0x17, 0xe9, 0x3a, - 0xa9, 0xa7, 0x5c, 0x9c, 0x74, 0xc8, 0x19, 0x33, 0x6e, 0x0b, 0xf5, 0xca, - 0x5c, 0xcc, 0x90, 0x73, 0x88, 0x50, 0x79, 0x36, 0xd9, 0x1b, 0x60, 0xd1, - 0xe4, 0xcf, 0x3a, 0x26, 0xa9, 0xdd, 0xa3, 0x27, 0x33, 0x12, 0x95, 0xe3, - 0x7e, 0xc4, 0x8d, 0x0a, 0x44, 0x5e, 0x57, 0x4d, 0xd4, 0x3d, 0x9a, 0x6a, - 0x1d, 0x55, 0x81, 0x1f, 0x8b, 0xff, 0x84, 0x8d, 0xee, 0xe4, 0x9a, 0xf0, - 0x24, 0x89, 0xcc, 0x1a, 0x9d, 0x49, 0xd4, 0x9c, 0xea, 0x73, 0x52, 0x19, - 0x15, 0xe9, 0x50, 0x65, 0x18, 0xed, 0x1c, 0x3c, 0x50, 0xd0, 0xef, 0x8e, - 0x63, 0xe9, 0x08, 0x5b, 0x4d, 0x60, 0x0c, 0x26, 0x50, 0xb4, 0xe1, 0x49, - 0x58, 0x6b, 0x18, 0x54, 0x47, 0x60, 0x1e, 0xff, 0x4a, 0x00, 0x8a, 0x52, - 0x07, 0xef, 0x51, 0xcb, 0xc1, 0x41, 0xfe, 0x40, 0xa4, 0x3d, 0x6d, 0x76, - 0x5c, 0x43, 0x2c, 0xdc, 0x9c, 0xe8, 0x09, 0x7d, 0x8c, 0xdf, 0x84, 0xef, - 0xa9, 0xa8, 0xe8, 0xd3, 0xa3, 0x10, 0x00, 0x2d, 0xb7, 0x30, 0x29, 0xc4, - 0x6f, 0x10, 0xe7, 0x2a, 0xfa, 0xe3, 0x26, 0x49, 0xcf, 0x5c, 0xf1, 0xcc, - 0xc4, 0x27, 0xc9, 0xc2, 0x35, 0xd8, 0xba, 0xa7, 0x97, 0x61, 0x87, 0x95, - 0x13, 0xee, 0x1a, 0xec, 0xe3, 0x2d, 0xae, 0xca, 0x93, 0x26, 0x4e, 0xbe, - 0x02, 0x31, 0xb5, 0xec, 0xe9, 0x4e, 0xfc, 0x82, 0x94, 0x84, 0xb9, 0x92, - 0x96, 0xef, 0xeb, 0x2b, 0x41, 0xf3, 0xd4, 0x27, 0xb3, 0xef, 0x90, 0x53, - 0xd6, 0x83, 0xe8, 0x4f, 0x54, 0xbc, 0x76, 0xd3, 0xa3, 0x6f, 0xf0, 0xc7, - 0x2c, 0xc8, 0xa0, 0x64, 0x4b, 0xa3, 0x7f, 0x86, 0x52, 0xc3, 0xc0, 0xdb, - 0x63, 0xc8, 0x44, 0xfb, 0x6d, 0x5d, 0xa6, 0x4e, 0xc2, 0xbc, 0x07, 0x51, - 0x70, 0x47, 0xf3, 0xd9, 0xe9, 0x45, 0x0b, 0x46, 0xdd, 0x54, 0x49, 0xd8, - 0x1f, 0x49, 0x75, 0xc2, 0x86, 0xff, 0x9a, 0x66, 0x53, 0x86, 0xd9, 0xbf, - 0xa2, 0x30, 0xed, 0xd0, 0x40, 0x64, 0xcf, 0xb9, 0xb3, 0xbd, 0x6b, 0xb5, - 0x5c, 0x00, 0x8a, 0x50, 0xc0, 0xae, 0xf5, 0x56, 0xc9, 0x57, 0x0f, 0xb2, - 0x61, 0x65, 0xbe, 0xa6, 0x26, 0x00, 0x1c, 0xc5, 0xdc, 0x30, 0x46, 0xa5, - 0x88, 0x72, 0xf8, 0x07, 0x07, 0x84, 0xb5, 0xaf, 0x1b, 0xef, 0x12, 0x8a, - 0x61, 0xc2, 0xd9, 0xc3, 0x99, 0x2b, 0x16, 0x0a, 0x02, 0xf5, 0xd8, 0x46, - 0xbb, 0x16, 0xc5, 0xb6, 0x90, 0x37, 0x3b, 0x72, 0x9e, 0x3a, 0xb9, 0xbb, - 0x86, 0x6e, 0x08, 0x48, 0xd6, 0xad, 0x48, 0x8b, 0x53, 0x4f, 0xbc, 0x27, - 0x47, 0x84, 0x1c, 0x17, 0xba, 0xae, 0xf3, 0x00, 0xe1, 0x1a, 0xfd, 0x73, - 0xa5, 0xf7, 0x04, 0x44, 0xc1, 0xac, 0xbb, 0x2c, 0xc3, 0x69, 0xe2, 0x45, - 0x46, 0x33, 0xdd, 0x2c, 0xea, 0x82, 0xef, 0x7a, 0x45, 0x58, 0x07, 0x7a, - 0xaa, 0xdd, 0x36, 0x26, 0x5a, 0xed, 0x41, 0xc5, 0x61, 0x9c, 0xd6, 0x3c, - 0x57, 0x45, 0xcf, 0xb6, 0xc1, 0x1f, 0x14, 0x65, 0x68, 0x4e, 0x8b, 0x16, - 0xf2, 0x07, 0x76, 0x10, 0x4c, 0x00, 0xc6, 0xc6, 0x14, 0xcf, 0xdc, 0x98, - 0x17, 0x50, 0xde, 0x27, 0x86, 0xf2, 0x5f, 0xab, 0x94, 0x73, 0x75, 0xb5, - 0x9e, 0x5d, 0x03, 0x5e, 0xed, 0xa5, 0xa9, 0xdb, 0x47, 0x48, 0xf1, 0xb9, - 0xb7, 0x72, 0x02, 0xfb, 0x24, 0x86, 0x20, 0x13, 0xa8, 0xf0, 0x44, 0xc4, - 0x8a, 0xec, 0x3d, 0x33, 0x40, 0xaa, 0xe7, 0xb0, 0xa4, 0x0e, 0x34, 0x6e, - 0x5b, 0x07, 0x5d, 0x08, 0x05, 0x9d, 0x2d, 0x5c, 0x54, 0xd6, 0x1c, 0x35, - 0x4c, 0x7f, 0x0b, 0x39, 0x1f, 0xbd, 0xd7, 0xb9, 0x6b, 0xda, 0x86, 0xcd, - 0x09, 0x43, 0xb5, 0x9a, 0xf8, 0xed, 0x42, 0x72, 0x49, 0x9f, 0xdd, 0x09, - 0x21, 0x61, 0xca, 0x6b, 0x8e, 0x2c, 0x17, 0x5c, 0x7a, 0x08, 0x80, 0x02, - 0x9a, 0x3b, 0x42, 0xf6, 0x44, 0x50, 0xfc, 0x7c, 0x6f, 0x24, 0x75, 0xca, - 0x4b, 0x14, 0xb2, 0x3c, 0x4a, 0x59, 0x37, 0x7b, 0x4e, 0x0e, 0xa4, 0xa8, - 0x21, 0x0b, 0x72, 0x3a, 0x53, 0xc8, 0x63, 0xdf, 0x67, 0xb6, 0x32, 0x79, - 0x07, 0x13, 0x61, 0x54, 0x28, 0x17, 0x7d, 0x05, 0xa1, 0xde, 0xdd, 0x7c, - 0xbc, 0x15, 0x72, 0x4a, 0xa9, 0xee, 0x6e, 0x32, 0xa0, 0x72, 0x22, 0x63, - 0xe5, 0xf8, 0x59, 0x19, 0x31, 0xd7, 0xc0, 0xc7, 0xd0, 0x37, 0xda, 0x3b, - 0x15, 0x4e, 0xa1, 0xf7, 0x93, 0x85, 0x63, 0x4c, 0x6b, 0x0e, 0x00, 0xec, - 0x47, 0x5f, 0x1f, 0xb1, 0x13, 0xbe, 0xad, 0x13, 0x0d, 0x47, 0xf8, 0x94, - 0xce, 0x54, 0xce, 0x00, 0x2e, 0xfd, 0xa4, 0x6f, 0x72, 0xf3, 0x02, 0x9c, - 0xd4, 0x4c, 0xce, 0x3b, 0x26, 0x09, 0xbb, 0x54, 0xa5, 0xef, 0x2a, 0x8a, - 0xe3, 0x45, 0x38, 0xff, 0xc8, 0x58, 0x12, 0x76, 0x78, 0x2f, 0x15, 0x62, - 0xb6, 0x6b, 0x54, 0x3c, 0x10, 0xd3, 0x01, 0x6e, 0x14, 0x7f, 0xa6, 0xe6, - 0x31, 0xda, 0x17, 0xee, 0x43, 0x91, 0xcc, 0x84, 0x1f, 0x53, 0xb7, 0xb0, - 0xf7, 0x15, 0x5c, 0x24, 0xe1, 0x82, 0x25, 0x62, 0x35, 0x31, 0xf5, 0xa1, - 0xee, 0x46, 0x93, 0x8c, 0x55, 0x7d, 0x40, 0x43, 0xc8, 0xec, 0xed, 0x99, - 0x94, 0xe4, 0x74, 0x88, 0x9a, 0x81, 0x4a, 0x05, 0xae, 0x5c, 0x88, 0x08, - 0xe7, 0x69, 0x2a, 0xe1, 0x04, 0xe4, 0xd0, 0x7a, 0xeb, 0x7a, 0xa6, 0xe5, - 0x07, 0x73, 0x1e, 0x70, 0xb5, 0x47, 0xae, 0xee, 0xa9, 0xcf, 0x19, 0xb1, - 0x74, 0x43, 0x86, 0x1a, 0x21, 0x08, 0x42, 0x0d, 0xca, 0xd7, 0x1a, 0xa4, - 0xe8, 0xae, 0xf0, 0xe1, 0x90, 0x03, 0x46, 0xa3, 0xb6, 0x72, 0xfa, 0x84, - 0xf4, 0x98, 0xdd, 0x0e, 0x24, 0x5b, 0x4a, 0x3f, 0x4a, 0x8a, 0x73, 0x78, - 0xa6, 0x89, 0x47, 0x36, 0x99, 0x7c, 0x2b, 0xfe, 0x34, 0x95, 0xe6, 0x9e, - 0xac, 0x72, 0x92, 0x4c, 0x3a, 0xf2, 0xf9, 0xe3, 0xf6, 0x9d, 0x15, 0xf9, - 0xbe, 0x03, 0x59, 0x07, 0x04, 0xe5, 0x27, 0xb7, 0x43, 0x19, 0x6c, 0xba, - 0x2a, 0x5b, 0xf9, 0x8c, 0xd8, 0xd2, 0x4f, 0x90, 0x58, 0xd1, 0xaa, 0x97, - 0x50, 0x8b, 0xaa, 0x56, 0xb6, 0xf0, 0x0a, 0xd2, 0x4e, 0x55, 0x56, 0x91, - 0xeb, 0x4d, 0x9c, 0x66, 0xd1, 0xec, 0x39, 0x92, 0x40, 0xd7, 0xb8, 0x50, - 0x0b, 0x18, 0x3c, 0xa1, 0x96, 0xd0, 0xc4, 0x88, 0xc0, 0x04, 0x3e, 0xe2, - 0x16, 0xb2, 0x1c, 0x6a, 0x95, 0xb2, 0xb9, 0x82, 0xdb, 0xda, 0x1e, 0x95, - 0x91, 0x1f, 0x9d, 0xfc, 0x95, 0x34, 0x77, 0x6d, 0x43, 0x59, 0x90, 0xb6, - 0x14, 0x58, 0x93, 0xce, 0xca, 0xb1, 0xdf, 0x09, 0xcf, 0x69, 0x6b, 0x15, - 0x60, 0x47, 0xa9, 0x7c, 0x03, 0xf4, 0xf8, 0xec, 0x87, 0x16, 0x49, 0xc0, - 0x97, 0x7e, 0x58, 0xd4, 0x5b, 0x39, 0x90, 0x19, 0xc8, 0x92, 0x4f, 0x2b, - 0x1e, 0x4c, 0xfc, 0x26, 0xa2, 0x01, 0x98, 0xeb, 0xb7, 0x0f, 0x52, 0x84, - 0xa2, 0x7a, 0xfe, 0x6b, 0x97, 0xa7, 0xc6, 0x0b, 0xb8, 0x02, 0xe4, 0x45, - 0x19, 0x54, 0x2d, 0x4c, 0x57, 0x50, 0xa1, 0xeb, 0x5f, 0xc6, 0xb0, 0x0c, - 0xbf, 0xf0, 0x00, 0x5e, 0xf9, 0xae, 0x0b, 0x86, 0x85, 0xb3, 0xb1, 0x6f, - 0x5d, 0xf8, 0x58, 0x87, 0x62, 0x43, 0x82, 0x80, 0x9b, 0xcc, 0x10, 0x78, - 0x6d, 0x24, 0xd7, 0xa9, 0x1b, 0xc5, 0x77, 0x5a, 0xff, 0x3d, 0x9d, 0x0c, - 0x45, 0xb8, 0x6b, 0xc7, 0x95, 0xf1, 0xb9, 0x7b, 0xe7, 0x87, 0xf3, 0x10, - 0x55, 0x1b, 0x25, 0x41, 0x5c, 0xb5, 0x13, 0xe4, 0xf2, 0xba, 0xab, 0x37, - 0x6a, 0x1d, 0xca, 0x01, 0xe4, 0x4f, 0x7d, 0xcf, 0xad, 0xbc, 0xb5, 0xfc, - 0x98, 0x12, 0xac, 0x9c, 0x4a, 0xdd, 0x51, 0x88, 0x96, 0x0f, 0xf2, 0xed, - 0x58, 0xb3, 0x96, 0x48, 0xbe, 0xff, 0x42, 0x7a, 0x9e, 0x16, 0xc0, 0x1c, - 0xa9, 0xc7, 0x97, 0x97, 0x6d, 0xfa, 0xcf, 0x9c, 0xac, 0x5d, 0x4e, 0xb7, - 0x4c, 0xf1, 0x16, 0x9e, 0x7c, 0x2a, 0x06, 0x2e, 0x9b, 0x8b, 0x56, 0xa3, - 0x22, 0x35, 0x86, 0xec, 0x22, 0x33, 0xd1, 0xe0, 0xc2, 0x42, 0x53, 0x95, - 0x84, 0xfa, 0xf0, 0x2c, 0xa1, 0x2b, 0x6b, 0xc2, 0x35, 0x0e, 0x9a, 0x21, - 0x65, 0xb8, 0xd4, 0xc3, 0xb6, 0x7d, 0x2b, 0x46, 0xa7, 0x62, 0x6d, 0x70, - 0x95, 0xc9, 0xd1, 0xfe, 0x88, 0xd2, 0x3a, 0x35, 0x65, 0xa1, 0x8d, 0x16, - 0xad, 0x65, 0xde, 0x23, 0x4b, 0x65, 0xf3, 0xe8, 0x2d, 0x42, 0x79, 0xd3, - 0x71, 0x8f, 0x54, 0xf4, 0xd7, 0x80, 0x6a, 0x4d, 0x67, 0x26, 0x0d, 0x9b, - 0x9c, 0x39, 0x9c, 0x05, 0x3f, 0xe6, 0x23, 0xfd, 0xc0, 0x33, 0x85, 0x7c, - 0x42, 0x6f, 0x8b, 0x25, 0x6f, 0x0f, 0x26, 0xf6, 0x52, 0x91, 0xa3, 0x6b, - 0xbb, 0xe7, 0x4a, 0x26, 0x17, 0xd8, 0xbd, 0xcd, 0xd1, 0x44, 0xc2, 0xf4, - 0x33, 0xfd, 0xbd, 0x3f, 0x66, 0xe8, 0xfd, 0x04, 0xde, 0x37, 0x42, 0xb7, - 0xfd, 0xbc, 0x21, 0x17, 0x03, 0x0f, 0x49, 0x54, 0x1d, 0x1d, 0x02, 0xcc, - 0x93, 0xa3, 0x16, 0xf1, 0x9b, 0xac, 0xd1, 0x31, 0xdd, 0xe2, 0x34, 0xf1, - 0x62, 0xfc, 0xdf, 0xe2, 0xb3, 0x5b, 0x47, 0x78, 0x0b, 0x05, 0xd6, 0xe9, - 0xe9, 0xb4, 0x13, 0x46, 0x10, 0x38, 0xd1, 0xfb, 0x90, 0xe8, 0xa6, 0x82, - 0x40, 0x8a, 0x8d, 0x7f, 0xc7, 0xe5, 0x35, 0x96, 0xa0, 0xf5, 0x4d, 0x2b, - 0xe9, 0xbd, 0x0b, 0x08, 0x39, 0xf3, 0x66, 0xb1, 0xbc, 0x37, 0x0b, 0xe2, - 0x56, 0x40, 0x6e, 0x5b, 0x45, 0x73, 0x2a, 0xb8, 0xe0, 0x99, 0x5f, 0x9f, - 0x81, 0xad, 0xa5, 0x3f, 0xf3, 0x35, 0x5c, 0xc7, 0xb8, 0xa1, 0xd9, 0x7f, - 0x84, 0x84, 0x93, 0xbb, 0xbc, 0x57, 0xed, 0x98, 0xa4, 0xec, 0xb8, 0x1c, - 0xfa, 0xd9, 0xae, 0xbf, 0xe0, 0xc9, 0x4e, 0x9e, 0x3c, 0x9a, 0xc1, 0xb3, - 0x45, 0x05, 0x24, 0xab, 0x07, 0x20, 0x87, 0xc6, 0xfd, 0x84, 0xf9, 0x6c, - 0xfa, 0x5c, 0x9c, 0x09, 0x65, 0xa0, 0x8d, 0x3f, 0x07, 0x80, 0x46, 0x89, - 0x32, 0x07, 0xfe, 0xbc, 0xbd, 0xf4, 0xaf, 0x92, 0xe3, 0xee, 0x4a, 0xa6, - 0x00, 0xf8, 0x08, 0xec, 0x96, 0xae, 0x3c, 0x49, 0xa5, 0xf4, 0xd3, 0x5e, - 0x8e, 0x25, 0x80, 0x3a, 0xfe, 0xa9, 0x4b, 0x78, 0x40, 0x06, 0xbc, 0xf2, - 0x4a, 0x44, 0xe6, 0xa3, 0xfe, 0x94, 0x30, 0x7e, 0x72, 0x27, 0xb3, 0xed, - 0x9d, 0xca, 0xda, 0xd8, 0xd6, 0xca, 0x73, 0x3d, 0xbe, 0x97, 0xa2, 0xb1, - 0xe6, 0x8c, 0xd0, 0xe3, 0x68, 0x57, 0xa3, 0x89, 0x2b, 0xfa, 0x7f, 0x0a, - 0x8a, 0x93, 0x09, 0x99, 0x90, 0xf5, 0x6f, 0xbf, 0x79, 0x44, 0x18, 0xe9, - 0xb8, 0x40, 0x12, 0x7e, 0xf3, 0x61, 0xd0, 0x8b, 0x0c, 0xcb, 0x1f, 0x1a, - 0x5e, 0xb7, 0xf3, 0x81, 0x2e, 0x5e, 0x9e, 0x87, 0xc9, 0x74, 0x57, 0x42, - 0x63, 0xe1, 0xba, 0xd5, 0xc9, 0x29, 0x4d, 0xc0, 0x32, 0xbc, 0xeb, 0xba, - 0x81, 0x84, 0x21, 0x1e, 0xff, 0x37, 0xe8, 0x45, 0xa2, 0xa0, 0xdb, 0xb8, - 0x10, 0xba, 0xf2, 0xe6, 0x7a, 0xbf, 0x4a, 0x9f, 0xc9, 0xd4, 0x7e, 0x30, - 0xa2, 0x97, 0xe6, 0xf7, 0x1a, 0x74, 0xd9, 0xa5, 0xe3, 0xa2, 0x50, 0xe3, - 0x04, 0xae, 0x4e, 0x49, 0x12, 0x65, 0xc5, 0xf3, 0x58, 0xc7, 0xbc, 0x6a, - 0x14, 0x7b, 0x9e, 0x3f, 0x81, 0xbb, 0x21, 0xb2, 0x0e, 0x26, 0x17, 0x32, - 0xc7, 0x4e, 0xd8, 0x1e, 0x96, 0x83, 0x54, 0x4f, 0x35, 0xee, 0x21, 0x6c, - 0x5a, 0xdc, 0x92, 0xe3, 0x96, 0x53, 0x71, 0x89, 0x44, 0xd1, 0x8f, 0x4f, - 0xc8, 0xb4, 0x9b, 0x31, 0x5c, 0xff, 0xf0, 0x0f, 0xf3, 0xea, 0x4e, 0xb8, - 0x67, 0x0f, 0x1e, 0xa6, 0x55, 0xcb, 0xa5, 0xfd, 0x3a, 0x84, 0x80, 0xd3, - 0x1c, 0x2e, 0x15, 0xd5, 0x17, 0x4a, 0xb2, 0x1a, 0xb9, 0x34, 0x77, 0x79, - 0xac, 0x7b, 0x15, 0x43, 0x6d, 0x1a, 0x71, 0x08, 0xe5, 0x8e, 0x78, 0xb0, - 0x4e, 0x1f, 0xd5, 0x6c, 0xae, 0x9a, 0x2b, 0xdf, 0x2f, 0xd6, 0x5b, 0x5b, - 0x28, 0xac, 0xed, 0xb3, 0x9f, 0xc1, 0x38, 0xd7, 0xfc, 0xd8, 0xd0, 0x23, - 0x51, 0xa9, 0x3d, 0x7d, 0xd4, 0x8a, 0x85, 0x8c, 0x24, 0x65, 0x82, 0x91, - 0xa0, 0x52, 0x4b, 0xa5, 0x09, 0xe7, 0x0b, 0x88, 0xf6, 0xc0, 0x1f, 0xca, - 0x42, 0x37, 0xfc, 0xa6, 0xe0, 0x92, 0x41, 0x93, 0x06, 0x55, 0x65, 0x5e, - 0x47, 0x14, 0x72, 0xf1, 0x8f, 0x90, 0x02, 0x58, 0xc0, 0xca, 0xe0, 0xed, - 0x1e, 0x56, 0x4f, 0xf0, 0x48, 0xaf, 0x3e, 0x2e, 0xc1, 0x05, 0x6e, 0x12, - 0x01, 0x7e, 0xe0, 0xd5, 0x20, 0xb6, 0x5f, 0x35, 0x87, 0x78, 0xc5, 0x15, - 0x7e, 0x88, 0x5d, 0x0a, 0xcd, 0xc2, 0x94, 0x94, 0x60, 0xf8, 0x72, 0x40, - 0x3a, 0x63, 0xd4, 0x78, 0x5b, 0x05, 0x63, 0x9a, 0x1c, 0x35, 0x58, 0x88, - 0x4f, 0x09, 0x39, 0x35, 0xda, 0x06, 0xb0, 0xbf, 0x7c, 0x84, 0xc2, 0xaf, - 0xab, 0x12, 0x6d, 0xd7, 0x99, 0xef, 0xe1, 0xfe, 0x9a, 0x01, 0x9a, 0x1f, - 0x67, 0xd9, 0x2d, 0x61, 0xa7, 0xb0, 0x25, 0xd6, 0x20, 0x06, 0xbc, 0xb4, - 0xa3, 0xce, 0x8f, 0xd8, 0x90, 0xbe, 0x66, 0x48, 0x9f, 0xdc, 0x96, 0xcb, - 0x78, 0x04, 0x54, 0x2f, 0x2c, 0x2f, 0x28, 0x4d, 0x63, 0x85, 0x9c, 0x49, - 0xfe, 0xd7, 0x77, 0x7e, 0x34, 0x70, 0x6f, 0xd9, 0xdc, 0x18, 0xa1, 0x66, - 0xc4, 0x16, 0x33, 0xf7, 0x07, 0xd6, 0xb4, 0xcc, 0xe4, 0x63, 0x67, 0x82, - 0xd5, 0xf7, 0xfe, 0x35, 0xe4, 0x0f, 0xff, 0x1a, 0x00, 0x64, 0x4e, 0x8c, - 0xf0, 0xdf, 0xc0, 0xf3, 0xe5, 0x3d, 0xad, 0x0d, 0x8e, 0x98, 0x5f, 0x4e, - 0x10, 0x6f, 0xbe, 0x51, 0xd2, 0xb4, 0xf5, 0xa0, 0xff, 0xa5, 0x73, 0x7d, - 0x99, 0xc6, 0x99, 0xe5, 0xce, 0x40, 0x3b, 0xb1, 0xf5, 0x86, 0x3a, 0xaf, - 0x3f, 0x5f, 0x12, 0xa7, 0xff, 0xa3, 0x85, 0xf4, 0xeb, 0xa7, 0xfb, 0xb0, - 0x66, 0x02, 0x5f, 0x64, 0x70, 0xba, 0x5a, 0xa2, 0x92, 0x41, 0x9b, 0x49, - 0x64, 0x3a, 0x26, 0xd9, 0x55, 0xc3, 0x30, 0xf0, 0x13, 0x54, 0xde, 0xc1, - 0xaf, 0xfd, 0x48, 0xe8, 0x60, 0xd5, 0x8c, 0x24, 0x3a, 0xd9, 0xfe, 0xed, - 0x4e, 0xda, 0xda, 0xcf, 0x4e, 0xdf, 0x05, 0x46, 0xaa, 0x88, 0x43, 0xa5, - 0x8d, 0xd0, 0x6f, 0xc1, 0xfe, 0x50, 0xa5, 0x45, 0xfd, 0xc5, 0x56, 0x67, - 0x1c, 0x45, 0x69, 0x05, 0x2a, 0x7b, 0xb0, 0xa8, 0x7c, 0x80, 0x6d, 0x2f, - 0xcd, 0x2b, 0xf7, 0x3b, 0xca, 0xee, 0x75, 0x4b, 0xb1, 0xf1, 0x69, 0xe9, - 0x5d, 0x59, 0xd0, 0x4d, 0xb7, 0x2e, 0xd4, 0xc7, 0x30, 0x1c, 0x81, 0x5b, - 0x57, 0x20, 0x2e, 0xf9, 0x9f, 0x21, 0x10, 0x58, 0x9c, 0x80, 0x9e, 0x40, - 0xa5, 0x5a, 0xab, 0x21, 0x5f, 0x2c, 0xce, 0xfb, 0xb3, 0xf3, 0x07, 0x69, - 0xd0, 0x92, 0xfb, 0xa1, 0x06, 0x27, 0xd3, 0x29, 0x1e, 0xb3, 0x61, 0xbc, - 0xca, 0x9f, 0x85, 0x80, 0x79, 0xf6, 0xcc, 0x6b, 0x62, 0x42, 0x3b, 0x74, - 0xa4, 0x0a, 0x53, 0x59, 0x01, 0x54, 0x03, 0x17, 0x19, 0xb6, 0xa8, 0x06, - 0xd1, 0xc9, 0xe2, 0x9f, 0x9c, 0x77, 0x62, 0xa7, 0x12, 0x08, 0x01, 0xe8, - 0x2c, 0xd7, 0xaf, 0xb0, 0x5b, 0x4f, 0x29, 0x0a, 0xa0, 0x30, 0x84, 0x0a, - 0xe0, 0xf3, 0x85, 0xe8, 0x8e, 0xa4, 0x7e, 0xa9, 0x0b, 0x72, 0xac, 0x63, - 0xde, 0x19, 0xfd, 0x4d, 0x95, 0xb2, 0x3b, 0xa8, 0x45, 0x8d, 0xe2, 0x83, - 0xf6, 0xcd, 0x16, 0xb3, 0x46, 0x1e, 0x56, 0x96, 0x42, 0x5b, 0xf2, 0x2a, - 0xda, 0xed, 0xf9, 0x92, 0x21, 0xb3, 0xf0, 0x2f, 0xc2, 0x97, 0x18, 0xbf, - 0xa9, 0x26, 0xb6, 0x39, 0x59, 0xf1, 0x46, 0x49, 0x64, 0xf4, 0xb7, 0x7e, - 0x87, 0x09, 0x9a, 0x73, 0x5e, 0x10, 0x47, 0x19, 0xf4, 0x58, 0xc2, 0xff, - 0x81, 0x61, 0xe1, 0xff, 0x6b, 0xe3, 0xb9, 0xb4, 0x9a, 0x19, 0x71, 0xa7, - 0x87, 0x3d, 0x76, 0x6a, 0xbf, 0x4e, 0x89, 0x72, 0x45, 0xdc, 0x6a, 0x44, - 0x79, 0xf8, 0x76, 0x10, 0x4d, 0x53, 0xde, 0x56, 0x42, 0x9a, 0x47, 0xd9, - 0x13, 0x72, 0xf7, 0xaa, 0xe9, 0x84, 0x4f, 0x2d, 0x4d, 0xb7, 0x5f, 0xda, - 0x3f, 0x8f, 0x99, 0xbc, 0x77, 0x71, 0xc9, 0xbf, 0xfa, 0xb4, 0x65, 0x51, - 0x16, 0x9c, 0x3f, 0x04, 0x62, 0x6f, 0x45, 0x46, 0x7b, 0xcc, 0xf6, 0xbc, - 0xc2, 0x0d, 0xd6, 0x92, 0xe3, 0x29, 0xd4, 0xa5, 0x1c, 0x06, 0xc2, 0xf2, - 0xed, 0x4f, 0xf0, 0x5e, 0x55, 0xe2, 0xae, 0x9a, 0x68, 0x67, 0x7a, 0x79, - 0x66, 0xd4, 0x9d, 0xb0, 0x35, 0x8e, 0x79, 0x95, 0xf3, 0xca, 0xaf, 0x47, - 0xad, 0x84, 0x14, 0x62, 0xcf, 0xe0, 0xe4, 0x09, 0xe1, 0xed, 0xfc, 0xbf, - 0x6a, 0x06, 0x72, 0xc7, 0x0a, 0x53, 0x41, 0x93, 0xaf, 0x27, 0x33, 0xfb, - 0xd3, 0x68, 0xed, 0x5c, 0x13, 0x23, 0xce, 0xda, 0x62, 0xf3, 0xfe, 0xf2, - 0x91, 0x60, 0x0e, 0xb0, 0x6f, 0x43, 0x34, 0x2e, 0x56, 0xb8, 0xbb, 0x3f, - 0x52, 0xf3, 0x4d, 0x3f, 0x97, 0xfb, 0xab, 0x88, 0xc1, 0x08, 0xb3, 0xc7, - 0x72, 0x6b, 0xc1, 0x49, 0x63, 0xc2, 0xb7, 0x05, 0x00, 0x47, 0x53, 0xf0, - 0x22, 0xca, 0x47, 0xa4, 0x7c, 0x89, 0xff, 0x4d, 0x84, 0xe5, 0x90, 0xf1, - 0xd3, 0x61, 0x71, 0x35, 0xdf, 0xe9, 0x43, 0x8e, 0x20, 0x8d, 0xd4, 0xe6, - 0x74, 0xf7, 0xe8, 0x98, 0x17, 0xcd, 0xfd, 0xd7, 0x32, 0xa1, 0x5a, 0xd1, - 0x27, 0x30, 0xfe, 0x22, 0x05, 0x1e, 0xd2, 0xff, 0x1b, 0x23, 0x42, 0x33, - 0xf5, 0xa9, 0xbc, 0x43, 0xe9, 0xa5, 0x55, 0xf1, 0x51, 0x5e, 0xc6, 0xd6, - 0xac, 0x38, 0x06, 0x84, 0xe9, 0x75, 0x5f, 0xd7, 0xa2, 0xf9, 0xc2, 0xf3, - 0x6b, 0x0e, 0x5b, 0x01, 0x56, 0x60, 0x6e, 0xbe, 0x60, 0xaf, 0x96, 0x77, - 0xc8, 0x1f, 0x88, 0x9e, 0x19, 0x53, 0x48, 0x6d, 0x37, 0xd6, 0xc2, 0x8d, - 0x88, 0x1f, 0x39, 0x61, 0xcd, 0xea, 0x0e, 0x6a, 0x39, 0x62, 0xcd, 0xac, - 0x8d, 0xfd, 0x33, 0x1e, 0x1e, 0x6c, 0xfd, 0x1f, 0xd1, 0x8e, 0x14, 0x11, - 0x80, 0x9d, 0x29, 0x77, 0xc6, 0x6b, 0x12, 0xb6, 0xa9, 0x2b, 0xf0, 0xe7, - 0xa5, 0x4e, 0x47, 0x07, 0xc3, 0x34, 0xb1, 0xa1, 0xa0, 0x6a, 0x4a, 0x55, - 0xac, 0x01, 0x2d, 0x7d, 0x38, 0xd0, 0x41, 0xbe, 0x2a, 0xe9, 0xaa, 0xdd, - 0xc1, 0x39, 0xb7, 0xfb, 0xb4, 0x76, 0x99, 0xc1, 0xcc, 0x29, 0x06, 0x15, - 0x71, 0x7a, 0xb2, 0xdd, 0x82, 0x25, 0x13, 0xfa, 0xa7, 0x16, 0xeb, 0x22, - 0x3b, 0xa8, 0x4c, 0x7f, 0x62, 0xd8, 0x23, 0x0e, 0xca, 0x3b, 0x1b, 0x6d, - 0x21, 0x99, 0x2c, 0xd0, 0xa2, 0x54, 0x31, 0x58, 0x52, 0xc1, 0xff, 0xac, - 0x6c, 0xf6, 0xa2, 0x8f, 0x07, 0x5e, 0x17, 0x17, 0x7e, 0x52, 0x02, 0x4d, - 0xfc, 0x2f, 0xa0, 0x56, 0x48, 0xea, 0xb3, 0x84, 0x60, 0x9f, 0xd5, 0x59, - 0x98, 0x79, 0x8a, 0xa6, 0xe6, 0x4e, 0xd5, 0x2c, 0x3e, 0x53, 0x30, 0x1a, - 0x16, 0x5a, 0xfe, 0x15, 0xe3, 0x6d, 0xc5, 0xc5, 0x39, 0x3e, 0x28, 0xae, - 0xf5, 0x59, 0xfd, 0x5b, 0xb3, 0x34, 0x05, 0x92, 0x2a, 0xd5, 0xdd, 0xa9, - 0x58, 0xd7, 0x1a, 0xa5, 0xd9, 0xd3, 0xaf, 0xf2, 0xf0, 0xff, 0x91, 0xda, - 0x2d, 0x9c, 0xcc, 0xdb, 0xc8, 0xfd, 0xd7, 0x10, 0x31, 0x2b, 0xa9, 0xfd, - 0xb7, 0xc6, 0x5d, 0x83, 0x1f, 0xcd, 0xcc, 0x1c, 0xcb, 0x6a, 0xb5, 0xba, - 0x4d, 0xdf, 0x4c, 0xe0, 0x4e, 0x53, 0x5c, 0x34, 0x06, 0x35, 0xd3, 0x1f, - 0x43, 0xf5, 0xe3, 0x66, 0xb4, 0x7c, 0xb6, 0x06, 0x06, 0xe5, 0xab, 0x3b, - 0x12, 0x9e, 0x47, 0x7c, 0xe9, 0x91, 0xf2, 0x34, 0x47, 0x7c, 0xdb, 0xd4, - 0xf2, 0xec, 0xf1, 0x70, 0xff, 0x71, 0xf5, 0xf4, 0x24, 0x16, 0x61, 0xf7, - 0xa9, 0xb1, 0x12, 0x4d, 0xa6, 0x81, 0xf6, 0x4d, 0x6c, 0xd9, 0x98, 0xbb, - 0x66, 0x8f, 0x77, 0x8a, 0x02, 0xde, 0xf4, 0xf6, 0x10, 0xb4, 0xcc, 0xfb, - 0x0f, 0x69, 0x94, 0xfb, 0x37, 0x2a, 0x22, 0x26, 0x64, 0xfd, 0xc3, 0x85, - 0x30, 0xfb, 0x8f, 0x48, 0x8d, 0xc6, 0x5b, 0xc4, 0xee, 0xc5, 0x9a, 0x7d, - 0x57, 0x2d, 0x26, 0xd8, 0x7f, 0x37, 0xb7, 0xab, 0xe6, 0x55, 0x9a, 0x8f, - 0x30, 0xd0, 0x85, 0x6d, 0x44, 0x23, 0x8b, 0x9c, 0xc6, 0xdd, 0xd7, 0xa6, - 0xc5, 0xca, 0x99, 0x63, 0x8b, 0xd8, 0x0e, 0x50, 0x79, 0xce, 0xaa, 0xb8, - 0x62, 0x8c, 0x3d, 0x8b, 0x0b, 0xf1, 0xdc, 0x38, 0x88, 0x76, 0x82, 0xb7, - 0x47, 0x69, 0x72, 0xba, 0x9a, 0x4b, 0x20, 0x59, 0x88, 0x65, 0x02, 0x0c, - 0x9d, 0x6b, 0x40, 0x98, 0x8d, 0xd7, 0x83, 0xd5, 0xf0, 0xc3, 0x87, 0xca, - 0xdb, 0x7e, 0x96, 0x88, 0x64, 0x49, 0x16, 0x64, 0x08, 0xaa, 0x4b, 0xe0, - 0x30, 0x4d, 0xe9, 0xe8, 0x3e, 0x10, 0xcb, 0x18, 0x26, 0x13, 0x05, 0x1d, - 0x8e, 0xb7, 0x5f, 0xd9, 0x08, 0xca, 0xf8, 0x1e, 0x02, 0xf4, 0x35, 0x69, - 0xf2, 0xf1, 0x65, 0x50, 0xde, 0x9c, 0x93, 0x51, 0xb6, 0xa2, 0xc4, 0xa0, - 0x57, 0x58, 0x11, 0x9f, 0xce, 0xa0, 0x33, 0xb1, 0x3a, 0x02, 0x1a, 0x7f, - 0x15, 0x9d, 0x4a, 0x30, 0x66, 0x3c, 0xd2, 0xd4, 0xef, 0x94, 0xf4, 0x1b, - 0x0c, 0x33, 0x1e, 0x3e, 0x1c, 0x99, 0x30, 0xaf, 0x1e, 0x3d, 0x55, 0xc8, - 0x28, 0x87, 0xbd, 0x3a, 0x7a, 0xb5, 0xb7, 0x1c, 0x5c, 0xdc, 0xf1, 0xaf, - 0x5c, 0x16, 0x35, 0x81, 0x72, 0x8a, 0x95, 0x61, 0x13, 0x19, 0x77, 0x9f, - 0x45, 0xf2, 0x74, 0x66, 0x11, 0x8f, 0x91, 0x34, 0x32, 0x5e, 0xd9, 0x8a, - 0x0b, 0xad, 0x55, 0x66, 0x54, 0x88, 0xb0, 0x0a, 0xd2, 0xb0, 0x6e, 0x29, - 0xd2, 0x1d, 0xb6, 0x7a, 0x94, 0xd0, 0xbd, 0xf7, 0x37, 0x31, 0x04, 0xd3, - 0x79, 0x5c, 0xd7, 0x05, 0x5f, 0x29, 0x9d, 0xc1, 0x39, 0x17, 0xf6, 0xaf, - 0xfe, 0x2a, 0x26, 0xbe, 0x10, 0x4e, 0x57, 0x2e, 0xcb, 0x7b, 0x2b, 0x0f, - 0xd0, 0x27, 0x87, 0xab, 0xbc, 0x73, 0x0e, 0x3e, 0x21, 0x73, 0x81, 0xf1, - 0xf8, 0xd4, 0xcb, 0x72, 0xce, 0x81, 0xcc, 0x5d, 0x80, 0x32, 0x9f, 0xe0, - 0x25, 0x50, 0x1a, 0x3f, 0xe7, 0xa1, 0xb1, 0x00, 0xd7, 0x07, 0x02, 0x11, - 0x4a, 0x56, 0xe0, 0x95, 0x67, 0xb7, 0x7a, 0x7e, 0xcb, 0x2f, 0x76, 0xf0, - 0x7f, 0xff, 0xf3, 0x22, 0xf3, 0xd8, 0xac, 0x12, 0xc1, 0xea, 0x79, 0x55, - 0xe2, 0x28, 0x2f, 0xf9, 0x44, 0xdf, 0x31, 0xb8, 0x8e, 0xa9, 0x5f, 0x15, - 0x2b, 0x4a, 0x00, 0x82, 0x7e, 0xf3, 0xf7, 0xda, 0x27, 0x0e, 0x8d, 0x4f, - 0x3f, 0x06, 0x03, 0x33, 0xd2, 0xab, 0xd6, 0xb5, 0x79, 0xbe, 0x5e, 0x0d, - 0x10, 0xb1, 0x62, 0xb7, 0xe6, 0x24, 0xb2, 0x9a, 0xa6, 0xe1, 0x97, 0x5f, - 0xad, 0x5f, 0x2b, 0xdf, 0x10, 0xf9, 0x12, 0xe6, 0x6a, 0xc1, 0x7e, 0xac, - 0x1a, 0x13, 0x3b, 0xe0, 0xe8, 0x23, 0x39, 0x86, 0x9c, 0x5d, 0x27, 0xb8, - 0x3e, 0x25, 0xbe, 0x44, 0xcf, 0x2f, 0xcf, 0x7c, 0x41, 0xb5, 0x33, 0xbd, - 0xf0, 0x61, 0x6a, 0x93, 0x3f, 0x13, 0x82, 0xa5, 0xde, 0xdc, 0x8d, 0xd4, - 0x3e, 0xcd, 0xb8, 0xdb, 0x2b, 0xa8, 0xc9, 0xcd, 0x93, 0xe4, 0xe0, 0x43, - 0x50, 0x13, 0x78, 0x67, 0x7f, 0xe5, 0xe0, 0xf9, 0xb6, 0x8a, 0xc1, 0xb2, - 0xb2, 0xa6, 0xda, 0x4f, 0xe0, 0x1a, 0x9a, 0x2a, 0x1b, 0x77, 0xd6, 0x5a, - 0x21, 0x9e, 0x37, 0xd4, 0xc1, 0x97, 0x73, 0x3c, 0xd0, 0xe4, 0x97, 0x38, - 0x5f, 0x7b, 0x67, 0x80, 0x8f, 0x2d, 0x13, 0xd3, 0xac, 0xe6, 0x3c, 0x4d, - 0x4b, 0x85, 0x47, 0x30, 0x9d, 0x7c, 0xa5, 0xde, 0xc8, 0x06, 0x27, 0xbd, - 0x80, 0x2c, 0xa6, 0x2c, 0x3d, 0x27, 0xe2, 0x01, 0xb5, 0x5a, 0x58, 0x8b, - 0x08, 0x77, 0xcb, 0xb4, 0xfe, 0xe8, 0x61, 0x63, 0xe4, 0x54, 0xbb, 0xb7, - 0xb1, 0xdb, 0xcf, 0xa2, 0xf3, 0x14, 0xa2, 0x45, 0xc7, 0x69, 0xc3, 0x59, - 0xb2, 0x87, 0xab, 0x1d, 0x9d, 0x1a, 0xaf, 0x49, 0x5c, 0x7c, 0x21, 0x1f, - 0xaf, 0x0f, 0x8e, 0x00, 0x67, 0xab, 0xb3, 0x33, 0xfc, 0x97, 0xc2, 0x2e, - 0xa8, 0x52, 0xae, 0x8a, 0x16, 0x33, 0x39, 0xc4, 0x73, 0xdf, 0xc7, 0xf3, - 0x63, 0x0b, 0x31, 0xf8, 0xb8, 0x57, 0x91, 0xcb, 0x0f, 0x0b, 0x74, 0x3a, - 0xb4, 0x3e, 0x4d, 0x6d, 0x25, 0x1b, 0xe8, 0x30, 0xac, 0xbe, 0x29, 0x03, - 0x12, 0x43, 0xca, 0x12, 0x56, 0x25, 0x4a, 0xad, 0x87, 0x93, 0x43, 0xb1, - 0x41, 0xac, 0xa7, 0x06, 0xf2, 0x15, 0xf5, 0x00, 0x84, 0xc5, 0xbe, 0x22, - 0xf8, 0x60, 0xa1, 0x38, 0x42, 0x8c, 0x25, 0xda, 0xd2, 0x5d, 0xbe, 0xa1, - 0xc4, 0xc0, 0xf8, 0x33, 0x4e, 0x59, 0xf8, 0xd7, 0x3c, 0xfd, 0x65, 0xa0, - 0xa1, 0xf8, 0xbb, 0xc6, 0xa3, 0x20, 0xf5, 0x71, 0x04, 0xb6, 0x79, 0x19, - 0x85, 0x77, 0xc2, 0x6e, 0x4c, 0x17, 0x21, 0x59, 0xa7, 0xe5, 0x3d, 0x26, - 0x42, 0xeb, 0xf0, 0x29, 0xba, 0xef, 0x97, 0x05, 0x63, 0xe9, 0x7f, 0x88, - 0x4f, 0x8d, 0x7d, 0xdf, 0x01, 0x6d, 0x9d, 0x1e, 0xf6, 0xe1, 0x11, 0xf8, - 0xf1, 0xfa, 0x15, 0x31, 0xfd, 0x50, 0xac, 0x29, 0xbf, 0x4e, 0x3f, 0xbb, - 0xa1, 0x20, 0x2e, 0x4f, 0x30, 0xbd, 0xb9, 0xed, 0x5b, 0xbf, 0x23, 0x59, - 0x5f, 0x2a, 0x3e, 0xd2, 0x05, 0x00, 0xf9, 0x4b, 0xc6, 0x48, 0xd8, 0xb0, - 0x91, 0xa2, 0x9f, 0x5b, 0xbd, 0xd7, 0xa6, 0x7f, 0x41, 0x49, 0x78, 0x94, - 0x15, 0x90, 0xe7, 0x58, 0xd1, 0x8a, 0xfa, 0x27, 0xfa, 0x1b, 0xe9, 0x52, - 0xf2, 0xa8, 0xc1, 0xc1, 0x48, 0x61, 0x2a, 0x2f, 0xdd, 0x9e, 0x52, 0x9a, - 0xa7, 0x9d, 0xe8, 0x23, 0xd9, 0x73, 0x8b, 0x09, 0x8c, 0x79, 0xb3, 0x48, - 0x32, 0xe0, 0x4e, 0xce, 0x37, 0x48, 0x61, 0x26, 0x79, 0x8e, 0x02, 0xeb, - 0xa0, 0xf8, 0xff, 0xda, 0xaa, 0x36, 0x8b, 0x4d, 0x29, 0x8b, 0x8d, 0x41, - 0xea, 0xbc, 0xdc, 0xde, 0x3a, 0x9b, 0x9e, 0xdf, 0xda, 0xcc, 0xc1, 0x42, - 0x16, 0x59, 0x5c, 0x2a, 0x83, 0x35, 0xa3, 0x1e, 0x86, 0x6c, 0x53, 0x43, - 0xe9, 0xa8, 0x31, 0xd1, 0xfa, 0x24, 0x57, 0x74, 0xad, 0x07, 0xc6, 0x63, - 0x07, 0x77, 0x71, 0x9c, 0xe3, 0x58, 0x1a, 0xc2, 0xb3, 0xe6, 0x88, 0x5c, - 0x45, 0x0f, 0xe2, 0x4c, 0xd2, 0x20, 0x29, 0x3b, 0xf5, 0xf4, 0x4e, 0x85, - 0x82, 0xaa, 0xfd, 0xf1, 0x44, 0xf3, 0x27, 0x89, 0x9e, 0x12, 0x87, 0x14, - 0xf6, 0x56, 0x48, 0x03, 0x81, 0x5e, 0x96, 0xff, 0xb2, 0x8e, 0x48, 0x7d, - 0xe7, 0x0f, 0xfd, 0x24, 0x9d, 0x37, 0xbc, 0xac, 0xd7, 0x08, 0xbd, 0xe3, - 0xe7, 0x7d, 0x80, 0x15, 0x35, 0xdc, 0x88, 0xbe, 0xfa, 0x40, 0xa6, 0x17, - 0x85, 0xfc, 0x04, 0xda, 0xfa, 0x7b, 0x6c, 0xe6, 0xb4, 0x8d, 0x1b, 0x7e, - 0x27, 0xbc, 0xa7, 0x02, 0xeb, 0x8d, 0xc5, 0xaf, 0xc8, 0xa7, 0x98, 0x2b, - 0x4f, 0xad, 0x22, 0xc2, 0xf1, 0x33, 0x2f, 0x2d, 0x3e, 0x8b, 0x8a, 0x1b, - 0xea, 0x55, 0xd2, 0xe4, 0x15, 0xb9, 0x96, 0x1e, 0x21, 0xb6, 0x30, 0xb3, - 0x72, 0x50, 0xbc, 0x24, 0x29, 0x4c, 0x37, 0x86, 0xbb, 0xe0, 0x0a, 0x92, - 0xea, 0x51, 0x2e, 0xa5, 0xf1, 0x7c, 0x94, 0xef, 0x1b, 0x55, 0x8e, 0xe5, - 0x40, 0x3b, 0xa2, 0xb3, 0x7c, 0x81, 0x0d, 0xb5, 0x20, 0x76, 0xc5, 0x99, - 0x39, 0xfb, 0x61, 0x0b, 0x4b, 0xf4, 0xac, 0xd2, 0x65, 0xb7, 0x20, 0xc0, - 0xab, 0x3f, 0xe6, 0x1c, 0x46, 0xcf, 0xdf, 0x84, 0xc2, 0x66, 0xd2, 0x9b, - 0x53, 0x32, 0x45, 0xcc, 0x89, 0xbb, 0x89, 0xe7, 0x3d, 0xa3, 0x9d, 0x75, - 0xdc, 0xba, 0x67, 0xd4, 0x7a, 0xe0, 0x00, 0x03, 0xfb, 0xd1, 0x6d, 0x10, - 0xc0, 0x62, 0x4a, 0xfd, 0xb7, 0x31, 0x0c, 0x01, 0x1c, 0xfc, 0x7f, 0x5f, - 0xcb, 0xfe, 0x78, 0x7f, 0xe5, 0x8a, 0x09, 0x5a, 0xc6, 0xd8, 0x97, 0xe7, - 0x62, 0xcd, 0xc7, 0x0c, 0xf0, 0x5e, 0x16, 0xfe, 0x18, 0x50, 0xed, 0x73, - 0xcc, 0xf7, 0x81, 0x32, 0x0f, 0xad, 0x06, 0xb9, 0x82, 0xa0, 0xe9, 0x49, - 0x10, 0x98, 0x3b, 0x5d, 0xf1, 0xaa, 0xbe, 0xb0, 0xb1, 0x11, 0x1b, 0xd0, - 0xaf, 0xd1, 0xe5, 0xc8, 0x35, 0x2e, 0x04, 0x88, 0x26, 0x63, 0x25, 0x38, - 0x77, 0x1e, 0x66, 0x98, 0x7f, 0x7c, 0x75, 0xe2, 0x13, 0xe6, 0x6b, 0x63, - 0x59, 0xd1, 0xd1, 0x65, 0x4a, 0x3a, 0x5a, 0xfe, 0xf8, 0x23, 0xab, 0xed, - 0x2d, 0x68, 0x78, 0x55, 0x8f, 0x69, 0x1e, 0x2a, 0x8f, 0xb2, 0xc2, 0xa4, - 0xe6, 0x8f, 0xc4, 0xd9, 0x4e, 0xf6, 0xe9, 0x86, 0x0f, 0x3b, 0x98, 0x27, - 0x3a, 0x32, 0x17, 0x76, 0xee, 0x3a, 0x48, 0xcb, 0x2b, 0x31, 0x16, 0xe0, - 0x46, 0x56, 0xe3, 0x95, 0x11, 0x59, 0xb7, 0xfa, 0x83, 0x2d, 0x40, 0xff, - 0x4f, 0x13, 0x07, 0x13, 0xac, 0x47, 0x20, 0xcb, 0xb4, 0x84, 0x63, 0x72, - 0x11, 0x5e, 0xee, 0xbe, 0x08, 0xc2, 0xe6, 0x48, 0xdd, 0x28, 0x7f, 0x9f, - 0x99, 0x57, 0x66, 0x38, 0x42, 0xd2, 0x95, 0x0c, 0x2a, 0x4e, 0xf2, 0x0e, - 0x58, 0xe5, 0x82, 0xb5, 0x34, 0xa5, 0xaf, 0x3b, 0x5a, 0x8e, 0x83, 0xc5, - 0x6d, 0xfd, 0x43, 0x3f, 0xa8, 0xbd, 0x65, 0xcd, 0x2b, 0xd2, 0xf1, 0xae, - 0x66, 0x13, 0x34, 0x27, 0x39, 0x89, 0x4b, 0x7a, 0xb3, 0x28, 0xbf, 0xfc, - 0x66, 0x63, 0x2b, 0x59, 0xaa, 0x81, 0xe1, 0xbe, 0xc6, 0x39, 0xb0, 0x5c, - 0xf6, 0x15, 0x60, 0x99, 0xfc, 0x45, 0x0a, 0xc4, 0x31, 0x70, 0xd9, 0xb1, - 0x13, 0x97, 0xff, 0x80, 0xd0, 0x3c, 0x3e, 0x22, 0x79, 0x75, 0xc4, 0x66, - 0xf5, 0xf3, 0xb3, 0xe6, 0x77, 0x8b, 0xef, 0x56, 0x78, 0x2c, 0x33, 0xa5, - 0x01, 0xe3, 0xcf, 0xa0, 0x30, 0x64, 0x32, 0x1d, 0x05, 0x9a, 0x21, 0x41, - 0x18, 0x22, 0x0f, 0x7b, 0x60, 0x00, 0xbb, 0xc5, 0x5a, 0xd8, 0x85, 0xc1, - 0xd7, 0x11, 0x87, 0x53, 0xbd, 0xa3, 0xae, 0xd5, 0x3a, 0xcf, 0x00, 0x40, - 0x64, 0x1f, 0xa0, 0x44, 0xbb, 0x60, 0x49, 0x77, 0x01, 0xba, 0x3a, 0xa2, - 0xad, 0xb1, 0x0d, 0x00, 0xc8, 0x76, 0xcc, 0xd2, 0xc0, 0x69, 0x2d, 0x95, - 0x05, 0xf7, 0xf6, 0xd1, 0x8c, 0x2b, 0xee, 0x89, 0xab, 0x7c, 0x31, 0x82, - 0xfb, 0x9b, 0x09, 0x83, 0x39, 0x18, 0x19, 0x05, 0x73, 0x36, 0xac, 0xaf, - 0x0a, 0x66, 0xb7, 0xe3, 0x0d, 0x98, 0x96, 0x2d, 0xc7, 0x93, 0xb3, 0x2f, - 0x89, 0xe2, 0xf7, 0xe5, 0x4a, 0x6a, 0x0f, 0x9f, 0x0e, 0xe9, 0x10, 0x77, - 0x8f, 0xc4, 0x40, 0xa6, 0x11, 0x7f, 0xb3, 0xb4, 0xc2, 0x3c, 0xd6, 0x4e, - 0xe9, 0xa2, 0xdc, 0x2a, 0x37, 0xe2, 0x2f, 0x7b, 0x41, 0x17, 0xe5, 0x7a, - 0x80, 0xb4, 0x4a, 0x32, 0x2d, 0x37, 0x24, 0xa3, 0x42, 0xb4, 0xba, 0x58, - 0x59, 0x2a, 0x5e, 0x36, 0x09, 0xa5, 0xed, 0x32, 0xcb, 0x57, 0x83, 0xe9, - 0xbb, 0xe5, 0x7d, 0x7d, 0x10, 0x6f, 0x82, 0xce, 0x3b, 0x01, 0x49, 0xe4, - 0x60, 0xfe, 0xfc, 0xd5, 0xdd, 0xa9, 0xb0, 0xad, 0x4a, 0x12, 0x97, 0x77, - 0x0e, 0xa5, 0x10, 0x39, 0xf8, 0xfb, 0x5c, 0xd7, 0xdc, 0x66, 0x39, 0x07, - 0xe5, 0xce, 0x4c, 0xa3, 0xcf, 0x59, 0x97, 0xbd, 0x00, 0xa4, 0x90, 0x8b, - 0x31, 0x2f, 0xca, 0x91, 0x74, 0xe1, 0x4c, 0xdd, 0x0e, 0x93, 0x85, 0x9a, - 0x91, 0x5a, 0xfb, 0x9e, 0x1c, 0x01, 0x0f, 0xcb, 0xce, 0xb2, 0xcb, 0xa3, - 0xc2, 0xc4, 0x11, 0x03, 0x0a, 0x1d, 0x88, 0x03, 0x1e, 0x3c, 0xdd, 0x85, - 0x55, 0x2e, 0xee, 0x3b, 0xc7, 0x80, 0xf6, 0x63, 0xe9, 0xfc, 0xad, 0x71, - 0x76, 0xf5, 0x94, 0x94, 0x53, 0xdf, 0x33, 0x82, 0x2a, 0x68, 0xf6, 0x92, - 0x27, 0x67, 0xb2, 0x4c, 0x48, 0x8c, 0x58, 0x1d, 0xde, 0x20, 0x71, 0x57, - 0x7b, 0xe4, 0x67, 0xd1, 0x00, 0x9b, 0x40, 0x5b, 0x40, 0xe1, 0x6e, 0x95, - 0x4f, 0x6c, 0xf5, 0x4d, 0xd3, 0xf9, 0xca, 0x1d, 0xfa, 0x86, 0x7d, 0x2b, - 0x53, 0x1a, 0x21, 0xa2, 0xef, 0x70, 0x69, 0x67, 0x16, 0xbc, 0x2a, 0x56, - 0x0f, 0x58, 0xab, 0x44, 0x02, 0xe3, 0x2e, 0x3a, 0x8b, 0x47, 0x3c, 0x52, - 0x68, 0x80, 0x8c, 0xef, 0x90, 0x81, 0x6a, 0x60, 0x6a, 0xb5, 0x07, 0xba, - 0x1a, 0x82, 0xad, 0x58, 0x59, 0xbb, 0x7b, 0xf3, 0x5b, 0x29, 0xac, 0x2a, - 0x31, 0xc2, 0x0f, 0x37, 0x87, 0xb6, 0xd7, 0xe9, 0xaf, 0x65, 0x8f, 0x46, - 0x22, 0xe4, 0x6b, 0xcc, 0x4e, 0xd0, 0xdb, 0x56, 0x84, 0x0b, 0x1c, 0xcf, - 0xaa, 0xe3, 0x6a, 0x07, 0xbb, 0x0e, 0x4e, 0xb0, 0x76, 0x07, 0x14, 0xc8, - 0x77, 0x3d, 0x77, 0x8a, 0xca, 0x2e, 0x85, 0x1b, 0xfe, 0x15, 0x79, 0xe0, - 0x57, 0xb2, 0xc6, 0x96, 0x8d, 0xd1, 0x59, 0x5a, 0x9f, 0x47, 0x56, 0xdf, - 0xb5, 0x0f, 0x25, 0x8c, 0x2b, 0xd1, 0xbd, 0xa2, 0x4a, 0x8b, 0xdd, 0xc5, - 0x7d, 0x52, 0xcb, 0x62, 0x93, 0x79, 0x15, 0xd5, 0x14, 0x03, 0xab, 0x1b, - 0x28, 0xc3, 0x9c, 0xd1, 0x95, 0x52, 0x36, 0x7f, 0x35, 0x91, 0xe8, 0xe8, - 0xb3, 0xc9, 0xd2, 0xe7, 0x87, 0x5f, 0xc4, 0x8c, 0xc1, 0x83, 0xab, 0x6f, - 0xcc, 0xfc, 0x5f, 0x4d, 0xf4, 0xfa, 0x82, 0x53, 0xb9, 0xa8, 0x5f, 0x45, - 0x57, 0x50, 0xd9, 0x26, 0x34, 0xd2, 0x4a, 0x8f, 0x98, 0x84, 0xc7, 0xc5, - 0x67, 0x63, 0xf8, 0x03, 0x93, 0x1f, 0x47, 0x6f, 0xb1, 0x45, 0xa5, 0xd4, - 0xff, 0xa3, 0xcc, 0xca, 0x14, 0x82, 0x94, 0xa1, 0x4f, 0xa3, 0x3d, 0xc5, - 0x71, 0xaa, 0x3b, 0xec, 0x1a, 0x7f, 0x4b, 0xc0, 0xfd, 0x00, 0xfd, 0x4b, - 0xe1, 0xbf, 0x32, 0xb1, 0x07, 0x8e, 0x84, 0x79, 0x78, 0x88, 0xd7, 0xac, - 0xe4, 0x11, 0x48, 0xdf, 0xb0, 0x63, 0x9d, 0xc1, 0x61, 0xe6, 0xdc, 0x78, - 0x53, 0x27, 0xa4, 0xb6, 0xb5, 0x61, 0xfd, 0x32, 0x85, 0x0c, 0xfe, 0xc7, - 0xfc, 0x99, 0x00, 0x91, 0xc3, 0xb7, 0x28, 0x2f, 0x56, 0xb4, 0x7b, 0xe1, - 0x33, 0xe8, 0x11, 0x6c, 0x2f, 0xba, 0x9c, 0xdb, 0x7a, 0x82, 0xbd, 0xab, - 0x28, 0xd2, 0x0e, 0xc9, 0x68, 0xfc, 0x66, 0x9d, 0x97, 0x85, 0x00, 0x7f, - 0xbc, 0x51, 0xd0, 0xcd, 0x97, 0x74, 0x66, 0x32, 0xb6, 0x34, 0xa2, 0x6c, - 0x8f, 0xb8, 0x51, 0xa5, 0xb6, 0xda, 0x57, 0x0d, 0x0b, 0xa7, 0xf5, 0x95, - 0x64, 0xd4, 0x5d, 0x9f, 0xe8, 0xfd, 0xd7, 0xd2, 0xf2, 0x54, 0x5f, 0x94, - 0x95, 0x92, 0xbd, 0xb4, 0x01, 0x61, 0x00, 0x71, 0x41, 0x72, 0x5f, 0x57, - 0xe0, 0xbe, 0x97, 0x4d, 0xdd, 0x22, 0xf4, 0xfa, 0x82, 0x77, 0xea, 0xf1, - 0x30, 0x10, 0x4c, 0x94, 0xc4, 0xf2, 0x35, 0x27, 0x75, 0x8d, 0x66, 0x82, - 0x7f, 0x79, 0x33, 0xca, 0x4b, 0x6d, 0x8d, 0x08, 0x32, 0x22, 0xc7, 0x59, - 0x66, 0x61, 0xb2, 0x48, 0xe9, 0x17, 0x82, 0xa2, 0x4a, 0x72, 0x3b, 0xff, - 0xcb, 0x90, 0xea, 0x7d, 0xb5, 0x2a, 0x08, 0x76, 0xcf, 0xc3, 0xf7, 0x0d, - 0x69, 0xaa, 0x05, 0x7d, 0x11, 0x64, 0xc5, 0x21, 0xe8, 0x28, 0x7d, 0x91, - 0x35, 0x1b, 0xb7, 0x09, 0xa9, 0x7e, 0x7e, 0x35, 0x77, 0x7c, 0xe1, 0xf5, - 0x31, 0xea, 0x20, 0xf9, 0x7d, 0xc9, 0xe1, 0x38, 0x99, 0xc6, 0x80, 0x96, - 0x1c, 0x5c, 0x10, 0xa5, 0x30, 0x3a, 0x41, 0x48, 0x40, 0x02, 0xba, 0x6a, - 0x0b, 0xec, 0x5c, 0xf3, 0xad, 0xd9, 0x86, 0x8b, 0xe3, 0xbd, 0xff, 0x7a, - 0x6c, 0x8e, 0x23, 0xdb, 0x71, 0x23, 0xec, 0x01, 0x00, 0xab, 0xce, 0x5b, - 0x98, 0x05, 0x5e, 0x32, 0x7c, 0x1d, 0x2b, 0x3e, 0xe8, 0x73, 0xeb, 0x92, - 0xbe, 0x48, 0xb3, 0x08, 0x66, 0x03, 0x07, 0xc0, 0x3f, 0xad, 0x25, 0xfc, - 0xbe, 0xdd, 0x6c, 0x4d, 0xdf, 0x13, 0x4b, 0xaa, 0xf8, 0xc0, 0xe4, 0x59, - 0xfb, 0x55, 0xb5, 0x5d, 0x28, 0x2d, 0x1d, 0x1a, 0x65, 0x2a, 0x23, 0x2e, - 0x44, 0xe5, 0x2c, 0xfd, 0x94, 0xe9, 0xd3, 0xa5, 0x94, 0x65, 0xcc, 0xcd, - 0x5b, 0x26, 0x1b, 0x04, 0x09, 0xa2, 0xf0, 0x4e, 0xfc, 0x87, 0x51, 0xcc, - 0x5a, 0x4e, 0x50, 0x41, 0x00, 0xa8, 0x46, 0x61, 0x71, 0x39, 0xdf, 0xc6, - 0x1b, 0xed, 0x8a, 0xe9, 0xf0, 0xcf, 0xea, 0xb7, 0x4f, 0x77, 0x8a, 0x2c, - 0x4e, 0xec, 0xcc, 0x2c, 0x3f, 0xdb, 0x91, 0x44, 0x3b, 0x03, 0xf2, 0x1c, - 0x2e, 0x0a, 0xfb, 0x58, 0x51, 0xef, 0x0b, 0x34, 0x76, 0x9b, 0x0f, 0x91, - 0xfe, 0xa1, 0x59, 0x7c, 0xaa, 0x71, 0xd7, 0x8a, 0xf2, 0x95, 0xd0, 0xfc, - 0x54, 0xaa, 0x1a, 0x65, 0x67, 0xb2, 0x29, 0x79, 0x33, 0x5d, 0x7f, 0xd5, - 0x46, 0xbb, 0x5f, 0x8d, 0x68, 0x77, 0x54, 0x4c, 0x7c, 0x5f, 0xb4, 0xa3, - 0x1b, 0x7c, 0xe3, 0x39, 0x20, 0x2f, 0xf4, 0x43, 0x9b, 0x76, 0xc2, 0x59, - 0xf3, 0x52, 0x68, 0xed, 0x15, 0x3a, 0x0b, 0x27, 0xf5, 0x86, 0x7a, 0x09, - 0xe8, 0xc7, 0x18, 0xc5, 0x65, 0x9a, 0xc5, 0xb4, 0x88, 0x8c, 0x83, 0x83, - 0xfc, 0x89, 0xd5, 0xf8, 0xd5, 0xb4, 0x31, 0x13, 0x8c, 0x26, 0x8a, 0x95, - 0x39, 0x4c, 0xab, 0xc5, 0x97, 0x2c, 0xee, 0x9b, 0xb1, 0x36, 0x42, 0x23, - 0x1b, 0x67, 0xd1, 0xde, 0xe5, 0xac, 0xe8, 0xbd, 0xea, 0x41, 0x0c, 0x31, - 0x88, 0x0e, 0x2a, 0xb6, 0x49, 0xf3, 0x81, 0xb3, 0xe2, 0x5f, 0xc7, 0x5f, - 0xbb, 0x8b, 0x71, 0xe4, 0x04, 0x6a, 0x30, 0x4c, 0xa3, 0x01, 0x54, 0xa1, - 0x56, 0xaa, 0x0b, 0xf1, 0xec, 0xd0, 0x36, 0x73, 0xaa, 0x0f, 0x7f, 0x5f, - 0xeb, 0x97, 0xff, 0x14, 0x1f, 0x21, 0x3f, 0x2c, 0xd5, 0xf1, 0xcd, 0x39, - 0x31, 0x0e, 0x91, 0xe4, 0x0e, 0xf5, 0x12, 0x40, 0xe5, 0x62, 0xa2, 0x59, - 0xb2, 0x66, 0xee, 0xaa, 0x00, 0xd9, 0x9a, 0x4f, 0xd8, 0x27, 0xc7, 0x5b, - 0x0c, 0x5a, 0x2d, 0x37, 0x3e, 0xfa, 0x64, 0x5f, 0x7b, 0xc8, 0xf3, 0xe1, - 0x84, 0x47, 0x19, 0xb1, 0x1c, 0x0e, 0xe7, 0x1c, 0x50, 0x40, 0x8f, 0x67, - 0xe8, 0x57, 0xb6, 0x47, 0xfc, 0x85, 0xcf, 0xa0, 0x3e, 0xc0, 0x14, 0x86, - 0x54, 0xaf, 0xdc, 0x3a, 0x40, 0x0c, 0x67, 0x40, 0xab, 0x69, 0x19, 0xcf, - 0xef, 0x3d, 0x8a, 0x13, 0x98, 0xd7, 0x91, 0xc5, 0x45, 0xee, 0x8a, 0xec, - 0x44, 0x69, 0x29, 0xb1, 0x99, 0x6f, 0xd7, 0x6a, 0x2e, 0x57, 0x8d, 0x48, - 0x3e, 0x86, 0x77, 0x7c, 0xde, 0x6d, 0xf7, 0x1f, 0xdc, 0x41, 0xcc, 0xf4, - 0xd9, 0x85, 0x50, 0x55, 0x0f, 0x82, 0x09, 0x38, 0x74, 0x17, 0xa8, 0xe5, - 0xe0, 0xd0, 0xea, 0x6c, 0x1a, 0x07, 0x83, 0x3f, 0xa9, 0x93, 0xea, 0xc7, - 0xc5, 0xa6, 0x3d, 0xb4, 0x6e, 0x3c, 0x09, 0x62, 0x73, 0xf8, 0x73, 0x9f, - 0x94, 0x46, 0x68, 0xf0, 0x52, 0x4a, 0xf7, 0x07, 0xa4, 0x62, 0x5f, 0xaa, - 0x90, 0x46, 0x06, 0x86, 0xdf, 0x31, 0x7e, 0x4f, 0x8e, 0x89, 0xdc, 0xfb, - 0xbc, 0x48, 0x23, 0x3c, 0x14, 0x30, 0xfb, 0xfc, 0x40, 0xa1, 0x73, 0xdf, - 0x87, 0x72, 0xe4, 0x2c, 0x29, 0xf8, 0xd5, 0xa5, 0x9c, 0x00, 0xcf, 0x09, - 0x2d, 0xc0, 0xec, 0x7d, 0x55, 0x4c, 0xa9, 0x14, 0x79, 0x09, 0x48, 0xd2, - 0x00, 0xb9, 0x07, 0x35, 0xf4, 0xa6, 0x07, 0x4e, 0x00, 0x0f, 0x37, 0x74, - 0xf3, 0x10, 0x98, 0x47, 0x9a, 0x38, 0xf5, 0xf7, 0xe2, 0xa3, 0xda, 0xef, - 0xba, 0xf6, 0x0d, 0x9e, 0x84, 0xdf, 0x44, 0xe8, 0xf4, 0x66, 0x58, 0x5f, - 0xfa, 0x77, 0x4e, 0xd2, 0x7c, 0x6b, 0xcd, 0xed, 0xdd, 0x64, 0xee, 0xc2, - 0x53, 0xe2, 0x47, 0x59, 0xd0, 0xe4, 0xa4, 0x9f, 0x62, 0x97, 0xa4, 0xe0, - 0x99, 0xcf, 0x9c, 0x8e, 0x2a, 0x78, 0x27, 0x55, 0xa9, 0x12, 0x40, 0x7b, - 0x12, 0xfa, 0x98, 0xd0, 0x1f, 0x6e, 0x98, 0x15, 0x15, 0x15, 0xf6, 0x09, - 0x9c, 0xe1, 0x07, 0x1e, 0x2d, 0xc7, 0xd8, 0x5b, 0x52, 0x57, 0xa0, 0xd1, - 0x7f, 0x07, 0xfd, 0x00, 0x5a, 0x93, 0x09, 0xcb, 0x3a, 0xc7, 0xe0, 0x54, - 0x32, 0xe7, 0xaf, 0xdc, 0x42, 0x44, 0x44, 0x1c, 0x10, 0xd9, 0x8b, 0x38, - 0x5c, 0x3c, 0x6c, 0x60, 0xd4, 0x87, 0x7b, 0x11, 0x37, 0x67, 0x5f, 0x85, - 0x8b, 0xba, 0x9d, 0x99, 0x73, 0xf1, 0xf6, 0x2a, 0x8b, 0xbe, 0x4b, 0xba, - 0x83, 0x54, 0xaf, 0xfd, 0xa9, 0xbd, 0x84, 0x06, 0x54, 0xeb, 0x27, 0xd0, - 0xec, 0xac, 0x1b, 0x7e, 0x16, 0xcd, 0xb7, 0x1e, 0xee, 0xe3, 0x99, 0x21, - 0xc4, 0xf2, 0xc2, 0x5f, 0xe7, 0x9e, 0x7d, 0xa5, 0x8e, 0x6d, 0xb7, 0xcc, - 0xcf, 0xc9, 0x4c, 0xdf, 0x67, 0x16, 0x03, 0xd4, 0x54, 0x7c, 0xdf, 0x2b, - 0xb4, 0xab, 0xf8, 0x2c, 0x4b, 0xed, 0x20, 0xec, 0x1d, 0x08, 0xff, 0xa9, - 0xb1, 0x9f, 0xc5, 0xa9, 0x7f, 0xaa, 0x4a, 0xb5, 0xd3, 0xea, 0x83, 0x51, - 0xb9, 0x11, 0xe7, 0xf9, 0x43, 0xec, 0x2f, 0x2c, 0x51, 0x31, 0xa3, 0x77, - 0x28, 0x06, 0x2d, 0x2b, 0x96, 0x2a, 0xcb, 0x6d, 0xec, 0x65, 0x69, 0x23, - 0xe9, 0x01, 0xce, 0x5a, 0xde, 0xfa, 0xa1, 0xa6, 0x88, 0x4d, 0x0b, 0x1c, - 0xfc, 0x29, 0x00, 0xb3, 0xfb, 0xb6, 0x4c, 0xef, 0x16, 0xda, 0xa6, 0x94, - 0xa6, 0x90, 0x9d, 0x91, 0xdf, 0xef, 0x85, 0x7f, 0xf5, 0xcf, 0xb3, 0x84, - 0xda, 0xf9, 0x17, 0x73, 0x90, 0x73, 0x43, 0x60, 0x22, 0x82, 0x11, 0xee, - 0xc5, 0x07, 0x3e, 0x2a, 0x2f, 0xb7, 0x26, 0x85, 0x78, 0xb7, 0xc1, 0xfd, - 0xef, 0xb2, 0x9f, 0xd3, 0x93, 0xed, 0x07, 0xde, 0xb3, 0xf1, 0x8c, 0x42, - 0x12, 0xfd, 0x58, 0xde, 0x74, 0x44, 0xd2, 0x97, 0xe6, 0xc8, 0x33, 0x50, - 0xb9, 0xee, 0xdb, 0x5b, 0x1e, 0x9e, 0x5d, 0xcd, 0x54, 0x9e, 0x72, 0xc1, - 0x29, 0xaa, 0xa1, 0xf5, 0x59, 0x92, 0x68, 0xea, 0x76, 0x00, 0x9d, 0x9b, - 0x1f, 0x1b, 0x2f, 0x10, 0xa1, 0x19, 0x39, 0x56, 0xf7, 0xa3, 0x7c, 0xd4, - 0x99, 0xa7, 0x9f, 0x4f, 0x19, 0x14, 0xec, 0xb2, 0xb9, 0x37, 0x0d, 0x98, - 0xda, 0x47, 0x3a, 0x40, 0x17, 0x81, 0x7a, 0x6a, 0x31, 0x2a, 0x42, 0x22, - 0xe3, 0xbe, 0xad, 0x4c, 0x00, 0x1f, 0x3f, 0x93, 0x1b, 0xd9, 0x67, 0xd6, - 0x8f, 0x0e, 0x87, 0x6b, 0x06, 0xb7, 0x85, 0xe0, 0x7f, 0x9e, 0xa9, 0x31, - 0xc6, 0xc5, 0xf7, 0x70, 0x82, 0x47, 0x4a, 0xf2, 0x6a, 0x37, 0x81, 0x9d, - 0x17, 0xe3, 0x26, 0xd6, 0x8a, 0xf5, 0xfe, 0x45, 0x8b, 0xe2, 0xc2, 0x7e, - 0xa0, 0x6a, 0x4a, 0x5a, 0xe7, 0x7e, 0x90, 0x76, 0xad, 0x60, 0x2a, 0x3c, - 0x8d, 0xd2, 0xbb, 0xe1, 0x13, 0xd4, 0x36, 0x54, 0x62, 0xcf, 0x7a, 0xbe, - 0x62, 0x81, 0x7d, 0xd2, 0x7a, 0x22, 0x79, 0xc4, 0x94, 0x14, 0x52, 0xf6, - 0x09, 0xa7, 0xfd, 0xd7, 0xca, 0xc8, 0x71, 0x92, 0x2a, 0xb5, 0x03, 0x24, - 0xbd, 0x22, 0xa9, 0x6e, 0x7b, 0xf8, 0xe4, 0x40, 0x0f, 0x6a, 0xa3, 0x7d, - 0xc5, 0x67, 0x4c, 0xdd, 0xb6, 0x1d, 0xd4, 0xf4, 0x61, 0xb3, 0x9a, 0xa5, - 0xbc, 0x37, 0xa7, 0x7a, 0x54, 0xa2, 0xef, 0xe0, 0xcf, 0xe7, 0xf7, 0xe8, - 0x34, 0x67, 0x49, 0x71, 0x4f, 0x0c, 0x00, 0x29, 0x87, 0x90, 0xce, 0x7d, - 0x53, 0xf8, 0x2a, 0x21, 0x9e, 0xdf, 0xb4, 0xd3, 0xd0, 0x39, 0x7c, 0x42, - 0xd7, 0xc2, 0x3b, 0x6f, 0x04, 0x6d, 0xe0, 0xe0, 0xde, 0x9b, 0xcf, 0x69, - 0x6a, 0x25, 0xfd, 0x7c, 0xcf, 0xb9, 0x61, 0x71, 0xff, 0x2e, 0x6f, 0xa3, - 0x0e, 0x57, 0x05, 0x0c, 0x49, 0x50, 0xdf, 0xa5, 0xe9, 0xed, 0x1a, 0x66, - 0xe3, 0xab, 0x6d, 0x61, 0x55, 0x65, 0x8a, 0x21, 0x39, 0x96, 0x3b, 0x18, - 0x33, 0xe6, 0x71, 0x1a, 0x58, 0x56, 0x60, 0xd4, 0xab, 0x00, 0xec, 0x36, - 0x98, 0x02, 0x3f, 0x46, 0x4f, 0x5f, 0x75, 0x0f, 0x8a, 0xb2, 0x4d, 0x85, - 0x1e, 0x50, 0xee, 0x18, 0x31, 0xb0, 0xc3, 0x39, 0x04, 0x40, 0x66, 0xb2, - 0x7c, 0x46, 0x10, 0x27, 0xba, 0x86, 0x8a, 0x31, 0xef, 0xd1, 0x86, 0x89, - 0xaf, 0x84, 0x73, 0xb9, 0xc8, 0xcc, 0xa4, 0xa3, 0x35, 0x49, 0xb4, 0x52, - 0x76, 0x01, 0x69, 0x16, 0x8c, 0x23, 0x6c, 0x39, 0xb5, 0x02, 0x3f, 0x56, - 0x35, 0x0d, 0x11, 0x79, 0xc3, 0x07, 0xf8, 0xe0, 0x4e, 0x25, 0xd4, 0x39, - 0x5b, 0xa3, 0x9a, 0x7f, 0xb5, 0xa5, 0xed, 0x19, 0x1a, 0xf7, 0xb8, 0x1f, - 0x23, 0xf8, 0x63, 0x98, 0x2a, 0x90, 0x0e, 0xc6, 0x0e, 0xad, 0xbd, 0x55, - 0xda, 0x25, 0xeb, 0xac, 0xf1, 0xde, 0xbe, 0x64, 0x02, 0xae, 0x2b, 0x58, - 0x4c, 0x86, 0x7a, 0x0b, 0xb4, 0x3c, 0x3c, 0x68, 0xdd, 0xdd, 0x2d, 0xd2, - 0x44, 0x15, 0xce, 0x37, 0xd8, 0x88, 0x99, 0xa0, 0x2b, 0xe7, 0xe7, 0x76, - 0x3f, 0x58, 0xfc, 0xc4, 0x91, 0x71, 0xec, 0xae, 0x74, 0x39, 0x63, 0x91, - 0x3b, 0x79, 0xd2, 0xa5, 0x67, 0x8e, 0xaf, 0x76, 0x99, 0x9f, 0xbe, 0xfd, - 0xde, 0x8d, 0x23, 0xe1, 0xd1, 0xb1, 0x8a, 0x70, 0x4a, 0x0c, 0xbc, 0xf7, - 0x24, 0x22, 0xb6, 0xdf, 0x58, 0x4f, 0x4c, 0xde, 0x62, 0x9c, 0x66, 0xff, - 0x96, 0x38, 0x6b, 0xef, 0x45, 0x98, 0x9d, 0x31, 0x3a, 0xdc, 0x1f, 0x2c, - 0x01, 0xf7, 0x9a, 0x9e, 0x36, 0x98, 0xe9, 0x10, 0x0d, 0xea, 0x60, 0xb1, - 0x66, 0xb0, 0x09, 0xf7, 0x1c, 0x10, 0x84, 0xe4, 0xc2, 0xae, 0x03, 0xce, - 0xe9, 0x8b, 0xd5, 0xa5, 0xc8, 0xe7, 0xde, 0x58, 0xc2, 0xe5, 0xd8, 0xef, - 0xa1, 0x97, 0x77, 0x98, 0xfc, 0x36, 0x66, 0x52, 0xc0, 0x17, 0xde, 0x29, - 0x09, 0x98, 0xa5, 0x7b, 0xbf, 0x19, 0xb6, 0xea, 0x02, 0x0b, 0x68, 0xed, - 0x43, 0x7c, 0x43, 0x88, 0x02, 0x36, 0x80, 0x2e, 0x76, 0xbb, 0x4e, 0x71, - 0xb5, 0x24, 0xcc, 0xbf, 0x9d, 0xb6, 0x78, 0x8a, 0xf5, 0xe6, 0xcd, 0x7a, - 0xb4, 0x9b, 0xc9, 0x6f, 0xaa, 0xdc, 0xdb, 0x10, 0xdc, 0x86, 0x90, 0xbe, - 0x94, 0x54, 0xbd, 0xb5, 0x79, 0x97, 0x3f, 0x52, 0xbc, 0x07, 0x6d, 0x7f, - 0xe8, 0xbf, 0xf2, 0xb1, 0xc3, 0x04, 0x84, 0x75, 0xc3, 0x43, 0x0c, 0xbf, - 0x52, 0xbb, 0x5a, 0x35, 0x29, 0x83, 0xb2, 0x7f, 0x9b, 0x73, 0x6e, 0x75, - 0x41, 0x20, 0x3b, 0x1f, 0x5c, 0x7b, 0x57, 0x1f, 0x8b, 0xf4, 0x26, 0x24, - 0xde, 0x16, 0x4a, 0x1f, 0xdd, 0x7c, 0x7e, 0x3e, 0x2a, 0x47, 0x0e, 0xa2, - 0xe9, 0x13, 0xe7, 0x47, 0xdf, 0x2c, 0xab, 0xd6, 0x09, 0xba, 0x0b, 0xae, - 0x97, 0xc3, 0xac, 0x86, 0x97, 0xe5, 0x38, 0x49, 0x14, 0xc6, 0x95, 0xc4, - 0x0d, 0xd9, 0x37, 0x19, 0x9b, 0x3c, 0x15, 0x7e, 0xe7, 0x79, 0xcf, 0xcb, - 0xc6, 0x09, 0xe3, 0x74, 0x14, 0xf9, 0xd2, 0x23, 0x22, 0x56, 0x42, 0x79, - 0x5f, 0x88, 0xaa, 0xba, 0xa1, 0xff, 0x6b, 0xc1, 0x59, 0x67, 0xc2, 0x84, - 0xa3, 0x0e, 0xdc, 0x9f, 0x4e, 0x9e, 0x85, 0xaf, 0x83, 0xed, 0xd3, 0x7b, - 0x91, 0xaf, 0x7c, 0xc2, 0x84, 0x3f, 0xd8, 0xc7, 0x7d, 0x8a, 0x49, 0x90, - 0xf3, 0x92, 0xb0, 0x74, 0xb3, 0x2f, 0x96, 0x77, 0x12, 0xed, 0x0a, 0x8e, - 0x27, 0x97, 0xcf, 0x3c, 0xd9, 0xb2, 0xcb, 0x4a, 0x37, 0x8b, 0x68, 0xa1, - 0x34, 0xdb, 0x84, 0xbd, 0xe7, 0x97, 0x71, 0x1b, 0x99, 0x76, 0xb8, 0x2f, - 0xe1, 0x8d, 0x56, 0x7a, 0x45, 0x3d, 0xce, 0xac, 0x25, 0x5f, 0xc7, 0x55, - 0xe0, 0xa7, 0x05, 0x82, 0x4a, 0x89, 0x9b, 0x90, 0x5a, 0xca, 0x35, 0xa1, - 0x5c, 0x73, 0xb2, 0x80, 0xa4, 0x06, 0x83, 0xf3, 0x9b, 0xf7, 0x4e, 0x87, - 0x1e, 0x4d, 0xc0, 0x5c, 0x48, 0xa7, 0xf2, 0xb9, 0x90, 0x9c, 0x4a, 0x06, - 0x3b, 0x9a, 0x9f, 0x8c, 0x95, 0xe7, 0x61, 0xe4, 0x37, 0x4a, 0xf1, 0xd5, - 0xfa, 0xb5, 0x11, 0x61, 0x29, 0xa7, 0xde, 0x00, 0x8e, 0xc4, 0x35, 0x03, - 0x84, 0x21, 0x74, 0x74, 0xa1, 0x98, 0x42, 0xc2, 0x98, 0x00, 0x3a, 0xf7, - 0xcf, 0x3c, 0xc0, 0x5e, 0xd8, 0x18, 0x78, 0xcd, 0xc3, 0x18, 0xff, 0x26, - 0x65, 0xea, 0x1b, 0xcd, 0xe1, 0x21, 0xe7, 0xd9, 0x87, 0x7f, 0xa9, 0x9c, - 0xb4, 0x7a, 0x97, 0x6c, 0x01, 0x55, 0x5b, 0x2c, 0x76, 0xaa, 0x9a, 0xea, - 0x3d, 0x32, 0xe1, 0xb0, 0xee, 0x23, 0x46, 0x42, 0xe2, 0x28, 0x87, 0x8d, - 0x24, 0xa0, 0x7b, 0x58, 0xd6, 0x30, 0x46, 0x47, 0x68, 0x13, 0xfd, 0x5b, - 0x79, 0x86, 0xf7, 0x96, 0x11, 0x3a, 0x4f, 0x7b, 0x69, 0xe6, 0xeb, 0xf2, - 0x19, 0x62, 0x45, 0x05, 0xbd, 0xf6, 0xde, 0x67, 0x08, 0xf7, 0x27, 0x72, - 0xc8, 0xa7, 0x9e, 0xf2, 0xbb, 0x4c, 0x27, 0xe2, 0x92, 0x51, 0x41, 0xca, - 0x6d, 0x96, 0xbf, 0x97, 0xf7, 0x49, 0xe6, 0x26, 0xb3, 0x35, 0x21, 0x08, - 0xff, 0x4c, 0x0f, 0x87, 0x8b, 0xa6, 0xbb, 0x67, 0xcd, 0x31, 0x35, 0x3a, - 0x94, 0xcb, 0x51, 0xb3, 0x65, 0x2d, 0x85, 0x46, 0xa2, 0x21, 0x07, 0x73, - 0x21, 0x12, 0x2f, 0x6e, 0xf2, 0x81, 0x9b, 0xeb, 0x71, 0x9e, 0xb9, 0xa3, - 0x20, 0x46, 0xff, 0xf7, 0x2d, 0xad, 0xd9, 0x7e, 0xdc, 0x61, 0x60, 0xa1, - 0x64, 0x3a, 0xd8, 0xb4, 0x7b, 0x6c, 0xd8, 0x31, 0x9c, 0x3a, 0x91, 0xf6, - 0xb4, 0xe8, 0xeb, 0xbf, 0xbe, 0xe1, 0x32, 0x5d, 0x90, 0x08, 0x2f, 0xa3, - 0xde, 0xb6, 0xf9, 0x01, 0x46, 0x34, 0x08, 0xd4, 0xdb, 0x7d, 0x07, 0xcc, - 0x46, 0x2b, 0x9a, 0xe5, 0x9a, 0x15, 0x9b, 0xfe, 0x5c, 0x83, 0x68, 0x6a, - 0x22, 0x7f, 0x22, 0x92, 0xf3, 0x74, 0x06, 0xae, 0x15, 0x6f, 0x60, 0x64, - 0x42, 0x3c, 0xef, 0x82, 0xd8, 0x3f, 0x4d, 0xc0, 0x52, 0xb5, 0xea, 0xf7, - 0xc7, 0x10, 0x3d, 0xe2, 0x92, 0x3a, 0x17, 0xa5, 0x41, 0x80, 0x7a, 0x98, - 0x91, 0x5d, 0x81, 0x4d, 0x21, 0xc9, 0x4b, 0x9f, 0xf0, 0x51, 0x41, 0xe6, - 0x09, 0x36, 0xc3, 0x67, 0x61, 0x86, 0xef, 0x96, 0x74, 0x07, 0xdb, 0x0a, - 0x34, 0xe2, 0x08, 0x4f, 0x63, 0x37, 0x42, 0xe5, 0x0e, 0xb2, 0x99, 0x5e, - 0x06, 0x5a, 0xd2, 0x19, 0xb7, 0x84, 0x99, 0xc5, 0x7e, 0x9c, 0xca, 0x6b, - 0x18, 0x19, 0x54, 0xff, 0x75, 0x5f, 0x1d, 0x6c, 0xbe, 0x5a, 0x49, 0xec, - 0x56, 0x89, 0x73, 0xed, 0x92, 0xaf, 0x77, 0xff, 0x42, 0x49, 0xff, 0xd3, - 0xb0, 0x42, 0x79, 0xab, 0x6e, 0x74, 0xa9, 0x7a, 0x92, 0x38, 0x97, 0xf6, - 0xdd, 0x9c, 0x8b, 0x12, 0xf6, 0x1d, 0x0c, 0xa4, 0x5f, 0x69, 0xfa, 0x67, - 0x3c, 0xd4, 0x07, 0x53, 0x1c, 0xbc, 0x73, 0xd7, 0xa0, 0xa5, 0x28, 0x1f, - 0x25, 0x59, 0x9d, 0x4f, 0xe8, 0x9b, 0xc3, 0xba, 0x40, 0xe1, 0x16, 0x41, - 0x7b, 0x68, 0xa0, 0xe1, 0x73, 0x64, 0xbe, 0xf0, 0x99, 0x23, 0xac, 0x69, - 0xa0, 0x7c, 0xfd, 0xec, 0x5e, 0xcb, 0xfe, 0x57, 0x14, 0xa4, 0x1d, 0x80, - 0xfe, 0xda, 0x7e, 0x45, 0x56, 0x9d, 0x24, 0x86, 0xad, 0x10, 0x0b, 0xc2, - 0x32, 0x81, 0xbd, 0x62, 0x27, 0x9e, 0x7e, 0x45, 0x96, 0xec, 0xb4, 0x13, - 0xee, 0x96, 0x34, 0xec, 0x01, 0x3f, 0x48, 0x9d, 0x40, 0xe8, 0xb8, 0xdf, - 0xc6, 0xd3, 0xb7, 0x50, 0x05, 0x8f, 0xab, 0x5c, 0x44, 0x66, 0xca, 0x76, - 0x9d, 0xa2, 0xfa, 0x8b, 0x51, 0xa0, 0x55, 0x19, 0xfd, 0x66, 0x4f, 0xbf, - 0xc6, 0xcb, 0x22, 0xc4, 0xb1, 0xc2, 0x48, 0x16, 0x6d, 0xb8, 0x95, 0x1b, - 0x94, 0xe9, 0x6b, 0xe3, 0xec, 0xde, 0x29, 0xb5, 0xda, 0x90, 0xc8, 0x86, - 0xdf, 0xd5, 0xf3, 0x00, 0xe2, 0xcd, 0x10, 0x86, 0x9a, 0x8f, 0xaf, 0x3f, - 0xe2, 0x56, 0x51, 0x78, 0xca, 0x77, 0x51, 0x5f, 0xd2, 0xe8, 0xf7, 0x86, - 0x44, 0x81, 0x7d, 0x33, 0xc0, 0xea, 0xb7, 0x92, 0xe0, 0xbb, 0x1f, 0x5f, - 0x33, 0x35, 0xad, 0x19, 0x8f, 0x69, 0xf8, 0x7b, 0x02, 0xd1, 0xbf, 0x8a, - 0x02, 0xbe, 0xe1, 0x98, 0x1e, 0xa2, 0x14, 0x9c, 0x69, 0x54, 0xc3, 0xb3, - 0x94, 0x04, 0x81, 0xff, 0xa0, 0x48, 0x76, 0x23, 0xf3, 0x89, 0x19, 0x60, - 0x31, 0xd3, 0xc5, 0xb5, 0x53, 0xc1, 0x88, 0xdf, 0xbd, 0x7a, 0xd5, 0x71, - 0x3b, 0xeb, 0xac, 0x5b, 0xd0, 0x8c, 0x6d, 0x01, 0xca, 0x22, 0x95, 0x28, - 0xee, 0xd8, 0x89, 0xd9, 0xa6, 0xc5, 0x05, 0x82, 0xeb, 0x00, 0xf7, 0xf9, - 0xec, 0xa6, 0x87, 0xbf, 0x93, 0xb5, 0xfd, 0x3c, 0xc6, 0xa8, 0x70, 0x8d, - 0x5e, 0x46, 0xee, 0x60, 0x04, 0xd7, 0x61, 0xec, 0xb5, 0x9f, 0x2e, 0x99, - 0x6d, 0xaf, 0x88, 0xc3, 0x8b, 0xa9, 0x54, 0x65, 0x0b, 0x1c, 0x80, 0x87, - 0xb0, 0x82, 0x79, 0x7d, 0x3f, 0x51, 0x7f, 0xd1, 0x66, 0x02, 0x7e, 0x73, - 0xac, 0xc5, 0x35, 0xd3, 0xa7, 0xf4, 0x6a, 0x0c, 0xbc, 0x16, 0xf9, 0x05, - 0x1a, 0x76, 0x78, 0xcc, 0x7b, 0xbd, 0x26, 0x05, 0xa1, 0x57, 0xb3, 0x87, - 0x91, 0x79, 0x8b, 0x08, 0x71, 0x57, 0x03, 0xbd, 0xc8, 0xdf, 0x5c, 0x36, - 0x57, 0x17, 0x27, 0x59, 0xc5, 0x19, 0x87, 0x04, 0x56, 0x5c, 0xe9, 0x07, - 0x60, 0x7d, 0x82, 0x22, 0xda, 0xee, 0x83, 0x3e, 0xed, 0x01, 0xa7, 0x95, - 0xe4, 0xbd, 0x7a, 0xd0, 0x29, 0x07, 0x46, 0x76, 0x60, 0x3b, 0x43, 0xdd, - 0x06, 0x1e, 0xb3, 0xe1, 0x44, 0xde, 0x02, 0xe4, 0x85, 0x2c, 0x61, 0xe7, - 0x06, 0x7a, 0xcc, 0xc9, 0xc3, 0xfc, 0x7a, 0xb3, 0x4c, 0x58, 0x1c, 0xbd, - 0x2e, 0xdf, 0x6b, 0xf9, 0x74, 0x83, 0x97, 0x5d, 0x76, 0xf8, 0x63, 0xc4, - 0xe8, 0x07, 0x24, 0xd7, 0x8a, 0xf0, 0x71, 0xeb, 0x56, 0xa9, 0xa0, 0xa5, - 0xd1, 0x1e, 0x3d, 0x48, 0x60, 0xe7, 0xb3, 0x27, 0x0a, 0xc6, 0x7a, 0xa6, - 0x53, 0x8d, 0xe6, 0x5b, 0x33, 0xea, 0xce, 0x39, 0xba, 0x9f, 0xb7, 0x64, - 0x59, 0xe2, 0xd8, 0x32, 0x63, 0x6e, 0x65, 0xdf, 0x90, 0xc8, 0xdf, 0x19, - 0x26, 0x00, 0xc6, 0x3a, 0xa3, 0xe8, 0x00, 0x4b, 0x1c, 0x58, 0xfa, 0xfc, - 0x52, 0x27, 0x31, 0x3d, 0x35, 0x9b, 0xf6, 0xe2, 0xd4, 0x98, 0x01, 0x6e, - 0xe4, 0x22, 0x4c, 0x69, 0x44, 0x60, 0x11, 0xbe, 0x3f, 0x37, 0x77, 0xf1, - 0xe4, 0x54, 0x24, 0x85, 0x10, 0x66, 0xa8, 0xa9, 0xe9, 0xdf, 0xab, 0xcc, - 0x08, 0x93, 0x62, 0x35, 0x6d, 0xb0, 0x95, 0x47, 0xed, 0x92, 0xbe, 0x98, - 0x48, 0x74, 0x56, 0x80, 0x74, 0xe3, 0x84, 0x7b, 0x90, 0x39, 0x2e, 0xe8, - 0x45, 0xa2, 0xcd, 0xca, 0x11, 0x62, 0xa2, 0xc8, 0xf5, 0x6e, 0x6c, 0xb1, - 0x14, 0x83, 0x70, 0x8f, 0xfb, 0x14, 0x9a, 0xa1, 0x87, 0x14, 0x87, 0x42, - 0xd0, 0x17, 0x52, 0xd3, 0x59, 0x56, 0xff, 0xad, 0x58, 0x9a, 0x73, 0x07, - 0x38, 0xf7, 0x0c, 0xc8, 0xb1, 0x58, 0xd2, 0x18, 0xb3, 0x3f, 0xbc, 0x2d, - 0x1b, 0xa3, 0x2b, 0x6d, 0x9a, 0x26, 0xaa, 0x6c, 0x8b, 0xb7, 0x7b, 0x3e, - 0xf6, 0x18, 0x70, 0x52, 0x45, 0x96, 0xb0, 0xdf, 0x60, 0xe7, 0xbc, 0x75, - 0x4c, 0x34, 0xde, 0xaa, 0x9c, 0x10, 0x16, 0xe0, 0x1f, 0x82, 0x2d, 0xde, - 0x4f, 0xd3, 0x5b, 0xe5, 0xdf, 0xc6, 0x7a, 0x8f, 0x22, 0x7a, 0x88, 0xbd, - 0x59, 0xa9, 0xb5, 0xc5, 0x3e, 0x0a, 0xbb, 0x49, 0xc3, 0x0f, 0xe2, 0x6d, - 0x45, 0xf9, 0xa0, 0x51, 0x50, 0xdd, 0x4b, 0xae, 0xe8, 0x8f, 0xac, 0x24, - 0x3a, 0xa2, 0xd9, 0xfa, 0xca, 0x82, 0x8d, 0x13, 0xc8, 0x14, 0x6d, 0x65, - 0x02, 0x31, 0x4a, 0x15, 0xeb, 0x4b, 0xdc, 0x88, 0x30, 0xe9, 0x9d, 0xa1, - 0x42, 0x05, 0xce, 0x50, 0xa9, 0x6e, 0xb7, 0x30, 0x17, 0xad, 0xd8, 0xb6, - 0xaf, 0xf1, 0x17, 0x27, 0xc7, 0xca, 0x1d, 0xdc, 0x3f, 0x16, 0x7f, 0xfd, - 0xba, 0xdc, 0xce, 0xcd, 0xef, 0xb3, 0x5a, 0x73, 0xea, 0xf4, 0xb7, 0x85, - 0x3c, 0xb3, 0xdf, 0x91, 0xe9, 0x27, 0x6a, 0x38, 0x1b, 0xee, 0x34, 0x96, - 0xb3, 0xe3, 0xa1, 0xb8, 0x3e, 0x9f, 0xbd, 0x8e, 0x09, 0x16, 0xf4, 0xc5, - 0xf7, 0x6c, 0xbb, 0x61, 0x4d, 0xae, 0x06, 0xf7, 0x22, 0xce, 0xd2, 0x02, - 0xe6, 0x1f, 0x75, 0x0c, 0x6e, 0xca, 0x9f, 0x89, 0x27, 0xde, 0x49, 0x79, - 0x1a, 0x56, 0x20, 0xcd, 0xa7, 0xdd, 0x5a, 0xf1, 0xfb, 0xaf, 0xd1, 0x5d, - 0xf1, 0x2a, 0x29, 0xbe, 0xae, 0xbe, 0x6c, 0x1e, 0x06, 0x74, 0xfa, 0x34, - 0xb0, 0x1a, 0xd2, 0x97, 0xae, 0x2b, 0xd1, 0x67, 0xa8, 0x54, 0xbb, 0x6a, - 0x4e, 0xd9, 0x18, 0x05, 0xbd, 0xe1, 0xb2, 0x67, 0x46, 0x66, 0xc2, 0x94, - 0xe8, 0x2c, 0x1f, 0x20, 0x85, 0xb3, 0xe4, 0x6f, 0x23, 0xb5, 0x56, 0x9f, - 0x26, 0x95, 0x61, 0x65, 0xe4, 0x6d, 0xd9, 0xfd, 0x37, 0x44, 0x30, 0x9c, - 0xbf, 0x78, 0x6c, 0x03, 0x69, 0x51, 0xad, 0xcc, 0x48, 0xf6, 0x93, 0xa6, - 0xb2, 0x62, 0x99, 0x1e, 0x56, 0xc8, 0x54, 0x3f, 0x33, 0x0c, 0x2d, 0xe5, - 0xa7, 0x65, 0x7b, 0xe1, 0x6c, 0x42, 0x45, 0x72, 0xcb, 0xa0, 0x28, 0x33, - 0xe3, 0x35, 0x35, 0x05, 0xfd, 0x0c, 0x82, 0x29, 0x01, 0x8c, 0x73, 0x30, - 0xa9, 0x94, 0x56, 0x00, 0xcc, 0xa4, 0xf6, 0x4c, 0x13, 0x99, 0xfa, 0x38, - 0x99, 0xa7, 0x23, 0x10, 0xba, 0x59, 0xf8, 0xa8, 0x63, 0xc1, 0x72, 0x0b, - 0x7c, 0x9a, 0x7f, 0x68, 0x94, 0x88, 0xd9, 0x85, 0xb1, 0x46, 0x37, 0x44, - 0xf5, 0xfa, 0xdf, 0x37, 0x26, 0xa7, 0xa9, 0x07, 0x7b, 0x1f, 0x17, 0x9a, - 0xbf, 0x69, 0xf2, 0x9f, 0x79, 0x44, 0xd0, 0x99, 0x58, 0xbd, 0x21, 0x79, - 0x69, 0x7b, 0xec, 0x10, 0x9e, 0xf4, 0x74, 0x42, 0x2d, 0xf8, 0xb5, 0x4b, - 0xef, 0xa4, 0xbe, 0xaf, 0x7b, 0x21, 0x7f, 0x2d, 0xea, 0x43, 0x2e, 0xfb, - 0x45, 0x02, 0xa6, 0xed, 0x36, 0x99, 0xee, 0xe6, 0x2a, 0x8d, 0x5f, 0x69, - 0x2b, 0xa6, 0xe3, 0xb9, 0xea, 0x55, 0x26, 0x6f, 0x6e, 0xa8, 0xfc, 0xb8, - 0xb8, 0x52, 0xed, 0x58, 0xca, 0xc1, 0x40, 0x53, 0x33, 0x26, 0xa1, 0xca, - 0xcc, 0xde, 0x6b, 0x8e, 0xad, 0x5c, 0xff, 0x44, 0x6e, 0x0f, 0xc3, 0xa5, - 0x7f, 0x39, 0xd7, 0xef, 0x0c, 0x45, 0x9b, 0x1f, 0x92, 0x1a, 0x5c, 0x26, - 0x94, 0x93, 0x38, 0xdc, 0x5a, 0x05, 0x04, 0xd2, 0x05, 0xf4, 0xdd, 0xf5, - 0x4a, 0x77, 0xdf, 0xb6, 0x47, 0x10, 0x5e, 0x3d, 0x4e, 0x73, 0x83, 0x3f, - 0x02, 0x69, 0x7a, 0x9c, 0x48, 0x63, 0x06, 0x7b, 0xa5, 0x6b, 0x3c, 0xbc, - 0x63, 0xf1, 0x4e, 0x26, 0x87, 0xf8, 0xbc, 0xbd, 0x71, 0x76, 0x4a, 0xd8, - 0x60, 0xfe, 0xb2, 0x92, 0x78, 0x20, 0x22, 0xf4, 0xc9, 0xba, 0xed, 0xe6, - 0x6e, 0x1b, 0xd9, 0x3e, 0x8f, 0x8a, 0xce, 0x13, 0xfc, 0xb8, 0xed, 0x33, - 0x64, 0x09, 0x11, 0x56, 0xa8, 0x40, 0x9f, 0x49, 0x90, 0xc6, 0x16, 0xbb, - 0xd9, 0x49, 0xab, 0xea, 0x7e, 0x1d, 0xfd, 0x83, 0x79, 0x79, 0x14, 0xb5, - 0xe7, 0x2c, 0x24, 0x75, 0x05, 0xe3, 0x77, 0xc3, 0x4d, 0x61, 0xb0, 0xff, - 0x13, 0x12, 0x78, 0x96, 0x7e, 0xc1, 0x91, 0x45, 0x0c, 0x4f, 0x36, 0x01, - 0x6b, 0x0e, 0x3d, 0x52, 0xa0, 0xf2, 0xb4, 0x26, 0x81, 0x33, 0x39, 0x10, - 0xa3, 0x87, 0x7f, 0x7d, 0x41, 0xbd, 0x03, 0xff, 0x0f, 0x3c, 0xb9, 0x6d, - 0xef, 0x1a, 0xe8, 0x1c, 0x8a, 0x99, 0x02, 0x70, 0x23, 0x28, 0x1c, 0x91, - 0x60, 0xa9, 0x2d, 0xf8, 0x8d, 0x8a, 0xd1, 0x32, 0x4f, 0xd3, 0xe0, 0x56, - 0x9a, 0x04, 0x26, 0x7a, 0xf6, 0x71, 0xe1, 0x58, 0xc0, 0x68, 0x2c, 0x38, - 0x0e, 0xa3, 0xb7, 0x4b, 0x29, 0xc8, 0x23, 0x1e, 0xd7, 0x93, 0xb4, 0x31, - 0x54, 0x1c, 0x5c, 0x35, 0x56, 0x01, 0x26, 0xd3, 0x27, 0xf7, 0x6b, 0xda, - 0x6b, 0x76, 0x16, 0x99, 0xe1, 0x12, 0x9e, 0x2e, 0xdf, 0xd6, 0x2e, 0xdf, - 0x5a, 0xfa, 0xeb, 0xed, 0x22, 0x3b, 0xdc, 0x4b, 0x42, 0x4c, 0x46, 0xb8, - 0x10, 0xe9, 0x7d, 0x27, 0xb7, 0xf1, 0x1a, 0x03, 0x0e, 0x90, 0x4e, 0xa3, - 0xff, 0x40, 0x02, 0x99, 0xfb, 0xfc, 0x91, 0x65, 0xab, 0x90, 0x83, 0xc9, - 0xd0, 0xf5, 0xae, 0xcc, 0x77, 0xcc, 0x46, 0x4d, 0x4a, 0x5d, 0xfe, 0x9f, - 0x32, 0xff, 0x24, 0xf4, 0x00, 0x74, 0x77, 0x34, 0x5f, 0xb4, 0xcb, 0x90, - 0x0e, 0xe3, 0x0f, 0xd4, 0x0e, 0x94, 0x49, 0x5d, 0x8a, 0x1f, 0x2f, 0x23, - 0x5b, 0x54, 0xa5, 0x56, 0x10, 0xd1, 0x14, 0x3d, 0x75, 0x86, 0x77, 0x86, - 0xa5, 0x69, 0x4c, 0x5d, 0x9c, 0x32, 0xa7, 0x88, 0xa0, 0x1c, 0xe6, 0x0a, - 0x7c, 0x66, 0xd2, 0x62, 0xb0, 0x81, 0x5b, 0x13, 0x42, 0x4d, 0x6d, 0x2e, - 0xf0, 0xa8, 0x64, 0xf6, 0x95, 0x4e, 0xf3, 0x2a, 0x4f, 0x77, 0x2c, 0xb0, - 0x7b, 0xc8, 0xf2, 0xfb, 0xbd, 0xa3, 0xc9, 0x2e, 0x8e, 0x66, 0x53, 0xb7, - 0x20, 0x61, 0xad, 0x82, 0x31, 0xb4, 0x18, 0xcc, 0x0d, 0x48, 0xcc, 0x20, - 0xd7, 0x90, 0x5b, 0x9f, 0x4d, 0x53, 0x10, 0xb4, 0x63, 0xfb, 0x5d, 0x60, - 0x66, 0x1d, 0xa0, 0x46, 0x62, 0x8d, 0x5a, 0xa2, 0xea, 0x35, 0x58, 0x0a, - 0xa0, 0x09, 0xff, 0xcb, 0xcd, 0xe4, 0x9a, 0xc0, 0xff, 0x8b, 0x71, 0x30, - 0xc4, 0xeb, 0x7a, 0x7d, 0xe1, 0xa6, 0xb8, 0x57, 0x57, 0xb1, 0xc0, 0x44, - 0x27, 0x16, 0xc4, 0x3c, 0xad, 0x4a, 0x73, 0xe1, 0x66, 0x0d, 0xf6, 0xea, - 0x4c, 0xd4, 0x24, 0x35, 0x34, 0x79, 0x9e, 0xa9, 0x88, 0xe3, 0x81, 0x1e, - 0x5e, 0xf3, 0xb0, 0x87, 0x4a, 0x9e, 0xe8, 0x90, 0x02, 0x36, 0x21, 0x58, - 0x9c, 0x0f, 0xa4, 0xd8, 0xee, 0xc2, 0xfd, 0x3e, 0x26, 0x2d, 0x37, 0xf4, - 0x8d, 0x29, 0xca, 0x97, 0xcf, 0x83, 0x34, 0xcb, 0xd3, 0x15, 0x34, 0x88, - 0x45, 0x5b, 0x78, 0xeb, 0xcf, 0xc1, 0x9e, 0xf7, 0xc2, 0x62, 0xf8, 0x72, - 0x8d, 0x60, 0x38, 0xaf, 0x08, 0xd7, 0x64, 0xbe, 0xf6, 0xd3, 0x02, 0x3e, - 0x15, 0xb1, 0xc4, 0x1e, 0x29, 0x1e, 0x74, 0x76, 0xf6, 0x91, 0x01, 0x86, - 0x94, 0xd5, 0xa3, 0x64, 0x40, 0x2b, 0xd0, 0x95, 0x29, 0xc3, 0xf5, 0xde, - 0x13, 0x44, 0xe4, 0xdc, 0xae, 0x1f, 0x27, 0x9c, 0x9f, 0x85, 0xb4, 0x5d, - 0x53, 0xd4, 0xbf, 0xd7, 0xdb, 0xf9, 0x2a, 0xed, 0xaa, 0xcf, 0x53, 0x2b, - 0x87, 0x3b, 0x06, 0x50, 0xc6, 0x8e, 0xa2, 0xaa, 0x0b, 0x07, 0xfe, 0x7f, - 0xeb, 0xd6, 0x71, 0xa0, 0x96, 0xb4, 0x69, 0xe4, 0xc2, 0xab, 0x75, 0x6e, - 0x07, 0xe8, 0xe0, 0x64, 0x5f, 0xa3, 0x64, 0x22, 0x8d, 0x9e, 0x85, 0x4c, - 0x91, 0x2a, 0x5c, 0x8b, 0xd3, 0x1b, 0x63, 0x27, 0xd2, 0x99, 0x08, 0x23, - 0x0c, 0x2e, 0xcc, 0x5c, 0x74, 0xd7, 0x44, 0x66, 0x11, 0xa5, 0x9a, 0x40, - 0x31, 0x42, 0x23, 0x5d, 0x96, 0xda, 0x90, 0xae, 0x0d, 0x9c, 0x73, 0x3c, - 0xf0, 0xdf, 0xf2, 0xcd, 0x08, 0x4c, 0x47, 0xb2, 0xc3, 0x86, 0xfc, 0xf2, - 0xf1, 0x05, 0xa5, 0x4f, 0xe2, 0x48, 0x86, 0xba, 0xe5, 0xf6, 0x13, 0xa8, - 0xbc, 0x7b, 0x59, 0xc2, 0x4a, 0x20, 0xfc, 0x5c, 0x38, 0x7a, 0xc9, 0xdc, - 0x2a, 0xf2, 0xd1, 0x6a, 0x26, 0xd2, 0x97, 0x53, 0x3c, 0x61, 0x4e, 0x0f, - 0x95, 0xee, 0xad, 0xd4, 0xad, 0xa2, 0x09, 0xba, 0xa6, 0xd0, 0xc3, 0x6a, - 0xf0, 0x68, 0x59, 0x18, 0x3c, 0x1f, 0x91, 0x38, 0xaf, 0xd5, 0x28, 0xfa, - 0xdc, 0xda, 0xb7, 0x09, 0xec, 0x0f, 0x8e, 0xa9, 0x7c, 0xb7, 0xc7, 0x1b, - 0xb9, 0x00, 0x60, 0x47, 0x5b, 0xbc, 0x02, 0x9b, 0xdf, 0xa3, 0x45, 0xfc, - 0x24, 0x51, 0xbc, 0x2a, 0x4e, 0x86, 0x66, 0xf3, 0xed, 0xfe, 0xf9, 0x99, - 0x88, 0xb8, 0xd7, 0x87, 0xf3, 0x80, 0x86, 0x0d, 0x47, 0xd3, 0x83, 0x58, - 0x94, 0xc1, 0x6e, 0x08, 0x52, 0x8d, 0x79, 0x2b, 0x93, 0x8d, 0x56, 0x15, - 0xf5, 0xa3, 0xd5, 0x04, 0xbe, 0xdd, 0xd9, 0x49, 0x52, 0x1b, 0x08, 0xc1, - 0x09, 0xe0, 0xd1, 0xb4, 0x2f, 0xc2, 0x60, 0x66, 0x70, 0x2d, 0xf6, 0x9d, - 0xda, 0x8a, 0xb6, 0xee, 0x37, 0x5e, 0xf6, 0xa1, 0x67, 0xe4, 0x11, 0xe0, - 0x58, 0x8d, 0xbb, 0xbd, 0x9e, 0xba, 0x72, 0x3d, 0xfa, 0x76, 0x7a, 0x16, - 0xfd, 0xa8, 0xb1, 0x80, 0xe6, 0x3b, 0xf7, 0xee, 0x07, 0xbf, 0x4b, 0x13, - 0x4b, 0x49, 0xd9, 0x9a, 0x89, 0x47, 0xbc, 0x65, 0xa2, 0xd8, 0xbf, 0x84, - 0x5e, 0x1a, 0x3c, 0x63, 0x81, 0x57, 0xc2, 0x96, 0x47, 0x29, 0x31, 0xe4, - 0xdd, 0xae, 0x50, 0x27, 0x53, 0x49, 0xe1, 0xb1, 0x54, 0x9e, 0xcc, 0x4c, - 0x54, 0xd3, 0x4f, 0x37, 0x77, 0x0b, 0x20, 0xb7, 0xac, 0x47, 0x90, 0x33, - 0xa0, 0x12, 0xc0, 0x93, 0x08, 0x77, 0x7d, 0x19, 0x6a, 0xaa, 0x29, 0xce, - 0xdb, 0x06, 0x37, 0x2e, 0xab, 0xca, 0xf4, 0x36, 0xaa, 0x91, 0xd7, 0x4d, - 0x5a, 0xf3, 0xac, 0x04, 0xa9, 0xaa, 0x39, 0xce, 0x63, 0x70, 0x59, 0x97, - 0x4f, 0x63, 0xd4, 0x9b, 0x2f, 0x13, 0xef, 0xe1, 0xee, 0x5b, 0x18, 0xa9, - 0x38, 0x22, 0x64, 0x60, 0x04, 0x10, 0x2a, 0x7d, 0x75, 0xa4, 0x26, 0xc5, - 0x13, 0x4f, 0xcb, 0x17, 0x6d, 0xd8, 0xf8, 0xcd, 0xf4, 0x99, 0x32, 0x8a, - 0xdb, 0x31, 0xa5, 0x39, 0x52, 0x7e, 0x76, 0x7e, 0x2e, 0xd5, 0xde, 0x75, - 0x3d, 0x16, 0xf8, 0x79, 0xe7, 0x8c, 0x6d, 0x1b, 0xe3, 0xd2, 0x6d, 0x06, - 0x5a, 0x65, 0xfc, 0x37, 0x43, 0xac, 0xfc, 0xb2, 0x89, 0x5f, 0x8f, 0x02, - 0x58, 0x1b, 0x03, 0xa6, 0x9c, 0x50, 0x6d, 0x1c, 0xa3, 0xd7, 0x19, 0x35, - 0x23, 0xaa, 0x13, 0xef, 0xe4, 0xa9, 0x3b, 0xb0, 0x23, 0x11, 0x5f, 0x81, - 0xab, 0xa0, 0xd6, 0x5b, 0x53, 0x1c, 0x66, 0x7f, 0xa6, 0x0d, 0xaf, 0x43, - 0x8d, 0x80, 0xd9, 0x2c, 0x5f, 0xda, 0xb1, 0x0d, 0xc9, 0x38, 0x91, 0x08, - 0x64, 0xac, 0xc0, 0x1f, 0x20, 0xba, 0xdf, 0xaf, 0xaa, 0x8e, 0x11, 0x25, - 0xd2, 0xa2, 0x93, 0xdb, 0x3f, 0x67, 0xf0, 0x1c, 0xbc, 0xf3, 0x22, 0xe9, - 0x17, 0x47, 0x47, 0xdc, 0x80, 0xf4, 0x17, 0xc6, 0x20, 0xd3, 0x97, 0x49, - 0xc9, 0xa6, 0x4c, 0xbc, 0x9d, 0x3f, 0xea, 0xee, 0xe5, 0x2b, 0xba, 0xe5, - 0x9a, 0x5a, 0x39, 0x1a, 0x4e, 0x15, 0x10, 0x9b, 0xef, 0xcc, 0x6b, 0x25, - 0xfb, 0xef, 0xa2, 0x8b, 0xb4, 0x9b, 0x28, 0x8f, 0xa1, 0x01, 0x51, 0x32, - 0x33, 0x7a, 0xeb, 0x34, 0x2c, 0xcb, 0x51, 0x7a, 0x77, 0x02, 0x7b, 0xde, - 0x99, 0xc5, 0x9f, 0xe1, 0xc8, 0x2c, 0xb3, 0x2e, 0x45, 0x4d, 0xdf, 0xa6, - 0xf0, 0x1c, 0x6a, 0x93, 0x3d, 0xc2, 0xf8, 0xe0, 0xfe, 0x4f, 0x5e, 0xc2, - 0x56, 0x57, 0xb6, 0x7e, 0x4e, 0x4d, 0xc1, 0x3f, 0x62, 0xe8, 0xb7, 0xdb, - 0x14, 0x0c, 0xae, 0xa9, 0xb3, 0x99, 0xbf, 0x48, 0xd5, 0x62, 0x25, 0x2d, - 0x47, 0x03, 0x1c, 0x55, 0x36, 0xda, 0x74, 0x55, 0x9b, 0x70, 0x00, 0x72, - 0x86, 0x34, 0x45, 0x8a, 0x77, 0x1a, 0x21, 0x8d, 0x2a, 0x5c, 0x53, 0xad, - 0x63, 0x7b, 0xe0, 0x76, 0x82, 0xfc, 0x73, 0x33, 0xac, 0xe5, 0x33, 0xa4, - 0x76, 0xd9, 0xb6, 0x2b, 0xb8, 0x0f, 0xcb, 0x78, 0xf7, 0xa7, 0xfd, 0x8c, - 0xad, 0x4f, 0x91, 0x60, 0xa5, 0x11, 0x6e, 0x5a, 0x50, 0x8c, 0x02, 0x3b, - 0x29, 0x3f, 0x8f, 0x75, 0x76, 0x21, 0x27, 0x8d, 0x37, 0x96, 0x74, 0x02, - 0xb3, 0x41, 0x53, 0xe5, 0x2a, 0xb5, 0xdf, 0xcc, 0xa9, 0x05, 0x78, 0xcd, - 0xce, 0x78, 0x66, 0xaa, 0x43, 0x81, 0x4a, 0xb1, 0xe1, 0x3b, 0x2c, 0xff, - 0x49, 0x57, 0x6c, 0x80, 0x19, 0xf1, 0xeb, 0x69, 0x02, 0x91, 0xf0, 0x7a, - 0x2e, 0x7d, 0x45, 0x33, 0x29, 0xc9, 0x26, 0x55, 0x28, 0x16, 0xba, 0xfa, - 0x18, 0x11, 0xc6, 0xc2, 0x28, 0x2a, 0x50, 0x8e, 0xf7, 0xf1, 0x26, 0xbe, - 0x6c, 0xe6, 0x9f, 0xea, 0x08, 0x92, 0xc1, 0xa9, 0x7c, 0x69, 0xbb, 0x3c, - 0x93, 0x5e, 0xdc, 0x0c, 0xaf, 0x0e, 0x4c, 0xa8, 0x1d, 0xca, 0x45, 0x70, - 0xac, 0x2b, 0xb9, 0x01, 0xca, 0xaf, 0x82, 0x8b, 0xfc, 0xef, 0x1b, 0x79, - 0x7b, 0xfb, 0x9d, 0x3c, 0x7c, 0x1f, 0x69, 0x29, 0xf1, 0x23, 0x91, 0xad, - 0xd0, 0xcc, 0x3f, 0x21, 0xfc, 0xee, 0xa1, 0x38, 0xd0, 0xa7, 0x1e, 0x6b, - 0x74, 0x72, 0x6a, 0x93, 0x8a, 0x8e, 0xc2, 0x13, 0xf2, 0xc9, 0x79, 0x03, - 0xeb, 0xed, 0xf7, 0x6b, 0x4d, 0xba, 0x92, 0xab, 0x34, 0xde, 0x61, 0xd3, - 0x66, 0xe6, 0x25, 0x71, 0xd4, 0xa6, 0xe0, 0x78, 0x99, 0xaf, 0xca, 0x60, - 0xeb, 0x79, 0x15, 0x87, 0x0f, 0x6a, 0x68, 0x8e, 0x5f, 0xa7, 0x9c, 0xba, - 0x8c, 0xcc, 0x9d, 0xe0, 0x3f, 0x93, 0x81, 0x49, 0xbb, 0xb4, 0x8f, 0xed, - 0x7a, 0x22, 0x5c, 0x45, 0x52, 0xde, 0x68, 0xac, 0xbe, 0x5b, 0x7b, 0x36, - 0xad, 0x1e, 0xc3, 0xa5, 0xe5, 0xfd, 0x42, 0xb7, 0xa6, 0x5d, 0x7b, 0xf8, - 0x87, 0xbf, 0xeb, 0xd5, 0xb6, 0xb5, 0x03, 0x4d, 0xa6, 0xc2, 0x50, 0x68, - 0x0c, 0x03, 0x2a, 0xc2, 0xf5, 0xf5, 0x33, 0xf8, 0x38, 0xb9, 0x7a, 0x37, - 0xcc, 0xd5, 0xfe, 0xc4, 0x2b, 0x09, 0x89, 0x82, 0x0c, 0x83, 0xa1, 0x5d, - 0x3b, 0x29, 0x47, 0x4d, 0x9b, 0x1f, 0x13, 0xa9, 0xad, 0xa2, 0x31, 0x5c, - 0x36, 0x0a, 0xd5, 0x0b, 0x4c, 0xd8, 0xfb, 0xc3, 0x00, 0x2c, 0x1a, 0xf1, - 0x54, 0x63, 0xcc, 0x31, 0xb9, 0x24, 0x4b, 0x16, 0x26, 0x0e, 0x63, 0xbe, - 0x1b, 0x49, 0x6f, 0x23, 0x55, 0xe2, 0xe4, 0x20, 0xff, 0xf1, 0x2c, 0xf5, - 0x22, 0x88, 0xf9, 0x60, 0xed, 0x59, 0x17, 0x99, 0x58, 0x1d, 0xb7, 0xd8, - 0x24, 0x3a, 0x24, 0xe3, 0xd7, 0xbf, 0xd0, 0x4c, 0xac, 0x2b, 0x7b, 0x2c, - 0xab, 0xff, 0xc1, 0xa7, 0x13, 0x67, 0xf9, 0x9d, 0x9c, 0x3c, 0x15, 0x25, - 0x18, 0xde, 0xb9, 0xe1, 0x3b, 0x5e, 0xe3, 0xca, 0xf4, 0xc2, 0x9e, 0x6b, - 0xae, 0xc6, 0xfe, 0xe2, 0xd9, 0xf6, 0xbb, 0xf5, 0x6b, 0xc5, 0x54, 0x13, - 0x7e, 0x94, 0x93, 0xe6, 0x17, 0xee, 0xb0, 0x70, 0x22, 0xff, 0xab, 0xe1, - 0x93, 0x9f, 0xd5, 0x72, 0xa9, 0x29, 0x98, 0x8b, 0x39, 0x5e, 0x48, 0xd6, - 0xb1, 0xbe, 0xf5, 0xcb, 0x0f, 0x06, 0xfd, 0x3c, 0xfd, 0x8a, 0xfc, 0x97, - 0x58, 0x1a, 0x0a, 0x6d, 0xf0, 0xbf, 0x17, 0x0e, 0xbc, 0x00, 0x36, 0xbf, - 0xa6, 0x57, 0xeb, 0x83, 0x8f, 0x5b, 0x71, 0x5f, 0x1a, 0xa1, 0x37, 0x4d, - 0x0c, 0xe3, 0x0a, 0x72, 0x54, 0x1d, 0x46, 0xa0, 0x54, 0x90, 0xe3, 0x04, - 0x68, 0xd9, 0x56, 0x6c, 0x66, 0x21, 0xfd, 0xef, 0xa1, 0xd7, 0xb4, 0x40, - 0x9b, 0xda, 0x3e, 0x1a, 0x4d, 0xc8, 0x32, 0x1c, 0x49, 0x90, 0xa7, 0x39, - 0x97, 0x22, 0xe0, 0x61, 0x18, 0x46, 0x38, 0x02, 0xdd, 0x76, 0x60, 0x59, - 0x65, 0xed, 0x24, 0x73, 0x09, 0x25, 0x92, 0x66, 0x7d, 0x70, 0x1b, 0x5e, - 0x26, 0xab, 0xa5, 0xa2, 0xe2, 0x6c, 0xf6, 0x8d, 0xd3, 0xa1, 0xef, 0x15, - 0x08, 0x4f, 0x7b, 0x6e, 0xd3, 0x7a, 0xc5, 0xa4, 0xc9, 0x00, 0x3a, 0xb7, - 0xf1, 0xa9, 0x6f, 0x8f, 0x82, 0xd2, 0x19, 0xba, 0x68, 0xb3, 0xe8, 0x91, - 0x45, 0x94, 0x3c, 0x98, 0xd0, 0xe8, 0x12, 0xa7, 0x89, 0xf7, 0xcf, 0xcb, - 0xa6, 0x77, 0x8b, 0xc3, 0x25, 0xec, 0x7c, 0x02, 0x64, 0xd0, 0x23, 0x0b, - 0x30, 0x64, 0xb8, 0xa4, 0x4f, 0x75, 0x3f, 0x0f, 0x1a, 0xc9, 0x19, 0x20, - 0xd8, 0x93, 0xeb, 0xf7, 0x5e, 0xc9, 0xa6, 0x2a, 0x2c, 0x7b, 0x77, 0x0f, - 0xb3, 0x21, 0x4d, 0x60, 0x9b, 0xc6, 0x77, 0xb9, 0x41, 0xf3, 0xd3, 0x89, - 0xf9, 0xe6, 0x94, 0x85, 0x69, 0x9f, 0xc7, 0x79, 0xa7, 0xe1, 0x13, 0x75, - 0xc2, 0xd8, 0x0a, 0x2a, 0xc6, 0xc0, 0x6a, 0xe2, 0xfd, 0x53, 0x7a, 0x86, - 0x8f, 0x6a, 0xbd, 0xdd, 0x5d, 0x72, 0x5a, 0xa4, 0x31, 0x2c, 0xed, 0xf9, - 0xe1, 0x9b, 0x00, 0x0f, 0x6d, 0x7e, 0x00, 0x6d, 0x3f, 0x77, 0xd5, 0xb0, - 0x45, 0xfd, 0x95, 0xff, 0xb0, 0xee, 0x6a, 0xdb, 0x52, 0x7c, 0x11, 0xa8, - 0xaa, 0x10, 0x6a, 0x3a, 0xea, 0xe4, 0xd0, 0x46, 0x1e, 0xda, 0x6f, 0xde, - 0xb8, 0x14, 0x57, 0x87, 0x01, 0xbc, 0xd1, 0x77, 0xa4, 0x7f, 0x74, 0x29, - 0xdf, 0xeb, 0x08, 0xdb, 0xb2, 0xaf, 0xfe, 0xd1, 0xab, 0x91, 0xa6, 0x51, - 0xeb, 0x96, 0x6b, 0xef, 0x5f, 0x9e, 0x5d, 0x88, 0x82, 0xa8, 0x7d, 0xb1, - 0xb6, 0xab, 0x22, 0x41, 0x8a, 0xaa, 0xb7, 0xa3, 0x72, 0xfd, 0x71, 0x35, - 0x86, 0x41, 0xdf, 0xe4, 0x0b, 0xef, 0x34, 0x12, 0x3b, 0x43, 0x6a, 0x14, - 0xa1, 0x70, 0x47, 0x44, 0x2f, 0x5c, 0x67, 0xd6, 0x31, 0x98, 0x51, 0x3f, - 0x58, 0x1e, 0xd6, 0x3d, 0x27, 0xe5, 0x93, 0xf7, 0xa5, 0x76, 0xa7, 0x1e, - 0x5e, 0x4f, 0xc1, 0x5d, 0x1d, 0x8d, 0xce, 0xdd, 0x76, 0xe2, 0xaa, 0x7e, - 0x3a, 0x06, 0x0a, 0x3c, 0xc1, 0xad, 0x80, 0x99, 0x67, 0xd9, 0xc6, 0xac, - 0x99, 0x73, 0x4d, 0xd1, 0xb4, 0x6d, 0xee, 0x38, 0xe2, 0x77, 0xb9, 0x46, - 0xb9, 0x80, 0xbf, 0x24, 0x25, 0x8c, 0x14, 0x7f, 0xd2, 0x9c, 0x4a, 0xef, - 0x9f, 0xb6, 0x28, 0x98, 0xa9, 0xfa, 0x29, 0x4c, 0x74, 0xc2, 0x82, 0x52, - 0xb1, 0xa9, 0x0e, 0x8e, 0xf2, 0xc1, 0xfc, 0x7f, 0xdf, 0x2e, 0x41, 0x63, - 0x9a, 0x17, 0x61, 0xcc, 0xa0, 0x78, 0xca, 0xeb, 0x5c, 0xd9, 0xe6, 0x44, - 0x0e, 0xb5, 0x92, 0x30, 0xfe, 0x53, 0xeb, 0x9b, 0x4d, 0x52, 0x8d, 0x74, - 0x1e, 0x79, 0x32, 0xb2, 0xbf, 0x0d, 0xe3, 0x77, 0x28, 0x7c, 0xd6, 0x37, - 0x62, 0xe2, 0x80, 0xed, 0x98, 0x0a, 0x23, 0x6a, 0x45, 0x5b, 0x81, 0x65, - 0x21, 0xd0, 0x4f, 0xf4, 0x64, 0x4c, 0x84, 0x75, 0x6d, 0x52, 0xf8, 0x5e, - 0xaa, 0x95, 0xfb, 0x07, 0xe4, 0x1b, 0xd9, 0xce, 0xff, 0x5d, 0x57, 0x35, - 0xed, 0x83, 0xc3, 0x27, 0xa2, 0x4f, 0x7a, 0x95, 0xf2, 0x56, 0x69, 0x0b, - 0x2c, 0xd6, 0x04, 0xc0, 0x87, 0x4c, 0xf1, 0x36, 0x30, 0x14, 0x37, 0xb7, - 0x19, 0xe5, 0xc4, 0x0f, 0x72, 0xac, 0x65, 0x75, 0x5c, 0x83, 0xed, 0xb1, - 0x73, 0x45, 0xc5, 0xb1, 0x84, 0xa7, 0x54, 0x45, 0x9f, 0x0e, 0x63, 0x54, - 0x53, 0x56, 0x1e, 0xf7, 0xd5, 0x07, 0xcb, 0x58, 0x65, 0xba, 0x5e, 0x9e, - 0xad, 0xfd, 0x25, 0xbc, 0x94, 0xb5, 0x18, 0x3a, 0x08, 0xe1, 0xc8, 0xef, - 0x5f, 0xd7, 0x4d, 0xa2, 0x73, 0x45, 0xe9, 0xf3, 0x3e, 0x50, 0xc5, 0xf9, - 0x27, 0xf2, 0xb1, 0x59, 0x56, 0x8e, 0xf0, 0x6a, 0x14, 0xb5, 0xb1, 0xa1, - 0xa8, 0xbf, 0x79, 0x59, 0xa9, 0x5e, 0x5f, 0xf2, 0x4a, 0x12, 0xaa, 0x8a, - 0x3d, 0x92, 0x08, 0x20, 0x40, 0xe7, 0x3e, 0x71, 0xde, 0x6e, 0xb3, 0x9c, - 0x51, 0xc7, 0x0b, 0xb4, 0xf4, 0x86, 0xb3, 0x7a, 0x44, 0xa3, 0x39, 0xcb, - 0x30, 0xfd, 0xae, 0x31, 0xf1, 0xfb, 0x76, 0x01, 0x87, 0x13, 0x03, 0xc2, - 0x5a, 0x28, 0xfa, 0x16, 0x05, 0x0b, 0xc6, 0x41, 0xa1, 0x43, 0x3c, 0x73, - 0xcf, 0x56, 0xf7, 0x64, 0x88, 0x2c, 0xc5, 0x1f, 0xc4, 0x02, 0x80, 0x63, - 0x97, 0xe7, 0x29, 0x92, 0x0a, 0x62, 0x05, 0xd8, 0x1c, 0xfa, 0x1a, 0x2a, - 0x36, 0x93, 0xdc, 0x1e, 0x4e, 0x4e, 0x6a, 0x89, 0xfb, 0x1e, 0xc2, 0xf2, - 0x8a, 0x2f, 0x48, 0x6c, 0x92, 0x5d, 0xb7, 0xe2, 0x9c, 0x4f, 0x55, 0x36, - 0xe4, 0x0d, 0x2c, 0x2f, 0x76, 0xbc, 0x81, 0xdc, 0xec, 0x42, 0xe2, 0x70, - 0xf8, 0x83, 0x05, 0x66, 0xf1, 0x14, 0xb1, 0xfe, 0x07, 0x0d, 0x25, 0x98, - 0x4f, 0xd3, 0x2f, 0x03, 0xc3, 0xb4, 0x57, 0x29, 0xca, 0x2c, 0xdd, 0x8e, - 0x25, 0x0d, 0xea, 0x7b, 0xe3, 0x0c, 0x59, 0x5f, 0x6f, 0x86, 0xa2, 0xbe, - 0x97, 0x19, 0xe4, 0x73, 0x0a, 0xc3, 0xc7, 0x58, 0xab, 0x2b, 0xc3, 0x54, - 0x33, 0xb5, 0x9a, 0x40, 0x41, 0x6a, 0x37, 0x18, 0x27, 0xa9, 0x44, 0x27, - 0x44, 0x4e, 0xdc, 0x01, 0xcc, 0x80, 0x69, 0x33, 0xa0, 0xcb, 0xf9, 0xe3, - 0x9c, 0xf6, 0xab, 0xa7, 0xfb, 0x7c, 0xab, 0x97, 0xaf, 0x5f, 0xc9, 0xe8, - 0xc0, 0x79, 0x95, 0xea, 0xf9, 0x90, 0xbe, 0xa2, 0xa0, 0x89, 0x3a, 0x85, - 0x29, 0x81, 0xc9, 0x88, 0x46, 0xec, 0xee, 0x42, 0xef, 0x78, 0x69, 0x92, - 0x6a, 0xf3, 0x87, 0x20, 0x47, 0x20, 0xc1, 0x9e, 0xef, 0x45, 0xbb, 0x59, - 0x26, 0xd2, 0x22, 0xaf, 0x8b, 0x61, 0xb6, 0xca, 0x91, 0xf2, 0xa0, 0x0d, - 0xff, 0x9c, 0x7a, 0x5c, 0x5c, 0x8c, 0xce, 0x28, 0xb2, 0x73, 0xab, 0x67, - 0x47, 0x27, 0x74, 0x5b, 0xdc, 0x01, 0x1c, 0x2e, 0x97, 0x66, 0x7b, 0xf6, - 0x7b, 0xa0, 0x23, 0x56, 0xca, 0x5f, 0x7d, 0x42, 0x02, 0xf2, 0xc7, 0x22, - 0x2e, 0x1d, 0x7c, 0xbc, 0x65, 0x70, 0x9e, 0x25, 0x9c, 0xd4, 0xa1, 0x63, - 0xbc, 0x3c, 0xc7, 0x69, 0xca, 0xd7, 0x26, 0xb5, 0xf6, 0x15, 0xc3, 0x96, - 0x3f, 0x72, 0xc0, 0x74, 0xd9, 0x6a, 0x96, 0xbf, 0xe3, 0xe9, 0x16, 0xf4, - 0x5d, 0xee, 0x27, 0xe4, 0xb7, 0x26, 0x1b, 0xd5, 0x43, 0x05, 0x2f, 0x49, - 0xa4, 0x11, 0xc0, 0x77, 0xcf, 0xe7, 0x41, 0xd3, 0xd6, 0x4d, 0x2a, 0x09, - 0x7e, 0xb2, 0x8f, 0x17, 0x19, 0x41, 0x2f, 0xea, 0x17, 0x83, 0xc0, 0x1f, - 0xc1, 0xa5, 0x26, 0x4b, 0xca, 0xbc, 0xfe, 0x4a, 0x47, 0x0b, 0x0f, 0x3f, - 0x10, 0x0c, 0x97, 0x93, 0x16, 0x03, 0x9c, 0x2f, 0x72, 0x31, 0xd2, 0xed, - 0x07, 0x54, 0xb4, 0x60, 0xd9, 0x6c, 0x80, 0xbf, 0xfa, 0x25, 0x38, 0xc8, - 0xea, 0xad, 0x71, 0x6e, 0x79, 0x12, 0xe2, 0xbe, 0x04, 0x1a, 0xba, 0x0a, - 0xa4, 0xec, 0x6d, 0xce, 0xb4, 0x12, 0x5e, 0xfe, 0xaa, 0xce, 0x58, 0x02, - 0x3a, 0x07, 0xfa, 0x5a, 0x6d, 0x71, 0xcb, 0xa0, 0x4a, 0x6e, 0xe9, 0x8f, - 0x56, 0xa8, 0x10, 0x29, 0x0e, 0x17, 0xd9, 0x5f, 0x11, 0x2d, 0xa9, 0xb5, - 0x45, 0x98, 0x73, 0x45, 0x8c, 0x73, 0x4b, 0xef, 0xce, 0xde, 0xb7, 0xfb, - 0x07, 0xdb, 0xa8, 0xeb, 0xd3, 0x69, 0x4b, 0x3b, 0xc4, 0x5f, 0x3c, 0xa6, - 0x09, 0x94, 0xdb, 0x64, 0xe9, 0xc8, 0x38, 0xb3, 0x2b, 0xbd, 0x6e, 0x41, - 0x99, 0x16, 0xae, 0x82, 0x23, 0x19, 0x77, 0xc5, 0x5b, 0x46, 0xa4, 0xb5, - 0xd3, 0x31, 0xac, 0x81, 0xdb, 0x1a, 0xa2, 0x39, 0x28, 0x60, 0x95, 0x75, - 0x6f, 0xc3, 0xb1, 0xd1, 0x61, 0x94, 0xb9, 0x8b, 0x8e, 0xf8, 0x22, 0xeb, - 0xe5, 0xa1, 0x0a, 0x09, 0x85, 0xf6, 0x6e, 0x19, 0xc4, 0x02, 0xe1, 0xb9, - 0xde, 0xd3, 0x44, 0x98, 0x61, 0xe0, 0x82, 0x96, 0xf8, 0x0d, 0x72, 0xac, - 0x86, 0x20, 0xbf, 0xb9, 0x38, 0x9f, 0x71, 0x29, 0x86, 0x57, 0xfb, 0xf0, - 0x86, 0xb8, 0x62, 0xa0, 0xb0, 0x8b, 0x28, 0xaf, 0xe7, 0x09, 0x5d, 0x07, - 0xae, 0xdb, 0xb8, 0xbf, 0x96, 0x45, 0x2b, 0xc6, 0x6d, 0xa6, 0x75, 0x70, - 0x54, 0x4c, 0xbc, 0xb7, 0xff, 0x5a, 0xf9, 0xd3, 0xca, 0xb1, 0xa2, 0x8e, - 0x11, 0x34, 0x3d, 0x2a, 0x12, 0x37, 0x6a, 0xf5, 0x1e, 0x01, 0x03, 0x6c, - 0xce, 0xfe, 0x66, 0xdd, 0x3c, 0xca, 0x45, 0xdc, 0x98, 0x73, 0x9a, 0x95, - 0x6b, 0xcc, 0x9e, 0xa8, 0x36, 0xed, 0x3e, 0x46, 0x24, 0xf6, 0xc2, 0xc8, - 0x69, 0x38, 0xd7, 0x6f, 0xe2, 0xa3, 0x4b, 0xa8, 0xaf, 0x41, 0xad, 0x1f, - 0xdd, 0x6d, 0x86, 0x13, 0x41, 0x23, 0xd6, 0x4c, 0x4e, 0x8b, 0xef, 0x07, - 0x60, 0x75, 0x07, 0xca, 0x92, 0x4c, 0x05, 0x5b, 0x7f, 0x47, 0x34, 0x39, - 0x8e, 0x1b, 0x02, 0xff, 0xb5, 0x77, 0xef, 0x0f, 0xe9, 0xe6, 0xca, 0x84, - 0x2d, 0xbf, 0x71, 0x19, 0x7e, 0x9e, 0xd4, 0x36, 0x9b, 0xf8, 0x39, 0x2a, - 0x7b, 0xf9, 0x58, 0x7c, 0xbe, 0x62, 0x82, 0x56, 0xad, 0x6c, 0xbe, 0x7a, - 0x05, 0xc1, 0x72, 0xe8, 0x71, 0x73, 0x3a, 0xdb, 0xe4, 0xba, 0x42, 0x3c, - 0x04, 0x36, 0xe7, 0x24, 0x97, 0x63, 0x0d, 0x45, 0x7b, 0xa9, 0x18, 0x76, - 0x1c, 0x45, 0xba, 0x03, 0x40, 0xc1, 0xf1, 0x3d, 0xac, 0xbd, 0xf1, 0x80, - 0xd5, 0x7a, 0x5d, 0xa5, 0xe5, 0x32, 0x67, 0x1a, 0x62, 0xc6, 0x96, 0x6c, - 0x3f, 0xcc, 0xa2, 0x94, 0xb8, 0xe8, 0x8e, 0x18, 0x81, 0xe1, 0x8b, 0x18, - 0xc5, 0xcb, 0x27, 0xb7, 0x8a, 0xed, 0xdb, 0x1d, 0x2b, 0xdc, 0xf7, 0x41, - 0x98, 0xa5, 0x96, 0x31, 0x15, 0x0d, 0x49, 0x5b, 0x7a, 0x70, 0x39, 0x1e, - 0xb5, 0xf9, 0xd8, 0x57, 0x3e, 0xa5, 0x46, 0x53, 0xa7, 0x05, 0xbd, 0x16, - 0x3c, 0x89, 0xd7, 0x7b, 0xf2, 0x5e, 0x2f, 0xc2, 0x43, 0x37, 0x02, 0x76, - 0x56, 0x06, 0x6d, 0x7b, 0xbc, 0x37, 0xef, 0xda, 0x89, 0xcd, 0xf9, 0x03, - 0x36, 0x4f, 0x3f, 0x40, 0xbf, 0xab, 0xce, 0x88, 0x2e, 0xd0, 0xff, 0x8e, - 0x1e, 0xb2, 0x9c, 0x1a, 0x13, 0xa8, 0xb8, 0xb3, 0x7f, 0x8e, 0x31, 0xe9, - 0xf1, 0xdc, 0xe9, 0x30, 0x38, 0x5e, 0xa5, 0x7a, 0xa0, 0x6e, 0x07, 0xf2, - 0xe5, 0x9f, 0xb2, 0xfb, 0x81, 0x48, 0x2d, 0x14, 0xef, 0x5e, 0x7b, 0x2c, - 0xe9, 0xbd, 0xf7, 0x86, 0xef, 0x20, 0xc5, 0x32, 0xd1, 0x48, 0xab, 0xec, - 0xa8, 0xbe, 0x22, 0x88, 0x00, 0x2e, 0x47, 0xe4, 0x43, 0x76, 0x53, 0x89, - 0x67, 0xb4, 0x1e, 0x95, 0xb6, 0x97, 0xc0, 0x08, 0xe0, 0xb9, 0x25, 0x13, - 0x55, 0xf1, 0xeb, 0x1d, 0x81, 0x50, 0x6d, 0xab, 0x90, 0x32, 0xf0, 0x84, - 0xb1, 0x52, 0xfe, 0x5b, 0xaa, 0x96, 0x52, 0x6f, 0x7b, 0xac, 0xa0, 0x54, - 0x7b, 0xb5, 0x76, 0x3d, 0x51, 0x09, 0x24, 0xdc, 0x4d, 0x99, 0x3a, 0x2f, - 0x69, 0xb1, 0xf1, 0xf3, 0xeb, 0xff, 0x47, 0xfe, 0xdb, 0x24, 0xf6, 0x1a, - 0xcc, 0x0d, 0x79, 0xbb, 0xd2, 0x99, 0x8f, 0x8e, 0x5d, 0xf1, 0x9c, 0x21, - 0x99, 0x70, 0xa7, 0x7b, 0xb8, 0x32, 0xcf, 0x24, 0xf6, 0xf9, 0x2c, 0x14, - 0xb3, 0xc6, 0x00, 0x2d, 0xff, 0xeb, 0xd5, 0x3a, 0xe2, 0x41, 0x00, 0x47, - 0x56, 0xf3, 0x1f, 0x53, 0x51, 0x76, 0xff, 0xfe, 0x54, 0x8e, 0xbf, 0xc1, - 0x7e, 0x22, 0x7d, 0x25, 0x79, 0x92, 0x33, 0xce, 0x99, 0x07, 0x6a, 0x96, - 0xac, 0xa2, 0x26, 0x2f, 0xb8, 0xdc, 0x14, 0x1f, 0xc6, 0x44, 0xec, 0x6f, - 0xb8, 0xd0, 0xd4, 0x5d, 0xa1, 0x56, 0x19, 0x31, 0x9b, 0xb9, 0x9a, 0x9b, - 0x2b, 0xa1, 0x5f, 0x2f, 0x9c, 0xbf, 0x14, 0x59, 0xca, 0x74, 0x84, 0x9e, - 0x96, 0x60, 0xe8, 0x16, 0xa3, 0xcf, 0x6a, 0x79, 0x70, 0x36, 0xc8, 0xe8, - 0x6b, 0xa1, 0xde, 0x26, 0x60, 0xed, 0x03, 0x5d, 0xe2, 0x4c, 0x81, 0x0d, - 0x27, 0xd3, 0xd7, 0xd1, 0xa6, 0x34, 0x75, 0xde, 0xde, 0xba, 0x44, 0x28, - 0x42, 0xa9, 0xd0, 0x72, 0x26, 0x61, 0xdb, 0x37, 0xa9, 0x27, 0x60, 0xbd, - 0x1f, 0xd5, 0x3c, 0x74, 0xa1, 0x1f, 0x67, 0xeb, 0x54, 0xca, 0x44, 0x35, - 0xf2, 0xe2, 0x08, 0x98, 0x01, 0x7f, 0x11, 0x3c, 0x28, 0x4f, 0x33, 0x37, - 0x80, 0x41, 0x7d, 0x11, 0xfb, 0xb6, 0xce, 0x88, 0xc0, 0x9a, 0x6b, 0x64, - 0x97, 0xff, 0x9d, 0x6d, 0x39, 0x19, 0x60, 0x46, 0xdb, 0x0d, 0x99, 0xff, - 0x53, 0xad, 0x9c, 0xde, 0x77, 0x3b, 0xd7, 0xc0, 0x92, 0x9f, 0x35, 0x9c, - 0xb3, 0x0f, 0x7b, 0xd7, 0x66, 0xea, 0x1f, 0x6b, 0x8d, 0x45, 0xd8, 0xc6, - 0xa0, 0x97, 0x73, 0xbe, 0x7b, 0x11, 0xf7, 0xd1, 0xdc, 0x53, 0x40, 0x37, - 0xf3, 0x5b, 0x1d, 0x3d, 0x39, 0x3c, 0x39, 0x71, 0x1d, 0xad, 0x40, 0xb5, - 0x2a, 0x55, 0x0c, 0x2f, 0x6d, 0x92, 0x53, 0x51, 0xa7, 0x6d, 0x9e, 0x4b, - 0x32, 0x01, 0x8c, 0x62, 0x36, 0x74, 0x4c, 0x3b, 0xe3, 0xb8, 0x1f, 0xc3, - 0xc8, 0x70, 0xf0, 0x7a, 0x7b, 0x02, 0xf9, 0xd9, 0x31, 0x20, 0x36, 0x03, - 0x18, 0x82, 0x85, 0x1e, 0x82, 0x0d, 0x26, 0x4b, 0xf0, 0xbc, 0x8c, 0x2a, - 0xb8, 0xbc, 0xf4, 0x83, 0x2b, 0xe1, 0x51, 0x8b, 0xef, 0x82, 0x58, 0x86, - 0x26, 0x4e, 0x26, 0x48, 0x0a, 0x16, 0x49, 0x9a, 0x1d, 0x2a, 0xd7, 0x6c, - 0x53, 0x64, 0x4c, 0x3b, 0xdf, 0xb2, 0x9d, 0x57, 0xb3, 0x69, 0x3d, 0xfb, - 0xb3, 0x79, 0xfd, 0x75, 0xe2, 0x0b, 0x42, 0xb1, 0x29, 0x1b, 0xfd, 0xef, - 0x03, 0x73, 0x1a, 0x43, 0x1c, 0xfd, 0x8d, 0x02, 0x50, 0xc7, 0x6d, 0x0c, - 0x68, 0xa0, 0xd5, 0x3c, 0x75, 0x5e, 0x92, 0x68, 0x64, 0x83, 0xe1, 0x35, - 0x15, 0xda, 0x6c, 0xfa, 0x20, 0x35, 0x64, 0x82, 0xdd, 0x25, 0x05, 0xf9, - 0xdf, 0xc8, 0x8d, 0x52, 0xfa, 0xcb, 0x84, 0x37, 0x9c, 0x04, 0x4a, 0x17, - 0x9c, 0x93, 0x50, 0xbd, 0x26, 0xff, 0xe2, 0x57, 0xb8, 0x1d, 0x11, 0xfa, - 0x54, 0x35, 0xef, 0xe4, 0xca, 0x27, 0x79, 0x6a, 0xc7, 0x53, 0x21, 0xb2, - 0x9b, 0x3d, 0x9e, 0x2d, 0xe8, 0xdf, 0xaa, 0x49, 0x92, 0x85, 0xdb, 0xd4, - 0x9b, 0x8c, 0x2f, 0x18, 0x64, 0xd9, 0x92, 0xbe, 0x03, 0x63, 0x24, 0x2b, - 0x35, 0x0f, 0x25, 0x9e, 0xb7, 0x24, 0x95, 0x1f, 0x6c, 0xc1, 0xdd, 0x86, - 0x8e, 0xff, 0x6e, 0x6d, 0xa6, 0xe9, 0x1b, 0x80, 0xac, 0x97, 0xb0, 0xe1, - 0x4c, 0x93, 0xf5, 0x68, 0x42, 0xff, 0xf8, 0x3d, 0x65, 0x7e, 0xec, 0xfb, - 0x90, 0xbe, 0x72, 0x91, 0x6e, 0x80, 0x3d, 0x0e, 0x86, 0xb5, 0xc6, 0x75, - 0xc3, 0x9e, 0x9b, 0xc0, 0x30, 0x4a, 0x65, 0x46, 0x11, 0xcd, 0x27, 0xa5, - 0xb1, 0xd0, 0x7d, 0x09, 0xcf, 0xe6, 0x45, 0x2c, 0xee, 0x48, 0xe1, 0x22, - 0x34, 0x4f, 0xe2, 0x55, 0x2b, 0xb9, 0x9c, 0x7b, 0xed, 0x8a, 0x5c, 0xbc, - 0xf9, 0x47, 0x0b, 0x52, 0x73, 0xe2, 0xb3, 0x45, 0x06, 0xf7, 0x1b, 0xae, - 0x95, 0x1c, 0x64, 0x7b, 0xe2, 0x3e, 0xaa, 0x0d, 0xf3, 0xf3, 0x28, 0x9c, - 0xe3, 0x88, 0x97, 0x0d, 0xda, 0x56, 0x4f, 0x25, 0x90, 0xa5, 0x7d, 0x2a, - 0x2b, 0x7d, 0x72, 0x54, 0xb1, 0xb5, 0x75, 0x01, 0x33, 0x44, 0xa1, 0x85, - 0x62, 0x3b, 0x5e, 0xfc, 0xf7, 0xcf, 0xa4, 0x36, 0x7a, 0x03, 0x35, 0xd7, - 0x03, 0x72, 0x37, 0x28, 0x0f, 0x7e, 0x85, 0x22, 0xb3, 0x26, 0xf4, 0x1b, - 0x07, 0x1e, 0x49, 0x6b, 0x6c, 0xc8, 0x8e, 0xa1, 0x17, 0x5b, 0x02, 0xe9, - 0xb2, 0x1b, 0xd8, 0xbf, 0x0a, 0xcc, 0xcb, 0xc7, 0x5d, 0x87, 0x5b, 0xcc, - 0xc8, 0x12, 0x52, 0x09, 0xae, 0x22, 0x90, 0xa4, 0x83, 0xe7, 0x02, 0xdf, - 0x9d, 0xc9, 0x85, 0x3d, 0x50, 0xaa, 0x22, 0x2a, 0x79, 0xae, 0xfb, 0x72, - 0x14, 0x93, 0x46, 0xff, 0x4d, 0x96, 0x44, 0x61, 0xca, 0xdf, 0x6f, 0x4e, - 0xa4, 0x4c, 0x33, 0xfa, 0x95, 0xf0, 0xc0, 0x16, 0x1d, 0xbe, 0x4c, 0x82, - 0x85, 0xc0, 0xe6, 0xf3, 0x58, 0x86, 0x21, 0x5b, 0x50, 0xd6, 0x31, 0xd4, - 0xb4, 0x70, 0x38, 0x7b, 0x61, 0x4b, 0x07, 0xab, 0xca, 0xa1, 0xb5, 0xb7, - 0xc0, 0x4a, 0x6f, 0x26, 0x38, 0x2b, 0xb1, 0xa8, 0x4a, 0xae, 0x98, 0x03, - 0xfc, 0x01, 0xe5, 0x37, 0xb0, 0x0c, 0x51, 0xe1, 0xc0, 0xca, 0xa9, 0xf8, - 0x64, 0xda, 0xe8, 0xa9, 0xb2, 0x09, 0x36, 0xde, 0xb2, 0x74, 0x3d, 0x50, - 0x6c, 0xf7, 0x31, 0x64, 0x0b, 0x7c, 0x71, 0x57, 0xda, 0x00, 0x47, 0xa1, - 0x56, 0x04, 0xbc, 0x08, 0xe7, 0x66, 0x41, 0x5d, 0xab, 0xeb, 0x0a, 0x8b, - 0xc4, 0x13, 0x3a, 0x0e, 0xca, 0xd7, 0xe1, 0x43, 0x32, 0x4f, 0xc8, 0xd7, - 0x2a, 0xe1, 0x25, 0x89, 0xbe, 0x73, 0x17, 0x39, 0xe3, 0x49, 0x4a, 0x3b, - 0x72, 0xdd, 0x4a, 0xa4, 0xe3, 0xf2, 0xe9, 0x06, 0x5b, 0x9f, 0x49, 0x42, - 0xb9, 0x48, 0xb7, 0x9e, 0xc2, 0x73, 0x28, 0x18, 0x69, 0x15, 0xf7, 0x6b, - 0x0f, 0x20, 0xd5, 0x30, 0xad, 0xab, 0xd1, 0xe2, 0x35, 0xb4, 0xd8, 0xde, - 0x9b, 0xd2, 0x5e, 0x72, 0xed, 0xc2, 0x1c, 0x6e, 0xb2, 0xa6, 0xa4, 0x42, - 0x57, 0x7d, 0xb1, 0x75, 0xe8, 0x2b, 0x97, 0x0d, 0x8b, 0x12, 0x8f, 0x2e, - 0xe5, 0x30, 0x3d, 0x43, 0xe5, 0xdb, 0x0f, 0x9e, 0x57, 0x63, 0x31, 0xf4, - 0x69, 0xda, 0x6d, 0xc2, 0x29, 0x6f, 0xda, 0x1c, 0xc9, 0x95, 0x3c, 0x07, - 0x60, 0x36, 0xb3, 0x0c, 0x14, 0x2b, 0x47, 0xe4, 0x42, 0xed, 0x0b, 0x8d, - 0x72, 0xbd, 0xb9, 0x04, 0xee, 0xf4, 0x64, 0x91, 0xcc, 0xa5, 0x3b, 0x59, - 0x4d, 0xef, 0x52, 0x38, 0x68, 0xfd, 0x1e, 0xae, 0x38, 0xd0, 0x36, 0x18, - 0x69, 0x7a, 0xf0, 0xfd, 0x03, 0xec, 0x8d, 0x1a, 0x36, 0x21, 0xc4, 0xef, - 0x16, 0x8f, 0xef, 0xeb, 0x52, 0x6b, 0xb5, 0x22, 0x36, 0x7a, 0x1f, 0xdf, - 0xf0, 0xa0, 0xac, 0x74, 0x90, 0xe8, 0x39, 0x8e, 0x32, 0x94, 0x29, 0x9a, - 0xa3, 0x1b, 0x1b, 0x5c, 0xef, 0x7b, 0xeb, 0x25, 0xbb, 0xc1, 0x89, 0x38, - 0x90, 0x84, 0xba, 0x14, 0x53, 0xef, 0x61, 0x85, 0xaf, 0x27, 0xef, 0x4c, - 0xb4, 0x2b, 0xac, 0xb2, 0xf6, 0x21, 0x3c, 0xbf, 0x2a, 0x24, 0xac, 0xef, - 0x8a, 0xeb, 0xd1, 0x82, 0xb8, 0x2e, 0x29, 0x3a, 0xcf, 0xc3, 0xcd, 0xc3, - 0x1e, 0xb8, 0xff, 0xac, 0x35, 0xbe, 0x63, 0x3f, 0xbd, 0xa5, 0x97, 0xb2, - 0xdb, 0xa6, 0x73, 0x4e, 0xb3, 0x62, 0x70, 0x02, 0x63, 0x4f, 0xdf, 0x9b, - 0x81, 0xe0, 0xa8, 0x75, 0x2c, 0xd6, 0x4b, 0x22, 0x4f, 0x83, 0x74, 0xc2, - 0xe7, 0x5f, 0x64, 0x73, 0xcf, 0x7d, 0xa8, 0x9a, 0x2d, 0x87, 0x99, 0x91, - 0x35, 0x08, 0xe6, 0x14, 0x8d, 0xef, 0x51, 0xd7, 0xa9, 0x97, 0xeb, 0xbd, - 0x90, 0xa4, 0xc7, 0xc8, 0x35, 0x32, 0xc4, 0xe0, 0x7a, 0x12, 0x33, 0x12, - 0x20, 0x8e, 0x05, 0xde, 0xe9, 0x0f, 0xf9, 0x1b, 0xc8, 0xfa, 0xb2, 0x74, - 0x81, 0x36, 0xff, 0x3f, 0x2a, 0x55, 0x09, 0xe0, 0xd6, 0xc4, 0xeb, 0x8f, - 0xfe, 0x88, 0xe5, 0xcf, 0x50, 0x2b, 0xd0, 0x53, 0x80, 0xb8, 0x75, 0x5e, - 0xbb, 0x08, 0xd9, 0x3a, 0x8a, 0x4b, 0xdc, 0x16, 0xb0, 0x17, 0x43, 0x34, - 0x57, 0xb7, 0x42, 0xc1, 0x57, 0xd7, 0x9d, 0x79, 0x13, 0xcb, 0xac, 0x73, - 0x16, 0x44, 0xbb, 0xff, 0xa1, 0x34, 0xc5, 0x17, 0xce, 0x13, 0x75, 0xeb, - 0x27, 0x84, 0x01, 0xda, 0x44, 0x6d, 0x8c, 0x22, 0x40, 0x7b, 0x02, 0xc7, - 0x87, 0x7c, 0x3f, 0xa2, 0x6c, 0xd5, 0xc4, 0xda, 0xbe, 0x32, 0x2c, 0x39, - 0x1e, 0x30, 0xb4, 0x48, 0x4e, 0x7c, 0x94, 0x3a, 0x94, 0xbf, 0xb8, 0x98, - 0x8e, 0xf1, 0xcc, 0xd8, 0x58, 0x55, 0x43, 0xeb, 0xc8, 0x9c, 0xc8, 0x93, - 0x82, 0xaf, 0x0d, 0x59, 0x4d, 0xee, 0xb5, 0x16, 0x60, 0xb7, 0x9e, 0x2c, - 0x7c, 0x86, 0x5c, 0xf4, 0x71, 0x56, 0x7b, 0xff, 0xaa, 0x82, 0xf7, 0x55, - 0x68, 0x51, 0x63, 0x23, 0x26, 0xdf, 0x43, 0x32, 0x45, 0xbf, 0xa2, 0xeb, - 0xc3, 0x7e, 0x3d, 0x38, 0x62, 0x4c, 0xa3, 0x78, 0xf4, 0x45, 0x41, 0xb5, - 0x9b, 0xee, 0x33, 0x94, 0x74, 0xe8, 0x43, 0x44, 0x03, 0xb5, 0x30, 0x32, - 0x9d, 0x05, 0x5e, 0x83, 0xd7, 0x6c, 0x3d, 0xb3, 0xa7, 0x39, 0x91, 0x15, - 0x3f, 0x7d, 0xfe, 0x07, 0x17, 0x86, 0xee, 0x7f, 0x3f, 0xcb, 0xe4, 0xa6, - 0x3e, 0xd1, 0x47, 0xd3, 0x50, 0x8e, 0x26, 0x90, 0xef, 0x3b, 0x6c, 0xd7, - 0xe5, 0x4c, 0x41, 0xb5, 0xb4, 0x7f, 0x37, 0xe4, 0xec, 0xa9, 0x71, 0x0b, - 0xea, 0x83, 0x2f, 0x14, 0xe4, 0xc8, 0x3f, 0x69, 0xef, 0x6f, 0x82, 0xf1, - 0xe5, 0x28, 0x54, 0xcf, 0xb1, 0xed, 0x7a, 0xb8, 0x11, 0xac, 0x6c, 0x7b, - 0x55, 0x25, 0x49, 0x21, 0xed, 0x0a, 0x29, 0x29, 0x01, 0x41, 0x13, 0xd4, - 0xec, 0xf1, 0xaf, 0x7e, 0x21, 0xf6, 0xf9, 0x51, 0xb3, 0x5e, 0x72, 0x83, - 0xfb, 0x7c, 0x72, 0x6b, 0xe0, 0xce, 0xdf, 0xff, 0x49, 0x15, 0x79, 0x22, - 0x43, 0x63, 0xb9, 0x1c, 0xf9, 0x58, 0x86, 0xa4, 0x20, 0x95, 0x84, 0x16, - 0x2d, 0xd4, 0x03, 0x97, 0x7a, 0xca, 0xbb, 0xc6, 0x55, 0x90, 0x39, 0xf4, - 0x45, 0x0d, 0xd5, 0x75, 0x0a, 0x38, 0x18, 0x61, 0x1a, 0xcf, 0xe6, 0xc0, - 0xe9, 0x0b, 0xba, 0xe4, 0x42, 0x24, 0xa1, 0xba, 0x3d, 0x8d, 0x57, 0xf3, - 0x85, 0x0a, 0xba, 0x94, 0x52, 0x86, 0xb7, 0x72, 0x25, 0xa6, 0xe6, 0xaa, - 0xbd, 0x33, 0xef, 0xd9, 0x63, 0x1c, 0x8b, 0xb8, 0xd4, 0x1c, 0x5f, 0x26, - 0x20, 0x8e, 0x11, 0xb0, 0x04, 0xc6, 0xdc, 0x5b, 0x7e, 0xc9, 0x18, 0x8b, - 0xd7, 0xa4, 0x71, 0xed, 0x9b, 0x69, 0xdd, 0xe4, 0xaf, 0xc4, 0x21, 0x0e, - 0x31, 0xac, 0x5f, 0x1d, 0x17, 0xf4, 0xf3, 0x71, 0xd0, 0x8a, 0xbd, 0x0f, - 0x37, 0x7e, 0x03, 0x22, 0x8c, 0xf5, 0xc5, 0x92, 0x37, 0xd6, 0xca, 0x37, - 0x2b, 0xd1, 0x2b, 0x1c, 0x9b, 0x71, 0x5e, 0x0b, 0xe3, 0x91, 0x2e, 0xe1, - 0x0d, 0xc0, 0xfa, 0x9f, 0xb0, 0x95, 0xf0, 0x92, 0x9e, 0xdc, 0x98, 0xa9, - 0xb8, 0xd4, 0xa5, 0x8e, 0x01, 0xd6, 0x5c, 0x9e, 0x4d, 0xe5, 0x5b, 0x75, - 0xfe, 0x2a, 0x43, 0xc6, 0x21, 0xe3, 0x34, 0x8b, 0x36, 0x63, 0xf7, 0xf4, - 0xa6, 0xcf, 0x98, 0x24, 0xa2, 0x18, 0x12, 0x1b, 0xb6, 0xef, 0xe5, 0x7f, - 0x79, 0xd6, 0xb2, 0x33, 0xd9, 0x51, 0xb1, 0x2e, 0x4c, 0x0c, 0xae, 0x29, - 0x23, 0x9d, 0x31, 0x9d, 0x92, 0xdc, 0x78, 0x84, 0x24, 0xfd, 0x0d, 0xd0, - 0x5d, 0x59, 0xcd, 0x1a, 0x8b, 0x68, 0x01, 0xb1, 0x4e, 0x53, 0xd9, 0xc7, - 0x0f, 0x05, 0x49, 0xaf, 0x87, 0x9c, 0x48, 0xa9, 0xd2, 0xfd, 0x4c, 0xb8, - 0x2c, 0x18, 0xa6, 0x64, 0x7f, 0x75, 0x29, 0x7d, 0xb7, 0x4e, 0x3b, 0x6b, - 0x57, 0x7e, 0x8d, 0x83, 0x8a, 0x54, 0xe7, 0x08, 0xe9, 0x3b, 0x9a, 0xd3, - 0x93, 0xbb, 0x19, 0xa4, 0x3c, 0x0c, 0x6e, 0x9c, 0x41, 0x7b, 0xfb, 0xef, - 0x7a, 0x2a, 0x47, 0xbe, 0x0d, 0xe4, 0x4d, 0x95, 0x12, 0x06, 0x5b, 0x1a, - 0x99, 0x6f, 0xb8, 0xcc, 0x06, 0x04, 0x8f, 0xeb, 0xff, 0xf4, 0x9f, 0xd8, - 0x2e, 0xd0, 0x80, 0x22, 0xfb, 0x6c, 0x5a, 0x21, 0x33, 0x98, 0x7d, 0xaf, - 0x36, 0x97, 0x76, 0x02, 0xdb, 0x0d, 0x76, 0xe4, 0x12, 0x77, 0x33, 0x4e, - 0x52, 0x1c, 0xd8, 0xe2, 0x33, 0xa2, 0xf9, 0x1c, 0x6f, 0x8d, 0xc3, 0x12, - 0xef, 0xa5, 0x35, 0x4f, 0x4b, 0x73, 0x87, 0x57, 0x60, 0xb5, 0x39, 0x22, - 0xb4, 0x80, 0xa5, 0x48, 0x7e, 0x2e, 0x78, 0xc3, 0xc2, 0xc5, 0x87, 0x80, - 0xff, 0x7f, 0x09, 0x99, 0xd4, 0x96, 0x07, 0x4d, 0xc0, 0x7f, 0xb7, 0x57, - 0x83, 0x58, 0xf0, 0xb4, 0xde, 0xc6, 0xd1, 0x1c, 0x82, 0x7f, 0x46, 0x98, - 0xf4, 0x81, 0x9f, 0xa3, 0x13, 0xf6, 0xf2, 0x2c, 0x91, 0x3c, 0x5a, 0x6f, - 0xac, 0xc0, 0x05, 0x7f, 0x19, 0x31, 0x95, 0x70, 0x8b, 0x63, 0x71, 0x98, - 0x3a, 0xf2, 0x72, 0x36, 0xfd, 0x88, 0x88, 0x12, 0x86, 0x28, 0x1a, 0x33, - 0xaf, 0x41, 0xab, 0x56, 0xa1, 0xf7, 0x84, 0x16, 0x8d, 0x4f, 0xde, 0xd2, - 0x82, 0xb4, 0x72, 0x5a, 0x5b, 0xd2, 0x6f, 0xed, 0x53, 0x64, 0x7e, 0x74, - 0x64, 0x22, 0xc2, 0x6a, 0xd9, 0xa6, 0x1a, 0x60, 0x97, 0x75, 0x6c, 0x92, - 0x54, 0x77, 0x9c, 0xf5, 0x03, 0xd8, 0x93, 0x2d, 0x95, 0xc5, 0x55, 0x57, - 0x73, 0x34, 0xb9, 0x08, 0x2d, 0xb5, 0x87, 0xda, 0xf2, 0x26, 0xca, 0xf0, - 0x55, 0x36, 0x74, 0x76, 0x64, 0x77, 0xf7, 0x85, 0x4f, 0xe1, 0xe3, 0xc8, - 0x3f, 0x78, 0x3f, 0x00, 0xa0, 0xbe, 0x19, 0x53, 0xbd, 0xec, 0xe1, 0xc3, - 0xbe, 0xc1, 0x15, 0xea, 0x09, 0xd1, 0xc2, 0x4a, 0xa4, 0x52, 0x50, 0xa5, - 0x1b, 0xd0, 0xb3, 0x8b, 0x91, 0x4f, 0x93, 0xa1, 0xcc, 0x60, 0xd7, 0xd9, - 0x8c, 0xc6, 0xbb, 0x76, 0xc5, 0xbf, 0x52, 0x32, 0x66, 0x95, 0xb4, 0x73, - 0x48, 0x26, 0xfb, 0x55, 0xd7, 0xa8, 0x04, 0x1e, 0x8f, 0xb9, 0x3d, 0x5d, - 0xe7, 0xe2, 0x16, 0x27, 0x04, 0x48, 0x24, 0x4c, 0x0e, 0x45, 0x89, 0x45, - 0x5b, 0xab, 0x7a, 0xb7, 0x0d, 0x75, 0x85, 0x7c, 0xa3, 0x73, 0xa2, 0x95, - 0x2f, 0xd6, 0x00, 0x80, 0x75, 0x8a, 0x9f, 0x35, 0x39, 0x25, 0x7b, 0x08, - 0x2c, 0xef, 0xea, 0x2b, 0x8c, 0xfd, 0xec, 0x59, 0xff, 0x76, 0xc3, 0xa2, - 0xa3, 0x34, 0xd8, 0x7a, 0xb0, 0x5e, 0xbe, 0xc5, 0x70, 0x02, 0x74, 0x2d, - 0x94, 0xba, 0x62, 0x57, 0x39, 0x36, 0xa2, 0xcf, 0x7e, 0x70, 0x66, 0x3c, - 0xe3, 0x20, 0x53, 0x49, 0x40, 0xc2, 0xb0, 0x4b, 0xa5, 0x1f, 0x4f, 0x2b, - 0x4c, 0xc5, 0x9c, 0xc1, 0x6a, 0x87, 0xef, 0x22, 0xb2, 0xf9, 0x25, 0x6a, - 0xcb, 0x6d, 0xa8, 0xdc, 0xc2, 0x62, 0xf6, 0xb2, 0xb4, 0x25, 0x05, 0x57, - 0x79, 0xfb, 0xee, 0xb7, 0x45, 0x25, 0x67, 0x72, 0x27, 0x74, 0x8d, 0xa4, - 0xe1, 0xfd, 0xae, 0x83, 0xad, 0xe8, 0xde, 0x59, 0x93, 0x1a, 0xec, 0x06, - 0xfd, 0x86, 0x8f, 0x5b, 0x69, 0x73, 0x9c, 0x28, 0x3a, 0xb4, 0xde, 0x63, - 0x23, 0x20, 0x0f, 0x6e, 0x2f, 0x2e, 0xe2, 0x28, 0xa9, 0x23, 0xf2, 0xc7, - 0xbc, 0xc7, 0x46, 0x83, 0x01, 0xb7, 0xdd, 0xcc, 0x97, 0x13, 0x26, 0xba, - 0x76, 0xb8, 0x24, 0x4c, 0x8c, 0x81, 0x39, 0xd5, 0x93, 0xe0, 0x4c, 0x19, - 0xd0, 0x52, 0xdd, 0x98, 0x51, 0x67, 0x28, 0x0b, 0xb8, 0x09, 0x58, 0x01, - 0xaf, 0x2d, 0x4b, 0x15, 0x38, 0x95, 0x10, 0x20, 0xff, 0x6a, 0xe6, 0x58, - 0xd6, 0x7d, 0x7e, 0x2f, 0x7d, 0x03, 0xae, 0xd2, 0x93, 0x1d, 0x40, 0x61, - 0xd7, 0xdf, 0x98, 0xd1, 0x0a, 0xa6, 0xd3, 0x03, 0x65, 0xa2, 0xa6, 0xcd, - 0xab, 0x42, 0xc0, 0xfc, 0xab, 0x77, 0xf1, 0xf7, 0x61, 0xcb, 0x58, 0x6f, - 0x2a, 0x36, 0xd1, 0xa7, 0x6f, 0x60, 0xfd, 0x16, 0x8c, 0x4b, 0x2d, 0xa5, - 0x9a, 0x5c, 0x1f, 0xb9, 0x2a, 0xd1, 0xfe, 0x7a, 0x39, 0xa0, 0x97, 0xcd, - 0xf6, 0xb4, 0x81, 0x0a, 0xf7, 0x8d, 0x1f, 0x8e, 0x15, 0x29, 0x26, 0xda, - 0x7e, 0x76, 0x93, 0x06, 0x0c, 0xe3, 0x20, 0x27, 0x83, 0xe1, 0xcb, 0x43, - 0x0e, 0xb4, 0xfe, 0x0f, 0x54, 0xb5, 0x23, 0x05, 0x50, 0x1d, 0x92, 0x3b, - 0x3e, 0x58, 0xf1, 0xe7, 0x97, 0x02, 0x7c, 0x59, 0x4d, 0xe7, 0x63, 0xaa, - 0xb3, 0x8b, 0x43, 0xdb, 0x61, 0x30, 0xbd, 0x66, 0x4e, 0x5d, 0xa9, 0xde, - 0xda, 0x13, 0x5f, 0xf4, 0xeb, 0x72, 0x9f, 0x2b, 0x40, 0xc5, 0x34, 0x00, - 0xf3, 0x4b, 0xf8, 0x9a, 0x6e, 0x42, 0x27, 0xd8, 0x18, 0xf6, 0xfe, 0xfc, - 0x6a, 0x74, 0x38, 0xe9, 0x9d, 0x97, 0xf0, 0x36, 0x13, 0x65, 0x84, 0x1b, - 0x97, 0xe4, 0x9c, 0xfe, 0x53, 0xf0, 0x27, 0xc0, 0xc7, 0xf9, 0x62, 0xcb, - 0xb6, 0x0b, 0xba, 0x89, 0x85, 0xb3, 0x45, 0x67, 0x16, 0xa7, 0xd8, 0x6c, - 0xf3, 0x44, 0x10, 0x2b, 0x0d, 0xcf, 0x43, 0x25, 0xd2, 0x74, 0x73, 0xff, - 0x2e, 0x91, 0x86, 0xb5, 0x7a, 0xda, 0xc1, 0x67, 0x1b, 0x96, 0x00, 0x28, - 0xca, 0xb4, 0x74, 0xf2, 0xf4, 0xd2, 0x10, 0x15, 0x58, 0x2d, 0x19, 0x97, - 0xd1, 0xc6, 0xd2, 0xac, 0x7a, 0xd6, 0x9e, 0x00, 0x6c, 0x85, 0xfb, 0xad, - 0x3a, 0x6a, 0x8c, 0x8a, 0x3a, 0xa3, 0x39, 0x4e, 0x75, 0xf4, 0xb5, 0x8a, - 0x16, 0x37, 0x61, 0x60, 0x36, 0x7b, 0xf2, 0xd8, 0x4b, 0x56, 0xfe, 0x4d, - 0x47, 0xe4, 0x17, 0x79, 0x08, 0xa9, 0x85, 0x42, 0x13, 0xbe, 0x5c, 0x02, - 0x8b, 0x46, 0x1d, 0x36, 0x78, 0x97, 0x09, 0x13, 0xbd, 0x0d, 0xc9, 0xab, - 0x3a, 0x64, 0x2c, 0xc2, 0x3c, 0x38, 0x6f, 0xc6, 0xdc, 0x73, 0x0d, 0xb8, - 0xb8, 0x9c, 0x12, 0x85, 0x07, 0x39, 0xaa, 0xbb, 0xa0, 0x69, 0x85, 0x6f, - 0x7d, 0x8d, 0xcb, 0x9c, 0x22, 0x34, 0xea, 0xe5, 0x53, 0x38, 0x41, 0x15, - 0x4e, 0xe8, 0x77, 0x30, 0xa0, 0x21, 0xfa, 0xd1, 0x89, 0xcf, 0x18, 0xdf, - 0xa8, 0x11, 0xbf, 0xfb, 0x5b, 0xb3, 0x90, 0xb2, 0xf7, 0x28, 0x9c, 0x69, - 0x86, 0x4f, 0x9e, 0xd2, 0xd2, 0x81, 0x1c, 0xaa, 0xe7, 0xc9, 0xe2, 0x1b, - 0xf0, 0xde, 0x04, 0x6e, 0xca, 0xda, 0x4a, 0x80, 0xb1, 0x3d, 0x14, 0x93, - 0x3a, 0x6f, 0x52, 0xea, 0x55, 0x1f, 0x98, 0x17, 0xfe, 0x56, 0xdf, 0x7e, - 0x33, 0x03, 0x96, 0x26, 0xaa, 0xf3, 0xd2, 0x70, 0xfe, 0x5f, 0xb3, 0xac, - 0x97, 0x9a, 0x7e, 0xef, 0xeb, 0x45, 0x23, 0x06, 0x94, 0x51, 0x33, 0x63, - 0x57, 0xce, 0xad, 0x81, 0xc7, 0xbc, 0xa5, 0x74, 0xfd, 0x67, 0xda, 0xe9, - 0x67, 0x59, 0x49, 0xd0, 0x35, 0xb1, 0x7f, 0x23, 0x27, 0x7e, 0xe4, 0xd1, - 0x73, 0x25, 0xac, 0x2d, 0xd4, 0x30, 0x4c, 0x0a, 0x1f, 0x13, 0x54, 0x5c, - 0x80, 0x7d, 0x80, 0x85, 0xd2, 0x73, 0x91, 0x08, 0x66, 0x22, 0x5a, 0x0c, - 0xe1, 0xbb, 0x63, 0xab, 0x6f, 0xb9, 0x49, 0xe3, 0x21, 0xaa, 0x63, 0x91, - 0xf5, 0x44, 0x61, 0xd1, 0x5b, 0x5f, 0xb0, 0x47, 0x6a, 0xa2, 0xff, 0xbd, - 0x9e, 0xe7, 0x2d, 0x09, 0x27, 0x8d, 0xc4, 0x72, 0x55, 0xa5, 0x7e, 0xea, - 0xc9, 0xd6, 0x0b, 0xe1, 0xc3, 0xd6, 0x90, 0x9c, 0x0a, 0x18, 0xa9, 0xfc, - 0x35, 0xe5, 0x49, 0xd3, 0x80, 0x16, 0x05, 0x84, 0xdf, 0x05, 0x32, 0x3b, - 0xd8, 0x8c, 0x65, 0xfb, 0xc7, 0xaa, 0x73, 0xeb, 0x06, 0x5b, 0x3d, 0xff, - 0x8e, 0xf2, 0x20, 0xe5, 0x57, 0x83, 0x7a, 0x25, 0x53, 0x08, 0xc1, 0x1f, - 0x4b, 0xb7, 0xa5, 0xa4, 0x20, 0x4f, 0x61, 0xf4, 0x40, 0x15, 0x53, 0xc1, - 0x94, 0x11, 0xe5, 0x28, 0xab, 0x52, 0x22, 0xaf, 0x3b, 0x80, 0x31, 0xe2, - 0x6f, 0xaa, 0xde, 0xc5, 0x86, 0xb3, 0x6e, 0xe3, 0x3b, 0x27, 0x7c, 0xb9, - 0x24, 0xa5, 0x71, 0x57, 0x8a, 0x56, 0x17, 0x7f, 0xd5, 0x1b, 0x7e, 0x5a, - 0x8d, 0x8e, 0xcd, 0xfb, 0xc2, 0x4f, 0x3f, 0x8a, 0x05, 0x1a, 0x9e, 0x84, - 0x31, 0x26, 0x0e, 0xe4, 0x5e, 0x3f, 0x28, 0xe8, 0x33, 0x55, 0x34, 0x58, - 0x7b, 0xb7, 0x21, 0x0b, 0x67, 0x90, 0xd7, 0xcd, 0xdf, 0x2b, 0x2e, 0xd5, - 0x50, 0x1a, 0x1b, 0x21, 0x57, 0x1e, 0x9d, 0x17, 0x48, 0x3a, 0x00, 0xf8, - 0xc9, 0xca, 0xf6, 0x81, 0x5d, 0x74, 0x6b, 0x8c, 0x91, 0x16, 0x87, 0xf6, - 0xd9, 0xca, 0x6c, 0xce, 0xb5, 0xb5, 0x49, 0x6e, 0x5d, 0xda, 0x7b, 0x53, - 0xff, 0x5b, 0x4b, 0x1a, 0x59, 0x61, 0x1d, 0x99, 0x2f, 0x50, 0xe1, 0x32, - 0x63, 0x4e, 0xd1, 0x46, 0x22, 0x41, 0x88, 0x32, 0x43, 0x97, 0xfc, 0xa2, - 0xcc, 0x42, 0x53, 0xbb, 0x14, 0x34, 0x42, 0x6c, 0x2d, 0x1a, 0xc0, 0xf1, - 0x0e, 0xe4, 0x43, 0x43, 0xe3, 0xf6, 0xf0, 0xaa, 0x0e, 0x73, 0x68, 0xe5, - 0x8c, 0xcd, 0xe5, 0x37, 0x39, 0x8e, 0x95, 0xab, 0x95, 0xdb, 0x4f, 0x88, - 0x9f, 0x4b, 0xa9, 0xae, 0x50, 0x81, 0xd6, 0x77, 0x6a, 0xb2, 0xd6, 0x24, - 0xd5, 0x8f, 0xc2, 0xd8, 0x65, 0x97, 0x78, 0x84, 0x30, 0x47, 0x6a, 0x53, - 0x1e, 0xa7, 0x27, 0x77, 0xc2, 0x94, 0x0a, 0xb3, 0x8c, 0x97, 0x16, 0x70, - 0xca, 0x16, 0x10, 0xf4, 0xad, 0xf7, 0x8b, 0x4f, 0x94, 0x7f, 0xb4, 0x0e, - 0x0a, 0x12, 0xe4, 0x08, 0x71, 0xe7, 0x3e, 0xbe, 0x10, 0xd9, 0xd1, 0xed, - 0x20, 0x9b, 0xee, 0xcd, 0x8d, 0xbf, 0xcb, 0x42, 0x7e, 0xc7, 0x77, 0xad, - 0x69, 0xa0, 0x0c, 0xfb, 0x88, 0xf4, 0x8c, 0x82, 0x50, 0xc2, 0xaf, 0xb1, - 0x8d, 0x5e, 0xb3, 0x3d, 0x41, 0xee, 0x4d, 0x9c, 0x36, 0x33, 0xa4, 0x4c, - 0x8e, 0x72, 0x85, 0xbf, 0x0d, 0x82, 0x53, 0xf3, 0x28, 0x7f, 0xd6, 0xec, - 0x99, 0xa8, 0xf4, 0xfe, 0xde, 0xf4, 0xde, 0xd7, 0xd6, 0xd7, 0x1c, 0x29, - 0x93, 0x3a, 0x6b, 0x3f, 0x70, 0x46, 0xd0, 0x20, 0x8f, 0xe4, 0xb4, 0x0f, - 0x57, 0xb4, 0x48, 0x97, 0xb1, 0x83, 0x2a, 0x3b, 0x61, 0x3f, 0xec, 0xdc, - 0x2b, 0x2d, 0xb6, 0x54, 0x6b, 0x3c, 0x86, 0xf0, 0x8d, 0xd7, 0xad, 0x44, - 0xc6, 0x49, 0x6f, 0xa9, 0xc4, 0x13, 0x57, 0x94, 0x86, 0xc9, 0xe2, 0x76, - 0xbe, 0xe6, 0xb7, 0xad, 0x24, 0xbe, 0x3d, 0xae, 0x94, 0x3e, 0x32, 0x1e, - 0x71, 0x72, 0xb7, 0x01, 0xcd, 0x2c, 0x9d, 0x11, 0x24, 0xb9, 0xa1, 0x9b, - 0x35, 0x1c, 0x0e, 0xb6, 0x8c, 0x48, 0x1f, 0x5f, 0xbe, 0xc3, 0x65, 0x88, - 0xa3, 0x66, 0x21, 0x1f, 0x33, 0xda, 0xf5, 0x4e, 0x30, 0x50, 0x76, 0xb6, - 0x77, 0x5f, 0xfb, 0xa6, 0xc4, 0xfc, 0x18, 0x92, 0xe0, 0x07, 0x98, 0x88, - 0xcb, 0x50, 0x19, 0x21, 0xc8, 0x3a, 0x80, 0xe5, 0xe9, 0xe9, 0x42, 0xe3, - 0xfc, 0x80, 0x3e, 0x61, 0xc5, 0xee, 0x5c, 0xb7, 0xd7, 0x16, 0x42, 0x4a, - 0xdc, 0x82, 0x91, 0x98, 0xeb, 0x06, 0xbe, 0x2c, 0xcf, 0xe6, 0x5c, 0x80, - 0x99, 0x24, 0x0c, 0xe2, 0xa5, 0x83, 0x6d, 0xb1, 0xc0, 0x5b, 0x2f, 0x93, - 0xd4, 0x91, 0x1d, 0x70, 0x15, 0x7e, 0x25, 0xdc, 0x23, 0x89, 0xfb, 0xc4, - 0x86, 0xcd, 0x8b, 0x46, 0x0c, 0xd9, 0x64, 0x32, 0x0a, 0x28, 0xc9, 0xeb, - 0xcd, 0xc4, 0xaa, 0x81, 0x1c, 0x5d, 0xb4, 0x1f, 0x07, 0xea, 0x7e, 0x0b, - 0xdb, 0xf6, 0xb6, 0x41, 0x68, 0x15, 0x0b, 0x3a, 0xdf, 0xbd, 0x47, 0x9f, - 0xee, 0x9f, 0xe9, 0x4f, 0x61, 0xa4, 0x91, 0xfd, 0x18, 0xda, 0x07, 0xec, - 0xd7, 0xc5, 0x36, 0x1c, 0x8a, 0xe2, 0xe5, 0x96, 0xc6, 0xe3, 0x86, 0xd2, - 0x9e, 0xcd, 0x16, 0x6b, 0xe4, 0x33, 0xb7, 0xff, 0xa5, 0x31, 0xf8, 0xdf, - 0xd0, 0xb1, 0xbe, 0xc7, 0x29, 0x09, 0xfb, 0x19, 0x86, 0xaf, 0xf4, 0xe3, - 0x53, 0x98, 0x33, 0x64, 0x56, 0xa2, 0x57, 0x2d, 0x06, 0x0e, 0xc4, 0xe7, - 0x06, 0xdd, 0x56, 0xc7, 0x2a, 0xb3, 0x09, 0xb4, 0xf0, 0x80, 0xaa, 0x3d, - 0xf5, 0x97, 0xc6, 0x41, 0x0d, 0x89, 0x69, 0xf8, 0x7e, 0xc4, 0xee, 0x39, - 0xc3, 0x9f, 0x74, 0xe4, 0x40, 0x80, 0x3c, 0xf5, 0x4d, 0x91, 0xaf, 0xc0, - 0xf1, 0x57, 0x2d, 0xf8, 0xa2, 0x1c, 0x21, 0xe5, 0x50, 0xaf, 0x0c, 0xa1, - 0xfb, 0x79, 0xa4, 0x7c, 0x46, 0x22, 0x3f, 0x72, 0xdf, 0x8f, 0x93, 0xe8, - 0x62, 0x1f, 0x9e, 0x11, 0x76, 0x3b, 0xeb, 0x49, 0x77, 0x7c, 0x03, 0x66, - 0xcf, 0x91, 0x4f, 0x02, 0x0b, 0xdf, 0x15, 0xc1, 0x1f, 0x23, 0x2e, 0x0d, - 0x2b, 0x73, 0xca, 0x82, 0x35, 0xdb, 0xb5, 0xe2, 0x8c, 0x1f, 0x00, 0xbc, - 0xec, 0xb1, 0xe4, 0x50, 0xca, 0x49, 0x81, 0x69, 0x73, 0xc1, 0x14, 0x06, - 0x5c, 0x65, 0xff, 0xc9, 0x22, 0x1c, 0x32, 0x12, 0xca, 0x98, 0x49, 0x0b, - 0xdb, 0x8f, 0xd3, 0xac, 0x43, 0x6f, 0x42, 0xdc, 0xc7, 0xa0, 0x6f, 0x53, - 0xd6, 0x0f, 0x9b, 0xa4, 0xf8, 0x93, 0x65, 0x2e, 0xe1, 0xf6, 0x49, 0xc5, - 0x47, 0x88, 0xca, 0xfd, 0xc2, 0xc7, 0x97, 0xe9, 0xef, 0x9a, 0xd3, 0xa1, - 0x2a, 0x9c, 0x8e, 0xbf, 0xd7, 0x17, 0x09, 0xba, 0xa7, 0x3e, 0x67, 0xa8, - 0x69, 0xbe, 0xc5, 0xb7, 0xc6, 0x7c, 0xe5, 0xea, 0xc2, 0x42, 0xdc, 0xcd, - 0x70, 0xc7, 0xab, 0xef, 0x42, 0x52, 0xe4, 0x8d, 0xd9, 0x31, 0xd4, 0x43, - 0xf0, 0xe5, 0x53, 0x15, 0x14, 0x2b, 0x21, 0xd0, 0x9d, 0x2a, 0xdc, 0x7a, - 0x81, 0x4b, 0x0b, 0x37, 0x54, 0x0f, 0x53, 0xac, 0x20, 0xb0, 0xfb, 0xaa, - 0x41, 0x99, 0x62, 0xae, 0xed, 0xbe, 0xeb, 0x2f, 0x70, 0x1b, 0x36, 0x75, - 0xbb, 0xa9, 0x18, 0x1c, 0x59, 0xa1, 0x33, 0x30, 0x7f, 0x3f, 0x56, 0x1d, - 0x3f, 0x88, 0x7c, 0x3f, 0xd9, 0x46, 0xa3, 0x92, 0x5c, 0x09, 0x37, 0x31, - 0x2e, 0xa5, 0x47, 0x65, 0xad, 0x94, 0x22, 0xcf, 0x3e, 0x8c, 0x29, 0x91, - 0x6f, 0xeb, 0x9e, 0xac, 0xe4, 0x93, 0x69, 0x85, 0xae, 0x6f, 0x91, 0xa9, - 0xa9, 0x52, 0xfd, 0xc7, 0x7e, 0x25, 0x50, 0x32, 0x98, 0x96, 0x7c, 0xb3, - 0x88, 0x23, 0x04, 0xbd, 0x7c, 0x34, 0x26, 0x71, 0xc0, 0xee, 0xb0, 0x5a, - 0xc8, 0x16, 0xc6, 0x6f, 0x32, 0x9a, 0x37, 0x8a, 0x5f, 0xf7, 0x2d, 0xed, - 0x73, 0xfe, 0x30, 0x84, 0x7d, 0x33, 0xc7, 0x36, 0x37, 0xec, 0xec, 0xda, - 0x87, 0xb8, 0x55, 0xc0, 0xd6, 0x9d, 0x95, 0x0d, 0xa6, 0x93, 0x01, 0x19, - 0x6f, 0x10, 0x42, 0x89, 0x36, 0x39, 0x44, 0x39, 0x27, 0x75, 0xbb, 0x89, - 0x31, 0x26, 0x03, 0x27, 0x2a, 0x34, 0xf5, 0x1e, 0x27, 0xaa, 0x3d, 0xfe, - 0x2c, 0x2b, 0x07, 0x9a, 0x7e, 0xf0, 0x4a, 0xc2, 0x46, 0xf7, 0x45, 0x53, - 0xb6, 0x94, 0x7d, 0x75, 0x01, 0x6f, 0xc9, 0x02, 0x3e, 0x85, 0x1f, 0x37, - 0x0e, 0x8e, 0xfc, 0x72, 0x2e, 0xe2, 0x69, 0x6b, 0xeb, 0x77, 0xd3, 0xf4, - 0xae, 0x7f, 0x77, 0xda, 0x18, 0x4f, 0x5a, 0x5d, 0xca, 0xe7, 0xd4, 0xd8, - 0x8e, 0x15, 0x82, 0x41, 0x3f, 0xf6, 0xa4, 0x6b, 0x8a, 0x36, 0xc4, 0xa7, - 0x10, 0xbd, 0xdc, 0xf9, 0xe0, 0xd9, 0x03, 0xf9, 0x41, 0x39, 0xe5, 0xad, - 0xb3, 0xc7, 0xa7, 0x6a, 0x37, 0x1b, 0x23, 0x54, 0xc8, 0x8d, 0x51, 0x41, - 0x45, 0x24, 0xe9, 0xf1, 0x94, 0xc6, 0x3e, 0xb3, 0x17, 0x6b, 0xb3, 0x9b, - 0xbf, 0xd3, 0x62, 0xed, 0x36, 0x4e, 0x00, 0x88, 0x6c, 0x7b, 0xf0, 0xce, - 0x90, 0x4f, 0x0b, 0xa6, 0xb3, 0xa5, 0x66, 0x2d, 0x90, 0x61, 0x21, 0x86, - 0x02, 0xf4, 0x0c, 0x80, 0xb4, 0xbc, 0x2b, 0xb9, 0xd1, 0x20, 0x53, 0xd3, - 0x24, 0x1f, 0x0f, 0xac, 0x75, 0x92, 0x1b, 0x2b, 0x72, 0x95, 0x57, 0xbb, - 0xa6, 0xaa, 0xf5, 0x49, 0xbc, 0xdd, 0x87, 0x36, 0x36, 0xa3, 0xec, 0x0e, - 0x23, 0x94, 0x96, 0xcb, 0x10, 0x00, 0xc1, 0x6b, 0x6b, 0xd2, 0x8a, 0x07, - 0x66, 0x81, 0xfc, 0x5d, 0xe7, 0x40, 0xfc, 0x54, 0x96, 0x4d, 0x4c, 0x5a, - 0xcb, 0x68, 0x91, 0xbf, 0xe9, 0xb1, 0x18, 0x05, 0xb9, 0xeb, 0x1e, 0x9d, - 0xc6, 0xcb, 0xe1, 0xcf, 0x82, 0x84, 0xae, 0x39, 0x45, 0x2f, 0x99, 0x7d, - 0xcb, 0x78, 0xa0, 0xff, 0x35, 0x6d, 0xee, 0x4a, 0xc5, 0x63, 0x18, 0xad, - 0x62, 0xd3, 0xa6, 0xc6, 0x8b, 0x48, 0x65, 0x2d, 0x06, 0x18, 0xe1, 0x3e, - 0xe8, 0x5c, 0x18, 0x7f, 0x20, 0x1e, 0x0a, 0xdb, 0xce, 0x56, 0x78, 0x7b, - 0x6d, 0x23, 0xc8, 0xae, 0x66, 0x10, 0xb2, 0x8f, 0xd3, 0x33, 0x5d, 0x2c, - 0x29, 0x65, 0xa9, 0xac, 0xa9, 0x05, 0xbd, 0x3c, 0xa9, 0xd7, 0xea, 0xe9, - 0x81, 0x6d, 0x5c, 0x7e, 0x9d, 0x70, 0x85, 0x1a, 0xb2, 0x13, 0x5f, 0x34, - 0x74, 0xb2, 0x05, 0x78, 0x51, 0xd0, 0x72, 0x51, 0x20, 0x8b, 0x90, 0xec, - 0xaa, 0xfa, 0x2e, 0xf1, 0x6f, 0xf9, 0x25, 0x8e, 0xe4, 0x5c, 0x5a, 0x0c, - 0x0d, 0xba, 0x26, 0x69, 0x56, 0xf5, 0x94, 0x4a, 0x22, 0x54, 0x77, 0xd4, - 0xbe, 0x8e, 0xb7, 0xda, 0xee, 0x1d, 0x97, 0x06, 0xb0, 0xe4, 0xed, 0x17, - 0x34, 0x93, 0x2d, 0x4d, 0xbe, 0x4d, 0xf2, 0x98, 0x3f, 0x67, 0x61, 0xe1, - 0x6e, 0x70, 0xb6, 0x28, 0x7e, 0x84, 0x38, 0x0c, 0xc6, 0x28, 0x45, 0x8f, - 0x22, 0xe9, 0x4d, 0xb5, 0xf7, 0x61, 0xfd, 0x97, 0xf4, 0xcc, 0xa9, 0x38, - 0x85, 0x06, 0xb7, 0x7e, 0x13, 0xbb, 0x0d, 0x16, 0x4c, 0x33, 0x96, 0x79, - 0x89, 0x5b, 0x5f, 0x44, 0xea, 0xfe, 0xc6, 0xce, 0xb8, 0xd7, 0xe7, 0x75, - 0xc7, 0xcd, 0x84, 0x59, 0x8b, 0xf9, 0x1f, 0xf0, 0x65, 0x3a, 0x74, 0x26, - 0x5e, 0xc1, 0xde, 0xa5, 0x1c, 0x1c, 0x4f, 0xa3, 0x24, 0x3d, 0x09, 0xb7, - 0x43, 0xc0, 0x31, 0x0d, 0x89, 0x62, 0x63, 0xf8, 0x14, 0x9f, 0x28, 0x24, - 0xf0, 0x2b, 0xae, 0x26, 0x45, 0xc1, 0xd3, 0x95, 0x48, 0xc8, 0x0e, 0x3d, - 0xac, 0xf0, 0x24, 0x8c, 0x48, 0x7c, 0xe8, 0x1a, 0x54, 0x3c, 0xbf, 0xf7, - 0xb0, 0xd7, 0x4a, 0x9a, 0x95, 0xe0, 0x28, 0xa0, 0x46, 0x07, 0x3d, 0x90, - 0xcd, 0x08, 0x80, 0x16, 0x3c, 0x4d, 0x6d, 0x17, 0x56, 0xe8, 0xb4, 0x6c, - 0x14, 0x7c, 0x73, 0x56, 0xaf, 0xef, 0xef, 0xae, 0xe4, 0x88, 0x55, 0xe3, - 0x53, 0x64, 0x25, 0x2c, 0x03, 0x28, 0x4e, 0x7c, 0xb5, 0x4d, 0x32, 0xb1, - 0xd8, 0x1f, 0x2a, 0x3b, 0xe4, 0x35, 0x82, 0x68, 0x06, 0x99, 0xf9, 0x07, - 0x56, 0x0d, 0xdb, 0x0d, 0x98, 0x13, 0x89, 0xd3, 0xee, 0xc2, 0x94, 0x4a, - 0xfb, 0x58, 0xf5, 0x12, 0x28, 0xe7, 0x2b, 0x67, 0x3b, 0xe0, 0x41, 0xe8, - 0x7d, 0xe7, 0xba, 0x54, 0xa2, 0x0a, 0xa8, 0x6c, 0x07, 0x8e, 0x66, 0x6c, - 0x64, 0xfd, 0x96, 0x15, 0x0f, 0xd7, 0x58, 0x38, 0xc4, 0xcb, 0x0c, 0xec, - 0x98, 0xec, 0x85, 0x26, 0x33, 0x66, 0xe6, 0xd6, 0xd7, 0xd1, 0xc4, 0xcf, - 0xe5, 0xcd, 0x20, 0xf2, 0x1b, 0x11, 0x90, 0x22, 0x46, 0x67, 0x47, 0x68, - 0xc4, 0xda, 0x47, 0xe0, 0x27, 0x09, 0x9e, 0x2d, 0x06, 0xa3, 0x98, 0xf9, - 0xd4, 0xde, 0x3e, 0xaf, 0xee, 0x1b, 0x9b, 0x3d, 0x05, 0xb0, 0x13, 0xa5, - 0xe9, 0xf7, 0xcf, 0x0f, 0xc2, 0x28, 0xa1, 0xac, 0xa1, 0xfc, 0x7b, 0xa3, - 0x6b, 0xee, 0x3b, 0xfc, 0xf0, 0xd1, 0xb3, 0x05, 0x59, 0xc0, 0x21, 0xc1, - 0x84, 0x24, 0x71, 0x55, 0x7e, 0x78, 0x0c, 0x12, 0x0f, 0x8a, 0xcb, 0x86, - 0xa6, 0x81, 0xba, 0xd0, 0xc7, 0x34, 0xb2, 0x69, 0x60, 0xb0, 0x50, 0x42, - 0xea, 0x46, 0xb7, 0x51, 0x5d, 0x69, 0x53, 0x65, 0xe5, 0xd9, 0x1c, 0x6d, - 0x61, 0xb4, 0x8e, 0x27, 0x5b, 0x46, 0xb1, 0x4c, 0x9d, 0xf8, 0x41, 0x7d, - 0x0e, 0xfa, 0x56, 0x5d, 0xfb, 0xfa, 0x9a, 0x1d, 0xd3, 0x2a, 0x6e, 0x13, - 0xa0, 0x4a, 0x61, 0x70, 0x94, 0xc2, 0x69, 0x91, 0xfd, 0x2b, 0x67, 0x55, - 0x7a, 0x5a, 0x10, 0xff, 0x06, 0xbb, 0xcf, 0x71, 0x75, 0x61, 0x38, 0xfa, - 0x57, 0xdb, 0x2a, 0xc0, 0xd3, 0x53, 0x2b, 0x46, 0x14, 0x60, 0x7e, 0xa4, - 0x19, 0x5f, 0xd8, 0xe5, 0x36, 0x27, 0xa8, 0x80, 0xbb, 0x86, 0x18, 0x4c, - 0xbe, 0x54, 0xfe, 0xb0, 0x10, 0x79, 0xd3, 0x09, 0x1a, 0xe3, 0xdf, 0xee, - 0x4d, 0x96, 0xab, 0x0f, 0x8a, 0xf9, 0x1a, 0x5b, 0x06, 0x8e, 0x52, 0xca, - 0x90, 0xa1, 0x8b, 0x62, 0xc0, 0x2d, 0xe5, 0x2c, 0x6d, 0x69, 0x13, 0xbb, - 0x86, 0x2e, 0xb3, 0xb2, 0x06, 0x14, 0x52, 0x04, 0x72, 0x67, 0x55, 0x1c, - 0xf1, 0x6a, 0xdf, 0x3d, 0xe2, 0xfb, 0xf1, 0x43, 0xef, 0x22, 0xc9, 0x5e, - 0xd3, 0x14, 0x09, 0x5a, 0x2e, 0x0c, 0xb6, 0x89, 0x05, 0xda, 0xf0, 0x3a, - 0x0f, 0xed, 0x51, 0x65, 0x86, 0x12, 0x68, 0xd3, 0xa3, 0xfb, 0x14, 0x6d, - 0x59, 0x07, 0xeb, 0xa2, 0xd8, 0x86, 0xef, 0x04, 0xe1, 0xbe, 0xeb, 0xff, - 0xb9, 0x76, 0xaf, 0x90, 0x6a, 0x9e, 0xbb, 0x5d, 0xef, 0x57, 0x1b, 0x7e, - 0xc0, 0xe8, 0x13, 0x30, 0xc9, 0xad, 0x83, 0x16, 0x2c, 0x2d, 0x98, 0x6d, - 0x4d, 0x8e, 0x92, 0x88, 0x42, 0x56, 0xce, 0x16, 0xfb, 0x06, 0x00, 0x53, - 0xb5, 0x03, 0xbe, 0x0f, 0xf4, 0xfd, 0x11, 0xf2, 0x73, 0xb7, 0xae, 0xea, - 0xfc, 0x1f, 0xea, 0xbf, 0x19, 0xee, 0xa0, 0xc7, 0x0d, 0x4e, 0x1e, 0xc1, - 0xa4, 0x83, 0xef, 0xdd, 0xb8, 0x1d, 0x23, 0x18, 0x99, 0xb2, 0x13, 0xa9, - 0xe6, 0x31, 0x4c, 0xc1, 0x28, 0x4a, 0xb8, 0xc9, 0x30, 0xab, 0xe9, 0xd1, - 0x49, 0x58, 0x3b, 0x4f, 0x7f, 0x9c, 0x58, 0x3a, 0x34, 0xc3, 0x12, 0x17, - 0x99, 0x4f, 0x81, 0x97, 0x74, 0xaf, 0x71, 0x3c, 0x1a, 0xe3, 0x26, 0x48, - 0xb5, 0x05, 0x5e, 0x8e, 0xa8, 0xe9, 0x81, 0xb7, 0x96, 0xec, 0x16, 0xa5, - 0x37, 0x07, 0xe1, 0xa7, 0x8e, 0xb7, 0x61, 0xe0, 0xb9, 0xf4, 0xf3, 0x55, - 0x4d, 0xc2, 0xc8, 0xb5, 0xe7, 0x8c, 0x85, 0x7a, 0x92, 0x6f, 0x39, 0x1c, - 0x17, 0x8b, 0x1f, 0xcc, 0x05, 0x9b, 0x6c, 0x04, 0xda, 0x54, 0x61, 0xb9, - 0x41, 0x87, 0x27, 0x38, 0x50, 0x35, 0xa6, 0x8e, 0x3b, 0x66, 0x5c, 0xd8, - 0x4a, 0xcd, 0x05, 0x28, 0xb3, 0x29, 0xa5, 0x84, 0xad, 0x8b, 0xea, 0x21, - 0x94, 0x04, 0xe9, 0x97, 0x2d, 0x98, 0x44, 0x4b, 0xa9, 0x53, 0x4f, 0xb9, - 0x0e, 0x99, 0x50, 0xb4, 0x35, 0xc8, 0x10, 0x6b, 0x4f, 0xcd, 0xa7, 0x4a, - 0x69, 0xf2, 0xd0, 0x09, 0x36, 0x20, 0x57, 0xe5, 0xe7, 0x4a, 0x39, 0x6e, - 0x73, 0xf1, 0x9b, 0xc7, 0x59, 0x6b, 0x47, 0x73, 0xb9, 0xcc, 0xa2, 0x81, - 0x5e, 0x08, 0xd6, 0x18, 0xfe, 0x5c, 0x16, 0x4f, 0x08, 0xac, 0xd3, 0x5b, - 0xe0, 0x41, 0x64, 0x8a, 0x06, 0xd4, 0x84, 0xe8, 0x72, 0xe7, 0x07, 0xde, - 0xed, 0x69, 0x88, 0xb3, 0xba, 0x04, 0x54, 0x5a, 0xec, 0x1d, 0x04, 0x97, - 0xca, 0x27, 0x7e, 0x2c, 0x5a, 0x25, 0xa3, 0xec, 0x01, 0x18, 0xfb, 0x60, - 0x34, 0xbf, 0xdd, 0xfd, 0xa6, 0xfa, 0xe6, 0x47, 0xfe, 0x07, 0x2c, 0x20, - 0x0e, 0x1c, 0x1c, 0x68, 0xe4, 0x03, 0x08, 0x37, 0xd6, 0xd4, 0x37, 0x12, - 0x02, 0xf8, 0x66, 0xff, 0x61, 0x59, 0x07, 0x7b, 0xac, 0x92, 0x01, 0x28, - 0x3c, 0xa1, 0x66, 0x8e, 0x05, 0xbb, 0x79, 0x5a, 0xfb, 0x89, 0xff, 0x13, - 0x24, 0x1c, 0xf9, 0x32, 0x36, 0x18, 0x50, 0xa2, 0xa6, 0x37, 0x90, 0x19, - 0x02, 0x8b, 0xa1, 0x1a, 0x34, 0xd3, 0x10, 0xef, 0xf2, 0xa2, 0xe3, 0x96, - 0x19, 0xbe, 0x8c, 0xb0, 0xba, 0xe8, 0xd5, 0xf1, 0x2e, 0xf0, 0x52, 0x83, - 0xc5, 0xe8, 0x56, 0xca, 0xae, 0x41, 0x0f, 0x0a, 0x58, 0x3e, 0xa1, 0x58, - 0x39, 0xb2, 0x05, 0x23, 0x46, 0x2e, 0xb2, 0xb2, 0x7c, 0x43, 0xda, 0x28, - 0x49, 0x7b, 0x96, 0xe9, 0xdd, 0x26, 0x0e, 0x6e, 0x8c, 0xd6, 0x3c, 0xbc, - 0xd8, 0xdd, 0x63, 0xe6, 0x2e, 0x84, 0x8f, 0x65, 0xa3, 0x13, 0x60, 0xf7, - 0x9c, 0xbc, 0x81, 0xfa, 0xa4, 0x74, 0x49, 0x5f, 0xb4, 0x27, 0xf2, 0x45, - 0x20, 0xe4, 0x60, 0xc3, 0xa0, 0xa2, 0x75, 0xf4, 0xfd, 0x53, 0x45, 0xdb, - 0x0f, 0x4b, 0xb4, 0x87, 0x7e, 0xea, 0xea, 0x32, 0x9e, 0x10, 0x1d, 0xfe, - 0x23, 0x99, 0xee, 0xd8, 0x96, 0x6b, 0x79, 0x49, 0x4d, 0xfa, 0x31, 0x63, - 0xcb, 0xe1, 0x80, 0xe1, 0xab, 0x20, 0x68, 0x1b, 0x00, 0x41, 0x96, 0x2f, - 0xce, 0x82, 0xf1, 0x30, 0x6e, 0xfe, 0x5b, 0xea, 0x83, 0x1c, 0x63, 0x3a, - 0xcd, 0x87, 0xca, 0xb3, 0xf3, 0xc8, 0x0b, 0x8f, 0x1c, 0x1b, 0x3d, 0xfa, - 0xfd, 0x1f, 0xf2, 0x01, 0x4a, 0x48, 0x74, 0x5a, 0xba, 0x86, 0x75, 0xfa, - 0xff, 0x14, 0xe1, 0xf7, 0xad, 0x8e, 0x4f, 0xe7, 0x27, 0x62, 0x1b, 0x05, - 0x40, 0x7f, 0x41, 0x37, 0xcd, 0x9e, 0x18, 0x3b, 0x0e, 0xf6, 0x56, 0xcf, - 0xf2, 0x5f, 0x72, 0x5f, 0xfb, 0x8a, 0x1a, 0x96, 0x2c, 0x7f, 0x23, 0xe4, - 0xe7, 0xef, 0x33, 0x66, 0xeb, 0xf6, 0x72, 0x65, 0x81, 0x84, 0x90, 0x48, - 0xe3, 0xab, 0x09, 0x2a, 0xe1, 0xec, 0xfd, 0x9b, 0x72, 0x95, 0x09, 0xa4, - 0x8a, 0x36, 0x1f, 0x18, 0x9c, 0x02, 0x06, 0x98, 0x57, 0xe8, 0xe2, 0xe6, - 0xf9, 0x9b, 0xe2, 0x4a, 0x0a, 0x1f, 0x2c, 0xb2, 0x08, 0x6a, 0xda, 0x71, - 0x46, 0xdc, 0xcf, 0x65, 0x59, 0xeb, 0x03, 0x14, 0x1c, 0x43, 0x94, 0xa1, - 0x3c, 0xe6, 0xee, 0x80, 0x00, 0x9d, 0x7e, 0x9b, 0x6e, 0xac, 0x2f, 0x75, - 0x27, 0x75, 0x8f, 0xc7, 0xc4, 0x98, 0xa4, 0xf0, 0x84, 0x7b, 0xc1, 0x3f, - 0xf8, 0x89, 0x18, 0xb5, 0x60, 0x2f, 0x16, 0x68, 0x43, 0x87, 0x9d, 0xd7, - 0xd2, 0xb0, 0xb2, 0x6d, 0xac, 0xef, 0xdc, 0xcd, 0x0d, 0xa9, 0x73, 0x24, - 0x69, 0xcd, 0xbc, 0x77, 0x97, 0x83, 0xa6, 0x52, 0x83, 0x2a, 0x5f, 0xd7, - 0xc2, 0x4f, 0x9a, 0xbb, 0x7a, 0x09, 0xa4, 0xd2, 0x64, 0xc2, 0xc6, 0x18, - 0xda, 0xd8, 0x20, 0x72, 0xe5, 0x60, 0x92, 0xa5, 0x97, 0x22, 0x63, 0xf5, - 0xa8, 0xf1, 0x9f, 0xb2, 0x52, 0x4f, 0x2c, 0x63, 0xee, 0x9b, 0xa3, 0x5f, - 0xf9, 0x3f, 0x83, 0xb0, 0x71, 0x0c, 0xb2, 0x07, 0x7f, 0xb6, 0xf8, 0x8f, - 0x35, 0xf1, 0xaa, 0x90, 0x4e, 0xcc, 0x52, 0x0b, 0xc7, 0xbe, 0x29, 0xa1, - 0xa7, 0xd9, 0xce, 0x50, 0x80, 0x5a, 0x2c, 0xf9, 0x41, 0x93, 0x04, 0x56, - 0xad, 0xd0, 0x50, 0xe1, 0x23, 0x84, 0x3d, 0xc8, 0xba, 0xbd, 0xb3, 0x3b, - 0x2f, 0xe1, 0x1c, 0xf3, 0xe5, 0x73, 0x3c, 0x51, 0x0b, 0x61, 0xa6, 0x48, - 0x1f, 0xcc, 0xd1, 0x96, 0xb6, 0xce, 0x35, 0x22, 0x67, 0x58, 0xf5, 0x58, - 0x41, 0x75, 0xf4, 0xf0, 0xe8, 0x35, 0x77, 0xb9, 0x84, 0x82, 0xc6, 0xe1, - 0x8a, 0x83, 0xe6, 0x26, 0xe6, 0x30, 0xed, 0x27, 0xf6, 0xaa, 0x91, 0xb6, - 0x71, 0x36, 0x54, 0x47, 0xf4, 0x9b, 0xe1, 0xcb, 0x8e, 0xb1, 0xc7, 0x07, - 0x92, 0x33, 0x04, 0x87, 0x7e, 0xf2, 0x10, 0xfb, 0x56, 0x8b, 0x22, 0xce, - 0xd0, 0x78, 0x85, 0x7b, 0x41, 0xb5, 0x9e, 0x56, 0x26, 0x3e, 0x11, 0x20, - 0x38, 0xec, 0xe7, 0x48, 0x37, 0x04, 0xb5, 0x2b, 0x28, 0x1b, 0x26, 0x6f, - 0xc6, 0xb5, 0x65, 0x8b, 0x0a, 0x5d, 0x64, 0x44, 0x1c, 0xb9, 0x07, 0x8a, - 0x38, 0xa9, 0x20, 0x86, 0x06, 0xdf, 0x1b, 0xee, 0x50, 0xf5, 0x27, 0x85, - 0x5d, 0xb8, 0x19, 0x6f, 0xf7, 0xbc, 0x31, 0x27, 0xa6, 0xe9, 0x05, 0xbc, - 0x98, 0x35, 0x0b, 0xc5, 0x95, 0x8f, 0x81, 0x21, 0x51, 0xfa, 0xcc, 0xc7, - 0xf8, 0xaa, 0x0a, 0x95, 0xae, 0x77, 0x71, 0x0e, 0xa1, 0x70, 0x0e, 0x40, - 0x65, 0x0f, 0x90, 0x26, 0x3a, 0xb2, 0x3d, 0x20, 0xeb, 0x0a, 0x8b, 0x0d, - 0xc5, 0x1e, 0xfa, 0x78, 0x6e, 0xfe, 0x20, 0x7d, 0xd9, 0x46, 0xc1, 0xee, - 0x44, 0x9d, 0x11, 0xd2, 0xd7, 0xa9, 0xc3, 0xa8, 0x9f, 0x59, 0x08, 0x84, - 0x9e, 0x77, 0xc4, 0x7d, 0x11, 0x89, 0x4b, 0x75, 0xc0, 0xf7, 0x79, 0xe0, - 0xbd, 0x7e, 0xb3, 0xcf, 0x31, 0x2d, 0x50, 0xd3, 0xaf, 0xc1, 0xcc, 0x5b, - 0xf2, 0x5a, 0x31, 0x63, 0xf4, 0x5f, 0x01, 0x49, 0x5b, 0xa1, 0x7e, 0x3c, - 0x53, 0xc3, 0xf3, 0x42, 0x2d, 0x1e, 0xe0, 0x16, 0x52, 0xdc, 0xff, 0x6b, - 0xe0, 0x3d, 0xa5, 0x82, 0x44, 0x0f, 0x76, 0x5b, 0xb6, 0xe5, 0xda, 0x75, - 0x1f, 0xf8, 0xbe, 0xd6, 0xb2, 0xe9, 0xb7, 0xd2, 0x99, 0x35, 0xf2, 0x2d, - 0xc7, 0xcb, 0xf9, 0x3a, 0x41, 0xcb, 0x11, 0x8e, 0x23, 0x7e, 0xe5, 0xbc, - 0xff, 0x4a, 0xa7, 0xc5, 0xbc, 0x2d, 0x22, 0x8b, 0xd2, 0xb4, 0x2f, 0xdf, - 0x6b, 0x52, 0x42, 0x3e, 0xbf, 0x6e, 0x39, 0x9c, 0xc2, 0xa9, 0x7b, 0x8c, - 0xba, 0xd2, 0x73, 0x0d, 0x4b, 0x5e, 0x16, 0x41, 0xd6, 0x21, 0x81, 0x49, - 0x72, 0x78, 0x52, 0x61, 0xad, 0x96, 0x28, 0x23, 0x9c, 0xce, 0xdc, 0x6c, - 0x4d, 0xa3, 0xed, 0x2c, 0x40, 0x3c, 0xf1, 0xe2, 0x77, 0x21, 0x69, 0x35, - 0xab, 0xe8, 0x2b, 0x48, 0x0d, 0xd3, 0x83, 0x14, 0xbe, 0x3b, 0x0c, 0x36, - 0xc8, 0x77, 0x56, 0x35, 0xfd, 0x95, 0x40, 0xe9, 0xfb, 0xfa, 0x6c, 0xd9, - 0x2d, 0xf4, 0x78, 0x09, 0x18, 0x24, 0x0d, 0xe7, 0xee, 0xff, 0x5d, 0x68, - 0x12, 0x72, 0x79, 0xa8, 0x2f, 0xee, 0x9e, 0x68, 0x9c, 0xf7, 0x6d, 0x07, - 0xbf, 0xfb, 0xe2, 0xe0, 0x09, 0x49, 0xac, 0x41, 0x1f, 0x6b, 0xfd, 0x3c, - 0xef, 0x83, 0x9d, 0x6d, 0x8a, 0x97, 0xef, 0x3b, 0xc1, 0xb2, 0xfa, 0x3f, - 0x17, 0x14, 0x3d, 0xad, 0x33, 0x3e, 0x83, 0xda, 0xd2, 0x14, 0x8a, 0xd7, - 0x56, 0x40, 0xaf, 0x71, 0x07, 0xc7, 0xf4, 0x8b, 0xcb, 0x05, 0x11, 0x03, - 0x9d, 0x59, 0x83, 0x04, 0xac, 0x80, 0x71, 0xa2, 0x75, 0x0b, 0xee, 0x7f, - 0xd2, 0x6f, 0xb7, 0x3b, 0xa5, 0xbb, 0xad, 0x46, 0x43, 0x8f, 0x6d, 0x23, - 0x97, 0x39, 0xd6, 0x32, 0x65, 0xe7, 0x6e, 0x1c, 0x68, 0x77, 0xc4, 0x62, - 0x25, 0xfb, 0xed, 0xcd, 0x3e, 0x9d, 0xd7, 0xa5, 0x72, 0xfb, 0xad, 0x29, - 0x30, 0xd7, 0x13, 0xda, 0x75, 0x57, 0x00, 0x58, 0x4b, 0xab, 0x8c, 0xec, - 0xf1, 0x17, 0x49, 0x4e, 0x5b, 0x10, 0x61, 0x5e, 0x5f, 0x17, 0x6a, 0x86, - 0xa8, 0xae, 0x52, 0xa8, 0x1b, 0x9d, 0x15, 0x9f, 0xe3, 0x16, 0xa3, 0x38, - 0xec, 0x8a, 0x6b, 0xfd, 0x22, 0x9d, 0x9e, 0xf5, 0xf4, 0x6e, 0xca, 0xd8, - 0xc6, 0xd9, 0xe2, 0x2f, 0xbb, 0x69, 0x6f, 0x04, 0x86, 0xe7, 0xeb, 0xae, - 0xf6, 0xa4, 0x57, 0xd7, 0x24, 0xc4, 0xbb, 0xdb, 0x81, 0x91, 0xa2, 0x7c, - 0x80, 0x6d, 0xb9, 0x8b, 0x13, 0xaa, 0xb6, 0x10, 0xd7, 0x33, 0x8d, 0xb7, - 0x3b, 0xd1, 0x80, 0xa6, 0x2a, 0x18, 0x52, 0xd8, 0x75, 0x84, 0x18, 0x66, - 0x1c, 0x7a, 0xc4, 0x80, 0x23, 0x0d, 0x04, 0x33, 0x77, 0xb3, 0x99, 0x12, - 0x33, 0x26, 0x9e, 0xeb, 0xcf, 0xb8, 0xb1, 0x5f, 0xbb, 0x43, 0xc2, 0x2f, - 0xdf, 0xf8, 0x7b, 0x8f, 0x6d, 0x23, 0xc1, 0x58, 0x86, 0xde, 0x30, 0xba, - 0x32, 0x36, 0x39, 0xe5, 0xc3, 0x48, 0xd9, 0xa7, 0x56, 0x4c, 0x49, 0xb1, - 0x96, 0xdf, 0xe0, 0x6b, 0xf0, 0xa8, 0x9e, 0x02, 0xc4, 0x9a, 0x9b, 0x5e, - 0xcd, 0x10, 0xc1, 0x68, 0x8b, 0xac, 0x65, 0xf6, 0x7e, 0xc8, 0xf3, 0x23, - 0x27, 0x82, 0xbd, 0xd8, 0xfa, 0x16, 0x4d, 0xd9, 0xf7, 0xc1, 0x01, 0x8a, - 0x24, 0xce, 0x56, 0xb5, 0x4e, 0xf2, 0xb4, 0xe1, 0x5e, 0x25, 0x18, 0x3b, - 0x22, 0x6a, 0xba, 0x63, 0xa9, 0x19, 0xae, 0xee, 0x6d, 0x33, 0xba, 0x78, - 0x3e, 0xbe, 0x4b, 0x24, 0x0e, 0x7e, 0x98, 0x8f, 0xe3, 0xd1, 0x6a, 0xe4, - 0x4c, 0x87, 0xb0, 0xdc, 0x71, 0x06, 0x5d, 0xd2, 0x37, 0x99, 0xa1, 0x63, - 0xc3, 0x4f, 0x96, 0x0a, 0xba, 0x3e, 0xdf, 0x6f, 0xf8, 0x9c, 0x3c, 0xb4, - 0x02, 0xeb, 0x68, 0xb3, 0xf1, 0x01, 0x0e, 0xbe, 0x92, 0x3e, 0xb9, 0x6d, - 0x68, 0x3d, 0x6b, 0x68, 0x57, 0x43, 0x7c, 0x52, 0xc6, 0xed, 0x4a, 0xc2, - 0xb4, 0x5f, 0x54, 0x5a, 0x2a, 0xc7, 0xc6, 0x96, 0x4e, 0x54, 0xed, 0x04, - 0xe6, 0xc1, 0x55, 0xac, 0xcd, 0x4b, 0xeb, 0x20, 0x24, 0xc0, 0xf7, 0x99, - 0x49, 0xd3, 0xa6, 0xc6, 0x32, 0xc6, 0x60, 0x7c, 0xd3, 0x36, 0x2b, 0xfa, - 0x62, 0xac, 0xd4, 0xa2, 0xc2, 0x29, 0xef, 0x26, 0x59, 0x6c, 0x05, 0x92, - 0x6e, 0xc6, 0x0b, 0xe3, 0x12, 0x0f, 0x5c, 0xef, 0x19, 0x32, 0xde, 0xd1, - 0x5e, 0x0b, 0x90, 0xa4, 0x88, 0xc9, 0xa5, 0x94, 0x58, 0xd2, 0xe2, 0xf1, - 0xe5, 0x4c, 0xfe, 0x8c, 0x01, 0x7b, 0x5d, 0xcb, 0x2e, 0xc3, 0x26, 0xe5, - 0xf3, 0x38, 0xf0, 0xfa, 0x2c, 0x1b, 0xd9, 0x2c, 0x41, 0x2f, 0x8c, 0x5f, - 0xc1, 0x42, 0x4c, 0x8a, 0x1e, 0x33, 0xda, 0x02, 0xb9, 0xc7, 0xb7, 0x82, - 0xcc, 0x3d, 0x68, 0x63, 0xde, 0xf5, 0x64, 0x05, 0xe2, 0x2a, 0xc3, 0x92, - 0xc9, 0x7b, 0x09, 0x56, 0x20, 0x21, 0x88, 0xb6, 0xa1, 0x25, 0x6e, 0x9a, - 0x89, 0x06, 0x88, 0xe7, 0x2d, 0x64, 0xb6, 0x31, 0x8a, 0x3c, 0xa0, 0x47, - 0xeb, 0x48, 0x30, 0xba, 0xe5, 0xd7, 0xb9, 0xce, 0x43, 0xe0, 0x6c, 0xbe, - 0x77, 0x4e, 0x35, 0xb6, 0x01, 0xaf, 0xf4, 0x42, 0xb7, 0xa8, 0x85, 0x7d, - 0xb2, 0xa4, 0x05, 0x6a, 0x30, 0x3f, 0x30, 0x75, 0xa9, 0x4e, 0xab, 0x9d, - 0x15, 0x98, 0x98, 0xf8, 0x53, 0x81, 0xbd, 0x0b, 0x5d, 0x75, 0x79, 0x56, - 0xd5, 0xd4, 0xab, 0x72, 0x1d, 0x33, 0x3c, 0x7b, 0x9b, 0x2c, 0x47, 0xeb, - 0xe6, 0x3f, 0xdd, 0x84, 0x5a, 0x67, 0x6d, 0x35, 0x91, 0x33, 0xb3, 0x48, - 0x9f, 0x92, 0x9b, 0x28, 0xdb, 0x36, 0xd6, 0x68, 0x47, 0x8c, 0xce, 0xe7, - 0x2e, 0x1c, 0x45, 0x36, 0xca, 0xf0, 0x91, 0xce, 0x3b, 0x48, 0x14, 0xc9, - 0xd7, 0x89, 0x74, 0x3b, 0xdb, 0xca, 0x57, 0x2d, 0x8a, 0xc0, 0xe8, 0xc7, - 0xb4, 0xad, 0xce, 0xa2, 0x5d, 0xa7, 0xe7, 0x20, 0x67, 0x62, 0x7a, 0xfd, - 0x5e, 0xc4, 0x2e, 0xd1, 0xab, 0x8d, 0xb5, 0xa1, 0x22, 0x83, 0x1f, 0x20, - 0xed, 0xb0, 0xe9, 0xaa, 0x3d, 0x57, 0x0c, 0xe0, 0xfa, 0x8a, 0x2e, 0x25, - 0xe9, 0xab, 0x0f, 0xe6, 0x7d, 0xe5, 0x3a, 0x69, 0x34, 0xab, 0xd6, 0x84, - 0x57, 0xac, 0x9c, 0x24, 0xc3, 0x77, 0x18, 0x50, 0xd1, 0x02, 0x99, 0x43, - 0x8d, 0x0c, 0x01, 0xcd, 0x24, 0x57, 0x62, 0xa1, 0x73, 0x27, 0x3a, 0x08, - 0xbd, 0x61, 0x51, 0x03, 0xaf, 0xb4, 0xc3, 0x6e, 0x0a, 0x59, 0x2f, 0x98, - 0x64, 0x05, 0x68, 0x5a, 0x9f, 0xb4, 0xa5, 0x02, 0xaf, 0x8f, 0xa3, 0xa7, - 0xbb, 0x27, 0x6c, 0x04, 0xa5, 0x05, 0xcd, 0x1f, 0x15, 0x43, 0xec, 0x08, - 0x57, 0x96, 0x4b, 0xfa, 0x3a, 0x3c, 0x80, 0xce, 0xab, 0xf5, 0x4e, 0x6c, - 0xa8, 0x19, 0x8a, 0xef, 0x50, 0x2a, 0xdf, 0x54, 0x8f, 0xc8, 0x95, 0x4b, - 0xa1, 0x8d, 0x97, 0x97, 0xdd, 0x89, 0x31, 0x29, 0xed, 0x5f, 0xa0, 0xb7, - 0xfe, 0xae, 0xb7, 0xbb, 0x4e, 0xee, 0xee, 0xd3, 0xe9, 0xcb, 0x4f, 0x4c, - 0x63, 0x47, 0x19, 0xff, 0xdf, 0xc2, 0x38, 0x61, 0x80, 0xa5, 0x68, 0x8f, - 0xdd, 0xa3, 0x2f, 0x6d, 0x56, 0xc9, 0x30, 0x7a, 0x98, 0xc0, 0xc2, 0xe8, - 0xb1, 0xb2, 0x13, 0x89, 0x86, 0x56, 0x65, 0xe7, 0xb5, 0xdd, 0x15, 0x8a, - 0xa5, 0x8c, 0x96, 0x0e, 0x68, 0x65, 0x1d, 0xd6, 0xdf, 0x10, 0x44, 0x7f, - 0x2f, 0xf8, 0xa3, 0x24, 0x32, 0xdf, 0x46, 0xe2, 0xc8, 0xbf, 0x8d, 0xef, - 0x24, 0x55, 0x06, 0xbd, 0x3b, 0x92, 0x36, 0x3c, 0x8a, 0xad, 0x8f, 0xd0, - 0x39, 0x96, 0xac, 0xfd, 0x7c, 0xfa, 0xd8, 0xe4, 0x1a, 0xc9, 0xdd, 0x0a, - 0x9a, 0xfa, 0x63, 0x18, 0xa6, 0x03, 0xdc, 0xbf, 0xc4, 0xc1, 0x70, 0xd8, - 0x42, 0xc5, 0x11, 0xf1, 0x27, 0xbb, 0x47, 0x5a, 0x6a, 0xac, 0xf9, 0xf2, - 0x38, 0x34, 0x77, 0xec, 0x47, 0x76, 0x5c, 0x92, 0x15, 0x28, 0x92, 0xbf, - 0x6c, 0x15, 0x44, 0x01, 0x4e, 0x1f, 0x26, 0xf8, 0xc3, 0x3a, 0x73, 0x3d, - 0x8e, 0x66, 0xb7, 0xb8, 0xc3, 0xdb, 0x66, 0x00, 0x1a, 0xe9, 0x2c, 0xae, - 0xdd, 0x92, 0xc0, 0x94, 0x59, 0x3b, 0x9a, 0x01, 0x8d, 0x14, 0x48, 0x30, - 0x2f, 0x86, 0x03, 0xb2, 0xdf, 0x2e, 0xe1, 0x14, 0xed, 0xe0, 0x8d, 0x9f, - 0x03, 0x54, 0x4a, 0xf0, 0x5c, 0x44, 0xc4, 0x60, 0x75, 0x0b, 0x27, 0x1f, - 0xd1, 0xea, 0xd2, 0xae, 0x9c, 0x7d, 0xd1, 0x33, 0x81, 0x39, 0x2d, 0x47, - 0xc3, 0x20, 0x10, 0x13, 0xcf, 0x06, 0x4d, 0x3e, 0x79, 0x37, 0x2b, 0x28, - 0x93, 0x66, 0xdd, 0x73, 0xe6, 0x4a, 0x4c, 0xa4, 0x7f, 0xba, 0xa5, 0x76, - 0xf5, 0x07, 0x89, 0x79, 0xb9, 0x46, 0x5f, 0x1f, 0xbf, 0x47, 0x77, 0x09, - 0x78, 0xa3, 0xdf, 0xf9, 0xf9, 0x42, 0x6c, 0x9b, 0x3b, 0xa1, 0x59, 0x0e, - 0x22, 0x82, 0x87, 0xe4, 0x32, 0xd9, 0xf4, 0x02, 0xf1, 0xca, 0x5d, 0x09, - 0x9f, 0xe3, 0x94, 0xa8, 0x8a, 0xe8, 0x3f, 0xa0, 0x0b, 0x5a, 0x29, 0xa4, - 0xec, 0xd3, 0x06, 0x6a, 0x6c, 0x3f, 0x6b, 0x74, 0xdc, 0x3d, 0xbf, 0xa3, - 0x91, 0x00, 0x76, 0xaf, 0xfd, 0x28, 0xb6, 0x43, 0xc7, 0xc3, 0x58, 0xdf, - 0xaa, 0x31, 0x09, 0x7b, 0xb3, 0x88, 0x22, 0x40, 0x58, 0x44, 0xda, 0x18, - 0x77, 0x61, 0xcd, 0xe8, 0x84, 0x2b, 0xca, 0x18, 0xd8, 0x8a, 0xff, 0x65, - 0xbf, 0xdb, 0x60, 0xd9, 0x0b, 0xf0, 0xc7, 0xc2, 0x1d, 0x26, 0x6a, 0xa1, - 0xcc, 0x30, 0x0d, 0x89, 0x4f, 0x55, 0x1d, 0x48, 0x6f, 0xca, 0xc8, 0x4f, - 0xec, 0x7b, 0x74, 0x52, 0x6f, 0x14, 0xc5, 0xfb, 0xc9, 0x09, 0xec, 0xc8, - 0x54, 0x65, 0xf6, 0x77, 0x7c, 0x62, 0x86, 0xa4, 0xf0, 0x7c, 0x25, 0x77, - 0xdc, 0x51, 0xde, 0xf7, 0x67, 0xd4, 0x74, 0xf2, 0xf9, 0x01, 0x2e, 0x61, - 0xb2, 0x9a, 0x13, 0xe6, 0x8a, 0x93, 0x20, 0x39, 0x02, 0x14, 0x3e, 0xc6, - 0x9d, 0x27, 0x44, 0x1a, 0x7b, 0x60, 0x18, 0xd1, 0xb4, 0xa7, 0xc9, 0xb7, - 0xe4, 0x42, 0x73, 0x26, 0x1f, 0xb4, 0xb2, 0x7e, 0x18, 0x5e, 0x9a, 0x02, - 0x7f, 0x64, 0x95, 0xee, 0x92, 0x1b, 0x3f, 0xfd, 0xda, 0x21, 0x91, 0x7d, - 0x5d, 0x47, 0xe8, 0x2a, 0x52, 0x90, 0xf3, 0xd1, 0xb8, 0x4d, 0x56, 0x84, - 0x25, 0xd5, 0x6c, 0xca, 0x5a, 0xd1, 0xb5, 0x60, 0x9e, 0x91, 0xbf, 0x12, - 0x82, 0x65, 0xda, 0xef, 0x2e, 0x83, 0xaa, 0x20, 0x72, 0x08, 0x13, 0x3a, - 0x9f, 0x1f, 0x3e, 0xb2, 0x52, 0x48, 0x8b, 0xaf, 0xa3, 0x4a, 0xbc, 0x4b, - 0x5a, 0x9a, 0x1b, 0xf0, 0x13, 0xab, 0x9f, 0x03, 0x3d, 0xe5, 0x2b, 0x6f, - 0xc9, 0x82, 0x18, 0x69, 0x20, 0x24, 0xa2, 0x66, 0x10, 0x3e, 0xb8, 0x65, - 0x34, 0x2c, 0x27, 0xcf, 0xdc, 0x35, 0xd0, 0x6b, 0x65, 0xf4, 0x61, 0x5b, - 0x86, 0x6f, 0x1b, 0xef, 0x20, 0x1a, 0x80, 0xb7, 0x94, 0x36, 0xeb, 0x89, - 0x01, 0x92, 0xd8, 0xf8, 0x4e, 0xb0, 0xa5, 0xa8, 0x4c, 0x38, 0x20, 0xc7, - 0xed, 0x79, 0x5a, 0xe5, 0x6a, 0x31, 0xc8, 0x6d, 0xb6, 0x17, 0xeb, 0xe3, - 0x62, 0x07, 0xc0, 0x75, 0x58, 0xc2, 0xa0, 0xbb, 0x6b, 0x7f, 0xec, 0x9c, - 0x26, 0x53, 0xd0, 0x79, 0xc8, 0x5c, 0x03, 0xea, 0xd6, 0x09, 0x46, 0x33, - 0xbb, 0x03, 0x7a, 0xb6, 0xc2, 0xe8, 0xa4, 0xab, 0xf4, 0xed, 0x7d, 0xae, - 0xfa, 0xcc, 0x96, 0x5a, 0x2d, 0x07, 0x38, 0x61, 0x1c, 0x82, 0xe9, 0xbb, - 0x14, 0x1c, 0x52, 0x35, 0xb5, 0x62, 0x2c, 0xfc, 0x54, 0x5e, 0xe1, 0xd3, - 0x37, 0xec, 0xbe, 0xdc, 0x4a, 0xe2, 0xd2, 0xb9, 0x45, 0x8e, 0x75, 0xdd, - 0xbd, 0xff, 0x7e, 0x2c, 0x88, 0x1c, 0x48, 0x82, 0x35, 0x27, 0xce, 0xa5, - 0x18, 0x5a, 0xa9, 0xbd, 0x9c, 0x11, 0x13, 0xcf, 0x88, 0x38, 0x0e, 0x6b, - 0x40, 0x0f, 0x72, 0x16, 0x2b, 0x69, 0xfd, 0x27, 0x73, 0xbf, 0x14, 0x5b, - 0x20, 0xfd, 0x0b, 0x9c, 0x30, 0x48, 0x87, 0xeb, 0x56, 0xbd, 0x8f, 0x22, - 0x47, 0x0c, 0xca, 0xe8, 0xf4, 0x31, 0x12, 0x5b, 0x56, 0xc6, 0x0b, 0x59, - 0x1f, 0x88, 0x0c, 0xa0, 0xc6, 0x39, 0xd2, 0xae, 0xad, 0x3c, 0x20, 0x71, - 0xd4, 0xc0, 0xdd, 0x8b, 0x4f, 0x7e, 0xde, 0x0d, 0xf4, 0x79, 0x55, 0xbb, - 0x17, 0xe6, 0xfb, 0xb9, 0xc6, 0x5f, 0x68, 0x72, 0xd5, 0x1a, 0xfc, 0x0b, - 0xbc, 0x07, 0x27, 0x5b, 0x2c, 0x22, 0x50, 0x39, 0x22, 0xc1, 0x6f, 0xe4, - 0xfb, 0xec, 0x77, 0xc3, 0x3c, 0xd1, 0x61, 0x58, 0xf3, 0x02, 0xd2, 0x18, - 0xd4, 0xd1, 0xad, 0x0e, 0x5f, 0x85, 0x43, 0xa9, 0x1c, 0xee, 0xc6, 0x59, - 0xe8, 0x83, 0x8b, 0x56, 0xc7, 0x1f, 0xcf, 0xd1, 0x19, 0x03, 0x57, 0xc7, - 0x04, 0x22, 0x52, 0x41, 0xb2, 0x40, 0xc9, 0x62, 0xfe, 0xa8, 0x17, 0xf2, - 0x08, 0x10, 0xfb, 0x28, 0xb6, 0xf5, 0x35, 0x30, 0xd3, 0x2c, 0xe8, 0x8b, - 0xb6, 0xea, 0x5a, 0xf1, 0x70, 0x9b, 0x8e, 0x68, 0x8b, 0xec, 0xff, 0x29, - 0xf2, 0xfe, 0x20, 0xce, 0xf1, 0x46, 0xce, 0x1c, 0x68, 0xab, 0xc3, 0xaf, - 0x83, 0xb2, 0x19, 0xb5, 0x53, 0xb9, 0x90, 0xf2, 0xac, 0x95, 0xb6, 0x53, - 0x18, 0x40, 0x2f, 0x4f, 0xa6, 0xe3, 0xed, 0x8e, 0xac, 0x29, 0xa8, 0xbd, - 0x40, 0x57, 0xa7, 0x7e, 0x02, 0xcd, 0x76, 0x8c, 0xe0, 0x28, 0xd6, 0x49, - 0x76, 0x60, 0xf4, 0xe1, 0xaa, 0x95, 0x7f, 0x29, 0xae, 0x80, 0x97, 0xed, - 0xf6, 0xaf, 0x41, 0xc3, 0x77, 0x7b, 0xfa, 0xa8, 0x26, 0x63, 0xd6, 0x00, - 0x36, 0xec, 0x45, 0x2a, 0x6f, 0xc7, 0x46, 0x41, 0x06, 0x5c, 0xfe, 0xc6, - 0x8b, 0x7e, 0xe7, 0x1d, 0x4b, 0x8e, 0xde, 0x8c, 0x66, 0x41, 0xc7, 0x58, - 0xd5, 0xff, 0x32, 0xdf, 0x06, 0x45, 0xfc, 0x16, 0x9e, 0x08, 0xf6, 0x36, - 0x40, 0x53, 0x04, 0xe5, 0x36, 0x32, 0xdc, 0xf2, 0xbe, 0x7d, 0xc2, 0x58, - 0xab, 0x08, 0x5c, 0xf6, 0x5f, 0x97, 0x4c, 0x77, 0x76, 0x8c, 0x1f, 0xd2, - 0xe8, 0xcf, 0xec, 0xea, 0x38, 0x0f, 0xbd, 0x29, 0xd2, 0x86, 0xcc, 0x29, - 0xe1, 0x18, 0x02, 0xa8, 0xf6, 0x1f, 0x34, 0x60, 0x8a, 0xe5, 0xa6, 0x22, - 0xa8, 0x39, 0x86, 0xe6, 0xb7, 0x63, 0xc9, 0x05, 0xff, 0x3e, 0xad, 0xd1, - 0x5d, 0xc2, 0x3b, 0xce, 0x51, 0xc5, 0x55, 0x19, 0xdf, 0x33, 0x13, 0x53, - 0xa1, 0x80, 0x0d, 0xb0, 0xc5, 0xd3, 0x0f, 0x6b, 0x56, 0x1b, 0x84, 0x73, - 0x49, 0x29, 0x82, 0x4e, 0x99, 0x32, 0xbc, 0x28, 0x42, 0xf3, 0xae, 0x74, - 0x15, 0x11, 0x3b, 0x24, 0x6e, 0x4f, 0x43, 0xe3, 0x75, 0x22, 0x45, 0xb3, - 0xed, 0x02, 0xb1, 0x05, 0x0a, 0x3d, 0xe4, 0xc3, 0xeb, 0x1d, 0x62, 0x25, - 0x5b, 0x3b, 0xa7, 0x64, 0x2e, 0xc5, 0x75, 0x57, 0x46, 0x8f, 0x90, 0xb4, - 0xd0, 0xe7, 0xc3, 0xe1, 0x8a, 0xd2, 0xa2, 0xc8, 0xc1, 0x3e, 0x08, 0x7a, - 0x55, 0xaf, 0xb0, 0x03, 0xae, 0xb2, 0x12, 0x11, 0xf8, 0x06, 0xe9, 0xf6, - 0x98, 0x7e, 0x7c, 0xde, 0x01, 0x67, 0x81, 0x85, 0x8e, 0xd8, 0xb8, 0x8a, - 0xf2, 0x07, 0xb8, 0xc6, 0xca, 0x65, 0xd4, 0xae, 0x58, 0x62, 0x97, 0x28, - 0x6e, 0x94, 0xd0, 0x11, 0xd1, 0xc2, 0x6f, 0xd2, 0x74, 0xa7, 0x90, 0x8d, - 0x25, 0x7e, 0x5a, 0xe6, 0x1a, 0xe7, 0xb2, 0x16, 0x20, 0x0c, 0x6b, 0x74, - 0x48, 0x08, 0x76, 0x14, 0x18, 0x01, 0xee, 0xff, 0x54, 0x9c, 0x7a, 0x25, - 0x08, 0xf1, 0x54, 0x57, 0x00, 0xd7, 0xe7, 0x14, 0x1d, 0xae, 0xec, 0x20, - 0x5d, 0x99, 0xf3, 0xc1, 0x2c, 0x57, 0xe8, 0xbd, 0x9a, 0x7a, 0x33, 0x0d, - 0xe8, 0x0b, 0xd0, 0x0e, 0x69, 0xa9, 0x20, 0xe8, 0xcc, 0xd9, 0xdf, 0x8b, - 0x32, 0x14, 0x69, 0x9d, 0x98, 0xf2, 0xf8, 0x63, 0xfe, 0x68, 0x5f, 0x94, - 0x02, 0xd9, 0x23, 0xd6, 0xa4, 0x45, 0x3f, 0xcc, 0x1f, 0x09, 0xc9, 0x07, - 0xd9, 0x11, 0xd4, 0x70, 0x75, 0x4d, 0xfb, 0xca, 0x1d, 0xd2, 0xfc, 0x1c, - 0x0e, 0x91, 0x20, 0x38, 0xef, 0xa9, 0x30, 0x2e, 0xe4, 0x89, 0x53, 0x9c, - 0x22, 0xf9, 0x4e, 0xe6, 0x9b, 0x69, 0x27, 0x53, 0x1e, 0x8c, 0x68, 0xa7, - 0x3b, 0x75, 0x37, 0x0f, 0x5f, 0xd4, 0x6b, 0x36, 0x1c, 0xdd, 0xfb, 0xb5, - 0xac, 0x16, 0x5c, 0xa4, 0xf4, 0x2a, 0x43, 0x44, 0xaa, 0x28, 0xa2, 0xc7, - 0x2f, 0xdd, 0x45, 0x90, 0xe8, 0xb8, 0xd8, 0x10, 0x69, 0xe0, 0xd0, 0x4c, - 0x7c, 0x4f, 0xd7, 0xc8, 0x35, 0xfa, 0xf8, 0x71, 0x4a, 0xb7, 0x36, 0x6e, - 0xfd, 0x44, 0x9d, 0x40, 0x1f, 0xb9, 0xb1, 0x64, 0x0a, 0x82, 0x50, 0x38, - 0xf3, 0x78, 0x61, 0xd3, 0xdb, 0x18, 0xa8, 0xa8, 0x66, 0x42, 0x81, 0xf4, - 0x13, 0x68, 0xec, 0xff, 0x4a, 0x58, 0xb1, 0x44, 0x06, 0x9f, 0xca, 0x65, - 0x66, 0x87, 0xc3, 0xbf, 0x7e, 0xa6, 0xea, 0x6f, 0x93, 0xd2, 0x0e, 0x9a, - 0x26, 0x5c, 0xa1, 0x7c, 0x7c, 0x00, 0x34, 0xe8, 0xb2, 0x45, 0x1f, 0xff, - 0x8c, 0xb4, 0xaa, 0x9e, 0x21, 0x76, 0x06, 0x7e, 0xa6, 0x2f, 0x85, 0xd8, - 0x94, 0xaa, 0xd5, 0x2f, 0xc2, 0xe4, 0x22, 0x61, 0x8a, 0xaf, 0xa4, 0x7a, - 0x8e, 0x5f, 0x50, 0x28, 0xb4, 0xc5, 0x55, 0x57, 0xb4, 0x2a, 0xb6, 0x5f, - 0x4c, 0xce, 0x1b, 0xa2, 0x02, 0x78, 0x5e, 0x19, 0xb6, 0x65, 0x50, 0x5c, - 0x48, 0x5e, 0x6f, 0xe2, 0x07, 0x61, 0x75, 0x26, 0xf4, 0xa2, 0x94, 0xbd, - 0x5c, 0xc4, 0x91, 0x3d, 0x6a, 0x16, 0x61, 0x44, 0xd8, 0xb1, 0xaf, 0xc6, - 0xcc, 0x4b, 0x4d, 0x8a, 0x0b, 0xec, 0x2d, 0xec, 0x7c, 0x0b, 0x45, 0xc4, - 0xdb, 0x29, 0xc3, 0x03, 0x5a, 0xad, 0x53, 0xe3, 0x8b, 0xf4, 0x86, 0x12, - 0xd0, 0xc3, 0x34, 0x0d, 0xac, 0x03, 0xdf, 0x9b, 0x0d, 0x56, 0x70, 0xd0, - 0x4b, 0x79, 0x2f, 0x25, 0x12, 0xbc, 0x70, 0x13, 0xfa, 0xcb, 0xed, 0x4e, - 0x4b, 0xcf, 0x2b, 0x46, 0xe4, 0xfe, 0xf2, 0x6c, 0x47, 0x79, 0x66, 0x73, - 0xe1, 0x35, 0x10, 0xc8, 0x9c, 0x8f, 0xf9, 0xcb, 0x0d, 0x80, 0xf6, 0x8d, - 0xd8, 0xd7, 0xa9, 0xb0, 0x54, 0x24, 0xc3, 0x9d, 0x91, 0xac, 0x16, 0xd2, - 0xff, 0x98, 0x7e, 0x86, 0xd4, 0x8b, 0x68, 0xc0, 0xc5, 0xa2, 0x3a, 0x8f, - 0x48, 0x8b, 0xc8, 0x62, 0xae, 0x71, 0x58, 0x6e, 0xba, 0x23, 0x80, 0xec, - 0xf6, 0x0d, 0x47, 0x79, 0x32, 0x5a, 0x95, 0x33, 0x3d, 0xfc, 0x37, 0x56, - 0xe9, 0x2f, 0x5c, 0xbd, 0xc3, 0x3c, 0x9c, 0x63, 0xe2, 0x94, 0x10, 0xf8, - 0x50, 0x52, 0x22, 0xbe, 0xad, 0x0a, 0x16, 0xc8, 0x91, 0x6a, 0x08, 0x45, - 0x67, 0x7c, 0xe8, 0x67, 0x30, 0x9f, 0x5c, 0xe0, 0x9a, 0x1d, 0x79, 0x09, - 0x11, 0x80, 0xf0, 0x04, 0xf6, 0xf7, 0x27, 0xed, 0x6a, 0x20, 0x25, 0xe7, - 0x8b, 0xb8, 0x17, 0x3e, 0x70, 0xf0, 0xd9, 0x56, 0x0e, 0x23, 0xd2, 0xa2, - 0x95, 0x2f, 0x40, 0xcb, 0x36, 0x1c, 0x57, 0xba, 0x79, 0x77, 0xe0, 0xc1, - 0x4b, 0x31, 0xe7, 0x5d, 0x2a, 0xa6, 0x23, 0x2f, 0x83, 0x0e, 0xca, 0x5f, - 0x45, 0x7e, 0x2f, 0xbb, 0xb1, 0xa3, 0x9a, 0xb4, 0x9e, 0xa9, 0x4c, 0xf8, - 0x8f, 0xaf, 0x86, 0x76, 0x20, 0x79, 0xa5, 0x3e, 0x85, 0xe9, 0xd3, 0x2a, - 0xab, 0x89, 0xfd, 0x64, 0x36, 0x21, 0xd0, 0xf4, 0xc4, 0x91, 0xea, 0x3c, - 0xe1, 0x20, 0x1b, 0x82, 0xde, 0x4d, 0x92, 0xaf, 0x1a, 0xfe, 0xb5, 0x2b, - 0x09, 0x51, 0xd7, 0x57, 0x9e, 0xa6, 0xe8, 0xbf, 0xee, 0xef, 0xb7, 0xc2, - 0x15, 0xe7, 0x6a, 0x52, 0x22, 0x32, 0xce, 0x77, 0xb3, 0x4d, 0xc2, 0xe4, - 0x90, 0xaf, 0x68, 0x14, 0x41, 0xcd, 0x37, 0x3d, 0xd7, 0x4a, 0x6d, 0x3e, - 0x31, 0xa4, 0x28, 0x7b, 0x59, 0xd2, 0xa7, 0x56, 0x7d, 0x51, 0x74, 0x2f, - 0x48, 0x77, 0x71, 0xe8, 0xa1, 0xaf, 0x6a, 0xa0, 0x4f, 0xf3, 0xb6, 0xbf, - 0xb6, 0x10, 0x14, 0x94, 0xd4, 0x61, 0x4a, 0xfc, 0xff, 0xd7, 0x6d, 0xd4, - 0x01, 0x6a, 0x41, 0xf6, 0xd6, 0x0b, 0xe9, 0x5b, 0xb7, 0x0a, 0x0b, 0xa6, - 0x6d, 0x51, 0x64, 0x01, 0x91, 0xe6, 0xf1, 0x69, 0x7b, 0x7d, 0xee, 0xb0, - 0xb9, 0x6f, 0x92, 0x41, 0xb4, 0xfa, 0x7c, 0xf1, 0xcf, 0xb6, 0xc1, 0x3e, - 0xcb, 0xe2, 0x3a, 0xc1, 0x74, 0x61, 0xc2, 0xf1, 0xbd, 0xd2, 0xff, 0x2d, - 0x4c, 0x56, 0xee, 0x26, 0xe3, 0xf3, 0xbd, 0xb9, 0xc7, 0xf8, 0x42, 0xab, - 0xcd, 0x37, 0x97, 0xd2, 0x87, 0x81, 0xbb, 0xd5, 0xd0, 0xc6, 0xe7, 0x85, - 0xfb, 0x1a, 0xd7, 0xac, 0x04, 0xcf, 0xa8, 0xb9, 0xc5, 0x66, 0xa3, 0x55, - 0x05, 0x9c, 0xfb, 0x6c, 0x02, 0x67, 0x21, 0x1f, 0x1e, 0xd7, 0x33, 0x3c, - 0x17, 0xba, 0x97, 0x09, 0x0c, 0xb3, 0xb9, 0x7c, 0x24, 0x8c, 0xdf, 0x99, - 0x47, 0xdc, 0xcc, 0x31, 0xdf, 0xf6, 0x5a, 0x31, 0xa7, 0x94, 0x8f, 0xf2, - 0xfb, 0x1d, 0x5b, 0x05, 0x61, 0x8f, 0xf9, 0x2d, 0xb2, 0xc5, 0xc7, 0x2d, - 0x09, 0x3d, 0x8a, 0x07, 0x5e, 0xfa, 0x9f, 0xd2, 0xfe, 0x81, 0x7b, 0x35, - 0x42, 0xa7, 0x7b, 0x33, 0x7c, 0xcc, 0x7b, 0x63, 0x7c, 0x83, 0x05, 0x1c, - 0xbe, 0x3a, 0x54, 0xde, 0x35, 0xf0, 0xd0, 0xdf, 0x89, 0x30, 0x05, 0x1d, - 0x84, 0x3b, 0xbd, 0x0d, 0x4e, 0xc7, 0x2c, 0x6f, 0x4b, 0xb4, 0x88, 0xc7, - 0x93, 0xab, 0xad, 0x64, 0xcb, 0x7c, 0x7b, 0xf4, 0x8d, 0x4b, 0xfc, 0x85, - 0x25, 0xff, 0x84, 0x7b, 0xf1, 0xb5, 0x56, 0xa8, 0x7d, 0x16, 0xf8, 0x8d, - 0x47, 0x40, 0x61, 0x1c, 0x1b, 0xde, 0xdb, 0xbf, 0xc7, 0xfd, 0x3d, 0x3b, - 0x8c, 0xf8, 0x73, 0x30, 0x6c, 0x0c, 0x05, 0x26, 0x67, 0xa1, 0x83, 0xaa, - 0x04, 0x7a, 0x36, 0xc0, 0x0b, 0x8d, 0x8c, 0x50, 0x94, 0xb0, 0x85, 0x89, - 0xae, 0xf0, 0x94, 0x0d, 0xd1, 0x51, 0xd8, 0x33, 0xc6, 0x91, 0x8d, 0xc3, - 0x11, 0xd8, 0xb7, 0xcb, 0xb3, 0x61, 0x33, 0x6b, 0x64, 0xf8, 0x74, 0x01, - 0xfa, 0x92, 0x89, 0xa0, 0xbd, 0xb5, 0x2b, 0x8c, 0x42, 0x3a, 0x8f, 0xae, - 0xb3, 0xd4, 0xb5, 0xcc, 0x4e, 0x77, 0x3e, 0xc5, 0x31, 0x2a, 0xd7, 0xb3, - 0x9e, 0x66, 0xec, 0x09, 0x8e, 0x75, 0x14, 0xbf, 0x0d, 0x5b, 0x5b, 0xb6, - 0x47, 0x18, 0xed, 0xf3, 0x72, 0x61, 0xf5, 0xac, 0x54, 0xf2, 0x35, 0xa8, - 0x39, 0xf7, 0x86, 0x1b, 0x7c, 0xf9, 0x7a, 0x75, 0xab, 0xa9, 0x01, 0xec, - 0x88, 0x6b, 0x15, 0x2e, 0x6f, 0xea, 0x8e, 0xfd, 0x9e, 0x4e, 0x18, 0xc4, - 0xb0, 0xcf, 0x8f, 0x3d, 0x31, 0x08, 0x64, 0x9a, 0xba, 0xd3, 0x2d, 0xf1, - 0x60, 0x6b, 0x61, 0x65, 0x0a, 0x8a, 0x25, 0xd9, 0x53, 0xd5, 0xc3, 0x15, - 0xeb, 0xcc, 0x69, 0x23, 0x26, 0x12, 0x92, 0x58, 0x0c, 0x7d, 0x19, 0x3e, - 0xf5, 0xc9, 0x68, 0x7d, 0x44, 0x8a, 0xf3, 0x1e, 0x14, 0x89, 0x2d, 0x18, - 0x82, 0x1a, 0x54, 0x55, 0xf5, 0x8a, 0x64, 0xbf, 0x63, 0x46, 0x0c, 0xdf, - 0xca, 0x05, 0x92, 0xbc, 0x94, 0x4b, 0xd1, 0x68, 0x85, 0x1f, 0xab, 0x07, - 0xaa, 0xde, 0x2d, 0x5c, 0x80, 0x71, 0x73, 0x41, 0x78, 0x0c, 0xb7, 0xc9, - 0x7a, 0xda, 0x4c, 0x5c, 0xc1, 0x2c, 0x6a, 0x7e, 0xad, 0x5f, 0x02, 0xeb, - 0xc8, 0x68, 0x00, 0x4c, 0x6b, 0xa4, 0x65, 0x6c, 0xd4, 0xed, 0x85, 0x48, - 0x82, 0x29, 0xe3, 0xa4, 0x77, 0xf3, 0x32, 0xf0, 0x43, 0x5f, 0x12, 0x6a, - 0xd2, 0x0d, 0x40, 0x8a, 0x76, 0x5e, 0x7a, 0x91, 0x2a, 0x2a, 0xfc, 0x18, - 0x15, 0x4d, 0x84, 0x3f, 0xa4, 0x72, 0xbb, 0x27, 0xd4, 0xea, 0x49, 0xb0, - 0x47, 0xc8, 0xcf, 0x08, 0xca, 0xe0, 0xdd, 0x39, 0xc6, 0x87, 0x26, 0xde, - 0xae, 0xa4, 0xab, 0xb6, 0x29, 0x40, 0xfa, 0x00, 0xfa, 0xa9, 0xd5, 0xad, - 0x05, 0x8c, 0x32, 0xd4, 0xdb, 0xd6, 0xd6, 0x5d, 0x9b, 0xfb, 0xd0, 0xa1, - 0x76, 0x0b, 0xde, 0x79, 0x59, 0x8a, 0x69, 0xdf, 0xcc, 0x77, 0xb3, 0xaa, - 0x4a, 0xf5, 0xc0, 0x80, 0x9d, 0x61, 0x9d, 0xc4, 0xcb, 0x82, 0x3a, 0xc5, - 0x2d, 0x25, 0x40, 0xc3, 0x35, 0xd0, 0x7a, 0xe1, 0x83, 0x5b, 0x01, 0x61, - 0x9b, 0xa1, 0x56, 0x1a, 0x07, 0x8b, 0xd1, 0x9d, 0x38, 0xfa, 0x4e, 0xa9, - 0xa3, 0x84, 0x78, 0xa2, 0x36, 0x09, 0x9d, 0xea, 0xb3, 0xbe, 0x70, 0x31, - 0xfc, 0xcb, 0x28, 0x12, 0x34, 0x64, 0xca, 0x95, 0x78, 0xcc, 0x71, 0xbc, - 0x10, 0xd0, 0x69, 0x3e, 0xee, 0x66, 0xff, 0x27, 0x49, 0x00, 0xb1, 0xd6, - 0x1e, 0x48, 0x33, 0x87, 0xab, 0x3a, 0xbe, 0xf3, 0x55, 0xf7, 0xec, 0xee, - 0xd7, 0x3f, 0x5b, 0x6a, 0xaa, 0xbe, 0xc9, 0xae, 0x9c, 0xee, 0xba, 0x1b, - 0x3b, 0xca, 0x0b, 0xb0, 0x95, 0x3e, 0x0a, 0x73, 0xbb, 0x1c, 0x5a, 0xb3, - 0x5f, 0x88, 0xcf, 0x6f, 0x97, 0xe4, 0x9a, 0x71, 0x45, 0xb0, 0x5e, 0xca, - 0x67, 0x21, 0x06, 0xfb, 0xae, 0xfe, 0xff, 0x61, 0x9c, 0xdf, 0xd4, 0x0b, - 0x5c, 0x5d, 0x00, 0x4f, 0xdf, 0xea, 0xe6, 0x23, 0xdf, 0xfc, 0x9c, 0xc6, - 0x45, 0xcf, 0xfd, 0x6c, 0xf7, 0x40, 0x96, 0xc7, 0xca, 0x91, 0xa5, 0xb1, - 0x1f, 0x16, 0x85, 0x42, 0x61, 0x14, 0xa3, 0x41, 0x9d, 0x6c, 0x6e, 0x13, - 0xb3, 0xf5, 0x73, 0x8d, 0x5b, 0xd6, 0x54, 0xc2, 0xa9, 0xab, 0x57, 0x80, - 0x33, 0x23, 0x86, 0x8e, 0xb3, 0x9e, 0xc8, 0xc3, 0xc9, 0x94, 0x36, 0xf5, - 0x40, 0x9d, 0x7d, 0x14, 0xb9, 0x7e, 0x77, 0x0a, 0x85, 0x3b, 0x5d, 0x12, - 0x67, 0xa8, 0x25, 0x51, 0x5f, 0xc8, 0x5c, 0x54, 0xff, 0x73, 0xc5, 0xaf, - 0x3b, 0xfd, 0xc8, 0x39, 0x4a, 0x9c, 0xa7, 0x5d, 0x8f, 0x8f, 0x32, 0x1a, - 0x4d, 0xce, 0x92, 0xab, 0xec, 0x36, 0x38, 0xe5, 0x73, 0xb2, 0x48, 0x7e, - 0x2b, 0x6c, 0x0c, 0x02, 0x37, 0x8c, 0xbe, 0x7d, 0xe0, 0x40, 0xfa, 0xfb, - 0xb9, 0x0f, 0xab, 0xa1, 0x05, 0x74, 0x76, 0x48, 0x6d, 0x57, 0x3d, 0xd0, - 0xed, 0x38, 0x64, 0x59, 0x0f, 0xcc, 0x52, 0x45, 0xea, 0x11, 0x80, 0x12, - 0x04, 0xac, 0x43, 0x31, 0xb3, 0x2d, 0xd4, 0xa4, 0xb4, 0x5c, 0x88, 0xcf, - 0xa5, 0xaa, 0xf8, 0x31, 0x46, 0x61, 0x9d, 0xb3, 0x3a, 0x78, 0xd7, 0xb4, - 0x9a, 0x38, 0x46, 0x08, 0xa3, 0xc6, 0x68, 0xe7, 0x78, 0xee, 0x1c, 0x93, - 0xdf, 0x94, 0x90, 0xed, 0xd3, 0x24, 0x30, 0x0e, 0x2a, 0x23, 0xd3, 0x76, - 0x27, 0x3a, 0x33, 0x12, 0x45, 0x05, 0x86, 0xa6, 0x06, 0x45, 0x3f, 0x9b, - 0x6d, 0x2f, 0x8f, 0x51, 0xeb, 0x2c, 0x96, 0xf3, 0x7d, 0x29, 0x55, 0xd6, - 0x9d, 0x4b, 0x89, 0x10, 0xa2, 0x76, 0xe1, 0x52, 0xa5, 0x6c, 0x88, 0xf2, - 0x0c, 0x06, 0xa0, 0xd0, 0x9e, 0x2e, 0x6e, 0x59, 0xc3, 0x99, 0x36, 0x1e, - 0xc6, 0xef, 0xe6, 0x11, 0x66, 0x59, 0xf3, 0xe5, 0x0d, 0x03, 0x48, 0x51, - 0x0a, 0xe6, 0x8a, 0xf6, 0xeb, 0x69, 0x7c, 0x47, 0x4c, 0xa1, 0x56, 0x83, - 0xcc, 0x51, 0x47, 0x86, 0x74, 0x87, 0x7a, 0xc9, 0x87, 0xf3, 0x0a, 0x34, - 0x6c, 0xf6, 0x96, 0x69, 0xd7, 0x61, 0x85, 0x2d, 0xa6, 0x97, 0x31, 0x4c, - 0xd4, 0x72, 0xb5, 0x67, 0x2e, 0xff, 0x02, 0x33, 0x59, 0x7b, 0x0c, 0xa5, - 0x07, 0xf2, 0x01, 0xf7, 0x23, 0x53, 0x24, 0x20, 0x17, 0xad, 0x7b, 0x0e, - 0xb9, 0x4e, 0xb3, 0xd9, 0x01, 0x8a, 0x73, 0xc6, 0x3a, 0x06, 0xb6, 0x5c, - 0xe3, 0x57, 0x21, 0x10, 0x8e, 0x38, 0x5f, 0xa8, 0x89, 0xc1, 0xfe, 0xf5, - 0xf3, 0xe2, 0x75, 0x61, 0x4c, 0x1a, 0x98, 0x12, 0xc5, 0x39, 0x57, 0x78, - 0x90, 0x5f, 0x9f, 0x55, 0xc4, 0xcc, 0x9b, 0x7f, 0x6a, 0x86, 0xc4, 0x2b, - 0xf5, 0x16, 0xd2, 0xc7, 0x31, 0xa1, 0x7f, 0x63, 0x1c, 0xbb, 0xb8, 0x0d, - 0x50, 0xb1, 0x5a, 0xd5, 0xe1, 0xc9, 0xdb, 0x8e, 0xff, 0x31, 0x53, 0xc3, - 0xbd, 0xea, 0x5b, 0xed, 0x82, 0x4c, 0xbb, 0x7b, 0x5d, 0x1a, 0x72, 0xf0, - 0x2b, 0x3e, 0xf9, 0xce, 0x88, 0x32, 0xb5, 0xb0, 0x30, 0x37, 0x26, 0xd5, - 0xca, 0x9a, 0xde, 0x5b, 0xc7, 0x04, 0x4b, 0x6a, 0x68, 0xdc, 0x09, 0x6c, - 0x3b, 0x7f, 0x36, 0x6b, 0x53, 0x27, 0xd2, 0x7a, 0x03, 0x0a, 0x26, 0x06, - 0x5a, 0x27, 0xc4, 0x5c, 0xf8, 0xbb, 0xa2, 0x0f, 0xbf, 0xd9, 0xa7, 0x50, - 0xf0, 0x1b, 0xb2, 0x90, 0xb8, 0x3b, 0x0e, 0x64, 0x73, 0x98, 0x77, 0xd2, - 0x32, 0x76, 0x21, 0x97, 0x7b, 0x4c, 0x3d, 0x3c, 0xad, 0xbe, 0x94, 0xde, - 0x23, 0x44, 0xcd, 0x03, 0x83, 0x36, 0x00, 0xd1, 0x97, 0x8f, 0x37, 0x6b, - 0x95, 0xb8, 0x92, 0x57, 0xb4, 0xfb, 0xeb, 0x67, 0x40, 0x33, 0x64, 0xba, - 0x7d, 0x48, 0xfe, 0x9f, 0xe7, 0xab, 0x2e, 0x18, 0x91, 0x5b, 0x38, 0x18, - 0xa3, 0x77, 0x57, 0x0b, 0x46, 0xf0, 0x00, 0xde, 0x7e, 0x89, 0xac, 0x53, - 0x10, 0xa6, 0x3a, 0xdd, 0x73, 0x42, 0x97, 0x32, 0x9d, 0x7d, 0x9c, 0x19, - 0x80, 0xd7, 0x72, 0x01, 0x46, 0x11, 0xc8, 0x60, 0xcb, 0xaf, 0xd1, 0x88, - 0xfc, 0x19, 0x3f, 0x53, 0xb7, 0xab, 0x61, 0x55, 0x01, 0x1c, 0x5f, 0x49, - 0xa5, 0x8c, 0x59, 0x7a, 0x5c, 0x7a, 0x2f, 0x65, 0xc9, 0x0a, 0xab, 0xae, - 0x2e, 0x4a, 0xdd, 0x44, 0x5f, 0x48, 0x9c, 0xb5, 0x17, 0x42, 0xd7, 0x8b, - 0xfc, 0xdf, 0x39, 0xf1, 0xa0, 0x6b, 0x1b, 0x92, 0x11, 0xa0, 0x77, 0xa8, - 0x95, 0xab, 0xf3, 0xe3, 0x9e, 0xf6, 0x12, 0x93, 0x29, 0xa2, 0x6c, 0xba, - 0xe2, 0x60, 0xd5, 0xcb, 0x01, 0x46, 0x55, 0x0c, 0x3f, 0x08, 0xb0, 0x74, - 0x84, 0xbb, 0xc2, 0x18, 0x8a, 0x1c, 0x6d, 0x36, 0x6e, 0xea, 0xa8, 0x6a, - 0x78, 0xe8, 0x58, 0x84, 0xd8, 0x33, 0xac, 0xe1, 0x74, 0xf6, 0xb2, 0x80, - 0x68, 0x62, 0x74, 0x27, 0xf5, 0x2e, 0x00, 0xdc, 0x3c, 0xee, 0x75, 0x72, - 0x27, 0xa4, 0x85, 0xe4, 0xba, 0x97, 0xc0, 0x57, 0xaf, 0xfe, 0xdb, 0xc4, - 0x2c, 0xaf, 0xb1, 0x22, 0xee, 0x82, 0x21, 0x93, 0xdd, 0x87, 0xe4, 0xdc, - 0xfd, 0x0c, 0x6a, 0x6c, 0xb4, 0x3a, 0x6e, 0xf9, 0x54, 0x00, 0x4f, 0x98, - 0x2a, 0xde, 0xea, 0x5c, 0xa4, 0xde, 0x6e, 0x6a, 0x5c, 0x49, 0xfd, 0x9f, - 0xcf, 0xee, 0xe0, 0x06, 0xfd, 0xfc, 0xee, 0xb3, 0xf6, 0x02, 0xd8, 0xb1, - 0x7f, 0x5b, 0x6c, 0x2e, 0xc2, 0xd1, 0x5c, 0xe1, 0xec, 0x8a, 0x86, 0xe0, - 0x12, 0x63, 0x87, 0x7a, 0x48, 0x5f, 0x43, 0xb7, 0x8f, 0xf7, 0x8a, 0xcd, - 0x1b, 0x08, 0xc8, 0x40, 0xb4, 0x10, 0xfb, 0xc6, 0xa7, 0xc6, 0xf6, 0xee, - 0x41, 0x81, 0x07, 0x19, 0x49, 0x10, 0x26, 0xc1, 0xb2, 0x74, 0xba, 0x26, - 0xeb, 0xed, 0x08, 0x3b, 0xb9, 0x1d, 0xfc, 0x37, 0xc0, 0x78, 0xcd, 0xe9, - 0x25, 0xbe, 0xc8, 0xcf, 0x31, 0x12, 0xd1, 0xec, 0xf1, 0x0a, 0x41, 0x28, - 0x34, 0x2d, 0xbe, 0x9f, 0xfe, 0x68, 0x48, 0x8c, 0x89, 0x25, 0x65, 0x0b, - 0x3e, 0xc1, 0x1c, 0x9d, 0xee, 0xac, 0x65, 0x4b, 0xc7, 0x32, 0x2f, 0xa3, - 0x78, 0xd6, 0x1f, 0x62, 0xe7, 0xae, 0x95, 0x64, 0x6b, 0xc9, 0xef, 0xbd, - 0xd3, 0xc6, 0x19, 0xdf, 0x5d, 0x7f, 0x06, 0x0e, 0xe7, 0x0f, 0xaf, 0x8c, - 0x36, 0x6f, 0x84, 0xe5, 0xe1, 0x66, 0x3b, 0x96, 0xc4, 0xdd, 0xbc, 0x01, - 0xeb, 0x6d, 0xce, 0xf9, 0x1e, 0x8c, 0x71, 0xb8, 0xa0, 0x94, 0x70, 0xb4, - 0x67, 0x50, 0xd0, 0x9c, 0xd4, 0xa8, 0xa6, 0x35, 0xe7, 0x9f, 0x00, 0x8e, - 0x33, 0x51, 0x4e, 0x66, 0x69, 0xb5, 0x89, 0x63, 0x0e, 0x63, 0x72, 0xd7, - 0x18, 0xe1, 0x1d, 0x59, 0xde, 0x14, 0x27, 0xbc, 0x44, 0x4e, 0x42, 0x6c, - 0xa1, 0x18, 0xb8, 0x0d, 0x6d, 0x34, 0x82, 0x88, 0xbf, 0x9a, 0x7d, 0xe1, - 0x8b, 0xf3, 0xd9, 0x02, 0xae, 0xbd, 0x6f, 0x2e, 0x4f, 0x76, 0xc7, 0x7f, - 0x7f, 0x42, 0x1f, 0x77, 0x69, 0x80, 0x01, 0x24, 0xf6, 0xae, 0x04, 0xc5, - 0x07, 0xe0, 0xeb, 0xed, 0x46, 0x5e, 0x37, 0xf4, 0xde, 0x17, 0x03, 0xe2, - 0xdc, 0xe8, 0x49, 0x38, 0x74, 0xb1, 0xc7, 0xd8, 0x98, 0x0c, 0x2e, 0xad, - 0xf8, 0x9b, 0xc1, 0x8c, 0x91, 0x51, 0xdc, 0xb7, 0xbe, 0xfc, 0x86, 0xbf, - 0x8c, 0x60, 0x4e, 0xb3, 0xdb, 0xb8, 0x3f, 0xea, 0xf0, 0x81, 0x22, 0x1e, - 0x29, 0x21, 0x6f, 0x8b, 0x1e, 0x1c, 0x00, 0xc4, 0x2a, 0x48, 0x88, 0x0c, - 0x07, 0xd8, 0xb6, 0x5d, 0xa6, 0x66, 0xac, 0xaa, 0x76, 0x64, 0xe4, 0x4f, - 0x62, 0xfa, 0xba, 0x11, 0xfe, 0x34, 0x1b, 0x68, 0x35, 0xb3, 0x04, 0x4f, - 0xfd, 0xb7, 0x81, 0x4b, 0x47, 0x23, 0xdb, 0x63, 0x1b, 0x1d, 0x5b, 0x89, - 0x5e, 0x01, 0x1a, 0x6b, 0x22, 0x02, 0x40, 0x2c, 0x7f, 0x0f, 0x50, 0x6d, - 0xf0, 0x54, 0x29, 0xf0, 0xfc, 0x84, 0x88, 0xcc, 0xeb, 0x3c, 0x21, 0x19, - 0x6d, 0x1f, 0x10, 0xa2, 0xec, 0x19, 0x03, 0xf1, 0xb1, 0xcd, 0xc2, 0x1c, - 0x8d, 0x94, 0xe0, 0xa4, 0x16, 0xb5, 0x34, 0xbb, 0xee, 0x25, 0x08, 0x27, - 0xee, 0x38, 0x2e, 0x24, 0xae, 0x18, 0x52, 0xf1, 0x58, 0x29, 0xbc, 0xc5, - 0x65, 0x4f, 0xa6, 0x0e, 0x4b, 0x59, 0xb8, 0x00, 0x07, 0x80, 0x67, 0x87, - 0x61, 0x42, 0xa3, 0x11, 0x4a, 0xd5, 0xba, 0x8c, 0x7e, 0x46, 0x8c, 0x6f, - 0xef, 0xc9, 0x48, 0x69, 0x16, 0x70, 0xf3, 0x1a, 0xb3, 0xe7, 0x1e, 0xd9, - 0x4a, 0x35, 0x02, 0xcb, 0xf8, 0x75, 0x30, 0x77, 0x87, 0xeb, 0x84, 0xfc, - 0x41, 0x2b, 0xe7, 0xaa, 0xf6, 0x37, 0x36, 0xd7, 0xac, 0x53, 0xc1, 0xd5, - 0x6b, 0xe8, 0xd1, 0x57, 0xf5, 0xc3, 0x42, 0x78, 0x98, 0x09, 0xec, 0xd1, - 0x5e, 0x84, 0x26, 0x2b, 0x38, 0x34, 0x1e, 0xc1, 0x20, 0xab, 0xc5, 0x00, - 0xe7, 0xf1, 0x43, 0x55, 0xf6, 0x60, 0x8b, 0xee, 0xd4, 0xed, 0x5e, 0x03, - 0x2b, 0x1b, 0xbf, 0x4b, 0x77, 0xbe, 0xb3, 0xbd, 0xc8, 0xfa, 0x53, 0x4a, - 0xb5, 0xdc, 0xa3, 0x4c, 0x6f, 0xf1, 0x77, 0x54, 0xce, 0x95, 0xca, 0x78, - 0xf0, 0xcc, 0x3a, 0xbb, 0xce, 0x9d, 0x20, 0xe6, 0xe4, 0xc6, 0xcd, 0x71, - 0x25, 0xbe, 0xd4, 0xac, 0x05, 0xdc, 0x21, 0x66, 0x41, 0xe0, 0x5d, 0x3c, - 0x79, 0x14, 0x67, 0xcf, 0x7e, 0x77, 0xf0, 0x8c, 0x33, 0xe7, 0x85, 0xdc, - 0xfc, 0x03, 0xe8, 0xf5, 0x2d, 0x34, 0x1e, 0xa6, 0x81, 0x65, 0x7f, 0xe9, - 0xe4, 0xa4, 0xb9, 0x1e, 0x9e, 0x5c, 0x66, 0x71, 0xc1, 0xbe, 0xaa, 0x0a, - 0x4b, 0x7e, 0x05, 0x66, 0x75, 0x6e, 0x89, 0x44, 0xed, 0x7b, 0x06, 0x60, - 0x66, 0x09, 0xb1, 0x1d, 0xf8, 0x21, 0xd0, 0xeb, 0x63, 0x11, 0x06, 0x8a, - 0xbc, 0x24, 0xcc, 0xd2, 0x99, 0xc6, 0xc8, 0xbf, 0x5e, 0x94, 0x17, 0xb5, - 0x27, 0x74, 0x5b, 0x3c, 0xaf, 0xe3, 0xcb, 0xd6, 0xb5, 0x31, 0xe1, 0xf3, - 0x8d, 0x4e, 0x4a, 0xcb, 0xa3, 0x1d, 0x53, 0x43, 0xa0, 0x4f, 0x99, 0xf1, - 0x5d, 0x82, 0x22, 0xbd, 0xbd, 0xc4, 0xb8, 0x01, 0xe8, 0xe3, 0xca, 0xd0, - 0x68, 0xe6, 0xa3, 0x15, 0xf2, 0x91, 0xd2, 0xf4, 0x1f, 0x65, 0x1b, 0xde, - 0x82, 0x3d, 0xdc, 0x01, 0x48, 0x27, 0x64, 0xc1, 0x63, 0x9e, 0xfb, 0x44, - 0x51, 0x3a, 0x4b, 0xf9, 0x1a, 0x1e, 0x68, 0xd5, 0x21, 0xee, 0xfe, 0xac, - 0x1f, 0x26, 0x9c, 0x5e, 0x53, 0x2f, 0x10, 0x04, 0xda, 0xc3, 0xe2, 0xf7, - 0x8e, 0x9e, 0x24, 0xd1, 0xd3, 0xbd, 0x3c, 0x5c, 0xc0, 0x57, 0xf8, 0x57, - 0x1f, 0xfa, 0x9f, 0x98, 0xeb, 0x94, 0x80, 0x91, 0x2c, 0x3f, 0x78, 0x61, - 0xdc, 0x96, 0x0c, 0x87, 0x45, 0xe5, 0x10, 0x27, 0xc1, 0x7b, 0x69, 0x89, - 0x45, 0x6b, 0x34, 0x3a, 0xf6, 0x65, 0x02, 0x81, 0xd8, 0x3c, 0xdb, 0xee, - 0x32, 0x06, 0xb2, 0x49, 0x45, 0x9d, 0x61, 0xbe, 0xc1, 0x0b, 0xe3, 0xa5, - 0xaa, 0x99, 0xb9, 0x96, 0x6c, 0xcc, 0x73, 0xb9, 0x97, 0x2f, 0xfb, 0xf3, - 0x80, 0xf3, 0x51, 0x28, 0x2d, 0x03, 0xb5, 0xc5, 0x56, 0xa6, 0x52, 0xb4, - 0x76, 0xd8, 0x6b, 0x6e, 0x32, 0x6b, 0x6b, 0xca, 0x92, 0x14, 0x67, 0xf3, - 0xa7, 0xb9, 0x7c, 0xab, 0xa6, 0xf4, 0x27, 0x94, 0x21, 0x5f, 0xa0, 0xb6, - 0x36, 0x54, 0x30, 0x60, 0xaa, 0x21, 0x45, 0xac, 0xe5, 0xe6, 0xa1, 0x7c, - 0x99, 0x12, 0x7e, 0xdb, 0xab, 0xa2, 0xbd, 0x1c, 0xa3, 0x89, 0xc0, 0x70, - 0x45, 0xdf, 0x97, 0xc3, 0xac, 0xe1, 0x5f, 0xe9, 0xee, 0x50, 0x66, 0x25, - 0x05, 0xcc, 0x97, 0xad, 0xd4, 0x36, 0x84, 0x97, 0xcb, 0x09, 0xeb, 0x32, - 0xf5, 0xf2, 0xfa, 0x3e, 0x2e, 0x3d, 0x68, 0xf7, 0x41, 0xa3, 0x54, 0x27, - 0xc5, 0xf2, 0x4d, 0x6f, 0xf9, 0x6d, 0x92, 0x5c, 0x7e, 0xd9, 0x6e, 0x77, - 0xd4, 0x0a, 0x56, 0x15, 0x64, 0x06, 0xdd, 0xd0, 0xa7, 0xd1, 0x53, 0xf7, - 0x3c, 0x3b, 0x7e, 0x13, 0xc8, 0x96, 0x9e, 0x3a, 0x9a, 0xcf, 0x48, 0x10, - 0xa9, 0xca, 0x20, 0xcc, 0x36, 0xed, 0x6c, 0x46, 0x08, 0xc1, 0xf0, 0x7e, - 0x74, 0xab, 0xe2, 0xa6, 0x2d, 0xbe, 0x7d, 0x95, 0xd2, 0x27, 0x43, 0x0b, - 0x7b, 0x46, 0x48, 0x8f, 0x6c, 0x3b, 0x14, 0x2b, 0x26, 0xb8, 0x41, 0xef, - 0xdf, 0x8b, 0x7e, 0x74, 0x62, 0x94, 0x2b, 0x4a, 0x6a, 0x74, 0xc5, 0xc5, - 0x8f, 0xa3, 0x77, 0x74, 0xc9, 0x51, 0xa6, 0x4f, 0xc3, 0x07, 0x94, 0x44, - 0xb7, 0xac, 0x80, 0x15, 0x4c, 0xf7, 0x47, 0xd2, 0x0d, 0x3d, 0xb6, 0x77, - 0x2a, 0x2f, 0x22, 0x5e, 0x0c, 0xf3, 0x73, 0xa6, 0x84, 0x66, 0xb5, 0x34, - 0xf5, 0x6b, 0xda, 0x05, 0x89, 0xff, 0x0d, 0x3c, 0x8d, 0x90, 0x8d, 0xb7, - 0x73, 0xc9, 0xc2, 0x2e, 0x49, 0x08, 0x01, 0xbe, 0xdd, 0x28, 0xec, 0xcd, - 0x02, 0xb6, 0x09, 0xd9, 0xef, 0xcc, 0xe3, 0x2c, 0x9e, 0xc2, 0x91, 0xe4, - 0x88, 0x85, 0x86, 0x30, 0x00, 0xab, 0x06, 0x28, 0xd8, 0x80, 0xaa, 0xe5, - 0x93, 0x14, 0xd3, 0xbd, 0x88, 0xf6, 0x69, 0xd8, 0x84, 0x57, 0xda, 0x84, - 0xa1, 0x90, 0x32, 0xdb, 0x2e, 0x6e, 0xe9, 0xb1, 0x91, 0x66, 0x87, 0x68, - 0x4a, 0xc0, 0x51, 0xe9, 0x8b, 0x0f, 0xe8, 0x4c, 0x7d, 0xc6, 0xe7, 0xc5, - 0xf7, 0x79, 0x47, 0xa2, 0x67, 0x7b, 0x40, 0x91, 0xdc, 0xdb, 0x2a, 0xd3, - 0x40, 0xf0, 0xc7, 0x2d, 0x29, 0x11, 0x38, 0x7f, 0x3a, 0x2e, 0x1a, 0x93, - 0xc8, 0xd7, 0x8e, 0x99, 0x6c, 0x8e, 0x6e, 0xe1, 0x05, 0xbb, 0xee, 0x96, - 0xdb, 0x0b, 0x8f, 0x9d, 0x74, 0x78, 0xcf, 0x68, 0x9e, 0x10, 0x81, 0x95, - 0xf4, 0x75, 0x9b, 0x2f, 0xf1, 0x7d, 0xe6, 0xa4, 0xc8, 0xcb, 0x0d, 0xaa, - 0xc2, 0xf0, 0xf0, 0xd2, 0xbb, 0x98, 0x07, 0x68, 0xbd, 0x25, 0x00, 0x14, - 0xbc, 0x12, 0x6b, 0xb8, 0xa3, 0xa0, 0xc5, 0xf9, 0x42, 0xae, 0x10, 0xf0, - 0x4e, 0xb7, 0xd0, 0xa0, 0x5f, 0x13, 0x97, 0x66, 0x8c, 0x04, 0x1e, 0xc4, - 0x25, 0x8b, 0x49, 0x2c, 0x5d, 0x83, 0xef, 0x4e, 0xd0, 0x2b, 0x17, 0x6c, - 0x2d, 0x05, 0x48, 0xc0, 0x9b, 0x8f, 0xda, 0xb0, 0x99, 0xf6, 0xe2, 0xb8, - 0x01, 0x97, 0x06, 0xf1, 0xcb, 0x0f, 0xdb, 0x11, 0xc0, 0xb1, 0x19, 0x93, - 0x79, 0x6e, 0x90, 0x3f, 0xca, 0xa2, 0x9a, 0xc1, 0x81, 0x4f, 0x1e, 0x64, - 0xeb, 0xf5, 0x5d, 0x9c, 0xd7, 0x38, 0xf8, 0x7b, 0x1a, 0x9b, 0x7b, 0xd7, - 0x58, 0x72, 0x7b, 0xca, 0xd3, 0xe3, 0xbe, 0xbe, 0xf7, 0xa7, 0xa1, 0x74, - 0x4e, 0x63, 0x11, 0xb9, 0xec, 0x03, 0xf5, 0x0e, 0x79, 0x8b, 0xf0, 0x77, - 0xf8, 0x3d, 0xbb, 0xfe, 0x47, 0x6a, 0xeb, 0x11, 0xcc, 0xa3, 0xd1, 0x6d, - 0x92, 0x13, 0xdc, 0x2b, 0x97, 0x9c, 0xb9, 0x00, 0xd6, 0xee, 0xe6, 0xfb, - 0xa2, 0x5e, 0x43, 0x12, 0xdc, 0x65, 0x7e, 0x06, 0xc9, 0x40, 0x3c, 0x4b, - 0x90, 0x46, 0xc4, 0x22, 0xdf, 0x4b, 0x48, 0xa7, 0xf0, 0xad, 0xac, 0x72, - 0x87, 0x06, 0x62, 0x10, 0xea, 0xce, 0x01, 0x27, 0xcf, 0x42, 0x9a, 0x6e, - 0x8b, 0x64, 0xbc, 0xa3, 0xcc, 0x4b, 0xa9, 0x2a, 0xd9, 0x41, 0x63, 0xd5, - 0xa7, 0x08, 0x7f, 0x9c, 0xe7, 0x54, 0xf2, 0x91, 0x33, 0x88, 0xab, 0xe4, - 0x97, 0xce, 0x37, 0xc6, 0x1e, 0x9e, 0x14, 0x4a, 0x0c, 0xef, 0xa4, 0xd1, - 0xfc, 0xa5, 0x0d, 0x8b, 0x7a, 0x61, 0x2b, 0xea, 0x05, 0x79, 0xba, 0x33, - 0xcd, 0x38, 0xa7, 0x78, 0x07, 0xd2, 0xb8, 0xfb, 0x22, 0x7f, 0x96, 0xb4, - 0x6e, 0x0b, 0xdf, 0x35, 0xfd, 0x57, 0x5a, 0xb4, 0x38, 0xc7, 0xfb, 0x90, - 0x1b, 0x44, 0x1d, 0x79, 0x12, 0x98, 0x11, 0x95, 0x7b, 0x38, 0xc1, 0x28, - 0x75, 0xd9, 0x90, 0xbd, 0xc3, 0x5b, 0x7f, 0x7f, 0x22, 0x1e, 0xb8, 0x87, - 0x03, 0xad, 0x03, 0xe3, 0xab, 0x68, 0x25, 0x37, 0x69, 0x06, 0x58, 0xb9, - 0x51, 0x8f, 0xb3, 0x1b, 0x73, 0xe1, 0x5c, 0xc5, 0x68, 0xd9, 0x40, 0x22, - 0x1b, 0x25, 0xec, 0xc9, 0x4c, 0xe7, 0x96, 0xfb, 0x30, 0xb8, 0x0c, 0x67, - 0xbe, 0xcf, 0x2f, 0x6f, 0x5c, 0x42, 0xce, 0x38, 0x23, 0xe1, 0x82, 0xbb, - 0xd5, 0x6e, 0x0c, 0x57, 0xe9, 0xc9, 0x29, 0xf7, 0x30, 0xb9, 0xf2, 0xca, - 0x63, 0xf4, 0x90, 0x67, 0xdd, 0x51, 0x24, 0xac, 0x4f, 0x05, 0x44, 0xec, - 0xb3, 0x77, 0xcd, 0xb5, 0x9e, 0x98, 0xf3, 0xa9, 0xc9, 0x7a, 0xb0, 0x5a, - 0xac, 0x8b, 0x22, 0x52, 0x07, 0x27, 0xe3, 0x1e, 0x2d, 0xdd, 0x8e, 0xca, - 0xee, 0x1b, 0x61, 0x7f, 0xb0, 0xd3, 0x77, 0xe8, 0x29, 0xc8, 0xc1, 0x8f, - 0x60, 0x79, 0x0d, 0xdf, 0xac, 0x83, 0x1a, 0x76, 0x84, 0x23, 0x8a, 0x0e, - 0x17, 0xfd, 0x93, 0xaf, 0x77, 0x5c, 0x69, 0xa8, 0x44, 0x53, 0x83, 0xd2, - 0xcf, 0x46, 0x91, 0xf1, 0xca, 0x48, 0x8f, 0xcc, 0xc9, 0xd3, 0x7b, 0x73, - 0x86, 0xa3, 0xc7, 0x5c, 0x02, 0x8f, 0xe2, 0xac, 0x90, 0xa9, 0x38, 0x1f, - 0x57, 0xee, 0xc1, 0xde, 0x91, 0xc5, 0xa6, 0x0c, 0x70, 0xd4, 0x63, 0x08, - 0x04, 0x16, 0x8f, 0x53, 0x27, 0xba, 0x06, 0x75, 0x8e, 0xe7, 0x54, 0x6f, - 0xd9, 0x7d, 0xef, 0x6d, 0x42, 0xfb, 0x67, 0x99, 0xfb, 0x97, 0x8b, 0xe3, - 0x28, 0x88, 0xf2, 0x92, 0xcb, 0x78, 0x6e, 0x86, 0x85, 0x01, 0x59, 0x19, - 0x4b, 0x1c, 0x3f, 0x25, 0x6f, 0xd0, 0x6c, 0x58, 0x2f, 0xdb, 0x05, 0xeb, - 0xc3, 0x14, 0x06, 0x5c, 0xa0, 0x6e, 0x89, 0x4d, 0x81, 0x20, 0x55, 0xf3, - 0xba, 0xf0, 0x36, 0x4f, 0x66, 0x83, 0x3c, 0x8f, 0xe1, 0x34, 0xcc, 0x23, - 0xe2, 0x8b, 0x91, 0x03, 0x80, 0xa9, 0x88, 0x69, 0xa7, 0x97, 0xb6, 0x43, - 0x47, 0x17, 0xa2, 0x0f, 0x58, 0x41, 0x86, 0x60, 0xfc, 0x8f, 0x4f, 0xca, - 0x44, 0x0a, 0x79, 0x6b, 0x75, 0xfa, 0x65, 0x73, 0x9f, 0x17, 0xe1, 0x3d, - 0x53, 0xc8, 0x9b, 0x8c, 0x15, 0xf0, 0x91, 0x35, 0xe4, 0x04, 0x32, 0x8c, - 0x61, 0x46, 0xcd, 0x48, 0x6d, 0x34, 0xaf, 0xfb, 0x49, 0x92, 0xd0, 0xcb, - 0xb9, 0x9d, 0xcb, 0x53, 0x51, 0x67, 0xd2, 0x7e, 0x0a, 0xa3, 0x33, 0x02, - 0x99, 0x66, 0xf2, 0xdd, 0x63, 0x54, 0xe5, 0x5e, 0xa5, 0x2f, 0xd3, 0xf8, - 0x2c, 0xa6, 0x10, 0xe6, 0xba, 0x4a, 0xb4, 0x04, 0xc1, 0x9e, 0xe1, 0xe5, - 0x2e, 0xf6, 0xc0, 0x70, 0x10, 0x7a, 0x73, 0xff, 0xd8, 0x4a, 0x10, 0xc9, - 0x13, 0x29, 0xa8, 0x94, 0x41, 0xfa, 0xd1, 0xf8, 0xb7, 0xad, 0xad, 0xcf, - 0xd8, 0xaf, 0xf2, 0x4a, 0x72, 0x7b, 0xd3, 0xa5, 0x7d, 0xe8, 0x63, 0x17, - 0x76, 0x58, 0xf7, 0xdb, 0xc4, 0xc9, 0xa8, 0x96, 0x63, 0x48, 0xa7, 0xf4, - 0x46, 0x58, 0x8e, 0x64, 0x21, 0xc1, 0xcb, 0x66, 0x1d, 0xe4, 0x03, 0x3b, - 0xa9, 0x77, 0x5f, 0x15, 0x05, 0xac, 0x70, 0x80, 0x2b, 0xc8, 0x90, 0x9e, - 0xd9, 0xfc, 0xc3, 0xbb, 0xd4, 0xb6, 0x37, 0x24, 0x78, 0x45, 0x51, 0xff, - 0x2b, 0xd3, 0xe6, 0x13, 0x76, 0x73, 0x15, 0xf7, 0x39, 0xeb, 0x1f, 0xc8, - 0xd9, 0x4e, 0xe3, 0x6c, 0x9b, 0x6c, 0xe7, 0x3b, 0xe2, 0x2e, 0xec, 0x6a, - 0xc0, 0x50, 0xcb, 0x3e, 0xe8, 0xfb, 0x58, 0xb4, 0x72, 0xf4, 0x54, 0x38, - 0xc3, 0xf7, 0x43, 0x2d, 0xec, 0xd0, 0x85, 0x31, 0x27, 0xa2, 0x77, 0x0b, - 0x16, 0x26, 0xe6, 0x79, 0x4c, 0xc0, 0xd4, 0x49, 0x0f, 0x78, 0x8a, 0x63, - 0xca, 0x75, 0xeb, 0x15, 0x36, 0xce, 0xd3, 0x4f, 0x93, 0x95, 0xda, 0xa0, - 0x73, 0x25, 0x3a, 0xbd, 0xa4, 0x24, 0x5d, 0xb7, 0x55, 0x71, 0x5d, 0x09, - 0x4b, 0x1c, 0xf2, 0xd6, 0xf8, 0x36, 0x20, 0x82, 0x70, 0x33, 0xa1, 0x1f, - 0xb4, 0x17, 0xcc, 0xfd, 0xb8, 0xaf, 0xe7, 0x4a, 0x30, 0x35, 0xe1, 0x8c, - 0x38, 0x4c, 0x3c, 0x1c, 0xb0, 0xc0, 0x31, 0x98, 0x47, 0x84, 0x59, 0x67, - 0xbf, 0x6c, 0x57, 0x55, 0xe6, 0x0d, 0x82, 0x6b, 0xe2, 0xd0, 0xd2, 0x71, - 0x51, 0x4c, 0x83, 0x5d, 0xea, 0x17, 0xbf, 0xb9, 0xbb, 0x37, 0xdf, 0x30, - 0x3f, 0xe9, 0x85, 0x32, 0x06, 0xd5, 0xbb, 0x4a, 0xb7, 0xca, 0xab, 0xca, - 0x15, 0x65, 0x11, 0x35, 0x1b, 0x4b, 0xdb, 0x72, 0xd1, 0xbc, 0xc4, 0x55, - 0xd4, 0x8f, 0xa0, 0xb6, 0x70, 0x46, 0x9a, 0x07, 0x61, 0xee, 0xc7, 0xbb, - 0x8a, 0x93, 0xe7, 0x1f, 0xfc, 0x42, 0x77, 0x27, 0xcc, 0xff, 0x78, 0xa7, - 0x26, 0x08, 0x97, 0x93, 0x7a, 0xda, 0x32, 0xc8, 0x3d, 0xbb, 0x0d, 0x2c, - 0x77, 0x22, 0x1e, 0xd3, 0x37, 0x74, 0xe7, 0xb8, 0x00, 0x7c, 0x88, 0x08, - 0x9c, 0x93, 0xa6, 0x83, 0xea, 0x5c, 0xec, 0xdc, 0x3f, 0x6a, 0x87, 0x69, - 0x65, 0x9a, 0x03, 0xb1, 0xe4, 0x6d, 0xdc, 0x3a, 0x27, 0xad, 0x72, 0xcb, - 0x15, 0x7a, 0x10, 0x30, 0x4a, 0xe8, 0xfe, 0x0c, 0xfc, 0x54, 0x12, 0xfa, - 0xca, 0x24, 0x83, 0x28, 0xde, 0x87, 0xf2, 0x89, 0x78, 0x99, 0xa2, 0x28, - 0xce, 0xce, 0x30, 0x8e, 0x90, 0x6f, 0x6a, 0x75, 0x78, 0x84, 0xa5, 0x01, - 0x5c, 0x2c, 0x99, 0xc2, 0x93, 0x16, 0xa9, 0x0b, 0xc7, 0x4e, 0xa3, 0xb4, - 0xb3, 0x54, 0x5f, 0x06, 0x41, 0xe1, 0xd7, 0x43, 0xed, 0x52, 0xde, 0x5f, - 0x66, 0xf4, 0xb9, 0x67, 0xad, 0x07, 0xe8, 0x18, 0xaa, 0x6a, 0x7a, 0x0c, - 0xe6, 0x9b, 0xba, 0x76, 0xb4, 0x23, 0x06, 0x18, 0x27, 0x8f, 0x11, 0xba, - 0x4e, 0x30, 0xdd, 0x46, 0x00, 0xa9, 0xc1, 0x3b, 0x05, 0xe7, 0xdd, 0x5f, - 0xfb, 0x53, 0xe0, 0x62, 0x56, 0x12, 0x03, 0x61, 0x5e, 0xd9, 0x5d, 0x68, - 0x0d, 0x29, 0x89, 0x87, 0xb5, 0x37, 0x13, 0x6f, 0xa7, 0x8b, 0x68, 0x2f, - 0xcf, 0x0c, 0x30, 0xed, 0x0c, 0xda, 0x10, 0x9e, 0xf7, 0x5b, 0xa1, 0x99, - 0x30, 0xcb, 0xfa, 0xec, 0x53, 0x18, 0xe4, 0x40, 0x97, 0xbc, 0x13, 0x0b, - 0xa0, 0x07, 0x57, 0xf1, 0x5d, 0x57, 0xe5, 0x86, 0x67, 0x11, 0x17, 0xab, - 0x89, 0x93, 0xdc, 0x06, 0x92, 0x36, 0xd9, 0x9c, 0x78, 0xbd, 0xd6, 0xe1, - 0x4f, 0xb7, 0x7f, 0xd5, 0x89, 0x18, 0x4f, 0xc8, 0x7a, 0x2d, 0x3d, 0x01, - 0x26, 0x6b, 0xa0, 0xd3, 0xfa, 0xa7, 0x42, 0xf7, 0xf4, 0x9f, 0xcb, 0x77, - 0xc3, 0x40, 0x44, 0x55, 0x85, 0x36, 0xd5, 0x7d, 0xaf, 0x58, 0xac, 0x44, - 0x4e, 0x84, 0xfb, 0x86, 0x40, 0x8b, 0xea, 0x17, 0x73, 0x63, 0x65, 0xd2, - 0x27, 0xc0, 0x7b, 0x7f, 0x56, 0xd3, 0x30, 0xc1, 0xe0, 0x09, 0x49, 0x11, - 0xd7, 0x2b, 0x2c, 0x15, 0x3c, 0x8d, 0x57, 0xff, 0xb5, 0x22, 0x62, 0x31, - 0x66, 0x6f, 0x01, 0x93, 0xc7, 0x45, 0xd6, 0xdb, 0xa6, 0xba, 0x18, 0x0d, - 0x91, 0x1f, 0x33, 0x23, 0xb5, 0x77, 0x58, 0x56, 0xe7, 0xdd, 0x27, 0xa1, - 0xf8, 0x8d, 0x9f, 0x3f, 0xe5, 0x0b, 0x2f, 0xa4, 0x29, 0x4e, 0x3a, 0x47, - 0x98, 0xdd, 0x23, 0x02, 0x53, 0x6c, 0x27, 0xa3, 0x3e, 0xbe, 0x76, 0xac, - 0x8b, 0xe4, 0xbd, 0x7a, 0x7d, 0xe0, 0x35, 0xe6, 0x1b, 0xc9, 0x1c, 0xb1, - 0xf5, 0xfd, 0xa4, 0xee, 0xdd, 0x6d, 0x14, 0x37, 0x8f, 0x1a, 0x5d, 0xbe, - 0xa1, 0x6e, 0xed, 0xa4, 0x78, 0xc5, 0xaa, 0x1d, 0xf4, 0xc3, 0x5d, 0xd8, - 0x21, 0x40, 0xc4, 0xd7, 0x74, 0x15, 0x2c, 0x77, 0x0e, 0xb8, 0x79, 0x2d, - 0x3c, 0xb2, 0x42, 0xc8, 0x7d, 0x66, 0x3c, 0xe8, 0xab, 0xdd, 0xa5, 0x4a, - 0x09, 0x47, 0x15, 0x54, 0x92, 0x97, 0x4d, 0xf0, 0x85, 0x91, 0x08, 0x83, - 0x26, 0x44, 0xdd, 0xd3, 0x51, 0x28, 0xb4, 0x9b, 0xd5, 0x01, 0xac, 0x04, - 0x1a, 0x27, 0x16, 0x0c, 0xc7, 0x75, 0xc2, 0x10, 0x42, 0x66, 0x22, 0x53, - 0x6b, 0xa8, 0x3d, 0x72, 0xf9, 0xc5, 0x6a, 0x6b, 0xf7, 0x93, 0xb8, 0x1f, - 0x6e, 0xb3, 0x8b, 0x41, 0x55, 0xb2, 0x30, 0x5c, 0xc5, 0x00, 0xca, 0x7d, - 0x63, 0xeb, 0xbc, 0x30, 0xcd, 0x99, 0xbb, 0x80, 0xb8, 0x66, 0x90, 0x38, - 0x90, 0xb6, 0x4f, 0x4e, 0xab, 0x93, 0x5d, 0x53, 0xec, 0x57, 0x5c, 0xd3, - 0x53, 0x68, 0x8c, 0x99, 0xfa, 0x47, 0x23, 0xe1, 0x8e, 0x0f, 0x37, 0xff, - 0xdf, 0x96, 0xc2, 0x73, 0x91, 0x79, 0x06, 0x04, 0x94, 0xe9, 0xb3, 0xe7, - 0x7d, 0x30, 0xf4, 0x8d, 0x43, 0xdb, 0xc8, 0x3e, 0x25, 0x95, 0x8c, 0x8b, - 0x31, 0x6e, 0x5b, 0x6a, 0x32, 0x29, 0x93, 0xbd, 0x45, 0xea, 0x90, 0x39, - 0x7a, 0x82, 0xe5, 0x92, 0xbf, 0x61, 0x23, 0x3b, 0x5f, 0xcc, 0x81, 0x76, - 0x26, 0x20, 0xce, 0x28, 0x78, 0xe1, 0xe6, 0xb0, 0xc6, 0xe3, 0xa3, 0xb0, - 0x90, 0x62, 0x91, 0xa1, 0x8e, 0x47, 0x49, 0x23, 0xb9, 0xbb, 0x90, 0xc8, - 0xdc, 0x99, 0x63, 0xe8, 0x22, 0x10, 0xca, 0x46, 0xb3, 0xd0, 0x13, 0xd2, - 0x90, 0xac, 0x02, 0xb5, 0xba, 0x86, 0x3d, 0x46, 0x7f, 0xbe, 0xbc, 0x98, - 0x40, 0x67, 0xaa, 0x58, 0xa5, 0x73, 0xdf, 0xb3, 0x1f, 0x90, 0x9a, 0x09, - 0xa8, 0x57, 0x32, 0x13, 0x62, 0x95, 0xf1, 0x2b, 0xcd, 0x28, 0xf3, 0x61, - 0xf6, 0x4b, 0xad, 0x0b, 0xec, 0x10, 0xb8, 0x4c, 0x1f, 0x2f, 0x84, 0x02, - 0xea, 0x6c, 0x1b, 0xb3, 0x71, 0x93, 0x55, 0x95, 0xbd, 0xd0, 0xfa, 0x18, - 0x96, 0xd4, 0x78, 0x62, 0x89, 0x5f, 0xcb, 0x21, 0xad, 0x9c, 0xcf, 0xbc, - 0x80, 0xbb, 0x13, 0x0c, 0x1f, 0xad, 0xa9, 0x9d, 0x12, 0x57, 0x29, 0xc1, - 0xe1, 0xc4, 0x97, 0xd6, 0x65, 0xe9, 0xdc, 0xc3, 0x1b, 0xc3, 0x0d, 0x5e, - 0xe5, 0x5f, 0x12, 0xe8, 0xb2, 0x87, 0xd2, 0xc7, 0x57, 0x9b, 0x8a, 0xa8, - 0x63, 0xfb, 0x61, 0x42, 0x9f, 0x5b, 0xf6, 0xbb, 0xfe, 0x50, 0x39, 0x36, - 0x4d, 0x27, 0x70, 0x96, 0xe0, 0xc8, 0x6b, 0xa1, 0xe6, 0xd1, 0xe4, 0x35, - 0xad, 0x91, 0xb5, 0x20, 0x62, 0x3b, 0x97, 0x92, 0x94, 0xd1, 0xac, 0xa4, - 0xac, 0xf8, 0x54, 0x16, 0xf3, 0xf8, 0xa4, 0x15, 0x3d, 0x0e, 0x0d, 0x22, - 0x93, 0x11, 0xa4, 0x42, 0xa4, 0x55, 0xc4, 0x13, 0x9b, 0x95, 0x75, 0xf0, - 0xcb, 0x06, 0x12, 0x3f, 0x55, 0xbf, 0xe8, 0x04, 0x8e, 0x35, 0xa9, 0x10, - 0xa1, 0x09, 0x67, 0xe7, 0xd2, 0x65, 0xb9, 0x77, 0x3f, 0x2a, 0x43, 0xf6, - 0xae, 0xe1, 0xdb, 0x92, 0xbf, 0x25, 0x9f, 0x24, 0xb2, 0x42, 0x44, 0x65, - 0x35, 0xb4, 0x02, 0x74, 0x2d, 0x93, 0xe5, 0x33, 0xf2, 0x75, 0xae, 0xba, - 0x6e, 0xb9, 0x55, 0xeb, 0xb6, 0x60, 0x22, 0x24, 0xfd, 0xf3, 0x98, 0x32, - 0x25, 0x5e, 0xb9, 0x60, 0x82, 0xe8, 0x46, 0x0a, 0x68, 0x47, 0x5c, 0x65, - 0xd5, 0xa2, 0xe7, 0x29, 0x43, 0x80, 0x9f, 0x1d, 0x2d, 0xb2, 0x27, 0x67, - 0x39, 0x47, 0x19, 0xfe, 0xfa, 0x1b, 0x4a, 0x09, 0xee, 0xa1, 0xe7, 0x87, - 0xdf, 0xd7, 0xc4, 0xb8, 0x20, 0xff, 0x8b, 0xda, 0x42, 0x92, 0x41, 0x20, - 0xd5, 0xd1, 0x8b, 0xfb, 0x2a, 0xfd, 0x37, 0xa4, 0xc6, 0xaf, 0x68, 0xd8, - 0xae, 0xd5, 0xbc, 0xf9, 0x83, 0x88, 0xb4, 0xc7, 0x3d, 0x02, 0x99, 0x6c, - 0x5c, 0xc3, 0x56, 0xde, 0x7a, 0xb2, 0x2f, 0x59, 0xdb, 0x10, 0x1e, 0xf7, - 0x9f, 0xfb, 0x45, 0x81, 0x4b, 0x6e, 0xd4, 0x6e, 0x27, 0x1b, 0x4f, 0x06, - 0x9b, 0x35, 0x02, 0xe7, 0xbe, 0xca, 0x65, 0xd8, 0xa4, 0xcc, 0xe8, 0x99, - 0x36, 0xaf, 0x96, 0x98, 0xe4, 0x73, 0x75, 0x07, 0x5f, 0x09, 0xf5, 0x8a, - 0x2a, 0x39, 0x19, 0x9e, 0x24, 0xfa, 0x21, 0x78, 0x41, 0xb1, 0xab, 0x6e, - 0x8b, 0xeb, 0xa3, 0xd9, 0x0e, 0x9f, 0xf4, 0x43, 0x08, 0x36, 0xe3, 0xa2, - 0x46, 0x7a, 0x93, 0x0c, 0x3f, 0x56, 0x3d, 0x55, 0xbe, 0xb0, 0x04, 0x96, - 0x3f, 0x22, 0xcf, 0x89, 0x02, 0xac, 0xf3, 0x0f, 0x17, 0xbe, 0xbc, 0x6f, - 0x61, 0x2b, 0xfb, 0x5e, 0xf2, 0x21, 0x31, 0xdc, 0xdc, 0x51, 0xbf, 0x59, - 0x83, 0xf8, 0xb1, 0x72, 0x23, 0x07, 0xea, 0xea, 0xc9, 0x7a, 0xe7, 0x2e, - 0x9a, 0x45, 0x90, 0xa5, 0xb9, 0x1d, 0x09, 0x79, 0xaa, 0x66, 0xe6, 0xf8, - 0x59, 0x40, 0x79, 0x37, 0xc9, 0x24, 0xa2, 0x91, 0xa0, 0x1f, 0xa0, 0x68, - 0x7b, 0x91, 0x3c, 0x85, 0xa8, 0x23, 0xbc, 0xd8, 0x6c, 0x86, 0x5b, 0x76, - 0xa2, 0xdd, 0x28, 0x04, 0x46, 0x23, 0x63, 0xb6, 0xfc, 0x26, 0x51, 0xde, - 0x87, 0xd5, 0x98, 0xf3, 0x9f, 0xde, 0xd2, 0xee, 0xde, 0x6d, 0x17, 0x70, - 0x0e, 0xb4, 0x62, 0xb3, 0xfa, 0x96, 0x3a, 0xff, 0x6b, 0x16, 0x30, 0x0f, - 0x1f, 0xd7, 0x61, 0xb3, 0xf2, 0x62, 0x76, 0x4a, 0x36, 0x62, 0x63, 0x9f, - 0x79, 0x8c, 0xb8, 0x9d, 0x91, 0x81, 0x23, 0x37, 0x05, 0xfc, 0xd7, 0x69, - 0xac, 0x2b, 0xaf, 0x98, 0x47, 0xad, 0x81, 0x05, 0xc3, 0xec, 0xeb, 0xd1, - 0x9d, 0xbf, 0xe6, 0x82, 0xf1, 0x0b, 0x9a, 0x8a, 0x1c, 0xf5, 0xd4, 0xcc, - 0xf5, 0x6e, 0x67, 0xa4, 0xe1, 0xdb, 0x2f, 0x18, 0x7a, 0xf3, 0x8b, 0x24, - 0xac, 0xca, 0x71, 0xef, 0x42, 0x44, 0xb6, 0xd7, 0x17, 0xa4, 0x68, 0x22, - 0x67, 0x8e, 0xad, 0xe3, 0x92, 0x63, 0x40, 0xe0, 0xea, 0x91, 0x8f, 0x4c, - 0xe8, 0xc6, 0x2b, 0x4c, 0xca, 0x4b, 0x29, 0x12, 0xf4, 0xb6, 0x2b, 0xdf, - 0xd5, 0x50, 0x62, 0x64, 0x43, 0x87, 0x54, 0x87, 0x4e, 0x18, 0x0c, 0x51, - 0x07, 0x8f, 0xe6, 0x3f, 0x3f, 0xc2, 0xb9, 0x96, 0xee, 0xd0, 0x74, 0x2b, - 0x19, 0xab, 0x88, 0x7b, 0xb5, 0x78, 0x93, 0xc7, 0x04, 0x2e, 0x27, 0x64, - 0x78, 0x29, 0x7f, 0x0a, 0x37, 0x79, 0xbc, 0x6b, 0x1c, 0x7f, 0x97, 0x01, - 0xe8, 0x97, 0x35, 0xf3, 0xb6, 0x1c, 0xd2, 0xa1, 0x7f, 0x83, 0xb5, 0x44, - 0x62, 0xc0, 0x90, 0xc7, 0xd5, 0xa5, 0xd0, 0x80, 0x58, 0x5e, 0xaa, 0x80, - 0xb2, 0x62, 0x0e, 0xe3, 0xc1, 0xb5, 0x3f, 0x5c, 0x0b, 0x4f, 0xea, 0x4c, - 0x6c, 0x08, 0xcd, 0xe8, 0xd8, 0xb0, 0x50, 0x8a, 0xc7, 0x8d, 0x07, 0x74, - 0x9c, 0x41, 0x52, 0x42, 0x15, 0x15, 0x32, 0x3b, 0xa6, 0x04, 0x29, 0x30, - 0x3f, 0xf7, 0x7b, 0x1a, 0x13, 0x6e, 0x85, 0x90, 0xde, 0x95, 0x2f, 0x48, - 0x03, 0x5f, 0x2c, 0x3a, 0x0e, 0x8d, 0x77, 0x36, 0x25, 0xc5, 0x16, 0x6a, - 0xfb, 0x5c, 0x88, 0x86, 0xdf, 0x49, 0x81, 0xc5, 0x61, 0xef, 0xee, 0x27, - 0x64, 0xa5, 0x68, 0x56, 0xc4, 0x78, 0xe3, 0x41, 0x0e, 0x02, 0xd8, 0x58, - 0xe7, 0xbd, 0x79, 0xa8, 0x56, 0xdf, 0x18, 0x15, 0xb0, 0x64, 0x11, 0x5b, - 0x83, 0xdd, 0x6d, 0x7f, 0x0b, 0x96, 0xe0, 0x0a, 0x48, 0xc8, 0x9d, 0xf5, - 0x5c, 0xf0, 0x7d, 0xcd, 0x14, 0x83, 0xc0, 0x9a, 0x78, 0x34, 0xcc, 0xd7, - 0xa7, 0x11, 0x65, 0x85, 0xb8, 0x44, 0x3a, 0xa5, 0x89, 0x94, 0xd3, 0x44, - 0x60, 0xe9, 0xa3, 0xbf, 0xe2, 0xbf, 0xe4, 0xee, 0xc8, 0xcd, 0x2d, 0x7b, - 0xa9, 0xab, 0x8d, 0x90, 0x02, 0x34, 0x6f, 0xe5, 0x4c, 0xe7, 0xfc, 0xdc, - 0x1e, 0x95, 0xee, 0xc7, 0xa8, 0x06, 0xaf, 0x21, 0xda, 0x6e, 0x45, 0x12, - 0x0f, 0x06, 0x4e, 0x86, 0x0c, 0x97, 0x71, 0x8c, 0x40, 0x47, 0xd9, 0x2d, - 0x1e, 0x76, 0xed, 0xb7, 0xf2, 0x27, 0xe0, 0x5e, 0x7a, 0xa8, 0xb1, 0x88, - 0x40, 0xd8, 0xc2, 0x57, 0x51, 0x30, 0xc8, 0x02, 0x6b, 0xcd, 0x6b, 0xb7, - 0x35, 0x60, 0xd7, 0xd8, 0x70, 0x34, 0x79, 0x6f, 0x01, 0xaf, 0x26, 0xf0, - 0x13, 0x18, 0x1f, 0x39, 0x69, 0xfc, 0x75, 0xb7, 0x16, 0x8e, 0x7a, 0x40, - 0x64, 0xf3, 0x7f, 0xa9, 0x94, 0xa1, 0x50, 0xe4, 0x7c, 0xcf, 0x54, 0x08, - 0x04, 0x45, 0x8a, 0xfe, 0x9c, 0x6a, 0x03, 0x29, 0xea, 0x5d, 0x25, 0xcd, - 0xad, 0xfb, 0xd7, 0x14, 0xb8, 0xef, 0x1c, 0x50, 0xc6, 0xd6, 0xab, 0x5a, - 0x89, 0x5e, 0x57, 0x39, 0x01, 0xf0, 0xf2, 0x76, 0x18, 0x5f, 0x37, 0x1e, - 0xc7, 0x38, 0x63, 0x17, 0x1c, 0x88, 0x3f, 0xa9, 0x72, 0xb3, 0xd8, 0xfd, - 0xed, 0xe3, 0xee, 0x3c, 0xa7, 0xf1, 0xb6, 0x48, 0x3a, 0xf8, 0xb4, 0xe2, - 0x49, 0x7c, 0x78, 0x83, 0xe8, 0x98, 0xfd, 0xbb, 0x54, 0x2d, 0xa5, 0x9b, - 0xab, 0x8f, 0xd2, 0x21, 0xaa, 0x7d, 0x20, 0x7a, 0xb5, 0x97, 0x16, 0x33, - 0xba, 0xf7, 0x94, 0x8f, 0xd6, 0x30, 0x77, 0xda, 0x83, 0x67, 0x5a, 0xc7, - 0x79, 0x7b, 0x60, 0x8e, 0x5e, 0x50, 0x1a, 0x36, 0xd0, 0x6d, 0x03, 0x1c, - 0x32, 0xf9, 0x6c, 0xa7, 0xaf, 0x82, 0xcc, 0x4c, 0x27, 0x8c, 0xca, 0x23, - 0x67, 0x32, 0x39, 0xc0, 0x5c, 0x23, 0x71, 0xa4, 0x37, 0x38, 0xf0, 0xf8, - 0xa2, 0x16, 0x0e, 0x31, 0x42, 0xaf, 0x5d, 0x09, 0xff, 0x07, 0x71, 0x47, - 0x76, 0x6a, 0xb0, 0xd8, 0x27, 0x9e, 0x95, 0x49, 0x73, 0xf2, 0xea, 0x81, - 0xa2, 0xc4, 0xfb, 0x48, 0xa3, 0xf7, 0x6d, 0x5b, 0xd7, 0x68, 0x95, 0xfc, - 0x9d, 0x81, 0x98, 0x25, 0x56, 0xc8, 0x82, 0x40, 0x0a, 0xe1, 0x6a, 0xc0, - 0x80, 0xe8, 0x68, 0x4f, 0x18, 0x2f, 0x4a, 0xa3, 0xb4, 0x87, 0xa8, 0xc5, - 0xb3, 0xcf, 0xb3, 0xae, 0x40, 0x65, 0x55, 0x5c, 0x46, 0xd0, 0x20, 0xb3, - 0xae, 0x51, 0x99, 0xe2, 0xfd, 0x3a, 0x23, 0x67, 0xdd, 0x31, 0x75, 0xa1, - 0x38, 0x1a, 0x70, 0x9d, 0x1c, 0x50, 0xa6, 0xe6, 0xf6, 0x5a, 0x64, 0x6a, - 0x7f, 0xbd, 0x34, 0xa8, 0xba, 0xf6, 0x5e, 0x51, 0x3c, 0x16, 0x45, 0xfa, - 0x89, 0x4c, 0x8a, 0x4f, 0x6e, 0x55, 0xbb, 0xcc, 0xe7, 0x5f, 0x9f, 0xd7, - 0x65, 0x79, 0xa4, 0xe4, 0x9c, 0x1a, 0xf6, 0xba, 0x63, 0x98, 0x4e, 0xd2, - 0xa5, 0x50, 0x80, 0x8f, 0xed, 0xf5, 0xfc, 0x7e, 0x57, 0xc5, 0xe8, 0xdf, - 0x0e, 0xc6, 0xdc, 0x13, 0xbf, 0xab, 0xb6, 0x23, 0xc9, 0xb7, 0x6d, 0x8c, - 0xac, 0x45, 0x2f, 0x28, 0xa8, 0x01, 0xb2, 0x09, 0xf5, 0x8d, 0xcd, 0x34, - 0x72, 0x14, 0x12, 0x24, 0x2c, 0x47, 0x92, 0xa5, 0x1c, 0xb6, 0x42, 0x4b, - 0x0b, 0x1a, 0x1f, 0xb8, 0x2c, 0xcb, 0x0a, 0x7c, 0x04, 0x90, 0x9c, 0x21, - 0x39, 0xe1, 0x85, 0x0c, 0x83, 0xf8, 0xf0, 0xf6, 0xe5, 0xc5, 0x85, 0x62, - 0xaf, 0xb0, 0x92, 0xc1, 0x45, 0x81, 0xcc, 0xa8, 0x95, 0xdf, 0x97, 0xa2, - 0x65, 0x45, 0x38, 0x47, 0x42, 0xf6, 0x17, 0xf8, 0x2d, 0x3b, 0x82, 0x0e, - 0x6c, 0x15, 0xb0, 0xe3, 0xc6, 0x7f, 0x65, 0x40, 0x91, 0xbb, 0x6d, 0xac, - 0xdf, 0x57, 0x21, 0x91, 0x9b, 0x27, 0xd9, 0x33, 0x4e, 0x8c, 0x5f, 0x9a, - 0x56, 0xb7, 0x42, 0x84, 0x94, 0xdb, 0xe4, 0x8a, 0x45, 0xde, 0x0c, 0x90, - 0x15, 0x00, 0x3c, 0xd6, 0xd4, 0xcf, 0xd0, 0xec, 0xaa, 0xf1, 0x61, 0xe2, - 0x27, 0xe8, 0x34, 0xe0, 0x6f, 0x52, 0x97, 0xee, 0x0e, 0xd1, 0xbd, 0x15, - 0xe1, 0x53, 0x1d, 0xac, 0x42, 0xc7, 0x73, 0x3d, 0xd8, 0x72, 0x22, 0xbf, - 0x56, 0x28, 0xb6, 0x40, 0x37, 0x91, 0xe2, 0xbe, 0xeb, 0x56, 0xf1, 0x0b, - 0xcf, 0x1e, 0xd3, 0x5c, 0x40, 0x0d, 0x17, 0x07, 0x76, 0x6f, 0x03, 0x2f, - 0x81, 0x62, 0xee, 0xf3, 0xc0, 0xe3, 0xfc, 0x6c, 0x73, 0x73, 0x37, 0x5e, - 0x7d, 0xad, 0x07, 0x92, 0x1a, 0x23, 0x38, 0xb6, 0x07, 0x97, 0x35, 0x8e, - 0x9b, 0x95, 0x42, 0x8a, 0xf2, 0xbf, 0x5a, 0x46, 0xf8, 0x3b, 0x55, 0xfc, - 0xde, 0x79, 0xa6, 0xa4, 0x1b, 0xa8, 0xe9, 0xba, 0x7a, 0x97, 0x26, 0x18, - 0x8c, 0xac, 0x34, 0xa3, 0xd3, 0x2f, 0x55, 0x8a, 0xd9, 0xa6, 0x56, 0x86, - 0xd0, 0x76, 0x30, 0x9f, 0x30, 0x64, 0x57, 0xbd, 0x78, 0xf7, 0xaf, 0x25, - 0xef, 0x01, 0xdd, 0x99, 0xfe, 0x5c, 0x52, 0x40, 0x1d, 0xdb, 0x84, 0xb4, - 0x55, 0x8a, 0x29, 0x64, 0x50, 0x22, 0x66, 0xc4, 0xa2, 0xc5, 0x49, 0x74, - 0x37, 0x08, 0x36, 0xec, 0x6a, 0x5c, 0x7a, 0x95, 0x75, 0xca, 0xec, 0xc1, - 0x05, 0x13, 0x27, 0x4d, 0xd2, 0x03, 0xee, 0x7b, 0xe0, 0x0b, 0xbc, 0x9b, - 0x7d, 0x4b, 0x64, 0x67, 0x1f, 0x2c, 0x1c, 0x65, 0x6e, 0x1c, 0xea, 0x3a, - 0x45, 0x41, 0x70, 0xdb, 0xad, 0x08, 0x2c, 0x06, 0x70, 0x43, 0xa8, 0x6c, - 0xa5, 0x3e, 0xd1, 0x9d, 0x6b, 0x3f, 0x6f, 0x75, 0x0c, 0xeb, 0xdc, 0xc0, - 0x49, 0x33, 0x4b, 0x07, 0xc2, 0x00, 0x79, 0x88, 0x17, 0x79, 0x0e, 0x62, - 0x84, 0x12, 0x51, 0xc5, 0x3b, 0xed, 0xe7, 0x8f, 0x6c, 0xbe, 0x90, 0x9c, - 0xe5, 0xc1, 0x1d, 0x0b, 0x46, 0xd1, 0xdb, 0xa8, 0x57, 0xd7, 0xa0, 0x18, - 0xd9, 0xb5, 0x7a, 0x09, 0xb9, 0xd7, 0xae, 0xca, 0xa1, 0xfb, 0xcd, 0x7a, - 0x16, 0xe5, 0x4a, 0x1e, 0x88, 0x79, 0x7e, 0xfd, 0x6e, 0xaf, 0x56, 0xe9, - 0x80, 0x61, 0xe8, 0xaa, 0x14, 0xde, 0x43, 0x35, 0xb7, 0x58, 0xf1, 0xe2, - 0x03, 0x02, 0xcb, 0x9b, 0x14, 0x99, 0xcc, 0xba, 0x93, 0x27, 0x96, 0xc3, - 0x41, 0xcd, 0x06, 0xed, 0x81, 0x95, 0x64, 0x37, 0xb3, 0xfe, 0xd5, 0x4c, - 0xc5, 0x6a, 0x06, 0x61, 0xcb, 0xfa, 0x83, 0x40, 0xb7, 0x0e, 0x16, 0xa7, - 0xd4, 0x7e, 0x5f, 0xba, 0x60, 0xef, 0xd4, 0x7f, 0xaa, 0xaa, 0x6b, 0x33, - 0xfa, 0x3b, 0x78, 0x8d, 0xc8, 0x28, 0xf4, 0x07, 0xf6, 0xa7, 0x76, 0xf7, - 0x75, 0x8f, 0x78, 0x13, 0xb0, 0x7e, 0xb5, 0xb7, 0x87, 0x8a, 0x01, 0x6a, - 0x62, 0x1e, 0x78, 0xd4, 0xf2, 0x00, 0x49, 0x8e, 0x5f, 0x81, 0x19, 0x1a, - 0x09, 0x00, 0x06, 0x4c, 0x79, 0xa6, 0xfb, 0x43, 0x01, 0x93, 0x6f, 0xfa, - 0x1e, 0x3f, 0x51, 0xe4, 0x74, 0x4e, 0xcd, 0x04, 0x35, 0x23, 0xad, 0xa0, - 0x77, 0x77, 0x0e, 0x4c, 0xef, 0xf3, 0xa9, 0x41, 0x63, 0x9b, 0x26, 0xcf, - 0xa1, 0x6b, 0x8e, 0x30, 0x49, 0x2d, 0xb4, 0x47, 0xfe, 0x64, 0x4b, 0xc5, - 0xd7, 0xa4, 0x47, 0x8a, 0x97, 0x36, 0x57, 0xaa, 0xc4, 0x76, 0x98, 0x7a, - 0x49, 0x65, 0x7c, 0x3f, 0x44, 0xb8, 0xf8, 0x9a, 0x3b, 0x44, 0xf8, 0x24, - 0x36, 0x9e, 0x34, 0x66, 0xbd, 0x68, 0xb4, 0x8f, 0x90, 0xf0, 0x6c, 0x8f, - 0x77, 0x1a, 0x44, 0x15, 0x0e, 0xf1, 0x27, 0x82, 0x8e, 0xc4, 0x41, 0xaf, - 0x6e, 0x63, 0x37, 0xce, 0x0e, 0x18, 0x90, 0xa2, 0x9f, 0xb3, 0x1c, 0x19, - 0xbf, 0x20, 0xf6, 0xd6, 0x9d, 0xa7, 0x84, 0xe5, 0x76, 0xd8, 0xda, 0xd7, - 0x91, 0xa2, 0xe2, 0xca, 0xae, 0xa3, 0xcd, 0xe8, 0x2e, 0xc8, 0x9f, 0x90, - 0x0f, 0xfb, 0x55, 0xc9, 0x01, 0xa8, 0x86, 0x27, 0x65, 0x22, 0x9b, 0x0a, - 0x17, 0x73, 0xd0, 0xd6, 0x62, 0xe6, 0x2c, 0xf5, 0x6c, 0xab, 0x81, 0xfe, - 0x5b, 0xa6, 0xaa, 0x28, 0x86, 0x9d, 0x05, 0xbd, 0x26, 0x4e, 0x8c, 0xfe, - 0x72, 0x98, 0x57, 0x49, 0x2c, 0x45, 0x14, 0xbb, 0x87, 0x92, 0x4b, 0xd9, - 0x62, 0x5a, 0xf5, 0x7f, 0x5f, 0x4f, 0xff, 0xf4, 0x58, 0x91, 0xfb, 0xe5, - 0xf6, 0x82, 0xab, 0xad, 0x2c, 0x16, 0x1f, 0x0e, 0x66, 0x1e, 0x97, 0x97, - 0x3c, 0x18, 0x42, 0x33, 0x11, 0xa9, 0x22, 0x99, 0x08, 0x01, 0x07, 0x55, - 0xf2, 0x38, 0xf2, 0xff, 0x1e, 0x6f, 0xcb, 0x69, 0xf6, 0xc8, 0x1c, 0xae, - 0xac, 0xf7, 0x09, 0x17, 0x7c, 0x5b, 0x4c, 0x17, 0xa1, 0x94, 0x44, 0xa9, - 0x99, 0xc8, 0x94, 0x63, 0x46, 0x8b, 0x4f, 0x7e, 0x28, 0xf5, 0x23, 0x3e, - 0x44, 0x7f, 0xa8, 0x05, 0x38, 0x5a, 0x25, 0xc2, 0x10, 0xbd, 0x7a, 0x92, - 0xf9, 0xbb, 0x31, 0xb6, 0xd1, 0x39, 0x52, 0xdd, 0x63, 0x65, 0xe1, 0x68, - 0x6b, 0x4f, 0x9f, 0x3f, 0xfb, 0xa3, 0xcb, 0x10, 0xc6, 0xc4, 0x76, 0x6a, - 0x93, 0x65, 0x10, 0x24, 0x8f, 0xb2, 0x64, 0x13, 0x3e, 0xe5, 0x66, 0x87, - 0xfa, 0x96, 0x1b, 0x6d, 0x19, 0xfb, 0x2d, 0x37, 0x4e, 0x5a, 0xc5, 0xfe, - 0xcf, 0xea, 0x04, 0xf8, 0xf4, 0xd4, 0x15, 0x33, 0xf1, 0x26, 0xb1, 0x51, - 0x62, 0x9b, 0xfa, 0xca, 0xfb, 0xed, 0x40, 0x57, 0xd9, 0x9a, 0x93, 0x6c, - 0xa7, 0xe5, 0x56, 0xea, 0x16, 0x5d, 0x7c, 0xb1, 0xdb, 0xb4, 0x2e, 0x8d, - 0xf2, 0xad, 0x55, 0x77, 0x0e, 0xf6, 0x66, 0xb8, 0x2e, 0x4a, 0x09, 0x03, - 0x76, 0x80, 0x71, 0xe0, 0x93, 0x05, 0x19, 0xa7, 0x68, 0xf2, 0xd3, 0xb1, - 0xd0, 0x18, 0x35, 0x8b, 0x6e, 0xec, 0x49, 0x77, 0xc2, 0x67, 0x53, 0xf2, - 0x1b, 0xf7, 0x63, 0xca, 0x7d, 0xc7, 0xce, 0xa7, 0x70, 0xae, 0x11, 0x44, - 0xec, 0x71, 0x7e, 0x16, 0x0c, 0x4e, 0x9c, 0x23, 0xec, 0xad, 0xe7, 0x3d, - 0xe4, 0x14, 0xb2, 0xec, 0x1f, 0x85, 0xcf, 0x48, 0xde, 0x63, 0x71, 0xf3, - 0xbc, 0x68, 0xe4, 0x47, 0xaf, 0x10, 0x3e, 0x8d, 0x68, 0x36, 0x62, 0x10, - 0xc1, 0x23, 0x3d, 0x1d, 0x82, 0x1e, 0x2d, 0x57, 0xb6, 0x5e, 0xae, 0x96, - 0x37, 0xc5, 0x46, 0x0e, 0x78, 0x43, 0x4f, 0xbf, 0xd0, 0x6b, 0x2e, 0x85, - 0xc3, 0xf3, 0x06, 0x29, 0xc3, 0xc3, 0x45, 0x88, 0x0b, 0xeb, 0x4b, 0xb6, - 0xaf, 0x49, 0x6a, 0x57, 0xa5, 0xa4, 0xf1, 0x94, 0xf6, 0xfa, 0x18, 0x07, - 0xf9, 0xb3, 0x8c, 0x4a, 0x5c, 0x4f, 0xd5, 0x35, 0xba, 0x39, 0xb9, 0x91, - 0x81, 0x85, 0x48, 0x6f, 0xaa, 0x0f, 0x5d, 0x66, 0xf4, 0x21, 0x01, 0xcc, - 0x2a, 0x55, 0x33, 0xa4, 0xe5, 0x96, 0xd0, 0x07, 0x61, 0xc9, 0x68, 0xc2, - 0xb4, 0x59, 0x7a, 0x1f, 0xe1, 0x52, 0x8c, 0xe4, 0x1c, 0x2e, 0x22, 0xc7, - 0x22, 0xc1, 0x1d, 0x41, 0x96, 0xb3, 0xbe, 0x4b, 0xcd, 0x56, 0xb6, 0x7b, - 0x4c, 0x52, 0xdc, 0xc5, 0x0e, 0xe0, 0x1e, 0x1c, 0x78, 0x04, 0xd5, 0x1f, - 0x8e, 0xdf, 0xa6, 0x28, 0xa5, 0xee, 0x16, 0xcb, 0x60, 0x96, 0x4a, 0xf1, - 0x73, 0x20, 0xb6, 0x2d, 0x4a, 0x37, 0x3e, 0x4b, 0x7a, 0x3e, 0x20, 0x8c, - 0x21, 0xd9, 0x46, 0x1e, 0xd0, 0xd2, 0x2c, 0xba, 0x65, 0x88, 0x80, 0xda, - 0x72, 0x6b, 0x91, 0x40, 0xfb, 0x89, 0x3f, 0xa4, 0xc8, 0xec, 0xdc, 0x9d, - 0x54, 0x0c, 0x33, 0x57, 0x84, 0xc4, 0x33, 0xbe, 0x2a, 0x56, 0x11, 0x57, - 0x39, 0xd3, 0xef, 0x39, 0x44, 0x0b, 0xd9, 0x81, 0xe4, 0xd2, 0xca, 0xf2, - 0x9b, 0x5d, 0x7d, 0x33, 0x04, 0x0b, 0xb6, 0xf0, 0xc6, 0x73, 0x6a, 0xa1, - 0xc1, 0x2f, 0xc3, 0x94, 0x37, 0x87, 0xa8, 0x88, 0x45, 0x63, 0x13, 0x3c, - 0x1b, 0xdf, 0xc0, 0xd3, 0x21, 0x09, 0x13, 0xd3, 0xe7, 0x8a, 0xef, 0xaa, - 0x64, 0xc8, 0xcd, 0xf9, 0x94, 0x6d, 0x23, 0x98, 0x1a, 0x51, 0x6a, 0x62, - 0x79, 0xce, 0x1e, 0xdc, 0xec, 0x00, 0xa0, 0x66, 0x9c, 0x6b, 0x83, 0x19, - 0x40, 0xf5, 0xba, 0x5e, 0xb4, 0x5b, 0x3e, 0xaa, 0x35, 0x9d, 0xb6, 0xa4, - 0xe5, 0x49, 0x07, 0x69, 0xf7, 0x0f, 0xaa, 0x4c, 0xd2, 0x09, 0x4e, 0xeb, - 0x87, 0x33, 0xae, 0x07, 0x0b, 0xd4, 0xe0, 0xee, 0xdb, 0x72, 0x71, 0x07, - 0x6b, 0x16, 0x7d, 0x47, 0x1e, 0x92, 0x0e, 0xc9, 0xf8, 0xd0, 0xbb, 0x31, - 0x58, 0x26, 0x9b, 0x1c, 0xe5, 0x73, 0x95, 0xa7, 0xc2, 0xb4, 0x3b, 0x73, - 0x7a, 0x77, 0xb2, 0xda, 0x55, 0x96, 0x4d, 0xf4, 0xb9, 0xf2, 0x86, 0xd0, - 0x84, 0xab, 0x3c, 0x4f, 0x00, 0xd7, 0x9c, 0x61, 0x93, 0xc7, 0xa6, 0x09, - 0x3b, 0xfe, 0x9b, 0xaf, 0xb7, 0xd1, 0x63, 0xca, 0x15, 0x83, 0xde, 0xc4, - 0xc6, 0x97, 0x09, 0xa0, 0x52, 0x1b, 0xfa, 0x94, 0x7e, 0xed, 0xfc, 0x27, - 0xd1, 0x51, 0xf7, 0x38, 0x16, 0x7a, 0x78, 0xa0, 0x67, 0xba, 0x6c, 0xda, - 0x7b, 0x0f, 0x75, 0xfb, 0xe5, 0x13, 0xf8, 0xfb, 0x9a, 0x0f, 0x14, 0x80, - 0xb5, 0x06, 0x6d, 0x57, 0x37, 0xff, 0x8d, 0x4a, 0xca, 0xd2, 0x9f, 0x5c, - 0x61, 0x6a, 0xbe, 0x89, 0x15, 0xf7, 0x07, 0x95, 0x49, 0x71, 0xb9, 0x33, - 0x8a, 0xa2, 0xc3, 0xd2, 0x34, 0xa5, 0x67, 0x74, 0xc8, 0x8e, 0x19, 0xee, - 0xa2, 0x03, 0x0d, 0x4b, 0xbf, 0x88, 0xc4, 0x9c, 0xae, 0x70, 0x1b, 0xc9, - 0x84, 0x0a, 0x1d, 0x31, 0x68, 0x99, 0x98, 0x53, 0xe4, 0x78, 0x95, 0x8c, - 0xf7, 0xa8, 0x88, 0xf6, 0x75, 0xcf, 0xbf, 0x7c, 0x09, 0x57, 0x8a, 0x9b, - 0x64, 0x68, 0xb0, 0xeb, 0x95, 0x9b, 0xf3, 0x34, 0xae, 0x6a, 0x56, 0xe1, - 0x8a, 0x8a, 0x1b, 0x97, 0x4d, 0xe4, 0x38, 0x88, 0xe4, 0x36, 0x28, 0x59, - 0x1d, 0x72, 0xb3, 0xbf, 0xb2, 0x8b, 0x23, 0xe9, 0x4d, 0x26, 0xc9, 0xdf, - 0x4a, 0x44, 0xc9, 0xfe, 0xd6, 0xe5, 0xba, 0xda, 0x7f, 0xf9, 0x96, 0xfb, - 0xf0, 0xcf, 0xae, 0xee, 0x6e, 0x60, 0x0f, 0xec, 0xf4, 0xd2, 0x49, 0x49, - 0x65, 0x9f, 0xb9, 0x3d, 0x52, 0xee, 0x23, 0xb2, 0x88, 0x7c, 0xd0, 0x7f, - 0xb8, 0xee, 0x81, 0xe2, 0x24, 0x75, 0x8e, 0xcc, 0x39, 0x3c, 0xc7, 0x87, - 0x97, 0xa6, 0xc7, 0xb8, 0x6f, 0xff, 0x60, 0x73, 0x62, 0x27, 0x84, 0xf1, - 0x8d, 0xf6, 0xb2, 0xaf, 0x3b, 0x24, 0xce, 0xa7, 0x3a, 0x8f, 0xfb, 0x27, - 0x29, 0x64, 0x31, 0x81, 0x6e, 0x8b, 0x47, 0x08, 0x46, 0x6f, 0x96, 0x81, - 0x27, 0xe4, 0xf1, 0xef, 0x0a, 0x07, 0xab, 0xb9, 0xda, 0xd6, 0x26, 0xdd, - 0x73, 0x9c, 0xe4, 0x27, 0xcf, 0xd8, 0xfb, 0xb1, 0x13, 0x59, 0x28, 0x9f, - 0xbb, 0x44, 0x04, 0x97, 0x7a, 0x13, 0x02, 0xde, 0x18, 0x7d, 0x19, 0x38, - 0x15, 0x3a, 0xd8, 0x46, 0x9b, 0x57, 0x8f, 0x85, 0x2f, 0x69, 0xea, 0xd4, - 0x22, 0xf5, 0x3d, 0x57, 0xcb, 0x4f, 0xa9, 0x33, 0xa5, 0xae, 0x95, 0xda, - 0x2a, 0xa1, 0x55, 0xbc, 0x53, 0xcc, 0xc1, 0xce, 0x86, 0x12, 0x1a, 0x96, - 0x7b, 0x73, 0xfa, 0x97, 0xcf, 0xc5, 0x1a, 0x22, 0x50, 0xf1, 0x89, 0x42, - 0x23, 0x1b, 0xeb, 0x76, 0xc1, 0xf2, 0x4c, 0x45, 0xd8, 0xba, 0x6c, 0x8a, - 0x76, 0xc9, 0xe6, 0xae, 0xb6, 0xaa, 0x71, 0x79, 0x5c, 0x95, 0x6a, 0x8f, - 0x20, 0xfa, 0x96, 0xde, 0xf2, 0x1e, 0xc0, 0xef, 0x8d, 0xdb, 0xb0, 0xef, - 0xd0, 0xb2, 0x40, 0x71, 0x10, 0x67, 0x7a, 0xbd, 0xc5, 0x98, 0x56, 0x02, - 0x75, 0xf4, 0x03, 0x2e, 0xd2, 0x39, 0x26, 0x38, 0x85, 0x1e, 0x85, 0x10, - 0x46, 0xf4, 0x82, 0x1d, 0x0e, 0x74, 0xe3, 0x2a, 0x2f, 0x24, 0x36, 0x0a, - 0x29, 0xfb, 0x7a, 0x19, 0xfa, 0x2d, 0x93, 0xdc, 0xe3, 0x1f, 0x2a, 0x0c, - 0x2e, 0x2c, 0xbf, 0xb5, 0x6d, 0xc9, 0x94, 0x58, 0x5c, 0x02, 0xbc, 0x83, - 0xc4, 0xc5, 0xfe, 0x70, 0x6f, 0xa6, 0x0c, 0x47, 0x81, 0xfc, 0x5a, 0xbf, - 0x6c, 0x58, 0xca, 0xb4, 0xf6, 0x2e, 0x95, 0x63, 0x90, 0xf2, 0x15, 0x40, - 0x2e, 0x74, 0x3e, 0x4a, 0xd2, 0xd0, 0x3f, 0x8e, 0x87, 0x83, 0xac, 0x1f, - 0x22, 0xa0, 0x53, 0x66, 0x74, 0x4f, 0x57, 0x51, 0x3c, 0xba, 0x4a, 0x01, - 0xdf, 0xd9, 0xcc, 0x87, 0x70, 0xc2, 0xa3, 0x49, 0x2b, 0x9c, 0x9c, 0xa0, - 0xbf, 0x96, 0xb0, 0xc5, 0x52, 0xce, 0x58, 0x11, 0xa0, 0x6b, 0xf5, 0x3e, - 0x9a, 0x56, 0x6f, 0x48, 0x48, 0xf8, 0x28, 0x9e, 0x83, 0x92, 0xd9, 0xad, - 0x52, 0xbb, 0x20, 0x37, 0x12, 0x03, 0xf2, 0xac, 0xf9, 0xbf, 0x3a, 0x10, - 0xea, 0x42, 0xe0, 0x4b, 0x87, 0xb7, 0x41, 0xd5, 0xcb, 0x35, 0xf5, 0x06, - 0x49, 0xfa, 0x33, 0xf6, 0xae, 0x75, 0x04, 0x12, 0xde, 0xc0, 0x39, 0x69, - 0x6d, 0x11, 0xcb, 0x2c, 0x72, 0xd4, 0x5c, 0xde, 0x53, 0x44, 0xba, 0x57, - 0x7b, 0x84, 0x9c, 0xad, 0x77, 0x53, 0x35, 0x8f, 0x2c, 0x40, 0x34, 0x7d, - 0xfd, 0x8f, 0x84, 0x8e, 0xcf, 0x64, 0xd4, 0x15, 0x2c, 0x67, 0xb6, 0x8f, - 0xdf, 0x5e, 0xdc, 0x73, 0x7d, 0xef, 0x3f, 0xb3, 0x04, 0xa5, 0x37, 0x8c, - 0x71, 0x59, 0x39, 0xaf, 0x55, 0x10, 0x37, 0xcb, 0xae, 0x60, 0x3d, 0xb5, - 0x41, 0x45, 0x31, 0xb0, 0xcc, 0x56, 0x30, 0x68, 0x59, 0x68, 0xf1, 0x9f, - 0x04, 0xe4, 0xbc, 0xfe, 0x51, 0xfd, 0x49, 0x7c, 0x6a, 0xb1, 0xca, 0xb2, - 0x10, 0x72, 0xda, 0xdf, 0x8c, 0xb4, 0x44, 0x3d, 0x27, 0x66, 0x47, 0x31, - 0x26, 0x6d, 0x3e, 0x29, 0x39, 0x4e, 0x74, 0x9e, 0x4a, 0x7e, 0x5a, 0xfe, - 0x9c, 0xa9, 0x4a, 0x33, 0x89, 0x12, 0x24, 0x40, 0xec, 0xec, 0x20, 0x37, - 0xb8, 0xc7, 0xc2, 0xb4, 0xef, 0xfd, 0xf0, 0xbb, 0x13, 0x74, 0xad, 0x85, - 0xa9, 0xb9, 0x39, 0xe9, 0x05, 0x73, 0x98, 0xc3, 0xee, 0x18, 0x87, 0xaa, - 0x12, 0xf7, 0x65, 0x2f, 0xee, 0xaa, 0x3f, 0x38, 0xdb, 0xa6, 0x2e, 0xf6, - 0xbc, 0x33, 0x30, 0xfd, 0x6b, 0x02, 0xb2, 0xab, 0x6b, 0x27, 0x8c, 0x45, - 0x6c, 0x01, 0xf1, 0x9d, 0x03, 0xf4, 0x6d, 0x44, 0x75, 0x59, 0xf7, 0xda, - 0x59, 0x50, 0x69, 0xef, 0xe7, 0x90, 0xfe, 0xb1, 0x37, 0x6e, 0x0d, 0x73, - 0x3e, 0xb1, 0x93, 0x8e, 0x40, 0x45, 0x61, 0xe3, 0x73, 0xc7, 0xdd, 0x51, - 0x69, 0x31, 0xb2, 0x07, 0xdd, 0xa5, 0x17, 0x85, 0x85, 0xae, 0x33, 0xa9, - 0x54, 0xb3, 0xb8, 0xb6, 0xc3, 0xcd, 0x50, 0x4a, 0x35, 0x7c, 0xfb, 0x66, - 0xf7, 0x1a, 0x52, 0x1a, 0xdd, 0xd6, 0x92, 0x6d, 0xb0, 0xb4, 0x68, 0xd0, - 0x3c, 0xe9, 0x63, 0xd4, 0x1c, 0xfd, 0xfb, 0xa1, 0xc0, 0xb6, 0x31, 0x61, - 0xd4, 0xc1, 0x95, 0xd1, 0x0a, 0xef, 0x21, 0x84, 0x41, 0xce, 0xe3, 0xc7, - 0xce, 0xe8, 0x6e, 0x4e, 0x55, 0xb8, 0x96, 0x9a, 0x84, 0x6b, 0x22, 0x00, - 0xfc, 0xb6, 0xf8, 0x9e, 0x22, 0xeb, 0xae, 0xbc, 0x14, 0x5d, 0x18, 0x71, - 0x8f, 0x44, 0x03, 0x87, 0xe1, 0xf5, 0xd5, 0x84, 0x14, 0xc1, 0x73, 0xc0, - 0xa1, 0x22, 0x08, 0x4c, 0x49, 0xfe, 0x3f, 0xda, 0x23, 0xa0, 0x47, 0x2a, - 0x2c, 0xeb, 0xda, 0xe8, 0x18, 0xc0, 0x6e, 0x9e, 0xc2, 0x56, 0xcc, 0xbd, - 0x6a, 0x4b, 0x5a, 0xd2, 0xf2, 0xcb, 0x0c, 0xf8, 0xa0, 0xec, 0x82, 0xdf, - 0x41, 0x5c, 0x71, 0xc3, 0x6a, 0xfc, 0xc4, 0x3a, 0x7b, 0x97, 0x1e, 0x07, - 0x99, 0xe9, 0xa6, 0xeb, 0x67, 0x10, 0xcb, 0xd1, 0xed, 0xaa, 0x38, 0x77, - 0x8e, 0xd8, 0xfe, 0xd3, 0xb6, 0x31, 0x0c, 0xc3, 0xcf, 0x6f, 0xd5, 0xb5, - 0xd0, 0x5a, 0xab, 0xd9, 0x5a, 0x38, 0x28, 0x64, 0xba, 0x63, 0x34, 0xeb, - 0x19, 0x51, 0x93, 0x91, 0x21, 0x4f, 0x98, 0x7d, 0x3a, 0xd7, 0x1b, 0x2a, - 0x16, 0x15, 0xd9, 0xd4, 0x63, 0xa6, 0x71, 0x43, 0x74, 0x84, 0xd7, 0xbc, - 0x77, 0x39, 0x7b, 0xbb, 0x22, 0x4e, 0xc6, 0xe6, 0x4b, 0x51, 0x8f, 0x3d, - 0x15, 0x28, 0x6d, 0x18, 0x57, 0x26, 0x01, 0x84, 0x1a, 0xb5, 0xbc, 0xdc, - 0x7a, 0x22, 0xb2, 0xb7, 0xf7, 0xd9, 0xbf, 0x9f, 0x86, 0x2f, 0x44, 0x4c, - 0xb1, 0xd1, 0x87, 0x61, 0x3a, 0xcd, 0xd7, 0x08, 0x12, 0xed, 0x45, 0x76, - 0xd3, 0x64, 0x73, 0xf0, 0x87, 0xcc, 0xff, 0x10, 0x8e, 0x2b, 0x57, 0x45, - 0x9f, 0xcd, 0x69, 0x86, 0x2a, 0xe6, 0x92, 0xfe, 0x37, 0x86, 0x92, 0x32, - 0xc3, 0xde, 0xca, 0xa6, 0x9d, 0xf1, 0x3f, 0xd2, 0x44, 0xc5, 0xc2, 0x60, - 0xa8, 0x9a, 0x74, 0xb7, 0xb9, 0x20, 0x6b, 0x0c, 0xe3, 0xde, 0x40, 0xb8, - 0xda, 0xc9, 0x6b, 0x1f, 0x5b, 0x2e, 0xb6, 0x5d, 0xfc, 0x03, 0x36, 0x0b, - 0x9d, 0xcb, 0xdf, 0x11, 0x8f, 0x62, 0x18, 0xf6, 0x12, 0xb4, 0x7c, 0x7c, - 0xf2, 0x2f, 0x06, 0xe6, 0x47, 0x32, 0xf0, 0xce, 0xcd, 0xa7, 0x19, 0xfb, - 0x24, 0x32, 0xf4, 0xf0, 0xbf, 0xd5, 0xae, 0x1a, 0x0a, 0x55, 0x30, 0x2d, - 0x8c, 0xce, 0xdc, 0xa4, 0xf4, 0x9d, 0xce, 0x33, 0x24, 0x77, 0x82, 0x25, - 0x2f, 0xaf, 0x01, 0x32, 0x67, 0x20, 0x3c, 0x4e, 0xc9, 0x6d, 0xeb, 0x94, - 0x57, 0xbe, 0x59, 0x29, 0x10, 0x8a, 0x3f, 0x72, 0x2a, 0x8a, 0xa4, 0x5d, - 0x56, 0x3e, 0x9c, 0xca, 0x4e, 0xc9, 0xc7, 0xf6, 0xb4, 0x6b, 0xa1, 0xcd, - 0x72, 0xa1, 0x91, 0xa9, 0x2f, 0x32, 0xfb, 0xd2, 0x81, 0x2f, 0x2b, 0x27, - 0xb8, 0x54, 0x1d, 0x02, 0xef, 0xdb, 0x1e, 0xf1, 0x6a, 0xc3, 0x8c, 0x54, - 0x8b, 0x31, 0xec, 0x3c, 0x65, 0x34, 0xa4, 0x72, 0x15, 0x32, 0x35, 0xef, - 0x69, 0x4f, 0x87, 0xed, 0x78, 0x38, 0xc9, 0x53, 0x9b, 0x27, 0x42, 0x4e, - 0xcb, 0xe4, 0x12, 0x1b, 0x65, 0xe3, 0x7a, 0xcd, 0x3d, 0xba, 0xd2, 0xb2, - 0x48, 0xc0, 0x13, 0xdf, 0xa0, 0x02, 0x2e, 0xf2, 0x1a, 0x88, 0x69, 0xef, - 0x42, 0xcd, 0x84, 0x02, 0x50, 0x11, 0x3a, 0xef, 0x0f, 0x88, 0x91, 0x71, - 0x33, 0xcb, 0xa8, 0xaa, 0x71, 0x72, 0x40, 0xb8, 0xa5, 0x1e, 0xc9, 0xb4, - 0x1c, 0x58, 0xef, 0xbe, 0xe4, 0xda, 0x5e, 0xc2, 0xff, 0x5f, 0x36, 0xf9, - 0x7a, 0x68, 0x3d, 0xd3, 0xa8, 0x8f, 0x4e, 0x02, 0x2b, 0xf9, 0x8b, 0xf8, - 0x60, 0x34, 0x1c, 0x50, 0xfc, 0x6a, 0x41, 0x87, 0xe3, 0xe4, 0xb0, 0x50, - 0x19, 0x2e, 0x1c, 0x95, 0xb0, 0xa9, 0x11, 0x95, 0x69, 0x51, 0xe9, 0x6b, - 0x29, 0xd3, 0xd3, 0xca, 0x72, 0x33, 0x86, 0x95, 0xe1, 0x4f, 0x0d, 0xb6, - 0x9f, 0xa9, 0x4b, 0xaf, 0x1b, 0xa2, 0x15, 0x6f, 0xc0, 0x19, 0xbb, 0xeb, - 0x06, 0x25, 0x44, 0x1c, 0x0a, 0x0a, 0x1f, 0x4a, 0x5a, 0xa2, 0xbd, 0xec, - 0x46, 0x0c, 0x39, 0xfd, 0xb9, 0x8d, 0x6c, 0xcc, 0x1c, 0x54, 0x88, 0xf7, - 0xb4, 0x56, 0x90, 0xff, 0x32, 0xcd, 0x64, 0xee, 0xd2, 0x30, 0x5c, 0xab, - 0x0b, 0xa2, 0x3e, 0x0e, 0xd7, 0x09, 0x2e, 0x33, 0x5e, 0x2c, 0x89, 0xae, - 0x28, 0x24, 0x96, 0xd3, 0x8c, 0x82, 0x93, 0xfb, 0x19, 0x1d, 0xcf, 0x5b, - 0x33, 0xe5, 0x1f, 0x82, 0xe6, 0x26, 0x6d, 0xa8, 0xa1, 0xdf, 0x8d, 0x94, - 0x53, 0x01, 0x33, 0x63, 0x74, 0x28, 0xe7, 0xfb, 0xf7, 0x43, 0xf1, 0xee, - 0xf0, 0xbd, 0x08, 0x58, 0x9c, 0xdd, 0x5e, 0xaa, 0x38, 0x6c, 0x40, 0x41, - 0x32, 0xa7, 0x6b, 0xe1, 0x25, 0x8f, 0x01, 0x6e, 0xb0, 0xdb, 0x0e, 0x51, - 0x7f, 0x6d, 0x22, 0x79, 0x74, 0xc1, 0x34, 0x0b, 0x98, 0x06, 0xe7, 0xcf, - 0xff, 0x87, 0x27, 0x9a, 0x46, 0x48, 0xa4, 0xae, 0xd3, 0xc9, 0xe1, 0x5a, - 0xbd, 0xe8, 0xe9, 0xa2, 0x31, 0xe3, 0xb2, 0x58, 0x67, 0xf0, 0xc0, 0xbb, - 0xd8, 0xa7, 0x34, 0xa1, 0x71, 0x39, 0x24, 0x05, 0x54, 0xec, 0xc6, 0x59, - 0x5d, 0xf2, 0x8d, 0xd7, 0x74, 0x7c, 0x31, 0x23, 0x60, 0x75, 0xb7, 0xdb, - 0xf0, 0x0b, 0x03, 0x01, 0xe8, 0xf2, 0x97, 0xbf, 0x6e, 0xff, 0xa5, 0x9b, - 0x4a, 0xe3, 0x84, 0x49, 0x7f, 0x08, 0x95, 0xc2, 0x1f, 0x8c, 0xd6, 0x81, - 0xda, 0x69, 0x71, 0x48, 0x80, 0x87, 0x25, 0xdd, 0x89, 0x5e, 0x1c, 0x29, - 0xfe, 0x9a, 0xfe, 0x34, 0x32, 0x9c, 0x74, 0x27, 0x57, 0x53, 0xc0, 0x5c, - 0x12, 0xe7, 0x4d, 0xc7, 0xea, 0xb4, 0x6b, 0x48, 0xf7, 0xf2, 0x3b, 0x59, - 0xaa, 0x1f, 0x9b, 0x5f, 0xf9, 0xf7, 0xb8, 0x2b, 0x7f, 0x4f, 0x71, 0xba, - 0x18, 0xc1, 0x73, 0x37, 0xe4, 0xa8, 0x14, 0xe8, 0x69, 0xc6, 0x07, 0x80, - 0x93, 0x68, 0xec, 0x22, 0x69, 0xd8, 0xd3, 0x17, 0xd0, 0x66, 0x15, 0x80, - 0x81, 0xeb, 0x30, 0xde, 0xc6, 0xb4, 0x6b, 0xdd, 0x8c, 0xce, 0xbe, 0xcb, - 0x1a, 0x75, 0x83, 0x31, 0x20, 0xcf, 0x8d, 0x9f, 0x15, 0x25, 0xc8, 0x20, - 0x7b, 0x40, 0x3f, 0x12, 0x82, 0x75, 0xff, 0x76, 0x1a, 0x36, 0xfe, 0x66, - 0x7b, 0xae, 0x6f, 0xb0, 0x5c, 0x69, 0x2e, 0x1a, 0x55, 0xdc, 0x2a, 0x17, - 0x7c, 0xf6, 0x27, 0xf4, 0x76, 0xd6, 0xe5, 0x2f, 0x0d, 0x19, 0x23, 0x18, - 0x57, 0xc3, 0x96, 0x8f, 0x7c, 0xcf, 0xf6, 0x89, 0xdc, 0xb7, 0xa7, 0xa3, - 0x66, 0x2a, 0xc0, 0xf6, 0x07, 0x00, 0xcb, 0x13, 0x71, 0xd0, 0xbc, 0xd0, - 0x84, 0x94, 0x24, 0x51, 0xf5, 0x68, 0xeb, 0x8f, 0xeb, 0xc4, 0xb8, 0xa1, - 0xca, 0x4e, 0x3a, 0x85, 0xf2, 0xd9, 0x32, 0x22, 0xc5, 0xc4, 0x62, 0x1a, - 0xe0, 0xb6, 0x58, 0x7a, 0xd2, 0xb1, 0xd7, 0x44, 0x60, 0x8f, 0xc8, 0x9b, - 0xde, 0xfd, 0xa2, 0x29, 0x18, 0xab, 0x58, 0xf5, 0xf1, 0x35, 0xca, 0xe5, - 0x28, 0x46, 0xbc, 0x0d, 0x97, 0xf5, 0x53, 0xb4, 0x4d, 0xd1, 0x5d, 0xaf, - 0xf7, 0xa7, 0xaa, 0xd9, 0x26, 0xa8, 0x7a, 0x7f, 0x73, 0x8d, 0xf2, 0x6a, - 0x8a, 0x51, 0x8a, 0x31, 0x04, 0x6f, 0xd8, 0x79, 0x32, 0x5d, 0x52, 0xa8, - 0x9c, 0x6f, 0xdd, 0x70, 0x99, 0x0a, 0x8e, 0x76, 0xc7, 0x1f, 0x76, 0xeb, - 0x67, 0x65, 0xf7, 0x79, 0xfc, 0x58, 0xf4, 0xcf, 0x12, 0xd7, 0x19, 0x4d, - 0xb4, 0x23, 0xa9, 0x1f, 0xf1, 0x60, 0x70, 0xd0, 0x9a, 0x2d, 0xa5, 0xe4, - 0xde, 0x70, 0x0a, 0x72, 0xf7, 0x66, 0x31, 0x62, 0x2e, 0x85, 0x72, 0x6c, - 0x83, 0xce, 0x71, 0xb8, 0x68, 0xfd, 0x40, 0x76, 0xf9, 0x1d, 0xc9, 0x12, - 0x93, 0x51, 0xa4, 0xe1, 0xbc, 0x9c, 0xb5, 0x4d, 0x5e, 0x0e, 0x6b, 0xd5, - 0x33, 0x97, 0xb7, 0xa2, 0xe4, 0xd7, 0x92, 0x3c, 0x43, 0xe5, 0x0e, 0x7f, - 0x86, 0x75, 0x82, 0x29, 0x58, 0x4b, 0x28, 0xf2, 0x59, 0x56, 0x5e, 0x68, - 0x80, 0x2e, 0x7b, 0xb0, 0xd3, 0x66, 0x08, 0x3e, 0x79, 0x67, 0xf6, 0x84, - 0x6f, 0x9d, 0x97, 0x69, 0x14, 0x32, 0x3c, 0x15, 0x6e, 0xd5, 0x09, 0x2c, - 0x36, 0x46, 0xa1, 0x56, 0x65, 0x62, 0x25, 0xe4, 0x2c, 0xd7, 0x1d, 0x14, - 0xe3, 0x02, 0x17, 0xad, 0xcd, 0x5b, 0x84, 0xf7, 0xc6, 0xf9, 0xd3, 0xe6, - 0x8e, 0xbe, 0x05, 0xc5, 0x3e, 0x8b, 0xed, 0x5f, 0x05, 0x2a, 0x92, 0x71, - 0xe6, 0x0e, 0x1e, 0x92, 0x9a, 0xc5, 0x1c, 0x49, 0x15, 0x7f, 0x6f, 0xf4, - 0x40, 0xc9, 0x53, 0x58, 0xe8, 0x11, 0xd5, 0x8c, 0x14, 0xd8, 0xf0, 0x29, - 0x04, 0x0f, 0xbc, 0xfe, 0x41, 0x98, 0xc7, 0xf2, 0xb1, 0xf0, 0x2f, 0x9a, - 0x86, 0x82, 0xe9, 0x1b, 0x33, 0xbb, 0x91, 0x38, 0x5e, 0xf0, 0xfc, 0xba, - 0xca, 0x73, 0x9f, 0xcd, 0xfa, 0xf1, 0xfa, 0xe2, 0x5b, 0x8e, 0xe3, 0xea, - 0x53, 0x61, 0x3e, 0x06, 0x33, 0x0b, 0x85, 0x5e, 0x7e, 0xe1, 0xb2, 0x8a, - 0x3c, 0x1c, 0x5f, 0x00, 0x6c, 0xe9, 0x15, 0x82, 0xce, 0x27, 0x4d, 0xdf, - 0x3a, 0x09, 0xd3, 0x0a, 0xb2, 0x7d, 0xab, 0xf0, 0x1e, 0x99, 0xdf, 0xf6, - 0x82, 0x96, 0x03, 0x65, 0x38, 0x2e, 0x7b, 0xe2, 0x32, 0x92, 0x32, 0x0f, - 0xa7, 0x05, 0xef, 0xcc, 0x8d, 0x01, 0xcf, 0x1e, 0x1f, 0x1d, 0xa8, 0x72, - 0x25, 0x2c, 0x8b, 0x92, 0xaf, 0x56, 0xd0, 0xa8, 0x2f, 0x52, 0x47, 0xe0, - 0xf0, 0xc8, 0x41, 0xcb, 0x3b, 0xed, 0xc3, 0xb1, 0x7d, 0xc5, 0x0d, 0xe6, - 0x49, 0x59, 0xce, 0x01, 0xab, 0x69, 0xff, 0xcd, 0x4c, 0x7f, 0x6c, 0xf4, - 0xc6, 0x0d, 0x57, 0xfe, 0x28, 0xcc, 0x73, 0x10, 0x8f, 0x2d, 0xed, 0x3b, - 0x33, 0x5f, 0xee, 0xe0, 0x31, 0x7c, 0xd7, 0x80, 0xc1, 0x10, 0x23, 0xba, - 0xe2, 0xec, 0x50, 0x1f, 0xf1, 0x49, 0x40, 0xfe, 0x06, 0xd1, 0x84, 0x30, - 0xf5, 0xd4, 0xdc, 0x87, 0xf1, 0xee, 0xf7, 0xfd, 0xd3, 0xfe, 0x06, 0x6f, - 0xf5, 0xce, 0x96, 0xaf, 0xb1, 0x6a, 0xbc, 0xd2, 0xc1, 0xcd, 0x60, 0x19, - 0x15, 0x3d, 0x81, 0xba, 0x06, 0x84, 0x48, 0x21, 0x4f, 0xf6, 0xdd, 0x35, - 0xcd, 0xf7, 0x2e, 0x3d, 0x04, 0x7f, 0xd3, 0x84, 0xc9, 0x61, 0x21, 0x2f, - 0xe9, 0xd7, 0x6e, 0xae, 0x43, 0x35, 0x38, 0x46, 0x14, 0xcd, 0xe7, 0x86, - 0x8a, 0x0f, 0xc9, 0x9f, 0xdc, 0x6a, 0x18, 0x66, 0x37, 0x2d, 0x54, 0x3f, - 0xbf, 0x1f, 0x24, 0xd7, 0xd9, 0x0a, 0x5c, 0x8f, 0x05, 0x3e, 0xec, 0x81, - 0x07, 0xf1, 0xc3, 0xdb, 0xff, 0x7f, 0x52, 0xec, 0x62, 0xaa, 0xad, 0x4c, - 0x8e, 0x65, 0xc6, 0xc4, 0x0e, 0xdd, 0x9e, 0x56, 0x1a, 0xa6, 0x66, 0xad, - 0x7a, 0x43, 0xe4, 0xfb, 0x39, 0x09, 0x7b, 0x7f, 0x32, 0x6a, 0xbb, 0xdd, - 0x6c, 0x43, 0x48, 0x7e, 0x95, 0x51, 0x82, 0xdc, 0x84, 0x62, 0x50, 0x0b, - 0x7c, 0x3d, 0xfa, 0x3c, 0x35, 0x97, 0x01, 0xd7, 0x9b, 0xc4, 0xe2, 0x20, - 0x40, 0x2f, 0xb7, 0x03, 0x08, 0xda, 0x88, 0x29, 0x10, 0xc9, 0xb7, 0x64, - 0xba, 0x5d, 0xd6, 0x9e, 0xa5, 0x18, 0xd6, 0x8e, 0xf6, 0x97, 0x70, 0x1d, - 0xdb, 0x32, 0x29, 0x36, 0x79, 0xc2, 0x37, 0xc2, 0xdc, 0x1c, 0x4a, 0x04, - 0xba, 0x9f, 0x8d, 0x74, 0xfd, 0x34, 0xd0, 0xd5, 0xf4, 0xee, 0xc7, 0xb2, - 0xda, 0x82, 0x7a, 0x6e, 0x4e, 0x36, 0xb1, 0xc4, 0x87, 0xab, 0x59, 0x3d, - 0x97, 0x49, 0x3b, 0xa6, 0x98, 0x3b, 0xbd, 0x12, 0xf2, 0x40, 0x44, 0xaa, - 0xf1, 0x07, 0x4d, 0xa1, 0xff, 0x98, 0xca, 0xb0, 0x88, 0xae, 0x32, 0xcb, - 0xf3, 0x3d, 0x7e, 0x12, 0x2c, 0x2f, 0x8c, 0x75, 0x83, 0x6b, 0x4d, 0x66, - 0x3f, 0x93, 0x91, 0xd4, 0x73, 0x76, 0x0c, 0x2a, 0xed, 0x6a, 0xb0, 0x86, - 0x44, 0xfa, 0xe7, 0x1c, 0x89, 0x5b, 0x70, 0x33, 0x9c, 0x2f, 0x2b, 0xa9, - 0x3c, 0x9b, 0x58, 0xef, 0x60, 0xa0, 0x8b, 0xbb, 0x58, 0xda, 0x04, 0x38, - 0x10, 0x3a, 0x6c, 0x88, 0x64, 0x24, 0x97, 0x60, 0x04, 0x90, 0x9e, 0x72, - 0x97, 0x0d, 0x03, 0xf0, 0xf7, 0xfa, 0x26, 0xbf, 0xd7, 0xd1, 0x33, 0xa4, - 0x6f, 0x2b, 0xb9, 0xd0, 0xf7, 0x0b, 0xaf, 0xd7, 0x2c, 0x23, 0xb9, 0xfe, - 0x66, 0x46, 0x18, 0x6e, 0xb7, 0x0f, 0xdb, 0x93, 0x1b, 0x67, 0x86, 0xa6, - 0xb2, 0x57, 0x9b, 0x8f, 0xe0, 0xf2, 0x37, 0x4e, 0x09, 0xb6, 0x0b, 0x11, - 0xc7, 0x0c, 0x7d, 0x18, 0x57, 0x8b, 0xc4, 0x1f, 0xaa, 0x1b, 0x75, 0x9a, - 0xb7, 0x27, 0x8d, 0x59, 0x3b, 0xbb, 0x99, 0x30, 0xbb, 0x85, 0xde, 0x8f, - 0x22, 0x82, 0xa6, 0x50, 0xae, 0x48, 0xcb, 0x1e, 0x32, 0x3a, 0x22, 0x1f, - 0xed, 0x2a, 0x24, 0x47, 0x64, 0xd9, 0x66, 0x7a, 0x9a, 0xa5, 0x59, 0xfa, - 0x9f, 0x64, 0xd2, 0xc2, 0x65, 0x07, 0x0b, 0x82, 0xe7, 0xa7, 0x1e, 0x5f, - 0xed, 0x91, 0x9d, 0xc3, 0x79, 0x7f, 0x1a, 0xc9, 0x58, 0x6a, 0xfc, 0xe2, - 0x41, 0xf4, 0x3b, 0xdf, 0x3d, 0x0a, 0xb2, 0x2d, 0x46, 0x27, 0x57, 0x0f, - 0xfb, 0xc4, 0x36, 0x90, 0x66, 0xbf, 0x10, 0x14, 0x33, 0xed, 0x1d, 0xba, - 0xe7, 0xe5, 0xcb, 0x4c, 0xf5, 0xc6, 0x55, 0x18, 0x13, 0xba, 0xc5, 0xa1, - 0xac, 0xf6, 0xe2, 0x79, 0xd6, 0xb7, 0xb3, 0x8d, 0x93, 0x0d, 0xa0, 0x78, - 0x9e, 0xc0, 0x33, 0x08, 0x74, 0x7b, 0x57, 0xef, 0x29, 0xa0, 0x54, 0xdf, - 0xf6, 0x60, 0x63, 0xde, 0x5a, 0x2e, 0x9b, 0xf9, 0xf9, 0x24, 0x65, 0x78, - 0x86, 0xb7, 0xc1, 0xa7, 0xd8, 0x36, 0xe2, 0x9d, 0x42, 0xee, 0x76, 0xcd, - 0x00, 0x77, 0x90, 0xec, 0x5f, 0xc2, 0x1e, 0xd8, 0x2f, 0x4a, 0x31, 0x05, - 0x62, 0xd4, 0x2a, 0x8e, 0x33, 0x63, 0xce, 0xce, 0x16, 0x88, 0x50, 0x3f, - 0x26, 0x7d, 0x44, 0xad, 0xd9, 0xc5, 0xf4, 0xd3, 0xe7, 0x69, 0xfd, 0xb3, - 0x66, 0x76, 0x5f, 0xd5, 0x5d, 0xf7, 0x54, 0x77, 0xf9, 0x3c, 0x8c, 0xc0, - 0x61, 0x30, 0x54, 0x9a, 0x8b, 0x48, 0x92, 0x18, 0xdb, 0x96, 0x2b, 0xc7, - 0x84, 0x75, 0x10, 0x69, 0x61, 0x52, 0x6d, 0x1f, 0x1a, 0x2f, 0x09, 0x4b, - 0x07, 0x10, 0xec, 0x46, 0x1f, 0x97, 0x8f, 0xe7, 0x94, 0x82, 0x6b, 0x8f, - 0x72, 0x7d, 0x12, 0xca, 0x5a, 0x85, 0xec, 0x62, 0x62, 0x84, 0xba, 0x38, - 0xf5, 0xf4, 0x94, 0x3b, 0x63, 0xd9, 0xeb, 0x36, 0xb3, 0x9e, 0xbe, 0x76, - 0xb6, 0xa0, 0x0b, 0x76, 0x40, 0x4a, 0x84, 0xc0, 0x70, 0x3e, 0x0a, 0x1c, - 0x6f, 0x02, 0x55, 0x7d, 0x94, 0x0e, 0x1a, 0x3e, 0x8a, 0x5e, 0xf2, 0xc9, - 0xcb, 0xfd, 0x6b, 0xf1, 0xe4, 0xcf, 0xca, 0xa6, 0x26, 0x69, 0xc5, 0xba, - 0xdb, 0xa6, 0x54, 0x25, 0x44, 0xe0, 0x46, 0xaf, 0x06, 0xff, 0x05, 0x38, - 0x23, 0xb9, 0xfa, 0xf5, 0x63, 0xf8, 0x1c, 0x2d, 0xcd, 0x47, 0x03, 0xd9, - 0x38, 0x61, 0xbb, 0xcb, 0x84, 0x75, 0x2e, 0xf8, 0x77, 0x5d, 0x5a, 0x19, - 0x73, 0xbe, 0xb6, 0x06, 0x5a, 0x28, 0xc2, 0xc6, 0x49, 0xfd, 0xf0, 0xad, - 0x54, 0xc9, 0xbd, 0x1b, 0xd3, 0x24, 0x01, 0x42, 0x63, 0x75, 0x5b, 0xe4, - 0xce, 0x94, 0x61, 0x15, 0x05, 0xd5, 0x8e, 0x7a, 0xa3, 0xc7, 0xd7, 0x6f, - 0xbc, 0x61, 0xf6, 0x96, 0x59, 0xc8, 0x7b, 0x7f, 0x2c, 0x63, 0x8e, 0x17, - 0xbc, 0x34, 0x2f, 0xfd, 0xf8, 0x2a, 0x51, 0x8a, 0x89, 0x2e, 0xa1, 0xdc, - 0x7e, 0xa9, 0xb5, 0xc7, 0xc6, 0x1f, 0xb4, 0x0d, 0x31, 0x85, 0x2d, 0x05, - 0x71, 0x1e, 0xeb, 0xdf, 0xda, 0xed, 0x55, 0x84, 0xd3, 0xf9, 0x3e, 0x1f, - 0xb7, 0x71, 0x58, 0x93, 0x68, 0x3b, 0xd8, 0x76, 0xc3, 0x0e, 0xee, 0xb6, - 0x35, 0x87, 0x10, 0x2e, 0x56, 0x70, 0x1f, 0x68, 0x1a, 0x2b, 0x38, 0x00, - 0x97, 0x5f, 0xdf, 0x8c, 0x43, 0x5e, 0xc8, 0x6b, 0xbe, 0xfd, 0x5c, 0x6d, - 0xa5, 0x38, 0x8a, 0x2f, 0x63, 0x77, 0xb6, 0x42, 0xbb, 0x7f, 0x65, 0xd6, - 0xeb, 0xe3, 0x96, 0x40, 0xd3, 0xee, 0x09, 0xd7, 0xa9, 0xad, 0x17, 0xb3, - 0xa9, 0x1e, 0xff, 0x5e, 0xcb, 0x5f, 0xfe, 0xcb, 0x03, 0xf8, 0x4e, 0x6f, - 0xd7, 0xbd, 0x89, 0x4c, 0x05, 0xa5, 0x6c, 0x77, 0xb3, 0x71, 0x37, 0x0b, - 0x79, 0x8b, 0xf0, 0x59, 0xfd, 0xff, 0x1f, 0xb8, 0x69, 0x6d, 0xdb, 0x09, - 0x13, 0x75, 0xc2, 0x31, 0x9a, 0xd7, 0x9f, 0x69, 0x2b, 0xff, 0x42, 0x16, - 0x51, 0xcd, 0x25, 0x83, 0x7d, 0xdf, 0x6e, 0x27, 0x14, 0x28, 0xae, 0xb5, - 0x85, 0x01, 0x9d, 0x84, 0x54, 0x99, 0x46, 0xa6, 0xcb, 0x36, 0xfa, 0x36, - 0xe7, 0xf0, 0x03, 0xc0, 0x30, 0x5e, 0xc6, 0xbe, 0x29, 0x1a, 0x5a, 0xeb, - 0x43, 0x47, 0x31, 0xdd, 0x43, 0x7b, 0x84, 0xbb, 0x28, 0xe3, 0xe2, 0x5c, - 0x2d, 0xdc, 0x15, 0x88, 0x58, 0x0a, 0xbf, 0xe0, 0xf0, 0x16, 0xf6, 0x79, - 0x72, 0x5e, 0x23, 0x8c, 0xb0, 0xb9, 0x0e, 0xb6, 0xbe, 0x35, 0xe4, 0xe1, - 0x60, 0x5e, 0xe2, 0xd6, 0xb4, 0x31, 0xc6, 0x49, 0xfe, 0xd4, 0x72, 0x47, - 0xd8, 0xff, 0xf5, 0x6e, 0x19, 0xe6, 0x2c, 0x41, 0x19, 0xd2, 0xd3, 0x17, - 0xb6, 0xd8, 0x90, 0xad, 0xee, 0x1f, 0x14, 0x0c, 0xee, 0xa1, 0x1d, 0x6b, - 0x2d, 0xe9, 0x77, 0x7f, 0xd9, 0xc6, 0xf5, 0xf1, 0x30, 0x08, 0x82, 0xf4, - 0xb2, 0x56, 0x65, 0xc4, 0xf3, 0xbf, 0x8b, 0x7e, 0xe6, 0xbd, 0x4f, 0x55, - 0xd7, 0xfe, 0xe9, 0x04, 0x73, 0x4b, 0x66, 0xa5, 0x87, 0xe9, 0x7a, 0x36, - 0x30, 0x30, 0xe9, 0x36, 0x83, 0xe3, 0x14, 0x57, 0xe3, 0xa0, 0xc3, 0x7a, - 0xc3, 0x4f, 0x38, 0x0d, 0x04, 0x56, 0x9e, 0x4b, 0x30, 0xbd, 0xba, 0x7f, - 0xd9, 0x2b, 0xdc, 0x45, 0xcb, 0xb5, 0xaf, 0x01, 0xc2, 0x29, 0x09, 0x3e, - 0x40, 0xbf, 0xcd, 0xaa, 0x7e, 0xe0, 0xbe, 0x9c, 0x8d, 0xde, 0x09, 0x35, - 0xb5, 0xd6, 0x40, 0x1b, 0xcc, 0xc8, 0xaf, 0x75, 0x33, 0xd9, 0x10, 0xe2, - 0x55, 0x42, 0x09, 0xca, 0x74, 0x35, 0xb6, 0xd0, 0x19, 0xba, 0xda, 0x47, - 0xbd, 0x42, 0x19, 0x92, 0x7d, 0x8f, 0x6e, 0xc4, 0x91, 0x76, 0x13, 0xf0, - 0x2c, 0xd6, 0xa0, 0x5c, 0x9e, 0xff, 0x28, 0x97, 0xd3, 0x57, 0x63, 0xe5, - 0x20, 0x9c, 0x1e, 0x31, 0x45, 0x3f, 0xec, 0x1a, 0xd8, 0xff, 0xd0, 0xc2, - 0xef, 0x22, 0xed, 0xc7, 0xee, 0x8c, 0xc5, 0xa2, 0xd6, 0xad, 0x38, 0x0f, - 0xc2, 0xe3, 0xdf, 0x72, 0x35, 0xe9, 0xe1, 0xeb, 0x2f, 0xb8, 0xf5, 0x18, - 0xe1, 0x6d, 0xe2, 0x22, 0x24, 0x42, 0xf1, 0x18, 0x2e, 0xf5, 0x7b, 0xff, - 0xf2, 0x17, 0xd1, 0x8a, 0x51, 0x25, 0x55, 0x82, 0xbd, 0xb5, 0xa2, 0x78, - 0x76, 0x32, 0xe0, 0xa5, 0x47, 0x2d, 0x5a, 0x88, 0xaa, 0x47, 0xde, 0x06, - 0xb8, 0xec, 0x76, 0xbc, 0x88, 0x1b, 0xc8, 0x7d, 0x9c, 0xe7, 0x9d, 0x6d, - 0xe3, 0x09, 0xd3, 0xc8, 0xeb, 0x78, 0x1c, 0xc3, 0x00, 0xe5, 0x17, 0x49, - 0xfd, 0xf3, 0x6d, 0x84, 0x21, 0xcc, 0x6f, 0xbb, 0x8b, 0xdb, 0xc0, 0x56, - 0x90, 0x0e, 0x32, 0xbd, 0xa5, 0xed, 0xd5, 0xb5, 0xf3, 0xd1, 0x37, 0x2d, - 0x6f, 0x47, 0xd7, 0xba, 0xb7, 0xbf, 0x58, 0x09, 0xbe, 0x07, 0x46, 0x96, - 0xd4, 0xcc, 0xcb, 0xfd, 0x6a, 0xa0, 0x56, 0x39, 0xea, 0xe4, 0x67, 0xc1, - 0xc6, 0x0a, 0xb3, 0x55, 0xb8, 0xb3, 0xc1, 0x99, 0xbf, 0x52, 0x23, 0x84, - 0x63, 0x31, 0xeb, 0xfc, 0x53, 0x5d, 0x58, 0x2a, 0x00, 0x00, 0xaa, 0x5a, - 0x11, 0xc2, 0x30, 0x54, 0xb6, 0x2f, 0xba, 0x10, 0xe5, 0x3e, 0xf3, 0xb7, - 0x46, 0xbd, 0xbe, 0x8e, 0x08, 0xf6, 0x89, 0xf1, 0x18, 0x05, 0x95, 0xba, - 0x2d, 0xad, 0xaf, 0x64, 0x58, 0x98, 0x86, 0x6d, 0xa7, 0x48, 0xbb, 0xf1, - 0xb4, 0xab, 0x14, 0xa1, 0x09, 0x98, 0xcc, 0x9f, 0xcb, 0x7f, 0xba, 0x39, - 0xb5, 0x8d, 0x93, 0xd7, 0x03, 0x48, 0x86, 0x29, 0x7c, 0x69, 0x17, 0xc5, - 0xa6, 0xa0, 0xe5, 0xce, 0x90, 0x8a, 0x7d, 0xd7, 0xb8, 0xf7, 0x55, 0x63, - 0x06, 0x88, 0xe8, 0x04, 0x51, 0x88, 0xf8, 0x8b, 0xb5, 0x99, 0x2b, 0x7d, - 0x52, 0x5d, 0x23, 0x2d, 0xa2, 0x19, 0xcd, 0x31, 0x55, 0x30, 0x3e, 0xd4, - 0x8a, 0xfb, 0x6a, 0x5b, 0x99, 0xb7, 0xfb, 0xc1, 0x03, 0x98, 0xf0, 0x53, - 0x5c, 0xb1, 0x5e, 0x4b, 0x47, 0x8a, 0x9c, 0x21, 0xeb, 0x77, 0x44, 0x96, - 0xc3, 0x4f, 0x56, 0x01, 0x65, 0x7e, 0x93, 0x37, 0xaa, 0x0e, 0x97, 0xce, - 0x3d, 0xf2, 0xb1, 0x69, 0x93, 0x5e, 0x95, 0x6f, 0xe9, 0x27, 0xbc, 0x9c, - 0x45, 0xa5, 0x16, 0xec, 0xb4, 0xc8, 0xfa, 0x41, 0x0e, 0x6e, 0x79, 0x0a, - 0x0f, 0x6d, 0x9d, 0x6e, 0x4c, 0x07, 0x6b, 0x35, 0x6f, 0x0c, 0x4c, 0x65, - 0x2f, 0x48, 0x87, 0x3e, 0x47, 0x41, 0x9d, 0x5e, 0xe4, 0x7a, 0xd1, 0x54, - 0xd2, 0xd6, 0x45, 0x04, 0x4d, 0xde, 0xb2, 0x1f, 0x3f, 0x91, 0xac, 0x15, - 0x3a, 0x38, 0xf8, 0x6e, 0xe5, 0x29, 0xc6, 0x96, 0xa4, 0x61, 0xae, 0xf6, - 0x52, 0x89, 0x63, 0x96, 0x7d, 0xd5, 0x5d, 0x07, 0x15, 0x18, 0x11, 0xba, - 0x07, 0x59, 0xb4, 0xe4, 0x10, 0x5b, 0xfe, 0x08, 0x3e, 0xab, 0xad, 0xfc, - 0x32, 0x70, 0x84, 0xa4, 0xdc, 0x69, 0x69, 0xc9, 0x10, 0xb8, 0x1a, 0x7b, - 0x55, 0xd9, 0x44, 0xe5, 0x53, 0xf5, 0x2c, 0x46, 0x82, 0x1d, 0xac, 0xfd, - 0x6f, 0xc4, 0x65, 0x12, 0x69, 0xc7, 0x2a, 0x85, 0x95, 0x77, 0x54, 0x23, - 0x7b, 0xdd, 0x7c, 0x55, 0x76, 0x9e, 0x17, 0x66, 0x3b, 0xda, 0xf7, 0xd1, - 0xf0, 0x7a, 0xd4, 0x28, 0x07, 0x10, 0x8d, 0x5b, 0xab, 0x63, 0x91, 0x3b, - 0x6e, 0xa6, 0xa2, 0xae, 0x10, 0x87, 0x4b, 0xe2, 0x82, 0x1b, 0xfa, 0x12, - 0xb8, 0xff, 0xaf, 0x0f, 0x57, 0xa9, 0x01, 0x98, 0xc0, 0x2f, 0x6b, 0x71, - 0x1e, 0xc3, 0x63, 0x40, 0x4f, 0x3a, 0xf8, 0xd1, 0x68, 0x50, 0x58, 0x64, - 0x5f, 0x97, 0xe8, 0x3d, 0x7c, 0xcf, 0x71, 0x55, 0xcf, 0x7b, 0xea, 0xf5, - 0x97, 0x2a, 0x45, 0x6d, 0xcb, 0x7f, 0xc6, 0x74, 0x27, 0x9f, 0xc4, 0xea, - 0x30, 0x3d, 0x1a, 0x05, 0x88, 0x90, 0xcf, 0x0e, 0x7f, 0xdf, 0xcd, 0xe5, - 0x09, 0x8b, 0x4f, 0x0f, 0x83, 0xe9, 0x74, 0x47, 0x76, 0x5f, 0x9b, 0xd4, - 0x01, 0x14, 0x4c, 0x96, 0xcb, 0x9c, 0xde, 0x02, 0xc9, 0x95, 0x4e, 0x7b, - 0x97, 0x8a, 0x90, 0x62, 0x68, 0x52, 0x05, 0x61, 0xc8, 0x25, 0x89, 0x95, - 0x90, 0xd8, 0x08, 0xe8, 0xa6, 0xf9, 0x66, 0x94, 0x7c, 0xad, 0xe9, 0x3e, - 0x32, 0x0f, 0xe3, 0xac, 0x2d, 0xd0, 0x3b, 0xc7, 0x56, 0x01, 0x52, 0x3c, - 0x61, 0x51, 0x0b, 0xb3, 0x66, 0x75, 0x80, 0xe1, 0x6b, 0xd8, 0x95, 0xea, - 0x88, 0x90, 0x69, 0x43, 0x69, 0xd6, 0xc5, 0x04, 0x39, 0x6c, 0xe4, 0x0a, - 0x7c, 0x54, 0xcb, 0xcb, 0x35, 0x7c, 0xbe, 0x8c, 0x8f, 0x3c, 0xb0, 0x16, - 0x6f, 0xa6, 0x60, 0x52, 0xca, 0x0f, 0x1d, 0x23, 0x87, 0x38, 0x44, 0xbd, - 0x4e, 0xd7, 0xb8, 0x07, 0x2d, 0xc9, 0xdd, 0x45, 0xea, 0xca, 0x0c, 0x0e, - 0x2f, 0x6a, 0x28, 0xad, 0x94, 0xde, 0xc3, 0x8a, 0xce, 0x97, 0x9b, 0xb0, - 0x03, 0xe0, 0x3d, 0xb9, 0xc9, 0xe9, 0x1a, 0x69, 0xa6, 0xf7, 0xcb, 0x29, - 0x6a, 0xe7, 0xb4, 0xfa, 0xc5, 0xad, 0x45, 0xe2, 0x32, 0x73, 0xb2, 0x2e, - 0x0b, 0xc1, 0xf3, 0xbe, 0x54, 0xb6, 0xf5, 0xc4, 0xda, 0x15, 0x8a, 0x1f, - 0x90, 0x8b, 0x7a, 0x62, 0x77, 0x70, 0x01, 0xc6, 0x60, 0xbc, 0x90, 0x87, - 0x64, 0x3f, 0xea, 0x56, 0x6d, 0xe2, 0x53, 0xa0, 0x3c, 0xee, 0x41, 0x0c, - 0x37, 0xeb, 0x7e, 0x2e, 0x0a, 0xec, 0x73, 0x02, 0x09, 0xce, 0xbd, 0x04, - 0x0e, 0xfc, 0x05, 0x9f, 0x0e, 0xdf, 0x80, 0x17, 0x50, 0xb9, 0xe3, 0xb9, - 0x4f, 0xff, 0x19, 0xc5, 0x6b, 0x74, 0x43, 0xdc, 0x2b, 0x00, 0xdc, 0xca, - 0x26, 0x97, 0xae, 0x9f, 0x39, 0xb3, 0x4f, 0x56, 0x60, 0x5f, 0x8b, 0x24, - 0x16, 0x69, 0xff, 0x4c, 0xe9, 0x2e, 0x91, 0x48, 0xa6, 0x09, 0xda, 0xcf, - 0x72, 0x56, 0x45, 0xb7, 0x29, 0x87, 0x78, 0xbb, 0x29, 0xe0, 0x78, 0x04, - 0xfd, 0xad, 0x91, 0x77, 0xe5, 0xe9, 0xd9, 0x42, 0x16, 0xbf, 0xfb, 0x14, - 0xb7, 0x54, 0xd1, 0x56, 0x4d, 0x4f, 0x0c, 0x42, 0x02, 0x9a, 0xdc, 0xea, - 0x21, 0x7a, 0x24, 0x7c, 0x1b, 0xbf, 0x74, 0x3c, 0x39, 0x1f, 0x96, 0x34, - 0x6e, 0xaa, 0x7b, 0xcb, 0x5f, 0x11, 0x72, 0x76, 0x96, 0x62, 0x17, 0xd8, - 0x28, 0x4d, 0x32, 0x19, 0x74, 0x0f, 0xb0, 0x59, 0xe8, 0x4d, 0x93, 0x68, - 0x3e, 0x38, 0x71, 0x84, 0x6e, 0x80, 0xfc, 0x96, 0x0a, 0x56, 0xfa, 0x3b, - 0x93, 0x2d, 0x84, 0x57, 0xb6, 0xac, 0x18, 0xe9, 0x07, 0x07, 0xa8, 0x45, - 0xed, 0x54, 0xd3, 0xdf, 0x53, 0x3a, 0x48, 0xcf, 0xbe, 0x49, 0x8f, 0xf8, - 0xbb, 0xe4, 0xf8, 0xe1, 0x7e, 0x83, 0xcc, 0xda, 0x26, 0xea, 0xba, 0x99, - 0xe4, 0x23, 0x0f, 0xd0, 0xd0, 0x61, 0xd9, 0x6b, 0xa0, 0x9b, 0xa1, 0x2e, - 0xcf, 0x0c, 0x7b, 0x8f, 0x8d, 0xd1, 0x29, 0x35, 0x9e, 0x48, 0x9a, 0xdb, - 0x64, 0x2f, 0x42, 0x8c, 0x76, 0x24, 0xc8, 0x2c, 0x48, 0xdf, 0x57, 0xdd, - 0x3d, 0xb7, 0xd6, 0x4e, 0x0a, 0x04, 0xfe, 0x79, 0x92, 0xb2, 0x48, 0xef, - 0x0f, 0xf4, 0x91, 0xbd, 0xa2, 0x5b, 0x40, 0x9a, 0x8d, 0x48, 0x71, 0xc3, - 0x83, 0x85, 0x63, 0x22, 0x17, 0x0a, 0x7a, 0xd8, 0xa0, 0x40, 0x57, 0xf9, - 0x93, 0x66, 0xf4, 0xef, 0xd5, 0xc9, 0xcc, 0x90, 0x5b, 0x45, 0x6e, 0x85, - 0xe8, 0xa3, 0x06, 0xb0, 0xfe, 0x73, 0x2c, 0x5b, 0x93, 0x9a, 0x57, 0x73, - 0x65, 0x95, 0x7d, 0xef, 0x18, 0x9d, 0xed, 0x6d, 0x12, 0x34, 0xec, 0xfa, - 0xdd, 0xc5, 0x42, 0x2d, 0x24, 0xf6, 0x78, 0x64, 0x58, 0x88, 0xf5, 0x7d, - 0xc6, 0xf0, 0x13, 0xe1, 0xa8, 0x37, 0x81, 0x03, 0x54, 0x9c, 0x40, 0xfd, - 0x0c, 0x8d, 0x6c, 0x4f, 0xf9, 0x2a, 0x4e, 0x8f, 0x43, 0xe3, 0x24, 0x60, - 0x01, 0x9d, 0x43, 0x39, 0x4f, 0xbf, 0xc7, 0x91, 0xcf, 0x3e, 0xe9, 0xa9, - 0xb4, 0xbb, 0x9d, 0xe7, 0xc0, 0x2d, 0xc1, 0x51, 0x94, 0xec, 0x91, 0x9e, - 0x14, 0x3f, 0xae, 0xd2, 0x27, 0xa8, 0x8c, 0x83, 0x5b, 0x6d, 0xba, 0x11, - 0xc4, 0x4b, 0xc9, 0x47, 0xad, 0x94, 0x48, 0x0e, 0x29, 0xfa, 0x42, 0x45, - 0x1a, 0x71, 0xba, 0x65, 0xf8, 0x89, 0x69, 0xcc, 0x64, 0xd0, 0x50, 0xfc, - 0x9c, 0xc5, 0x33, 0x1b, 0x65, 0x88, 0x30, 0xf7, 0xca, 0x64, 0x05, 0x5a, - 0xc9, 0x30, 0x79, 0x99, 0x3b, 0x79, 0xca, 0x37, 0x84, 0x02, 0x60, 0x3b, - 0x69, 0x43, 0x55, 0x95, 0x37, 0x10, 0x25, 0xa4, 0xdd, 0xfe, 0xdf, 0x70, - 0xbf, 0xa8, 0xaa, 0x7c, 0x0a, 0xf9, 0x77, 0x64, 0x00, 0x48, 0xdf, 0x0e, - 0xf3, 0x99, 0xf6, 0x75, 0x76, 0xac, 0xe6, 0xa9, 0x5b, 0x7d, 0x64, 0x90, - 0xe3, 0xb6, 0x2d, 0x88, 0x03, 0x33, 0x95, 0x2a, 0x49, 0xda, 0xd5, 0xa7, - 0x99, 0xaf, 0xee, 0x81, 0xba, 0x9d, 0x82, 0xf6, 0x93, 0x24, 0xf1, 0xdb, - 0x26, 0x41, 0x1a, 0x1c, 0xfc, 0x38, 0x49, 0xb3, 0xa1, 0x97, 0xb0, 0x1d, - 0x5a, 0x7f, 0x2a, 0xb0, 0x3e, 0xfa, 0x3b, 0x02, 0x34, 0xc8, 0x39, 0xc4, - 0x02, 0x66, 0x91, 0xd9, 0xc2, 0x4e, 0x02, 0x27, 0x52, 0x90, 0x13, 0xaa, - 0x41, 0xfa, 0xae, 0xd5, 0xdc, 0xab, 0xc9, 0xdd, 0x9a, 0xa7, 0x17, 0xdd, - 0x41, 0x3e, 0xca, 0x0f, 0x19, 0x07, 0x33, 0x94, 0xd7, 0xbf, 0x15, 0x47, - 0x39, 0x20, 0x1e, 0x7d, 0x9c, 0x88, 0x64, 0xd4, 0x0c, 0x95, 0xb6, 0x02, - 0x9f, 0x87, 0x95, 0xba, 0x0e, 0x00, 0x3d, 0x94, 0xb3, 0x28, 0x16, 0xb7, - 0xeb, 0x3e, 0x86, 0x59, 0xae, 0x1e, 0xb9, 0xbc, 0x95, 0xbf, 0x50, 0xd5, - 0x39, 0x9c, 0xe6, 0x74, 0xcd, 0xba, 0x1b, 0x03, 0xa6, 0xf6, 0xc3, 0xfa, - 0x58, 0x36, 0x01, 0x81, 0xfa, 0xfa, 0xb4, 0xdf, 0x49, 0xb5, 0x77, 0x34, - 0xcb, 0x56, 0xc7, 0x14, 0x98, 0xb0, 0x8d, 0xb9, 0x52, 0x6d, 0x94, 0x5e, - 0x5f, 0x0d, 0x31, 0xe1, 0x4c, 0x22, 0x75, 0x4a, 0x95, 0x78, 0x1a, 0x70, - 0xbe, 0x5e, 0x22, 0xe6, 0x27, 0x7d, 0x65, 0x8e, 0xff, 0xb5, 0x0a, 0x1f, - 0x24, 0x30, 0x1d, 0x23, 0x3a, 0x5e, 0x3d, 0xd8, 0xfe, 0x00, 0x83, 0x75, - 0xa2, 0x8c, 0x6f, 0x09, 0x59, 0x4f, 0x68, 0x45, 0x69, 0xde, 0xe0, 0xbf, - 0x95, 0x9a, 0x12, 0x8e, 0x22, 0x72, 0x66, 0xf7, 0x0e, 0xf1, 0x8c, 0x20, - 0x34, 0x9a, 0xdb, 0x9f, 0xfa, 0xf7, 0xac, 0x65, 0x91, 0xb0, 0x73, 0x1f, - 0x88, 0x73, 0xef, 0x2a, 0xe4, 0x81, 0x61, 0x5b, 0x20, 0xef, 0x43, 0xba, - 0xfb, 0x56, 0xa7, 0x9d, 0x12, 0xb1, 0xdd, 0xb1, 0x9e, 0x75, 0xa4, 0x71, - 0xe0, 0x5f, 0x74, 0x56, 0x61, 0x6a, 0x15, 0x5f, 0x03, 0x36, 0xf9, 0x88, - 0x3e, 0xbb, 0xc1, 0x67, 0xfd, 0x4f, 0xc2, 0x2e, 0x9c, 0xcf, 0x5c, 0x7b, - 0xd5, 0x3a, 0x32, 0xa6, 0xef, 0xad, 0x7e, 0x9f, 0x84, 0xe7, 0xb7, 0x36, - 0x21, 0x68, 0x79, 0x1e, 0xbc, 0x24, 0x8c, 0xf9, 0x92, 0xb4, 0x90, 0x18, - 0xe3, 0x7a, 0x6e, 0xe4, 0xa7, 0xf2, 0x16, 0xc0, 0x62, 0x92, 0x2b, 0x19, - 0xd7, 0x65, 0x26, 0xde, 0x0b, 0x51, 0x8a, 0xbf, 0x64, 0xe0, 0xf0, 0x57, - 0xe8, 0x4f, 0x1f, 0x1a, 0x24, 0x4c, 0x73, 0x9c, 0xac, 0xf0, 0x8c, 0x40, - 0x8a, 0x23, 0xf8, 0x5b, 0x46, 0x70, 0x63, 0x78, 0x6c, 0x13, 0x38, 0x75, - 0x0e, 0xb9, 0x34, 0xb6, 0x72, 0x1c, 0xff, 0x8c, 0x6a, 0xcf, 0x8a, 0x55, - 0x29, 0x5e, 0xc6, 0x3a, 0x85, 0x01, 0x40, 0x1d, 0x13, 0x70, 0xd4, 0xa6, - 0x69, 0x69, 0xcf, 0x39, 0xa2, 0x7a, 0x06, 0xe0, 0x5b, 0xc5, 0xe4, 0x85, - 0xb8, 0x6a, 0xc7, 0xa0, 0x0b, 0x9d, 0x0e, 0xf5, 0xa2, 0xc4, 0xd4, 0x1c, - 0xc7, 0x8f, 0x53, 0x06, 0xf5, 0x2a, 0xb0, 0x92, 0x57, 0x55, 0xd6, 0xf0, - 0xc3, 0x05, 0xb9, 0x73, 0x77, 0xb1, 0xdd, 0x1f, 0xb1, 0xeb, 0xb5, 0xa3, - 0x35, 0xdc, 0x44, 0x1b, 0x74, 0x85, 0x62, 0x46, 0xce, 0x5e, 0xde, 0x91, - 0x1b, 0x21, 0x6d, 0xa6, 0xc1, 0x34, 0x7d, 0xb8, 0x06, 0x86, 0xfc, 0x72, - 0x31, 0xcf, 0xd0, 0x83, 0xd8, 0xaa, 0xdd, 0xf4, 0x38, 0x6f, 0x32, 0x16, - 0x5f, 0x86, 0x8c, 0xf0, 0xd4, 0x76, 0xdc, 0xd1, 0x37, 0xdb, 0xc5, 0x75, - 0xda, 0xd4, 0xf9, 0xd7, 0x3f, 0xa1, 0x98, 0x9f, 0xd6, 0xb8, 0x2d, 0xaa, - 0xb3, 0x24, 0xc0, 0xb3, 0x87, 0xa2, 0x8b, 0x34, 0x8f, 0x1b, 0x64, 0x0d, - 0x1a, 0xf3, 0x60, 0x85, 0x34, 0x97, 0xac, 0xe8, 0xf3, 0xb4, 0x0b, 0x25, - 0x6e, 0x58, 0xea, 0x12, 0x22, 0x0b, 0x03, 0x7b, 0xbe, 0xc9, 0xb0, 0x49, - 0x92, 0xc6, 0x03, 0x25, 0xd1, 0x99, 0xdd, 0x44, 0x8c, 0xe3, 0xec, 0x7c, - 0x46, 0x4a, 0x0a, 0x2d, 0xed, 0x65, 0x5f, 0x55, 0x51, 0xd6, 0x60, 0xcd, - 0x38, 0xb9, 0xe8, 0xaa, 0x49, 0x02, 0x22, 0x18, 0x91, 0x5d, 0x9a, 0x32, - 0x37, 0x6c, 0xa7, 0x82, 0x3e, 0x69, 0xbc, 0x7e, 0xc6, 0x72, 0xa6, 0x97, - 0xa2, 0x1c, 0x2d, 0xdb, 0x03, 0xe0, 0x6d, 0xeb, 0x64, 0xd0, 0xf0, 0x84, - 0x7c, 0x9f, 0xed, 0xd4, 0x18, 0xfe, 0x53, 0xf8, 0xab, 0x31, 0xf5, 0x4e, - 0xbe, 0xa1, 0x97, 0x8e, 0x76, 0xb5, 0x45, 0x46, 0x08, 0xfa, 0x44, 0x5c, - 0x93, 0x4f, 0x7e, 0x84, 0xcd, 0x33, 0xda, 0x9a, 0xca, 0x87, 0x96, 0xd0, - 0x01, 0x9e, 0x5f, 0xa1, 0x3e, 0x3a, 0x4d, 0xe1, 0x71, 0xfb, 0x5a, 0x6c, - 0xc7, 0xfe, 0x06, 0x91, 0x84, 0x94, 0x00, 0x06, 0xe6, 0xda, 0xa8, 0xd9, - 0x08, 0x99, 0x0f, 0xa5, 0x5d, 0x69, 0x2b, 0x2d, 0x47, 0xbd, 0xc6, 0x64, - 0xf2, 0xa1, 0xb0, 0x20, 0x4c, 0x54, 0x85, 0xe7, 0x88, 0x5d, 0xd0, 0x2b, - 0xea, 0x3e, 0x16, 0xc7, 0x17, 0x1c, 0xb4, 0x6d, 0x49, 0xee, 0x3c, 0x63, - 0xe8, 0xe3, 0x67, 0x53, 0x1e, 0xff, 0xca, 0xd2, 0xed, 0x47, 0x13, 0x26, - 0x6f, 0x1e, 0x36, 0xc0, 0xb4, 0x9c, 0x6a, 0x9d, 0xf3, 0x58, 0x79, 0x09, - 0x60, 0x41, 0x48, 0xaa, 0xac, 0x47, 0x37, 0x2b, 0xec, 0x76, 0x8c, 0x90, - 0xc6, 0xd4, 0x5d, 0x0d, 0x7c, 0x8c, 0xc1, 0x26, 0x83, 0x61, 0xc2, 0x0f, - 0x33, 0xc2, 0x12, 0x5d, 0xef, 0x69, 0x61, 0x6a, 0x4e, 0x59, 0x0a, 0x5b, - 0xac, 0x85, 0xc7, 0x38, 0xf4, 0x3d, 0x7c, 0x35, 0xeb, 0xec, 0xa5, 0xc2, - 0x94, 0x83, 0x4a, 0x30, 0xff, 0xcb, 0xe0, 0xb5, 0xbc, 0xf8, 0x80, 0x0d, - 0x3e, 0x92, 0x39, 0x44, 0x18, 0x8d, 0x5b, 0xce, 0xf1, 0x1b, 0x22, 0x0c, - 0x05, 0xd3, 0xc2, 0x7f, 0xca, 0x32, 0xde, 0x4a, 0x57, 0xc0, 0x31, 0xb6, - 0x86, 0xe2, 0x94, 0x19, 0xdc, 0x6c, 0x6f, 0xa0, 0xe2, 0x5d, 0x63, 0xc3, - 0xef, 0x4f, 0xbc, 0x03, 0x0c, 0x1c, 0x95, 0x3f, 0xe1, 0x73, 0x4b, 0xea, - 0xa2, 0xce, 0x14, 0xb9, 0x99, 0x17, 0x60, 0x58, 0xe9, 0x37, 0x33, 0xc4, - 0x3f, 0xf5, 0xa7, 0x98, 0xc8, 0x2e, 0xa6, 0xe5, 0xdb, 0x67, 0x16, 0xff, - 0x35, 0x07, 0x7c, 0x50, 0xd7, 0x3e, 0xb4, 0x74, 0xe6, 0x7e, 0xe5, 0xc8, - 0xbf, 0x5f, 0x0f, 0xc8, 0x35, 0x8b, 0x52, 0x3e, 0x68, 0xd8, 0xb0, 0x71, - 0x31, 0x1f, 0xab, 0x05, 0xde, 0xad, 0x0d, 0x99, 0x9e, 0xf6, 0xff, 0x2b, - 0x31, 0x0d, 0xc6, 0x77, 0xdd, 0x98, 0x79, 0x18, 0x9d, 0xdd, 0x4c, 0xef, - 0x5f, 0xda, 0xc0, 0xcc, 0x36, 0x1b, 0x7a, 0xe6, 0xb1, 0xb8, 0x50, 0x2c, - 0x93, 0x0b, 0x15, 0xe0, 0xe4, 0x85, 0xe7, 0xd2, 0x24, 0xab, 0xda, 0x32, - 0x65, 0x55, 0x09, 0x66, 0x21, 0x0c, 0x76, 0x2c, 0xb0, 0xe1, 0xa3, 0x1a, - 0x91, 0x8c, 0xd3, 0xf1, 0x27, 0xa7, 0x8a, 0x1e, 0xd9, 0xa2, 0x74, 0x41, - 0xeb, 0xb0, 0xcc, 0x85, 0x1d, 0xdc, 0xf1, 0x62, 0x50, 0xc4, 0x00, 0x88, - 0x8c, 0xe2, 0xb1, 0x90, 0xbe, 0x68, 0xbd, 0x68, 0xcc, 0xfb, 0x8e, 0xde, - 0xc9, 0x0a, 0x51, 0x43, 0x9a, 0x13, 0x28, 0xe0, 0x5b, 0x68, 0x21, 0x4d, - 0xba, 0x05, 0xa3, 0xdc, 0x77, 0x4f, 0xd9, 0x92, 0xe8, 0xb6, 0x39, 0xcf, - 0x14, 0x76, 0x34, 0x49, 0x72, 0x86, 0xd2, 0x0c, 0xa4, 0x5a, 0x2a, 0x0e, - 0xc5, 0x52, 0x4b, 0x20, 0x6f, 0x33, 0xe3, 0xd7, 0xe1, 0x55, 0x4e, 0x8e, - 0x4b, 0xc0, 0xef, 0x7b, 0x14, 0x64, 0x91, 0xf2, 0xe2, 0xd3, 0xc9, 0x70, - 0xcf, 0x10, 0x2c, 0xf1, 0x04, 0x2f, 0xf5, 0xe3, 0x54, 0x69, 0x08, 0xc1, - 0xd3, 0x7f, 0x68, 0x67, 0x05, 0x86, 0xc7, 0x44, 0x66, 0xff, 0x6f, 0xda, - 0x3d, 0x36, 0x79, 0xf1, 0xad, 0x46, 0x7f, 0xc9, 0x95, 0x66, 0x12, 0x8c, - 0x1b, 0x53, 0xab, 0x91, 0x76, 0x97, 0xbb, 0xfd, 0x46, 0x14, 0x5a, 0xe9, - 0xab, 0x60, 0x8b, 0xa2, 0xd2, 0x60, 0x98, 0x21, 0x0c, 0x9a, 0xd1, 0xa1, - 0x35, 0x24, 0x4d, 0x01, 0x76, 0xa4, 0x95, 0x3c, 0x1f, 0x6c, 0x96, 0x44, - 0xd4, 0xc0, 0xd1, 0xdb, 0x92, 0x4d, 0xfe, 0x4d, 0xf1, 0x9e, 0x5a, 0x8c, - 0x9d, 0x92, 0x5c, 0xff, 0x50, 0x21, 0xcf, 0x59, 0x8a, 0xe4, 0x20, 0x19, - 0x56, 0x28, 0x20, 0x8a, 0x77, 0x7e, 0x58, 0xd1, 0xe1, 0x5e, 0x43, 0x70, - 0x72, 0x65, 0xfd, 0x9f, 0x07, 0x99, 0x1f, 0x88, 0x72, 0x8d, 0xf3, 0x12, - 0xb1, 0x54, 0x2a, 0x5b, 0xe8, 0xd7, 0x1e, 0x54, 0x36, 0xe2, 0x3f, 0x21, - 0xde, 0x87, 0x37, 0xa7, 0x9d, 0x68, 0xc9, 0x82, 0x57, 0xe4, 0x43, 0xe8, - 0xc6, 0x34, 0x19, 0x48, 0x5b, 0xfb, 0x1c, 0x3c, 0x5e, 0x8b, 0xdd, 0xb4, - 0x00, 0x77, 0xdf, 0x41, 0x92, 0x1d, 0x4b, 0x17, 0xb8, 0xdb, 0x13, 0x35, - 0x02, 0xb7, 0xa0, 0xed, 0x52, 0x05, 0xb3, 0x78, 0x0a, 0x85, 0x53, 0x0c, - 0xed, 0x77, 0xa1, 0x25, 0xb4, 0x95, 0xec, 0xa1, 0x86, 0xd5, 0x64, 0x44, - 0xc8, 0x87, 0x6d, 0x06, 0xfb, 0xdc, 0x33, 0x41, 0x06, 0xe6, 0x79, 0x2d, - 0xc4, 0xf8, 0xee, 0xa8, 0x38, 0x99, 0xb9, 0x4d, 0x5e, 0x29, 0x60, 0xb2, - 0x0b, 0xd6, 0xa3, 0xf7, 0x6f, 0x34, 0x65, 0xc3, 0xf4, 0xcc, 0x85, 0x44, - 0x60, 0xe5, 0xb9, 0x53, 0x3c, 0xf3, 0x99, 0x81, 0x6e, 0xa9, 0x52, 0x3a, - 0x0f, 0x6f, 0x36, 0xac, 0xd4, 0x6b, 0xbe, 0x00, 0xae, 0x40, 0xd4, 0xda, - 0x89, 0x46, 0x7f, 0x53, 0x12, 0x98, 0xbd, 0xca, 0x5a, 0x66, 0x81, 0x3f, - 0x55, 0x36, 0x31, 0xf0, 0x15, 0x10, 0x01, 0xac, 0x77, 0x11, 0xa9, 0x97, - 0x1c, 0xa0, 0xaf, 0xd1, 0x9f, 0x71, 0x76, 0x86, 0x55, 0x5a, 0x26, 0x0e, - 0x01, 0x22, 0x26, 0x9a, 0xf0, 0xb5, 0x51, 0xa4, 0x83, 0x46, 0xa0, 0x84, - 0x08, 0xd4, 0x85, 0x38, 0x64, 0x7e, 0x3b, 0xa3, 0x2f, 0x13, 0xb0, 0x5b, - 0x3f, 0x7c, 0x59, 0x0b, 0x26, 0x3c, 0x70, 0xe0, 0x15, 0xee, 0x17, 0x04, - 0x0c, 0x13, 0x19, 0xe4, 0xdf, 0xc7, 0xad, 0x5b, 0xd6, 0x53, 0x0c, 0xe8, - 0x3e, 0x17, 0x94, 0x7e, 0x9c, 0xa8, 0x52, 0x85, 0x79, 0x0d, 0x93, 0xe2, - 0xef, 0xc8, 0x2f, 0x80, 0x84, 0xf4, 0xa0, 0xba, 0x51, 0xfc, 0xf6, 0xf8, - 0xe4, 0xed, 0x4b, 0xbb, 0x1b, 0xcc, 0x16, 0xe7, 0x6b, 0x03, 0xb8, 0xc0, - 0x5c, 0xbb, 0x18, 0xe9, 0x5e, 0x37, 0x29, 0x4d, 0x45, 0x97, 0xc8, 0xf7, - 0xee, 0x5d, 0x41, 0x32, 0xd8, 0xd4, 0x37, 0x56, 0x5d, 0xd2, 0x6d, 0x4f, - 0xed, 0xfb, 0xc7, 0x1c, 0xf2, 0xac, 0x82, 0x84, 0xee, 0x3f, 0x90, 0x91, - 0x1a, 0x55, 0xb0, 0x54, 0xdc, 0x97, 0x25, 0x7f, 0xf7, 0x2d, 0x93, 0x0e, - 0x0f, 0x59, 0xa8, 0xf5, 0x18, 0x62, 0x14, 0xb2, 0x10, 0xd1, 0xf7, 0x6f, - 0x22, 0x65, 0x40, 0x40, 0x63, 0x4f, 0xf1, 0x93, 0x80, 0x4f, 0x8a, 0xf5, - 0xa6, 0x00, 0x2f, 0x00, 0x3a, 0xb6, 0x23, 0x94, 0x35, 0x74, 0x91, 0x02, - 0x21, 0x25, 0x46, 0x71, 0xc4, 0x7a, 0x90, 0x3a, 0xdd, 0x60, 0x67, 0x5a, - 0x54, 0x22, 0x67, 0xc7, 0xb8, 0xb1, 0xfa, 0xb7, 0x73, 0xc4, 0x75, 0x9b, - 0xc0, 0x51, 0x6f, 0x5e, 0xc1, 0x5f, 0xd6, 0x39, 0x52, 0x10, 0x5c, 0x61, - 0x22, 0xe4, 0xa4, 0xce, 0x59, 0xca, 0x6b, 0x54, 0x07, 0xd7, 0x79, 0x6f, - 0x15, 0x2e, 0x28, 0xe4, 0x4a, 0x04, 0x0f, 0x0c, 0x85, 0xb4, 0x7a, 0xfa, - 0x8c, 0xca, 0x7d, 0x12, 0x2d, 0xe7, 0xfc, 0xa2, 0xae, 0x11, 0xba, 0x31, - 0x32, 0xe8, 0xdd, 0x6b, 0x49, 0xb9, 0x82, 0xf7, 0x60, 0x3d, 0xdd, 0xee, - 0xd9, 0xc2, 0xb6, 0x2f, 0xbd, 0x3c, 0xd3, 0x60, 0x94, 0xed, 0x32, 0x4c, - 0x12, 0xf0, 0xd8, 0xf9, 0x01, 0xc8, 0x22, 0xa0, 0x60, 0xc9, 0xe4, 0xd6, - 0xaa, 0x71, 0x9f, 0xd5, 0x8d, 0x59, 0x0c, 0xd5, 0x54, 0x81, 0x17, 0xdd, - 0xe6, 0x8d, 0x85, 0xc8, 0xfa, 0x3d, 0x50, 0x09, 0x9d, 0xf5, 0xb6, 0x95, - 0x2d, 0x30, 0xfe, 0xeb, 0x67, 0x6e, 0x0e, 0x6e, 0xe4, 0x77, 0x9e, 0x9d, - 0x2e, 0x2f, 0x15, 0xbe, 0x81, 0x3c, 0x65, 0xb7, 0x2b, 0xf9, 0x9f, 0x3c, - 0xf0, 0xdc, 0x79, 0x14, 0xca, 0xd2, 0x55, 0x80, 0xe8, 0x9e, 0xd0, 0x10, - 0x9b, 0x91, 0x56, 0xf9, 0x02, 0x34, 0xb7, 0xd9, 0xa8, 0x73, 0x0d, 0x0b, - 0x9c, 0x71, 0xc9, 0x78, 0xf2, 0x9d, 0xc2, 0xf7, 0x71, 0xef, 0x16, 0x91, - 0xf8, 0x30, 0x16, 0x29, 0x61, 0x7f, 0xb3, 0xca, 0x82, 0x7c, 0xe3, 0x2f, - 0xdb, 0x09, 0x3d, 0xa7, 0xee, 0x7a, 0xb4, 0x4e, 0x20, 0xce, 0xf6, 0xd7, - 0x17, 0x13, 0xc1, 0x25, 0x09, 0x35, 0x24, 0x6d, 0xec, 0x92, 0x69, 0x3d, - 0xbf, 0x6f, 0xac, 0xaa, 0x2b, 0x43, 0x43, 0xfb, 0x12, 0x59, 0x18, 0xc4, - 0x0e, 0x1e, 0x43, 0x12, 0x5e, 0x22, 0x88, 0x3f, 0xf7, 0x2a, 0x9b, 0x1c, - 0x62, 0xbf, 0x2e, 0x03, 0x90, 0x5f, 0x68, 0x57, 0x4b, 0x61, 0x29, 0x57, - 0xcb, 0x80, 0x6a, 0x51, 0x01, 0x37, 0x96, 0xd7, 0x19, 0x8e, 0xc1, 0x3f, - 0x40, 0xe4, 0x6a, 0x29, 0x17, 0xe2, 0xdf, 0xea, 0xe7, 0xd8, 0xf6, 0x0d, - 0xa0, 0x6d, 0xb3, 0x0f, 0x12, 0x67, 0xec, 0x55, 0x91, 0xc0, 0x73, 0x03, - 0x90, 0xb9, 0x5f, 0xac, 0x73, 0xec, 0x33, 0x86, 0xd3, 0x25, 0x4d, 0xbc, - 0x93, 0x44, 0x21, 0x56, 0x4b, 0x99, 0xfa, 0xc0, 0x94, 0xc4, 0x4f, 0x87, - 0xcf, 0xb0, 0x3a, 0xd7, 0xd9, 0xf2, 0x38, 0x31, 0x99, 0x4d, 0x7f, 0xc3, - 0x24, 0x22, 0x9f, 0xe4, 0xf9, 0xbf, 0xcd, 0x31, 0x75, 0x93, 0x24, 0x19, - 0xb2, 0xd6, 0xee, 0xfa, 0xf9, 0x31, 0x58, 0x0c, 0x34, 0xc1, 0xf5, 0x3e, - 0x1f, 0x84, 0x92, 0x27, 0xb9, 0xfa, 0xda, 0xde, 0xce, 0x38, 0x17, 0x31, - 0x7d, 0xdc, 0x69, 0xdb, 0x3d, 0x6e, 0xe8, 0xb2, 0xe6, 0x77, 0x5a, 0xcf, - 0xac, 0xbf, 0x58, 0xb3, 0x59, 0x09, 0xa3, 0xf9, 0x12, 0x25, 0x50, 0x89, - 0xee, 0x4e, 0x74, 0x61, 0xca, 0x79, 0x25, 0xbb, 0x20, 0x6f, 0xf1, 0x2c, - 0x8e, 0xe6, 0xae, 0xdc, 0x76, 0x7f, 0x6c, 0xf0, 0x53, 0x8a, 0x3b, 0xe5, - 0x4c, 0xb3, 0xd3, 0x75, 0x8e, 0x9c, 0xbf, 0x18, 0xfc, 0xc3, 0x62, 0x16, - 0x2a, 0xc2, 0x1c, 0xc5, 0x94, 0xd0, 0xbc, 0x0f, 0x59, 0x41, 0xcf, 0xd1, - 0x07, 0xbd, 0x09, 0x00, 0xbd, 0x28, 0x3c, 0x87, 0xff, 0x3e, 0x6d, 0x42, - 0x2d, 0xb2, 0xbd, 0xba, 0xda, 0x71, 0x47, 0x00, 0xfd, 0xf9, 0x3e, 0x8e, - 0x37, 0x2d, 0x65, 0x78, 0x3a, 0xf3, 0x72, 0xda, 0x5e, 0xf1, 0xe7, 0x22, - 0x63, 0xb9, 0xb1, 0x1a, 0x2f, 0x79, 0xa6, 0x76, 0x23, 0x76, 0xd2, 0xf0, - 0xe0, 0x1f, 0xcf, 0x71, 0x27, 0x42, 0x4d, 0x30, 0xbc, 0xdf, 0x12, 0xb1, - 0x02, 0xf6, 0x01, 0x16, 0x93, 0x26, 0x1b, 0x85, 0x08, 0x73, 0x69, 0xeb, - 0x06, 0x3a, 0xf4, 0xe7, 0x25, 0xe9, 0x19, 0x3e, 0x40, 0xf7, 0x81, 0x02, - 0x21, 0xc8, 0xbe, 0x1f, 0xfa, 0x7d, 0x20, 0x5a, 0x02, 0x2f, 0x3b, 0x1c, - 0x92, 0x19, 0x39, 0xbb, 0xdf, 0xbf, 0x22, 0xac, 0x5c, 0x2a, 0x73, 0xbf, - 0x7b, 0x7d, 0x34, 0xc6, 0xb4, 0xc5, 0x94, 0x11, 0x9d, 0x81, 0x3d, 0xea, - 0xbe, 0x63, 0x60, 0xe0, 0x9b, 0x58, 0xc3, 0x4e, 0x9f, 0xb8, 0xe7, 0x55, - 0x5a, 0x72, 0x69, 0x91, 0x84, 0x64, 0x63, 0x94, 0x6d, 0x4c, 0x88, 0xde, - 0xfc, 0xcf, 0x6f, 0xa9, 0x07, 0x0a, 0x12, 0x96, 0xb6, 0xc4, 0x4c, 0x42, - 0x49, 0xb3, 0x75, 0x10, 0xba, 0xa1, 0xb1, 0x29, 0xe2, 0x84, 0xd4, 0x0e, - 0xa8, 0x77, 0x7c, 0x3e, 0x3b, 0xf4, 0xbd, 0xa1, 0x73, 0x89, 0xd5, 0x39, - 0x14, 0xeb, 0xdb, 0xda, 0x46, 0x70, 0x95, 0x2c, 0x7d, 0xa5, 0x54, 0x4d, - 0x56, 0xcc, 0x20, 0xcb, 0x59, 0x12, 0x33, 0xc1, 0xe5, 0xb8, 0x0a, 0xc5, - 0x26, 0xc6, 0x58, 0xdb, 0x8d, 0x98, 0x25, 0xbf, 0xf9, 0x5f, 0x93, 0x4d, - 0x4e, 0xb9, 0xc1, 0x2c, 0xae, 0x51, 0x2e, 0x38, 0xa2, 0x11, 0x5a, 0x87, - 0x0a, 0xbe, 0x68, 0xae, 0x17, 0xcc, 0xf0, 0x43, 0xd4, 0x7a, 0xc1, 0xc4, - 0xd4, 0x3b, 0x4c, 0x48, 0x9c, 0xb6, 0x79, 0xbf, 0xfc, 0x1b, 0xfa, 0x34, - 0xea, 0x60, 0x3b, 0xca, 0xda, 0x41, 0x88, 0x78, 0x00, 0xea, 0xa2, 0x9e, - 0x65, 0xb9, 0xaf, 0x29, 0x35, 0xcc, 0x8f, 0x23, 0x13, 0x90, 0x82, 0x5b, - 0x40, 0x0b, 0xa1, 0xea, 0xfd, 0xd4, 0xea, 0x84, 0xa5, 0x31, 0xd2, 0xb9, - 0xdf, 0x93, 0xa6, 0x05, 0xf9, 0xb1, 0xf2, 0x31, 0x3a, 0x6e, 0xbb, 0xf4, - 0xcc, 0x44, 0xa5, 0x83, 0x8f, 0xeb, 0x37, 0x7e, 0xbb, 0x65, 0x64, 0x13, - 0xa0, 0xfe, 0xb3, 0xb9, 0x19, 0x40, 0xbf, 0x6e, 0xe6, 0x4a, 0xff, 0x50, - 0x3d, 0x49, 0xaa, 0x72, 0xda, 0x25, 0xb0, 0x7d, 0x18, 0x58, 0xab, 0x55, - 0xb2, 0xf1, 0x07, 0xe5, 0xf1, 0x7e, 0x92, 0x66, 0x3d, 0x8b, 0xd7, 0x59, - 0xd4, 0x73, 0x87, 0xe9, 0x79, 0xd4, 0xbe, 0xda, 0x6a, 0xb1, 0x2c, 0x94, - 0x91, 0xfa, 0x53, 0x47, 0xb8, 0xf5, 0xe5, 0xb2, 0x71, 0xfd, 0x54, 0x6c, - 0x0c, 0x2c, 0xd3, 0x57, 0x92, 0x3a, 0xd0, 0xc5, 0xce, 0x91, 0xbe, 0x21, - 0x93, 0xf0, 0x56, 0x53, 0x84, 0x37, 0x85, 0x77, 0xab, 0xc4, 0x8a, 0x1b, - 0xb6, 0x85, 0xfe, 0x9c, 0x84, 0x46, 0x4a, 0x5e, 0xf9, 0x49, 0x18, 0x78, - 0xa6, 0x33, 0xf3, 0xd2, 0xca, 0xcf, 0xeb, 0x17, 0xcb, 0xaf, 0x11, 0x1c, - 0x48, 0x02, 0x71, 0x6b, 0x0b, 0x05, 0x17, 0x29, 0xc7, 0xda, 0x22, 0x83, - 0x40, 0xe2, 0xa9, 0xdf, 0x5d, 0x89, 0xa3, 0x03, 0x25, 0x0b, 0x10, 0x17, - 0x90, 0x1b, 0x55, 0xea, 0x98, 0x95, 0x98, 0xca, 0xd5, 0x74, 0x20, 0xb9, - 0x21, 0x4d, 0x5f, 0xbf, 0x99, 0x08, 0x45, 0x3e, 0x52, 0xb0, 0x25, 0x8e, - 0x5e, 0x18, 0xe2, 0xf6, 0x09, 0x16, 0x71, 0x03, 0x2b, 0xc9, 0x5f, 0x98, - 0x93, 0xe8, 0xd8, 0x1d, 0xff, 0x69, 0x95, 0x45, 0xfd, 0x73, 0xf5, 0x00, - 0x6b, 0xbf, 0x44, 0x27, 0x8a, 0x8b, 0xd8, 0xba, 0xc4, 0x07, 0x03, 0x77, - 0x54, 0x73, 0x79, 0x0e, 0x29, 0x04, 0x98, 0x6c, 0x0f, 0x5b, 0x82, 0x03, - 0x5f, 0xca, 0x80, 0x29, 0x85, 0x1b, 0xf6, 0xb3, 0x71, 0x07, 0xae, 0xca, - 0x2d, 0xb1, 0xdd, 0xb5, 0x9b, 0xfb, 0x36, 0x36, 0x8a, 0x79, 0x42, 0xc3, - 0x43, 0xa5, 0xe4, 0xda, 0x12, 0xb9, 0xf5, 0x58, 0x7b, 0xe6, 0x26, 0x02, - 0x13, 0xc1, 0x23, 0x0a, 0xe6, 0x4d, 0xa7, 0xac, 0x99, 0x1f, 0x06, 0xc7, - 0xe1, 0x54, 0x3e, 0x90, 0xc2, 0x1e, 0xdb, 0x52, 0x4a, 0x17, 0xfc, 0x1e, - 0xa6, 0xfc, 0x58, 0x8b, 0xc9, 0x13, 0xb2, 0xca, 0x30, 0xaa, 0xab, 0x4d, - 0x65, 0xf3, 0x6a, 0x93, 0x5c, 0x55, 0x4f, 0xff, 0x6c, 0xcc, 0x61, 0xc4, - 0x5c, 0xe8, 0x36, 0x97, 0xb3, 0xc6, 0x15, 0xe0, 0x5a, 0x8b, 0x8c, 0x33, - 0x0f, 0x7c, 0x32, 0xad, 0x9c, 0x98, 0x6f, 0x43, 0x52, 0x5b, 0xa8, 0x89, - 0x9f, 0xfb, 0x8e, 0x3b, 0x1e, 0x92, 0xaa, 0x70, 0xc2, 0x19, 0xa1, 0x58, - 0xd1, 0x57, 0x30, 0x21, 0xd4, 0x8e, 0xf3, 0x6a, 0x9e, 0xa3, 0x9f, 0x1f, - 0xa5, 0xf0, 0xf6, 0x83, 0x1e, 0x0d, 0x30, 0xf8, 0xa9, 0x49, 0x6a, 0xb4, - 0x7f, 0xb8, 0x23, 0x7e, 0xe8, 0x2e, 0xb2, 0xdd, 0xc0, 0x17, 0x37, 0xe5, - 0x3a, 0xc1, 0x3e, 0x8e, 0x21, 0x58, 0x01, 0x49, 0xf9, 0x8f, 0xfe, 0xb7, - 0xe8, 0x4d, 0xdd, 0x8b, 0xaa, 0x83, 0x4c, 0x5e, 0xeb, 0x59, 0x25, 0x1e, - 0x07, 0x58, 0x20, 0x17, 0xce, 0x96, 0xc3, 0x39, 0xd3, 0x17, 0x8e, 0x4c, - 0xf9, 0x46, 0xe2, 0x4d, 0x9a, 0x30, 0xf9, 0xd5, 0xbf, 0x40, 0xb0, 0x2c, - 0xa9, 0x0e, 0x41, 0x32, 0xe1, 0xd4, 0x03, 0x63, 0xe7, 0x32, 0x18, 0x29, - 0xb6, 0x21, 0x47, 0xdc, 0xda, 0x8a, 0xb5, 0x3c, 0xb3, 0x60, 0xba, 0x4c, - 0x84, 0x6e, 0x0c, 0xf4, 0xd3, 0xbc, 0x75, 0x53, 0x8e, 0x3a, 0x2b, 0xfd, - 0x9a, 0x08, 0x77, 0x1e, 0xc7, 0x63, 0x90, 0xb7, 0x94, 0x1e, 0xac, 0xb7, - 0x96, 0xf1, 0x38, 0x17, 0x0c, 0xa8, 0x29, 0x77, 0x4e, 0xa9, 0x73, 0x0a, - 0x78, 0x75, 0xca, 0xeb, 0x23, 0xf3, 0xc8, 0x47, 0xad, 0x87, 0x5b, 0x82, - 0x09, 0x78, 0x9a, 0x67, 0x4d, 0x00, 0xa7, 0xa2, 0x13, 0x07, 0x9e, 0xcc, - 0x12, 0xd8, 0x9e, 0x6a, 0x69, 0xeb, 0xe8, 0x74, 0xd5, 0x2e, 0x82, 0x75, - 0x26, 0xbd, 0xec, 0x47, 0xbb, 0x15, 0x2d, 0x17, 0xe0, 0x8d, 0x37, 0x53, - 0x57, 0x0d, 0x17, 0x9f, 0xd3, 0x8f, 0x75, 0xb8, 0x3f, 0x6c, 0xff, 0xec, - 0x76, 0x95, 0xaa, 0x4e, 0xaa, 0xa5, 0xee, 0xb7, 0x94, 0x6b, 0xbd, 0x8e, - 0x51, 0x6f, 0xb6, 0x21, 0xeb, 0x78, 0x5b, 0x75, 0x57, 0x6b, 0x4f, 0xf3, - 0xfd, 0xe2, 0x29, 0xef, 0x6d, 0xc4, 0xd5, 0xd7, 0x60, 0x18, 0x47, 0xee, - 0xa0, 0xfd, 0xb0, 0xd1, 0xc0, 0xf8, 0x4f, 0x77, 0x5f, 0xfe, 0x26, 0x15, - 0x58, 0x59, 0xee, 0x27, 0x3e, 0x93, 0x5e, 0xbe, 0x7a, 0x19, 0xeb, 0x46, - 0xdb, 0x39, 0xc3, 0x8a, 0x18, 0x52, 0xee, 0xed, 0x6c, 0xff, 0x66, 0x87, - 0xea, 0x6d, 0x0e, 0xfc, 0x35, 0xe1, 0xe6, 0x1c, 0x21, 0x64, 0xeb, 0x87, - 0x7c, 0x63, 0x4c, 0x28, 0x65, 0xbf, 0xcc, 0x81, 0xc3, 0x38, 0x87, 0x18, - 0x3b, 0x62, 0x8c, 0xce, 0x3d, 0x42, 0x99, 0x04, 0x6b, 0x54, 0xea, 0xd8, - 0xa2, 0x45, 0x84, 0xb7, 0x68, 0xc2, 0x00, 0xcc, 0x83, 0x73, 0xf1, 0xe3, - 0xfe, 0x32, 0x96, 0xcd, 0xef, 0xc9, 0x56, 0xe8, 0xe8, 0xe4, 0x93, 0xc1, - 0xae, 0x21, 0x9a, 0xe3, 0x66, 0xc7, 0xed, 0x31, 0x86, 0xb2, 0x83, 0xa7, - 0x38, 0x9e, 0x7d, 0xe6, 0x26, 0xf1, 0x84, 0x58, 0x41, 0x4a, 0x8a, 0xf6, - 0x1e, 0x90, 0x23, 0xf3, 0x8d, 0x54, 0x26, 0x8c, 0x49, 0x38, 0x81, 0x57, - 0xc3, 0xd5, 0x91, 0x6b, 0x92, 0x2e, 0x10, 0x2d, 0x56, 0x4c, 0x21, 0xe7, - 0x52, 0xc8, 0x8a, 0x15, 0x6b, 0xb2, 0xe8, 0x5f, 0xfd, 0x92, 0x59, 0xd0, - 0xf4, 0x28, 0xc8, 0x7d, 0xce, 0xfe, 0xb2, 0x3f, 0x1e, 0xd8, 0xfa, 0x0c, - 0xd1, 0x8b, 0xff, 0xff, 0x08, 0x67, 0xd7, 0x92, 0x2c, 0x0f, 0x90, 0x65, - 0xf2, 0xb9, 0xaf, 0xdd, 0x04, 0x0e, 0xf4, 0x01, 0xd0, 0x0b, 0xf9, 0x0d, - 0x0a, 0x36, 0xf5, 0x4b, 0x7c, 0x91, 0x44, 0x74, 0x1b, 0xef, 0x91, 0x68, - 0x86, 0x65, 0x12, 0x54, 0xb3, 0x4b, 0x55, 0xab, 0xc1, 0x74, 0x8a, 0x0b, - 0x5c, 0xd3, 0xc3, 0x4e, 0xcd, 0x97, 0x65, 0xcd, 0x25, 0xb2, 0x30, 0x72, - 0x84, 0x53, 0xa6, 0xde, 0x43, 0x8e, 0x8b, 0x59, 0x3c, 0x4a, 0x21, 0x22, - 0x7f, 0x64, 0xb8, 0xb6, 0x83, 0x14, 0x62, 0xbe, 0x15, 0xe8, 0xa4, 0x1b, - 0xc1, 0xe2, 0xf9, 0xe4, 0x0c, 0xc4, 0x9f, 0x21, 0x9e, 0x6d, 0x55, 0x46, - 0x12, 0x89, 0xf9, 0x6f, 0x6f, 0x93, 0x65, 0x04, 0x40, 0xf3, 0x28, 0x68, - 0x53, 0xc2, 0x99, 0xa9, 0x03, 0x75, 0xfb, 0xd6, 0xbe, 0x09, 0xcf, 0x3f, - 0x2f, 0x76, 0xd0, 0x52, 0x45, 0x2e, 0x63, 0xdf, 0x85, 0x2d, 0xb5, 0xfa, - 0xc5, 0x78, 0xdb, 0xda, 0x53, 0x67, 0x1d, 0x18, 0x1f, 0x89, 0xb5, 0x5a, - 0x41, 0x97, 0xd2, 0xa7, 0x09, 0xcd, 0x16, 0x73, 0xf0, 0x9a, 0x89, 0x01, - 0x31, 0x30, 0x9f, 0xb5, 0x43, 0x59, 0x9f, 0xf6, 0xb2, 0xc2, 0x59, 0x57, - 0x57, 0x85, 0xa1, 0xc1, 0xba, 0xe7, 0x18, 0xd5, 0x4f, 0xce, 0xc9, 0xe9, - 0x00, 0xbc, 0xf8, 0x52, 0xbe, 0x40, 0x3c, 0x3b, 0x38, 0x1b, 0xc9, 0x29, - 0x67, 0x06, 0x48, 0xd7, 0xf6, 0xb0, 0xd0, 0x21, 0x90, 0x30, 0xf7, 0x67, - 0xd8, 0xe5, 0x18, 0x33, 0x1f, 0x39, 0x4d, 0xaf, 0x97, 0x66, 0x91, 0x7d, - 0xbb, 0xfe, 0x56, 0xb4, 0x77, 0x0b, 0xa0, 0xd5, 0xe5, 0x1c, 0x70, 0x05, - 0x5c, 0x82, 0xd7, 0x6d, 0x8b, 0x0a, 0xfc, 0x03, 0x91, 0x4d, 0xd0, 0x12, - 0xa8, 0x0e, 0xf5, 0x32, 0xae, 0xf7, 0x14, 0x64, 0x42, 0xf6, 0xfb, 0x2a, - 0x7f, 0x26, 0x7b, 0xdc, 0xc7, 0xb0, 0xae, 0xa9, 0xe7, 0xe6, 0x28, 0x58, - 0xdc, 0xd0, 0x0b, 0xf2, 0xe3, 0xcc, 0x6f, 0x28, 0x31, 0x95, 0x1b, 0xb1, - 0x0b, 0xb5, 0xaa, 0xf9, 0xf1, 0x8b, 0x8d, 0x07, 0xe1, 0x9b, 0xb4, 0xc3, - 0x6c, 0xd2, 0xec, 0xc7, 0x45, 0x6f, 0xec, 0xc3, 0x67, 0xc7, 0x09, 0x16, - 0x10, 0xd3, 0x79, 0x29, 0xbd, 0x26, 0xbb, 0xa8, 0x85, 0xae, 0xb2, 0x76, - 0xe6, 0x0c, 0x35, 0xac, 0xa8, 0xe7, 0xab, 0xe1, 0xde, 0x11, 0x99, 0x56, - 0xcd, 0x80, 0x1d, 0x1b, 0x16, 0x6f, 0xe2, 0xef, 0x02, 0x21, 0x2b, 0x67, - 0xdd, 0xcf, 0x9c, 0x88, 0x25, 0xfe, 0x15, 0xa2, 0xd8, 0x3e, 0x8d, 0x37, - 0xc8, 0xdd, 0xbb, 0xf2, 0xfb, 0x14, 0x95, 0xae, 0x93, 0x30, 0x3b, 0x86, - 0x2a, 0x16, 0x92, 0x6d, 0xa0, 0xd8, 0xc4, 0xa5, 0x3e, 0xa7, 0xa8, 0x93, - 0xe3, 0x56, 0xce, 0x18, 0x5b, 0x3e, 0x5b, 0xc4, 0x30, 0xc7, 0x85, 0x1c, - 0xe2, 0x9d, 0x1f, 0x49, 0x33, 0xee, 0x6b, 0xb1, 0xfd, 0x77, 0x75, 0x2f, - 0x5b, 0x33, 0xa3, 0x15, 0xec, 0xd9, 0xf1, 0x3d, 0x06, 0x05, 0xf7, 0x4b, - 0x48, 0x51, 0x3c, 0x3e, 0x3f, 0x97, 0x4d, 0xc0, 0xb8, 0xd9, 0x9b, 0xff, - 0x3e, 0xc5, 0xd7, 0x94, 0x89, 0x38, 0x5a, 0x69, 0xf5, 0x0c, 0x02, 0x98, - 0x6e, 0x28, 0xc2, 0xa7, 0x9b, 0x9a, 0x42, 0x93, 0x02, 0x89, 0x4a, 0x67, - 0x43, 0xfc, 0x78, 0xb7, 0x37, 0x24, 0x0a, 0x62, 0x7e, 0xdf, 0x63, 0x2b, - 0xef, 0x79, 0x69, 0xcc, 0xd9, 0xe1, 0xab, 0x3f, 0x8e, 0x4d, 0xa5, 0xd0, - 0xca, 0x24, 0x05, 0xce, 0x35, 0x4f, 0x34, 0xbe, 0xff, 0x12, 0x52, 0x44, - 0x43, 0x35, 0x63, 0x64, 0x4d, 0x22, 0x6a, 0x40, 0x89, 0x92, 0xa7, 0x04, - 0x30, 0x29, 0x8a, 0x70, 0x34, 0xda, 0x2d, 0xf5, 0x78, 0xf5, 0x0c, 0x1c, - 0x0e, 0xd8, 0x06, 0x49, 0x5c, 0xaf, 0x68, 0xd0, 0x18, 0x0a, 0xd9, 0xe1, - 0x17, 0x1a, 0x84, 0x03, 0x71, 0x4a, 0x43, 0xb5, 0x34, 0xdd, 0xd7, 0xd7, - 0x84, 0xc6, 0xa6, 0x8d, 0x06, 0xd5, 0x15, 0xfa, 0x19, 0x8c, 0xe7, 0xac, - 0x1c, 0x4a, 0x95, 0x48, 0xf2, 0xb3, 0xcd, 0xf5, 0xd3, 0xfe, 0x3e, 0x28, - 0x07, 0x90, 0x57, 0x95, 0x7d, 0x5c, 0xda, 0x29, 0x5b, 0x42, 0x70, 0x58, - 0xdb, 0x6c, 0x69, 0xba, 0x88, 0xa6, 0x4f, 0xc2, 0xb4, 0xf7, 0x33, 0x55, - 0xd9, 0x62, 0x6f, 0x63, 0x65, 0x6a, 0x1f, 0x77, 0xc7, 0xec, 0xd9, 0x99, - 0x6b, 0xed, 0xd8, 0x9b, 0x09, 0x9a, 0xca, 0x07, 0x73, 0xab, 0xe5, 0x61, - 0x5b, 0x49, 0x4a, 0xa4, 0xff, 0xff, 0x18, 0x43, 0x73, 0xde, 0xdc, 0x65, - 0x47, 0xcb, 0xc2, 0x37, 0xcc, 0x10, 0xe7, 0xc4, 0xa1, 0x3d, 0xb5, 0x11, - 0xce, 0x1f, 0xd7, 0xb3, 0x4c, 0x46, 0x4a, 0xa1, 0x6d, 0x2f, 0xd6, 0x7e, - 0x30, 0xa7, 0x0e, 0x31, 0x71, 0xbc, 0xfb, 0xf3, 0xf3, 0x97, 0x48, 0xf9, - 0x38, 0xf4, 0x76, 0x22, 0x78, 0x4e, 0x90, 0x9f, 0x54, 0x2d, 0xdc, 0x23, - 0x05, 0xc2, 0x3e, 0xf1, 0x83, 0x4c, 0x3b, 0x42, 0x00, 0xdc, 0x5b, 0x1e, - 0x2f, 0x18, 0x6b, 0x45, 0xe3, 0x08, 0xd0, 0xa7, 0xad, 0x7e, 0xad, 0x85, - 0xde, 0x3f, 0x34, 0x5b, 0xb4, 0x64, 0xbc, 0x50, 0x4f, 0x26, 0xb1, 0x21, - 0x98, 0xb0, 0xc1, 0x9a, 0x7d, 0x47, 0xa9, 0xa3, 0x49, 0x8d, 0xbb, 0xad, - 0xfc, 0x65, 0xc7, 0xeb, 0x12, 0xdd, 0xdb, 0x38, 0x2d, 0xb3, 0xa1, 0x42, - 0x55, 0xa3, 0x7e, 0x1a, 0x78, 0x98, 0xc7, 0x0f, 0x63, 0x39, 0xc7, 0x72, - 0x04, 0x61, 0x3a, 0xf0, 0x77, 0x20, 0xb7, 0xf6, 0x59, 0x3c, 0x55, 0x2c, - 0x8f, 0x72, 0x54, 0x66, 0x49, 0x41, 0xb6, 0xd9, 0x99, 0x53, 0x06, 0x19, - 0x95, 0xfc, 0x28, 0x7c, 0x50, 0x8b, 0xcd, 0x9c, 0xc3, 0x92, 0xdf, 0x4d, - 0xa3, 0x68, 0x9a, 0x5a, 0xaa, 0x06, 0x32, 0x9f, 0xff, 0xdf, 0xcc, 0x11, - 0x6e, 0x9e, 0x33, 0xb1, 0x5d, 0x57, 0x3f, 0xea, 0xf6, 0xfb, 0x01, 0xa1, - 0xf5, 0xa1, 0x77, 0x0d, 0x98, 0x34, 0x5c, 0xd0, 0xa1, 0xd6, 0x94, 0x6d, - 0x8d, 0xb1, 0xc9, 0xbe, 0x4f, 0x43, 0x48, 0xca, 0xe6, 0x73, 0xad, 0xc6, - 0xee, 0x7a, 0x36, 0x6c, 0xae, 0xbb, 0x96, 0x96, 0x61, 0xfa, 0xcb, 0x07, - 0xd6, 0x09, 0xba, 0xff, 0x11, 0xe9, 0x08, 0x82, 0x9a, 0xb8, 0x80, 0x2e, - 0x22, 0x26, 0x43, 0xdb, 0xd4, 0xef, 0xd6, 0xe1, 0xcc, 0xbc, 0x88, 0x53, - 0x1d, 0xa3, 0x57, 0x7a, 0x99, 0xab, 0xe6, 0x9e, 0x0b, 0x43, 0x03, 0x11, - 0x68, 0x4c, 0xa5, 0xde, 0x07, 0xc1, 0x6c, 0xb1, 0x85, 0xae, 0x81, 0xb8, - 0x3b, 0x34, 0x5e, 0xa8, 0x62, 0x75, 0x5e, 0x9c, 0x28, 0x02, 0xf7, 0x76, - 0xda, 0x1a, 0x82, 0xe2, 0xba, 0xb5, 0x4a, 0xd8, 0xaa, 0x90, 0xf9, 0x51, - 0x7e, 0xa3, 0x49, 0xb3, 0x86, 0xc1, 0x5d, 0xe0, 0x52, 0x01, 0xd1, 0xfd, - 0x71, 0x30, 0xe4, 0x19, 0x25, 0xd3, 0x28, 0x15, 0x15, 0xaa, 0x23, 0x6e, - 0x97, 0xfa, 0x77, 0xb6, 0xd2, 0x6e, 0x7e, 0x93, 0x63, 0x3f, 0x75, 0x24, - 0x57, 0xf3, 0x9f, 0x18, 0x46, 0xd5, 0x09, 0x89, 0x55, 0xa3, 0xfd, 0x6e, - 0xfd, 0x40, 0xb4, 0xe7, 0x5d, 0x21, 0x44, 0x6e, 0x52, 0x62, 0x66, 0xae, - 0xe2, 0xeb, 0x93, 0x4c, 0x17, 0x12, 0x48, 0x88, 0xf6, 0x59, 0x81, 0xfb, - 0x88, 0x5c, 0x21, 0x14, 0x96, 0xeb, 0x70, 0xcf, 0xdc, 0xed, 0xc0, 0x56, - 0xaf, 0x83, 0x57, 0x8b, 0x6f, 0x65, 0x65, 0x65, 0x9e, 0x8d, 0x90, 0x92, - 0x91, 0x08, 0x08, 0x9e, 0x71, 0x3b, 0x14, 0x97, 0xd6, 0xc8, 0xdb, 0x17, - 0x1e, 0xef, 0x5c, 0x95, 0x87, 0xd0, 0x6f, 0x84, 0x66, 0xa0, 0x01, 0x97, - 0xd9, 0xfb, 0x24, 0x65, 0x41, 0xfe, 0x1c, 0x95, 0x59, 0xb5, 0xe6, 0x52, - 0x05, 0x7a, 0xac, 0xeb, 0xd6, 0xff, 0xcd, 0xb6, 0xde, 0x7f, 0xd4, 0xd1, - 0x1c, 0x04, 0x8c, 0x01, 0x8d, 0x54, 0xac, 0xcd, 0x00, 0xf6, 0x40, 0xfc, - 0x6e, 0xbe, 0x9a, 0x87, 0x51, 0xf6, 0x77, 0x45, 0x5a, 0xfc, 0x4c, 0x5b, - 0x0d, 0x4b, 0xa1, 0xb7, 0x98, 0xde, 0x78, 0xd0, 0x61, 0x92, 0x97, 0xfe, - 0x9a, 0x08, 0xf4, 0x07, 0xd6, 0xee, 0x4c, 0x2b, 0x43, 0x22, 0xde, 0x43, - 0xab, 0x59, 0x35, 0x1e, 0x0e, 0xb4, 0x95, 0x05, 0xf7, 0x84, 0x6a, 0xa8, - 0x2b, 0x93, 0x6e, 0xb5, 0xb0, 0xf6, 0xd8, 0x12, 0xab, 0x6b, 0x7c, 0x65, - 0x5b, 0x74, 0x4e, 0xce, 0xf9, 0x45, 0x57, 0xa1, 0x6a, 0xaa, 0x1a, 0xcd, - 0x08, 0x67, 0x57, 0x9c, 0x4f, 0x1f, 0x5d, 0x95, 0xde, 0x4c, 0x64, 0xda, - 0x96, 0x69, 0x8c, 0x13, 0x7c, 0x54, 0x2a, 0x15, 0x4e, 0x12, 0xf1, 0x86, - 0xa2, 0x8c, 0x9f, 0xcf, 0x97, 0x15, 0x3a, 0xd3, 0xaa, 0x4b, 0x1c, 0x5f, - 0xfc, 0xdd, 0x9a, 0xb4, 0xc4, 0xaf, 0x56, 0xc8, 0x70, 0xbe, 0x05, 0x0b, - 0x11, 0xfa, 0xff, 0x35, 0x50, 0xd5, 0x03, 0xfb, 0x33, 0xa5, 0x31, 0xf3, - 0x04, 0x57, 0xed, 0x42, 0x22, 0xde, 0xe3, 0x80, 0xd8, 0xea, 0xc9, 0xb3, - 0xa4, 0xed, 0x73, 0x64, 0xc9, 0xa8, 0x62, 0xaf, 0x30, 0xb1, 0xe4, 0x43, - 0x9b, 0xc5, 0x3f, 0x96, 0xa5, 0x67, 0x6d, 0xb5, 0x1e, 0xf0, 0xb0, 0x47, - 0x45, 0x8c, 0x6d, 0xd1, 0xf5, 0x96, 0x12, 0xd9, 0x83, 0x00, 0xc8, 0xb0, - 0x38, 0xa6, 0xb4, 0x4d, 0x60, 0xd2, 0x9f, 0x3f, 0x31, 0xa0, 0x5a, 0x93, - 0x9d, 0xc4, 0x9d, 0xf9, 0xbc, 0xfd, 0x9f, 0xa5, 0xdd, 0x20, 0x96, 0x37, - 0x99, 0xd9, 0x80, 0xf3, 0xa3, 0x5a, 0xa6, 0x8f, 0x24, 0x0e, 0x9a, 0xd7, - 0x81, 0x00, 0x22, 0xbc, 0x9a, 0xcd, 0x3b, 0x1e, 0x67, 0x64, 0xbd, 0x1a, - 0xda, 0x26, 0xb4, 0x47, 0xb0, 0x18, 0x99, 0xad, 0xb4, 0x72, 0xe0, 0x63, - 0x35, 0x2b, 0xe3, 0x19, 0xe6, 0x42, 0xeb, 0x42, 0x97, 0x0f, 0x8c, 0x0a, - 0xae, 0x36, 0xff, 0x34, 0xfd, 0x1b, 0x14, 0x06, 0xbe, 0xa6, 0xe0, 0xf3, - 0x5f, 0x02, 0x0a, 0x8b, 0xed, 0x4d, 0xa9, 0xa6, 0xb4, 0xc9, 0x66, 0x86, - 0x90, 0xa1, 0xa5, 0x02, 0x2d, 0xce, 0x97, 0xcf, 0xc6, 0x5c, 0xea, 0x56, - 0x63, 0x13, 0x5c, 0xba, 0x9b, 0xb1, 0x9b, 0xfe, 0xd0, 0xef, 0xb7, 0x43, - 0x0a, 0x60, 0xbd, 0x78, 0xfe, 0xd2, 0x28, 0xca, 0xf5, 0xe0, 0x85, 0x0d, - 0x02, 0x5d, 0x2e, 0x6a, 0xcb, 0x83, 0xae, 0x75, 0xe4, 0xba, 0xa4, 0x8b, - 0xa2, 0x6b, 0xad, 0x2f, 0x47, 0xb4, 0xee, 0x6b, 0xcc, 0x5a, 0x21, 0xa1, - 0xac, 0xad, 0x9f, 0x12, 0x6e, 0x95, 0x75, 0xb2, 0x03, 0x54, 0x7c, 0xa0, - 0xd7, 0x80, 0xeb, 0x91, 0x04, 0xd4, 0xc0, 0x4a, 0x51, 0x75, 0x3c, 0x25, - 0xf1, 0x89, 0x32, 0x63, 0x47, 0xaf, 0x63, 0x68, 0xff, 0x05, 0x31, 0x1f, - 0x77, 0xce, 0xd7, 0x9b, 0xf7, 0x38, 0xd4, 0x30, 0xf8, 0x83, 0xf0, 0x68, - 0xff, 0x8f, 0xf5, 0x25, 0x78, 0xa3, 0x99, 0xcd, 0xa2, 0x11, 0x0e, 0x26, - 0xa0, 0x7b, 0x22, 0xf5, 0xdc, 0xdd, 0x17, 0x94, 0x00, 0x5c, 0xde, 0xb2, - 0xe2, 0x37, 0x00, 0x94, 0x57, 0x6f, 0xc5, 0x65, 0xa1, 0xfe, 0xdd, 0xa1, - 0x51, 0x6d, 0x38, 0xb2, 0xe4, 0xd4, 0x62, 0xfc, 0xf1, 0xc8, 0xf2, 0x60, - 0x08, 0x2e, 0x58, 0xb0, 0x43, 0xa5, 0xc6, 0xe0, 0x9f, 0xbb, 0xff, 0xb5, - 0xc0, 0x36, 0xca, 0xf9, 0x48, 0x7a, 0x87, 0x15, 0xf6, 0xad, 0x09, 0x3f, - 0x20, 0xe8, 0x11, 0x89, 0xcd, 0xe5, 0x8a, 0x09, 0x35, 0x49, 0xee, 0x31, - 0xa4, 0x7a, 0xe6, 0x37, 0xe1, 0x6f, 0x26, 0x61, 0xd6, 0xd1, 0xa4, 0x8f, - 0xa2, 0x7b, 0x43, 0x83, 0x6d, 0xcc, 0x50, 0x4a, 0x88, 0x5e, 0x14, 0x8b, - 0xc2, 0xb4, 0x40, 0x2f, 0xe0, 0xdf, 0xcb, 0xb2, 0xf5, 0x44, 0x12, 0x91, - 0x31, 0x04, 0x84, 0xce, 0xda, 0x58, 0xc8, 0x74, 0x7b, 0x2e, 0xaf, 0xf7, - 0x8b, 0xcc, 0x53, 0x9d, 0xd0, 0x2a, 0x6c, 0x70, 0xf7, 0xe4, 0x80, 0xd1, - 0x94, 0xc0, 0x51, 0x27, 0xe3, 0x9a, 0xeb, 0x26, 0x7d, 0xc7, 0xc5, 0x96, - 0x63, 0x1e, 0x2d, 0x22, 0xd9, 0x53, 0x79, 0x0b, 0xf5, 0x1d, 0xbf, 0x94, - 0xd8, 0xe1, 0xea, 0xe6, 0x84, 0x46, 0x5c, 0xf3, 0x55, 0x59, 0xa4, 0x06, - 0x96, 0xc3, 0x6f, 0x53, 0xac, 0x76, 0xff, 0x8a, 0xa5, 0xc4, 0x6a, 0xa6, - 0xdd, 0xba, 0x81, 0x52, 0xe1, 0x25, 0xbb, 0xad, 0x29, 0x84, 0xa6, 0x6e, - 0x3d, 0x16, 0xdc, 0xcc, 0xd7, 0x2a, 0x9b, 0x3e, 0x20, 0x42, 0x62, 0x47, - 0xcc, 0xed, 0x5f, 0xea, 0xd7, 0x71, 0x4c, 0x39, 0xf5, 0x5e, 0x99, 0x3c, - 0xaa, 0x2d, 0xbe, 0x0f, 0xb2, 0xbd, 0x60, 0x55, 0xd8, 0x3f, 0xbf, 0xc0, - 0x91, 0xf8, 0xe9, 0xd1, 0x64, 0x24, 0xed, 0x62, 0xb1, 0xd7, 0xb6, 0x8f, - 0xba, 0x3f, 0x4e, 0x8d, 0xe5, 0xea, 0x84, 0xbe, 0x2e, 0x52, 0xb9, 0x59, - 0xf7, 0xc6, 0x36, 0xa3, 0xb6, 0xce, 0xbe, 0x4e, 0xbc, 0x19, 0xc7, 0x6e, - 0xd9, 0x47, 0x6e, 0x21, 0x91, 0xf3, 0x0e, 0xaa, 0x6f, 0xe0, 0x95, 0x58, - 0xb1, 0x4f, 0x41, 0xcb, 0x37, 0x3d, 0x67, 0x6a, 0x48, 0x9c, 0xda, 0xfe, - 0x88, 0x05, 0xc4, 0x67, 0x3d, 0x75, 0x5d, 0x2b, 0xa2, 0x2c, 0x93, 0x17, - 0x86, 0x3f, 0xe0, 0x33, 0xc5, 0x84, 0x24, 0x53, 0x45, 0x5e, 0xff, 0x9b, - 0xef, 0x77, 0x20, 0xe2, 0x30, 0xd4, 0xa9, 0xbd, 0xce, 0xa3, 0x43, 0x4e, - 0xe1, 0xe6, 0xf9, 0x40, 0x7b, 0x37, 0x72, 0xcf, 0x0e, 0x86, 0x9d, 0xb1, - 0x16, 0xf6, 0x2b, 0x57, 0x85, 0x00, 0xfe, 0x0c, 0x21, 0x46, 0x15, 0x75, - 0x39, 0xaa, 0xcf, 0xa6, 0x65, 0x79, 0x73, 0x0a, 0x7b, 0x4c, 0x66, 0x28, - 0xfd, 0x8f, 0xdd, 0xd0, 0x5c, 0xe3, 0x47, 0xca, 0x2f, 0x67, 0x57, 0xef, - 0x5b, 0x67, 0xeb, 0x52, 0x40, 0x31, 0xa1, 0xf7, 0xf1, 0x1f, 0x1f, 0xcf, - 0x6c, 0x63, 0x18, 0x64, 0x3e, 0xbb, 0xdd, 0xbc, 0xe9, 0x55, 0xcf, 0x22, - 0x95, 0xd8, 0xc3, 0xec, 0x64, 0x74, 0x14, 0x4a, 0x1f, 0x08, 0x60, 0xa9, - 0xdf, 0xb0, 0x7b, 0xe1, 0x7f, 0x22, 0x64, 0xe5, 0xed, 0xab, 0x06, 0xfa, - 0x3b, 0x9c, 0xf3, 0xfa, 0xc2, 0x77, 0xd7, 0xcb, 0xcc, 0xba, 0xdd, 0x22, - 0x61, 0x46, 0x0d, 0xba, 0x4a, 0x1b, 0x43, 0xee, 0x14, 0x89, 0x29, 0xe1, - 0xa5, 0x5f, 0x5f, 0x59, 0x08, 0x8f, 0xdd, 0xee, 0x6b, 0x24, 0x33, 0x76, - 0x82, 0xcb, 0x58, 0xab, 0xea, 0xb8, 0xc3, 0x2a, 0x97, 0x2d, 0x85, 0x71, - 0x26, 0x8b, 0x19, 0x12, 0x1a, 0xd0, 0x70, 0xb5, 0xd4, 0xf5, 0x9b, 0xb9, - 0xf2, 0xca, 0x72, 0xc3, 0x12, 0x94, 0x96, 0x91, 0x00, 0xbd, 0xce, 0x26, - 0xeb, 0x9a, 0xce, 0x33, 0x77, 0xfc, 0x45, 0x6b, 0x14, 0x61, 0x48, 0xf4, - 0xab, 0xe5, 0xae, 0x8a, 0x2a, 0x4d, 0x6c, 0x5b, 0xce, 0xfc, 0xa8, 0x16, - 0xe5, 0xef, 0xa5, 0x3d, 0x48, 0xef, 0x4c, 0x92, 0xe7, 0x26, 0x53, 0x16, - 0xc6, 0x5a, 0xb0, 0x57, 0x91, 0x38, 0xa8, 0x67, 0x52, 0x7f, 0x87, 0x57, - 0xf9, 0x74, 0xf4, 0xe2, 0xef, 0xbf, 0xd4, 0x3d, 0xb4, 0xe9, 0x4f, 0x25, - 0xd3, 0x59, 0xce, 0xc7, 0x14, 0xfd, 0x23, 0x4b, 0x22, 0x63, 0xea, 0x0d, - 0xe7, 0xdf, 0x1c, 0xbc, 0xaa, 0x61, 0xa3, 0xd1, 0x14, 0xf8, 0x96, 0x43, - 0xf5, 0xe6, 0xaf, 0x57, 0x46, 0xa1, 0xc3, 0xe5, 0x7f, 0x53, 0xed, 0x71, - 0x62, 0x59, 0x65, 0xfa, 0x99, 0x9f, 0x9f, 0x63, 0xf1, 0xfa, 0x64, 0x89, - 0xe1, 0xcf, 0xeb, 0x0c, 0xdb, 0x88, 0x7a, 0xaa, 0x4c, 0x69, 0x4c, 0x50, - 0x73, 0x97, 0x9a, 0xee, 0xd2, 0x39, 0x1f, 0xbe, 0x22, 0x33, 0x51, 0x8a, - 0xb2, 0xf0, 0xe6, 0x0f, 0x85, 0xe3, 0x4f, 0x98, 0x22, 0x94, 0x2f, 0x15, - 0x67, 0x92, 0xd2, 0x44, 0x35, 0x87, 0xa1, 0xdb, 0x9a, 0x13, 0x60, 0x71, - 0x50, 0x9c, 0x49, 0xf4, 0xbd, 0x8c, 0xfd, 0x17, 0x4e, 0x43, 0x4e, 0xb5, - 0x48, 0x40, 0x70, 0x02, 0xd7, 0x51, 0x24, 0x01, 0x3f, 0xdf, 0xe5, 0x38, - 0x3a, 0x2f, 0xb1, 0x64, 0x1a, 0x21, 0x38, 0xa8, 0x7d, 0x95, 0x97, 0x9d, - 0x44, 0x74, 0x4b, 0xb2, 0x23, 0x41, 0x09, 0x95, 0x58, 0xc5, 0x14, 0x8c, - 0x89, 0x03, 0xb3, 0x83, 0x3d, 0x82, 0xe4, 0x3a, 0xa4, 0x95, 0x2d, 0x6e, - 0x6f, 0x7a, 0x49, 0x8b, 0x49, 0x4e, 0xb9, 0x5b, 0x5a, 0x8f, 0x9d, 0x6e, - 0xf5, 0x1d, 0x11, 0x93, 0x47, 0xfd, 0xa5, 0xe4, 0xaa, 0x91, 0xb1, 0x0c, - 0x8e, 0xab, 0xf6, 0xff, 0x14, 0x14, 0xa4, 0xfa, 0x4d, 0x95, 0x1a, 0x44, - 0x99, 0xe7, 0xf4, 0xbd, 0xdc, 0x4c, 0x8e, 0x1e, 0xc6, 0x0c, 0xc0, 0x93, - 0x7d, 0xf2, 0x8c, 0x50, 0xba, 0x8a, 0xcf, 0x2d, 0xd4, 0xc9, 0xd8, 0x05, - 0xe8, 0x9b, 0xc3, 0x3c, 0x44, 0xb4, 0xad, 0x28, 0x3e, 0x76, 0x11, 0xf1, - 0x3e, 0x41, 0x98, 0x51, 0xa1, 0x18, 0x99, 0x37, 0xbe, 0xd8, 0xd5, 0x7b, - 0x97, 0x39, 0x7a, 0xe3, 0xfe, 0x6f, 0xc5, 0x5e, 0xa8, 0x56, 0x1d, 0x38, - 0xac, 0x7c, 0xc6, 0xc7, 0x10, 0x40, 0xff, 0xb4, 0x16, 0xf6, 0x7a, 0x9c, - 0x57, 0x06, 0x41, 0x8d, 0xb1, 0x0e, 0xb9, 0x0c, 0xeb, 0x23, 0xe7, 0x2a, - 0x1e, 0x98, 0xfe, 0x22, 0x07, 0xb6, 0xa1, 0xb5, 0x22, 0xe3, 0x2e, 0x48, - 0x8c, 0x44, 0xd3, 0x60, 0x39, 0xac, 0x9f, 0xaa, 0x60, 0xe1, 0x03, 0x61, - 0xbe, 0x32, 0x9a, 0x1f, 0xee, 0x20, 0xe3, 0x16, 0x61, 0x74, 0x19, 0xc1, - 0xf1, 0x15, 0x39, 0x5a, 0x8f, 0xf0, 0xea, 0xda, 0xdc, 0xa7, 0x3f, 0x3e, - 0xb7, 0x70, 0x41, 0x3e, 0xa4, 0xbb, 0x97, 0xee, 0x2c, 0x2f, 0xa9, 0x17, - 0x54, 0x43, 0x4a, 0x5b, 0x32, 0x5e, 0xe1, 0x5e, 0x0d, 0x8b, 0xbc, 0x2c, - 0x97, 0x0d, 0x07, 0x36, 0x61, 0x31, 0x87, 0x2c, 0x63, 0xf2, 0xfc, 0x4e, - 0x4e, 0x47, 0x87, 0xfb, 0xe0, 0xfc, 0xa9, 0x25, 0xcd, 0xbc, 0x17, 0xb0, - 0x88, 0x91, 0x15, 0xaa, 0xcf, 0x26, 0xa3, 0x24, 0x8d, 0xc9, 0xa0, 0xdb, - 0x09, 0xeb, 0x82, 0x15, 0x68, 0x0b, 0xb5, 0x20, 0xe7, 0xad, 0xc6, 0x67, - 0x67, 0xa7, 0xb0, 0xce, 0x06, 0xcd, 0x24, 0x7c, 0x8d, 0x3a, 0x05, 0xef, - 0x0f, 0xb3, 0x4a, 0x26, 0x72, 0x0d, 0x00, 0x19, 0x65, 0xbf, 0x5f, 0x9e, - 0xb7, 0xda, 0x40, 0xbb, 0x8d, 0xe5, 0x4d, 0x71, 0x0e, 0xc6, 0x89, 0xa5, - 0x8d, 0x4f, 0x55, 0x09, 0xe4, 0x8a, 0xce, 0x3a, 0x0c, 0x97, 0x7e, 0x6b, - 0x73, 0x30, 0x17, 0x56, 0x45, 0x5f, 0x0d, 0xa9, 0x5c, 0xe3, 0x93, 0x79, - 0x0f, 0x1b, 0x5e, 0xf4, 0x26, 0xae, 0xc1, 0x30, 0x04, 0x6c, 0x66, 0xb6, - 0xed, 0x04, 0x74, 0x11, 0x5e, 0x6b, 0xb6, 0x99, 0x1d, 0x29, 0x64, 0x85, - 0xe4, 0xb5, 0x3e, 0x3f, 0x7b, 0xe3, 0xcf, 0x5c, 0x29, 0xda, 0xca, 0xa3, - 0x70, 0x9f, 0x21, 0xc5, 0x9f, 0xd2, 0xa0, 0xa1, 0x9a, 0x4d, 0x38, 0xe5, - 0x87, 0x60, 0x25, 0x6c, 0xd2, 0x22, 0xd3, 0xc6, 0x05, 0x24, 0xd4, 0xbc, - 0x4b, 0x4d, 0xbc, 0xa8, 0xe0, 0xc4, 0x5d, 0x17, 0x7c, 0x43, 0x9d, 0xc8, - 0xdb, 0x58, 0x1e, 0x86, 0xaa, 0xcb, 0x48, 0xd5, 0x70, 0x4f, 0x35, 0x8a, - 0x96, 0x77, 0x90, 0x3a, 0x62, 0xb1, 0x93, 0x16, 0x36, 0xf3, 0xd7, 0x29, - 0x25, 0xb0, 0xea, 0xc9, 0xec, 0x7f, 0xb5, 0xa5, 0x1f, 0x23, 0x30, 0xff, - 0x7e, 0x13, 0xc0, 0x6e, 0xa7, 0x2f, 0x5a, 0x35, 0xd1, 0x9e, 0x57, 0xed, - 0xf5, 0xd3, 0x42, 0xcf, 0x02, 0x67, 0x0e, 0x21, 0x2d, 0x6b, 0x90, 0xe7, - 0xc2, 0x07, 0x2d, 0x43, 0xb5, 0xc5, 0x09, 0xb5, 0x0f, 0x93, 0xbc, 0xb6, - 0x72, 0x36, 0x82, 0x12, 0x8e, 0xfd, 0x52, 0x1c, 0x2f, 0x5a, 0x2b, 0x23, - 0xc0, 0xcb, 0x91, 0x18, 0xe1, 0xe2, 0xa0, 0x12, 0x89, 0x61, 0x7d, 0xa8, - 0xc2, 0x09, 0xfe, 0x5e, 0xdf, 0x1c, 0xd8, 0xc1, 0x6d, 0x01, 0xe1, 0x9b, - 0x5d, 0xc8, 0x3f, 0xa8, 0xd5, 0x71, 0xd9, 0xea, 0x89, 0xb5, 0x9b, 0xd3, - 0xb0, 0xa7, 0x51, 0xa6, 0x22, 0xf6, 0xf6, 0xeb, 0x48, 0x9b, 0xd6, 0x45, - 0xf6, 0x01, 0x67, 0x91, 0x97, 0x3a, 0x0b, 0xb1, 0xfa, 0x9c, 0xd1, 0x42, - 0xb1, 0x9e, 0x39, 0xaa, 0x02, 0xb7, 0xb9, 0xbf, 0x08, 0xf5, 0xaf, 0xe8, - 0xb8, 0x7e, 0xf3, 0x02, 0x53, 0xff, 0x1f, 0xae, 0x8b, 0xee, 0xaf, 0x44, - 0x11, 0x6c, 0x16, 0xfb, 0x79, 0x8b, 0xb8, 0x44, 0xb3, 0x13, 0x77, 0xdd, - 0xde, 0xa9, 0x9b, 0xd5, 0x66, 0x7c, 0x8f, 0xde, 0x59, 0x15, 0x3d, 0xc3, - 0x3b, 0x18, 0xff, 0x91, 0x3f, 0xc6, 0x32, 0xd2, 0xe1, 0x2d, 0xe4, 0x9b, - 0xa8, 0x9f, 0x97, 0xf1, 0x7e, 0x23, 0x6e, 0x31, 0x79, 0xb9, 0x7e, 0x6e, - 0xcb, 0xbc, 0x47, 0x62, 0x24, 0x82, 0x94, 0xcb, 0xc0, 0xe9, 0x19, 0x25, - 0xaf, 0xf5, 0xa0, 0x3a, 0xf2, 0xcb, 0x45, 0xf3, 0xa2, 0x3b, 0xdb, 0xe7, - 0x51, 0x63, 0xa4, 0x6f, 0xb6, 0x0f, 0xd0, 0x52, 0xef, 0xce, 0x35, 0x33, - 0x0e, 0xcf, 0xf8, 0x7a, 0x1a, 0x53, 0xec, 0xfb, 0xfa, 0xdb, 0xca, 0xd1, - 0xa6, 0xab, 0x77, 0x43, 0xb0, 0x8a, 0x63, 0x92, 0xa0, 0x2b, 0x23, 0xe9, - 0xf4, 0x01, 0x63, 0xd7, 0xe6, 0xbf, 0x18, 0x57, 0x2a, 0xf4, 0xc5, 0xd6, - 0x5a, 0xe1, 0x7c, 0x79, 0xff, 0xf9, 0xc5, 0x68, 0xb1, 0xdb, 0xab, 0xaf, - 0x26, 0x78, 0x05, 0x81, 0x13, 0x27, 0x03, 0xbe, 0x2d, 0xdc, 0x83, 0x60, - 0x1d, 0x41, 0x58, 0xf3, 0xa0, 0x08, 0x8c, 0x3c, 0x99, 0xa9, 0xae, 0x8e, - 0xcd, 0x5c, 0xcc, 0x8f, 0x03, 0x6f, 0x88, 0x7b, 0x18, 0x7d, 0x37, 0x80, - 0x30, 0x1d, 0xc3, 0x3d, 0x7b, 0xa1, 0x21, 0x3b, 0xae, 0x45, 0xb3, 0xf2, - 0x76, 0x54, 0x5d, 0xa8, 0x1e, 0x2b, 0x80, 0x64, 0xc2, 0xce, 0x5d, 0x44, - 0x5c, 0x35, 0x7e, 0x1f, 0xa8, 0x2a, 0xcd, 0x52, 0x43, 0x1e, 0xd6, 0x67, - 0x56, 0x56, 0x8b, 0x4d, 0xca, 0x11, 0x38, 0x5a, 0x00, 0xce, 0xbb, 0xc0, - 0xb3, 0x23, 0xf3, 0xe2, 0xab, 0xbc, 0xd2, 0xa4, 0xeb, 0x5e, 0x69, 0x27, - 0xc6, 0x31, 0x14, 0x3e, 0x63, 0x41, 0xce, 0x09, 0x32, 0xab, 0xc5, 0xc2, - 0x31, 0x47, 0x3a, 0x99, 0x03, 0x05, 0x77, 0x23, 0xc3, 0xa3, 0x77, 0x13, - 0x60, 0x79, 0x4a, 0x77, 0xd1, 0x92, 0xb8, 0x7d, 0xe6, 0x8e, 0x3b, 0x8c, - 0x69, 0x39, 0xcc, 0x00, 0x06, 0xe2, 0x62, 0x84, 0x80, 0x73, 0x12, 0xae, - 0x4d, 0x61, 0x60, 0xad, 0x6d, 0x1d, 0x43, 0x44, 0x65, 0x84, 0xdd, 0x46, - 0x4b, 0x11, 0xea, 0xdc, 0x47, 0x69, 0xc9, 0xbe, 0x72, 0x25, 0x6c, 0x69, - 0x57, 0x23, 0xae, 0x8d, 0x91, 0x63, 0x3e, 0x9a, 0xde, 0x96, 0xb8, 0x13, - 0x60, 0xd6, 0x4b, 0x8b, 0x05, 0x06, 0x7d, 0x78, 0xcf, 0x51, 0x0b, 0x5a, - 0x3d, 0x88, 0x33, 0x6d, 0x1c, 0x0b, 0x91, 0x3f, 0x17, 0xa9, 0x4e, 0x5a, - 0xb9, 0x89, 0x1a, 0xcd, 0x5a, 0x86, 0x6e, 0x9f, 0x64, 0x8c, 0xf0, 0xab, - 0x98, 0x41, 0xd2, 0xf6, 0x3e, 0x1b, 0x79, 0x29, 0xb7, 0x66, 0xa1, 0x2a, - 0xc2, 0x71, 0xfc, 0xda, 0xb4, 0xdf, 0xbd, 0x2d, 0x7c, 0x03, 0xba, 0xdd, - 0x64, 0x6b, 0xa7, 0x17, 0x55, 0xf1, 0xfe, 0xc5, 0xc6, 0xdf, 0x96, 0x65, - 0x8a, 0xc5, 0x3b, 0xb5, 0x37, 0x39, 0xa7, 0x3c, 0x83, 0x0a, 0xbc, 0x5e, - 0xf0, 0x3c, 0x8b, 0x30, 0xb0, 0x7b, 0x90, 0xba, 0x1b, 0x85, 0x2d, 0xc3, - 0xd6, 0x60, 0x2e, 0x4b, 0xa4, 0x2d, 0x62, 0xc8, 0xb3, 0x01, 0x8a, 0x48, - 0xd3, 0xe2, 0xd6, 0xf0, 0x56, 0x7d, 0xb7, 0x36, 0x64, 0xa9, 0x1f, 0x42, - 0x88, 0xa4, 0x34, 0xee, 0x7a, 0x28, 0x32, 0xd1, 0x2f, 0x2f, 0x26, 0x11, - 0x63, 0xab, 0x6c, 0xf2, 0x94, 0x54, 0x08, 0x66, 0xaf, 0x55, 0x0e, 0xd8, - 0x45, 0xe0, 0x8c, 0x8c, 0x17, 0x7b, 0xb5, 0xa3, 0x15, 0xfa, 0xb0, 0xcd, - 0x04, 0x9e, 0xbf, 0xc5, 0x09, 0x4e, 0x76, 0xb3, 0x74, 0xe0, 0x50, 0xad, - 0xaf, 0xf1, 0xff, 0x18, 0xe1, 0x7b, 0x94, 0x44, 0x2f, 0x6e, 0xb3, 0x4b, - 0x3f, 0x75, 0x8a, 0xa8, 0x05, 0xd5, 0x55, 0xab, 0xbb, 0xc0, 0x32, 0x3a, - 0xca, 0xe2, 0x78, 0x74, 0x0d, 0x40, 0x19, 0xdb, 0x99, 0x9e, 0xad, 0xbf, - 0xc1, 0x04, 0xa3, 0x10, 0x49, 0xfa, 0x7b, 0xf7, 0x2f, 0x1c, 0xf6, 0xa8, - 0xba, 0x37, 0xc8, 0x77, 0x36, 0x39, 0x27, 0x54, 0xc9, 0x76, 0x9b, 0xa5, - 0x43, 0x51, 0x12, 0x59, 0x76, 0x09, 0x3e, 0x53, 0x68, 0xd8, 0x4c, 0x50, - 0xc1, 0xf5, 0x08, 0x5f, 0x88, 0x22, 0xae, 0xd5, 0x84, 0x65, 0x59, 0x9f, - 0x57, 0xea, 0x9d, 0x6f, 0x14, 0x19, 0xf6, 0xd4, 0x82, 0xac, 0x34, 0xfa, - 0x1d, 0xdd, 0x66, 0x14, 0x36, 0x70, 0xf3, 0x40, 0x0d, 0x25, 0xfa, 0xa8, - 0x45, 0x64, 0xea, 0x9d, 0xe7, 0xf4, 0x80, 0x50, 0x91, 0x9e, 0x21, 0x54, - 0xc9, 0x54, 0x29, 0x9d, 0xf6, 0xde, 0xe2, 0x91, 0x76, 0x98, 0x3e, 0xe9, - 0x9b, 0x0b, 0x90, 0xe3, 0x5d, 0xdb, 0xcd, 0x06, 0x1e, 0xf4, 0xdb, 0xd1, - 0xcf, 0x88, 0x72, 0x07, 0x65, 0xa8, 0xe2, 0x0e, 0xa6, 0xe1, 0x93, 0x83, - 0xfd, 0x40, 0x98, 0x82, 0x03, 0x82, 0x7f, 0xd3, 0x7a, 0xc1, 0xef, 0x25, - 0xc2, 0x51, 0xfd, 0x02, 0x5d, 0xe2, 0x2f, 0x9b, 0xd1, 0xf7, 0xc9, 0x03, - 0xcd, 0x47, 0xf1, 0xee, 0x32, 0xd9, 0x75, 0xb2, 0xad, 0x27, 0x91, 0x9f, - 0x65, 0x0d, 0x5a, 0x73, 0x39, 0xc9, 0x93, 0x7d, 0x47, 0xc1, 0xf7, 0xd4, - 0x8f, 0xfe, 0x9b, 0x4b, 0xf2, 0xb8, 0x5e, 0x93, 0x4b, 0xc0, 0x46, 0xe1, - 0xc8, 0x3e, 0xd4, 0x8d, 0xb3, 0xf2, 0x99, 0xb9, 0x6f, 0xe8, 0x69, 0xec, - 0xa9, 0x7b, 0x01, 0x90, 0x7a, 0xf8, 0x2e, 0x17, 0xb7, 0x57, 0x11, 0x5a, - 0x46, 0xdc, 0x4b, 0x53, 0x16, 0x5a, 0xd9, 0xef, 0xb9, 0x44, 0x09, 0x21, - 0x55, 0xf1, 0xc7, 0x99, 0x70, 0x4f, 0xc3, 0x4c, 0x9f, 0x17, 0x61, 0xb7, - 0x56, 0xc0, 0xe7, 0x61, 0xda, 0xe3, 0x8e, 0xb9, 0x9e, 0x88, 0x5d, 0x73, - 0x44, 0x47, 0x6a, 0x0a, 0x98, 0x9a, 0xbc, 0xf9, 0x10, 0x03, 0x08, 0x90, - 0x5b, 0x95, 0xce, 0x06, 0x10, 0xcf, 0xc0, 0xbe, 0x97, 0x3b, 0xb7, 0xb2, - 0x0f, 0x0a, 0x53, 0x55, 0x73, 0x5d, 0x03, 0x5a, 0x7f, 0x5f, 0x53, 0xe1, - 0x37, 0x98, 0x6f, 0xf7, 0x79, 0x8e, 0x22, 0xfd, 0x49, 0x7c, 0x3f, 0x05, - 0xdd, 0xf6, 0xb9, 0x63, 0x7e, 0xc6, 0x6e, 0xe6, 0x94, 0x7e, 0x4f, 0x5d, - 0x2c, 0xeb, 0xb7, 0x45, 0x79, 0xcf, 0xf6, 0x5f, 0x4d, 0x3b, 0x45, 0x68, - 0xf6, 0x54, 0xf8, 0x89, 0x90, 0x30, 0xde, 0xdc, 0x5f, 0x52, 0x04, 0x7a, - 0x85, 0x02, 0x18, 0x16, 0x23, 0x2f, 0xbd, 0xe9, 0x72, 0x04, 0xef, 0x0e, - 0x75, 0x1e, 0x33, 0x5b, 0x65, 0x91, 0x2a, 0x25, 0xc9, 0xf9, 0xb2, 0x13, - 0x54, 0xde, 0xcc, 0xa0, 0x75, 0xc6, 0xed, 0xf4, 0x22, 0x8f, 0xde, 0xf1, - 0x4e, 0x25, 0x9b, 0xe9, 0x13, 0x0a, 0xf4, 0xba, 0x4f, 0xe4, 0x23, 0x0f, - 0x5c, 0x38, 0x63, 0xe7, 0xff, 0x6a, 0xaa, 0x85, 0xda, 0x68, 0xd8, 0xad, - 0x45, 0x80, 0x5c, 0x86, 0x8c, 0x9f, 0x9f, 0xf3, 0xb0, 0xee, 0x3f, 0xf0, - 0x54, 0x06, 0x32, 0xfd, 0x57, 0xc2, 0x71, 0x16, 0xed, 0xd4, 0xe3, 0x22, - 0xa8, 0xd3, 0x9a, 0x00, 0x7b, 0x83, 0xf4, 0xc5, 0x86, 0x3b, 0xfa, 0x30, - 0xba, 0x85, 0x68, 0x06, 0x53, 0x8a, 0x7f, 0x77, 0xc2, 0x66, 0xfe, 0x8e, - 0x4b, 0x7f, 0xf7, 0xb1, 0x76, 0x42, 0xf1, 0x69, 0x7b, 0xb1, 0x25, 0xb6, - 0xb3, 0xfb, 0x9f, 0xb3, 0xcf, 0x1f, 0xf1, 0xaf, 0x55, 0x22, 0x44, 0x51, - 0x2e, 0x82, 0x89, 0x84, 0xf2, 0xc3, 0x09, 0xfd, 0x22, 0xf4, 0x75, 0x88, - 0x78, 0xd2, 0x3e, 0x82, 0x14, 0x46, 0x7e, 0xd9, 0xe5, 0xee, 0x50, 0xb5, - 0x1d, 0x41, 0x89, 0x95, 0xe2, 0x60, 0x56, 0xd4, 0x39, 0x48, 0x65, 0x06, - 0x11, 0x64, 0xa0, 0x76, 0x27, 0x1b, 0xf6, 0x3a, 0x90, 0x9e, 0x36, 0xf7, - 0x33, 0x81, 0x3b, 0x58, 0x75, 0xce, 0x87, 0x03, 0x36, 0x23, 0xe9, 0x38, - 0x81, 0x4f, 0xf4, 0x72, 0x6e, 0xbf, 0xa6, 0x3a, 0x23, 0x15, 0x70, 0x11, - 0x95, 0xcc, 0xfa, 0x60, 0x3b, 0x8f, 0x14, 0xe6, 0xad, 0x2a, 0xd0, 0x91, - 0xe8, 0x7e, 0x11, 0xbb, 0x2e, 0xbb, 0xfe, 0x76, 0xe1, 0x9c, 0xa4, 0x12, - 0xd3, 0xb1, 0xa0, 0x05, 0xd2, 0xf3, 0x28, 0x4d, 0xb6, 0x13, 0xbe, 0x19, - 0x1d, 0x8e, 0x0b, 0x95, 0x4b, 0x0a, 0x57, 0xa3, 0xa3, 0x84, 0xf4, 0x8e, - 0x0a, 0x98, 0x0c, 0xb6, 0x96, 0x3e, 0xb2, 0x39, 0xd0, 0x12, 0x51, 0xee, - 0x6c, 0x15, 0xc4, 0xfd, 0x67, 0x33, 0x2f, 0xe1, 0xc8, 0x8d, 0x9f, 0xce, - 0xec, 0xd0, 0xd1, 0xa8, 0xda, 0x8a, 0x24, 0xa4, 0x4a, 0x1b, 0x8e, 0x4a, - 0xe3, 0x93, 0xef, 0x4e, 0xdf, 0x17, 0x66, 0x84, 0x31, 0x78, 0x3a, 0x18, - 0xe1, 0xfb, 0xae, 0x97, 0xa7, 0x30, 0x94, 0x75, 0x5c, 0xfc, 0xd6, 0xf7, - 0xdc, 0x50, 0x44, 0xfe, 0x62, 0xb1, 0x57, 0xfc, 0x11, 0x18, 0xa7, 0x7d, - 0xc9, 0x6b, 0x37, 0x04, 0x00, 0xff, 0x7a, 0x25, 0x78, 0x5c, 0xf1, 0x80, - 0xac, 0x03, 0x60, 0xd4, 0xda, 0x78, 0x46, 0x52, 0xb1, 0xf3, 0xa4, 0x3d, - 0x1d, 0x56, 0xe3, 0x49, 0x09, 0xcf, 0xa8, 0x75, 0x72, 0x68, 0x99, 0x20, - 0x22, 0x01, 0xf5, 0x3c, 0x91, 0xc9, 0xbe, 0x2d, 0x17, 0xa8, 0x16, 0xe3, - 0x8d, 0x16, 0x90, 0x3f, 0xb4, 0xf4, 0xfd, 0x64, 0xaa, 0x68, 0x08, 0x61, - 0xba, 0x65, 0xb9, 0x3d, 0x25, 0x4b, 0x25, 0x2e, 0xe2, 0x5d, 0xd5, 0xa4, - 0xfa, 0x6b, 0x2f, 0x01, 0x8f, 0x07, 0x55, 0xb7, 0x72, 0x11, 0xe0, 0x48, - 0xdb, 0x1f, 0xdf, 0x67, 0x97, 0x40, 0x32, 0xab, 0x0d, 0x9e, 0xfe, 0xf8, - 0xca, 0xb7, 0x6b, 0x03, 0x5a, 0x06, 0x9f, 0x2c, 0xed, 0x23, 0x5e, 0x4a, - 0xb1, 0x41, 0x7c, 0xa1, 0x92, 0x24, 0x6c, 0x98, 0x8c, 0x78, 0x59, 0x94, - 0x2e, 0x64, 0x37, 0x13, 0x5c, 0xab, 0xc7, 0x10, 0x5a, 0xf1, 0xe1, 0xd6, - 0xa2, 0x78, 0x87, 0x6c, 0x26, 0x9b, 0x96, 0x32, 0x6f, 0x82, 0x4c, 0x29, - 0x41, 0x54, 0xfa, 0x9c, 0xce, 0x4b, 0x43, 0x3a, 0xac, 0x98, 0x89, 0x64, - 0x95, 0x3c, 0x80, 0xaa, 0xb4, 0xee, 0x1f, 0x7c, 0x9b, 0xc8, 0xed, 0xf4, - 0xb1, 0x85, 0x9f, 0x06, 0x62, 0x76, 0xe3, 0x59, 0x26, 0x18, 0x91, 0x5f, - 0xc1, 0xe5, 0x98, 0xe2, 0x9f, 0x13, 0x53, 0x2e, 0xa1, 0x84, 0xee, 0xf5, - 0x5b, 0x97, 0xba, 0x8b, 0xaa, 0x90, 0x4f, 0x53, 0x8e, 0x78, 0x61, 0x07, - 0x94, 0x8c, 0x3f, 0x8c, 0x34, 0x75, 0x93, 0x4b, 0x7e, 0x25, 0xd9, 0x6e, - 0x9c, 0xaa, 0x14, 0xd6, 0x85, 0x15, 0xd5, 0x6a, 0xfe, 0x4a, 0x1a, 0x0e, - 0x3f, 0xcf, 0x23, 0xb8, 0xf8, 0x77, 0xba, 0x5a, 0x4d, 0xb6, 0x0c, 0x2d, - 0xe5, 0xe7, 0x7c, 0x0b, 0xb9, 0x4b, 0x6a, 0xaf, 0xda, 0xec, 0x05, 0x5e, - 0x6a, 0xaa, 0xbe, 0x91, 0x58, 0x72, 0x1a, 0x52, 0x84, 0xdb, 0x3c, 0x72, - 0x60, 0x12, 0x5a, 0x3a, 0x05, 0xdf, 0x11, 0x94, 0xbf, 0xce, 0x4a, 0x14, - 0xf3, 0xc1, 0x70, 0x52, 0xd3, 0xee, 0x32, 0xfc, 0x3a, 0xce, 0x58, 0x84, - 0x9c, 0x55, 0x1f, 0x4f, 0xe9, 0xb4, 0x7a, 0x8b, 0xfe, 0x1c, 0xb5, 0xee, - 0x86, 0xdb, 0x94, 0x9d, 0x2c, 0x9b, 0x1e, 0x7b, 0xef, 0xb5, 0xec, 0x2d, - 0x61, 0x6e, 0x4d, 0xa1, 0xb3, 0x08, 0x26, 0x59, 0x80, 0xd5, 0x66, 0x03, - 0xb2, 0x83, 0xfb, 0xff, 0xb0, 0x3f, 0xa7, 0x01, 0x1b, 0xf8, 0x14, 0x89, - 0x5a, 0x79, 0x8c, 0x75, 0x8e, 0x60, 0x57, 0x8f, 0xcd, 0x16, 0xeb, 0xfe, - 0xde, 0xf6, 0xeb, 0x84, 0xe9, 0xf7, 0xad, 0xb8, 0x06, 0xc0, 0x07, 0x80, - 0x19, 0xed, 0x7d, 0x88, 0xd1, 0xb5, 0xef, 0x7e, 0x88, 0xfe, 0x96, 0xf1, - 0x2a, 0x71, 0x9d, 0x54, 0xae, 0xfe, 0x27, 0x6c, 0xe5, 0xa3, 0x4a, 0xca, - 0x00, 0xac, 0x67, 0x14, 0x99, 0x0f, 0x03, 0xb6, 0xb5, 0xd0, 0xa9, 0x0c, - 0x04, 0x7b, 0x70, 0x4d, 0xe0, 0x83, 0xb6, 0x56, 0x8a, 0xc2, 0x04, 0xbb, - 0x76, 0xbc, 0xdb, 0x24, 0x23, 0x07, 0xa6, 0xf2, 0x70, 0x46, 0xab, 0x2f, - 0xc9, 0x80, 0xbe, 0x36, 0x3b, 0xb0, 0xe0, 0xc9, 0x49, 0xf2, 0x83, 0x15, - 0x0a, 0xd3, 0xab, 0x64, 0x8d, 0xd5, 0x6b, 0x13, 0xaf, 0x61, 0x94, 0x27, - 0x5f, 0x56, 0xe0, 0x69, 0x3e, 0x0d, 0x4c, 0xf9, 0xb4, 0xba, 0xab, 0x2d, - 0xf5, 0x36, 0x69, 0xfe, 0xda, 0x20, 0xb9, 0xd3, 0xf3, 0x8a, 0xf7, 0x56, - 0xca, 0x5d, 0x74, 0x6d, 0x35, 0x61, 0x89, 0x1c, 0x51, 0x32, 0xf1, 0x63, - 0xfc, 0xaa, 0x72, 0x6e, 0x95, 0xde, 0xbd, 0x76, 0xd2, 0x7f, 0x0b, 0x8d, - 0x11, 0xf8, 0xdd, 0x73, 0x92, 0x85, 0x29, 0x3a, 0xdf, 0x50, 0x87, 0x81, - 0xaa, 0x0f, 0xfe, 0x9b, 0x0d, 0x52, 0x66, 0x73, 0xd0, 0xff, 0xff, 0xf6, - 0xd4, 0xb8, 0xe7, 0xcd, 0x07, 0x49, 0x4e, 0xeb, 0x1f, 0x81, 0x50, 0xb3, - 0x51, 0x63, 0x78, 0x46, 0x1b, 0x20, 0x84, 0x8e, 0x71, 0xa7, 0x0a, 0xca, - 0x80, 0x39, 0xdc, 0x6b, 0xd8, 0xc1, 0xbe, 0xd1, 0x36, 0xda, 0x4c, 0x7c, - 0x94, 0xd2, 0x8e, 0x0f, 0xfb, 0x0a, 0x95, 0x6d, 0x5e, 0x59, 0x50, 0x15, - 0x9a, 0xda, 0x39, 0xc7, 0x2b, 0xda, 0x91, 0x82, 0x75, 0x3f, 0xee, 0xae, - 0xbb, 0xa7, 0x1c, 0x3c, 0x52, 0xfa, 0x19, 0x05, 0x30, 0x25, 0x37, 0xa0, - 0x59, 0x4a, 0x98, 0xe1, 0x28, 0x40, 0x53, 0x72, 0x6f, 0xa9, 0x5a, 0x26, - 0x49, 0x14, 0xd0, 0x8d, 0xb5, 0x98, 0x6f, 0x68, 0x1c, 0x7f, 0x67, 0xfd, - 0x4d, 0x46, 0xfe, 0x0a, 0x7b, 0xc0, 0x6d, 0xbd, 0xa1, 0x30, 0xcf, 0x99, - 0x3f, 0x01, 0x55, 0xdd, 0x07, 0x5e, 0x22, 0xf2, 0x4d, 0xf9, 0xba, 0xc0, - 0x82, 0x6f, 0x39, 0x78, 0x08, 0x6f, 0xb9, 0x40, 0x82, 0x9f, 0xf2, 0xd1, - 0x7a, 0x12, 0xcd, 0xa2, 0x8c, 0xa0, 0x80, 0xa7, 0xf9, 0x53, 0xec, 0x64, - 0x35, 0xa6, 0xec, 0x0b, 0x34, 0x83, 0x7a, 0x89, 0x2c, 0x28, 0x8c, 0x25, - 0x79, 0xd6, 0x64, 0x83, 0x79, 0x42, 0xea, 0x99, 0x66, 0xfd, 0x7e, 0x35, - 0x59, 0xb7, 0x4b, 0x24, 0x3c, 0x5c, 0x9c, 0xb0, 0x2a, 0xbc, 0x39, 0x83, - 0xed, 0x49, 0x3c, 0xc6, 0x79, 0x6b, 0x20, 0x27, 0xd3, 0xfa, 0x26, 0xf2, - 0x0e, 0x20, 0xb9, 0xe8, 0x5a, 0x24, 0xf1, 0xea, 0x17, 0xc1, 0xeb, 0xe7, - 0xd7, 0xee, 0x61, 0x6b, 0xf5, 0x09, 0xf1, 0xb1, 0x70, 0x9b, 0x4d, 0xfc, - 0xcf, 0xfc, 0x67, 0x82, 0x9b, 0x02, 0x11, 0x62, 0x66, 0x8e, 0x07, 0xad, - 0x3a, 0x9b, 0xc4, 0x5f, 0x1c, 0xf6, 0xc6, 0xc5, 0xd8, 0x34, 0x61, 0x80, - 0xfa, 0x27, 0x3d, 0x35, 0x27, 0x77, 0x74, 0x21, 0xee, 0x7e, 0x15, 0x29, - 0xe3, 0xd5, 0xbe, 0x02, 0xee, 0x5c, 0x0e, 0x7a, 0x04, 0xe6, 0xd6, 0xe6, - 0xa9, 0x1c, 0x13, 0x37, 0x7c, 0xc9, 0x3c, 0x2e, 0xf3, 0xf5, 0x7d, 0xbc, - 0x50, 0x2c, 0x17, 0x6a, 0x51, 0xac, 0x22, 0xa8, 0x34, 0x0c, 0xc4, 0x95, - 0xd3, 0xbc, 0xe5, 0x6d, 0x0d, 0x89, 0x0a, 0x39, 0xd7, 0x24, 0x8b, 0xc2, - 0xbd, 0x31, 0xf5, 0xa7, 0xc4, 0x23, 0x57, 0xcc, 0x3b, 0xdf, 0x67, 0x64, - 0xcd, 0x7a, 0x8e, 0xb8, 0x5a, 0x62, 0xe6, 0x29, 0xa3, 0x8b, 0xba, 0x24, - 0x5f, 0xdc, 0x2e, 0xb5, 0x30, 0x9b, 0x7b, 0x21, 0xfa, 0x4e, 0x3b, 0xa0, - 0x03, 0x07, 0x2d, 0x7b, 0x51, 0x9f, 0xd3, 0xba, 0x91, 0x73, 0x25, 0xce, - 0xdb, 0x8e, 0xcd, 0x2f, 0xdf, 0x9c, 0x3f, 0xa3, 0x39, 0xa7, 0x8e, 0x50, - 0x06, 0x21, 0x42, 0xb5, 0x52, 0xfe, 0x4c, 0x5d, 0xdd, 0xf1, 0x75, 0x9b, - 0x9d, 0xb8, 0xce, 0x2a, 0xfc, 0x28, 0x34, 0xa1, 0x5b, 0xa3, 0x95, 0xf7, - 0x7f, 0x53, 0xd2, 0x4f, 0x25, 0xc1, 0x8a, 0x21, 0x93, 0xba, 0xdc, 0xb5, - 0x61, 0xcc, 0x35, 0xcc, 0x66, 0x8e, 0xb7, 0x43, 0x1a, 0x4c, 0xb1, 0xbb, - 0x19, 0x80, 0xe0, 0xd5, 0x76, 0x44, 0x26, 0x16, 0x54, 0x17, 0x6a, 0x13, - 0x19, 0xe8, 0x67, 0x1a, 0x7b, 0x64, 0xb0, 0x49, 0x70, 0x0e, 0xdb, 0xc1, - 0xd7, 0xa9, 0x53, 0x63, 0x8b, 0x54, 0x23, 0xe1, 0x46, 0x61, 0xd5, 0xda, - 0x7f, 0x3c, 0xf1, 0x52, 0x62, 0xe7, 0x27, 0x8c, 0x68, 0xcc, 0x84, 0x05, - 0x05, 0xe0, 0xa9, 0xb1, 0x2f, 0x2f, 0x23, 0x38, 0x78, 0x66, 0xac, 0x07, - 0xec, 0xaf, 0x3a, 0x99, 0xf6, 0x46, 0x2e, 0xb4, 0x43, 0xa2, 0xc3, 0x98, - 0x9b, 0x10, 0x39, 0x63, 0x5a, 0x0b, 0x1e, 0x44, 0x30, 0xf4, 0xfb, 0x7a, - 0x2f, 0x2f, 0xeb, 0xad, 0x4e, 0xd0, 0x12, 0xeb, 0x57, 0x0e, 0x78, 0xb1, - 0x9c, 0x01, 0xe2, 0xfd, 0xf3, 0xcb, 0x86, 0x70, 0x5c, 0x65, 0xcc, 0xc0, - 0x91, 0xe5, 0x15, 0xbd, 0x3a, 0x1b, 0x2e, 0xb1, 0xc1, 0xfb, 0x97, 0x2d, - 0x68, 0x7a, 0xb6, 0x46, 0xd4, 0x5e, 0x90, 0x17, 0x91, 0x94, 0xcd, 0x78, - 0x16, 0xba, 0xa5, 0x0b, 0xe5, 0xfc, 0xf6, 0xcf, 0xb3, 0xd3, 0xcb, 0x28, - 0xa5, 0xf7, 0xde, 0xb2, 0x0f, 0xb6, 0x65, 0xa5, 0xd3, 0xe9, 0xeb, 0xe0, - 0x72, 0x1b, 0xf3, 0x5c, 0xde, 0xfb, 0x36, 0xf3, 0x94, 0x1e, 0xe1, 0x7a, - 0x85, 0x43, 0x4e, 0x8f, 0x66, 0xf0, 0x50, 0x88, 0xfa, 0x11, 0xf6, 0x44, - 0x96, 0x66, 0xc3, 0xd5, 0x0d, 0xb0, 0x56, 0x9e, 0x93, 0xbe, 0x22, 0xc0, - 0x54, 0xa6, 0x68, 0x2c, 0x31, 0xea, 0x87, 0x15, 0x53, 0xd2, 0xae, 0xb2, - 0x5a, 0x20, 0x93, 0x68, 0xa6, 0x9f, 0xe5, 0x8e, 0xe9, 0xe8, 0xa9, 0xc7, - 0x49, 0xe9, 0x63, 0xbe, 0x2f, 0xd4, 0xf3, 0x7d, 0xa5, 0xb1, 0xb7, 0x78, - 0x85, 0x0c, 0x5c, 0x11, 0x77, 0xea, 0xef, 0x16, 0x2f, 0xbe, 0xdd, 0x40, - 0x9d, 0xdd, 0x96, 0xbf, 0x9f, 0x7e, 0xa0, 0xd4, 0x72, 0x7c, 0x42, 0xc0, - 0x2e, 0x81, 0x88, 0xf7, 0x74, 0xbd, 0x93, 0x7c, 0x21, 0x53, 0x29, 0xb1, - 0x61, 0x6e, 0x74, 0xe4, 0xb4, 0xd7, 0xd3, 0x6b, 0x9f, 0x72, 0xa3, 0x9e, - 0x10, 0xad, 0xd8, 0xf0, 0xe4, 0x54, 0xb5, 0x79, 0xeb, 0x8e, 0x68, 0xc3, - 0xeb, 0xa0, 0x5d, 0x05, 0xee, 0xd3, 0xb4, 0x60, 0x4d, 0xd8, 0x6a, 0x37, - 0x18, 0x87, 0x81, 0x98, 0xfc, 0x8e, 0x07, 0x2d, 0xf9, 0x24, 0xc7, 0x0b, - 0x20, 0x8e, 0xf4, 0x7e, 0x89, 0xd1, 0x66, 0xf9, 0x92, 0x0f, 0xf8, 0x7f, - 0x49, 0x40, 0x8f, 0x99, 0x19, 0xd5, 0xc2, 0x93, 0x9d, 0x06, 0x7c, 0xe2, - 0x0b, 0xa8, 0xb0, 0xaa, 0x6a, 0x5b, 0x81, 0x1e, 0xa8, 0x6a, 0x03, 0xe0, - 0xa2, 0xdc, 0x7b, 0x5b, 0x5d, 0xab, 0xf2, 0x94, 0xbc, 0x44, 0x05, 0xa0, - 0x2f, 0x82, 0x66, 0xd3, 0x6c, 0xd7, 0xce, 0x30, 0x64, 0x71, 0xb8, 0x27, - 0x96, 0xae, 0xdc, 0xcc, 0x3d, 0xdf, 0x2d, 0x3c, 0x3e, 0x5a, 0x36, 0xb8, - 0x90, 0x75, 0x2a, 0xb2, 0x29, 0xfd, 0xd4, 0x63, 0xa2, 0xe7, 0x82, 0xcc, - 0x2e, 0x39, 0x8b, 0x30, 0x4b, 0xc9, 0x60, 0xaa, 0x27, 0xc9, 0x51, 0x6a, - 0x69, 0x22, 0x3e, 0xde, 0xd6, 0xba, 0xb2, 0x39, 0x4e, 0x43, 0xd5, 0x41, - 0xc5, 0xca, 0x22, 0x68, 0x88, 0xa4, 0x1a, 0xad, 0x5a, 0x05, 0x7e, 0xe7, - 0xdb, 0xb2, 0x2c, 0xe7, 0xf0, 0xec, 0xa8, 0x00, 0x9a, 0x5a, 0xe6, 0x75, - 0x94, 0x62, 0x7e, 0xc3, 0xcd, 0x59, 0x63, 0x02, 0xd1, 0xa1, 0xd2, 0xf9, - 0xeb, 0x6d, 0x79, 0x69, 0xa7, 0xd2, 0xeb, 0x0b, 0x7c, 0xeb, 0x51, 0x10, - 0xcf, 0xcd, 0x1e, 0x16, 0x0b, 0x5b, 0x5e, 0xe4, 0xe8, 0x6f, 0x30, 0xcc, - 0xeb, 0xc0, 0xf6, 0xb6, 0xd0, 0xd0, 0x1a, 0xee, 0x02, 0x3e, 0x1f, 0x73, - 0x31, 0x8e, 0xd7, 0x9f, 0x6d, 0xfb, 0x76, 0x17, 0x6e, 0x99, 0x7f, 0xec, - 0xe4, 0x56, 0xa0, 0xe6, 0x4d, 0x9f, 0x6e, 0x72, 0x18, 0x4d, 0x6b, 0x7a, - 0x20, 0x53, 0xa9, 0x7b, 0x4d, 0x3f, 0xf8, 0xc5, 0x7e, 0x0d, 0x5d, 0x27, - 0x9b, 0x7c, 0xb8, 0x69, 0x7b, 0xc4, 0xf6, 0xc8, 0x17, 0xa1, 0xa8, 0x11, - 0xa4, 0xa4, 0x73, 0xb6, 0x4e, 0xc7, 0x94, 0x18, 0x4d, 0x8c, 0xe1, 0x90, - 0x36, 0x04, 0xbc, 0xf1, 0xd5, 0x55, 0xce, 0x57, 0x92, 0x23, 0x69, 0xce, - 0x3c, 0xb0, 0x63, 0x50, 0x05, 0x50, 0x8b, 0xa4, 0x50, 0xf7, 0x24, 0xcd, - 0x89, 0xed, 0xc0, 0x64, 0xe5, 0x93, 0x79, 0x3e, 0x7c, 0x15, 0x89, 0x01, - 0x2e, 0x9c, 0xf0, 0x30, 0xcb, 0xf3, 0x03, 0x87, 0x70, 0xaa, 0x07, 0x4c, - 0xf3, 0x4c, 0xe4, 0xbb, 0x6d, 0x3f, 0xde, 0x52, 0xde, 0x0a, 0xfe, 0xbe, - 0x6a, 0xc1, 0x9c, 0xd1, 0x0d, 0x02, 0x9e, 0xb4, 0x68, 0x1d, 0x23, 0x01, - 0x5d, 0x6a, 0xa7, 0x27, 0x9d, 0xb9, 0xad, 0xaa, 0x8c, 0xf1, 0x76, 0xbf, - 0xda, 0x37, 0x79, 0x8a, 0x84, 0xd8, 0x0c, 0x5d, 0x89, 0x5a, 0x70, 0xe6, - 0x7f, 0xb5, 0x3c, 0xd8, 0xad, 0x29, 0x59, 0xd5, 0x75, 0x66, 0x84, 0x87, - 0x82, 0xd8, 0xc0, 0x66, 0xf2, 0x2a, 0x53, 0xe9, 0xbd, 0xe2, 0xb0, 0x10, - 0x5d, 0x2e, 0x73, 0xad, 0x9c, 0xff, 0xd2, 0xcc, 0x6a, 0x76, 0x95, 0xcb, - 0x59, 0xf1, 0x41, 0xf3, 0x08, 0x3e, 0x96, 0x13, 0x54, 0xb4, 0x5a, 0x82, - 0x8b, 0x93, 0x00, 0x87, 0x54, 0x2e, 0x0a, 0xb5, 0x65, 0x5c, 0xdd, 0x86, - 0x9c, 0x35, 0x31, 0x7d, 0x82, 0x86, 0x83, 0x9f, 0x44, 0x80, 0x16, 0xc9, - 0x70, 0xd1, 0xff, 0x33, 0x21, 0xb0, 0xf2, 0x10, 0xd2, 0x47, 0x00, 0xff, - 0x56, 0x04, 0x25, 0xe7, 0xe4, 0xca, 0x5a, 0x27, 0xc0, 0x9a, 0x4e, 0xc2, - 0xa1, 0x37, 0xf1, 0x3f, 0x02, 0xec, 0xd1, 0xfd, 0x3d, 0xa2, 0xef, 0x42, - 0xf4, 0xca, 0x83, 0xca, 0x50, 0x9f, 0x08, 0x1e, 0x63, 0x4f, 0x82, 0x8a, - 0x8a, 0xfa, 0xaa, 0x89, 0xb0, 0x4c, 0xc9, 0x59, 0xbc, 0x9a, 0xf7, 0xbd, - 0xfd, 0xc0, 0xf8, 0xbd, 0xe6, 0xb6, 0x6e, 0x9b, 0x58, 0x8a, 0x55, 0x98, - 0x37, 0xa4, 0xf1, 0x0b, 0x6a, 0x5a, 0x5d, 0x41, 0xbc, 0x19, 0xa1, 0x78, - 0x5a, 0xcf, 0xee, 0x8f, 0x9c, 0x5a, 0x97, 0x28, 0xa8, 0x11, 0x15, 0x40, - 0xe4, 0x21, 0x9d, 0xdd, 0xd8, 0xcc, 0x60, 0xf6, 0x78, 0x14, 0xc8, 0x14, - 0xff, 0x47, 0x76, 0x26, 0x3e, 0x96, 0x01, 0x72, 0x80, 0x07, 0x36, 0xa9, - 0xc9, 0xf8, 0x9e, 0xec, 0x69, 0x2a, 0x1c, 0xd3, 0x09, 0x5c, 0xd7, 0x3a, - 0x6f, 0xdf, 0xa8, 0x92, 0x66, 0xe4, 0x7f, 0x8c, 0x85, 0x95, 0x12, 0xf5, - 0x42, 0x87, 0xa4, 0x30, 0x55, 0xcf, 0x56, 0x9a, 0x46, 0xfb, 0xaf, 0x29, - 0x20, 0x7b, 0xca, 0x4e, 0xc1, 0xf9, 0x6b, 0x6a, 0x22, 0x8a, 0x2c, 0x3a, - 0xda, 0x22, 0x50, 0x83, 0x3b, 0x08, 0xf9, 0xcb, 0xdb, 0xce, 0xf7, 0xb7, - 0x82, 0x14, 0x41, 0xec, 0xcf, 0xbd, 0xe6, 0x44, 0x38, 0x14, 0xad, 0x03, - 0xaa, 0x05, 0xe2, 0x4e, 0xda, 0x30, 0xee, 0xb9, 0xb2, 0x8b, 0xa6, 0x37, - 0xfd, 0x6e, 0xa4, 0xa1, 0x02, 0xde, 0x3e, 0x36, 0xfd, 0x1c, 0xdc, 0x2c, - 0xd1, 0x6b, 0xc3, 0xd5, 0xcd, 0x16, 0x28, 0xd4, 0x66, 0x77, 0xa9, 0x1a, - 0x34, 0x3e, 0x8b, 0x54, 0x81, 0x41, 0xfd, 0xff, 0x3c, 0xad, 0x05, 0xa9, - 0x14, 0x6d, 0xc6, 0xa3, 0x95, 0xb0, 0x02, 0x6b, 0x9d, 0x24, 0x5a, 0xe2, - 0x9d, 0x86, 0xd6, 0x62, 0x0c, 0x38, 0x44, 0x1a, 0x65, 0x65, 0x4b, 0x84, - 0xe7, 0xd9, 0x20, 0x83, 0xa2, 0x7a, 0x4e, 0xac, 0xe9, 0x1b, 0x06, 0x54, - 0x63, 0x86, 0x65, 0xc4, 0x28, 0xf9, 0x66, 0x55, 0x8b, 0x12, 0x68, 0x5a, - 0x87, 0x78, 0x63, 0xcd, 0xff, 0x4c, 0x00, 0x7a, 0x04, 0x75, 0x6b, 0x05, - 0xd0, 0xd8, 0xed, 0x33, 0x84, 0xae, 0x00, 0x5a, 0x35, 0xea, 0xf3, 0xa8, - 0x86, 0x11, 0xd0, 0xe6, 0x5c, 0xb0, 0x06, 0xc5, 0x13, 0xb3, 0x44, 0xe5, - 0x2f, 0x21, 0x13, 0x06, 0xe5, 0x1f, 0x06, 0x90, 0xa6, 0xb0, 0xff, 0x0d, - 0x29, 0x06, 0xb1, 0x5f, 0x1a, 0x41, 0x16, 0x60, 0x14, 0xbc, 0xaa, 0xbf, - 0xe1, 0xd3, 0x9b, 0x0d, 0xc8, 0x8b, 0x84, 0x24, 0x73, 0x43, 0x76, 0xe3, - 0x9b, 0x99, 0x73, 0x32, 0xcd, 0x22, 0x41, 0xe6, 0x15, 0x70, 0x5f, 0xa9, - 0xd5, 0x3d, 0x58, 0xb5, 0x09, 0xa2, 0x97, 0x96, 0x81, 0x1d, 0xcf, 0xa2, - 0x69, 0x42, 0xb8, 0xc0, 0x82, 0x04, 0x29, 0x03, 0x91, 0x26, 0x10, 0x39, - 0x95, 0x1e, 0xe2, 0xb0, 0xcb, 0x8e, 0x47, 0x0a, 0xdc, 0x1d, 0x7e, 0xd4, - 0x29, 0x90, 0xb1, 0x7e, 0xdf, 0x94, 0x8c, 0xcf, 0x17, 0x3f, 0xcd, 0x14, - 0x7b, 0xb5, 0xe8, 0xbb, 0x41, 0x73, 0xb1, 0x03, 0xd2, 0x18, 0x52, 0x7b, - 0xa5, 0x9b, 0x59, 0x9c, 0x1b, 0xf1, 0xff, 0xde, 0x73, 0x70, 0xb3, 0xbb, - 0xee, 0x8b, 0xdb, 0xc4, 0xa6, 0x44, 0x51, 0xef, 0x3d, 0xb0, 0x0e, 0x9e, - 0x60, 0xdd, 0x12, 0xbd, 0x42, 0xe4, 0xef, 0x24, 0x99, 0x33, 0x42, 0x01, - 0x71, 0x93, 0x4a, 0xc3, 0xf4, 0xa5, 0x47, 0x14, 0xc0, 0x21, 0x62, 0xb0, - 0xf3, 0x53, 0xe0, 0xf1, 0xba, 0x9e, 0x81, 0xbd, 0xe8, 0x0a, 0xa2, 0x16, - 0xad, 0x5c, 0x89, 0xe7, 0xa5, 0x1f, 0xb3, 0x53, 0x5b, 0x8a, 0x75, 0x43, - 0x68, 0xbc, 0x83, 0xe6, 0x0e, 0x74, 0x80, 0xfa, 0xe5, 0x99, 0x7e, 0xd0, - 0x5a, 0x0f, 0x0b, 0x7d, 0xc7, 0x9d, 0x53, 0x20, 0xf7, 0x2b, 0x34, 0xb6, - 0xfd, 0x60, 0x75, 0x45, 0x88, 0x2b, 0x10, 0x2c, 0x82, 0xc5, 0xea, 0xb8, - 0xa2, 0x5e, 0x0e, 0xaf, 0x0c, 0xf3, 0x7c, 0x1d, 0x91, 0x4a, 0x24, 0xff, - 0x9d, 0xa4, 0xae, 0xb4, 0xc7, 0x2c, 0xaa, 0xc9, 0x42, 0x4d, 0x3c, 0x33, - 0x21, 0xc8, 0xb1, 0x1e, 0x66, 0xc8, 0x5b, 0xba, 0x10, 0xa9, 0x17, 0x13, - 0x67, 0x3c, 0x52, 0x2d, 0x0b, 0x11, 0xb4, 0x0d, 0xf4, 0x47, 0x90, 0x4d, - 0x61, 0xab, 0x86, 0x60, 0xf3, 0x53, 0x39, 0x92, 0xa4, 0xd6, 0xeb, 0x9e, - 0x69, 0xe7, 0xa8, 0x6e, 0x24, 0x78, 0xfe, 0x52, 0x27, 0xa2, 0xdc, 0x9f, - 0xed, 0xc6, 0x99, 0xe1, 0x94, 0x41, 0xcd, 0xfe, 0x0b, 0x95, 0xb4, 0x85, - 0x20, 0x16, 0x71, 0x07, 0x5d, 0xab, 0xc0, 0xc0, 0x87, 0x3d, 0xd2, 0xe2, - 0x58, 0x4f, 0xf9, 0x1f, 0x63, 0x68, 0xbe, 0x50, 0x5e, 0xe0, 0x51, 0xab, - 0x47, 0x65, 0xaf, 0x46, 0xe2, 0x64, 0x56, 0x0b, 0x02, 0x51, 0x9e, 0xd4, - 0x84, 0xc8, 0xa5, 0x8d, 0xf3, 0x17, 0xa7, 0xe7, 0x06, 0xe9, 0x77, 0x74, - 0xf1, 0xf1, 0x2f, 0xa1, 0x18, 0x4b, 0xf7, 0x75, 0x4b, 0xa6, 0xf0, 0x53, - 0x5b, 0xd0, 0x11, 0xd5, 0xad, 0xb2, 0x33, 0xc0, 0xca, 0x73, 0x0a, 0xc6, - 0x46, 0xa0, 0x68, 0xda, 0x36, 0x27, 0xa5, 0x95, 0x49, 0x8d, 0x9d, 0x08, - 0xfe, 0x27, 0xce, 0x2f, 0x10, 0x27, 0xd6, 0x46, 0x85, 0x6c, 0x71, 0xce, - 0xa0, 0x5a, 0x0e, 0x3d, 0x4f, 0x4d, 0x9d, 0x29, 0xf5, 0xbc, 0x67, 0x58, - 0xb5, 0x29, 0x87, 0x85, 0xdb, 0xcd, 0x78, 0x5b, 0xab, 0xa9, 0x1e, 0x73, - 0x45, 0x97, 0x38, 0x20, 0x76, 0xd9, 0x16, 0xb1, 0x0c, 0xfe, 0x1e, 0x25, - 0x2b, 0x5c, 0xd8, 0x5b, 0xf0, 0x32, 0xf5, 0xa3, 0x1d, 0xb9, 0xef, 0x4c, - 0x34, 0x80, 0x73, 0x42, 0xec, 0xb9, 0x49, 0x61, 0xdd, 0xad, 0x38, 0xa8, - 0x9a, 0x2e, 0xf5, 0x75, 0x56, 0x5a, 0xc2, 0xf4, 0x20, 0xc0, 0x13, 0x03, - 0xbb, 0xfa, 0x72, 0x7d, 0xbe, 0xdc, 0xc8, 0xca, 0x5c, 0x7d, 0x62, 0x5e, - 0xb0, 0x75, 0xe9, 0xd7, 0x7f, 0xfe, 0xf2, 0xb8, 0x34, 0xc9, 0xdb, 0x1c, - 0x69, 0x7b, 0x59, 0x3f, 0xed, 0xc9, 0xa1, 0x6f, 0x82, 0xdd, 0x61, 0x11, - 0x0b, 0x44, 0x0b, 0xbc, 0x8f, 0xba, 0xe1, 0xbe, 0xea, 0x34, 0x66, 0x9a, - 0xfe, 0x1d, 0x9a, 0x31, 0x9f, 0x61, 0x15, 0x5c, 0xee, 0x98, 0x63, 0x94, - 0x4b, 0x01, 0x7d, 0x62, 0xcd, 0xa7, 0x47, 0x3b, 0x65, 0xd6, 0x4d, 0xb0, - 0x4b, 0x73, 0xcd, 0x36, 0xb7, 0x25, 0x50, 0x4f, 0xae, 0x1f, 0x73, 0xa7, - 0xbd, 0x84, 0x4c, 0x74, 0x1c, 0x45, 0x87, 0x63, 0x17, 0xba, 0x84, 0xf6, - 0xbb, 0x32, 0x1e, 0x90, 0xb1, 0x67, 0x72, 0x62, 0x8a, 0x1f, 0xdb, 0x32, - 0x4c, 0x93, 0xfc, 0x31, 0x00, 0x30, 0x69, 0xbd, 0xf2, 0x55, 0xe1, 0x17, - 0x63, 0x7f, 0x8d, 0xf8, 0x7f, 0x2f, 0x1b, 0xa0, 0x29, 0x51, 0x14, 0x9e, - 0x15, 0x00, 0x59, 0xcb, 0x0e, 0xf1, 0x78, 0x6b, 0xeb, 0x0d, 0xc2, 0xba, - 0xb0, 0x9f, 0xb6, 0x93, 0x2b, 0x03, 0xd6, 0x44, 0x6f, 0xfd, 0xe8, 0xb4, - 0x20, 0x5b, 0xec, 0xaa, 0xd4, 0x7f, 0x45, 0x65, 0x22, 0x0a, 0x3f, 0xd1, - 0x24, 0x15, 0x28, 0x28, 0x95, 0xe5, 0xef, 0x7c, 0xfe, 0xe8, 0x52, 0xc3, - 0x6d, 0x8e, 0xca, 0x33, 0x89, 0xa8, 0xb6, 0x5c, 0xef, 0xee, 0xdf, 0x54, - 0x51, 0x4f, 0xfd, 0x81, 0x9a, 0x6a, 0x7d, 0xcd, 0x90, 0x6c, 0xb7, 0xaf, - 0x47, 0x12, 0x9e, 0x03, 0x0f, 0xd9, 0xb3, 0x14, 0x8f, 0x72, 0x03, 0x18, - 0x30, 0xb3, 0xb7, 0xb7, 0x6c, 0xc6, 0x53, 0x09, 0x77, 0x4d, 0x8d, 0x11, - 0xc1, 0x2c, 0xe1, 0xf6, 0x6c, 0xdf, 0x51, 0xc2, 0x56, 0x1f, 0x75, 0xc4, - 0x92, 0xe9, 0x33, 0x68, 0x14, 0x2b, 0xf5, 0xe6, 0x67, 0x15, 0x57, 0x6c, - 0x2c, 0xe2, 0x30, 0x50, 0x40, 0x26, 0xec, 0xf2, 0x4f, 0x56, 0x37, 0xaa, - 0xb7, 0x7a, 0x4e, 0xb3, 0x57, 0xee, 0x2a, 0xa0, 0xa1, 0x1c, 0xcf, 0x7f, - 0xc7, 0x59, 0x72, 0x08, 0x07, 0xc5, 0xce, 0xfd, 0x8f, 0x72, 0x89, 0x5b, - 0xbc, 0xdf, 0xec, 0x60, 0xf9, 0xff, 0xeb, 0x40, 0xe5, 0xf8, 0x6a, 0x97, - 0x79, 0x30, 0x87, 0xff, 0x5b, 0x0e, 0x9b, 0x37, 0x15, 0xca, 0x45, 0x5a, - 0x2f, 0x8b, 0xf4, 0xd1, 0xde, 0x00, 0xc3, 0x9f, 0x6d, 0x7b, 0x5c, 0xa8, - 0x84, 0x7d, 0x56, 0x92, 0x15, 0xdb, 0x6e, 0xe4, 0x9a, 0xde, 0x4d, 0xe1, - 0xa4, 0xe9, 0xfd, 0x8c, 0x15, 0xec, 0x18, 0xb6, 0x5a, 0xe5, 0xf2, 0x4c, - 0x54, 0xce, 0x77, 0xed, 0xb7, 0xba, 0x14, 0xad, 0x19, 0xce, 0x45, 0x5e, - 0x4f, 0x53, 0x41, 0x01, 0xbd, 0x65, 0x06, 0xcd, 0x07, 0x8a, 0x5b, 0xcc, - 0x60, 0xfa, 0x48, 0xba, 0x1c, 0xde, 0x26, 0xd9, 0x83, 0x82, 0xd2, 0x12, - 0x1f, 0x49, 0x75, 0xcf, 0xb4, 0xde, 0x80, 0xa0, 0xe0, 0x78, 0x9b, 0x49, - 0xce, 0xcf, 0xb1, 0x22, 0x32, 0x37, 0x56, 0x94, 0x9a, 0x2f, 0xa9, 0xef, - 0xbb, 0x4e, 0xc1, 0x07, 0x92, 0x0d, 0xbc, 0xe9, 0x6b, 0x0e, 0x5a, 0xd5, - 0x5b, 0xe1, 0x43, 0x4d, 0x12, 0x1a, 0x72, 0x2e, 0x0b, 0x5a, 0x4a, 0x4d, - 0xf6, 0x56, 0xe5, 0x1c, 0x71, 0x49, 0xfe, 0x0c, 0x3e, 0x30, 0x8f, 0x15, - 0xd0, 0x7e, 0xb2, 0x0d, 0x5d, 0x48, 0xda, 0x23, 0x10, 0x22, 0xa4, 0xf5, - 0xf4, 0x3a, 0x3a, 0xe1, 0xd4, 0xfc, 0x63, 0x6d, 0x0c, 0xcd, 0x7b, 0x60, - 0xa8, 0x89, 0xe3, 0x97, 0x7c, 0x7f, 0xe9, 0x54, 0x43, 0xe4, 0xac, 0xd1, - 0x6c, 0x31, 0xf8, 0x61, 0x96, 0x14, 0xb5, 0x4c, 0xa8, 0x42, 0xb8, 0x67, - 0x79, 0xfe, 0x46, 0xc3, 0x06, 0x6b, 0x29, 0x1d, 0x4f, 0x84, 0x6f, 0x8e, - 0x1d, 0xbf, 0xb1, 0x81, 0x51, 0xe7, 0x21, 0x71, 0x78, 0x2a, 0x8a, 0xb8, - 0x53, 0x6a, 0xcc, 0x06, 0x79, 0x9d, 0xa3, 0xd7, 0xe0, 0x69, 0xc4, 0xc4, - 0x56, 0x75, 0xb2, 0x82, 0x6e, 0x6d, 0xff, 0x62, 0x4b, 0x21, 0x58, 0x8a, - 0x62, 0x09, 0x0d, 0xdc, 0xd3, 0x31, 0xf2, 0x55, 0x75, 0xd6, 0xcf, 0x28, - 0xf7, 0xed, 0xe1, 0x41, 0xd6, 0x3f, 0x6c, 0x88, 0x18, 0xe6, 0x1a, 0x82, - 0xfb, 0x07, 0xd4, 0x14, 0x33, 0x6a, 0xd9, 0xa5, 0x66, 0x09, 0x2a, 0xce, - 0x95, 0x4d, 0x7d, 0xfa, 0xfc, 0x58, 0x9b, 0xd5, 0xfd, 0x1a, 0x5b, 0x61, - 0x38, 0xc5, 0x6a, 0x93, 0xcc, 0x62, 0xe0, 0x91, 0x27, 0x47, 0x2e, 0xaa, - 0x4e, 0x5a, 0x2c, 0x5e, 0x54, 0x98, 0xff, 0x98, 0xa6, 0x88, 0xb7, 0x76, - 0x73, 0x05, 0xf1, 0x8c, 0x18, 0x34, 0x88, 0xf5, 0xcd, 0xad, 0x4f, 0xdb, - 0x85, 0x42, 0x67, 0xe7, 0x88, 0xaf, 0xbe, 0x4e, 0x76, 0xc1, 0x22, 0x21, - 0x46, 0x3c, 0x64, 0xd5, 0x6e, 0x6a, 0x46, 0x1c, 0x86, 0x9b, 0x51, 0x87, - 0x14, 0x39, 0x2e, 0x83, 0x08, 0x47, 0x05, 0x49, 0xed, 0x09, 0xc2, 0xbd, - 0x2f, 0x77, 0x3a, 0x90, 0xd0, 0x7c, 0xe9, 0xcb, 0xcd, 0xb0, 0x4c, 0x10, - 0x39, 0xfb, 0xde, 0x73, 0xbb, 0x70, 0x27, 0xcc, 0xf0, 0x1f, 0xfb, 0x50, - 0x83, 0x62, 0xf4, 0x76, 0xb9, 0x47, 0x12, 0x11, 0xa4, 0x3e, 0xbe, 0x8d, - 0xe2, 0xa4, 0x19, 0xfe, 0x21, 0xcc, 0xca, 0x6d, 0x93, 0x15, 0xdd, 0xd2, - 0x8c, 0x56, 0x55, 0xc7, 0xf4, 0x6c, 0x62, 0xcf, 0xa9, 0x81, 0x01, 0xce, - 0x1b, 0x0f, 0xc6, 0x3b, 0xf0, 0xf3, 0xa8, 0xa0, 0x96, 0x9d, 0x9b, 0xb7, - 0x14, 0x85, 0x65, 0x0f, 0x57, 0x6f, 0xc2, 0x14, 0xfc, 0xfe, 0xb4, 0x98, - 0x9b, 0xc6, 0xa4, 0x34, 0xf9, 0x04, 0x6d, 0x7f, 0x90, 0xaf, 0xfa, 0x6f, - 0xe1, 0x37, 0xfb, 0x26, 0xca, 0xd0, 0xd6, 0x1d, 0x65, 0x36, 0x07, 0x4d, - 0x09, 0x8e, 0xae, 0x1f, 0x3a, 0x56, 0x14, 0x8b, 0x8f, 0xec, 0x23, 0x03, - 0x78, 0xe6, 0x7c, 0xef, 0xbd, 0xf9, 0xd6, 0xb8, 0xd9, 0x67, 0x81, 0xe3, - 0x24, 0xb2, 0xef, 0xf8, 0x48, 0x08, 0x7f, 0x46, 0xac, 0x02, 0x58, 0x83, - 0xb8, 0x32, 0xa0, 0x90, 0xa3, 0x1f, 0x9b, 0xfb, 0xe2, 0x02, 0x4c, 0x90, - 0x0f, 0x80, 0xf9, 0xd6, 0x6f, 0xa4, 0xb2, 0xd4, 0xa0, 0x24, 0x18, 0xef, - 0xdf, 0xf3, 0x87, 0x0c, 0x8d, 0x19, 0xe5, 0x61, 0x6e, 0x75, 0x81, 0x3b, - 0x56, 0x26, 0xbe, 0x0b, 0xed, 0x52, 0x8d, 0x0b, 0xa5, 0x0e, 0xa0, 0x3e, - 0x9f, 0xa1, 0x89, 0xe1, 0xff, 0x2b, 0xcd, 0xa4, 0xf3, 0x8c, 0x9d, 0xf5, - 0xe9, 0xb5, 0xad, 0xb5, 0x19, 0xf7, 0x9f, 0x74, 0x1b, 0xf2, 0xb4, 0x54, - 0x64, 0x26, 0xba, 0x58, 0x26, 0x4a, 0x16, 0x42, 0xbf, 0xa6, 0xc7, 0xb5, - 0xbd, 0x39, 0x7d, 0x12, 0xae, 0x95, 0xcd, 0x28, 0x10, 0x63, 0x71, 0x49, - 0x76, 0xe0, 0x0b, 0x1e, 0x65, 0x63, 0x87, 0xc4, 0x09, 0xb7, 0x58, 0xb3, - 0x9b, 0x76, 0x37, 0x1a, 0xa4, 0xa7, 0xf2, 0xd7, 0x89, 0xbf, 0x29, 0xd2, - 0x8a, 0xf6, 0xf4, 0xcc, 0xa9, 0x9b, 0x82, 0x60, 0x32, 0x41, 0x34, 0xdc, - 0x68, 0x2e, 0x74, 0x32, 0x3a, 0xf6, 0xd6, 0x1e, 0x31, 0xf0, 0x99, 0xf4, - 0xe8, 0x78, 0x20, 0xc4, 0x35, 0xd0, 0x67, 0x7b, 0xd1, 0xc9, 0xc4, 0xf0, - 0x0a, 0xf9, 0xcb, 0x98, 0xd7, 0xea, 0x35, 0x65, 0x7d, 0xab, 0xca, 0x65, - 0x78, 0xb7, 0xd6, 0xf7, 0x67, 0xa4, 0x41, 0x72, 0x6e, 0xa0, 0x88, 0x31, - 0x91, 0xf7, 0x43, 0xe2, 0xa3, 0x6e, 0x78, 0x7e, 0x70, 0xeb, 0x28, 0xd9, - 0x1c, 0x5b, 0x47, 0xc3, 0x73, 0x6e, 0x86, 0x57, 0x66, 0x1b, 0x83, 0xae, - 0x3a, 0xa9, 0x01, 0x26, 0x0c, 0xa1, 0x61, 0xec, 0xa7, 0x50, 0xe0, 0xdd, - 0xb3, 0xbd, 0x2c, 0x4f, 0xf1, 0x71, 0xe0, 0xa6, 0xbb, 0xc1, 0x00, 0x9e, - 0x80, 0x42, 0x07, 0x31, 0x6e, 0xdc, 0x48, 0x9c, 0x1b, 0xd7, 0xb8, 0x53, - 0xf9, 0x73, 0xba, 0x81, 0x23, 0x12, 0x8f, 0x90, 0x5f, 0x38, 0xda, 0xfd, - 0x07, 0x97, 0x63, 0x1e, 0xa6, 0x23, 0xf4, 0xb2, 0xf8, 0xcd, 0x75, 0x7e, - 0x70, 0x9d, 0x60, 0x50, 0x57, 0x4c, 0xf0, 0x01, 0xdf, 0x0a, 0xd8, 0x51, - 0x58, 0x5e, 0x30, 0x7a, 0xaa, 0x0f, 0x98, 0x18, 0xaf, 0x4b, 0xe7, 0x59, - 0xc6, 0x70, 0x03, 0x36, 0xae, 0x82, 0x69, 0x33, 0x53, 0xf1, 0x90, 0xf0, - 0xb4, 0x99, 0xf6, 0x85, 0x1c, 0x60, 0x87, 0xb8, 0x67, 0xea, 0x5a, 0xd0, - 0xd6, 0xcb, 0xeb, 0x45, 0x3e, 0x06, 0x61, 0xec, 0xcf, 0x5e, 0x86, 0xe3, - 0x9d, 0x36, 0xd5, 0x3c, 0x89, 0x6d, 0x42, 0x94, 0x5b, 0x31, 0xa7, 0x6b, - 0x94, 0xd7, 0x1a, 0x36, 0xaa, 0xad, 0x82, 0x1d, 0x61, 0x16, 0x9a, 0xcf, - 0x8c, 0x4a, 0xdc, 0xd8, 0x1e, 0xea, 0x32, 0x79, 0x3b, 0x94, 0xa9, 0x65, - 0x2a, 0x27, 0x97, 0xa7, 0xc2, 0x89, 0xaa, 0x5d, 0x29, 0xbb, 0xef, 0x3a, - 0xc0, 0xc8, 0x18, 0x81, 0x92, 0x0e, 0x87, 0x75, 0x14, 0x91, 0x77, 0x09, - 0xc1, 0xff, 0xc8, 0x99, 0x19, 0xdb, 0x3c, 0x72, 0x0d, 0xdf, 0xfd, 0xd3, - 0xaf, 0x6d, 0x68, 0xb0, 0x0f, 0xc9, 0x7e, 0x2b, 0x24, 0xa4, 0x34, 0x2f, - 0x53, 0xa4, 0x6f, 0xb1, 0xa0, 0xef, 0x30, 0x7a, 0x9a, 0x21, 0x11, 0x24, - 0x12, 0xc7, 0x74, 0x8d, 0x12, 0x75, 0xba, 0x6c, 0x31, 0xc2, 0xf0, 0xa1, - 0x6a, 0x23, 0xba, 0x65, 0x96, 0x13, 0xc3, 0xd3, 0x6c, 0xbb, 0xbf, 0xfb, - 0xfb, 0x5f, 0x54, 0xf2, 0xfd, 0xbe, 0xf0, 0xfc, 0x58, 0x4a, 0x52, 0x15, - 0x57, 0xce, 0x3e, 0xee, 0x01, 0xb0, 0xcc, 0x90, 0xf8, 0xed, 0x27, 0xbe, - 0x99, 0x04, 0x75, 0x37, 0xe8, 0x14, 0x60, 0x12, 0x3c, 0x8e, 0xbb, 0x32, - 0x7b, 0x0b, 0x42, 0xa5, 0x1e, 0xa2, 0xba, 0xff, 0x44, 0xa7, 0x0b, 0x7d, - 0x2f, 0xb2, 0xac, 0xc6, 0xaf, 0xfd, 0xa5, 0x81, 0xfe, 0xa7, 0x8c, 0x3b, - 0xfd, 0xb3, 0x37, 0x9e, 0x1b, 0x32, 0xa8, 0xe8, 0x28, 0x05, 0x94, 0x25, - 0xda, 0xe9, 0x6c, 0x48, 0x21, 0xc6, 0x8a, 0xc8, 0x76, 0x6a, 0xc3, 0x4b, - 0x34, 0x68, 0xd9, 0xcf, 0x05, 0xf9, 0xb7, 0x99, 0x31, 0xc8, 0x25, 0x2e, - 0xfb, 0xc1, 0xcd, 0x4c, 0x82, 0xae, 0x0d, 0x4d, 0x10, 0x18, 0x15, 0x5a, - 0x93, 0x42, 0xeb, 0xf9, 0x3f, 0xe7, 0x76, 0x6e, 0xfe, 0xbc, 0x15, 0x27, - 0x36, 0xb4, 0x5f, 0x14, 0x16, 0xb6, 0x8a, 0x22, 0x19, 0xbb, 0xe6, 0x9f, - 0x5a, 0xa7, 0xec, 0xff, 0x00, 0x04, 0x3a, 0x74, 0x95, 0x6a, 0xb3, 0xb1, - 0xc5, 0xa2, 0x69, 0x97, 0x28, 0xc3, 0xb7, 0x37, 0xb9, 0x48, 0xd8, 0x69, - 0xc9, 0xac, 0xba, 0x0b, 0x57, 0xc1, 0x6c, 0x0f, 0xc6, 0x6b, 0x84, 0xb4, - 0x28, 0x40, 0x69, 0x86, 0x78, 0xea, 0xba, 0xb4, 0xac, 0x0a, 0x58, 0x86, - 0x46, 0x73, 0x26, 0x0c, 0x6b, 0x38, 0x7c, 0xfb, 0xb1, 0xc8, 0x02, 0x50, - 0x06, 0x1d, 0xc7, 0x82, 0xb1, 0x73, 0x71, 0x99, 0x42, 0xa5, 0x94, 0x34, - 0x83, 0x01, 0x43, 0xc3, 0x04, 0x18, 0x5f, 0x86, 0xbc, 0x9f, 0x45, 0x58, - 0x93, 0x20, 0xfe, 0xe8, 0xe5, 0x0d, 0x03, 0x2b, 0x6b, 0x1c, 0xf6, 0x5b, - 0x5b, 0x0a, 0xdd, 0x57, 0xb4, 0x12, 0x3e, 0xf3, 0x81, 0xf8, 0x94, 0x0e, - 0x84, 0xe1, 0xf1, 0x2f, 0x97, 0x06, 0x9e, 0x96, 0x35, 0x3d, 0x93, 0x6e, - 0xd1, 0x15, 0xd7, 0xe5, 0x13, 0x18, 0x8e, 0x91, 0xaf, 0x77, 0x26, 0x8d, - 0xe1, 0x20, 0x23, 0x73, 0x7e, 0x3a, 0x95, 0xb8, 0x2e, 0x2d, 0x90, 0xf0, - 0x09, 0x89, 0x07, 0x55, 0xef, 0x90, 0xdd, 0x74, 0x3f, 0x32, 0xfb, 0x3d, - 0x45, 0xa9, 0xdd, 0x59, 0xc5, 0x99, 0xc1, 0x28, 0x6d, 0xfd, 0x61, 0x71, - 0x77, 0x21, 0xb8, 0x83, 0x17, 0xab, 0xab, 0x6c, 0x4e, 0x30, 0xbb, 0xd4, - 0x3d, 0x4c, 0xe6, 0x4c, 0xf2, 0x2c, 0xbc, 0x99, 0xf6, 0x9a, 0xa9, 0x76, - 0x34, 0x03, 0x58, 0x1a, 0x09, 0x65, 0x67, 0x5d, 0x8c, 0x96, 0x1c, 0x6a, - 0x4e, 0x5a, 0x54, 0x64, 0xd7, 0x77, 0x1d, 0xa3, 0x1a, 0xa6, 0xda, 0xc6, - 0x27, 0x6e, 0x9c, 0x50, 0x49, 0x6f, 0xb5, 0x2b, 0x50, 0x27, 0xdc, 0x02, - 0x4d, 0xf3, 0x36, 0xa5, 0x7b, 0x90, 0x70, 0x30, 0xae, 0xa5, 0x38, 0x92, - 0xfc, 0xce, 0x19, 0x0e, 0x8b, 0x44, 0x9f, 0x8f, 0x78, 0xb7, 0x6e, 0x05, - 0xe8, 0xbe, 0xdf, 0x0f, 0x29, 0xbd, 0xd8, 0x6a, 0x18, 0xd1, 0x54, 0xad, - 0x1a, 0x5d, 0x48, 0xa1, 0x2f, 0x66, 0xeb, 0x18, 0x90, 0x4f, 0x84, 0x7d, - 0x6f, 0xec, 0xd3, 0x0e, 0xcf, 0x9e, 0xfe, 0xf8, 0x3e, 0x57, 0xef, 0x43, - 0xd6, 0xfb, 0x44, 0x33, 0x6c, 0x18, 0x4a, 0xd4, 0x94, 0xbd, 0x55, 0x2a, - 0xdc, 0x85, 0x11, 0x8f, 0x41, 0x79, 0xbc, 0xd2, 0x97, 0x33, 0x8a, 0xa0, - 0xc7, 0x8d, 0xc4, 0x38, 0x53, 0xfb, 0x07, 0xcc, 0x67, 0x3b, 0xe1, 0x8b, - 0xc7, 0x17, 0xef, 0xa4, 0xb1, 0xc3, 0xea, 0x3d, 0xbe, 0xb9, 0x4d, 0xe7, - 0x9e, 0xab, 0x26, 0xc7, 0x68, 0xd9, 0x6b, 0xe7, 0x41, 0xd6, 0xd7, 0xab, - 0xc7, 0xea, 0xe0, 0x47, 0xc7, 0x10, 0xd2, 0x9d, 0xb9, 0xa9, 0x49, 0xec, - 0x10, 0x82, 0x97, 0x73, 0xd5, 0x34, 0xd1, 0x0d, 0xaf, 0x4a, 0x57, 0x97, - 0x1b, 0xf4, 0x33, 0xdf, 0xd5, 0x9d, 0x01, 0xa9, 0xcb, 0xe5, 0x8a, 0xf5, - 0x94, 0x57, 0x2a, 0xa6, 0xc8, 0xe7, 0xa2, 0xd5, 0xc0, 0xf0, 0x3c, 0x91, - 0x59, 0x0d, 0x45, 0xd3, 0x1d, 0x17, 0x9c, 0xee, 0x70, 0x7c, 0x2c, 0xbc, - 0x47, 0x99, 0xb6, 0x5e, 0x28, 0x69, 0xd1, 0xf7, 0xbb, 0xb3, 0x6f, 0xff, - 0xdf, 0x97, 0xe1, 0x1e, 0xa0, 0x9b, 0x00, 0xef, 0xaa, 0x30, 0x49, 0x2e, - 0x90, 0xed, 0x93, 0x21, 0x31, 0xd0, 0x49, 0x72, 0x84, 0x16, 0xb3, 0x87, - 0x99, 0x2e, 0xfa, 0xe6, 0x1f, 0xe2, 0x2a, 0xcf, 0x46, 0x21, 0xa8, 0x59, - 0x45, 0xf9, 0xcf, 0x5c, 0x60, 0xad, 0x93, 0xbc, 0xe1, 0x6d, 0xac, 0xd5, - 0x2a, 0x18, 0x34, 0x08, 0x2a, 0x94, 0xcb, 0x2e, 0xa8, 0xa7, 0xe1, 0x35, - 0x81, 0x56, 0x16, 0x7f, 0xd8, 0x3a, 0xf2, 0x08, 0xbf, 0xdf, 0x8d, 0x5a, - 0x8d, 0x9e, 0xfc, 0x8a, 0x82, 0xf4, 0xde, 0x3a, 0x7a, 0x14, 0xa3, 0x87, - 0xb9, 0x80, 0xac, 0x0b, 0x16, 0x76, 0x43, 0x95, 0x32, 0xd0, 0xd1, 0x2d, - 0xf4, 0x9d, 0x9a, 0x0d, 0x1c, 0x8e, 0x48, 0x9b, 0xe8, 0xcc, 0x89, 0xe0, - 0x66, 0xde, 0x17, 0x82, 0x5f, 0xdc, 0x93, 0x47, 0x23, 0x27, 0x6d, 0xbf, - 0x8c, 0xd0, 0x9a, 0xf9, 0x17, 0xc3, 0xe7, 0xd6, 0x9d, 0x93, 0xe2, 0x2a, - 0x83, 0x1d, 0x19, 0x36, 0xe8, 0xbd, 0x55, 0x53, 0xda, 0x7b, 0x11, 0x66, - 0x59, 0xe5, 0xef, 0xed, 0x95, 0xb8, 0x55, 0x16, 0x49, 0xa0, 0x83, 0x97, - 0x21, 0x9a, 0x4b, 0x01, 0x53, 0xb7, 0x6f, 0x4e, 0x40, 0x04, 0x6b, 0xbe, - 0x01, 0xeb, 0xac, 0x1c, 0x29, 0xe0, 0xb9, 0x53, 0xb2, 0x97, 0xf9, 0x3e, - 0x4b, 0x11, 0x38, 0x09, 0x02, 0xfd, 0x9d, 0x0b, 0xc7, 0xaa, 0x38, 0x36, - 0x29, 0x32, 0x76, 0xe7, 0x12, 0x7f, 0x85, 0x92, 0xab, 0xbe, 0x96, 0x52, - 0x4e, 0x1b, 0x6c, 0x6f, 0x19, 0xd2, 0x43, 0xf8, 0xb9, 0x3f, 0xa3, 0x88, - 0x0d, 0xf0, 0x2a, 0xf3, 0x08, 0x80, 0xab, 0x32, 0x22, 0xe0, 0x6d, 0x1a, - 0x5d, 0x12, 0x1c, 0x25, 0xf5, 0x1e, 0x19, 0xfe, 0x93, 0xd3, 0x49, 0x10, - 0x51, 0x7e, 0xe5, 0x54, 0x87, 0x93, 0xf5, 0xa9, 0xc1, 0x1c, 0xa1, 0x02, - 0x70, 0x43, 0xae, 0xbb, 0x12, 0x61, 0x24, 0x63, 0x95, 0x22, 0xc1, 0x2c, - 0xb5, 0x08, 0x18, 0x11, 0x9a, 0x35, 0x00, 0x7e, 0x7a, 0x51, 0x0d, 0x1f, - 0x24, 0xfe, 0xb9, 0xd2, 0x9f, 0x44, 0x52, 0x0b, 0x97, 0x4b, 0xec, 0x8d, - 0x79, 0x84, 0x14, 0xcd, 0xa5, 0xe8, 0x2c, 0xf2, 0x39, 0x9f, 0x3e, 0xbb, - 0x04, 0xf0, 0xb3, 0x10, 0xa3, 0xac, 0x79, 0x0f, 0x80, 0xf2, 0x8c, 0xb9, - 0xbf, 0x80, 0x47, 0x78, 0xfb, 0xb5, 0x8e, 0x1d, 0x54, 0x4c, 0x4e, 0x46, - 0x7f, 0x9f, 0xd6, 0x65, 0x3b, 0xc5, 0xb9, 0x11, 0x1b, 0x97, 0xdf, 0xc3, - 0xbe, 0xa0, 0x9a, 0xab, 0x12, 0x72, 0x2c, 0x99, 0xd3, 0x07, 0xff, 0x4e, - 0x68, 0x47, 0x13, 0xa8, 0xea, 0x7c, 0x9f, 0x74, 0xbb, 0xed, 0xdb, 0x78, - 0x4f, 0x5c, 0xf8, 0xe6, 0xca, 0xfd, 0xeb, 0x79, 0x2b, 0x3e, 0xf9, 0x5c, - 0x05, 0x77, 0xd3, 0x72, 0x01, 0xd3, 0x3f, 0x5a, 0x16, 0x16, 0xb7, 0xdb, - 0xe7, 0x7f, 0xf5, 0x05, 0x54, 0x9b, 0xa3, 0xa8, 0xa1, 0xda, 0x55, 0xa8, - 0xb3, 0x02, 0x25, 0xb6, 0x65, 0xe1, 0xff, 0x5e, 0x0a, 0x8f, 0x5b, 0xb7, - 0xcb, 0xbb, 0x8b, 0xaf, 0x18, 0x3a, 0x9c, 0x39, 0x2c, 0x4f, 0x2e, 0x70, - 0x0f, 0xde, 0x09, 0x57, 0x40, 0x77, 0x59, 0x7e, 0x72, 0xc0, 0x7d, 0xb2, - 0x26, 0x77, 0xa9, 0x1f, 0x3a, 0x6b, 0x96, 0x2e, 0x9c, 0x96, 0x9d, 0x4e, - 0x5a, 0xe3, 0xc9, 0xa8, 0x6b, 0xee, 0xe0, 0xac, 0x8d, 0x0e, 0x22, 0x61, - 0x5d, 0xe0, 0x1d, 0x41, 0xce, 0x6c, 0x96, 0x39, 0x4a, 0xb8, 0xf0, 0x09, - 0x35, 0x94, 0x63, 0x5f, 0xe2, 0xd8, 0x3c, 0x9f, 0xdb, 0x0a, 0x94, 0xdd, - 0x7c, 0x2a, 0x0a, 0x9e, 0x8b, 0xe9, 0xd6, 0xf2, 0x91, 0xa9, 0x30, 0x3f, - 0xa4, 0xf5, 0x42, 0x8f, 0x67, 0x4f, 0xfb, 0x91, 0xb7, 0x6d, 0x72, 0xd2, - 0x23, 0x15, 0x77, 0x0d, 0x53, 0xf6, 0x38, 0x3b, 0x36, 0xcd, 0x81, 0xc6, - 0xa6, 0x51, 0x5c, 0xa0, 0x1a, 0xd1, 0x07, 0x10, 0x97, 0x2b, 0xe9, 0x70, - 0xe9, 0x40, 0x98, 0xe9, 0xa5, 0xed, 0x98, 0xab, 0xd8, 0x6c, 0xf8, 0xbf, - 0xca, 0xaa, 0xe0, 0x28, 0xde, 0x59, 0xe8, 0xa4, 0x1f, 0xf2, 0x62, 0x52, - 0x10, 0x07, 0x97, 0x03, 0xad, 0xe3, 0xff, 0x7a, 0xed, 0x5e, 0x07, 0xcb, - 0xdf, 0x66, 0x89, 0xf8, 0xab, 0x83, 0xd3, 0x8f, 0xdf, 0x39, 0x97, 0x6a, - 0x61, 0x9c, 0xae, 0x4b, 0xc2, 0x84, 0x5b, 0xa9, 0xdb, 0xe0, 0xb3, 0xcb, - 0xb0, 0xbd, 0xbc, 0x8e, 0xa4, 0x3d, 0x8e, 0xa5, 0xda, 0xe5, 0xf9, 0x0d, - 0x29, 0x6c, 0x72, 0x6a, 0x73, 0x7c, 0xa7, 0x7a, 0x02, 0x5f, 0xd0, 0xd9, - 0xf6, 0x10, 0xcd, 0xea, 0x95, 0x12, 0x2d, 0xf4, 0x2b, 0x92, 0x3d, 0x36, - 0xef, 0x40, 0x43, 0x46, 0x02, 0x51, 0xe9, 0x72, 0x03, 0x43, 0xce, 0xe7, - 0x5b, 0x7b, 0xfa, 0x37, 0xe4, 0xef, 0x55, 0x49, 0x9b, 0xd6, 0x3e, 0xa2, - 0x93, 0xc4, 0xe6, 0xa6, 0x32, 0x40, 0x99, 0x5f, 0xee, 0xb2, 0xd9, 0x92, - 0x0f, 0xad, 0x23, 0x68, 0xe9, 0xf6, 0xbf, 0xf2, 0x58, 0x07, 0x34, 0x63, - 0x07, 0x9e, 0x1d, 0xe0, 0xfa, 0x2d, 0x5e, 0x76, 0xa4, 0x92, 0x2d, 0xff, - 0xf4, 0x3a, 0x3c, 0xbd, 0x70, 0xb2, 0xde, 0x99, 0xbd, 0xa5, 0x3b, 0xae, - 0xa0, 0x1a, 0x10, 0xa8, 0x2b, 0xd7, 0xc2, 0x52, 0x9e, 0xc9, 0x36, 0xaa, - 0x0c, 0x82, 0x6f, 0x4f, 0x1f, 0x46, 0x16, 0x15, 0x35, 0x07, 0x63, 0x25, - 0x68, 0xf1, 0x9f, 0x60, 0x2b, 0x9e, 0xbe, 0xec, 0x08, 0x84, 0x60, 0x20, - 0x1b, 0x5c, 0xbc, 0x6c, 0x0d, 0x36, 0x42, 0x87, 0x0f, 0xb4, 0xd8, 0xb0, - 0xf1, 0x1e, 0xfe, 0xfc, 0x56, 0xe5, 0xd8, 0xd2, 0x03, 0x5b, 0x4e, 0x6b, - 0xc6, 0x31, 0x8a, 0xcc, 0x29, 0xa4, 0x54, 0x72, 0xff, 0x2b, 0x5f, 0xe4, - 0x4f, 0xfc, 0x5c, 0x66, 0x7c, 0x52, 0x3f, 0xd6, 0xc4, 0x85, 0x86, 0x2b, - 0x23, 0x20, 0xb6, 0x83, 0x00, 0x6f, 0xa4, 0x23, 0x68, 0x84, 0x4c, 0xb9, - 0xbc, 0x3b, 0xac, 0xc5, 0xed, 0x03, 0xad, 0xa5, 0xc8, 0x73, 0x98, 0x9b, - 0x00, 0xe6, 0xdf, 0x60, 0xc6, 0x6c, 0xe3, 0x80, 0xe2, 0x72, 0xae, 0x2b, - 0xeb, 0x5f, 0x92, 0x62, 0x34, 0x70, 0x0d, 0x9b, 0x51, 0xc3, 0x96, 0x3d, - 0x27, 0x27, 0x28, 0xb1, 0x44, 0x9d, 0x4b, 0x9a, 0x59, 0x43, 0x4d, 0x52, - 0xbe, 0x2f, 0xd1, 0xdb, 0x50, 0x88, 0x48, 0xf4, 0x02, 0x4c, 0x95, 0x94, - 0x43, 0x17, 0x08, 0x22, 0x15, 0x8d, 0x37, 0x03, 0x73, 0x9a, 0x10, 0x0b, - 0x62, 0xa8, 0x21, 0x5b, 0x04, 0x9e, 0x40, 0x63, 0xf1, 0xee, 0x34, 0xaa, - 0xa6, 0xec, 0xeb, 0xb5, 0xc8, 0xf9, 0x67, 0x9b, 0x1e, 0x4f, 0x1e, 0xbc, - 0xa2, 0x5e, 0xcb, 0x57, 0xf0, 0x9a, 0xa0, 0xe3, 0xcc, 0x18, 0x96, 0xa3, - 0xcc, 0x69, 0xe4, 0x9b, 0x16, 0xe4, 0xb3, 0x8e, 0xb6, 0xef, 0xae, 0x34, - 0x75, 0x43, 0x2a, 0x37, 0xe4, 0x49, 0x5c, 0xc2, 0x1d, 0x33, 0xda, 0x06, - 0x33, 0x1c, 0x52, 0xe5, 0x64, 0xb0, 0x00, 0x81, 0xd5, 0xb8, 0x80, 0x18, - 0xd6, 0xed, 0xb7, 0x9e, 0x6a, 0x6e, 0xe4, 0xd8, 0x9b, 0xcf, 0x7e, 0x4c, - 0xee, 0x53, 0x19, 0x48, 0x0f, 0x24, 0x3a, 0x77, 0x48, 0xbe, 0x09, 0xb8, - 0x87, 0x39, 0x0f, 0xc4, 0xb5, 0x90, 0x5e, 0x5c, 0x48, 0x1d, 0xe6, 0xf4, - 0x42, 0x1e, 0xd8, 0xa4, 0x3d, 0x0f, 0x61, 0x5d, 0xd7, 0x0b, 0x7a, 0x70, - 0x86, 0x9d, 0x12, 0x83, 0x13, 0xdf, 0x92, 0x64, 0xca, 0x39, 0x1d, 0x58, - 0x80, 0xc8, 0xdf, 0xed, 0xbb, 0x5a, 0xf7, 0xa8, 0xfa, 0xee, 0x90, 0x68, - 0x18, 0xda, 0x4e, 0xfd, 0xae, 0xec, 0xf2, 0xf6, 0xd5, 0xe1, 0xf9, 0xd7, - 0x89, 0xd6, 0xec, 0x7e, 0xd3, 0x81, 0xa1, 0xa4, 0x6c, 0xd5, 0x1c, 0xcb, - 0xc8, 0x1a, 0x89, 0xbc, 0x2e, 0xc6, 0x12, 0x7e, 0x6d, 0xa0, 0xf5, 0xf8, - 0x72, 0x01, 0x24, 0x5f, 0xf1, 0xbe, 0x67, 0x51, 0xe1, 0x83, 0x96, 0xca, - 0x98, 0x9d, 0xb1, 0x27, 0x31, 0x08, 0xf2, 0xa8, 0xf1, 0x5a, 0xd2, 0xc4, - 0x7c, 0x3f, 0xf1, 0xc1, 0xe0, 0xcd, 0x8f, 0x71, 0xfb, 0x16, 0x5f, 0x18, - 0x6b, 0xa3, 0xae, 0xa0, 0x15, 0x4b, 0x01, 0xd7, 0xb5, 0xfe, 0xeb, 0xae, - 0xf1, 0xe3, 0x28, 0x39, 0x38, 0x9b, 0xae, 0x93, 0x69, 0xb8, 0x8c, 0x20, - 0xef, 0x88, 0xcd, 0x1d, 0x5b, 0xc5, 0x09, 0x6d, 0xac, 0x1e, 0xa9, 0x0d, - 0xc1, 0x86, 0xc6, 0xbb, 0xb5, 0xb7, 0xf7, 0x1a, 0x06, 0xf8, 0x53, 0x2c, - 0x51, 0x2f, 0x1b, 0x88, 0x9f, 0xac, 0x44, 0x6b, 0x8a, 0x1a, 0xc3, 0xe7, - 0x48, 0x64, 0x8f, 0xf5, 0x67, 0x1f, 0x93, 0x83, 0x63, 0x77, 0x27, 0xcc, - 0x59, 0x74, 0xb3, 0x30, 0xce, 0x11, 0x9b, 0xff, 0x6b, 0x67, 0x13, 0x47, - 0xae, 0xb9, 0xaa, 0xcd, 0x22, 0x4a, 0x52, 0x71, 0x12, 0x1a, 0x63, 0x6a, - 0x8d, 0x94, 0xd3, 0x5d, 0xd4, 0x87, 0x64, 0x7e, 0x33, 0xd7, 0xcc, 0xd7, - 0x5f, 0x4c, 0xb0, 0x31, 0xba, 0xb0, 0xe0, 0x3b, 0x76, 0x31, 0x2f, 0x34, - 0x6f, 0x58, 0x94, 0x33, 0x9d, 0xa4, 0x6b, 0x1b, 0x0d, 0x6e, 0x8e, 0x70, - 0xcb, 0x27, 0xce, 0x6c, 0x9c, 0x8a, 0xe1, 0xac, 0x4a, 0x45, 0xb8, 0xe5, - 0xd2, 0xf9, 0xf2, 0x61, 0x6d, 0xb6, 0x08, 0xaf, 0x67, 0xc6, 0xdd, 0x31, - 0x7d, 0x6c, 0xe7, 0x0a, 0x05, 0x40, 0xcd, 0x01, 0xfa, 0xbe, 0x57, 0x65, - 0x21, 0x42, 0xb9, 0x26, 0x74, 0x4d, 0x3e, 0xef, 0x8a, 0x92, 0x90, 0x8b, - 0x96, 0xbe, 0x6d, 0x16, 0x5a, 0x58, 0x75, 0x8e, 0xec, 0x5d, 0xfa, 0xe7, - 0x03, 0x3e, 0x15, 0x25, 0x09, 0xcc, 0x71, 0x81, 0xac, 0xfb, 0xf6, 0xe1, - 0xce, 0xa0, 0xff, 0xee, 0xf9, 0x1a, 0xd4, 0x29, 0x26, 0x82, 0x4d, 0x50, - 0xc6, 0xe6, 0xf8, 0x78, 0x26, 0x27, 0x6d, 0x00, 0x7d, 0xb9, 0x2b, 0x39, - 0xdf, 0x7c, 0x37, 0xe5, 0xd1, 0x63, 0xbb, 0x44, 0x4b, 0x46, 0xe7, 0x4c, - 0x08, 0x75, 0xe1, 0x4c, 0x5b, 0xa8, 0xd8, 0x8d, 0x4e, 0x80, 0xee, 0x7c, - 0xcd, 0xf4, 0x9d, 0xb4, 0xc7, 0x59, 0x37, 0x81, 0x66, 0x12, 0xbc, 0xe4, - 0xbd, 0xda, 0x0d, 0x22, 0x12, 0xb2, 0x0d, 0xee, 0xd2, 0x2d, 0xbf, 0x73, - 0x5c, 0x58, 0x43, 0x3f, 0xb3, 0xd1, 0x9a, 0x65, 0xb7, 0xbe, 0xc0, 0x6b, - 0xb7, 0xd2, 0x47, 0x18, 0xac, 0x63, 0xb9, 0x01, 0x9f, 0xbc, 0x6c, 0x17, - 0x4f, 0x1a, 0xae, 0x01, 0x7e, 0xd1, 0x99, 0x39, 0x5b, 0x2d, 0xf2, 0xec, - 0xae, 0x03, 0x48, 0x48, 0x37, 0x5d, 0xbd, 0xd2, 0x75, 0xd9, 0x64, 0x46, - 0x14, 0xf2, 0xc6, 0xe7, 0x27, 0xac, 0xf7, 0x52, 0xbc, 0x07, 0xb4, 0x0a, - 0x7d, 0xf8, 0xf6, 0x1e, 0xf2, 0xb4, 0xcd, 0xfc, 0x9c, 0x90, 0xe0, 0xd5, - 0x3d, 0x77, 0xc4, 0x95, 0x30, 0x27, 0x93, 0xe6, 0xc0, 0x24, 0xb4, 0x6a, - 0x4b, 0x79, 0x98, 0x64, 0x80, 0x6b, 0x17, 0x34, 0xb6, 0xcb, 0x3f, 0xbd, - 0xe6, 0x0d, 0x9f, 0xe6, 0xfd, 0x8d, 0x7c, 0x36, 0x00, 0x87, 0x0b, 0x57, - 0xdc, 0x66, 0x46, 0x7f, 0xce, 0xed, 0x75, 0x37, 0xb4, 0xb1, 0xfc, 0x8d, - 0x22, 0x3c, 0x40, 0x48, 0x87, 0x51, 0xb6, 0x53, 0xdb, 0x15, 0x4d, 0x84, - 0x2d, 0xcb, 0xee, 0x66, 0xdc, 0x87, 0x6d, 0x22, 0x3b, 0x4e, 0xf1, 0x96, - 0x2e, 0x20, 0x75, 0x88, 0xa2, 0x52, 0xed, 0x77, 0xef, 0xe3, 0x9a, 0x2c, - 0x50, 0x67, 0xf5, 0x37, 0x9c, 0xab, 0xc4, 0x93, 0xbe, 0xd2, 0xfa, 0x0e, - 0xb5, 0x8d, 0x23, 0x3d, 0xd3, 0xb2, 0x50, 0x58, 0x40, 0xfc, 0x58, 0xf7, - 0x89, 0x91, 0xeb, 0x25, 0x5b, 0x8a, 0xe5, 0x51, 0xe3, 0xbd, 0x06, 0x05, - 0x45, 0x49, 0x6a, 0xcd, 0x1f, 0xc5, 0x9b, 0xa7, 0x91, 0x78, 0x45, 0x6a, - 0xd3, 0x65, 0x8d, 0x8c, 0xdb, 0x58, 0xbb, 0x40, 0x40, 0x8c, 0x50, 0x8f, - 0xd2, 0x31, 0xad, 0x19, 0x81, 0x89, 0xcb, 0xfb, 0x8c, 0xa3, 0xf4, 0x5b, - 0xc3, 0xe9, 0x7f, 0xff, 0x25, 0x79, 0xc9, 0xf6, 0x79, 0x2a, 0x5f, 0x31, - 0xf8, 0xb0, 0xd3, 0xc2, 0x91, 0x98, 0xe9, 0xe2, 0x8d, 0x91, 0xc3, 0xb1, - 0xc0, 0x93, 0x51, 0x97, 0xc1, 0x26, 0x79, 0xac, 0x9e, 0x73, 0xb3, 0xec, - 0xac, 0x4b, 0x78, 0x69, 0x94, 0x27, 0xf9, 0xef, 0x3f, 0x9d, 0xb8, 0x34, - 0x03, 0xa6, 0xb3, 0x14, 0x2d, 0x7e, 0xb1, 0x5f, 0xc3, 0x05, 0x8b, 0xd8, - 0x17, 0xe5, 0x11, 0xbb, 0x49, 0x13, 0x78, 0x6a, 0x60, 0x6f, 0xcc, 0x93, - 0x16, 0xc1, 0x5c, 0xfd, 0x43, 0xad, 0x03, 0xfe, 0x43, 0x51, 0x05, 0xa1, - 0xb1, 0xde, 0xaa, 0x7d, 0x4e, 0x66, 0xd6, 0x96, 0xc3, 0x0c, 0xc2, 0x68, - 0x9d, 0x17, 0xd3, 0xfd, 0x69, 0xd3, 0x25, 0xf8, 0x9a, 0x73, 0xaa, 0x5a, - 0xd8, 0xae, 0xcc, 0x2c, 0x81, 0xe7, 0x1a, 0x62, 0x77, 0x0b, 0x0e, 0x19, - 0x52, 0x6c, 0x56, 0x32, 0xdb, 0x44, 0x52, 0x4d, 0xa4, 0x88, 0x07, 0x94, - 0x13, 0x38, 0x74, 0xd6, 0xab, 0x95, 0x87, 0x95, 0xfe, 0xe8, 0x65, 0x48, - 0x23, 0x4a, 0x69, 0x4d, 0x12, 0xc6, 0xa2, 0x1b, 0x3a, 0x65, 0xf5, 0x84, - 0x0a, 0xd1, 0xa4, 0xe5, 0x64, 0xcb, 0x3a, 0x40, 0x6f, 0x0f, 0xa5, 0x87, - 0x57, 0x8a, 0xec, 0x69, 0xbc, 0xdc, 0xc3, 0xae, 0x6b, 0xbe, 0x50, 0x59, - 0x0e, 0xa8, 0x66, 0xfe, 0x28, 0xc3, 0x0b, 0xb2, 0x33, 0xf8, 0xa7, 0x46, - 0x29, 0x69, 0x81, 0x5b, 0xa5, 0x6f, 0xfe, 0xe3, 0xc2, 0xee, 0xbc, 0xdc, - 0xc6, 0xab, 0x72, 0x46, 0xa3, 0xc3, 0x0b, 0x54, 0xf5, 0xa4, 0xb2, 0x63, - 0xba, 0xf7, 0x96, 0x85, 0xc4, 0xd5, 0x51, 0x96, 0xb6, 0x42, 0x92, 0xbc, - 0x7b, 0x0b, 0xbf, 0x13, 0x9b, 0x0a, 0x1a, 0xfa, 0x3f, 0x82, 0x1b, 0x54, - 0xc2, 0x39, 0x08, 0xc9, 0xc5, 0xa1, 0x95, 0xc5, 0xf9, 0x20, 0xeb, 0xb5, - 0x7f, 0x6d, 0x5a, 0x8a, 0x36, 0x1e, 0x7a, 0x50, 0xe1, 0xce, 0xd5, 0x23, - 0xf5, 0x7e, 0x47, 0x94, 0x81, 0xfe, 0xca, 0x43, 0xae, 0x27, 0x3e, 0xf3, - 0x69, 0x87, 0xbd, 0x7e, 0x86, 0x4e, 0xc5, 0xdf, 0xdd, 0x83, 0x4c, 0x28, - 0x68, 0x38, 0x95, 0x81, 0x98, 0xba, 0xb4, 0xd5, 0xf1, 0xcf, 0xb7, 0x57, - 0x7b, 0x40, 0xea, 0x23, 0x69, 0xf2, 0x5e, 0xa3, 0x7b, 0xab, 0x4e, 0x89, - 0xe2, 0x3f, 0x6a, 0xa0, 0x9c, 0xaa, 0xf8, 0x78, 0xa9, 0x40, 0x28, 0xdd, - 0x40, 0x11, 0x23, 0xe1, 0xc2, 0x98, 0x92, 0xbe, 0x00, 0xc5, 0x2e, 0x48, - 0x35, 0x0a, 0xf7, 0x93, 0xe2, 0xc0, 0x18, 0xd9, 0x34, 0x99, 0x9f, 0x28, - 0xb0, 0x18, 0xa7, 0xe5, 0x20, 0x3f, 0xd0, 0x5d, 0xc4, 0xca, 0xac, 0x25, - 0x0b, 0x50, 0x91, 0x69, 0xea, 0xe9, 0x9d, 0x2b, 0x5a, 0x25, 0x78, 0x26, - 0x3d, 0xdc, 0x67, 0x0c, 0xf3, 0x30, 0x9e, 0xe7, 0xfa, 0x54, 0x88, 0x3e, - 0x96, 0x2d, 0x67, 0x79, 0x20, 0x2c, 0xfc, 0x70, 0xb1, 0x3f, 0xf6, 0x57, - 0x8e, 0x1a, 0x64, 0x08, 0x03, 0x34, 0x55, 0x6a, 0xb3, 0x11, 0xf1, 0xa9, - 0xcc, 0x87, 0x60, 0x94, 0xe9, 0x58, 0x37, 0x56, 0xb0, 0x3d, 0x8d, 0x26, - 0xa1, 0x55, 0xfc, 0x8e, 0xd3, 0xa6, 0xfd, 0x74, 0x42, 0x82, 0x8d, 0x45, - 0xf9, 0x0d, 0x46, 0x23, 0x7d, 0xd3, 0xfe, 0x91, 0x0d, 0x2c, 0x4a, 0xda, - 0x3b, 0x52, 0x89, 0x3b, 0xf6, 0x7b, 0xb1, 0x3f, 0x52, 0xea, 0x08, 0xf8, - 0xc2, 0xe8, 0xb1, 0x39, 0x8c, 0xee, 0x62, 0x22, 0x99, 0x5b, 0xf2, 0xe7, - 0x05, 0xb8, 0x6e, 0x97, 0x5f, 0x0c, 0x3e, 0x8c, 0xdc, 0x7f, 0xbf, 0xfe, - 0x4d, 0x79, 0xc3, 0xc0, 0x42, 0xab, 0xcb, 0xbd, 0x95, 0x8f, 0x01, 0xf3, - 0xdc, 0x12, 0x5a, 0x96, 0x70, 0x31, 0x85, 0xf4, 0x5d, 0x8f, 0xea, 0x6f, - 0xab, 0xf9, 0x5b, 0xb1, 0x34, 0x03, 0x80, 0xea, 0x80, 0xa0, 0x7b, 0xdf, - 0xa4, 0x3b, 0x5b, 0x68, 0xb4, 0x92, 0xa4, 0x64, 0x5f, 0x15, 0x88, 0x4d, - 0xec, 0xfc, 0x41, 0xa2, 0x36, 0xd9, 0xc3, 0x6a, 0x48, 0x9d, 0x3d, 0x1f, - 0x58, 0x47, 0x16, 0xe5, 0xd4, 0xd0, 0x33, 0xb0, 0x9b, 0xef, 0xe4, 0x83, - 0x85, 0x86, 0xc9, 0x4c, 0xb6, 0x83, 0x99, 0xa8, 0x2a, 0x25, 0x0d, 0x12, - 0x38, 0x48, 0xd8, 0xff, 0xdf, 0xc2, 0xda, 0xf3, 0x7c, 0xae, 0xbc, 0x05, - 0x1a, 0xfc, 0x90, 0x81, 0x9e, 0x08, 0x27, 0x45, 0x36, 0x56, 0x5f, 0xe6, - 0x9e, 0xf9, 0x52, 0xd5, 0x48, 0x88, 0x6d, 0x63, 0x90, 0xbb, 0xcc, 0x3d, - 0xef, 0x43, 0x88, 0x3c, 0x3d, 0xd0, 0x77, 0x4d, 0x13, 0x85, 0xad, 0xd4, - 0x1c, 0x18, 0xb9, 0x89, 0xbc, 0xb8, 0x11, 0xd0, 0x0e, 0x98, 0x27, 0x15, - 0x08, 0x7d, 0xf1, 0x76, 0xe6, 0x53, 0x3e, 0x0d, 0x98, 0x08, 0xdc, 0x79, - 0x44, 0x4f, 0x5d, 0x6a, 0x9f, 0xff, 0x9f, 0x69, 0xb4, 0x07, 0x8a, 0x27, - 0x78, 0xb1, 0x9b, 0x1e, 0x21, 0xc8, 0xa3, 0xc7, 0xeb, 0x09, 0x83, 0xb2, - 0x1b, 0x25, 0x0c, 0x43, 0xc1, 0xed, 0xc0, 0xd5, 0x01, 0xc3, 0x2e, 0x9d, - 0x47, 0x14, 0x1a, 0x30, 0xe2, 0xc6, 0x54, 0x3d, 0xbc, 0xc3, 0xc1, 0x5f, - 0xb1, 0x62, 0x18, 0xee, 0x00, 0xc5, 0x43, 0x29, 0xe8, 0x6b, 0x3c, 0xcb, - 0x5f, 0x79, 0xdc, 0x28, 0x32, 0xb5, 0x63, 0x86, 0xad, 0xc5, 0x06, 0xf9, - 0x26, 0x2e, 0x7c, 0x2c, 0x1f, 0x76, 0x3e, 0x63, 0x2a, 0xdf, 0x5b, 0x40, - 0x56, 0x46, 0x1b, 0xd7, 0x42, 0xa6, 0x7e, 0x10, 0x02, 0x96, 0x2b, 0x9a, - 0x1e, 0xaa, 0x5c, 0x5f, 0x46, 0xd6, 0xc7, 0x32, 0x62, 0x39, 0xf0, 0x9b, - 0x72, 0xd5, 0xba, 0x87, 0x8b, 0x06, 0x61, 0xec, 0x57, 0x5f, 0xcc, 0x81, - 0x14, 0xc4, 0xc9, 0x73, 0xe8, 0xd1, 0x47, 0x6f, 0x7b, 0xbd, 0x1b, 0x63, - 0x99, 0x1a, 0x2d, 0xc2, 0xaf, 0xe9, 0x28, 0x27, 0xa2, 0x2b, 0xc8, 0x88, - 0x45, 0x47, 0xbc, 0x52, 0x29, 0x9f, 0x7e, 0x63, 0x2c, 0xb0, 0xcb, 0xa0, - 0xcb, 0x83, 0x42, 0xe5, 0xd7, 0xf6, 0xa4, 0xd3, 0x27, 0xbf, 0x89, 0x49, - 0x83, 0xdc, 0x1f, 0x2b, 0xbd, 0x32, 0x58, 0x5b, 0x9d, 0xd6, 0x74, 0x7c, - 0x8d, 0x8b, 0x38, 0xca, 0x5e, 0xce, 0xd6, 0xf6, 0x95, 0xcd, 0x5b, 0xb7, - 0x85, 0x3a, 0x64, 0xed, 0x3a, 0x2e, 0xcc, 0xeb, 0xad, 0x0a, 0x87, 0xc7, - 0x93, 0xf8, 0x55, 0x2c, 0x5b, 0xac, 0x63, 0xfc, 0x76, 0xa8, 0xd7, 0xa3, - 0xcf, 0x6e, 0x46, 0x8b, 0x18, 0x51, 0x5b, 0xdd, 0xdc, 0x00, 0x5f, 0xbe, - 0x34, 0xc2, 0x92, 0xb2, 0xcf, 0x11, 0x83, 0x85, 0x84, 0x23, 0x1b, 0xa9, - 0x54, 0xd9, 0xbf, 0x94, 0xa8, 0x1d, 0x90, 0x82, 0xf0, 0xbb, 0x86, 0x39, - 0xb8, 0x2b, 0x95, 0x78, 0xc2, 0xd9, 0xa4, 0x72, 0x0f, 0x11, 0xf0, 0x84, - 0xc3, 0x49, 0x8f, 0xdb, 0xa4, 0xf3, 0x85, 0x1b, 0xd6, 0xc5, 0xcb, 0x47, - 0xea, 0xa6, 0x69, 0xa5, 0x48, 0x26, 0xab, 0xd9, 0x95, 0xfb, 0xaa, 0x6a, - 0x55, 0xcc, 0x25, 0x43, 0xfe, 0x2b, 0x70, 0x66, 0xb9, 0x44, 0xef, 0x49, - 0x34, 0xcf, 0x66, 0xd0, 0x0f, 0x0e, 0x46, 0x2b, 0x6c, 0x94, 0x9e, 0x3f, - 0x9c, 0xa0, 0x6d, 0xd0, 0x15, 0x00, 0x42, 0x8f, 0x5b, 0x53, 0x11, 0x40, - 0x26, 0x06, 0x02, 0xbc, 0x21, 0xd5, 0x32, 0x0a, 0xe2, 0xb7, 0xb5, 0x49, - 0xd2, 0x19, 0x79, 0xce, 0x06, 0x40, 0x4f, 0x48, 0xca, 0x4f, 0x10, 0x15, - 0x91, 0xf9, 0x41, 0xd9, 0xcd, 0xb4, 0x64, 0x1b, 0xed, 0xa4, 0xca, 0x4e, - 0x7c, 0xcc, 0xa8, 0xa7, 0xa4, 0x87, 0xb5, 0x68, 0xd7, 0xba, 0x70, 0x69, - 0xd6, 0x4e, 0x05, 0x2a, 0xb6, 0x9c, 0x4f, 0x9b, 0xc4, 0x01, 0x8d, 0xc5, - 0x1a, 0x2b, 0x53, 0x97, 0x2a, 0x9e, 0x66, 0x87, 0xc5, 0xf8, 0xd6, 0x6b, - 0x28, 0xcf, 0x4d, 0x8b, 0x14, 0xa9, 0x4b, 0xdd, 0xe7, 0xd9, 0x22, 0xc7, - 0xa1, 0xeb, 0xe6, 0x4c, 0x1f, 0x32, 0xe4, 0xb0, 0x8d, 0x1a, 0x8c, 0x06, - 0xfe, 0xc4, 0x4f, 0x40, 0x4d, 0x30, 0x48, 0x00, 0x00, 0xf4, 0xd4, 0x5f, - 0x89, 0xb7, 0x81, 0xde, 0x32, 0x73, 0x42, 0x14, 0xf0, 0x56, 0x42, 0x0a, - 0xac, 0x9a, 0x1e, 0x22, 0x2f, 0xf0, 0x32, 0x59, 0x75, 0x80, 0x30, 0x80, - 0x4a, 0x17, 0xe5, 0x0d, 0x5a, 0xcb, 0x54, 0x4b, 0xbf, 0x45, 0x7b, 0x1c, - 0x8a, 0xe7, 0x32, 0xec, 0x5c, 0xd5, 0xd6, 0x5a, 0xc5, 0x2e, 0xb7, 0x7a, - 0x45, 0xc5, 0xe3, 0x50, 0x17, 0x54, 0x8d, 0x05, 0xdb, 0x35, 0xa2, 0x2d, - 0xce, 0x77, 0x08, 0x04, 0x1b, 0x0e, 0x2d, 0x40, 0x01, 0xca, 0x4a, 0x29, - 0x9f, 0x0e, 0x54, 0x36, 0x69, 0x94, 0xec, 0x0e, 0x34, 0x5f, 0xc1, 0xba, - 0x8b, 0x35, 0x4e, 0xde, 0x1a, 0x75, 0x88, 0xac, 0xc9, 0xde, 0x13, 0x2f, - 0x31, 0xfd, 0x8f, 0x5d, 0x93, 0x59, 0xf2, 0xf2, 0x22, 0x88, 0x70, 0x18, - 0x49, 0x46, 0x3f, 0x35, 0x8a, 0x36, 0xf4, 0x34, 0xd1, 0x1a, 0x84, 0x72, - 0xa6, 0x02, 0x75, 0xaa, 0x7c, 0x6d, 0x16, 0x89, 0x21, 0xfe, 0x2b, 0x42, - 0x36, 0xf4, 0x8e, 0xf2, 0xb4, 0xa8, 0xd2, 0xc3, 0xaa, 0xd2, 0x3e, 0xb0, - 0x22, 0xd9, 0xbd, 0x5d, 0x6c, 0x7f, 0xa9, 0x88, 0xb8, 0x63, 0x8d, 0x50, - 0x4e, 0x7d, 0x4b, 0x85, 0xd7, 0x3a, 0x5b, 0xd4, 0x4d, 0xfb, 0xd8, 0xae, - 0xd8, 0x66, 0xb9, 0x85, 0x51, 0xb2, 0x4c, 0x4f, 0xe6, 0xe6, 0x46, 0x66, - 0x30, 0xd3, 0xc2, 0x0c, 0x87, 0x6e, 0x65, 0x5d, 0x04, 0x54, 0xdb, 0x3d, - 0x60, 0xae, 0x1f, 0xc3, 0x07, 0x48, 0xd0, 0x83, 0x34, 0x27, 0xab, 0xa7, - 0x7f, 0xe6, 0x91, 0x21, 0xf8, 0x9c, 0x45, 0x57, 0x2a, 0x76, 0x64, 0xa6, - 0xc6, 0xf4, 0xf3, 0x33, 0x2a, 0xfe, 0x76, 0x70, 0xff, 0xba, 0x25, 0xbe, - 0x0e, 0xb8, 0x42, 0x8f, 0x22, 0x43, 0xfe, 0x16, 0x0f, 0x2a, 0xa9, 0x3e, - 0x0e, 0xe5, 0x5d, 0x8a, 0xe2, 0x79, 0x05, 0xb1, 0x19, 0xb5, 0x33, 0x2d, - 0xb7, 0xf2, 0x82, 0xad, 0x17, 0x24, 0x06, 0x53, 0xb9, 0xd4, 0x3c, 0xc5, - 0x74, 0xc1, 0x2e, 0xaa, 0x5c, 0x88, 0x85, 0x0f, 0xa7, 0x1c, 0x67, 0x97, - 0x6b, 0x03, 0x85, 0x76, 0xf9, 0xce, 0x16, 0xdd, 0x1a, 0x11, 0x8e, 0xec, - 0xfa, 0x0e, 0xaf, 0x57, 0x72, 0x02, 0x0b, 0xbb, 0x63, 0x48, 0xf4, 0x27, - 0x9f, 0xe6, 0x32, 0x63, 0xb1, 0xac, 0x0d, 0x0e, 0x5b, 0x22, 0x43, 0xe9, - 0x06, 0xa8, 0x50, 0x0f, 0x15, 0xb6, 0x37, 0x31, 0x2b, 0x0b, 0x6a, 0xc1, - 0x33, 0x2f, 0x91, 0xe2, 0x7c, 0x94, 0x71, 0xaf, 0xbe, 0xd5, 0x91, 0x39, - 0x30, 0x72, 0xba, 0x26, 0xfa, 0x48, 0x05, 0x6a, 0x1f, 0x4b, 0xa0, 0x7d, - 0x9d, 0x24, 0x73, 0x89, 0xfa, 0xe2, 0xab, 0xbd, 0x46, 0x25, 0x65, 0x9e, - 0xf1, 0xea, 0xb9, 0x25, 0x18, 0x87, 0x04, 0xdd, 0xdb, 0x1e, 0xd9, 0xde, - 0x32, 0xfd, 0x3e, 0xa3, 0x1f, 0x26, 0xf0, 0x90, 0xfb, 0x2c, 0xaf, 0xba, - 0x6a, 0x62, 0xf5, 0x66, 0xb2, 0x97, 0x26, 0x74, 0x70, 0xf8, 0x9a, 0x2c, - 0x5c, 0xbf, 0x89, 0x0a, 0x2b, 0x2b, 0xb1, 0x91, 0x1d, 0xaa, 0x39, 0x20, - 0x2b, 0x67, 0x8f, 0x38, 0xf4, 0x91, 0x4b, 0xad, 0x6b, 0xcb, 0x02, 0xfb, - 0x52, 0xf9, 0x38, 0x5a, 0xd3, 0x48, 0xc8, 0x4d, 0xc6, 0x9e, 0x7d, 0x1b, - 0x60, 0x6d, 0xa3, 0x3a, 0x07, 0x74, 0xde, 0xb8, 0x64, 0xd9, 0xed, 0x7e, - 0x77, 0x38, 0x7e, 0x0c, 0x93, 0x40, 0x89, 0xc8, 0x7e, 0x41, 0xb4, 0x7b, - 0xde, 0xb3, 0xa5, 0xbc, 0x6a, 0xf4, 0x74, 0xd6, 0x82, 0x47, 0x45, 0x99, - 0x5f, 0x7f, 0x3f, 0x77, 0x81, 0x82, 0xd2, 0xbb, 0xb0, 0x62, 0x3a, 0x9a, - 0x7c, 0x21, 0x10, 0xf6, 0x75, 0x92, 0xb8, 0xdb, 0x26, 0xb7, 0x53, 0xde, - 0xe4, 0x81, 0xc2, 0x49, 0xc1, 0x91, 0xfe, 0x64, 0x83, 0x27, 0xc3, 0xe5, - 0x4f, 0x33, 0x95, 0x65, 0x7c, 0x0f, 0xcf, 0xbc, 0x22, 0x82, 0x70, 0x89, - 0xe5, 0xba, 0x85, 0x05, 0x3b, 0xc9, 0x7b, 0xc1, 0x53, 0x36, 0x7f, 0x66, - 0x8f, 0x52, 0xdb, 0xd4, 0x8e, 0x2b, 0x3d, 0x24, 0x13, 0x6b, 0x4c, 0xa8, - 0x9f, 0xfa, 0x3c, 0x59, 0xb9, 0x2b, 0x71, 0xbb, 0x4a, 0x46, 0x9d, 0x57, - 0xe1, 0x05, 0x28, 0xd4, 0x22, 0x93, 0x2f, 0x12, 0x57, 0xf5, 0xe2, 0xd3, - 0x95, 0xd0, 0xb9, 0xe4, 0x23, 0x2d, 0x75, 0xd6, 0x2c, 0x88, 0x68, 0x4a, - 0x5d, 0x94, 0xfb, 0x60, 0xd6, 0x3c, 0xae, 0xde, 0xb4, 0x0a, 0x49, 0x1a, - 0x74, 0x61, 0x9a, 0xd8, 0xe4, 0xd4, 0x3e, 0x85, 0xc5, 0xda, 0x0d, 0x25, - 0x6d, 0xc8, 0x9f, 0x51, 0xa9, 0x9b, 0xa0, 0xe5, 0x7b, 0x5e, 0xe5, 0x28, - 0xa9, 0x8e, 0xd3, 0x06, 0x85, 0x09, 0x07, 0x74, 0xc0, 0xd0, 0x09, 0xa9, - 0xf1, 0xea, 0xca, 0x82, 0x8c, 0x4a, 0xf6, 0x02, 0x8d, 0xf1, 0xd9, 0x86, - 0xff, 0x1f, 0x11, 0x0c, 0xd9, 0x00, 0x4f, 0x5b, 0x22, 0x98, 0x4e, 0x50, - 0x7d, 0xc6, 0x34, 0xbb, 0x23, 0xdb, 0x75, 0xc1, 0x5b, 0x17, 0x44, 0x3a, - 0x3f, 0x91, 0xb7, 0x0a, 0x17, 0xaf, 0x3e, 0x4f, 0xb6, 0xbd, 0x3b, 0x69, - 0xb9, 0x92, 0xbf, 0xe3, 0x47, 0x89, 0x41, 0xe2, 0x55, 0xbd, 0xb5, 0x4c, - 0xbe, 0xb7, 0x57, 0xd6, 0x41, 0x12, 0xf4, 0x20, 0x1b, 0x10, 0x22, 0x3f, - 0x8b, 0x62, 0x0f, 0x27, 0x76, 0xdf, 0xa7, 0xef, 0x73, 0xd1, 0x3b, 0x61, - 0x18, 0xd7, 0x90, 0xd8, 0x1b, 0xdb, 0xd1, 0xa9, 0x2c, 0x4e, 0x88, 0xa8, - 0x0c, 0xc9, 0xe4, 0xed, 0x73, 0x76, 0x8a, 0x4c, 0xda, 0xcd, 0xc5, 0x8b, - 0xce, 0x70, 0xcb, 0xc2, 0x57, 0x72, 0xb8, 0xe5, 0xfc, 0x80, 0x02, 0xb4, - 0x2d, 0xa6, 0x72, 0x88, 0xde, 0x96, 0x99, 0xd1, 0x8f, 0x08, 0xec, 0xd4, - 0xda, 0x8f, 0x84, 0x44, 0x0f, 0x0b, 0xba, 0xc5, 0x0c, 0xac, 0xbd, 0x03, - 0x7e, 0x95, 0x33, 0x65, 0x5b, 0x86, 0xfb, 0x25, 0xf3, 0xe4, 0x2e, 0x7e, - 0x8b, 0x70, 0x19, 0x4e, 0x35, 0xe5, 0x1d, 0x22, 0xa8, 0xad, 0xc9, 0xbf, - 0x80, 0xd0, 0x2b, 0xc4, 0x2d, 0x5a, 0xfe, 0x67, 0x96, 0x88, 0x4f, 0xda, - 0x1b, 0x48, 0xa4, 0x25, 0x51, 0x8c, 0x83, 0x3f, 0x22, 0xf6, 0x5d, 0xc1, - 0x8f, 0x48, 0x56, 0xd3, 0xed, 0xa4, 0x12, 0x29, 0x18, 0x32, 0xa9, 0x9c, - 0xcc, 0x42, 0xec, 0x0c, 0xf7, 0x26, 0x2b, 0xb6, 0xd0, 0x49, 0x6d, 0xa0, - 0xf4, 0x59, 0x58, 0x5c, 0xab, 0x9f, 0x2f, 0xfe, 0x7b, 0x2c, 0x8b, 0xf3, - 0x61, 0xb1, 0xd9, 0x84, 0xd4, 0x84, 0xed, 0x0a, 0x9a, 0xc6, 0x0b, 0x0f, - 0x67, 0x8a, 0xdd, 0x26, 0xdb, 0xd2, 0x54, 0xea, 0x22, 0x56, 0xff, 0x8b, - 0x2b, 0xf8, 0xd3, 0x18, 0x10, 0x18, 0x2c, 0xeb, 0xb9, 0x4f, 0xa9, 0x3d, - 0xa0, 0xea, 0x86, 0xb9, 0x27, 0xb1, 0xac, 0xa8, 0xfd, 0xc1, 0x72, 0x9a, - 0xaa, 0xcf, 0x51, 0x27, 0x2e, 0x39, 0xb7, 0x7e, 0x29, 0x2c, 0xad, 0xe7, - 0x42, 0x8b, 0xd1, 0x8a, 0x91, 0x5f, 0x17, 0xd9, 0xcb, 0xf4, 0x5c, 0x9f, - 0xeb, 0x67, 0xf4, 0x99, 0xe8, 0x09, 0x0a, 0x83, 0xc7, 0xe0, 0x43, 0x58, - 0xd9, 0x1c, 0xc3, 0xb8, 0x0c, 0x13, 0xb0, 0x4e, 0x05, 0xfd, 0x9b, 0x48, - 0xd1, 0x33, 0x87, 0xec, 0xf1, 0x99, 0xd4, 0xd6, 0xfe, 0x74, 0x89, 0x2e, - 0x46, 0xe7, 0xdb, 0x5c, 0x14, 0x8b, 0x87, 0x06, 0x1e, 0x97, 0x65, 0x31, - 0x20, 0x3e, 0x68, 0x9f, 0x78, 0x0d, 0x6b, 0x22, 0xaf, 0x05, 0xfb, 0xba, - 0x8e, 0x12, 0xd3, 0x86, 0x03, 0x71, 0x45, 0x87, 0x8a, 0x2e, 0x69, 0xef, - 0x52, 0xe7, 0xce, 0xac, 0xe4, 0xe2, 0x9d, 0x5b, 0xc4, 0x84, 0x27, 0x38, - 0x2b, 0xbd, 0x3b, 0x7a, 0xed, 0xe4, 0x11, 0x7e, 0xbf, 0x30, 0xa9, 0x8a, - 0x86, 0x4a, 0x3c, 0xde, 0x16, 0xa9, 0x41, 0x4e, 0xb9, 0xf6, 0x31, 0xb5, - 0x04, 0x09, 0xaa, 0xf2, 0x66, 0x90, 0xce, 0x97, 0x21, 0x3f, 0x34, 0x8a, - 0x66, 0x10, 0xa2, 0xd0, 0xa9, 0x28, 0xae, 0xa5, 0xef, 0xf7, 0x1a, 0x59, - 0x41, 0x7d, 0xe9, 0x87, 0x17, 0x7d, 0x31, 0x28, 0xdd, 0x62, 0xb3, 0x9d, - 0x63, 0x16, 0xa9, 0x05, 0x53, 0xf0, 0xfa, 0x6f, 0xc9, 0x49, 0xe3, 0x02, - 0x37, 0xa6, 0xcb, 0xb2, 0xb2, 0x55, 0x5f, 0x89, 0xbf, 0xb7, 0x71, 0x5a, - 0xa0, 0x6b, 0x0a, 0x15, 0xb9, 0x8a, 0xc2, 0xec, 0xa8, 0x25, 0x75, 0x78, - 0x27, 0x07, 0x0a, 0x0d, 0x47, 0xc5, 0x6c, 0x59, 0x47, 0x7b, 0x31, 0x24, - 0xce, 0x64, 0x29, 0x66, 0xba, 0xe0, 0x4e, 0xf5, 0x3d, 0x33, 0x1a, 0xfc, - 0x8f, 0xac, 0xcd, 0x1c, 0x02, 0xe5, 0x60, 0xe9, 0x45, 0xad, 0x80, 0x2f, - 0x25, 0xb7, 0x0b, 0xb6, 0x5a, 0x5b, 0x23, 0x69, 0xf9, 0x1f, 0xe6, 0x68, - 0xc3, 0xc7, 0x28, 0x6d, 0x2d, 0xa6, 0x68, 0x62, 0x4e, 0x8f, 0x11, 0x86, - 0xee, 0x72, 0x86, 0xaa, 0x47, 0x80, 0xe4, 0x0c, 0x61, 0x51, 0x67, 0xca, - 0x95, 0x86, 0x89, 0xa4, 0x46, 0x8a, 0xa5, 0xa5, 0x08, 0xc8, 0xb9, 0x14, - 0x0f, 0x90, 0xf8, 0x76, 0xab, 0x53, 0x57, 0x18, 0xd0, 0x51, 0x70, 0xd9, - 0x7f, 0xd7, 0xdd, 0xe3, 0xc9, 0x17, 0x5a, 0xfe, 0x42, 0x29, 0x0f, 0xf8, - 0x1e, 0x48, 0x4d, 0xd1, 0x5d, 0x3e, 0x0f, 0x8f, 0x10, 0x85, 0x07, 0x0f, - 0x6b, 0xeb, 0x58, 0x40, 0x87, 0xd5, 0x46, 0xb5, 0x16, 0x81, 0xdc, 0x40, - 0x46, 0xdf, 0xde, 0xcc, 0xeb, 0xc2, 0x07, 0x71, 0x7b, 0xa2, 0x28, 0xd5, - 0xd0, 0xf2, 0x0c, 0x05, 0xee, 0x43, 0x3f, 0xfe, 0x09, 0xfe, 0x3b, 0x51, - 0xf6, 0x4a, 0xf7, 0xcb, 0xbf, 0x36, 0x99, 0xe5, 0xda, 0xf3, 0x0c, 0xaf, - 0xaf, 0xd1, 0x5a, 0xa0, 0x58, 0xa6, 0x19, 0x48, 0x04, 0xdd, 0x2f, 0x41, - 0x57, 0xf4, 0x93, 0xca, 0x5d, 0xe7, 0x61, 0x66, 0xcc, 0x12, 0x8d, 0x00, - 0xdb, 0x55, 0xa8, 0x69, 0x96, 0xdc, 0x5a, 0xc4, 0xcf, 0x32, 0x74, 0x30, - 0xcf, 0xca, 0x2e, 0xa9, 0xda, 0x3d, 0x21, 0x47, 0x15, 0xe8, 0xf1, 0xb6, - 0xa2, 0xdf, 0xf7, 0x9c, 0xc2, 0x43, 0xd6, 0x46, 0x64, 0x5e, 0xd4, 0x15, - 0xa3, 0x22, 0x90, 0x68, 0x5a, 0xfa, 0xb4, 0xdf, 0x1f, 0x54, 0xfa, 0xe5, - 0xb0, 0xa0, 0xad, 0x4a, 0xdf, 0xb0, 0x14, 0x44, 0x05, 0x17, 0xb5, 0xe1, - 0x94, 0xb2, 0x3a, 0x51, 0x6c, 0xcd, 0xfa, 0xee, 0x4f, 0x29, 0x17, 0x71, - 0x99, 0x2c, 0xfb, 0x1a, 0x3c, 0xa0, 0x62, 0x59, 0xc2, 0xee, 0xbd, 0x9f, - 0x7f, 0xf7, 0xa5, 0x7a, 0x25, 0x74, 0xbf, 0xb0, 0x59, 0xff, 0x97, 0xe4, - 0xff, 0xed, 0x29, 0x3d, 0x86, 0xf3, 0xf6, 0xdb, 0x6e, 0x1a, 0x11, 0x15, - 0x29, 0x09, 0xb6, 0x98, 0x10, 0xe3, 0x94, 0x15, 0xe2, 0x2a, 0x5c, 0xc5, - 0x27, 0xf4, 0x58, 0xea, 0x3d, 0x1f, 0x0b, 0xca, 0xfe, 0x5a, 0x5f, 0xb5, - 0x42, 0x7d, 0x72, 0x00, 0x9e, 0x45, 0xab, 0x0d, 0xd7, 0xa2, 0x75, 0x88, - 0x56, 0x20, 0x99, 0xc1, 0x28, 0x79, 0x9f, 0x16, 0x2b, 0x08, 0xc1, 0xe0, - 0x25, 0x6a, 0x01, 0xee, 0xdc, 0x03, 0xc7, 0x1c, 0xcf, 0xe6, 0x17, 0x77, - 0xa8, 0xb6, 0xae, 0x5a, 0xd4, 0x75, 0xd8, 0x84, 0x70, 0xf4, 0xdf, 0x0c, - 0xe4, 0xce, 0xaa, 0x70, 0x34, 0x61, 0xbd, 0x8a, 0x79, 0x57, 0x11, 0x63, - 0xd3, 0x78, 0x66, 0xb7, 0xc6, 0xbf, 0xda, 0x63, 0xc0, 0x23, 0xef, 0x9e, - 0xea, 0x35, 0x6d, 0x50, 0xa7, 0x04, 0x6a, 0xda, 0x30, 0x56, 0x1b, 0x6d, - 0xdf, 0x1c, 0xae, 0xcb, 0xa5, 0xb6, 0xd2, 0xd8, 0x5b, 0x48, 0x74, 0x01, - 0xc4, 0x64, 0xcc, 0x09, 0xfb, 0xc7, 0x6b, 0xe5, 0xf8, 0xd6, 0x0b, 0x0b, - 0x71, 0x39, 0xfa, 0xee, 0x58, 0x0e, 0xf3, 0xf9, 0x0e, 0x5b, 0x38, 0xeb, - 0x16, 0xc5, 0xb6, 0x5a, 0x26, 0xeb, 0xf8, 0x23, 0xe2, 0x4a, 0x10, 0x59, - 0xc3, 0xb2, 0x38, 0x2a, 0x0f, 0x64, 0x3b, 0xa1, 0x65, 0x8b, 0x30, 0x7c, - 0x54, 0x8e, 0xe3, 0x54, 0x75, 0x9c, 0xd6, 0xb2, 0x0f, 0x37, 0x5b, 0xe0, - 0xf7, 0x25, 0x3c, 0x73, 0xbd, 0x8f, 0xba, 0xb4, 0xa0, 0xd2, 0xcf, 0x90, - 0x57, 0x19, 0x65, 0x64, 0x9f, 0x4d, 0x34, 0x9a, 0x40, 0x6e, 0xbf, 0xeb, - 0xbe, 0x6f, 0xfc, 0x76, 0x6b, 0x0b, 0x14, 0xda, 0xa1, 0x09, 0xff, 0x11, - 0x2c, 0xa8, 0x8f, 0x70, 0xc9, 0xe1, 0x96, 0x2b, 0xf8, 0x2c, 0x21, 0x87, - 0x21, 0xfd, 0x5d, 0xd0, 0x21, 0x2e, 0x75, 0xfb, 0x46, 0xd9, 0x1d, 0xa2, - 0x72, 0x9d, 0x44, 0xf5, 0x29, 0xfa, 0x01, 0x2c, 0xc7, 0x4f, 0x42, 0xa4, - 0x55, 0xb1, 0x90, 0x3f, 0xec, 0x8c, 0x56, 0xba, 0x69, 0x57, 0xd0, 0xf1, - 0x9d, 0x9f, 0xd3, 0x83, 0x21, 0xb8, 0xda, 0xc1, 0x90, 0x03, 0xd5, 0xfb, - 0x7e, 0xc8, 0xbd, 0x96, 0xe8, 0xce, 0x48, 0x31, 0x9f, 0xc6, 0x37, 0x8a, - 0xc5, 0x42, 0x54, 0x46, 0x38, 0xf2, 0x42, 0x6c, 0xfa, 0xfa, 0x5f, 0xe6, - 0x32, 0x4b, 0xda, 0xab, 0xb9, 0xd6, 0x96, 0x4a, 0x2c, 0xbb, 0x7d, 0x7b, - 0x7b, 0x4a, 0xca, 0xaf, 0x9c, 0xad, 0x4d, 0xfe, 0xde, 0x5c, 0x5e, 0x92, - 0x73, 0x73, 0xed, 0x8d, 0x57, 0x49, 0x52, 0x17, 0xeb, 0x96, 0x2e, 0x27, - 0x15, 0x54, 0x4f, 0xf8, 0x7a, 0xc2, 0x37, 0xf3, 0xc9, 0x70, 0xd2, 0x88, - 0x10, 0x1b, 0xc5, 0x6d, 0x52, 0x9a, 0xc5, 0x8b, 0x56, 0x7e, 0xc1, 0x5a, - 0xd8, 0xea, 0xc9, 0x69, 0x0e, 0x70, 0xda, 0xed, 0x0e, 0xd4, 0x5c, 0xe1, - 0xcd, 0x68, 0xbe, 0x26, 0xb9, 0xb3, 0xfc, 0x00, 0x4d, 0xb2, 0xbf, 0x1a, - 0x9e, 0x03, 0x82, 0xac, 0x79, 0x3b, 0x51, 0xc6, 0xf7, 0xce, 0xdc, 0xf2, - 0x1e, 0x62, 0xb1, 0x8b, 0x1f, 0xb8, 0x45, 0xdf, 0xe4, 0xb1, 0xc6, 0x95, - 0x07, 0x0e, 0x27, 0xe1, 0xd1, 0x30, 0x60, 0xec, 0x90, 0xd2, 0x0f, 0xac, - 0xd1, 0xd4, 0x57, 0xc4, 0x1b, 0xe6, 0xdf, 0xa3, 0x2a, 0x55, 0x20, 0xc3, - 0x35, 0x1a, 0x23, 0x27, 0x90, 0x77, 0xc9, 0xb1, 0x75, 0xfa, 0xf1, 0x03, - 0x1a, 0x5a, 0xf8, 0x6b, 0x6b, 0xc0, 0x10, 0x69, 0x8d, 0x5e, 0x9e, 0x40, - 0x96, 0xf8, 0x46, 0xc2, 0x38, 0x07, 0xcf, 0x00, 0x26, 0x7e, 0x7f, 0x4e, - 0x72, 0x66, 0xca, 0x39, 0xf9, 0x73, 0x07, 0x46, 0xd9, 0xd5, 0x87, 0x23, - 0x6d, 0xa2, 0xd8, 0xe4, 0x05, 0x5c, 0x80, 0x7a, 0xe6, 0x5a, 0x0a, 0x4c, - 0x58, 0x45, 0xf5, 0x4d, 0x4c, 0xcf, 0x0b, 0x59, 0xa2, 0x07, 0x63, 0xb9, - 0x99, 0xa4, 0xec, 0x67, 0xb1, 0x96, 0x7f, 0x6c, 0xd7, 0xe0, 0x2b, 0x30, - 0x1e, 0x57, 0x75, 0x92, 0x1f, 0x47, 0x41, 0x5c, 0xdd, 0xf2, 0xe2, 0xa2, - 0xc5, 0x43, 0x2e, 0xd5, 0x2c, 0x9a, 0x15, 0x7a, 0x98, 0xa6, 0x7e, 0x9b, - 0x5f, 0x9f, 0xe7, 0xc7, 0xf5, 0x91, 0xc3, 0x39, 0xd0, 0xa6, 0xd6, 0x58, - 0x1a, 0x08, 0xa3, 0x2f, 0xce, 0x7e, 0x7c, 0xe5, 0x34, 0x9b, 0x8f, 0xd6, - 0x0d, 0x0e, 0xbc, 0x3c, 0x99, 0xad, 0x77, 0x87, 0x60, 0x23, 0x99, 0xcf, - 0xd5, 0x2c, 0x82, 0x80, 0xf2, 0x4e, 0x8f, 0x1a, 0x2e, 0x5e, 0x10, 0x9f, - 0xcb, 0x7b, 0x21, 0xfe, 0x17, 0x03, 0x99, 0x20, 0x6e, 0x2a, 0x3d, 0x97, - 0x96, 0x4c, 0x52, 0x58, 0x07, 0xa1, 0xa1, 0xdd, 0xfc, 0xa1, 0x52, 0x94, - 0x3a, 0xa5, 0xbd, 0xbb, 0xb5, 0x08, 0x13, 0xff, 0xcb, 0xfc, 0x79, 0xa8, - 0xdb, 0xde, 0xb5, 0x11, 0x4d, 0x5f, 0xb0, 0x2e, 0x2e, 0x0c, 0xa4, 0x95, - 0x40, 0x44, 0xe4, 0x8a, 0xe8, 0x94, 0xc2, 0x32, 0x84, 0x19, 0xfb, 0x46, - 0xfe, 0xd3, 0xdc, 0xfb, 0xb4, 0x7e, 0x27, 0xec, 0x17, 0x6c, 0xa5, 0xa6, - 0xb6, 0x6e, 0x89, 0x15, 0x1b, 0xa4, 0xda, 0xa3, 0xac, 0x25, 0x7e, 0x9e, - 0xf8, 0x97, 0x07, 0x41, 0x21, 0x61, 0x55, 0x40, 0xe0, 0xd9, 0x20, 0x1f, - 0x26, 0xad, 0xe9, 0x7f, 0x0f, 0xc7, 0x89, 0x0c, 0x6e, 0x13, 0xca, 0xef, - 0x5e, 0x7d, 0x71, 0x12, 0x73, 0xe5, 0xf3, 0xdf, 0xd8, 0xcf, 0xac, 0xda, - 0xbf, 0x27, 0xa3, 0x53, 0xf8, 0x8a, 0x5f, 0xbb, 0x44, 0x04, 0x34, 0x7d, - 0x42, 0xe2, 0x64, 0x88, 0x4a, 0xf4, 0x67, 0x24, 0x7e, 0xc9, 0x06, 0x63, - 0x54, 0xc6, 0x0d, 0x46, 0x86, 0xf2, 0x41, 0x50, 0xee, 0xf9, 0xd2, 0x2c, - 0x87, 0xd1, 0x4e, 0x5f, 0x93, 0x69, 0x47, 0x9e, 0x02, 0x98, 0xcc, 0x34, - 0xc9, 0x46, 0x84, 0x02, 0x31, 0x12, 0x6a, 0x47, 0x3d, 0x9a, 0x70, 0x87, - 0xbb, 0xc4, 0xc0, 0x48, 0x90, 0x88, 0x0a, 0x61, 0x3c, 0x6a, 0x68, 0x63, - 0x0c, 0x5c, 0x2e, 0x80, 0x19, 0x54, 0x0a, 0xc5, 0x2b, 0x61, 0x7d, 0x55, - 0x92, 0x2d, 0x83, 0x33, 0x1c, 0x7a, 0x0c, 0xfd, 0x82, 0x40, 0x4c, 0x53, - 0xb0, 0x64, 0xd2, 0x02, 0x96, 0x35, 0xd8, 0x3c, 0x08, 0x6d, 0x4b, 0x3d, - 0x15, 0x55, 0xf8, 0x2a, 0xa7, 0xca, 0x89, 0x68, 0xb0, 0xc0, 0xf6, 0x84, - 0xc4, 0xf9, 0x86, 0xb4, 0x9e, 0x61, 0x23, 0xee, 0x87, 0xce, 0x15, 0x3e, - 0xa1, 0xf6, 0x86, 0xeb, 0x0c, 0x90, 0xca, 0x7a, 0x4e, 0xc5, 0xba, 0x8c, - 0x0d, 0x05, 0x41, 0x1a, 0xf7, 0x84, 0x3c, 0x64, 0x1e, 0x1f, 0x55, 0x83, - 0x74, 0x95, 0x34, 0x64, 0xb2, 0x03, 0xd6, 0xcf, 0x0f, 0xe6, 0xd2, 0xe5, - 0x56, 0x8f, 0x8a, 0x87, 0xe7, 0x24, 0x79, 0xb2, 0xbb, 0x91, 0x24, 0xf6, - 0x3f, 0x6a, 0x2e, 0x38, 0x1b, 0xd9, 0xa8, 0x06, 0x4e, 0x1f, 0x85, 0x76, - 0x7d, 0x0e, 0x90, 0xa2, 0x50, 0x4d, 0x01, 0xdc, 0x04, 0xae, 0x7e, 0x4d, - 0xfe, 0xe9, 0x43, 0x79, 0x84, 0x8b, 0xf1, 0xd6, 0x7a, 0x97, 0xa2, 0xc6, - 0x08, 0xb3, 0xbe, 0xeb, 0xd5, 0xe6, 0x31, 0x1b, 0x51, 0xdb, 0x6e, 0xf9, - 0xd9, 0xe0, 0x99, 0xcb, 0x8a, 0x35, 0xd3, 0x53, 0x48, 0xbb, 0x80, 0xe3, - 0xde, 0xdd, 0xa4, 0xad, 0x5e, 0x97, 0x27, 0xb7, 0xd6, 0xff, 0x8d, 0xd8, - 0x50, 0x62, 0xb6, 0xe3, 0xd3, 0xc3, 0xf6, 0x24, 0xff, 0x8a, 0x2a, 0x3a, - 0x2d, 0xd4, 0x8e, 0x22, 0x27, 0xae, 0x00, 0x42, 0xce, 0x28, 0x2e, 0x07, - 0x47, 0x29, 0x14, 0x46, 0x38, 0xd2, 0x73, 0x0d, 0xad, 0xb9, 0xca, 0x1d, - 0x68, 0x13, 0x45, 0xd3, 0xc1, 0xcf, 0xe7, 0x2b, 0x77, 0x6b, 0x01, 0xeb, - 0xe6, 0x83, 0x28, 0x31, 0x47, 0x33, 0x74, 0xb0, 0xc1, 0x5d, 0x3c, 0xe4, - 0xb4, 0x05, 0xe8, 0xb0, 0x5b, 0xaa, 0xeb, 0x74, 0xc5, 0x98, 0xd8, 0xf3, - 0x1c, 0x83, 0x9b, 0x4b, 0xa1, 0x14, 0xfe, 0x66, 0x1e, 0x22, 0x7d, 0x82, - 0x43, 0x6c, 0xa8, 0x2b, 0x99, 0x97, 0xdd, 0xbc, 0x67, 0x2d, 0x26, 0x2b, - 0x98, 0xe5, 0xf1, 0x1f, 0x5a, 0x15, 0xd5, 0x1e, 0x13, 0x21, 0x4e, 0x2c, - 0x75, 0x78, 0x6d, 0x23, 0x3b, 0x66, 0xff, 0x95, 0x6b, 0xdf, 0x93, 0x36, - 0x9e, 0xab, 0x59, 0xc2, 0x18, 0x5e, 0x0e, 0x42, 0xa4, 0x13, 0x3c, 0x4f, - 0x91, 0x3f, 0x36, 0xd4, 0xa4, 0xa8, 0x40, 0x4b, 0xf9, 0xc9, 0xdb, 0xce, - 0x55, 0x17, 0xc5, 0x72, 0x49, 0xd5, 0x29, 0xb0, 0x7b, 0x15, 0x45, 0x9c, - 0x57, 0xf3, 0x38, 0x22, 0x0e, 0x92, 0x10, 0x69, 0xaf, 0xb5, 0x72, 0x22, - 0x05, 0x7d, 0xb6, 0xad, 0x6e, 0x85, 0x83, 0xca, 0x03, 0x18, 0x08, 0xab, - 0x13, 0xf3, 0xa1, 0x33, 0x6e, 0x7f, 0xae, 0xa8, 0x7f, 0x7e, 0x0e, 0x60, - 0xb6, 0x77, 0xea, 0xe1, 0x36, 0xe5, 0x47, 0xe7, 0x26, 0x19, 0xa1, 0x22, - 0x43, 0x23, 0x75, 0xf5, 0x97, 0xd1, 0x90, 0xe3, 0x25, 0xd5, 0x79, 0x65, - 0xb4, 0xf7, 0xa1, 0xd7, 0x90, 0xd0, 0x37, 0x02, 0xbc, 0xb9, 0xc4, 0x56, - 0x14, 0x2a, 0xf7, 0x10, 0xb8, 0x60, 0x8a, 0x1b, 0x03, 0xdc, 0x62, 0x57, - 0xb8, 0xa5, 0x3a, 0x4f, 0xfc, 0x7d, 0xbe, 0x48, 0x97, 0xe1, 0x6f, 0xb0, - 0xe6, 0x79, 0x7a, 0x6c, 0x08, 0x3a, 0x2a, 0xc6, 0x3b, 0x04, 0xbc, 0x3b, - 0x3b, 0xf6, 0x96, 0x42, 0xf8, 0x8f, 0xc5, 0x8c, 0xc2, 0x1f, 0x0a, 0x23, - 0xd0, 0x06, 0x48, 0x34, 0x81, 0x4b, 0x46, 0x16, 0x2c, 0x95, 0xb0, 0x18, - 0x19, 0x01, 0x54, 0x38, 0xea, 0x47, 0x1e, 0xbd, 0x9e, 0xf7, 0x5a, 0x9c, - 0x4b, 0xc0, 0x3f, 0x05, 0xa2, 0x34, 0xff, 0xf7, 0x40, 0xc3, 0xe9, 0xb8, - 0x2b, 0x99, 0xc1, 0xdf, 0x51, 0x2d, 0x5c, 0xe9, 0x78, 0x81, 0x51, 0x2f, - 0x4d, 0xfb, 0x69, 0x5f, 0x9c, 0x2a, 0x57, 0xe3, 0x7d, 0xb6, 0xa5, 0xeb, - 0x97, 0x0e, 0x23, 0x98, 0x9d, 0x78, 0xdb, 0x7b, 0x48, 0x60, 0xd7, 0xf3, - 0xa0, 0x67, 0x88, 0xaf, 0xa7, 0xf1, 0xf8, 0x57, 0xc8, 0x2a, 0x50, 0xc4, - 0x77, 0x80, 0xba, 0x37, 0xf6, 0x00, 0x16, 0xea, 0xbb, 0x4d, 0xef, 0x94, - 0xa2, 0x4c, 0x5c, 0x5b, 0x58, 0xc3, 0x74, 0x54, 0xff, 0x96, 0x1a, 0x2f, - 0xb4, 0x07, 0x3f, 0x1e, 0x27, 0x02, 0x3f, 0x3e, 0xf5, 0x0d, 0xe5, 0x39, - 0x87, 0xe8, 0x73, 0x61, 0xe7, 0x49, 0x98, 0x45, 0xad, 0xc6, 0x23, 0xa8, - 0xfb, 0x69, 0x0b, 0x81, 0x3d, 0x2f, 0x7d, 0x2d, 0xc4, 0xca, 0x36, 0x69, - 0xe4, 0x7a, 0x76, 0x23, 0x60, 0xd0, 0x9d, 0x3e, 0x49, 0x4e, 0x1e, 0x33, - 0x84, 0x08, 0xa0, 0xd3, 0x7a, 0x8b, 0x33, 0x82, 0xb3, 0x4a, 0x9b, 0x93, - 0xe9, 0x02, 0xa8, 0xb6, 0x25, 0x6a, 0x77, 0x1a, 0x53, 0x4d, 0x21, 0xe0, - 0x3a, 0xad, 0xf5, 0x7f, 0x2c, 0x7a, 0xcf, 0xef, 0x84, 0x7c, 0xd0, 0xef, - 0x5d, 0xb6, 0x3a, 0xea, 0x44, 0xe4, 0xe1, 0x19, 0x5a, 0xfe, 0xe8, 0xae, - 0xfb, 0x16, 0x0c, 0x4b, 0x8d, 0xb0, 0x57, 0xa7, 0xf1, 0x3c, 0x19, 0x67, - 0x37, 0x4a, 0x5b, 0x26, 0x8d, 0x68, 0x61, 0xe2, 0x95, 0x1b, 0xc7, 0x80, - 0xfb, 0x2e, 0x19, 0x44, 0xfb, 0x1f, 0x18, 0xa1, 0x6a, 0xc6, 0xc8, 0xc0, - 0xec, 0xa5, 0x02, 0x09, 0x8b, 0x3f, 0x9f, 0x9c, 0xe9, 0xfe, 0x23, 0x43, - 0x1f, 0x4c, 0xea, 0x0c, 0x21, 0x53, 0x02, 0x85, 0x08, 0x3f, 0x53, 0x82, - 0x94, 0xe1, 0xa5, 0x41, 0x25, 0x44, 0x6c, 0x5a, 0xe0, 0x8b, 0xe0, 0x83, - 0xff, 0xfa, 0x85, 0x4f, 0xac, 0xfc, 0xd8, 0x25, 0x2c, 0xc8, 0x2e, 0x88, - 0xc4, 0x58, 0xf3, 0x6d, 0xb3, 0xef, 0xe8, 0x53, 0x0e, 0xf8, 0x86, 0xd4, - 0xa4, 0xf5, 0x9c, 0x56, 0xbc, 0xb1, 0x69, 0x82, 0x50, 0x9f, 0x38, 0x2c, - 0x68, 0xd4, 0x94, 0xc4, 0x8c, 0x19, 0x41, 0xd2, 0x10, 0x2f, 0xd5, 0x63, - 0x66, 0x80, 0x5e, 0x7d, 0x14, 0xb5, 0x4a, 0xbc, 0x32, 0x61, 0x21, 0x83, - 0x82, 0x2c, 0x0f, 0xe2, 0x48, 0x10, 0xb8, 0x23, 0xd4, 0xf6, 0xbc, 0xa9, - 0xff, 0x7d, 0xaa, 0xcd, 0xc1, 0x66, 0x74, 0xa4, 0x44, 0x2b, 0xcd, 0x2d, - 0x12, 0x4c, 0x1e, 0x61, 0xf3, 0x07, 0x83, 0xeb, 0xe2, 0x50, 0x94, 0xf0, - 0xa8, 0x6e, 0xff, 0xe9, 0xf6, 0x0c, 0xfd, 0x54, 0x25, 0x14, 0xaa, 0xaf, - 0x1f, 0x3b, 0x29, 0x9d, 0xb5, 0xb3, 0x66, 0x92, 0xee, 0x99, 0xda, 0xd6, - 0xdf, 0xc7, 0x1a, 0x88, 0xfd, 0xa0, 0xe4, 0x86, 0x92, 0x10, 0xe9, 0x83, - 0xaf, 0xd4, 0xeb, 0x6a, 0xf6, 0x4d, 0x39, 0x47, 0x46, 0x90, 0xa6, 0xa1, - 0x92, 0x0b, 0x0b, 0x3b, 0xe6, 0xaa, 0x85, 0xdd, 0x86, 0x33, 0xb2, 0x98, - 0xf3, 0x67, 0x48, 0x34, 0xaa, 0x0b, 0x81, 0xd4, 0xc8, 0x31, 0x15, 0x8f, - 0x0e, 0x5b, 0xc0, 0x9d, 0xdf, 0xc7, 0x9e, 0x11, 0x54, 0x47, 0xd2, 0x2a, - 0x13, 0x21, 0x55, 0x88, 0x61, 0xed, 0xd5, 0x4f, 0x9a, 0x66, 0xb2, 0x86, - 0xa1, 0xe4, 0x96, 0x60, 0xb2, 0x65, 0xe1, 0x9e, 0x53, 0x96, 0x2f, 0xd0, - 0x91, 0x42, 0xb1, 0x2d, 0xcb, 0xf0, 0x55, 0xb5, 0xb5, 0xb0, 0x83, 0x30, - 0x8a, 0x22, 0xb4, 0x65, 0x54, 0xae, 0xe1, 0xde, 0x91, 0xdc, 0x48, 0x60, - 0x81, 0xe0, 0x24, 0x46, 0xdf, 0x19, 0xaa, 0x18, 0xde, 0xc9, 0x22, 0x31, - 0x50, 0x2e, 0xd1, 0x8e, 0x4e, 0x03, 0xc2, 0x7f, 0x19, 0x9f, 0x21, 0x52, - 0xba, 0xdd, 0x2a, 0xac, 0xbd, 0x92, 0x59, 0x45, 0x31, 0xde, 0x53, 0x1a, - 0x40, 0x79, 0x76, 0x83, 0xfd, 0x5d, 0x8f, 0x4c, 0xd6, 0xfc, 0x92, 0x6a, - 0x28, 0xb9, 0x20, 0x32, 0xae, 0xa6, 0xc6, 0x0e, 0x14, 0xd8, 0xea, 0x01, - 0x1c, 0xf4, 0x17, 0x23, 0xc4, 0x37, 0x23, 0x33, 0x6c, 0xc1, 0x7e, 0x80, - 0xe3, 0x20, 0xde, 0x1b, 0x88, 0xb1, 0x14, 0xa9, 0xe3, 0x7c, 0xae, 0xb1, - 0xf6, 0xc4, 0xeb, 0xa2, 0xf1, 0x59, 0xcb, 0xb0, 0xf0, 0x26, 0x68, 0xd5, - 0x6d, 0x9b, 0x98, 0xa4, 0x8f, 0xb0, 0xc4, 0x2e, 0xf7, 0xca, 0x60, 0x25, - 0xcc, 0xd5, 0x9c, 0xfa, 0x98, 0xca, 0x6d, 0x13, 0x21, 0x3b, 0x0e, 0x36, - 0xd7, 0x68, 0xb4, 0xd3, 0x05, 0x3f, 0xcd, 0x78, 0x63, 0x41, 0x22, 0x9e, - 0xfd, 0x09, 0xfc, 0xcc, 0xce, 0x6e, 0xef, 0x9e, 0x1f, 0xb9, 0x6a, 0x31, - 0xf8, 0xe0, 0xdc, 0xf5, 0x51, 0xae, 0x9f, 0x81, 0xfa, 0xe4, 0x7a, 0x51, - 0x26, 0xce, 0x87, 0xa3, 0x96, 0xca, 0x10, 0x43, 0xfa, 0x4a, 0xbf, 0x95, - 0xdd, 0x15, 0xb2, 0x9c, 0x9a, 0xd4, 0x59, 0xe1, 0xd8, 0x69, 0xb5, 0xc1, - 0x8c, 0x42, 0x46, 0x06, 0xc2, 0x3e, 0x31, 0xf3, 0x29, 0xe0, 0x5d, 0x04, - 0x23, 0x25, 0x42, 0x89, 0xda, 0xd1, 0x49, 0x8a, 0xed, 0x63, 0xa1, 0x0c, - 0x51, 0xb3, 0xe8, 0x9b, 0x55, 0x3e, 0xc3, 0x40, 0x20, 0x96, 0x2d, 0xbf, - 0x1e, 0x5c, 0x56, 0x37, 0xda, 0x15, 0x8a, 0x6e, 0x20, 0xac, 0x10, 0x1f, - 0x8c, 0x87, 0xfa, 0x34, 0xc3, 0x57, 0xfb, 0xec, 0xfc, 0x6b, 0x62, 0xf9, - 0x90, 0x58, 0x39, 0xe6, 0x8d, 0xd4, 0xd0, 0x72, 0xdd, 0x5a, 0x00, 0xed, - 0xf1, 0x9f, 0x61, 0x24, 0xb4, 0xd2, 0x60, 0x41, 0xfc, 0x0f, 0xff, 0xf9, - 0xfe, 0xc6, 0x29, 0xbe, 0x05, 0x0a, 0xcb, 0x4f, 0xea, 0x0a, 0x2c, 0x42, - 0x0c, 0x42, 0xc4, 0x64, 0x49, 0xba, 0xd5, 0x50, 0x11, 0x3d, 0xc4, 0x6e, - 0x02, 0xfe, 0xc5, 0x0e, 0x47, 0x1e, 0x7f, 0x74, 0xef, 0x76, 0x20, 0x8d, - 0xd6, 0xe5, 0x71, 0xe4, 0xd7, 0x60, 0x89, 0xc2, 0xf6, 0xa6, 0xa0, 0xfc, - 0x0a, 0x29, 0x95, 0xf8, 0x66, 0x31, 0x7d, 0x0e, 0xde, 0x29, 0x74, 0x29, - 0xe3, 0x9c, 0x0a, 0xb3, 0x18, 0x80, 0x8b, 0x64, 0xc4, 0x1f, 0x47, 0x50, - 0x88, 0x26, 0x13, 0xaa, 0x2d, 0x59, 0x61, 0x17, 0x0e, 0x6f, 0xd9, 0x6b, - 0x69, 0xb9, 0x60, 0x50, 0xc4, 0x74, 0xa6, 0x17, 0x9b, 0x3d, 0x19, 0x0d, - 0xe9, 0x24, 0x20, 0xe9, 0xb5, 0x03, 0x13, 0xb0, 0x41, 0xbb, 0x97, 0xcc, - 0xe3, 0x29, 0xc1, 0xaf, 0x40, 0xa9, 0xed, 0x2a, 0x4c, 0x09, 0x40, 0xa3, - 0x20, 0xe7, 0x59, 0x81, 0x00, 0x21, 0x00, 0x84, 0x00, 0x80, 0x49, 0x7a, - 0x00, 0x85, 0x43, 0x00, 0xa4, 0x80, 0x7f, 0x05, 0xf2, 0xe1, 0x8f, 0x79, - 0xb0, 0x7f, 0x7b, 0xf2, 0x43, 0xcb, 0x2b, 0x99, 0x9f, 0x1a, 0x7d, 0x77, - 0x95, 0xf7, 0xae, 0xde, 0x35, 0x2d, 0x7f, 0x41, 0x7e, 0x67, 0xf2, 0x1f, - 0xd5, 0x3b, 0xbb, 0x7e, 0xd4, 0xf7, 0xea, 0x3d, 0x2f, 0xf2, 0x1f, 0xce, - 0x6e, 0xe8, 0x61, 0xff, 0x51, 0xe8, 0xbf, 0xc6, 0xb1, 0x21, 0xd2, 0xfc, - 0x5e, 0x5f, 0x4f, 0xc7, 0xf0, 0xff, 0xe2, 0x7f, 0x17, 0xfb, 0x9f, 0xf5, - 0x5f, 0xa3, 0xf1, 0xff, 0xc2, 0x7e, 0x2f, 0xf6, 0xbf, 0xe6, 0xbf, 0x26, - 0x67, 0xfc, 0x5f, 0x8b, 0xf3, 0xfe, 0x4f, 0xc9, 0x99, 0xff, 0xe0, 0xbf, - 0xca, 0xfd, 0x1f, 0xf2, 0xbf, 0xf0, 0xd9, 0x9f, 0xec, 0x8f, 0xd9, 0xf0, - 0xb3, 0x47, 0xaa, 0xb1, 0x44, 0xd3, 0x72, 0xf7, 0xaa, 0xf6, 0xbf, 0xb6, - 0x7f, 0xd7, 0xff, 0x47, 0xfc, 0x3f, 0xfa, 0x0f, 0xb8, 0x4f, 0x87, 0xf8, - 0xbd, 0x27, 0xa7, 0xf3, 0x5f, 0xfa, 0xbf, 0x17, 0xda, 0x1f, 0xf0, 0x9f, - 0x0f, 0xf3, 0x6d, 0x83, 0xf6, 0xaf, 0xdb, 0x7f, 0xf0, 0x9e, 0x93, 0x6a, - 0xff, 0xc8, 0xff, 0x5f, 0xe2, 0x7f, 0xc9, 0xfc, 0x3f, 0xcd, 0xae, 0x47, - 0xe2, 0xfe, 0xcf, 0xf7, 0xbf, 0xde, 0xf4, 0x44, 0x45, 0x3d, 0xef, 0x63, - 0xf6, 0xfd, 0x23, 0xdb, 0xfa, 0xee, 0x9d, 0xfb, 0x97, 0xb4, 0xf6, 0x8b, - 0x23, 0xf8, 0xdf, 0xdc, 0xba, 0xd7, 0xae, 0x62, 0x73, 0xf5, 0xae, 0xa9, - 0xeb, 0x98, 0xa2, 0x3d, 0x47, 0x98, 0x67, 0xae, 0x66, 0xfe, 0xa3, 0xf6, - 0xcf, 0x63, 0xfd, 0x89, 0xfc, 0xe3, 0x03, 0xb7, 0xaf, 0x6c, 0x8a, 0x59, - 0x8d, 0xfb, 0xa3, 0xf9, 0xc6, 0x18, 0x3f, 0x9c, 0xf2, 0xbb, 0xf5, 0xdb, - 0x98, 0x53, 0x7c, 0xf8, 0xc6, 0x1c, 0x2c, 0xef, 0x6f, 0xe5, 0xfc, 0xbf, - 0xdb, 0xfe, 0x4f, 0xfd, 0x0f, 0xf7, 0xfe, 0x5f, 0xcf, 0xf2, 0x7b, 0xcb, - 0xf8, 0x3f, 0x17, 0xd2, 0x7f, 0x7f, 0xe6, 0xd4, 0x5a, 0xc1, 0xbb, 0x2e, - 0xb4, 0xde, 0xca, 0xff, 0x8c, 0x79, 0x6b, 0x7c, 0x6f, 0x63, 0xff, 0x5a, - 0xff, 0x09, 0xf5, 0x7f, 0xd9, 0x5f, 0xd9, 0x5a, 0x53, 0xf9, 0xcf, 0x75, - 0xd8, 0x39, 0x54, 0xfd, 0x53, 0xea, 0xf7, 0xd7, 0x54, 0xac, 0x17, 0xb3, - 0x7a, 0xa1, 0xff, 0xf9, 0x3c, 0xc0, 0x63, 0xff, 0x92, 0x79, 0x84, 0x9f, - 0xe4, 0x3e, 0x5b, 0x6a, 0xef, 0xc9, 0xfc, 0xf2, 0x71, 0x60, 0x00, 0x00, - 0x00, 0x42, 0x6e, 0x7a, 0xe7, 0x9c, 0xa9, 0x13, 0xb3, 0xbc, 0xf2, 0x5b, - 0xb9, 0xfb, 0x8a, 0x48, 0x83, 0x58, 0xe7, 0x1f, 0xe0, 0xb0, 0x46, 0xe8, - 0x6c, 0xd0, 0x67, 0x48, 0xa0, 0xb7, 0x87, 0x8e, 0xa2, 0xae, 0x44, 0x15, - 0x93, 0xab, 0x6b, 0x61, 0x52, 0xe0, 0x7f, 0x98, 0xb7, 0x29, 0xa5, 0x17, - 0x77, 0x48, 0x57, 0xf1, 0x2c, 0x73, 0x6f, 0xd3, 0x9e, 0x0e, 0xaa, 0x50, - 0x47, 0x2c, 0x13, 0x1a, 0xa4, 0x59, 0x2d, 0xa9, 0xe3, 0xff, 0xf6, 0xbf, - 0x79, 0x09, 0xa1, 0xa8, 0xdd, 0x57, 0x55, 0x26, 0x4c, 0x1d, 0xa7, 0x9c, - 0xd6, 0xfb, 0xef, 0xc9, 0x5b, 0x80, 0xb6, 0xe4, 0x49, 0xb1, 0xe6, 0x71, - 0x5e, 0xe0, 0x12, 0x65, 0x7c, 0x11, 0x2d, 0xf8, 0xb2, 0xa8, 0x03, 0xd3, - 0x66, 0xa4, 0x94, 0x63, 0x9d, 0x12, 0x75, 0x7e, 0xd3, 0xef, 0x2a, 0xb1, - 0x4f, 0xc7, 0x56, 0x35, 0x9e, 0xae, 0x91, 0x5d, 0xa7, 0x99, 0x66, 0x21, - 0x1d, 0xdb, 0xf9, 0x9e, 0xf3, 0xfd, 0x70, 0x3b, 0x2f, 0xe5, 0xa8, 0xf1, - 0xc3, 0x0c, 0x44, 0xbc, 0x44, 0xef, 0x2e, 0x4d, 0x9b, 0x0e, 0xaf, 0xb2, - 0x7b, 0xea, 0xb2, 0x28, 0xc2, 0x92, 0xdd, 0xce, 0x7b, 0x2f, 0x90, 0xdb, - 0xf5, 0xa5, 0xdd, 0x00, 0x7e, 0x53, 0x94, 0x2b, 0x7d, 0xb7, 0x61, 0x71, - 0x17, 0x54, 0x05, 0x75, 0x6d, 0x99, 0x47, 0x43, 0xa3, 0x63, 0x25, 0xe4, - 0x35, 0x27, 0x1d, 0xfc, 0xb3, 0x46, 0xd9, 0xf4, 0x72, 0x18, 0x83, 0x24, - 0x61, 0xc1, 0x7f, 0xcf, 0x28, 0x2a, 0x13, 0x75, 0x73, 0x54, 0xb2, 0xfb, - 0xe5, 0xa2, 0xb0, 0xad, 0xe2, 0x83, 0x09, 0xc5, 0xc4, 0x98, 0xd6, 0xe6, - 0xb4, 0xc6, 0xc4, 0xe5, 0xdf, 0x57, 0x71, 0x41, 0xb7, 0xaa, 0xfc, 0xd2, - 0x73, 0xe1, 0xb8, 0xf6, 0x12, 0x81, 0x81, 0x69, 0x14, 0x55, 0x2a, 0xf5, - 0xb6, 0xc4, 0x56, 0x10, 0x9b, 0x35, 0x10, 0xf7, 0x8f, 0xfa, 0xd5, 0xd3, - 0x51, 0x5e, 0x10, 0x32, 0xee, 0x32, 0x92, 0x40, 0xc7, 0x5d, 0x2b, 0xc9, - 0xea, 0x14, 0x30, 0xec, 0xae, 0x1c, 0x0a, 0x79, 0xfb, 0x1b, 0xca, 0x91, - 0xab, 0x58, 0x83, 0x54, 0x7f, 0x64, 0x24, 0x6d, 0xae, 0x63, 0x88, 0x9a, - 0x6d, 0x09, 0x63, 0xb6, 0x90, 0xb4, 0x99, 0xa0, 0xa4, 0x72, 0x0b, 0xd1, - 0x81, 0xa3, 0x07, 0x3e, 0x33, 0xde, 0xf6, 0x27, 0x36, 0xee, 0x40, 0x91, - 0x82, 0x87, 0x5c, 0x35, 0x1d, 0x3e, 0xb9, 0xbc, 0xcd, 0x03, 0x2d, 0x32, - 0x10, 0xba, 0xbf, 0x10, 0x6d, 0x42, 0x68, 0x69, 0x3a, 0x6a, 0x54, 0xc7, - 0xcb, 0xdc, 0x5d, 0xe3, 0x29, 0xce, 0x1d, 0x30, 0xf2, 0x87, 0x54, 0xe5, - 0xc7, 0x60, 0x13, 0x76, 0x89, 0xb5, 0xc1, 0x00, 0x1c, 0x59, 0x93, 0x5e, - 0x3b, 0x9d, 0xe2, 0x9e, 0xda, 0x39, 0xf1, 0x20, 0x19, 0x9d, 0xd6, 0x1a, - 0xeb, 0xf6, 0x1d, 0xf9, 0x9c, 0xf7, 0xe9, 0x02, 0xa0, 0x6a, 0xf2, 0x79, - 0xee, 0xe1, 0xc9, 0xdc, 0x1a, 0x7a, 0x9b, 0xbc, 0xec, 0xf1, 0x2e, 0xb4, - 0x67, 0xe9, 0xa3, 0xf3, 0x61, 0x51, 0xce, 0xd4, 0xf9, 0xaf, 0x7d, 0x33, - 0xb6, 0xd7, 0xc1, 0x8f, 0xbc, 0xba, 0x91, 0xfa, 0xa6, 0xa1, 0x31, 0x1c, - 0x63, 0x71, 0x69, 0x81, 0x16, 0xcb, 0x8a, 0x3e, 0x18, 0x04, 0xf9, 0x7d, - 0x13, 0xcf, 0x84, 0x84, 0xfe, 0x8f, 0xe4, 0x8e, 0x60, 0xad, 0x6e, 0xfe, - 0xf7, 0xc5, 0x60, 0xdb, 0x08, 0xc2, 0xc4, 0xd5, 0xfe, 0x7c, 0x40, 0xed, - 0x41, 0xc8, 0x61, 0x30, 0x53, 0xa6, 0xb9, 0x26, 0x40, 0x67, 0x58, 0x64, - 0xbe, 0x3c, 0xd4, 0x45, 0x72, 0x71, 0x2b, 0x20, 0x03, 0x3e, 0xb6, 0x48, - 0x26, 0x23, 0x4d, 0xb7, 0xab, 0xed, 0x79, 0xc8, 0xbb, 0x01, 0x83, 0x34, - 0xc5, 0x3e, 0x89, 0x8f, 0x7a, 0x49, 0x64, 0x4e, 0xf2, 0xed, 0x1f, 0x55, - 0xb8, 0x45, 0x50, 0xe9, 0x07, 0x72, 0xbd, 0x9b, 0xab, 0x54, 0x86, 0xfd, - 0xf4, 0x9e, 0x5a, 0xfb, 0x29, 0x09, 0x3d, 0x95, 0x91, 0x9c, 0x1d, 0x3e, - 0x9a, 0xfa, 0xad, 0x27, 0x97, 0x53, 0x78, 0x61, 0x88, 0xaf, 0x45, 0x88, - 0x1a, 0x59, 0x36, 0x59, 0x92, 0x17, 0x0e, 0x11, 0x7c, 0x23, 0x2e, 0xb0, - 0xa8, 0xd5, 0x9b, 0xb0, 0xfc, 0x2c, 0xc3, 0xf8, 0x8a, 0x15, 0x90, 0x7a, - 0xbd, 0xb4, 0xc4, 0x22, 0x70, 0x04, 0x01, 0xd5, 0xc7, 0x42, 0x34, 0xd0, - 0x2a, 0x55, 0x65, 0xcf, 0x7a, 0x8f, 0x33, 0xb9, 0x40, 0xe0, 0xb9, 0x46, - 0x47, 0x4e, 0x24, 0x16, 0x32, 0x54, 0x5a, 0x47, 0xa5, 0xeb, 0xbc, 0x42, - 0xee, 0x47, 0xd1, 0x2e, 0x0b, 0xd3, 0x5b, 0x29, 0x05, 0x7a, 0x0a, 0xeb, - 0x91, 0x69, 0x34, 0xec, 0xee, 0x66, 0x52, 0x37, 0xc6, 0xaf, 0x61, 0xd0, - 0x7b, 0xa7, 0x55, 0x62, 0x51, 0x57, 0x76, 0xd1, 0x7c, 0x4a, 0x83, 0x85, - 0x1d, 0xab, 0x3a, 0x8b, 0x2b, 0x33, 0x2c, 0x4b, 0x8f, 0x59, 0x20, 0xe4, - 0x58, 0x57, 0xdb, 0x85, 0x96, 0x51, 0x25, 0x4b, 0xb3, 0xa3, 0xcf, 0x6f, - 0xbc, 0x59, 0x1c, 0x99, 0xe5, 0x2f, 0xb9, 0x13, 0x20, 0x77, 0x20, 0xab, - 0x3e, 0x4a, 0xd8, 0x13, 0x47, 0x5f, 0xb2, 0x64, 0x17, 0xb7, 0xbd, 0x2e, - 0x04, 0x30, 0x01, 0x25, 0x32, 0xda, 0x94, 0x38, 0xf4, 0xfd, 0x64, 0xb7, - 0x57, 0x9a, 0xf8, 0xa4, 0xfd, 0x36, 0x5f, 0x5b, 0x8f, 0x32, 0x24, 0xeb, - 0x81, 0x12, 0xb4, 0xb3, 0xc5, 0x14, 0x7c, 0xce, 0x3a, 0x6d, 0xb2, 0x81, - 0x23, 0x3a, 0x78, 0x78, 0x17, 0xa1, 0x2c, 0xc3, 0xb6, 0xd2, 0x68, 0x55, - 0x1f, 0x48, 0x12, 0x94, 0xb5, 0x84, 0xee, 0x9e, 0x5b, 0x8c, 0xb0, 0x66, - 0xdf, 0x88, 0xf9, 0x8f, 0x75, 0xac, 0x93, 0xd4, 0x26, 0xa5, 0x61, 0x81, - 0xa3, 0x1a, 0x81, 0x9b, 0xac, 0x9d, 0x14, 0x1c, 0xa5, 0xbc, 0x13, 0xe2, - 0xd4, 0x7c, 0xc9, 0x5a, 0x00, 0x81, 0x66, 0xe0, 0xfc, 0x1c, 0xc7, 0x52, - 0x53, 0x32, 0xe9, 0x52, 0x80, 0x8b, 0x13, 0x91, 0x4e, 0x69, 0x6c, 0xda, - 0x66, 0xe3, 0x18, 0xe9, 0x84, 0x4e, 0x1e, 0x07, 0x02, 0x18, 0x53, 0x11, - 0x5d, 0x8e, 0x9a, 0xf2, 0x12, 0x35, 0xa6, 0x93, 0x94, 0xce, 0x5f, 0x8e, - 0x99, 0x33, 0x12, 0x26, 0xc1, 0x8a, 0x40, 0xac, 0xc5, 0x7e, 0x12, 0xde, - 0x6a, 0xa2, 0x01, 0x6e, 0xa0, 0x75, 0xde, 0x75, 0x14, 0x5f, 0xfa, 0xe4, - 0xef, 0x23, 0xbc, 0xc3, 0x63, 0xc8, 0x12, 0x07, 0x6a, 0xc2, 0x5d, 0x76, - 0xad, 0x99, 0x0e, 0xe1, 0xf4, 0xfc, 0xa0, 0x3f, 0x72, 0xff, 0xf1, 0x48, - 0x58, 0x0a, 0x7d, 0x2a, 0x8c, 0x3d, 0xab, 0x45, 0xc2, 0x81, 0xf3, 0x67, - 0x4d, 0x8f, 0x29, 0x6d, 0x17, 0x88, 0x1f, 0x06, 0x87, 0xba, 0x59, 0x45, - 0xd4, 0x6b, 0x0f, 0x62, 0x8c, 0xe4, 0xf0, 0x82, 0x61, 0xe4, 0xf9, 0xcb, - 0xc5, 0x89, 0x75, 0x5e, 0x71, 0x14, 0x0b, 0x93, 0xdc, 0x50, 0xdc, 0x08, - 0xb9, 0xdc, 0x7b, 0x32, 0xc0, 0x67, 0x00, 0x6e, 0xb9, 0xc4, 0x6e, 0x34, - 0xa2, 0xc2, 0x9f, 0xa1, 0x4f, 0x88, 0x77, 0x00, 0x40, 0x14, 0x9c, 0xe0, - 0xe6, 0x9f, 0x4b, 0x62, 0x6d, 0x8c, 0x94, 0xcb, 0x29, 0x7a, 0xe2, 0x24, - 0x4c, 0x0d, 0x31, 0xeb, 0x70, 0x97, 0xcf, 0x06, 0xd8, 0x4f, 0xd2, 0xed, - 0x42, 0xc5, 0x6c, 0x51, 0x01, 0x6d, 0x27, 0x9d, 0xd2, 0x71, 0x86, 0xcf, - 0x80, 0xf7, 0xba, 0xb7, 0x43, 0xb5, 0xc5, 0xdf, 0x39, 0x92, 0x7b, 0xcc, - 0xa0, 0x2d, 0xc8, 0x57, 0x2c, 0x3b, 0xb1, 0xb2, 0x0d, 0x6e, 0xef, 0xfd, - 0x77, 0x8a, 0x4b, 0xb7, 0x77, 0x96, 0x22, 0x90, 0xa9, 0x71, 0x3c, 0x2b, - 0x2b, 0x85, 0xb3, 0x89, 0x1a, 0xb6, 0xd7, 0x43, 0x04, 0xfa, 0xda, 0xbe, - 0x3f, 0x47, 0x07, 0x9b, 0xd3, 0xaf, 0xa4, 0xee, 0xd5, 0xd3, 0xc4, 0xe0, - 0x4a, 0x24, 0xbc, 0x78, 0xbd, 0x88, 0x55, 0xfe, 0x45, 0xba, 0x47, 0xeb, - 0xcc, 0x61, 0x71, 0x21, 0xd5, 0x9b, 0x4a, 0xc0, 0x1a, 0x7c, 0xf9, 0xd5, - 0x37, 0xf8, 0x9f, 0x79, 0x40, 0xa0, 0x10, 0xc8, 0x3e, 0x75, 0xfe, 0x99, - 0xef, 0xec, 0xeb, 0x53, 0x87, 0x8a, 0xf4, 0x95, 0x53, 0xb8, 0x4b, 0x01, - 0xa0, 0x66, 0x46, 0x9c, 0x4a, 0x95, 0x95, 0xa9, 0x44, 0x45, 0xec, 0x02, - 0xd2, 0xd8, 0x6b, 0x71, 0x8a, 0xb2, 0x21, 0x70, 0xe2, 0xa1, 0x25, 0xd6, - 0x11, 0x3a, 0x29, 0x01, 0x5b, 0x58, 0x0d, 0x96, 0x6e, 0xe8, 0xa8, 0x82, - 0xb5, 0x95, 0xa0, 0xab, 0xc1, 0xea, 0x7d, 0x39, 0x02, 0x32, 0x8c, 0x68, - 0x54, 0x10, 0x3f, 0x2d, 0x01, 0x2f, 0x93, 0x26, 0xce, 0x35, 0x0d, 0xfb, - 0x9a, 0x6e, 0xd4, 0xf6, 0xb8, 0x01, 0x8a, 0x79, 0x21, 0xfe, 0x0e, 0x3f, - 0x03, 0x66, 0x18, 0xd1, 0x16, 0x9e, 0xcc, 0xbd, 0xde, 0xcf, 0x8b, 0x7c, - 0x36, 0xca, 0x4d, 0x7a, 0x84, 0x4d, 0x7f, 0xdf, 0xb1, 0x8f, 0xaf, 0x7d, - 0x95, 0x60, 0x7b, 0xa5, 0xce, 0x18, 0x18, 0x9a, 0x47, 0xa1, 0x6e, 0x22, - 0x39, 0xb9, 0x51, 0x9b, 0xab, 0x92, 0xfd, 0x2c, 0x28, 0x21, 0x96, 0x56, - 0x06, 0x57, 0xf2, 0x7b, 0x71, 0xb8, 0x0b, 0x16, 0x23, 0xa4, 0x1b, 0x22, - 0x47, 0xff, 0x47, 0x03, 0x61, 0x1c, 0xbf, 0x2a, 0xa3, 0x86, 0x0a, 0x2b, - 0x6f, 0x60, 0x71, 0x7d, 0xb1, 0xe1, 0x76, 0x5f, 0xe0, 0x51, 0x28, 0xeb, - 0x08, 0x1d, 0xea, 0x6d, 0x57, 0xb8, 0x35, 0xe4, 0x29, 0x39, 0xd4, 0xb5, - 0xde, 0x63, 0xde, 0x45, 0xe0, 0xd1, 0x72, 0xe4, 0x69, 0x78, 0xb0, 0xa5, - 0x83, 0x61, 0x54, 0x23, 0xb7, 0xf8, 0x26, 0xf7, 0xc8, 0x4a, 0xfd, 0xe1, - 0xb6, 0x75, 0x63, 0x2e, 0x80, 0xe7, 0x9a, 0x71, 0xb8, 0x92, 0x79, 0x1d, - 0xac, 0xfb, 0x15, 0xfe, 0x67, 0x0a, 0xed, 0xde, 0x24, 0x79, 0x16, 0xd3, - 0x5c, 0x00, 0xa1, 0x7c, 0x85, 0xad, 0x0d, 0x10, 0x5d, 0xe4, 0xbf, 0x6e, - 0x76, 0x6e, 0x19, 0xd2, 0x46, 0xb9, 0x73, 0xab, 0x35, 0x14, 0xf6, 0xc7, - 0x86, 0x78, 0x0e, 0x88, 0x47, 0x6e, 0x4e, 0x75, 0xf4, 0x0f, 0x1b, 0x5b, - 0x6b, 0xce, 0x44, 0xd0, 0x87, 0xd0, 0x8e, 0xd5, 0x6e, 0x37, 0x08, 0xc9, - 0xb1, 0x37, 0xff, 0xb0, 0xa9, 0xaa, 0xf1, 0x9d, 0x51, 0xb9, 0x6d, 0x15, - 0x31, 0x34, 0x7a, 0x8a, 0x6d, 0xf2, 0xfa, 0x43, 0xb9, 0xed, 0xfe, 0x00, - 0x63, 0xb5, 0x01, 0x7f, 0xf1, 0x0b, 0x54, 0x99, 0xd7, 0xd0, 0x34, 0xbb, - 0x07, 0x17, 0xe1, 0xca, 0x8b, 0xda, 0x26, 0x4d, 0xd6, 0xe4, 0x98, 0xfc, - 0x22, 0x94, 0xf1, 0xa1, 0x1c, 0x11, 0xf4, 0x30, 0xe0, 0x0c, 0xf6, 0x7a, - 0x2e, 0x7f, 0x1c, 0x6c, 0xe0, 0x07, 0xb8, 0x90, 0x2d, 0x7e, 0xea, 0x35, - 0xd8, 0xa9, 0xc6, 0x89, 0xa0, 0x39, 0xd0, 0x66, 0x41, 0xcf, 0x6f, 0x3f, - 0x77, 0x88, 0x8a, 0xb5, 0x71, 0xb6, 0x68, 0x51, 0xdf, 0xa9, 0x5b, 0x96, - 0x28, 0x14, 0x81, 0x4e, 0x36, 0x6b, 0x16, 0xa3, 0xb7, 0x0d, 0x20, 0xad, - 0x22, 0x92, 0xaf, 0x4a, 0x57, 0x0f, 0xcb, 0x27, 0xc4, 0x8f, 0xb7, 0x84, - 0x00, 0x2b, 0xb9, 0x07, 0xee, 0x88, 0xf7, 0xa0, 0x40, 0x52, 0xfd, 0xcb, - 0x0c, 0x85, 0xec, 0x52, 0x38, 0x67, 0xf4, 0x63, 0x52, 0x2a, 0xe7, 0x6f, - 0x19, 0x65, 0xdd, 0xa4, 0x45, 0x37, 0xbf, 0xe1, 0xa4, 0x7c, 0xed, 0xfa, - 0x20, 0x2c, 0xa2, 0x9f, 0x48, 0xfc, 0xc2, 0xae, 0x24, 0x5d, 0xad, 0x93, - 0xbe, 0x3e, 0xdf, 0x25, 0xd0, 0x11, 0xa3, 0xf6, 0xb1, 0x2e, 0x26, 0x66, - 0xd8, 0x88, 0x63, 0x9e, 0x84, 0x40, 0xfc, 0x5b, 0x47, 0x53, 0xcd, 0xc2, - 0xff, 0xa4, 0xfd, 0x5d, 0x8c, 0xdb, 0xad, 0xe2, 0x32, 0x79, 0x65, 0xe1, - 0xeb, 0x5a, 0x74, 0xc5, 0xc1, 0x5e, 0x50, 0xb1, 0x4f, 0xab, 0xec, 0x0a, - 0xd2, 0x2e, 0x62, 0x58, 0x5b, 0xfd, 0x6f, 0xed, 0x4e, 0x10, 0x95, 0xb3, - 0x97, 0x00, 0x79, 0xd9, 0xe5, 0x56, 0x11, 0xea, 0x85, 0x8f, 0xc0, 0x26, - 0x2c, 0x8d, 0x0c, 0x71, 0x65, 0x02, 0x55, 0xe9, 0xa9, 0x81, 0x24, 0x08, - 0x92, 0xfc, 0x48, 0x5b, 0x52, 0xaf, 0xf3, 0xa2, 0xc6, 0x46, 0xe1, 0x82, - 0xb6, 0xc1, 0x13, 0xa5, 0x0a, 0xe7, 0xdb, 0xa8, 0x5e, 0xf0, 0x2d, 0x3d, - 0x1d, 0x65, 0xd9, 0x67, 0xc0, 0x3a, 0xba, 0xf2, 0x40, 0x4f, 0xe6, 0x46, - 0x05, 0x5d, 0x1a, 0x32, 0x5d, 0xb1, 0x75, 0xdb, 0x05, 0x89, 0x5e, 0xad, - 0xe7, 0x38, 0x9a, 0xc3, 0x6a, 0x40, 0x08, 0xb4, 0x76, 0x82, 0xe7, 0xdb, - 0x68, 0x0f, 0xb4, 0x8a, 0x25, 0x99, 0x40, 0x8e, 0x39, 0x73, 0x40, 0x88, - 0x28, 0x06, 0x74, 0x72, 0xcd, 0x24, 0x5e, 0x05, 0x88, 0xda, 0xdd, 0xb6, - 0x80, 0x0d, 0xb0, 0x92, 0x52, 0x8b, 0x36, 0xec, 0x6a, 0x54, 0x32, 0xd9, - 0xad, 0x96, 0xd5, 0x19, 0x45, 0x05, 0x50, 0x8d, 0x64, 0x51, 0x79, 0xa5, - 0x1f, 0x0f, 0x2e, 0xc1, 0x1b, 0xca, 0x0a, 0x13, 0x43, 0x3c, 0x4b, 0xd2, - 0x52, 0xa2, 0x99, 0x53, 0xb4, 0xdd, 0x96, 0xb9, 0xf0, 0x8c, 0x25, 0x63, - 0x6e, 0x4f, 0x4e, 0x48, 0xa6, 0x51, 0x8e, 0xc9, 0x8e, 0x23, 0x98, 0x3f, - 0xb2, 0x3f, 0x1b, 0x39, 0x05, 0xc2, 0x3a, 0x0e, 0x83, 0xb5, 0x0f, 0x7e, - 0xc2, 0xcd, 0x18, 0x50, 0x1b, 0x29, 0x64, 0xd2, 0x4d, 0x91, 0x44, 0x02, - 0xb3, 0xb3, 0x9a, 0x95, 0xc7, 0xeb, 0x68, 0xd6, 0xc8, 0x99, 0xe5, 0xf6, - 0xb2, 0xba, 0xfd, 0x09, 0x20, 0xfe, 0x8d, 0xa2, 0x43, 0xa2, 0x3b, 0x85, - 0x01, 0x0c, 0x3b, 0x51, 0xa2, 0x6d, 0x06, 0xf6, 0xd2, 0x0d, 0x55, 0x48, - 0x9d, 0x38, 0x0e, 0xcc, 0x0d, 0x4b, 0xd4, 0x3a, 0x1f, 0x49, 0x9a, 0xa9, - 0xa3, 0x02, 0x7e, 0xaa, 0x9f, 0x80, 0x95, 0xd6, 0x55, 0x21, 0x64, 0x95, - 0x57, 0x95, 0x99, 0xf9, 0xa6, 0x65, 0x6e, 0x6e, 0x0a, 0x7a, 0xd1, 0xcb, - 0x3e, 0xdf, 0xd8, 0x48, 0xcc, 0x31, 0x2a, 0x05, 0xf0, 0xaf, 0xa5, 0x42, - 0xc6, 0x93, 0x45, 0xe5, 0x1e, 0x50, 0xab, 0xb8, 0xf5, 0x8a, 0x5d, 0x53, - 0x49, 0xde, 0xcd, 0xa4, 0x42, 0x7a, 0x96, 0xae, 0xfe, 0xbf, 0xf2, 0xc7, - 0x9f, 0x56, 0xda, 0x68, 0xb9, 0x65, 0x5c, 0xfc, 0xcc, 0x23, 0x72, 0x3c, - 0xfc, 0x51, 0xb9, 0xc7, 0xe7, 0x0e, 0x48, 0xd2, 0x63, 0x44, 0xe6, 0xba, - 0xb2, 0x83, 0xc0, 0xe3, 0xa6, 0xa9, 0x6d, 0x6e, 0x26, 0xf8, 0x70, 0xd9, - 0xde, 0x9f, 0xa8, 0x50, 0x5a, 0x99, 0xff, 0x69, 0xf4, 0xd1, 0xdb, 0x1a, - 0x98, 0xfd, 0x34, 0x9c, 0x8a, 0xbe, 0x7b, 0xc9, 0xb1, 0xc0, 0x6c, 0xbc, - 0x9d, 0x5f, 0xf1, 0x2c, 0x8e, 0x4b, 0x36, 0x11, 0x97, 0x63, 0x2a, 0xec, - 0x56, 0xf5, 0x88, 0x1f, 0x25, 0xbd, 0xf6, 0x2a, 0x48, 0x16, 0xb3, 0xdd, - 0x42, 0xf9, 0x0c, 0x03, 0xe5, 0x36, 0x2e, 0xf0, 0x5a, 0x7b, 0x8b, 0x40, - 0xab, 0xb0, 0xe5, 0x4e, 0xc4, 0xed, 0xc0, 0xc9, 0x80, 0x95, 0x34, 0x3d, - 0x36, 0x63, 0xb5, 0xcb, 0x4e, 0x74, 0x5d, 0x23, 0x22, 0x97, 0x5c, 0x62, - 0x8e, 0xa3, 0x83, 0xf2, 0x09, 0xdb, 0x36, 0xc1, 0xd6, 0x92, 0xd3, 0xf6, - 0xf5, 0xe5, 0x58, 0x3f, 0x98, 0x9e, 0x8a, 0x14, 0x05, 0xd0, 0xfc, 0x22, - 0x1f, 0x27, 0xcb, 0xec, 0xa0, 0x0b, 0x97, 0xb6, 0x27, 0x28, 0xe1, 0xe3, - 0x18, 0x86, 0x45, 0xf8, 0x6a, 0x1d, 0xc6, 0x2b, 0x61, 0x27, 0x0e, 0xf4, - 0x5d, 0x23, 0xe6, 0x11, 0xe1, 0xc8, 0x02, 0x1e, 0x6d, 0x79, 0x01, 0xce, - 0xa2, 0xbb, 0x02, 0xbf, 0x8e, 0xd5, 0xb0, 0xb9, 0x2c, 0x15, 0xa6, 0x94, - 0x9c, 0x8d, 0x92, 0x99, 0x5e, 0x20, 0x19, 0xec, 0x1f, 0xec, 0x63, 0x79, - 0xd8, 0xb3, 0x64, 0x94, 0x89, 0x28, 0xa3, 0xac, 0x32, 0xd7, 0xe7, 0xe7, - 0x25, 0xf6, 0x42, 0x58, 0xff, 0x21, 0x1c, 0x6c, 0xa3, 0x8a, 0xeb, 0xd3, - 0x3d, 0xbe, 0xe4, 0x89, 0xaa, 0x39, 0x43, 0x5a, 0x66, 0x3e, 0x8b, 0xc5, - 0x6b, 0x42, 0x0b, 0x90, 0xf4, 0xd1, 0x69, 0x84, 0x68, 0x71, 0x60, 0x04, - 0x9c, 0xf6, 0xa9, 0xb7, 0x89, 0x5c, 0x96, 0x7e, 0x4d, 0x78, 0xb4, 0xa0, - 0x1a, 0x3e, 0xd4, 0xa1, 0x81, 0x29, 0x3d, 0x86, 0xd0, 0x76, 0x9e, 0xd1, - 0xac, 0xaa, 0x09, 0x2c, 0x18, 0x4f, 0x15, 0x26, 0x30, 0x9d, 0x3e, 0xe4, - 0x51, 0x2e, 0x35, 0xa8, 0x43, 0x01, 0x72, 0xce, 0x2a, 0xbf, 0x9b, 0x75, - 0x1b, 0xd8, 0x68, 0xe2, 0x21, 0x91, 0x28, 0xee, 0x32, 0x8b, 0x4d, 0x67, - 0x68, 0xb2, 0x5f, 0x19, 0x5e, 0x47, 0xd4, 0x78, 0x70, 0x4b, 0x05, 0xdb, - 0x8b, 0x2e, 0x80, 0x4a, 0xd0, 0xda, 0x00, 0xac, 0xa5, 0x69, 0xd9, 0xe7, - 0xe8, 0x1f, 0x4d, 0xc6, 0x32, 0x5f, 0xd4, 0x04, 0xa2, 0x3a, 0xa8, 0x43, - 0x8b, 0xdf, 0x30, 0xe7, 0x40, 0x57, 0x51, 0x68, 0x73, 0xa3, 0xf1, 0xa9, - 0xe0, 0xfa, 0x18, 0x19, 0x5f, 0x3e, 0xf6, 0x86, 0xe3, 0x6e, 0x3e, 0xf9, - 0xf0, 0xdb, 0xab, 0x6a, 0x88, 0x8a, 0x1b, 0x59, 0xcc, 0x5e, 0xfe, 0x96, - 0x32, 0x79, 0x6b, 0xdf, 0x79, 0x9d, 0xae, 0x20, 0xd0, 0xc2, 0x0f, 0xf3, - 0x64, 0xb0, 0x36, 0xeb, 0x65, 0x9a, 0xae, 0xa2, 0x4c, 0xc8, 0x45, 0x74, - 0xd4, 0x9b, 0x00, 0x6d, 0xb2, 0xe3, 0x3a, 0x18, 0xb0, 0x1b, 0x16, 0x87, - 0xd8, 0xef, 0x1c, 0xed, 0xec, 0x36, 0xe3, 0x6f, 0xe8, 0x5a, 0xf2, 0x06, - 0xd9, 0x80, 0xf8, 0xb3, 0x31, 0x12, 0x7b, 0x9f, 0x9e, 0xe8, 0x0b, 0x24, - 0x37, 0x97, 0xa9, 0xf9, 0xcb, 0x77, 0xa4, 0xcf, 0x4a, 0xd6, 0x64, 0xf5, - 0xd2, 0x7d, 0x99, 0x4f, 0x9d, 0xf3, 0xa8, 0x9c, 0xbf, 0x61, 0x0c, 0xae, - 0x7b, 0xf6, 0xc5, 0x0a, 0x03, 0x98, 0x40, 0x59, 0xd5, 0xfd, 0x98, 0x11, - 0x4f, 0x9c, 0x95, 0x01, 0x63, 0x6b, 0xbf, 0x2a, 0xe7, 0x90, 0xd2, 0x49, - 0xc5, 0x02, 0x3c, 0x04, 0xa0, 0x52, 0x91, 0x26, 0x45, 0x9d, 0xa9, 0xd9, - 0x41, 0x9d, 0x3b, 0x05, 0x93, 0x70, 0x50, 0xb2, 0x09, 0x56, 0x55, 0xbf, - 0x56, 0xde, 0xb4, 0x63, 0x42, 0x03, 0x84, 0xf9, 0x74, 0x85, 0xc1, 0x1b, - 0x5e, 0xf6, 0x5e, 0xdf, 0x01, 0x86, 0xa6, 0x99, 0x3b, 0x7d, 0x73, 0x0c, - 0xc9, 0x6e, 0xad, 0x12, 0x9c, 0x4d, 0x31, 0x4e, 0xd4, 0x12, 0x0a, 0x4e, - 0x2b, 0x17, 0xaa, 0xb8, 0x4f, 0x5c, 0x20, 0xe3, 0xe6, 0x3a, 0x0a, 0xcc, - 0xbd, 0x5d, 0x26, 0x98, 0x96, 0x9d, 0x2c, 0xf2, 0xcc, 0x1e, 0x0f, 0x03, - 0x67, 0x67, 0x8e, 0x34, 0x9d, 0x54, 0x9c, 0xc8, 0x58, 0x99, 0xe3, 0x45, - 0xc3, 0xb5, 0xba, 0xc7, 0x45, 0x97, 0xb0, 0x56, 0x60, 0xf6, 0x80, 0xee, - 0x2b, 0x06, 0x90, 0x99, 0x3e, 0xa8, 0xb7, 0xdc, 0xb0, 0xb0, 0x6d, 0xb9, - 0x68, 0x2b, 0x31, 0x79, 0xf4, 0x1d, 0x05, 0xe1, 0x6e, 0x67, 0x04, 0xb1, - 0x9b, 0xa7, 0x6a, 0x69, 0x0c, 0x4d, 0x76, 0x17, 0xf4, 0x9b, 0x2a, 0xc1, - 0x90, 0x6c, 0xf5, 0x67, 0x98, 0x5e, 0xb4, 0x8d, 0xad, 0x12, 0x6c, 0xaf, - 0x89, 0x09, 0x82, 0xb2, 0x64, 0x58, 0x44, 0xd6, 0x01, 0xd6, 0x0d, 0x20, - 0xf7, 0x04, 0xad, 0x4e, 0x1d, 0x9b, 0x4f, 0xad, 0xf9, 0x45, 0x34, 0xbf, - 0xeb, 0x38, 0x9e, 0x55, 0x87, 0xdd, 0xcc, 0x61, 0x29, 0x5f, 0xe1, 0xf6, - 0x35, 0x87, 0xc6, 0x5b, 0xc2, 0x90, 0xb9, 0x60, 0xfc, 0xdb, 0x74, 0x7d, - 0xce, 0x0e, 0x93, 0x58, 0x28, 0xfa, 0xf8, 0xee, 0x8e, 0x75, 0xe6, 0xcd, - 0x8d, 0x9c, 0xc5, 0x15, 0x05, 0x4c, 0x39, 0x34, 0x73, 0x12, 0x56, 0x74, - 0x80, 0x09, 0x0a, 0x9f, 0x25, 0x53, 0x80, 0x76, 0x20, 0x04, 0xf4, 0x99, - 0x6e, 0xbb, 0x29, 0x68, 0x54, 0xe0, 0xe8, 0x1e, 0x40, 0x1d, 0x82, 0x25, - 0xdc, 0xfe, 0x44, 0x37, 0x79, 0xe7, 0x97, 0x0a, 0x02, 0x8c, 0x56, 0xc1, - 0x16, 0xe4, 0xce, 0xf7, 0xfb, 0x43, 0x9f, 0xd2, 0xe5, 0xa0, 0x18, 0xab, - 0xdb, 0x7f, 0xb7, 0x08, 0x43, 0xe6, 0xed, 0xae, 0xbf, 0x00, 0x8f, 0xa5, - 0xfa, 0xdd, 0x95, 0x69, 0x3d, 0xfe, 0xcf, 0x0f, 0x8a, 0x5c, 0x8e, 0x21, - 0x1b, 0xf4, 0xae, 0x79, 0x54, 0x2a, 0xbd, 0x68, 0x9c, 0xde, 0xd2, 0x7c, - 0x51, 0xd6, 0x12, 0x72, 0xed, 0xaa, 0xa3, 0x34, 0x6f, 0x1e, 0x00, 0x44, - 0xc5, 0xec, 0x02, 0x17, 0x60, 0xf2, 0xd4, 0xe9, 0x82, 0x2f, 0xfe, 0x53, - 0x1c, 0xaf, 0xd1, 0xac, 0xdb, 0x8c, 0xf8, 0xce, 0x89, 0x27, 0xa1, 0x53, - 0xcf, 0x6a, 0x3f, 0xd3, 0xb7, 0x53, 0xce, 0x98, 0x5c, 0x57, 0x54, 0x6d, - 0x9b, 0xf4, 0x6e, 0x67, 0xad, 0x69, 0xeb, 0xa6, 0x86, 0xba, 0x9a, 0xd4, - 0x99, 0xb0, 0xde, 0x53, 0x28, 0x90, 0x42, 0x43, 0xf0, 0x57, 0x1a, 0x01, - 0x05, 0x08, 0x41, 0xe2, 0x9b, 0x5d, 0x95, 0xe4, 0x5c, 0x4d, 0x67, 0xd5, - 0xd2, 0xe8, 0xb6, 0xcb, 0xa8, 0x5e, 0x66, 0x8e, 0x27, 0xa6, 0x01, 0x40, - 0x22, 0x40, 0x29, 0xff, 0x74, 0x30, 0xf9, 0x3d, 0xf7, 0x93, 0x40, 0xb6, - 0x46, 0xb2, 0xe1, 0x26, 0x57, 0x51, 0xd3, 0x24, 0x5d, 0x2b, 0xc7, 0x4c, - 0x6e, 0x53, 0xca, 0x6d, 0xc5, 0xee, 0x05, 0x51, 0x2b, 0xe1, 0x6a, 0xa1, - 0x78, 0x0a, 0x97, 0x63, 0xdb, 0x09, 0x6e, 0x99, 0x02, 0x4f, 0x68, 0x2d, - 0x5a, 0xd2, 0xe9, 0x60, 0x27, 0x9a, 0x9f, 0xb3, 0xcf, 0xb2, 0xfe, 0xe2, - 0x8e, 0x3a, 0xdf, 0x6a, 0xaf, 0x4f, 0x6e, 0x79, 0x91, 0xfb, 0x78, 0x54, - 0x54, 0x1d, 0xaf, 0x59, 0x25, 0x84, 0xdf, 0x57, 0x58, 0x1c, 0x4f, 0xf2, - 0xf8, 0x2d, 0x4a, 0xd2, 0x97, 0xbe, 0xdc, 0xcd, 0xf1, 0x87, 0xe7, 0x42, - 0x30, 0xa7, 0x57, 0x6f, 0x8f, 0x98, 0x5e, 0x2c, 0x34, 0x2b, 0x76, 0x07, - 0xe8, 0x58, 0xca, 0x89, 0x01, 0x92, 0x8f, 0x71, 0x07, 0x35, 0x12, 0x74, - 0x78, 0x50, 0x8d, 0x9f, 0x47, 0xed, 0xa9, 0x02, 0xa3, 0xbf, 0xb0, 0xc6, - 0x98, 0x8d, 0x8b, 0x32, 0x2b, 0xca, 0x72, 0xdc, 0xbe, 0xa5, 0x12, 0x09, - 0xd1, 0xc7, 0x4b, 0xc7, 0xef, 0x70, 0x92, 0x37, 0xb7, 0x42, 0x16, 0x31, - 0x28, 0x3c, 0xc4, 0x31, 0x18, 0x8d, 0x9f, 0x1e, 0x8c, 0x6b, 0xef, 0x26, - 0xd8, 0xfd, 0xe0, 0x5a, 0x11, 0x60, 0x02, 0xf0, 0x3f, 0x01, 0x4c, 0x15, - 0x4d, 0x35, 0x90, 0x64, 0xc4, 0xc7, 0xc7, 0x59, 0x4e, 0x2b, 0x2d, 0x84, - 0x46, 0xf7, 0xe4, 0x68, 0xad, 0x93, 0xa7, 0xb9, 0x51, 0xdf, 0x7c, 0x62, - 0x73, 0x4e, 0xa2, 0x1a, 0x24, 0xb7, 0xed, 0x51, 0x64, 0x48, 0xdd, 0xe7, - 0x76, 0x21, 0x62, 0xa2, 0x3f, 0xda, 0xa3, 0xd9, 0x66, 0x66, 0xbb, 0x04, - 0x45, 0x27, 0x10, 0xbf, 0x9a, 0x1d, 0xbf, 0xf9, 0x58, 0x6e, 0xc5, 0xeb, - 0xd9, 0xd7, 0x0d, 0xe0, 0x60, 0x2f, 0x16, 0x47, 0xce, 0xc5, 0x7b, 0x26, - 0xfc, 0xbc, 0x54, 0xd2, 0xbf, 0x40, 0xc0, 0x31, 0xdb, 0x6c, 0x22, 0x81, - 0x69, 0x07, 0x1c, 0x9e, 0x33, 0xf7, 0x4e, 0xf3, 0x0c, 0x38, 0x45, 0x1e, - 0x8d, 0x51, 0x49, 0x7a, 0x26, 0x43, 0xfe, 0x32, 0x0e, 0x98, 0xef, 0x90, - 0x55, 0x50, 0xbb, 0xbf, 0xca, 0x15, 0x91, 0x38, 0x5e, 0x1b, 0xcb, 0xb0, - 0xc3, 0xd5, 0x89, 0x80, 0x0f, 0x91, 0x4e, 0xbb, 0x31, 0xd9, 0x49, 0xa0, - 0x4f, 0x28, 0xf6, 0x26, 0x8e, 0x88, 0x9e, 0x9e, 0x4a, 0x47, 0x0d, 0xac, - 0xb6, 0x8a, 0xdf, 0xc4, 0x4c, 0xc9, 0x3f, 0x16, 0xf3, 0x24, 0x0f, 0x52, - 0x60, 0x12, 0x2b, 0x2f, 0x08, 0x35, 0xd1, 0x08, 0xff, 0x13, 0xef, 0x27, - 0xd8, 0x97, 0xc4, 0x9e, 0x16, 0x4d, 0xbd, 0xdb, 0x25, 0xca, 0xff, 0x50, - 0x65, 0x6f, 0xc3, 0x6f, 0x6c, 0x62, 0x86, 0x4f, 0x10, 0xb5, 0x3c, 0x64, - 0xe0, 0xd5, 0xb8, 0xaf, 0xff, 0xea, 0xc7, 0xef, 0xed, 0x64, 0x7d, 0xcd, - 0xc4, 0x2f, 0x81, 0xf9, 0x7b, 0x9c, 0xaa, 0xb2, 0x62, 0x75, 0xfe, 0xb8, - 0x43, 0x79, 0x10, 0xe8, 0xa1, 0xa8, 0x3a, 0x6f, 0x43, 0x89, 0x64, 0xc0, - 0x7a, 0x5f, 0x4a, 0xe7, 0xd0, 0x3b, 0xab, 0x2e, 0x32, 0x9d, 0x3b, 0x35, - 0x23, 0xec, 0x47, 0x85, 0xf4, 0xff, 0xcc, 0xfd, 0x14, 0x72, 0x6d, 0x1c, - 0x33, 0xfe, 0x38, 0xb7, 0xf4, 0x84, 0x08, 0x2a, 0x17, 0x67, 0xd3, 0x48, - 0x9c, 0x43, 0x93, 0x5d, 0xa6, 0x8c, 0xbb, 0xb5, 0x7a, 0x40, 0xab, 0xd6, - 0x15, 0xc5, 0x36, 0x2d, 0x67, 0x42, 0xf7, 0xe7, 0xdb, 0xbd, 0x2a, 0xd9, - 0x29, 0xe6, 0x3b, 0x82, 0xff, 0x10, 0x02, 0xe8, 0x3d, 0xc4, 0x70, 0x4f, - 0xe3, 0xe5, 0x98, 0x76, 0xf3, 0x37, 0x30, 0x53, 0xd9, 0x49, 0x9d, 0x45, - 0xed, 0x2d, 0xad, 0x0b, 0xfa, 0xd0, 0xe9, 0xd9, 0x29, 0x12, 0x30, 0xc1, - 0xf7, 0x38, 0x7b, 0x2e, 0xad, 0xb1, 0xb5, 0x9c, 0xe6, 0xc8, 0xf0, 0x3d, - 0xf6, 0x45, 0x9c, 0x07, 0x5e, 0xfc, 0x34, 0x66, 0x51, 0x79, 0xc8, 0x5a, - 0x82, 0x51, 0x48, 0x58, 0x70, 0x42, 0x14, 0x29, 0x19, 0x53, 0x90, 0xeb, - 0xe3, 0x0f, 0xea, 0xbf, 0x58, 0x06, 0xb7, 0x9a, 0x5e, 0x17, 0x95, 0x3b, - 0x70, 0x1d, 0xad, 0x3d, 0x52, 0xc7, 0xcd, 0xcd, 0x77, 0x75, 0x01, 0xb0, - 0xbe, 0xa8, 0xe7, 0x4a, 0x2e, 0x5b, 0xa7, 0xe2, 0xc7, 0xfa, 0x6f, 0x2c, - 0xd0, 0xad, 0x1f, 0xa5, 0x76, 0xff, 0xd2, 0x18, 0xe3, 0x81, 0x71, 0xbc, - 0xb6, 0xfe, 0x88, 0xa4, 0xea, 0xdb, 0xc7, 0xa5, 0xf0, 0x4e, 0x64, 0xc0, - 0xf3, 0xea, 0xe3, 0x7a, 0x5c, 0x53, 0xad, 0xc4, 0xa9, 0x14, 0x45, 0x48, - 0xfd, 0x2f, 0x51, 0xf1, 0x46, 0xe3, 0x5d, 0x87, 0x29, 0xd8, 0x48, 0x4e, - 0x4b, 0xef, 0x2b, 0x8d, 0x04, 0x21, 0x6f, 0x9c, 0x4e, 0x8b, 0x88, 0x8c, - 0xd4, 0xf4, 0x97, 0x0e, 0x13, 0xcd, 0x79, 0x3f, 0x0d, 0xd8, 0x8a, 0xf0, - 0xf1, 0xf8, 0x85, 0xf3, 0x9c, 0x6e, 0x3d, 0x29, 0x65, 0xb2, 0x2d, 0x16, - 0x73, 0x27, 0x7d, 0x59, 0xf6, 0xbd, 0x4c, 0x2c, 0x8f, 0xaa, 0x0e, 0x34, - 0xd0, 0x4c, 0xa2, 0x0b, 0xcb, 0x69, 0x32, 0x80, 0x07, 0x58, 0xc5, 0x50, - 0x61, 0x05, 0x00, 0x4b, 0xf1, 0x55, 0xce, 0xbb, 0x52, 0x35, 0xe9, 0xe6, - 0x85, 0x48, 0x1f, 0x85, 0x4e, 0x01, 0xdf, 0xeb, 0x6f, 0x6f, 0x0a, 0xe0, - 0xad, 0x61, 0x94, 0xc6, 0x2e, 0x99, 0xc0, 0xcd, 0x59, 0xf9, 0xc4, 0x8d, - 0x15, 0x17, 0x43, 0x22, 0xcf, 0x63, 0xf8, 0x01, 0x3a, 0xbc, 0x00, 0x06, - 0x07, 0xb5, 0xf6, 0x00, 0x97, 0xd5, 0xff, 0x7e, 0x89, 0x26, 0x70, 0x14, - 0xdc, 0x12, 0xdd, 0x48, 0x47, 0x35, 0xf8, 0x09, 0xb9, 0x65, 0x95, 0x2a, - 0xa5, 0x40, 0x0a, 0x07, 0xc4, 0x4f, 0x18, 0x4a, 0x6a, 0x3f, 0x90, 0x66, - 0xeb, 0x71, 0xae, 0xb8, 0x0f, 0x74, 0xb0, 0x3c, 0x42, 0x63, 0x6c, 0x77, - 0x5d, 0xd5, 0x97, 0xb7, 0x5a, 0x04, 0xe9, 0x47, 0xb3, 0x61, 0xbe, 0x05, - 0x5b, 0x96, 0x93, 0x72, 0x30, 0x86, 0x67, 0x47, 0x83, 0x58, 0xd0, 0x00, - 0x7e, 0x47, 0x2e, 0x40, 0xf1, 0xb2, 0x45, 0xc8, 0x71, 0x9a, 0x45, 0x25, - 0xdc, 0xdf, 0x34, 0x16, 0x4e, 0x52, 0x74, 0x64, 0x7b, 0xcd, 0x5b, 0x67, - 0x64, 0xf6, 0x59, 0x17, 0x5a, 0x91, 0x2d, 0xc0, 0x65, 0x97, 0x9c, 0x60, - 0x1f, 0xca, 0xd2, 0x0d, 0xea, 0x53, 0xf9, 0xa5, 0xe4, 0x9f, 0x9d, 0x5f, - 0x32, 0xd8, 0x4d, 0x8a, 0xc8, 0x0a, 0x63, 0xa2, 0x90, 0x5d, 0x24, 0x2b, - 0x35, 0xc3, 0x44, 0x20, 0xe1, 0xac, 0x89, 0xa4, 0xa1, 0x93, 0x39, 0xe9, - 0x3e, 0xcf, 0x9f, 0x71, 0xda, 0x14, 0x53, 0x61, 0x8a, 0x3e, 0xec, 0xce, - 0xc3, 0x84, 0xc1, 0x0b, 0xfa, 0x4b, 0x8c, 0x21, 0x95, 0x99, 0x86, 0x36, - 0x5c, 0x21, 0xde, 0x39, 0xee, 0xe7, 0x46, 0x33, 0x1c, 0x64, 0x2e, 0x6d, - 0x32, 0x2c, 0xd3, 0xcf, 0x06, 0xa8, 0x91, 0x3d, 0xd2, 0x92, 0x97, 0x7b, - 0x8c, 0x23, 0x56, 0x05, 0x9b, 0x4b, 0xc9, 0x6f, 0x43, 0xa8, 0x9d, 0xba, - 0xbb, 0x90, 0x73, 0x4b, 0x8e, 0x1e, 0xa3, 0x0f, 0x9c, 0x8c, 0x81, 0xf8, - 0xb2, 0xda, 0x41, 0x47, 0x7b, 0x9e, 0x0f, 0x8a, 0xea, 0x48, 0x00, 0xa2, - 0x4a, 0x93, 0xf9, 0x3d, 0x04, 0xcd, 0xa9, 0xf8, 0x95, 0xb9, 0x45, 0x64, - 0x28, 0xb3, 0x27, 0x30, 0xfc, 0x59, 0x4e, 0xbc, 0x19, 0xe9, 0x68, 0x41, - 0x35, 0x65, 0xc9, 0xaf, 0x07, 0x57, 0xf9, 0x26, 0x88, 0x96, 0x4f, 0xa1, - 0xb3, 0xff, 0x5c, 0x0e, 0xb5, 0xc9, 0x1a, 0x66, 0x07, 0x19, 0x4c, 0x59, - 0x11, 0xf7, 0xa5, 0xcb, 0x76, 0x7d, 0x75, 0x20, 0x8d, 0xa2, 0x31, 0x56, - 0x8e, 0xae, 0x75, 0xba, 0x3f, 0x57, 0x19, 0x33, 0xa6, 0xbc, 0x15, 0x19, - 0x7f, 0x2e, 0x8c, 0xf1, 0x1d, 0xee, 0x0b, 0x66, 0xa9, 0x1a, 0xe3, 0x65, - 0xa9, 0xc5, 0xda, 0xbb, 0x8a, 0xe5, 0x8a, 0xe6, 0xae, 0x51, 0x73, 0xed, - 0x48, 0xaf, 0x22, 0x73, 0xd9, 0xd8, 0x9b, 0x74, 0x8b, 0xfe, 0xdb, 0xb2, - 0x06, 0xf6, 0x45, 0x80, 0xcc, 0x59, 0xce, 0x0c, 0x40, 0xb6, 0xfd, 0x38, - 0x65, 0x79, 0x4b, 0x5e, 0xb9, 0x99, 0x78, 0x37, 0x49, 0xb9, 0x4f, 0x82, - 0xef, 0x6d, 0xdf, 0xb7, 0xe1, 0xd6, 0xca, 0xe8, 0x77, 0x96, 0xb1, 0x83, - 0x4c, 0x3d, 0xc6, 0x5a, 0xb9, 0xa3, 0xb5, 0xf1, 0x3e, 0x18, 0xc5, 0xbc, - 0x8f, 0xac, 0xbf, 0xb5, 0x01, 0xbf, 0x00, 0x11, 0x45, 0x26, 0xf6, 0x39, - 0x07, 0x2e, 0xee, 0x1d, 0x5f, 0xc9, 0x8d, 0xc5, 0xc6, 0xeb, 0x84, 0x9b, - 0x0a, 0xd1, 0x0f, 0xb7, 0xbe, 0x00, 0x52, 0xd1, 0xc8, 0xdb, 0xc7, 0x5c, - 0xee, 0xb3, 0xca, 0x39, 0x69, 0xe4, 0x69, 0x29, 0xe0, 0x8d, 0x47, 0x71, - 0x9d, 0xd5, 0x98, 0x5f, 0x1b, 0xa2, 0xa7, 0xce, 0xf0, 0xfd, 0x44, 0x52, - 0x68, 0xee, 0x83, 0x5b, 0xfa, 0xab, 0xa9, 0x94, 0x33, 0x82, 0x39, 0x12, - 0xe5, 0xa4, 0x1b, 0x02, 0x1e, 0xb7, 0x07, 0x04, 0x6b, 0xa0, 0x3d, 0xb6, - 0x55, 0x19, 0xe8, 0x4d, 0x4a, 0x70, 0x6b, 0x7b, 0x4d, 0x22, 0x05, 0xfa, - 0xff, 0x88, 0x4f, 0xac, 0x41, 0xa7, 0xf2, 0x9d, 0x32, 0x93, 0x90, 0x6c, - 0x8f, 0x95, 0xc1, 0x19, 0xfa, 0xdb, 0x5d, 0xde, 0x07, 0x5d, 0x54, 0x37, - 0x7d, 0x8d, 0xa2, 0x80, 0xc2, 0x01, 0xf0, 0xf5, 0x65, 0x2a, 0xf8, 0x6c, - 0x25, 0x5d, 0xae, 0x9f, 0xc7, 0x99, 0x63, 0x55, 0x85, 0x46, 0x12, 0x61, - 0x85, 0xcb, 0x92, 0x6b, 0xba, 0xb0, 0xfe, 0x54, 0xc2, 0xae, 0x6c, 0xfa, - 0x4d, 0x10, 0x0b, 0xdd, 0xff, 0x31, 0x30, 0x26, 0x79, 0x94, 0xa6, 0xd2, - 0xb8, 0xa2, 0x78, 0xed, 0x8f, 0x77, 0xbe, 0x9c, 0xcf, 0xbf, 0x5a, 0xe0, - 0xf5, 0xda, 0x3b, 0x0b, 0x3b, 0xd1, 0x6e, 0x05, 0x21, 0xad, 0x23, 0xe7, - 0x62, 0x51, 0xdd, 0x17, 0xda, 0x5c, 0x35, 0x22, 0x5d, 0xfc, 0x2c, 0x40, - 0x48, 0x14, 0xa2, 0x2f, 0x47, 0x76, 0xbc, 0x5b, 0x6e, 0x39, 0xd7, 0x2d, - 0xcc, 0x50, 0xba, 0x51, 0x85, 0x48, 0x7b, 0x5f, 0x5d, 0xb4, 0xa3, 0x78, - 0xb4, 0xe8, 0x3c, 0x66, 0xa6, 0x94, 0x3b, 0x76, 0x9d, 0x3f, 0x7a, 0x8e, - 0x4b, 0xb3, 0x43, 0x93, 0x94, 0x6f, 0xb8, 0x51, 0x49, 0x9e, 0x77, 0xf3, - 0xc4, 0xc9, 0x16, 0x6a, 0x4b, 0xd4, 0xa2, 0xb2, 0x8e, 0x60, 0xfe, 0xaf, - 0x23, 0x7a, 0xdf, 0x26, 0x6f, 0x87, 0xc8, 0x8a, 0x81, 0x11, 0xe7, 0xc2, - 0x24, 0x24, 0x47, 0x85, 0x5b, 0xc1, 0x93, 0x58, 0x8d, 0xf9, 0x60, 0x78, - 0x8a, 0xc8, 0x94, 0x78, 0xbc, 0xe1, 0x8c, 0xf7, 0xbc, 0xe0, 0xa4, 0x41, - 0x5e, 0x33, 0x34, 0x1b, 0x3b, 0xf1, 0x1f, 0x98, 0x24, 0xce, 0xe5, 0xe0, - 0x4f, 0x22, 0x2a, 0x9b, 0x1d, 0x05, 0xc6, 0xbf, 0x3f, 0x7e, 0x3f, 0x15, - 0x15, 0xce, 0x1b, 0x85, 0x8b, 0x73, 0x2c, 0x85, 0x20, 0xd3, 0x2e, 0x22, - 0x62, 0x4b, 0x8c, 0x51, 0x8b, 0xd9, 0x44, 0x1a, 0x01, 0x02, 0xf0, 0xa6, - 0x56, 0x87, 0x21, 0xfc, 0x0a, 0xa8, 0xa6, 0x8f, 0x4e, 0xf2, 0xd3, 0xd5, - 0x8e, 0x94, 0xdf, 0x3a, 0xe6, 0x54, 0x30, 0x90, 0xe3, 0xcd, 0x26, 0xde, - 0x3d, 0x2e, 0x6c, 0x30, 0xa3, 0x54, 0x5d, 0x02, 0x5a, 0x51, 0xff, 0xa8, - 0x93, 0x1e, 0x03, 0x15, 0x85, 0x5e, 0xda, 0x52, 0x39, 0x91, 0x61, 0x21, - 0xdd, 0x2d, 0xb5, 0x63, 0x80, 0xdd, 0x13, 0x5e, 0x15, 0x44, 0x69, 0xae, - 0x61, 0xa1, 0xb8, 0x7d, 0xb5, 0xa9, 0x22, 0xe6, 0xf7, 0xce, 0xa3, 0x0c, - 0xff, 0xcb, 0xef, 0x05, 0xff, 0xbd, 0xf5, 0xe6, 0xc5, 0x56, 0xa4, 0x8e, - 0x2c, 0x5f, 0xab, 0x46, 0x6e, 0xb5, 0xe5, 0x5c, 0x86, 0xa3, 0x70, 0x69, - 0x01, 0xb5, 0x6d, 0x44, 0x19, 0x44, 0x98, 0xa8, 0x8d, 0x1c, 0xb9, 0x8c, - 0xd3, 0x1b, 0x0b, 0xe6, 0x28, 0x36, 0xfd, 0x4e, 0x14, 0x67, 0x3c, 0xb8, - 0x0a, 0x17, 0xee, 0xb2, 0x6c, 0x01, 0x5d, 0x58, 0xf0, 0x6a, 0x8f, 0x19, - 0x90, 0x0b, 0xdf, 0xd5, 0xa9, 0xef, 0xb7, 0x69, 0xd2, 0x37, 0x1e, 0xdd, - 0x6b, 0xa6, 0xc0, 0x16, 0xa9, 0x4d, 0xb6, 0xf0, 0x5f, 0xf2, 0x39, 0x76, - 0x20, 0x99, 0x5d, 0x9e, 0x43, 0x84, 0xc4, 0x8e, 0x3b, 0xb9, 0xc4, 0xf8, - 0x62, 0x88, 0x3c, 0xd3, 0x60, 0x66, 0xd8, 0xbd, 0x1f, 0xc5, 0x01, 0x90, - 0xa0, 0x8e, 0x3a, 0xbd, 0x05, 0x03, 0x63, 0x45, 0x5d, 0xc8, 0x2e, 0xb2, - 0xa5, 0x56, 0xb4, 0xe1, 0x84, 0x0c, 0xcc, 0xff, 0x8e, 0xbb, 0xb7, 0x99, - 0x6e, 0x15, 0x93, 0x33, 0xca, 0xe8, 0x1e, 0x66, 0x96, 0x04, 0x98, 0x33, - 0x20, 0x47, 0x3b, 0xe6, 0x35, 0xdb, 0x69, 0xb7, 0x2a, 0x54, 0x03, 0xe4, - 0x66, 0xde, 0x97, 0x4e, 0x95, 0xbe, 0xbe, 0x1d, 0xd3, 0xe3, 0x7f, 0x75, - 0x76, 0xdd, 0xae, 0xfd, 0xbc, 0x7b, 0xa8, 0xcf, 0xf9, 0xb8, 0x04, 0x0c, - 0xdb, 0x81, 0xaa, 0x7a, 0xa3, 0xa0, 0xff, 0xda, 0xeb, 0x8d, 0x88, 0x29, - 0x9d, 0x77, 0xe0, 0x61, 0x8a, 0x6e, 0x84, 0xca, 0x76, 0xd4, 0x0a, 0x7a, - 0x80, 0xdf, 0xaa, 0x56, 0x96, 0x38, 0x26, 0x4f, 0x23, 0x6f, 0xd7, 0x02, - 0xd8, 0xa9, 0xd6, 0xad, 0x37, 0x4c, 0x43, 0x8e, 0xad, 0x72, 0x89, 0xfe, - 0x44, 0x5a, 0xb7, 0x5d, 0xf7, 0xdf, 0x8f, 0xfd, 0x79, 0x2c, 0xa9, 0xb6, - 0xa4, 0xba, 0xda, 0x8a, 0xa1, 0xa5, 0xb9, 0xe2, 0x0f, 0x28, 0xf2, 0xa9, - 0xef, 0x85, 0xbd, 0xce, 0xd8, 0x66, 0x6a, 0xb8, 0x6c, 0xe6, 0x38, 0x5b, - 0xbd, 0x15, 0xf2, 0x6b, 0x2f, 0xcb, 0xbf, 0xee, 0xe5, 0xc7, 0xf0, 0xf4, - 0x8b, 0xca, 0xbc, 0xdd, 0x58, 0xd2, 0x06, 0xaa, 0x0c, 0x9c, 0x42, 0x9b, - 0xf9, 0x05, 0x0e, 0xf0, 0xad, 0x28, 0xe8, 0x53, 0x27, 0x0e, 0xb5, 0x00, - 0x06, 0xc3, 0x50, 0x78, 0x55, 0x93, 0x91, 0x70, 0xb9, 0x20, 0xea, 0x1f, - 0xbb, 0xdc, 0xa4, 0x9b, 0xd0, 0x7a, 0xd6, 0xcd, 0xd7, 0x45, 0x83, 0x41, - 0xa1, 0x78, 0xef, 0xa0, 0x2c, 0xc2, 0x2d, 0x18, 0x6f, 0x72, 0x5e, 0x56, - 0x36, 0xd5, 0x94, 0x41, 0x6e, 0x2e, 0xe4, 0x96, 0xe1, 0xe4, 0xb9, 0xf9, - 0xf5, 0x52, 0x1b, 0xd9, 0xf3, 0x82, 0x00, 0x38, 0x91, 0xf8, 0x37, 0xe4, - 0x32, 0xb8, 0x02, 0xc3, 0x30, 0x78, 0xf6, 0x24, 0x35, 0xef, 0x31, 0x98, - 0x8b, 0x58, 0x8d, 0xf0, 0x42, 0xab, 0x47, 0xc2, 0xe1, 0x20, 0x1b, 0x14, - 0x19, 0x51, 0x7d, 0xb7, 0xb9, 0x97, 0x31, 0x00, 0xb8, 0x84, 0x59, 0xdd, - 0xb2, 0x97, 0xfe, 0x2e, 0x84, 0x30, 0x6d, 0xe9, 0x0d, 0x43, 0xca, 0x04, - 0x40, 0x6b, 0x08, 0x57, 0xa2, 0xdb, 0xc6, 0xc6, 0x00, 0xa0, 0xa9, 0x86, - 0x5b, 0x2d, 0xad, 0x89, 0xbf, 0xdc, 0x9d, 0xec, 0x1f, 0x13, 0xea, 0x78, - 0xde, 0xb5, 0x20, 0xe4, 0x4d, 0x74, 0xde, 0xa7, 0xaa, 0xa9, 0xc6, 0x78, - 0x43, 0xcb, 0xe0, 0x44, 0x4c, 0x12, 0x3c, 0x7d, 0x2b, 0xd7, 0x94, 0xc0, - 0x05, 0xa8, 0x97, 0xbc, 0xda, 0x83, 0x85, 0xc5, 0x1a, 0xe6, 0xd2, 0x68, - 0xdf, 0xfa, 0xb0, 0x5d, 0x63, 0x3b, 0x73, 0xcb, 0xfc, 0x75, 0xb3, 0xbd, - 0xe8, 0x60, 0xb8, 0xc4, 0x99, 0xd6, 0xea, 0xf6, 0x21, 0x6e, 0x14, 0xd3, - 0x4a, 0x6b, 0x78, 0xb2, 0xd3, 0x1e, 0xa8, 0x5f, 0x88, 0x7d, 0xfd, 0x70, - 0x3a, 0x57, 0x17, 0x23, 0xf1, 0x3f, 0x5f, 0xa9, 0xee, 0x1f, 0x52, 0xdb, - 0x92, 0x3f, 0xea, 0xf0, 0x97, 0x96, 0x56, 0x77, 0x33, 0xd0, 0x57, 0xe5, - 0xa7, 0xb3, 0xf8, 0xa2, 0x59, 0xe9, 0x08, 0xb9, 0x56, 0xdc, 0x07, 0xdc, - 0x9f, 0xff, 0x8e, 0x97, 0x57, 0xe9, 0x92, 0xec, 0xff, 0xdd, 0x72, 0xd6, - 0x55, 0x94, 0xa7, 0xf8, 0xb8, 0x1d, 0x55, 0xf2, 0xf9, 0xda, 0xa3, 0xd4, - 0x27, 0x99, 0xb4, 0x65, 0x5d, 0xe7, 0xa7, 0x86, 0x46, 0xe0, 0x39, 0x20, - 0xe4, 0x5d, 0xeb, 0x4d, 0x5f, 0xbe, 0x9f, 0x66, 0x6f, 0xdd, 0xab, 0xbd, - 0x16, 0xd2, 0x3d, 0x9e, 0xc2, 0x57, 0x68, 0x6b, 0x0a, 0x09, 0xc5, 0xac, - 0x5f, 0x3e, 0x59, 0x6e, 0x68, 0xf6, 0x10, 0x22, 0x9c, 0x02, 0x18, 0x0a, - 0x6c, 0xb6, 0x77, 0xa6, 0x77, 0x41, 0x9c, 0x4c, 0x60, 0xde, 0xec, 0xdd, - 0x15, 0xc1, 0x21, 0x02, 0xde, 0x8c, 0x3a, 0x49, 0x5b, 0xf0, 0xc3, 0xc8, - 0x1e, 0x01, 0x27, 0xf5, 0xc0, 0x22, 0x35, 0x3e, 0x86, 0x95, 0x33, 0xbb, - 0xb8, 0x5d, 0x46, 0x96, 0x93, 0xcb, 0x8c, 0x3c, 0xf4, 0xfc, 0x02, 0x7f, - 0x59, 0x79, 0x81, 0xf6, 0x3e, 0x55, 0x44, 0x16, 0xb7, 0xb1, 0x7a, 0xa8, - 0x08, 0x2b, 0x97, 0xfc, 0xef, 0x26, 0x09, 0x51, 0xf0, 0x77, 0x0d, 0x93, - 0xea, 0x19, 0xff, 0x55, 0x6d, 0x7a, 0x25, 0x35, 0xfd, 0x3c, 0x3b, 0xc4, - 0xac, 0x55, 0xf3, 0xbd, 0x99, 0xb0, 0xbf, 0x01, 0xac, 0x34, 0xb3, 0xad, - 0x9d, 0xcf, 0xa5, 0x15, 0x3d, 0x14, 0xf5, 0x31, 0xbb, 0x8c, 0xa3, 0xa4, - 0x86, 0xe1, 0xbb, 0x14, 0x2a, 0xda, 0x4b, 0x57, 0x45, 0x74, 0xbf, 0x51, - 0xfe, 0xe3, 0xa4, 0xff, 0xb8, 0xab, 0xcb, 0xbc, 0x56, 0x61, 0x3c, 0x11, - 0xf5, 0x15, 0xb1, 0xa0, 0xb0, 0x40, 0xf1, 0x88, 0xbc, 0x53, 0xe2, 0x6a, - 0x4d, 0x67, 0xbb, 0x6d, 0x22, 0xc5, 0x32, 0xcd, 0xd2, 0xad, 0xba, 0x88, - 0x3c, 0x7a, 0x22, 0xcb, 0x0b, 0xbf, 0xfd, 0xe7, 0xb4, 0xe9, 0xd8, 0x95, - 0xbb, 0xfc, 0xef, 0x23, 0xa3, 0x57, 0xa4, 0x5c, 0x78, 0xc6, 0xd2, 0x17, - 0x39, 0x46, 0x20, 0x0a, 0xe0, 0xa3, 0xcc, 0x0f, 0x57, 0x4d, 0xa1, 0xa9, - 0xd6, 0x4c, 0x92, 0x84, 0xb8, 0x7f, 0xf5, 0x74, 0xb5, 0xe1, 0x56, 0xb2, - 0xe4, 0x7a, 0xc0, 0xe1, 0x8f, 0xf2, 0x60, 0x95, 0x4e, 0x88, 0xb3, 0x93, - 0x35, 0xd0, 0x24, 0x21, 0x01, 0xcd, 0x11, 0xfa, 0xee, 0x24, 0x2b, 0x1d, - 0xe4, 0x63, 0x6f, 0x26, 0x2a, 0x87, 0xa0, 0x72, 0x86, 0x43, 0x9f, 0x52, - 0x32, 0xee, 0x9d, 0xf6, 0x37, 0x0b, 0xec, 0x80, 0xb9, 0xc4, 0xc4, 0x02, - 0x98, 0x0c, 0xb2, 0x79, 0x66, 0xc1, 0xf6, 0x70, 0x0e, 0xf4, 0x41, 0x9b, - 0x3d, 0xe9, 0x94, 0xb9, 0xda, 0x75, 0x01, 0x78, 0x31, 0x77, 0xfc, 0xf9, - 0x7a, 0x18, 0xba, 0xc8, 0xac, 0x0b, 0xb0, 0xee, 0xf8, 0x77, 0xa5, 0x33, - 0xc2, 0xaf, 0xa0, 0x39, 0xa8, 0x96, 0xc4, 0x1f, 0x40, 0x31, 0x04, 0x5b, - 0x0f, 0x9b, 0x2b, 0x96, 0xf2, 0x82, 0x0d, 0xf9, 0x4f, 0x8e, 0xcc, 0xeb, - 0x27, 0xac, 0x68, 0x84, 0xba, 0x34, 0x0b, 0xd8, 0x9a, 0xe7, 0x35, 0x6c, - 0x19, 0xb5, 0x49, 0xd0, 0x2a, 0xf8, 0x44, 0xa6, 0xdd, 0x80, 0x75, 0xc9, - 0x56, 0xaf, 0xd2, 0x28, 0x41, 0x58, 0x0e, 0x76, 0xdc, 0x42, 0xd2, 0x77, - 0x0c, 0x15, 0x00, 0x04, 0x24, 0x7f, 0x7a, 0x13, 0x53, 0x42, 0xaa, 0x93, - 0x32, 0x9a, 0x7c, 0xc9, 0x44, 0x7b, 0x85, 0xa9, 0xff, 0x2a, 0xe8, 0x86, - 0x51, 0xc0, 0x06, 0xa4, 0xc9, 0xff, 0x1e, 0x05, 0xc0, 0x13, 0x8b, 0xf8, - 0x9a, 0xfc, 0xea, 0xba, 0xdf, 0x82, 0x56, 0x41, 0x96, 0x6f, 0x67, 0x7e, - 0x7c, 0xe1, 0x4e, 0xae, 0xa6, 0x83, 0x52, 0x36, 0x7e, 0x9e, 0xf4, 0xfd, - 0xe0, 0xcf, 0x0c, 0xbb, 0x52, 0x55, 0xc2, 0xc8, 0xd7, 0x39, 0x71, 0xff, - 0x17, 0x45, 0x77, 0xaa, 0xd2, 0x1a, 0xfe, 0x66, 0x88, 0xc0, 0xf1, 0xcd, - 0x2d, 0xe5, 0xe2, 0x19, 0x20, 0x20, 0x47, 0x4b, 0x87, 0x8f, 0x68, 0xce, - 0x31, 0x74, 0x63, 0x5e, 0xce, 0x08, 0x09, 0x28, 0x35, 0xc4, 0x1e, 0x87, - 0xc2, 0xc5, 0x6c, 0xaf, 0x69, 0x9e, 0xb3, 0x6f, 0xf0, 0x98, 0x2b, 0x34, - 0xf2, 0xe2, 0xbc, 0x0e, 0xc4, 0xa2, 0xdd, 0x28, 0xb7, 0x9d, 0xf1, 0xa9, - 0xc7, 0x64, 0x84, 0x58, 0x0e, 0xa5, 0x32, 0x1f, 0xab, 0x44, 0xfd, 0xf3, - 0xe8, 0x2e, 0xf5, 0x35, 0x96, 0xdf, 0x5d, 0xc8, 0x46, 0xa2, 0xdd, 0x20, - 0xa6, 0x8b, 0x24, 0x0e, 0xa7, 0x74, 0x49, 0x4c, 0xb6, 0x36, 0x4b, 0xf1, - 0xea, 0x7c, 0xf3, 0x10, 0x2a, 0xde, 0xe3, 0x9b, 0x27, 0xf1, 0x6c, 0x83, - 0x74, 0xc2, 0xb4, 0xb1, 0xec, 0xfa, 0x4c, 0x75, 0x41, 0x5b, 0x64, 0x3d, - 0x1e, 0x1e, 0xbc, 0xc5, 0x25, 0x0f, 0x72, 0x9c, 0x11, 0x13, 0xe7, 0xa2, - 0x44, 0x23, 0x86, 0xc8, 0x32, 0xe0, 0x6b, 0x53, 0xdd, 0xcd, 0x30, 0xb7, - 0xc1, 0xd1, 0x10, 0xe8, 0xe0, 0x60, 0xcb, 0x1e, 0x24, 0xab, 0xeb, 0x97, - 0x4b, 0x51, 0xa5, 0x3a, 0x8b, 0x76, 0x2c, 0x8a, 0xec, 0x35, 0xb4, 0xf8, - 0x1d, 0x9c, 0x51, 0x40, 0xc7, 0x0e, 0x74, 0x21, 0x73, 0xd8, 0x6f, 0xc5, - 0x89, 0x15, 0xd0, 0x32, 0x9b, 0xfb, 0x5b, 0xe8, 0xc7, 0xc9, 0x6e, 0x61, - 0x1c, 0x6e, 0x3e, 0xb6, 0xc3, 0xcd, 0x02, 0xda, 0x5c, 0x36, 0xe2, 0x0e, - 0xa0, 0xd3, 0xd6, 0x1c, 0x95, 0x1f, 0x73, 0xec, 0xdb, 0x07, 0x11, 0x97, - 0x73, 0x1e, 0xf9, 0xa9, 0x17, 0x75, 0x19, 0x43, 0x43, 0x4b, 0x7e, 0x5d, - 0xf7, 0x22, 0xa8, 0xf8, 0xb4, 0x62, 0xe8, 0x9f, 0x69, 0x61, 0x50, 0xf6, - 0x40, 0x22, 0x95, 0x4b, 0x11, 0x57, 0x25, 0x7b, 0xd7, 0x53, 0x10, 0x92, - 0xc2, 0x37, 0x9f, 0xd6, 0x4c, 0x03, 0x65, 0x0a, 0x42, 0x6b, 0x4d, 0x05, - 0x92, 0xa9, 0xba, 0x3e, 0x3b, 0xac, 0xd0, 0x67, 0x71, 0xe6, 0xf1, 0xb0, - 0x35, 0x6b, 0x30, 0x7f, 0xe3, 0x90, 0xe8, 0x1f, 0x3d, 0x17, 0x1d, 0xef, - 0xc7, 0xac, 0x2b, 0x3c, 0x73, 0x36, 0x74, 0x69, 0x7b, 0x11, 0x4a, 0xcd, - 0xdb, 0x12, 0x63, 0x3e, 0xe6, 0x3d, 0xa5, 0x13, 0x05, 0x93, 0xf8, 0x91, - 0x15, 0x6c, 0xbb, 0xd2, 0x61, 0x30, 0x0d, 0x0d, 0x79, 0x0a, 0x1a, 0x71, - 0xae, 0xf2, 0x4a, 0x83, 0xb2, 0x4e, 0xb5, 0x83, 0xab, 0xb7, 0x3d, 0xce, - 0xd0, 0xa7, 0x43, 0x1c, 0x67, 0x5c, 0x14, 0xd1, 0x31, 0x7f, 0xb2, 0x31, - 0x8f, 0xb3, 0xe5, 0x2c, 0x1b, 0x52, 0xf6, 0xac, 0xc8, 0xb2, 0x84, 0x4b, - 0xe2, 0x6f, 0x01, 0xb7, 0x96, 0x5f, 0xd9, 0xa3, 0xf4, 0x11, 0xdf, 0xb6, - 0x7e, 0xd9, 0xb7, 0x10, 0x9a, 0xf6, 0x04, 0x0d, 0x7f, 0x18, 0x82, 0x56, - 0xa6, 0x24, 0xa4, 0xfb, 0x26, 0xff, 0xa3, 0x39, 0xd1, 0xbd, 0xc9, 0x0a, - 0x6d, 0x1d, 0x9e, 0x1d, 0x2c, 0x75, 0xa2, 0x37, 0x92, 0x5e, 0x68, 0xb9, - 0x80, 0x4d, 0x9f, 0xc0, 0x3c, 0x86, 0xc9, 0xed, 0x46, 0xaf, 0xd4, 0x41, - 0xe2, 0xb4, 0xdf, 0x50, 0x94, 0x4f, 0x7a, 0xf2, 0xf9, 0x66, 0xf1, 0x76, - 0xca, 0xc9, 0x28, 0xf1, 0xb0, 0x8d, 0x8b, 0x90, 0xce, 0x8b, 0x91, 0xda, - 0xe2, 0x88, 0x53, 0xd6, 0x5a, 0x44, 0x5b, 0x49, 0x67, 0x21, 0x9a, 0x86, - 0xf3, 0x8f, 0xdf, 0xe2, 0xdf, 0x79, 0x88, 0xde, 0xc7, 0x53, 0x5a, 0x31, - 0x53, 0x7b, 0x0d, 0x54, 0x9b, 0x21, 0xc1, 0xc0, 0x49, 0xd0, 0x4b, 0xc8, - 0x14, 0x05, 0x95, 0xb5, 0x1e, 0xd7, 0xe4, 0xf7, 0xaf, 0x1c, 0x16, 0x08, - 0x08, 0xab, 0xce, 0x84, 0xb1, 0x9f, 0xcc, 0x6f, 0xef, 0x5f, 0x30, 0x70, - 0x84, 0x6c, 0xfd, 0xe1, 0xa7, 0x1c, 0xae, 0x99, 0x00, 0x15, 0xe7, 0x0f, - 0x5f, 0x9a, 0x08, 0x51, 0x5e, 0x02, 0xc6, 0xde, 0xd4, 0x4b, 0xe0, 0xf4, - 0xf8, 0x3c, 0x89, 0x71, 0x7a, 0x9f, 0x23, 0x16, 0x86, 0xd5, 0xe7, 0x5c, - 0x9d, 0xde, 0x98, 0xdd, 0x5c, 0x54, 0x94, 0x96, 0x18, 0x05, 0x96, 0xa0, - 0x1d, 0x34, 0x13, 0xef, 0xc6, 0x92, 0x48, 0x7a, 0x79, 0x85, 0xe1, 0x32, - 0xf8, 0x84, 0xc1, 0xca, 0x3e, 0xad, 0x6b, 0xf6, 0x45, 0x89, 0x3f, 0x4d, - 0x25, 0xf9, 0x24, 0x03, 0xad, 0x85, 0xac, 0x75, 0x47, 0x44, 0xff, 0x33, - 0x24, 0xcd, 0x01, 0xcc, 0xe4, 0xd3, 0x08, 0xde, 0x68, 0x56, 0xa2, 0x0e, - 0x22, 0xab, 0x83, 0xe8, 0x03, 0x0e, 0x5e, 0xee, 0xb9, 0x2e, 0x24, 0x2f, - 0x55, 0xa1, 0x1f, 0x83, 0xb0, 0x4a, 0x4c, 0xaf, 0x4b, 0x2c, 0x71, 0x0c, - 0x2c, 0x84, 0xac, 0xa2, 0xa0, 0xfc, 0x83, 0x6f, 0x24, 0xa8, 0x04, 0x72, - 0xf0, 0x6b, 0xb8, 0x84, 0xfa, 0x82, 0x2c, 0x29, 0x9b, 0xd6, 0xbb, 0x47, - 0x2c, 0x19, 0x74, 0x82, 0x01, 0x4b, 0x3e, 0x7b, 0x32, 0x7a, 0xb6, 0x6f, - 0x2d, 0x58, 0x16, 0xd0, 0x45, 0x3e, 0x98, 0xce, 0x86, 0x9d, 0x25, 0xab, - 0x42, 0x94, 0x43, 0x91, 0x73, 0xef, 0x4d, 0x75, 0xf3, 0x36, 0x8a, 0x8f, - 0xcc, 0xa7, 0x19, 0xe0, 0x5c, 0x25, 0xda, 0x91, 0x1c, 0x59, 0x84, 0x65, - 0x28, 0xc2, 0x01, 0xd1, 0xaa, 0x79, 0x1f, 0x00, 0x6e, 0x21, 0x11, 0x73, - 0x95, 0xbe, 0xcd, 0x72, 0x38, 0xf0, 0xc2, 0xf9, 0xbf, 0x0f, 0xbb, 0x1e, - 0x05, 0x9e, 0x00, 0x9c, 0x4d, 0x4b, 0xcf, 0x36, 0xc2, 0x9b, 0xcd, 0xa0, - 0xb7, 0x4b, 0x88, 0x15, 0x76, 0x18, 0xcc, 0x76, 0xe7, 0x11, 0x27, 0x04, - 0xea, 0x43, 0x92, 0xd6, 0xe6, 0x7d, 0x11, 0xb3, 0x21, 0x3d, 0xff, 0xea, - 0x7d, 0x22, 0x22, 0x6c, 0x18, 0x96, 0x54, 0x35, 0x80, 0xd1, 0x0c, 0x29, - 0x72, 0x96, 0x8e, 0x26, 0xe0, 0x12, 0x5f, 0xc1, 0x06, 0x1e, 0xaf, 0xf1, - 0x42, 0x1f, 0x09, 0xad, 0x3d, 0x09, 0x06, 0x1b, 0x28, 0x3e, 0xaa, 0x27, - 0x21, 0xf6, 0x20, 0x78, 0x9c, 0x69, 0x92, 0x1f, 0x78, 0x75, 0x1d, 0x66, - 0x89, 0x25, 0x22, 0x35, 0x5f, 0x05, 0xf6, 0xb2, 0x98, 0xa0, 0xd1, 0xd8, - 0x4b, 0xa8, 0x98, 0x29, 0x90, 0x97, 0x1f, 0xfc, 0xc3, 0xd6, 0xb9, 0x5d, - 0x8f, 0xa2, 0x87, 0xcc, 0xfe, 0x80, 0xcf, 0x67, 0xe7, 0x12, 0xae, 0xd6, - 0x57, 0x0d, 0x59, 0xfe, 0xaf, 0x8d, 0x40, 0x04, 0x1a, 0xcb, 0x1d, 0x01, - 0x48, 0x83, 0xfa, 0x0d, 0xbe, 0xc5, 0xc4, 0xcf, 0xb3, 0xf2, 0x7e, 0x7b, - 0x18, 0x0d, 0x7c, 0x8c, 0x2e, 0xbe, 0x54, 0xe4, 0x02, 0x32, 0x0d, 0x0f, - 0x9c, 0x34, 0xb0, 0xff, 0x5d, 0x6b, 0x75, 0x52, 0xa7, 0x58, 0xcc, 0x96, - 0x29, 0x11, 0x13, 0x2e, 0x97, 0x74, 0x4e, 0x7e, 0x52, 0xe7, 0x5d, 0x8c, - 0xf9, 0x6a, 0x52, 0xef, 0xbc, 0x7d, 0x41, 0x28, 0xef, 0x2c, 0x09, 0xf3, - 0xb6, 0x51, 0xcd, 0xcc, 0x6b, 0x41, 0x1e, 0x0b, 0x91, 0xda, 0xbd, 0x08, - 0x7f, 0x82, 0x59, 0x01, 0xfc, 0x1d, 0xe9, 0xb1, 0x6d, 0xbb, 0x5d, 0x90, - 0xa1, 0x60, 0xde, 0xa7, 0xd5, 0x9d, 0x9e, 0x8f, 0x24, 0xd7, 0x07, 0x0d, - 0xbc, 0xb4, 0x09, 0xfd, 0x40, 0xdd, 0x9f, 0x5f, 0xd3, 0xb8, 0x64, 0xb1, - 0x9a, 0x36, 0xe5, 0xc5, 0x2d, 0x8f, 0x96, 0xf3, 0x1e, 0xdc, 0x14, 0x17, - 0xa4, 0x79, 0x23, 0xe5, 0x38, 0xae, 0x1f, 0x4f, 0xa5, 0x77, 0xa9, 0x2b, - 0x85, 0x8d, 0x64, 0x1b, 0x65, 0x9b, 0x47, 0x3b, 0xb4, 0x65, 0xf8, 0x18, - 0xac, 0xab, 0xd3, 0x7c, 0x02, 0x8b, 0x77, 0x4d, 0x1e, 0x19, 0xcb, 0x28, - 0xb3, 0x2d, 0xd6, 0x9f, 0x5c, 0x54, 0xda, 0xb0, 0x69, 0xec, 0x90, 0x55, - 0x65, 0x93, 0x91, 0x4f, 0x00, 0xf2, 0x98, 0x66, 0xa6, 0x38, 0x8f, 0x9f, - 0xb7, 0x6a, 0xaf, 0x99, 0x88, 0x90, 0x14, 0xee, 0xef, 0x1f, 0x20, 0x45, - 0x68, 0xf3, 0x46, 0x00, 0x32, 0x8e, 0x0f, 0xc4, 0x7f, 0xee, 0xd8, 0x3d, - 0x09, 0xd5, 0x3e, 0xbd, 0xc4, 0xa0, 0x5b, 0x63, 0x39, 0x56, 0x8f, 0x6b, - 0x69, 0xe8, 0xbf, 0x6b, 0x59, 0xc3, 0x4f, 0xda, 0x52, 0x63, 0x86, 0xf2, - 0x5b, 0x4f, 0xea, 0x03, 0xdf, 0xd6, 0x53, 0x3f, 0x08, 0x4f, 0xe4, 0xd6, - 0xcc, 0x24, 0x26, 0x7e, 0x8e, 0x81, 0x88, 0xdd, 0xfc, 0xbb, 0xb9, 0xef, - 0x21, 0xa4, 0xf1, 0xef, 0xa8, 0x93, 0xd3, 0x09, 0x9e, 0x71, 0x32, 0xdc, - 0x2b, 0x6a, 0x11, 0xac, 0x01, 0xb7, 0xf3, 0x18, 0x25, 0xe3, 0x44, 0x3e, - 0xf8, 0xa5, 0xfd, 0x65, 0xaa, 0xb1, 0xe1, 0x31, 0xaa, 0x06, 0x59, 0x69, - 0xaf, 0x3a, 0x9b, 0x81, 0x1b, 0xdc, 0xdf, 0x1f, 0x71, 0x9a, 0x62, 0x0e, - 0x01, 0xb8, 0xcc, 0xa3, 0x2a, 0x20, 0x3e, 0x56, 0xc8, 0xd0, 0x57, 0x87, - 0xc6, 0x1b, 0x4a, 0xa9, 0x6e, 0x24, 0x74, 0x5d, 0xbd, 0x71, 0xa0, 0x05, - 0xd4, 0x3f, 0xba, 0x7b, 0xc9, 0x3d, 0xa4, 0x78, 0xdd, 0xbc, 0xdf, 0xee, - 0x1c, 0xad, 0x80, 0x40, 0x0e, 0xcb, 0x2d, 0xf7, 0x47, 0xd4, 0x83, 0x29, - 0x78, 0x1e, 0x0a, 0x2a, 0xb0, 0xf6, 0xe8, 0x85, 0x61, 0x72, 0x52, 0xe3, - 0x87, 0x15, 0xcf, 0xa5, 0xaf, 0x26, 0x97, 0x1a, 0x8b, 0x13, 0xbb, 0x7a, - 0x4e, 0xde, 0xc7, 0x26, 0x8c, 0xe0, 0x1b, 0x34, 0xad, 0x86, 0xc5, 0x97, - 0xef, 0xbd, 0xd3, 0x0b, 0x5a, 0xa0, 0xd9, 0x0b, 0xce, 0xd7, 0x8c, 0x65, - 0xb1, 0xf3, 0x4f, 0xc4, 0x63, 0x15, 0x47, 0x38, 0x6e, 0x9c, 0x8a, 0x84, - 0x30, 0x98, 0x93, 0xe3, 0xb1, 0xb0, 0x46, 0x9b, 0xa5, 0xc7, 0xa8, 0x72, - 0x83, 0xe8, 0xcd, 0x25, 0x1f, 0x41, 0xcc, 0xaa, 0x75, 0x0e, 0x3d, 0xc4, - 0x43, 0xbf, 0xb4, 0x32, 0x18, 0x90, 0x48, 0x38, 0x94, 0x7d, 0xae, 0xdb, - 0x5a, 0xb9, 0x39, 0x75, 0x41, 0x62, 0x73, 0xc4, 0x44, 0x26, 0xe6, 0x93, - 0x9c, 0xb4, 0x69, 0xda, 0x0e, 0x81, 0x7a, 0x3a, 0x28, 0x94, 0xea, 0x46, - 0x48, 0x8f, 0x83, 0x27, 0x75, 0x90, 0x19, 0x02, 0x32, 0x93, 0xe1, 0xc0, - 0x18, 0x80, 0x84, 0xa3, 0xd0, 0xf3, 0x8b, 0x4f, 0x27, 0x1e, 0x29, 0x17, - 0xd4, 0xc8, 0x7e, 0x6f, 0xb7, 0xc6, 0x4f, 0xb3, 0x91, 0xd3, 0x44, 0xb5, - 0xa6, 0xa6, 0x52, 0x39, 0x0a, 0x3a, 0xe5, 0xdf, 0xff, 0x4f, 0x15, 0x79, - 0x97, 0x03, 0xe5, 0xfd, 0xd6, 0x80, 0x6d, 0xfc, 0x66, 0x0b, 0x53, 0xde, - 0xdb, 0x4e, 0x85, 0x3b, 0x0e, 0xf8, 0xcb, 0x17, 0xf0, 0x91, 0xc6, 0xb5, - 0xfe, 0x09, 0xd0, 0xb7, 0x37, 0xbd, 0xdf, 0x53, 0x66, 0x90, 0x74, 0xe9, - 0x37, 0x96, 0xde, 0x98, 0x94, 0xf5, 0xc8, 0x94, 0xb5, 0xba, 0x70, 0xfe, - 0x89, 0xa2, 0x1e, 0x49, 0xb3, 0x8c, 0xd8, 0x9f, 0x0b, 0x8e, 0x6e, 0x5d, - 0x22, 0x81, 0x64, 0xe0, 0x33, 0xb8, 0xb0, 0x9b, 0x85, 0x78, 0x6a, 0xbc, - 0x99, 0xb4, 0xdc, 0x19, 0x00, 0x3b, 0x5d, 0x41, 0x54, 0x86, 0x98, 0x44, - 0xd7, 0x3a, 0x8f, 0xf9, 0x16, 0x6e, 0x70, 0x50, 0xc0, 0x01, 0xfe, 0xe1, - 0x08, 0x01, 0x04, 0xbe, 0x55, 0xab, 0xcf, 0x29, 0xa5, 0xb5, 0xfa, 0x90, - 0x2c, 0x98, 0xf0, 0xd7, 0xd5, 0xaa, 0x07, 0xd4, 0x19, 0xf4, 0xd2, 0x7c, - 0xbb, 0xc3, 0x8a, 0x6b, 0x2c, 0x89, 0xf0, 0x10, 0xa6, 0xb6, 0x51, 0xc9, - 0x92, 0x23, 0xa1, 0x22, 0x93, 0x97, 0xce, 0xd2, 0xd5, 0xb6, 0x3e, 0x1b, - 0x4a, 0x80, 0x6f, 0xac, 0x11, 0xca, 0x14, 0x73, 0xb5, 0xcb, 0xd9, 0x50, - 0xe3, 0x42, 0x6e, 0x8e, 0xe3, 0x3a, 0x7c, 0x30, 0x3e, 0x83, 0xec, 0x68, - 0x2c, 0x22, 0x16, 0x07, 0xaa, 0xc1, 0x72, 0xe1, 0xbd, 0x07, 0x58, 0xfe, - 0xc3, 0xbc, 0x9e, 0xf0, 0x74, 0xc6, 0x89, 0x85, 0x9e, 0x85, 0xc4, 0xec, - 0x99, 0xf7, 0x3c, 0xc9, 0x94, 0xdf, 0xb5, 0xc2, 0xf2, 0xb5, 0x6b, 0xa9, - 0x33, 0x0b, 0x01, 0x92, 0xfd, 0x20, 0x35, 0xa0, 0x37, 0x01, 0x85, 0xae, - 0x8d, 0xa1, 0x3e, 0x13, 0x12, 0x65, 0xa8, 0x13, 0xe6, 0x08, 0xfa, 0xbf, - 0x33, 0xf5, 0xc1, 0x6d, 0xf8, 0x33, 0x22, 0x79, 0xcb, 0x40, 0xb4, 0xe5, - 0xfe, 0xfc, 0xbe, 0x39, 0x25, 0xf7, 0x40, 0x96, 0xa7, 0xfd, 0x05, 0x97, - 0x93, 0x82, 0xc1, 0xa4, 0xa8, 0x74, 0xdd, 0xbb, 0xb4, 0x6d, 0x8a, 0x21, - 0xc9, 0xe8, 0x7e, 0x4b, 0x2c, 0x46, 0x06, 0x49, 0xa3, 0x1b, 0xbb, 0x85, - 0x66, 0x35, 0x61, 0x50, 0x2e, 0x45, 0x89, 0x0d, 0x32, 0xeb, 0xf3, 0xc1, - 0xec, 0x20, 0xc7, 0xf5, 0xce, 0x56, 0x35, 0x3d, 0x00, 0x48, 0xff, 0xa6, - 0x93, 0xc1, 0x37, 0xdf, 0x8a, 0xb0, 0x14, 0x39, 0x52, 0xfc, 0x62, 0x0e, - 0xc4, 0xf9, 0xc6, 0xe3, 0xb6, 0xa3, 0x7b, 0xb0, 0xf6, 0x71, 0x5c, 0x99, - 0x82, 0xd8, 0x51, 0x3c, 0x6d, 0x4e, 0x1f, 0x21, 0xd5, 0xd4, 0x39, 0x42, - 0x5a, 0xea, 0xcb, 0x13, 0x86, 0xfc, 0x78, 0xca, 0x3d, 0xaa, 0x42, 0x3c, - 0xdb, 0x41, 0x72, 0x07, 0x36, 0x45, 0xe3, 0xb1, 0xc0, 0x79, 0xda, 0x72, - 0x4f, 0xff, 0x6b, 0x72, 0x59, 0xee, 0xe0, 0x3b, 0x98, 0xf1, 0x0f, 0x9a, - 0x3d, 0x6f, 0x7b, 0x30, 0x36, 0x99, 0x11, 0xf3, 0x03, 0xa8, 0xcd, 0xaf, - 0x9c, 0xe4, 0x8b, 0x40, 0xc8, 0x3c, 0xc0, 0xbf, 0x17, 0x80, 0xbf, 0xc5, - 0x4b, 0x1f, 0xf9, 0x46, 0x78, 0xd0, 0xe6, 0x72, 0x73, 0xd6, 0xee, 0x27, - 0x47, 0x60, 0xe5, 0xe9, 0x09, 0x14, 0xfd, 0x56, 0xad, 0xf8, 0x7e, 0x34, - 0x98, 0xd1, 0x1e, 0xce, 0xd5, 0x16, 0x80, 0x3f, 0x47, 0xc4, 0x6e, 0xe3, - 0x7c, 0x63, 0x55, 0x20, 0xcf, 0x66, 0x42, 0x3d, 0xbd, 0x88, 0x95, 0x0a, - 0x2b, 0xd9, 0x63, 0xd2, 0x7b, 0xdd, 0x39, 0xb2, 0x79, 0xfd, 0xe8, 0xa8, - 0x94, 0x27, 0x3e, 0x7a, 0x50, 0x4b, 0x6f, 0x37, 0x6f, 0x0b, 0x11, 0x5c, - 0xb5, 0xfa, 0x23, 0xf2, 0xda, 0xce, 0x62, 0x4e, 0x1e, 0xb5, 0xdb, 0x16, - 0x37, 0x1e, 0x85, 0xde, 0x19, 0x05, 0x61, 0xcd, 0x8b, 0x77, 0xc1, 0x44, - 0x57, 0x34, 0x4e, 0x61, 0x79, 0x2b, 0xd7, 0xe7, 0x63, 0x57, 0x1d, 0x46, - 0x6c, 0x82, 0x9e, 0xc8, 0xb4, 0x84, 0xa7, 0x9f, 0x1c, 0x30, 0x7e, 0x0b, - 0x96, 0xd3, 0x1e, 0x50, 0x55, 0xea, 0x95, 0x02, 0xe6, 0xc1, 0x44, 0xb9, - 0x2b, 0x9d, 0x47, 0x77, 0x0a, 0xf2, 0x42, 0x0d, 0x33, 0x07, 0x12, 0x96, - 0x2d, 0x6f, 0x60, 0xa4, 0xcc, 0x23, 0x73, 0x53, 0x5f, 0xc8, 0x42, 0xba, - 0xa8, 0x73, 0x68, 0x2e, 0xef, 0x17, 0xd9, 0x99, 0x11, 0x8f, 0x0b, 0x48, - 0xe0, 0x6d, 0x4c, 0xea, 0xc4, 0x68, 0x57, 0x23, 0x2b, 0x47, 0x2d, 0x1a, - 0xe8, 0x00, 0x0f, 0x66, 0xf4, 0xa9, 0x1a, 0x65, 0xfa, 0x58, 0xc2, 0xb0, - 0x84, 0x2d, 0x47, 0xaa, 0x66, 0xa5, 0x2b, 0x98, 0xe8, 0x0c, 0x12, 0xc8, - 0xa4, 0x7f, 0x02, 0xca, 0x30, 0x2c, 0x7f, 0x4e, 0xf2, 0xd5, 0x1a, 0x1c, - 0xe4, 0xa6, 0x96, 0xff, 0x0d, 0x18, 0x12, 0x51, 0x92, 0x87, 0xb1, 0x0b, - 0x15, 0x04, 0x25, 0xd4, 0xf5, 0x47, 0xfd, 0xb9, 0x3c, 0x97, 0xb5, 0xd1, - 0xa4, 0x04, 0x51, 0xca, 0x6a, 0x9c, 0xf9, 0x07, 0x42, 0xf3, 0xa7, 0x48, - 0xf6, 0x62, 0x12, 0xe3, 0x21, 0x61, 0x78, 0x89, 0xd5, 0xbf, 0x00, 0xea, - 0xe3, 0x04, 0xb6, 0xd4, 0xbf, 0xe5, 0x92, 0xed, 0xa7, 0x3a, 0x47, 0xc2, - 0x77, 0x2d, 0x30, 0x60, 0x50, 0x69, 0xb3, 0x0f, 0x45, 0x32, 0x28, 0x25, - 0x59, 0x62, 0xf5, 0x36, 0x8c, 0x0b, 0xc1, 0xfb, 0xe6, 0x4b, 0x65, 0x90, - 0x3c, 0x25, 0x8d, 0xb8, 0x51, 0xd3, 0x94, 0xbe, 0xf8, 0x3f, 0xa5, 0xce, - 0xb7, 0x2f, 0x4e, 0xbe, 0x95, 0xf0, 0xb7, 0x79, 0xa8, 0xcb, 0xb3, 0x3c, - 0x31, 0xf9, 0xe7, 0x8d, 0x00, 0xd8, 0xc7, 0xf6, 0xca, 0x1d, 0xe1, 0x0b, - 0xa5, 0x92, 0x38, 0x80, 0xd2, 0x9f, 0x89, 0x6c, 0x66, 0x68, 0x3a, 0x03, - 0x11, 0x44, 0x41, 0x16, 0xc9, 0xa5, 0x13, 0x87, 0xcb, 0x13, 0x43, 0x4b, - 0x0c, 0x85, 0x0e, 0x7a, 0x01, 0x2a, 0xab, 0xc1, 0xf7, 0x6e, 0xe6, 0x61, - 0x84, 0xdb, 0xb4, 0x27, 0x6f, 0xc2, 0x90, 0x98, 0x3a, 0x12, 0xc8, 0x80, - 0x80, 0x64, 0x63, 0x1a, 0x14, 0x95, 0x8a, 0x68, 0x9d, 0xdb, 0x80, 0x8f, - 0xd6, 0x96, 0x51, 0xb4, 0x4d, 0x93, 0x10, 0xe2, 0xda, 0xec, 0x4a, 0xd9, - 0xb4, 0x8d, 0x80, 0x6f, 0xf1, 0x6c, 0x90, 0x46, 0x0c, 0x6b, 0xc2, 0x7a, - 0x5c, 0xd7, 0xa9, 0x06, 0x39, 0x40, 0xff, 0xfa, 0x23, 0xe5, 0x97, 0x38, - 0x48, 0xba, 0x82, 0x6d, 0xc7, 0x7d, 0xa4, 0x17, 0xe7, 0x61, 0x18, 0xf1, - 0x99, 0xa7, 0xc1, 0x2f, 0x4f, 0x5a, 0x88, 0xfd, 0x74, 0xe2, 0xaa, 0xa2, - 0xa3, 0x62, 0xf0, 0x62, 0x36, 0x2a, 0x9a, 0x76, 0x92, 0xed, 0x86, 0xc0, - 0x10, 0xc4, 0xe0, 0xa7, 0xa4, 0x2f, 0x5f, 0x8a, 0xbd, 0xfa, 0x10, 0x90, - 0x1b, 0xd4, 0xb1, 0xb6, 0xe7, 0x6a, 0xc2, 0xa6, 0xa3, 0xda, 0x66, 0xc9, - 0x5b, 0xbd, 0x83, 0x6c, 0xe8, 0xfe, 0x70, 0x8f, 0x55, 0x48, 0x8a, 0x81, - 0x6d, 0x2a, 0x7a, 0xfa, 0xcd, 0xd0, 0x08, 0x0c, 0xa7, 0x96, 0x33, 0xd3, - 0x46, 0x01, 0xe4, 0x3a, 0x05, 0x4f, 0xf3, 0x76, 0x1f, 0xcd, 0x66, 0xb7, - 0x2d, 0xda, 0x26, 0x84, 0x8c, 0x71, 0x36, 0x05, 0x5a, 0x21, 0xc8, 0xb0, - 0xc0, 0x34, 0x2e, 0xcd, 0x1d, 0xae, 0x47, 0x36, 0xfd, 0xbd, 0x9d, 0x51, - 0x5d, 0xb0, 0xfb, 0x0c, 0xff, 0x9c, 0xe1, 0xbc, 0xa1, 0x95, 0xa5, 0x5e, - 0xb0, 0x34, 0x1a, 0xdb, 0xce, 0x3c, 0x66, 0x86, 0x65, 0xf3, 0x9f, 0x86, - 0xb6, 0x54, 0x88, 0x4a, 0x07, 0x15, 0x51, 0x7c, 0x74, 0xea, 0x3b, 0x69, - 0xb5, 0x46, 0x7e, 0xa5, 0xed, 0x02, 0x81, 0x7c, 0x44, 0x3b, 0xab, 0xea, - 0x31, 0xbc, 0x3e, 0xe3, 0xf3, 0xef, 0xb1, 0xbe, 0xa6, 0x53, 0xec, 0xd5, - 0xc8, 0x95, 0x2a, 0x23, 0xb7, 0x3e, 0xb0, 0xa2, 0xa5, 0x77, 0x8c, 0x58, - 0xa8, 0x65, 0x4f, 0x83, 0x14, 0x79, 0xd6, 0x1c, 0xdd, 0xf5, 0x57, 0x45, - 0x79, 0xf5, 0x81, 0x4a, 0xe7, 0xec, 0x96, 0x10, 0x8c, 0x85, 0x2c, 0x51, - 0x09, 0x4d, 0x94, 0x7d, 0xd3, 0x14, 0x35, 0xc5, 0x62, 0x66, 0xb1, 0xf3, - 0x0e, 0x0f, 0x76, 0x80, 0x06, 0x58, 0x26, 0x67, 0xcb, 0x97, 0xfa, 0x97, - 0x3a, 0xf0, 0x8e, 0x02, 0x13, 0x07, 0x1f, 0xcc, 0x48, 0x85, 0x1b, 0xef, - 0x7c, 0xe2, 0x7d, 0xd7, 0xbd, 0xaf, 0xd2, 0x08, 0x42, 0xf5, 0x17, 0xcd, - 0xa9, 0xa9, 0xe4, 0x86, 0x50, 0x94, 0x23, 0xb4, 0xa0, 0x03, 0xd5, 0xb5, - 0x0f, 0x30, 0x78, 0x2d, 0x0e, 0xe4, 0xf9, 0xfb, 0xbb, 0x3d, 0x02, 0x1e, - 0x91, 0xdb, 0x1e, 0x19, 0xbf, 0x14, 0x95, 0x92, 0x45, 0x65, 0xd0, 0xf7, - 0x5e, 0x54, 0x85, 0x76, 0x0b, 0x3a, 0x18, 0x6e, 0x57, 0xb5, 0xe9, 0x87, - 0xef, 0x10, 0x9f, 0x08, 0x13, 0xde, 0x6a, 0xeb, 0x57, 0x76, 0x52, 0xd9, - 0x69, 0x5b, 0x30, 0x8a, 0xb3, 0xf0, 0x7f, 0x22, 0x53, 0xc4, 0xb9, 0x56, - 0xb5, 0x05, 0x41, 0xbf, 0x43, 0xcf, 0xbc, 0x39, 0xbc, 0x04, 0x13, 0x16, - 0xd6, 0xad, 0x5b, 0x24, 0x28, 0xc2, 0x51, 0xf0, 0x0b, 0x2c, 0x31, 0xfd, - 0x72, 0x99, 0xce, 0x3a, 0xd9, 0xa6, 0x96, 0x64, 0x32, 0xe2, 0x70, 0xcb, - 0xbc, 0xea, 0x07, 0x22, 0xd5, 0xd7, 0x14, 0x1a, 0x6f, 0xf6, 0x54, 0x4d, - 0x60, 0x45, 0x6f, 0x71, 0x8c, 0x73, 0x30, 0x7f, 0x75, 0x08, 0x41, 0x61, - 0x1f, 0x22, 0xaf, 0x3d, 0x3c, 0x9d, 0x62, 0x69, 0x1e, 0x58, 0x92, 0x39, - 0x22, 0x29, 0x56, 0xbc, 0x02, 0xc0, 0xeb, 0xba, 0xab, 0x7f, 0xed, 0x5a, - 0xfa, 0xcb, 0x6e, 0xea, 0x26, 0x97, 0x86, 0x08, 0x7c, 0x9b, 0xf5, 0xab, - 0xf1, 0x23, 0x58, 0xcf, 0xe0, 0xeb, 0x01, 0x6d, 0x8f, 0xf5, 0x5e, 0x8f, - 0x12, 0xa8, 0xbd, 0xe4, 0xbb, 0x0f, 0xa0, 0xf9, 0xbe, 0xbd, 0xd9, 0x24, - 0x88, 0x13, 0xa6, 0x5b, 0x5f, 0x2d, 0x1e, 0x13, 0xd5, 0x3a, 0xcc, 0x69, - 0x4a, 0x96, 0x5b, 0xf3, 0xb4, 0xde, 0xd4, 0x41, 0x62, 0x2e, 0x65, 0xdf, - 0x0d, 0xee, 0x06, 0xf3, 0x17, 0x07, 0x8d, 0x45, 0xfe, 0x57, 0xc8, 0x6c, - 0x8e, 0xfa, 0x9e, 0x24, 0x0d, 0x24, 0xfc, 0xff, 0x15, 0xba, 0x89, 0x9c, - 0x9c, 0x64, 0x06, 0x1f, 0xea, 0x7a, 0xf5, 0x9d, 0x41, 0x75, 0x15, 0x1f, - 0x58, 0x15, 0x7c, 0xbf, 0xa5, 0x2f, 0x88, 0xe4, 0x6c, 0x34, 0x08, 0xae, - 0x61, 0x05, 0x31, 0x2e, 0x36, 0xb6, 0x9c, 0xbb, 0x73, 0x61, 0x46, 0x84, - 0xee, 0x4c, 0x2b, 0xbd, 0x51, 0x61, 0x8d, 0x89, 0x0b, 0x7f, 0x2e, 0x42, - 0x9d, 0x2f, 0xf1, 0xd2, 0xae, 0x09, 0xd6, 0xf2, 0x59, 0x27, 0xe6, 0x64, - 0xfa, 0x54, 0xad, 0x83, 0x0f, 0xe0, 0x32, 0xc9, 0x13, 0xae, 0x75, 0x73, - 0xdf, 0x7a, 0x42, 0x47, 0xd8, 0xd2, 0x14, 0x56, 0x6c, 0x59, 0xe6, 0xd8, - 0x5b, 0x86, 0x82, 0x8e, 0xef, 0x5e, 0xaa, 0xa7, 0x99, 0x4e, 0x4d, 0x02, - 0x18, 0x13, 0x1e, 0xfa, 0x42, 0x11, 0x70, 0x55, 0x13, 0x97, 0x91, 0x20, - 0xf5, 0x98, 0xd3, 0xdf, 0xc2, 0x7b, 0x75, 0x74, 0x56, 0x77, 0x7c, 0x6b, - 0x9e, 0x8f, 0x55, 0x52, 0xad, 0xe8, 0x10, 0x02, 0x6a, 0xf7, 0xf5, 0xf9, - 0xc6, 0x3e, 0xd8, 0x28, 0x03, 0x33, 0xfd, 0xef, 0x3f, 0xb6, 0x40, 0x66, - 0x2d, 0xa6, 0x16, 0xbf, 0xee, 0x82, 0x13, 0x96, 0x0d, 0x46, 0xe8, 0x9a, - 0x9c, 0xdf, 0x98, 0x02, 0x58, 0xbb, 0x92, 0x55, 0x96, 0xb6, 0xde, 0x6e, - 0xaa, 0x49, 0xaf, 0x70, 0x84, 0x4d, 0xdc, 0x86, 0xe0, 0xd4, 0x60, 0x73, - 0xba, 0xcd, 0x84, 0x23, 0x43, 0xa2, 0x90, 0x68, 0xd7, 0x10, 0xc6, 0x88, - 0x5c, 0xea, 0xb3, 0x3b, 0x65, 0x45, 0x88, 0x05, 0x4a, 0x5f, 0x85, 0xbf, - 0xc1, 0xe9, 0xd1, 0x9f, 0xe8, 0x99, 0x47, 0xd3, 0x1c, 0x0d, 0x79, 0x49, - 0xe1, 0xb5, 0xe9, 0xcb, 0x24, 0x7b, 0xb4, 0x35, 0xd8, 0x35, 0x5c, 0xbf, - 0x58, 0xf1, 0xb9, 0x72, 0x55, 0xcb, 0x27, 0xc5, 0x43, 0xc9, 0x78, 0xce, - 0x49, 0x00, 0x2b, 0x9d, 0x55, 0x9d, 0xcf, 0xdd, 0x9c, 0xe7, 0xb8, 0xd8, - 0x91, 0x41, 0x74, 0xe8, 0x22, 0x65, 0xf1, 0x96, 0x41, 0x81, 0x6e, 0xad, - 0x66, 0x23, 0x71, 0x89, 0x65, 0x45, 0x9a, 0x1f, 0x1b, 0x43, 0x0f, 0xcd, - 0x4a, 0xd8, 0x6a, 0x2f, 0x48, 0x69, 0x50, 0x15, 0x6e, 0x67, 0x6b, 0x0a, - 0x0d, 0x29, 0x93, 0xe0, 0x1a, 0x68, 0x5f, 0x4c, 0xe2, 0x72, 0x59, 0x49, - 0x43, 0x49, 0x10, 0x71, 0x9c, 0xe0, 0x8d, 0x14, 0x8f, 0xac, 0xce, 0x1d, - 0xaf, 0xc7, 0x9c, 0x41, 0x9e, 0xb5, 0xe2, 0x61, 0x6b, 0x50, 0xbc, 0x83, - 0xb2, 0x4c, 0x05, 0x6e, 0x71, 0x6d, 0x63, 0xa5, 0x65, 0x87, 0xd5, 0x74, - 0x39, 0x16, 0xe9, 0xee, 0xc7, 0xc3, 0xec, 0x8c, 0x8c, 0x70, 0xb2, 0xa1, - 0x55, 0xee, 0xb3, 0xa3, 0x9f, 0x12, 0x02, 0x87, 0x30, 0xfc, 0x7e, 0x52, - 0xf8, 0x97, 0x82, 0x0a, 0x0f, 0x20, 0xd5, 0x8e, 0xfa, 0xe3, 0xa9, 0x17, - 0xa7, 0x9a, 0x65, 0x64, 0xbf, 0x66, 0x69, 0x2e, 0xe6, 0x7b, 0xd6, 0x9a, - 0x4b, 0x02, 0x10, 0x15, 0xb2, 0x60, 0x3a, 0x11, 0x9c, 0x4d, 0x87, 0xc6, - 0x70, 0x2d, 0x1b, 0xe8, 0xa9, 0xfc, 0xac, 0x91, 0x61, 0x94, 0x2f, 0x4a, - 0x55, 0x33, 0xfc, 0xd6, 0x73, 0x52, 0xee, 0x0f, 0xbc, 0x3b, 0xc0, 0x87, - 0x5a, 0x0b, 0x01, 0x97, 0x02, 0x13, 0x58, 0x77, 0x08, 0xf6, 0xe3, 0x3b, - 0xca, 0x22, 0x04, 0x82, 0x3f, 0x58, 0x7f, 0x98, 0xf2, 0x9b, 0xea, 0x0f, - 0x32, 0xf6, 0xa5, 0xf5, 0x21, 0x4e, 0x86, 0xfb, 0x76, 0x20, 0xb9, 0xea, - 0xee, 0xa2, 0x0a, 0x9f, 0x7b, 0x01, 0xe2, 0x17, 0xe1, 0x7b, 0x8f, 0x8a, - 0x92, 0xef, 0x06, 0x8d, 0x3c, 0x83, 0x71, 0x3f, 0x75, 0x10, 0xe7, 0x52, - 0xb7, 0x5b, 0xfb, 0x58, 0xc0, 0x8c, 0xe0, 0x33, 0x68, 0x1c, 0x07, 0xf2, - 0x55, 0x93, 0x2c, 0xb0, 0xb8, 0xb4, 0xa3, 0xef, 0x07, 0x11, 0xc0, 0x63, - 0x5a, 0x27, 0x87, 0x32, 0x2e, 0x88, 0x6f, 0xd6, 0x94, 0x94, 0xb4, 0x81, - 0x02, 0x16, 0x42, 0xe4, 0x0a, 0xd9, 0x71, 0x5f, 0x8a, 0xf4, 0xca, 0x9e, - 0x51, 0xd0, 0x23, 0x8a, 0x42, 0xd7, 0x39, 0xe7, 0x71, 0x3f, 0x41, 0x3d, - 0x7a, 0xd8, 0xd8, 0x23, 0xdb, 0xb3, 0x84, 0x55, 0x85, 0x05, 0x2e, 0xd1, - 0xcd, 0x4c, 0x5c, 0xff, 0xcb, 0xfb, 0xfc, 0x30, 0x59, 0x46, 0x0d, 0x16, - 0x49, 0x34, 0x09, 0x08, 0x27, 0x89, 0x5f, 0x77, 0x32, 0xce, 0x31, 0xf3, - 0xd0, 0x4c, 0x61, 0xe7, 0xc4, 0x56, 0x36, 0x46, 0x6b, 0xb5, 0xbb, 0x41, - 0x18, 0x71, 0xc9, 0x0d, 0x29, 0x56, 0x52, 0xf1, 0x37, 0x42, 0x8d, 0xf4, - 0xde, 0x1d, 0x42, 0xea, 0xde, 0x23, 0x88, 0xc1, 0x60, 0x0e, 0xaf, 0x79, - 0x42, 0x28, 0x1f, 0x5f, 0x53, 0x8a, 0x6f, 0x85, 0x99, 0x56, 0x41, 0x79, - 0xbe, 0x75, 0x3c, 0x70, 0xa9, 0x52, 0xf8, 0x88, 0x62, 0xf5, 0x06, 0x1b, - 0x19, 0x77, 0x24, 0x79, 0x83, 0x80, 0x6e, 0x61, 0x06, 0xbd, 0xc7, 0x36, - 0xf4, 0x4e, 0xc4, 0xb2, 0x4f, 0x6b, 0x68, 0x1d, 0xa6, 0xb1, 0xb1, 0xe1, - 0x37, 0x42, 0x53, 0x4c, 0xf4, 0x9c, 0x86, 0xb1, 0x06, 0x82, 0x90, 0x5d, - 0x84, 0xb3, 0xce, 0xd1, 0x1b, 0xf8, 0x60, 0xba, 0x8a, 0xdd, 0x7e, 0xf6, - 0x7f, 0xd1, 0xa4, 0xdb, 0x44, 0x0a, 0xef, 0xce, 0xd6, 0x6e, 0xc0, 0x12, - 0xf3, 0xee, 0xd3, 0x2e, 0x80, 0x53, 0xac, 0x0e, 0x22, 0xe0, 0x79, 0x9f, - 0x4d, 0x4f, 0xf7, 0xa8, 0x61, 0x55, 0xa0, 0x23, 0x36, 0xb6, 0x3b, 0xb4, - 0x11, 0x92, 0xdf, 0x1f, 0xe3, 0xb3, 0x80, 0xd0, 0x37, 0xe0, 0x16, 0x07, - 0x2c, 0xd7, 0xbe, 0x3b, 0x44, 0x40, 0xc2, 0xad, 0x59, 0xe3, 0x7e, 0x21, - 0xe6, 0x23, 0xf0, 0x7b, 0xa9, 0xba, 0x7e, 0x84, 0x7c, 0x02, 0x25, 0x5f, - 0x4a, 0xc5, 0x88, 0x3d, 0xab, 0xf0, 0xd0, 0xcf, 0xe7, 0xe9, 0x87, 0xd3, - 0x67, 0x04, 0x2e, 0x5d, 0x7a, 0x83, 0xc5, 0x54, 0x84, 0x1d, 0x0f, 0x96, - 0x1e, 0x99, 0x30, 0xb6, 0x89, 0xda, 0xba, 0x16, 0xa7, 0x42, 0xd4, 0xe7, - 0x04, 0xbe, 0x3a, 0x41, 0xc0, 0x8a, 0x98, 0xf5, 0x81, 0x21, 0xd3, 0xde, - 0xc7, 0x3b, 0xb7, 0x1f, 0x30, 0xe4, 0x34, 0x81, 0xfc, 0x23, 0x3b, 0xd6, - 0xe7, 0xe8, 0x17, 0x64, 0x5f, 0xae, 0xef, 0x02, 0x90, 0x56, 0x36, 0x1d, - 0x18, 0x6d, 0x45, 0x23, 0x15, 0x7f, 0x8f, 0x21, 0x0c, 0xa3, 0xaf, 0xf6, - 0xa5, 0xf3, 0x3b, 0xa1, 0x29, 0xf9, 0x19, 0x47, 0x2e, 0x1b, 0xbc, 0x92, - 0x4e, 0x5a, 0x37, 0xd5, 0xca, 0xe2, 0x6d, 0xe8, 0x9b, 0x56, 0x3e, 0x83, - 0xbb, 0xf7, 0x09, 0x37, 0x31, 0x5b, 0x60, 0xc4, 0xc5, 0x49, 0x0d, 0x2e, - 0xbe, 0x90, 0xa4, 0x12, 0x28, 0x13, 0x23, 0x0b, 0xa3, 0x08, 0x2d, 0x86, - 0x10, 0xb9, 0xef, 0x45, 0x1f, 0x4c, 0x84, 0xa5, 0xb5, 0xc5, 0x42, 0x7e, - 0x62, 0x8e, 0xd5, 0x96, 0x93, 0xed, 0xcf, 0xb0, 0x55, 0x1c, 0x84, 0xbc, - 0x5e, 0x41, 0x38, 0x3f, 0xe9, 0x1c, 0x2c, 0x1b, 0x4f, 0x7a, 0x52, 0x37, - 0xd0, 0xd2, 0x04, 0xeb, 0x1e, 0x06, 0xbb, 0xd0, 0x99, 0xda, 0x08, 0x25, - 0xf9, 0xc2, 0x4e, 0x53, 0xcf, 0x76, 0x6d, 0xf5, 0x57, 0x97, 0x6b, 0x46, - 0x3c, 0xbd, 0xe2, 0xec, 0xb4, 0x9a, 0xd1, 0x03, 0xe5, 0x44, 0x38, 0x4d, - 0x7c, 0x67, 0x30, 0x46, 0x8f, 0xc5, 0x3f, 0x4f, 0x46, 0x94, 0xd9, 0xc9, - 0x45, 0xac, 0x07, 0x36, 0xc4, 0x2a, 0x58, 0x70, 0x4a, 0x5c, 0xb9, 0xa0, - 0x0a, 0x61, 0xe5, 0xf2, 0xfb, 0xe2, 0x47, 0x45, 0xb5, 0x3a, 0xde, 0x96, - 0x9f, 0x21, 0xdf, 0xe7, 0x39, 0xed, 0xa6, 0x04, 0x0b, 0x80, 0x8a, 0x32, - 0x65, 0x63, 0xd5, 0x4f, 0x9c, 0x5d, 0x3c, 0x18, 0xbb, 0x20, 0x65, 0x29, - 0x24, 0xa8, 0xad, 0xca, 0x4e, 0x0f, 0xac, 0x75, 0xad, 0x3e, 0xc6, 0x26, - 0x3c, 0xc9, 0xd8, 0x91, 0x97, 0x16, 0x69, 0xd8, 0x77, 0x01, 0x16, 0x22, - 0x7f, 0xd6, 0x82, 0x47, 0x7f, 0xfd, 0x1c, 0x31, 0x20, 0x9f, 0xcd, 0x4e, - 0x90, 0xcf, 0x57, 0x78, 0xf7, 0x1d, 0x17, 0xe4, 0xa5, 0xb5, 0xe4, 0x33, - 0x7d, 0x06, 0x29, 0x58, 0x46, 0xf4, 0xcb, 0xf1, 0x7a, 0x74, 0x8f, 0xda, - 0x22, 0x83, 0x6f, 0x5b, 0x59, 0x09, 0x12, 0x7d, 0xa2, 0x64, 0x36, 0x01, - 0xee, 0x4e, 0xe1, 0x94, 0x1f, 0x7a, 0x3c, 0x05, 0x4c, 0x2a, 0x47, 0x4d, - 0x32, 0x7e, 0x5b, 0xcc, 0x86, 0x1d, 0xb7, 0x1d, 0xca, 0x48, 0xa0, 0x55, - 0x2f, 0x0e, 0x2d, 0x67, 0x54, 0xd6, 0x63, 0x7a, 0xb1, 0x7a, 0xae, 0x5c, - 0xfa, 0x08, 0x75, 0x8f, 0x45, 0x0d, 0x62, 0x99, 0xc0, 0xcb, 0x63, 0xe3, - 0x57, 0x22, 0xa9, 0xb2, 0xb2, 0x74, 0x75, 0xd3, 0xe6, 0x99, 0x18, 0x8e, - 0xfa, 0x26, 0x62, 0xb5, 0x01, 0xb0, 0xe9, 0x16, 0xb7, 0xe3, 0x17, 0x74, - 0x99, 0x00, 0x1a, 0xb6, 0x9f, 0xa6, 0x71, 0x6a, 0x56, 0x05, 0xc6, 0x1b, - 0xb1, 0x2a, 0xbd, 0x85, 0xe6, 0xdf, 0x1c, 0xa5, 0x26, 0x4a, 0xc1, 0xcd, - 0x0d, 0xbb, 0xa3, 0x60, 0xc3, 0x5f, 0x91, 0x5d, 0x90, 0x88, 0x1e, 0xe8, - 0x25, 0x4a, 0xb8, 0xbf, 0x88, 0xd8, 0xe6, 0xc6, 0x21, 0x87, 0x04, 0x89, - 0xdf, 0x95, 0x8c, 0x83, 0x70, 0x5b, 0x14, 0xd3, 0x98, 0x02, 0xaf, 0x2c, - 0xf0, 0x11, 0x62, 0x7b, 0x0d, 0xd2, 0xcd, 0x34, 0x8a, 0x57, 0x1d, 0x1e, - 0x2c, 0xe0, 0x6f, 0xd2, 0xd6, 0x50, 0x40, 0x65, 0x9e, 0x67, 0xd7, 0x74, - 0x58, 0xbc, 0x4d, 0x16, 0x3b, 0x54, 0xa1, 0x00, 0x3b, 0xb8, 0x1c, 0xce, - 0x2d, 0x01, 0x1b, 0x97, 0xe1, 0x67, 0x1a, 0xd4, 0xf7, 0xab, 0x6f, 0x42, - 0x2e, 0xa6, 0x72, 0x1e, 0x8a, 0x8c, 0xb3, 0xa5, 0x33, 0x80, 0xe6, 0xc0, - 0x1d, 0x43, 0x95, 0x84, 0x84, 0x6c, 0x72, 0x77, 0x5c, 0x70, 0xcc, 0x18, - 0xbd, 0x2f, 0xc0, 0x21, 0x23, 0xb4, 0x13, 0x93, 0x63, 0xde, 0x34, 0x0d, - 0xa0, 0x74, 0x26, 0xd4, 0x55, 0xfb, 0xdc, 0xf0, 0x59, 0xa8, 0xba, 0x07, - 0xc9, 0x21, 0xa8, 0x95, 0x52, 0xd0, 0xa0, 0x32, 0x23, 0x45, 0x6f, 0x00, - 0xf2, 0x80, 0xdd, 0x3a, 0xb2, 0xb9, 0x92, 0x7b, 0x6c, 0x5f, 0xa3, 0x34, - 0x60, 0x96, 0x2a, 0xff, 0x7e, 0x61, 0x73, 0x11, 0x1e, 0x29, 0xc5, 0xb5, - 0x45, 0xf3, 0xc6, 0x99, 0x6e, 0xfc, 0x79, 0x18, 0xe2, 0xb2, 0xbd, 0x75, - 0xd7, 0xeb, 0xdd, 0x57, 0x7c, 0x1b, 0xf0, 0x65, 0xd5, 0xd3, 0x9d, 0x9f, - 0xc9, 0x2a, 0x2f, 0xd8, 0xfb, 0xe2, 0x38, 0x2f, 0x20, 0x5e, 0xd2, 0x71, - 0x03, 0x8d, 0xbc, 0xff, 0x60, 0x2d, 0xa0, 0x1d, 0x18, 0x8a, 0x99, 0x4f, - 0xf1, 0x62, 0x94, 0xdb, 0xbc, 0xb1, 0xd8, 0xbf, 0xe0, 0x82, 0x33, 0x2c, - 0x51, 0x36, 0x38, 0xfd, 0x88, 0x46, 0x85, 0x1f, 0x5f, 0xb2, 0x5f, 0x20, - 0xd3, 0x85, 0xa8, 0xdf, 0x73, 0x1b, 0xe9, 0xb1, 0x3d, 0x3e, 0x15, 0x81, - 0xfc, 0xae, 0xdc, 0x1c, 0x44, 0x9e, 0xe6, 0x03, 0x47, 0x93, 0x22, 0x14, - 0x5b, 0xe7, 0x1e, 0xec, 0xee, 0xdc, 0x49, 0xb9, 0x11, 0x8b, 0x91, 0x02, - 0x85, 0x1f, 0xd0, 0xb6, 0x26, 0xb3, 0x16, 0x12, 0x85, 0x3d, 0xeb, 0xde, - 0x8f, 0xab, 0x74, 0xb7, 0x4a, 0xe8, 0xf2, 0x14, 0x26, 0x27, 0xfb, 0x4b, - 0x9a, 0xea, 0x97, 0xdc, 0x4a, 0x4a, 0x9b, 0xcf, 0x30, 0x5b, 0x00, 0x6a, - 0x2b, 0x7c, 0x55, 0xea, 0xb8, 0xfa, 0xa7, 0x77, 0xfa, 0x2e, 0xea, 0x91, - 0x92, 0x48, 0x16, 0x5e, 0xfa, 0x86, 0x6b, 0x76, 0xc2, 0xfc, 0x02, 0xf4, - 0x39, 0xeb, 0x9e, 0xdb, 0xbc, 0x53, 0x66, 0x27, 0x79, 0xa7, 0x1d, 0x40, - 0xc8, 0x19, 0xec, 0xfd, 0xf4, 0x71, 0x67, 0x27, 0x98, 0xf8, 0x63, 0xd1, - 0x90, 0xa5, 0x02, 0xfe, 0x60, 0x8c, 0x3e, 0xab, 0x13, 0x81, 0x76, 0x45, - 0x18, 0xa8, 0x81, 0x84, 0x25, 0x91, 0x16, 0x71, 0x5e, 0x0e, 0xd1, 0x2c, - 0xf2, 0x85, 0x06, 0xa8, 0x51, 0x92, 0xa8, 0x1a, 0x8e, 0xa3, 0x4b, 0xc6, - 0x3a, 0xea, 0x31, 0x9a, 0x0a, 0xc3, 0x7e, 0x3f, 0xf8, 0xd6, 0x00, 0x18, - 0xd1, 0xaa, 0x91, 0x0b, 0xc8, 0x5f, 0xde, 0x26, 0xba, 0x95, 0x02, 0x6e, - 0x92, 0xc8, 0x64, 0x23, 0xd5, 0x03, 0x20, 0x77, 0x6c, 0x78, 0xf3, 0xeb, - 0xe8, 0x31, 0xfc, 0x11, 0x61, 0x8a, 0x23, 0x4e, 0x18, 0x11, 0xe6, 0xe1, - 0x79, 0x6c, 0x65, 0xc5, 0x4b, 0x1f, 0xfb, 0x4f, 0x7b, 0xf9, 0xaf, 0xb2, - 0x7c, 0xbb, 0x9f, 0x1f, 0x5d, 0xec, 0x10, 0x94, 0x62, 0xe8, 0x50, 0x42, - 0xdd, 0x2a, 0x58, 0x10, 0x49, 0x7e, 0x85, 0x81, 0x9e, 0xc1, 0xa4, 0x64, - 0x6d, 0x9a, 0x6d, 0x32, 0xf7, 0x4d, 0x70, 0xd9, 0x0e, 0x0e, 0x3f, 0x76, - 0x2a, 0x7a, 0x8f, 0xea, 0xd9, 0xf7, 0xd8, 0x06, 0xd9, 0x32, 0x8f, 0x37, - 0x8f, 0xda, 0x5c, 0x02, 0x43, 0xad, 0x79, 0xda, 0xf8, 0xeb, 0x0c, 0x62, - 0x4f, 0x4c, 0x89, 0xef, 0xf0, 0x6c, 0xdc, 0x71, 0xbb, 0xea, 0xaa, 0x6c, - 0x34, 0x00, 0xa9, 0x38, 0xbd, 0xca, 0xda, 0xc5, 0x41, 0x41, 0xa5, 0x0b, - 0xd2, 0xa4, 0x4f, 0x2b, 0x4f, 0x84, 0xb9, 0x6d, 0xa3, 0xbd, 0xb9, 0xb5, - 0x6b, 0xcf, 0xdb, 0xa8, 0x15, 0xd7, 0xa7, 0xc3, 0x74, 0x47, 0x57, 0xa1, - 0xa7, 0x1e, 0x4e, 0xcd, 0xa0, 0x56, 0xd7, 0xfd, 0xc3, 0x12, 0xe9, 0xaf, - 0x2f, 0x4c, 0xa5, 0x76, 0xaa, 0xd3, 0x74, 0x19, 0xac, 0x71, 0xf2, 0xf7, - 0xf6, 0x26, 0x3d, 0x3f, 0x83, 0xb9, 0xf7, 0xec, 0x21, 0x6c, 0x8e, 0xe2, - 0x4d, 0x99, 0xd7, 0xf6, 0xca, 0xcd, 0x8d, 0xd6, 0x8f, 0x43, 0x78, 0xb2, - 0x2e, 0xdc, 0x7d, 0xf6, 0x39, 0x9d, 0x1b, 0xab, 0x13, 0x27, 0x51, 0x6a, - 0x31, 0xae, 0xf9, 0xec, 0x59, 0xbd, 0x85, 0x73, 0x53, 0xa6, 0x8e, 0x91, - 0x9a, 0xf1, 0x14, 0x84, 0x3b, 0xfa, 0x88, 0x5b, 0x32, 0x35, 0xe2, 0x66, - 0x55, 0x13, 0x5f, 0xef, 0x5c, 0x28, 0xfc, 0x59, 0x7c, 0x0b, 0x64, 0x58, - 0x6e, 0x4b, 0x4e, 0x10, 0x46, 0x28, 0x1f, 0x09, 0xaa, 0x17, 0x49, 0x84, - 0x25, 0x3b, 0x63, 0x2a, 0x24, 0xce, 0x4f, 0xea, 0xf9, 0xdc, 0xc9, 0x4b, - 0x15, 0xad, 0xe5, 0x2d, 0x1f, 0xb8, 0xc1, 0xae, 0x14, 0x39, 0x3c, 0x3a, - 0x63, 0x24, 0xcf, 0x62, 0xdb, 0xf8, 0x1f, 0x74, 0xa9, 0xff, 0x02, 0x76, - 0x87, 0x1f, 0x62, 0xa6, 0x8d, 0x43, 0x34, 0xe7, 0x7e, 0x80, 0xa1, 0x2f, - 0xf1, 0x82, 0x77, 0x49, 0x86, 0x73, 0x73, 0x77, 0x3a, 0xa3, 0xd7, 0xf1, - 0x01, 0x7b, 0xa4, 0xf0, 0xf8, 0x37, 0x64, 0x67, 0x6e, 0x98, 0x72, 0x96, - 0xc4, 0x33, 0xb7, 0xcd, 0x90, 0x19, 0x26, 0xf1, 0x96, 0xcf, 0x27, 0xae, - 0xef, 0x3d, 0x5f, 0xbb, 0x61, 0x56, 0x8f, 0x38, 0x7e, 0x57, 0x2b, 0xea, - 0x93, 0x88, 0x71, 0x1b, 0x7d, 0xd9, 0x8d, 0x0d, 0x96, 0x1b, 0x0c, 0x3b, - 0x6d, 0x66, 0x93, 0x75, 0x42, 0x96, 0xe5, 0xa5, 0xb9, 0xa2, 0xcc, 0xba, - 0x64, 0xec, 0x7c, 0x27, 0x59, 0xa8, 0x4d, 0xd0, 0x76, 0x56, 0x7b, 0x7c, - 0xc2, 0xa6, 0x19, 0x77, 0x54, 0x51, 0x83, 0xc8, 0xef, 0x2d, 0xaf, 0xeb, - 0x8d, 0xcb, 0xf9, 0xcb, 0x3e, 0xa8, 0xaa, 0x70, 0x3a, 0xe3, 0x26, 0x04, - 0xfe, 0xb1, 0x59, 0x85, 0x03, 0x24, 0x11, 0x33, 0x53, 0x5a, 0x0f, 0x5a, - 0x1a, 0x0f, 0xf6, 0x54, 0xc4, 0xdb, 0x43, 0x73, 0xec, 0x32, 0x22, 0x37, - 0xa5, 0xe7, 0x08, 0xeb, 0x69, 0x94, 0xd0, 0xed, 0xdc, 0x05, 0x07, 0x00, - 0x42, 0xdf, 0x01, 0x2b, 0x39, 0xd8, 0x3b, 0xbb, 0x57, 0x6a, 0xab, 0xb6, - 0xb4, 0x12, 0xc3, 0x32, 0x11, 0xf3, 0xdf, 0x81, 0x4e, 0x4e, 0x1f, 0x11, - 0x55, 0x26, 0x3a, 0x1d, 0x71, 0xd6, 0xbc, 0xbf, 0x33, 0x01, 0xc6, 0xa4, - 0x16, 0xce, 0x22, 0x13, 0xdb, 0xdb, 0x89, 0x32, 0x6d, 0x14, 0xed, 0xcb, - 0x1b, 0xf2, 0x85, 0x34, 0x2b, 0x60, 0x21, 0x6f, 0xb4, 0x80, 0x9b, 0x8f, - 0x84, 0x42, 0xf8, 0xd4, 0xc7, 0x28, 0x6a, 0x1f, 0x15, 0xee, 0x12, 0x04, - 0xd2, 0x7a, 0xb2, 0xdb, 0xa1, 0x85, 0x89, 0xbb, 0x73, 0x38, 0x5b, 0x95, - 0xe6, 0xb2, 0xda, 0xd8, 0x67, 0xe4, 0xed, 0x27, 0x6b, 0x74, 0x33, 0x10, - 0xff, 0xb0, 0x5a, 0x47, 0xf2, 0x90, 0x0b, 0xf1, 0xc3, 0xbf, 0x07, 0x23, - 0x07, 0xef, 0x30, 0x87, 0xe7, 0xe4, 0xee, 0x2e, 0x48, 0xbd, 0x25, 0x5f, - 0x9e, 0x6b, 0xff, 0xf0, 0xe1, 0x1d, 0xeb, 0x52, 0x85, 0xe9, 0x99, 0x31, - 0x5e, 0x3f, 0xbf, 0x0a, 0x16, 0x5e, 0x6f, 0x5b, 0x98, 0xe3, 0x87, 0x20, - 0x7b, 0xb6, 0x75, 0x10, 0xb3, 0xa1, 0xe7, 0xcc, 0xa0, 0x85, 0x7e, 0xd5, - 0x21, 0xe8, 0xcc, 0x2c, 0x63, 0x9a, 0x9b, 0xac, 0x6e, 0xa3, 0xad, 0x53, - 0x2a, 0xb4, 0xf7, 0x79, 0x0c, 0x7c, 0xb9, 0x64, 0xb6, 0x5c, 0x6c, 0x33, - 0xd0, 0x8f, 0x9a, 0x07, 0x49, 0x4c, 0x6a, 0x99, 0xf6, 0x89, 0x91, 0x5e, - 0xfd, 0xbc, 0xb7, 0x43, 0x99, 0x9c, 0xf4, 0x08, 0x02, 0x18, 0x23, 0xab, - 0x1d, 0x53, 0x64, 0x04, 0x5c, 0xb8, 0x21, 0xee, 0x59, 0x13, 0x5d, 0x7d, - 0xa0, 0xd1, 0x37, 0xb8, 0x35, 0x38, 0xb6, 0x90, 0x8b, 0x7c, 0x0a, 0x42, - 0x4c, 0x71, 0x21, 0x43, 0x07, 0x66, 0x36, 0x8f, 0xc6, 0x1a, 0xaa, 0xb6, - 0xa8, 0xda, 0x20, 0x6d, 0xcb, 0x61, 0xdc, 0xdd, 0xe5, 0xa7, 0x11, 0xed, - 0x98, 0x13, 0xf9, 0x87, 0xae, 0x17, 0x7a, 0x32, 0x78, 0xe8, 0x31, 0x99, - 0x46, 0x2c, 0x3a, 0xf5, 0x95, 0x5c, 0x90, 0xc9, 0xd0, 0xd9, 0xb5, 0xbd, - 0xf8, 0x74, 0x12, 0x5b, 0xfc, 0x5a, 0x97, 0xd6, 0x71, 0xd4, 0xee, 0x25, - 0x1d, 0x0d, 0x3d, 0xf8, 0x75, 0xfa, 0xda, 0x9d, 0x1f, 0x37, 0x80, 0x72, - 0x00, 0x37, 0xf8, 0x2c, 0x88, 0x01, 0x21, 0x72, 0xfd, 0x84, 0xf4, 0xda, - 0x69, 0xe4, 0xde, 0x52, 0x3c, 0xbe, 0x5f, 0x9d, 0xca, 0x9a, 0x61, 0x87, - 0xf9, 0xb5, 0x57, 0x81, 0x00, 0x2b, 0x7e, 0xb8, 0x8b, 0xa9, 0x76, 0xca, - 0xa4, 0xe4, 0x84, 0x20, 0x38, 0x03, 0x49, 0x85, 0x06, 0x9c, 0x91, 0x7a, - 0xcc, 0x21, 0x64, 0x15, 0xbe, 0x91, 0xdd, 0x00, 0x2e, 0x18, 0x9f, 0x42, - 0x9b, 0x7f, 0xa9, 0x64, 0x43, 0x98, 0xbc, 0xe1, 0x5d, 0x59, 0x3e, 0x87, - 0xe3, 0x7b, 0xd9, 0x34, 0x29, 0x0e, 0x61, 0x88, 0xb3, 0xea, 0xa4, 0x51, - 0xfb, 0x7e, 0x25, 0x11, 0xe3, 0x14, 0x5f, 0x16, 0x30, 0x0f, 0xcf, 0x53, - 0xab, 0x0a, 0x2b, 0x2d, 0x3f, 0x97, 0x41, 0xc0, 0x07, 0x61, 0x57, 0xb1, - 0xa0, 0x21, 0xa7, 0x1a, 0x2d, 0x6a, 0xc3, 0x9f, 0xf6, 0xda, 0x09, 0x5d, - 0xe3, 0x80, 0x4b, 0x59, 0xd9, 0xa8, 0x8f, 0xa1, 0x98, 0x60, 0x4c, 0xe1, - 0x3e, 0xac, 0x97, 0xa8, 0x13, 0x85, 0x41, 0xdf, 0x0c, 0x6a, 0xfc, 0xec, - 0x1b, 0xb6, 0x98, 0x89, 0x46, 0xeb, 0xba, 0x1b, 0xec, 0xd1, 0x1c, 0x2e, - 0x5c, 0xb9, 0x76, 0x44, 0x41, 0x3c, 0x4c, 0xa0, 0xdc, 0xd1, 0x80, 0xa5, - 0xfd, 0x1b, 0x4c, 0xf6, 0x20, 0xdb, 0xb4, 0xbb, 0x0e, 0xc1, 0x14, 0x85, - 0xad, 0x1b, 0x7f, 0x3e, 0xa3, 0x0b, 0xac, 0x5d, 0x69, 0x62, 0x83, 0x67, - 0xac, 0x9c, 0xf2, 0x46, 0xb2, 0x99, 0x6e, 0xe2, 0x40, 0xb8, 0xab, 0xe5, - 0x1f, 0xeb, 0xe0, 0xd6, 0x73, 0x6a, 0x53, 0x69, 0x42, 0xc8, 0x2d, 0x11, - 0x3a, 0x2f, 0xdf, 0x1d, 0x02, 0x92, 0x62, 0xe0, 0x78, 0xb1, 0x38, 0x27, - 0x94, 0xd8, 0x30, 0xeb, 0x50, 0xdd, 0xa7, 0xa2, 0xc6, 0x57, 0x10, 0x4b, - 0xcf, 0x15, 0xca, 0x7b, 0x80, 0xfd, 0x5c, 0x41, 0x15, 0x8d, 0x6d, 0x68, - 0x7e, 0xc0, 0x03, 0x8a, 0x70, 0xfa, 0x6d, 0xbb, 0x32, 0x04, 0xa4, 0x95, - 0x4d, 0x19, 0xce, 0x13, 0xb7, 0x29, 0x7b, 0x6d, 0x1f, 0xbc, 0xc4, 0x36, - 0x78, 0x55, 0x0b, 0x88, 0x75, 0xc4, 0x16, 0xd3, 0xa0, 0xf9, 0xfd, 0xf2, - 0xee, 0x23, 0xe6, 0x18, 0x13, 0x5c, 0xf2, 0x6d, 0x64, 0x62, 0x19, 0xef, - 0xdf, 0x80, 0xae, 0x4f, 0x07, 0x9a, 0x21, 0x58, 0xe1, 0xce, 0x28, 0xa8, - 0xfe, 0x8e, 0x6f, 0x39, 0x94, 0xaa, 0x9a, 0x06, 0xb9, 0x0c, 0xbb, 0x12, - 0x00, 0xb7, 0xab, 0x65, 0xf8, 0x42, 0x92, 0x99, 0x01, 0x48, 0x83, 0x70, - 0xc2, 0x89, 0xf2, 0xd1, 0xe4, 0x44, 0xb6, 0xf9, 0x14, 0x53, 0x9c, 0x6c, - 0x0a, 0x52, 0xe2, 0xce, 0x28, 0xda, 0x43, 0xbc, 0x21, 0x1e, 0xab, 0x39, - 0x1d, 0xfc, 0x0a, 0xb6, 0x89, 0xc9, 0x58, 0x26, 0x74, 0x96, 0x68, 0xde, - 0xe2, 0x1b, 0x1c, 0x15, 0x20, 0x7b, 0x72, 0xf5, 0x4f, 0x9b, 0x67, 0x7d, - 0x90, 0xb2, 0x79, 0xbf, 0xec, 0x78, 0x63, 0xcc, 0x9b, 0x88, 0xf6, 0x73, - 0x55, 0xe4, 0xde, 0x64, 0x2a, 0xab, 0xdc, 0xd0, 0xd0, 0xd9, 0xc5, 0xc2, - 0xd3, 0xae, 0x82, 0xb4, 0x5b, 0xd8, 0xc3, 0x39, 0xea, 0x34, 0xaa, 0x82, - 0xcb, 0xe3, 0xb8, 0xd4, 0x35, 0x8d, 0xf3, 0x08, 0x12, 0xbb, 0x51, 0x16, - 0x60, 0x24, 0xf9, 0x5c, 0xbf, 0x91, 0x06, 0x9a, 0x7c, 0x64, 0x27, 0xaf, - 0x53, 0x76, 0xf0, 0xd5, 0x4b, 0x2b, 0x0b, 0xe9, 0x29, 0xa0, 0x1f, 0x4d, - 0xb7, 0x07, 0x90, 0xf0, 0x81, 0x4b, 0x88, 0x63, 0x93, 0x81, 0x82, 0x1b, - 0xbe, 0x57, 0xa1, 0x49, 0xf8, 0x1f, 0x2e, 0x96, 0xe3, 0xd7, 0xb7, 0x81, - 0x44, 0x4b, 0x41, 0x7f, 0xc9, 0x1c, 0x38, 0x77, 0xc7, 0x38, 0x05, 0xcb, - 0x0c, 0x6a, 0x84, 0x74, 0x33, 0x30, 0xdb, 0xa4, 0xef, 0x4a, 0x63, 0xa2, - 0x58, 0x39, 0xe8, 0xaf, 0xb8, 0xf2, 0xdb, 0x12, 0xdb, 0x42, 0x56, 0xab, - 0xb7, 0x6d, 0xc3, 0xfd, 0xdc, 0x08, 0x80, 0xfd, 0xc5, 0xc5, 0x59, 0xab, - 0x72, 0xb9, 0x9e, 0x03, 0xc1, 0xf6, 0x3b, 0x92, 0x00, 0xa4, 0xba, 0x3d, - 0xb5, 0x9f, 0xed, 0xbe, 0xd7, 0xc5, 0x6a, 0x23, 0x1f, 0x62, 0x6f, 0x45, - 0x49, 0x43, 0xee, 0x49, 0x6d, 0x2c, 0xd5, 0x4c, 0x0f, 0x54, 0xb9, 0x57, - 0x39, 0x74, 0xad, 0x54, 0x31, 0x47, 0xed, 0x7f, 0x25, 0x07, 0x8a, 0x47, - 0xaf, 0x85, 0x5b, 0x54, 0xa9, 0xd1, 0x3d, 0x5d, 0x1f, 0x0b, 0x8d, 0xee, - 0x17, 0x50, 0xae, 0xb0, 0xfc, 0x5c, 0x75, 0x95, 0xad, 0xb8, 0xe5, 0xf8, - 0x50, 0xc5, 0xd3, 0x7a, 0xa3, 0xc1, 0x59, 0x17, 0xea, 0xa4, 0xd0, 0x87, - 0xcd, 0x0d, 0xc2, 0xb8, 0xbc, 0x8f, 0x8c, 0x5a, 0xb7, 0x33, 0x76, 0xf5, - 0x6b, 0xc3, 0xfc, 0x99, 0x65, 0x78, 0x91, 0x7b, 0x33, 0x73, 0x7c, 0x41, - 0x9c, 0xdf, 0xad, 0x41, 0x75, 0x76, 0xe9, 0xa9, 0xc4, 0x8d, 0x56, 0xb9, - 0x2a, 0x9e, 0xa3, 0x22, 0x2a, 0xed, 0x37, 0xad, 0xfa, 0x4f, 0x26, 0xb8, - 0x5a, 0x35, 0x57, 0x83, 0xc4, 0xcd, 0x5f, 0xbe, 0x75, 0xed, 0x2f, 0x62, - 0x9d, 0x58, 0x5f, 0x48, 0x4d, 0x48, 0x1f, 0x9e, 0x73, 0x6a, 0x5a, 0x85, - 0x12, 0xee, 0x47, 0xac, 0x84, 0x4f, 0x15, 0xb0, 0x5e, 0xe7, 0xbf, 0x35, - 0xde, 0xb2, 0xf7, 0x19, 0x45, 0x8f, 0x0a, 0xd7, 0x37, 0x7e, 0x38, 0xcc, - 0x75, 0x65, 0x70, 0xfb, 0xef, 0x1b, 0x24, 0x0e, 0x4a, 0xc6, 0x80, 0x5d, - 0x4c, 0x3a, 0xf6, 0x71, 0x61, 0x6a, 0x56, 0xe9, 0x0b, 0x6f, 0x5e, 0xb6, - 0x7f, 0x66, 0xd9, 0x53, 0x61, 0xfc, 0x43, 0x94, 0x1f, 0xeb, 0x74, 0x81, - 0x39, 0x03, 0xbe, 0xe5, 0xcc, 0x6d, 0xc2, 0xc2, 0x31, 0xd2, 0x15, 0x44, - 0xcb, 0x35, 0x90, 0x8b, 0xa7, 0x81, 0xc2, 0xb9, 0x4c, 0x6f, 0x40, 0x26, - 0x4b, 0xf8, 0x80, 0x05, 0x10, 0x9c, 0x90, 0x85, 0xb3, 0x17, 0xa1, 0x89, - 0xa6, 0x44, 0x36, 0xc5, 0xdf, 0x78, 0xb2, 0x82, 0xdb, 0x92, 0x7f, 0x6d, - 0x58, 0x1f, 0xa1, 0xf5, 0x52, 0xdc, 0xf2, 0x4f, 0x70, 0xfa, 0xad, 0x42, - 0xf5, 0x81, 0x38, 0x44, 0xfb, 0x29, 0x71, 0x97, 0xe6, 0xbb, 0xb2, 0x02, - 0x91, 0xe6, 0xc8, 0xd3, 0xfe, 0x95, 0x5e, 0x87, 0xb8, 0xbb, 0x8b, 0xdc, - 0xb5, 0x1a, 0x0d, 0x0b, 0xaa, 0x21, 0xac, 0xa2, 0x86, 0xa4, 0xc0, 0xe9, - 0x4d, 0xd8, 0xb9, 0x28, 0xa8, 0x82, 0xa3, 0xbb, 0xed, 0xbe, 0xed, 0xbc, - 0x6c, 0x54, 0x3b, 0x80, 0xf2, 0xe4, 0xe6, 0x0d, 0x9c, 0xf3, 0x8c, 0xe2, - 0x7d, 0xb1, 0xa6, 0xb0, 0x07, 0xae, 0x13, 0xca, 0x11, 0x83, 0xc8, 0x6b, - 0x59, 0x01, 0xb2, 0x44, 0xda, 0x80, 0xf7, 0xe5, 0x6a, 0xbd, 0xcc, 0x33, - 0x20, 0xe3, 0xac, 0x8b, 0x07, 0xd5, 0x3b, 0xc6, 0x5c, 0x18, 0xba, 0xac, - 0xe7, 0x90, 0x81, 0xd8, 0xcd, 0x4d, 0xc6, 0xfa, 0xb3, 0x4e, 0x05, 0xb1, - 0xcb, 0xc8, 0xb7, 0x90, 0x94, 0x17, 0x1f, 0xfc, 0x8b, 0xad, 0x8b, 0x35, - 0x1c, 0x33, 0x3f, 0x5a, 0x6d, 0xee, 0x5b, 0x48, 0x75, 0x8e, 0xbf, 0xc6, - 0xc2, 0xd9, 0xbc, 0x0c, 0xd8, 0x20, 0xd0, 0xe9, 0x68, 0x1a, 0x7d, 0xa9, - 0xcc, 0x03, 0x63, 0x2b, 0x67, 0x70, 0xd6, 0x41, 0x3b, 0xd7, 0xe2, 0x92, - 0x4d, 0x7b, 0xca, 0x18, 0x2b, 0x2e, 0xf7, 0x5e, 0x34, 0xb6, 0xe6, 0x5a, - 0xb3, 0xae, 0xc8, 0x3d, 0xbd, 0xf3, 0xfb, 0x02, 0x34, 0xc4, 0xd1, 0xb2, - 0xee, 0xe6, 0xcc, 0xfd, 0xbc, 0xe8, 0xaf, 0x80, 0x70, 0x34, 0x70, 0x45, - 0x8b, 0x33, 0x64, 0xd1, 0x60, 0xd3, 0x27, 0x4f, 0x2c, 0xf8, 0xb3, 0xa9, - 0xf6, 0x96, 0x75, 0x5f, 0x49, 0x4f, 0x64, 0xa5, 0x25, 0x9d, 0xa7, 0xc7, - 0x53, 0xc4, 0x54, 0xdb, 0x86, 0xaa, 0x9f, 0xc9, 0xf4, 0x60, 0xf9, 0xd7, - 0xf5, 0x45, 0xc2, 0x2d, 0xcf, 0x54, 0xe2, 0x1d, 0x1a, 0x52, 0xae, 0x3c, - 0xd0, 0x9e, 0x9a, 0xd5, 0x00, 0x63, 0xd5, 0xbd, 0x69, 0x79, 0xac, 0xe5, - 0xb3, 0xab, 0xb7, 0x98, 0xa9, 0x72, 0xb4, 0x03, 0x46, 0xc9, 0x16, 0x70, - 0x2b, 0x22, 0xc8, 0xbf, 0xd5, 0x7a, 0xe3, 0x74, 0xe5, 0x2e, 0xa4, 0x14, - 0x57, 0x62, 0x9e, 0x11, 0xf9, 0x58, 0xc4, 0x10, 0xcb, 0x6d, 0x90, 0x1a, - 0xe0, 0xe1, 0x36, 0x9d, 0x2c, 0xfb, 0x79, 0xad, 0xd0, 0x96, 0xa3, 0xe9, - 0x2a, 0x97, 0xd0, 0x54, 0xa3, 0xce, 0xf4, 0x8a, 0x90, 0xcf, 0x2e, 0xa9, - 0x73, 0x6a, 0x43, 0x87, 0xce, 0xf2, 0x9d, 0x61, 0xb3, 0x48, 0x2e, 0xa1, - 0x61, 0xe5, 0x66, 0xa6, 0x8f, 0xd1, 0x1d, 0x4c, 0xc5, 0xae, 0x61, 0xbc, - 0xf8, 0x12, 0x15, 0xc4, 0xe6, 0x22, 0x0b, 0x39, 0x9c, 0x1f, 0x03, 0x3f, - 0x54, 0xe1, 0x60, 0x1c, 0x94, 0x81, 0xae, 0x40, 0xdc, 0x42, 0xbe, 0x36, - 0x5a, 0x20, 0x1c, 0x57, 0x99, 0xbb, 0x28, 0xcd, 0x7c, 0x95, 0x9d, 0x14, - 0x01, 0x8f, 0x0a, 0x68, 0x32, 0x99, 0x67, 0xef, 0xd8, 0x76, 0xca, 0x99, - 0xd9, 0x41, 0x3a, 0x1f, 0x85, 0xb3, 0x3c, 0x2a, 0x53, 0xbf, 0x2f, 0x10, - 0xc9, 0xeb, 0x67, 0x2b, 0x08, 0x3f, 0x0b, 0xf9, 0x27, 0x72, 0xec, 0xc0, - 0x9d, 0x4a, 0x88, 0xdd, 0xe7, 0x8f, 0xd2, 0x5f, 0xb0, 0xf2, 0xd8, 0xa1, - 0x31, 0x2a, 0xa1, 0x5a, 0x8b, 0x06, 0xee, 0x32, 0x6f, 0xbb, 0x61, 0xf5, - 0xca, 0xe3, 0xbc, 0x50, 0xfa, 0x69, 0xee, 0xc1, 0x5b, 0x5b, 0x86, 0xa0, - 0xac, 0x59, 0x1c, 0xff, 0x28, 0x93, 0x00, 0x8a, 0x74, 0x98, 0x2e, 0xec, - 0x9d, 0x23, 0x13, 0xcf, 0xae, 0x98, 0x5f, 0x5e, 0xed, 0x6f, 0x19, 0xa6, - 0xce, 0xeb, 0x64, 0x89, 0x46, 0x55, 0x74, 0x3c, 0xb1, 0xfd, 0x0c, 0x80, - 0x43, 0xa2, 0x92, 0x5f, 0xb4, 0x7d, 0x35, 0x95, 0xdb, 0x69, 0x7a, 0xc0, - 0x5c, 0x51, 0x77, 0x0b, 0x9a, 0x68, 0x4f, 0xce, 0x82, 0xf4, 0x5f, 0x15, - 0xf2, 0x38, 0x45, 0x93, 0x0a, 0xf0, 0xab, 0xc0, 0x15, 0x9f, 0xa5, 0xcf, - 0xac, 0x97, 0x4d, 0x6e, 0xa7, 0xb6, 0x60, 0x75, 0x50, 0x96, 0x16, 0xf9, - 0x11, 0xa3, 0x0a, 0x7a, 0x60, 0x18, 0x37, 0x00, 0x4d, 0x70, 0x63, 0xf0, - 0x21, 0x26, 0x21, 0x01, 0xcf, 0xa2, 0x7e, 0x41, 0x38, 0x60, 0xdb, 0x7a, - 0x96, 0x5d, 0x90, 0xe8, 0x5d, 0xd7, 0xe1, 0x0f, 0x47, 0x1d, 0x60, 0x18, - 0x8d, 0x81, 0xb7, 0x24, 0x39, 0x3c, 0x5b, 0x54, 0xdd, 0x4e, 0xed, 0xb3, - 0xa6, 0xb0, 0xb0, 0x8d, 0x9d, 0x11, 0xcb, 0x81, 0x5d, 0xcd, 0x97, 0xe0, - 0xf2, 0x86, 0x4f, 0xa0, 0x8f, 0xc4, 0x18, 0xc5, 0x96, 0xfe, 0x12, 0x3a, - 0xac, 0x36, 0xe5, 0xee, 0xa4, 0x83, 0xb7, 0x5c, 0x7c, 0xc6, 0x3d, 0xa2, - 0x93, 0x72, 0xeb, 0xd0, 0x2b, 0x70, 0xa8, 0x7a, 0x44, 0xdc, 0x25, 0x8a, - 0xba, 0xcc, 0x32, 0xad, 0x98, 0xef, 0xab, 0x86, 0xcd, 0xdb, 0x23, 0xf0, - 0xf2, 0xf7, 0x78, 0x8a, 0x25, 0x38, 0x97, 0x5d, 0x8f, 0x88, 0xb7, 0x0b, - 0xaf, 0xc5, 0xe6, 0xf6, 0xa7, 0x18, 0xbf, 0x7d, 0x8c, 0x7f, 0x51, 0xb4, - 0x14, 0xe1, 0x03, 0x03, 0x02, 0xa6, 0x7a, 0xd6, 0xe1, 0xcd, 0xca, 0xc0, - 0x32, 0xa7, 0xc7, 0x2b, 0x3f, 0x71, 0x4a, 0x5e, 0x8a, 0x2c, 0x14, 0x3a, - 0x76, 0xe5, 0x50, 0x86, 0x62, 0xae, 0x17, 0x31, 0x96, 0x5e, 0x21, 0x90, - 0x00, 0xc8, 0x84, 0x41, 0x4a, 0x04, 0x06, 0x8b, 0x3d, 0xf5, 0xb2, 0x0c, - 0x47, 0xaf, 0x47, 0x55, 0x95, 0xa1, 0x40, 0x5a, 0xfe, 0x0e, 0x7f, 0x79, - 0x14, 0x7c, 0x67, 0xa2, 0x4c, 0xb8, 0xee, 0x36, 0x77, 0x52, 0x48, 0x2f, - 0x7d, 0x29, 0xb7, 0x1b, 0x65, 0x7e, 0xee, 0x20, 0xd6, 0x20, 0x9e, 0x77, - 0xeb, 0x9f, 0x58, 0xd9, 0xa5, 0x10, 0xe3, 0xf6, 0xd5, 0x3e, 0x33, 0xec, - 0xfd, 0x0a, 0xbb, 0x94, 0xb1, 0x14, 0x58, 0x1f, 0xae, 0x71, 0x4c, 0x4e, - 0x76, 0xbd, 0x1d, 0x05, 0x38, 0x8d, 0xf3, 0xa0, 0x43, 0xb1, 0x18, 0xd0, - 0xb8, 0xcf, 0xbf, 0x90, 0x2d, 0xf7, 0x91, 0xfd, 0xb6, 0x51, 0x3e, 0xd8, - 0x23, 0x40, 0x4d, 0x03, 0x64, 0x9c, 0x84, 0xa1, 0x80, 0x50, 0xb8, 0xcc, - 0x47, 0x82, 0x5d, 0xae, 0x4e, 0x39, 0x22, 0x64, 0xc3, 0x87, 0x5a, 0x55, - 0x46, 0x46, 0x8a, 0xbd, 0x63, 0xac, 0x96, 0x82, 0xc4, 0x2e, 0xbb, 0xf8, - 0x32, 0x74, 0x45, 0x56, 0xdb, 0x79, 0x78, 0xe9, 0xd1, 0xd6, 0x9d, 0x5f, - 0x57, 0x97, 0xa0, 0xee, 0x32, 0x09, 0xe8, 0x27, 0x02, 0xd5, 0xfe, 0xb1, - 0x88, 0xe6, 0x0a, 0xdb, 0x13, 0x16, 0x66, 0x0e, 0xe9, 0xa8, 0x39, 0x9c, - 0xcd, 0xe0, 0x55, 0xa3, 0x85, 0x11, 0x62, 0x12, 0xa0, 0xb2, 0xcc, 0xdb, - 0x83, 0x3c, 0xb9, 0x4f, 0x02, 0x7d, 0x03, 0x25, 0x09, 0x5f, 0x05, 0x64, - 0xb9, 0x1a, 0x54, 0xc9, 0x48, 0xc8, 0xde, 0x2e, 0xae, 0x13, 0x8e, 0x86, - 0x5c, 0xbb, 0x77, 0x95, 0xc4, 0x4d, 0xb7, 0x37, 0xbc, 0x1f, 0x08, 0x08, - 0xbb, 0xc7, 0x9d, 0x1c, 0x4c, 0x81, 0x72, 0xa8, 0x9e, 0x80, 0xba, 0xb0, - 0xe8, 0x37, 0x93, 0x85, 0xb5, 0x7d, 0x81, 0x04, 0xc0, 0xd8, 0x17, 0x2b, - 0x86, 0xbe, 0xeb, 0x91, 0x46, 0x01, 0x70, 0xc9, 0xa2, 0x35, 0xa9, 0x58, - 0x92, 0xe8, 0x3a, 0xc6, 0x5c, 0xf7, 0xc8, 0x0a, 0x85, 0x04, 0x49, 0x23, - 0x6c, 0xbf, 0xb4, 0x30, 0x2c, 0xf2, 0xe5, 0xc8, 0xbe, 0xc4, 0x97, 0xdd, - 0xeb, 0x18, 0xc5, 0xc7, 0xe7, 0x66, 0x1e, 0x75, 0xa1, 0x12, 0xea, 0xd0, - 0x57, 0xbc, 0x53, 0x01, 0x85, 0x85, 0x80, 0xac, 0x19, 0x5d, 0x1a, 0x00, - 0x42, 0x54, 0x23, 0xe1, 0x1d, 0x48, 0x5a, 0xcf, 0x00, 0xeb, 0x53, 0xc6, - 0x91, 0x66, 0xff, 0x5f, 0x26, 0x8e, 0xc3, 0x21, 0x29, 0xc4, 0xa6, 0xfa, - 0xc3, 0xa6, 0xf0, 0x45, 0x3a, 0x1e, 0x4e, 0x59, 0x7e, 0x4c, 0x1e, 0xec, - 0xc5, 0x49, 0x1f, 0x03, 0x3c, 0x1b, 0x77, 0xeb, 0x43, 0x9a, 0xc2, 0x09, - 0x59, 0xf8, 0x66, 0x57, 0x8a, 0x01, 0x40, 0x56, 0xfa, 0xcf, 0xb8, 0x24, - 0xc1, 0x7c, 0x41, 0xd0, 0xc2, 0x57, 0x61, 0xb6, 0xd9, 0x69, 0x21, 0x7e, - 0x2a, 0x04, 0xd8, 0xfc, 0x50, 0x52, 0x68, 0x53, 0x94, 0xe1, 0xde, 0x31, - 0xd5, 0xd6, 0xe7, 0x7c, 0xd7, 0x4d, 0x39, 0xab, 0x37, 0x8f, 0xa1, 0x2c, - 0x09, 0x39, 0xf2, 0x2f, 0x0f, 0xdd, 0x5b, 0xa2, 0x82, 0x5e, 0xd2, 0x7c, - 0x8e, 0x89, 0x8a, 0xfe, 0x9e, 0x6e, 0x77, 0xda, 0x9d, 0xe7, 0xc5, 0xd0, - 0x56, 0x17, 0xc2, 0xac, 0x9f, 0x92, 0x5d, 0xf4, 0x31, 0xea, 0x94, 0x4c, - 0xb7, 0x8c, 0xd5, 0x9d, 0xc4, 0xcb, 0xf2, 0x0f, 0x5a, 0xd0, 0x0b, 0x70, - 0x8c, 0x55, 0x2d, 0x8e, 0x84, 0x1f, 0x52, 0xd8, 0xdc, 0xd0, 0xa0, 0xe1, - 0x69, 0x4a, 0xcb, 0x29, 0x58, 0xd4, 0xd3, 0xcb, 0xa5, 0x4a, 0x97, 0x78, - 0xff, 0xf5, 0x83, 0x0b, 0x35, 0x50, 0x18, 0xcf, 0xa2, 0x70, 0x9a, 0xf8, - 0x7f, 0x73, 0x30, 0xd6, 0xba, 0xb8, 0x48, 0x14, 0x5d, 0x12, 0x11, 0x8f, - 0xdb, 0x23, 0x72, 0x0b, 0xfd, 0x73, 0x7a, 0xdb, 0xa2, 0xd4, 0x49, 0xb4, - 0x42, 0xa9, 0xb5, 0xd9, 0xcc, 0x06, 0x9c, 0x29, 0x7a, 0xdc, 0x46, 0xf9, - 0x03, 0x90, 0x90, 0x21, 0xb8, 0x9a, 0xb5, 0xf7, 0xb2, 0xfc, 0xe5, 0xcf, - 0xfd, 0x6d, 0x43, 0xd8, 0x53, 0x6f, 0x0e, 0xe1, 0x3e, 0xe0, 0x3c, 0x65, - 0xdd, 0xb0, 0xba, 0x65, 0x6e, 0xc2, 0x96, 0x01, 0x7b, 0x5a, 0xf1, 0x5e, - 0x0b, 0x44, 0x4a, 0x94, 0xfc, 0x93, 0x77, 0x64, 0x57, 0xef, 0xb3, 0xd2, - 0xc2, 0xc8, 0xb5, 0xa8, 0x27, 0xc6, 0xa5, 0x37, 0x88, 0x24, 0xf7, 0xd9, - 0xf9, 0x03, 0xfd, 0x3d, 0x8e, 0x6b, 0x6d, 0xd8, 0x31, 0x11, 0xd8, 0xb9, - 0x38, 0xc6, 0x0a, 0x6a, 0xa2, 0x4e, 0x84, 0x87, 0x07, 0xeb, 0x18, 0x8e, - 0xc7, 0x48, 0x0a, 0xd0, 0xe7, 0x86, 0xab, 0x29, 0xd5, 0xca, 0x7f, 0xe5, - 0xcd, 0x5f, 0xb1, 0xc6, 0x83, 0x6a, 0x32, 0xa7, 0xbb, 0xbd, 0xb8, 0x28, - 0x94, 0x08, 0xd7, 0x26, 0x3b, 0x3a, 0xdb, 0xd5, 0xfe, 0x7d, 0x1d, 0x05, - 0x14, 0x58, 0x43, 0xac, 0x07, 0x17, 0x7b, 0x2c, 0x9d, 0x35, 0xc8, 0x71, - 0xb6, 0x69, 0x2c, 0x15, 0xce, 0xd1, 0x6f, 0x67, 0x4d, 0x01, 0x49, 0xee, - 0x15, 0x0d, 0xce, 0xfb, 0x8d, 0x0f, 0xcd, 0xc9, 0xd3, 0x54, 0x41, 0x04, - 0xb4, 0xc9, 0xe5, 0x38, 0xf5, 0x1b, 0xed, 0x52, 0x55, 0xea, 0x69, 0x68, - 0x64, 0x96, 0x14, 0x2f, 0xa1, 0x0d, 0xd9, 0xe5, 0x4b, 0x60, 0x42, 0x8a, - 0xe7, 0xfb, 0x4f, 0xd7, 0x45, 0xa8, 0x11, 0x0c, 0xd0, 0xb8, 0x54, 0x98, - 0x87, 0x1c, 0x0a, 0xcb, 0x3d, 0x29, 0x4d, 0x3f, 0x9e, 0xd5, 0x1e, 0x07, - 0x68, 0xc2, 0x8e, 0xc4, 0x38, 0x68, 0x83, 0x07, 0x35, 0x45, 0x2c, 0x29, - 0xce, 0x4a, 0xf6, 0xc2, 0xe6, 0xb4, 0x14, 0xd1, 0x42, 0x66, 0x38, 0x48, - 0x02, 0x17, 0x11, 0x29, 0xa1, 0x7f, 0x4d, 0x4b, 0x03, 0x1f, 0x27, 0xb0, - 0x80, 0x99, 0xba, 0x94, 0x3e, 0xa1, 0x08, 0xd0, 0x78, 0x52, 0x64, 0x35, - 0x92, 0x77, 0xaa, 0xc3, 0x86, 0x7d, 0x9d, 0xcc, 0xd9, 0xb2, 0xf1, 0xa0, - 0x5f, 0x6e, 0x15, 0x9f, 0x9d, 0x74, 0x29, 0x8c, 0xce, 0x4c, 0x26, 0xac, - 0x65, 0xd4, 0x9f, 0x5b, 0x23, 0x3d, 0x4e, 0x0b, 0x44, 0xe1, 0x6e, 0xb4, - 0x8c, 0xc2, 0xa1, 0x95, 0x22, 0x67, 0x5e, 0x21, 0x02, 0x89, 0x48, 0x90, - 0x9e, 0x29, 0x23, 0x4f, 0xbb, 0xbb, 0x42, 0x9e, 0x9f, 0xd4, 0xb4, 0x18, - 0x45, 0xf8, 0xae, 0x8d, 0x13, 0x83, 0x1b, 0x93, 0x15, 0x89, 0xf2, 0x50, - 0x5b, 0x7d, 0x3e, 0x70, 0x32, 0xac, 0x26, 0x87, 0xa8, 0x77, 0x7a, 0x9e, - 0xe3, 0xcf, 0xce, 0xc7, 0x93, 0xcc, 0x4e, 0x14, 0x1c, 0xa5, 0xe0, 0x4a, - 0xaa, 0x52, 0x5f, 0xbb, 0x1f, 0xec, 0xca, 0x6e, 0x8c, 0x97, 0xd4, 0xb7, - 0x10, 0xf1, 0xee, 0x22, 0x84, 0x8a, 0x37, 0xe3, 0xec, 0xb4, 0x4d, 0xa3, - 0xbf, 0x6e, 0xd3, 0x1e, 0x3d, 0x92, 0x0a, 0x59, 0x0e, 0x66, 0x38, 0xf3, - 0xd9, 0x49, 0xbd, 0x33, 0x7b, 0x87, 0x86, 0x95, 0x10, 0xe7, 0xf6, 0x2d, - 0xd5, 0x3f, 0x09, 0x56, 0xf1, 0xeb, 0xed, 0x34, 0x97, 0xa2, 0x49, 0xd2, - 0xa0, 0x05, 0xa3, 0x20, 0xc6, 0x79, 0xec, 0x69, 0x2c, 0x16, 0x0f, 0x5b, - 0x6d, 0x6c, 0x82, 0x51, 0x51, 0x07, 0xdf, 0xfc, 0x65, 0xc0, 0x15, 0x29, - 0x72, 0xc8, 0x40, 0xe4, 0x3e, 0x31, 0xba, 0x6b, 0x6d, 0x7e, 0xf7, 0x4b, - 0xaa, 0x8b, 0x87, 0xe1, 0x30, 0xe6, 0x93, 0xb4, 0x0f, 0x1a, 0xcd, 0x36, - 0x94, 0xa2, 0xf1, 0x5e, 0x7f, 0x7f, 0x42, 0x75, 0x61, 0xa0, 0xb6, 0xda, - 0xa8, 0xa1, 0x8f, 0x40, 0x5e, 0xfe, 0x2c, 0x1b, 0x21, 0xb7, 0x92, 0xc6, - 0x9b, 0x9c, 0xe1, 0x6b, 0x63, 0x0e, 0x49, 0x09, 0x69, 0x57, 0x07, 0x11, - 0x6d, 0x5e, 0x07, 0x9a, 0x6c, 0xfa, 0x39, 0xc1, 0x04, 0x29, 0x86, 0x92, - 0x51, 0x1d, 0x59, 0xa8, 0x00, 0xc3, 0x85, 0x7d, 0xce, 0x06, 0x2b, 0x8a, - 0x3c, 0x02, 0x58, 0x32, 0x28, 0x2b, 0x2f, 0x9b, 0x12, 0x08, 0x15, 0x47, - 0x32, 0x73, 0xf4, 0x95, 0x27, 0x34, 0xe4, 0xd6, 0x70, 0xb4, 0x69, 0x1f, - 0x30, 0xb9, 0x71, 0x37, 0xe4, 0x48, 0x27, 0xd2, 0x39, 0xb4, 0x8d, 0x17, - 0x4d, 0xd4, 0x31, 0xa5, 0x95, 0x8c, 0x77, 0xaa, 0x5c, 0x7d, 0x9d, 0x10, - 0x37, 0xb8, 0xc7, 0x04, 0x27, 0xad, 0x0f, 0x11, 0x9e, 0x7a, 0x07, 0xad, - 0x8d, 0x54, 0x95, 0x4a, 0x8e, 0xf4, 0x8d, 0x92, 0x8f, 0x2c, 0x9d, 0x93, - 0x7a, 0xdd, 0x50, 0x38, 0x3f, 0xe2, 0xa3, 0x37, 0xd5, 0xb8, 0xa5, 0x90, - 0x14, 0x2b, 0x2f, 0x16, 0x2d, 0x0f, 0xbc, 0x56, 0xd8, 0x3c, 0xf5, 0x7f, - 0xf5, 0x77, 0xf1, 0x34, 0x5a, 0x74, 0x71, 0xad, 0x67, 0xae, 0xa3, 0x6b, - 0x39, 0x5f, 0xdb, 0xc0, 0xcb, 0x3e, 0xd8, 0x83, 0x21, 0x8b, 0x4b, 0x1c, - 0x5a, 0xf2, 0xb5, 0xc8, 0x7a, 0x58, 0x67, 0xf1, 0x52, 0x3a, 0x5b, 0x49, - 0xc3, 0x57, 0xa6, 0x58, 0xc6, 0x92, 0xa2, 0xac, 0xe0, 0xde, 0x6a, 0x28, - 0xc8, 0xb9, 0x07, 0x30, 0x58, 0x82, 0x64, 0x3a, 0x52, 0x5a, 0x08, 0xfe, - 0x43, 0xe3, 0xda, 0x1a, 0xa8, 0xce, 0x4d, 0x4b, 0xcc, 0x63, 0x60, 0x97, - 0x6b, 0xb2, 0xbd, 0x26, 0xa9, 0x08, 0x5e, 0xec, 0x4e, 0xaa, 0xd9, 0x54, - 0x76, 0x3c, 0x57, 0x2a, 0x15, 0x92, 0x87, 0xc9, 0xe3, 0xfa, 0x14, 0xa3, - 0x9b, 0xb7, 0x3b, 0xd1, 0x1d, 0x42, 0x5a, 0x98, 0x98, 0x67, 0x41, 0x17, - 0x8b, 0x96, 0x64, 0x07, 0xb8, 0x34, 0x32, 0x25, 0x20, 0x2a, 0x6d, 0x4b, - 0x34, 0x53, 0x4b, 0x28, 0x7b, 0x84, 0xbf, 0xc7, 0xcf, 0xee, 0x7f, 0x41, - 0x3c, 0xef, 0xca, 0x55, 0xfc, 0x82, 0x65, 0xe2, 0x28, 0x31, 0xcb, 0x24, - 0x8c, 0x0f, 0x1d, 0x40, 0x5d, 0xef, 0x79, 0xb3, 0x03, 0xdc, 0x8f, 0x1f, - 0x8e, 0xcb, 0xd7, 0x61, 0xfc, 0xf3, 0x41, 0x01, 0x6b, 0x20, 0xf5, 0x7f, - 0xc4, 0x85, 0x6c, 0x06, 0xf7, 0xbd, 0x50, 0xb1, 0xe0, 0x91, 0xee, 0x98, - 0xf4, 0x30, 0x7c, 0x3c, 0x2c, 0x5e, 0xb2, 0x66, 0xb9, 0xc6, 0x13, 0x24, - 0x36, 0x55, 0xcf, 0xa7, 0xb0, 0xfa, 0x16, 0x2c, 0x3c, 0x18, 0x21, 0xfe, - 0xe0, 0x28, 0xbe, 0x67, 0x05, 0x45, 0x7f, 0xcf, 0x64, 0x55, 0xdf, 0x59, - 0x0b, 0x68, 0x58, 0x41, 0x9e, 0xf0, 0xf4, 0x74, 0x52, 0x32, 0x51, 0x5a, - 0xa2, 0xa9, 0xc6, 0xdb, 0x9e, 0x52, 0x29, 0x67, 0xec, 0xe7, 0xeb, 0x12, - 0x06, 0x0d, 0x22, 0xc7, 0xfa, 0xda, 0x5e, 0x5f, 0xf4, 0x16, 0x11, 0xf0, - 0x61, 0x4d, 0x84, 0xe5, 0x77, 0x3e, 0x17, 0x0f, 0xcc, 0xc6, 0xcd, 0x13, - 0x69, 0x36, 0x99, 0x4f, 0x79, 0x1c, 0x67, 0x91, 0xa8, 0xd9, 0xf1, 0x17, - 0x13, 0xaa, 0x23, 0x89, 0x8e, 0x85, 0xb5, 0x01, 0x55, 0x35, 0x41, 0xf5, - 0xa2, 0x39, 0x8c, 0xa1, 0xac, 0x79, 0xcd, 0xf6, 0x27, 0xe5, 0x68, 0xa9, - 0x35, 0x77, 0xfc, 0x5a, 0x0c, 0x7d, 0x19, 0x85, 0x90, 0xee, 0x52, 0xaf, - 0x96, 0x3b, 0x15, 0xfb, 0xa7, 0xa1, 0x3f, 0xcc, 0xaa, 0x8e, 0x8d, 0x7e, - 0x30, 0x93, 0xe8, 0x5d, 0xa1, 0x7c, 0x11, 0x57, 0xb9, 0xf8, 0x26, 0x20, - 0xe6, 0xb0, 0xcf, 0xff, 0xe7, 0x8e, 0x95, 0xcb, 0x5d, 0x0d, 0x1b, 0xf4, - 0xa9, 0x09, 0xb0, 0x07, 0x1d, 0x77, 0x46, 0x5d, 0xcd, 0xb5, 0x28, 0x1a, - 0xd7, 0xe4, 0x7e, 0x02, 0xee, 0xcd, 0x66, 0x1f, 0x6f, 0x90, 0xdd, 0x4a, - 0xe6, 0x66, 0xaf, 0xa9, 0x25, 0xbe, 0xaf, 0xce, 0xea, 0xfa, 0x84, 0x26, - 0x54, 0x76, 0x8c, 0x8a, 0x25, 0xee, 0x8d, 0xf7, 0x25, 0xb6, 0x2f, 0x4e, - 0xdb, 0x46, 0x8d, 0xf2, 0xf9, 0xfe, 0xad, 0xae, 0x4a, 0x29, 0x85, 0x38, - 0x7a, 0xea, 0xf9, 0x8d, 0x15, 0x70, 0x10, 0xf5, 0x12, 0xbc, 0x9a, 0xb1, - 0x27, 0x9a, 0xb0, 0xe7, 0x2f, 0xe4, 0x3e, 0x91, 0x52, 0x3b, 0xed, 0x44, - 0xcc, 0xfe, 0xca, 0xc7, 0xa7, 0xf6, 0xac, 0xce, 0xba, 0x8c, 0x4f, 0xad, - 0x6d, 0xca, 0x20, 0x33, 0xeb, 0xfc, 0xd6, 0xe5, 0x5c, 0xb8, 0x33, 0x71, - 0x2b, 0x5d, 0x3f, 0x66, 0xf5, 0x5a, 0x0d, 0xa6, 0x71, 0x2c, 0x55, 0xf8, - 0xb5, 0x77, 0x79, 0xeb, 0xfd, 0x31, 0xea, 0xcb, 0xae, 0xfc, 0xb2, 0x09, - 0x6f, 0x8e, 0x3d, 0xa0, 0x7e, 0x9d, 0x75, 0x1f, 0x70, 0x93, 0x38, 0xb4, - 0x28, 0xa2, 0xce, 0x7b, 0x6a, 0x92, 0x74, 0xf5, 0xcf, 0xd4, 0x80, 0x9a, - 0x46, 0x07, 0x49, 0x1c, 0x46, 0x42, 0xbb, 0x17, 0x38, 0x51, 0xc0, 0x86, - 0xa4, 0x44, 0xc4, 0x6d, 0xf5, 0x6c, 0x03, 0x6a, 0xc1, 0x52, 0x34, 0xa6, - 0x87, 0x1a, 0x66, 0xb1, 0x90, 0xcc, 0x7f, 0x5f, 0x14, 0xc4, 0xab, 0xcc, - 0xa7, 0xdf, 0x81, 0x3f, 0x98, 0x94, 0x64, 0xfb, 0xc1, 0xb3, 0x04, 0x2c, - 0xb2, 0xf1, 0x00, 0xaf, 0xfc, 0x76, 0x7f, 0x95, 0x2a, 0x14, 0x4b, 0x52, - 0x47, 0x0f, 0xeb, 0xee, 0xda, 0x75, 0x0a, 0x31, 0x87, 0x1f, 0x3b, 0xa7, - 0x9f, 0x14, 0xcf, 0x2a, 0x43, 0xd2, 0x63, 0x8c, 0xff, 0x42, 0xea, 0x03, - 0x21, 0x2c, 0xfc, 0x96, 0x49, 0x98, 0x84, 0x9f, 0x91, 0x9a, 0xd7, 0x3f, - 0x95, 0x27, 0xf9, 0x3c, 0x82, 0xc9, 0x48, 0x66, 0xba, 0xb0, 0x90, 0xc2, - 0x31, 0xde, 0xa3, 0x14, 0x18, 0x4b, 0xf6, 0x6d, 0x62, 0x95, 0x16, 0xe7, - 0x84, 0x63, 0xa4, 0xec, 0xd7, 0x74, 0x65, 0xf7, 0x3a, 0x48, 0x1f, 0xf3, - 0x92, 0xf3, 0x3f, 0x5a, 0xea, 0x8f, 0x82, 0xb9, 0x39, 0x44, 0xdb, 0x71, - 0x73, 0x21, 0x9b, 0x53, 0xb2, 0x14, 0x07, 0x15, 0x04, 0x9a, 0x55, 0x17, - 0xc3, 0xdf, 0x7a, 0x2d, 0xc4, 0x7e, 0xa6, 0x0f, 0xb7, 0xf1, 0x47, 0xb9, - 0x62, 0x0d, 0xb1, 0x92, 0xf0, 0xde, 0x1d, 0xfe, 0xed, 0x90, 0xb3, 0x00, - 0x02, 0x1b, 0x0f, 0x22, 0x0a, 0x3e, 0x9f, 0xbb, 0x94, 0x55, 0xdf, 0x84, - 0x97, 0xe4, 0x03, 0x17, 0xc0, 0x5d, 0x5b, 0x89, 0x7d, 0x46, 0xf9, 0x15, - 0xdc, 0x76, 0x69, 0xfc, 0x98, 0xc9, 0x78, 0xbd, 0x9d, 0x85, 0xb4, 0xec, - 0x55, 0xbe, 0x5d, 0x3a, 0xc9, 0xc5, 0xf3, 0x0b, 0xb0, 0x3b, 0xf0, 0x38, - 0x94, 0x4c, 0x89, 0x4c, 0x9a, 0xc6, 0xd1, 0xe9, 0xe2, 0x8c, 0xde, 0xcf, - 0x46, 0x43, 0x25, 0x51, 0x9e, 0xf2, 0xa8, 0x72, 0xad, 0x11, 0xfe, 0xb4, - 0x44, 0x05, 0x3e, 0x06, 0x53, 0xb6, 0xb0, 0xe6, 0x3b, 0x71, 0x4f, 0x7c, - 0x08, 0x4d, 0xbe, 0xab, 0x42, 0xd6, 0xec, 0x7c, 0x6f, 0xae, 0x44, 0x63, - 0x94, 0xc9, 0x82, 0x09, 0x60, 0x54, 0xc6, 0x4a, 0x35, 0x27, 0x72, 0x1c, - 0x74, 0xb9, 0xc7, 0x4a, 0xc8, 0xe9, 0x47, 0x73, 0x65, 0xbf, 0x66, 0x60, - 0xc1, 0x1d, 0xc7, 0xbd, 0xe2, 0xdc, 0x44, 0xf1, 0xf9, 0xd3, 0x8c, 0x48, - 0x69, 0xc0, 0xf9, 0x02, 0xe5, 0xff, 0xbc, 0x5e, 0x1d, 0x66, 0xb7, 0x5b, - 0xbc, 0x95, 0x4c, 0xaa, 0x29, 0x1c, 0x53, 0x84, 0x6d, 0xbe, 0x0f, 0xda, - 0x40, 0x72, 0x5f, 0x0d, 0xe7, 0xae, 0xe3, 0x05, 0xa2, 0x16, 0x4f, 0x3d, - 0x4b, 0xbc, 0x84, 0x4c, 0xcf, 0xa5, 0x10, 0x72, 0xf1, 0x7e, 0x2c, 0xfa, - 0x48, 0x45, 0xb6, 0xa7, 0x57, 0xa7, 0xeb, 0x69, 0x54, 0xc0, 0x96, 0x9b, - 0xa5, 0xf7, 0x06, 0x3f, 0xdf, 0xe9, 0x78, 0x09, 0x24, 0x6e, 0x41, 0x49, - 0x81, 0x22, 0x11, 0x4e, 0xcd, 0xda, 0xfb, 0x92, 0x99, 0xe4, 0xd8, 0x86, - 0x8e, 0xe4, 0x0b, 0xdc, 0xa2, 0x7e, 0x8d, 0x99, 0x45, 0xed, 0x24, 0x40, - 0x2b, 0x34, 0x72, 0x4c, 0x27, 0x8e, 0xd0, 0x3d, 0x1a, 0x7c, 0x6a, 0x85, - 0xa7, 0x1d, 0x71, 0x05, 0xe7, 0xda, 0xf4, 0x48, 0xd6, 0x87, 0x0a, 0xb8, - 0xc0, 0x55, 0xe3, 0xed, 0xbb, 0xfd, 0x82, 0x42, 0xfa, 0x68, 0x55, 0x73, - 0x66, 0x93, 0x81, 0x6b, 0x33, 0xfe, 0xa3, 0x15, 0xf3, 0x92, 0x16, 0xcd, - 0x4a, 0xf3, 0x67, 0x26, 0x96, 0x1b, 0x15, 0x68, 0x20, 0x31, 0xfe, 0xc7, - 0x93, 0x67, 0x23, 0xeb, 0xa9, 0x8e, 0x79, 0xe2, 0xa0, 0x9a, 0xf1, 0x69, - 0xd1, 0x31, 0x61, 0x6d, 0x0b, 0x5e, 0xd7, 0x59, 0xac, 0xa3, 0x4a, 0x9e, - 0xff, 0x69, 0x24, 0xc1, 0x03, 0x76, 0x73, 0x27, 0x33, 0xce, 0xbd, 0x06, - 0xca, 0xbc, 0xf4, 0x4d, 0x6d, 0x6e, 0x48, 0x0a, 0x5b, 0x4f, 0xcd, 0xa0, - 0x06, 0xb2, 0xf6, 0x88, 0x06, 0x5e, 0xf5, 0x4d, 0xb5, 0x27, 0x6d, 0xd3, - 0x87, 0xa7, 0xc6, 0x49, 0xef, 0x52, 0x69, 0x98, 0x18, 0xf9, 0x07, 0x9b, - 0x72, 0x11, 0x87, 0x8d, 0x43, 0xb9, 0x2b, 0x07, 0xb1, 0x51, 0x4b, 0x91, - 0x52, 0x39, 0x96, 0x3f, 0x63, 0x83, 0x82, 0xa1, 0xbc, 0x27, 0x99, 0x77, - 0xff, 0xc8, 0xa1, 0x07, 0xd0, 0x87, 0x2a, 0x50, 0x56, 0x65, 0x64, 0x41, - 0x3f, 0x18, 0x95, 0xb1, 0xf2, 0xf1, 0xa8, 0x51, 0x72, 0x46, 0xd6, 0x49, - 0x96, 0xee, 0xbf, 0x11, 0xcf, 0xe6, 0x81, 0x8d, 0x3c, 0xc5, 0xf6, 0x1c, - 0xac, 0xf2, 0x37, 0x75, 0x2e, 0x53, 0xe2, 0xee, 0x54, 0x3b, 0x46, 0x7f, - 0x8e, 0x15, 0x46, 0xc0, 0x12, 0xf2, 0xf5, 0xe0, 0xa6, 0x48, 0x23, 0x95, - 0x64, 0x43, 0xe4, 0x76, 0x7d, 0x2b, 0x2b, 0xe7, 0x3d, 0x0a, 0x84, 0x7d, - 0x18, 0xf7, 0x70, 0x0d, 0x3d, 0x2b, 0xf7, 0xa7, 0x08, 0x5e, 0x28, 0x59, - 0xaa, 0x62, 0x6f, 0x56, 0x1c, 0x74, 0x8f, 0x57, 0x33, 0xb6, 0xf2, 0x2f, - 0x49, 0x18, 0x67, 0xb3, 0x93, 0x5f, 0x45, 0xcc, 0xb7, 0xa9, 0x2b, 0x16, - 0x5d, 0x4b, 0x6b, 0x98, 0xf2, 0x07, 0xe2, 0x60, 0xe9, 0x30, 0x8e, 0x29, - 0x7c, 0xb6, 0xca, 0x31, 0xfd, 0x3a, 0xff, 0x06, 0x06, 0x10, 0x0c, 0x4a, - 0x7c, 0x3c, 0x97, 0x10, 0x4f, 0x4d, 0x86, 0x2d, 0x8b, 0x66, 0x49, 0xd9, - 0x73, 0x49, 0x93, 0x7f, 0x0d, 0x95, 0x83, 0x7f, 0x0b, 0x85, 0x53, 0x85, - 0xf9, 0x3f, 0x29, 0x7f, 0x53, 0xd5, 0x6f, 0xe7, 0xf6, 0xf2, 0xec, 0x5b, - 0xb5, 0x86, 0x4f, 0xb5, 0xd5, 0x11, 0x18, 0xde, 0x35, 0xe8, 0x3d, 0x79, - 0x81, 0x8f, 0xa2, 0x05, 0x58, 0x40, 0x0d, 0x9b, 0x77, 0x22, 0x38, 0x06, - 0x5b, 0xac, 0xf7, 0xd0, 0x0e, 0x06, 0x06, 0x23, 0xd2, 0xff, 0xa0, 0xcb, - 0xff, 0x84, 0xb5, 0xf3, 0x7a, 0xe1, 0x8a, 0x76, 0xcd, 0x3b, 0x0b, 0xbc, - 0x23, 0x46, 0xb0, 0xc7, 0xfa, 0xa8, 0xd6, 0xf6, 0x56, 0x57, 0x72, 0xd2, - 0x49, 0x95, 0x6e, 0x32, 0x2e, 0x00, 0x3d, 0x0b, 0xab, 0x36, 0x05, 0x6e, - 0xc5, 0x11, 0x4a, 0xb5, 0x1c, 0x89, 0xb2, 0x81, 0xc8, 0x0b, 0x9f, 0x6a, - 0x9f, 0x0f, 0x75, 0x22, 0x79, 0x3c, 0xb7, 0xa6, 0xa1, 0x24, 0x02, 0xcc, - 0x98, 0x89, 0x27, 0x8d, 0xdc, 0xc4, 0xa9, 0x4a, 0xb5, 0x87, 0xb4, 0x5c, - 0x8c, 0x16, 0x2f, 0x63, 0x1a, 0x27, 0x68, 0xf4, 0x25, 0x9e, 0xa1, 0x6c, - 0x9e, 0x36, 0xc6, 0xc6, 0xa5, 0xab, 0x0e, 0x26, 0x22, 0x51, 0xc3, 0x8d, - 0xc8, 0xa2, 0x58, 0x27, 0x03, 0xe5, 0xe4, 0x72, 0xc2, 0x79, 0x4d, 0xa0, - 0xcb, 0x19, 0x37, 0x99, 0xca, 0x21, 0x67, 0x8c, 0xdf, 0x7c, 0xce, 0x8f, - 0xd6, 0xba, 0x78, 0x54, 0xda, 0xb4, 0x90, 0x70, 0xe1, 0x78, 0x81, 0x03, - 0x64, 0x28, 0xcc, 0x43, 0x31, 0xd7, 0xa6, 0xf6, 0xea, 0x34, 0x2c, 0x3e, - 0x24, 0xbc, 0x7d, 0x5c, 0x3a, 0x5b, 0x3e, 0x61, 0xdc, 0x32, 0x23, 0x30, - 0x64, 0x2f, 0x51, 0x15, 0x43, 0x04, 0xdd, 0xa2, 0xa2, 0x2c, 0x66, 0x94, - 0x9a, 0xb4, 0x6c, 0x7b, 0x99, 0x2e, 0xc3, 0x57, 0x6a, 0xaf, 0xe6, 0x61, - 0xdc, 0x66, 0x76, 0x8c, 0x36, 0xe2, 0x41, 0xe9, 0xea, 0xf3, 0x97, 0x68, - 0x8d, 0x22, 0x94, 0x93, 0x97, 0xb3, 0xc4, 0xd3, 0xfd, 0x25, 0x47, 0xb5, - 0x7c, 0x53, 0xb6, 0x23, 0xdd, 0xd0, 0x2f, 0x50, 0xf2, 0x20, 0xc7, 0xd1, - 0xf8, 0xca, 0xe8, 0xbf, 0xb8, 0x17, 0xff, 0xa9, 0xef, 0x07, 0x73, 0xcf, - 0xd0, 0x86, 0xb5, 0xae, 0xc9, 0x05, 0x86, 0x69, 0xd5, 0xf8, 0x8f, 0x3c, - 0xfe, 0xa6, 0xb7, 0x82, 0x6c, 0x63, 0x91, 0x18, 0xc6, 0x08, 0x19, 0xf5, - 0xa1, 0xe4, 0x12, 0xd7, 0x74, 0x94, 0x49, 0x8e, 0xa1, 0xcf, 0xd0, 0x2e, - 0x86, 0x98, 0xc3, 0x33, 0x16, 0x1b, 0x20, 0x13, 0x78, 0x58, 0x7e, 0x17, - 0x73, 0x91, 0x1c, 0x9a, 0xdf, 0x81, 0xd3, 0x2c, 0x46, 0xe8, 0x50, 0xaf, - 0x7f, 0x86, 0x9a, 0xaa, 0x1a, 0x09, 0xe6, 0x92, 0xf0, 0x1c, 0xdd, 0x78, - 0xc4, 0x29, 0xdf, 0x6d, 0xcc, 0x4c, 0x5a, 0x2f, 0xc1, 0xa5, 0x76, 0xcc, - 0x05, 0xed, 0xf3, 0xd6, 0xf9, 0x23, 0x45, 0x58, 0xa3, 0x5f, 0x4a, 0x25, - 0xcd, 0x4a, 0x84, 0xfc, 0x1a, 0xfb, 0xd6, 0xe2, 0xe3, 0x70, 0xf1, 0x31, - 0xea, 0x20, 0x56, 0x24, 0x99, 0xd3, 0xc9, 0x89, 0xcc, 0x2e, 0xd5, 0x22, - 0x57, 0xec, 0x58, 0xbb, 0x83, 0xae, 0x19, 0x15, 0xf5, 0x8c, 0xa0, 0xd7, - 0xaa, 0x1c, 0x79, 0x83, 0xdc, 0x29, 0xae, 0xd1, 0xfd, 0x60, 0x21, 0xb3, - 0xbf, 0x1b, 0x6f, 0x05, 0xb6, 0x9c, 0xf2, 0xa2, 0x98, 0xe2, 0xc5, 0x87, - 0xe8, 0xa8, 0xe4, 0x2c, 0x1d, 0x4f, 0x91, 0xde, 0xdf, 0x2c, 0x5b, 0x11, - 0x2d, 0x91, 0x3a, 0xa8, 0xc0, 0xf7, 0xc2, 0xd2, 0x77, 0x05, 0xe1, 0xfa, - 0x85, 0x30, 0x9d, 0xda, 0xf0, 0x6c, 0x10, 0xa2, 0xf5, 0x47, 0xcc, 0x29, - 0xae, 0xdf, 0xc1, 0x20, 0xfa, 0x1f, 0xf3, 0xae, 0xe4, 0x00, 0x38, 0xc8, - 0x0c, 0x18, 0x6f, 0x08, 0xcf, 0xc3, 0xe0, 0x3e, 0x01, 0x9d, 0x79, 0xa7, - 0xa6, 0xe2, 0x0a, 0x82, 0x58, 0xa4, 0x11, 0x48, 0xb5, 0x9b, 0xe2, 0x4b, - 0x42, 0x09, 0x17, 0x20, 0x09, 0xc3, 0x0e, 0xe7, 0x0f, 0xe4, 0xcd, 0x62, - 0x26, 0x7c, 0x12, 0xe7, 0x5b, 0x1e, 0xc4, 0xaa, 0x5d, 0x92, 0x0f, 0xbb, - 0x8c, 0x39, 0xfc, 0x57, 0x28, 0x75, 0x84, 0xf2, 0xa1, 0xb9, 0xa1, 0x38, - 0xde, 0xfc, 0xbc, 0x84, 0x96, 0x86, 0x6a, 0xdb, 0x0e, 0x87, 0x89, 0x6f, - 0x98, 0xb5, 0x83, 0x8d, 0x01, 0xaf, 0xf1, 0xd9, 0xd9, 0x0e, 0x04, 0xcd, - 0x5e, 0xda, 0x0a, 0xd6, 0x48, 0x7a, 0xc5, 0xaa, 0x7c, 0xcc, 0x4c, 0x20, - 0x48, 0xe4, 0xb8, 0x44, 0xca, 0x50, 0xa5, 0x9f, 0xc7, 0x27, 0xed, 0x1b, - 0x40, 0x2b, 0xdd, 0x1a, 0xae, 0xe1, 0x8d, 0xe0, 0x26, 0x31, 0xec, 0x2b, - 0xb6, 0xc6, 0xda, 0x43, 0x52, 0xc4, 0xfa, 0xc2, 0x35, 0x39, 0x2c, 0x63, - 0xef, 0x2b, 0x42, 0xc4, 0xfa, 0x53, 0x8c, 0x7d, 0xcd, 0x85, 0x84, 0x44, - 0x98, 0x17, 0x08, 0x63, 0x1f, 0xb9, 0xc8, 0x1e, 0x33, 0x1f, 0xf1, 0xab, - 0x83, 0x97, 0x22, 0x62, 0x22, 0x57, 0x7d, 0x8d, 0xa6, 0x41, 0x77, 0x38, - 0xdf, 0x5f, 0x45, 0xa1, 0xbb, 0x49, 0x82, 0x6e, 0x0a, 0xf9, 0x94, 0x00, - 0xea, 0x6f, 0x4a, 0xe8, 0x16, 0x4b, 0x78, 0x33, 0x26, 0x18, 0x3b, 0x3b, - 0x5f, 0x28, 0x58, 0x3f, 0xa7, 0x4e, 0xdc, 0x21, 0x31, 0xd4, 0x3b, 0xec, - 0x71, 0xf1, 0xd5, 0xb5, 0xa1, 0x0f, 0x91, 0xc9, 0xc4, 0xd3, 0xca, 0xbd, - 0x39, 0xd2, 0xef, 0x21, 0xdf, 0xba, 0xd9, 0xce, 0x65, 0xdd, 0x1a, 0xb5, - 0x66, 0xba, 0x7a, 0x80, 0x37, 0x68, 0x32, 0xc1, 0xb4, 0x2b, 0x4b, 0x44, - 0xc2, 0x35, 0x0e, 0x7e, 0xd9, 0x71, 0x93, 0xb9, 0xac, 0x6b, 0x7e, 0x63, - 0x9c, 0xa0, 0xab, 0x10, 0x7c, 0x62, 0xe8, 0xfc, 0x1c, 0x62, 0x79, 0x09, - 0x70, 0xa8, 0xe5, 0x67, 0x1f, 0x5b, 0xc0, 0x5c, 0x87, 0x1a, 0x90, 0x24, - 0x0c, 0xb4, 0x3c, 0x8d, 0xe4, 0xf6, 0x44, 0x62, 0xd0, 0x55, 0x9e, 0x05, - 0x75, 0xa3, 0xe2, 0xac, 0x10, 0x11, 0x7f, 0x5b, 0x96, 0x65, 0x38, 0xa7, - 0x2a, 0x0f, 0xbe, 0x5e, 0x01, 0x14, 0xb4, 0x8a, 0xa1, 0xa8, 0xe8, 0x5a, - 0xbc, 0x4b, 0x22, 0x67, 0xd6, 0x14, 0xc3, 0x60, 0xf2, 0x12, 0xd9, 0x6f, - 0x1a, 0x6d, 0xba, 0x17, 0xc7, 0x12, 0x93, 0x2e, 0xa7, 0x8d, 0x19, 0x86, - 0x65, 0x56, 0x2b, 0xf5, 0x10, 0x45, 0xda, 0xef, 0xc0, 0xdc, 0x92, 0x18, - 0xc4, 0xdd, 0x6c, 0xfc, 0xcb, 0x41, 0xfb, 0x04, 0x88, 0xfc, 0x1f, 0x7d, - 0xdf, 0xe6, 0x34, 0xab, 0x85, 0x56, 0x81, 0x43, 0x2e, 0xea, 0x45, 0x14, - 0xd8, 0x5e, 0x3e, 0xd4, 0xd0, 0x41, 0x47, 0x7c, 0x16, 0xf2, 0xa1, 0x15, - 0xdc, 0x09, 0x97, 0xd3, 0x6b, 0x4c, 0x26, 0x58, 0xa4, 0xb9, 0x5e, 0x7c, - 0x80, 0x55, 0x13, 0x50, 0xde, 0x11, 0x36, 0x60, 0xd4, 0x47, 0x15, 0xea, - 0x80, 0x6d, 0x55, 0x91, 0x02, 0x15, 0x6f, 0xe5, 0x4a, 0x11, 0xa6, 0x6e, - 0x30, 0xe0, 0x14, 0xd9, 0x9a, 0x9e, 0x8b, 0x85, 0x81, 0x7f, 0xd0, 0x17, - 0xb3, 0xdf, 0x8b, 0x3a, 0xcc, 0xaa, 0x65, 0x73, 0xcc, 0x15, 0xe1, 0x09, - 0x1a, 0x99, 0xa9, 0x03, 0x1e, 0x00, 0x5c, 0xc8, 0x67, 0xf4, 0x73, 0x03, - 0x0f, 0x78, 0x29, 0x37, 0x7d, 0x68, 0x1b, 0x86, 0x06, 0xf9, 0x27, 0x04, - 0xa6, 0xef, 0xf2, 0xe8, 0xbc, 0xa7, 0xc1, 0xf9, 0x08, 0x6a, 0x45, 0x89, - 0xea, 0x81, 0x86, 0x77, 0xa4, 0xea, 0x5b, 0x8c, 0xd6, 0x60, 0x23, 0x19, - 0x42, 0xc6, 0x42, 0x01, 0x7d, 0x33, 0x83, 0xd7, 0x07, 0x7e, 0xd9, 0x91, - 0x45, 0xf9, 0x28, 0x59, 0x37, 0x1a, 0x47, 0x98, 0x53, 0xcd, 0x3f, 0x3d, - 0x3d, 0xaa, 0xbc, 0x2b, 0x1c, 0x0e, 0x0a, 0x4f, 0x47, 0x35, 0x01, 0xbe, - 0x2c, 0xda, 0xd8, 0xa4, 0xa2, 0x50, 0x66, 0x99, 0x8c, 0x44, 0x59, 0x60, - 0xe8, 0xff, 0x9b, 0x65, 0x4c, 0x26, 0xcf, 0x43, 0x95, 0x27, 0x5d, 0xf4, - 0x73, 0x9f, 0x76, 0x04, 0x9e, 0xaf, 0xbb, 0x41, 0x55, 0xe6, 0xa6, 0x9a, - 0xa5, 0xd1, 0x0c, 0x55, 0x79, 0xf1, 0xba, 0x48, 0x37, 0x2a, 0x33, 0x82, - 0x77, 0x87, 0x05, 0xeb, 0x86, 0x77, 0x3a, 0x98, 0x30, 0xe9, 0xe0, 0x0f, - 0x28, 0x46, 0x3c, 0x94, 0xfa, 0x3c, 0x60, 0xbf, 0x82, 0xb9, 0xff, 0xf7, - 0x46, 0xa6, 0x2a, 0x4f, 0x4a, 0xe0, 0x95, 0x38, 0x4a, 0x97, 0x33, 0x15, - 0x51, 0xcd, 0xe7, 0xf9, 0x56, 0x4f, 0x0d, 0x59, 0x9f, 0x61, 0xdd, 0x36, - 0x6f, 0xf7, 0x78, 0x86, 0x16, 0xd0, 0x3b, 0x82, 0xc0, 0x59, 0xc1, 0xa8, - 0x8a, 0xcb, 0x6f, 0xc2, 0xce, 0x24, 0x1c, 0x0c, 0x50, 0x13, 0x1c, 0xe4, - 0xa7, 0xaf, 0x0c, 0xf7, 0x6e, 0xb9, 0x92, 0x44, 0xbb, 0xeb, 0xd9, 0x3b, - 0x3d, 0xff, 0xd2, 0xea, 0x9b, 0x52, 0x7b, 0x3f, 0x4f, 0x43, 0x0c, 0xa4, - 0x28, 0xbc, 0x46, 0x2e, 0xb0, 0xef, 0xbd, 0xeb, 0xa8, 0x7a, 0x2c, 0xf3, - 0xfb, 0x91, 0x9e, 0x46, 0xbc, 0x76, 0x53, 0x36, 0xe1, 0x6d, 0x76, 0xc6, - 0x2b, 0x58, 0x99, 0x28, 0xa6, 0xa3, 0x4e, 0xd7, 0xce, 0x18, 0xbc, 0x29, - 0x32, 0x9c, 0x06, 0xf7, 0x00, 0xca, 0xcb, 0x66, 0x38, 0xa6, 0x2e, 0xe9, - 0xa8, 0x18, 0x1a, 0x8c, 0x6e, 0x80, 0xe8, 0xc8, 0x89, 0x3d, 0xb9, 0xb3, - 0x41, 0x98, 0x62, 0x23, 0x73, 0x02, 0xb1, 0x05, 0x2e, 0xb1, 0xec, 0x1c, - 0x20, 0x82, 0xcd, 0x7b, 0xf3, 0xb1, 0x84, 0xaf, 0x8c, 0xf2, 0x2c, 0x0b, - 0x61, 0x6b, 0x76, 0xf7, 0xd4, 0xbf, 0x0d, 0x54, 0x99, 0x3a, 0xca, 0xf9, - 0x8d, 0x1e, 0x3a, 0xad, 0x02, 0xbc, 0x54, 0x75, 0x0c, 0x32, 0xe1, 0xa8, - 0xa3, 0xb2, 0xa9, 0xf6, 0x49, 0x70, 0x51, 0xcb, 0x9d, 0x91, 0xdd, 0x23, - 0x9e, 0xb0, 0x30, 0xb4, 0xf5, 0x3c, 0x93, 0xaa, 0x34, 0x7d, 0x51, 0x4f, - 0xb7, 0xb2, 0x47, 0xbc, 0x08, 0x83, 0x2f, 0x74, 0xc4, 0xcc, 0xfc, 0xda, - 0x06, 0x4a, 0xc3, 0x74, 0x38, 0x85, 0x55, 0x48, 0x7a, 0x1e, 0x61, 0x64, - 0x8f, 0x69, 0x51, 0x5b, 0xf9, 0x92, 0xd0, 0x64, 0x96, 0x14, 0x13, 0x61, - 0x9e, 0xfe, 0x00, 0x7b, 0xdc, 0x31, 0x12, 0x0f, 0x3e, 0x48, 0x3f, 0x16, - 0xb7, 0xc5, 0xa0, 0x19, 0x07, 0x66, 0xc6, 0xb5, 0xf0, 0xa1, 0x80, 0xf8, - 0xe0, 0x38, 0x74, 0x3b, 0x49, 0x0f, 0xbf, 0x61, 0x5c, 0x4a, 0x1f, 0x33, - 0xa2, 0x85, 0x17, 0xf9, 0xeb, 0x6b, 0x1e, 0x91, 0x98, 0x45, 0x96, 0x7a, - 0x55, 0xa5, 0x2d, 0x68, 0xcb, 0x72, 0x09, 0x22, 0x0f, 0xe3, 0x5c, 0x4f, - 0x43, 0x3f, 0xcb, 0xb4, 0xce, 0x37, 0xfa, 0x27, 0xe0, 0x5f, 0xc5, 0x44, - 0xd9, 0x9d, 0x8c, 0x0e, 0x97, 0x95, 0xb6, 0x81, 0xdf, 0xf2, 0x8e, 0xa5, - 0x0d, 0x8a, 0x94, 0x43, 0x8f, 0x3c, 0xb8, 0xfd, 0xdc, 0x7a, 0x4a, 0xe7, - 0xb5, 0xc0, 0x5a, 0xc0, 0xa4, 0x75, 0x48, 0x4c, 0xd5, 0xf4, 0x3b, 0x71, - 0x8c, 0x36, 0x6e, 0x28, 0xb0, 0xb2, 0x51, 0x3e, 0x2b, 0xe9, 0x79, 0x62, - 0xb1, 0x7b, 0x13, 0x4b, 0x9c, 0x19, 0x15, 0x40, 0xf6, 0x72, 0x2d, 0xdf, - 0x97, 0x21, 0x18, 0x11, 0xd6, 0xcc, 0xc0, 0xa2, 0xab, 0x58, 0xf1, 0x71, - 0x44, 0xca, 0xca, 0x1f, 0x36, 0x85, 0xba, 0x62, 0x93, 0x77, 0x36, 0xc4, - 0xed, 0x3d, 0x5d, 0x84, 0x64, 0x2c, 0x72, 0xc6, 0xa7, 0x1a, 0xdb, 0x8f, - 0xdb, 0xf9, 0xf5, 0xf2, 0x91, 0x79, 0x5f, 0xd5, 0xfc, 0x15, 0x6c, 0xc4, - 0x8d, 0x7e, 0x2b, 0x19, 0x0e, 0xb3, 0x2e, 0xa7, 0x84, 0x6a, 0xf2, 0xba, - 0x44, 0xa5, 0x51, 0x96, 0x31, 0xd4, 0x7e, 0x2e, 0x18, 0xc1, 0x20, 0xe1, - 0x69, 0xe6, 0x8b, 0xab, 0x00, 0x9d, 0x73, 0x5e, 0xa4, 0xe1, 0xf4, 0x27, - 0x7b, 0x25, 0x3f, 0x90, 0x13, 0x5d, 0xf5, 0xcb, 0x13, 0xbd, 0xcb, 0x06, - 0xa3, 0x04, 0x97, 0x0b, 0x0b, 0x38, 0x84, 0xe2, 0xc2, 0x7b, 0xe0, 0x59, - 0x35, 0x18, 0x7f, 0x89, 0x6d, 0x78, 0x0f, 0x63, 0xb4, 0x88, 0xd5, 0x93, - 0x80, 0xec, 0x88, 0x8c, 0xe0, 0xfa, 0x28, 0x11, 0x34, 0x7d, 0x71, 0xb8, - 0x07, 0xc8, 0xdb, 0x8f, 0x08, 0xda, 0xf3, 0x76, 0xa8, 0x75, 0x1b, 0x96, - 0x11, 0x48, 0xb4, 0x11, 0x70, 0xa2, 0x30, 0xb7, 0xdf, 0x98, 0xce, 0x31, - 0xa2, 0xeb, 0x6a, 0x27, 0xee, 0x0d, 0xea, 0xbc, 0x2d, 0x52, 0x81, 0x9b, - 0xe2, 0xca, 0x71, 0x59, 0x31, 0x34, 0x0d, 0xd8, 0x4b, 0x7e, 0x83, 0xb2, - 0xeb, 0x95, 0xa4, 0x19, 0xd5, 0xa4, 0xe7, 0xb1, 0xe4, 0x79, 0xcf, 0xb3, - 0x48, 0xcc, 0x24, 0xeb, 0xfe, 0x00, 0x9d, 0x92, 0x0c, 0x5b, 0xd7, 0x42, - 0x25, 0x2c, 0x67, 0xea, 0x20, 0x60, 0xee, 0x0b, 0x46, 0x74, 0xfe, 0xa0, - 0x6c, 0x07, 0x0e, 0x98, 0xb2, 0xf5, 0xa0, 0x27, 0x47, 0x35, 0xc8, 0xc4, - 0x08, 0x9a, 0xfc, 0x9f, 0x32, 0x21, 0x4f, 0x22, 0x04, 0xbf, 0x4c, 0x06, - 0x68, 0x3e, 0xc6, 0x93, 0xd1, 0x7e, 0x10, 0x83, 0x40, 0xfe, 0x1a, 0x69, - 0x12, 0x77, 0xb5, 0x00, 0x1e, 0x38, 0x90, 0xf7, 0xd8, 0xd7, 0x6f, 0x86, - 0xf5, 0xb4, 0x58, 0xa7, 0x66, 0x48, 0x26, 0xfd, 0x14, 0xfd, 0x8e, 0xe5, - 0xca, 0x94, 0x1c, 0x95, 0x10, 0x9c, 0x30, 0xa7, 0xd1, 0xd3, 0xe3, 0x1e, - 0x08, 0xf4, 0x80, 0xf0, 0x73, 0x09, 0x58, 0xe0, 0x5a, 0xf2, 0x23, 0x30, - 0xcf, 0x3c, 0x61, 0xbb, 0x08, 0x07, 0x89, 0x37, 0xad, 0x9d, 0x46, 0xca, - 0xbd, 0x03, 0x0c, 0xde, 0xe1, 0x94, 0xeb, 0xdb, 0x7d, 0x8c, 0x0e, 0x3b, - 0xe3, 0x24, 0x99, 0x23, 0x7c, 0x64, 0x79, 0x9f, 0x66, 0x5c, 0x83, 0xe7, - 0x8e, 0xb7, 0xf5, 0x8a, 0x98, 0xdc, 0x60, 0xa7, 0x67, 0x2d, 0x4e, 0xf5, - 0x0a, 0x45, 0x6e, 0x60, 0x9f, 0xfd, 0x28, 0x4d, 0xb4, 0x66, 0xed, 0xcd, - 0xb8, 0x50, 0x77, 0x7a, 0x89, 0xad, 0xc7, 0x42, 0xee, 0xe8, 0x3d, 0x73, - 0x68, 0xee, 0xd1, 0x80, 0x1b, 0x13, 0x10, 0x2f, 0xe5, 0x33, 0xd9, 0x12, - 0x1f, 0x08, 0x56, 0x10, 0x82, 0x32, 0x0e, 0x51, 0x18, 0x06, 0x91, 0x2c, - 0xce, 0x1b, 0x0a, 0x1d, 0x92, 0x89, 0xa9, 0xd3, 0x3c, 0x35, 0x1f, 0xe4, - 0x0a, 0x40, 0xea, 0x80, 0x8a, 0xdc, 0x2d, 0x86, 0x58, 0x6f, 0xd9, 0x1e, - 0x88, 0xc0, 0xad, 0x26, 0x95, 0xce, 0x84, 0xf8, 0xfc, 0x6a, 0x4a, 0x33, - 0x23, 0x11, 0xed, 0xea, 0x1a, 0xe8, 0x59, 0x1e, 0xa0, 0xb4, 0x71, 0x92, - 0x49, 0x43, 0x0b, 0x8d, 0xb4, 0x31, 0x33, 0x79, 0xfb, 0x49, 0x3b, 0xab, - 0x66, 0x58, 0x77, 0x4b, 0xdf, 0x6c, 0x11, 0xcb, 0x60, 0x09, 0x94, 0xd6, - 0xa5, 0xc9, 0xad, 0xe3, 0x73, 0xc0, 0x26, 0x44, 0xd9, 0xe8, 0x8e, 0x46, - 0x82, 0x3a, 0x58, 0x1d, 0x58, 0xb8, 0x40, 0x76, 0x2d, 0x0d, 0xc3, 0x26, - 0x70, 0x40, 0x6d, 0xd9, 0xe0, 0xc8, 0xca, 0xbe, 0x4c, 0x13, 0x40, 0x03, - 0x43, 0xc8, 0xa5, 0x8f, 0x85, 0xd5, 0xcb, 0x36, 0x81, 0x3d, 0xb2, 0xd1, - 0xfa, 0xce, 0xf9, 0x74, 0x07, 0xdb, 0xcf, 0x61, 0x28, 0x49, 0x44, 0xcb, - 0x72, 0x28, 0x15, 0xe9, 0x56, 0xd3, 0x0f, 0xd8, 0xc4, 0x07, 0xac, 0x63, - 0xff, 0xc6, 0x7f, 0xe1, 0x78, 0x94, 0xf9, 0xce, 0xaf, 0x94, 0x5b, 0x09, - 0x17, 0xa5, 0x45, 0x70, 0xc7, 0x61, 0xfb, 0x91, 0xbb, 0x0b, 0x5c, 0xe6, - 0xb8, 0x62, 0xb6, 0x1c, 0x95, 0xf9, 0x48, 0xa5, 0xe9, 0x25, 0x70, 0x35, - 0x65, 0x07, 0x06, 0x20, 0xca, 0x12, 0x54, 0x36, 0x9b, 0xda, 0x04, 0x8d, - 0x07, 0x6d, 0xb0, 0x57, 0x5b, 0x16, 0xc4, 0xd4, 0x33, 0x6a, 0xa6, 0x3b, - 0x57, 0x10, 0x63, 0x00, 0x50, 0x9e, 0x91, 0x1c, 0x28, 0xd7, 0x1a, 0x59, - 0x20, 0xa3, 0x87, 0x14, 0x3f, 0x26, 0x29, 0xa6, 0xf0, 0x73, 0x20, 0x54, - 0xfb, 0xa0, 0xc5, 0xf1, 0xd4, 0x8b, 0x01, 0x5e, 0xd4, 0x53, 0x78, 0x49, - 0x6f, 0x32, 0xfb, 0x42, 0xec, 0x69, 0x77, 0x28, 0xc1, 0x6f, 0xa9, 0xc4, - 0x5c, 0x94, 0x6b, 0x59, 0x59, 0xfd, 0xff, 0x8b, 0xf4, 0xd5, 0x42, 0x12, - 0xd1, 0xb1, 0x0d, 0x71, 0xbd, 0x54, 0x0d, 0xa6, 0xb6, 0x14, 0x03, 0x8b, - 0xe3, 0xf8, 0x89, 0x35, 0xd7, 0xdc, 0x62, 0x5b, 0x86, 0x0f, 0xc1, 0x52, - 0x06, 0x73, 0x68, 0xa3, 0xe3, 0x58, 0x2e, 0x85, 0x2e, 0xe7, 0xf7, 0xad, - 0xc5, 0x61, 0x39, 0xb6, 0xff, 0x00, 0xf3, 0xc6, 0x4e, 0x02, 0xc8, 0x2a, - 0x8b, 0x4f, 0x2e, 0x14, 0x61, 0xbf, 0xb9, 0x7b, 0xba, 0xf3, 0xac, 0x99, - 0xac, 0xb0, 0x08, 0xcc, 0x8b, 0x9a, 0xf1, 0xc9, 0x20, 0x89, 0x00, 0xd7, - 0xbb, 0x5c, 0xe4, 0x4b, 0x44, 0x4d, 0xff, 0x21, 0x4b, 0xb8, 0x8b, 0x05, - 0x91, 0x8c, 0x09, 0x2b, 0x3b, 0x1f, 0xbb, 0xeb, 0x4d, 0xd2, 0xe0, 0x92, - 0x00, 0x05, 0x91, 0x30, 0x01, 0x87, 0xa2, 0x92, 0x67, 0x21, 0xe0, 0x5c, - 0x2f, 0x5a, 0x56, 0x55, 0x11, 0x6d, 0x7c, 0x33, 0x26, 0xff, 0x93, 0xa0, - 0x40, 0xdd, 0xdd, 0x59, 0x05, 0x53, 0x6d, 0x95, 0x20, 0x27, 0xdb, 0xec, - 0x38, 0xb1, 0x4b, 0x76, 0x68, 0xd9, 0x7d, 0x49, 0x89, 0x60, 0x40, 0x97, - 0x79, 0xa9, 0xcd, 0x9a, 0x61, 0x2d, 0xac, 0x14, 0x9c, 0x20, 0x53, 0xea, - 0xa8, 0x17, 0xf8, 0xb2, 0x3a, 0x0e, 0x6c, 0x73, 0xe6, 0x93, 0x07, 0xd1, - 0x43, 0xa6, 0xc8, 0x42, 0x76, 0xe6, 0xf3, 0x46, 0x68, 0x56, 0xe0, 0xef, - 0x22, 0x07, 0xe6, 0x6d, 0x37, 0x2e, 0x6b, 0xba, 0xa9, 0x73, 0x1d, 0x43, - 0x5b, 0x7e, 0x46, 0x53, 0x6b, 0x28, 0x60, 0x45, 0x97, 0x2f, 0xc2, 0xea, - 0xbf, 0x1d, 0x23, 0x52, 0x57, 0x3d, 0x26, 0xf4, 0x16, 0x06, 0x72, 0x05, - 0xc4, 0xcd, 0xcb, 0xcd, 0x8c, 0xb7, 0x14, 0xb1, 0xbb, 0xb0, 0xcf, 0xb9, - 0xaa, 0xd0, 0x8b, 0x89, 0x91, 0x37, 0xdb, 0xeb, 0x0f, 0xbe, 0xcd, 0xc5, - 0xec, 0x31, 0x61, 0xca, 0xa4, 0x66, 0xa4, 0x7b, 0xe8, 0x8d, 0x96, 0xbd, - 0x4a, 0x11, 0xf6, 0xcf, 0xe9, 0x6c, 0xd5, 0xea, 0xc5, 0xfd, 0xe3, 0x04, - 0x27, 0x32, 0xc8, 0x21, 0xab, 0x16, 0xc1, 0x2b, 0xf1, 0x99, 0x4b, 0x8d, - 0x38, 0x9b, 0xd4, 0xb8, 0xa6, 0xef, 0x3e, 0x12, 0xc4, 0xf9, 0x7e, 0x4a, - 0x7c, 0x26, 0xcf, 0xc2, 0xac, 0x9c, 0xd5, 0xe7, 0x78, 0xba, 0x54, 0x00, - 0x7c, 0xa3, 0x51, 0x92, 0x4e, 0x62, 0x1b, 0xa4, 0xa2, 0xbd, 0x3b, 0xf7, - 0xb5, 0xfb, 0x0f, 0xef, 0x89, 0xef, 0x8b, 0xa0, 0x6c, 0x08, 0x44, 0xe0, - 0x4d, 0x00, 0x3c, 0x28, 0xda, 0x64, 0xde, 0xef, 0xa8, 0x22, 0x08, 0x72, - 0x5a, 0x67, 0x44, 0xb0, 0x9a, 0x18, 0xfb, 0x62, 0x54, 0xa7, 0xf4, 0x7f, - 0x9f, 0xc7, 0x1e, 0xb3, 0x8f, 0x28, 0xe1, 0x0f, 0x21, 0x16, 0x38, 0xb0, - 0xe4, 0xfc, 0xdd, 0x8a, 0x94, 0x09, 0xc0, 0x93, 0x28, 0x2f, 0x81, 0x8c, - 0x90, 0xd6, 0x26, 0x74, 0x14, 0xaa, 0x76, 0x49, 0x6a, 0xd4, 0x18, 0xb7, - 0x4d, 0x82, 0xfd, 0x4a, 0x5d, 0xb0, 0xd1, 0x05, 0xfd, 0xf8, 0x2f, 0xb2, - 0xf9, 0x69, 0x80, 0x44, 0xd2, 0x1b, 0x0a, 0x67, 0xe1, 0xd3, 0xf6, 0xe0, - 0x67, 0x66, 0x59, 0xf0, 0xcb, 0x3b, 0x91, 0x6c, 0x04, 0x05, 0xdd, 0x94, - 0xbb, 0x9d, 0x08, 0x27, 0x0a, 0x1b, 0xc9, 0x6d, 0x87, 0x3c, 0x6c, 0x36, - 0xed, 0x1b, 0x03, 0x18, 0x68, 0x81, 0xaa, 0x6d, 0x8c, 0xf1, 0xea, 0x7b, - 0x96, 0x47, 0x81, 0xb3, 0x24, 0x0f, 0x62, 0x5a, 0x59, 0x7e, 0x1f, 0x55, - 0x7c, 0x25, 0x23, 0x07, 0x3a, 0x42, 0xec, 0x9c, 0x73, 0x12, 0xc5, 0xa2, - 0x8f, 0x0d, 0x35, 0xe3, 0x01, 0xa3, 0x6f, 0x90, 0x04, 0x90, 0xee, 0xbc, - 0x8f, 0xc0, 0x46, 0x93, 0x21, 0x9e, 0xed, 0xf2, 0x9c, 0x2f, 0x85, 0x6f, - 0xee, 0x60, 0x01, 0x68, 0x89, 0x16, 0x33, 0x57, 0x73, 0x9e, 0xc9, 0x78, - 0xf1, 0xf5, 0xab, 0x2a, 0x62, 0x00, 0x07, 0xed, 0x6e, 0x30, 0xf1, 0xae, - 0xa5, 0x66, 0xfe, 0x54, 0xf3, 0x56, 0x77, 0x5d, 0x80, 0x79, 0x60, 0x11, - 0x69, 0xc4, 0x46, 0x5d, 0xfa, 0x96, 0x27, 0x8b, 0x2b, 0x19, 0x3b, 0x51, - 0x4a, 0x15, 0x12, 0xec, 0xc0, 0xf2, 0x05, 0xb1, 0x60, 0x54, 0x52, 0xe3, - 0x96, 0xbf, 0xc7, 0x45, 0xe9, 0x8e, 0x68, 0x57, 0x78, 0x91, 0x0e, 0x14, - 0x9e, 0xae, 0xfa, 0x7d, 0x2e, 0x06, 0x2e, 0x0b, 0xd4, 0x04, 0xfa, 0x07, - 0x9d, 0x62, 0x91, 0x0a, 0xc6, 0xdd, 0x68, 0x8f, 0x8c, 0xe7, 0x10, 0xf0, - 0xe9, 0xd1, 0x8a, 0x02, 0xf1, 0xde, 0x8e, 0xf7, 0xdf, 0x5f, 0x3e, 0xf9, - 0x59, 0x96, 0xb9, 0xa0, 0x3b, 0x6e, 0xc8, 0xad, 0x1e, 0x04, 0xa8, 0x8a, - 0xa9, 0x84, 0x0e, 0xc8, 0x2b, 0x2f, 0xf0, 0x1c, 0xf0, 0x0a, 0xb3, 0xaf, - 0xaa, 0x31, 0x5f, 0x98, 0xf8, 0xbc, 0xa2, 0x94, 0x5c, 0x4d, 0x72, 0xf6, - 0xfd, 0x30, 0x16, 0xd0, 0x00, 0x00, 0x00, 0x24, 0x83, 0x7d, 0x18, 0xb2, - 0x1e, 0xea, 0xe4, 0x5c, 0xe0, 0x5b, 0x31, 0x68, 0x13, 0x9d, 0x45, 0x46, - 0x45, 0x1a, 0x5e, 0xf5, 0x77, 0x1e, 0xa8, 0x21, 0xcb, 0x32, 0x50, 0xe1, - 0x60, 0xaa, 0xfc, 0xba, 0x26, 0x67, 0xe1, 0x9f, 0xd0, 0xaa, 0x14, 0xca, - 0x09, 0xe7, 0xf0, 0xf6, 0x83, 0x2a, 0xba, 0xa7, 0xc5, 0x4f, 0x71, 0x3c, - 0x96, 0x3c, 0x46, 0xb1, 0xf8, 0x3f, 0x2c, 0xa6, 0x6c, 0xb7, 0x2d, 0x7b, - 0xd0, 0x2f, 0x65, 0x88, 0x33, 0x20, 0xf3, 0x3c, 0x64, 0x85, 0xda, 0x4a, - 0x64, 0xa1, 0xcf, 0x0a, 0x41, 0x86, 0x05, 0xe1, 0x4d, 0x4d, 0x79, 0xc6, - 0x20, 0x47, 0x54, 0x65, 0xcd, 0x56, 0x10, 0x4f, 0xe1, 0x20, 0x5f, 0x5f, - 0x83, 0xf3, 0x8d, 0xcd, 0x93, 0x0e, 0xce, 0xfa, 0x2e, 0xf3, 0x06, 0xb3, - 0x95, 0x3a, 0xc4, 0xa4, 0xcd, 0x63, 0xf2, 0xe1, 0x64, 0x84, 0x1f, 0x38, - 0xce, 0x90, 0x0f, 0xd4, 0x75, 0xb9, 0xb6, 0x7f, 0xf1, 0x28, 0xfc, 0xbe, - 0xe2, 0xdd, 0xa7, 0x9a, 0xa1, 0xdf, 0x0a, 0x7c, 0xc3, 0xff, 0x7b, 0xc1, - 0xbf, 0x58, 0x8c, 0xfa, 0x7f, 0x7f, 0xa9, 0xe4, 0x10, 0x8b, 0x00, 0xc1, - 0x8b, 0xbd, 0xbd, 0xe6, 0xe2, 0x99, 0x57, 0x28, 0x40, 0x0f, 0x3b, 0x88, - 0xb8, 0xa9, 0x68, 0xfc, 0x2d, 0x2e, 0xf2, 0xb4, 0xea, 0x35, 0x57, 0x06, - 0x0c, 0x87, 0x05, 0xe9, 0xeb, 0x88, 0x78, 0xe6, 0x3e, 0x78, 0x61, 0xf7, - 0x38, 0xd3, 0x5d, 0x22, 0x3b, 0x60, 0x6d, 0x93, 0xdc, 0xe6, 0xc3, 0x2d, - 0x16, 0x3b, 0x8d, 0x9c, 0x8c, 0xd2, 0xd7, 0x38, 0x29, 0x8d, 0x5e, 0x83, - 0x4f, 0x4a, 0xe3, 0x5e, 0xd4, 0xba, 0xdb, 0x75, 0x85, 0x3c, 0x5b, 0x13, - 0xb7, 0x6f, 0xda, 0x59, 0x65, 0x62, 0x58, 0xe3, 0x09, 0x35, 0xac, 0x7e, - 0x50, 0xb4, 0x7b, 0x75, 0x54, 0x86, 0x62, 0x79, 0x28, 0xcc, 0xec, 0x8c, - 0x5c, 0x36, 0x1d, 0xe7, 0xdd, 0x4a, 0xd4, 0xb5, 0xa4, 0x8b, 0xf1, 0x67, - 0x50, 0xfd, 0x62, 0xcd, 0x61, 0xbc, 0xd5, 0xbe, 0xee, 0x16, 0xbf, 0x04, - 0xcc, 0x04, 0x01, 0x1e, 0x4c, 0x17, 0x41, 0xde, 0x99, 0x86, 0x80, 0x73, - 0xc5, 0x65, 0xcc, 0x4d, 0x09, 0x37, 0x23, 0x80, 0xb3, 0x61, 0xa7, 0xb3, - 0xeb, 0x62, 0x67, 0xc2, 0x19, 0x60, 0x68, 0x14, 0xea, 0x77, 0x10, 0x17, - 0x5e, 0xf7, 0x45, 0x3c, 0x1c, 0x26, 0xa7, 0x4a, 0x81, 0x5b, 0x78, 0x3b, - 0x8a, 0x19, 0x62, 0x90, 0x22, 0xe4, 0x5f, 0x6d, 0xdf, 0x4e, 0xde, 0x46, - 0x88, 0x03, 0x6a, 0xf1, 0x0a, 0x4c, 0x3d, 0x46, 0xa9, 0x99, 0xc0, 0x4c, - 0x1e, 0xa3, 0x70, 0x77, 0xf6, 0xc8, 0x03, 0xa3, 0x58, 0xd8, 0x8b, 0xf8, - 0x81, 0xec, 0x92, 0x0e, 0x1a, 0x24, 0x51, 0x13, 0x59, 0x04, 0x42, 0x3d, - 0x21, 0x73, 0x96, 0x56, 0xfe, 0x35, 0x73, 0xe7, 0x13, 0x31, 0xac, 0xbb, - 0xd3, 0xdd, 0xb9, 0xf7, 0xa7, 0xf5, 0x85, 0xe2, 0x8c, 0x49, 0x84, 0x7d, - 0x4b, 0xf4, 0x01, 0xc4, 0x59, 0x09, 0xd0, 0x6e, 0x66, 0xbe, 0x26, 0xc9, - 0xee, 0x13, 0x0b, 0x9a, 0x68, 0x0d, 0x1f, 0xc7, 0x6e, 0xfe, 0xc4, 0x8a, - 0xed, 0x6e, 0xbc, 0x2e, 0x47, 0x77, 0x14, 0xd5, 0x62, 0x69, 0x32, 0x5a, - 0x9c, 0x5e, 0x59, 0xc1, 0x11, 0xf2, 0x3b, 0x7b, 0x3c, 0xf5, 0x6f, 0x0a, - 0x25, 0x98, 0x19, 0x65, 0xf9, 0x86, 0xa1, 0x04, 0x74, 0x65, 0x98, 0x75, - 0x67, 0x13, 0x30, 0xc6, 0xef, 0xfc, 0xe7, 0xd0, 0xff, 0x05, 0x5c, 0xe6, - 0x94, 0xd0, 0x6e, 0x8a, 0x15, 0x1b, 0x68, 0x34, 0x6c, 0xf2, 0xfb, 0xe4, - 0xc3, 0xfe, 0xe1, 0x6c, 0xe9, 0x8f, 0x68, 0xcd, 0x1d, 0x5b, 0x62, 0xf8, - 0xe4, 0x0b, 0xb8, 0x2c, 0x36, 0xed, 0xb6, 0x89, 0x3c, 0xd4, 0x60, 0xa5, - 0xa1, 0x93, 0x39, 0x58, 0xe0, 0x62, 0xea, 0xde, 0x54, 0xdc, 0xb1, 0xf2, - 0x2e, 0x58, 0x9b, 0x00, 0xad, 0xec, 0x05, 0x5b, 0x71, 0x47, 0x20, 0x07, - 0xee, 0x5f, 0xc7, 0x51, 0x2c, 0xa8, 0x37, 0xd8, 0xc8, 0xb0, 0xf9, 0xd0, - 0x17, 0x22, 0xce, 0xce, 0x66, 0x8a, 0xbe, 0xd2, 0x2d, 0x72, 0xf1, 0x56, - 0x3c, 0x46, 0x4d, 0xa5, 0xa4, 0x60, 0x85, 0xde, 0x15, 0x35, 0x9c, 0x31, - 0xc6, 0x90, 0x73, 0xeb, 0xb2, 0xda, 0xf1, 0xb2, 0x35, 0x11, 0x20, 0xa6, - 0x7f, 0x3f, 0x11, 0x8a, 0xb5, 0x1c, 0x1a, 0x25, 0x24, 0xac, 0x7d, 0x3f, - 0x1b, 0xb3, 0x1c, 0xbb, 0x04, 0xa0, 0x5d, 0xc2, 0x19, 0x23, 0x49, 0x32, - 0x21, 0x51, 0x4a, 0xcd, 0x36, 0x2b, 0xac, 0x78, 0xd5, 0x9d, 0x0b, 0xa0, - 0x72, 0x3c, 0x39, 0xb3, 0xa3, 0xb9, 0xd6, 0xe3, 0x5c, 0x95, 0x52, 0xd1, - 0x74, 0x4d, 0xf0, 0x9c, 0xb3, 0x95, 0x06, 0x7f, 0x49, 0x2b, 0x26, 0xee, - 0xfc, 0xcd, 0x0b, 0x12, 0x0e, 0xec, 0x80, 0x16, 0x15, 0x5f, 0x2c, 0x6e, - 0x37, 0xc7, 0x88, 0x6d, 0x2d, 0x4f, 0xf3, 0x14, 0xf6, 0xdf, 0xcd, 0x24, - 0xc7, 0x8d, 0x81, 0x87, 0x30, 0xa2, 0xab, 0x23, 0xa5, 0x6c, 0x4e, 0x3c, - 0xf0, 0x75, 0xa0, 0x86, 0xae, 0x02, 0x04, 0x7f, 0x67, 0x89, 0x39, 0x92, - 0xc3, 0xfb, 0x19, 0xc3, 0x76, 0xb6, 0x39, 0x4f, 0xce, 0x35, 0x91, 0x07, - 0x6c, 0x98, 0xbd, 0x95, 0xc6, 0x5a, 0x91, 0xa1, 0x16, 0x3b, 0x8c, 0xb5, - 0x58, 0x0e, 0xdb, 0x02, 0x07, 0xd6, 0xa9, 0xf2, 0x2c, 0x77, 0x58, 0x87, - 0xbc, 0x47, 0x30, 0xd3, 0x51, 0x64, 0x28, 0xea, 0x7b, 0x8e, 0x01, 0x0b, - 0xed, 0x9c, 0xdc, 0xf2, 0x41, 0xb5, 0x5c, 0x5b, 0x8e, 0x29, 0x86, 0xaa, - 0x48, 0xd7, 0x21, 0x75, 0x34, 0x5c, 0xc1, 0xd0, 0x11, 0x91, 0x13, 0xee, - 0x4f, 0x72, 0xa2, 0x11, 0x9e, 0x56, 0xc2, 0xbe, 0x61, 0x91, 0x64, 0x6a, - 0x8b, 0x09, 0x6b, 0x37, 0x75, 0x97, 0x23, 0xf0, 0x45, 0x61, 0x94, 0xcc, - 0x28, 0x40, 0xa9, 0xb8, 0xfe, 0xa5, 0xce, 0x32, 0xe9, 0x02, 0x19, 0x7d, - 0xe9, 0x6f, 0x58, 0x93, 0x33, 0xb7, 0x2c, 0x3b, 0x28, 0x1d, 0xc8, 0x5c, - 0xb6, 0xaf, 0xe7, 0xcc, 0x05, 0xac, 0xcc, 0x59, 0xac, 0x1f, 0xd4, 0xca, - 0x42, 0x6b, 0xa6, 0xf6, 0xa3, 0x25, 0x11, 0x13, 0x86, 0x1e, 0xaf, 0xa6, - 0xb4, 0xcd, 0x0c, 0x5d, 0xf7, 0x50, 0xa0, 0x20, 0xad, 0xa7, 0xe2, 0x1b, - 0xe7, 0xb2, 0xca, 0xb6, 0x81, 0xd3, 0xb0, 0x13, 0xbf, 0xf4, 0xbc, 0x38, - 0x01, 0x65, 0x19, 0x83, 0x14, 0xbd, 0xf3, 0x74, 0x71, 0x81, 0x80, 0xa2, - 0x9a, 0x9f, 0xaa, 0x93, 0xec, 0xc2, 0xe2, 0xdb, 0xab, 0xb7, 0x95, 0x7d, - 0x95, 0xc0, 0x99, 0xcc, 0xa7, 0xd2, 0x01, 0x74, 0x5a, 0xee, 0x09, 0x16, - 0x07, 0x07, 0xca, 0xb4, 0x98, 0x4f, 0xa1, 0x19, 0x9d, 0x55, 0x7e, 0x7e, - 0xa0, 0xd6, 0x0a, 0x85, 0x73, 0x4e, 0xe1, 0xf2, 0x59, 0x0c, 0xd9, 0xf2, - 0xf1, 0xfc, 0xc1, 0x67, 0x18, 0x41, 0x9b, 0x86, 0x0c, 0xa1, 0xf1, 0x38, - 0x6c, 0x01, 0xaa, 0x38, 0x69, 0xa0, 0x9c, 0x37, 0x17, 0x59, 0xb4, 0xf1, - 0x48, 0xf5, 0x0c, 0xf9, 0x56, 0xe3, 0x94, 0xb8, 0xf7, 0x8b, 0x6a, 0x71, - 0x24, 0x88, 0x75, 0x94, 0x37, 0x9a, 0xeb, 0x79, 0x93, 0xff, 0xfb, 0xf5, - 0xc3, 0x90, 0x49, 0xc4, 0x02, 0x09, 0xb6, 0xfa, 0xbc, 0x68, 0xd6, 0xa9, - 0x7a, 0x59, 0xee, 0xde, 0xd6, 0x89, 0xaa, 0x71, 0xa9, 0xc0, 0xa0, 0xac, - 0x92, 0xa8, 0xc0, 0xfa, 0x24, 0x96, 0x55, 0x9d, 0x99, 0x66, 0x43, 0xc5, - 0xd0, 0xd1, 0x6c, 0x2a, 0xe4, 0x79, 0xb1, 0x63, 0x9a, 0xe9, 0x2b, 0x7b, - 0x00, 0x58, 0xf7, 0x33, 0x13, 0xd6, 0x25, 0xab, 0x36, 0xd0, 0x20, 0xb8, - 0x26, 0xd0, 0xfe, 0x76, 0x19, 0x9a, 0xdc, 0x6d, 0xdb, 0x85, 0x28, 0xe8, - 0x6a, 0x28, 0x2a, 0x3d, 0x86, 0xa2, 0xa6, 0xf1, 0x80, 0x85, 0xbb, 0xde, - 0xcb, 0x49, 0xb0, 0x63, 0x60, 0x15, 0x86, 0x08, 0x83, 0x27, 0x2d, 0xd8, - 0x31, 0x99, 0xb9, 0x87, 0x9a, 0x63, 0x0b, 0x34, 0x46, 0x6f, 0x11, 0x2b, - 0xdc, 0x8b, 0x08, 0x05, 0xdc, 0x2d, 0x95, 0x19, 0x75, 0xb4, 0xbd, 0x7d, - 0x1c, 0xb7, 0xf8, 0x39, 0x1c, 0xe0, 0x26, 0xd6, 0x86, 0x25, 0x71, 0x6a, - 0x7b, 0x35, 0x4e, 0x16, 0x43, 0x87, 0x7b, 0xd8, 0x27, 0x90, 0x3f, 0xeb, - 0x44, 0x82, 0x1d, 0x4f, 0x56, 0xae, 0x74, 0xc7, 0x5e, 0x7a, 0x4f, 0xed, - 0x98, 0x72, 0x74, 0x5d, 0xfd, 0xe0, 0x5d, 0x07, 0x5e, 0x36, 0xad, 0x46, - 0x87, 0x7f, 0xda, 0xd6, 0x1c, 0xaf, 0xe5, 0x5f, 0x38, 0x58, 0x78, 0x4b, - 0x03, 0x40, 0x44, 0x39, 0x67, 0x0f, 0x5c, 0xbe, 0x4f, 0x47, 0x8e, 0xb4, - 0xc1, 0x3e, 0x09, 0x79, 0x6b, 0x2f, 0xc8, 0xfe, 0x87, 0x30, 0x43, 0x99, - 0x11, 0xd5, 0x2e, 0x92, 0xe2, 0xa2, 0x79, 0x73, 0xff, 0xba, 0xed, 0xf6, - 0x77, 0x14, 0xc6, 0x4c, 0x6c, 0x90, 0x8a, 0x0c, 0x44, 0x74, 0x4b, 0x6c, - 0xd1, 0x82, 0x95, 0x78, 0xcd, 0x25, 0xbe, 0x12, 0x87, 0x0f, 0xb7, 0x27, - 0x28, 0x26, 0x83, 0xea, 0xa2, 0xcf, 0x9b, 0xcb, 0x53, 0x19, 0x7b, 0xa9, - 0xe2, 0xe2, 0x0d, 0x85, 0x31, 0xb5, 0xc7, 0x95, 0xcb, 0x0d, 0x47, 0x02, - 0x31, 0x6b, 0xd4, 0xa0, 0xdf, 0x22, 0xd2, 0x25, 0xc5, 0x79, 0x1f, 0x1e, - 0x26, 0x69, 0x01, 0x26, 0xe1, 0x1b, 0xca, 0xee, 0x66, 0x19, 0xc9, 0xf6, - 0xa6, 0x53, 0x8d, 0x9e, 0x03, 0x7e, 0x54, 0xa3, 0xa9, 0xb0, 0x79, 0x75, - 0xe1, 0x07, 0x23, 0x95, 0x21, 0x48, 0xb1, 0xa0, 0xc0, 0xb0, 0x20, 0xc2, - 0x56, 0xbd, 0x70, 0x4f, 0x09, 0x82, 0xcb, 0x4f, 0xb0, 0x97, 0xc6, 0xb5, - 0xe7, 0xff, 0xad, 0xd0, 0x5f, 0x69, 0x7e, 0x6f, 0xb4, 0x24, 0x91, 0x86, - 0x22, 0x30, 0xa7, 0x01, 0xdc, 0xda, 0x82, 0x92, 0x82, 0xf4, 0x88, 0x70, - 0x69, 0x21, 0x21, 0x07, 0xde, 0xe4, 0xec, 0x11, 0xff, 0x8c, 0xeb, 0xb7, - 0xf1, 0x45, 0x9d, 0xbc, 0x85, 0x9c, 0xe9, 0x61, 0xe6, 0xc9, 0xd0, 0xb4, - 0x78, 0xad, 0xad, 0xdd, 0x2e, 0x4e, 0x02, 0x35, 0xf7, 0xe8, 0xae, 0x8c, - 0x15, 0x71, 0x02, 0x21, 0xe4, 0x81, 0x72, 0x2c, 0x7c, 0x42, 0xb1, 0x0a, - 0x33, 0xae, 0x61, 0xc7, 0x62, 0x9e, 0x22, 0x96, 0xbf, 0xc3, 0xcf, 0xb5, - 0xd1, 0xd5, 0x92, 0xb2, 0xe7, 0xec, 0xa2, 0xc0, 0xa9, 0x79, 0x57, 0xa0, - 0x13, 0xd8, 0xcb, 0x16, 0x99, 0xe5, 0xac, 0x6e, 0xb1, 0xde, 0x54, 0xd0, - 0xc5, 0x6e, 0x9d, 0x6d, 0xe6, 0x87, 0xb1, 0xf6, 0x7a, 0xf4, 0x28, 0xaf, - 0xf3, 0x6b, 0x3d, 0x86, 0x44, 0xac, 0x09, 0xa9, 0x77, 0x97, 0x6c, 0xaf, - 0xef, 0x2b, 0xc6, 0x1e, 0x0c, 0x37, 0x5d, 0xba, 0xaa, 0xa6, 0x1f, 0x52, - 0x52, 0xe8, 0x78, 0x5e, 0x0d, 0x4d, 0x9a, 0xfe, 0xbe, 0x5d, 0x9c, 0x25, - 0x0a, 0x4c, 0x52, 0x2c, 0xbf, 0xcd, 0xd5, 0xf4, 0xf2, 0x17, 0xba, 0x07, - 0x95, 0xbe, 0x2c, 0x8b, 0x09, 0xe9, 0x78, 0x4c, 0x2c, 0x18, 0x2b, 0x6b, - 0xa2, 0x44, 0x41, 0x87, 0x71, 0xab, 0x65, 0x6e, 0xb3, 0x20, 0x7e, 0x9d, - 0x79, 0xa0, 0x61, 0x99, 0xdf, 0xe9, 0xa3, 0x35, 0x0c, 0x90, 0x2b, 0x65, - 0xca, 0xb6, 0xfb, 0x9e, 0xe9, 0x56, 0x3e, 0x73, 0x03, 0x08, 0x3a, 0xc6, - 0xc2, 0xd0, 0x14, 0xc7, 0x57, 0x35, 0x1f, 0xb9, 0xce, 0x26, 0x0b, 0x8d, - 0xb8, 0x48, 0xab, 0x85, 0x41, 0x15, 0x33, 0x0f, 0x50, 0x51, 0xba, 0x01, - 0xf6, 0xf1, 0x04, 0xd4, 0x30, 0xea, 0x88, 0xad, 0x9c, 0x96, 0x96, 0xa5, - 0x60, 0x2b, 0x7e, 0xdd, 0xc3, 0x44, 0x86, 0xa2, 0x6e, 0x66, 0x53, 0x3d, - 0x27, 0x6e, 0xf1, 0x6a, 0x82, 0xf1, 0x53, 0x39, 0x8a, 0x2b, 0x06, 0xdd, - 0x8a, 0x73, 0x06, 0x51, 0xe4, 0x37, 0x57, 0x2a, 0x19, 0x73, 0x7b, 0xa8, - 0xc0, 0x55, 0x4e, 0xd9, 0xa2, 0xa0, 0x5a, 0x79, 0x7f, 0xd3, 0xee, 0xab, - 0x01, 0xdd, 0x72, 0x39, 0xcc, 0x3d, 0xe4, 0xf7, 0x7c, 0x7d, 0x38, 0x97, - 0xaf, 0x07, 0x82, 0x9b, 0x36, 0x9d, 0x5e, 0x60, 0xf3, 0xe2, 0x3c, 0xcd, - 0x53, 0x00, 0x38, 0x82, 0x07, 0x01, 0x4b, 0x7c, 0x7e, 0x13, 0x2d, 0x66, - 0xaf, 0xea, 0xd6, 0x78, 0xf5, 0xce, 0xff, 0x95, 0x87, 0xe3, 0x9a, 0xd5, - 0x20, 0x90, 0x0d, 0x62, 0x94, 0x57, 0xaf, 0xf2, 0xc1, 0x4d, 0x06, 0xa4, - 0x77, 0x4a, 0xac, 0x55, 0x8d, 0xf1, 0x82, 0xc8, 0xce, 0xe1, 0x3a, 0xa9, - 0x0c, 0xea, 0xba, 0x12, 0xad, 0xcf, 0x0d, 0xe1, 0x1b, 0x53, 0x69, 0x3d, - 0xc3, 0xcd, 0xa6, 0xb9, 0xe7, 0x10, 0x4a, 0xdb, 0x54, 0x1f, 0x11, 0x0e, - 0xbf, 0xe0, 0x6b, 0x52, 0x3a, 0xd7, 0xf8, 0xe5, 0x8d, 0xba, 0x9c, 0x15, - 0x1d, 0x82, 0x8a, 0x56, 0x3b, 0x18, 0x61, 0x64, 0x9b, 0x21, 0x8c, 0x67, - 0xc7, 0xaa, 0xef, 0x85, 0x69, 0xb8, 0x34, 0x07, 0x37, 0x98, 0x90, 0x7d, - 0x57, 0xa2, 0x84, 0x6f, 0x72, 0x6c, 0x8a, 0xf0, 0x28, 0xaf, 0x1c, 0xbc, - 0x2b, 0x72, 0xb9, 0x43, 0xbe, 0x67, 0x56, 0x92, 0x37, 0x5f, 0x2c, 0x7c, - 0xff, 0x8f, 0x19, 0xce, 0x9b, 0x78, 0xda, 0x99, 0x92, 0xd5, 0xce, 0x3c, - 0xae, 0x70, 0x80, 0x71, 0x73, 0x59, 0x20, 0xbf, 0x7a, 0x0e, 0xf9, 0x2e, - 0x71, 0xa1, 0x74, 0x91, 0x3d, 0x21, 0x75, 0xa2, 0x68, 0xb5, 0xd8, 0x8f, - 0x6d, 0xe0, 0xdc, 0xf7, 0x18, 0xde, 0x02, 0xe0, 0x19, 0x42, 0x4b, 0x85, - 0x53, 0xc2, 0x75, 0x56, 0xca, 0x64, 0xf7, 0xe0, 0x71, 0x4c, 0x7f, 0xba, - 0x0a, 0x3d, 0xe3, 0x49, 0xed, 0xae, 0x9f, 0x5c, 0x7b, 0xfd, 0xf3, 0x6d, - 0xa9, 0x34, 0xc4, 0x5c, 0xbf, 0x28, 0x93, 0xe2, 0xbd, 0x6e, 0xb4, 0xe5, - 0x96, 0x11, 0xeb, 0x2d, 0xff, 0x95, 0x25, 0x25, 0xb6, 0xd7, 0x3b, 0xb5, - 0x51, 0xad, 0xa9, 0x60, 0xd1, 0xbc, 0xc5, 0x1d, 0xd5, 0x12, 0xaf, 0x55, - 0x3b, 0xa5, 0x93, 0x8a, 0x15, 0x3a, 0x36, 0x2f, 0xd7, 0x2d, 0xaf, 0xa9, - 0xf3, 0x2c, 0xff, 0x95, 0x2c, 0x49, 0xa4, 0x36, 0x06, 0x9d, 0x45, 0x6a, - 0x7f, 0xb1, 0x0d, 0x21, 0x7b, 0xa3, 0xb6, 0x4a, 0x5a, 0xae, 0xea, 0x41, - 0x08, 0x65, 0x88, 0xc2, 0x3c, 0x8f, 0xcd, 0xd7, 0xd4, 0x7c, 0x72, 0xd4, - 0xf2, 0x1d, 0x2a, 0xff, 0x88, 0xc3, 0x81, 0xed, 0x05, 0x9b, 0x4b, 0x17, - 0x3b, 0xc2, 0x48, 0x23, 0xb9, 0x17, 0x70, 0x57, 0xda, 0x10, 0xb9, 0xa0, - 0xb8, 0xa2, 0x61, 0x06, 0x6f, 0x48, 0x8b, 0xc5, 0x52, 0x09, 0x39, 0xb6, - 0x62, 0x78, 0x44, 0xc1, 0x34, 0x8a, 0x11, 0x70, 0x09, 0x7f, 0x1a, 0x77, - 0xe7, 0x1d, 0x1b, 0x86, 0x71, 0x9e, 0x7d, 0xd4, 0xdf, 0xea, 0x55, 0x87, - 0x27, 0xaf, 0x3c, 0x74, 0x26, 0xdb, 0x10, 0x4b, 0xf2, 0x49, 0xac, 0x9b, - 0x9d, 0x82, 0x4f, 0x37, 0x49, 0xff, 0x24, 0xb0, 0x87, 0xec, 0x12, 0x09, - 0x95, 0xb1, 0x95, 0x9c, 0xae, 0xd5, 0x6c, 0x80, 0xd4, 0x65, 0x7c, 0x1b, - 0xab, 0xd7, 0x99, 0x1f, 0xca, 0x91, 0xdc, 0x7d, 0x02, 0xdb, 0xd6, 0x02, - 0xcb, 0x11, 0x6c, 0x02, 0x8a, 0x2f, 0xec, 0xb0, 0x3a, 0xeb, 0x9b, 0x80, - 0x60, 0x62, 0x28, 0x36, 0x84, 0x7e, 0x4d, 0xa5, 0xa0, 0xc6, 0xb6, 0x28, - 0xc6, 0xa3, 0xda, 0xeb, 0x6d, 0x74, 0xb7, 0x99, 0x9f, 0xbb, 0x00, 0x33, - 0xea, 0x67, 0x9c, 0xd9, 0x8c, 0x6c, 0xc3, 0x3b, 0x0c, 0xc6, 0x26, 0xcc, - 0x47, 0x5c, 0x7a, 0xae, 0x64, 0x9e, 0x30, 0x31, 0xda, 0xd2, 0xe5, 0x9d, - 0xe9, 0xc4, 0xff, 0xd0, 0x2e, 0x1d, 0x89, 0xa5, 0xb8, 0x78, 0xab, 0xb0, - 0xc9, 0x8d, 0xe1, 0xef, 0x5d, 0x22, 0x5d, 0xc5, 0x15, 0x82, 0x0b, 0x35, - 0x06, 0xc0, 0xef, 0x81, 0x1a, 0x02, 0x17, 0x86, 0x41, 0xb6, 0xfd, 0x1d, - 0x3f, 0x58, 0x3f, 0xf8, 0x52, 0xf2, 0x4b, 0x96, 0x75, 0xb2, 0x01, 0x76, - 0x82, 0x1c, 0x6e, 0x2d, 0x0e, 0xf2, 0x32, 0xd0, 0x80, 0x05, 0xeb, 0xa3, - 0x50, 0x3e, 0xa0, 0x48, 0xd3, 0xd7, 0xed, 0xa3, 0x3a, 0xb6, 0x8d, 0x03, - 0xc5, 0x4c, 0xd6, 0xae, 0x7b, 0xf0, 0xb9, 0x51, 0x9c, 0xd7, 0xcd, 0x25, - 0x9d, 0xf7, 0x0f, 0x99, 0x6f, 0x8b, 0x4c, 0xcb, 0x31, 0x07, 0xb2, 0xbd, - 0x1e, 0x49, 0x6b, 0xd5, 0x26, 0x0c, 0xda, 0x01, 0x73, 0x78, 0x0e, 0xfd, - 0x57, 0xca, 0x3e, 0xc8, 0x20, 0x35, 0x05, 0xb7, 0x68, 0x5d, 0x22, 0xe9, - 0xc3, 0x7b, 0x13, 0xac, 0x90, 0xe1, 0x93, 0x2f, 0xcd, 0xad, 0x5f, 0x9a, - 0x1f, 0x25, 0xb3, 0xed, 0xb5, 0xe7, 0xa6, 0xb6, 0x76, 0x4f, 0xdc, 0xcb, - 0xff, 0x71, 0x59, 0x8e, 0x3d, 0xbb, 0x0f, 0xe7, 0x87, 0x88, 0x49, 0xf1, - 0x1e, 0x00, 0x3d, 0x0a, 0x80, 0x7c, 0x8e, 0x33, 0x39, 0x6a, 0xcb, 0x10, - 0x54, 0xd5, 0xcc, 0xa6, 0xb7, 0x67, 0x0a, 0x19, 0x0c, 0x04, 0x24, 0xf9, - 0x4f, 0xaa, 0x08, 0xf8, 0x81, 0x88, 0xe8, 0x82, 0xb0, 0xac, 0x1c, 0x19, - 0x23, 0x4f, 0xad, 0xa5, 0xb2, 0x2f, 0xa7, 0x23, 0xda, 0x73, 0xdf, 0xdf, - 0xad, 0x39, 0x3b, 0x1e, 0xb7, 0x96, 0xb3, 0x38, 0x0e, 0x70, 0x2f, 0xf6, - 0x85, 0xae, 0x0a, 0xa5, 0xe3, 0x41, 0x10, 0x7b, 0x00, 0x1c, 0x6f, 0xba, - 0x85, 0x3b, 0xf4, 0x29, 0xb3, 0x74, 0xb0, 0x08, 0x2c, 0x8d, 0xda, 0xf6, - 0x39, 0x7b, 0x08, 0xf2, 0x91, 0x3c, 0xb0, 0x74, 0x89, 0x3a, 0xea, 0xab, - 0x8f, 0x4f, 0x67, 0xb1, 0x49, 0x95, 0x08, 0x7d, 0x0b, 0xfb, 0x93, 0x3a, - 0x93, 0x1a, 0x80, 0x1c, 0xe0, 0x5a, 0x92, 0xc1, 0xe8, 0xfb, 0xbc, 0x73, - 0xc9, 0x53, 0xe3, 0xae, 0x92, 0x6d, 0x7c, 0x00, 0x0a, 0xc4, 0xb0, 0xc7, - 0x46, 0x78, 0xfc, 0xc5, 0x00, 0xf6, 0xbf, 0xa2, 0xee, 0xf9, 0x40, 0xdf, - 0xc3, 0xdd, 0x4d, 0xc0, 0xf6, 0x04, 0xcb, 0xb2, 0x69, 0x41, 0x08, 0xd8, - 0xe9, 0xd2, 0x43, 0xa5, 0xca, 0x04, 0x7d, 0x4c, 0xf4, 0x43, 0xcb, 0x2a, - 0x27, 0xb3, 0xf5, 0x0e, 0x3c, 0xaf, 0x69, 0x8e, 0x8e, 0x08, 0x66, 0xa3, - 0xf1, 0x80, 0x31, 0xf3, 0x71, 0x30, 0x59, 0xc1, 0x27, 0x10, 0xb7, 0x15, - 0x4e, 0x97, 0xe9, 0x46, 0x65, 0x89, 0xc2, 0xd9, 0x83, 0xea, 0xa2, 0x27, - 0x1e, 0x97, 0xa6, 0x58, 0xf6, 0xc9, 0x33, 0x75, 0x98, 0x1e, 0x03, 0xff, - 0x5e, 0x46, 0x01, 0x24, 0xdb, 0x7f, 0xed, 0xa9, 0x6a, 0xb5, 0xc4, 0x5f, - 0x48, 0xb7, 0x32, 0xc6, 0xb1, 0x7e, 0x65, 0x15, 0x01, 0x3a, 0x91, 0xa9, - 0xa8, 0xa1, 0x1f, 0x5a, 0x56, 0xe2, 0x70, 0xcb, 0xc3, 0xa1, 0x96, 0xc5, - 0x34, 0x6b, 0x31, 0x11, 0xe6, 0x8b, 0x42, 0xac, 0xea, 0x4c, 0xf0, 0x60, - 0x89, 0x54, 0x5b, 0x91, 0x02, 0x3d, 0xf5, 0x39, 0xfc, 0x6a, 0x0c, 0x8d, - 0xb7, 0x37, 0x02, 0x4c, 0xb6, 0x07, 0x50, 0x7d, 0xb8, 0xd6, 0xff, 0xe9, - 0x0e, 0x18, 0xd7, 0xff, 0x06, 0x73, 0x22, 0x95, 0x9c, 0x8f, 0x68, 0x2a, - 0x71, 0x73, 0xa4, 0x1f, 0xc6, 0x7a, 0x89, 0xaa, 0x9f, 0x44, 0xaf, 0x06, - 0xdc, 0x3b, 0x82, 0x3d, 0xcc, 0x60, 0xd9, 0x2d, 0xf9, 0xb7, 0xc1, 0x83, - 0x35, 0x9a, 0x00, 0x7c, 0xf7, 0x54, 0x71, 0x16, 0x3a, 0xf6, 0x61, 0x7d, - 0x80, 0xf5, 0x2b, 0xcf, 0x91, 0xf4, 0x4c, 0x63, 0xcd, 0xa2, 0xcb, 0x60, - 0x58, 0x67, 0xe8, 0x7f, 0xc3, 0x34, 0x61, 0x01, 0x46, 0x36, 0xcf, 0xda, - 0x11, 0x56, 0x06, 0x64, 0x2a, 0x59, 0xfe, 0xb3, 0x9a, 0xdd, 0x9d, 0xef, - 0x30, 0xbe, 0xc4, 0x92, 0x00, 0xd1, 0x4e, 0x34, 0x45, 0x3c, 0x33, 0x8f, - 0xa4, 0x0b, 0x7e, 0x83, 0xc4, 0xde, 0x44, 0x31, 0x1f, 0x69, 0xf1, 0x6a, - 0x94, 0x1f, 0xf4, 0x50, 0x7c, 0xe9, 0xdb, 0x68, 0xdb, 0x4d, 0x4e, 0xde, - 0x1d, 0xec, 0x50, 0x67, 0x96, 0x61, 0x93, 0x2c, 0x30, 0x56, 0x83, 0x9d, - 0x94, 0x08, 0xb1, 0x58, 0x4c, 0x23, 0x85, 0xaa, 0x5b, 0x14, 0x17, 0x5b, - 0x12, 0x38, 0xa6, 0x2f, 0x57, 0x0e, 0x44, 0xaf, 0xbc, 0xa5, 0xe7, 0x88, - 0x66, 0xbb, 0x9f, 0x50, 0xd6, 0xb8, 0x7b, 0xfc, 0x4b, 0x28, 0xbd, 0xd3, - 0x08, 0xf5, 0x28, 0xc6, 0xf5, 0xf3, 0x1e, 0xdb, 0xcf, 0x90, 0x6b, 0x03, - 0x75, 0x23, 0xbc, 0xe2, 0x56, 0x35, 0x21, 0x65, 0x7c, 0x77, 0x77, 0xe3, - 0x01, 0xf7, 0xac, 0xdd, 0x15, 0x1e, 0x13, 0xc8, 0x7c, 0x0a, 0xb9, 0xc1, - 0x64, 0xcf, 0xfd, 0xfd, 0x71, 0xce, 0x8a, 0x47, 0x53, 0xe3, 0x4b, 0x6c, - 0xa1, 0xcd, 0x22, 0x24, 0xeb, 0xda, 0xed, 0xfd, 0xc2, 0xe5, 0xde, 0x96, - 0x01, 0x1a, 0xb6, 0x39, 0x37, 0xd1, 0xe0, 0xce, 0xec, 0xb5, 0xee, 0xc5, - 0x89, 0xcb, 0x10, 0xcb, 0x70, 0x88, 0xfa, 0x17, 0x88, 0xf2, 0xad, 0xf8, - 0x39, 0xb4, 0x7e, 0x9f, 0xd4, 0xc0, 0x49, 0xd1, 0x5a, 0xc5, 0xbd, 0x8a, - 0xb2, 0x5d, 0xf4, 0x87, 0x35, 0xee, 0x74, 0xfe, 0x14, 0x79, 0xb0, 0xb9, - 0x16, 0x90, 0xbf, 0x1c, 0x48, 0x95, 0x18, 0x98, 0x8a, 0x41, 0xa4, 0x99, - 0x3d, 0x0f, 0xbe, 0x42, 0xa2, 0x78, 0xc4, 0xeb, 0xfd, 0xbd, 0x02, 0xd3, - 0x82, 0x4b, 0xaf, 0x3c, 0x5b, 0x0b, 0x23, 0x5f, 0xf3, 0x33, 0x1a, 0x08, - 0x91, 0xf9, 0xdb, 0x91, 0xdf, 0x41, 0x61, 0x66, 0x80, 0x57, 0xe7, 0x13, - 0x97, 0x2e, 0xdf, 0x74, 0xe7, 0xc1, 0xbf, 0xe3, 0xf7, 0xb0, 0xf8, 0xcd, - 0x1e, 0x67, 0xae, 0x53, 0x42, 0x0b, 0x51, 0x30, 0x4c, 0x66, 0xc2, 0x9e, - 0x83, 0x0d, 0x17, 0x16, 0x19, 0xcf, 0x68, 0x6e, 0x97, 0xf0, 0xa6, 0x69, - 0x24, 0xe1, 0x5a, 0xbd, 0x6e, 0x9c, 0x57, 0x51, 0x97, 0xa7, 0x3b, 0x28, - 0xfc, 0x41, 0xf5, 0xc3, 0x19, 0xb4, 0x90, 0x0d, 0x1f, 0x0d, 0xa2, 0x04, - 0x21, 0x39, 0x62, 0x6c, 0x01, 0x0d, 0xd8, 0xd7, 0x0b, 0x13, 0xd6, 0x29, - 0xf6, 0x89, 0x3f, 0x19, 0xc9, 0x00, 0xfb, 0xaf, 0x92, 0xa3, 0x9f, 0x22, - 0xcc, 0x5c, 0x45, 0xea, 0xd7, 0xca, 0x38, 0x0e, 0xc8, 0xd2, 0x32, 0x9c, - 0x2b, 0x10, 0xd0, 0xcd, 0xea, 0xc4, 0xc1, 0xe6, 0x6c, 0x72, 0xab, 0xd0, - 0x17, 0xc3, 0xdd, 0x4d, 0x4c, 0x10, 0xaf, 0xae, 0x42, 0x20, 0x2e, 0x17, - 0x9e, 0x67, 0xab, 0x34, 0xa5, 0x2a, 0xf8, 0x01, 0xec, 0xf6, 0x31, 0x22, - 0x3d, 0x42, 0x25, 0x63, 0x81, 0x14, 0x4f, 0xe9, 0xe3, 0x80, 0x72, 0x16, - 0x80, 0x75, 0x77, 0xf3, 0x06, 0x76, 0xa5, 0x34, 0xef, 0xc0, 0x30, 0x40, - 0xe0, 0x68, 0x70, 0x30, 0x9d, 0x65, 0x9d, 0xb3, 0x74, 0x79, 0x1b, 0xe3, - 0xc4, 0x79, 0xcd, 0xdc, 0xe3, 0x63, 0xa0, 0x45, 0x1a, 0x78, 0xd2, 0xf5, - 0xe8, 0xb6, 0x5a, 0x49, 0x92, 0x69, 0x58, 0x5f, 0x1a, 0xb9, 0x1e, 0x30, - 0xbe, 0xaf, 0xbb, 0x5b, 0xf5, 0xd2, 0x6a, 0x3b, 0x58, 0xb8, 0x15, 0xd8, - 0x93, 0x86, 0xe0, 0x24, 0xe1, 0x66, 0x91, 0x87, 0x0b, 0x07, 0x03, 0x95, - 0x58, 0xc8, 0xc0, 0x59, 0x16, 0xa9, 0x1d, 0x4b, 0xd8, 0x5e, 0xf2, 0xb7, - 0x8f, 0xb1, 0xb1, 0x2f, 0x72, 0xd7, 0xcb, 0x77, 0x26, 0xf6, 0x06, 0x93, - 0xa4, 0x1f, 0x40, 0x48, 0xad, 0xf9, 0x62, 0xf7, 0xf0, 0xab, 0x41, 0x02, - 0xc2, 0xcc, 0xc1, 0x92, 0x27, 0x65, 0x7e, 0xad, 0x59, 0x81, 0x16, 0xb9, - 0x85, 0x9b, 0xf6, 0x90, 0x27, 0xf0, 0xd6, 0x84, 0x83, 0x30, 0xda, 0x07, - 0x1f, 0x92, 0x49, 0xfc, 0xa3, 0x1b, 0xb4, 0x03, 0x18, 0xda, 0xde, 0x45, - 0x99, 0x7b, 0x67, 0x9c, 0x54, 0xcc, 0x5f, 0xb1, 0xe9, 0x32, 0x01, 0x0b, - 0xe0, 0x54, 0xd5, 0xcb, 0xfd, 0x3b, 0x49, 0x9d, 0x51, 0xee, 0xf1, 0xe1, - 0x62, 0x3e, 0x4e, 0x07, 0xf9, 0x2b, 0x70, 0x62, 0x76, 0x8b, 0x9a, 0x9a, - 0x47, 0xde, 0x10, 0x13, 0x74, 0x15, 0xc6, 0x0a, 0x69, 0xc3, 0xf1, 0x1e, - 0x9c, 0x7f, 0xba, 0xab, 0x1f, 0xb3, 0xc4, 0x1c, 0x26, 0x0c, 0x38, 0xdf, - 0x90, 0xb8, 0x15, 0x37, 0x67, 0x91, 0x7e, 0x11, 0x7a, 0x0f, 0xdc, 0xee, - 0x69, 0x8a, 0x73, 0xa1, 0x26, 0xc0, 0x0f, 0xcb, 0x41, 0xf7, 0x0b, 0xdc, - 0x95, 0x4a, 0x0e, 0x3e, 0x23, 0xdf, 0x7d, 0x4b, 0x82, 0xa4, 0x50, 0xad, - 0x9e, 0x49, 0x6b, 0xdd, 0x71, 0x18, 0x9a, 0x9f, 0x75, 0x40, 0x48, 0x50, - 0xbb, 0xfd, 0x84, 0x16, 0xc7, 0x20, 0x8f, 0x76, 0x6d, 0x5f, 0x4f, 0x74, - 0x45, 0xed, 0xf8, 0x58, 0x7d, 0xad, 0x80, 0x7c, 0xc2, 0x31, 0xe2, 0x10, - 0xef, 0xc8, 0xee, 0xbb, 0x27, 0xe3, 0xc9, 0x1e, 0x83, 0x2d, 0xc3, 0x1e, - 0x70, 0x1c, 0x73, 0x11, 0x56, 0x17, 0xb4, 0xbd, 0x73, 0xdd, 0x4c, 0x61, - 0x3e, 0xb8, 0x60, 0x83, 0xf6, 0x0c, 0xc0, 0xfe, 0x87, 0xc1, 0x34, 0xa0, - 0x9d, 0x34, 0x69, 0xa6, 0x81, 0x76, 0x7b, 0x5b, 0x47, 0xb0, 0xe9, 0xf2, - 0x52, 0x38, 0x04, 0x3a, 0x41, 0x98, 0x1a, 0x3d, 0xf9, 0x3a, 0x28, 0x0a, - 0x80, 0x9c, 0x73, 0x08, 0xfd, 0xcd, 0x95, 0xa8, 0xe2, 0x3b, 0xfa, 0x96, - 0xb5, 0xae, 0xfd, 0x82, 0xea, 0xcb, 0xeb, 0x8f, 0xeb, 0xe4, 0x69, 0x46, - 0x07, 0x33, 0xcf, 0x46, 0xd6, 0x27, 0x62, 0x9e, 0xad, 0x68, 0x89, 0xf9, - 0xa1, 0x9b, 0x42, 0x25, 0xfb, 0xe8, 0x67, 0xde, 0xf0, 0xc5, 0x16, 0x12, - 0x55, 0xc7, 0x9b, 0x45, 0x5b, 0xd0, 0xfc, 0xb7, 0xb9, 0xea, 0x3e, 0xb5, - 0x52, 0xf5, 0x2c, 0x68, 0x18, 0xae, 0xe9, 0x60, 0x40, 0x9e, 0xea, 0xdb, - 0xab, 0x8b, 0x93, 0x37, 0x07, 0x23, 0x1a, 0x42, 0x25, 0x68, 0x3a, 0xae, - 0x11, 0xb1, 0x41, 0x9f, 0xd5, 0xa5, 0x08, 0x58, 0xba, 0x7a, 0x8e, 0x82, - 0xce, 0x95, 0xbb, 0x27, 0x83, 0xab, 0xda, 0x8c, 0x5d, 0xf9, 0x85, 0xee, - 0x19, 0x6b, 0xbe, 0x71, 0x80, 0xd5, 0x79, 0x60, 0x2e, 0xa8, 0xd1, 0x96, - 0x92, 0xab, 0x40, 0x58, 0x9c, 0x4a, 0x15, 0x44, 0x72, 0xa3, 0x9e, 0x9e, - 0xa5, 0xe9, 0x1f, 0xc2, 0x33, 0x29, 0x73, 0x23, 0x3b, 0xed, 0x5d, 0xdc, - 0xce, 0x69, 0x43, 0xca, 0x96, 0x26, 0xcd, 0x58, 0xda, 0x78, 0x05, 0xe9, - 0xfa, 0x13, 0x60, 0x57, 0x96, 0x58, 0x1c, 0xea, 0x63, 0xb0, 0xb5, 0xcb, - 0x96, 0xa8, 0x2f, 0x28, 0x41, 0x5f, 0x7e, 0xcb, 0x76, 0x99, 0x31, 0xcc, - 0xc3, 0xec, 0xd4, 0x34, 0xf9, 0x18, 0x2f, 0x7c, 0xa0, 0x5a, 0xf2, 0xe0, - 0xdb, 0xea, 0xbb, 0x12, 0x9c, 0x55, 0xb9, 0x68, 0x9d, 0xd7, 0xe5, 0x93, - 0x88, 0x52, 0xef, 0xd5, 0x7f, 0x0a, 0x80, 0xf9, 0x68, 0xe3, 0xfb, 0x5e, - 0xb0, 0x3b, 0xb3, 0xdc, 0xe4, 0xc6, 0xe1, 0x23, 0xbe, 0x8b, 0xf0, 0xc3, - 0xa6, 0x1d, 0x56, 0x14, 0x2d, 0xa4, 0xa7, 0xe8, 0x08, 0x30, 0x29, 0xb8, - 0x1e, 0x0d, 0x77, 0xc6, 0x7c, 0xa3, 0x7c, 0x74, 0x34, 0xf3, 0xf8, 0x4e, - 0xac, 0x22, 0x35, 0xb0, 0x02, 0x2a, 0x46, 0xc0, 0x32, 0x83, 0x13, 0x80, - 0x5a, 0xc8, 0x56, 0xbd, 0x79, 0x79, 0x9d, 0xe1, 0xd6, 0x6e, 0xd7, 0x2a, - 0xc0, 0xf5, 0x17, 0xa8, 0x15, 0xe1, 0xf8, 0xd1, 0x50, 0x0b, 0xd6, 0x3f, - 0x6a, 0xc8, 0x39, 0xb1, 0x95, 0xab, 0x8c, 0x06, 0xe3, 0xa2, 0x4e, 0xd1, - 0x81, 0x06, 0xb5, 0x1b, 0x34, 0x06, 0xb4, 0x49, 0x7b, 0xe7, 0x07, 0x38, - 0xca, 0x05, 0xd9, 0x4c, 0x1a, 0x7c, 0x3a, 0xdc, 0xc5, 0xec, 0xb8, 0x29, - 0x19, 0xc9, 0x0d, 0x84, 0x22, 0x62, 0x2b, 0xcb, 0xd3, 0x30, 0xb5, 0xe1, - 0xeb, 0xdf, 0x59, 0x75, 0x61, 0xa7, 0x58, 0x83, 0xd9, 0x3a, 0x11, 0x14, - 0x5a, 0x26, 0x1b, 0x98, 0x27, 0xf9, 0x11, 0x64, 0xcd, 0xf1, 0xe9, 0xf2, - 0xf3, 0x2c, 0x71, 0x2d, 0x7b, 0xda, 0xde, 0xc1, 0x18, 0xe2, 0xb4, 0x7c, - 0xcf, 0x0c, 0xd6, 0x1a, 0x81, 0x89, 0xab, 0x24, 0x0c, 0xa0, 0x6f, 0xfd, - 0x9c, 0x70, 0x70, 0xcd, 0xad, 0x77, 0x30, 0xf0, 0x40, 0x65, 0xdc, 0x25, - 0xc2, 0xc2, 0x19, 0xa8, 0x2f, 0x4e, 0x2a, 0xa8, 0xc3, 0xee, 0xd2, 0x6e, - 0x4f, 0xc1, 0x8c, 0x06, 0x47, 0x60, 0x36, 0x12, 0x02, 0xbc, 0x96, 0x44, - 0x50, 0xc7, 0x1b, 0xcb, 0x52, 0x09, 0x4f, 0x44, 0xd2, 0xe3, 0x59, 0x77, - 0x82, 0x3c, 0x6e, 0x0f, 0x29, 0xa1, 0x91, 0xeb, 0xc0, 0xec, 0x04, 0x13, - 0x4f, 0x7f, 0xd9, 0xeb, 0x9d, 0xd1, 0x2a, 0xea, 0xf4, 0xee, 0xee, 0x93, - 0x85, 0x73, 0x93, 0x63, 0x99, 0x74, 0x6a, 0xbe, 0x8d, 0x4a, 0x64, 0xe0, - 0x1c, 0x89, 0x43, 0xfd, 0x6c, 0x02, 0xd5, 0xa9, 0xec, 0x62, 0xfc, 0xd8, - 0x61, 0x24, 0xe8, 0x58, 0x3d, 0x6e, 0x14, 0x63, 0x68, 0xa6, 0xea, 0x49, - 0xaa, 0xdd, 0x84, 0xcb, 0xe9, 0xc3, 0x8f, 0x83, 0x1e, 0x3b, 0x7b, 0x3a, - 0xd1, 0x71, 0x5e, 0x72, 0x5d, 0x60, 0x2c, 0xd8, 0xb0, 0x44, 0x19, 0x97, - 0x1b, 0x9f, 0x57, 0x28, 0xb8, 0xe4, 0x8e, 0xe2, 0x02, 0x2f, 0x38, 0x7f, - 0x86, 0xc6, 0xc3, 0x78, 0x1f, 0x87, 0x2f, 0xda, 0x13, 0x13, 0x49, 0x11, - 0x49, 0x36, 0x1c, 0xe2, 0x37, 0x5d, 0x6f, 0x4d, 0x86, 0xb4, 0x45, 0x6b, - 0xc1, 0x54, 0x26, 0x82, 0x72, 0x6d, 0x63, 0x4a, 0x3e, 0xbb, 0x96, 0x90, - 0x47, 0xb7, 0x0c, 0xc7, 0xd1, 0xfc, 0xbd, 0x0e, 0x15, 0x59, 0x80, 0xa7, - 0x47, 0xfe, 0x63, 0xd0, 0x3f, 0x9a, 0x24, 0x2a, 0x3c, 0xb9, 0xa8, 0x3f, - 0xa7, 0x67, 0x2c, 0xd7, 0xfb, 0x9f, 0x75, 0x56, 0x1b, 0xde, 0x73, 0x02, - 0x78, 0xbc, 0x4a, 0x2f, 0x39, 0x81, 0xf1, 0xee, 0x1d, 0xed, 0x36, 0xb7, - 0xb6, 0x91, 0x6b, 0xce, 0xff, 0x10, 0xe9, 0xf7, 0x3f, 0x69, 0x6b, 0x4d, - 0x3c, 0x74, 0xa1, 0x9f, 0x51, 0xcd, 0x12, 0xb0, 0x59, 0x10, 0x4e, 0xfe, - 0x83, 0x1f, 0x4e, 0x92, 0x2c, 0xfe, 0xaf, 0xcb, 0x9e, 0x17, 0x2f, 0xd9, - 0x05, 0x88, 0xf1, 0x25, 0x36, 0xcc, 0xeb, 0x6f, 0xbc, 0x47, 0xeb, 0x97, - 0x43, 0x8b, 0xd5, 0x2c, 0x50, 0x19, 0xdd, 0x33, 0x98, 0xd5, 0x86, 0xb6, - 0x3b, 0x1a, 0x5c, 0xb6, 0xdb, 0xe1, 0xc1, 0x6d, 0x84, 0x39, 0x23, 0x52, - 0x81, 0x21, 0x9c, 0xd5, 0x56, 0x71, 0xcb, 0xe1, 0xdc, 0x05, 0x81, 0xc1, - 0xa8, 0x92, 0x5c, 0x2d, 0xdf, 0xea, 0x30, 0x27, 0x82, 0x56, 0x26, 0x86, - 0xf5, 0x19, 0x7e, 0xed, 0xec, 0xda, 0xed, 0x80, 0x19, 0xdd, 0xe8, 0x31, - 0xbd, 0x18, 0x73, 0xea, 0x61, 0xd5, 0x48, 0x2e, 0x78, 0x21, 0x92, 0x88, - 0x0e, 0x9e, 0x82, 0xc0, 0xe0, 0x99, 0xf4, 0x6f, 0xfd, 0x6e, 0x88, 0x7c, - 0xbe, 0xeb, 0x2d, 0x89, 0x37, 0xa7, 0x03, 0xd0, 0x75, 0x5e, 0x69, 0x0d, - 0x63, 0x34, 0x51, 0x62, 0x51, 0x91, 0x88, 0x87, 0xb9, 0x7d, 0x3f, 0x90, - 0xc6, 0xb6, 0xd4, 0x8e, 0x8d, 0xe6, 0x55, 0xa8, 0x98, 0x8c, 0xa4, 0xd9, - 0xbb, 0x51, 0x4b, 0x85, 0x8c, 0x53, 0xef, 0xc7, 0x8d, 0xd9, 0x64, 0x92, - 0xde, 0x38, 0xb4, 0x70, 0x35, 0x04, 0xf2, 0x13, 0xb9, 0x7e, 0x61, 0x6e, - 0x91, 0x9c, 0x17, 0x2d, 0x05, 0x06, 0x9f, 0xe9, 0xaa, 0x86, 0x35, 0xcd, - 0x25, 0x9c, 0x59, 0x3e, 0x3c, 0x01, 0x67, 0x30, 0xbb, 0x32, 0x32, 0x27, - 0x0d, 0x01, 0x56, 0x1c, 0xd6, 0x1f, 0xd5, 0xa1, 0xc6, 0xc1, 0x73, 0xf1, - 0x7e, 0xa3, 0x66, 0xf0, 0xcc, 0x2b, 0x99, 0xe2, 0xf8, 0x96, 0x19, 0x25, - 0x5f, 0xa2, 0x50, 0x0f, 0xe2, 0xe1, 0x0f, 0xa7, 0x18, 0x28, 0x31, 0x1c, - 0x6e, 0xd4, 0xca, 0x7d, 0x77, 0x28, 0x63, 0x95, 0xff, 0x4a, 0xc0, 0x45, - 0x36, 0xf2, 0x0c, 0x19, 0x16, 0x8d, 0xfc, 0x93, 0x3a, 0xe0, 0x67, 0x08, - 0x05, 0x0f, 0xe2, 0xbd, 0xe9, 0xc1, 0x0b, 0xcc, 0x9c, 0xed, 0x5e, 0xbc, - 0x8c, 0x48, 0xaf, 0x74, 0x05, 0x96, 0xd7, 0x58, 0x66, 0x5e, 0x1f, 0x0e, - 0x95, 0x1f, 0xd3, 0xef, 0xa7, 0x45, 0xaf, 0x6d, 0xd0, 0x3b, 0xe3, 0x19, - 0x96, 0x45, 0x12, 0x32, 0xfd, 0x11, 0x6b, 0xd0, 0xe7, 0x44, 0x18, 0x2d, - 0x71, 0x71, 0x36, 0x99, 0x9f, 0x11, 0x67, 0x11, 0x0b, 0x4e, 0x79, 0xac, - 0x49, 0x79, 0x91, 0x35, 0x87, 0xdd, 0xc1, 0xa2, 0xb2, 0x76, 0xae, 0x90, - 0x76, 0x51, 0x60, 0x51, 0x8b, 0x5c, 0xff, 0x3b, 0xc9, 0x39, 0x55, 0x79, - 0xd3, 0xa9, 0x27, 0xe0, 0xc6, 0xb2, 0x17, 0x6a, 0x9a, 0x35, 0xdb, 0xb6, - 0x0e, 0x2a, 0xa0, 0x17, 0x53, 0xa3, 0x83, 0x3e, 0x3b, 0x15, 0xd0, 0x61, - 0xf6, 0x50, 0xc1, 0xa8, 0xf6, 0x86, 0x86, 0x22, 0x6e, 0x9b, 0x3e, 0xe1, - 0xdb, 0x04, 0x04, 0xa4, 0x6a, 0x96, 0x32, 0x02, 0xf1, 0xa5, 0xd3, 0xc0, - 0x39, 0xb7, 0xb6, 0x35, 0xaa, 0x5e, 0x0a, 0x75, 0x50, 0x9d, 0x20, 0x82, - 0x73, 0x3e, 0x6d, 0xde, 0x5b, 0x28, 0x11, 0xf5, 0x63, 0xab, 0xe5, 0x1a, - 0x55, 0x02, 0xd2, 0x64, 0xcb, 0x2c, 0x6b, 0x2e, 0x8c, 0x17, 0xdb, 0x8c, - 0x7c, 0xea, 0xa5, 0x43, 0xe2, 0xb4, 0xa8, 0x4f, 0xa9, 0x52, 0x9e, 0x45, - 0x59, 0xc3, 0x1b, 0x7d, 0xf9, 0x4a, 0xeb, 0x86, 0x0b, 0x56, 0xc5, 0x08, - 0xa8, 0xb6, 0xec, 0x2c, 0xc8, 0x22, 0x69, 0xe3, 0x0d, 0x49, 0xa3, 0x42, - 0x32, 0x55, 0xce, 0x33, 0x04, 0xeb, 0xb9, 0x85, 0x5f, 0x12, 0x1c, 0x97, - 0xc2, 0x2c, 0x9a, 0xac, 0x2e, 0x92, 0xe8, 0x67, 0xc1, 0x54, 0xd9, 0x24, - 0x1d, 0xc8, 0xe8, 0x34, 0x30, 0x65, 0xee, 0xb8, 0x03, 0xfb, 0xcd, 0xcf, - 0xfa, 0xca, 0x9d, 0xf8, 0x2d, 0x63, 0x69, 0x6f, 0x44, 0x9d, 0x8b, 0xb1, - 0xc6, 0x4e, 0x9a, 0xd5, 0xe0, 0xfc, 0xae, 0x28, 0xd8, 0xe2, 0xb6, 0x77, - 0x73, 0xd4, 0x17, 0x34, 0xb5, 0x30, 0x6e, 0x5c, 0x69, 0xc5, 0xcf, 0xa9, - 0x8d, 0x4f, 0x60, 0x52, 0x0e, 0xc2, 0x07, 0x6c, 0x3c, 0x6c, 0x6f, 0xc3, - 0xc8, 0xa1, 0xea, 0xc2, 0xbf, 0x36, 0xe3, 0xf1, 0x80, 0x0b, 0x30, 0x57, - 0x05, 0xa6, 0xe0, 0xcd, 0x0a, 0x68, 0x56, 0xcb, 0xfc, 0x18, 0xbf, 0xef, - 0xf9, 0x96, 0x10, 0x07, 0xd2, 0x77, 0xd4, 0x53, 0xcc, 0x50, 0x84, 0x39, - 0x1f, 0x04, 0x72, 0xb3, 0x02, 0x67, 0xb7, 0x8f, 0x32, 0xba, 0xd3, 0x4f, - 0x20, 0x2f, 0xbb, 0xbe, 0x38, 0xf7, 0x68, 0x5a, 0x75, 0x5a, 0x16, 0x30, - 0x35, 0x3e, 0x29, 0x5d, 0xc2, 0x94, 0x12, 0xb0, 0xeb, 0x6e, 0xa8, 0xd5, - 0x6f, 0xc8, 0xcb, 0xc6, 0x90, 0x85, 0x49, 0x6b, 0xd3, 0xa0, 0xa8, 0x6c, - 0x3c, 0x49, 0x89, 0x94, 0x66, 0xa7, 0xca, 0x83, 0xa5, 0xf3, 0xe3, 0x4a, - 0x46, 0x4f, 0x55, 0xc2, 0x35, 0x71, 0x76, 0xb5, 0xe2, 0xc0, 0x19, 0x9b, - 0x83, 0xad, 0xdf, 0x11, 0x7e, 0xd3, 0x01, 0xbf, 0x2e, 0xd5, 0x6d, 0xd2, - 0x66, 0x8b, 0xac, 0xb6, 0x02, 0xb8, 0xd8, 0xe0, 0xc0, 0xf4, 0x85, 0xd4, - 0x5f, 0xf4, 0xd9, 0x83, 0xb7, 0x83, 0x5b, 0xa9, 0x70, 0xe7, 0x32, 0xdc, - 0x22, 0x23, 0xa0, 0x12, 0x5a, 0xbe, 0x18, 0x1e, 0x85, 0x35, 0xd3, 0xa5, - 0x6d, 0x2b, 0x8c, 0x25, 0x75, 0xfc, 0x86, 0xb2, 0x92, 0xac, 0xd6, 0x76, - 0xaf, 0x5b, 0x3b, 0xd0, 0x9a, 0xae, 0xb7, 0xde, 0xa1, 0xac, 0x87, 0xa2, - 0x28, 0x07, 0x90, 0x76, 0x30, 0x3a, 0x81, 0x76, 0x30, 0xa7, 0x8b, 0x6b, - 0x48, 0x7b, 0xae, 0xd5, 0xdf, 0xf5, 0xb3, 0x3f, 0x2b, 0x02, 0x38, 0x07, - 0x5e, 0x7e, 0xab, 0x2d, 0xea, 0xb4, 0x66, 0x71, 0xad, 0x1e, 0xe6, 0x0f, - 0xaa, 0xe1, 0x14, 0x98, 0x2f, 0xef, 0x71, 0xa7, 0x2a, 0xa7, 0x7a, 0x1e, - 0x84, 0x06, 0xc9, 0xfc, 0x43, 0x33, 0xc0, 0x33, 0x30, 0xff, 0xcc, 0x21, - 0xc1, 0x82, 0x8b, 0x84, 0x9c, 0x55, 0x95, 0x29, 0x3a, 0xd4, 0x2a, 0x44, - 0x03, 0xe4, 0xbf, 0x89, 0x04, 0x6e, 0x8f, 0x8e, 0xf9, 0xf0, 0x11, 0x03, - 0x7f, 0x4b, 0xa8, 0x92, 0x96, 0x20, 0x24, 0x1d, 0xfd, 0xb9, 0x5d, 0xb7, - 0xff, 0x1b, 0x69, 0x52, 0x5f, 0x51, 0x9f, 0x8f, 0x71, 0x3c, 0x40, 0x20, - 0x49, 0xbf, 0x89, 0xfb, 0x07, 0x76, 0xdc, 0xa8, 0x81, 0xf8, 0xb7, 0xe5, - 0x1b, 0x98, 0x39, 0xe2, 0xc7, 0xe0, 0x68, 0xf2, 0x98, 0x4a, 0xa3, 0x96, - 0x7b, 0xae, 0x4d, 0xef, 0x3a, 0xe2, 0x0a, 0x83, 0x42, 0x60, 0x58, 0x66, - 0x8f, 0xe0, 0x05, 0x97, 0x0b, 0x77, 0x42, 0x91, 0x4b, 0x35, 0xfe, 0xac, - 0xa9, 0xec, 0x9f, 0x4c, 0xb5, 0x9d, 0xc1, 0xfc, 0xd0, 0x1c, 0xd0, 0x8e, - 0x1e, 0x51, 0xa3, 0x92, 0x90, 0xb5, 0xcc, 0x56, 0xbb, 0x4d, 0xe3, 0x8c, - 0x8c, 0xa5, 0x6a, 0x4e, 0x45, 0x94, 0xdf, 0xfa, 0xa9, 0x21, 0x4a, 0x2c, - 0xf9, 0xc1, 0xfd, 0xec, 0xf7, 0xe4, 0x40, 0xe4, 0xc0, 0xb4, 0x7f, 0xaa, - 0x26, 0x94, 0x27, 0x79, 0x69, 0x60, 0x16, 0xe3, 0x0b, 0xea, 0xf4, 0x48, - 0x1f, 0xbe, 0xab, 0x3c, 0xb3, 0xae, 0x35, 0x23, 0xf2, 0x7e, 0x74, 0xa8, - 0xdb, 0x80, 0x56, 0xcc, 0x31, 0x96, 0xa3, 0x86, 0x7e, 0x52, 0x56, 0x67, - 0x24, 0x93, 0x8b, 0xd0, 0xbc, 0xca, 0x9f, 0xf9, 0xf4, 0x36, 0x9c, 0x85, - 0xed, 0x26, 0x94, 0x88, 0xd7, 0x12, 0x5f, 0x6f, 0x78, 0x65, 0x12, 0xd4, - 0x8d, 0xf4, 0x4b, 0x63, 0xa0, 0x29, 0x6a, 0xc5, 0x2b, 0xbb, 0x68, 0xf9, - 0xf3, 0xb1, 0xdd, 0x96, 0x02, 0x48, 0x8d, 0x05, 0xbd, 0xc1, 0x5a, 0x9f, - 0x67, 0x82, 0x59, 0xe1, 0x43, 0xf8, 0xbd, 0x38, 0x35, 0x6c, 0xcc, 0xdf, - 0xa2, 0x50, 0x4e, 0x93, 0xb0, 0xab, 0x60, 0xd8, 0x4f, 0x25, 0xa3, 0xe7, - 0x16, 0xf4, 0xf2, 0xc8, 0x29, 0xd1, 0x37, 0x3a, 0xbc, 0xf6, 0xcc, 0x54, - 0xe6, 0xa3, 0xa7, 0xa6, 0x7d, 0xc7, 0x57, 0x1d, 0x7b, 0xe9, 0x09, 0x5c, - 0x2e, 0xa9, 0x8a, 0x56, 0x5f, 0x1a, 0xe4, 0xb1, 0x4a, 0xff, 0xd1, 0x1f, - 0x84, 0x71, 0x60, 0xcf, 0x82, 0x3c, 0x8f, 0x51, 0x04, 0xe5, 0xe3, 0xd2, - 0x9b, 0xaf, 0x6f, 0x3c, 0xb6, 0x15, 0xc0, 0x2d, 0xb0, 0x9b, 0xa5, 0x3f, - 0x53, 0xd2, 0xc9, 0x92, 0xa0, 0x59, 0x9a, 0xb2, 0x56, 0x57, 0x0b, 0xca, - 0x5f, 0x9a, 0x95, 0xe6, 0xa1, 0xad, 0xa2, 0x94, 0x27, 0x12, 0x09, 0x00, - 0x1b, 0x79, 0xb1, 0x19, 0x2d, 0x66, 0xd0, 0xed, 0x6e, 0xd1, 0x71, 0x14, - 0xfc, 0x78, 0x9f, 0x5b, 0x4a, 0xc1, 0x41, 0x89, 0xd1, 0x92, 0x87, 0xdb, - 0x83, 0x94, 0xc1, 0x5b, 0x56, 0x3d, 0xca, 0x16, 0x75, 0x78, 0x58, 0x03, - 0x40, 0x47, 0xf1, 0xb0, 0xec, 0x4d, 0x61, 0xe7, 0xa2, 0x2c, 0x42, 0x43, - 0xf0, 0xe4, 0xe5, 0xb2, 0x81, 0xf6, 0x34, 0xd1, 0x17, 0xf3, 0xff, 0x0f, - 0xad, 0x20, 0xb9, 0xd7, 0x45, 0x6b, 0xf1, 0x62, 0x99, 0x49, 0xdf, 0xa7, - 0xd4, 0xea, 0xc3, 0xd4, 0x41, 0x04, 0xc6, 0x6c, 0x0b, 0xf3, 0x55, 0x90, - 0x4f, 0x33, 0x49, 0xe0, 0xa1, 0x72, 0xd2, 0xd8, 0xb9, 0x4c, 0x53, 0x64, - 0xdf, 0x46, 0xff, 0x39, 0x09, 0x68, 0x10, 0x66, 0x28, 0x05, 0xa6, 0xc2, - 0x35, 0xb4, 0x44, 0x73, 0xac, 0x88, 0xf6, 0x45, 0x94, 0x34, 0xb9, 0x50, - 0x94, 0xc3, 0xc1, 0xac, 0xde, 0x15, 0x95, 0x54, 0xad, 0x51, 0xc6, 0xa0, - 0x40, 0xbc, 0xe1, 0xa9, 0x4e, 0x8c, 0x24, 0x74, 0x46, 0x03, 0xbb, 0xd8, - 0x69, 0xd1, 0x2d, 0x1a, 0x2a, 0xc4, 0xb4, 0xc8, 0xa4, 0x25, 0x00, 0x57, - 0xb4, 0x4a, 0x19, 0xbd, 0xf5, 0x2f, 0x63, 0x6a, 0x9b, 0xa9, 0x0a, 0x0a, - 0x05, 0x15, 0xff, 0x01, 0x0a, 0x93, 0x84, 0x1b, 0x6c, 0x21, 0x6b, 0x34, - 0x8f, 0xcc, 0x36, 0xe7, 0xab, 0x99, 0x7b, 0xbc, 0x25, 0xb5, 0x83, 0x66, - 0x8d, 0xec, 0x5f, 0x7d, 0xd5, 0x4b, 0xf1, 0xcc, 0x18, 0x39, 0xd0, 0xd6, - 0xb1, 0xfb, 0x22, 0x41, 0xb0, 0x91, 0x66, 0x14, 0x40, 0xae, 0xa3, 0x49, - 0x39, 0xe2, 0x62, 0xf3, 0x3f, 0x18, 0xe2, 0xdf, 0x9a, 0x01, 0x4a, 0xfc, - 0xd1, 0x93, 0x68, 0x5f, 0xfc, 0x3a, 0x0a, 0xbf, 0x37, 0x4e, 0x8d, 0x30, - 0x2c, 0x87, 0x30, 0xc2, 0xd1, 0xa9, 0xac, 0xb9, 0x51, 0xdd, 0xcf, 0x40, - 0x8f, 0xde, 0x25, 0xe8, 0xf1, 0xa4, 0xd0, 0x99, 0xad, 0x45, 0x20, 0xdf, - 0x32, 0xb5, 0x1c, 0xfa, 0xe6, 0x38, 0xd0, 0x2e, 0x46, 0x23, 0x52, 0xe1, - 0x4f, 0x00, 0x65, 0xa9, 0x9d, 0xe0, 0xc6, 0x4c, 0x3c, 0x00, 0x57, 0x60, - 0xe8, 0x8f, 0xf0, 0x0b, 0x70, 0x88, 0x1c, 0xa2, 0x49, 0x46, 0xb5, 0x4d, - 0x00, 0xbc, 0x2c, 0x5d, 0xb9, 0x35, 0xa0, 0x0a, 0xbb, 0xf2, 0xf7, 0x0b, - 0x1f, 0xa5, 0x5a, 0x5f, 0x08, 0x9c, 0xa9, 0x1a, 0xdb, 0x86, 0x42, 0x0b, - 0xb1, 0x83, 0x12, 0x98, 0x15, 0x1f, 0x77, 0x80, 0x2b, 0x2c, 0xe4, 0x87, - 0x2a, 0x05, 0x35, 0x22, 0xef, 0xd5, 0xc4, 0xc7, 0x2a, 0xa6, 0xe2, 0x0c, - 0x13, 0x69, 0x18, 0x7c, 0x0c, 0x0b, 0xba, 0x7a, 0x6f, 0xd3, 0xb1, 0x67, - 0x4d, 0x60, 0x94, 0x78, 0xfc, 0x26, 0x3d, 0xec, 0xb4, 0x7b, 0xd1, 0xea, - 0x50, 0x39, 0xb4, 0xdd, 0xff, 0xe6, 0x0f, 0xde, 0x24, 0x60, 0x47, 0xff, - 0xf1, 0x96, 0xb8, 0x68, 0x18, 0x42, 0xce, 0x98, 0x6e, 0x76, 0x94, 0x09, - 0x5f, 0x98, 0xc6, 0x08, 0xaf, 0x01, 0x19, 0x21, 0x0f, 0xbb, 0x63, 0xb7, - 0x94, 0xe9, 0x95, 0xb0, 0xa6, 0x25, 0x8d, 0x04, 0x04, 0x35, 0xfc, 0x81, - 0xbe, 0xc7, 0x3a, 0x6a, 0xb5, 0xb2, 0x7a, 0xe5, 0x10, 0xcd, 0x7f, 0xe3, - 0x40, 0x97, 0xa0, 0x41, 0x99, 0xd7, 0x6d, 0xb1, 0x1f, 0x41, 0x8e, 0x6c, - 0xa6, 0x69, 0xca, 0x39, 0x43, 0x94, 0x9f, 0xa1, 0x12, 0x4e, 0xd5, 0xa7, - 0x21, 0x2c, 0x96, 0x75, 0x20, 0x84, 0x24, 0x4a, 0xff, 0x82, 0x29, 0x7d, - 0x78, 0xd6, 0xeb, 0x76, 0x92, 0x1e, 0xcb, 0x10, 0xca, 0xde, 0x6c, 0x2a, - 0xed, 0x66, 0xff, 0x24, 0xd2, 0x42, 0x6a, 0xf5, 0x0b, 0x72, 0xa0, 0xb1, - 0x16, 0x76, 0x00, 0x45, 0x18, 0xa5, 0xf9, 0xce, 0x20, 0xf8, 0x1f, 0x25, - 0x7a, 0x00, 0x2e, 0x28, 0xab, 0xcd, 0x0a, 0xef, 0x71, 0x4f, 0xe9, 0x88, - 0xc5, 0x29, 0x13, 0x09, 0x66, 0x98, 0x3f, 0x71, 0x07, 0xd1, 0xff, 0xb8, - 0x01, 0xc8, 0x14, 0xe8, 0xef, 0x73, 0x9b, 0xbe, 0xe9, 0x8f, 0x17, 0x7d, - 0x0c, 0x48, 0x34, 0x96, 0xe1, 0xab, 0x9e, 0x3c, 0xf0, 0x27, 0x9b, 0xe4, - 0x26, 0xab, 0xfc, 0x28, 0xf9, 0x44, 0xe4, 0x1e, 0xce, 0xba, 0xd2, 0x7d, - 0x9d, 0x25, 0xb8, 0x2f, 0x81, 0x74, 0xea, 0x27, 0x90, 0xc4, 0x15, 0x20, - 0xe3, 0x30, 0x05, 0xac, 0xd9, 0x35, 0xc6, 0x3c, 0x06, 0xf2, 0x71, 0xfd, - 0xaa, 0x54, 0xab, 0x4e, 0x07, 0xb8, 0xd8, 0x82, 0xc7, 0x83, 0x43, 0x39, - 0xa9, 0xa3, 0x9c, 0xc0, 0xaf, 0x49, 0xa8, 0x5c, 0x74, 0x5f, 0x59, 0x12, - 0x1c, 0xa9, 0xbf, 0xeb, 0x81, 0x34, 0xce, 0x3c, 0x2e, 0x4d, 0x0c, 0xe7, - 0x0c, 0x86, 0x47, 0xc2, 0x4c, 0xe0, 0x38, 0x7d, 0xf6, 0x03, 0x0b, 0x58, - 0x30, 0x78, 0x2b, 0xb5, 0xa3, 0xcc, 0xf5, 0xd7, 0x1f, 0x36, 0x59, 0x4c, - 0x83, 0xff, 0xfd, 0x9f, 0x8c, 0xaf, 0x55, 0xcf, 0x01, 0x4c, 0x4d, 0x6f, - 0xd9, 0x18, 0x3d, 0xb3, 0xfd, 0x82, 0x00, 0x34, 0x34, 0xc9, 0x40, 0xe4, - 0xc5, 0x93, 0x56, 0x8d, 0x2c, 0xa5, 0x3d, 0xc3, 0xbd, 0xb6, 0x15, 0x82, - 0x4a, 0x59, 0xda, 0x40, 0x54, 0x5d, 0x8a, 0xe9, 0x73, 0x63, 0x28, 0xc1, - 0x33, 0x65, 0x43, 0x10, 0x52, 0xb2, 0x95, 0xbf, 0x17, 0x85, 0x01, 0xf3, - 0xab, 0x87, 0x67, 0xb1, 0xea, 0x9a, 0x08, 0x4d, 0xab, 0x41, 0xd9, 0xb7, - 0x7c, 0x08, 0x2d, 0x69, 0x70, 0x84, 0x42, 0x96, 0xd6, 0x9e, 0x0e, 0x75, - 0xbb, 0x28, 0xa1, 0x83, 0x25, 0x4c, 0x2e, 0x80, 0x33, 0x08, 0x39, 0xdb, - 0x27, 0x38, 0x96, 0x16, 0x51, 0x00, 0x32, 0xb4, 0x9b, 0x6c, 0x3e, 0x09, - 0x82, 0x31, 0xed, 0xfb, 0x28, 0xa4, 0x8b, 0x98, 0x78, 0x9d, 0xcd, 0xd9, - 0xa9, 0x12, 0x28, 0x1e, 0x55, 0x5b, 0x76, 0xd5, 0x45, 0x86, 0x78, 0x47, - 0x65, 0xc1, 0x01, 0x45, 0x05, 0x09, 0xcb, 0x15, 0xcd, 0x36, 0xbd, 0x01, - 0xcf, 0xe5, 0x92, 0x37, 0xca, 0x2d, 0x92, 0x56, 0x12, 0x54, 0x9c, 0xe2, - 0x4d, 0x55, 0xb3, 0xfe, 0xf7, 0x99, 0x78, 0x5c, 0xe8, 0xff, 0xcf, 0x62, - 0x94, 0x6b, 0x22, 0xf1, 0x13, 0x83, 0x78, 0x07, 0x73, 0x59, 0x26, 0x28, - 0x3b, 0xd2, 0x89, 0x89, 0x07, 0xe7, 0xef, 0xc1, 0x60, 0xf0, 0x35, 0xa0, - 0xd7, 0x51, 0xef, 0x81, 0xfd, 0x98, 0xbf, 0xe4, 0x07, 0x14, 0x25, 0x72, - 0x2d, 0xa9, 0x41, 0x97, 0x36, 0xa9, 0xbe, 0x02, 0x60, 0x9e, 0xe5, 0x8e, - 0x18, 0x6f, 0x6e, 0x04, 0xef, 0xb5, 0x4f, 0x96, 0xbf, 0xa6, 0x1a, 0xd4, - 0x6f, 0x7e, 0xd9, 0xd2, 0x15, 0x8b, 0x67, 0x57, 0x03, 0x89, 0x5a, 0x3e, - 0x8a, 0xf5, 0xfe, 0xd5, 0xb8, 0x9c, 0x89, 0x76, 0x5d, 0xca, 0x40, 0x0a, - 0xf4, 0x0b, 0xdc, 0xe3, 0x2e, 0xa4, 0xbc, 0xd7, 0x40, 0x89, 0x10, 0x9e, - 0xeb, 0x3e, 0x6e, 0x9e, 0x1b, 0xbb, 0xaf, 0x87, 0xba, 0x4a, 0x4f, 0x6b, - 0x4d, 0xa5, 0xd7, 0xba, 0x31, 0xbc, 0x73, 0xe4, 0x7a, 0x00, 0xd6, 0x2e, - 0x0d, 0xc1, 0x8f, 0x66, 0xc3, 0xbb, 0x0b, 0x6f, 0x5f, 0x8e, 0x23, 0xe5, - 0xa9, 0xf5, 0x22, 0x19, 0x68, 0xeb, 0x9b, 0xe5, 0x86, 0xf1, 0x79, 0x02, - 0x92, 0xc2, 0x43, 0x94, 0x9e, 0xc8, 0x65, 0x07, 0x0c, 0x13, 0x5a, 0x4e, - 0x08, 0x05, 0x97, 0x0c, 0x2c, 0x2f, 0x50, 0x07, 0x0d, 0x51, 0x93, 0x5b, - 0xf9, 0xf0, 0x48, 0xff, 0x0a, 0xf3, 0x66, 0x5c, 0xe6, 0x2c, 0xa1, 0xf9, - 0xab, 0x19, 0xa9, 0xf7, 0x58, 0xa0, 0xc5, 0xc2, 0xbf, 0x3a, 0x2e, 0xb1, - 0x3e, 0xbf, 0x72, 0xb0, 0x49, 0x81, 0xd6, 0x8f, 0xaf, 0xda, 0x32, 0xec, - 0x1e, 0x98, 0x4b, 0x94, 0xe7, 0x18, 0x0e, 0x63, 0x9a, 0x81, 0xc6, 0x2d, - 0xb4, 0xb8, 0x32, 0xf4, 0x6d, 0xdb, 0xca, 0x1c, 0x42, 0x9f, 0x1f, 0x7e, - 0x17, 0x2c, 0xf0, 0x90, 0xb3, 0xf5, 0x7c, 0xb3, 0x7a, 0x86, 0xd8, 0x9b, - 0xdc, 0xe8, 0x0d, 0xb7, 0xea, 0x0f, 0xd4, 0xeb, 0xf2, 0x93, 0x21, 0xbd, - 0xb6, 0x89, 0x95, 0xf3, 0x0f, 0xd3, 0xf4, 0x95, 0x24, 0xde, 0xb3, 0x2d, - 0x21, 0x36, 0xff, 0xee, 0xcd, 0x42, 0xcc, 0x09, 0x36, 0x56, 0x1b, 0xfb, - 0xa9, 0x9b, 0x55, 0x90, 0x6e, 0xd7, 0x2a, 0xab, 0x2e, 0x57, 0xb5, 0x4c, - 0xc2, 0x1e, 0x6e, 0x8f, 0x7e, 0x4d, 0x16, 0x07, 0xe9, 0x31, 0xb0, 0x18, - 0x76, 0x32, 0x3d, 0x0d, 0xe9, 0xde, 0x63, 0xde, 0x9f, 0xdf, 0x0e, 0x5b, - 0x6d, 0x33, 0x7f, 0xd7, 0x53, 0x14, 0x58, 0x12, 0x46, 0x51, 0x07, 0x2e, - 0x5a, 0xec, 0x5d, 0x1f, 0x36, 0x28, 0x73, 0x54, 0x3c, 0x8c, 0xdf, 0x0e, - 0xe5, 0x18, 0x6d, 0x7b, 0x2b, 0x0a, 0x94, 0x7d, 0xa3, 0x86, 0xc2, 0x66, - 0xf5, 0x86, 0x90, 0x21, 0x43, 0x51, 0x86, 0x96, 0x49, 0x91, 0xff, 0x26, - 0x16, 0x92, 0x82, 0x73, 0x80, 0x82, 0x93, 0xfd, 0x0f, 0x24, 0xcd, 0x1e, - 0x69, 0x75, 0x9f, 0x78, 0x89, 0x68, 0xf3, 0x2b, 0x8b, 0xaa, 0x2b, 0x4a, - 0x05, 0x06, 0x01, 0xb9, 0x41, 0x53, 0x49, 0x80, 0x09, 0x35, 0x55, 0x4d, - 0xea, 0x0a, 0xd6, 0x54, 0x3d, 0xf1, 0x53, 0xc4, 0xe9, 0xf4, 0x54, 0xbf, - 0xd3, 0xe4, 0x59, 0x61, 0xcb, 0x11, 0x86, 0x10, 0x63, 0x5c, 0xa5, 0xad, - 0x21, 0xcd, 0x4e, 0x64, 0xb1, 0x4f, 0x98, 0x7a, 0xb6, 0x75, 0x10, 0xb2, - 0x1d, 0x0f, 0x44, 0xef, 0x04, 0x88, 0xee, 0x80, 0x0f, 0xd1, 0x43, 0x9e, - 0xc0, 0xf9, 0xdc, 0xfa, 0xfd, 0x32, 0xfb, 0xb1, 0xfd, 0xa3, 0x02, 0xea, - 0x19, 0xd4, 0xde, 0xbd, 0x7d, 0x91, 0xf4, 0x11, 0x8a, 0xcf, 0x43, 0x5b, - 0x27, 0x96, 0x40, 0x0e, 0xa7, 0x98, 0x8b, 0x4e, 0x55, 0x9c, 0x03, 0xf5, - 0xc7, 0xb1, 0x2e, 0x5a, 0xca, 0xed, 0x47, 0x2a, 0x12, 0xbe, 0x90, 0x8f, - 0x52, 0x51, 0x16, 0x12, 0x7e, 0xa8, 0x59, 0x89, 0x5b, 0x30, 0x63, 0x89, - 0x28, 0x5b, 0x1d, 0x68, 0x83, 0xb3, 0x56, 0x98, 0x7e, 0xff, 0xfd, 0x87, - 0xd8, 0xc6, 0xd7, 0x16, 0x80, 0x67, 0xc9, 0x18, 0xbb, 0x67, 0x06, 0x25, - 0xa6, 0xb6, 0xc2, 0x01, 0x34, 0x7a, 0x95, 0xbf, 0x4d, 0x21, 0x08, 0xe1, - 0x3a, 0xab, 0xe4, 0x12, 0x98, 0x86, 0x1f, 0xd8, 0x95, 0x6e, 0xb9, 0xa8, - 0xcc, 0xcd, 0xa2, 0x36, 0x82, 0xe3, 0xf5, 0x39, 0x82, 0xec, 0xc5, 0x3b, - 0xb0, 0xb9, 0x26, 0xd2, 0x1f, 0x97, 0xcd, 0x21, 0xff, 0x57, 0xe1, 0x6f, - 0x67, 0x30, 0x50, 0x46, 0x4c, 0xdf, 0xcf, 0xbe, 0xea, 0xf7, 0x42, 0xe9, - 0x5a, 0xa1, 0x20, 0x75, 0xae, 0xa7, 0xc1, 0x45, 0xef, 0x4c, 0xab, 0xff, - 0x74, 0x3c, 0x11, 0xdd, 0x39, 0x68, 0x7e, 0x02, 0x53, 0xfb, 0x9c, 0xf7, - 0x7e, 0xd9, 0x80, 0x73, 0xae, 0xa5, 0x7a, 0x8f, 0x7c, 0xc9, 0xdc, 0xe1, - 0x76, 0xd1, 0xca, 0xc5, 0x73, 0x9c, 0xf0, 0x96, 0x31, 0x60, 0xca, 0x1b, - 0x4b, 0x7b, 0xbd, 0x41, 0xc2, 0xf4, 0x07, 0x28, 0xe2, 0x6c, 0xf6, 0xcb, - 0xf2, 0x2f, 0x03, 0x79, 0x61, 0xea, 0x39, 0x9a, 0x80, 0x88, 0x56, 0x26, - 0x9d, 0xab, 0x2b, 0x1d, 0x14, 0xcb, 0x9d, 0x54, 0xda, 0x6a, 0x60, 0x92, - 0x12, 0x82, 0x84, 0xd0, 0xd9, 0xd7, 0xa3, 0x78, 0x34, 0x7b, 0x12, 0x65, - 0x86, 0x9d, 0x8e, 0x4c, 0xde, 0x3c, 0xd9, 0x89, 0xcb, 0xe4, 0xb8, 0xd2, - 0xb7, 0x4a, 0x1e, 0x72, 0xfd, 0x03, 0x0d, 0x0e, 0xe4, 0xa0, 0x52, 0xd3, - 0x77, 0xea, 0x38, 0xb7, 0x30, 0x38, 0x2b, 0xe5, 0x92, 0xdd, 0x6f, 0xd0, - 0x8a, 0xe2, 0xc9, 0x2d, 0x5f, 0x77, 0x75, 0x3e, 0x8c, 0x9d, 0xcb, 0x3d, - 0xd3, 0xc2, 0xc6, 0x34, 0xa6, 0x5c, 0xc4, 0xb2, 0x38, 0x10, 0x9c, 0xff, - 0xf1, 0x8f, 0x05, 0x39, 0x23, 0xc4, 0x65, 0x12, 0xf2, 0x08, 0xfa, 0xaf, - 0xc5, 0xfa, 0x08, 0x91, 0xf0, 0xef, 0x92, 0xf3, 0xd7, 0x09, 0x04, 0xf2, - 0x6f, 0x54, 0x02, 0x0c, 0xe1, 0x0c, 0xad, 0x6c, 0xdf, 0xbc, 0x68, 0xd3, - 0xd4, 0xf3, 0xef, 0x71, 0xcf, 0x0e, 0x09, 0x74, 0x92, 0xa8, 0x3b, 0x39, - 0xb9, 0x8e, 0x05, 0x29, 0x87, 0xa3, 0x8f, 0x50, 0x28, 0xdc, 0x6e, 0x7f, - 0xdd, 0x76, 0xa0, 0x77, 0x3d, 0x82, 0x80, 0x5d, 0xa3, 0x5b, 0x6d, 0x0f, - 0x24, 0x6f, 0xb1, 0x1a, 0xea, 0xf5, 0x1c, 0x44, 0xb2, 0x47, 0xce, 0x97, - 0xae, 0xe4, 0x74, 0xfc, 0x4a, 0x46, 0x22, 0x9a, 0xb1, 0x27, 0xcf, 0xf8, - 0xc2, 0x87, 0xd3, 0x85, 0x77, 0xb2, 0xb3, 0x94, 0x27, 0x93, 0x22, 0x40, - 0x86, 0xe3, 0x90, 0x02, 0x4d, 0xb2, 0x76, 0x9e, 0x56, 0x53, 0x06, 0xa5, - 0xbf, 0x92, 0x6e, 0x57, 0xfb, 0x79, 0xed, 0x2b, 0xb2, 0x04, 0x0b, 0x89, - 0xd8, 0x11, 0x31, 0x1c, 0x2a, 0xe7, 0xdf, 0xa3, 0x2a, 0xb2, 0xda, 0xa1, - 0xd7, 0xc5, 0xe4, 0xb4, 0x50, 0x86, 0x3d, 0x49, 0x71, 0xc2, 0xae, 0xba, - 0x46, 0xd3, 0x17, 0x35, 0xe4, 0x5b, 0xc5, 0xb0, 0x23, 0x46, 0x24, 0x3a, - 0xb9, 0xc4, 0x62, 0x71, 0xbb, 0xce, 0x9c, 0xd4, 0xf3, 0x88, 0x01, 0x05, - 0x56, 0x60, 0x88, 0x01, 0x85, 0x15, 0xaa, 0xf3, 0x99, 0xa6, 0x1d, 0x97, - 0x48, 0xb2, 0x12, 0xfc, 0x6e, 0xd3, 0x63, 0x2b, 0x55, 0xea, 0x68, 0x56, - 0xa1, 0xbb, 0x94, 0x47, 0xef, 0x10, 0x02, 0xdc, 0xf1, 0x60, 0x92, 0x53, - 0xb4, 0x5c, 0x4d, 0xe3, 0x31, 0xa0, 0x4d, 0xa3, 0x34, 0xca, 0xe7, 0x66, - 0x87, 0xb3, 0x8a, 0x3e, 0xdb, 0xc7, 0xe7, 0x6b, 0x36, 0x8c, 0xd5, 0xa2, - 0x1e, 0x4c, 0xc5, 0x5d, 0x03, 0xb8, 0xcb, 0x66, 0x63, 0x19, 0xc0, 0x59, - 0x1b, 0x44, 0x94, 0x2a, 0x7e, 0xc0, 0x37, 0x44, 0x81, 0x41, 0x53, 0x66, - 0xc2, 0x80, 0x4a, 0x5b, 0xcd, 0xaf, 0xe8, 0xee, 0x58, 0xa5, 0x94, 0x33, - 0xda, 0xe8, 0x34, 0x0f, 0xee, 0x1a, 0xc3, 0xe5, 0x5e, 0xba, 0x98, 0x52, - 0xa1, 0x05, 0xa3, 0x4f, 0x30, 0x8d, 0xe3, 0x98, 0xaf, 0x22, 0xd3, 0x16, - 0x0a, 0x08, 0x49, 0x2c, 0x6a, 0xe4, 0x8f, 0x7f, 0x09, 0x67, 0x82, 0x08, - 0xfc, 0x3b, 0x5b, 0x92, 0x28, 0x8a, 0x09, 0xc7, 0x32, 0xa0, 0x94, 0x1b, - 0x51, 0xc5, 0x49, 0x43, 0xeb, 0xa8, 0xed, 0xed, 0xab, 0xae, 0xc5, 0xf7, - 0x77, 0x36, 0x48, 0x91, 0xaf, 0xd3, 0xfd, 0x16, 0xc8, 0x5d, 0xb5, 0x24, - 0xe9, 0xaf, 0x7e, 0xcf, 0xa1, 0x8e, 0x22, 0x01, 0xc5, 0xe1, 0x3a, 0xbe, - 0x91, 0x7f, 0xf6, 0x51, 0x88, 0x99, 0x7d, 0xf5, 0xfd, 0x0a, 0x1f, 0x05, - 0xa9, 0xa5, 0x5a, 0xd0, 0x33, 0x78, 0x12, 0x69, 0x0c, 0x07, 0xd3, 0x8c, - 0xb9, 0x09, 0xdb, 0x6f, 0xec, 0x8c, 0x38, 0x9f, 0xfb, 0x34, 0xd3, 0x5c, - 0x91, 0x4d, 0x06, 0x36, 0x21, 0x5e, 0x74, 0x5e, 0x2f, 0x03, 0xbf, 0x3a, - 0x1e, 0x90, 0x6b, 0x93, 0xac, 0x79, 0xe2, 0xad, 0x7d, 0xfc, 0xa5, 0x27, - 0x2d, 0x4d, 0xc1, 0xf1, 0x8d, 0x81, 0xfc, 0xec, 0x1a, 0xd8, 0x19, 0x3c, - 0x69, 0x58, 0xf9, 0x6c, 0x3b, 0x0a, 0x4b, 0xf8, 0x9c, 0xec, 0xec, 0xd4, - 0x35, 0x6c, 0x1a, 0x5b, 0x7e, 0x5a, 0x0d, 0x58, 0x61, 0x80, 0xd9, 0xbf, - 0x68, 0x40, 0x0b, 0x9b, 0xeb, 0x1b, 0x50, 0xe5, 0xf7, 0x63, 0x11, 0xb1, - 0x74, 0x12, 0x49, 0x9a, 0x47, 0xdb, 0x4d, 0x6c, 0xbf, 0xf4, 0x75, 0x82, - 0xc2, 0x68, 0x28, 0x08, 0x56, 0xe9, 0x28, 0x7f, 0x37, 0x90, 0x02, 0x81, - 0x11, 0xec, 0x98, 0x8c, 0x30, 0xc8, 0xe9, 0x11, 0x9a, 0xc2, 0x78, 0xfb, - 0x4f, 0x21, 0xe4, 0xeb, 0x67, 0x07, 0xae, 0xc3, 0x28, 0x89, 0x1c, 0x35, - 0xd7, 0xa8, 0xed, 0x3f, 0xb8, 0x2f, 0x94, 0xe7, 0x07, 0xa8, 0x26, 0x7f, - 0x47, 0x05, 0x26, 0xc7, 0xae, 0x3e, 0xb4, 0x4b, 0x1f, 0x58, 0xe0, 0xc2, - 0xd7, 0xc6, 0x70, 0x97, 0xde, 0xa2, 0xcd, 0xe1, 0xfc, 0x0c, 0x41, 0xb5, - 0xec, 0xb6, 0x96, 0x16, 0x31, 0x5b, 0x44, 0x9a, 0x96, 0x79, 0x63, 0xc0, - 0x6c, 0x07, 0x56, 0xef, 0x9a, 0x98, 0x0b, 0x84, 0xd5, 0x4d, 0x5f, 0x80, - 0xae, 0x97, 0x4d, 0x71, 0xb0, 0xb3, 0x2e, 0xdd, 0x30, 0xaa, 0xb6, 0x08, - 0xb5, 0x0c, 0x4e, 0xba, 0xd8, 0x6d, 0x6c, 0x7b, 0x09, 0xd0, 0x36, 0x3a, - 0x9e, 0xb5, 0x0d, 0x6c, 0xad, 0xc1, 0xc8, 0xe3, 0xd9, 0x83, 0x4d, 0xd9, - 0xde, 0x43, 0x7d, 0x10, 0x94, 0x58, 0x72, 0x23, 0xb1, 0xcc, 0xc3, 0x4d, - 0xf7, 0x2d, 0x29, 0xfb, 0x37, 0x7c, 0x79, 0x3e, 0xb8, 0xd3, 0x95, 0x70, - 0x04, 0xc6, 0x96, 0xcc, 0xf0, 0x38, 0xca, 0x15, 0x34, 0xf0, 0x05, 0x0f, - 0x96, 0x1c, 0x06, 0x4e, 0xab, 0x15, 0xb6, 0x8e, 0x63, 0xca, 0x46, 0xce, - 0x18, 0x76, 0x8f, 0xd0, 0x38, 0xfc, 0x65, 0x8b, 0x02, 0x83, 0xc8, 0xd2, - 0xa3, 0x27, 0x4a, 0xf6, 0xc5, 0xb3, 0x14, 0xb6, 0xe4, 0x43, 0xb9, 0x9f, - 0xc8, 0x6a, 0x29, 0x9b, 0xde, 0x9a, 0x3e, 0x94, 0xcb, 0x73, 0x71, 0xe3, - 0x21, 0xcd, 0x23, 0x55, 0x2a, 0xd2, 0x9d, 0x57, 0xdc, 0x83, 0x6e, 0xca, - 0x5a, 0x39, 0x92, 0x3d, 0x29, 0xd1, 0xf2, 0x69, 0x8c, 0x8d, 0xd4, 0x24, - 0x89, 0xe7, 0x4f, 0xba, 0xb9, 0x50, 0x0a, 0x76, 0x6a, 0xa3, 0x31, 0x9f, - 0xc8, 0x44, 0xf7, 0xf2, 0xdb, 0x8e, 0x22, 0xdf, 0x49, 0x16, 0x26, 0x99, - 0x52, 0xec, 0xca, 0x60, 0x02, 0x91, 0x59, 0x9d, 0x8d, 0x86, 0xfd, 0x7a, - 0xf9, 0x76, 0x0c, 0xeb, 0x12, 0x57, 0xf1, 0x03, 0xdd, 0x2c, 0x16, 0x1d, - 0xf7, 0xe8, 0x0b, 0x1a, 0x37, 0x37, 0xd1, 0x98, 0xdd, 0xe6, 0x1e, 0xfb, - 0xcc, 0xee, 0xdf, 0xd0, 0x9e, 0x0e, 0xf6, 0x99, 0x92, 0x31, 0x06, 0xd6, - 0x38, 0x68, 0x66, 0xc3, 0x9d, 0xc7, 0x06, 0x15, 0x68, 0x5e, 0xec, 0x82, - 0x5e, 0x4e, 0xa0, 0xb2, 0x59, 0xea, 0x93, 0xb5, 0x4e, 0x4e, 0x18, 0x13, - 0xc1, 0x0d, 0x7f, 0x4c, 0xaf, 0x1d, 0x31, 0x35, 0xac, 0xba, 0x99, 0x82, - 0x82, 0x1c, 0x1c, 0xf5, 0x21, 0xca, 0xde, 0x82, 0x00, 0x52, 0xde, 0xb4, - 0x59, 0xc2, 0xf0, 0xdb, 0x13, 0x37, 0xc5, 0x39, 0x95, 0x95, 0x86, 0x02, - 0x33, 0x00, 0x26, 0x40, 0xb0, 0x32, 0x0c, 0xd5, 0xd4, 0x9b, 0xc9, 0xe4, - 0xe4, 0x9b, 0x96, 0x94, 0x25, 0x9f, 0x54, 0xab, 0x2d, 0x0f, 0x19, 0x59, - 0x49, 0x53, 0x96, 0x3e, 0x20, 0xc5, 0x78, 0xde, 0x7e, 0x15, 0x8c, 0x53, - 0xa1, 0xf5, 0xd6, 0xe8, 0xa0, 0xaf, 0x11, 0x9d, 0xa3, 0x67, 0x5e, 0xcb, - 0x42, 0x39, 0x17, 0xf2, 0x8a, 0xfe, 0x91, 0x28, 0x03, 0x59, 0x96, 0x05, - 0xc6, 0x37, 0x19, 0x8d, 0x7b, 0xad, 0x16, 0x84, 0x39, 0xc8, 0xb5, 0xea, - 0x01, 0x5a, 0xd7, 0xce, 0x4c, 0x51, 0x8c, 0x7c, 0xb9, 0xc9, 0x1a, 0xcd, - 0x41, 0xe1, 0x13, 0x6c, 0x35, 0xc6, 0xb5, 0x3f, 0x3a, 0x4b, 0x60, 0x8b, - 0x06, 0x91, 0xca, 0x1c, 0x7c, 0xf4, 0x9e, 0x51, 0x04, 0x59, 0x42, 0x55, - 0x07, 0x45, 0x56, 0xca, 0x2f, 0xde, 0x39, 0x50, 0x17, 0x60, 0x38, 0x04, - 0xde, 0xb1, 0x96, 0xba, 0x2c, 0x1b, 0x7e, 0xd1, 0xbc, 0x58, 0x9d, 0x31, - 0xe0, 0x2d, 0xaf, 0xce, 0xbe, 0xcc, 0xd6, 0x3f, 0xe9, 0x11, 0xca, 0x7f, - 0x59, 0x9a, 0x05, 0xda, 0x46, 0xaf, 0xb0, 0xd3, 0x98, 0x69, 0xfe, 0x6e, - 0xa5, 0x10, 0xa7, 0x0d, 0x64, 0x34, 0xe2, 0xae, 0xeb, 0xef, 0xef, 0x72, - 0x04, 0xc3, 0x68, 0xa6, 0xe5, 0xde, 0xb3, 0x05, 0x52, 0x94, 0x5f, 0x26, - 0x5a, 0x5a, 0x5a, 0xbb, 0x1f, 0x2a, 0x97, 0x92, 0xc2, 0xbc, 0x20, 0x6d, - 0x3a, 0xae, 0xaf, 0x85, 0xd6, 0xec, 0x29, 0x5e, 0xfd, 0xe6, 0xd2, 0xec, - 0xb7, 0x92, 0xfe, 0x53, 0x3a, 0x11, 0x2f, 0x15, 0xf8, 0x90, 0x06, 0x9b, - 0xd1, 0xca, 0x86, 0xf3, 0x5b, 0x4e, 0x92, 0xa2, 0x7d, 0x71, 0x72, 0x7c, - 0xcc, 0x5e, 0xa2, 0x48, 0x3e, 0xab, 0xe1, 0x67, 0xa4, 0x3d, 0x0e, 0x15, - 0x67, 0x86, 0x07, 0xc6, 0xfa, 0x1d, 0x02, 0x24, 0x5e, 0x1f, 0x2e, 0x48, - 0x51, 0x9c, 0x20, 0x80, 0x3c, 0x9e, 0x41, 0xf7, 0xa3, 0x90, 0x5e, 0xd4, - 0xba, 0xd1, 0xd1, 0x33, 0x03, 0x6c, 0xc8, 0x7c, 0xca, 0x64, 0xe2, 0xe2, - 0x2f, 0x62, 0xec, 0xa3, 0x2e, 0x7d, 0xe5, 0x58, 0x4b, 0xb6, 0xb0, 0xa1, - 0xea, 0xc9, 0x9d, 0x9e, 0x2e, 0xbc, 0x87, 0xd1, 0x6f, 0x5d, 0xb0, 0x6f, - 0xf6, 0x27, 0x9b, 0x99, 0x55, 0xf8, 0x99, 0x3e, 0x49, 0x23, 0x06, 0xc8, - 0xbb, 0x28, 0xbf, 0x7b, 0xd1, 0x37, 0xe1, 0x2f, 0x40, 0x09, 0xe7, 0xc4, - 0x5b, 0x1c, 0x6e, 0x41, 0x8a, 0xe9, 0x67, 0x3e, 0x25, 0xfb, 0xf0, 0x1e, - 0xc2, 0x07, 0x69, 0x4b, 0x80, 0x8d, 0xc1, 0x4e, 0xb0, 0x2d, 0xc0, 0x3c, - 0x74, 0xa5, 0x6d, 0x9b, 0x41, 0xc6, 0x85, 0x19, 0x95, 0x91, 0xa3, 0xf3, - 0xe6, 0x2f, 0x7d, 0xce, 0x3e, 0x49, 0x91, 0xd6, 0x4d, 0x62, 0x31, 0xee, - 0x8d, 0x4e, 0x34, 0x25, 0x76, 0x64, 0x29, 0xbf, 0x1a, 0xa6, 0xb5, 0x4b, - 0x81, 0xb1, 0xea, 0x3a, 0xb0, 0x57, 0x43, 0xd5, 0xbb, 0x63, 0x84, 0xf9, - 0x0a, 0x97, 0xda, 0x69, 0xbb, 0x95, 0x23, 0x8d, 0x26, 0x4f, 0x48, 0xf4, - 0x62, 0x36, 0xab, 0x32, 0x3d, 0x92, 0x6f, 0xc6, 0xe0, 0xa7, 0x60, 0x17, - 0x79, 0xd2, 0xcd, 0x3b, 0xb9, 0xce, 0x43, 0x13, 0xf1, 0xd8, 0x07, 0x3a, - 0xa2, 0x91, 0x40, 0xe2, 0x9c, 0xeb, 0x91, 0x1a, 0xf0, 0x04, 0xae, 0xad, - 0x9c, 0x34, 0x49, 0xfa, 0x9d, 0x5f, 0xc9, 0xc3, 0x64, 0xc0, 0xd0, 0x6b, - 0x80, 0xa7, 0x37, 0x39, 0x80, 0xe9, 0x90, 0xa3, 0x19, 0x12, 0xa0, 0x12, - 0x61, 0x15, 0x2a, 0x94, 0xd6, 0x44, 0x2c, 0x97, 0x82, 0x7d, 0x55, 0x23, - 0x3a, 0x77, 0xb5, 0x37, 0xe4, 0xc9, 0x10, 0x7d, 0xda, 0xe8, 0x85, 0x04, - 0xe2, 0x7a, 0x1e, 0xfa, 0x9d, 0x18, 0x82, 0xb5, 0xa7, 0x4e, 0x66, 0xeb, - 0x27, 0xc5, 0xd6, 0xfe, 0xa6, 0xd8, 0xa4, 0x3e, 0x53, 0x29, 0x1d, 0xe5, - 0x67, 0x41, 0x76, 0x0a, 0x1a, 0x9d, 0x44, 0xac, 0x35, 0x25, 0xfe, 0xeb, - 0xb3, 0x42, 0xc0, 0x72, 0x01, 0x2e, 0xce, 0x03, 0xf5, 0x2c, 0x9d, 0x7c, - 0x26, 0x3e, 0x32, 0xa2, 0x1f, 0xad, 0xb3, 0xbe, 0x67, 0x92, 0xba, 0xf2, - 0xef, 0x9f, 0x3b, 0x29, 0x68, 0x93, 0x3b, 0x24, 0x77, 0x4c, 0x71, 0xe0, - 0xc0, 0x3d, 0x81, 0xf6, 0x9c, 0x3f, 0x41, 0x7f, 0x60, 0x89, 0x3d, 0x85, - 0x14, 0x32, 0x8c, 0x86, 0x9f, 0x67, 0x19, 0x00, 0x38, 0x85, 0x07, 0xf7, - 0x6f, 0x37, 0x1e, 0xf1, 0xa4, 0xb2, 0xe7, 0x54, 0x34, 0xf9, 0x33, 0xa0, - 0x18, 0xe1, 0x89, 0xe8, 0x67, 0x04, 0x02, 0x45, 0xf6, 0x1e, 0x82, 0xd3, - 0x81, 0xeb, 0xb7, 0xb4, 0xb9, 0x25, 0xd0, 0x09, 0x86, 0xf2, 0xf2, 0x06, - 0x66, 0x37, 0x78, 0x15, 0x28, 0x66, 0x52, 0xae, 0xa8, 0xaa, 0x52, 0xb3, - 0x12, 0xb7, 0xc2, 0x4e, 0x8b, 0x79, 0xe4, 0x36, 0xb4, 0x8b, 0x78, 0x48, - 0xa0, 0xc0, 0x0b, 0xba, 0xc0, 0x20, 0xc7, 0x37, 0x4a, 0x85, 0xd3, 0x41, - 0x25, 0x26, 0xb8, 0x0d, 0x05, 0xac, 0xa7, 0x4e, 0x67, 0xda, 0x3b, 0xac, - 0x04, 0x9e, 0x95, 0xf6, 0xba, 0xa4, 0xf4, 0x1a, 0x6e, 0x6f, 0x92, 0xfb, - 0x11, 0x98, 0xb0, 0x07, 0x6b, 0x1f, 0x2e, 0x59, 0x37, 0x6d, 0x27, 0xa8, - 0xde, 0x3e, 0x6a, 0xf1, 0xe0, 0x6a, 0x9a, 0x98, 0x98, 0x3b, 0xed, 0x08, - 0x95, 0x28, 0xbc, 0xd2, 0xf0, 0x59, 0x1b, 0xbf, 0xd6, 0x52, 0x8f, 0xdb, - 0xa5, 0x26, 0xf3, 0x06, 0xc9, 0xdc, 0xbc, 0x3c, 0x42, 0x70, 0x3d, 0xb8, - 0x1a, 0x64, 0xff, 0xff, 0x4b, 0xd0, 0x98, 0x7f, 0x5d, 0xbf, 0x2d, 0x0c, - 0x43, 0x38, 0xa7, 0xf6, 0x56, 0x10, 0x0f, 0xd4, 0x05, 0xba, 0xde, 0x83, - 0x92, 0xbc, 0x49, 0xc1, 0x6b, 0xad, 0xda, 0xaf, 0xd6, 0x53, 0x46, 0x61, - 0xec, 0x94, 0xfd, 0x46, 0xe5, 0x13, 0x6c, 0xd4, 0x91, 0xe0, 0x6b, 0x08, - 0xc6, 0x04, 0x8e, 0xdc, 0x0a, 0x93, 0x2c, 0xe2, 0xb6, 0xec, 0x7d, 0x8a, - 0x65, 0x9e, 0xfc, 0x0e, 0xe0, 0xae, 0x9f, 0xa3, 0x3d, 0x37, 0x30, 0x56, - 0xd1, 0x59, 0xed, 0x5b, 0x8a, 0x1f, 0xc6, 0x9c, 0x5f, 0xf4, 0xcb, 0x91, - 0x8a, 0x20, 0x92, 0x0c, 0x1c, 0x0f, 0x63, 0x0c, 0xa5, 0x9e, 0x23, 0xca, - 0xdb, 0xab, 0xd0, 0x1f, 0xd7, 0x69, 0x40, 0xb2, 0xfe, 0x30, 0x75, 0x89, - 0xa0, 0x7c, 0x21, 0xcb, 0x28, 0x06, 0x39, 0x33, 0xd3, 0xb0, 0xd7, 0x91, - 0x41, 0x36, 0x16, 0xa1, 0x46, 0xcc, 0x70, 0x42, 0x06, 0x4d, 0x8c, 0xb8, - 0x8c, 0xfc, 0x74, 0x10, 0xd6, 0x04, 0x3e, 0xa9, 0xfd, 0x3c, 0x61, 0x25, - 0xdd, 0xe9, 0xe6, 0x26, 0xe9, 0x33, 0x86, 0x33, 0x65, 0x05, 0x13, 0xc7, - 0x23, 0x50, 0xbe, 0x0c, 0x9f, 0xea, 0x7f, 0x9e, 0x3a, 0x10, 0x0b, 0x58, - 0x26, 0x1a, 0xdc, 0x8d, 0xed, 0x74, 0x0d, 0xc9, 0xe8, 0xb0, 0x4c, 0x70, - 0x59, 0x15, 0x44, 0x50, 0x6a, 0xef, 0x9c, 0xe6, 0x26, 0x6c, 0x0f, 0x5c, - 0xad, 0x20, 0x19, 0x99, 0x7c, 0x74, 0xc7, 0xc7, 0x99, 0x23, 0x48, 0xf2, - 0x2c, 0xb8, 0x4a, 0xf0, 0x4e, 0x92, 0xdd, 0xc9, 0x46, 0xb6, 0xb2, 0xa2, - 0x1e, 0x25, 0x35, 0x89, 0x2d, 0x42, 0x35, 0x1d, 0xc8, 0x8b, 0x10, 0x88, - 0x55, 0xee, 0x89, 0x83, 0x70, 0x62, 0x75, 0x7b, 0xd2, 0x28, 0x5b, 0xb9, - 0x25, 0xe0, 0xb6, 0x5a, 0xc7, 0x79, 0x4d, 0xed, 0x1d, 0x20, 0xc4, 0x72, - 0xe5, 0x75, 0xf8, 0x6f, 0xe8, 0x8d, 0xa6, 0x9e, 0xa2, 0x55, 0xfb, 0xd2, - 0xf3, 0x74, 0x70, 0x2c, 0x94, 0x89, 0x91, 0xb2, 0x78, 0xc1, 0x20, 0x17, - 0x73, 0xe5, 0xca, 0xe5, 0xf1, 0x7a, 0x11, 0x94, 0x0f, 0xce, 0xb9, 0x3a, - 0x8b, 0xf4, 0xe7, 0xd1, 0x62, 0x05, 0xb0, 0x13, 0xdb, 0xef, 0x66, 0x5f, - 0x47, 0xc7, 0x26, 0x3a, 0x96, 0xf4, 0x93, 0xf4, 0x14, 0xb9, 0x04, 0x70, - 0x2a, 0xbe, 0xb2, 0xf8, 0xfc, 0x62, 0x13, 0x08, 0x00, 0x2e, 0xf4, 0x12, - 0xdf, 0x2a, 0xd8, 0xc9, 0x08, 0x7b, 0x05, 0xc8, 0x3c, 0xee, 0x17, 0x76, - 0xcb, 0xb8, 0xb6, 0x84, 0x78, 0x27, 0x8a, 0xbc, 0x82, 0x0c, 0x89, 0x1c, - 0x89, 0xaa, 0xba, 0x90, 0x8c, 0x58, 0xe9, 0xa8, 0xcd, 0x72, 0x6e, 0xbb, - 0x45, 0xe8, 0x5a, 0x74, 0xcd, 0x15, 0x5b, 0x9b, 0xac, 0x4b, 0x69, 0xb8, - 0x60, 0x95, 0xf1, 0x49, 0xf7, 0x4e, 0x62, 0x91, 0x28, 0x6c, 0x30, 0x99, - 0x4d, 0x8c, 0x99, 0x48, 0xd8, 0x63, 0xe4, 0x56, 0x47, 0xae, 0x3d, 0xa3, - 0x1f, 0xb1, 0xb4, 0xca, 0x35, 0x1d, 0x7a, 0x9f, 0x4a, 0xde, 0xe8, 0x39, - 0xdd, 0x98, 0x18, 0xd1, 0x54, 0xa8, 0xab, 0xcb, 0xa5, 0x55, 0xfa, 0x35, - 0x8a, 0x8b, 0x87, 0xf3, 0xed, 0xbc, 0xfa, 0x9f, 0x82, 0xe5, 0x34, 0x04, - 0x1a, 0x20, 0x4a, 0xb7, 0x2e, 0xb0, 0x70, 0xdd, 0xd1, 0x5f, 0xc8, 0x82, - 0xa3, 0xdc, 0xf0, 0x55, 0x7c, 0xac, 0xa4, 0x99, 0xbb, 0xbd, 0x5b, 0x7d, - 0x55, 0x5b, 0xe8, 0xaf, 0x7a, 0x45, 0x1b, 0x41, 0xc9, 0x53, 0xdd, 0x38, - 0x46, 0xb1, 0x3b, 0xf5, 0xf9, 0x5c, 0xd6, 0x44, 0xbd, 0x57, 0x46, 0x42, - 0x5a, 0x39, 0xac, 0xe1, 0xa6, 0x18, 0x67, 0xf3, 0x49, 0xd9, 0x0d, 0x03, - 0xdb, 0x47, 0xda, 0x1d, 0xfe, 0x73, 0x95, 0x60, 0xb0, 0xe9, 0x87, 0x06, - 0x11, 0x28, 0x15, 0x35, 0x0a, 0xb0, 0xee, 0x43, 0x48, 0x62, 0x47, 0xb7, - 0x28, 0xb5, 0x7d, 0x0e, 0xd8, 0x7c, 0xd6, 0x4e, 0x7b, 0x9d, 0x4e, 0x1f, - 0x1b, 0x1b, 0xc8, 0x7c, 0x82, 0x3d, 0x6a, 0x56, 0x19, 0x49, 0x46, 0xdd, - 0x17, 0x3f, 0x5e, 0x94, 0x42, 0x40, 0x9d, 0x4e, 0x07, 0x84, 0xcf, 0x32, - 0x70, 0xf5, 0xfb, 0xef, 0xed, 0xcf, 0x06, 0xc9, 0x72, 0x08, 0xc7, 0x58, - 0xb3, 0x85, 0xfc, 0x0f, 0xeb, 0x1e, 0x47, 0x36, 0xbf, 0xbe, 0x10, 0x22, - 0x88, 0xa6, 0x52, 0x3f, 0x19, 0x32, 0x91, 0x56, 0x9f, 0x64, 0x46, 0x16, - 0x4c, 0x2d, 0x59, 0xe0, 0x7c, 0x01, 0xa4, 0x6b, 0x5b, 0x7c, 0xcb, 0x21, - 0xef, 0xbc, 0xe2, 0xdc, 0x03, 0x67, 0x83, 0x8a, 0xa6, 0x5c, 0x4c, 0xb7, - 0x66, 0x99, 0x4f, 0xde, 0xbf, 0x0d, 0x30, 0x93, 0x3c, 0x09, 0x62, 0x19, - 0xf7, 0xc2, 0xf2, 0x34, 0xa6, 0x61, 0xd2, 0x2b, 0x71, 0x02, 0x41, 0x7c, - 0xe4, 0xe7, 0xdb, 0x34, 0xc9, 0x43, 0xf6, 0x96, 0x97, 0xc2, 0x30, 0x1d, - 0x4a, 0x51, 0x06, 0xe4, 0xc8, 0xa8, 0x2e, 0x8d, 0x26, 0x9e, 0xdf, 0x88, - 0x16, 0x9a, 0x9d, 0x50, 0xb3, 0xc4, 0x81, 0x78, 0xcd, 0x90, 0x2f, 0x47, - 0x2f, 0x0f, 0x4b, 0x0c, 0x20, 0x9a, 0x6d, 0x53, 0x45, 0x37, 0xaf, 0x6a, - 0x1d, 0x00, 0x86, 0x7d, 0x0f, 0xa0, 0xe5, 0xc7, 0x69, 0xe3, 0x46, 0xaf, - 0x39, 0x13, 0x74, 0x66, 0x29, 0x65, 0x97, 0xbb, 0x9d, 0x1f, 0xd5, 0x18, - 0xfc, 0x40, 0xe5, 0x45, 0x49, 0xe8, 0xe6, 0x15, 0x88, 0x66, 0x6c, 0x4e, - 0xda, 0xda, 0x63, 0x38, 0x4d, 0xc1, 0x7d, 0x7b, 0x59, 0xf9, 0xc7, 0xca, - 0x12, 0x64, 0x8e, 0x7d, 0x04, 0x56, 0x5c, 0x2a, 0x08, 0x47, 0xd1, 0x98, - 0x10, 0x55, 0x43, 0xf5, 0x4c, 0xd3, 0xad, 0x74, 0xa0, 0x58, 0x9e, 0xa2, - 0x68, 0x4e, 0xa8, 0x8b, 0x39, 0xd1, 0xa1, 0x97, 0x32, 0x88, 0x41, 0x09, - 0x35, 0xd8, 0x32, 0xfe, 0xb5, 0xea, 0x8f, 0xb7, 0x8e, 0xec, 0xb1, 0x7c, - 0xc0, 0x69, 0x9c, 0x86, 0x57, 0xb3, 0xb7, 0x99, 0xd6, 0xb2, 0xc1, 0x60, - 0x47, 0x2a, 0xf3, 0x4e, 0x3b, 0x16, 0x13, 0x6b, 0xca, 0x6c, 0x31, 0x75, - 0xd7, 0xaf, 0xa4, 0xc0, 0xb5, 0x45, 0x72, 0xff, 0x18, 0xa3, 0x8c, 0x32, - 0x82, 0xd8, 0x48, 0x5a, 0x5b, 0x1f, 0xdf, 0x1f, 0x02, 0xd3, 0x75, 0xeb, - 0x40, 0x37, 0x71, 0x86, 0x9a, 0xd2, 0x13, 0x45, 0x60, 0xea, 0x06, 0x04, - 0x3c, 0x6e, 0x87, 0x40, 0x5c, 0xcd, 0x78, 0xf3, 0x39, 0x22, 0xe5, 0x46, - 0xc0, 0x43, 0xb6, 0x04, 0xb1, 0xd2, 0xc0, 0x5d, 0x0b, 0x46, 0x19, 0x61, - 0xf1, 0x38, 0x24, 0xa4, 0xa7, 0xa6, 0x28, 0xf0, 0xfa, 0x87, 0x54, 0xee, - 0xbe, 0xa7, 0xa4, 0x33, 0xcc, 0x05, 0x9e, 0x8b, 0x7b, 0xcd, 0xa3, 0xf5, - 0xe2, 0xe1, 0x2c, 0x0b, 0x2a, 0x3c, 0xa6, 0x69, 0x9a, 0x5b, 0xfd, 0x7b, - 0x72, 0x54, 0x8f, 0x65, 0xa2, 0x7c, 0x7e, 0xc7, 0x14, 0x43, 0x4c, 0xfe, - 0xed, 0x3b, 0xb1, 0x4a, 0x7b, 0x58, 0xe4, 0xae, 0x8b, 0x9b, 0x76, 0x3a, - 0x8a, 0xfc, 0x4b, 0x08, 0xd5, 0x5a, 0x09, 0xcd, 0xfe, 0xf0, 0x72, 0xd8, - 0xbd, 0x4d, 0x37, 0xb7, 0x10, 0x12, 0x92, 0xa2, 0x98, 0x84, 0x97, 0x5a, - 0x02, 0x95, 0xbd, 0x7b, 0x65, 0x80, 0x84, 0xf5, 0x26, 0x2d, 0x3f, 0xa6, - 0x28, 0xb3, 0x74, 0xcf, 0x55, 0x4b, 0xf0, 0x89, 0xec, 0x8b, 0x0a, 0xc8, - 0x28, 0x51, 0x53, 0x26, 0xb9, 0xf7, 0xac, 0x3e, 0xc3, 0x47, 0x51, 0x73, - 0x1f, 0x02, 0x68, 0x71, 0x5d, 0x52, 0x2e, 0xc2, 0x0a, 0xfd, 0xe5, 0xe4, - 0xaa, 0x8c, 0x68, 0xb6, 0x22, 0xdc, 0xb9, 0x05, 0x27, 0xd5, 0xd2, 0x8f, - 0x49, 0xb2, 0xcd, 0xac, 0x99, 0x72, 0xa8, 0x28, 0xf0, 0x9b, 0xc4, 0x9d, - 0xc7, 0x1b, 0xbb, 0x5a, 0x64, 0x49, 0xbd, 0x20, 0x7b, 0xab, 0x6d, 0xe5, - 0xa4, 0x4d, 0xbc, 0x2f, 0x62, 0xba, 0xf3, 0xce, 0x08, 0xff, 0x6e, 0x30, - 0x92, 0xd5, 0x2e, 0x85, 0x43, 0x7a, 0x36, 0xb7, 0x21, 0xf5, 0x55, 0x5f, - 0xce, 0x5c, 0x2d, 0x8d, 0x9a, 0x1a, 0x3e, 0xf5, 0xaf, 0x95, 0x46, 0xe5, - 0x7c, 0xc9, 0x83, 0x2b, 0xf9, 0x04, 0x3c, 0x32, 0xcf, 0x72, 0xa8, 0x57, - 0x08, 0x48, 0xf6, 0xda, 0x23, 0x65, 0xcb, 0xe7, 0xf4, 0xa7, 0x25, 0x68, - 0xf5, 0x66, 0x60, 0x5f, 0x32, 0x09, 0xbd, 0x75, 0x05, 0xa3, 0x63, 0x79, - 0x8f, 0x0e, 0x55, 0x9f, 0x48, 0xd8, 0xbc, 0xe7, 0x6c, 0x47, 0xe2, 0x48, - 0x6f, 0xde, 0x00, 0xd5, 0xe1, 0x41, 0x28, 0x0b, 0xc7, 0xbf, 0x54, 0x7e, - 0x61, 0x65, 0xaf, 0x31, 0x12, 0xc3, 0x44, 0x00, 0x00, 0x00, 0x11, 0x3a, - 0x72, 0x71, 0x9c, 0xc0, 0xcf, 0xf1, 0x49, 0x53, 0xba, 0xbe, 0xe4, 0x01, - 0xbf, 0x08, 0xc4, 0x2e, 0x5b, 0xf8, 0xa8, 0xd6, 0xc2, 0x70, 0x62, 0x50, - 0xa7, 0xf1, 0xa3, 0xb6, 0x68, 0x95, 0x1e, 0x0a, 0x3c, 0xee, 0x47, 0x75, - 0xb0, 0x75, 0xd3, 0xaf, 0x4e, 0x40, 0xe0, 0x8b, 0x8b, 0xc9, 0xfc, 0x13, - 0xe3, 0xce, 0xe3, 0xbc, 0x27, 0xb7, 0x6c, 0x24, 0x97, 0x71, 0xc2, 0x80, - 0x7d, 0x87, 0x45, 0x5c, 0x85, 0x58, 0x16, 0xfd, 0x4f, 0x98, 0x14, 0x7f, - 0x57, 0x87, 0xf3, 0x72, 0xba, 0x22, 0x16, 0x13, 0xbb, 0x17, 0xa3, 0x16, - 0x5d, 0xeb, 0xc6, 0xdb, 0x2b, 0x39, 0x49, 0xbc, 0x19, 0x96, 0x6f, 0x86, - 0x4b, 0x5a, 0xc9, 0x76, 0xbf, 0xe6, 0xda, 0x55, 0x7d, 0xc2, 0x2a, 0x0b, - 0xa9, 0x4a, 0x77, 0x80, 0x72, 0x76, 0x51, 0xe7, 0x2b, 0x3d, 0x62, 0xab, - 0xd9, 0xe6, 0x4d, 0x3d, 0x1f, 0x6b, 0x9d, 0x36, 0xff, 0x24, 0xab, 0x5a, - 0x40, 0x01, 0x4f, 0x95, 0x40, 0x89, 0x8d, 0x8f, 0xad, 0xcf, 0x29, 0x73, - 0x08, 0x97, 0x5d, 0xff, 0x7d, 0x9c, 0x5c, 0xc6, 0x5b, 0x40, 0xc4, 0x20, - 0x70, 0x6f, 0x5c, 0x19, 0xe7, 0x64, 0x13, 0x40, 0xc9, 0xa9, 0x93, 0xd2, - 0x5a, 0xbe, 0x36, 0x0e, 0x0e, 0x96, 0x8c, 0x23, 0xa6, 0x1a, 0xb1, 0x0f, - 0x74, 0x78, 0xb4, 0x23, 0x6b, 0x27, 0x40, 0xfa, 0xff, 0x2e, 0x79, 0xaa, - 0x46, 0x9a, 0x4a, 0x76, 0x10, 0xfd, 0xe0, 0xc8, 0xbc, 0x13, 0x7e, 0xff, - 0x5a, 0x6d, 0x86, 0x3c, 0x7f, 0x51, 0xa2, 0x6a, 0x19, 0xa5, 0xda, 0x45, - 0xce, 0x1d, 0xd3, 0xbf, 0x8e, 0xaa, 0x74, 0x3b, 0x3d, 0x35, 0x88, 0xf7, - 0x3f, 0x45, 0x40, 0x17, 0xa4, 0x04, 0x28, 0xd2, 0x63, 0x2e, 0xdd, 0x93, - 0x4c, 0x4e, 0xac, 0x90, 0x35, 0x03, 0x98, 0x8f, 0x13, 0x87, 0xac, 0xc0, - 0x30, 0x18, 0x16, 0x09, 0x90, 0x01, 0x2b, 0x2e, 0x8c, 0x82, 0x03, 0xf6, - 0x54, 0xda, 0x95, 0x72, 0x46, 0xf6, 0xb3, 0x3f, 0x40, 0x0a, 0xc5, 0x91, - 0x92, 0x65, 0x3b, 0xc8, 0xa7, 0x52, 0xa0, 0x41, 0x5e, 0x17, 0xd3, 0x7b, - 0x8a, 0xf2, 0x0d, 0xb7, 0xac, 0x1e, 0x49, 0xfd, 0xd0, 0x62, 0x79, 0x6c, - 0xb5, 0x8d, 0xce, 0xd0, 0x52, 0x9b, 0x2b, 0x44, 0x14, 0x9e, 0x98, 0x12, - 0x34, 0xfa, 0xca, 0x8a, 0x7c, 0x83, 0x49, 0x0a, 0x0e, 0xd5, 0xcc, 0x0d, - 0xba, 0xa0, 0x28, 0x00, 0xb5, 0x76, 0xb3, 0x5c, 0x81, 0x42, 0xe7, 0xd8, - 0x29, 0xea, 0xca, 0x9f, 0x4a, 0x21, 0xc1, 0x54, 0x03, 0x30, 0xb0, 0x4b, - 0x7e, 0xc5, 0x6a, 0xa9, 0xa7, 0xdc, 0xa4, 0xa8, 0x7d, 0x43, 0x52, 0xf5, - 0xe1, 0x19, 0x1d, 0xa4, 0xee, 0xf9, 0x5f, 0x86, 0xab, 0x25, 0x7c, 0x62, - 0x65, 0xb5, 0x20, 0x6e, 0x68, 0x41, 0x67, 0xde, 0x50, 0x02, 0x11, 0x4d, - 0x79, 0x32, 0x8f, 0x2a, 0x9f, 0x2e, 0x90, 0x71, 0x84, 0xd0, 0x71, 0xbb, - 0xa6, 0xc0, 0xf0, 0x99, 0xf5, 0x8a, 0x02, 0x3d, 0xb9, 0x42, 0x8b, 0x1a, - 0x06, 0xb9, 0x78, 0x87, 0xf7, 0x78, 0xbe, 0xdf, 0x28, 0x7b, 0xd5, 0xc4, - 0x12, 0x26, 0xb2, 0x15, 0xbe, 0xac, 0x28, 0x58, 0x8c, 0xe9, 0x88, 0xab, - 0x0e, 0x8d, 0x54, 0x96, 0x8b, 0x87, 0xa8, 0xfd, 0x84, 0x03, 0xf9, 0xd4, - 0xea, 0xb8, 0x89, 0xe3, 0xaa, 0xa3, 0x27, 0x18, 0x3f, 0x9c, 0x28, 0x9e, - 0xa3, 0x96, 0x7c, 0xb0, 0x40, 0x34, 0xc5, 0x33, 0x05, 0x2d, 0xb7, 0xae, - 0x8f, 0xfe, 0xcd, 0x2c, 0x71, 0x20, 0xa7, 0x81, 0xfe, 0xdb, 0xd3, 0xd8, - 0x4f, 0xf0, 0xa3, 0x02, 0x72, 0x18, 0x69, 0x2d, 0x03, 0x51, 0x41, 0xc6, - 0xe7, 0x8c, 0x8d, 0x55, 0xee, 0x6e, 0xc5, 0x62, 0xa5, 0x87, 0xcd, 0xb7, - 0xc4, 0x4b, 0xc4, 0xbc, 0x19, 0x07, 0xad, 0xb8, 0x29, 0xec, 0x4f, 0xba, - 0x09, 0x23, 0x13, 0x0b, 0xc7, 0xd2, 0x94, 0x9e, 0xa3, 0x32, 0xf0, 0x49, - 0xfc, 0x93, 0x50, 0xf3, 0xd5, 0x8f, 0x0e, 0x21, 0x9b, 0x48, 0x80, 0x4d, - 0x39, 0xd9, 0xc5, 0x92, 0xa8, 0xc6, 0xc2, 0xc6, 0x4e, 0x5d, 0xc6, 0xe7, - 0xa3, 0x43, 0x00, 0xf2, 0x58, 0xa6, 0xb5, 0x60, 0x01, 0xe6, 0x99, 0x38, - 0xa5, 0xb7, 0xd6, 0xa7, 0x84, 0xb3, 0x1d, 0xc3, 0x8f, 0xba, 0xf9, 0x45, - 0xf1, 0x87, 0xf9, 0xc4, 0xd8, 0x40, 0x58, 0x42, 0xe2, 0xce, 0x58, 0xc5, - 0x4b, 0xcf, 0xc0, 0x0d, 0x48, 0x12, 0xb9, 0x56, 0xb4, 0x54, 0x08, 0x74, - 0xe4, 0x80, 0x0b, 0xd9, 0xc0, 0xe1, 0x2f, 0xbf, 0x09, 0x1a, 0x80, 0xc9, - 0xbd, 0xc9, 0x37, 0x2c, 0x8e, 0x3e, 0xc4, 0x1c, 0x76, 0x59, 0x99, 0x8a, - 0x30, 0x84, 0x37, 0x24, 0xde, 0x14, 0x0d, 0x35, 0x9d, 0x5b, 0x76, 0x56, - 0x14, 0x05, 0xba, 0x53, 0x77, 0xd5, 0x69, 0x39, 0x3e, 0x4e, 0x71, 0x83, - 0xb2, 0x27, 0xdb, 0x7b, 0x7b, 0xc6, 0xaa, 0x1e, 0xa7, 0xf4, 0xaa, 0x4a, - 0x24, 0x46, 0x82, 0xf3, 0x5f, 0x2a, 0xf8, 0xde, 0x32, 0xb0, 0x0c, 0x66, - 0x7b, 0xa7, 0xdf, 0x84, 0x6d, 0xff, 0x0c, 0x4f, 0x2a, 0x8a, 0x65, 0xe8, - 0x83, 0xae, 0x6a, 0x82, 0xdb, 0x22, 0x03, 0xde, 0xdc, 0x3f, 0x46, 0xd3, - 0xee, 0x8d, 0xe9, 0x0f, 0x1f, 0xe3, 0xd1, 0x97, 0xa2, 0x75, 0x95, 0x14, - 0x6f, 0x0d, 0x60, 0x9c, 0x10, 0x3f, 0x71, 0x8c, 0xed, 0x13, 0x38, 0x89, - 0xa6, 0xfc, 0x0b, 0x9f, 0x51, 0xcd, 0x94, 0xa5, 0xe8, 0xa9, 0x09, 0x3a, - 0x2b, 0x25, 0x80, 0x06, 0xe8, 0xaf, 0x91, 0x06, 0xc7, 0xfb, 0x23, 0x49, - 0x04, 0x7d, 0xb5, 0x0e, 0xdf, 0x93, 0xe1, 0x4c, 0x37, 0x81, 0x88, 0x0d, - 0x5f, 0x57, 0x8d, 0xc7, 0x76, 0x5e, 0x65, 0x5d, 0xe6, 0xa4, 0x89, 0x97, - 0x74, 0x8d, 0x5a, 0x22, 0x35, 0x85, 0xc9, 0x50, 0x67, 0xf5, 0x58, 0xd7, - 0x19, 0x66, 0x00, 0x2f, 0x84, 0x8e, 0xb2, 0x50, 0xee, 0x61, 0x8a, 0x77, - 0x1a, 0x65, 0x86, 0x4e, 0x68, 0xa4, 0x95, 0xa4, 0xb7, 0xc1, 0x1c, 0xc9, - 0x1a, 0x60, 0xf5, 0x90, 0x40, 0x20, 0x03, 0xe4, 0x06, 0x50, 0x0b, 0x98, - 0x6f, 0x5f, 0x97, 0xe4, 0xc3, 0x52, 0x71, 0xfc, 0x3e, 0xf4, 0x57, 0x6a, - 0xe4, 0x5b, 0xda, 0x24, 0xa0, 0x1a, 0x9c, 0xb5, 0x9d, 0x85, 0x9b, 0xf9, - 0x4f, 0x31, 0xd9, 0x16, 0x05, 0x89, 0xd2, 0x7a, 0xe5, 0xb2, 0xbe, 0x56, - 0xe8, 0x72, 0xb1, 0x6c, 0xe0, 0x1c, 0x5d, 0xcf, 0xc4, 0x61, 0xf7, 0xf7, - 0x9e, 0x80, 0xd5, 0x71, 0xe9, 0xb5, 0x19, 0x43, 0x53, 0xb9, 0x65, 0x91, - 0x4c, 0x7f, 0x26, 0x30, 0x96, 0x33, 0x74, 0xdf, 0xca, 0xdf, 0x24, 0x1c, - 0xc0, 0x63, 0xda, 0x37, 0x49, 0x68, 0x71, 0x68, 0x52, 0x66, 0x80, 0x5d, - 0x24, 0x35, 0x24, 0x8e, 0x21, 0x43, 0xa4, 0x99, 0x49, 0xf1, 0xec, 0xf2, - 0x18, 0xac, 0x39, 0x22, 0x3f, 0xb1, 0x07, 0x46, 0xbe, 0x71, 0x51, 0x2a, - 0x24, 0x8e, 0x0a, 0xa0, 0x72, 0xb0, 0x6a, 0xd0, 0x60, 0x1f, 0xb2, 0x70, - 0xa1, 0xdb, 0x3b, 0xf9, 0x22, 0x8a, 0xbc, 0xec, 0x6c, 0xb2, 0x67, 0x9f, - 0x44, 0xbc, 0x53, 0x2d, 0x84, 0x49, 0x52, 0x80, 0x20, 0x3c, 0xa0, 0x97, - 0x64, 0x50, 0x61, 0x57, 0x23, 0x5b, 0xab, 0xbc, 0xc7, 0x69, 0x27, 0xe9, - 0x89, 0x55, 0x81, 0x93, 0xd0, 0xda, 0x3d, 0x23, 0xfa, 0xa5, 0x68, 0xdf, - 0x8e, 0xf2, 0x50, 0xd6, 0x34, 0x8f, 0x47, 0xd9, 0x52, 0xed, 0xda, 0xb3, - 0x70, 0xea, 0xd0, 0xe4, 0xb6, 0x83, 0x8a, 0x36, 0xc2, 0xf8, 0x33, 0x2f, - 0x18, 0xb5, 0x03, 0x9e, 0xfc, 0x5b, 0xb5, 0x23, 0xcb, 0xe3, 0xf0, 0x4f, - 0xab, 0x15, 0x37, 0x13, 0xd4, 0x99, 0xcf, 0x34, 0xb4, 0xac, 0xc2, 0xb1, - 0x74, 0xde, 0xf3, 0xd9, 0xd2, 0x21, 0x27, 0x92, 0x22, 0x3a, 0xa9, 0x1a, - 0x12, 0x0e, 0x33, 0x68, 0x6b, 0x40, 0x04, 0x86, 0x58, 0x6d, 0x2d, 0xb6, - 0x73, 0xc1, 0x67, 0xe2, 0x8f, 0x90, 0x3f, 0x03, 0x71, 0xaa, 0xb8, 0x5a, - 0x31, 0x32, 0x96, 0x7e, 0xb2, 0x52, 0xea, 0x94, 0xcc, 0xfd, 0x0f, 0xe9, - 0xbf, 0x8d, 0xaf, 0x09, 0x94, 0xe3, 0x03, 0xaf, 0xf7, 0x96, 0xb3, 0xda, - 0x08, 0x20, 0x06, 0x74, 0x28, 0x48, 0x60, 0x76, 0x19, 0x87, 0x1c, 0xb7, - 0xd2, 0x16, 0xd4, 0x12, 0xcc, 0x93, 0x45, 0x03, 0x74, 0x1a, 0x53, 0xf9, - 0xa8, 0xf3, 0x73, 0x3e, 0xc2, 0x51, 0x3e, 0x15, 0x39, 0x1e, 0x6e, 0xf5, - 0x15, 0x47, 0x59, 0x9e, 0x84, 0xcf, 0xc1, 0xda, 0xb3, 0xfd, 0xec, 0x81, - 0x5a, 0x4e, 0xa6, 0x82, 0x85, 0x19, 0x87, 0xdd, 0x18, 0xb9, 0xf2, 0x88, - 0x7d, 0x59, 0x85, 0x23, 0xac, 0x7d, 0x4a, 0x67, 0x1b, 0x1e, 0x74, 0xb0, - 0x3d, 0x31, 0xc0, 0x64, 0x7f, 0x2f, 0xfe, 0xca, 0xa9, 0x87, 0xc9, 0x1b, - 0x25, 0xe7, 0xcf, 0xa6, 0xcb, 0xba, 0x55, 0x44, 0x86, 0xd0, 0x97, 0x63, - 0x3c, 0x4c, 0xdf, 0x6d, 0x20, 0x6f, 0x3e, 0x6c, 0x95, 0xc9, 0x08, 0xe6, - 0x2d, 0xe2, 0x40, 0x62, 0xd8, 0xe4, 0xcc, 0xb8, 0xa9, 0xf5, 0x09, 0xc2, - 0x4b, 0x8a, 0xc7, 0x82, 0xbc, 0x3b, 0x40, 0x8d, 0x80, 0x23, 0xfe, 0x37, - 0x54, 0x6d, 0xc6, 0x5c, 0x30, 0xb5, 0x4a, 0x0e, 0xe0, 0xf6, 0x6e, 0x53, - 0x4d, 0x0f, 0x33, 0x87, 0x44, 0x97, 0xf7, 0xbf, 0x56, 0x08, 0xbe, 0xdb, - 0x39, 0xd4, 0xf5, 0x50, 0x63, 0x42, 0xfd, 0xd0, 0xd3, 0xe7, 0xa4, 0xdd, - 0x30, 0xc8, 0x34, 0x21, 0x3a, 0xc3, 0xc6, 0x4b, 0xab, 0x89, 0x78, 0x79, - 0x4b, 0xb1, 0xc2, 0xf2, 0x33, 0x08, 0xd9, 0xf0, 0x25, 0x15, 0x10, 0xd4, - 0xc6, 0x69, 0xb2, 0x55, 0x5f, 0x7a, 0x7c, 0x36, 0xd3, 0x95, 0x80, 0x03, - 0x88, 0xa6, 0xb3, 0xf4, 0x57, 0x91, 0x07, 0x3f, 0x61, 0x02, 0x38, 0xe9, - 0x0c, 0x71, 0xc2, 0x84, 0x66, 0xd9, 0x49, 0xf3, 0x70, 0xd1, 0xaf, 0x6a, - 0xdb, 0x73, 0xa4, 0x2b, 0xb0, 0xb9, 0x77, 0xe0, 0xe8, 0x9b, 0xb6, 0xe0, - 0xb4, 0x38, 0x2d, 0x0a, 0x26, 0xad, 0xb6, 0x0b, 0x3e, 0x9c, 0x24, 0x57, - 0x60, 0x00, 0x63, 0x98, 0xcc, 0xe8, 0x61, 0x11, 0xcc, 0x0c, 0xfb, 0xd1, - 0x19, 0xb3, 0x39, 0x63, 0x7a, 0xfe, 0x93, 0x5c, 0x6b, 0x57, 0x1c, 0xc9, - 0xe2, 0xa7, 0xf0, 0x3e, 0xa7, 0x99, 0xb4, 0xa3, 0x32, 0xa7, 0x7f, 0x9d, - 0x75, 0x03, 0x03, 0x01, 0xd6, 0x7e, 0x09, 0x32, 0xdf, 0x74, 0xf1, 0xaa, - 0x53, 0xbc, 0xeb, 0xb1, 0xb9, 0xeb, 0xa7, 0xe0, 0x47, 0x15, 0xe9, 0x64, - 0xe1, 0x63, 0x3e, 0xc7, 0x0e, 0x12, 0x16, 0xa0, 0x2a, 0xa3, 0xd6, 0x35, - 0xad, 0x01, 0x6a, 0xdd, 0x74, 0xa4, 0xbc, 0xe6, 0xfd, 0x00, 0xa8, 0x6b, - 0xd9, 0x13, 0x7f, 0x8b, 0xbb, 0x7b, 0xb6, 0x1e, 0x20, 0xf0, 0x8c, 0x5f, - 0x8b, 0x5e, 0x41, 0xf9, 0x11, 0xb5, 0x4c, 0xae, 0xda, 0xa5, 0x1e, 0x12, - 0xe5, 0x96, 0xd6, 0x9a, 0xc6, 0xed, 0xaa, 0x12, 0x12, 0x4c, 0x84, 0x88, - 0x24, 0xcb, 0x49, 0xa5, 0x0d, 0x31, 0x64, 0xf0, 0xf6, 0x99, 0xea, 0xb9, - 0xbe, 0xcf, 0xdc, 0x88, 0x76, 0xc4, 0xce, 0x2b, 0x92, 0x42, 0xdd, 0xee, - 0x91, 0xf4, 0x4d, 0xe4, 0x15, 0xb5, 0x79, 0x60, 0xe7, 0x53, 0xe8, 0x2b, - 0x7f, 0xd9, 0xbb, 0xbb, 0xca, 0x06, 0xf5, 0x3c, 0x63, 0xf7, 0x83, 0xe3, - 0x03, 0xba, 0x55, 0xdf, 0x3b, 0x11, 0x3e, 0x53, 0x18, 0xc7, 0xc9, 0x34, - 0x12, 0x10, 0xbc, 0x9f, 0x78, 0x59, 0x27, 0x6b, 0x05, 0xec, 0x8d, 0xb3, - 0x70, 0x16, 0x64, 0x92, 0x90, 0x98, 0x8f, 0x0b, 0x2c, 0x2b, 0x2d, 0x23, - 0x4f, 0xd6, 0x21, 0x3f, 0xc5, 0xa0, 0x71, 0xb0, 0x8f, 0x0e, 0x39, 0x3a, - 0x0c, 0xc3, 0x13, 0x03, 0x61, 0xab, 0xb3, 0x97, 0x20, 0x60, 0x8a, 0x9f, - 0x54, 0xd1, 0x3b, 0x44, 0x7d, 0xf9, 0xa4, 0x88, 0x41, 0xe4, 0x03, 0x64, - 0xb2, 0xf1, 0x82, 0x17, 0xde, 0x5f, 0x34, 0xee, 0x20, 0x42, 0xf5, 0x2d, - 0x01, 0x02, 0x28, 0x41, 0xbe, 0x5b, 0x12, 0x1f, 0xff, 0x0b, 0xa4, 0x8c, - 0x5f, 0x8a, 0x40, 0x8d, 0x46, 0x3e, 0xf5, 0x83, 0x13, 0x19, 0xfb, 0x7b, - 0x20, 0xbb, 0x2b, 0x1b, 0x3e, 0x31, 0x9e, 0x33, 0x6d, 0x3c, 0xd6, 0x6a, - 0x08, 0x99, 0x9a, 0x01, 0xad, 0x5c, 0x41, 0x3d, 0xb9, 0xf1, 0x15, 0xd1, - 0x03, 0xdb, 0x10, 0x91, 0xda, 0x7f, 0x5e, 0x78, 0x93, 0x94, 0x3f, 0xac, - 0xc0, 0xc3, 0x8b, 0x87, 0xe3, 0xed, 0x90, 0xbe, 0xc1, 0xc6, 0x09, 0x49, - 0xb3, 0x6a, 0x52, 0xeb, 0xcf, 0x85, 0xa4, 0x8d, 0x41, 0x42, 0x76, 0x17, - 0x3d, 0x2c, 0x42, 0x3b, 0xd7, 0xd7, 0x3e, 0x7c, 0xe0, 0xd6, 0x12, 0x1f, - 0xbb, 0x87, 0xe7, 0xc5, 0x50, 0x75, 0xa8, 0xe2, 0xf3, 0x15, 0x41, 0x6f, - 0xc0, 0x47, 0xf7, 0xf5, 0x9f, 0xd0, 0x8b, 0x23, 0x0a, 0x9c, 0xbc, 0x1a, - 0x33, 0x20, 0x30, 0x8a, 0xd1, 0x07, 0x6c, 0x84, 0x19, 0xb2, 0xdb, 0x0e, - 0xde, 0x9f, 0x39, 0x18, 0x8a, 0x75, 0x0f, 0x3e, 0x24, 0xcb, 0x50, 0x6f, - 0x90, 0x8a, 0x64, 0x0e, 0x23, 0x6e, 0x41, 0x56, 0xf3, 0x0f, 0xa2, 0x4d, - 0x29, 0x31, 0x3e, 0xcc, 0x5f, 0xc4, 0xa8, 0x52, 0x7a, 0x54, 0x43, 0x25, - 0x0d, 0x05, 0x6f, 0xea, 0x45, 0x3b, 0x09, 0x25, 0xa1, 0x24, 0xcd, 0x29, - 0x54, 0x86, 0xd4, 0xfe, 0x94, 0xbe, 0xe6, 0x73, 0x6e, 0xc7, 0x13, 0x0d, - 0x43, 0x2f, 0x86, 0xf1, 0x4a, 0x13, 0x2b, 0x86, 0x51, 0x8b, 0xaf, 0x81, - 0x6d, 0x95, 0xb4, 0x1f, 0x0d, 0x30, 0x44, 0x66, 0x96, 0x7e, 0xd2, 0xa5, - 0x74, 0x38, 0x03, 0x56, 0x1f, 0x99, 0x2a, 0xfe, 0x99, 0xcb, 0xa8, 0x35, - 0xf3, 0x5f, 0x2c, 0x3a, 0x06, 0xb3, 0x5c, 0x83, 0x91, 0x0a, 0x6a, 0x05, - 0x50, 0x72, 0x83, 0xc7, 0x9f, 0xbb, 0xcf, 0x50, 0x3d, 0xc2, 0x2a, 0x34, - 0x42, 0xc7, 0xb9, 0x2d, 0xba, 0xf5, 0xa1, 0xe4, 0x39, 0x63, 0xe4, 0x35, - 0x9b, 0xaa, 0xc6, 0x7b, 0x8b, 0x14, 0x25, 0x95, 0xba, 0x76, 0xa4, 0x89, - 0x2e, 0xbb, 0x3c, 0xf1, 0x30, 0xe7, 0xe6, 0xe2, 0x62, 0x59, 0xc5, 0x1e, - 0x86, 0xf1, 0xe1, 0x77, 0xfb, 0x04, 0x82, 0x2f, 0xa7, 0xca, 0x99, 0x7c, - 0xbc, 0x5b, 0x2f, 0xa8, 0x51, 0xc1, 0x10, 0x07, 0x70, 0x42, 0x20, 0x3a, - 0xec, 0xae, 0x92, 0x9d, 0x76, 0x8e, 0xc0, 0xa6, 0xb8, 0x3d, 0xb7, 0x0b, - 0x93, 0x2d, 0x35, 0x09, 0x66, 0x47, 0xc6, 0x3e, 0x53, 0x31, 0x34, 0x4f, - 0xa3, 0x7b, 0x23, 0x1f, 0xc8, 0x0a, 0x1d, 0xa8, 0x8e, 0xb4, 0xc4, 0xb7, - 0x03, 0x59, 0xbf, 0x0d, 0x03, 0xd3, 0x33, 0xd1, 0x29, 0x46, 0xaf, 0xb5, - 0xa5, 0x48, 0x9a, 0xdb, 0xc5, 0x5a, 0x6c, 0x86, 0xca, 0x7d, 0xa6, 0x16, - 0x21, 0x1e, 0x26, 0xe2, 0x98, 0x6a, 0xdb, 0x0f, 0xf8, 0xa9, 0x10, 0x7e, - 0xcf, 0x35, 0x5a, 0x36, 0xd9, 0x0b, 0x24, 0xef, 0x4f, 0x34, 0x7e, 0x0f, - 0x5a, 0x18, 0xb0, 0xb7, 0x21, 0xfd, 0xeb, 0xa5, 0x18, 0x02, 0x86, 0xfc, - 0x3d, 0x80, 0x19, 0x4b, 0x2c, 0xf7, 0xed, 0x75, 0xd0, 0x8d, 0xd8, 0x21, - 0xd3, 0x5e, 0x59, 0x5e, 0x30, 0x61, 0xee, 0xad, 0xf8, 0xd8, 0xb2, 0x3a, - 0x46, 0x7a, 0x59, 0x3a, 0x24, 0x3c, 0xda, 0xd8, 0xac, 0x8a, 0xb4, 0x9c, - 0xd7, 0xe0, 0x24, 0x64, 0x0d, 0x79, 0xe5, 0xc1, 0x69, 0xcf, 0x89, 0x24, - 0xad, 0x0b, 0xcf, 0xed, 0xc3, 0xe2, 0x83, 0xe5, 0x16, 0x5d, 0x8f, 0x46, - 0xca, 0x8f, 0x46, 0x4d, 0x92, 0x55, 0xea, 0x65, 0x01, 0xa2, 0x53, 0xbd, - 0xc6, 0x7c, 0x79, 0x1d, 0x06, 0x6c, 0x19, 0x2d, 0x35, 0x6d, 0xad, 0x1b, - 0x87, 0xf9, 0xdc, 0xa3, 0x69, 0x39, 0xe9, 0x1d, 0x9f, 0xdd, 0xe3, 0x90, - 0x83, 0x45, 0xfa, 0xa6, 0xf3, 0x37, 0xb7, 0x87, 0x18, 0x5b, 0x7c, 0xdc, - 0xe2, 0x55, 0x4d, 0x4d, 0x3f, 0x13, 0xa9, 0x9f, 0xbe, 0x9f, 0xb2, 0x30, - 0x8a, 0x1f, 0xa9, 0xa0, 0xba, 0x9b, 0x57, 0x8f, 0x9b, 0xa4, 0x84, 0x07, - 0xd7, 0x0c, 0x09, 0x1f, 0x2d, 0x21, 0xd0, 0xab, 0x46, 0xa7, 0xd8, 0x27, - 0x61, 0x90, 0x6b, 0x60, 0x9d, 0x3f, 0x89, 0xdf, 0x15, 0x64, 0x0d, 0x2c, - 0xca, 0x99, 0x7e, 0xbd, 0xed, 0x0f, 0xf6, 0xd7, 0x4e, 0x5b, 0x4c, 0x7d, - 0x1f, 0xfb, 0xb1, 0x50, 0x36, 0x6d, 0x73, 0x15, 0x63, 0xca, 0xa3, 0xf0, - 0xc4, 0x73, 0x16, 0x5e, 0x62, 0xa4, 0xae, 0xcf, 0x0b, 0x87, 0x3e, 0x9a, - 0xb2, 0x72, 0xb3, 0x60, 0x98, 0x39, 0xc0, 0x0b, 0x33, 0x48, 0x5d, 0x88, - 0xeb, 0x55, 0x44, 0xad, 0xa2, 0x47, 0xe5, 0x29, 0x45, 0x38, 0xed, 0xe7, - 0x82, 0x4c, 0xa1, 0xb1, 0x61, 0x41, 0x57, 0xd3, 0xce, 0x65, 0x15, 0x2f, - 0x5c, 0x7b, 0xc3, 0x80, 0xe2, 0xcc, 0x7c, 0xaf, 0xe5, 0xb9, 0xdc, 0x09, - 0x70, 0x09, 0x26, 0xd6, 0x70, 0x4d, 0xab, 0x7a, 0xce, 0x39, 0x32, 0x3e, - 0xd4, 0x34, 0x0c, 0x64, 0x78, 0xe9, 0x8e, 0xb7, 0x56, 0x0d, 0xea, 0xda, - 0x01, 0x70, 0xe9, 0x8e, 0xc1, 0xbc, 0x71, 0xd8, 0xcd, 0x44, 0x6c, 0x95, - 0x07, 0x26, 0xf5, 0x2f, 0x07, 0x12, 0x9c, 0xf3, 0x8c, 0x54, 0x97, 0x38, - 0x65, 0x9a, 0xc7, 0x54, 0xfc, 0x5b, 0x29, 0x14, 0x54, 0xa1, 0xe2, 0xe2, - 0x98, 0x3b, 0xbd, 0x96, 0x2d, 0x1f, 0xa6, 0xa2, 0x5b, 0xf9, 0xdd, 0x71, - 0xea, 0x0d, 0xc2, 0x4d, 0x44, 0xe7, 0xfc, 0x8e, 0xde, 0xe2, 0x73, 0xad, - 0x72, 0x99, 0x41, 0x19, 0x18, 0xc5, 0xc4, 0x12, 0x41, 0xb6, 0x55, 0x53, - 0x7c, 0x8c, 0x96, 0xf9, 0xd0, 0xad, 0xf0, 0xe2, 0x0e, 0xfe, 0x55, 0x3e, - 0x07, 0xb9, 0x82, 0x6b, 0xdb, 0xd9, 0x3e, 0x1f, 0x04, 0xe8, 0xeb, 0xeb, - 0x58, 0x27, 0x0c, 0x55, 0x61, 0x04, 0xf0, 0x89, 0x9d, 0x68, 0x54, 0xbb, - 0xbe, 0x40, 0x6d, 0x2b, 0x15, 0xaa, 0xe6, 0x68, 0x56, 0xfd, 0xee, 0x49, - 0x25, 0xe4, 0xd7, 0x36, 0x2c, 0x61, 0x91, 0xd0, 0x55, 0xaa, 0xcb, 0xb2, - 0x8c, 0xbd, 0x3a, 0x7b, 0x33, 0x85, 0x7a, 0xd6, 0x5f, 0xfb, 0x50, 0xd4, - 0xcf, 0xbe, 0x09, 0xe5, 0xc2, 0x82, 0x56, 0xba, 0x92, 0x9f, 0x4c, 0xea, - 0x94, 0xee, 0x97, 0x8b, 0x4a, 0xc0, 0x8f, 0xe2, 0x23, 0x24, 0xde, 0x7e, - 0x9c, 0xde, 0x5d, 0xb1, 0xf0, 0x38, 0x68, 0xab, 0xc9, 0x69, 0x54, 0xb5, - 0xfd, 0xa0, 0x87, 0x06, 0x68, 0x25, 0xbe, 0x07, 0x65, 0xca, 0xa2, 0x73, - 0x84, 0x3b, 0x93, 0xce, 0x13, 0x23, 0x76, 0x44, 0x9a, 0x28, 0x5a, 0x2d, - 0x32, 0xc9, 0xef, 0xc2, 0xd6, 0x68, 0x6b, 0xbb, 0xac, 0x50, 0x76, 0x0e, - 0xdd, 0x0e, 0x78, 0x1f, 0x74, 0x54, 0x65, 0xe7, 0x32, 0x18, 0x90, 0x8a, - 0xd8, 0x3c, 0xd5, 0x90, 0x00, 0x78, 0xf6, 0xda, 0x1a, 0x3e, 0x63, 0xf0, - 0x0e, 0x54, 0x1b, 0x70, 0xac, 0xf5, 0x79, 0x9a, 0x40, 0x12, 0x14, 0x2c, - 0x0f, 0xa5, 0xef, 0x91, 0x77, 0x4e, 0xef, 0x5e, 0x61, 0xbc, 0x71, 0x73, - 0xe7, 0x8f, 0x22, 0x13, 0x46, 0x8e, 0x86, 0xed, 0xdf, 0xfc, 0x39, 0xb2, - 0x86, 0x67, 0x90, 0x51, 0x7e, 0x69, 0x90, 0x9e, 0xa1, 0x54, 0x73, 0xd1, - 0x66, 0x89, 0xca, 0xf5, 0x12, 0xd0, 0xf6, 0x5c, 0x08, 0x62, 0x76, 0x0d, - 0x83, 0xc3, 0xb9, 0x2b, 0x0c, 0x14, 0x8b, 0x02, 0xa8, 0x11, 0x3a, 0x58, - 0xe5, 0x8a, 0xe4, 0x42, 0xe0, 0x14, 0xc4, 0x66, 0xf2, 0x8f, 0xce, 0x03, - 0x9f, 0x9d, 0xc7, 0x26, 0x01, 0x3d, 0x09, 0x83, 0x56, 0xd6, 0x36, 0x20, - 0xf5, 0xe2, 0xa3, 0xf4, 0x0a, 0xc0, 0xec, 0x44, 0x7c, 0x42, 0xf0, 0x00, - 0x79, 0x38, 0x8f, 0x20, 0xd0, 0xaa, 0xaf, 0x37, 0xd2, 0xb3, 0x63, 0xd4, - 0xf3, 0x04, 0xc7, 0x28, 0x37, 0x9e, 0x5a, 0x9b, 0x1d, 0xd4, 0xb6, 0x59, - 0x4b, 0x9d, 0x03, 0x60, 0x5c, 0x77, 0x8a, 0xc9, 0xff, 0xb2, 0x82, 0x19, - 0x4f, 0x87, 0xc5, 0x64, 0x0b, 0xc2, 0x1e, 0x4a, 0x0c, 0x01, 0x8a, 0xe6, - 0xc8, 0x9a, 0x8e, 0xbd, 0xd7, 0x14, 0x19, 0x54, 0x11, 0x2c, 0x23, 0x15, - 0x19, 0x01, 0xe7, 0xe9, 0xf1, 0x18, 0x3b, 0x4e, 0xa5, 0x0b, 0xec, 0x6f, - 0xa0, 0xda, 0xc0, 0x54, 0x6f, 0xf9, 0x35, 0x6a, 0xf4, 0x9e, 0x98, 0xb4, - 0x58, 0x18, 0x24, 0x93, 0x68, 0xa8, 0xa9, 0xd1, 0x18, 0x0f, 0x8c, 0xc4, - 0xea, 0xed, 0x93, 0x18, 0xd6, 0xeb, 0xc8, 0xc5, 0xb5, 0x15, 0x5f, 0xf3, - 0x16, 0xa3, 0xb9, 0xc6, 0x30, 0x43, 0xee, 0x57, 0xfb, 0x2d, 0x80, 0x60, - 0xac, 0x57, 0x9f, 0xde, 0x03, 0xf4, 0x4c, 0xf0, 0x0b, 0x12, 0x1e, 0x91, - 0xa3, 0x14, 0xa1, 0xaf, 0x4c, 0x87, 0x24, 0x93, 0x4d, 0x83, 0x5a, 0x2c, - 0x00, 0xd8, 0x5d, 0x7c, 0xbe, 0x06, 0x43, 0x2c, 0xd7, 0xc4, 0xc8, 0x1a, - 0x80, 0x71, 0xb6, 0x52, 0x90, 0xed, 0x10, 0x19, 0xbf, 0xab, 0x93, 0x58, - 0x02, 0x7e, 0xcd, 0x66, 0x4b, 0x15, 0x17, 0xa7, 0xb4, 0x75, 0x85, 0x7e, - 0x7d, 0x64, 0x2b, 0x38, 0xd6, 0x7e, 0x2f, 0xea, 0x26, 0xb3, 0x09, 0x0a, - 0x19, 0xaf, 0x0c, 0x96, 0x7d, 0x5f, 0x9c, 0xec, 0x30, 0xd0, 0xaf, 0x94, - 0xb0, 0x38, 0x2f, 0xd9, 0x3c, 0xcc, 0x7d, 0x53, 0xf1, 0x1d, 0x71, 0x2e, - 0x41, 0x2b, 0x3b, 0x03, 0x34, 0xa2, 0x4d, 0x6c, 0x54, 0xc7, 0x58, 0x4e, - 0x00, 0x5d, 0x71, 0x1d, 0x0e, 0x39, 0xdb, 0xf9, 0x5f, 0xc6, 0xb6, 0x70, - 0xa1, 0x41, 0xab, 0xd1, 0x00, 0x45, 0xad, 0x51, 0x3b, 0x48, 0xbd, 0x39, - 0x50, 0xf2, 0x2d, 0x6d, 0x30, 0x11, 0x33, 0xb3, 0xb6, 0x31, 0x15, 0xce, - 0x3a, 0x3d, 0x32, 0xda, 0x11, 0x57, 0xf6, 0x68, 0x5f, 0xeb, 0xde, 0xf3, - 0xb3, 0x51, 0x6d, 0xb2, 0x76, 0xda, 0xc3, 0x04, 0x24, 0x9b, 0xd7, 0xd9, - 0x09, 0x99, 0x31, 0xbd, 0x16, 0x50, 0xf5, 0xea, 0x38, 0x4c, 0xdc, 0x4c, - 0x12, 0xea, 0xe5, 0x63, 0x78, 0xe2, 0x7f, 0x4f, 0x03, 0x20, 0x42, 0xfc, - 0xe7, 0x4b, 0x1e, 0x64, 0x1a, 0xed, 0x72, 0x94, 0xa6, 0xae, 0xab, 0x99, - 0xf4, 0x25, 0x87, 0xe2, 0x82, 0xe1, 0xe0, 0x16, 0xdc, 0x67, 0x4e, 0xb7, - 0x06, 0xe9, 0x33, 0x12, 0x90, 0x10, 0x0d, 0x92, 0xe9, 0x66, 0x34, 0xb3, - 0xbb, 0x50, 0x22, 0x39, 0x9a, 0x9c, 0x5c, 0xa2, 0x13, 0xb5, 0x89, 0xb7, - 0x8f, 0xc1, 0xc1, 0x1a, 0xc9, 0x12, 0x63, 0x2a, 0x86, 0xa6, 0x37, 0xf5, - 0x37, 0x23, 0x91, 0xee, 0x97, 0xb0, 0x43, 0xcb, 0x8c, 0xad, 0x73, 0x81, - 0xad, 0xa2, 0x40, 0x56, 0xfb, 0x1e, 0x1a, 0xf9, 0xd7, 0x5f, 0xf4, 0xcf, - 0x30, 0x8e, 0x6c, 0xba, 0x99, 0x00, 0x7b, 0x8c, 0x75, 0xb7, 0xa2, 0x94, - 0xbf, 0x7a, 0x31, 0x9a, 0xec, 0xe9, 0x8f, 0xf0, 0xde, 0xf0, 0x5a, 0x47, - 0xc4, 0x58, 0x16, 0xdb, 0x9a, 0x9d, 0x0d, 0x9d, 0x7b, 0x11, 0x51, 0x97, - 0xd7, 0xe5, 0xff, 0x32, 0x69, 0xb7, 0x11, 0xab, 0xaa, 0x00, 0xa8, 0x44, - 0xe4, 0xd5, 0xa6, 0x85, 0xb8, 0x83, 0xa1, 0x86, 0x3f, 0x09, 0x7e, 0xf8, - 0x7f, 0x2e, 0x4c, 0xa6, 0x60, 0x10, 0xe4, 0x50, 0xa4, 0xca, 0xfc, 0xab, - 0xcc, 0x1a, 0x3c, 0xec, 0x16, 0xe9, 0x72, 0x7a, 0xee, 0xbb, 0x3b, 0xc7, - 0x1a, 0xce, 0xe4, 0x45, 0x6a, 0x60, 0x9d, 0xe5, 0x30, 0x04, 0x18, 0x10, - 0x82, 0x2c, 0x57, 0xad, 0x44, 0x3e, 0x5e, 0x59, 0x44, 0x66, 0xdb, 0x24, - 0x18, 0xa3, 0x9f, 0xa0, 0x46, 0xdf, 0x5b, 0xe8, 0xc8, 0x18, 0x4e, 0xc1, - 0x71, 0x0b, 0x62, 0xcf, 0x9b, 0xd4, 0xc0, 0x64, 0x12, 0xa7, 0x60, 0xe1, - 0x31, 0x4b, 0x6c, 0xea, 0x78, 0x2b, 0x36, 0x18, 0xff, 0xe3, 0x57, 0x3b, - 0xff, 0x2e, 0x9d, 0xb1, 0xcb, 0x9e, 0x5a, 0x75, 0x51, 0x11, 0xc9, 0xa1, - 0xb2, 0x7a, 0x04, 0x1c, 0x5b, 0xf9, 0x4e, 0xf6, 0x17, 0x34, 0x66, 0x69, - 0x24, 0xbe, 0x5f, 0xf2, 0x7e, 0x13, 0xff, 0x01, 0x47, 0xe8, 0xd4, 0x96, - 0x40, 0x32, 0x79, 0x6b, 0xf2, 0xaf, 0x00, 0xcd, 0xd5, 0xff, 0xc8, 0x05, - 0x12, 0xa6, 0x1d, 0x18, 0xb1, 0x83, 0x70, 0x01, 0xc9, 0x26, 0x72, 0xe8, - 0x23, 0x9d, 0x4d, 0x85, 0xb8, 0xa0, 0x3e, 0x01, 0x30, 0x3c, 0xf4, 0xf8, - 0xc1, 0xc2, 0xda, 0xe9, 0x70, 0xf5, 0xed, 0xc5, 0x7a, 0xf5, 0x86, 0x46, - 0x06, 0x05, 0x07, 0x71, 0x17, 0x6c, 0x53, 0xe8, 0x77, 0x8c, 0xbf, 0x3b, - 0x77, 0x62, 0x6b, 0x99, 0x00, 0x63, 0xee, 0x76, 0x98, 0x97, 0x86, 0x58, - 0x9e, 0xd7, 0x7b, 0xb5, 0x32, 0x63, 0xaf, 0xd4, 0x55, 0x2f, 0xa2, 0xb8, - 0x86, 0xb4, 0x13, 0xef, 0x9c, 0x1b, 0xc2, 0x46, 0x4e, 0x9e, 0x1e, 0xcd, - 0x0d, 0xab, 0x92, 0x50, 0xd2, 0x04, 0x7b, 0x2a, 0xc3, 0x50, 0x36, 0x47, - 0x9c, 0xab, 0x32, 0xc4, 0x55, 0x57, 0xbe, 0x21, 0xba, 0x47, 0x62, 0xf5, - 0x03, 0x63, 0xa6, 0x55, 0x84, 0x63, 0x75, 0x54, 0xe1, 0x93, 0xd5, 0x9b, - 0x92, 0x35, 0x3c, 0x71, 0xe0, 0xae, 0x97, 0x65, 0x30, 0x0a, 0x5e, 0x2e, - 0x1b, 0x95, 0xb7, 0xf2, 0xe9, 0x0f, 0x80, 0xe6, 0x6c, 0x4b, 0x36, 0xe1, - 0x83, 0x21, 0xfc, 0x78, 0x83, 0xe0, 0x93, 0xff, 0x03, 0x27, 0x14, 0x38, - 0x42, 0x98, 0x28, 0x51, 0x4b, 0x69, 0x0d, 0xc3, 0xe1, 0x92, 0x4b, 0xf2, - 0x5b, 0xc0, 0x8e, 0xa9, 0xb9, 0x89, 0x93, 0xa3, 0x3b, 0x49, 0x96, 0x3c, - 0x34, 0x00, 0x05, 0x3d, 0x37, 0x2a, 0x8c, 0x47, 0x13, 0x54, 0x8e, 0xd7, - 0xa6, 0xda, 0xcc, 0x89, 0x57, 0xe7, 0x40, 0x73, 0xc6, 0xe4, 0xd2, 0xe2, - 0x91, 0x2c, 0xe3, 0xfc, 0x03, 0x4e, 0xf0, 0xb2, 0x84, 0x7c, 0xb9, 0x61, - 0x9b, 0x63, 0x8b, 0x5c, 0xfe, 0x40, 0xf9, 0xe6, 0x32, 0x4e, 0x54, 0xfb, - 0x8f, 0x11, 0x45, 0x83, 0x23, 0xf6, 0x84, 0xd9, 0x4f, 0x34, 0xff, 0x8c, - 0xb5, 0x40, 0x67, 0xa8, 0x09, 0x16, 0x0b, 0xea, 0x43, 0xbe, 0xc2, 0xbb, - 0x43, 0xb1, 0xdc, 0xe7, 0x5b, 0xf7, 0xdb, 0x32, 0xdd, 0x85, 0xb4, 0x74, - 0xd5, 0x35, 0x41, 0x86, 0x0d, 0x26, 0x1f, 0x81, 0x1b, 0x13, 0xb0, 0xea, - 0x76, 0x06, 0x54, 0x76, 0xee, 0x6e, 0x07, 0x69, 0xbd, 0x5e, 0x13, 0xd5, - 0x54, 0x0b, 0xc5, 0xfd, 0xc6, 0x50, 0x36, 0x63, 0x3f, 0x47, 0x25, 0x09, - 0x96, 0x38, 0x34, 0x85, 0x21, 0x1e, 0xd8, 0x4d, 0xf2, 0x90, 0xe1, 0x3c, - 0xca, 0x3c, 0x96, 0x1b, 0x6d, 0x37, 0x1e, 0x71, 0xaf, 0x72, 0xa3, 0xd5, - 0xf6, 0x7b, 0x56, 0x97, 0x56, 0x79, 0xda, 0xf9, 0x98, 0x4d, 0x92, 0x02, - 0x15, 0x54, 0xbc, 0x06, 0xf9, 0x32, 0x64, 0x1c, 0x49, 0x44, 0x45, 0xe7, - 0x40, 0x13, 0xd2, 0xe1, 0x99, 0xcc, 0x58, 0x0b, 0xda, 0x21, 0x2e, 0x99, - 0x26, 0xc6, 0x5d, 0x40, 0xf3, 0xaf, 0x1a, 0x5a, 0x70, 0x7d, 0x79, 0x7d, - 0x47, 0x1f, 0x74, 0xc9, 0x1a, 0xe8, 0x18, 0x01, 0x46, 0x7a, 0x25, 0xdf, - 0xd1, 0xf6, 0xf5, 0x1b, 0x62, 0x8c, 0xf9, 0x85, 0xc1, 0xc9, 0x73, 0x94, - 0xfd, 0x52, 0xd3, 0x2a, 0xb0, 0x0f, 0xf7, 0x32, 0xc6, 0xc1, 0xc6, 0xce, - 0xea, 0xdd, 0x4d, 0x53, 0x86, 0x8c, 0x84, 0x8e, 0xd8, 0x03, 0xe7, 0x7f, - 0xfe, 0x62, 0x96, 0x20, 0xd7, 0xb2, 0xd3, 0x71, 0xc2, 0xac, 0xd6, 0x96, - 0x3b, 0x52, 0x34, 0x8d, 0x5f, 0xf4, 0xc9, 0xa4, 0x68, 0xdd, 0xd9, 0x54, - 0x06, 0x18, 0xd2, 0x98, 0x49, 0xc5, 0x5a, 0xd7, 0x6b, 0xfc, 0x43, 0x7a, - 0x44, 0x01, 0x45, 0x11, 0x4d, 0x44, 0x1a, 0x42, 0xcd, 0xf1, 0x8d, 0xae, - 0xaf, 0x91, 0x0a, 0xb3, 0xae, 0x07, 0xb6, 0xef, 0x74, 0x44, 0x9a, 0xbc, - 0x7b, 0x57, 0x4c, 0x70, 0x69, 0x65, 0xac, 0x88, 0x9d, 0x8c, 0x05, 0x22, - 0xe3, 0xdd, 0x5c, 0x46, 0xd3, 0x86, 0xd7, 0x42, 0x85, 0x9c, 0x76, 0x8e, - 0x96, 0x06, 0x18, 0x19, 0xbc, 0xb3, 0x2b, 0x7d, 0x92, 0x52, 0x6f, 0x07, - 0xbe, 0x7a, 0x49, 0xe3, 0x3a, 0xf9, 0x4f, 0x02, 0x9c, 0xd1, 0x54, 0x75, - 0xf0, 0xca, 0x03, 0x89, 0xc9, 0x3d, 0xba, 0x83, 0xc2, 0xf4, 0x77, 0xad, - 0x02, 0x1a, 0x7e, 0xcc, 0xa7, 0xba, 0x39, 0xbe, 0x32, 0x36, 0x75, 0x99, - 0x43, 0xa9, 0xf6, 0x63, 0xdd, 0xe9, 0xc3, 0x58, 0x10, 0x1e, 0xec, 0xd6, - 0x1d, 0x2d, 0x34, 0x71, 0x12, 0xec, 0x4c, 0xf2, 0xe8, 0x97, 0x72, 0x3f, - 0xc9, 0xa9, 0xb4, 0x3b, 0x57, 0x3a, 0xa4, 0xb3, 0xc0, 0x47, 0xc0, 0x7e, - 0x7a, 0xce, 0x19, 0x4b, 0x03, 0x22, 0xed, 0xc8, 0x7f, 0xd4, 0xc7, 0xe1, - 0x2a, 0x26, 0x15, 0xf8, 0x76, 0x69, 0xbe, 0xd6, 0x18, 0x28, 0x10, 0x68, - 0x51, 0xfb, 0x5d, 0x1b, 0x03, 0x63, 0xb8, 0x33, 0xb1, 0x90, 0x1f, 0x69, - 0x94, 0x51, 0xfb, 0x20, 0x5a, 0xa4, 0x3c, 0xee, 0x22, 0x2f, 0x83, 0x4f, - 0x5d, 0x26, 0x5f, 0x5e, 0xc7, 0x15, 0x3b, 0x90, 0x62, 0x0d, 0x48, 0x47, - 0x31, 0x18, 0x9c, 0xd3, 0xea, 0x46, 0x22, 0xbb, 0x4e, 0x44, 0xb1, 0x89, - 0xf0, 0x53, 0xdf, 0x63, 0x3d, 0x33, 0x2c, 0xca, 0xee, 0xfa, 0x55, 0x7c, - 0x3b, 0x9f, 0xaa, 0xdd, 0x68, 0xe5, 0x25, 0x46, 0x9d, 0xde, 0x49, 0x44, - 0x78, 0x4e, 0x0e, 0x9e, 0xba, 0x3b, 0xc4, 0x3d, 0xfb, 0x9c, 0x51, 0x05, - 0x06, 0x59, 0x20, 0xca, 0xda, 0x70, 0xb3, 0xa5, 0x91, 0xf5, 0x6d, 0xf8, - 0x42, 0x93, 0x9e, 0x39, 0x9a, 0xd1, 0x87, 0x49, 0xc8, 0x70, 0xf1, 0xc9, - 0x75, 0x2c, 0xf8, 0xdf, 0x15, 0x5d, 0x65, 0x92, 0x97, 0x2f, 0x77, 0x52, - 0x20, 0x9b, 0xec, 0xdb, 0xfb, 0x7b, 0xfc, 0x0e, 0x4c, 0x3d, 0xeb, 0x97, - 0xa3, 0x8e, 0x15, 0x78, 0xeb, 0x28, 0xde, 0xf0, 0xfd, 0x85, 0x09, 0x1b, - 0x60, 0x12, 0x98, 0xb0, 0x54, 0xc0, 0xdb, 0xcb, 0x84, 0x9b, 0xbe, 0x8f, - 0x61, 0x6e, 0xf1, 0x2c, 0xf5, 0xfa, 0x5e, 0x06, 0x42, 0xf7, 0xf3, 0xf4, - 0x9d, 0x05, 0xc2, 0x3f, 0xf7, 0x77, 0x26, 0xae, 0x49, 0xd4, 0x9e, 0x84, - 0x87, 0x01, 0xf4, 0xa0, 0x5c, 0x79, 0x44, 0x3d, 0xa9, 0xe4, 0xdf, 0x80, - 0xff, 0x8e, 0x6e, 0x0b, 0xba, 0xff, 0xc7, 0x8d, 0xee, 0x1a, 0x72, 0x87, - 0x07, 0xd2, 0xc4, 0x6b, 0xf9, 0x03, 0x0f, 0x04, 0x22, 0xe4, 0xeb, 0x8e, - 0xea, 0xfd, 0xbb, 0x91, 0x43, 0xa1, 0xeb, 0xda, 0x50, 0x3b, 0xbc, 0xda, - 0xf5, 0x25, 0xbb, 0x49, 0xda, 0xaa, 0x1c, 0x4b, 0x0b, 0xb7, 0x1c, 0xa3, - 0x4e, 0x5e, 0x72, 0x8e, 0xf1, 0x67, 0x5b, 0x4e, 0x34, 0x7f, 0x03, 0x1f, - 0x33, 0x59, 0x43, 0x45, 0x31, 0x50, 0x01, 0x46, 0xfd, 0x35, 0x04, 0x76, - 0x1e, 0x94, 0xfe, 0xf5, 0x27, 0xc7, 0x7d, 0xba, 0x54, 0x32, 0x27, 0x32, - 0xf1, 0x6f, 0xde, 0x53, 0xfd, 0x6a, 0x41, 0x6b, 0xa6, 0x25, 0xe8, 0xf8, - 0x9e, 0xba, 0xca, 0xd8, 0x68, 0xad, 0xde, 0xaf, 0xc1, 0xae, 0x3f, 0xa7, - 0xfa, 0x7f, 0xf2, 0xee, 0x5f, 0x4d, 0x69, 0x04, 0x1e, 0x15, 0xa7, 0xd6, - 0x5c, 0xcb, 0xf9, 0x34, 0xcf, 0x62, 0x39, 0xf0, 0xd3, 0x25, 0x83, 0x8d, - 0xad, 0x44, 0xaa, 0xd1, 0x6a, 0xd8, 0xbe, 0x81, 0xdc, 0x96, 0xa0, 0x39, - 0xf5, 0xe1, 0x50, 0x75, 0xef, 0x0c, 0x25, 0xc6, 0x24, 0x72, 0x1b, 0x25, - 0x4b, 0xb7, 0xc7, 0xab, 0xf4, 0xaf, 0x9c, 0xca, 0x2f, 0x3b, 0xbb, 0x9a, - 0xb9, 0xb1, 0xaf, 0x0b, 0xf6, 0xfa, 0xd5, 0x6e, 0x66, 0xf2, 0x92, 0xc4, - 0x38, 0xfa, 0x4a, 0x9a, 0x2d, 0xab, 0xf6, 0x14, 0x55, 0x3c, 0x7f, 0x7e, - 0xd7, 0xcb, 0x3b, 0xa5, 0xbe, 0x54, 0x1a, 0xa7, 0xac, 0xc2, 0x66, 0xa6, - 0xa5, 0xa9, 0x65, 0xdb, 0x98, 0x2a, 0x57, 0x66, 0x84, 0xae, 0x6f, 0x59, - 0xa8, 0xd4, 0x44, 0x0d, 0xcd, 0xbd, 0x2d, 0xb0, 0x60, 0x4b, 0x89, 0x1d, - 0xbe, 0x79, 0x15, 0x9f, 0xad, 0xde, 0xf1, 0x27, 0xe3, 0x42, 0x06, 0x12, - 0x37, 0x08, 0xd6, 0xca, 0xc6, 0xf3, 0x4f, 0xbc, 0xd4, 0x93, 0x51, 0xa8, - 0x97, 0x27, 0xc1, 0x12, 0x25, 0x7a, 0xb7, 0xb1, 0xb2, 0x03, 0x67, 0x21, - 0x3d, 0xf5, 0xd4, 0x37, 0x2e, 0xb5, 0x53, 0xc8, 0x6c, 0x5a, 0x0b, 0x2f, - 0xcc, 0xb7, 0xa1, 0x63, 0x17, 0x8c, 0x41, 0xb0, 0x8f, 0xd1, 0x39, 0x5e, - 0xba, 0x1d, 0xc5, 0x1b, 0xa0, 0x0e, 0xd0, 0xe6, 0x5a, 0xc2, 0xb0, 0x66, - 0x50, 0xfd, 0x2e, 0x99, 0x89, 0xcf, 0x57, 0x54, 0x81, 0xb4, 0x50, 0x44, - 0x46, 0x57, 0x87, 0x00, 0x82, 0xcc, 0x8a, 0xd5, 0xf8, 0x23, 0x07, 0xae, - 0x63, 0x6b, 0xec, 0xe2, 0x77, 0x9e, 0x79, 0xa5, 0xc5, 0x53, 0x33, 0xa1, - 0x29, 0x50, 0x57, 0x3c, 0xed, 0x95, 0x6a, 0xb3, 0x5f, 0xf5, 0x0a, 0xc5, - 0x80, 0x5d, 0x9f, 0x3a, 0xfe, 0x26, 0x79, 0xe7, 0xc1, 0x46, 0x6b, 0x38, - 0x58, 0xd1, 0x02, 0x7d, 0x5c, 0x60, 0xfb, 0xb8, 0xb7, 0x01, 0xc4, 0x58, - 0x3b, 0xd8, 0x33, 0xe5, 0xcf, 0x2c, 0xf2, 0x5b, 0xa1, 0x70, 0xc7, 0xde, - 0xac, 0x97, 0x5a, 0x6d, 0xf1, 0xb8, 0x0a, 0x1c, 0x81, 0xfe, 0x7e, 0x7f, - 0x24, 0x78, 0x49, 0xb9, 0xe4, 0x00, 0x7a, 0xe7, 0x9c, 0xfa, 0x88, 0x4e, - 0x73, 0x0b, 0x38, 0x0b, 0x0e, 0x87, 0x40, 0xe1, 0x86, 0x86, 0x44, 0x70, - 0x02, 0x48, 0xc3, 0x10, 0xc0, 0xe2, 0xad, 0xd8, 0x60, 0x64, 0xc6, 0x56, - 0xf2, 0x23, 0xb2, 0x99, 0xe3, 0xb5, 0xef, 0x24, 0x84, 0x20, 0x39, 0x2b, - 0xcc, 0x12, 0x1a, 0x7b, 0x30, 0xd2, 0xed, 0x2c, 0x23, 0xb2, 0x84, 0x5a, - 0xff, 0x4a, 0x6f, 0x9f, 0xfa, 0xcd, 0x34, 0xcc, 0x09, 0x1b, 0xdc, 0x2e, - 0x9a, 0x13, 0x7d, 0x4d, 0x87, 0x09, 0x37, 0x72, 0x82, 0x21, 0x09, 0xcf, - 0xce, 0xa8, 0x3b, 0x3b, 0x62, 0x67, 0xc5, 0x24, 0x2a, 0x6a, 0x70, 0xad, - 0x99, 0x56, 0xaa, 0x8e, 0xde, 0x9b, 0x56, 0xd1, 0x5c, 0xab, 0x4b, 0x13, - 0x9c, 0x6b, 0xea, 0xb3, 0xf0, 0x39, 0xd9, 0x4f, 0xc0, 0x45, 0xf2, 0xe0, - 0x52, 0x07, 0x11, 0x14, 0xb0, 0x0a, 0x81, 0x29, 0x16, 0x8a, 0x74, 0x79, - 0x1c, 0x3d, 0xfd, 0xfe, 0x42, 0x81, 0x98, 0x48, 0x91, 0x89, 0xb0, 0xc5, - 0x83, 0x6b, 0xe9, 0xa0, 0x09, 0x9e, 0x01, 0x27, 0xdf, 0x2f, 0x82, 0x28, - 0x40, 0xef, 0xcb, 0x49, 0xac, 0xa3, 0x87, 0x59, 0x3a, 0x34, 0x2c, 0x48, - 0x0f, 0x28, 0x9d, 0x44, 0x89, 0xde, 0xbb, 0x25, 0x8c, 0x72, 0x88, 0x5b, - 0x03, 0x2c, 0x39, 0x3f, 0xa3, 0xf7, 0xb3, 0x4d, 0xd7, 0x25, 0x69, 0xb0, - 0x99, 0x0c, 0x02, 0x09, 0xd4, 0x1d, 0xc1, 0xb4, 0x3a, 0x6d, 0x18, 0x69, - 0x18, 0xe7, 0x11, 0xc4, 0xc6, 0x53, 0xb3, 0x0d, 0xd2, 0xb9, 0x1f, 0x20, - 0x8c, 0x3f, 0xd5, 0xab, 0xfe, 0x14, 0x65, 0xc6, 0x79, 0x15, 0xc6, 0x38, - 0xec, 0xca, 0x2a, 0xb3, 0x47, 0x0a, 0xf7, 0x64, 0x6a, 0xd0, 0xe1, 0x27, - 0xcd, 0x36, 0x2e, 0xab, 0x96, 0xed, 0xf4, 0x99, 0x4b, 0x16, 0x93, 0x5e, - 0x31, 0x9b, 0x48, 0xf0, 0x70, 0xa6, 0x80, 0xff, 0xa0, 0xab, 0x8f, 0xe7, - 0xcb, 0x52, 0x04, 0xcd, 0xf5, 0x81, 0xa8, 0x97, 0xb0, 0xfa, 0xb4, 0x20, - 0x9e, 0x5f, 0xdd, 0x95, 0x2b, 0x6a, 0x35, 0x45, 0x3c, 0xfa, 0xa0, 0xd6, - 0x56, 0xc5, 0xf6, 0x65, 0xaf, 0x66, 0xb6, 0x56, 0xbc, 0x3b, 0x5d, 0x6b, - 0x5a, 0x5f, 0x19, 0x41, 0xf4, 0x6f, 0x9f, 0xbe, 0x75, 0x42, 0xa2, 0x2c, - 0x7a, 0x06, 0x4c, 0xdb, 0x43, 0x2d, 0x8a, 0x07, 0xc2, 0x7c, 0x6e, 0x6f, - 0x74, 0x2e, 0x83, 0xaa, 0xe4, 0x94, 0xfe, 0xba, 0x25, 0x2b, 0xc7, 0xbb, - 0xb3, 0xad, 0x88, 0x65, 0xaf, 0x1c, 0xb3, 0xc6, 0x12, 0x1a, 0x3c, 0x69, - 0xa6, 0x37, 0xfd, 0xf2, 0x5f, 0x77, 0x2b, 0xbb, 0xe6, 0x28, 0x66, 0xd0, - 0xcf, 0x2d, 0x9a, 0x36, 0x59, 0xa2, 0xb0, 0x99, 0x82, 0xf4, 0x09, 0x62, - 0x29, 0x95, 0x1a, 0xa7, 0x03, 0xa6, 0x6f, 0x7b, 0xfa, 0x7f, 0x23, 0xb7, - 0xaa, 0x78, 0xb8, 0x84, 0xe0, 0x6f, 0xff, 0xd1, 0x38, 0x63, 0x29, 0xd5, - 0x0f, 0x56, 0x1c, 0x49, 0xef, 0x56, 0xe3, 0x03, 0x7a, 0x90, 0x2b, 0x11, - 0xbe, 0xb9, 0x57, 0x16, 0xa2, 0xab, 0xc2, 0xb7, 0x89, 0x28, 0xa3, 0xd1, - 0x06, 0x54, 0xde, 0xac, 0xc1, 0xe5, 0x7d, 0x07, 0xad, 0xc3, 0x11, 0x61, - 0xd9, 0x45, 0xe8, 0x55, 0xb4, 0x0a, 0xf5, 0x1a, 0x77, 0xbd, 0x4a, 0x4c, - 0x28, 0xd0, 0x10, 0x42, 0xb8, 0x33, 0x0f, 0x5c, 0x87, 0xa5, 0xc5, 0x7d, - 0x86, 0xcf, 0x54, 0x45, 0x89, 0xf9, 0x4e, 0xb6, 0xcf, 0xe3, 0x57, 0xbb, - 0x47, 0x93, 0xd3, 0x3d, 0x2f, 0x29, 0x27, 0x99, 0x47, 0x22, 0x90, 0x5b, - 0xa6, 0xae, 0x50, 0x84, 0xac, 0x60, 0x5c, 0x59, 0x27, 0x3d, 0xe8, 0xfa, - 0x3c, 0x0c, 0x37, 0xef, 0xa3, 0x7f, 0x06, 0xd4, 0x68, 0x28, 0x81, 0xa2, - 0x5c, 0x35, 0x85, 0x0c, 0xb2, 0x89, 0x3d, 0xfd, 0x0e, 0x07, 0x29, 0x3d, - 0x2d, 0xa5, 0x20, 0x3e, 0xa0, 0x79, 0x1a, 0xb3, 0x56, 0x84, 0xab, 0x43, - 0x24, 0x9c, 0x4e, 0x11, 0xac, 0xe5, 0xec, 0xd4, 0xf3, 0x47, 0x96, 0x96, - 0x8d, 0x8e, 0x41, 0x62, 0x38, 0xf1, 0xaf, 0x8a, 0x1f, 0xb6, 0xec, 0x1c, - 0x56, 0xc4, 0x87, 0xc7, 0x1f, 0x7d, 0x1c, 0xd8, 0xaf, 0x96, 0xe2, 0xf9, - 0xb6, 0x2d, 0xb2, 0x7c, 0xe8, 0xeb, 0xf7, 0x13, 0x64, 0x7b, 0x22, 0x49, - 0xfe, 0x81, 0xeb, 0x67, 0x11, 0x2d, 0x73, 0x5d, 0xaa, 0x80, 0x82, 0x07, - 0x0a, 0x0f, 0x3d, 0x5a, 0x80, 0xdb, 0x59, 0xad, 0x56, 0x1f, 0x6a, 0xa6, - 0xad, 0xb9, 0x63, 0x87, 0xc6, 0x3d, 0xc6, 0xc1, 0x28, 0x21, 0xf7, 0xc2, - 0x78, 0xc3, 0xe2, 0x7c, 0x47, 0xba, 0x20, 0xab, 0x05, 0xbf, 0xf8, 0xa1, - 0xc3, 0x51, 0x30, 0xa3, 0x05, 0x4c, 0xd9, 0x43, 0x7a, 0xf9, 0xd0, 0x9f, - 0x14, 0x95, 0x12, 0xf6, 0xce, 0xfe, 0x92, 0x83, 0x09, 0x86, 0xb4, 0x67, - 0xd2, 0xe9, 0x02, 0x34, 0x5b, 0xf7, 0x79, 0x46, 0x7a, 0xab, 0x02, 0xcf, - 0x40, 0x0f, 0x7e, 0x7e, 0x46, 0x6f, 0x94, 0xce, 0x79, 0x70, 0x03, 0xcb, - 0x27, 0x85, 0x5a, 0x18, 0x41, 0xfc, 0x50, 0xf9, 0x85, 0x4c, 0xdb, 0xe6, - 0xc0, 0xb2, 0xd4, 0xa7, 0x01, 0xb0, 0xb5, 0x22, 0x93, 0x2b, 0x44, 0xc8, - 0xc9, 0x41, 0x9b, 0x2f, 0xd0, 0x3c, 0x67, 0x00, 0xf6, 0xcd, 0x5f, 0x04, - 0x3b, 0xef, 0x04, 0xb8, 0x97, 0xed, 0x40, 0x7f, 0x7c, 0x6f, 0x80, 0xc2, - 0xe5, 0x47, 0xb3, 0x84, 0xf2, 0x98, 0x1e, 0xb4, 0x19, 0xd8, 0xab, 0xaf, - 0x40, 0xf7, 0xfc, 0xcb, 0x7c, 0xd0, 0xf5, 0x2d, 0x7f, 0x48, 0x7f, 0xd0, - 0x01, 0x08, 0x47, 0xaa, 0xbe, 0xa0, 0xce, 0x26, 0x13, 0xf4, 0x9e, 0xce, - 0x82, 0x81, 0xec, 0xe8, 0x27, 0x23, 0x44, 0x51, 0x02, 0x93, 0xfe, 0x9c, - 0xff, 0x7c, 0x66, 0x2e, 0x48, 0xfc, 0x0e, 0x5a, 0xce, 0x3d, 0xe6, 0xe4, - 0x46, 0x72, 0x51, 0xba, 0x7d, 0xb9, 0xbd, 0x47, 0xbd, 0x09, 0xab, 0x6b, - 0xb6, 0x8f, 0xa0, 0x19, 0xa2, 0x03, 0xd7, 0xe6, 0x20, 0x1a, 0xb1, 0xd1, - 0x15, 0x79, 0x16, 0xac, 0x6d, 0xa5, 0x32, 0xa9, 0xe0, 0x01, 0xa7, 0x71, - 0x77, 0x65, 0x48, 0x90, 0xe0, 0x9f, 0xf1, 0xc6, 0x7f, 0xc7, 0x2c, 0x2a, - 0x50, 0xa2, 0xf8, 0x9d, 0x02, 0xc6, 0x11, 0xdc, 0x14, 0x07, 0xd8, 0x51, - 0xc9, 0x8f, 0xd9, 0x2f, 0x04, 0x8a, 0x3a, 0x13, 0x00, 0x31, 0xb6, 0x22, - 0xc9, 0xd9, 0x76, 0x27, 0x76, 0x8f, 0x09, 0x96, 0xf8, 0xf9, 0x0c, 0x64, - 0x02, 0xd8, 0x71, 0xf8, 0x56, 0xd2, 0xaf, 0x4b, 0x9e, 0x8b, 0xbe, 0x8b, - 0xa7, 0x4b, 0x33, 0xfa, 0xeb, 0x5a, 0x16, 0xe3, 0xe8, 0xb7, 0x4a, 0xb4, - 0x8a, 0xfb, 0x94, 0xcb, 0xeb, 0x45, 0x8e, 0x4e, 0xa8, 0x0d, 0x73, 0x48, - 0xca, 0x22, 0x6f, 0xc0, 0xab, 0xba, 0xaf, 0x6b, 0x30, 0x56, 0x0b, 0xa8, - 0x5c, 0x63, 0xd4, 0xdb, 0xe9, 0xbf, 0x3f, 0x43, 0x42, 0x67, 0x61, 0xef, - 0x65, 0x8d, 0x27, 0x2b, 0x5b, 0xd4, 0xa5, 0xf7, 0x6d, 0x6b, 0x90, 0xc0, - 0x5c, 0x57, 0xd8, 0x63, 0x74, 0xd0, 0xce, 0x26, 0x51, 0x77, 0x8d, 0xbc, - 0xc2, 0xe8, 0x76, 0xae, 0x0d, 0x90, 0xc1, 0x71, 0x78, 0x6c, 0xac, 0x71, - 0xa0, 0x80, 0x1f, 0xe4, 0xf6, 0x34, 0x8c, 0x24, 0x7c, 0x7f, 0x27, 0x98, - 0x52, 0xe5, 0x27, 0x01, 0x32, 0x9b, 0x7a, 0x53, 0x74, 0x68, 0x3c, 0x96, - 0x79, 0x8e, 0x5e, 0x6a, 0x76, 0x90, 0xf3, 0x05, 0xd2, 0xa4, 0xb1, 0x01, - 0xcb, 0x40, 0xaf, 0xc2, 0x76, 0xfa, 0xf1, 0x6b, 0xbd, 0x7d, 0xfe, 0x98, - 0xad, 0xf1, 0x80, 0x18, 0x79, 0x4d, 0x24, 0x3b, 0x71, 0xa5, 0xff, 0x4b, - 0x03, 0x75, 0xad, 0x73, 0x46, 0x29, 0xea, 0xec, 0x7b, 0xa7, 0xc8, 0x04, - 0xcf, 0x43, 0x4e, 0x17, 0x05, 0x82, 0xee, 0x89, 0xe1, 0xfd, 0x8c, 0x4a, - 0xe2, 0xc0, 0x14, 0xcc, 0x58, 0x7b, 0x9c, 0x0e, 0x59, 0x53, 0x0e, 0x52, - 0x60, 0xd3, 0x67, 0xb5, 0x64, 0x3c, 0x52, 0xae, 0x0c, 0x60, 0xbf, 0x05, - 0xc9, 0xfc, 0xe1, 0x68, 0x0d, 0x57, 0x25, 0xc7, 0x5b, 0x27, 0x2c, 0x3a, - 0xff, 0x6e, 0xf3, 0xea, 0xab, 0xb9, 0xbb, 0x1f, 0x6a, 0x7e, 0xd5, 0x4d, - 0x70, 0x24, 0x4d, 0x89, 0x8a, 0x6e, 0xb5, 0x37, 0x6b, 0xd2, 0x91, 0x3c, - 0x51, 0x62, 0x09, 0xfd, 0x95, 0xf4, 0x3c, 0xf5, 0xaa, 0xb0, 0xed, 0x78, - 0x09, 0x35, 0x76, 0x9f, 0x69, 0x0c, 0x47, 0xd1, 0x36, 0x97, 0x44, 0x79, - 0x47, 0x2c, 0x62, 0x57, 0x2f, 0xae, 0x2c, 0xfc, 0x4c, 0x26, 0xf9, 0x4a, - 0x0c, 0xc0, 0x9b, 0x64, 0xaa, 0x42, 0x7c, 0x62, 0xf0, 0xe7, 0xda, 0x92, - 0xad, 0x0f, 0x1f, 0x98, 0xc8, 0x8b, 0x55, 0x97, 0x66, 0xce, 0x10, 0xee, - 0x17, 0xd1, 0x43, 0x05, 0x59, 0xbe, 0x47, 0x49, 0xad, 0x7c, 0x25, 0xa3, - 0x5b, 0xa8, 0x9e, 0x6e, 0x82, 0xc6, 0xff, 0x54, 0xd4, 0xff, 0x61, 0xb3, - 0xa1, 0x13, 0x28, 0x29, 0x2b, 0x70, 0x10, 0x59, 0x28, 0x5e, 0x64, 0x53, - 0x58, 0x38, 0x15, 0xd8, 0x46, 0xe8, 0xad, 0x43, 0x37, 0xd7, 0x4a, 0x88, - 0xa1, 0x4a, 0x12, 0x8e, 0x77, 0x93, 0x34, 0xb9, 0x25, 0x73, 0x3d, 0x59, - 0x13, 0xe7, 0xcd, 0x8a, 0xb4, 0x36, 0xd8, 0xaf, 0x64, 0x34, 0x15, 0x3c, - 0x5e, 0xab, 0x62, 0x90, 0x40, 0x41, 0x6b, 0xdf, 0x2b, 0x7d, 0x2c, 0x30, - 0xd9, 0xe2, 0xf8, 0xb7, 0x87, 0x07, 0xc8, 0x35, 0xd9, 0x81, 0x00, 0x89, - 0x9e, 0xbb, 0xb3, 0x94, 0x83, 0xb0, 0xea, 0xfb, 0xfb, 0x2c, 0x51, 0x4a, - 0x10, 0xa5, 0xe2, 0xb5, 0x0e, 0x42, 0xcd, 0x08, 0xc4, 0x42, 0xac, 0x70, - 0x44, 0xa3, 0xa0, 0xdf, 0x42, 0x02, 0x5e, 0x61, 0xd7, 0x86, 0xe7, 0x10, - 0xca, 0xdf, 0x6d, 0x41, 0x8c, 0x7f, 0xa2, 0x62, 0x76, 0x97, 0xc0, 0x17, - 0x2c, 0x0f, 0xf1, 0x32, 0x6b, 0x56, 0xcb, 0x55, 0x5c, 0xcb, 0x9e, 0xd4, - 0xbc, 0x85, 0xf2, 0x3a, 0x64, 0x79, 0xee, 0x87, 0xfd, 0xb0, 0x53, 0x4a, - 0x69, 0xb0, 0x91, 0xa9, 0xed, 0x21, 0x41, 0x2b, 0xb0, 0x27, 0x1b, 0xa1, - 0xdf, 0x5e, 0x13, 0x8d, 0xe7, 0x25, 0xd2, 0xc8, 0x3f, 0xb1, 0x84, 0xae, - 0xb0, 0xa6, 0xe4, 0xe8, 0xa0, 0x7a, 0x4b, 0x89, 0xfe, 0x3d, 0x2b, 0x3a, - 0x9d, 0xd1, 0x98, 0xa2, 0xce, 0xeb, 0x31, 0x62, 0xa8, 0x3c, 0xe1, 0xcd, - 0xc0, 0xfa, 0xf1, 0xfb, 0x5d, 0xd3, 0x75, 0xbe, 0x0f, 0xb6, 0x60, 0x38, - 0xec, 0x84, 0x9a, 0x9c, 0xe4, 0xdd, 0xf8, 0xac, 0x05, 0x17, 0xe6, 0x4b, - 0xa4, 0x73, 0x37, 0x46, 0x7c, 0x2f, 0xc1, 0xff, 0xa6, 0x0a, 0xa4, 0xce, - 0xb3, 0x5e, 0x72, 0x80, 0xc1, 0xeb, 0xfe, 0x4f, 0x72, 0x00, 0x9e, 0xea, - 0x04, 0xba, 0x57, 0x27, 0xa7, 0xb2, 0x49, 0x47, 0x7f, 0xd5, 0x59, 0xf8, - 0x25, 0x43, 0x7c, 0xcb, 0xf7, 0xda, 0x56, 0xa7, 0x1b, 0x50, 0xbb, 0xd3, - 0xec, 0x54, 0xec, 0xce, 0x5c, 0xdd, 0x94, 0x96, 0x64, 0x92, 0x2f, 0x8d, - 0xaf, 0xb2, 0x85, 0x42, 0x50, 0x1e, 0xf3, 0x0b, 0x34, 0xa4, 0xbb, 0x4f, - 0xac, 0xb1, 0x5b, 0x87, 0xfe, 0x9d, 0x9a, 0xc9, 0x20, 0x23, 0xc9, 0x3e, - 0x4a, 0x12, 0xba, 0xd2, 0x4b, 0x6e, 0x81, 0xdb, 0xf8, 0xaf, 0xf6, 0xbd, - 0x15, 0x1d, 0xc5, 0xea, 0xa0, 0x55, 0xc1, 0x36, 0x8f, 0xd8, 0x94, 0xf6, - 0x62, 0x99, 0xeb, 0x72, 0xf7, 0xa4, 0xf8, 0x90, 0x31, 0x6d, 0xdb, 0x15, - 0xc3, 0xc0, 0x0a, 0x07, 0x40, 0xab, 0xeb, 0xb1, 0xd4, 0x10, 0x7c, 0x8d, - 0x46, 0x1c, 0x8f, 0xd2, 0xfb, 0xfb, 0x1e, 0xeb, 0x78, 0xcd, 0x19, 0xae, - 0xda, 0x9c, 0x09, 0xe0, 0x5d, 0xf4, 0xc0, 0xf4, 0x4f, 0xb4, 0xb0, 0x10, - 0xea, 0x57, 0x7d, 0xa3, 0x15, 0x57, 0x01, 0x13, 0x96, 0x99, 0xa6, 0x2b, - 0x44, 0x5e, 0x2c, 0x55, 0xfe, 0x28, 0xe9, 0x8a, 0x50, 0x85, 0x1f, 0x49, - 0x0c, 0xbe, 0x84, 0x25, 0x6d, 0x0b, 0xbf, 0x68, 0xb7, 0x57, 0x4d, 0x9c, - 0xf1, 0x47, 0xce, 0xec, 0x58, 0x91, 0xd5, 0x78, 0x9a, 0x13, 0xa5, 0x2d, - 0xa6, 0xbd, 0x5f, 0x7c, 0x28, 0x41, 0x27, 0x94, 0x91, 0x1a, 0x95, 0x26, - 0x7c, 0xb7, 0x67, 0x45, 0x6b, 0x53, 0x8c, 0x15, 0x7e, 0x53, 0x65, 0x7d, - 0xa5, 0x15, 0x35, 0x2b, 0x9b, 0x5c, 0x5f, 0x78, 0x2a, 0xca, 0x59, 0x73, - 0xb9, 0x4f, 0x85, 0xa8, 0x3a, 0xe9, 0x71, 0x8b, 0xd2, 0x55, 0x29, 0x35, - 0x8f, 0xdd, 0x46, 0xa8, 0x4e, 0x7f, 0xac, 0x67, 0x62, 0xec, 0x80, 0x48, - 0x83, 0x20, 0xae, 0x24, 0x20, 0xac, 0x11, 0xec, 0x84, 0x86, 0x08, 0xdc, - 0xba, 0xbb, 0xf9, 0xfe, 0xd0, 0x28, 0x28, 0x82, 0x1a, 0x4a, 0x7e, 0x2c, - 0x00, 0x3c, 0xf7, 0xfc, 0x40, 0x29, 0xdd, 0x4d, 0xa5, 0x76, 0x70, 0x1e, - 0x8e, 0x69, 0xe7, 0x81, 0x6a, 0xa0, 0xdf, 0xa4, 0x2b, 0x0f, 0x20, 0x06, - 0x52, 0xb7, 0x56, 0xcc, 0x2c, 0xe2, 0x34, 0x84, 0x50, 0x78, 0xfb, 0x83, - 0xb4, 0xb6, 0x50, 0x2e, 0x25, 0x52, 0xaa, 0xab, 0xf3, 0x4f, 0x44, 0x5b, - 0x06, 0xa1, 0x35, 0x9e, 0x1c, 0xf0, 0x85, 0x51, 0x88, 0xb0, 0x89, 0x04, - 0xdc, 0xac, 0x5f, 0x00, 0x3e, 0x2e, 0xf9, 0x8a, 0x0e, 0xc7, 0x5a, 0x02, - 0x95, 0xcd, 0x48, 0x28, 0x54, 0x99, 0xd3, 0x95, 0x2e, 0xe3, 0x70, 0x27, - 0x57, 0xad, 0x2c, 0x43, 0xf1, 0xc3, 0xe0, 0x04, 0xac, 0x81, 0x7d, 0x57, - 0xf7, 0x2c, 0xaf, 0x14, 0xc5, 0xf8, 0xba, 0x7e, 0x3a, 0x47, 0x33, 0x4d, - 0x0f, 0x91, 0x5c, 0x64, 0xd4, 0x7c, 0x81, 0x12, 0x5a, 0x05, 0x67, 0xe3, - 0x7b, 0x91, 0x46, 0xe4, 0x6a, 0xac, 0x73, 0xbe, 0x98, 0x08, 0x13, 0x71, - 0xf3, 0xaa, 0x0c, 0xcd, 0x1a, 0x26, 0xfd, 0x87, 0x0b, 0x37, 0x93, 0xc8, - 0x77, 0xae, 0x8a, 0x58, 0x69, 0xa6, 0x2e, 0xc6, 0xfd, 0x50, 0xd6, 0xcb, - 0x54, 0x74, 0xda, 0xfa, 0xa1, 0x92, 0xd0, 0x1c, 0x9f, 0x29, 0x46, 0x45, - 0x92, 0xdc, 0xd8, 0x1d, 0xad, 0x2d, 0xa0, 0x3c, 0xce, 0xd3, 0x2f, 0xe0, - 0xd5, 0x99, 0xc8, 0xe9, 0xcf, 0x00, 0x46, 0x7c, 0x80, 0x1d, 0x4f, 0x36, - 0xb1, 0x62, 0x7c, 0x9b, 0xc0, 0x15, 0xcb, 0x62, 0x17, 0x87, 0xf9, 0xcb, - 0x19, 0x6f, 0xfd, 0xb4, 0xb8, 0xb2, 0x40, 0x23, 0xdf, 0x68, 0x39, 0x07, - 0xc8, 0x11, 0xee, 0xcb, 0x29, 0xff, 0x22, 0x34, 0x23, 0x8b, 0x9e, 0x5b, - 0xc6, 0x28, 0x78, 0xc1, 0x2c, 0x42, 0xdf, 0x8a, 0x7f, 0x57, 0x14, 0x4b, - 0x88, 0x47, 0xe1, 0xfe, 0x94, 0x83, 0x18, 0x34, 0x2e, 0xc6, 0x6f, 0x91, - 0x32, 0xdf, 0x6d, 0x49, 0xe1, 0x32, 0x2d, 0x82, 0x08, 0xea, 0x42, 0x39, - 0x08, 0xe4, 0xef, 0x49, 0x6f, 0xe4, 0xb1, 0x3d, 0x76, 0x3f, 0x02, 0x57, - 0x24, 0x50, 0xb0, 0x1d, 0xcf, 0x4f, 0x2d, 0x19, 0x34, 0xb0, 0x15, 0x2e, - 0x01, 0xde, 0x58, 0x58, 0xe0, 0x44, 0x4d, 0x2c, 0x35, 0xbc, 0xcc, 0x7f, - 0xd5, 0x24, 0x04, 0x60, 0xa1, 0x94, 0x13, 0x87, 0xad, 0xd7, 0xbc, 0xd7, - 0x3c, 0xc3, 0x53, 0x68, 0x14, 0xae, 0xce, 0xa4, 0x60, 0x52, 0x3e, 0x1f, - 0xe4, 0xda, 0x02, 0x3b, 0x5b, 0x39, 0x95, 0x36, 0xfb, 0x8b, 0x6d, 0xbd, - 0xe2, 0x1b, 0xff, 0xce, 0x87, 0xb8, 0x44, 0xaa, 0xe0, 0x23, 0x0f, 0x40, - 0x6b, 0x4c, 0x58, 0xbf, 0xa0, 0x87, 0xbc, 0x19, 0x03, 0x2e, 0x58, 0x6d, - 0x1f, 0x05, 0xe8, 0x65, 0xb8, 0x88, 0xc9, 0x8b, 0x88, 0xae, 0xd3, 0x4b, - 0xc3, 0x23, 0x0c, 0x7f, 0x05, 0x4f, 0x93, 0x17, 0x84, 0x7c, 0x03, 0xcc, - 0xed, 0xb7, 0x60, 0xf6, 0xd4, 0xd6, 0x8b, 0x91, 0x7e, 0xb8, 0x14, 0x2c, - 0xb9, 0x8c, 0xf6, 0x0b, 0xcd, 0xbb, 0x02, 0xde, 0xc3, 0x8d, 0x28, 0xff, - 0xb6, 0x53, 0x56, 0x03, 0xce, 0xb0, 0xe1, 0xa5, 0x92, 0xf2, 0x9c, 0x2d, - 0x3f, 0x6a, 0x26, 0x72, 0xe2, 0xf7, 0x55, 0x16, 0x3e, 0x1b, 0x42, 0x44, - 0xad, 0x17, 0x09, 0xa7, 0x29, 0x25, 0x1f, 0x04, 0x80, 0xba, 0x3a, 0x29, - 0xc3, 0xf7, 0xe8, 0x7c, 0xf7, 0xf4, 0x32, 0x5b, 0x3a, 0xa2, 0xbd, 0xfd, - 0x85, 0xe6, 0xf3, 0x0d, 0x40, 0xed, 0xeb, 0x99, 0x73, 0x31, 0x82, 0x27, - 0x96, 0xea, 0x8f, 0x73, 0xa7, 0x77, 0x1f, 0x46, 0xe9, 0xe2, 0xff, 0x50, - 0xe0, 0xca, 0xb2, 0xa7, 0x63, 0xeb, 0xc7, 0x6c, 0x8f, 0x81, 0x05, 0x91, - 0xbe, 0x0a, 0x0c, 0x22, 0x34, 0xf6, 0xd5, 0x9d, 0x53, 0xe1, 0x8e, 0x22, - 0x04, 0xa7, 0x12, 0x9e, 0xc1, 0xef, 0xb6, 0x17, 0xb1, 0x18, 0xae, 0x0f, - 0x87, 0xe3, 0x96, 0x76, 0x72, 0xc6, 0xef, 0x0b, 0xbc, 0xce, 0xaf, 0x58, - 0x99, 0x9b, 0x72, 0xa2, 0xc1, 0x24, 0x91, 0x5c, 0xc7, 0xb7, 0x4a, 0x0f, - 0x39, 0x05, 0x5a, 0xf4, 0x66, 0x8c, 0x95, 0xd1, 0x5b, 0xff, 0x74, 0x16, - 0x9f, 0xa0, 0xa3, 0x2c, 0xfb, 0x85, 0x80, 0xe5, 0xf0, 0x33, 0x17, 0x38, - 0x01, 0x8b, 0x5f, 0x8b, 0xcd, 0x58, 0x22, 0x3e, 0xcf, 0x09, 0x1e, 0x76, - 0x3a, 0x0c, 0x7a, 0xc4, 0xf2, 0xff, 0x7c, 0x14, 0xca, 0x36, 0x6c, 0x26, - 0x39, 0xde, 0x23, 0x0d, 0xd3, 0xfa, 0x5c, 0x1a, 0xff, 0xe6, 0x98, 0xc5, - 0x86, 0x4c, 0xda, 0xb1, 0x6c, 0x27, 0x87, 0x54, 0x3b, 0xb7, 0x74, 0xb3, - 0x71, 0x3d, 0x17, 0x56, 0x11, 0xe7, 0xf4, 0x92, 0x6e, 0x2d, 0xe1, 0x05, - 0x53, 0xd9, 0x5f, 0x41, 0x36, 0xed, 0x0c, 0x10, 0xa4, 0xfa, 0xd8, 0x7e, - 0xb0, 0xce, 0x35, 0xd1, 0xf5, 0x14, 0x7e, 0x50, 0xed, 0x79, 0x44, 0x7e, - 0x1d, 0xde, 0xd3, 0xd8, 0xdf, 0xdf, 0xcf, 0x24, 0xf9, 0xee, 0xae, 0xfc, - 0x80, 0xa0, 0x59, 0x87, 0x67, 0x63, 0x69, 0x79, 0x4a, 0x70, 0x92, 0x3c, - 0x2d, 0xba, 0x38, 0xac, 0x5e, 0xff, 0xe9, 0x1a, 0x35, 0x92, 0x5d, 0x62, - 0x3d, 0xd9, 0xdc, 0x36, 0xaf, 0x85, 0x39, 0x35, 0xe4, 0x89, 0xa2, 0x78, - 0xfe, 0xb7, 0xf7, 0x7c, 0xa8, 0x95, 0xcf, 0xfe, 0xfe, 0x5d, 0xd0, 0x31, - 0x1d, 0x9d, 0xe0, 0xa3, 0x35, 0x63, 0xd5, 0x4a, 0xd5, 0xba, 0xa2, 0x99, - 0xba, 0x2a, 0xf1, 0xd6, 0x34, 0x46, 0x60, 0x43, 0x3a, 0xab, 0xbf, 0x41, - 0xe5, 0x6b, 0xbb, 0xb8, 0x0f, 0x04, 0xfc, 0x34, 0x55, 0x8d, 0x57, 0x93, - 0x0e, 0x3e, 0x27, 0xfb, 0x3d, 0x9f, 0x65, 0x97, 0xd8, 0x70, 0x93, 0xc2, - 0xa2, 0x15, 0x6c, 0x17, 0x66, 0xf7, 0xf6, 0x56, 0x4f, 0x21, 0x14, 0x5f, - 0x2f, 0x8d, 0x5b, 0xb2, 0xe5, 0x4f, 0xac, 0xc8, 0x02, 0x26, 0x20, 0xc5, - 0xa7, 0x52, 0xfb, 0x74, 0xc0, 0xcc, 0xcc, 0x3f, 0x36, 0x59, 0x87, 0x79, - 0x91, 0x05, 0x45, 0x59, 0x31, 0xff, 0xa8, 0x94, 0x7a, 0x19, 0xa2, 0xa5, - 0xfc, 0x5c, 0x4e, 0xbf, 0xfa, 0x35, 0x5b, 0x16, 0x4e, 0xfc, 0x3d, 0xcd, - 0x5d, 0x83, 0x31, 0x67, 0x58, 0x8b, 0xb7, 0x51, 0xfc, 0xb7, 0x07, 0x00, - 0xe8, 0xf9, 0xde, 0x60, 0x19, 0xab, 0xa3, 0x57, 0x3a, 0xaf, 0x62, 0x21, - 0x02, 0x58, 0xfd, 0xa0, 0x4a, 0x67, 0x71, 0xe2, 0x9f, 0x73, 0xe8, 0x8d, - 0x5a, 0x85, 0x2b, 0xdf, 0x38, 0x06, 0x9c, 0xb7, 0x86, 0x22, 0xec, 0xc2, - 0xd0, 0xc3, 0x92, 0xe3, 0xbe, 0x20, 0x69, 0xc0, 0xd8, 0x80, 0xfb, 0xfa, - 0xda, 0xb3, 0x4e, 0x4d, 0xda, 0xda, 0x7b, 0x0a, 0x5e, 0xa1, 0xac, 0xf6, - 0xb6, 0x94, 0xd6, 0x9b, 0x70, 0xdc, 0x91, 0x83, 0x77, 0xa9, 0x3f, 0xbf, - 0x27, 0x6b, 0xdd, 0x31, 0xd1, 0xad, 0x5b, 0xdb, 0x59, 0x06, 0xce, 0xb9, - 0x3e, 0x24, 0x3a, 0xd2, 0x6e, 0x1f, 0x3a, 0x31, 0xa6, 0x36, 0x59, 0x8e, - 0x4b, 0x3a, 0x2e, 0x3d, 0x6f, 0x28, 0xa8, 0xe6, 0xcd, 0x84, 0x74, 0x63, - 0xd1, 0xdd, 0x81, 0x7d, 0xbb, 0xad, 0x30, 0x01, 0x2b, 0x1b, 0xcf, 0x15, - 0x39, 0x28, 0xcb, 0x75, 0x55, 0xe7, 0x41, 0x08, 0xfa, 0x7e, 0x64, 0x6b, - 0xf7, 0x66, 0x51, 0xb4, 0xe2, 0x93, 0x8a, 0x10, 0xa5, 0x13, 0x0a, 0x3b, - 0x9e, 0xdd, 0xb1, 0x79, 0xf3, 0x43, 0x8d, 0xc8, 0x9b, 0x4e, 0xc5, 0x51, - 0x5c, 0x8d, 0xa7, 0x91, 0xdf, 0x39, 0x5a, 0x7b, 0x72, 0x53, 0xf9, 0x6c, - 0xa6, 0x89, 0x41, 0x81, 0xb5, 0xcf, 0xfb, 0x71, 0x08, 0x64, 0xc8, 0x77, - 0x3e, 0x5a, 0x84, 0x18, 0xb6, 0x5f, 0x42, 0xce, 0xb4, 0x46, 0xc9, 0x61, - 0x92, 0x13, 0x4a, 0xc9, 0xb0, 0xa6, 0x10, 0xaf, 0x4f, 0xdc, 0x00, 0x21, - 0xfa, 0x74, 0x9a, 0xdf, 0x21, 0x93, 0xe0, 0x5d, 0x1a, 0x3b, 0xa3, 0x43, - 0x2a, 0x67, 0x97, 0xfc, 0x16, 0xde, 0x4c, 0x69, 0xa3, 0xa5, 0x28, 0x74, - 0xd1, 0xcf, 0xa5, 0x1c, 0xff, 0x8e, 0xea, 0xfa, 0x16, 0x4a, 0xa0, 0xe5, - 0xb3, 0x42, 0x53, 0x78, 0xf4, 0xc0, 0xaa, 0x12, 0x52, 0xcb, 0x1e, 0x65, - 0x2d, 0x12, 0xa8, 0x92, 0x7e, 0xd4, 0x9f, 0x70, 0xb9, 0x28, 0x27, 0x69, - 0x12, 0xc2, 0x6b, 0xb6, 0x0e, 0xb4, 0x08, 0x82, 0x4e, 0xae, 0xf3, 0xba, - 0x3b, 0xea, 0xdb, 0xff, 0x90, 0xda, 0x58, 0xde, 0xac, 0xdd, 0xe6, 0xc5, - 0x9f, 0x1c, 0xdf, 0x4e, 0x8e, 0xa2, 0xf9, 0xef, 0x00, 0x5f, 0x63, 0x58, - 0x74, 0x8c, 0x58, 0x63, 0xe6, 0x74, 0xd7, 0x72, 0x59, 0x75, 0xcf, 0x21, - 0x3b, 0xbb, 0x5d, 0x4a, 0x19, 0x89, 0xb9, 0xd9, 0x16, 0x18, 0x20, 0x3d, - 0x1e, 0x68, 0xc5, 0xeb, 0x04, 0x7d, 0x3c, 0x3c, 0xa8, 0xc9, 0x35, 0x3d, - 0xda, 0x25, 0x0c, 0x73, 0xb9, 0x48, 0xf5, 0x43, 0x40, 0xa8, 0xff, 0x9a, - 0x1e, 0x88, 0xf1, 0x9d, 0x3f, 0xbf, 0x1a, 0xb2, 0xde, 0xec, 0x62, 0x75, - 0x36, 0xcf, 0xc6, 0x6e, 0x61, 0x1b, 0x39, 0x8b, 0xec, 0x22, 0x12, 0xec, - 0xf2, 0x05, 0x39, 0x45, 0x69, 0xf1, 0x65, 0x05, 0x35, 0x4e, 0xe4, 0x3b, - 0x9d, 0x6d, 0xb2, 0xf9, 0x9a, 0x6d, 0x5d, 0x06, 0x57, 0xc4, 0x6e, 0x84, - 0x55, 0xab, 0xf4, 0x83, 0xb4, 0x5b, 0xa1, 0x9f, 0x32, 0x4c, 0xc8, 0x84, - 0x07, 0xa6, 0x31, 0xa2, 0x26, 0xf3, 0x75, 0x49, 0x22, 0x77, 0xb9, 0xdc, - 0xb8, 0x6a, 0x79, 0x7e, 0x08, 0x9a, 0x45, 0xfd, 0x03, 0x40, 0x14, 0x4b, - 0x98, 0xff, 0x02, 0x0e, 0xf3, 0x78, 0x51, 0x94, 0x1e, 0x05, 0x45, 0xdb, - 0x91, 0x1e, 0xf5, 0x66, 0xc3, 0x70, 0xbd, 0x44, 0x55, 0xce, 0xd9, 0xec, - 0x98, 0x15, 0x45, 0x89, 0x12, 0x2e, 0x2c, 0x39, 0x8d, 0x94, 0x17, 0xf4, - 0x54, 0xaa, 0x91, 0xee, 0xef, 0x50, 0xb2, 0xde, 0xa0, 0xe6, 0xa8, 0xa0, - 0xf2, 0x4c, 0x46, 0x45, 0x48, 0x1d, 0xa9, 0x8c, 0xfc, 0x48, 0xd4, 0xc9, - 0x45, 0x65, 0x4d, 0x74, 0x57, 0x61, 0x3f, 0x22, 0xaf, 0x32, 0x60, 0x5b, - 0xd7, 0xb0, 0x0b, 0xbe, 0x26, 0xcc, 0x51, 0x52, 0x2c, 0x41, 0x2e, 0xc8, - 0xd0, 0xf1, 0x56, 0xf5, 0xf5, 0x7a, 0xa4, 0x4e, 0xb7, 0x69, 0xc2, 0x1b, - 0x71, 0x91, 0xe4, 0x52, 0xb5, 0xd2, 0x4c, 0xca, 0x29, 0xb9, 0x27, 0x17, - 0x97, 0x77, 0x72, 0x3a, 0x14, 0x30, 0x16, 0x88, 0x80, 0x86, 0x5a, 0xaa, - 0xc8, 0x99, 0x28, 0x55, 0x17, 0x63, 0xdf, 0x98, 0xfa, 0xe5, 0xc6, 0xa3, - 0x97, 0x40, 0x7a, 0x3c, 0x39, 0x13, 0x00, 0x27, 0xd6, 0x1d, 0x3a, 0x6b, - 0x47, 0xa8, 0x3e, 0xde, 0x25, 0x77, 0x1a, 0x3a, 0xd1, 0x66, 0x7f, 0x18, - 0x63, 0x0b, 0x96, 0xab, 0x33, 0x79, 0xc7, 0x61, 0xac, 0xea, 0x1f, 0x3c, - 0x95, 0xfc, 0x8d, 0xc7, 0x54, 0x2e, 0x9e, 0x77, 0xa3, 0x74, 0xbb, 0x84, - 0x40, 0xc9, 0x80, 0x4d, 0x8b, 0xe1, 0xa7, 0x75, 0x53, 0x7c, 0x88, 0x48, - 0x35, 0x4e, 0x64, 0xfc, 0xe2, 0x50, 0x0b, 0x7c, 0xc5, 0x03, 0xef, 0xf5, - 0xd9, 0x0a, 0x63, 0xc2, 0xc4, 0xed, 0xf1, 0x29, 0x3f, 0x87, 0x53, 0x11, - 0x81, 0x80, 0x2c, 0x3c, 0xcc, 0x69, 0x55, 0x11, 0x93, 0x5f, 0xe1, 0xe9, - 0xd9, 0xc4, 0x05, 0x95, 0x6a, 0x6f, 0xdd, 0xb0, 0x6a, 0xfc, 0x90, 0x3a, - 0xf7, 0x0a, 0x05, 0x64, 0xd3, 0x7d, 0xe4, 0xf3, 0x53, 0x3b, 0x72, 0x21, - 0xfe, 0x14, 0xd8, 0xff, 0x97, 0x93, 0xd4, 0x2b, 0x91, 0x2a, 0x30, 0x72, - 0x9f, 0x2b, 0xab, 0x5b, 0xe7, 0x81, 0xce, 0xce, 0x39, 0xc8, 0x5c, 0xd3, - 0xa7, 0xde, 0x05, 0xa5, 0xc7, 0xba, 0xe8, 0xa5, 0xca, 0xe6, 0xb4, 0xce, - 0x82, 0x2e, 0xd7, 0x83, 0xc2, 0x37, 0x01, 0x2d, 0x3b, 0x27, 0x64, 0x12, - 0x87, 0xc9, 0xf5, 0x4f, 0xa3, 0xbc, 0x08, 0x74, 0x9c, 0x1d, 0x9e, 0xb3, - 0xef, 0x12, 0xdc, 0x84, 0xe0, 0x4e, 0x62, 0xd2, 0xb4, 0x8e, 0xb1, 0x37, - 0x3c, 0x65, 0xc7, 0x7b, 0xc4, 0x98, 0x58, 0xff, 0xe4, 0xeb, 0x2f, 0x43, - 0x5f, 0x94, 0xff, 0x6e, 0x69, 0x0a, 0x17, 0x24, 0x82, 0x42, 0xae, 0xb2, - 0x80, 0xca, 0x86, 0xa9, 0xe2, 0x9d, 0x23, 0x3e, 0x07, 0x1a, 0xc6, 0x6b, - 0xe0, 0x96, 0xb8, 0xcd, 0x11, 0x63, 0x67, 0x12, 0xc9, 0xdf, 0x3e, 0xeb, - 0x2f, 0x45, 0xea, 0x04, 0x0d, 0xfd, 0x94, 0xbc, 0x15, 0xcb, 0xfc, 0x55, - 0xfc, 0x7d, 0x1a, 0x6d, 0xbc, 0x93, 0x41, 0xb6, 0x89, 0x4e, 0xa6, 0xfc, - 0x53, 0xd0, 0x72, 0xfa, 0xa0, 0xa2, 0xe7, 0x9f, 0xbe, 0xbe, 0xce, 0x56, - 0x24, 0x76, 0xd0, 0xfb, 0x8e, 0x21, 0xfe, 0x23, 0xb2, 0xbb, 0x79, 0xa8, - 0x83, 0x3b, 0x5c, 0xb2, 0x41, 0x85, 0x68, 0xb8, 0xdf, 0x7d, 0x17, 0xf8, - 0xb0, 0x64, 0xce, 0xbd, 0x75, 0xbd, 0x6e, 0xe1, 0xdf, 0xe6, 0x67, 0xcc, - 0xc1, 0x2b, 0x8c, 0x01, 0xdf, 0xc4, 0xd3, 0x53, 0xc2, 0x6c, 0x57, 0x16, - 0xc3, 0x52, 0x56, 0x18, 0xcc, 0x97, 0xfc, 0x1b, 0x2f, 0x86, 0x56, 0x0d, - 0x12, 0x86, 0x8d, 0x4f, 0x95, 0x88, 0x40, 0xaa, 0xa6, 0x51, 0xfa, 0x97, - 0x22, 0xb9, 0x6b, 0x13, 0x32, 0xfc, 0x6a, 0x20, 0x88, 0xbc, 0x28, 0xa5, - 0x34, 0x6e, 0x5c, 0x5a, 0x1e, 0x38, 0xbf, 0x19, 0x47, 0xfb, 0x44, 0x5e, - 0xba, 0x3f, 0x16, 0x06, 0x2a, 0x58, 0x30, 0xe7, 0x93, 0x49, 0xc9, 0x09, - 0xa0, 0x34, 0xb3, 0x1e, 0x9d, 0x15, 0x5e, 0xdb, 0x76, 0xfb, 0xa8, 0x2b, - 0x9a, 0x09, 0xd4, 0x89, 0x2e, 0x4b, 0x5d, 0x01, 0xa4, 0x45, 0xd4, 0xcc, - 0xd1, 0xb1, 0xb4, 0xa7, 0xb3, 0x54, 0xe9, 0x8a, 0xc2, 0x28, 0x8c, 0xcb, - 0x95, 0xa0, 0x23, 0x11, 0x02, 0x94, 0x7d, 0xfc, 0x3e, 0xa3, 0x23, 0x9c, - 0xde, 0xf1, 0x92, 0x8b, 0x3a, 0x1e, 0x8f, 0x0a, 0xbd, 0x93, 0x1a, 0x08, - 0x03, 0xad, 0x2d, 0x6f, 0x83, 0x5b, 0x32, 0x28, 0xff, 0x51, 0x58, 0x4f, - 0x1b, 0x64, 0xaa, 0x4e, 0x3c, 0x3d, 0x44, 0x04, 0x3a, 0x01, 0x3b, 0xfb, - 0x07, 0xa5, 0xc9, 0x1b, 0x07, 0x0f, 0xd3, 0x9f, 0x5e, 0xfd, 0x3d, 0x71, - 0x94, 0x54, 0x19, 0x85, 0x87, 0x88, 0x15, 0x08, 0x50, 0xdc, 0x26, 0xbd, - 0x22, 0x36, 0x14, 0x9f, 0xc1, 0x6d, 0x12, 0xf3, 0x2b, 0x18, 0x7b, 0xc9, - 0xf1, 0xe2, 0x25, 0xe6, 0xa7, 0x44, 0xa9, 0x9c, 0x37, 0x15, 0x11, 0xa2, - 0xbb, 0xa3, 0xc3, 0xb4, 0x7b, 0x09, 0x0a, 0x31, 0xed, 0x37, 0x98, 0xd3, - 0x7e, 0x7a, 0xcb, 0x0a, 0xc8, 0xed, 0x13, 0x05, 0x1e, 0x14, 0x9a, 0x3b, - 0xc4, 0xd2, 0x9d, 0x35, 0x60, 0xb7, 0x6f, 0x0b, 0x3d, 0x1e, 0xef, 0x34, - 0xcd, 0x40, 0x24, 0x7c, 0xf4, 0x2f, 0x99, 0xd2, 0x4f, 0x9f, 0xf6, 0x11, - 0xb5, 0x9e, 0xb8, 0x64, 0x55, 0xbf, 0xc1, 0x78, 0x3e, 0xe9, 0xbe, 0x15, - 0xf5, 0x1a, 0x86, 0xa0, 0x8e, 0x16, 0xda, 0x5f, 0x94, 0x9e, 0x2a, 0xdf, - 0x50, 0x97, 0x42, 0x30, 0x8c, 0xe3, 0x01, 0xe0, 0x95, 0x51, 0xa8, 0x54, - 0xd5, 0xee, 0xf0, 0x1a, 0xa4, 0x0d, 0x63, 0x8d, 0xdf, 0x32, 0xa2, 0x96, - 0x82, 0x94, 0xbf, 0xe7, 0xab, 0xb0, 0x0e, 0xec, 0x51, 0xa8, 0x9b, 0x53, - 0x25, 0x8e, 0x15, 0x78, 0xb2, 0xd2, 0xf7, 0x9c, 0x86, 0xbb, 0x9a, 0x9e, - 0xa6, 0xc8, 0x4b, 0x02, 0x47, 0x00, 0xfd, 0x1a, 0x0b, 0x40, 0x87, 0x84, - 0x9b, 0xf6, 0xaf, 0x22, 0x08, 0x3d, 0x89, 0x4b, 0xe8, 0x5f, 0x66, 0x06, - 0x62, 0xe3, 0x29, 0xbd, 0xb5, 0x39, 0xa7, 0x17, 0x7f, 0xb5, 0x8b, 0xe5, - 0x57, 0x6e, 0xbb, 0xa9, 0x3c, 0x41, 0x9b, 0x64, 0xf1, 0x44, 0x32, 0xb2, - 0x14, 0xd7, 0x4d, 0x9b, 0x03, 0x5c, 0x39, 0x3a, 0x72, 0x8f, 0x04, 0xd2, - 0x02, 0xcd, 0x9f, 0xd9, 0xf8, 0x67, 0xd2, 0x20, 0xc1, 0xe2, 0x15, 0x33, - 0x75, 0xe7, 0xd3, 0xa1, 0x65, 0xe7, 0xea, 0xf8, 0x28, 0xb8, 0xc5, 0x56, - 0xca, 0x82, 0xd8, 0x11, 0x1d, 0x3c, 0x98, 0x60, 0xd8, 0xe7, 0xe2, 0x7d, - 0x3d, 0xd4, 0x5e, 0x38, 0x6f, 0x6e, 0x83, 0x40, 0x6a, 0x2a, 0x72, 0x52, - 0xee, 0x05, 0x23, 0xee, 0x13, 0x6d, 0xfb, 0x81, 0x17, 0xda, 0xf3, 0x0c, - 0xab, 0xb4, 0x41, 0xca, 0x57, 0xe9, 0x3b, 0x26, 0x0e, 0x1d, 0x88, 0xe7, - 0xff, 0xc6, 0xee, 0xd0, 0x32, 0x78, 0x11, 0xb3, 0x93, 0xfc, 0xf6, 0x80, - 0x8c, 0xcf, 0xf6, 0x22, 0x1b, 0x9d, 0x7d, 0x45, 0x62, 0x16, 0xf7, 0x4b, - 0x20, 0xd1, 0x68, 0xcd, 0xe5, 0xe0, 0xb2, 0x15, 0x11, 0xa3, 0xac, 0x0b, - 0x06, 0x7b, 0x2a, 0x0a, 0xa8, 0x42, 0xdd, 0x93, 0xa3, 0xf9, 0xc5, 0xa8, - 0xb4, 0x2e, 0x4a, 0x2d, 0xa8, 0x2b, 0xbc, 0x44, 0x44, 0xe6, 0xae, 0xe4, - 0xb4, 0xb2, 0x85, 0x76, 0x89, 0xf1, 0xff, 0x55, 0x5b, 0xe9, 0x36, 0xdc, - 0xb6, 0xa6, 0xc6, 0x0c, 0xa0, 0x27, 0x7e, 0x58, 0x74, 0xb6, 0xcd, 0x45, - 0xd6, 0x88, 0x2a, 0x4c, 0xd5, 0x10, 0x99, 0xeb, 0x0b, 0x8e, 0x8a, 0x4a, - 0xd7, 0x93, 0x6b, 0xc3, 0xde, 0x07, 0xfc, 0x8d, 0xa8, 0xcf, 0x09, 0x51, - 0x8d, 0xf2, 0xba, 0x26, 0x51, 0xd0, 0xba, 0xdb, 0xbb, 0x74, 0xb4, 0x9f, - 0x09, 0xfb, 0x85, 0x53, 0xb5, 0x72, 0xfb, 0xa7, 0x44, 0xe3, 0x95, 0x83, - 0x65, 0x25, 0x53, 0x87, 0x5e, 0xf1, 0xcb, 0xf6, 0xd1, 0x03, 0x71, 0xed, - 0x97, 0x20, 0x32, 0x77, 0x06, 0x86, 0x1b, 0x78, 0x17, 0xa0, 0x2c, 0x93, - 0x3c, 0xb3, 0xc5, 0xc5, 0x9b, 0x9e, 0xb8, 0x18, 0x82, 0x62, 0x35, 0x8f, - 0x9d, 0x13, 0x58, 0x21, 0xd5, 0xf8, 0x51, 0x43, 0x12, 0xa8, 0x26, 0xf5, - 0x52, 0x3c, 0x2f, 0x26, 0x5a, 0x7e, 0x21, 0x11, 0x2d, 0x29, 0x5e, 0xe8, - 0x67, 0x41, 0x41, 0xc9, 0x0a, 0xda, 0xe1, 0xab, 0x11, 0xcd, 0xd4, 0x8e, - 0x8c, 0x47, 0x49, 0x1a, 0x4b, 0x2c, 0xc7, 0x1f, 0xab, 0x2d, 0x44, 0xb0, - 0xa4, 0x3a, 0xd7, 0xe8, 0x0b, 0x35, 0xfc, 0x8f, 0xe0, 0x44, 0x36, 0xc8, - 0xe2, 0x83, 0x81, 0xbf, 0xa5, 0x38, 0x91, 0x00, 0x05, 0x85, 0xab, 0x66, - 0xa2, 0x92, 0xa5, 0x6d, 0xda, 0xa6, 0x11, 0xa3, 0x24, 0x8a, 0xd8, 0x4d, - 0x0b, 0x0a, 0x8f, 0x5b, 0x17, 0xbe, 0xe5, 0x13, 0xe7, 0xd6, 0x9b, 0xc2, - 0x2c, 0x32, 0xba, 0x50, 0x6a, 0xf3, 0x63, 0x7f, 0x54, 0x64, 0x27, 0x3f, - 0xfb, 0x6f, 0x67, 0x0a, 0x23, 0xd6, 0x66, 0xbf, 0xf3, 0x9c, 0x58, 0x25, - 0x33, 0xe2, 0x1c, 0x46, 0x7e, 0x0b, 0x10, 0x5d, 0xd5, 0x5e, 0x37, 0x70, - 0x96, 0x11, 0x3b, 0x44, 0x9e, 0x68, 0x13, 0x53, 0x21, 0x2a, 0x60, 0x63, - 0x17, 0xe5, 0xc5, 0x8c, 0x3e, 0xda, 0x81, 0x26, 0xb0, 0x34, 0xff, 0x93, - 0xaf, 0xfc, 0x5c, 0x93, 0xbd, 0x9f, 0x82, 0xf0, 0x66, 0x59, 0xb2, 0x28, - 0xaa, 0xd3, 0xc5, 0xfc, 0x12, 0x5f, 0x13, 0x89, 0x8d, 0x49, 0x07, 0x2d, - 0x7b, 0x4b, 0xc9, 0x69, 0xf5, 0xaa, 0xbf, 0x94, 0xb5, 0x1f, 0xba, 0x36, - 0xa4, 0x49, 0x3e, 0x50, 0xed, 0x92, 0x57, 0x66, 0x32, 0xeb, 0x06, 0xb0, - 0xb3, 0x5f, 0xa6, 0xcd, 0x75, 0x92, 0xa0, 0x40, 0x13, 0xe2, 0x49, 0x54, - 0x8c, 0x92, 0x78, 0x1f, 0x2d, 0x1b, 0x9d, 0x67, 0xec, 0x87, 0x7e, 0x94, - 0xb0, 0x7f, 0x17, 0xfc, 0xc2, 0xec, 0x1d, 0xd3, 0x1a, 0xd7, 0x95, 0xc1, - 0x97, 0x5f, 0xc2, 0xd3, 0xf5, 0x13, 0xa8, 0x0b, 0xfe, 0xa6, 0x0a, 0xf5, - 0xe3, 0xe0, 0xd3, 0x1d, 0x3c, 0x73, 0x07, 0xbc, 0xb8, 0xef, 0x91, 0x6f, - 0x78, 0x79, 0xb0, 0x29, 0xcf, 0xc1, 0xc7, 0x84, 0x49, 0x26, 0x2f, 0x12, - 0xb5, 0x44, 0x65, 0xb9, 0xec, 0x6a, 0x65, 0x1d, 0x00, 0x45, 0xb4, 0x96, - 0x6b, 0xe4, 0x88, 0x81, 0x5a, 0x4d, 0x02, 0x5b, 0x3d, 0xfb, 0x55, 0x38, - 0xb5, 0x77, 0x62, 0x6b, 0xbf, 0x43, 0x4f, 0x73, 0x64, 0xce, 0x72, 0x4c, - 0xbf, 0x19, 0xab, 0x9a, 0xf0, 0x91, 0x93, 0xc1, 0x81, 0xf5, 0xd2, 0xd6, - 0x4f, 0xf5, 0x11, 0xbb, 0x4e, 0xc0, 0x42, 0x06, 0x75, 0xd1, 0x0a, 0x9b, - 0xe6, 0xef, 0x26, 0xbc, 0xc4, 0x7f, 0x9c, 0x53, 0xe6, 0x6c, 0x44, 0xa3, - 0xe9, 0xce, 0x79, 0x7f, 0xca, 0xb0, 0xef, 0xea, 0xd7, 0xd2, 0x2e, 0xea, - 0xa2, 0x46, 0x2a, 0xf6, 0xe1, 0xda, 0x29, 0x5b, 0xdc, 0x6a, 0x1b, 0xc1, - 0xc3, 0x25, 0xcc, 0x70, 0x64, 0x1c, 0x60, 0x61, 0xe2, 0x27, 0x9c, 0xaa, - 0xe4, 0x53, 0x1f, 0xfb, 0x57, 0xc7, 0xa2, 0xf7, 0x22, 0xd9, 0x07, 0x18, - 0xe0, 0x3d, 0x0c, 0xf6, 0xf1, 0xed, 0x72, 0xe6, 0x28, 0xf0, 0x1d, 0x96, - 0xfb, 0xcb, 0xe3, 0x69, 0x6e, 0x18, 0x4a, 0x86, 0x3f, 0x5b, 0xa4, 0x09, - 0x78, 0x50, 0x43, 0x8c, 0xba, 0xe7, 0x07, 0xb0, 0x0d, 0x32, 0xbe, 0xb9, - 0x2d, 0xc6, 0x48, 0x9b, 0x86, 0x29, 0xd3, 0xa5, 0x90, 0xee, 0xb3, 0x34, - 0x54, 0x1c, 0x5b, 0x88, 0x78, 0xe9, 0x9f, 0x25, 0x84, 0xd2, 0x4f, 0xc2, - 0x36, 0xdf, 0xdb, 0xf5, 0x09, 0xd3, 0x7c, 0x77, 0x33, 0x8a, 0x18, 0xf3, - 0x2a, 0x1c, 0xa6, 0xc6, 0x7e, 0x12, 0x3a, 0xf3, 0xb5, 0xe5, 0xba, 0x95, - 0x89, 0x54, 0xe0, 0x29, 0x90, 0xca, 0xdc, 0x6a, 0xcc, 0x1e, 0x7b, 0x44, - 0x16, 0xcb, 0x21, 0x64, 0xb0, 0xbf, 0x57, 0xbc, 0xd9, 0x5c, 0x17, 0xa8, - 0xbd, 0x41, 0xfa, 0xf1, 0x0d, 0x09, 0x11, 0x7d, 0x1b, 0x35, 0x6f, 0x71, - 0x2c, 0x40, 0xa5, 0xa6, 0x46, 0x4a, 0xe9, 0xa8, 0xbc, 0x12, 0xd9, 0xad, - 0x79, 0x8c, 0x92, 0xa2, 0x85, 0xee, 0x7e, 0xf9, 0xfc, 0xc3, 0xaa, 0xfa, - 0x7c, 0xec, 0x95, 0xc0, 0x8a, 0x92, 0xc4, 0x60, 0x97, 0x03, 0xf2, 0xe6, - 0xc4, 0x80, 0xf3, 0x5f, 0x4b, 0xfb, 0x52, 0xab, 0xc5, 0x2b, 0xfb, 0xdd, - 0x1a, 0x1e, 0x9d, 0x0a, 0x43, 0x50, 0x26, 0x5b, 0x06, 0xf7, 0xe8, 0x16, - 0x3d, 0xbe, 0x87, 0x2e, 0x14, 0xfe, 0xb6, 0x99, 0x29, 0x25, 0x3d, 0x8c, - 0x71, 0x20, 0x3e, 0xf8, 0x2d, 0xd0, 0xda, 0x6d, 0xc1, 0x2d, 0xe5, 0xfa, - 0xed, 0x84, 0x6b, 0x90, 0x0a, 0x8e, 0xd6, 0x88, 0x76, 0xb6, 0xbc, 0x18, - 0xe9, 0x9f, 0xef, 0xad, 0x15, 0xa3, 0x30, 0x0c, 0xe6, 0x29, 0x32, 0xba, - 0x39, 0x32, 0xbd, 0xfb, 0x38, 0xe5, 0xda, 0x60, 0x0e, 0x38, 0x90, 0x94, - 0x7d, 0x3c, 0x67, 0x5a, 0x7b, 0x28, 0x08, 0xec, 0x2b, 0x86, 0xe7, 0x68, - 0x1e, 0xa1, 0xe3, 0x8f, 0x36, 0xb9, 0x9e, 0xc7, 0x3d, 0xb7, 0x29, 0x39, - 0x45, 0xe7, 0xf8, 0xa0, 0x7b, 0x4e, 0x65, 0x47, 0x1e, 0xf7, 0xce, 0x2e, - 0x00, 0x14, 0xec, 0x8b, 0x32, 0xcb, 0x20, 0x0c, 0xc2, 0x97, 0x10, 0x3d, - 0x02, 0x3e, 0x86, 0x9b, 0x51, 0x69, 0xd9, 0xdc, 0xc7, 0x93, 0x74, 0x7d, - 0xaf, 0x61, 0x83, 0x8a, 0x78, 0xdc, 0x46, 0x2a, 0xdb, 0x07, 0x6c, 0x17, - 0xaa, 0x6c, 0x05, 0x44, 0xbe, 0xd9, 0xaa, 0x0c, 0x61, 0x6b, 0x3c, 0x12, - 0xf8, 0xb2, 0xbc, 0x67, 0x51, 0xb7, 0xc0, 0x0a, 0x49, 0xf1, 0x0a, 0x42, - 0x7b, 0xbd, 0xeb, 0x86, 0xc1, 0x56, 0x99, 0x40, 0x84, 0x6d, 0x8d, 0xdd, - 0x24, 0xc5, 0xee, 0x8d, 0xc8, 0xc9, 0xee, 0xe9, 0xba, 0x88, 0x3d, 0xcb, - 0xc0, 0x32, 0x6b, 0x1a, 0xe0, 0x13, 0x25, 0x47, 0x67, 0x24, 0xd1, 0xb4, - 0xde, 0xaf, 0xd4, 0x71, 0x10, 0xe8, 0x66, 0x61, 0x6a, 0x22, 0x36, 0xfe, - 0x44, 0xbe, 0x16, 0xa0, 0xab, 0xe4, 0x43, 0x6e, 0x25, 0xf6, 0xc7, 0x9a, - 0xbe, 0x14, 0x3e, 0x64, 0x61, 0x7f, 0x03, 0x57, 0x58, 0xa4, 0xcd, 0xf0, - 0x3a, 0x6c, 0x87, 0x75, 0xc3, 0x94, 0x5d, 0x58, 0x17, 0x9d, 0xc4, 0xba, - 0xc2, 0x31, 0xdf, 0x84, 0x8b, 0xf6, 0x59, 0xde, 0xa8, 0x7b, 0x41, 0x74, - 0x68, 0xb6, 0xac, 0xff, 0x83, 0xe3, 0x56, 0x46, 0xa9, 0xbe, 0xce, 0xf1, - 0x49, 0x86, 0x20, 0x6d, 0x64, 0x6a, 0x07, 0xb3, 0x9a, 0xf3, 0xbb, 0xf0, - 0xc6, 0x31, 0x94, 0x58, 0xe5, 0x69, 0x52, 0x6c, 0xcc, 0x35, 0x7c, 0xbf, - 0x13, 0xd9, 0x43, 0xa6, 0xe7, 0x0a, 0x0e, 0x51, 0xba, 0xff, 0x1c, 0x63, - 0xb8, 0x69, 0xb7, 0x77, 0xb5, 0x6b, 0x20, 0x7b, 0xf0, 0x00, 0xf9, 0xb9, - 0x07, 0x34, 0xc9, 0x9d, 0x22, 0xb6, 0xd6, 0xa6, 0x52, 0x0b, 0xed, 0xea, - 0x50, 0x6e, 0x2e, 0x63, 0x68, 0x67, 0x4a, 0x5b, 0xff, 0xe2, 0xd2, 0xb8, - 0xb1, 0x2d, 0xc8, 0xcf, 0x09, 0x5e, 0x9c, 0xfd, 0xff, 0x0d, 0xe4, 0xab, - 0xa5, 0xbd, 0x70, 0xad, 0xb0, 0x46, 0xbe, 0xee, 0x77, 0x57, 0x13, 0x55, - 0x30, 0x3d, 0x76, 0x17, 0x3d, 0x8c, 0x8d, 0x3f, 0x1a, 0x1e, 0x32, 0xcd, - 0xc4, 0xa0, 0x5c, 0xc0, 0xe6, 0x19, 0x37, 0x6d, 0x82, 0xce, 0x05, 0xe4, - 0x9c, 0x74, 0x60, 0x07, 0x0f, 0x77, 0x45, 0xd9, 0x92, 0x33, 0xe8, 0x87, - 0xcf, 0x83, 0x2a, 0x9c, 0xc1, 0xf0, 0xc6, 0x5c, 0x8f, 0xb3, 0x51, 0x4e, - 0x11, 0x9e, 0xb6, 0x8a, 0xaf, 0xf9, 0x11, 0x74, 0xab, 0x8f, 0xc4, 0x39, - 0x62, 0x82, 0x06, 0x3c, 0x1f, 0x9a, 0xde, 0xbd, 0x33, 0xc4, 0x3b, 0x7a, - 0x14, 0xcb, 0x8f, 0xeb, 0x5b, 0xc6, 0x9b, 0xa4, 0x4d, 0x20, 0xef, 0x41, - 0xf3, 0xe5, 0x35, 0x84, 0x55, 0xaa, 0x49, 0xc1, 0x70, 0x32, 0x85, 0x94, - 0x4c, 0x42, 0x93, 0xfd, 0xad, 0x70, 0xeb, 0xc0, 0xed, 0x95, 0xbe, 0x2a, - 0xa5, 0x0b, 0x2b, 0x46, 0xe9, 0x58, 0x90, 0x5c, 0x06, 0x84, 0xc1, 0xb5, - 0x40, 0x42, 0x0e, 0xfa, 0xac, 0xc7, 0xcd, 0x97, 0xc8, 0x86, 0x99, 0x9a, - 0x83, 0x29, 0x05, 0x49, 0x28, 0x55, 0x57, 0xa0, 0x8b, 0x4b, 0xe9, 0x27, - 0xf4, 0x67, 0xec, 0xb0, 0xe5, 0x71, 0xca, 0x84, 0x54, 0xca, 0xba, 0x94, - 0x04, 0xa8, 0x65, 0xef, 0xee, 0xb1, 0x2b, 0xda, 0xb1, 0x5c, 0x30, 0x08, - 0x70, 0xeb, 0xc3, 0x66, 0x72, 0xb9, 0xd0, 0x75, 0xd1, 0x89, 0x92, 0x3a, - 0x90, 0x16, 0xc5, 0xf4, 0xac, 0xab, 0xac, 0xd3, 0x63, 0x52, 0xea, 0x27, - 0xa9, 0xe7, 0x0a, 0x93, 0x27, 0x55, 0xf8, 0xc8, 0x8a, 0x99, 0x7f, 0x49, - 0xd4, 0x48, 0x1e, 0x54, 0xf7, 0xbe, 0x07, 0x1c, 0xcc, 0x1b, 0x06, 0xcb, - 0xee, 0xc8, 0x47, 0xfe, 0x0c, 0xe0, 0x90, 0xa9, 0xa1, 0x31, 0x4a, 0xe0, - 0x2d, 0x63, 0x55, 0xd1, 0x94, 0xca, 0x83, 0xda, 0xa7, 0x9e, 0xd0, 0xc6, - 0x24, 0x61, 0xd7, 0xe8, 0x1f, 0x41, 0xc4, 0xb8, 0xe2, 0x4f, 0x82, 0x77, - 0xfc, 0x5f, 0xd7, 0xc2, 0x35, 0x0c, 0x6a, 0x35, 0x8d, 0x4f, 0x65, 0x3c, - 0x89, 0x23, 0xb8, 0xf3, 0x69, 0x7b, 0x0b, 0x7b, 0x0e, 0x77, 0xc7, 0x4e, - 0x45, 0x26, 0x06, 0x5f, 0x44, 0x0c, 0x45, 0xc0, 0xbb, 0x5c, 0xa9, 0x7f, - 0xc6, 0xa7, 0x04, 0x6e, 0x1b, 0x80, 0x62, 0x9a, 0xf2, 0xa1, 0xb8, 0xe3, - 0x3b, 0x65, 0xe8, 0x7a, 0xe9, 0xbb, 0xdc, 0xa3, 0x3a, 0x4f, 0x47, 0xa8, - 0x8f, 0x07, 0x2a, 0xc2, 0xbe, 0xa5, 0x81, 0xbd, 0x61, 0x9c, 0xe2, 0x6c, - 0xf0, 0x99, 0x2b, 0x4f, 0x5e, 0xad, 0xb5, 0x48, 0x09, 0x58, 0x9b, 0x24, - 0xe8, 0x69, 0xac, 0xa9, 0xe3, 0x51, 0xfc, 0xa5, 0xa4, 0x50, 0x08, 0xa7, - 0x99, 0xb8, 0xce, 0x6c, 0x68, 0x73, 0xda, 0x18, 0x98, 0x25, 0xbc, 0x72, - 0x9f, 0x61, 0x6a, 0xf7, 0xa8, 0x3c, 0xdc, 0x84, 0x93, 0x88, 0x0f, 0xe0, - 0xfc, 0xde, 0xcc, 0xae, 0xf4, 0x98, 0x08, 0xb5, 0x8a, 0x95, 0x4b, 0x67, - 0x81, 0x2c, 0x6a, 0xf8, 0x7c, 0xd3, 0x59, 0x7b, 0x09, 0xbc, 0xd4, 0xe4, - 0x0e, 0xb6, 0x76, 0x6c, 0x0d, 0xa0, 0xb6, 0x27, 0x98, 0x75, 0x81, 0x2e, - 0x18, 0xc4, 0x54, 0xcc, 0xf8, 0xe3, 0x2c, 0x2b, 0xfa, 0xc1, 0xbe, 0x49, - 0x5d, 0xf7, 0x45, 0xdf, 0x06, 0xc2, 0xb1, 0xc5, 0x10, 0x3a, 0x1c, 0x12, - 0x37, 0x14, 0xf2, 0x6c, 0xd3, 0xa7, 0x4f, 0xfd, 0x05, 0x0f, 0xda, 0x4e, - 0xa4, 0xef, 0x56, 0x20, 0x0f, 0x62, 0x6f, 0xcf, 0xb5, 0xe6, 0xe7, 0x75, - 0x77, 0x9f, 0x5a, 0xa0, 0x7e, 0x8b, 0x1d, 0x15, 0xbe, 0x12, 0xf2, 0xcf, - 0xe9, 0x09, 0x8b, 0xcc, 0x2b, 0xfb, 0xfd, 0xb4, 0xef, 0x38, 0xde, 0xe0, - 0xe6, 0x93, 0xcb, 0x17, 0x78, 0x9e, 0x53, 0xfa, 0x76, 0x22, 0x75, 0x60, - 0x66, 0xd8, 0x23, 0x18, 0x95, 0xd4, 0x3f, 0x6d, 0xb7, 0x6b, 0x6b, 0x39, - 0xde, 0x54, 0xbb, 0x14, 0xe8, 0x73, 0x3f, 0x22, 0x6e, 0xca, 0x1d, 0x40, - 0x62, 0x70, 0x91, 0xc9, 0x45, 0xea, 0xe9, 0x3e, 0xfb, 0xd0, 0xa5, 0xb5, - 0x07, 0xd0, 0x45, 0x93, 0x6c, 0x55, 0x55, 0xdc, 0x2f, 0xbd, 0x27, 0x9a, - 0x13, 0xc5, 0xa5, 0x08, 0x2c, 0x26, 0x58, 0x73, 0x64, 0xf0, 0xf5, 0x27, - 0x2a, 0x72, 0xec, 0x07, 0xdc, 0xf3, 0xd1, 0x85, 0x67, 0xfb, 0xf7, 0x0e, - 0x19, 0xf5, 0xf0, 0x7d, 0x63, 0xac, 0x51, 0xbe, 0x87, 0x22, 0x00, 0xba, - 0x35, 0x56, 0x72, 0xc3, 0x4a, 0xa1, 0x0c, 0x03, 0xe5, 0x8d, 0xcc, 0x21, - 0x69, 0x8d, 0xe0, 0x54, 0x8f, 0x97, 0x4c, 0x07, 0x99, 0xef, 0x46, 0xf0, - 0x94, 0xea, 0x59, 0x54, 0x01, 0xa9, 0xcd, 0xbf, 0x48, 0x63, 0x99, 0x7d, - 0x53, 0x08, 0x03, 0xfa, 0x63, 0xb6, 0x2f, 0xcb, 0x41, 0xff, 0x83, 0x66, - 0xea, 0x45, 0x8b, 0x20, 0x0d, 0xb3, 0xa6, 0x29, 0x67, 0x56, 0x94, 0x07, - 0x58, 0x05, 0x72, 0x62, 0x79, 0xfa, 0xc6, 0x47, 0x96, 0xee, 0x65, 0x0b, - 0xbd, 0xcc, 0x54, 0x70, 0xaf, 0x44, 0x05, 0xfa, 0x1a, 0x09, 0xdd, 0xf4, - 0xf8, 0x9b, 0xad, 0xb2, 0x68, 0xe4, 0xf6, 0x87, 0x92, 0x5d, 0xcb, 0xc7, - 0xbb, 0x73, 0x99, 0xe8, 0x82, 0x4c, 0x91, 0x26, 0x66, 0xed, 0x10, 0x79, - 0xe0, 0x63, 0x8b, 0x45, 0xd9, 0x10, 0x68, 0x9e, 0xe6, 0x68, 0xee, 0x11, - 0x40, 0xdb, 0x02, 0x26, 0xa0, 0x07, 0xca, 0x7f, 0x07, 0x94, 0xca, 0x97, - 0x7e, 0x03, 0xf1, 0x13, 0x81, 0x3a, 0xe3, 0x94, 0xc8, 0x4c, 0x1f, 0xe7, - 0xda, 0x2f, 0xef, 0x7e, 0x18, 0x97, 0xbf, 0x51, 0x07, 0x16, 0x18, 0x08, - 0x15, 0x6b, 0x8a, 0xdc, 0xab, 0xb9, 0xb7, 0xce, 0x5c, 0x2c, 0x78, 0x4b, - 0x58, 0xc3, 0xe0, 0xde, 0x4d, 0x9d, 0x3e, 0x3d, 0xb9, 0xe5, 0x81, 0xb0, - 0x0c, 0xe2, 0x1a, 0xfe, 0xbe, 0x13, 0x0b, 0x45, 0x7e, 0x0f, 0xb1, 0x31, - 0xaa, 0x8d, 0x72, 0xbc, 0x99, 0xcb, 0x87, 0xe9, 0x20, 0x84, 0x83, 0xd0, - 0xb0, 0x2c, 0x39, 0x3e, 0xa9, 0x5e, 0x6c, 0x38, 0x3b, 0x52, 0x01, 0xde, - 0x26, 0x9d, 0x15, 0xec, 0x5e, 0x6b, 0x0b, 0x43, 0x8e, 0x1b, 0xdb, 0x36, - 0xfa, 0x02, 0x80, 0x68, 0x7e, 0x3e, 0xb5, 0x75, 0x4b, 0xae, 0xf0, 0x10, - 0xfa, 0x9b, 0x75, 0xa9, 0xa3, 0x82, 0xf1, 0x26, 0x3c, 0x8c, 0x35, 0x41, - 0x8b, 0x9c, 0x95, 0x66, 0x22, 0x8b, 0xa5, 0xaf, 0xe6, 0x91, 0xcb, 0x69, - 0x5f, 0x27, 0xe1, 0x3e, 0x80, 0x35, 0xac, 0xc7, 0xb2, 0xed, 0x13, 0xfc, - 0x20, 0xa8, 0x12, 0x6c, 0x0c, 0x50, 0xd3, 0xdb, 0xf7, 0xfe, 0x29, 0x64, - 0xb6, 0x76, 0xda, 0xc9, 0x63, 0x80, 0x37, 0x99, 0x50, 0x26, 0x2b, 0xe4, - 0x01, 0x55, 0xc6, 0x1c, 0xfa, 0x02, 0x94, 0xc2, 0x2d, 0x7d, 0xd6, 0x44, - 0x0c, 0x70, 0x4d, 0x8d, 0x6a, 0x14, 0x48, 0x9e, 0x52, 0x05, 0x1e, 0xf4, - 0x90, 0x68, 0xb3, 0xef, 0x7d, 0x3a, 0x66, 0x65, 0x46, 0x53, 0x91, 0x4a, - 0x31, 0x21, 0xa0, 0xed, 0xba, 0xf2, 0xff, 0x6e, 0x0f, 0x50, 0x86, 0x93, - 0x1c, 0x92, 0xa3, 0x45, 0x61, 0xe2, 0x17, 0xaa, 0xa6, 0x64, 0x4e, 0x4f, - 0xc3, 0x29, 0x9f, 0x15, 0x63, 0x75, 0x23, 0x01, 0xee, 0x50, 0x12, 0x89, - 0x08, 0x3f, 0x9a, 0x6f, 0x95, 0x37, 0x5d, 0x06, 0x23, 0x53, 0x6e, 0x64, - 0xa9, 0x29, 0xbc, 0x1a, 0x9b, 0xee, 0x17, 0x72, 0x54, 0x87, 0x4f, 0xc4, - 0x39, 0xb3, 0xa4, 0x0d, 0x52, 0x7a, 0x9b, 0xa2, 0x3a, 0xfc, 0x5a, 0xa1, - 0xd4, 0xda, 0x30, 0x05, 0xf4, 0x2c, 0x40, 0xb9, 0x61, 0x37, 0x83, 0xd8, - 0x0b, 0x71, 0xd4, 0x80, 0x9b, 0x5a, 0x07, 0x83, 0x80, 0xe3, 0xda, 0x61, - 0x82, 0x3d, 0x99, 0x35, 0x5c, 0x0f, 0x5d, 0x01, 0x16, 0x75, 0x79, 0x57, - 0xd6, 0x75, 0x86, 0x85, 0xfc, 0xb2, 0x7a, 0xfd, 0x82, 0x7e, 0x8e, 0x45, - 0x80, 0x01, 0xe2, 0x50, 0x14, 0xec, 0x5e, 0x74, 0x10, 0x35, 0x2f, 0xa9, - 0x47, 0x78, 0x1e, 0xc0, 0xe0, 0x2d, 0x00, 0xef, 0x27, 0xf1, 0x81, 0x62, - 0x88, 0x2f, 0x2e, 0x39, 0x14, 0x23, 0xb7, 0x76, 0x6e, 0x5a, 0xd2, 0xd4, - 0x71, 0x1a, 0x37, 0x8e, 0x96, 0x5f, 0x8f, 0x39, 0xef, 0x61, 0x77, 0xfb, - 0x73, 0x10, 0xc8, 0xef, 0xff, 0x65, 0x2e, 0xaa, 0xc6, 0xb0, 0x82, 0xe1, - 0xea, 0x2d, 0x6e, 0x18, 0x3f, 0x45, 0x40, 0x52, 0x5b, 0xcf, 0x3a, 0xc4, - 0x83, 0x69, 0x16, 0x86, 0x23, 0xb8, 0xd6, 0xc7, 0x83, 0x9a, 0x05, 0x57, - 0x9f, 0x21, 0x8e, 0x11, 0x39, 0x55, 0x8a, 0xa7, 0x5b, 0xc6, 0xdd, 0x79, - 0x1d, 0x2f, 0x93, 0x82, 0x5c, 0x6a, 0xc1, 0x65, 0x2d, 0x14, 0x14, 0xd4, - 0x02, 0xc6, 0x45, 0xba, 0x25, 0xee, 0x2b, 0x23, 0x55, 0xf5, 0x78, 0x1a, - 0x04, 0x1c, 0xe9, 0x06, 0x72, 0x75, 0xda, 0x03, 0xfd, 0x5d, 0xf0, 0x75, - 0xfe, 0xbd, 0xb2, 0x23, 0x1f, 0x8f, 0x7d, 0xeb, 0xf3, 0x14, 0x2a, 0xbb, - 0xd1, 0x4f, 0x96, 0xbe, 0x9e, 0xf5, 0xbe, 0x83, 0x1e, 0x94, 0x3b, 0x73, - 0xdf, 0x39, 0x0a, 0x6e, 0x1a, 0x36, 0xcc, 0xe3, 0xc0, 0x30, 0xa1, 0x34, - 0x02, 0xc9, 0xd6, 0x88, 0x81, 0x50, 0xea, 0x77, 0xff, 0xe3, 0xa2, 0x13, - 0xdc, 0x8a, 0xa4, 0xca, 0xdd, 0xa2, 0xde, 0x83, 0x38, 0xca, 0x85, 0xe1, - 0x1a, 0x6b, 0x82, 0x91, 0xa4, 0x84, 0x79, 0x27, 0x98, 0xae, 0x44, 0x63, - 0x49, 0x9b, 0xd8, 0x45, 0x77, 0x3b, 0xa5, 0x21, 0xe0, 0xb4, 0xae, 0x93, - 0x06, 0x38, 0xd6, 0x13, 0x6e, 0xa0, 0xb3, 0x67, 0xfd, 0xeb, 0x5a, 0xe0, - 0x6a, 0x9e, 0xa1, 0x39, 0x5e, 0x16, 0x7f, 0x7e, 0xee, 0x97, 0x7e, 0x67, - 0x2d, 0x6d, 0x7e, 0xa2, 0x6a, 0x39, 0xd6, 0xd3, 0xba, 0x2c, 0xa8, 0x50, - 0x03, 0x1b, 0xf8, 0x25, 0x4c, 0x03, 0x0e, 0xe6, 0x8d, 0x6e, 0xb4, 0xdb, - 0x0e, 0xcc, 0xb3, 0x31, 0xe7, 0x55, 0x91, 0xee, 0x5e, 0xc0, 0x52, 0x79, - 0x12, 0x06, 0xb3, 0x67, 0x51, 0xb3, 0xbe, 0x0a, 0xfa, 0x58, 0x28, 0x46, - 0x96, 0xac, 0x06, 0x17, 0xd0, 0xf1, 0xa0, 0x8c, 0x52, 0x5a, 0xa3, 0x8c, - 0x6f, 0xbd, 0x79, 0x91, 0xf8, 0x43, 0xdd, 0x46, 0x1e, 0xe2, 0x51, 0xb5, - 0x10, 0xba, 0x3f, 0x70, 0xf5, 0x78, 0x7f, 0x45, 0x1d, 0xea, 0xc9, 0x71, - 0xe1, 0xe3, 0xd1, 0x6b, 0xb7, 0xb6, 0xc7, 0x8a, 0x42, 0xbd, 0xe1, 0xa0, - 0x3e, 0x31, 0x1b, 0x05, 0xb9, 0xe8, 0xb9, 0xfa, 0xc7, 0xb3, 0xd8, 0x2e, - 0x7a, 0x9d, 0x61, 0x73, 0xcf, 0x43, 0x3b, 0x32, 0xaa, 0x6d, 0xda, 0x6f, - 0x2f, 0xce, 0x40, 0x9b, 0x60, 0xdc, 0xac, 0x6a, 0x37, 0xd6, 0x20, 0xee, - 0x80, 0xee, 0xdf, 0xc2, 0xd8, 0x4d, 0x25, 0x8e, 0x5b, 0x54, 0xee, 0x9b, - 0x99, 0x77, 0xd3, 0x70, 0xba, 0x6d, 0xde, 0x08, 0x0a, 0x04, 0xde, 0x1d, - 0xfb, 0x86, 0x63, 0x08, 0x70, 0x93, 0x47, 0x09, 0x06, 0x49, 0xce, 0x79, - 0x73, 0x9f, 0xd8, 0xd2, 0x4f, 0xca, 0xc3, 0x25, 0xb0, 0xb0, 0x94, 0x36, - 0xb5, 0x00, 0x3d, 0xf8, 0xab, 0x2a, 0x2e, 0xe4, 0x24, 0x73, 0x1f, 0xfc, - 0xae, 0xa2, 0x0b, 0x47, 0x17, 0xb3, 0x51, 0xe6, 0x4d, 0xdd, 0xb5, 0x3e, - 0x65, 0x92, 0x3f, 0xd4, 0xb3, 0x50, 0x56, 0xf8, 0x73, 0x00, 0x92, 0x93, - 0x3b, 0x6d, 0x6a, 0x97, 0xe5, 0x70, 0x64, 0xf0, 0x52, 0x12, 0x5f, 0x9a, - 0xfe, 0xba, 0x82, 0x99, 0x9d, 0x3f, 0xca, 0xca, 0x6e, 0x41, 0xcf, 0xfa, - 0x64, 0xa8, 0x4f, 0xe2, 0x68, 0xd0, 0x3b, 0x09, 0xd9, 0x5c, 0x01, 0x0c, - 0xd1, 0x6a, 0xa5, 0xd6, 0x7a, 0xcc, 0xa6, 0x60, 0x28, 0xb3, 0xbf, 0xfa, - 0xd1, 0x6e, 0x3d, 0x8b, 0xf7, 0x0a, 0x6b, 0xe7, 0x50, 0x31, 0x3c, 0x1e, - 0x16, 0x04, 0x29, 0x01, 0x51, 0x81, 0x9d, 0x67, 0x9d, 0x14, 0x69, 0xfb, - 0xd2, 0x52, 0x95, 0x98, 0x12, 0x6b, 0xc5, 0x8e, 0x42, 0xfa, 0x32, 0xff, - 0xc3, 0xa6, 0x30, 0x72, 0x95, 0x88, 0xa8, 0x2d, 0x7b, 0xdb, 0x36, 0x7b, - 0x1a, 0x8b, 0x2d, 0x09, 0x12, 0xb2, 0xe7, 0x49, 0x5c, 0x27, 0x60, 0x01, - 0xd6, 0xe0, 0x86, 0x89, 0xa6, 0x30, 0x89, 0x16, 0x6d, 0xc0, 0x8a, 0x59, - 0xb0, 0xa9, 0x41, 0xf7, 0x50, 0x6a, 0x6b, 0x6c, 0x1c, 0x92, 0xfd, 0x6e, - 0xae, 0x94, 0x4e, 0xee, 0x17, 0x77, 0xd7, 0xd4, 0x49, 0x02, 0x21, 0xeb, - 0x5b, 0x4c, 0xe2, 0xf0, 0x43, 0x4d, 0x7c, 0x56, 0x22, 0xb4, 0x0a, 0x26, - 0xd1, 0x03, 0xb6, 0x46, 0x55, 0x98, 0x4b, 0x6c, 0x71, 0xa8, 0x56, 0xea, - 0x7a, 0x0d, 0x48, 0x70, 0x06, 0x5b, 0xd4, 0x69, 0x91, 0xbb, 0x37, 0x93, - 0xea, 0x46, 0xfd, 0xd0, 0xab, 0xbf, 0xdd, 0xda, 0xc8, 0xb2, 0xba, 0x4e, - 0x7e, 0xc5, 0x76, 0x23, 0xf1, 0x72, 0xa1, 0x73, 0x59, 0xc2, 0x56, 0x9a, - 0x77, 0x20, 0x2d, 0xb7, 0x20, 0x9f, 0x23, 0x7f, 0x2b, 0x7c, 0x14, 0x67, - 0x95, 0xd0, 0x1b, 0x40, 0x40, 0xf9, 0xf2, 0x8f, 0x03, 0x5d, 0xcf, 0xbd, - 0x69, 0x02, 0x52, 0x3b, 0x3b, 0x09, 0x12, 0x56, 0x7e, 0xb9, 0x4e, 0x21, - 0x3f, 0x25, 0x13, 0x17, 0x91, 0x78, 0xda, 0xa2, 0x03, 0x70, 0xa2, 0xae, - 0x4f, 0x93, 0xbd, 0x9c, 0x59, 0xb4, 0x18, 0x87, 0xe1, 0xe8, 0x3b, 0xeb, - 0x39, 0x7f, 0x31, 0x20, 0x8a, 0x74, 0x19, 0x9b, 0x6c, 0x3e, 0x66, 0xde, - 0xe4, 0x10, 0x45, 0x8f, 0x2a, 0xf5, 0x18, 0x5e, 0x37, 0xe5, 0x44, 0xc9, - 0x0d, 0xa6, 0x11, 0x87, 0x06, 0x71, 0xbc, 0x4b, 0x58, 0x5b, 0x12, 0x0b, - 0x2b, 0x10, 0x2b, 0xe4, 0x4d, 0x58, 0xd1, 0x5f, 0x54, 0x7c, 0x3e, 0x69, - 0xad, 0xac, 0x01, 0xed, 0xf0, 0x42, 0xa5, 0x89, 0x1c, 0x72, 0x51, 0xf3, - 0x95, 0x8d, 0xf2, 0xe0, 0xa1, 0x95, 0x5a, 0x77, 0x51, 0x38, 0x26, 0xc9, - 0x2c, 0xea, 0x51, 0x06, 0xae, 0xf1, 0x40, 0xcf, 0x71, 0x53, 0xd6, 0x02, - 0x2d, 0xdf, 0xbb, 0x4f, 0xb3, 0xcb, 0x14, 0xb2, 0x9f, 0xb8, 0x5a, 0x39, - 0x96, 0xa2, 0x3c, 0xf7, 0xfb, 0x4c, 0x64, 0xca, 0x64, 0x7c, 0x26, 0x0c, - 0x6b, 0x27, 0xe4, 0xe7, 0xed, 0x33, 0x0d, 0xd2, 0x86, 0x81, 0x67, 0x12, - 0xd5, 0x13, 0x09, 0x6c, 0x2c, 0x97, 0x06, 0x7a, 0x07, 0xb3, 0x1f, 0x99, - 0xca, 0xc4, 0x97, 0x45, 0x14, 0xe9, 0x34, 0x9e, 0xac, 0x5a, 0xf7, 0x85, - 0x8f, 0x67, 0x28, 0x3e, 0x2a, 0xc4, 0x6c, 0x34, 0x25, 0x76, 0x70, 0xb7, - 0x41, 0x68, 0x24, 0xbb, 0xf7, 0x4b, 0x87, 0xf2, 0x71, 0xf2, 0xf0, 0x0c, - 0xc6, 0x8a, 0x63, 0x7e, 0x5a, 0x22, 0x73, 0xdc, 0xd4, 0xd6, 0xa8, 0x31, - 0xa5, 0x6f, 0x62, 0xc4, 0xc5, 0x6f, 0x5c, 0xee, 0x51, 0xe1, 0x1c, 0x91, - 0x27, 0x00, 0x6b, 0x72, 0x7d, 0x74, 0xa8, 0xb4, 0x5b, 0xf2, 0x90, 0xa6, - 0x42, 0x47, 0xcc, 0x41, 0x13, 0x6e, 0x10, 0xba, 0x44, 0x32, 0x33, 0x18, - 0x6f, 0xd6, 0x9a, 0xe9, 0x17, 0xf0, 0x35, 0xa2, 0x2f, 0xa0, 0xb2, 0x1b, - 0xed, 0x12, 0x67, 0x1a, 0x78, 0xb1, 0xc6, 0x63, 0x2b, 0x99, 0xa3, 0x99, - 0xb5, 0x75, 0x50, 0xdc, 0xf4, 0xd6, 0x19, 0xb2, 0xd7, 0x5f, 0xba, 0xfc, - 0xd3, 0xb1, 0x1b, 0x9d, 0x3c, 0xe1, 0x38, 0x51, 0xd5, 0x65, 0x85, 0xd4, - 0xc9, 0x56, 0x4a, 0xc0, 0x9e, 0x07, 0x2a, 0xb9, 0x64, 0x76, 0x4a, 0x0b, - 0x24, 0x42, 0xd2, 0x40, 0xca, 0x5c, 0x10, 0xdb, 0x55, 0xd8, 0xfe, 0x8f, - 0x2a, 0x1f, 0x22, 0x42, 0xe0, 0xe0, 0x52, 0xd2, 0xd8, 0xdf, 0xd6, 0x0e, - 0xb4, 0x9f, 0xa5, 0x5f, 0x2a, 0x5f, 0x88, 0x97, 0x5f, 0x88, 0x70, 0x4d, - 0xcc, 0x3e, 0x81, 0x80, 0x41, 0x88, 0x70, 0x19, 0xb9, 0xfa, 0xa1, 0x43, - 0xd0, 0x88, 0xed, 0x68, 0xc5, 0x65, 0x63, 0xb4, 0x54, 0x0d, 0x69, 0x03, - 0xb0, 0x6e, 0xc9, 0xc1, 0xdc, 0x28, 0xdd, 0x4a, 0x7d, 0xb0, 0x43, 0xf6, - 0x53, 0x68, 0xb4, 0xf8, 0x15, 0x43, 0x54, 0xa8, 0xc0, 0x5f, 0x63, 0xde, - 0xf0, 0x94, 0xc0, 0x17, 0xed, 0x7c, 0x3e, 0x16, 0xca, 0xc5, 0xa8, 0x0f, - 0x24, 0xf7, 0xa7, 0xb1, 0x4e, 0x31, 0x8c, 0x17, 0x39, 0x6d, 0xad, 0x69, - 0xb0, 0x4f, 0x6c, 0xf5, 0xc4, 0xcb, 0x59, 0x05, 0x30, 0x67, 0xa5, 0x71, - 0xa9, 0xf3, 0x23, 0xa4, 0x23, 0x2d, 0xea, 0x34, 0x4f, 0x4b, 0x21, 0xda, - 0xee, 0x33, 0x63, 0x19, 0x8c, 0x33, 0xcc, 0xa8, 0x59, 0xba, 0x5b, 0xd3, - 0x48, 0x6c, 0x24, 0x61, 0xdc, 0x0f, 0x87, 0xd7, 0x92, 0x8a, 0x59, 0xc0, - 0x25, 0xdc, 0xcb, 0x4d, 0x08, 0xa0, 0xb9, 0x8e, 0xdd, 0xd5, 0xca, 0x32, - 0x95, 0xeb, 0x22, 0xa9, 0x6d, 0x34, 0x7d, 0x98, 0x3d, 0xea, 0x38, 0x6a, - 0x4a, 0xc7, 0xbc, 0x0a, 0xe5, 0xa0, 0x97, 0x93, 0xe6, 0x61, 0xa9, 0x5e, - 0x43, 0xcb, 0x2b, 0xb4, 0x0a, 0xf7, 0xc5, 0x5d, 0x9e, 0xaf, 0xdf, 0x52, - 0x99, 0x65, 0x5c, 0x31, 0xec, 0xb6, 0x88, 0xec, 0xa7, 0x96, 0xcf, 0x64, - 0x17, 0x68, 0x9d, 0x1b, 0x6d, 0x9e, 0x4a, 0xdf, 0xae, 0x79, 0x0e, 0x39, - 0x72, 0x89, 0xb2, 0x99, 0x53, 0x9e, 0x12, 0x16, 0xc4, 0xfc, 0x71, 0xc3, - 0x96, 0x4d, 0x0e, 0x02, 0x1d, 0xf7, 0xf9, 0x20, 0xfe, 0x2d, 0xdb, 0xdf, - 0x10, 0x0b, 0x5a, 0x9b, 0xda, 0x46, 0xc8, 0xe9, 0xa5, 0x34, 0xad, 0x38, - 0x4b, 0xe9, 0x08, 0x11, 0xfd, 0xc7, 0xb9, 0x52, 0xbd, 0x31, 0x2f, 0x9b, - 0xdf, 0xf5, 0x0b, 0x79, 0xe1, 0x2c, 0x7a, 0xe8, 0xcd, 0x35, 0xa5, 0xf9, - 0x3b, 0x76, 0x86, 0xcf, 0x46, 0xf7, 0x2a, 0x6b, 0xec, 0x24, 0xed, 0x82, - 0x29, 0xee, 0xd3, 0x0f, 0xd0, 0x1b, 0xa3, 0xfd, 0x55, 0xa3, 0x57, 0x49, - 0xe0, 0x32, 0x32, 0xbe, 0x44, 0x05, 0x0b, 0x99, 0x04, 0x5c, 0xd5, 0xde, - 0x75, 0x6d, 0xcd, 0xf4, 0xc0, 0x28, 0x96, 0xa1, 0xd9, 0x0c, 0xb3, 0xc9, - 0x16, 0x3c, 0x44, 0x91, 0xd2, 0xab, 0xf2, 0x3d, 0x52, 0x0a, 0xaa, 0xf3, - 0x72, 0xb8, 0x81, 0x8c, 0x1f, 0xdc, 0x29, 0x86, 0x7e, 0x48, 0x6d, 0x39, - 0xa9, 0x92, 0xd9, 0x51, 0x44, 0x0e, 0x96, 0x46, 0xce, 0xf9, 0x6a, 0xfa, - 0xd1, 0xb5, 0xc8, 0xa3, 0xac, 0x97, 0xdf, 0x94, 0xa0, 0x10, 0xfc, 0x65, - 0xa6, 0xcf, 0x54, 0x27, 0x16, 0xca, 0xa8, 0xad, 0xee, 0x68, 0xf6, 0x13, - 0x12, 0x2b, 0x46, 0x78, 0xe4, 0x7a, 0x27, 0xa4, 0x38, 0x77, 0xdf, 0x35, - 0x08, 0x98, 0x11, 0x78, 0x67, 0xde, 0xd0, 0xb2, 0x1f, 0x67, 0xe3, 0x09, - 0xf6, 0xc9, 0xf4, 0xc8, 0x40, 0xb8, 0x69, 0x3b, 0xdb, 0x5c, 0xad, 0x87, - 0xcc, 0x46, 0xb2, 0xc4, 0x3e, 0x91, 0x57, 0xec, 0xe0, 0x23, 0x9a, 0x99, - 0x83, 0x73, 0x01, 0x40, 0x6e, 0x52, 0x73, 0xfa, 0x57, 0x62, 0xa8, 0x2f, - 0xab, 0x8a, 0x0f, 0xf5, 0x6c, 0xde, 0x79, 0x19, 0xae, 0x03, 0x46, 0xc2, - 0xc5, 0x3b, 0x8c, 0xa9, 0x79, 0x3d, 0xe4, 0xb2, 0x04, 0x3a, 0x96, 0xd9, - 0x0c, 0x9c, 0x78, 0xa6, 0x3e, 0x43, 0x05, 0x3e, 0x2d, 0x02, 0xa9, 0xec, - 0xc4, 0xa7, 0x4d, 0x6e, 0x56, 0x6b, 0x55, 0x14, 0x4d, 0x1b, 0x87, 0x7e, - 0xf1, 0x92, 0x6e, 0xe2, 0x3e, 0x41, 0x06, 0xc7, 0x8a, 0xe2, 0x9e, 0x7b, - 0xc6, 0x2f, 0x88, 0xc3, 0xa1, 0x84, 0xe1, 0x0a, 0xff, 0x94, 0xa2, 0xcd, - 0xd1, 0x93, 0xaf, 0x5c, 0x39, 0x81, 0x90, 0x6f, 0x43, 0x34, 0x26, 0xeb, - 0x72, 0x0f, 0x99, 0x07, 0xe2, 0xf8, 0xaa, 0xb9, 0x57, 0x36, 0xbc, 0xe9, - 0x7d, 0xa9, 0x9e, 0x19, 0xf5, 0x46, 0x3c, 0x18, 0x58, 0xdf, 0x23, 0xa2, - 0x87, 0x89, 0x5e, 0xd6, 0x91, 0x5d, 0xeb, 0x1f, 0x95, 0x6d, 0x3f, 0x8a, - 0xde, 0x5b, 0x5a, 0x9f, 0xd3, 0xf8, 0xab, 0xf8, 0x87, 0x77, 0xd4, 0xf1, - 0x44, 0xa5, 0x59, 0x93, 0x45, 0xdc, 0x67, 0xeb, 0x20, 0x94, 0x6b, 0x4c, - 0x44, 0xdf, 0x02, 0xe9, 0x4f, 0x72, 0x83, 0x5f, 0x90, 0x06, 0x6c, 0x41, - 0x56, 0x78, 0xb2, 0x51, 0x33, 0xc6, 0x70, 0xa9, 0x7a, 0x64, 0xe0, 0xb1, - 0xd6, 0x24, 0xdc, 0x75, 0xc6, 0xea, 0x5d, 0xcf, 0x2c, 0x2e, 0xc8, 0x50, - 0x43, 0x9c, 0x3c, 0x6c, 0xc8, 0x6c, 0x5b, 0xff, 0xdf, 0x1a, 0x47, 0x82, - 0x6e, 0xde, 0x23, 0x16, 0xca, 0x57, 0xa9, 0xfb, 0xe5, 0xb1, 0xf9, 0xff, - 0x53, 0xde, 0xa7, 0x15, 0xf6, 0x13, 0x18, 0xf9, 0x1f, 0x33, 0xd5, 0xad, - 0xf8, 0x0a, 0x0a, 0x0c, 0x2d, 0xc0, 0xd3, 0xbc, 0xc0, 0xa5, 0xe3, 0x95, - 0xb5, 0xf9, 0x76, 0xda, 0xb2, 0x12, 0xfa, 0x83, 0x65, 0xb6, 0x0a, 0x14, - 0x65, 0x8e, 0x75, 0x4b, 0x88, 0x71, 0x97, 0xb3, 0xcc, 0x2c, 0x91, 0x0d, - 0xbe, 0x98, 0x92, 0xca, 0x73, 0xe8, 0x0f, 0xe0, 0x58, 0x76, 0x03, 0x24, - 0xa0, 0x17, 0xc6, 0x35, 0x2f, 0x75, 0x7f, 0x88, 0x12, 0xa6, 0x36, 0x59, - 0x05, 0x72, 0x1f, 0xe1, 0x9c, 0x34, 0x70, 0xf0, 0x16, 0xe8, 0x6e, 0xe3, - 0x2d, 0xc9, 0x50, 0x49, 0x50, 0xb0, 0x51, 0xd9, 0x62, 0xf1, 0x0f, 0x2a, - 0x77, 0x69, 0x8d, 0x53, 0x39, 0x6b, 0xa4, 0xfd, 0xe1, 0xd0, 0x76, 0x67, - 0x62, 0x74, 0x0e, 0xc7, 0x3d, 0xf3, 0x3c, 0xee, 0xbb, 0xd9, 0x56, 0x42, - 0x90, 0xf5, 0xd1, 0x6f, 0xf7, 0x13, 0xd6, 0xdc, 0x5e, 0xd6, 0x7b, 0x9c, - 0x4a, 0x63, 0x78, 0x56, 0xd2, 0x03, 0xa2, 0x33, 0xb1, 0x5e, 0x54, 0xba, - 0xb3, 0x5c, 0xd4, 0xd2, 0x30, 0xb4, 0x59, 0x80, 0xe7, 0xeb, 0xd9, 0x4b, - 0xa8, 0x1d, 0x35, 0xd2, 0x33, 0x67, 0x6a, 0xc8, 0x3e, 0x71, 0x4c, 0xc2, - 0x8b, 0xe2, 0x56, 0x1c, 0x0a, 0xec, 0xb8, 0xb8, 0xe4, 0xef, 0x22, 0xcd, - 0xb9, 0xf7, 0x5b, 0xba, 0x3b, 0xf1, 0xb9, 0xba, 0xdb, 0xe7, 0xc7, 0xae, - 0x0f, 0x9f, 0xa5, 0x79, 0x4c, 0x84, 0x25, 0x2c, 0x50, 0x65, 0x64, 0x01, - 0x7c, 0xe4, 0xc3, 0xd5, 0x81, 0xe6, 0x06, 0x6f, 0x1e, 0x79, 0x3b, 0x2a, - 0x9f, 0x8e, 0x09, 0xb8, 0xab, 0x3b, 0xa7, 0xce, 0x17, 0x70, 0x64, 0x29, - 0xa3, 0x72, 0x0f, 0x61, 0x75, 0x77, 0xd1, 0xd7, 0x0d, 0x62, 0xc9, 0xad, - 0xe1, 0x19, 0xd9, 0x49, 0x0a, 0x49, 0x88, 0x34, 0xa2, 0xa6, 0x1a, 0x3d, - 0x1d, 0xd2, 0x95, 0x63, 0x88, 0x84, 0xaf, 0x92, 0x41, 0x50, 0x63, 0x6b, - 0x15, 0x13, 0xda, 0x65, 0xd6, 0x47, 0x3d, 0xf0, 0x7c, 0x7e, 0xa1, 0xe4, - 0x10, 0x63, 0xa3, 0xa3, 0xf5, 0x9d, 0x4f, 0xac, 0xb9, 0x48, 0x92, 0x37, - 0xcc, 0x6f, 0xc3, 0xfe, 0x55, 0xf1, 0xd5, 0x94, 0x4d, 0xf6, 0x5b, 0x49, - 0x5d, 0xbb, 0xc2, 0x2e, 0xd4, 0x2f, 0x2b, 0xe1, 0x08, 0xa1, 0x4c, 0x48, - 0xce, 0xf8, 0x3b, 0x56, 0x2d, 0xe6, 0xa3, 0xa0, 0xd1, 0xf8, 0xfc, 0x16, - 0x30, 0xd1, 0xaa, 0xbd, 0x7f, 0x95, 0xe4, 0xe5, 0x74, 0xe6, 0x34, 0x74, - 0xe1, 0x6d, 0xc9, 0xb4, 0xc3, 0x8f, 0xae, 0x04, 0xd9, 0x11, 0xd1, 0x26, - 0xdd, 0x46, 0x89, 0x1f, 0xf0, 0x78, 0xa6, 0x1d, 0xa0, 0xa1, 0x38, 0x23, - 0x33, 0xb1, 0x39, 0xde, 0x7b, 0x54, 0x51, 0xa4, 0xf4, 0x94, 0xe8, 0x47, - 0xac, 0xa9, 0xbe, 0xf7, 0x34, 0xad, 0x21, 0x32, 0xe6, 0x1a, 0x81, 0xf4, - 0x0d, 0x27, 0x7e, 0x64, 0x14, 0x66, 0xcb, 0x56, 0xff, 0x00, 0xcc, 0xf4, - 0x73, 0x54, 0xba, 0xe1, 0x27, 0x42, 0xbb, 0x8b, 0xce, 0x38, 0x2d, 0xc1, - 0x76, 0x05, 0xe6, 0x99, 0x03, 0x8d, 0x23, 0xd7, 0x9b, 0xa0, 0x7d, 0x13, - 0xdb, 0xba, 0xc7, 0x81, 0x81, 0x3c, 0x37, 0xba, 0x16, 0x23, 0x7e, 0x32, - 0x4e, 0xac, 0xaa, 0xf5, 0x67, 0xed, 0x43, 0xc3, 0x42, 0x80, 0xae, 0x54, - 0x1f, 0xc2, 0xa2, 0xfa, 0x48, 0xce, 0x6b, 0xbd, 0xce, 0x15, 0x6a, 0xc0, - 0xb3, 0x7c, 0x30, 0xa7, 0xdd, 0x37, 0x2b, 0xb9, 0xb5, 0xc0, 0x2b, 0xcb, - 0xf6, 0x97, 0x0d, 0x28, 0xbc, 0x66, 0x37, 0xe8, 0x01, 0xb6, 0xf8, 0x07, - 0x0c, 0xa9, 0x2e, 0xd5, 0x2d, 0x6e, 0xdd, 0x00, 0xad, 0x0a, 0x6b, 0x6c, - 0x63, 0xc8, 0xbc, 0x8e, 0xf0, 0x37, 0x1a, 0xb9, 0xb0, 0x00, 0x27, 0xce, - 0x49, 0x50, 0xaa, 0x20, 0xf9, 0xbd, 0xae, 0x10, 0x37, 0x69, 0x4d, 0x11, - 0xe8, 0x18, 0x7a, 0xfc, 0xcd, 0x91, 0x00, 0x0a, 0x4b, 0xe8, 0x71, 0x4e, - 0xe3, 0x27, 0x3e, 0x84, 0x8f, 0xcf, 0xd8, 0xa9, 0x6c, 0xd6, 0x78, 0xc0, - 0x06, 0x83, 0x60, 0x8a, 0x45, 0x78, 0x60, 0xf2, 0x6c, 0x61, 0x6f, 0xf1, - 0x2f, 0x3f, 0x7b, 0xa5, 0xd8, 0x5e, 0x7b, 0x13, 0xba, 0xfd, 0x1d, 0x3e, - 0xb3, 0x21, 0x26, 0xe4, 0x8f, 0x78, 0xd7, 0xa4, 0x80, 0x0b, 0x48, 0x96, - 0xbe, 0x02, 0x45, 0x14, 0xa9, 0xe7, 0x6b, 0xcd, 0xa0, 0xa1, 0x3c, 0x44, - 0x66, 0x7b, 0xba, 0xf5, 0xf2, 0x2a, 0xad, 0x71, 0x1a, 0x15, 0x6f, 0xda, - 0x86, 0x91, 0x4e, 0x80, 0x8f, 0xdf, 0x26, 0x6d, 0x56, 0x75, 0x0d, 0x48, - 0xd9, 0xea, 0xd5, 0xf8, 0xab, 0x03, 0x62, 0xa3, 0x78, 0x20, 0xe7, 0x16, - 0x3e, 0x32, 0x72, 0x1f, 0xfd, 0xbe, 0xda, 0xd6, 0x83, 0xcb, 0x1a, 0x3d, - 0x01, 0x41, 0x9b, 0x4e, 0x85, 0xbf, 0x35, 0xa1, 0xd5, 0xac, 0x08, 0xf7, - 0x9c, 0xfb, 0x1d, 0x0a, 0x98, 0x6f, 0x6e, 0x9a, 0x90, 0xae, 0x09, 0x8e, - 0x35, 0xda, 0x22, 0xc2, 0xc2, 0x71, 0xf3, 0x8e, 0x49, 0x4b, 0xd4, 0x9b, - 0x21, 0x76, 0x54, 0xf8, 0xca, 0x99, 0x3a, 0x7d, 0xc3, 0xe9, 0xef, 0xf7, - 0x69, 0x57, 0x4f, 0xfb, 0x61, 0x4a, 0x30, 0xd2, 0xdc, 0xd5, 0x97, 0x16, - 0xfe, 0x32, 0x4e, 0xa7, 0x57, 0x04, 0xda, 0x2d, 0x61, 0x90, 0xf9, 0x48, - 0xfe, 0x7a, 0x3d, 0x7a, 0xcb, 0x5e, 0x3b, 0xa8, 0x80, 0xce, 0x58, 0xb3, - 0x03, 0xbf, 0xe2, 0x1e, 0x39, 0xf6, 0x8f, 0x6d, 0x7e, 0xbd, 0x15, 0x7f, - 0xc2, 0xb1, 0x33, 0x9d, 0xd0, 0x9d, 0x30, 0xa7, 0x09, 0xef, 0xd6, 0x4d, - 0x84, 0xac, 0x55, 0x37, 0x07, 0x7b, 0x4f, 0xbb, 0x65, 0xed, 0x36, 0xf6, - 0x8f, 0x32, 0xf7, 0x89, 0xde, 0x7a, 0x7f, 0x2e, 0xfc, 0x59, 0xab, 0xaf, - 0xed, 0x09, 0x64, 0x38, 0x96, 0x66, 0xd6, 0xf9, 0x42, 0x90, 0x47, 0xbc, - 0x14, 0x04, 0xff, 0xdb, 0x0b, 0x27, 0xb2, 0x0b, 0xe7, 0x78, 0xba, 0x87, - 0x0c, 0x39, 0x13, 0xba, 0x02, 0x77, 0xee, 0x8f, 0xb9, 0xc9, 0x10, 0x35, - 0x1c, 0xf0, 0xcb, 0x8f, 0x77, 0xce, 0xd8, 0x8e, 0x5c, 0x39, 0x6c, 0x09, - 0x82, 0x0b, 0x98, 0x53, 0x8d, 0x88, 0x91, 0xb9, 0x36, 0x4d, 0x26, 0x8c, - 0xc2, 0xc9, 0xc9, 0x5c, 0x03, 0xae, 0x56, 0xf0, 0x63, 0x77, 0x38, 0x7c, - 0xf4, 0xae, 0xda, 0x54, 0x18, 0x15, 0xa3, 0x0a, 0x59, 0xf9, 0xa0, 0xdd, - 0x81, 0xfc, 0x10, 0x29, 0xf9, 0x92, 0x82, 0x5d, 0xff, 0x1f, 0x26, 0x79, - 0x84, 0x57, 0x7f, 0x27, 0xaa, 0x37, 0xf9, 0x94, 0x9b, 0xd1, 0x61, 0x70, - 0xf2, 0x03, 0xa8, 0x40, 0x4d, 0x44, 0x0b, 0xe5, 0x7f, 0x56, 0xdb, 0x4b, - 0xb2, 0xb9, 0xaf, 0x1c, 0x92, 0x01, 0x6e, 0x02, 0xdb, 0xa7, 0x44, 0xa7, - 0x4b, 0xb0, 0x28, 0x63, 0xec, 0x5d, 0x33, 0xe5, 0x46, 0x0b, 0x31, 0xad, - 0xd9, 0x31, 0x4a, 0x3a, 0xe8, 0x64, 0xed, 0xea, 0x76, 0x65, 0xa7, 0xf3, - 0x8d, 0x2c, 0x77, 0xbf, 0xcc, 0x0d, 0xd8, 0xa0, 0x87, 0x22, 0x1e, 0x60, - 0x30, 0x1e, 0xf4, 0x94, 0x3c, 0xdd, 0x31, 0x77, 0x61, 0x03, 0x09, 0xa2, - 0xac, 0x2d, 0x7c, 0x2b, 0x7b, 0xe3, 0x26, 0x65, 0x5d, 0xf3, 0xc8, 0x43, - 0x7f, 0x92, 0xea, 0x98, 0x74, 0xe9, 0x81, 0xc4, 0x89, 0xfa, 0xae, 0x2e, - 0xaf, 0x52, 0xa7, 0xd9, 0xb3, 0x88, 0x54, 0x8c, 0x57, 0x1c, 0xec, 0xf0, - 0x35, 0x70, 0x44, 0x48, 0x15, 0x13, 0xc8, 0x6e, 0xe2, 0x88, 0xac, 0xfc, - 0x2f, 0xff, 0xfe, 0xda, 0xd2, 0x38, 0xc4, 0x2a, 0xd4, 0xe6, 0x9e, 0x2b, - 0x26, 0x53, 0x8b, 0xa9, 0xc8, 0x98, 0x7f, 0xb8, 0x14, 0x4f, 0x5d, 0xef, - 0xd0, 0xd1, 0x20, 0xf9, 0x49, 0x78, 0xe5, 0x9d, 0xf0, 0x23, 0xa4, 0xc5, - 0x1b, 0x05, 0x93, 0x36, 0x66, 0x05, 0x34, 0xb3, 0xc5, 0xe9, 0xe3, 0x8f, - 0xad, 0xb0, 0x71, 0x3c, 0x7a, 0xbd, 0x94, 0x84, 0x87, 0xea, 0xb6, 0xb9, - 0xf1, 0x69, 0xf7, 0x3c, 0x70, 0x3d, 0x85, 0x35, 0x8d, 0x0b, 0xc6, 0x08, - 0x3f, 0x45, 0x97, 0xc5, 0xf8, 0x1b, 0x7a, 0x0c, 0x7e, 0x54, 0xaf, 0xfb, - 0x1d, 0xdc, 0x7a, 0x2f, 0x70, 0xc5, 0xa2, 0x6e, 0x33, 0x36, 0x0a, 0xd8, - 0xaa, 0x57, 0xa1, 0x51, 0xce, 0xa3, 0x42, 0x65, 0x93, 0x58, 0xa5, 0x81, - 0x06, 0x71, 0x4e, 0xf7, 0x88, 0x4e, 0xfa, 0xba, 0xc0, 0xa5, 0x57, 0x78, - 0x8c, 0xd8, 0x4c, 0x06, 0xf7, 0x20, 0xf1, 0x38, 0xfb, 0x22, 0xc0, 0x2d, - 0x1d, 0xa9, 0xf5, 0x75, 0xf1, 0x5f, 0x5b, 0x29, 0xe5, 0xd1, 0x41, 0xd8, - 0x89, 0x07, 0x3d, 0x05, 0xb8, 0xd0, 0xfb, 0xfc, 0x89, 0x99, 0x29, 0x17, - 0x80, 0xcc, 0xd3, 0xc3, 0x9e, 0x77, 0x12, 0xf1, 0x54, 0x6c, 0x41, 0xfe, - 0x1e, 0x8b, 0xe9, 0x14, 0x99, 0x22, 0x27, 0xdf, 0x04, 0x07, 0x9a, 0x7e, - 0xe4, 0xaa, 0xed, 0x48, 0xdd, 0x6d, 0xc3, 0xe8, 0x97, 0xb0, 0xa1, 0x33, - 0xb1, 0x0f, 0xde, 0xd9, 0x3f, 0xf1, 0x97, 0x9e, 0xc4, 0xd9, 0x13, 0xd0, - 0x09, 0xb7, 0xf1, 0x7f, 0xd5, 0xf3, 0xe6, 0x18, 0x14, 0x9e, 0xcb, 0x50, - 0x1e, 0x5d, 0x78, 0x24, 0x37, 0xb0, 0x67, 0x6f, 0x92, 0x18, 0xb1, 0x45, - 0xc3, 0x3c, 0x7c, 0xef, 0xe6, 0x43, 0x37, 0xd3, 0x0a, 0x92, 0xcb, 0x07, - 0x19, 0x11, 0xba, 0xa3, 0xe7, 0x26, 0xa6, 0xa7, 0x10, 0x0c, 0xb3, 0x16, - 0xce, 0x44, 0x81, 0x52, 0x3c, 0x13, 0xc6, 0xd7, 0xf6, 0x81, 0x5e, 0xa1, - 0x30, 0x95, 0xac, 0xce, 0x3b, 0x08, 0xbf, 0xff, 0x10, 0xc9, 0x08, 0xe6, - 0x95, 0x46, 0x28, 0x9b, 0x68, 0xa4, 0xc0, 0x01, 0xcb, 0x6d, 0x48, 0x53, - 0x7f, 0x31, 0xde, 0x25, 0xa0, 0x60, 0xd1, 0x22, 0x9a, 0x71, 0xf7, 0xf4, - 0x15, 0x37, 0x6a, 0x8e, 0x05, 0x26, 0x4b, 0x12, 0xe5, 0x67, 0x42, 0x7c, - 0x11, 0xc4, 0xd9, 0x79, 0xcc, 0x7c, 0x37, 0x7c, 0x82, 0x81, 0x3d, 0x54, - 0xc1, 0xff, 0xdd, 0x75, 0x9b, 0x10, 0x6a, 0x93, 0x46, 0xfa, 0x6b, 0x44, - 0xa8, 0x4b, 0x17, 0x93, 0x38, 0x95, 0xd6, 0xc7, 0x1b, 0x50, 0x64, 0x81, - 0x7e, 0x5e, 0x51, 0x93, 0xbe, 0x8a, 0x11, 0x46, 0x20, 0xfa, 0xc8, 0x32, - 0xd0, 0x78, 0x23, 0xa9, 0xb0, 0xba, 0xc4, 0xcd, 0x5c, 0xf3, 0xd8, 0xff, - 0xc0, 0x52, 0xe6, 0x3b, 0x99, 0xd1, 0xd4, 0x5d, 0xd1, 0x26, 0xfc, 0x8a, - 0x6a, 0x50, 0x50, 0x31, 0x8a, 0xd5, 0xbe, 0x8f, 0xd7, 0xc3, 0x66, 0xcb, - 0x6f, 0x8a, 0x92, 0x6d, 0x9e, 0x93, 0x92, 0xb4, 0xbf, 0x96, 0xf9, 0x08, - 0x7f, 0xe0, 0xa8, 0x0a, 0xc8, 0x4e, 0xb5, 0x70, 0x34, 0x08, 0xaa, 0xf4, - 0x1d, 0x3b, 0xef, 0x27, 0xab, 0x5a, 0xe7, 0xa7, 0x92, 0x65, 0x29, 0xaa, - 0x8d, 0x41, 0x42, 0x75, 0x35, 0x57, 0xcb, 0x0a, 0x39, 0x86, 0x04, 0x90, - 0xf3, 0xa2, 0x34, 0x1a, 0xfa, 0xd5, 0x48, 0x12, 0x46, 0x47, 0xf9, 0xd7, - 0xda, 0xda, 0x5e, 0xe8, 0xef, 0x0e, 0x1f, 0x1e, 0xc3, 0xe9, 0xd1, 0x9d, - 0xf8, 0x61, 0x99, 0xdf, 0x08, 0x70, 0x88, 0x0c, 0xf3, 0x9f, 0x74, 0x65, - 0x68, 0xd5, 0xf5, 0xe7, 0x4f, 0xc8, 0xc7, 0x79, 0x69, 0x75, 0x6b, 0xd9, - 0x13, 0xb4, 0x31, 0x88, 0x32, 0xd7, 0xba, 0xab, 0xe8, 0x4e, 0x77, 0x9e, - 0xb2, 0x9e, 0x68, 0xc5, 0xac, 0x7e, 0xca, 0xd7, 0x05, 0xd1, 0x9b, 0x3d, - 0x63, 0x6f, 0x55, 0xcc, 0xe6, 0x39, 0x09, 0x13, 0xe7, 0xfd, 0x99, 0x34, - 0x1f, 0x8e, 0xc4, 0x7f, 0x95, 0x5d, 0x79, 0x22, 0x3a, 0xc5, 0x23, 0x1c, - 0x39, 0xbe, 0x76, 0x7b, 0x37, 0x41, 0x0e, 0xcc, 0xd2, 0xc7, 0xc1, 0x9c, - 0x28, 0x9a, 0x29, 0xf9, 0x8c, 0x5a, 0x98, 0x4a, 0x13, 0xa5, 0x6c, 0xc6, - 0x77, 0x38, 0xb8, 0x31, 0x6c, 0x8f, 0xdc, 0x94, 0x4b, 0x1c, 0x1c, 0x7d, - 0x53, 0xad, 0xd4, 0x57, 0x4d, 0x6e, 0x90, 0x30, 0x83, 0x21, 0xf4, 0x4e, - 0x65, 0x77, 0x60, 0x8b, 0xf1, 0x2c, 0x66, 0x01, 0xcf, 0x58, 0x9f, 0x43, - 0x71, 0x76, 0x25, 0xe5, 0x9e, 0x09, 0x94, 0x5f, 0xca, 0x19, 0xe3, 0xe3, - 0x89, 0x44, 0xd6, 0x45, 0xe1, 0x92, 0x3b, 0x8d, 0xae, 0x38, 0xfe, 0x65, - 0x65, 0xf8, 0x48, 0xcc, 0x5d, 0x7d, 0xed, 0xd6, 0xe1, 0x47, 0x4b, 0x3a, - 0xec, 0xe3, 0x2d, 0xe9, 0x10, 0x8f, 0xa6, 0x78, 0xf9, 0x1c, 0xfe, 0x89, - 0x0d, 0x1c, 0x19, 0x45, 0x52, 0xb6, 0x02, 0x32, 0x92, 0x25, 0xc8, 0x88, - 0x8a, 0x9c, 0xc0, 0xcf, 0x9b, 0x27, 0x1c, 0x43, 0xb9, 0x04, 0xbc, 0x02, - 0xac, 0x34, 0xef, 0x6d, 0x7a, 0x5f, 0x58, 0x74, 0x1b, 0xa9, 0x98, 0x3e, - 0x92, 0x0f, 0x26, 0x11, 0x75, 0x9f, 0x45, 0xa9, 0xe1, 0x5c, 0x37, 0xbe, - 0xfd, 0xd7, 0x28, 0xcd, 0x72, 0xdc, 0xc6, 0x9b, 0x2c, 0xaa, 0x23, 0xb6, - 0x8e, 0x18, 0x0d, 0x8b, 0xe7, 0x1a, 0xe4, 0xba, 0x72, 0x0c, 0x75, 0xa8, - 0x04, 0xed, 0xbe, 0xce, 0xd4, 0xbd, 0x2e, 0xd5, 0x74, 0xd5, 0x46, 0xa1, - 0x27, 0xdf, 0x49, 0x7d, 0x4f, 0xf2, 0x93, 0x08, 0xbb, 0x18, 0x6f, 0xc8, - 0xde, 0x99, 0x50, 0x5a, 0x10, 0x6f, 0xaf, 0xbb, 0xb6, 0xc3, 0x10, 0x41, - 0xc1, 0xe4, 0xe4, 0x3c, 0x83, 0xdb, 0xee, 0x0d, 0xc0, 0x50, 0xe4, 0x93, - 0x1d, 0xd7, 0x9d, 0x7c, 0x6b, 0xc0, 0x62, 0xf1, 0x34, 0x39, 0xaa, 0xef, - 0xd9, 0x3c, 0x21, 0x2e, 0x78, 0xd3, 0x27, 0x3f, 0x74, 0x3d, 0x97, 0xa0, - 0x76, 0x0a, 0xdc, 0x91, 0xb1, 0x25, 0x71, 0x70, 0x83, 0xef, 0xbb, 0x7d, - 0x4d, 0xcb, 0xea, 0x63, 0xd9, 0x45, 0x9c, 0x4e, 0xca, 0x74, 0x9f, 0x68, - 0xa1, 0x3d, 0x51, 0x28, 0x94, 0x8f, 0x2a, 0xcc, 0x8c, 0x16, 0x22, 0x1e, - 0x8e, 0x0a, 0xcc, 0xe8, 0x82, 0x8e, 0x1d, 0xdd, 0xfe, 0x6f, 0x53, 0x5e, - 0xae, 0x05, 0xf4, 0x06, 0xb3, 0xe9, 0x2d, 0xa9, 0x35, 0xab, 0x97, 0xe0, - 0xaf, 0x85, 0xee, 0x08, 0xdc, 0x9a, 0x95, 0xce, 0x4d, 0x66, 0x1e, 0x47, - 0xdf, 0x7c, 0x5f, 0x99, 0x61, 0xad, 0x01, 0x0f, 0xfa, 0xf1, 0x92, 0x32, - 0x12, 0x7d, 0xa8, 0xf5, 0xb1, 0x8a, 0xfb, 0x0b, 0x32, 0xa9, 0xe5, 0x84, - 0x52, 0x50, 0xcd, 0x79, 0x01, 0x56, 0xf2, 0x2e, 0xba, 0xda, 0x8b, 0x70, - 0xd6, 0x05, 0x72, 0xee, 0xef, 0x2c, 0xbd, 0x26, 0x84, 0x34, 0x8a, 0x9d, - 0xcc, 0x02, 0x74, 0x18, 0x20, 0x27, 0xff, 0x0b, 0x2d, 0x38, 0x36, 0x0a, - 0x2f, 0xfd, 0xc6, 0xd8, 0x30, 0x4f, 0x51, 0x74, 0x78, 0xbf, 0x52, 0xff, - 0xee, 0x9f, 0xe7, 0xeb, 0xfc, 0xf9, 0xef, 0x69, 0x3c, 0xc5, 0xa6, 0xcc, - 0x14, 0x9a, 0x1d, 0x83, 0x94, 0xf6, 0x58, 0xd6, 0x0e, 0xe8, 0x51, 0xf7, - 0xce, 0x17, 0xcf, 0x23, 0x66, 0x9d, 0x1c, 0x17, 0x63, 0x2e, 0xcf, 0x3b, - 0x6c, 0xcb, 0xb9, 0x33, 0x03, 0x11, 0xc7, 0x3f, 0x4b, 0x8d, 0xee, 0xf8, - 0xe3, 0xf9, 0x49, 0x81, 0x5c, 0xb0, 0xb4, 0x3f, 0xd8, 0x3c, 0xe6, 0x6f, - 0x9d, 0xad, 0x2a, 0xc0, 0x24, 0xb1, 0xcf, 0x63, 0xdd, 0xc6, 0x32, 0x5f, - 0x14, 0x92, 0x34, 0x94, 0xd1, 0x2a, 0xb2, 0xfa, 0x96, 0x80, 0xe8, 0xf8, - 0xdc, 0x4b, 0x5b, 0x40, 0x05, 0x90, 0x21, 0x33, 0xd3, 0x3c, 0x34, 0x71, - 0x52, 0xfc, 0x07, 0x7b, 0x86, 0x5d, 0xbb, 0xca, 0x6d, 0xde, 0xad, 0x57, - 0x79, 0xaa, 0x21, 0x8e, 0x1e, 0x32, 0xc5, 0xce, 0xb8, 0x5f, 0xa8, 0xac, - 0x83, 0x62, 0x97, 0xde, 0xfc, 0x98, 0x67, 0x58, 0xe2, 0xd3, 0x41, 0xc5, - 0x5e, 0x7a, 0x22, 0x74, 0x12, 0x76, 0xca, 0xb4, 0x32, 0xb4, 0xb5, 0xe7, - 0x57, 0x36, 0x73, 0x82, 0xd1, 0x5c, 0x8f, 0xc9, 0x9b, 0x97, 0x05, 0x2b, - 0x79, 0x79, 0xed, 0xeb, 0x05, 0x3d, 0x07, 0xb7, 0xa8, 0x87, 0xab, 0x0e, - 0x63, 0x0f, 0x04, 0xf9, 0xa8, 0x38, 0xae, 0x9d, 0xcd, 0xd6, 0x47, 0xa3, - 0xab, 0xf9, 0x7d, 0x18, 0x3d, 0xa3, 0x06, 0x4f, 0x64, 0x9a, 0x17, 0x46, - 0x54, 0x24, 0xb3, 0xca, 0xa8, 0xb4, 0x3d, 0x4f, 0x67, 0x1f, 0x4a, 0xe5, - 0x4a, 0x5b, 0xf5, 0x1e, 0xd1, 0x3e, 0x3b, 0x0c, 0x5f, 0xc6, 0x88, 0x6d, - 0xd8, 0xc4, 0xb8, 0x34, 0x6b, 0xe9, 0xd0, 0xa4, 0x6d, 0xd2, 0x4d, 0x47, - 0x22, 0x15, 0xfe, 0x80, 0x53, 0xf4, 0xc4, 0x32, 0x87, 0xe4, 0x2b, 0x8c, - 0x7f, 0x5f, 0x00, 0x28, 0xa7, 0x03, 0x90, 0xb0, 0x9d, 0x18, 0x72, 0x05, - 0xc7, 0xcc, 0xf7, 0xb8, 0xd3, 0xfb, 0x01, 0xc8, 0xb8, 0x77, 0x9f, 0xae, - 0x4a, 0x36, 0xcd, 0x0e, 0x96, 0x79, 0x70, 0x71, 0x05, 0x4e, 0x00, 0x93, - 0x9d, 0x83, 0x8c, 0xe5, 0x0a, 0x9d, 0xb8, 0xcf, 0xad, 0xfd, 0xda, 0x69, - 0x0f, 0xf1, 0xb7, 0x3d, 0xa3, 0xfe, 0xcb, 0x71, 0xbf, 0x85, 0x66, 0x51, - 0x80, 0x37, 0xe7, 0x08, 0xf8, 0x91, 0xda, 0xfa, 0x93, 0x3f, 0xa1, 0xcc, - 0x2c, 0x91, 0x58, 0x36, 0x72, 0x6e, 0xdf, 0x7f, 0x1c, 0x8b, 0x08, 0x1b, - 0xeb, 0x13, 0x06, 0xcd, 0x36, 0x30, 0xc8, 0x96, 0x27, 0xc4, 0xb1, 0x33, - 0xce, 0x8b, 0xc6, 0x51, 0x1a, 0x55, 0x64, 0xfa, 0xd5, 0xd9, 0x7c, 0xc5, - 0xb5, 0x8b, 0x46, 0xbf, 0x8e, 0xed, 0x95, 0x2f, 0xb6, 0x81, 0xf1, 0x55, - 0x62, 0x52, 0xee, 0x97, 0x9b, 0xec, 0x2d, 0xf8, 0x7a, 0x9f, 0xc5, 0x7a, - 0xee, 0xc3, 0x10, 0xda, 0xf1, 0x67, 0x96, 0x78, 0xee, 0x37, 0x4a, 0x18, - 0xd8, 0xa9, 0xbd, 0x4a, 0x58, 0x75, 0x2a, 0xdd, 0xb6, 0xf2, 0x7f, 0xaf, - 0xff, 0xd6, 0x6d, 0x19, 0xe0, 0x7d, 0xb0, 0x2c, 0x9c, 0x69, 0x24, 0xb9, - 0x9b, 0x17, 0x53, 0xe5, 0x73, 0x99, 0xaf, 0xb7, 0xa2, 0x4d, 0x4f, 0xc0, - 0xcf, 0x7c, 0xee, 0x6e, 0x2e, 0xbe, 0xbb, 0xbc, 0x87, 0x04, 0x6a, 0xb8, - 0xa6, 0xba, 0xa1, 0x85, 0x87, 0x2e, 0xbe, 0x34, 0xd8, 0xa8, 0x28, 0x36, - 0x4b, 0x42, 0xbb, 0x56, 0x49, 0xda, 0x18, 0xf7, 0xd1, 0xb2, 0x3f, 0x1f, - 0x03, 0x66, 0x16, 0x5c, 0xd7, 0x65, 0x09, 0x91, 0x5f, 0xd2, 0x02, 0xa8, - 0x90, 0x14, 0x2c, 0x85, 0x51, 0x3b, 0x81, 0x46, 0x6f, 0x27, 0xd1, 0xc8, - 0x84, 0xc5, 0x4e, 0x0b, 0xc9, 0xd1, 0x2d, 0x02, 0xcd, 0x26, 0x26, 0x6f, - 0xa1, 0xfd, 0x13, 0xb4, 0x03, 0x1f, 0xa9, 0x53, 0x54, 0x29, 0xcd, 0x99, - 0x09, 0x63, 0x1a, 0x8a, 0x9d, 0x21, 0x82, 0x3a, 0x27, 0xe4, 0x8f, 0xfd, - 0xfd, 0x11, 0x14, 0xf0, 0x7d, 0xe7, 0x42, 0xee, 0x5b, 0x4a, 0x88, 0x8c, - 0x0a, 0x2b, 0xca, 0xa1, 0xea, 0x83, 0x69, 0xa9, 0xb8, 0xcc, 0x99, 0x1b, - 0x1b, 0x96, 0x86, 0x23, 0x8d, 0x92, 0xd3, 0xef, 0x55, 0x71, 0x1c, 0x9e, - 0x90, 0x4e, 0x34, 0x8b, 0x5c, 0xc7, 0x5a, 0x6d, 0x7e, 0xf8, 0xc9, 0x96, - 0x12, 0x5a, 0x41, 0x21, 0xf7, 0xcb, 0x0d, 0x9c, 0x3f, 0xf5, 0xff, 0xee, - 0x0c, 0xee, 0x66, 0x8a, 0x57, 0x8e, 0x3c, 0xc8, 0xf3, 0xdc, 0x06, 0x64, - 0x2b, 0x2f, 0xd2, 0x4c, 0x4b, 0xdb, 0x57, 0xd7, 0x3d, 0xde, 0xe2, 0xa3, - 0x53, 0xb0, 0x59, 0x4a, 0x54, 0x57, 0x22, 0x58, 0x28, 0x93, 0xf2, 0x4f, - 0x5d, 0xc9, 0x39, 0x88, 0xf5, 0xfe, 0x2e, 0x63, 0x0c, 0x13, 0xd4, 0x74, - 0xe7, 0x99, 0xa5, 0x3b, 0x19, 0x3b, 0x47, 0x4c, 0x0d, 0x53, 0xf9, 0x78, - 0x02, 0xf1, 0xce, 0xc0, 0x2e, 0x98, 0x44, 0xbd, 0x9b, 0xf0, 0x9e, 0x54, - 0x94, 0x6e, 0x85, 0x7a, 0xa4, 0x40, 0x4c, 0xe6, 0x71, 0x90, 0x28, 0x92, - 0x4e, 0x22, 0x9d, 0x5c, 0xec, 0x71, 0x69, 0xc7, 0xe3, 0x2f, 0x7c, 0x85, - 0x64, 0x69, 0x4b, 0xa8, 0x35, 0x9b, 0x00, 0x87, 0xeb, 0xa0, 0xfe, 0xaf, - 0xf8, 0x02, 0x61, 0x29, 0x01, 0xd8, 0x68, 0xce, 0x27, 0x83, 0x54, 0x47, - 0x53, 0xa9, 0xc3, 0x5e, 0x22, 0x36, 0xec, 0xbd, 0x60, 0xe1, 0xe3, 0xf1, - 0x35, 0x73, 0x90, 0x66, 0x2d, 0xc2, 0x86, 0xf0, 0x43, 0xc6, 0x7d, 0x18, - 0x9d, 0xab, 0xe6, 0xed, 0xdc, 0xcf, 0x48, 0x40, 0x44, 0xba, 0x80, 0x78, - 0x96, 0xd7, 0xe1, 0x10, 0xe1, 0x41, 0xa9, 0x21, 0x23, 0x50, 0xfc, 0x81, - 0x14, 0xe1, 0xb9, 0x49, 0xf8, 0xbc, 0x13, 0x4f, 0x3b, 0x39, 0x44, 0x22, - 0xf8, 0x0c, 0x36, 0x33, 0x35, 0xe0, 0x84, 0x75, 0x2e, 0x3e, 0x4e, 0x6b, - 0xd7, 0x3c, 0xc3, 0x67, 0x51, 0x7d, 0x3a, 0xb3, 0x06, 0x32, 0x60, 0x4b, - 0x61, 0x00, 0xaf, 0x15, 0xdd, 0xc2, 0xea, 0x69, 0x6f, 0xa9, 0x79, 0x4e, - 0x45, 0x3b, 0x52, 0xae, 0x5d, 0xfa, 0x7b, 0x38, 0xce, 0xed, 0x56, 0x14, - 0xc2, 0x58, 0xdb, 0xcf, 0x15, 0x04, 0xe4, 0xb3, 0x57, 0x1f, 0x83, 0x00, - 0xcc, 0x07, 0x4d, 0x3c, 0x55, 0xf5, 0x24, 0xe4, 0x97, 0x32, 0xd9, 0x54, - 0x0b, 0x58, 0xb2, 0x3e, 0xe1, 0x24, 0x8a, 0x32, 0xc2, 0x9f, 0x77, 0x1c, - 0x57, 0x5a, 0x19, 0x4d, 0x2d, 0x71, 0x72, 0xd9, 0xd7, 0x28, 0xde, 0xa4, - 0xf8, 0xa5, 0x07, 0x4a, 0x6a, 0xcc, 0x6a, 0x51, 0x7f, 0xca, 0x1c, 0x24, - 0xa4, 0x31, 0xc1, 0x81, 0x2a, 0x14, 0xa4, 0x47, 0x3a, 0x86, 0x80, 0x43, - 0xf1, 0x46, 0x32, 0xc0, 0x86, 0x01, 0xfa, 0x97, 0x08, 0x76, 0xd9, 0x63, - 0x64, 0x9f, 0x75, 0xc1, 0x1c, 0xe6, 0x6d, 0xec, 0x28, 0x48, 0xd0, 0xa4, - 0x11, 0x03, 0xc2, 0x36, 0x62, 0xe8, 0xaf, 0xcb, 0x7d, 0x64, 0xf7, 0xe9, - 0xbd, 0x03, 0x1b, 0x62, 0xe4, 0x5d, 0x2d, 0x79, 0x7d, 0xd6, 0xa6, 0xee, - 0xca, 0x9e, 0x99, 0xec, 0x43, 0xfd, 0xac, 0xa1, 0x7a, 0xb4, 0xbe, 0xbb, - 0x73, 0x13, 0x13, 0xaf, 0xbc, 0x86, 0xf8, 0x53, 0x3e, 0xbd, 0xb0, 0x2c, - 0x05, 0x14, 0xc6, 0xb7, 0xbb, 0xc7, 0x4b, 0x36, 0x24, 0xde, 0x6c, 0x38, - 0xbf, 0xd5, 0x7a, 0xbe, 0x0b, 0x7b, 0xd6, 0x2b, 0xea, 0x5a, 0x14, 0x09, - 0x0c, 0x2b, 0xa5, 0xda, 0xae, 0xe3, 0x42, 0xde, 0x5e, 0x49, 0x73, 0x3d, - 0x3f, 0x99, 0xa1, 0x33, 0x76, 0x25, 0x7a, 0x2c, 0x3f, 0xdf, 0x5a, 0x95, - 0x78, 0x79, 0x32, 0x55, 0xfe, 0xc4, 0xec, 0x2a, 0x61, 0x3c, 0xc8, 0x86, - 0xba, 0xc0, 0x63, 0x90, 0xfe, 0x6f, 0x5b, 0xc9, 0x7f, 0x22, 0xe7, 0xbf, - 0x8a, 0x8d, 0xab, 0x42, 0x1f, 0x54, 0x1b, 0x5d, 0x84, 0xc9, 0x58, 0xe2, - 0x7c, 0x24, 0x54, 0x09, 0x44, 0x3e, 0x7f, 0x64, 0xa7, 0x5c, 0x5f, 0xf3, - 0x31, 0x68, 0x0d, 0x17, 0xb5, 0xaf, 0x5b, 0xee, 0xd8, 0x4c, 0x65, 0xe5, - 0x46, 0xfc, 0x4f, 0xd2, 0x8b, 0xe9, 0x0c, 0x8f, 0xbd, 0x48, 0xe7, 0x89, - 0x07, 0x9b, 0x18, 0x03, 0x2b, 0x74, 0x3d, 0xbb, 0xea, 0x2c, 0x53, 0x49, - 0xad, 0x29, 0xc5, 0x84, 0x8e, 0x79, 0x2e, 0xd2, 0x42, 0xc9, 0xbc, 0x86, - 0x53, 0x42, 0x7c, 0xee, 0x7b, 0xc0, 0xb2, 0x6d, 0x24, 0xd9, 0x25, 0x20, - 0xb0, 0x7d, 0xf1, 0x0f, 0xe3, 0xe7, 0xad, 0xb4, 0x6e, 0x09, 0xea, 0x6c, - 0x5e, 0x93, 0x68, 0xb3, 0x3c, 0x27, 0xaf, 0xe9, 0x7e, 0xac, 0x9c, 0x02, - 0x1c, 0x36, 0xae, 0x4d, 0xbf, 0x7a, 0x5a, 0x1d, 0x28, 0x17, 0xb7, 0x6b, - 0x8c, 0x15, 0xed, 0xca, 0xb7, 0x59, 0xa8, 0x2b, 0x77, 0x61, 0x94, 0x58, - 0x98, 0xdf, 0x1f, 0xa9, 0x66, 0x06, 0x48, 0xce, 0xd5, 0x27, 0xd0, 0x16, - 0x57, 0xb0, 0xe4, 0x4d, 0xdf, 0xd8, 0x91, 0x42, 0xe8, 0x3b, 0x33, 0xb0, - 0xdb, 0xdf, 0xc8, 0xd5, 0x0f, 0xeb, 0xea, 0xc1, 0xfe, 0xa3, 0xc7, 0x07, - 0xb2, 0x23, 0x76, 0x5b, 0x83, 0xf5, 0x39, 0x88, 0xf1, 0x45, 0x24, 0xdf, - 0x90, 0xd8, 0x08, 0xb5, 0x7f, 0x17, 0x4d, 0xc2, 0x1b, 0xe8, 0xaa, 0xb5, - 0x9d, 0xfd, 0xf6, 0xbe, 0x50, 0x86, 0x1c, 0x3c, 0xba, 0x68, 0x98, 0xd6, - 0x95, 0x5c, 0x49, 0xb8, 0x79, 0x9b, 0x0d, 0xe0, 0xa7, 0x5a, 0xe3, 0x0d, - 0x28, 0x93, 0x16, 0xa6, 0x85, 0x23, 0x27, 0x4e, 0x10, 0x68, 0x18, 0xad, - 0x95, 0xb3, 0x57, 0xd0, 0xbd, 0xbe, 0x25, 0xd8, 0x2a, 0x15, 0x3b, 0x56, - 0x48, 0x16, 0x1b, 0x7d, 0x50, 0x09, 0xd4, 0xcd, 0x8d, 0xb8, 0x7a, 0x85, - 0x13, 0xbe, 0x36, 0x49, 0xa5, 0x25, 0x10, 0xdf, 0xc3, 0x08, 0xbc, 0x64, - 0x2c, 0x97, 0x38, 0x8d, 0x69, 0x8c, 0xb9, 0x5c, 0xe9, 0x07, 0x88, 0x5f, - 0xdd, 0xf5, 0x48, 0x74, 0x49, 0xd8, 0x88, 0xac, 0x7f, 0xdb, 0x0d, 0x22, - 0xac, 0x55, 0x40, 0x18, 0x7c, 0x04, 0x08, 0x7d, 0x05, 0x81, 0x71, 0x0f, - 0x65, 0x8f, 0x3b, 0x5f, 0x34, 0x8c, 0xbd, 0xbe, 0x7a, 0xf1, 0xf8, 0x48, - 0x67, 0xb1, 0x74, 0x8b, 0x37, 0xf4, 0xfd, 0x1a, 0x9f, 0x9b, 0x4a, 0x57, - 0xbd, 0x81, 0xf4, 0xf8, 0x56, 0x84, 0x92, 0x24, 0x96, 0x5c, 0x9a, 0x06, - 0x71, 0x4e, 0x2d, 0x61, 0xa2, 0x52, 0x6c, 0x96, 0x07, 0x19, 0x05, 0x02, - 0x58, 0xe6, 0x24, 0x42, 0x21, 0x5f, 0x0f, 0x0a, 0x92, 0x89, 0x6f, 0xf8, - 0x49, 0xa3, 0xd1, 0xf9, 0xd2, 0x22, 0xe4, 0x07, 0x76, 0xff, 0xcb, 0xd6, - 0xa3, 0xdd, 0x58, 0x50, 0x59, 0x18, 0x67, 0x8f, 0x68, 0xdd, 0xd4, 0x68, - 0x0e, 0x2a, 0x58, 0xb9, 0x2d, 0xb1, 0xa7, 0xf6, 0x4d, 0x41, 0x70, 0x39, - 0x23, 0xe5, 0x99, 0x4c, 0x05, 0x2f, 0x04, 0xb5, 0x6f, 0xfc, 0xc1, 0xf1, - 0xac, 0x2b, 0xf4, 0x02, 0x22, 0xce, 0x46, 0xa1, 0x38, 0xef, 0x50, 0xd1, - 0x6b, 0x1f, 0x34, 0xb5, 0x0c, 0x6a, 0xb3, 0x30, 0xe6, 0xa3, 0x91, 0x82, - 0x9a, 0x2d, 0x3c, 0x8f, 0xf6, 0x76, 0x97, 0xe9, 0xb7, 0x92, 0xb7, 0xb1, - 0x1e, 0x19, 0x97, 0xad, 0x1c, 0x6d, 0xd4, 0xe6, 0x2c, 0x5d, 0xe8, 0x33, - 0xf2, 0xc0, 0x17, 0xa2, 0x20, 0xdd, 0x0f, 0x5c, 0x32, 0xe2, 0x4c, 0x63, - 0xaa, 0x2e, 0x36, 0xf6, 0xf0, 0xde, 0x40, 0x41, 0x6d, 0xa8, 0xcb, 0x13, - 0xd4, 0xd9, 0xc4, 0xfb, 0xb3, 0xb3, 0xd6, 0xf2, 0xed, 0x24, 0x00, 0x1a, - 0xf8, 0xfa, 0xc9, 0x70, 0x60, 0x40, 0x72, 0x59, 0xea, 0x3f, 0x17, 0x04, - 0x46, 0xec, 0x5f, 0x9b, 0xab, 0x1f, 0x99, 0x9f, 0x46, 0x61, 0x79, 0x4c, - 0x6f, 0x94, 0xb4, 0xae, 0x8f, 0x81, 0xc6, 0xf1, 0x7a, 0x79, 0x4e, 0x8f, - 0xa5, 0x03, 0x92, 0xf7, 0xbb, 0xed, 0x91, 0x40, 0xff, 0x5e, 0xa2, 0xd4, - 0x32, 0x76, 0x2e, 0x25, 0xc6, 0xce, 0xc8, 0x64, 0x9f, 0xe1, 0x26, 0x81, - 0xe6, 0xd6, 0xbd, 0x80, 0xda, 0xc9, 0xc2, 0x1c, 0x9a, 0x5d, 0x5e, 0xce, - 0x51, 0x14, 0x79, 0x40, 0x04, 0x48, 0x57, 0x48, 0x13, 0xff, 0xdf, 0x81, - 0x10, 0xf5, 0x46, 0x0c, 0x23, 0xc6, 0xfa, 0x7c, 0xc3, 0x59, 0x34, 0x26, - 0x47, 0x16, 0x8a, 0x1b, 0x89, 0xbe, 0x34, 0x08, 0xe9, 0x45, 0x65, 0xff, - 0x4d, 0xc2, 0xf1, 0xfa, 0x4a, 0xf4, 0x72, 0x37, 0x9c, 0x9e, 0x57, 0x0b, - 0x0d, 0x57, 0x56, 0x84, 0xe9, 0xcb, 0xe4, 0x5c, 0xa1, 0x50, 0x77, 0x28, - 0x36, 0x82, 0xcf, 0x20, 0xee, 0x92, 0x0b, 0xe3, 0xba, 0x1e, 0x2a, 0x8b, - 0xa8, 0x72, 0x20, 0xc8, 0x80, 0xcb, 0x0d, 0x45, 0x34, 0x52, 0x10, 0xc3, - 0xe8, 0x33, 0x0b, 0xa5, 0xa3, 0x33, 0x90, 0xb2, 0xe0, 0xf5, 0x88, 0xfe, - 0xf7, 0xf3, 0xca, 0x3d, 0x32, 0x08, 0xd6, 0xa8, 0x41, 0x74, 0x8d, 0xcd, - 0x3b, 0x9b, 0xae, 0x97, 0x49, 0xe4, 0x60, 0x54, 0xd2, 0x96, 0x2c, 0xba, - 0xb6, 0x43, 0x8f, 0xb6, 0x40, 0x07, 0xf7, 0x5b, 0x64, 0xb1, 0x1a, 0x5b, - 0xdd, 0x96, 0xbf, 0x2d, 0x68, 0xe8, 0x3c, 0xe3, 0x93, 0xe6, 0x7e, 0x39, - 0xf6, 0xb2, 0x2e, 0x2c, 0xb8, 0xf1, 0x27, 0x3b, 0x91, 0xae, 0x01, 0x5f, - 0x4a, 0x4b, 0xd8, 0xf4, 0xee, 0xa9, 0x63, 0xf4, 0xb2, 0xd3, 0xef, 0x3a, - 0xcd, 0x40, 0x0e, 0x74, 0x11, 0xb0, 0xc5, 0x39, 0x46, 0xa7, 0x76, 0x38, - 0x98, 0xb7, 0xd5, 0x12, 0x93, 0x27, 0xd9, 0x0d, 0xae, 0xbd, 0x72, 0xde, - 0x28, 0xe7, 0x85, 0xd2, 0x17, 0x50, 0xc8, 0x84, 0x27, 0xe7, 0x3b, 0x6b, - 0x2b, 0x91, 0xcc, 0x36, 0x58, 0x73, 0xba, 0xe9, 0xe2, 0x16, 0x9d, 0xd0, - 0x43, 0x23, 0xf8, 0xf7, 0x3b, 0x4e, 0x63, 0x27, 0x9b, 0x85, 0xc3, 0x3d, - 0x4b, 0x98, 0xa9, 0x98, 0xb7, 0x4b, 0x62, 0x7c, 0xd8, 0x38, 0x89, 0xf3, - 0x78, 0x11, 0xed, 0x59, 0x99, 0xa9, 0x3a, 0x18, 0x59, 0xd4, 0xfc, 0x20, - 0xdd, 0x97, 0xe4, 0x91, 0x1b, 0xd6, 0x68, 0x87, 0xc4, 0x1d, 0xfb, 0x88, - 0xc0, 0x4f, 0x62, 0x3f, 0x99, 0x6d, 0xaf, 0xee, 0x9c, 0xd9, 0xb1, 0x31, - 0x08, 0x05, 0x45, 0x27, 0xee, 0xc0, 0x15, 0xb5, 0x53, 0xd6, 0xee, 0xa4, - 0x6f, 0x26, 0x82, 0x91, 0xba, 0xec, 0xff, 0xa2, 0x44, 0x3a, 0x8e, 0x73, - 0xb0, 0x92, 0xc9, 0xf2, 0xed, 0xd9, 0xb5, 0xfd, 0x5e, 0x0a, 0x50, 0x74, - 0xca, 0x63, 0x61, 0x89, 0x58, 0xb1, 0xfd, 0xa3, 0xfe, 0xe8, 0x5b, 0x37, - 0x8e, 0x92, 0x38, 0xde, 0xf2, 0xaa, 0x28, 0x25, 0x29, 0x4e, 0xe5, 0x32, - 0x43, 0xd8, 0x60, 0x25, 0xd6, 0x17, 0x3f, 0xbb, 0xa1, 0x20, 0x3e, 0x05, - 0x6b, 0xbe, 0x1c, 0x6a, 0x67, 0x6e, 0xa8, 0xf5, 0xd9, 0xe0, 0x98, 0x6e, - 0x5b, 0x9d, 0x53, 0x1e, 0x17, 0x64, 0x08, 0x38, 0x9a, 0xc4, 0xc5, 0x6b, - 0xeb, 0x8c, 0x02, 0x46, 0xc4, 0x35, 0xb2, 0xd5, 0x9d, 0x5d, 0x3a, 0x6a, - 0x69, 0x98, 0x1a, 0x7b, 0x36, 0x7b, 0x74, 0xa0, 0xb0, 0x4e, 0x40, 0x1a, - 0xd7, 0x56, 0xb5, 0x97, 0x96, 0xd7, 0xbc, 0x9b, 0x65, 0x83, 0xa6, 0xa3, - 0xb3, 0x11, 0x57, 0x9c, 0x4b, 0xd1, 0xd9, 0x5e, 0xe0, 0x5d, 0x35, 0xcf, - 0xdd, 0x9d, 0x73, 0xbb, 0x63, 0x93, 0x2e, 0x9e, 0xc2, 0x4b, 0xbb, 0xd9, - 0x88, 0xbe, 0xa0, 0xc4, 0xaf, 0xc5, 0xe2, 0x9a, 0xe1, 0xa8, 0x34, 0xd4, - 0xa9, 0xe7, 0xae, 0x38, 0x2e, 0x76, 0x6e, 0xea, 0xd2, 0xfa, 0x16, 0x74, - 0xc0, 0x6b, 0xec, 0xaf, 0x0f, 0x9f, 0x62, 0xd3, 0x37, 0xec, 0x8c, 0xf3, - 0xdd, 0x0c, 0x12, 0x9f, 0xf6, 0x8a, 0x96, 0x20, 0x25, 0x9f, 0x21, 0x72, - 0x6c, 0xcb, 0x84, 0x78, 0x3d, 0xe9, 0x65, 0x58, 0xb6, 0xf6, 0xc4, 0x5f, - 0x35, 0xe8, 0x1d, 0xe3, 0x0e, 0x77, 0x31, 0x13, 0xf3, 0xac, 0xb3, 0x0c, - 0x64, 0xcc, 0xa8, 0x35, 0x6a, 0xf4, 0xa0, 0x62, 0xda, 0x15, 0x5b, 0x14, - 0xfb, 0xd9, 0xbe, 0x1b, 0x5a, 0xc8, 0xd1, 0x58, 0x5a, 0xb5, 0xca, 0x9c, - 0x47, 0xaf, 0xf2, 0xdb, 0xc6, 0x29, 0x9d, 0x0d, 0x62, 0xcb, 0xb3, 0xd8, - 0xbb, 0x21, 0x7a, 0x70, 0xea, 0x0b, 0x7d, 0xb9, 0xa8, 0x6a, 0xf1, 0x19, - 0x88, 0x3f, 0x55, 0x18, 0xad, 0x4d, 0xc0, 0x01, 0x16, 0xed, 0xc4, 0x0c, - 0x84, 0xf9, 0xba, 0x5c, 0x60, 0x68, 0x63, 0x81, 0xee, 0x9b, 0xd3, 0xa9, - 0x22, 0x4d, 0x34, 0x35, 0x6d, 0x9d, 0x9f, 0x00, 0xbc, 0x21, 0x32, 0xda, - 0x58, 0x1a, 0x64, 0xad, 0x09, 0x2e, 0x0d, 0xed, 0xff, 0x79, 0x71, 0x73, - 0x7d, 0x3b, 0x69, 0x2e, 0x7f, 0x51, 0xc4, 0xdf, 0x60, 0xef, 0xeb, 0x23, - 0xd0, 0xd0, 0xcc, 0xc5, 0x7e, 0x02, 0x2b, 0x9b, 0xa8, 0x8b, 0x52, 0x6e, - 0x13, 0xfb, 0x49, 0x04, 0xdd, 0x39, 0x12, 0x60, 0x45, 0x5e, 0xe3, 0xe6, - 0x50, 0x97, 0x9c, 0x10, 0xf5, 0x55, 0x09, 0x16, 0xe8, 0x2a, 0xd2, 0x4f, - 0xe4, 0x88, 0x75, 0x5a, 0xb4, 0x25, 0x27, 0xe0, 0x6f, 0xc5, 0x14, 0xde, - 0xb6, 0x37, 0x97, 0xed, 0x46, 0x4f, 0x93, 0x9f, 0xd0, 0x64, 0x0b, 0xa3, - 0x78, 0xc8, 0x71, 0x93, 0xdf, 0x42, 0xa0, 0xe9, 0xc2, 0xdb, 0x8c, 0xdc, - 0x6f, 0x0d, 0x43, 0xd2, 0xd7, 0x95, 0x34, 0x8f, 0x39, 0xc0, 0x43, 0xed, - 0x97, 0x5d, 0x49, 0xfd, 0xac, 0x32, 0x55, 0x7a, 0x30, 0x15, 0xf3, 0x96, - 0xdc, 0xd9, 0x9d, 0x0b, 0x28, 0xa9, 0xd6, 0xa4, 0x38, 0x0c, 0x38, 0xb9, - 0x95, 0x24, 0x15, 0x4e, 0x44, 0xd8, 0x3e, 0x0a, 0xe5, 0x0c, 0x68, 0xba, - 0x18, 0x7d, 0x30, 0x2d, 0x11, 0x2f, 0xed, 0x45, 0x3c, 0x8c, 0xaa, 0xee, - 0xbc, 0xcc, 0x35, 0x59, 0xd9, 0xfc, 0x54, 0xb3, 0x4b, 0x63, 0x78, 0x14, - 0x5b, 0x8e, 0xc7, 0x5c, 0x72, 0xc0, 0x02, 0xc9, 0x52, 0x84, 0xf2, 0x13, - 0x87, 0x78, 0xf0, 0x50, 0xe8, 0xfe, 0x53, 0x46, 0xb6, 0x3f, 0xaf, 0xe2, - 0xf8, 0x0c, 0x94, 0x63, 0xd1, 0x06, 0xcf, 0x4c, 0xb8, 0xd1, 0xe8, 0x81, - 0x2a, 0x9d, 0xa3, 0x05, 0xdb, 0xda, 0x2c, 0x38, 0xe8, 0x02, 0x99, 0x33, - 0x5e, 0xc9, 0x63, 0x73, 0x79, 0x4d, 0xf5, 0xc1, 0xc3, 0xeb, 0x1a, 0x94, - 0x1c, 0x36, 0xfa, 0x1a, 0x8b, 0xee, 0x18, 0x2e, 0x36, 0xc3, 0x82, 0xdc, - 0x76, 0x29, 0x7f, 0xfc, 0x8a, 0xbc, 0x68, 0x63, 0xf4, 0x1b, 0x44, 0x0f, - 0x9b, 0x11, 0x5f, 0x8b, 0x30, 0x26, 0xac, 0x48, 0xef, 0x35, 0x77, 0xfa, - 0x97, 0xde, 0x22, 0xda, 0x4a, 0xfe, 0x06, 0xad, 0x14, 0xd7, 0x42, 0x92, - 0x08, 0xbd, 0x48, 0x85, 0x50, 0x8e, 0x92, 0xd5, 0x35, 0x32, 0xce, 0x00, - 0xb8, 0x5c, 0x8b, 0xac, 0x21, 0xf8, 0xf3, 0x5c, 0x02, 0x7e, 0x22, 0xf5, - 0x07, 0xbf, 0x31, 0x7e, 0x6c, 0x6a, 0x22, 0xbb, 0x99, 0x4b, 0x6b, 0xd4, - 0x8a, 0xc2, 0xfe, 0x2a, 0xf7, 0xc3, 0xce, 0xd7, 0x44, 0x96, 0x15, 0x51, - 0x1a, 0xfd, 0x06, 0xcb, 0x9f, 0xa3, 0xe4, 0x02, 0x2b, 0xae, 0x70, 0xff, - 0x20, 0x8b, 0xf2, 0xea, 0x5c, 0x09, 0xe8, 0x5f, 0x6b, 0xa9, 0x61, 0xbe, - 0x38, 0xd3, 0xb9, 0x79, 0x2c, 0x90, 0xfe, 0x84, 0x1c, 0x7e, 0x64, 0x66, - 0xc0, 0xf1, 0x4e, 0x44, 0xdd, 0xb5, 0x8c, 0x01, 0x19, 0x1d, 0x2a, 0xa7, - 0x42, 0x93, 0x44, 0x35, 0x6a, 0x15, 0x97, 0xa3, 0x8b, 0xc3, 0x10, 0xd5, - 0x2e, 0xa9, 0x62, 0x74, 0x65, 0xfd, 0xca, 0xc9, 0x84, 0x06, 0xfc, 0xbf, - 0xcf, 0x9c, 0xe4, 0x3e, 0xe9, 0x0f, 0xd5, 0xdf, 0xd6, 0x89, 0xb3, 0x68, - 0x28, 0x42, 0xe2, 0xd5, 0xa5, 0x92, 0x3f, 0xba, 0xf6, 0x42, 0x86, 0xd7, - 0xa8, 0xf9, 0x19, 0x25, 0x5f, 0x21, 0x95, 0xad, 0xc5, 0xe0, 0x4d, 0xde, - 0x9a, 0xea, 0xef, 0x77, 0x10, 0xbc, 0x38, 0xb4, 0x03, 0x33, 0x99, 0x5f, - 0x8c, 0x56, 0x4e, 0xba, 0x77, 0x8f, 0x8f, 0x84, 0x29, 0x6e, 0x98, 0x2a, - 0x2d, 0xd5, 0x4f, 0x8e, 0xae, 0xea, 0x19, 0xdf, 0xce, 0xe4, 0x88, 0x1a, - 0x07, 0x9f, 0x1e, 0xe6, 0xa9, 0x54, 0x64, 0xcc, 0x59, 0x5d, 0x47, 0xea, - 0x29, 0xcd, 0x7f, 0x6b, 0xf6, 0x0f, 0xf7, 0xce, 0xcc, 0x01, 0xf3, 0xf3, - 0x50, 0x3e, 0xd8, 0x35, 0x46, 0x3d, 0xbf, 0x49, 0x07, 0xb4, 0x5b, 0x03, - 0xe3, 0x69, 0xea, 0x1a, 0xdf, 0xb6, 0xbb, 0xdf, 0x24, 0xb2, 0xdb, 0x98, - 0x9b, 0xba, 0xf4, 0x85, 0xe4, 0xf1, 0x01, 0x7b, 0x8a, 0x83, 0x07, 0x51, - 0x68, 0x70, 0x59, 0xe8, 0xec, 0xb5, 0x53, 0x6c, 0xb0, 0x0d, 0xdb, 0x12, - 0x58, 0x99, 0x19, 0x75, 0x8f, 0x53, 0x74, 0x25, 0x63, 0xbe, 0x0b, 0xa4, - 0x97, 0xcb, 0x13, 0x4e, 0xdf, 0xd9, 0x39, 0xda, 0x52, 0xd6, 0x9c, 0x9d, - 0xe1, 0x31, 0x68, 0xcd, 0x28, 0xa6, 0x7a, 0x80, 0xd7, 0x50, 0xab, 0x98, - 0xa0, 0x9b, 0x38, 0x0d, 0x3c, 0x34, 0x27, 0xd3, 0x49, 0x65, 0x07, 0x64, - 0xec, 0x53, 0x18, 0xa3, 0xba, 0xf0, 0x97, 0x7c, 0x14, 0x18, 0x1a, 0x0b, - 0xae, 0xa6, 0x2c, 0xf6, 0x73, 0xef, 0xab, 0xed, 0x48, 0xfc, 0xd6, 0x3b, - 0xe6, 0xfd, 0x2d, 0xdc, 0xaa, 0xaf, 0x2f, 0xfa, 0xd9, 0x87, 0x1a, 0xec, - 0x08, 0xe6, 0x56, 0x01, 0x46, 0x32, 0xd7, 0x23, 0x16, 0x6d, 0xd1, 0x79, - 0x00, 0x55, 0xa5, 0xed, 0x2a, 0x24, 0x69, 0xf7, 0x9d, 0x59, 0xa2, 0x3b, - 0x86, 0xbc, 0x3f, 0x83, 0xcc, 0x92, 0x79, 0xcf, 0x3e, 0x3d, 0x0e, 0x2f, - 0x67, 0x9b, 0x09, 0x09, 0xdf, 0xa0, 0x78, 0x09, 0x16, 0x37, 0x6a, 0xc7, - 0xcf, 0x27, 0x8c, 0x23, 0x85, 0x68, 0xa4, 0xa9, 0xb0, 0x2f, 0x98, 0x22, - 0x53, 0xd4, 0x75, 0xc5, 0xd8, 0xfe, 0x39, 0xaa, 0x69, 0x0d, 0xea, 0x3a, - 0xdb, 0x0b, 0xaf, 0xc3, 0x4a, 0x7c, 0x88, 0x3f, 0xb4, 0x41, 0x80, 0x5e, - 0x8b, 0x71, 0x79, 0xd6, 0x77, 0xb1, 0xc5, 0xf9, 0x8a, 0x99, 0x67, 0xe8, - 0x2b, 0x85, 0x06, 0x93, 0x82, 0xa2, 0x08, 0xf7, 0x1f, 0x5b, 0xbd, 0xdb, - 0x53, 0xdc, 0x25, 0x65, 0x84, 0xf0, 0xf7, 0x8b, 0x87, 0xbc, 0xf0, 0x85, - 0xfc, 0x9d, 0xcd, 0x5d, 0x67, 0x0d, 0x9d, 0xef, 0x0c, 0x2b, 0x62, 0xc6, - 0xb8, 0x2b, 0x98, 0xfd, 0x81, 0x84, 0x19, 0xa9, 0x92, 0xa4, 0x2e, 0xac, - 0x9e, 0x35, 0x0e, 0x07, 0xd3, 0xd3, 0x75, 0x6a, 0x5d, 0xc3, 0x8c, 0xc1, - 0x87, 0x88, 0xab, 0x53, 0x9c, 0x2e, 0x22, 0x94, 0xfe, 0x18, 0x65, 0xc2, - 0x5c, 0x9d, 0x02, 0x3b, 0xc1, 0x7f, 0xfd, 0xa7, 0xb1, 0x4d, 0xae, 0xc9, - 0x75, 0x0c, 0x2a, 0x86, 0x6a, 0xd4, 0x3a, 0xb3, 0x49, 0x02, 0x6e, 0x43, - 0xe4, 0x61, 0xf7, 0x18, 0xcb, 0xad, 0x32, 0x78, 0xaf, 0xfe, 0x38, 0x8b, - 0xb3, 0xec, 0xef, 0x86, 0x68, 0xb5, 0xe3, 0xef, 0x53, 0x2e, 0x53, 0x87, - 0x7c, 0xe8, 0x55, 0x93, 0x8a, 0xb1, 0x2e, 0x68, 0x76, 0x24, 0xcc, 0xfa, - 0x2b, 0xdd, 0xd8, 0xb1, 0x77, 0x10, 0x19, 0x70, 0x47, 0xd8, 0xf7, 0xc6, - 0x52, 0xa0, 0x68, 0xf9, 0x78, 0x37, 0xf0, 0x48, 0x6d, 0xcd, 0xf5, 0x6e, - 0x4e, 0x51, 0xbf, 0xec, 0x68, 0x22, 0x5e, 0x84, 0x2b, 0x25, 0xfb, 0x05, - 0x04, 0x84, 0x41, 0xfd, 0x5c, 0x0b, 0x23, 0x2d, 0xd2, 0x0c, 0xa0, 0x08, - 0x5f, 0x9d, 0xfb, 0xf8, 0x43, 0x6f, 0xa4, 0x9e, 0x64, 0x2f, 0x4c, 0xeb, - 0xb5, 0xe5, 0x6e, 0x8a, 0x58, 0x35, 0x17, 0x27, 0x8f, 0x0e, 0xf8, 0x74, - 0x96, 0x7a, 0x6c, 0x0c, 0xd4, 0x27, 0x3b, 0xa9, 0xa3, 0x61, 0x51, 0xe6, - 0xfc, 0x5f, 0x7d, 0x4f, 0x31, 0xaf, 0x8f, 0xea, 0xef, 0xe0, 0x49, 0x50, - 0x31, 0x41, 0xbc, 0x25, 0x0e, 0x67, 0x43, 0x0f, 0x0f, 0x0e, 0x37, 0x72, - 0xf6, 0x98, 0x2d, 0x12, 0x89, 0x2a, 0x01, 0x27, 0xf1, 0x89, 0x63, 0x04, - 0x3a, 0x62, 0x1f, 0xa1, 0x2c, 0x81, 0xf7, 0x08, 0x1d, 0xa2, 0x33, 0xc8, - 0xd9, 0x26, 0xc9, 0x29, 0x14, 0x56, 0x4c, 0x34, 0xe9, 0x5b, 0x3c, 0xb9, - 0x2d, 0x0f, 0x16, 0x37, 0x8e, 0x31, 0x06, 0xda, 0x02, 0x35, 0x1c, 0xd6, - 0xc6, 0xe9, 0xda, 0x0c, 0x03, 0xed, 0xb7, 0xfa, 0xa3, 0x5a, 0x9e, 0xdd, - 0x5b, 0xe2, 0x10, 0x84, 0x19, 0xc8, 0x57, 0x44, 0x9f, 0x5d, 0xa6, 0x26, - 0x29, 0x65, 0xe0, 0xdd, 0x18, 0xc3, 0xd2, 0x79, 0x72, 0xf5, 0xeb, 0xea, - 0x91, 0xbb, 0x70, 0x6e, 0x68, 0x88, 0x65, 0xab, 0xfe, 0xba, 0x3f, 0xa0, - 0x45, 0xd9, 0xe4, 0x1a, 0xab, 0xd2, 0x7a, 0x1a, 0xe4, 0x80, 0xb5, 0x8b, - 0x2d, 0x26, 0x4a, 0xa7, 0xa5, 0x8b, 0x7e, 0x8e, 0x2d, 0x21, 0x67, 0xd4, - 0xdf, 0xd4, 0xf6, 0x8a, 0xea, 0xdb, 0xc0, 0xb3, 0x66, 0x7a, 0xe9, 0x00, - 0xa6, 0xe7, 0xce, 0x7d, 0xe1, 0xe2, 0x26, 0xe6, 0x85, 0xe5, 0x11, 0x7e, - 0x89, 0x6e, 0xe4, 0xda, 0xfb, 0x21, 0xf3, 0x3c, 0x25, 0x76, 0x22, 0x4f, - 0x37, 0xfd, 0xc2, 0x59, 0x1f, 0xc4, 0x8e, 0x45, 0x54, 0x23, 0x97, 0xa8, - 0x61, 0xcb, 0x2e, 0xce, 0x56, 0xf1, 0xc2, 0xcd, 0x65, 0x67, 0x44, 0x7b, - 0x43, 0x1e, 0xab, 0xc8, 0xdb, 0xed, 0xfc, 0xb4, 0x47, 0x8e, 0x8e, 0xd0, - 0x3c, 0xad, 0xd2, 0xdd, 0xf7, 0xb0, 0xa7, 0x47, 0x68, 0x61, 0x34, 0x33, - 0x99, 0xc7, 0x18, 0x0c, 0xdc, 0xda, 0xd3, 0xc1, 0xaf, 0x45, 0xc7, 0x6e, - 0xbe, 0x0a, 0x69, 0xf9, 0xb6, 0x21, 0x7c, 0xa1, 0xfa, 0x12, 0xd8, 0x39, - 0x24, 0xf2, 0x8f, 0x1c, 0x6d, 0x3b, 0x99, 0x1b, 0x73, 0xc8, 0x01, 0x05, - 0x17, 0xd0, 0x88, 0x5b, 0xa8, 0x55, 0xfd, 0x5f, 0xe8, 0x24, 0xf5, 0xcd, - 0x9c, 0xb4, 0x13, 0x5b, 0x16, 0x74, 0x91, 0xb4, 0x61, 0x80, 0x90, 0x65, - 0x33, 0x2f, 0x69, 0xc2, 0xa0, 0x64, 0xcc, 0x53, 0x54, 0x57, 0x13, 0xb1, - 0x23, 0xec, 0x78, 0x86, 0xb3, 0x0a, 0x75, 0xd1, 0xdd, 0x30, 0xb7, 0xab, - 0xf6, 0x24, 0x49, 0x68, 0x34, 0xe3, 0x89, 0xac, 0xa1, 0x95, 0xb3, 0x75, - 0xed, 0x21, 0xc2, 0xc0, 0x2d, 0x6c, 0xf5, 0x9e, 0xc7, 0x17, 0xba, 0xe3, - 0x4e, 0xf9, 0x78, 0xf2, 0x5c, 0x98, 0x12, 0xe5, 0x3d, 0x45, 0xc4, 0xc5, - 0x42, 0x90, 0x61, 0x59, 0x0c, 0x47, 0xa7, 0xcc, 0xd7, 0xcb, 0xa9, 0x3f, - 0xd9, 0xdb, 0xc7, 0x78, 0x8b, 0x0e, 0x5b, 0xab, 0x4c, 0x25, 0x2a, 0x41, - 0xae, 0x52, 0x3b, 0x15, 0xe1, 0x0a, 0x25, 0x07, 0x4a, 0x7f, 0xe4, 0x10, - 0x5a, 0x9d, 0x0d, 0x2c, 0x15, 0xcd, 0x6b, 0x18, 0xeb, 0xb5, 0x9d, 0x08, - 0x2c, 0x81, 0xcf, 0xc0, 0x7c, 0x58, 0xbe, 0x3b, 0x92, 0xc2, 0x85, 0xe2, - 0xce, 0xc7, 0x8b, 0x0a, 0x13, 0x8b, 0x82, 0x69, 0xac, 0x8b, 0xf2, 0x67, - 0xb5, 0x92, 0x63, 0x1e, 0x68, 0x8d, 0x4c, 0x5f, 0xad, 0x7f, 0xd3, 0x27, - 0x44, 0x73, 0x78, 0x0d, 0xdb, 0x4d, 0xd5, 0x62, 0x1a, 0x74, 0x68, 0x6a, - 0x6e, 0xb9, 0x6f, 0x8e, 0x09, 0x33, 0x8f, 0xac, 0xf4, 0x80, 0x3d, 0xba, - 0x41, 0x7e, 0xb7, 0xdc, 0xe6, 0x3d, 0x25, 0xb0, 0xfc, 0xee, 0x29, 0x03, - 0x08, 0x83, 0x22, 0xcf, 0x04, 0x16, 0x1a, 0x55, 0x09, 0x50, 0xc2, 0xfb, - 0xe5, 0xe9, 0xd1, 0xd6, 0x86, 0xbf, 0x3a, 0x25, 0x03, 0xd3, 0x4b, 0xaa, - 0x0a, 0xde, 0x6e, 0x2e, 0x9d, 0xdb, 0x70, 0x6a, 0xe4, 0x0b, 0xf1, 0x91, - 0x48, 0xf7, 0x37, 0xa0, 0xa1, 0xd4, 0x94, 0xad, 0xf7, 0x30, 0x30, 0x71, - 0x10, 0x49, 0x2f, 0xed, 0x59, 0xd4, 0x37, 0x5a, 0xbf, 0xce, 0x6d, 0x0e, - 0xf0, 0x86, 0x23, 0x17, 0x4e, 0xc3, 0x81, 0xbc, 0x31, 0xfb, 0xe3, 0xe2, - 0x29, 0xd6, 0xbc, 0xef, 0x0a, 0xa4, 0x90, 0x4b, 0x90, 0x26, 0x12, 0xd2, - 0x7f, 0x27, 0x62, 0x55, 0x57, 0x72, 0xe4, 0xb8, 0x63, 0x94, 0x7f, 0x79, - 0xbc, 0xc6, 0x1e, 0x65, 0x28, 0x4c, 0xd4, 0xaa, 0x2e, 0x2c, 0x35, 0x63, - 0x02, 0xaa, 0x6e, 0x82, 0x57, 0x53, 0x3b, 0x32, 0xf0, 0x2c, 0x93, 0xe8, - 0x68, 0x7a, 0x47, 0x12, 0x69, 0xd8, 0x5e, 0xff, 0x75, 0xe2, 0x64, 0xd1, - 0xbb, 0x54, 0x92, 0x96, 0xb3, 0x86, 0xc6, 0x26, 0xd4, 0x92, 0x02, 0xa6, - 0xec, 0xcd, 0x64, 0x7f, 0x15, 0xee, 0xcc, 0x1d, 0x9a, 0xfa, 0x95, 0xf0, - 0x82, 0x11, 0xb8, 0x04, 0xfb, 0x14, 0xd4, 0xdd, 0x37, 0x86, 0x80, 0x30, - 0x2b, 0xcb, 0x4b, 0x05, 0x2b, 0x97, 0x86, 0x35, 0xe5, 0x15, 0xb4, 0xa9, - 0xf9, 0x0d, 0xbe, 0x1f, 0x55, 0xfa, 0x9a, 0x93, 0xe1, 0x9a, 0x9a, 0x15, - 0x5f, 0x51, 0x31, 0x85, 0xd6, 0xfe, 0xb7, 0xad, 0x3f, 0xcf, 0x74, 0x17, - 0x9c, 0xc4, 0x62, 0xc7, 0x02, 0x95, 0x68, 0xed, 0xb0, 0x89, 0x4b, 0x0e, - 0x7a, 0x2d, 0x93, 0x19, 0x6b, 0x90, 0x57, 0x92, 0x01, 0x2f, 0x56, 0x98, - 0x58, 0x38, 0xb7, 0xb1, 0xaf, 0x45, 0x81, 0x03, 0xe4, 0xd9, 0x09, 0x60, - 0x1f, 0x77, 0xb3, 0xe3, 0x88, 0xd4, 0xaa, 0x13, 0x16, 0xad, 0x91, 0x01, - 0xc0, 0x3c, 0xe3, 0xb5, 0xc9, 0x4c, 0x7a, 0xb0, 0x81, 0x36, 0xaf, 0x4e, - 0x21, 0x12, 0xf4, 0xf1, 0xd6, 0xe8, 0x60, 0x90, 0xb6, 0x3b, 0x45, 0xe6, - 0xeb, 0x22, 0xc5, 0x7f, 0xb1, 0xae, 0xce, 0xc0, 0x6c, 0x04, 0xd6, 0xcc, - 0xfd, 0xa2, 0x1b, 0x7d, 0x8c, 0x61, 0x5b, 0x6b, 0x91, 0x92, 0x22, 0x71, - 0xa0, 0xea, 0x01, 0xc3, 0xcf, 0x46, 0x8a, 0x8f, 0xdd, 0x28, 0xd4, 0x9f, - 0x0f, 0xfb, 0xfc, 0x25, 0xf2, 0xfd, 0x04, 0x84, 0x1e, 0x42, 0x02, 0x26, - 0x03, 0x83, 0x5c, 0x20, 0xee, 0xfa, 0x20, 0xe4, 0x18, 0xe0, 0xb3, 0xc9, - 0xe0, 0x3c, 0x6f, 0x4d, 0x66, 0xd3, 0x2a, 0x81, 0x35, 0xbf, 0xd4, 0x9c, - 0xe8, 0x11, 0xec, 0xe4, 0x8b, 0x33, 0x9a, 0xb0, 0xf4, 0x6b, 0x66, 0x62, - 0xa1, 0xa8, 0x07, 0xc9, 0x52, 0x64, 0xc4, 0x4e, 0xa6, 0x36, 0xdf, 0x21, - 0x4f, 0xab, 0xbc, 0xd2, 0x83, 0x7d, 0x13, 0x88, 0x4a, 0xff, 0x87, 0xab, - 0x25, 0xab, 0xbf, 0x64, 0xb5, 0x90, 0x9b, 0x4a, 0x7a, 0xf1, 0x6c, 0xfa, - 0x1b, 0x57, 0x8d, 0x55, 0xc7, 0xe6, 0x0e, 0x63, 0x49, 0x94, 0x60, 0x75, - 0x1c, 0x82, 0xde, 0xb0, 0xe1, 0x6c, 0x52, 0xaa, 0xd2, 0x2f, 0x1c, 0x03, - 0xe2, 0x29, 0x8c, 0xc2, 0x55, 0xfb, 0x09, 0x59, 0xd0, 0x85, 0xe2, 0x38, - 0x01, 0xac, 0x50, 0xe0, 0x7f, 0x2d, 0xe8, 0x2d, 0xf1, 0x6d, 0x24, 0xf2, - 0xda, 0x15, 0x83, 0x03, 0xa4, 0x2d, 0xc4, 0x5f, 0xb9, 0xd0, 0x90, 0x56, - 0x3c, 0xad, 0x40, 0x30, 0x0d, 0x9e, 0xb6, 0xa1, 0x1a, 0x0b, 0x18, 0xad, - 0x51, 0x7c, 0x5f, 0xff, 0x01, 0x95, 0x03, 0xe7, 0x7e, 0xa1, 0x4a, 0xc8, - 0x66, 0x22, 0x8b, 0x0d, 0x65, 0x0b, 0xac, 0x3d, 0x48, 0x91, 0x82, 0x72, - 0x74, 0x76, 0x47, 0xec, 0xed, 0xb9, 0xd4, 0x26, 0xc1, 0x6c, 0xea, 0xf0, - 0x30, 0x34, 0x8f, 0x8d, 0x0c, 0x43, 0x0f, 0xd1, 0x6b, 0x9e, 0x6f, 0xeb, - 0xa5, 0x58, 0xf0, 0xde, 0x11, 0xa6, 0x6a, 0xde, 0xff, 0xdd, 0xc7, 0x24, - 0x5b, 0x75, 0xf1, 0x51, 0xe5, 0x3e, 0x30, 0x9f, 0x09, 0xc4, 0xdf, 0x97, - 0xed, 0xac, 0xa0, 0x1d, 0x94, 0x97, 0xca, 0x17, 0x80, 0xb2, 0x3c, 0x6f, - 0x67, 0xc8, 0x2a, 0x57, 0xbd, 0xff, 0xf7, 0x77, 0x76, 0x8e, 0xdc, 0x78, - 0xe7, 0xc1, 0xd7, 0xb9, 0x56, 0xd5, 0xf0, 0xf2, 0xd9, 0x95, 0x85, 0xdf, - 0xa5, 0x51, 0xb4, 0x58, 0x2b, 0x9b, 0x72, 0xac, 0x5b, 0x7e, 0x8b, 0xda, - 0x78, 0x55, 0x05, 0xe1, 0xb9, 0x0b, 0x97, 0x32, 0x95, 0x3a, 0xd8, 0xce, - 0x6b, 0xaf, 0x9a, 0xf6, 0x1b, 0x2a, 0xb5, 0xe5, 0x0b, 0xfc, 0x7b, 0xb9, - 0xb0, 0x97, 0xe6, 0x39, 0xac, 0xcb, 0x9a, 0xff, 0xc6, 0x32, 0x20, 0xa9, - 0xe5, 0x42, 0x8a, 0x3b, 0x21, 0xdd, 0x96, 0x5e, 0x78, 0xb0, 0x9c, 0x68, - 0xf6, 0x03, 0xfe, 0x5d, 0xac, 0x0b, 0x75, 0x68, 0x44, 0x22, 0x24, 0xf9, - 0x1d, 0x94, 0xef, 0xfd, 0xdd, 0x18, 0x03, 0x37, 0xff, 0x16, 0xc5, 0xd1, - 0x5d, 0x20, 0xb9, 0x87, 0xf7, 0x64, 0xcf, 0xe0, 0x8d, 0x25, 0xdb, 0x10, - 0xa1, 0x9a, 0x7e, 0xa7, 0xd5, 0x0f, 0x7d, 0x95, 0x3c, 0xdc, 0xa5, 0x72, - 0x57, 0xb6, 0x25, 0x7b, 0xd0, 0xe7, 0x07, 0x74, 0x38, 0xc8, 0x7a, 0x29, - 0xc2, 0xca, 0x21, 0x55, 0xd7, 0xd9, 0xeb, 0x27, 0x56, 0xae, 0xdd, 0xc5, - 0x68, 0x9e, 0xd3, 0x06, 0xe7, 0xe9, 0x5c, 0x9e, 0x0c, 0x32, 0x62, 0xb2, - 0x98, 0x97, 0xd2, 0x87, 0x3e, 0xcc, 0x60, 0x6f, 0x71, 0x67, 0xf5, 0xcf, - 0x7e, 0x08, 0x6c, 0xd4, 0x9e, 0xab, 0x4c, 0xa2, 0xfa, 0x7d, 0x4e, 0x57, - 0x00, 0x66, 0x93, 0x2a, 0xb6, 0x3c, 0x83, 0x1f, 0x32, 0xc0, 0x42, 0xdd, - 0x6e, 0xa9, 0xca, 0x5d, 0xb6, 0xc1, 0xee, 0xb2, 0x45, 0x51, 0xf4, 0xb3, - 0x8b, 0xb4, 0x7b, 0x89, 0x4d, 0x15, 0x11, 0x16, 0xe2, 0xf1, 0xc5, 0xb6, - 0x64, 0x00, 0x53, 0x90, 0x88, 0x80, 0xec, 0x25, 0x50, 0xef, 0xf1, 0x8a, - 0x27, 0x72, 0xad, 0xd6, 0x70, 0xfc, 0x36, 0x0d, 0x59, 0xb9, 0x25, 0x34, - 0xd3, 0x66, 0xa0, 0x7a, 0x49, 0x2b, 0xfe, 0x5a, 0xbf, 0x7f, 0x7e, 0x26, - 0x03, 0x51, 0xa2, 0x36, 0xc5, 0x06, 0xed, 0xc7, 0xea, 0x5c, 0xea, 0xa4, - 0x26, 0x47, 0xb7, 0xc8, 0x22, 0x62, 0x16, 0x5a, 0x56, 0xf5, 0xf6, 0x67, - 0xbd, 0x8a, 0xdd, 0x81, 0x6f, 0x90, 0xa9, 0xaa, 0x5a, 0x97, 0xc9, 0x03, - 0x36, 0x5c, 0x43, 0x2d, 0xbd, 0x90, 0x4a, 0x27, 0x62, 0x20, 0x1f, 0x9c, - 0x93, 0x86, 0xae, 0xd3, 0x5f, 0xe3, 0xd4, 0x95, 0x5b, 0x23, 0x50, 0x6d, - 0x01, 0xcd, 0x4b, 0x6a, 0x63, 0xf5, 0x32, 0x9c, 0xab, 0xfa, 0x42, 0xe5, - 0x42, 0x1a, 0x5d, 0xc6, 0x1c, 0x65, 0x71, 0xe1, 0x61, 0xcd, 0x0c, 0xc5, - 0x95, 0xe2, 0xb1, 0xf9, 0xeb, 0xa3, 0xfb, 0xe6, 0x2e, 0xdd, 0x0f, 0xd6, - 0xf1, 0x1b, 0xb2, 0x6e, 0x9d, 0xbb, 0xc9, 0x7c, 0x9a, 0x02, 0xce, 0xb1, - 0x78, 0x86, 0x66, 0x6e, 0x44, 0x11, 0xe9, 0x78, 0x4b, 0x43, 0x33, 0x3d, - 0xec, 0x5c, 0xd0, 0x4a, 0x47, 0x5e, 0xf3, 0x96, 0x9e, 0xef, 0x06, 0x00, - 0xa1, 0xe5, 0x38, 0xec, 0x89, 0xcf, 0xe6, 0xde, 0x5f, 0x0f, 0xb4, 0x7c, - 0xdd, 0xaf, 0xe8, 0xdc, 0x38, 0x36, 0xb6, 0xb4, 0x1d, 0xb3, 0xad, 0x86, - 0x52, 0x6d, 0xa0, 0xe6, 0xb5, 0x8c, 0x11, 0x4d, 0x64, 0xf6, 0x41, 0x8c, - 0xcd, 0xbc, 0x4b, 0xad, 0x53, 0x6e, 0xbc, 0xb1, 0xc7, 0xd5, 0xa6, 0xf9, - 0xdc, 0x2c, 0xc8, 0x18, 0xdd, 0x2f, 0x8d, 0xef, 0x9a, 0xa8, 0xa6, 0x3e, - 0x25, 0x65, 0xfd, 0xfb, 0xa4, 0xd4, 0x4c, 0x45, 0x54, 0xe9, 0x1b, 0x11, - 0x06, 0xc9, 0x67, 0x51, 0xc8, 0x1e, 0xc6, 0xcf, 0x92, 0xc1, 0xce, 0xcf, - 0x52, 0x9c, 0x29, 0x4e, 0x24, 0xfb, 0x30, 0xce, 0x9e, 0xda, 0xa9, 0xc8, - 0x69, 0x69, 0x16, 0xb2, 0x4e, 0x98, 0x4e, 0xf7, 0x9a, 0x1a, 0xf7, 0x75, - 0xcc, 0xe2, 0x57, 0x11, 0xcc, 0x5b, 0xf1, 0xfd, 0xd3, 0x57, 0xa9, 0xef, - 0x29, 0x20, 0x66, 0x41, 0x1b, 0x7e, 0x35, 0xc2, 0x0e, 0x69, 0xa2, 0x16, - 0xa1, 0x37, 0x2d, 0x5b, 0x86, 0x6b, 0x12, 0x0c, 0x9c, 0x8d, 0xb9, 0x15, - 0xe0, 0xb7, 0xd5, 0xfb, 0x40, 0x6c, 0xc5, 0x0a, 0x77, 0xe7, 0xfc, 0x89, - 0xe0, 0x41, 0xf7, 0x6b, 0xda, 0x93, 0x5d, 0xef, 0xc3, 0x35, 0x1e, 0xe3, - 0x4b, 0x40, 0x89, 0x96, 0x3a, 0x9e, 0x05, 0x8b, 0xc1, 0x6d, 0xe3, 0xd6, - 0xde, 0x61, 0x3c, 0xdd, 0x40, 0xac, 0xda, 0x3b, 0x5c, 0x43, 0x1d, 0xef, - 0x22, 0x6c, 0xee, 0x99, 0xd4, 0x3a, 0xc4, 0x56, 0xd1, 0x25, 0xba, 0x5d, - 0x88, 0xeb, 0xf4, 0xd3, 0x50, 0xef, 0xed, 0x1c, 0x17, 0x0c, 0x2c, 0x94, - 0xdf, 0xcb, 0x92, 0xcb, 0xc0, 0x9d, 0xbe, 0xaf, 0x5c, 0x83, 0xf6, 0x70, - 0x96, 0x7a, 0xac, 0x0e, 0x44, 0xd1, 0x6d, 0x9a, 0xd2, 0x24, 0x61, 0x12, - 0xda, 0x91, 0xbc, 0xce, 0x95, 0x6a, 0x4d, 0x7f, 0x5d, 0xf5, 0x2b, 0x10, - 0xa4, 0x25, 0x05, 0xf3, 0xcd, 0xf1, 0x1d, 0x14, 0x91, 0x73, 0xb9, 0xf3, - 0xf6, 0x50, 0xeb, 0x73, 0xf5, 0xb5, 0xff, 0xcc, 0xbd, 0xcb, 0x7d, 0x09, - 0xfb, 0x17, 0x06, 0x87, 0x6b, 0x84, 0x42, 0x91, 0x50, 0xf7, 0x4c, 0x07, - 0x5d, 0x44, 0x2f, 0x04, 0x68, 0x84, 0x71, 0x23, 0x8b, 0x11, 0x1b, 0x22, - 0xd1, 0xb8, 0xba, 0xab, 0x11, 0xd8, 0x08, 0xa0, 0x90, 0xda, 0xea, 0xb9, - 0xf3, 0x5b, 0x82, 0x5e, 0x26, 0x25, 0x53, 0xae, 0x89, 0x1b, 0x15, 0xf4, - 0x07, 0xc1, 0xc2, 0x94, 0x4c, 0x25, 0x95, 0x89, 0xd2, 0x09, 0x99, 0x10, - 0x8b, 0xda, 0x5f, 0xa8, 0xfd, 0x23, 0x4f, 0xad, 0xa3, 0xfa, 0x13, 0x41, - 0xf3, 0xbf, 0x2c, 0xbd, 0x29, 0xfc, 0x2c, 0xf6, 0x3c, 0x07, 0x2a, 0x12, - 0xcc, 0xf3, 0x36, 0xd4, 0xf5, 0x02, 0x2c, 0x63, 0x17, 0xd0, 0xf4, 0x16, - 0x0a, 0xca, 0x17, 0x40, 0x1c, 0xd4, 0x94, 0xdc, 0x9f, 0x27, 0x93, 0x28, - 0x39, 0x8e, 0x8f, 0x5e, 0x57, 0x0b, 0x9b, 0x60, 0x73, 0xa1, 0x2b, 0xd9, - 0xc3, 0x4e, 0x5e, 0x1b, 0x1c, 0xaa, 0x5a, 0x0c, 0x80, 0xec, 0x00, 0x15, - 0x0d, 0x36, 0xb7, 0xbc, 0x8b, 0xae, 0x1f, 0x24, 0x9b, 0xd8, 0xa8, 0x3b, - 0x1d, 0x51, 0xb4, 0x3b, 0x63, 0x33, 0xf1, 0x99, 0x17, 0xbf, 0xaf, 0x9e, - 0xd1, 0x25, 0xb2, 0x43, 0x18, 0x07, 0xc2, 0x27, 0xad, 0x5d, 0x77, 0x7a, - 0x87, 0x55, 0x83, 0xfc, 0xdd, 0x05, 0x70, 0x95, 0xab, 0xfe, 0x2a, 0x32, - 0x82, 0x9a, 0xb0, 0xd5, 0xd4, 0x17, 0x84, 0x97, 0x61, 0xb7, 0x86, 0x08, - 0x2c, 0x2c, 0xb5, 0x1a, 0x99, 0x7d, 0x68, 0xfc, 0xc6, 0x82, 0xea, 0x7c, - 0x43, 0x0f, 0xbe, 0x8d, 0x9c, 0xbf, 0x2a, 0x9f, 0x84, 0x88, 0x30, 0xc6, - 0x69, 0xf2, 0xca, 0x4c, 0x83, 0xef, 0x42, 0x43, 0x05, 0x2f, 0xee, 0xf9, - 0xe0, 0x5b, 0xef, 0xd8, 0x5c, 0x1f, 0x04, 0x2b, 0xf5, 0x2f, 0x9f, 0xf5, - 0x5c, 0x52, 0x53, 0x1e, 0x1e, 0xaa, 0xe2, 0xab, 0xdf, 0x19, 0x33, 0xbb, - 0x5b, 0x07, 0xa5, 0x79, 0x0d, 0xd4, 0xeb, 0x1b, 0xc6, 0x64, 0x24, 0x5d, - 0x9e, 0x2a, 0x22, 0x67, 0x08, 0xb6, 0x6f, 0x20, 0xb3, 0xf7, 0x34, 0xc9, - 0xac, 0xd3, 0x5f, 0xa6, 0xc2, 0x97, 0xcf, 0xe4, 0x74, 0x47, 0x60, 0x7d, - 0x5f, 0xde, 0x64, 0x52, 0x4f, 0xb6, 0x79, 0x2e, 0xad, 0x4d, 0xaa, 0x81, - 0x02, 0x7b, 0xce, 0x30, 0xdf, 0xb2, 0xd0, 0xa7, 0xbe, 0x60, 0x39, 0x41, - 0x6e, 0x63, 0x50, 0xc7, 0x41, 0x45, 0xcc, 0x62, 0x55, 0x98, 0x7c, 0x43, - 0x48, 0x3b, 0xe1, 0xfd, 0xb7, 0xd7, 0x4d, 0x9f, 0xf6, 0x4d, 0x53, 0xdb, - 0xcb, 0x48, 0x36, 0x1a, 0x1e, 0xb9, 0x16, 0x34, 0xa2, 0x4f, 0x44, 0x01, - 0xfb, 0x97, 0xe9, 0x35, 0x10, 0xf8, 0x9c, 0x74, 0x56, 0x8a, 0x94, 0x3c, - 0x31, 0x0e, 0x96, 0xa4, 0x36, 0x54, 0x6d, 0x0f, 0x4a, 0x57, 0x7b, 0xb2, - 0xf2, 0xe0, 0x12, 0x87, 0x69, 0xec, 0x0b, 0xa0, 0x0e, 0xdc, 0x7c, 0x60, - 0xcb, 0x88, 0x20, 0x5f, 0x57, 0x6f, 0xa3, 0xc8, 0x1a, 0x1c, 0x95, 0x8f, - 0x8d, 0xed, 0xd6, 0x90, 0x6a, 0x50, 0x6b, 0x78, 0x8b, 0x8b, 0x98, 0x01, - 0x21, 0xf7, 0xf5, 0x67, 0xf5, 0xa7, 0xb8, 0xd7, 0xbd, 0xf4, 0x0c, 0x77, - 0x12, 0x63, 0xe7, 0x4e, 0xde, 0x3d, 0x1f, 0x61, 0x2d, 0xb1, 0x3c, 0xc2, - 0x7e, 0x4e, 0x78, 0x8c, 0x30, 0x4a, 0x8b, 0xcf, 0xfb, 0x38, 0xcd, 0xc2, - 0x87, 0xd1, 0x27, 0xa0, 0x6d, 0xde, 0x71, 0x41, 0xc8, 0x0e, 0x44, 0xc5, - 0x60, 0xc9, 0x6d, 0xca, 0xee, 0xf9, 0xe5, 0x9b, 0xbc, 0xf7, 0x8f, 0x03, - 0x8d, 0x25, 0x19, 0xe9, 0xe6, 0xdf, 0xf4, 0x7e, 0xc1, 0x84, 0x9c, 0x2d, - 0x80, 0xfd, 0x55, 0xb0, 0x42, 0xd6, 0xd4, 0x09, 0xb6, 0x37, 0x7b, 0xee, - 0x2f, 0xa9, 0x81, 0xba, 0x6b, 0xd5, 0xc6, 0xd8, 0x38, 0xf5, 0x49, 0xed, - 0xa7, 0x18, 0x79, 0x7f, 0x8e, 0x36, 0x97, 0x8f, 0x3f, 0x83, 0x19, 0x49, - 0xea, 0x8d, 0x90, 0xb6, 0x59, 0x5c, 0xe4, 0x03, 0xe0, 0x2e, 0xbb, 0x3c, - 0xf4, 0x5a, 0xf0, 0x01, 0x16, 0xd1, 0x6b, 0x35, 0x40, 0x5b, 0x9d, 0x50, - 0xf2, 0xaf, 0xdc, 0xf1, 0x39, 0x23, 0xbd, 0xa4, 0xe4, 0x85, 0x19, 0x8f, - 0xc6, 0xdc, 0xa1, 0xf9, 0x03, 0x89, 0xea, 0x3a, 0x58, 0x35, 0x5e, 0xb5, - 0xa2, 0x7d, 0x42, 0x72, 0xcf, 0xa0, 0x4e, 0xdd, 0xdc, 0x0d, 0x34, 0x8c, - 0x0c, 0x5c, 0xc0, 0x2b, 0x53, 0x3e, 0x58, 0x91, 0xc0, 0xc0, 0x6d, 0xef, - 0x26, 0x57, 0xd9, 0x1e, 0x5f, 0xd7, 0xec, 0xc8, 0x6e, 0x4c, 0xec, 0xca, - 0xda, 0x9d, 0x17, 0x85, 0xd2, 0x74, 0xa3, 0xc0, 0x14, 0xf4, 0x16, 0xb7, - 0x53, 0x03, 0xc4, 0x0e, 0x0b, 0x5a, 0x6f, 0xad, 0x8f, 0xde, 0x6b, 0xc1, - 0x4b, 0xff, 0x9d, 0xbc, 0x9a, 0x24, 0xd8, 0xe1, 0x30, 0x91, 0x43, 0xdf, - 0xd1, 0x0a, 0xe8, 0x25, 0x6b, 0xc2, 0x8f, 0xc1, 0xc6, 0xcb, 0x43, 0xe4, - 0xef, 0x1b, 0xc3, 0xba, 0xf5, 0x09, 0xba, 0xbc, 0x06, 0x90, 0xa4, 0x0e, - 0x00, 0x7d, 0x54, 0x18, 0xe4, 0xfe, 0x3c, 0xef, 0x48, 0x25, 0x69, 0x3c, - 0x7c, 0x31, 0x6e, 0xde, 0x8f, 0xac, 0x47, 0x23, 0xc0, 0x93, 0xab, 0xa0, - 0xef, 0xfd, 0x9a, 0xfc, 0x54, 0xd9, 0x3d, 0x0c, 0xd5, 0x43, 0x1a, 0xa9, - 0x7a, 0xc2, 0x45, 0x5a, 0xff, 0xca, 0x27, 0x5a, 0x76, 0x3e, 0xb7, 0x48, - 0x30, 0x84, 0x9e, 0xc6, 0x09, 0x7c, 0xc1, 0x27, 0xd0, 0x46, 0xc5, 0xac, - 0x10, 0x50, 0x03, 0x94, 0xe2, 0xf1, 0x39, 0xb9, 0xf6, 0x44, 0x78, 0x8e, - 0xee, 0xaa, 0x20, 0xf0, 0xc0, 0x55, 0xc8, 0xe9, 0x39, 0xa2, 0x16, 0xb8, - 0x0b, 0xa8, 0xf1, 0x4d, 0x66, 0xda, 0x1d, 0xfd, 0xee, 0x96, 0x0a, 0x17, - 0x92, 0xa7, 0x3a, 0xf2, 0xa2, 0xac, 0xb8, 0x02, 0x40, 0x5d, 0x51, 0x19, - 0xd6, 0xad, 0x70, 0x56, 0x9d, 0x68, 0xb5, 0xa0, 0xc2, 0xb3, 0xfa, 0xfb, - 0x54, 0xc9, 0xc3, 0xad, 0xf6, 0xb8, 0x69, 0xd1, 0x42, 0x1d, 0x5c, 0x06, - 0x63, 0x41, 0x70, 0x5d, 0xd9, 0xaa, 0x31, 0x32, 0xa0, 0x9f, 0x55, 0xaf, - 0x0f, 0xfa, 0x0c, 0x01, 0x0f, 0xdd, 0xf4, 0x23, 0x3f, 0xa0, 0xd1, 0x0d, - 0x6a, 0xa2, 0xe2, 0xee, 0x9d, 0xfa, 0x5b, 0x74, 0xaa, 0xfe, 0x7c, 0x23, - 0x8c, 0x9c, 0xae, 0x89, 0x26, 0xfc, 0x13, 0xca, 0xc6, 0x09, 0xac, 0xc4, - 0x2a, 0x5b, 0x5d, 0xdc, 0x52, 0x10, 0xf0, 0x27, 0x4a, 0x98, 0xaa, 0x7f, - 0xa1, 0x3b, 0xbc, 0xd2, 0xaf, 0x8d, 0x5e, 0x3d, 0xbe, 0x51, 0xdf, 0x4e, - 0xf3, 0xf5, 0xc3, 0xe9, 0x31, 0x72, 0x20, 0x6b, 0xb0, 0x62, 0xe6, 0x80, - 0x70, 0x6a, 0x40, 0xa0, 0xe9, 0x79, 0x0d, 0x91, 0x2f, 0x1a, 0x8d, 0x81, - 0xb5, 0xe0, 0x2a, 0xc4, 0xec, 0x27, 0x26, 0x76, 0x49, 0x79, 0x5f, 0x69, - 0x50, 0x13, 0x1c, 0x31, 0xb3, 0x55, 0x59, 0xf2, 0x0f, 0x68, 0x4a, 0x3b, - 0x25, 0x44, 0x45, 0x3e, 0x56, 0x96, 0xb8, 0x21, 0xd5, 0x6c, 0x50, 0xe1, - 0x56, 0x47, 0x80, 0x22, 0xd6, 0xe5, 0x8c, 0xf5, 0x78, 0xdb, 0xd4, 0x0b, - 0xd3, 0xa9, 0x4d, 0x7b, 0xf4, 0x61, 0x49, 0x3e, 0xe3, 0xf2, 0xd7, 0x16, - 0x87, 0xd4, 0x56, 0xda, 0x06, 0x8c, 0xc4, 0x1c, 0xb7, 0xf4, 0x52, 0x4b, - 0x84, 0x26, 0xce, 0x78, 0x17, 0xa0, 0x25, 0xaa, 0x6a, 0x11, 0x68, 0x31, - 0xa5, 0xc8, 0x5b, 0xb8, 0x06, 0x39, 0xea, 0x0b, 0xf9, 0x79, 0x4d, 0xe0, - 0x75, 0x78, 0xb8, 0x43, 0x6d, 0xdd, 0x62, 0x74, 0xdd, 0x0a, 0x83, 0xc5, - 0x4c, 0x2e, 0xe4, 0x81, 0x58, 0x6c, 0xab, 0xfd, 0xb1, 0x46, 0x30, 0x74, - 0xcc, 0x6e, 0xa7, 0x52, 0xa5, 0x93, 0xe9, 0xf8, 0x9b, 0xb3, 0xc3, 0x28, - 0x4d, 0x81, 0xa9, 0x55, 0x74, 0x0e, 0xa2, 0x33, 0xa1, 0xd3, 0xe9, 0xa8, - 0x6a, 0xf5, 0x54, 0xaa, 0xc9, 0x2d, 0x31, 0xc1, 0x51, 0x25, 0x86, 0xaa, - 0x64, 0x7d, 0x81, 0x91, 0xd0, 0x7c, 0x6d, 0x42, 0xe7, 0x1c, 0x0f, 0xc7, - 0x13, 0xa0, 0x1d, 0xb0, 0x1c, 0xa5, 0xeb, 0xbc, 0x44, 0xbe, 0x54, 0x29, - 0x0a, 0x8b, 0x26, 0xee, 0xae, 0x88, 0xd0, 0x4b, 0x50, 0xd3, 0x43, 0x7b, - 0x3a, 0x4e, 0xd6, 0xe4, 0x6b, 0x41, 0x68, 0xba, 0xe7, 0x3b, 0xae, 0xb0, - 0x35, 0x23, 0x92, 0x52, 0xfe, 0x60, 0x31, 0xa2, 0xaf, 0xd2, 0x51, 0xca, - 0xb1, 0xa5, 0x1a, 0x04, 0xf3, 0x7e, 0x24, 0x78, 0x89, 0xda, 0xec, 0x2d, - 0xca, 0x88, 0x12, 0x5c, 0xf8, 0xab, 0xec, 0xbe, 0x50, 0xb9, 0x9e, 0x28, - 0x74, 0x10, 0x8b, 0x0c, 0x06, 0xad, 0xcc, 0x37, 0x57, 0x44, 0x57, 0x38, - 0x6b, 0x43, 0x65, 0xc1, 0xe8, 0x4e, 0x7c, 0x22, 0xa8, 0xe3, 0x2b, 0x45, - 0x48, 0xd3, 0xd5, 0xdd, 0x2b, 0x79, 0xbf, 0xc9, 0xe7, 0xd0, 0xe5, 0x61, - 0xb9, 0x31, 0xd9, 0xe5, 0xb8, 0xe1, 0x37, 0xaf, 0xf8, 0x8b, 0x60, 0xf6, - 0xc7, 0xcf, 0xff, 0x4e, 0xaa, 0xd5, 0xf0, 0x3c, 0x33, 0x01, 0x37, 0x54, - 0x99, 0x2e, 0xef, 0xbc, 0x05, 0x4b, 0xd1, 0x10, 0xb6, 0xbb, 0xc7, 0x3c, - 0x37, 0x6c, 0xb1, 0x95, 0x13, 0xb9, 0x04, 0x2c, 0x2f, 0xec, 0x3e, 0x9f, - 0xb1, 0x9b, 0x72, 0x11, 0xab, 0x40, 0xec, 0xee, 0x91, 0x8d, 0x56, 0x66, - 0x78, 0x7b, 0x40, 0xa7, 0xb6, 0x5d, 0x77, 0x28, 0xa7, 0x4f, 0x7d, 0x7f, - 0x83, 0x29, 0xa9, 0x0e, 0xe4, 0xcf, 0x18, 0x28, 0x95, 0x60, 0x0c, 0x89, - 0x3a, 0xb3, 0xb9, 0x52, 0x28, 0x16, 0x76, 0x26, 0x16, 0x40, 0xca, 0xc5, - 0x4c, 0x6f, 0xc6, 0x58, 0x61, 0xd0, 0x92, 0x3a, 0x91, 0x18, 0x94, 0x6e, - 0xb8, 0x12, 0xc2, 0xfd, 0x7c, 0xaa, 0x29, 0x67, 0x33, 0xb9, 0x12, 0x59, - 0x64, 0xe7, 0x0d, 0xd3, 0x05, 0x08, 0x4e, 0xd6, 0xd4, 0xaa, 0xaa, 0xc6, - 0x07, 0x6c, 0xa6, 0x57, 0x9d, 0x48, 0x95, 0x8a, 0x33, 0xe6, 0x22, 0x05, - 0xa2, 0x18, 0xcc, 0x52, 0x65, 0x2e, 0xc8, 0xfe, 0x28, 0x8e, 0x23, 0x1f, - 0x02, 0x4e, 0x5a, 0x07, 0xc0, 0xaf, 0x6c, 0x9b, 0x11, 0x97, 0xc1, 0xdd, - 0x4b, 0x6e, 0xc4, 0x90, 0x43, 0x0f, 0xcf, 0x90, 0x1d, 0x9d, 0xf6, 0x9e, - 0xf1, 0x77, 0xed, 0x4e, 0x69, 0x28, 0xac, 0x75, 0x7f, 0x7e, 0x9d, 0x76, - 0xd9, 0xb2, 0x5a, 0x69, 0x85, 0x21, 0xff, 0x14, 0xd2, 0x79, 0xc1, 0xa7, - 0x1f, 0x4a, 0xac, 0x0a, 0xf9, 0x31, 0x38, 0x63, 0x09, 0xfa, 0x4e, 0x84, - 0x99, 0xfc, 0x84, 0x40, 0xcc, 0x8f, 0x25, 0xbb, 0xbb, 0x77, 0x58, 0xb4, - 0x08, 0x66, 0x59, 0x5d, 0x31, 0xdf, 0xbe, 0x6a, 0xd7, 0xd1, 0xdf, 0x18, - 0x34, 0xfc, 0xab, 0x9c, 0xea, 0x5a, 0xd6, 0xb2, 0x31, 0x75, 0x43, 0xd2, - 0x80, 0x51, 0xa6, 0x84, 0xba, 0x37, 0xfd, 0x42, 0x00, 0x58, 0x85, 0xa9, - 0xa9, 0x57, 0xf2, 0x79, 0xce, 0x9d, 0x00, 0xe6, 0x55, 0xf4, 0x17, 0x14, - 0x0a, 0xed, 0x97, 0xdc, 0xb7, 0x4d, 0x7b, 0xed, 0xe4, 0x57, 0x13, 0xcd, - 0x92, 0xb3, 0x06, 0xd9, 0x8d, 0xff, 0x8a, 0x0b, 0x36, 0x83, 0x0b, 0x1b, - 0x61, 0x24, 0xb4, 0x74, 0x65, 0x93, 0xc8, 0x2a, 0x19, 0xa9, 0x25, 0x39, - 0x4b, 0x01, 0xfb, 0xf6, 0x16, 0xf3, 0xf9, 0x17, 0xf5, 0x9b, 0x53, 0xdf, - 0x21, 0xea, 0xd4, 0x18, 0x6a, 0xc3, 0x1e, 0x00, 0xfc, 0x1b, 0xd1, 0xd6, - 0x75, 0x6f, 0x09, 0x01, 0x53, 0x81, 0x78, 0x74, 0x5e, 0xd4, 0x6d, 0xc7, - 0xf2, 0xdf, 0x6d, 0xa2, 0xda, 0x4c, 0x8c, 0xbb, 0xac, 0x50, 0xc4, 0x9a, - 0x3a, 0x97, 0x83, 0xd7, 0xfe, 0xe6, 0x38, 0x06, 0x9b, 0xb4, 0x41, 0x00, - 0x1a, 0x3b, 0x22, 0x8f, 0x81, 0xcf, 0x65, 0x74, 0xd9, 0x17, 0x3d, 0xd0, - 0xe2, 0xe9, 0xbd, 0xf5, 0x3a, 0x19, 0xa1, 0xb6, 0x60, 0xcf, 0xdf, 0x90, - 0x06, 0xb5, 0x83, 0x44, 0xd2, 0x7b, 0x6f, 0xb2, 0xb3, 0x1d, 0x8f, 0xdc, - 0x8c, 0x26, 0x41, 0x3a, 0x24, 0x06, 0xd8, 0x25, 0x58, 0xa3, 0x16, 0x16, - 0xd0, 0x89, 0xa1, 0x33, 0x77, 0x19, 0x1e, 0xa8, 0xce, 0xd1, 0x94, 0xba, - 0xb8, 0x21, 0x8b, 0x42, 0x55, 0x26, 0x60, 0x2d, 0x7f, 0xc1, 0x69, 0xdd, - 0x2a, 0x24, 0x41, 0x31, 0x40, 0x88, 0x11, 0x24, 0xe0, 0xe7, 0x91, 0x69, - 0x12, 0xc2, 0xaa, 0xa6, 0x6e, 0xd6, 0xd2, 0x76, 0x52, 0x92, 0x22, 0x34, - 0x73, 0xe8, 0xae, 0xfa, 0x14, 0x0f, 0xb9, 0xb0, 0x40, 0x50, 0x28, 0xfa, - 0xb2, 0x6c, 0xa7, 0x2c, 0x2e, 0x79, 0x5d, 0xf8, 0x43, 0x39, 0x16, 0x01, - 0xf5, 0x9d, 0x07, 0x42, 0x90, 0xae, 0xac, 0x9d, 0xec, 0x8a, 0xc7, 0x59, - 0x56, 0x42, 0x9a, 0x1f, 0xb7, 0xd6, 0x71, 0x26, 0x4f, 0xf6, 0x44, 0xcd, - 0x16, 0xad, 0x2e, 0xa2, 0x9a, 0xee, 0xff, 0xf3, 0xaf, 0xdd, 0xdf, 0xf7, - 0x29, 0x1a, 0x35, 0x09, 0x35, 0xd0, 0x05, 0xd5, 0x5d, 0x56, 0xcc, 0x14, - 0x89, 0x56, 0x3b, 0x96, 0x1f, 0xfe, 0xcc, 0xec, 0x5e, 0x74, 0x61, 0x2e, - 0x8f, 0x52, 0xbf, 0x4b, 0x4a, 0xe4, 0x9c, 0x15, 0x3f, 0xcd, 0x47, 0xd6, - 0xda, 0x3e, 0x7c, 0x54, 0xad, 0x50, 0xe1, 0x67, 0x7a, 0x32, 0xbe, 0xc9, - 0xe0, 0x4f, 0xfe, 0x92, 0x07, 0xa2, 0xf9, 0xd5, 0xe2, 0xdf, 0x27, 0x99, - 0x33, 0xc9, 0xed, 0x8f, 0x63, 0x97, 0x8a, 0xdd, 0x44, 0x40, 0x50, 0x21, - 0xeb, 0xcf, 0x7c, 0x69, 0xd6, 0xe1, 0xdd, 0x74, 0xcd, 0x56, 0x9b, 0x92, - 0xd7, 0xac, 0xdd, 0x77, 0x4c, 0x09, 0x29, 0x19, 0xe3, 0x11, 0xa7, 0xf2, - 0x67, 0x46, 0x96, 0x5d, 0xae, 0xa7, 0xe0, 0x57, 0x36, 0x67, 0xd0, 0x96, - 0x22, 0x01, 0x05, 0xf7, 0xa2, 0x4c, 0x5e, 0x42, 0x0b, 0x47, 0xd1, 0xf1, - 0x69, 0xed, 0x12, 0x18, 0x62, 0x76, 0xde, 0x34, 0x45, 0x49, 0xd9, 0xb8, - 0xe4, 0x63, 0xbe, 0x8b, 0x19, 0x22, 0x56, 0xd5, 0xaf, 0xdf, 0x4f, 0x84, - 0x33, 0xf3, 0x29, 0xeb, 0xa3, 0x97, 0xd6, 0x74, 0xea, 0x97, 0x35, 0x89, - 0xb2, 0x95, 0xf3, 0x32, 0x60, 0xc2, 0x44, 0xdb, 0x3d, 0xba, 0xfa, 0xd3, - 0x28, 0x4b, 0x23, 0x7c, 0x41, 0xd3, 0x4f, 0xa9, 0xf4, 0x24, 0x06, 0x76, - 0xe9, 0x01, 0x0b, 0x91, 0xb7, 0xd8, 0x4c, 0x34, 0x49, 0x1b, 0xb5, 0xbf, - 0x4a, 0xea, 0x74, 0x0b, 0xeb, 0xda, 0x8c, 0x12, 0xc4, 0x96, 0xed, 0x95, - 0x29, 0x22, 0x77, 0x1d, 0x65, 0xea, 0x0d, 0xf0, 0x36, 0x47, 0xc8, 0xfc, - 0x9c, 0xc5, 0x92, 0x34, 0xba, 0xdb, 0x77, 0xcb, 0x29, 0xfb, 0x96, 0x70, - 0xd1, 0x1f, 0x8d, 0xf1, 0x2e, 0xa4, 0xf4, 0x9a, 0xe5, 0x34, 0x49, 0xc2, - 0xe0, 0xb1, 0xd3, 0xad, 0xef, 0x9d, 0x50, 0xd9, 0xeb, 0xd6, 0x4e, 0x91, - 0x62, 0x0e, 0x89, 0x41, 0x63, 0x85, 0x48, 0x9d, 0xc5, 0xb1, 0xf1, 0xe0, - 0x22, 0x87, 0x1a, 0xb8, 0xb8, 0x72, 0xc5, 0xea, 0xf4, 0x74, 0xe1, 0xd8, - 0xcc, 0x5b, 0x59, 0x3f, 0x65, 0x37, 0xaa, 0xe9, 0x40, 0x4a, 0x27, 0xae, - 0x51, 0xa0, 0x75, 0xd4, 0x13, 0x9b, 0x8c, 0x44, 0x5b, 0x06, 0xe5, 0x15, - 0xb5, 0x8f, 0x8a, 0xa4, 0xfa, 0x9e, 0x8a, 0xc2, 0x54, 0xa6, 0x75, 0xf1, - 0x3c, 0xf7, 0x62, 0x03, 0x4f, 0x9a, 0xd3, 0xf6, 0x93, 0x7b, 0x61, 0xdf, - 0x2f, 0xce, 0xf2, 0xa5, 0xdf, 0xf8, 0xba, 0x9d, 0xed, 0x73, 0x2a, 0xbb, - 0xef, 0xbc, 0xac, 0xa3, 0xc6, 0x5a, 0x4d, 0xee, 0x21, 0x8a, 0x5f, 0x9a, - 0xd0, 0xec, 0x43, 0x00, 0xa4, 0xf5, 0x03, 0x3a, 0x4f, 0xbc, 0xd2, 0x42, - 0xe7, 0x6a, 0x1a, 0x4c, 0x45, 0xb8, 0x3b, 0x31, 0xf1, 0x5a, 0x20, 0x84, - 0x3e, 0x9f, 0x4c, 0x14, 0x69, 0xef, 0xf2, 0x22, 0x2a, 0x42, 0x74, 0x14, - 0x98, 0x97, 0xb7, 0x21, 0xf6, 0x90, 0xf9, 0x87, 0x8b, 0x79, 0xc7, 0x93, - 0x52, 0x81, 0x8d, 0x30, 0x9a, 0x35, 0x3d, 0xc7, 0x87, 0x33, 0x0d, 0xdc, - 0xcf, 0x67, 0x11, 0xba, 0x9e, 0x6d, 0x81, 0x67, 0x76, 0x4b, 0x35, 0x75, - 0x07, 0x46, 0xc2, 0x6f, 0x45, 0xa6, 0xda, 0xb7, 0x04, 0xa0, 0x3b, 0xe1, - 0x60, 0x7c, 0x41, 0xb2, 0xc9, 0x15, 0x65, 0xab, 0xc0, 0xff, 0xf4, 0x31, - 0x5b, 0xcd, 0xd4, 0x5c, 0x9b, 0x11, 0xe4, 0x0c, 0x8b, 0x16, 0xc2, 0xbe, - 0x0a, 0x75, 0x11, 0x8a, 0x27, 0xaf, 0xe7, 0x8d, 0xf5, 0x3c, 0xe8, 0x33, - 0xb0, 0x82, 0x1b, 0x95, 0x25, 0x46, 0xbd, 0xc5, 0x41, 0x33, 0xca, 0x09, - 0x5e, 0xdb, 0x82, 0xd3, 0x71, 0x51, 0x4a, 0x15, 0xc1, 0xfd, 0x50, 0x06, - 0x31, 0x6b, 0x42, 0x8d, 0x07, 0x65, 0xcf, 0xfc, 0x9f, 0xd7, 0x7b, 0xcb, - 0x94, 0x3c, 0xf4, 0xe8, 0x3c, 0x5e, 0x44, 0x7f, 0xc2, 0xb8, 0x58, 0xa2, - 0xf7, 0xff, 0xcd, 0x9f, 0x00, 0x74, 0x4e, 0x82, 0xe2, 0xa2, 0x63, 0x53, - 0x12, 0x2b, 0x06, 0x0a, 0x57, 0x4b, 0xbf, 0x67, 0xa2, 0x5e, 0x11, 0x36, - 0x4a, 0x3a, 0x02, 0x95, 0x16, 0x38, 0xe6, 0x2f, 0x7b, 0x25, 0xe2, 0x9a, - 0xc2, 0xa9, 0x32, 0xf2, 0xeb, 0x8b, 0x48, 0xb1, 0xa6, 0xe7, 0xd9, 0xf0, - 0x5b, 0xf6, 0x90, 0x59, 0x49, 0xcc, 0xb5, 0x14, 0x53, 0x08, 0x60, 0xc0, - 0xd2, 0x89, 0x58, 0xf3, 0xd8, 0x24, 0x27, 0x11, 0xba, 0xda, 0x80, 0x8a, - 0xdd, 0x4c, 0x5c, 0x8d, 0xb5, 0x4b, 0xf4, 0x9d, 0xb7, 0xae, 0x2b, 0xc2, - 0xe2, 0xce, 0xdc, 0xa7, 0xaf, 0xfc, 0xac, 0x7b, 0x1d, 0xe7, 0x12, 0x2f, - 0x8f, 0x42, 0x69, 0x68, 0x55, 0xd9, 0x65, 0x1b, 0x0d, 0xa9, 0x73, 0xc1, - 0x79, 0x21, 0x7f, 0xff, 0xdc, 0x88, 0x7b, 0x10, 0x3b, 0x7e, 0x40, 0xab, - 0x58, 0x1b, 0x13, 0x8a, 0x2f, 0xfb, 0xe5, 0x27, 0x31, 0xad, 0xc8, 0x66, - 0x9c, 0xfd, 0x2c, 0x99, 0x83, 0xc4, 0xfd, 0xe0, 0x87, 0xcf, 0xa1, 0x87, - 0xb9, 0xf0, 0x23, 0x17, 0x54, 0xfa, 0x91, 0xaa, 0x8c, 0x54, 0x34, 0xba, - 0x1c, 0xae, 0xcb, 0x8e, 0xc0, 0x26, 0xa3, 0x10, 0xe6, 0x26, 0xef, 0xfb, - 0x4a, 0xec, 0x71, 0x03, 0x21, 0xd3, 0xa8, 0x78, 0x4b, 0xcc, 0xf2, 0xc4, - 0x7b, 0xd2, 0x89, 0x71, 0xe6, 0x4f, 0x09, 0x95, 0x92, 0x77, 0xcc, 0x35, - 0xc9, 0x14, 0x5d, 0x28, 0xfb, 0x93, 0xa7, 0xeb, 0x08, 0x5c, 0xd4, 0x01, - 0x2b, 0xa2, 0x9d, 0x1a, 0xf7, 0x8e, 0x19, 0x63, 0x95, 0x4f, 0x3d, 0xcd, - 0x28, 0xcb, 0x37, 0x1d, 0xd0, 0x99, 0x66, 0x29, 0x02, 0xbc, 0x03, 0x3f, - 0xf4, 0xdf, 0xe4, 0x99, 0x73, 0xb2, 0xea, 0x9d, 0xdb, 0xc6, 0x93, 0x3d, - 0xf0, 0x45, 0xba, 0x55, 0xdf, 0x3c, 0x44, 0x0a, 0xfc, 0xe9, 0x68, 0x9d, - 0x40, 0x71, 0x68, 0x95, 0xb2, 0x38, 0x87, 0x09, 0x3f, 0x2e, 0x58, 0x21, - 0x50, 0xca, 0x0f, 0x6a, 0x6e, 0x01, 0xe0, 0xcf, 0xd6, 0xb5, 0xc4, 0x18, - 0x43, 0xb3, 0x98, 0x50, 0xf9, 0x3f, 0x93, 0xaa, 0x1d, 0x0f, 0xbe, 0x2b, - 0x62, 0x1f, 0x41, 0x12, 0xe0, 0xbb, 0x2a, 0x8d, 0x51, 0x10, 0x50, 0x34, - 0x1a, 0xbc, 0x6d, 0x79, 0x04, 0x86, 0x2a, 0x5c, 0x35, 0xd5, 0x0d, 0x10, - 0x37, 0x77, 0xbc, 0xaf, 0x90, 0x1f, 0x8e, 0x6e, 0xf4, 0xa3, 0xb5, 0xfd, - 0xe8, 0x55, 0x10, 0xdc, 0x7e, 0x69, 0xce, 0x89, 0xbf, 0x29, 0x02, 0xc0, - 0x75, 0xd1, 0x97, 0x64, 0x2d, 0xbb, 0x7e, 0xa3, 0x27, 0xa9, 0xa1, 0xf1, - 0xcb, 0x8d, 0xb5, 0x0e, 0xe2, 0xa3, 0x30, 0x00, 0xed, 0x68, 0xac, 0xc6, - 0x73, 0x64, 0x76, 0x43, 0xc4, 0x09, 0xd5, 0xea, 0xef, 0x91, 0x3b, 0xd4, - 0x78, 0x7c, 0x0c, 0xcf, 0x9a, 0xce, 0x3f, 0x98, 0x7d, 0xdb, 0x3d, 0x9b, - 0xc5, 0x08, 0x5b, 0x58, 0x6b, 0x6e, 0x21, 0xdc, 0xd6, 0x78, 0x07, 0x1e, - 0x8a, 0x10, 0xb2, 0x08, 0x97, 0x0e, 0xf3, 0xc2, 0x2d, 0xdc, 0x76, 0x9f, - 0xa8, 0xd3, 0x15, 0x35, 0x35, 0xcd, 0xe5, 0x71, 0xf1, 0x0e, 0xd7, 0x30, - 0xca, 0x0e, 0x9a, 0xe7, 0xaa, 0x45, 0xb0, 0x29, 0x8e, 0x87, 0x8e, 0xca, - 0xd0, 0x3c, 0xd9, 0xd7, 0x00, 0x75, 0x34, 0xa4, 0xd1, 0xa8, 0x94, 0xb0, - 0xf6, 0xe8, 0xa5, 0x43, 0x66, 0xbb, 0x20, 0x98, 0xe6, 0x5c, 0xc6, 0x6a, - 0x81, 0x6c, 0xa3, 0xc5, 0xab, 0x38, 0xfc, 0x1a, 0x3b, 0x6c, 0x4a, 0xba, - 0x13, 0x38, 0xa7, 0x5a, 0x68, 0xaa, 0x38, 0x1c, 0x68, 0xeb, 0x3c, 0x79, - 0x6d, 0x79, 0x09, 0x02, 0xbe, 0x96, 0xd5, 0x9c, 0xf7, 0xc9, 0x42, 0xba, - 0x6b, 0x3f, 0xe2, 0x1f, 0x6d, 0x06, 0x61, 0xb8, 0x16, 0x25, 0x1d, 0x93, - 0xbd, 0x44, 0x55, 0xeb, 0x67, 0x83, 0xcc, 0x17, 0x71, 0xd6, 0x5d, 0xce, - 0x3d, 0x85, 0xc0, 0x0d, 0xba, 0xa3, 0x7d, 0x36, 0x43, 0x5f, 0xf9, 0x8c, - 0x9d, 0x30, 0x0e, 0x67, 0x3e, 0x94, 0x36, 0x13, 0x89, 0x75, 0xa0, 0xd7, - 0xd2, 0xdd, 0x29, 0x0f, 0xdf, 0x66, 0x2a, 0x2a, 0x06, 0x9c, 0x08, 0xe6, - 0xe1, 0x6f, 0xef, 0xea, 0x7a, 0xc7, 0xbd, 0xc7, 0x18, 0x6d, 0xf6, 0xec, - 0x1c, 0x40, 0x3d, 0x36, 0xa1, 0x9c, 0x2a, 0xe9, 0x08, 0x9d, 0x7d, 0x03, - 0x80, 0x94, 0x2a, 0xf7, 0x04, 0xcd, 0xc6, 0x46, 0x85, 0xdd, 0x5b, 0xc4, - 0x3b, 0x4b, 0x43, 0x80, 0x82, 0x05, 0x8d, 0x89, 0xb8, 0x78, 0x8d, 0xda, - 0x2c, 0x67, 0x65, 0x12, 0xbb, 0xcc, 0x40, 0x4c, 0x7e, 0xcb, 0x1d, 0x7f, - 0x49, 0x1b, 0x80, 0x8f, 0x63, 0x2c, 0x5d, 0x5e, 0x72, 0xe1, 0x44, 0x2c, - 0xe8, 0xd1, 0xa1, 0x9d, 0x3f, 0xe0, 0x7d, 0xc2, 0x48, 0x98, 0x6f, 0x94, - 0x0d, 0xb6, 0xb1, 0xad, 0xfa, 0xb7, 0x4f, 0x94, 0xef, 0xac, 0x4f, 0xc0, - 0xbf, 0xa0, 0x9e, 0x9e, 0x4c, 0xe5, 0x0c, 0x2e, 0x65, 0x60, 0x24, 0xef, - 0xa2, 0xec, 0x54, 0xfc, 0x78, 0x77, 0x3c, 0x46, 0x6e, 0x8d, 0xc1, 0xbd, - 0x20, 0x21, 0xf5, 0x5d, 0x8b, 0x66, 0x5d, 0xd7, 0x2e, 0x51, 0x52, 0xf5, - 0x01, 0x83, 0xa3, 0x10, 0xe3, 0x12, 0x88, 0x8a, 0x4f, 0xd1, 0xbc, 0x55, - 0xd0, 0x2f, 0x3c, 0xb6, 0xb7, 0x87, 0x07, 0xb3, 0x7f, 0xf6, 0x76, 0x90, - 0x18, 0xa1, 0xef, 0xee, 0xa6, 0x88, 0xbb, 0xb7, 0x24, 0x50, 0x78, 0x20, - 0xe5, 0x2e, 0xf7, 0xb5, 0x27, 0xbc, 0x4b, 0xa2, 0x5a, 0x8e, 0x2f, 0x87, - 0x7d, 0x57, 0xec, 0x74, 0x38, 0x2f, 0xc9, 0x48, 0x56, 0x28, 0xe3, 0xd3, - 0x3d, 0x4b, 0xb2, 0x9d, 0x92, 0x9b, 0xef, 0x57, 0x9b, 0x72, 0x96, 0x3e, - 0x9c, 0xd2, 0xf9, 0xf5, 0x10, 0x10, 0xac, 0x3e, 0xd7, 0x5d, 0x3b, 0xbc, - 0xf4, 0x55, 0x4b, 0x2b, 0x57, 0xf7, 0xe2, 0x06, 0xdf, 0x3c, 0x04, 0x2a, - 0x25, 0xda, 0xf3, 0x97, 0x6c, 0x3e, 0x1c, 0x0a, 0xf7, 0x81, 0xe8, 0xef, - 0x2b, 0xda, 0xa8, 0xcc, 0x0e, 0x3c, 0x26, 0xae, 0x18, 0x90, 0x9e, 0x47, - 0x93, 0xef, 0x7e, 0xfc, 0x1a, 0x68, 0x49, 0x75, 0x79, 0x59, 0xd6, 0xdd, - 0x1c, 0xbe, 0x20, 0x40, 0x0f, 0xca, 0xe3, 0xfa, 0x94, 0x84, 0x20, 0xcf, - 0x49, 0x02, 0x3d, 0xcc, 0x91, 0xae, 0xe0, 0x68, 0xfd, 0x33, 0x1d, 0xf7, - 0x96, 0x01, 0x6f, 0x7c, 0x46, 0x3c, 0x13, 0x50, 0x9b, 0xd9, 0xc9, 0xb5, - 0xb6, 0x3c, 0xce, 0x12, 0x73, 0x78, 0x55, 0x5f, 0x5f, 0x77, 0x40, 0xee, - 0xd9, 0x93, 0x99, 0x39, 0x9c, 0x11, 0x91, 0xbd, 0x3e, 0x64, 0xac, 0x4a, - 0xcd, 0xe9, 0xbe, 0x43, 0x8e, 0xf3, 0xe6, 0x50, 0x8c, 0x79, 0x8b, 0xf5, - 0xea, 0xd1, 0xf4, 0x34, 0xb9, 0x6f, 0x44, 0xb4, 0x21, 0xef, 0xd3, 0x05, - 0x92, 0xdd, 0x4c, 0x45, 0x2d, 0x6a, 0x3b, 0x45, 0x39, 0xce, 0xaf, 0xe4, - 0x4f, 0xd8, 0xe4, 0x08, 0xfa, 0xec, 0x8b, 0x24, 0xd7, 0x3f, 0x19, 0x12, - 0x85, 0x0d, 0x2b, 0x12, 0x33, 0x5c, 0x2d, 0xa1, 0xb1, 0xc0, 0x4c, 0x5c, - 0xb4, 0x7a, 0x3f, 0xf6, 0x68, 0xda, 0x2b, 0xaf, 0xe3, 0x79, 0xa1, 0x08, - 0xdd, 0xff, 0x3a, 0x31, 0x94, 0x77, 0x6b, 0x10, 0x23, 0x09, 0xe1, 0x43, - 0x1b, 0xbb, 0x86, 0xa3, 0x81, 0x41, 0x4a, 0xce, 0x90, 0x0f, 0x46, 0x6b, - 0x27, 0x61, 0xe5, 0x25, 0x67, 0x0c, 0xb8, 0xe9, 0x4b, 0x03, 0x40, 0x8c, - 0x7f, 0x5a, 0x01, 0xcd, 0x98, 0xb3, 0xd0, 0x21, 0x7b, 0x86, 0x4f, 0xc2, - 0x1f, 0x5e, 0x9b, 0x6a, 0x2d, 0x7f, 0x92, 0x23, 0xff, 0x0d, 0x6a, 0xa6, - 0x11, 0x86, 0xab, 0x6d, 0xb6, 0x7a, 0xe1, 0xd3, 0xbf, 0xce, 0x8b, 0x09, - 0x13, 0xb7, 0x06, 0x4d, 0xd4, 0xdd, 0x4f, 0xfc, 0x09, 0x20, 0x1a, 0xee, - 0x5d, 0xb8, 0x43, 0x80, 0x29, 0x5c, 0xe0, 0x69, 0xa2, 0x45, 0x4b, 0x02, - 0xe1, 0x84, 0x0b, 0x7e, 0xaf, 0x35, 0xe2, 0xd9, 0x79, 0xb2, 0x6c, 0x7b, - 0x5d, 0x38, 0x8a, 0x23, 0x62, 0x87, 0x27, 0x46, 0x3d, 0xf9, 0xe8, 0x22, - 0xf6, 0x8c, 0x8d, 0x8d, 0x75, 0xf3, 0xa6, 0x65, 0x75, 0xdd, 0x79, 0xc8, - 0xc2, 0x01, 0xf7, 0x1f, 0x54, 0x39, 0x9c, 0xe0, 0xbe, 0x99, 0x4e, 0xbc, - 0xcf, 0x12, 0x2f, 0x81, 0xdb, 0xc0, 0xef, 0x72, 0x07, 0x16, 0x92, 0x18, - 0xcf, 0x3d, 0xb9, 0x7f, 0x4e, 0x49, 0xa5, 0x22, 0x28, 0x2d, 0x4c, 0x0e, - 0x55, 0x3d, 0x4d, 0xa8, 0xb7, 0xf4, 0xf8, 0xc5, 0xfa, 0x24, 0xc7, 0xbf, - 0x72, 0x74, 0x61, 0x47, 0x72, 0xa0, 0xe3, 0x5e, 0x9d, 0x9f, 0xf6, 0x14, - 0x75, 0x14, 0x3b, 0x32, 0xd4, 0xad, 0x71, 0x25, 0x03, 0x28, 0x98, 0x61, - 0x9d, 0x9c, 0xf6, 0xf7, 0xc4, 0x38, 0xa3, 0xaa, 0xa0, 0x2a, 0x19, 0x34, - 0x23, 0x73, 0xd2, 0xfe, 0x0f, 0x42, 0x48, 0xec, 0xe2, 0xcb, 0xcb, 0xed, - 0xd7, 0x74, 0x72, 0xde, 0xb4, 0xeb, 0x68, 0x02, 0xa5, 0x7c, 0x10, 0x3e, - 0x58, 0x51, 0xa2, 0x8e, 0x79, 0x2f, 0x29, 0x45, 0x05, 0xa9, 0x99, 0xc0, - 0xa1, 0xe6, 0xd6, 0xae, 0xe6, 0xbd, 0x57, 0x7b, 0xa9, 0x25, 0x07, 0x8e, - 0x74, 0x58, 0x0c, 0x00, 0x8f, 0x8e, 0x58, 0x06, 0xb7, 0x8c, 0x7e, 0xfa, - 0x36, 0x0e, 0xc2, 0x7f, 0x37, 0x59, 0x45, 0x9e, 0x85, 0x21, 0x18, 0x48, - 0xe7, 0x79, 0x68, 0x42, 0x0c, 0x5e, 0x59, 0xe2, 0x6b, 0xe5, 0x10, 0xff, - 0x75, 0x16, 0x4e, 0x81, 0xc6, 0x29, 0x89, 0x60, 0xee, 0xb0, 0x56, 0x86, - 0x04, 0x0f, 0xfe, 0x93, 0x28, 0x92, 0x70, 0x52, 0x38, 0x5c, 0xcd, 0x9c, - 0xde, 0x13, 0x4e, 0x6a, 0x5e, 0x05, 0x5b, 0xeb, 0xeb, 0x0f, 0x22, 0x34, - 0x56, 0xac, 0x84, 0x64, 0xd9, 0x9c, 0x14, 0xbe, 0xe9, 0x6e, 0x2f, 0x5d, - 0xf5, 0xb7, 0x91, 0x95, 0x1a, 0x97, 0x62, 0xd6, 0xbd, 0x2a, 0xfe, 0x11, - 0x91, 0x69, 0x38, 0x08, 0x9c, 0x11, 0xe5, 0xe5, 0x46, 0xcf, 0x94, 0x0c, - 0x0d, 0xdb, 0x49, 0x67, 0x5a, 0x21, 0xd0, 0x19, 0xff, 0xd9, 0x4d, 0xfc, - 0x28, 0xa7, 0x2a, 0xac, 0x1f, 0x66, 0x11, 0xf7, 0x6e, 0x4d, 0x41, 0x6a, - 0x7f, 0x77, 0x08, 0xba, 0x5a, 0xfe, 0xe0, 0xa7, 0xed, 0xe4, 0xd0, 0x50, - 0xe6, 0x21, 0x5a, 0xa3, 0xcd, 0xb2, 0xa8, 0xff, 0x12, 0xf9, 0x1d, 0xad, - 0x7a, 0xd9, 0xa8, 0x22, 0xb6, 0xd2, 0x76, 0x75, 0xa5, 0x6c, 0xca, 0xf3, - 0x59, 0xe4, 0x25, 0x58, 0x9e, 0x1d, 0x05, 0xbf, 0x53, 0x45, 0x35, 0xd1, - 0x34, 0xaf, 0xe6, 0xac, 0x43, 0x53, 0xd4, 0xe4, 0x61, 0x2d, 0xf1, 0xf4, - 0xc7, 0x9c, 0xb5, 0xca, 0x1a, 0xc1, 0x32, 0x41, 0xe6, 0x43, 0x4b, 0xc9, - 0x02, 0xa5, 0x14, 0xf4, 0x72, 0x8c, 0xd4, 0x97, 0x2e, 0xbc, 0xee, 0xa8, - 0xd2, 0x53, 0xaf, 0xe1, 0x80, 0x58, 0xbd, 0xa9, 0x25, 0xa0, 0x0c, 0x4e, - 0x4c, 0x4d, 0x67, 0x27, 0x3b, 0x6b, 0xd0, 0xf6, 0x2c, 0x0f, 0x6e, 0xc8, - 0xbc, 0x0f, 0x12, 0xea, 0xce, 0x34, 0xe1, 0x1c, 0xe7, 0x36, 0x7a, 0x9b, - 0xe8, 0xa8, 0xb8, 0x23, 0xa8, 0x4b, 0x77, 0x5f, 0x77, 0x99, 0xde, 0x36, - 0x2b, 0x6a, 0x1d, 0x6a, 0xb5, 0x5d, 0x48, 0x40, 0x0a, 0x4d, 0x20, 0x89, - 0x1e, 0xf4, 0x14, 0x8e, 0x27, 0x9f, 0x74, 0x07, 0x10, 0x69, 0x59, 0xed, - 0xcb, 0x47, 0x64, 0x9a, 0x37, 0x26, 0x37, 0x03, 0x17, 0xaf, 0xc8, 0x6a, - 0x93, 0x4f, 0xce, 0xdf, 0x2c, 0x53, 0x6a, 0x36, 0x76, 0xe7, 0xc3, 0xbf, - 0x09, 0x38, 0x92, 0x3a, 0x53, 0xe8, 0x07, 0xe2, 0xf2, 0xe1, 0xc2, 0x9f, - 0xd8, 0x7e, 0x4c, 0x27, 0xf0, 0x44, 0xa4, 0x91, 0x3a, 0xc7, 0x62, 0xf6, - 0x86, 0x31, 0x3a, 0xaa, 0x38, 0x30, 0x41, 0xa7, 0x6b, 0xb2, 0x63, 0x83, - 0x99, 0xf1, 0x7e, 0x64, 0x47, 0xc1, 0x95, 0x53, 0x26, 0x15, 0x37, 0x06, - 0xa1, 0x30, 0x50, 0xb9, 0x24, 0x63, 0xf9, 0xd7, 0xca, 0x96, 0xeb, 0xf6, - 0xf3, 0x6a, 0xdb, 0x5e, 0x9b, 0x57, 0x1c, 0x47, 0x94, 0xfe, 0x92, 0xd3, - 0x4e, 0x35, 0x25, 0xb8, 0xa3, 0xb2, 0xc8, 0xa5, 0xda, 0xb8, 0x22, 0xc0, - 0xa5, 0x68, 0x5c, 0x16, 0x0b, 0xd2, 0x33, 0x1b, 0x89, 0x35, 0x1f, 0xf8, - 0x47, 0x86, 0x6b, 0x0d, 0xc4, 0x7c, 0x1a, 0x50, 0x48, 0x84, 0xc3, 0x8c, - 0x59, 0x88, 0x08, 0x26, 0x4e, 0x85, 0xd2, 0x8c, 0x37, 0x65, 0x86, 0x7d, - 0x47, 0x0b, 0xc3, 0x9f, 0xd2, 0x3e, 0x06, 0x1d, 0x05, 0x06, 0xf2, 0xa4, - 0xc3, 0x3b, 0xae, 0xd3, 0x02, 0xae, 0x44, 0xbb, 0xd0, 0xc7, 0x6e, 0xd2, - 0x82, 0x14, 0x4c, 0xfd, 0xf6, 0x69, 0x8a, 0x0c, 0x2e, 0x04, 0xc0, 0x28, - 0xd5, 0x20, 0x7d, 0xb0, 0x7d, 0x7c, 0xad, 0xb6, 0x6d, 0x36, 0x1a, 0x72, - 0xe8, 0x4f, 0x9f, 0x7b, 0x69, 0x8c, 0xaf, 0x45, 0x23, 0x5e, 0x37, 0xc5, - 0x97, 0x2c, 0xbd, 0x24, 0x54, 0x35, 0x6d, 0xec, 0x1a, 0xcc, 0x26, 0xdf, - 0xb3, 0x8a, 0xac, 0x71, 0xd0, 0x8c, 0x8c, 0xeb, 0xa7, 0x9b, 0x5d, 0x89, - 0xfd, 0x94, 0x67, 0x3a, 0x0a, 0x6e, 0xef, 0x95, 0x1c, 0xaa, 0xfc, 0x82, - 0xb7, 0xdb, 0xaa, 0x2c, 0xd5, 0x14, 0x58, 0xdd, 0xd7, 0x11, 0xa1, 0xed, - 0x75, 0x1f, 0x77, 0xf9, 0xb9, 0xf5, 0xbf, 0x24, 0x8b, 0xcc, 0x54, 0x89, - 0x1d, 0x04, 0x0d, 0x6a, 0x3d, 0xf8, 0xc1, 0xd4, 0xc1, 0xae, 0x1c, 0xcc, - 0xb1, 0xde, 0xfe, 0xf9, 0x45, 0xab, 0xd8, 0x37, 0xb1, 0x56, 0x66, 0x15, - 0xf4, 0x9d, 0x59, 0x16, 0xc8, 0x67, 0x8a, 0x0d, 0x25, 0x69, 0x3f, 0x8a, - 0x56, 0x16, 0x7d, 0xca, 0x69, 0x98, 0xac, 0x0e, 0x8c, 0x0e, 0xf6, 0x3a, - 0xb5, 0x5f, 0xd2, 0x3c, 0xe6, 0xa4, 0x3b, 0x67, 0x4a, 0xa5, 0x2d, 0xff, - 0xfd, 0x04, 0x04, 0xb3, 0xf1, 0x75, 0xbb, 0x8c, 0x9c, 0xf3, 0x39, 0x7d, - 0xfa, 0x9e, 0x9c, 0x55, 0x63, 0x76, 0xb2, 0x45, 0xf4, 0x18, 0x7b, 0xbf, - 0x31, 0xbc, 0xfa, 0x5d, 0xed, 0x9f, 0x97, 0x8a, 0x4c, 0xf1, 0x5b, 0xd9, - 0x44, 0xad, 0x7f, 0x14, 0xc6, 0x5c, 0xbb, 0x75, 0x0c, 0xe3, 0x5b, 0xd3, - 0xba, 0x57, 0x79, 0x5a, 0x99, 0x79, 0xad, 0xb4, 0x9e, 0x9c, 0x18, 0x7c, - 0x2f, 0x2b, 0x07, 0x8d, 0xa0, 0x9d, 0x98, 0xfc, 0xe3, 0xe5, 0x54, 0x51, - 0x17, 0xb8, 0xde, 0x5b, 0xd0, 0xf1, 0x43, 0x39, 0xae, 0x6d, 0xaf, 0xb5, - 0x77, 0xd8, 0x35, 0xa5, 0xbe, 0x57, 0x6d, 0xe2, 0xc8, 0x82, 0x59, 0x63, - 0xc8, 0x23, 0xd5, 0xc1, 0x86, 0x05, 0xd5, 0xdf, 0x2f, 0x70, 0x16, 0x2e, - 0x47, 0x42, 0x30, 0xab, 0x18, 0x4d, 0xc6, 0x9a, 0x54, 0x18, 0x9f, 0x86, - 0x4a, 0x02, 0x36, 0x47, 0x05, 0xd6, 0xce, 0x6a, 0x94, 0x88, 0xd5, 0xe8, - 0xc7, 0x48, 0xa1, 0x2a, 0x91, 0xc7, 0xf9, 0x97, 0x23, 0x06, 0xc6, 0xcb, - 0xad, 0xf2, 0x4e, 0x29, 0xb9, 0x84, 0x8c, 0x07, 0x4f, 0x46, 0x21, 0x0a, - 0xbe, 0x80, 0xc4, 0x24, 0xe8, 0x3e, 0x78, 0xbe, 0xd1, 0xd2, 0xa4, 0x32, - 0x1d, 0x59, 0xbc, 0x9e, 0x75, 0xbd, 0x84, 0x45, 0x34, 0xde, 0x6e, 0x66, - 0x69, 0x68, 0x83, 0xc1, 0x68, 0x8c, 0x59, 0xa3, 0xb6, 0xab, 0xe0, 0xb5, - 0x81, 0x22, 0x0e, 0x56, 0x7d, 0x55, 0x1e, 0xd0, 0xa4, 0x50, 0x7b, 0xe1, - 0x9a, 0xc3, 0xb1, 0x86, 0x0a, 0x8b, 0xcb, 0x9b, 0x85, 0x57, 0xc6, 0x81, - 0xfe, 0x32, 0xd1, 0x61, 0x47, 0xbc, 0xdf, 0x70, 0x94, 0xf5, 0x9c, 0xc4, - 0xb9, 0xc5, 0xe0, 0xab, 0x33, 0x30, 0xbb, 0xd1, 0x8f, 0xa3, 0xb4, 0x48, - 0x4e, 0x35, 0x60, 0x2c, 0x0a, 0x97, 0x9f, 0x0e, 0xbe, 0x15, 0xcf, 0x1a, - 0x95, 0x92, 0xfa, 0x16, 0x74, 0xce, 0x41, 0x0c, 0x8f, 0xcc, 0x6e, 0x4e, - 0x32, 0xb8, 0x40, 0x96, 0x4f, 0x5d, 0x4c, 0x6e, 0xb1, 0xd8, 0x28, 0x6f, - 0x69, 0x43, 0x08, 0x9d, 0xb3, 0xf5, 0x97, 0x7f, 0x13, 0xf1, 0xbf, 0x13, - 0x25, 0x03, 0xc0, 0x5a, 0xa0, 0x98, 0x1e, 0x75, 0xa8, 0xfd, 0x50, 0x1e, - 0xbc, 0x8a, 0x23, 0xa7, 0x41, 0x18, 0x10, 0x7c, 0x42, 0xb9, 0x5f, 0xa4, - 0x2b, 0xf4, 0x09, 0x05, 0xad, 0x10, 0xc0, 0x29, 0xa8, 0xeb, 0xce, 0x41, - 0xff, 0x4c, 0x45, 0x5f, 0x47, 0x7e, 0x7b, 0x4f, 0xeb, 0xf6, 0x5e, 0xbe, - 0xe6, 0xa5, 0x56, 0x72, 0x7c, 0x7b, 0x58, 0x43, 0x05, 0x20, 0x11, 0x0a, - 0x02, 0x0e, 0x86, 0xb1, 0x9a, 0x51, 0xb9, 0xa3, 0x2f, 0x14, 0x69, 0x5e, - 0x15, 0xe5, 0x30, 0x26, 0x56, 0xff, 0x3f, 0xeb, 0xae, 0x53, 0x2e, 0xc6, - 0x5c, 0x94, 0x1a, 0x78, 0xd4, 0xa1, 0x36, 0x27, 0xe6, 0x72, 0x1c, 0x11, - 0x70, 0xdb, 0xb6, 0x5f, 0x47, 0x13, 0xfe, 0xcf, 0xc4, 0x50, 0x92, 0x3d, - 0xda, 0x8f, 0x96, 0xe7, 0x00, 0xf7, 0x73, 0xc7, 0x52, 0xad, 0x42, 0x34, - 0x03, 0x5f, 0x5d, 0x2c, 0x4e, 0x37, 0xcc, 0xff, 0xad, 0x6f, 0x72, 0xb8, - 0x75, 0x23, 0x95, 0x2c, 0xb9, 0x89, 0x8e, 0xe7, 0xff, 0x7a, 0x99, 0x76, - 0xa6, 0x88, 0xa1, 0x39, 0xdc, 0x67, 0x5d, 0x90, 0xc8, 0x63, 0x3c, 0xa2, - 0x80, 0x31, 0xc1, 0x9b, 0x08, 0xc6, 0x48, 0x5e, 0x22, 0x4b, 0xb1, 0x54, - 0xeb, 0x59, 0x66, 0xc8, 0xe0, 0x95, 0x38, 0x53, 0x1d, 0x7b, 0x46, 0xd1, - 0xc9, 0x6e, 0xf9, 0x07, 0x62, 0xcb, 0xcf, 0xff, 0x4f, 0x29, 0xfb, 0xab, - 0x3c, 0x8f, 0x0c, 0x04, 0xaf, 0x9e, 0x25, 0x38, 0x50, 0x44, 0xfa, 0xdf, - 0xbd, 0x34, 0x1a, 0xf2, 0x21, 0x33, 0x77, 0xae, 0xf1, 0xe4, 0x64, 0x15, - 0x82, 0x1f, 0x78, 0x01, 0x5a, 0x6d, 0x80, 0xe5, 0xa3, 0x53, 0x54, 0xa6, - 0xfe, 0xa7, 0x82, 0x7c, 0x39, 0xb7, 0xc9, 0xcb, 0x22, 0x2c, 0x32, 0x9c, - 0x17, 0xf0, 0x9f, 0x5c, 0x9b, 0xde, 0x46, 0x82, 0x74, 0x88, 0x47, 0xb8, - 0xe4, 0x57, 0x88, 0x4d, 0xb5, 0x4c, 0x1c, 0x8f, 0x38, 0x9c, 0x9e, 0x42, - 0xb2, 0x10, 0x3c, 0x50, 0xcd, 0x6a, 0xc8, 0x80, 0x17, 0x24, 0x9a, 0xb9, - 0x8c, 0x4b, 0x16, 0x99, 0xa1, 0xf7, 0x96, 0xd1, 0x5c, 0xbc, 0x8e, 0x23, - 0xcb, 0x64, 0x7d, 0xd4, 0x1e, 0x3f, 0x97, 0xc9, 0x77, 0x0e, 0x95, 0x80, - 0x54, 0x53, 0x65, 0x91, 0x3e, 0x9c, 0xee, 0x3b, 0xd6, 0x91, 0x65, 0x46, - 0xee, 0x47, 0x07, 0x40, 0x0f, 0x4b, 0xa4, 0x21, 0xc2, 0x3b, 0x4a, 0x75, - 0xae, 0x3b, 0xef, 0x6a, 0x03, 0xa3, 0xcf, 0xb5, 0x29, 0x8d, 0xcc, 0x59, - 0xfc, 0xf6, 0xdf, 0x56, 0xe5, 0x4a, 0x93, 0x59, 0x06, 0x8e, 0x98, 0x62, - 0x15, 0xbd, 0xd2, 0x40, 0xac, 0xa0, 0xca, 0x21, 0x6d, 0xda, 0x4c, 0x2f, - 0x7e, 0x9b, 0xc7, 0xde, 0x5c, 0xf4, 0x13, 0x79, 0xfa, 0xea, 0x6c, 0x90, - 0x08, 0xed, 0x32, 0xa0, 0xb2, 0x5d, 0xed, 0x11, 0x1c, 0xeb, 0xe2, 0x32, - 0x48, 0x7f, 0xcb, 0x50, 0x6a, 0x64, 0xeb, 0xad, 0x86, 0x49, 0x71, 0x97, - 0xce, 0x07, 0xe5, 0x15, 0x86, 0x70, 0x04, 0xf5, 0xd7, 0xa7, 0x6f, 0x2b, - 0xb7, 0x4a, 0xff, 0x85, 0xc6, 0x90, 0xe2, 0x4d, 0x62, 0x9b, 0x0a, 0x77, - 0xae, 0xae, 0x86, 0x6a, 0xb6, 0x3a, 0x6d, 0x41, 0xd1, 0xfa, 0x6d, 0x5a, - 0x2d, 0x98, 0xd5, 0xab, 0x68, 0x12, 0x7e, 0x91, 0xfe, 0x8f, 0xca, 0xb5, - 0x1d, 0x2b, 0xbb, 0x99, 0x12, 0xbe, 0x55, 0x09, 0xf8, 0xfa, 0xa9, 0x6b, - 0x08, 0x46, 0x1d, 0x73, 0xfa, 0xcf, 0xd3, 0x07, 0x1e, 0x65, 0xa7, 0x9f, - 0xa7, 0xb4, 0xba, 0x6f, 0x4d, 0xbe, 0xf2, 0xf8, 0xe2, 0x70, 0xc4, 0x0e, - 0x09, 0xb5, 0xf6, 0xb9, 0xb0, 0xe2, 0xa6, 0x6f, 0x3d, 0x4e, 0x56, 0xf2, - 0xe2, 0x4d, 0xfa, 0x75, 0x16, 0x40, 0x00, 0xf2, 0x40, 0xb8, 0x70, 0xe3, - 0xd4, 0xb3, 0x43, 0x3b, 0x0e, 0x33, 0x03, 0xe3, 0xf8, 0x11, 0x15, 0x87, - 0xdb, 0x68, 0x14, 0x64, 0xd0, 0x3e, 0xac, 0x7a, 0x1c, 0xdf, 0x40, 0x92, - 0x80, 0x80, 0xb4, 0xcb, 0xf1, 0x75, 0x04, 0x29, 0x32, 0x59, 0xdd, 0x4d, - 0x7e, 0x7e, 0x96, 0x66, 0x02, 0x33, 0x1d, 0x0f, 0x4f, 0x8e, 0xa8, 0x64, - 0xaf, 0xc8, 0x1f, 0x8c, 0xd6, 0x35, 0x36, 0x62, 0x29, 0x5a, 0xd4, 0xad, - 0xd7, 0x9e, 0x49, 0x23, 0x01, 0xb4, 0xb1, 0xc8, 0x07, 0x46, 0x3c, 0x33, - 0x8d, 0x0f, 0xf3, 0x9e, 0x6f, 0x11, 0x37, 0x1f, 0x78, 0x57, 0xbe, 0xbc, - 0x8a, 0x9b, 0xe3, 0x33, 0x8f, 0xde, 0x1b, 0x8d, 0x2f, 0x9e, 0x5d, 0xec, - 0x6a, 0xd7, 0x6b, 0xad, 0xb1, 0x3a, 0xd0, 0x10, 0xb3, 0xe4, 0x4e, 0xc8, - 0xcf, 0x15, 0x49, 0xcb, 0x79, 0x13, 0x0c, 0xc7, 0x57, 0x51, 0x62, 0xdd, - 0xec, 0xff, 0x18, 0x6b, 0x72, 0x6d, 0x24, 0x90, 0xb8, 0x73, 0x38, 0x05, - 0x88, 0xba, 0x69, 0x47, 0x79, 0xc5, 0x53, 0xbf, 0xba, 0x96, 0x69, 0x81, - 0x32, 0xa1, 0xbf, 0x4f, 0x87, 0xdc, 0xd9, 0xa2, 0x46, 0x3f, 0xf1, 0xbe, - 0xa0, 0x67, 0x80, 0xc2, 0x82, 0xd4, 0x8a, 0x10, 0x10, 0xa5, 0x23, 0xe2, - 0xb8, 0xd1, 0x37, 0xe5, 0xd2, 0x6a, 0x6f, 0xf2, 0xc0, 0xd9, 0x6a, 0xdc, - 0x04, 0xda, 0xd2, 0xe6, 0x12, 0x6a, 0x81, 0xfb, 0xff, 0x90, 0x31, 0x30, - 0xfb, 0xf9, 0xb4, 0xed, 0x6a, 0xa4, 0x2b, 0x90, 0x6d, 0xcc, 0x9c, 0xba, - 0x2b, 0xd0, 0x63, 0x9f, 0x5c, 0xd3, 0xe7, 0x37, 0xb5, 0xdd, 0x6b, 0x0a, - 0xe8, 0xbd, 0x9e, 0xd2, 0x12, 0x61, 0x19, 0x6f, 0x2e, 0x31, 0x56, 0x63, - 0x5e, 0x47, 0xa4, 0x72, 0xa9, 0x9e, 0x4a, 0x6b, 0x37, 0x15, 0x1d, 0xfb, - 0xa9, 0x16, 0x49, 0xfc, 0x00, 0x33, 0x94, 0x75, 0xa6, 0x46, 0x58, 0x82, - 0x06, 0xc9, 0xba, 0xb4, 0xed, 0x7f, 0x2d, 0x8c, 0x0b, 0x70, 0xca, 0x77, - 0x66, 0x22, 0xf8, 0x75, 0x68, 0xb2, 0x17, 0x4a, 0x00, 0x2a, 0x3e, 0x29, - 0x04, 0x37, 0xdf, 0x9e, 0x8b, 0x09, 0x42, 0xdd, 0x84, 0xad, 0x85, 0x58, - 0xf9, 0xe7, 0x48, 0x3b, 0xcb, 0x1c, 0xa2, 0x5b, 0x1a, 0xda, 0x17, 0x2e, - 0x5c, 0xa0, 0x60, 0xb8, 0x62, 0x94, 0x31, 0x10, 0x99, 0xa1, 0x2d, 0xec, - 0x67, 0x41, 0xad, 0x5e, 0x87, 0x28, 0x86, 0x37, 0x91, 0xf1, 0x46, 0x74, - 0x9b, 0xa5, 0x57, 0xf7, 0x45, 0xd7, 0xe0, 0xcd, 0x73, 0xd3, 0x9e, 0x74, - 0x12, 0x35, 0x4c, 0xc5, 0x20, 0x28, 0x9c, 0x19, 0xe3, 0x36, 0x65, 0x65, - 0x28, 0xf9, 0x22, 0xc6, 0x6b, 0x7d, 0x33, 0x57, 0xd3, 0xda, 0x0b, 0xbb, - 0xbe, 0xba, 0xc1, 0x8a, 0x24, 0x8d, 0xf3, 0x02, 0xe7, 0x3f, 0x27, 0xec, - 0xb2, 0x2f, 0xf8, 0x67, 0x5a, 0x78, 0x4b, 0xb5, 0x20, 0xab, 0x1c, 0x01, - 0x83, 0x14, 0x06, 0xd4, 0x64, 0xc2, 0x45, 0x6c, 0x54, 0x1e, 0xa1, 0x0f, - 0x96, 0x5a, 0x83, 0x38, 0xe7, 0x45, 0x3d, 0xd7, 0x12, 0x8b, 0xd2, 0xf2, - 0x8a, 0xe2, 0x43, 0x61, 0x26, 0x64, 0xae, 0x61, 0x0b, 0x77, 0xdd, 0x5a, - 0x0d, 0x8a, 0x48, 0x86, 0x54, 0x21, 0xe9, 0x54, 0x74, 0x4e, 0x1f, 0x93, - 0xf2, 0x6b, 0x71, 0xe3, 0xe5, 0xaf, 0x56, 0x78, 0x99, 0xdd, 0xe5, 0xd2, - 0x8b, 0x03, 0x27, 0xfa, 0x80, 0xbe, 0x11, 0x9a, 0x9b, 0xe9, 0xaa, 0x1a, - 0x1e, 0xc3, 0xf9, 0x47, 0xa3, 0xbc, 0x19, 0x6d, 0x4c, 0x55, 0xac, 0x88, - 0x80, 0xaf, 0x07, 0x01, 0x22, 0xb2, 0xfd, 0xb6, 0xb1, 0x93, 0x18, 0xb6, - 0x16, 0xa1, 0x8b, 0x66, 0x92, 0x00, 0x43, 0xdf, 0x0b, 0x97, 0x80, 0x55, - 0x01, 0xb6, 0x58, 0xb8, 0x97, 0xcf, 0xc2, 0xe9, 0x8b, 0x2d, 0x94, 0x73, - 0xa6, 0xae, 0x52, 0x1b, 0x65, 0x13, 0x29, 0x0b, 0xad, 0x68, 0x5a, 0x60, - 0xa4, 0xed, 0x51, 0x61, 0x1f, 0xeb, 0x26, 0xfe, 0x6c, 0xf9, 0xe2, 0xbb, - 0x48, 0x47, 0xa5, 0xf3, 0x96, 0xdd, 0x77, 0x17, 0xed, 0x98, 0x5c, 0xc6, - 0x2c, 0xf3, 0x4e, 0x90, 0xb7, 0x8f, 0xf0, 0x84, 0x59, 0x00, 0x46, 0x7e, - 0x0b, 0xc4, 0x15, 0xa1, 0xe7, 0x1b, 0xfd, 0xd5, 0x8a, 0x45, 0x27, 0xf4, - 0xa7, 0x9a, 0x22, 0x92, 0x16, 0x0a, 0xb3, 0x65, 0xcf, 0xb3, 0x14, 0xe8, - 0x92, 0x48, 0x54, 0x5c, 0xc7, 0xa4, 0xd2, 0xfc, 0xf4, 0x8c, 0x61, 0x6f, - 0x3d, 0x64, 0x34, 0x8b, 0x13, 0x9b, 0x09, 0x3d, 0xef, 0xe0, 0x08, 0xfd, - 0x50, 0xbd, 0xe8, 0x4f, 0xdb, 0x1e, 0x6e, 0xfa, 0x80, 0x94, 0x5c, 0x69, - 0xb3, 0x7d, 0x24, 0xb2, 0xd9, 0x6a, 0x0a, 0x34, 0x97, 0xdb, 0x36, 0xf9, - 0xc8, 0x46, 0x61, 0x12, 0x0e, 0x43, 0xc1, 0x19, 0xf8, 0xc4, 0xa9, 0x54, - 0x10, 0x02, 0x0d, 0xc8, 0x1a, 0x42, 0xd8, 0xcc, 0x95, 0x3d, 0x87, 0x93, - 0x3c, 0x32, 0x72, 0xd3, 0x67, 0x70, 0x17, 0x59, 0x9f, 0x5b, 0xea, 0x11, - 0xa4, 0x3d, 0x64, 0x5c, 0xea, 0xfc, 0x6f, 0x4e, 0x97, 0x2e, 0x57, 0x43, - 0x26, 0x7e, 0x98, 0x21, 0x49, 0x4c, 0xfc, 0x63, 0x69, 0xff, 0xe0, 0xa8, - 0x2f, 0x87, 0x01, 0x03, 0x69, 0xca, 0x99, 0xa6, 0x3b, 0x8d, 0x86, 0xb4, - 0xdf, 0xb7, 0x10, 0xde, 0x9f, 0x53, 0x6e, 0x49, 0x06, 0x7f, 0x96, 0xd5, - 0x2c, 0x1c, 0xb7, 0xf3, 0x16, 0xf5, 0xd4, 0x63, 0x18, 0x61, 0x10, 0x6e, - 0x67, 0xb3, 0x81, 0x26, 0xf1, 0x64, 0x5a, 0xd2, 0xab, 0x57, 0x63, 0xe7, - 0xa6, 0x11, 0x09, 0xce, 0x19, 0xd0, 0x69, 0x73, 0xfd, 0xaa, 0x5a, 0xc8, - 0xa0, 0xc0, 0x55, 0xca, 0x08, 0x72, 0x7d, 0xaa, 0x06, 0x27, 0x22, 0x65, - 0x1c, 0xe0, 0x26, 0x86, 0xf2, 0x25, 0x9f, 0xdc, 0x28, 0x0a, 0xad, 0x30, - 0x0d, 0x71, 0x97, 0xfc, 0xef, 0x24, 0x6b, 0x80, 0x1f, 0x45, 0x84, 0x67, - 0xed, 0x80, 0x08, 0x5d, 0xc7, 0x16, 0xa7, 0x28, 0x5b, 0x96, 0xb7, 0xc4, - 0xd7, 0xa7, 0x05, 0xa6, 0x9b, 0xbf, 0xa7, 0x80, 0xf7, 0xae, 0x6c, 0xb9, - 0x2c, 0x24, 0x64, 0x3b, 0x59, 0xf1, 0xf9, 0x32, 0x97, 0x12, 0x18, 0x6b, - 0x95, 0x4c, 0x43, 0x3a, 0x57, 0xe0, 0x8c, 0xdb, 0x8e, 0x06, 0x87, 0xfc, - 0x20, 0x91, 0x05, 0xea, 0x71, 0x59, 0xe8, 0x95, 0xab, 0x6d, 0xd7, 0xe1, - 0xfe, 0x57, 0x99, 0xdd, 0xe8, 0x9e, 0x4d, 0x6c, 0x8a, 0xe3, 0x32, 0x00, - 0xb6, 0x6f, 0x6d, 0x2a, 0x56, 0xb6, 0x5d, 0x71, 0x97, 0xed, 0xbf, 0xcf, - 0xcc, 0x0f, 0xc5, 0xdc, 0x64, 0x94, 0x34, 0xe5, 0x08, 0xa6, 0x71, 0x65, - 0x08, 0x10, 0x9c, 0x2c, 0x52, 0xe5, 0x8d, 0x67, 0x5c, 0xe5, 0x44, 0xd8, - 0xb9, 0x18, 0xdd, 0x89, 0x36, 0x68, 0x74, 0x8c, 0x35, 0x5b, 0xa8, 0xe9, - 0xbe, 0x97, 0xc5, 0x8f, 0xfc, 0x40, 0x31, 0xd4, 0x62, 0xed, 0x81, 0xd8, - 0xf1, 0x7e, 0x12, 0x01, 0x66, 0x92, 0xb2, 0x25, 0x39, 0xcd, 0xde, 0xb6, - 0x9f, 0xd9, 0xf9, 0x8c, 0x2f, 0xe6, 0xbc, 0x57, 0x9d, 0x69, 0x2a, 0x98, - 0xdb, 0xfc, 0xf7, 0xfd, 0x89, 0xcd, 0xc4, 0xb6, 0x5c, 0x60, 0xc9, 0xdd, - 0x77, 0xf7, 0xda, 0x4c, 0x3a, 0x11, 0xd8, 0xf5, 0x8e, 0x7e, 0xfc, 0xff, - 0x3f, 0x8d, 0x00, 0x71, 0xf1, 0x6a, 0x5e, 0xcc, 0x94, 0x4f, 0x53, 0xf1, - 0x60, 0x19, 0x10, 0x56, 0x4e, 0xe9, 0x56, 0xff, 0x08, 0xa5, 0xda, 0xf8, - 0x0e, 0x76, 0x91, 0x19, 0x8b, 0x7a, 0x79, 0xde, 0x77, 0xb6, 0xda, 0xef, - 0x1d, 0x4c, 0x22, 0x44, 0x11, 0xfa, 0x5a, 0x98, 0x9e, 0xf1, 0x28, 0xd7, - 0xfa, 0xad, 0xb2, 0x17, 0x53, 0x79, 0x1a, 0x29, 0xaa, 0x0d, 0x64, 0xf8, - 0xf5, 0xf6, 0xd4, 0x2e, 0x90, 0x26, 0xde, 0xce, 0x98, 0xa2, 0x5a, 0x46, - 0xe5, 0x78, 0xf7, 0x17, 0x8b, 0xb6, 0xc8, 0xda, 0xa4, 0xcd, 0x99, 0xf1, - 0x3f, 0x4b, 0x85, 0x34, 0xce, 0x3b, 0xe4, 0x60, 0xa5, 0x08, 0xc5, 0x4a, - 0xfd, 0xf5, 0x4b, 0x29, 0xd4, 0xbb, 0x6e, 0x98, 0x5e, 0x0d, 0xf1, 0x32, - 0x76, 0x70, 0xac, 0x5e, 0x9f, 0xcb, 0x8d, 0x4c, 0xa9, 0xfd, 0x72, 0xc5, - 0x39, 0x4a, 0x23, 0x3c, 0xb3, 0xd9, 0x35, 0xee, 0xf3, 0x51, 0xbf, 0x7e, - 0x28, 0x82, 0x9d, 0xda, 0xfb, 0x0a, 0x35, 0x4f, 0x72, 0xd6, 0x10, 0xa1, - 0x1c, 0x84, 0x30, 0x6e, 0x40, 0x4f, 0x82, 0x54, 0xec, 0x00, 0x58, 0x24, - 0xea, 0xa3, 0xdb, 0x14, 0x9e, 0x29, 0xd2, 0x12, 0xc0, 0xd2, 0x23, 0xce, - 0x8b, 0xa1, 0x9d, 0x4b, 0xe4, 0x14, 0x92, 0xce, 0xe0, 0xaa, 0xc2, 0xeb, - 0xac, 0x26, 0x0c, 0x66, 0x49, 0x40, 0xd6, 0xba, 0x1d, 0x06, 0xc2, 0x43, - 0x51, 0x74, 0x7b, 0xcd, 0x10, 0x56, 0x35, 0xd9, 0x11, 0x9b, 0xed, 0x2a, - 0xa2, 0x3b, 0x94, 0x02, 0xd3, 0x1f, 0x60, 0xc4, 0x23, 0x63, 0x50, 0xe2, - 0x73, 0xbd, 0x2e, 0x0d, 0x1b, 0xee, 0xa2, 0x89, 0xfd, 0x84, 0x6b, 0x4c, - 0x00, 0xdd, 0x41, 0x2a, 0x07, 0x14, 0x99, 0x41, 0xb5, 0x72, 0x5e, 0xf7, - 0xe7, 0xb5, 0xfc, 0xe1, 0x4f, 0xc4, 0xa1, 0x57, 0x73, 0x10, 0xdd, 0x86, - 0xee, 0x21, 0x16, 0xb2, 0xe2, 0x74, 0x01, 0x04, 0x85, 0xc4, 0x8d, 0x9f, - 0xe9, 0x96, 0xb5, 0x0f, 0x29, 0xe0, 0x40, 0x9b, 0xc4, 0x69, 0xac, 0xe5, - 0xa0, 0xfd, 0x58, 0x81, 0xdf, 0x9f, 0x51, 0x5c, 0x98, 0x20, 0x4c, 0x86, - 0xc0, 0x8d, 0x6e, 0xfa, 0x96, 0x8b, 0xe7, 0xc1, 0xe1, 0x3b, 0x46, 0x5c, - 0xd2, 0x6a, 0x26, 0xf5, 0x88, 0xc9, 0xf0, 0x43, 0xa1, 0x04, 0x1d, 0xb9, - 0x7c, 0xbd, 0x4c, 0xfa, 0x7d, 0x88, 0x7e, 0xf4, 0x2f, 0xf5, 0x28, 0x25, - 0xcd, 0xfc, 0x6b, 0xb4, 0xba, 0xef, 0x52, 0xba, 0x6f, 0x7d, 0xb2, 0xb4, - 0x24, 0x26, 0xd5, 0x4d, 0x80, 0xa4, 0x98, 0x8c, 0x9b, 0x84, 0x46, 0xde, - 0xb6, 0x4d, 0x09, 0x38, 0x7f, 0xd1, 0xeb, 0x97, 0x97, 0xe8, 0x98, 0x1c, - 0xf8, 0x7b, 0x24, 0xb5, 0xd4, 0x95, 0xd4, 0x3e, 0x1b, 0x1e, 0xd0, 0x1f, - 0x1f, 0x90, 0x01, 0x45, 0xd9, 0x92, 0xb1, 0xc8, 0xed, 0x4e, 0x1e, 0xf9, - 0x0a, 0x67, 0xd1, 0xf6, 0x8e, 0xb9, 0x6c, 0x4c, 0x5a, 0x22, 0x09, 0x1f, - 0xfa, 0x4c, 0xc8, 0x5d, 0xdb, 0xca, 0xeb, 0x1a, 0x76, 0x79, 0xb5, 0x4a, - 0xa2, 0xcc, 0xf6, 0xe9, 0xff, 0x7d, 0x86, 0x2d, 0xee, 0x94, 0x83, 0x50, - 0xc3, 0x29, 0x38, 0x05, 0x56, 0x42, 0xd7, 0x19, 0x38, 0x6f, 0xef, 0xe9, - 0x0a, 0xeb, 0xf0, 0x83, 0xcb, 0x1f, 0x3b, 0x1a, 0x6c, 0xf1, 0x11, 0x50, - 0xef, 0x38, 0xdf, 0x5b, 0xd4, 0x5b, 0x2a, 0x18, 0x8c, 0x35, 0x57, 0xdb, - 0x57, 0xda, 0x3f, 0x76, 0xa8, 0x57, 0xb3, 0xee, 0x04, 0x39, 0x1c, 0x21, - 0x98, 0xc6, 0x41, 0x6d, 0xd7, 0xe0, 0xb0, 0x61, 0xa3, 0x9d, 0xb7, 0xb8, - 0x78, 0xf7, 0x39, 0x66, 0xba, 0x44, 0x4c, 0x69, 0xac, 0xa2, 0xdf, 0xca, - 0xd7, 0x8f, 0xee, 0x85, 0xa3, 0xb6, 0x42, 0xfa, 0x16, 0x08, 0x56, 0x6d, - 0x00, 0x41, 0xd0, 0x91, 0xcd, 0x72, 0x46, 0xad, 0x1d, 0xf4, 0xaa, 0xd0, - 0x1d, 0xb2, 0xcf, 0xbb, 0x4d, 0x5d, 0xf6, 0xda, 0xf6, 0x6d, 0xf4, 0x6d, - 0x91, 0xad, 0xc8, 0xe6, 0xbd, 0x89, 0x5d, 0x57, 0xc6, 0xbe, 0xad, 0x07, - 0x73, 0xda, 0xf1, 0xf7, 0x36, 0x53, 0xda, 0x84, 0x89, 0xc1, 0x44, 0xeb, - 0x88, 0x58, 0xc2, 0xcf, 0x9b, 0x90, 0x05, 0x9a, 0xba, 0xb2, 0x23, 0x95, - 0xf0, 0x61, 0xca, 0xcf, 0xa7, 0x4c, 0xdf, 0xc7, 0x17, 0x9f, 0x33, 0x51, - 0x0c, 0x4f, 0x8d, 0xab, 0xc6, 0x8f, 0x0a, 0xed, 0xf3, 0xd3, 0x85, 0x05, - 0xd7, 0x09, 0xec, 0x23, 0x56, 0x61, 0xd5, 0x65, 0x86, 0xa6, 0x7e, 0xdd, - 0x31, 0x63, 0x6e, 0x40, 0xf1, 0x59, 0xa4, 0x09, 0x8f, 0x47, 0x61, 0x4b, - 0xb0, 0x40, 0x29, 0x11, 0xed, 0xfa, 0xca, 0x67, 0x0b, 0xaf, 0x5b, 0xbb, - 0xd6, 0xda, 0x4f, 0xb5, 0x37, 0xc8, 0xe4, 0x5d, 0x1f, 0x46, 0xb8, 0x76, - 0xfb, 0xff, 0x5f, 0xa3, 0xab, 0x77, 0x63, 0x64, 0x54, 0xab, 0x48, 0x4f, - 0x70, 0x0d, 0x4b, 0x33, 0xcd, 0xf3, 0x98, 0xdf, 0xee, 0x15, 0xb1, 0x0e, - 0x3e, 0x44, 0x73, 0x5d, 0x5a, 0xdf, 0xfe, 0x94, 0x97, 0x13, 0xa8, 0x2c, - 0x32, 0x61, 0xcf, 0xba, 0x84, 0x8b, 0x2f, 0xd1, 0x30, 0x2b, 0xea, 0x13, - 0x0e, 0xed, 0x87, 0xbc, 0x7f, 0xd9, 0x73, 0x54, 0xbb, 0xfd, 0x9e, 0xd7, - 0x5a, 0x36, 0xfc, 0xfd, 0xbe, 0x36, 0x86, 0xc6, 0xc9, 0xf2, 0x18, 0x46, - 0x05, 0x80, 0x13, 0xbb, 0xe7, 0xe2, 0x7d, 0x33, 0x3a, 0xc6, 0x6e, 0x84, - 0x57, 0xef, 0x6f, 0x4a, 0xb9, 0x8e, 0x5e, 0x1e, 0xbf, 0xed, 0xd9, 0x6d, - 0xe7, 0xb9, 0x6f, 0x05, 0xe5, 0x5c, 0x5d, 0x4c, 0xd5, 0x7f, 0x24, 0xb8, - 0xe6, 0xa8, 0xee, 0xbe, 0x4f, 0x5a, 0xf1, 0xd5, 0xdc, 0xf1, 0x8f, 0xa8, - 0xe0, 0xbd, 0xa3, 0x0c, 0x63, 0xb5, 0x45, 0x0f, 0xbd, 0xd4, 0x1a, 0xcd, - 0xfe, 0x83, 0x78, 0x06, 0x35, 0xb6, 0x14, 0xaa, 0x54, 0xec, 0x73, 0x5a, - 0x7a, 0x1d, 0x5e, 0xec, 0xea, 0xe7, 0xc5, 0xe5, 0x16, 0x52, 0x45, 0x12, - 0xd3, 0x3d, 0xf6, 0x20, 0x43, 0x9e, 0xf9, 0x13, 0xb6, 0xcb, 0x95, 0x80, - 0xfc, 0xbc, 0xb1, 0x6a, 0x8d, 0x57, 0xcb, 0x45, 0x2c, 0x72, 0x6f, 0xb6, - 0x19, 0xbe, 0x0f, 0x01, 0xce, 0x06, 0xe7, 0xb9, 0x37, 0x78, 0xfa, 0x30, - 0x7e, 0x52, 0x14, 0x52, 0xcd, 0x2e, 0x0f, 0xc2, 0x8a, 0x77, 0xd9, 0xf2, - 0xbf, 0x05, 0x73, 0x67, 0x53, 0xc7, 0xfb, 0x79, 0xe1, 0x88, 0x10, 0xcf, - 0xab, 0x26, 0xf5, 0xe0, 0x76, 0xd4, 0x5f, 0xa3, 0x82, 0xc5, 0xe1, 0x77, - 0x50, 0xe5, 0x5c, 0xde, 0xe6, 0xd2, 0xf7, 0x7b, 0xf6, 0x41, 0xa2, 0xb9, - 0xe6, 0x4d, 0x89, 0x00, 0x30, 0xb4, 0x82, 0x35, 0xec, 0x85, 0x7c, 0x63, - 0x0f, 0x3d, 0xb9, 0x3d, 0xb1, 0x2d, 0x72, 0xaa, 0xc9, 0xa7, 0xdf, 0x48, - 0x1c, 0x0e, 0x0e, 0x16, 0xd4, 0x4e, 0x9a, 0xf5, 0x64, 0x25, 0xe3, 0x14, - 0xbe, 0xd3, 0xc4, 0xac, 0xd3, 0xfe, 0xf3, 0xcf, 0x07, 0x69, 0x83, 0xae, - 0xda, 0x7b, 0xc9, 0x0f, 0x14, 0xe7, 0xbb, 0xab, 0x9a, 0x08, 0x44, 0xd5, - 0xd7, 0x01, 0x18, 0x79, 0x85, 0xbc, 0x56, 0x0c, 0x8f, 0x87, 0x27, 0x52, - 0x96, 0x4b, 0x6f, 0x0e, 0x02, 0xc0, 0x81, 0xae, 0x65, 0x87, 0x63, 0xd2, - 0xac, 0x46, 0x51, 0xdb, 0x44, 0xba, 0xbf, 0x96, 0x43, 0x52, 0xf1, 0x64, - 0xc6, 0x73, 0x53, 0xf5, 0xa2, 0xe2, 0xe8, 0x28, 0x57, 0x4b, 0xe3, 0x25, - 0xeb, 0x7c, 0x9e, 0x58, 0x38, 0xe5, 0x1d, 0x10, 0xf1, 0x60, 0xdc, 0x0d, - 0xa7, 0x4c, 0xd6, 0x12, 0x3e, 0x18, 0x5c, 0x5d, 0x38, 0x38, 0x06, 0xf7, - 0x66, 0x13, 0xf8, 0x97, 0x90, 0x8c, 0x50, 0x37, 0xa5, 0xd3, 0x50, 0xfa, - 0xd7, 0x7e, 0xf9, 0x56, 0x20, 0xa5, 0x3e, 0x6b, 0x07, 0xc8, 0xfc, 0xc5, - 0x34, 0x93, 0x76, 0x6e, 0x32, 0x9d, 0xfa, 0x3d, 0x3f, 0x63, 0xc9, 0xf8, - 0x22, 0xf2, 0xf2, 0xbb, 0xfa, 0x21, 0x8f, 0xf2, 0x47, 0xd7, 0x59, 0x04, - 0xc8, 0x91, 0x61, 0xaa, 0x9f, 0x7f, 0x9f, 0x53, 0xce, 0xa7, 0x84, 0xf6, - 0x38, 0x79, 0x9e, 0xa2, 0x8b, 0x8d, 0x0f, 0x52, 0xab, 0xae, 0x5e, 0xb2, - 0x10, 0xd2, 0xaf, 0x30, 0x76, 0xb8, 0x04, 0xf0, 0xcd, 0x1b, 0x44, 0xef, - 0xd3, 0x62, 0xa1, 0x13, 0xbd, 0x26, 0x0d, 0x8e, 0x5f, 0x35, 0xd0, 0x38, - 0x37, 0xf0, 0x03, 0x26, 0x6f, 0x50, 0x20, 0x10, 0x28, 0xbe, 0xae, 0x3e, - 0x63, 0x8b, 0x38, 0xc0, 0x11, 0x2c, 0x4e, 0x32, 0x3d, 0xbe, 0x25, 0xaf, - 0x01, 0xc3, 0x66, 0x42, 0x6c, 0xbd, 0x00, 0x90, 0xcb, 0x50, 0x7b, 0x75, - 0xc8, 0x85, 0x99, 0x5c, 0xae, 0x94, 0x36, 0xbc, 0x98, 0x9f, 0xdb, 0x09, - 0x61, 0xd2, 0x30, 0x5f, 0x23, 0xf6, 0x5b, 0x41, 0x96, 0xb7, 0xcb, 0x7c, - 0x20, 0x26, 0x09, 0x0c, 0x0e, 0x57, 0x8b, 0x33, 0x66, 0x73, 0x2e, 0x58, - 0xd4, 0x7c, 0x6f, 0xe7, 0x94, 0x8b, 0x1c, 0xe9, 0x7b, 0xcb, 0x28, 0x73, - 0xce, 0xfd, 0xfb, 0x58, 0x8e, 0xbf, 0x51, 0x7f, 0x61, 0x4b, 0x4e, 0xaa, - 0x82, 0x3a, 0xcb, 0xe2, 0xd4, 0x2e, 0x30, 0x09, 0x6f, 0x25, 0xa5, 0x3a, - 0xe7, 0xfb, 0xac, 0x13, 0x1e, 0xb3, 0x16, 0xc8, 0x33, 0xfe, 0x6d, 0x65, - 0xa8, 0xb6, 0xf2, 0xf0, 0x00, 0x9f, 0xed, 0x36, 0xa7, 0xf6, 0xa9, 0xf7, - 0x0c, 0x42, 0x61, 0xe3, 0x49, 0x68, 0x5c, 0xdc, 0xc8, 0x51, 0x3c, 0x85, - 0xcf, 0xda, 0xe0, 0xac, 0x29, 0xa3, 0x65, 0xe7, 0x38, 0x3c, 0xba, 0x0c, - 0x7d, 0x12, 0xf9, 0x0a, 0x51, 0x96, 0x51, 0x01, 0x0f, 0xae, 0xf3, 0xbd, - 0x76, 0xd3, 0x06, 0x7a, 0x5d, 0x0e, 0x41, 0x53, 0x21, 0x3c, 0xc3, 0x4a, - 0x69, 0xdd, 0x5d, 0x39, 0x60, 0x80, 0x49, 0x76, 0xbe, 0x34, 0xaf, 0x28, - 0x37, 0x01, 0x17, 0xbb, 0x88, 0x21, 0xb5, 0x40, 0xfa, 0x0a, 0x2a, 0x9c, - 0xa5, 0xfe, 0xf6, 0x2a, 0x23, 0x49, 0xc5, 0xd7, 0x17, 0xa6, 0x98, 0x55, - 0xa7, 0x53, 0xe3, 0xe5, 0x48, 0xdb, 0xbc, 0x72, 0x0d, 0x69, 0xf0, 0xc1, - 0x40, 0xda, 0x1f, 0x37, 0x1c, 0x24, 0xb8, 0x0e, 0xd1, 0x47, 0xf7, 0x36, - 0x19, 0xc4, 0xa5, 0xdd, 0x46, 0x3d, 0x6c, 0x92, 0x76, 0x67, 0x1f, 0x3c, - 0x77, 0xaf, 0x14, 0x24, 0xf2, 0x09, 0x7a, 0x12, 0xaa, 0x3f, 0xf5, 0xe5, - 0x7d, 0x08, 0x3f, 0x80, 0xc5, 0xe6, 0x32, 0xc2, 0x46, 0x07, 0xa7, 0xc7, - 0xe1, 0xef, 0xca, 0x8d, 0x07, 0xed, 0x79, 0xa1, 0x42, 0x5a, 0xd3, 0x4a, - 0x90, 0xf6, 0x2d, 0x5d, 0x53, 0xa1, 0x7d, 0x30, 0xc0, 0xc7, 0x9f, 0x40, - 0xdc, 0x22, 0x5c, 0x8e, 0x18, 0x72, 0x85, 0x31, 0x3d, 0x86, 0x2c, 0x37, - 0xea, 0xd5, 0xd6, 0x1e, 0xa0, 0x1c, 0xaf, 0x18, 0x26, 0x60, 0xaf, 0x44, - 0xd3, 0x06, 0xef, 0x10, 0x32, 0xf2, 0x57, 0x1e, 0x97, 0xe5, 0x45, 0xbb, - 0x84, 0x14, 0x67, 0x0f, 0x29, 0x9d, 0x3a, 0x78, 0xa4, 0x95, 0x05, 0x8d, - 0xbf, 0x3d, 0xd0, 0x5d, 0x08, 0x98, 0xc8, 0xf4, 0xad, 0xa8, 0x65, 0xd1, - 0xf4, 0x5c, 0xa6, 0x5a, 0xc0, 0xd0, 0xfd, 0xe2, 0xed, 0x47, 0xe9, 0x98, - 0x43, 0xef, 0x97, 0x35, 0xbe, 0xff, 0xcb, 0x79, 0x50, 0x7d, 0x30, 0xcb, - 0xd8, 0x9f, 0x54, 0xf8, 0xc4, 0x1b, 0x27, 0x40, 0xa8, 0x33, 0x0f, 0xce, - 0x69, 0xf2, 0xcb, 0x82, 0x0b, 0x1f, 0x80, 0x9c, 0x69, 0xc4, 0x7f, 0xde, - 0x75, 0x88, 0x62, 0x3a, 0xfa, 0x69, 0x10, 0x5b, 0x26, 0x47, 0xd5, 0xcb, - 0xb5, 0xfc, 0x45, 0x21, 0x42, 0xe5, 0xf5, 0xa5, 0xf0, 0x26, 0x93, 0x76, - 0x6f, 0x2a, 0x3e, 0x4e, 0x9d, 0x3f, 0xeb, 0x85, 0xbf, 0x1c, 0x7f, 0x84, - 0x9f, 0xba, 0xc1, 0x18, 0x15, 0x96, 0x2e, 0x00, 0x61, 0x9b, 0x57, 0x8b, - 0x6d, 0x6d, 0xfd, 0x1d, 0x24, 0x7b, 0x72, 0x43, 0x6b, 0x38, 0xcd, 0x66, - 0x79, 0x02, 0x79, 0x76, 0x07, 0x52, 0x1f, 0x6b, 0x9d, 0xb0, 0x9b, 0x59, - 0x8a, 0x0e, 0x89, 0x86, 0xf3, 0x48, 0x08, 0xbf, 0xbf, 0x2b, 0x50, 0x87, - 0x1c, 0x22, 0x4e, 0x56, 0xbe, 0x85, 0x10, 0x57, 0x3a, 0x93, 0xbc, 0xf3, - 0xce, 0x2b, 0x3c, 0xa1, 0xdb, 0x44, 0x55, 0x2e, 0x6d, 0x63, 0x9f, 0x28, - 0x43, 0xe3, 0xbd, 0x0b, 0x99, 0x0c, 0xf8, 0x5d, 0x2e, 0x75, 0xeb, 0x86, - 0xb0, 0x5d, 0x0f, 0x48, 0xbb, 0x7f, 0x2c, 0xbd, 0xe0, 0x4b, 0x2f, 0xd9, - 0xb7, 0x36, 0x1a, 0x4c, 0xfe, 0x61, 0x6e, 0xe6, 0x38, 0x28, 0x27, 0xf6, - 0x74, 0xd9, 0xd7, 0xbf, 0xf3, 0x74, 0x20, 0x87, 0xb1, 0xa6, 0x21, 0xf2, - 0xa9, 0x57, 0xb5, 0xc2, 0x2e, 0x35, 0x53, 0x4b, 0x55, 0xbe, 0xc5, 0x4c, - 0x15, 0x84, 0x1f, 0xda, 0xf0, 0xa8, 0x4d, 0x79, 0xc7, 0x19, 0xb6, 0xac, - 0x98, 0x02, 0xc3, 0x3d, 0x95, 0x9a, 0x4c, 0x17, 0x7a, 0x8a, 0x4b, 0x84, - 0xb1, 0x87, 0x20, 0x01, 0x59, 0x79, 0x8e, 0x95, 0xe1, 0xf0, 0x02, 0x18, - 0x45, 0xcf, 0x0d, 0x26, 0xb0, 0x7d, 0xbd, 0x3d, 0x60, 0x34, 0xba, 0xdc, - 0x27, 0xb8, 0x9a, 0x0c, 0x22, 0x05, 0x9b, 0xe8, 0x60, 0xce, 0x50, 0x58, - 0xe1, 0xbd, 0xd0, 0x5e, 0x8e, 0xf7, 0x8c, 0x3d, 0x94, 0x72, 0x8c, 0x48, - 0x5b, 0x36, 0x87, 0x8f, 0x1a, 0xd4, 0x50, 0xc1, 0x3d, 0xa8, 0xf7, 0xc1, - 0xd9, 0x0c, 0x37, 0x22, 0xb5, 0xca, 0xf7, 0x52, 0x7c, 0xbe, 0x6d, 0x2f, - 0x0d, 0x4a, 0xa2, 0x1a, 0x6c, 0x47, 0xa5, 0x2b, 0x40, 0xf2, 0xc1, 0x99, - 0xfd, 0x75, 0xe1, 0xb6, 0xc2, 0x20, 0xa3, 0x0e, 0x65, 0x87, 0x1a, 0xfd, - 0x4d, 0x96, 0xea, 0x71, 0xf5, 0x84, 0x7a, 0xd2, 0x7c, 0x52, 0xb0, 0xef, - 0xba, 0x4c, 0x74, 0x99, 0xe2, 0x67, 0x2d, 0x76, 0x3f, 0xcc, 0x04, 0x2e, - 0x2f, 0x0b, 0x82, 0xf0, 0xa0, 0xd2, 0x76, 0x07, 0xe5, 0x5c, 0x43, 0xde, - 0x85, 0x92, 0xa4, 0x12, 0x03, 0x2d, 0xbf, 0xb1, 0x9e, 0x26, 0x43, 0xfa, - 0xf5, 0xe2, 0x6d, 0x7f, 0x5d, 0x8a, 0xf8, 0x58, 0xf9, 0x28, 0x60, 0xfa, - 0x0f, 0x79, 0x83, 0x2e, 0x81, 0x4a, 0xa7, 0xa7, 0x19, 0x54, 0x0b, 0x3c, - 0x83, 0x89, 0xf5, 0xfc, 0xc2, 0xa2, 0x8f, 0x87, 0x66, 0x70, 0x85, 0xbe, - 0xe3, 0xb8, 0x9f, 0xfe, 0xa5, 0xf9, 0x6e, 0x71, 0xa1, 0xb4, 0x52, 0x39, - 0x84, 0x83, 0x60, 0x22, 0x50, 0x77, 0x73, 0x31, 0x1c, 0xfb, 0x9f, 0x9d, - 0xb7, 0xab, 0x2a, 0x50, 0x19, 0x61, 0x31, 0xe1, 0xb5, 0xf5, 0x8e, 0x57, - 0xd3, 0xde, 0x99, 0x35, 0x09, 0x9b, 0xab, 0x68, 0x68, 0x12, 0x21, 0xbd, - 0x47, 0xc5, 0x02, 0xc4, 0xee, 0xf1, 0xa4, 0x53, 0x08, 0xd5, 0x85, 0xab, - 0x92, 0xbc, 0xbf, 0x4b, 0x7b, 0xba, 0x9d, 0x68, 0x2e, 0x29, 0x0e, 0x63, - 0xfa, 0x9c, 0xd5, 0xed, 0x17, 0xef, 0x7f, 0x38, 0x1e, 0x28, 0x78, 0x92, - 0x72, 0x21, 0x98, 0x9c, 0x6e, 0x57, 0xe5, 0x06, 0x0a, 0x53, 0x42, 0x92, - 0xb0, 0x25, 0x90, 0xcc, 0xbe, 0x47, 0xfd, 0x12, 0xd7, 0xa7, 0x3c, 0x39, - 0xe5, 0xdb, 0x4e, 0x54, 0xfa, 0x7b, 0xc4, 0x82, 0xd1, 0x21, 0xc8, 0x6d, - 0x72, 0x8f, 0x8f, 0xcd, 0x1a, 0xf4, 0xbb, 0xfb, 0x17, 0xbb, 0x05, 0xa6, - 0x3f, 0xc1, 0x2e, 0x08, 0x55, 0xc8, 0x5f, 0xfb, 0xd3, 0xbf, 0x2c, 0xdf, - 0xe0, 0x00, 0xdd, 0xca, 0x4f, 0x35, 0x40, 0xd1, 0xcc, 0x22, 0x55, 0x79, - 0x70, 0x69, 0x06, 0x75, 0x78, 0x3b, 0x1c, 0x35, 0x01, 0x96, 0xcd, 0xa0, - 0xd1, 0x1e, 0xca, 0x07, 0xe6, 0x2a, 0x1c, 0xa6, 0xc6, 0x55, 0x61, 0x30, - 0x06, 0xf8, 0x6a, 0xa3, 0x5f, 0xeb, 0x2d, 0x2a, 0xe2, 0x4f, 0xff, 0x8c, - 0x6c, 0x84, 0xd1, 0xad, 0x6a, 0x65, 0xf9, 0x3e, 0x1b, 0xa3, 0x0e, 0x3f, - 0x00, 0xd0, 0x82, 0xed, 0x39, 0x5c, 0x35, 0x41, 0x38, 0xc9, 0x05, 0xf9, - 0x21, 0x66, 0x29, 0x08, 0x06, 0x58, 0x60, 0x81, 0x49, 0xa1, 0xa2, 0xfb, - 0x78, 0x36, 0x0f, 0xb8, 0xc2, 0xf3, 0x3a, 0x25, 0xb5, 0x3b, 0xb3, 0x84, - 0xce, 0x9f, 0x95, 0x77, 0x03, 0x31, 0xd7, 0xfb, 0x06, 0xfb, 0x2d, 0xad, - 0xd4, 0x29, 0xa7, 0x7f, 0x12, 0xeb, 0x4e, 0x6a, 0x09, 0x71, 0x87, 0xf0, - 0x8a, 0x89, 0xb9, 0xc5, 0xae, 0xad, 0x54, 0xcc, 0x52, 0xe2, 0x45, 0x0f, - 0x32, 0xa9, 0x61, 0xf4, 0xd9, 0xac, 0x7a, 0x65, 0x81, 0xca, 0x8e, 0x07, - 0x3c, 0x7e, 0x17, 0x55, 0x55, 0x87, 0x11, 0xf2, 0x23, 0xc3, 0xbb, 0xe7, - 0x27, 0x51, 0xec, 0x1d, 0xc1, 0xfa, 0x8f, 0x05, 0x46, 0xe0, 0x05, 0x7b, - 0x81, 0x48, 0x43, 0x8a, 0x9f, 0x7e, 0xaa, 0x51, 0xfb, 0x39, 0x24, 0x64, - 0x04, 0x95, 0x12, 0xc0, 0xed, 0x7f, 0xc2, 0x9c, 0x90, 0x72, 0xaa, 0xa7, - 0xe0, 0x5e, 0x1e, 0xad, 0x7e, 0x01, 0x0b, 0x3a, 0x96, 0xb6, 0x5b, 0x2d, - 0x5e, 0xc8, 0xef, 0xe3, 0x9f, 0x08, 0xee, 0x81, 0x33, 0xc7, 0xe1, 0xa7, - 0x87, 0x14, 0x04, 0xe2, 0x3e, 0xd2, 0x95, 0x93, 0x37, 0x5a, 0xe0, 0x3f, - 0x13, 0x7c, 0x8e, 0x2c, 0xb7, 0x82, 0x59, 0x2a, 0x86, 0xd4, 0xf8, 0xd6, - 0x12, 0xbc, 0xa7, 0x61, 0x34, 0x4a, 0xf6, 0x50, 0xc6, 0xbe, 0x50, 0x3a, - 0x22, 0x4e, 0x53, 0x95, 0x18, 0xfc, 0x29, 0xab, 0x53, 0x22, 0xbe, 0x16, - 0x9a, 0xdd, 0xb5, 0xcd, 0x7a, 0xc1, 0xa9, 0x70, 0x5a, 0xa8, 0x1d, 0xf3, - 0x37, 0x54, 0x10, 0xd3, 0x6e, 0xa4, 0xe4, 0x69, 0x38, 0xaa, 0x3b, 0xde, - 0x62, 0x9e, 0xc8, 0x0a, 0x9a, 0x3b, 0x41, 0xc0, 0xfc, 0x2c, 0x1d, 0xd5, - 0x4d, 0xc2, 0x7f, 0x87, 0x9b, 0x4d, 0xa4, 0xf7, 0x06, 0x1d, 0xbd, 0xaf, - 0xa9, 0x77, 0x24, 0x79, 0x21, 0xb0, 0x1f, 0x3d, 0xce, 0x3e, 0x98, 0x32, - 0xbe, 0xae, 0xf4, 0xb8, 0x81, 0xbd, 0xbb, 0x54, 0x3c, 0x76, 0x93, 0x0f, - 0x7c, 0x8e, 0x9a, 0x07, 0x26, 0x6e, 0x96, 0xb7, 0xb8, 0xe8, 0xd8, 0x39, - 0x6d, 0xf0, 0x08, 0x42, 0x42, 0x29, 0x31, 0x4d, 0x0a, 0x5f, 0xdc, 0xf2, - 0x75, 0xb8, 0xbd, 0x13, 0xcd, 0xd1, 0xd6, 0xec, 0x83, 0xd9, 0x9b, 0x83, - 0xaf, 0x27, 0x91, 0xc5, 0x4d, 0x7e, 0x68, 0xd2, 0x22, 0x29, 0x08, 0x72, - 0xe6, 0xa0, 0xe7, 0x40, 0xac, 0x04, 0x8f, 0x19, 0x72, 0x24, 0xb8, 0xd4, - 0x90, 0x90, 0x99, 0x04, 0x96, 0x99, 0xd0, 0x87, 0xce, 0x98, 0x7d, 0x1c, - 0x40, 0x2f, 0x7f, 0xf1, 0x16, 0x5e, 0x57, 0xb4, 0xb6, 0x11, 0xf3, 0x6d, - 0xf6, 0x5e, 0x6f, 0x1d, 0xfb, 0x5d, 0xcf, 0x4f, 0x23, 0x6e, 0xd2, 0x91, - 0xae, 0x3d, 0x58, 0x0d, 0xed, 0xd7, 0x80, 0x4b, 0xea, 0xdd, 0x3e, 0x95, - 0xa5, 0x52, 0xd2, 0xd9, 0xc8, 0x39, 0xdb, 0x85, 0x98, 0xde, 0x01, 0x33, - 0x7b, 0xb7, 0xb3, 0x7d, 0x29, 0xe9, 0x47, 0xbe, 0x4d, 0x2d, 0xf8, 0x4c, - 0xae, 0x07, 0xf1, 0xc7, 0x75, 0x27, 0x76, 0xed, 0x3a, 0x40, 0xa6, 0xeb, - 0x2d, 0x37, 0xc4, 0xf7, 0xd1, 0xab, 0x0e, 0x50, 0x1b, 0xba, 0x88, 0x48, - 0x1c, 0x4f, 0xb6, 0xfe, 0x59, 0xe7, 0x5c, 0x44, 0xf1, 0xaf, 0x92, 0x3e, - 0x81, 0xa5, 0x9a, 0xbd, 0x3d, 0xdb, 0x57, 0xe2, 0xbf, 0x0c, 0x17, 0x61, - 0x2b, 0x58, 0xec, 0xda, 0xf1, 0xb9, 0xb5, 0x7f, 0x0f, 0x08, 0x25, 0xb2, - 0x60, 0xdb, 0x79, 0xd3, 0xee, 0x61, 0xd3, 0x9d, 0x1c, 0xd8, 0xb6, 0x78, - 0x2f, 0x08, 0x53, 0x91, 0xa2, 0xf1, 0x80, 0xd4, 0x62, 0xda, 0x60, 0xec, - 0x9a, 0xc2, 0xf0, 0xb4, 0x3a, 0xb5, 0x6e, 0x37, 0x1e, 0xae, 0x38, 0xae, - 0x0c, 0x1e, 0x08, 0x1b, 0xc3, 0x3b, 0x11, 0xd2, 0xce, 0x1d, 0x08, 0x11, - 0x48, 0x1c, 0x9c, 0x88, 0x19, 0x12, 0x0f, 0xf6, 0xb9, 0x7e, 0x81, 0x69, - 0x1c, 0x95, 0x76, 0xc7, 0x50, 0x30, 0xbd, 0x43, 0x13, 0xcd, 0x32, 0x7c, - 0xa9, 0xe9, 0xa3, 0xf9, 0x7b, 0x0a, 0x00, 0x39, 0x45, 0xbf, 0xfe, 0xb3, - 0x46, 0x17, 0x5b, 0x7a, 0x21, 0x1b, 0x40, 0x08, 0x06, 0xf0, 0x31, 0x91, - 0x87, 0xe4, 0x5c, 0x49, 0xd0, 0xbe, 0x65, 0x5e, 0x9d, 0xbf, 0xee, 0x92, - 0x11, 0x47, 0xd1, 0x21, 0x3d, 0x51, 0xe2, 0xe2, 0x29, 0x5e, 0x0e, 0x19, - 0xef, 0xad, 0x80, 0x73, 0x10, 0x5b, 0xa2, 0x21, 0xb9, 0x5a, 0xea, 0x99, - 0x81, 0x4e, 0x89, 0x31, 0x7b, 0xa8, 0x68, 0xa0, 0xa3, 0xd9, 0xba, 0xc6, - 0xf6, 0xf3, 0xcc, 0x2b, 0xab, 0x3f, 0x8e, 0x52, 0x03, 0x95, 0x9d, 0x4c, - 0x75, 0x36, 0xfe, 0x93, 0x18, 0xd1, 0x26, 0x12, 0x30, 0xc1, 0x80, 0x37, - 0x6f, 0x4a, 0xea, 0x96, 0xa7, 0x2e, 0xce, 0xbd, 0x4e, 0x2c, 0x92, 0x19, - 0x0d, 0x10, 0x06, 0xa0, 0xc9, 0x80, 0xcf, 0x50, 0xa0, 0xab, 0x5a, 0x23, - 0x42, 0xac, 0xc1, 0xb2, 0x49, 0x3f, 0x45, 0x46, 0x47, 0x01, 0x24, 0xf9, - 0xa8, 0xb0, 0xc7, 0x72, 0x4a, 0x7c, 0xfe, 0xd6, 0xd7, 0x42, 0xbd, 0x0f, - 0xcb, 0x8b, 0xd0, 0x3e, 0x1e, 0x2c, 0x72, 0x2a, 0x04, 0x26, 0xca, 0x69, - 0x13, 0x84, 0xaf, 0xd7, 0xbd, 0x24, 0xa8, 0xd9, 0x15, 0x16, 0x31, 0xd3, - 0x84, 0xd4, 0xc1, 0x55, 0xf2, 0xd0, 0x7e, 0x50, 0xaf, 0x26, 0x10, 0x47, - 0xb2, 0xf6, 0x94, 0xa4, 0x04, 0x27, 0x6e, 0xdf, 0xd0, 0x54, 0x9c, 0x31, - 0x88, 0xaa, 0xff, 0x52, 0x8a, 0x51, 0x99, 0x51, 0x5f, 0xe7, 0xa7, 0xf2, - 0xdc, 0x47, 0x68, 0x28, 0x7f, 0xb1, 0x95, 0xf1, 0xbb, 0x11, 0x50, 0x3a, - 0x74, 0x8a, 0xa6, 0x9a, 0xb8, 0x27, 0xc0, 0x78, 0x53, 0x3e, 0xbc, 0x83, - 0x6c, 0xf3, 0xb3, 0xab, 0xa3, 0x84, 0x44, 0xdb, 0x02, 0xb9, 0xe2, 0xb1, - 0xaa, 0x17, 0x3d, 0x0e, 0xfa, 0x72, 0x2f, 0x0b, 0x4f, 0x0f, 0x92, 0x13, - 0x4d, 0x6e, 0xad, 0x75, 0x21, 0xf6, 0xb7, 0x55, 0xac, 0x16, 0x3e, 0x4d, - 0xa8, 0x21, 0x1e, 0x96, 0xcf, 0xb7, 0x67, 0xcd, 0xa6, 0x89, 0xa4, 0x73, - 0xa8, 0xf8, 0xe4, 0x9d, 0xd3, 0xa4, 0xae, 0x2e, 0x6a, 0x34, 0x56, 0xdd, - 0xd2, 0x58, 0x52, 0x81, 0x71, 0x4d, 0x4a, 0xec, 0x3e, 0x2d, 0x70, 0xc8, - 0xd4, 0xd0, 0xdb, 0x7e, 0x58, 0xcb, 0xce, 0x9d, 0x2d, 0xa5, 0xeb, 0xba, - 0x46, 0x58, 0x7e, 0x02, 0x42, 0x8f, 0x56, 0xe9, 0xa2, 0x7e, 0x5c, 0x79, - 0xd1, 0xd2, 0x2e, 0x1e, 0x29, 0x60, 0xc8, 0x80, 0xcf, 0x0d, 0x8d, 0x8f, - 0xd0, 0xf6, 0x0b, 0x2a, 0xd0, 0x9d, 0x1a, 0xbe, 0xac, 0x55, 0x09, 0x77, - 0x92, 0x6a, 0x60, 0xa0, 0xb7, 0xef, 0x3a, 0xbd, 0x6c, 0x5f, 0x51, 0x82, - 0x06, 0x7c, 0x7a, 0x1f, 0x7b, 0xdf, 0x6d, 0xc3, 0xdf, 0x87, 0x2f, 0x32, - 0x9c, 0x9b, 0xaf, 0x46, 0x96, 0x9e, 0x3a, 0xda, 0x3b, 0x1e, 0x25, 0x8c, - 0x4f, 0x1d, 0x9f, 0x1f, 0x07, 0x5b, 0x93, 0x25, 0xa2, 0x50, 0x3f, 0xab, - 0xcf, 0x07, 0xd8, 0xc9, 0x3e, 0xc8, 0x48, 0x75, 0xb7, 0xa1, 0x03, 0x7a, - 0x7c, 0xfa, 0xf1, 0xde, 0x7e, 0xf3, 0x3c, 0xbb, 0x91, 0xb7, 0x9e, 0x51, - 0x4f, 0x17, 0x66, 0xb5, 0xf5, 0x3b, 0xe5, 0x88, 0x6d, 0x72, 0xb2, 0x0a, - 0xab, 0x38, 0xef, 0x21, 0x61, 0x26, 0x80, 0x8a, 0x4f, 0x1c, 0xc5, 0x70, - 0x17, 0xc0, 0x1d, 0x28, 0x88, 0x6b, 0x28, 0x54, 0x84, 0x49, 0x3e, 0x47, - 0xe8, 0xf4, 0x88, 0x24, 0xb5, 0x54, 0xfc, 0xe0, 0x88, 0x58, 0x20, 0xc9, - 0x9e, 0x57, 0x42, 0x95, 0x5b, 0x38, 0x8a, 0x0a, 0x77, 0xa5, 0x16, 0x1d, - 0x3a, 0x3f, 0xab, 0xbc, 0xf7, 0x66, 0x2a, 0xfa, 0x67, 0xd6, 0x2f, 0xae, - 0x84, 0x15, 0x8c, 0x75, 0x4f, 0xd5, 0x0c, 0x2b, 0x97, 0x30, 0xe5, 0xa7, - 0x66, 0xcf, 0xb2, 0x7d, 0xe9, 0xd8, 0x52, 0x64, 0x62, 0xbc, 0xde, 0x82, - 0x38, 0xbb, 0x9b, 0x41, 0x43, 0xa0, 0xd3, 0xad, 0x4b, 0xb8, 0x97, 0xd7, - 0x1b, 0x28, 0x27, 0xf4, 0x17, 0x4a, 0x55, 0xab, 0xb5, 0xe7, 0x4e, 0x8b, - 0xbc, 0x07, 0x25, 0x1d, 0xb1, 0xb2, 0xab, 0xa1, 0x50, 0xb4, 0x88, 0xd7, - 0x78, 0x41, 0xd7, 0x99, 0x9d, 0x81, 0xf6, 0x68, 0xc7, 0xd6, 0x9d, 0x8f, - 0xd7, 0x94, 0xac, 0x6a, 0x16, 0xe2, 0xba, 0xf9, 0xcd, 0x2b, 0x4a, 0xfd, - 0x6d, 0x7c, 0xcb, 0x2d, 0x67, 0xcb, 0xe0, 0xfe, 0xb6, 0x29, 0x84, 0xd2, - 0x2e, 0x17, 0x6a, 0xed, 0x25, 0xaa, 0xaf, 0xfd, 0xf2, 0x58, 0x3b, 0xe0, - 0x01, 0x77, 0x1d, 0x94, 0x8c, 0xf6, 0x2a, 0x69, 0x4e, 0xff, 0x9c, 0x2c, - 0x74, 0x2f, 0xed, 0x57, 0x5e, 0xfc, 0x47, 0xad, 0x64, 0x1f, 0x84, 0x96, - 0xf1, 0x7a, 0xdd, 0x4e, 0x1d, 0x02, 0x4f, 0x12, 0xf0, 0x12, 0x6a, 0x10, - 0x0a, 0x3b, 0x5b, 0xfb, 0x50, 0x6b, 0xa1, 0xfd, 0xe8, 0x08, 0xb9, 0x01, - 0x42, 0x79, 0x99, 0xc8, 0x8a, 0x3b, 0xb1, 0xd5, 0xc1, 0xd1, 0x03, 0x1e, - 0x9b, 0xce, 0x30, 0xd3, 0xb0, 0x1f, 0x3e, 0xec, 0x44, 0x72, 0x0b, 0xa8, - 0xb6, 0xd1, 0xce, 0x6f, 0x19, 0x38, 0xe7, 0xb4, 0x57, 0xec, 0xd0, 0x3c, - 0x4c, 0xaf, 0xf3, 0xb3, 0x4a, 0xd8, 0x13, 0x4d, 0x42, 0x5b, 0x64, 0xb6, - 0xd4, 0x00, 0x9c, 0x2b, 0x13, 0x63, 0x37, 0x1a, 0x81, 0xb6, 0x1f, 0x59, - 0x81, 0xe5, 0xf7, 0xa6, 0xa5, 0x00, 0xc7, 0xb0, 0xa9, 0xca, 0xbc, 0x6d, - 0xa5, 0xa1, 0x43, 0x60, 0x18, 0xde, 0x01, 0xf1, 0x7d, 0x32, 0xdd, 0xf4, - 0xac, 0xb0, 0xaf, 0xa2, 0x13, 0x9d, 0x08, 0xd1, 0x7c, 0x30, 0x7a, 0x3c, - 0x95, 0x8c, 0x64, 0x93, 0xec, 0x90, 0xb9, 0x22, 0xad, 0x36, 0xbd, 0x2c, - 0x3d, 0x0a, 0x1c, 0x07, 0x1a, 0x05, 0x61, 0x34, 0xea, 0x05, 0xf5, 0x8f, - 0xb1, 0x7d, 0x59, 0x21, 0xcf, 0x57, 0x8b, 0x68, 0xc4, 0x9c, 0x2f, 0x37, - 0xf5, 0x76, 0x62, 0xf6, 0xd1, 0x4e, 0xfd, 0xf1, 0xa0, 0x15, 0x15, 0x7c, - 0x4d, 0xb9, 0x8f, 0x23, 0x20, 0x6c, 0xc0, 0x6f, 0x2c, 0x71, 0x8e, 0x12, - 0x55, 0x06, 0xe3, 0x1a, 0xac, 0x43, 0x7f, 0x92, 0x0d, 0xbb, 0xac, 0x76, - 0xb6, 0x4b, 0x75, 0x47, 0x8c, 0x2b, 0x0e, 0x43, 0x73, 0x4f, 0x2d, 0x3b, - 0xfa, 0x5d, 0x60, 0x97, 0x48, 0x6d, 0xd4, 0x8b, 0xce, 0x2a, 0x4a, 0xf5, - 0x8a, 0x58, 0xfb, 0xb4, 0x8c, 0xae, 0xbc, 0xba, 0xa5, 0x12, 0x74, 0xc0, - 0x1d, 0x49, 0xed, 0x3a, 0x6e, 0x24, 0x0f, 0xdb, 0x94, 0x84, 0x3e, 0x73, - 0x96, 0xd3, 0x50, 0x3a, 0x21, 0x55, 0x49, 0x27, 0x32, 0x2b, 0x43, 0x22, - 0x0a, 0x32, 0x85, 0xbc, 0x7d, 0x15, 0x18, 0x95, 0xf6, 0xa2, 0x78, 0x9a, - 0x1f, 0xdf, 0x81, 0x03, 0xb6, 0x40, 0xb7, 0x18, 0xb0, 0x18, 0x2a, 0x59, - 0xdf, 0x8f, 0x15, 0x04, 0x65, 0xf7, 0x61, 0x86, 0x6e, 0x36, 0x5d, 0x02, - 0xf4, 0xe2, 0x41, 0x1a, 0x0d, 0xcc, 0xaf, 0x54, 0x76, 0x35, 0xb5, 0xb0, - 0xb3, 0xc2, 0x88, 0x97, 0x66, 0x17, 0xc3, 0xb2, 0xbf, 0x20, 0xb3, 0x54, - 0x27, 0x7b, 0xc3, 0x96, 0x5b, 0xd2, 0x06, 0x55, 0xbb, 0xbd, 0x5b, 0x74, - 0x5f, 0x88, 0x7f, 0xb6, 0xa8, 0x4d, 0x1b, 0x8e, 0xd1, 0x02, 0x92, 0x53, - 0xbb, 0x32, 0xab, 0xf0, 0xde, 0xc3, 0x21, 0xa4, 0x03, 0x7a, 0xc9, 0x20, - 0xbd, 0x84, 0xdd, 0xff, 0x1b, 0xc6, 0xfe, 0x1c, 0xbf, 0x96, 0x09, 0xa2, - 0x75, 0x43, 0x6c, 0x8f, 0xf8, 0x60, 0x14, 0x48, 0x2f, 0x98, 0x15, 0x1e, - 0x47, 0x11, 0x8c, 0x71, 0x57, 0xfe, 0x8e, 0x72, 0xe8, 0x37, 0x92, 0x6f, - 0xfd, 0x4d, 0x17, 0x7e, 0x13, 0xfe, 0xad, 0x9b, 0xac, 0xd0, 0xc0, 0xe2, - 0x30, 0xb9, 0xd7, 0xbb, 0x8a, 0xea, 0x3d, 0xee, 0x0e, 0xdc, 0xad, 0xc4, - 0xe1, 0xd7, 0x70, 0x67, 0x86, 0x44, 0x49, 0x4a, 0x91, 0x5d, 0xd3, 0x85, - 0x02, 0xdf, 0xbd, 0x4e, 0xd5, 0x00, 0x90, 0x67, 0x03, 0x8b, 0x52, 0xcd, - 0x06, 0xb1, 0x4e, 0xbe, 0xa9, 0xb0, 0x42, 0x55, 0xa3, 0xcb, 0xf3, 0xeb, - 0x8d, 0x4d, 0xe1, 0x68, 0x09, 0x5f, 0xd1, 0xd2, 0x99, 0xa7, 0xe9, 0xcc, - 0x22, 0xb7, 0x89, 0xef, 0xd9, 0x47, 0x2b, 0x79, 0x50, 0xbd, 0x95, 0xf5, - 0x37, 0x07, 0xce, 0x73, 0x81, 0x27, 0x42, 0x4d, 0xc4, 0x68, 0x33, 0xf3, - 0xd3, 0x99, 0xdd, 0x88, 0xff, 0xab, 0xee, 0x6f, 0x5f, 0x51, 0xe5, 0xf8, - 0xf6, 0xbc, 0x6a, 0xa6, 0x02, 0xff, 0x8b, 0xe3, 0xd2, 0xa0, 0xc6, 0x44, - 0xbc, 0x48, 0x0c, 0x6c, 0xc4, 0x0f, 0x43, 0xe0, 0xfc, 0x7f, 0xda, 0x9a, - 0x37, 0x59, 0x4d, 0x20, 0xf7, 0x96, 0x9c, 0x67, 0x8b, 0x94, 0x7a, 0xf2, - 0xd5, 0x77, 0x3e, 0xad, 0x49, 0x57, 0x58, 0x02, 0x66, 0x93, 0x51, 0x03, - 0x48, 0xf0, 0xb3, 0x69, 0xa5, 0x7d, 0x50, 0x1e, 0x46, 0x6e, 0x6f, 0xc3, - 0x36, 0xc0, 0xc6, 0x52, 0xc2, 0x47, 0xce, 0x85, 0xe9, 0xca, 0x68, 0x29, - 0xaf, 0xff, 0xa8, 0x24, 0x69, 0x98, 0x6a, 0xdb, 0x70, 0xc8, 0x1d, 0x35, - 0x62, 0xcf, 0x21, 0xfa, 0x72, 0xbf, 0x54, 0x05, 0x15, 0x48, 0x54, 0xee, - 0xe6, 0x78, 0xc1, 0x53, 0x13, 0x1b, 0xee, 0xd0, 0xd5, 0x44, 0xd1, 0xd1, - 0x5c, 0xe1, 0x41, 0xce, 0x3e, 0x1b, 0xd0, 0xe5, 0xc0, 0x3c, 0xd7, 0xa7, - 0x49, 0xdf, 0xb4, 0x1a, 0x77, 0xae, 0xa3, 0x18, 0xa8, 0x26, 0xc2, 0x11, - 0x11, 0x2c, 0x0e, 0x69, 0xa5, 0x07, 0x17, 0x62, 0x67, 0xb7, 0xbb, 0x58, - 0x8e, 0x40, 0x43, 0xab, 0x31, 0x36, 0x76, 0x17, 0x3c, 0x75, 0x1c, 0x8c, - 0x8c, 0x7b, 0x2d, 0x5c, 0xd1, 0x82, 0x0f, 0x37, 0x10, 0x4d, 0xa1, 0xe0, - 0x12, 0x5d, 0x9d, 0xb6, 0xb5, 0xa4, 0x15, 0xee, 0x18, 0xff, 0x85, 0x65, - 0x1a, 0xf0, 0xa3, 0x1d, 0xc2, 0xdf, 0x1a, 0x1f, 0x1f, 0xfc, 0xc5, 0x32, - 0x4f, 0xf2, 0xb0, 0xaf, 0x80, 0x28, 0xff, 0x28, 0xd2, 0x59, 0xee, 0x33, - 0x6e, 0x3d, 0x3c, 0x7c, 0x78, 0xe5, 0x8e, 0xf3, 0x0b, 0xcf, 0xec, 0x07, - 0xd0, 0xbb, 0xcd, 0xce, 0xa8, 0xea, 0xab, 0x6a, 0xd2, 0xea, 0x05, 0xda, - 0x08, 0xac, 0x96, 0xd7, 0xf9, 0xe3, 0xc7, 0x06, 0x09, 0xee, 0xc1, 0x65, - 0xd3, 0x3d, 0x97, 0x1d, 0x37, 0x24, 0x7b, 0x4e, 0xa4, 0x5b, 0x80, 0x49, - 0x5a, 0x31, 0x09, 0xe5, 0x60, 0xab, 0x8b, 0x5f, 0x76, 0x6b, 0x27, 0x4c, - 0x59, 0x03, 0x37, 0x1a, 0x7a, 0xb6, 0x35, 0x8d, 0xad, 0xf4, 0xcf, 0x70, - 0xc9, 0x6d, 0x87, 0x9e, 0xde, 0xe0, 0xba, 0x59, 0x65, 0xc1, 0x96, 0x7e, - 0x5d, 0x81, 0x04, 0x76, 0xa3, 0x49, 0x09, 0x0e, 0xdc, 0x8f, 0xfe, 0xe2, - 0x37, 0xbf, 0xd0, 0x7c, 0xa8, 0x31, 0x25, 0x3c, 0x79, 0xfb, 0x5d, 0x6a, - 0x80, 0x88, 0x92, 0xcb, 0xa2, 0xff, 0x26, 0x91, 0x6d, 0x90, 0xb4, 0x54, - 0xbf, 0xfb, 0x42, 0x0a, 0x20, 0xed, 0x75, 0xd8, 0x49, 0xed, 0xf1, 0xc1, - 0xe2, 0xc7, 0x5f, 0x9a, 0xf0, 0xe5, 0x5a, 0xbd, 0xde, 0x13, 0xd2, 0xaf, - 0x2a, 0x9b, 0x6b, 0x08, 0xda, 0x6a, 0xe4, 0x32, 0x50, 0xad, 0xbc, 0x88, - 0xdb, 0x2c, 0xb1, 0x3f, 0x1f, 0x23, 0x85, 0x41, 0xd0, 0xed, 0x19, 0x79, - 0x44, 0x79, 0x9d, 0xfb, 0xde, 0x58, 0x06, 0xff, 0x14, 0xc1, 0xbd, 0xe3, - 0x8d, 0x9b, 0x84, 0x26, 0xaa, 0x6f, 0xbe, 0x96, 0xb9, 0x1a, 0x52, 0xc9, - 0x4e, 0xfe, 0x64, 0xdf, 0xc2, 0x04, 0xc9, 0x6f, 0x25, 0x64, 0x66, 0xaf, - 0x49, 0x13, 0x68, 0x02, 0x8d, 0x62, 0x74, 0x17, 0x54, 0x15, 0x68, 0x55, - 0x15, 0x6f, 0x84, 0xe5, 0x79, 0x97, 0x0c, 0x1b, 0x54, 0x9a, 0x1e, 0xea, - 0x83, 0x57, 0xa9, 0x1f, 0xe7, 0xbe, 0x66, 0xe1, 0xd8, 0x2e, 0x69, 0x01, - 0xce, 0xbe, 0xdd, 0x63, 0x39, 0x0c, 0x9d, 0x3f, 0xa8, 0xa0, 0xd5, 0xb3, - 0x0f, 0xc6, 0x31, 0x62, 0xa9, 0xf3, 0x3e, 0x75, 0x90, 0x8f, 0x50, 0x73, - 0x68, 0x1c, 0xcc, 0x5f, 0xfb, 0x1f, 0x88, 0x69, 0x0e, 0x2d, 0xeb, 0x93, - 0x5e, 0xf6, 0xbb, 0x15, 0x03, 0xa7, 0xbf, 0x1e, 0x87, 0x08, 0x0b, 0x8b, - 0x26, 0x1a, 0xc7, 0xc3, 0xd3, 0x31, 0x49, 0x23, 0x46, 0xd8, 0x5d, 0x7b, - 0xb6, 0x56, 0x82, 0x4f, 0x26, 0x9a, 0x0b, 0xfb, 0x30, 0x44, 0x2c, 0xf2, - 0x93, 0xad, 0x74, 0xfc, 0x43, 0x03, 0xd0, 0x6d, 0xba, 0x28, 0x7a, 0x60, - 0x69, 0x9e, 0x95, 0xe5, 0x03, 0xbd, 0x37, 0x6a, 0x3e, 0xfd, 0x68, 0x2e, - 0xb4, 0x1e, 0xb6, 0x3c, 0x49, 0xae, 0x66, 0x7f, 0x0a, 0x4f, 0x34, 0xf2, - 0x6b, 0xe7, 0x00, 0xa3, 0xfd, 0x94, 0xd5, 0x18, 0xba, 0xa0, 0xeb, 0x81, - 0x47, 0x1b, 0x9f, 0x44, 0xaa, 0x82, 0x55, 0x79, 0xd6, 0x74, 0x7c, 0xc5, - 0xc4, 0x7a, 0x19, 0x90, 0x86, 0xf3, 0xab, 0x22, 0x02, 0xd6, 0x1f, 0x38, - 0x68, 0xfc, 0xaa, 0x42, 0x39, 0x9c, 0x72, 0x98, 0x0b, 0xef, 0x57, 0x12, - 0x17, 0xb2, 0x93, 0x29, 0xb9, 0x00, 0xb2, 0x5b, 0xd2, 0x12, 0x4f, 0xf6, - 0x0d, 0x2f, 0x44, 0x89, 0x00, 0x19, 0x9c, 0xa6, 0xea, 0xfe, 0xa0, 0xcb, - 0x57, 0x83, 0xf1, 0xba, 0x44, 0x7b, 0x68, 0x57, 0x5e, 0x71, 0x7c, 0x36, - 0x9b, 0x4c, 0x63, 0x12, 0x5f, 0xff, 0x6a, 0x39, 0xfe, 0x6e, 0x22, 0x4c, - 0xf4, 0x53, 0x50, 0x69, 0xe1, 0xc2, 0x91, 0xe3, 0xa3, 0x4b, 0x88, 0x00, - 0xbf, 0xc5, 0x3c, 0xe1, 0x22, 0x80, 0x0e, 0x53, 0x2b, 0x8e, 0xfc, 0xb1, - 0x42, 0x85, 0x21, 0xb5, 0xa3, 0xd8, 0xf8, 0x23, 0x70, 0xe4, 0x46, 0xe7, - 0xf2, 0x4f, 0xb0, 0x50, 0x35, 0xee, 0x30, 0x33, 0x0b, 0x05, 0x30, 0xac, - 0xe1, 0xf6, 0x07, 0x00, 0x51, 0xf3, 0x10, 0x24, 0x98, 0xa8, 0x5b, 0x66, - 0x61, 0xff, 0x4b, 0xa6, 0xee, 0xfe, 0x8c, 0x42, 0xae, 0xc1, 0xab, 0x9c, - 0x4e, 0x94, 0xe9, 0xc9, 0xc0, 0x18, 0xcb, 0x34, 0x27, 0xc0, 0x29, 0xb1, - 0x4b, 0x5f, 0x9a, 0x26, 0xc2, 0x01, 0xc1, 0x95, 0xea, 0x9a, 0xd7, 0x61, - 0xa6, 0xfc, 0x0f, 0x94, 0x8c, 0xe8, 0xb5, 0xdd, 0xe2, 0xb6, 0x2b, 0x98, - 0xb7, 0xf9, 0xd9, 0x7e, 0xd1, 0xe9, 0x67, 0xbb, 0xda, 0xe8, 0x9d, 0x7c, - 0xc9, 0x7f, 0xfe, 0xd0, 0x2a, 0x53, 0xc2, 0x1c, 0xbe, 0xfc, 0x14, 0x97, - 0x3f, 0x04, 0xd9, 0x59, 0x39, 0xeb, 0xb7, 0x8a, 0xed, 0x69, 0x8c, 0x87, - 0x30, 0x1b, 0xf9, 0xcb, 0x1f, 0xb4, 0xef, 0xac, 0x66, 0x4b, 0x9f, 0xa8, - 0x03, 0xdc, 0x01, 0x2f, 0xb2, 0xfa, 0x68, 0xfd, 0x2c, 0x3c, 0xa0, 0xba, - 0x63, 0xcb, 0x52, 0x44, 0xbf, 0x88, 0xab, 0xdd, 0xb4, 0x14, 0xa2, 0x25, - 0xe3, 0x09, 0xa8, 0xa4, 0xe8, 0x6a, 0x61, 0x0e, 0xcc, 0x05, 0x90, 0x3a, - 0xa5, 0x0a, 0x7a, 0x58, 0x3f, 0x45, 0x73, 0x84, 0x98, 0x72, 0xc6, 0xd3, - 0xdb, 0x57, 0xab, 0x65, 0x44, 0xcd, 0x0d, 0x0d, 0x45, 0xfd, 0xe8, 0x2e, - 0xa8, 0xa6, 0x52, 0x0c, 0x61, 0x73, 0xb2, 0x18, 0x65, 0x61, 0xa8, 0x68, - 0xc8, 0x78, 0xf3, 0xf4, 0x76, 0x5b, 0x48, 0x11, 0xaa, 0xa9, 0xa0, 0xc1, - 0xa9, 0x4a, 0xf5, 0x1f, 0xef, 0xcb, 0x64, 0x9e, 0x2e, 0x8e, 0xbd, 0x28, - 0x8c, 0x8e, 0x54, 0x63, 0x85, 0xda, 0xe7, 0x73, 0xae, 0xb5, 0x2b, 0x71, - 0x6f, 0x2b, 0x8d, 0x44, 0xb4, 0x16, 0x2d, 0xb0, 0xe7, 0x05, 0x30, 0x9c, - 0x00, 0x85, 0xb2, 0x1d, 0x2e, 0x04, 0xf6, 0xcf, 0x99, 0xd6, 0x0f, 0x70, - 0x08, 0xb6, 0x71, 0xba, 0x65, 0x59, 0xb0, 0x3e, 0xe8, 0x69, 0x27, 0xf3, - 0x13, 0x59, 0xf4, 0xef, 0xbd, 0xdf, 0x6a, 0xd9, 0x3e, 0xe8, 0x1f, 0x11, - 0xd2, 0x53, 0x75, 0x56, 0x52, 0x4b, 0x6c, 0x98, 0xef, 0x00, 0xdf, 0x21, - 0xeb, 0x3f, 0x54, 0x4b, 0x6a, 0xa8, 0x98, 0x5d, 0x26, 0x06, 0x0d, 0x2e, - 0xd0, 0x6e, 0xf6, 0x00, 0x22, 0xfc, 0xc2, 0x8d, 0x5c, 0x4b, 0xf6, 0x83, - 0x55, 0x02, 0x90, 0x04, 0xef, 0x37, 0x04, 0xc6, 0xb4, 0xd3, 0x6c, 0x48, - 0x0d, 0xeb, 0x39, 0x13, 0xf0, 0xda, 0x28, 0xe8, 0xf0, 0x96, 0x73, 0x0d, - 0x9b, 0xb9, 0x22, 0x55, 0x96, 0x9d, 0x38, 0x1b, 0xac, 0x18, 0x13, 0x04, - 0xf1, 0xe4, 0x53, 0x19, 0x76, 0x33, 0x40, 0x6d, 0xe4, 0xb2, 0x5e, 0x73, - 0x84, 0x83, 0xa1, 0xf0, 0xb3, 0x75, 0xeb, 0x70, 0x53, 0x19, 0xd1, 0x5c, - 0x5b, 0x57, 0x57, 0xfb, 0xce, 0x5d, 0x9b, 0xc8, 0xd9, 0xc6, 0x55, 0xca, - 0x20, 0x84, 0x87, 0xd7, 0x84, 0xa4, 0xb0, 0x03, 0x9d, 0x61, 0xcc, 0xc2, - 0x84, 0xe1, 0x91, 0x90, 0x44, 0x72, 0xbf, 0xb8, 0xed, 0xcb, 0x29, 0xd3, - 0xbe, 0x0d, 0x37, 0x2f, 0xf6, 0xe1, 0x5a, 0xd5, 0xaa, 0xf4, 0xc2, 0xc6, - 0x71, 0x7c, 0x7e, 0xcd, 0x4a, 0x64, 0x8c, 0xda, 0x12, 0x71, 0xa3, 0x59, - 0x04, 0x7d, 0xe2, 0xe3, 0x68, 0x42, 0x10, 0x1b, 0x3a, 0x5f, 0x92, 0x1f, - 0x06, 0x20, 0x9b, 0xb7, 0x73, 0x8b, 0x42, 0xbc, 0x76, 0xba, 0x24, 0x88, - 0xe8, 0xad, 0xfe, 0x3b, 0xef, 0x7d, 0x2c, 0x49, 0x8d, 0xa0, 0xc6, 0x2a, - 0x01, 0x41, 0xa6, 0x1c, 0x32, 0xae, 0xf7, 0xf5, 0x1f, 0xe1, 0x58, 0xcd, - 0xb4, 0x17, 0x63, 0x0b, 0x8a, 0x4b, 0x1e, 0x62, 0xae, 0x32, 0x33, 0xf8, - 0x1f, 0x14, 0x2b, 0x85, 0x53, 0xab, 0x09, 0x0b, 0x16, 0x81, 0x23, 0x5e, - 0x8b, 0x4c, 0x96, 0x0d, 0x7d, 0xa2, 0xd1, 0x22, 0x9d, 0x3e, 0x95, 0x5c, - 0xe4, 0x8b, 0xa4, 0x16, 0x6d, 0x2d, 0xec, 0xf1, 0x16, 0x4e, 0x7e, 0x36, - 0x18, 0x22, 0x8a, 0xfe, 0x9c, 0x3c, 0x6e, 0xf3, 0xe0, 0x3e, 0x96, 0xa5, - 0xb5, 0xc1, 0x2f, 0xe5, 0xeb, 0xf3, 0x44, 0xcb, 0xb1, 0x5e, 0xd6, 0xbe, - 0x79, 0x86, 0x44, 0x9a, 0x84, 0x02, 0x78, 0x1e, 0x58, 0xe9, 0x80, 0x6a, - 0xd6, 0x4f, 0xaa, 0x51, 0xec, 0xb4, 0xb6, 0xd0, 0x4f, 0xb2, 0x8c, 0x6e, - 0x2c, 0xa9, 0x16, 0xc0, 0x1b, 0x69, 0x6c, 0x28, 0x97, 0xcc, 0xb8, 0x3f, - 0x2f, 0x72, 0xdd, 0x1b, 0x29, 0x06, 0xff, 0xca, 0x2c, 0xe7, 0xd7, 0x20, - 0x61, 0x87, 0x39, 0x71, 0x8e, 0xe1, 0x6e, 0x2c, 0xbc, 0x3a, 0x3c, 0x43, - 0x6f, 0x6d, 0x18, 0x53, 0x4d, 0x41, 0xb3, 0xe8, 0x0c, 0xb3, 0x83, 0xcb, - 0xb4, 0x9a, 0xa8, 0x27, 0x1f, 0x0c, 0x84, 0xdb, 0x22, 0x61, 0x3f, 0xc3, - 0x2e, 0x42, 0x78, 0xd6, 0x5e, 0x3e, 0xd8, 0x5a, 0x67, 0x88, 0x5e, 0x16, - 0x23, 0xb4, 0x3a, 0x8d, 0x6b, 0x00, 0x2e, 0xf1, 0x01, 0x26, 0x56, 0x77, - 0x4f, 0xf5, 0xed, 0xbd, 0x2d, 0x05, 0x14, 0xd1, 0xa8, 0x11, 0x2b, 0x5b, - 0x64, 0x5e, 0xe7, 0xa3, 0x78, 0x15, 0x73, 0xce, 0x61, 0xaa, 0x03, 0x4f, - 0xa7, 0x70, 0xd6, 0x2a, 0x20, 0xa4, 0xb3, 0xe4, 0xb7, 0x09, 0xd0, 0xf1, - 0xfc, 0x55, 0x6a, 0x18, 0xcd, 0x1d, 0x7b, 0xda, 0x27, 0xcd, 0x5b, 0x68, - 0x77, 0x76, 0x75, 0x1b, 0x6e, 0xed, 0x80, 0x51, 0x62, 0x6e, 0x28, 0xcb, - 0x25, 0xaf, 0xdf, 0x0a, 0xf8, 0xfd, 0xf5, 0x2a, 0xde, 0x61, 0x54, 0x7b, - 0x11, 0x2b, 0x69, 0x6c, 0x95, 0x0c, 0x83, 0x84, 0x62, 0x3d, 0xb8, 0x8e, - 0x76, 0x58, 0xfa, 0x2e, 0x4e, 0xee, 0x1b, 0x01, 0xec, 0x82, 0xd9, 0xcc, - 0xa4, 0xa2, 0x36, 0x24, 0xfd, 0x71, 0xf0, 0x18, 0x27, 0x07, 0x2d, 0xd3, - 0xb6, 0xff, 0x46, 0x53, 0x76, 0xa8, 0xda, 0xb0, 0x8a, 0xae, 0x23, 0xc8, - 0xf6, 0xb2, 0x81, 0x1f, 0xb7, 0x33, 0x24, 0xe1, 0xe1, 0x4a, 0x6e, 0xd0, - 0x9f, 0x30, 0xe1, 0xc9, 0xff, 0x19, 0xf3, 0x47, 0x1c, 0x10, 0x86, 0xc0, - 0xaa, 0xab, 0x5c, 0x58, 0xa7, 0xc6, 0x37, 0x35, 0x01, 0xff, 0xd3, 0xe8, - 0xf9, 0xf4, 0x8e, 0x75, 0x88, 0x89, 0xf9, 0x89, 0x29, 0xee, 0x9f, 0xf0, - 0xe6, 0x93, 0x96, 0x39, 0xe8, 0x97, 0x89, 0xff, 0x89, 0x3a, 0x34, 0x00, - 0x6f, 0x66, 0x6f, 0x7c, 0xdc, 0xc1, 0xf6, 0x00, 0xa0, 0x86, 0x5d, 0xc5, - 0xdf, 0x0a, 0xc5, 0xac, 0xa9, 0xf1, 0x39, 0x1a, 0xe0, 0x73, 0x8b, 0x73, - 0x1e, 0x48, 0xe1, 0x9a, 0x11, 0xa4, 0x3f, 0xa4, 0xd2, 0x13, 0x21, 0xa1, - 0x1f, 0x64, 0x7e, 0x26, 0x16, 0x6e, 0x2b, 0x8e, 0x85, 0x52, 0x02, 0xe5, - 0xdc, 0x89, 0xa8, 0xcf, 0x1d, 0x1f, 0xe9, 0xd8, 0x51, 0x9f, 0x65, 0x98, - 0x2a, 0x39, 0x23, 0x69, 0x00, 0xb1, 0xf4, 0x8e, 0x00, 0xcb, 0xc5, 0x24, - 0x90, 0x74, 0x0e, 0x3b, 0xae, 0xd9, 0x1a, 0xa9, 0xb3, 0x3e, 0xc4, 0xeb, - 0xb3, 0xe6, 0x50, 0xf9, 0xa8, 0x33, 0xbd, 0x49, 0x83, 0xd2, 0x14, 0xee, - 0xfe, 0xca, 0x66, 0xfb, 0x1a, 0xf7, 0x37, 0xe4, 0x2b, 0xd6, 0x75, 0xbd, - 0xe2, 0x54, 0x6e, 0x14, 0xd6, 0xb6, 0x9b, 0x16, 0xd2, 0x2c, 0x5a, 0xa4, - 0x3e, 0xb0, 0x89, 0x57, 0xd7, 0x92, 0x96, 0xbb, 0xf5, 0xeb, 0xef, 0x69, - 0xbe, 0x10, 0xee, 0xb8, 0x49, 0x8c, 0xa8, 0x46, 0x5f, 0x55, 0xdc, 0xbe, - 0xfb, 0xbc, 0x32, 0xcd, 0x05, 0x37, 0x8a, 0x6b, 0xfe, 0xd1, 0xa4, 0x19, - 0xd5, 0x62, 0xe2, 0x70, 0x3d, 0x25, 0x6d, 0x52, 0xa1, 0xfc, 0xed, 0x6e, - 0x7c, 0x86, 0x75, 0x24, 0x5f, 0x5b, 0x4d, 0x9a, 0x8c, 0xba, 0x2e, 0x11, - 0xd5, 0x08, 0x48, 0x06, 0xa6, 0x8b, 0x16, 0x95, 0x4b, 0x13, 0xda, 0xeb, - 0xae, 0xb6, 0x12, 0x9f, 0x5e, 0xa4, 0x15, 0x75, 0x7f, 0xdc, 0xc7, 0x73, - 0x99, 0xe4, 0x20, 0xc7, 0x07, 0x06, 0xd7, 0x40, 0x27, 0xf0, 0x50, 0xc8, - 0x58, 0x05, 0x85, 0x62, 0x38, 0x4a, 0xaf, 0xcb, 0x69, 0x88, 0x95, 0x1b, - 0xa0, 0x1d, 0x57, 0x1c, 0xd6, 0x27, 0x35, 0x20, 0x9b, 0x1e, 0xb2, 0xdb, - 0xbc, 0xcf, 0x3d, 0xc2, 0x73, 0xea, 0x65, 0xb1, 0xe3, 0xcc, 0xb7, 0x17, - 0xdc, 0x7a, 0xad, 0xe7, 0xcd, 0x2e, 0xa7, 0x63, 0x44, 0xd1, 0x37, 0x07, - 0xbd, 0xa4, 0x76, 0xcb, 0xa8, 0x8f, 0x0f, 0x40, 0x3e, 0x3c, 0x69, 0x68, - 0x89, 0xba, 0xe5, 0x68, 0xf8, 0x61, 0xa5, 0xa8, 0xdc, 0xae, 0x63, 0x8a, - 0xef, 0xc6, 0x07, 0xcc, 0x3b, 0xd6, 0x53, 0x37, 0xee, 0xf2, 0x16, 0xf0, - 0x7a, 0xdf, 0xde, 0xb2, 0x42, 0xd2, 0xca, 0xcb, 0x95, 0xd3, 0x62, 0xbf, - 0x71, 0xa2, 0xd9, 0xd5, 0x7d, 0x3f, 0x8e, 0xde, 0x6c, 0xf2, 0xb7, 0xa4, - 0x77, 0xf5, 0xa8, 0xeb, 0x54, 0x88, 0x6e, 0xc0, 0xdc, 0x2e, 0x34, 0x00, - 0x53, 0xc4, 0xa4, 0x1e, 0x58, 0xc4, 0x9c, 0xfa, 0x69, 0xce, 0x3f, 0x12, - 0x38, 0x18, 0x47, 0x50, 0x50, 0x51, 0xd4, 0xbf, 0x25, 0xb8, 0xd3, 0x99, - 0xca, 0xb8, 0x47, 0x5d, 0x04, 0xb7, 0x5d, 0x9b, 0x7c, 0xad, 0x77, 0x0b, - 0xbb, 0xf6, 0xa1, 0x32, 0x61, 0xa7, 0x94, 0x3e, 0xeb, 0x97, 0xf3, 0x85, - 0x25, 0x07, 0x06, 0x69, 0x8b, 0x04, 0x56, 0xa9, 0xe1, 0x38, 0xbe, 0x95, - 0x92, 0x69, 0xa6, 0x40, 0xbf, 0xe7, 0xa8, 0xf0, 0x8f, 0xbd, 0x5a, 0xe0, - 0x7c, 0x33, 0x80, 0x1d, 0x37, 0x47, 0xfe, 0x7b, 0xe6, 0x63, 0x02, 0x1d, - 0x0e, 0x8e, 0x21, 0x76, 0x8a, 0xfe, 0xfc, 0x04, 0x54, 0x44, 0xc0, 0xda, - 0x40, 0xce, 0x27, 0x69, 0xa5, 0x37, 0x3c, 0xbc, 0x3a, 0x90, 0x88, 0x8d, - 0xd0, 0xc3, 0x5f, 0x88, 0x0c, 0x7f, 0x5a, 0xa4, 0x16, 0x1b, 0x1d, 0xa5, - 0x4e, 0x2d, 0x7b, 0x31, 0x8b, 0xef, 0x96, 0xf5, 0xa3, 0x84, 0x85, 0xb4, - 0x76, 0x1e, 0x9d, 0xa3, 0x1c, 0x40, 0xff, 0xd3, 0xdd, 0x99, 0x69, 0x58, - 0xfb, 0x0f, 0x98, 0x2d, 0xb4, 0xfb, 0xcc, 0xd3, 0x07, 0x85, 0xd2, 0xb7, - 0x24, 0xf2, 0xa1, 0x9c, 0xfd, 0x60, 0x7a, 0xa0, 0x40, 0xb2, 0x9d, 0x82, - 0x30, 0x68, 0x42, 0x66, 0x47, 0xba, 0x3c, 0xef, 0x80, 0x9b, 0x2d, 0xd2, - 0xb1, 0x1d, 0x93, 0xcb, 0x43, 0x4e, 0x64, 0x91, 0x64, 0x65, 0xad, 0x61, - 0x24, 0xce, 0xd6, 0xfc, 0xaf, 0xef, 0x02, 0x60, 0x7e, 0x4f, 0x57, 0x74, - 0x5c, 0x43, 0x42, 0x86, 0xd5, 0xac, 0xc7, 0xec, 0xb4, 0xb2, 0x2c, 0x73, - 0xd3, 0x74, 0x55, 0xa2, 0x80, 0xbb, 0xea, 0xaf, 0x51, 0xa9, 0xa8, 0xdb, - 0x48, 0x8b, 0xfe, 0xf6, 0x11, 0x83, 0x4d, 0x0c, 0xcd, 0x7b, 0x26, 0x71, - 0xe8, 0xf2, 0xf7, 0x87, 0x28, 0x98, 0x3c, 0xe6, 0xb5, 0xea, 0xea, 0x53, - 0x8c, 0x87, 0xdd, 0xf8, 0x96, 0x02, 0x94, 0xf9, 0x94, 0x19, 0xd3, 0x83, - 0x72, 0x71, 0x13, 0x86, 0x69, 0xb0, 0x7c, 0x5b, 0x36, 0x45, 0x2e, 0x6e, - 0x7d, 0x88, 0x80, 0xfb, 0x6c, 0x9b, 0xc6, 0x05, 0xe1, 0xa8, 0x74, 0x39, - 0x89, 0x51, 0xfc, 0x2e, 0x43, 0x10, 0xec, 0xc3, 0xdc, 0xfd, 0xc9, 0xa1, - 0x25, 0x36, 0xff, 0x7b, 0x7d, 0x47, 0x67, 0x98, 0xc6, 0x4f, 0xb4, 0x61, - 0x9d, 0x8d, 0x0b, 0x28, 0x64, 0x84, 0x69, 0x1f, 0xd6, 0x46, 0xc2, 0x3e, - 0x3a, 0xe2, 0x64, 0xa1, 0x3c, 0x60, 0xce, 0x73, 0xcf, 0xcd, 0xd0, 0x01, - 0x99, 0x1f, 0x17, 0xad, 0xfb, 0xcc, 0x38, 0x3f, 0xeb, 0x20, 0x84, 0xf7, - 0xd0, 0x72, 0x73, 0xa0, 0x57, 0xce, 0x38, 0x24, 0xa1, 0xc5, 0x59, 0x4f, - 0x49, 0x3a, 0x7f, 0xd9, 0x61, 0x0c, 0x85, 0xce, 0xa6, 0x5c, 0xb2, 0x65, - 0xbc, 0xd1, 0x79, 0x17, 0xc5, 0x5c, 0x3f, 0x79, 0xbe, 0xec, 0xe4, 0x22, - 0x81, 0xb8, 0x03, 0x24, 0x03, 0x9c, 0xb3, 0xf7, 0xeb, 0xaa, 0xf8, 0x1a, - 0x40, 0x0e, 0xcd, 0xb7, 0x17, 0xad, 0xc4, 0x9d, 0x15, 0x54, 0x5e, 0x15, - 0xf8, 0x58, 0x32, 0x8c, 0x52, 0x8b, 0x77, 0x84, 0x6b, 0xab, 0x88, 0xdf, - 0x82, 0x27, 0x7e, 0xfb, 0xea, 0xa5, 0x83, 0xec, 0x29, 0x4c, 0x7c, 0x2f, - 0x75, 0xf6, 0xad, 0xce, 0x21, 0x10, 0x0a, 0x64, 0x64, 0xf9, 0xab, 0x46, - 0x91, 0xfb, 0xf4, 0xb7, 0x9c, 0x3d, 0x72, 0x03, 0x79, 0x52, 0x71, 0x54, - 0x1d, 0xfe, 0x51, 0x57, 0xc5, 0xba, 0xf2, 0x2c, 0x0e, 0x41, 0x3a, 0x57, - 0xe6, 0xe9, 0x5b, 0x64, 0xac, 0xff, 0xc1, 0xc4, 0x2f, 0x9e, 0xe6, 0x29, - 0x95, 0x8e, 0xa0, 0xa0, 0x17, 0x8a, 0xf5, 0x32, 0x83, 0x5b, 0x57, 0x92, - 0x1f, 0x4c, 0xa8, 0x0e, 0xfb, 0x89, 0x05, 0xb6, 0xc6, 0xa5, 0x45, 0x52, - 0x61, 0xf2, 0x0f, 0x85, 0x27, 0xbf, 0x9d, 0xb8, 0x1f, 0x16, 0x05, 0x58, - 0x5f, 0x2b, 0x85, 0x0a, 0xd3, 0xbe, 0xa0, 0xbe, 0x68, 0xb5, 0xac, 0x87, - 0xd0, 0x34, 0x92, 0x9f, 0x18, 0x92, 0x11, 0x5f, 0xcb, 0x72, 0xa4, 0xd6, - 0xa1, 0x59, 0x06, 0xfe, 0x62, 0x13, 0x50, 0x56, 0x38, 0xba, 0x97, 0xbc, - 0x9d, 0xfb, 0xa6, 0xb0, 0x35, 0x3d, 0x22, 0x47, 0x52, 0x70, 0xea, 0xcb, - 0xa4, 0x75, 0x8e, 0xcd, 0xcb, 0x2e, 0x82, 0x1b, 0xfc, 0xf1, 0x31, 0xbd, - 0xbe, 0xba, 0x96, 0x17, 0x06, 0x2b, 0x09, 0x52, 0x8e, 0x30, 0x83, 0x3a, - 0x19, 0x8c, 0x2e, 0xec, 0x7a, 0x50, 0x53, 0x60, 0x13, 0xf8, 0x4a, 0x0a, - 0xe6, 0x23, 0xc7, 0xb2, 0x95, 0x24, 0x40, 0x9b, 0x4f, 0xfb, 0x68, 0xb2, - 0xc7, 0xce, 0xa1, 0x54, 0x14, 0x3c, 0x39, 0xc0, 0x7a, 0x65, 0x7c, 0x97, - 0x00, 0x27, 0xb8, 0xbc, 0x01, 0x8f, 0x88, 0x0e, 0x12, 0xfd, 0x33, 0xdd, - 0xaf, 0x30, 0x60, 0x45, 0x21, 0x5d, 0x9e, 0x50, 0xce, 0x69, 0x35, 0x8f, - 0x6b, 0xd3, 0xb4, 0xc4, 0x19, 0x03, 0x58, 0xd5, 0xad, 0x8c, 0xfe, 0xd0, - 0xac, 0x15, 0xaa, 0xd7, 0x90, 0x92, 0xcc, 0xb5, 0xb5, 0x79, 0xdc, 0x95, - 0x90, 0x51, 0x04, 0xb3, 0x62, 0xe3, 0xaf, 0xdd, 0xb6, 0xeb, 0xc3, 0x79, - 0x44, 0x9e, 0x21, 0xd5, 0x1d, 0xec, 0x93, 0x47, 0x7b, 0xa9, 0x30, 0x9b, - 0x80, 0xa0, 0x09, 0x6b, 0x95, 0x8b, 0x30, 0x46, 0x6a, 0xdf, 0xe5, 0x5c, - 0x54, 0x62, 0x21, 0x49, 0x8c, 0xbf, 0xc7, 0x57, 0x2e, 0xd8, 0x39, 0xe6, - 0x60, 0xac, 0x54, 0xe8, 0x97, 0x96, 0xba, 0x21, 0xba, 0x37, 0x47, 0x61, - 0x34, 0x73, 0xdf, 0xda, 0x27, 0x24, 0xa3, 0x25, 0x5f, 0xbb, 0xd1, 0xca, - 0xec, 0x17, 0xda, 0x76, 0xb4, 0x0b, 0x0d, 0x51, 0x8a, 0xd4, 0xdd, 0x94, - 0x30, 0xb4, 0x71, 0x28, 0xa5, 0x0a, 0x89, 0x80, 0xc8, 0xbe, 0x30, 0x79, - 0x32, 0xed, 0x6e, 0x1c, 0xd6, 0x16, 0xc2, 0x38, 0x4f, 0xd6, 0xf5, 0x30, - 0x92, 0x19, 0x35, 0xcd, 0x23, 0x41, 0xde, 0x59, 0x4f, 0xbf, 0x9a, 0x86, - 0xad, 0x86, 0x97, 0xa1, 0x22, 0x9e, 0x0e, 0xe2, 0xf0, 0xcc, 0x1e, 0x72, - 0xe6, 0x77, 0x8f, 0x21, 0x82, 0xa1, 0xf9, 0x7b, 0x4b, 0x89, 0x22, 0xc0, - 0x50, 0xbe, 0x75, 0x5f, 0x79, 0xca, 0x2d, 0x32, 0xf1, 0x13, 0x43, 0xec, - 0x5f, 0x9a, 0x8a, 0xe0, 0xda, 0xab, 0xb6, 0xdb, 0xfd, 0xc5, 0x39, 0x15, - 0x4c, 0x79, 0x10, 0x6c, 0x8b, 0x68, 0xb4, 0x37, 0x3b, 0x3e, 0x1c, 0x80, - 0xaf, 0x72, 0xb3, 0x43, 0x7b, 0x95, 0x7b, 0x5d, 0xa8, 0xde, 0x78, 0x99, - 0xba, 0x9e, 0xe7, 0xbd, 0x94, 0x71, 0xfb, 0x9c, 0xa6, 0x50, 0x76, 0xdb, - 0xbb, 0xa1, 0x07, 0x2f, 0x76, 0x91, 0x26, 0x08, 0xe3, 0x4c, 0xc8, 0xec, - 0xac, 0x8e, 0xed, 0x63, 0x7c, 0x8c, 0x1c, 0xf8, 0xb4, 0xd5, 0xb4, 0xda, - 0x0d, 0x9f, 0xcf, 0x8a, 0xc1, 0x68, 0x98, 0xd5, 0x5f, 0x73, 0x34, 0xc2, - 0xe0, 0xaf, 0x27, 0x78, 0xa9, 0xa6, 0x2f, 0x9a, 0x0b, 0x6a, 0xdc, 0xd3, - 0xb7, 0x66, 0x5b, 0xae, 0x1a, 0x23, 0x7e, 0xfb, 0xce, 0x4b, 0x6e, 0x01, - 0x97, 0x84, 0x09, 0x21, 0x89, 0x77, 0x21, 0xa2, 0xc4, 0xe5, 0xed, 0xb7, - 0xc7, 0x23, 0x9f, 0x34, 0x2b, 0xf9, 0x94, 0x83, 0xe3, 0xff, 0xf1, 0x2f, - 0x49, 0x8f, 0x34, 0xb3, 0x73, 0xa3, 0x83, 0x87, 0xfc, 0xaf, 0x54, 0x9d, - 0xb1, 0xbc, 0x51, 0x2a, 0x0b, 0x12, 0x49, 0xc0, 0xbd, 0xfc, 0x09, 0x20, - 0xd6, 0x52, 0x26, 0xc1, 0xb5, 0xbf, 0xed, 0xdb, 0xf1, 0x75, 0xde, 0x62, - 0xc2, 0x4c, 0xc7, 0xa2, 0x5a, 0x10, 0xf9, 0xa8, 0xba, 0x1c, 0x99, 0xe6, - 0x7c, 0x40, 0x70, 0x81, 0x09, 0xfd, 0x45, 0x8b, 0xb5, 0x05, 0x55, 0x2f, - 0x11, 0x1c, 0x41, 0xbd, 0x79, 0x19, 0x54, 0xdb, 0xd1, 0x79, 0xe0, 0x76, - 0xde, 0x6c, 0x56, 0x38, 0x0e, 0x5e, 0x87, 0x69, 0xb0, 0x88, 0x1a, 0xcf, - 0x3e, 0xf2, 0x02, 0x63, 0x7b, 0xc9, 0x61, 0x0e, 0xe9, 0xac, 0xf0, 0x0e, - 0xaf, 0x81, 0x99, 0xe6, 0x90, 0x6e, 0x5e, 0xc1, 0x5e, 0xbb, 0xff, 0xee, - 0xf2, 0xfb, 0xc4, 0x66, 0x03, 0xe4, 0xd4, 0xbd, 0xcc, 0x79, 0xd9, 0x8b, - 0xee, 0xe2, 0x2e, 0xac, 0x68, 0x29, 0x55, 0x9a, 0x9e, 0x7f, 0x0c, 0x51, - 0x19, 0x9e, 0x89, 0xf8, 0x72, 0xe8, 0x6e, 0xfe, 0x74, 0x17, 0x2c, 0x95, - 0xe3, 0x1e, 0xcf, 0x3e, 0xeb, 0x9e, 0xff, 0x68, 0xbd, 0xe6, 0xd0, 0x59, - 0x66, 0x1c, 0xc3, 0xed, 0x04, 0x0d, 0x35, 0xc1, 0x9e, 0x86, 0xbe, 0x26, - 0xc5, 0x59, 0x77, 0x6d, 0x63, 0xc4, 0x3d, 0xc4, 0x63, 0x6e, 0x24, 0xa6, - 0x0d, 0xf9, 0x73, 0xd6, 0x40, 0xaf, 0xa3, 0x13, 0xe6, 0x4e, 0x52, 0x02, - 0x27, 0x00, 0xf1, 0x9e, 0x4a, 0x32, 0x9b, 0x0e, 0xc7, 0x8d, 0x12, 0x2e, - 0x95, 0x2e, 0xff, 0xa6, 0xd4, 0xb0, 0xcc, 0x16, 0xe9, 0xd6, 0xf6, 0x99, - 0x13, 0xbf, 0x07, 0x94, 0x5e, 0x8f, 0xa5, 0xc5, 0x34, 0xca, 0x4a, 0x65, - 0xb9, 0x4a, 0x5d, 0x0e, 0xd6, 0xf7, 0x08, 0x8f, 0xdb, 0xcb, 0xdd, 0xcf, - 0x84, 0xff, 0x17, 0x90, 0xc8, 0xc4, 0x41, 0x06, 0x95, 0x5c, 0x43, 0x80, - 0xb6, 0x34, 0xfc, 0xfe, 0x37, 0xb8, 0xba, 0xd9, 0x0e, 0x5b, 0x6c, 0x35, - 0xcb, 0xe2, 0xd8, 0x5a, 0x8e, 0xe4, 0x76, 0x98, 0xc2, 0x6d, 0xb1, 0x28, - 0xc2, 0xa3, 0x4d, 0xed, 0xed, 0x77, 0x74, 0xe6, 0x15, 0x69, 0x46, 0xe9, - 0x87, 0xa7, 0x76, 0x54, 0x16, 0x5f, 0x3e, 0x5b, 0x2b, 0x64, 0xb7, 0xf7, - 0x0b, 0xe8, 0x69, 0x3b, 0x05, 0x91, 0x71, 0xea, 0x9b, 0x36, 0xa9, 0x46, - 0x19, 0x15, 0xdb, 0x4e, 0x16, 0x04, 0xf0, 0x27, 0x20, 0xf9, 0xca, 0x01, - 0x97, 0x6b, 0xe6, 0xe2, 0xb1, 0x74, 0xc6, 0x85, 0x3e, 0x76, 0x33, 0x49, - 0x59, 0xbe, 0x42, 0x40, 0x50, 0x38, 0x44, 0x75, 0x9c, 0xad, 0x80, 0xbf, - 0x55, 0x0f, 0x1b, 0xac, 0xd6, 0x3d, 0x55, 0x5e, 0xf6, 0x4c, 0x1d, 0x1d, - 0xf0, 0xde, 0xa2, 0xb7, 0x4d, 0x28, 0xc7, 0x4a, 0x12, 0xc3, 0x56, 0xb7, - 0x15, 0xcf, 0xbf, 0x63, 0x4c, 0x27, 0x9a, 0x6f, 0xdd, 0x20, 0x02, 0x4a, - 0x44, 0xbe, 0x90, 0x66, 0xfb, 0x4c, 0x3e, 0x2d, 0x13, 0x2b, 0x5c, 0x11, - 0x9e, 0x36, 0x2f, 0x5f, 0xcc, 0xd6, 0xe8, 0x19, 0xbc, 0x36, 0x73, 0x48, - 0x98, 0xb4, 0xe2, 0xf0, 0x9b, 0xfd, 0xdd, 0xe6, 0x16, 0x39, 0x9d, 0x95, - 0x93, 0x72, 0x7c, 0x37, 0x49, 0xc4, 0x7e, 0xea, 0x50, 0x3d, 0xc6, 0x50, - 0xcd, 0x54, 0x32, 0xa7, 0x77, 0xc7, 0x9a, 0x46, 0x9b, 0xb9, 0xf9, 0x75, - 0xa7, 0x7c, 0x8f, 0x20, 0xfa, 0xf9, 0x6a, 0xbe, 0x38, 0x55, 0x3f, 0xd7, - 0x8e, 0xa8, 0x3c, 0x08, 0x01, 0x7e, 0xa3, 0x4b, 0x0a, 0x93, 0xb1, 0x3d, - 0x87, 0xa7, 0xdb, 0x13, 0x9c, 0x7f, 0x93, 0xcd, 0x75, 0x12, 0x31, 0x2c, - 0x8e, 0xf1, 0xa8, 0x50, 0xc0, 0xda, 0x14, 0x01, 0x5e, 0x7d, 0x27, 0x3c, - 0xa5, 0x9d, 0x24, 0x6a, 0x6e, 0x35, 0x55, 0x38, 0x94, 0x0d, 0xcc, 0x44, - 0xf0, 0x4b, 0xb2, 0xe0, 0xab, 0x3b, 0x50, 0xf2, 0x98, 0xb1, 0x4c, 0x43, - 0xae, 0x1c, 0x12, 0xe8, 0x6b, 0xb3, 0x4d, 0x5a, 0x50, 0xc1, 0x61, 0x93, - 0x19, 0x7c, 0x32, 0xf1, 0x05, 0xf4, 0xe3, 0x02, 0xab, 0x41, 0x48, 0xb0, - 0xe8, 0xc4, 0x87, 0xee, 0xd7, 0x5f, 0xe1, 0xca, 0x4d, 0xe2, 0xa7, 0x4c, - 0xe3, 0xc7, 0xa5, 0xf9, 0x2c, 0x1b, 0xcb, 0xf2, 0xf1, 0xc8, 0x29, 0xa4, - 0xd3, 0xf5, 0x81, 0x3e, 0x2b, 0xe5, 0x9f, 0x95, 0x61, 0x97, 0xfa, 0xd6, - 0xe1, 0xe0, 0xd9, 0x9b, 0x00, 0x87, 0x0a, 0x65, 0x35, 0x7f, 0x33, 0x2f, - 0x78, 0x20, 0x2d, 0x92, 0x55, 0x34, 0xd5, 0x61, 0x9b, 0x2d, 0x6f, 0x8e, - 0xa6, 0xd7, 0x8f, 0x72, 0x64, 0x1f, 0xdf, 0xbe, 0xea, 0x1f, 0x64, 0x7c, - 0x4b, 0x06, 0x6e, 0xb3, 0xad, 0xad, 0xbd, 0xed, 0xb4, 0x97, 0x5c, 0xc8, - 0xce, 0xaa, 0x36, 0xd7, 0x51, 0xfa, 0x63, 0x99, 0x5e, 0x01, 0x5a, 0x3e, - 0x60, 0xaa, 0x74, 0x7b, 0x68, 0xf8, 0x80, 0xdf, 0xfb, 0x71, 0xde, 0xc4, - 0x49, 0x73, 0xdf, 0xee, 0xaa, 0xb9, 0x30, 0xa3, 0x8b, 0x46, 0x62, 0x4c, - 0xc4, 0x43, 0x04, 0xf9, 0xdf, 0x9d, 0x31, 0xbb, 0xa8, 0xc8, 0x3b, 0xb6, - 0xe9, 0x0c, 0x7d, 0x47, 0xa0, 0x41, 0x15, 0x9e, 0x06, 0x45, 0x14, 0xdc, - 0x66, 0xfe, 0x4a, 0x07, 0x46, 0xdd, 0x62, 0xd4, 0xfa, 0xa2, 0x46, 0x26, - 0x64, 0x5d, 0x1c, 0x9a, 0x39, 0xe6, 0x54, 0xa2, 0xc4, 0x7a, 0xdf, 0x5a, - 0x02, 0x74, 0x92, 0xe0, 0x7a, 0x61, 0xc6, 0x58, 0x47, 0xee, 0xa9, 0x25, - 0x8b, 0xe5, 0xb5, 0xc1, 0x54, 0x74, 0xd0, 0x5b, 0xfd, 0xac, 0x75, 0x00, - 0x3f, 0x46, 0x43, 0x97, 0x55, 0xcd, 0x1e, 0xe2, 0x27, 0x6c, 0xfe, 0x8c, - 0xd2, 0xd1, 0x0b, 0xc8, 0x11, 0x4c, 0x25, 0xfd, 0x2e, 0xa6, 0x2e, 0x7f, - 0x21, 0xa5, 0xd1, 0x42, 0x74, 0x58, 0x63, 0x71, 0xa6, 0x6f, 0xb4, 0x53, - 0x97, 0x70, 0x22, 0xf7, 0x2c, 0x76, 0x0e, 0x94, 0x08, 0x1e, 0xca, 0xdb, - 0x48, 0xb4, 0xe6, 0x44, 0x16, 0xf6, 0x04, 0xe0, 0xa5, 0xfb, 0x1a, 0x96, - 0xfd, 0xf5, 0xb7, 0x86, 0xd7, 0x87, 0x2d, 0xb1, 0x39, 0xb1, 0x1c, 0x52, - 0xf2, 0x91, 0x6b, 0x16, 0xdc, 0xf7, 0xf7, 0x1b, 0xac, 0xa5, 0x80, 0x76, - 0xa7, 0x96, 0x75, 0xa7, 0x95, 0xbf, 0xed, 0xa7, 0x20, 0x69, 0xd0, 0xc5, - 0xcc, 0x2d, 0xee, 0x31, 0xa5, 0x80, 0x31, 0x6d, 0x04, 0x77, 0x1e, 0xb0, - 0xdd, 0x30, 0x09, 0xc9, 0x8b, 0x59, 0x3a, 0x5a, 0x5f, 0x3f, 0xb0, 0x58, - 0xdd, 0x64, 0xa1, 0x8b, 0x80, 0x60, 0x8d, 0x28, 0x17, 0xec, 0x0a, 0x9b, - 0xad, 0x8f, 0x5f, 0xfc, 0x33, 0x3c, 0x2b, 0x57, 0xed, 0xcf, 0x5a, 0x6f, - 0xfe, 0x62, 0x45, 0x5c, 0x80, 0x57, 0x71, 0x58, 0x77, 0x6b, 0x29, 0xa8, - 0xd4, 0xd1, 0xdc, 0x15, 0x4a, 0x0e, 0xf6, 0x1b, 0x17, 0xb6, 0xa8, 0x58, - 0x89, 0x28, 0x03, 0xac, 0xe4, 0xba, 0x82, 0xb4, 0x37, 0x5e, 0x4f, 0x4f, - 0x45, 0xd6, 0x19, 0x2d, 0xe3, 0xc3, 0xde, 0xa0, 0x38, 0xe7, 0x72, 0xb6, - 0xb9, 0x36, 0x73, 0x6c, 0x65, 0x9a, 0xb3, 0xa8, 0x0e, 0x1c, 0xf0, 0xf1, - 0x96, 0x1a, 0x5b, 0xed, 0x82, 0xad, 0x4f, 0x2c, 0x3e, 0x5d, 0xaf, 0xab, - 0x31, 0x5b, 0x15, 0x96, 0x08, 0xb1, 0x64, 0xdb, 0x8e, 0x8f, 0xb7, 0x42, - 0x40, 0x93, 0x38, 0x99, 0x78, 0xcd, 0x23, 0xf1, 0x5b, 0xff, 0xad, 0x69, - 0x60, 0xce, 0x70, 0xdf, 0x9c, 0x95, 0x53, 0x82, 0x03, 0xf5, 0xdd, 0xd9, - 0x22, 0xbe, 0xb8, 0x0b, 0x3f, 0x55, 0x4d, 0x7a, 0x15, 0x88, 0xd4, 0xb1, - 0xbf, 0xc7, 0x78, 0x37, 0x62, 0xd0, 0x6d, 0xf4, 0x29, 0xbc, 0xb7, 0x7c, - 0xc5, 0x1c, 0x9e, 0xf8, 0xd2, 0x63, 0x47, 0x4e, 0x18, 0x6e, 0x05, 0x51, - 0xcc, 0x3f, 0xc8, 0x87, 0xb6, 0x04, 0xa5, 0x84, 0xff, 0xdc, 0xd4, 0x9d, - 0x4e, 0x94, 0xf8, 0x9c, 0x97, 0x76, 0xcc, 0xe4, 0xe5, 0xbe, 0x2c, 0xc4, - 0x23, 0x3e, 0xce, 0xa3, 0x97, 0x4a, 0x3f, 0xe2, 0x04, 0x3a, 0x44, 0xf9, - 0x7c, 0x07, 0x9d, 0x19, 0x4b, 0xad, 0x11, 0xfb, 0x66, 0x6b, 0x1a, 0x93, - 0x81, 0xca, 0x8c, 0x36, 0x08, 0x25, 0xb4, 0xb4, 0xe4, 0x03, 0x39, 0x31, - 0x74, 0x44, 0x90, 0x6e, 0x1b, 0xc0, 0xed, 0x7f, 0x83, 0xa3, 0x72, 0x48, - 0xb8, 0xae, 0x56, 0xfe, 0x19, 0xbc, 0xb0, 0xdb, 0x19, 0x82, 0x95, 0x17, - 0x0c, 0x97, 0x50, 0x71, 0x7c, 0xdb, 0x3d, 0xd5, 0x21, 0x57, 0xaa, 0x69, - 0x22, 0x75, 0xcc, 0x0c, 0x13, 0x46, 0x0f, 0x2c, 0x96, 0x76, 0xc0, 0x1e, - 0xae, 0x03, 0xc4, 0xf8, 0x42, 0xfd, 0x8a, 0xb1, 0xc0, 0x59, 0x6b, 0x91, - 0x54, 0xfb, 0xc2, 0x80, 0x0f, 0xaa, 0xcb, 0xc1, 0xea, 0xdb, 0x83, 0x57, - 0xe9, 0x51, 0x37, 0xe7, 0x35, 0xdc, 0x17, 0x06, 0x63, 0xdc, 0x6f, 0xf1, - 0xc6, 0x3d, 0x9b, 0x7d, 0x40, 0xbe, 0x45, 0x50, 0x19, 0x39, 0x9f, 0xa5, - 0x47, 0x3a, 0xfa, 0xde, 0x99, 0xa4, 0xd4, 0x0a, 0x3d, 0x8f, 0x54, 0xa7, - 0xe6, 0x59, 0x37, 0x08, 0x2c, 0xda, 0x44, 0x97, 0x35, 0x4e, 0x54, 0x84, - 0xff, 0x14, 0xeb, 0x1a, 0x07, 0x45, 0x70, 0x0a, 0x06, 0xc9, 0x24, 0xed, - 0x6f, 0x2e, 0x07, 0x57, 0x5b, 0xe8, 0xeb, 0x0f, 0xa9, 0xba, 0x3e, 0x6f, - 0x37, 0xef, 0xa5, 0xc4, 0x35, 0x43, 0xb3, 0x19, 0x27, 0xe5, 0x20, 0x78, - 0xdc, 0xb6, 0x58, 0x36, 0x17, 0xd8, 0x54, 0x1f, 0xdd, 0x10, 0x61, 0x8c, - 0x3c, 0xc9, 0x5d, 0x9c, 0xcc, 0xa4, 0xb8, 0x47, 0x42, 0x71, 0xc7, 0x9d, - 0xb9, 0x04, 0x42, 0xb4, 0xa8, 0x68, 0xe0, 0x77, 0xe7, 0x94, 0x4f, 0xab, - 0xf3, 0x83, 0x51, 0x0b, 0x61, 0x22, 0x6b, 0x90, 0xc9, 0x0d, 0x0c, 0xd6, - 0x4b, 0x84, 0xb4, 0x28, 0x7d, 0x15, 0xc2, 0x60, 0xe2, 0x93, 0xcf, 0x79, - 0x26, 0xdd, 0x76, 0x5b, 0x76, 0x32, 0x7d, 0x24, 0x84, 0x54, 0x45, 0x8d, - 0xfb, 0x77, 0xc4, 0x29, 0x71, 0x06, 0xa4, 0x0d, 0xce, 0xc5, 0x87, 0xa4, - 0x3a, 0x38, 0xfa, 0x4c, 0x9a, 0x09, 0x98, 0xb8, 0x8f, 0x94, 0xa4, 0xe9, - 0xc4, 0xb8, 0x26, 0xfe, 0xd9, 0x51, 0x57, 0x09, 0x20, 0x2d, 0x9a, 0xfc, - 0xdd, 0x93, 0x1d, 0x4b, 0x07, 0x02, 0x9f, 0x18, 0x9f, 0x43, 0x57, 0x6a, - 0x49, 0xe5, 0x9e, 0x56, 0x0c, 0x63, 0x4c, 0x29, 0xd8, 0x0d, 0x2b, 0xf3, - 0x80, 0xaa, 0xe0, 0xf2, 0x0b, 0x1b, 0x2e, 0x34, 0xf6, 0xc4, 0x61, 0x7c, - 0xf4, 0x5e, 0xf8, 0xea, 0x55, 0xf4, 0xfc, 0x00, 0xa3, 0x45, 0x7c, 0x81, - 0x00, 0x21, 0x00, 0x86, 0x00, 0x40, 0x96, 0xf0, 0x01, 0x1b, 0x06, 0x00, - 0x49, 0x73, 0xc0, 0x76, 0x6d, 0x74, 0xe2, 0xb4, 0x55, 0x3a, 0xf2, 0xc2, - 0x04, 0x9c, 0x97, 0x59, 0xb4, 0xb0, 0xbf, 0x43, 0xbf, 0x4f, 0x77, 0xbb, - 0x57, 0xbf, 0xf3, 0xd8, 0xc2, 0x25, 0xaf, 0xf1, 0xf6, 0x9e, 0xb9, 0xf5, - 0xc3, 0x09, 0xf3, 0xef, 0x7f, 0xe8, 0xb9, 0xb1, 0xc8, 0x1b, 0x33, 0x61, - 0x4c, 0xc3, 0x1a, 0x1b, 0xf5, 0x7e, 0xcf, 0xdb, 0xeb, 0xf8, 0x47, 0x27, - 0xd0, 0x9c, 0xfe, 0xdb, 0xcd, 0x87, 0x38, 0x5d, 0x4f, 0x9e, 0x75, 0x7e, - 0x2c, 0x00, 0x00, 0x00, 0x01, 0xa0, 0x7f, 0xef, 0x1a, 0x6d, 0xe9, 0x60, - 0xf0, 0x29, 0x98, 0x68, 0x36, 0xa6, 0x3b, 0x2c, 0x65, 0xfc, 0xea, 0x42, - 0x51, 0x61, 0x1c, 0xed, 0xb7, 0xb9, 0x39, 0x43, 0x70, 0xa1, 0x03, 0x6e, - 0x82, 0x6b, 0x80, 0x55, 0x68, 0x5a, 0x3c, 0x49, 0x21, 0xb7, 0x05, 0x0c, - 0xe3, 0x74, 0xcd, 0xfa, 0x47, 0xbc, 0x74, 0x51, 0xc3, 0x68, 0x3b, 0xc8, - 0xd9, 0x0a, 0x68, 0x37, 0xc6, 0xe2, 0x56, 0xb5, 0x7e, 0x76, 0x49, 0x1e, - 0x37, 0x06, 0x58, 0x5a, 0xf4, 0xed, 0x00, 0xbd, 0x38, 0x5e, 0x3b, 0x6f, - 0x3c, 0x14, 0x29, 0xa0, 0x42, 0xcd, 0x3f, 0x9f, 0x56, 0x7e, 0x3b, 0xbb, - 0xef, 0xcc, 0x16, 0xd3, 0xab, 0xde, 0x0d, 0xd3, 0x61, 0x14, 0xaa, 0x7f, - 0x7c, 0x17, 0x64, 0x20, 0x68, 0xfe, 0xc8, 0xbb, 0x8b, 0x02, 0x3b, 0x0f, - 0x6d, 0xad, 0x15, 0x3d, 0x72, 0xe3, 0x2b, 0xa6, 0xe7, 0x53, 0x7c, 0x0f, - 0x92, 0x34, 0xb2, 0x47, 0xbd, 0x7b, 0xae, 0x9d, 0x38, 0xcc, 0x2e, 0xc9, - 0xdb, 0xe5, 0xce, 0xcb, 0x0b, 0x28, 0x0b, 0x76, 0xb9, 0x4e, 0xd9, 0xff, - 0x32, 0x9d, 0xf4, 0xe9, 0xc4, 0x01, 0x72, 0x49, 0x6e, 0xfb, 0x55, 0x14, - 0x30, 0xba, 0x41, 0xb3, 0xd9, 0x70, 0x4c, 0xe7, 0x4f, 0xf2, 0xa5, 0x10, - 0x96, 0x80, 0x20, 0xce, 0x01, 0xbc, 0x0a, 0x97, 0xbe, 0xb8, 0xc6, 0xfb, - 0xe8, 0x3e, 0xe1, 0xbd, 0x1a, 0xa2, 0xde, 0x94, 0x35, 0xa4, 0x3b, 0x1d, - 0x22, 0x12, 0xd3, 0xaf, 0xeb, 0x93, 0xfa, 0x3f, 0x8a, 0x47, 0x32, 0x91, - 0x87, 0x14, 0xde, 0xc6, 0xaa, 0x42, 0x3e, 0x68, 0xe8, 0x57, 0x4a, 0x36, - 0xc0, 0xda, 0xeb, 0x76, 0x71, 0x86, 0xaa, 0xfa, 0x5b, 0xf5, 0x85, 0xd7, - 0x0b, 0xd5, 0xee, 0xc0, 0x07, 0xf5, 0xbe, 0x1a, 0xc7, 0x4a, 0x87, 0x2b, - 0x27, 0x27, 0x9a, 0x42, 0x72, 0x16, 0xc3, 0xe0, 0x07, 0x97, 0x91, 0x06, - 0xcf, 0xcc, 0x02, 0xcc, 0x70, 0x6a, 0xbc, 0xb7, 0x8a, 0x4b, 0x20, 0x0c, - 0x1b, 0xb3, 0x98, 0xd1, 0xe6, 0x3b, 0x09, 0xcb, 0xa6, 0xb3, 0x40, 0x0b, - 0x77, 0xea, 0xb0, 0xcf, 0x54, 0x85, 0xc0, 0x4f, 0xaf, 0x54, 0x76, 0xca, - 0x22, 0x6b, 0xeb, 0x94, 0x0d, 0x22, 0x5b, 0x11, 0x61, 0x06, 0x3e, 0xed, - 0xcf, 0x6c, 0xc4, 0x0c, 0xf0, 0xda, 0xd6, 0xd0, 0x69, 0xde, 0xc7, 0x1a, - 0xbb, 0x76, 0x42, 0x1d, 0x3d, 0x7e, 0x39, 0xc0, 0xe3, 0x42, 0xc2, 0x43, - 0x68, 0x31, 0x04, 0xa0, 0x34, 0xec, 0xdd, 0xb4, 0x6b, 0x5e, 0x8d, 0xc2, - 0x7f, 0x21, 0x45, 0x4e, 0x14, 0xc2, 0x81, 0xc1, 0x4e, 0x83, 0xa7, 0x79, - 0xd7, 0x68, 0x3c, 0xca, 0x57, 0x6e, 0x9a, 0xcd, 0xfe, 0x0e, 0xd2, 0x6f, - 0x8a, 0xba, 0x4c, 0x8c, 0xf4, 0x41, 0xaa, 0x71, 0x96, 0x71, 0xca, 0x5f, - 0xea, 0xff, 0x69, 0x90, 0xb3, 0x5c, 0xd8, 0xa1, 0x18, 0x05, 0xdb, 0x33, - 0x17, 0x9b, 0x89, 0xb1, 0x6f, 0xce, 0x4b, 0x26, 0x6d, 0x19, 0x6f, 0x6a, - 0xf7, 0xa0, 0xbe, 0xb4, 0xc0, 0xa3, 0x0b, 0x96, 0x8b, 0x8f, 0x12, 0x97, - 0xfc, 0x40, 0x00, 0x00, 0x00, 0xd6, 0x5e, 0x4d, 0x99, 0x80, 0x3a, 0x02, - 0x0b, 0x9e, 0x5e, 0xf5, 0xe8, 0x5e, 0x83, 0x37, 0x34, 0x70, 0xc3, 0xc9, - 0x26, 0x09, 0x6f, 0x35, 0xd0, 0xcc, 0xc4, 0x2f, 0xce, 0x18, 0xae, 0x63, - 0xa9, 0xf1, 0xda, 0xb2, 0xa4, 0xa2, 0xd4, 0xd2, 0x23, 0xe1, 0xbb, 0xe7, - 0x21, 0xdb, 0xc3, 0xb8, 0xf4, 0x34, 0x0d, 0x04, 0xe5, 0x7b, 0xbb, 0x62, - 0xfe, 0x5e, 0x33, 0xca, 0xf2, 0x24, 0x73, 0xc3, 0x1e, 0x52, 0x42, 0xb1, - 0x87, 0xa5, 0x04, 0x67, 0x88, 0x14, 0x96, 0xe3, 0x8e, 0xb1, 0x10, 0x7a, - 0xf5, 0x28, 0xc2, 0x44, 0xf8, 0x22, 0x6c, 0x73, 0x09, 0x3a, 0xe2, 0x83, - 0xed, 0xd2, 0x4e, 0x0e, 0x34, 0x80, 0x38, 0xe4, 0x0b, 0x6c, 0xcc, 0x73, - 0x70, 0x58, 0x4c, 0xd4, 0x9c, 0x75, 0xfa, 0xd9, 0x45, 0x03, 0x71, 0xb2, - 0xe9, 0x70, 0xd6, 0xac, 0x67, 0xce, 0x01, 0x85, 0xf6, 0x09, 0xfd, 0x29, - 0x9d, 0xb2, 0xb9, 0xdd, 0xfd, 0xac, 0x10, 0x96, 0x6a, 0x73, 0xe2, 0x2a, - 0x5a, 0x76, 0x6b, 0xcf, 0x5d, 0x6c, 0x15, 0xb7, 0x86, 0x4e, 0x6a, 0xa9, - 0x36, 0x1b, 0xf2, 0x01, 0x26, 0x51, 0x9c, 0x4c, 0x0a, 0x85, 0x8f, 0x96, - 0xfc, 0x59, 0x0a, 0xec, 0x88, 0x1e, 0xcc, 0x57, 0x60, 0x0b, 0xfd, 0x15, - 0xab, 0x89, 0x50, 0x1f, 0x74, 0x37, 0xb1, 0x07, 0x7e, 0xd4, 0xf6, 0x57, - 0x04, 0x5f, 0xea, 0xc0, 0x9e, 0x63, 0x9d, 0xe4, 0xea, 0x49, 0xc9, 0xfa, - 0xca, 0xd3, 0x7c, 0xb9, 0x8e, 0xfa, 0x96, 0xbc, 0x10, 0x0b, 0x03, 0x84, - 0x38, 0x22, 0x0b, 0x80, 0x00, 0x00, 0x00, 0x63, 0x60, 0xd8, 0x8b, 0x8d, - 0x27, 0xa1, 0xbd, 0x83, 0xcf, 0x24, 0xff, 0x3b, 0xef, 0x20, 0x60, 0x48, - 0xf4, 0x50, 0x91, 0xe8, 0x1f, 0xde, 0x67, 0x18, 0xaa, 0x75, 0xa0, 0xdc, - 0x22, 0x15, 0x13, 0x07, 0xca, 0x9b, 0xc4, 0xc5, 0x7e, 0x95, 0xf0, 0xf4, - 0x6a, 0x03, 0x06, 0x08, 0x39, 0x23, 0xa8, 0xee, 0xca, 0x1f, 0x93, 0x3b, - 0xde, 0x1e, 0xb2, 0xc2, 0x8d, 0xa1, 0xd7, 0x09, 0x29, 0x15, 0x7b, 0x72, - 0x8d, 0x83, 0x9d, 0xd9, 0xd7, 0xee, 0x18, 0x57, 0x86, 0x13, 0x42, 0xa9, - 0x9a, 0xb6, 0x89, 0x57, 0x97, 0x3a, 0xba, 0x85, 0xb2, 0xa6, 0x65, 0xb9, - 0x9c, 0x39, 0x9b, 0x37, 0xd6, 0x46, 0xb9, 0x98, 0x59, 0xc6, 0x00, 0x7f, - 0x8f, 0x2f, 0xff, 0xc0, 0xa4, 0xb8, 0xbf, 0x11, 0xc3, 0xa6, 0x48, 0xab, - 0x86, 0x74, 0x98, 0x9f, 0xf5, 0x0b, 0x46, 0x73, 0xf1, 0x49, 0x69, 0xbb, - 0x25, 0x4f, 0xe4, 0xd3, 0xae, 0x3c, 0x10, 0xaa, 0xf1, 0x33, 0x27, 0x6d, - 0x41, 0x74, 0xaa, 0x67, 0xbb, 0x19, 0x78, 0xf6, 0x8c, 0xa6, 0xe1, 0x1a, - 0xf5, 0xb3, 0x3c, 0x69, 0x27, 0x25, 0x04, 0x35, 0xe0, 0x41, 0xff, 0xb2, - 0xdd, 0xb4, 0xf5, 0xcb, 0x47, 0xfd, 0x01, 0xea, 0x95, 0x40, 0x64, 0xaf, - 0x41, 0x52, 0xda, 0x34, 0xee, 0xc9, 0x2f, 0x14, 0x3f, 0x9c, 0xca, 0x9b, - 0xa1, 0x50, 0x7a, 0xac, 0x4c, 0xd7, 0x93, 0xcf, 0xf2, 0x42, 0xb2, 0x73, - 0xca, 0xe3, 0xf3, 0xd7, 0x17, 0xb5, 0xbb, 0x68, 0xb2, 0xc1, 0xe6, 0x51, - 0x06, 0xdc, 0xbf, 0x33, 0xa7, 0x47, 0x7c, 0x3c, 0x38, 0x61, 0x06, 0x2f, - 0x65, 0xb5, 0x18, 0xbb, 0xbb, 0x48, 0x86, 0x12, 0x99, 0x7b, 0x09, 0x68, - 0x55, 0xf4, 0x23, 0xbb, 0xba, 0x34, 0xa5, 0x81, 0x24, 0x8b, 0x21, 0x2c, - 0x2c, 0xb3, 0x13, 0xbc, 0xfb, 0x1e, 0x99, 0x10, 0xd3, 0xad, 0x0f, 0x84, - 0xa5, 0x45, 0xda, 0x91, 0x74, 0xbb, 0x5d, 0xcc, 0x6c, 0xa3, 0x60, 0xec, - 0x26, 0xcf, 0x86, 0xa1, 0x96, 0xf1, 0xe1, 0x06, 0x7d, 0x15, 0x92, 0x5d, - 0x70, 0xed, 0x7b, 0xb6, 0x0b, 0x62, 0xa0, 0xca, 0x98, 0x95, 0xa8, 0xff, - 0x14, 0xab, 0x1c, 0x35, 0x65, 0xed, 0x3c, 0x11, 0x9f, 0xb6, 0x1e, 0x41, - 0x55, 0xe2, 0x93, 0x1f, 0x97, 0x93, 0x75, 0x91, 0x93, 0x20, 0x19, 0x76, - 0xef, 0x52, 0x92, 0xa7, 0x39, 0xd9, 0x74, 0xb7, 0xef, 0x3a, 0x1d, 0xef, - 0x77, 0x37, 0x9a, 0x7f, 0x8d, 0xdb, 0xb3, 0xb9, 0x67, 0x89, 0xfc, 0x7d, - 0x1b, 0x9b, 0xa9, 0x0e, 0x45, 0x58, 0x35, 0x48, 0x79, 0x45, 0x6d, 0x3e, - 0x5a, 0x13, 0x80, 0xf6, 0x72, 0x3b, 0xf4, 0xbb, 0x0a, 0xaa, 0x62, 0xdd, - 0x55, 0x4e, 0x68, 0x80, 0xee, 0xb2, 0x8f, 0x8d, 0x2c, 0xb3, 0x9d, 0x5e, - 0x17, 0x80, 0x3b, 0x27, 0x2b, 0x33, 0x97, 0x96, 0x4f, 0xb1, 0x7b, 0xc9, - 0x63, 0xce, 0x65, 0xf4, 0x66, 0x0e, 0x51, 0x67, 0xaf, 0xc5, 0x3f, 0x17, - 0xdb, 0xe2, 0x44, 0x81, 0x2d, 0x41, 0x43, 0xd0, 0x75, 0xd7, 0x37, 0xef, - 0x65, 0x49, 0x80, 0x8b, 0x70, 0xff, 0xa5, 0x40, 0x3b, 0x72, 0x09, 0xa3, - 0x10, 0xc7, 0x1e, 0x08, 0xd0, 0x50, 0x5c, 0x33, 0xee, 0x08, 0x2c, 0x0c, - 0x18, 0x71, 0x37, 0xdf, 0xa3, 0x19, 0x3e, 0xc5, 0x3f, 0x47, 0xe0, 0x64, - 0xdf, 0x15, 0x0e, 0x37, 0xa8, 0xbd, 0xf2, 0x6f, 0xec, 0x56, 0xa5, 0x41, - 0x41, 0xff, 0xf8, 0xea, 0xba, 0x52, 0xf3, 0xc3, 0x05, 0x90, 0x06, 0x07, - 0x01, 0x58, 0xef, 0x58, 0xb1, 0xac, 0xc3, 0x33, 0x87, 0xa4, 0x5b, 0xfd, - 0xe3, 0xf3, 0x71, 0x5f, 0x3b, 0xcc, 0xb7, 0x92, 0xa8, 0x60, 0x30, 0x02, - 0xa0, 0x5b, 0xc4, 0x79, 0xfc, 0x2f, 0xb6, 0x83, 0x4a, 0xae, 0x54, 0xfe, - 0x7c, 0x57, 0x42, 0xd9, 0x37, 0xf4, 0xca, 0x65, 0x80, 0xd1, 0x3c, 0x01, - 0x37, 0xd3, 0x33, 0xd8, 0x03, 0x21, 0x83, 0x42, 0x63, 0x85, 0x52, 0x91, - 0xb2, 0x02, 0x58, 0x22, 0x10, 0x07, 0xa0, 0xda, 0x40, 0x68, 0xf4, 0x0a, - 0x94, 0x4c, 0x57, 0x55, 0x9c, 0x2b, 0xc6, 0xef, 0xf7, 0xe9, 0xa1, 0x70, - 0xba, 0x5a, 0x2a, 0xaa, 0xe5, 0xc6, 0x52, 0xd3, 0x32, 0xa9, 0xad, 0x48, - 0xf5, 0xe3, 0x96, 0x09, 0x12, 0xbd, 0xc0, 0xc9, 0x63, 0xa5, 0x3b, 0x98, - 0x07, 0x6f, 0x1e, 0x5d, 0x58, 0x61, 0x5a, 0xbc, 0x54, 0x9e, 0x1a, 0xf0, - 0xe0, 0xe7, 0x33, 0xc9, 0x0a, 0x13, 0x48, 0x7d, 0x1e, 0x9b, 0xe8, 0x4d, - 0x99, 0x70, 0xaf, 0x59, 0x1b, 0x7e, 0x20, 0x72, 0x53, 0x68, 0x07, 0xac, - 0x1e, 0x10, 0x52, 0x71, 0xd6, 0x16, 0x10, 0x6e, 0x4f, 0x73, 0xea, 0x42, - 0x66, 0xa8, 0x8b, 0xcf, 0x9c, 0x5d, 0xc7, 0x7b, 0x9f, 0xe2, 0x61, 0x3a, - 0x04, 0xdc, 0x57, 0xe7, 0x1a, 0x4a, 0xee, 0x26, 0x4b, 0x83, 0xbd, 0x63, - 0xe8, 0xc1, 0xa1, 0xcc, 0x28, 0x68, 0x8e, 0x64, 0xae, 0xaf, 0x5a, 0x6c, - 0x61, 0x55, 0xde, 0x4b, 0x33, 0xf8, 0x4a, 0xb1, 0x91, 0x5f, 0x00, 0xa3, - 0x49, 0xcf, 0x81, 0x00, 0x43, 0x00, 0x86, 0x00, 0x40, 0x96, 0xf0, 0x01, - 0x1b, 0x06, 0x00, 0x39, 0x76, 0x86, 0x6b, 0xa3, 0x0d, 0xbd, 0xd1, 0xea, - 0xb1, 0x15, 0xd3, 0x8c, 0x45, 0xdf, 0x4b, 0x25, 0x63, 0x2e, 0x8c, 0x78, - 0xff, 0xa3, 0x0d, 0x06, 0xf5, 0xdc, 0x1f, 0x8b, 0xf1, 0xfc, 0x3f, 0x4f, - 0x69, 0xaf, 0x4e, 0xef, 0x7f, 0x99, 0xd5, 0x3d, 0x2d, 0xc7, 0x1e, 0x6e, - 0xd9, 0xd8, 0xf4, 0xd7, 0x60, 0xeb, 0x2a, 0xf7, 0xf1, 0xaf, 0x7c, 0x00, - 0x00, 0x00, 0x00, 0x03, 0xa5, 0x73, 0x48, 0x16, 0xe6, 0xb4, 0xd1, 0xf1, - 0x65, 0x57, 0xc6, 0x3f, 0xef, 0x7e, 0x82, 0x70, 0x20, 0x11, 0x60, 0xcf, - 0xa3, 0x5b, 0x19, 0x4a, 0x9c, 0x7a, 0xd7, 0xe4, 0x5f, 0xf3, 0x00, 0xaf, - 0x44, 0xf0, 0xf4, 0xb7, 0xfb, 0x24, 0x4d, 0x0e, 0x48, 0xbf, 0x3d, 0xb8, - 0xa9, 0x8f, 0xe6, 0x22, 0xa4, 0xba, 0xad, 0xdb, 0xde, 0x1b, 0x2f, 0x3e, - 0x83, 0x10, 0xea, 0x7c, 0x38, 0xbb, 0xa8, 0x81, 0xbf, 0x07, 0xe3, 0x35, - 0x80, 0x04, 0xa4, 0xee, 0xa5, 0x58, 0x04, 0x1f, 0x33, 0x4c, 0x40, 0x36, - 0xd3, 0x2b, 0x77, 0x2e, 0xc0, 0x04, 0x52, 0xcf, 0x85, 0x27, 0xfc, 0x38, - 0xda, 0x58, 0x2d, 0x85, 0x70, 0xe6, 0xb7, 0x33, 0xb6, 0x29, 0xd8, 0xbc, - 0x50, 0xce, 0x3b, 0xe3, 0xa4, 0x04, 0x94, 0xca, 0x9f, 0xce, 0x40, 0x34, - 0x00, 0x8e, 0x86, 0x94, 0xf4, 0xea, 0x01, 0xf6, 0xdb, 0x72, 0x17, 0x08, - 0x5f, 0x02, 0x3e, 0x88, 0xd3, 0x89, 0xe4, 0x7d, 0xfa, 0x9a, 0x6f, 0x68, - 0xb0, 0x9d, 0xce, 0x55, 0xab, 0xe1, 0x66, 0x1e, 0x6f, 0x02, 0xc4, 0xb6, - 0x7c, 0x5b, 0x81, 0xf5, 0x62, 0xb8, 0x62, 0xe5, 0x03, 0xff, 0xbf, 0x1f, - 0xa4, 0xd6, 0x0d, 0x5e, 0xed, 0xc4, 0xe9, 0xe8, 0x14, 0x4a, 0x34, 0x7f, - 0xbf, 0x33, 0x71, 0x9e, 0x05, 0x9a, 0xb9, 0x0a, 0x9e, 0x63, 0xa4, 0xb7, - 0xae, 0xde, 0x01, 0xc0, 0x54, 0xfa, 0x21, 0x1f, 0xde, 0x09, 0x96, 0x05, - 0xc1, 0xc3, 0xaa, 0x73, 0xb2, 0x21, 0xf1, 0xc1, 0x36, 0x21, 0x8e, 0x41, - 0xb7, 0xc7, 0xe9, 0x40, 0x78, 0xde, 0xcf, 0xa6, 0x01, 0x1b, 0xed, 0xbf, - 0x47, 0xc9, 0xef, 0x61, 0x6c, 0x12, 0x1d, 0xb5, 0x03, 0x94, 0x5e, 0x6f, - 0xcc, 0x27, 0x73, 0xc0, 0x0b, 0xe5, 0x40, 0xf8, 0x06, 0xf1, 0x21, 0xba, - 0x31, 0x9c, 0xab, 0xd8, 0x43, 0x60, 0x27, 0x34, 0x57, 0xc4, 0x55, 0x7c, - 0xaf, 0x04, 0x18, 0xf4, 0xb5, 0xf7, 0x93, 0x43, 0xc7, 0x0a, 0x17, 0x8c, - 0x95, 0xe2, 0xec, 0x74, 0xc4, 0x93, 0x39, 0x64, 0xe9, 0x21, 0xfa, 0xcf, - 0x82, 0xc9, 0xcf, 0xe4, 0x2c, 0x56, 0x76, 0xe5, 0x02, 0x87, 0xf5, 0x79, - 0x95, 0xb6, 0x4d, 0xbb, 0xa9, 0xd4, 0x66, 0x94, 0x36, 0x05, 0x55, 0x59, - 0xb5, 0x0d, 0xf5, 0x20, 0xa5, 0xfc, 0x68, 0x5c, 0xb7, 0x3d, 0xf1, 0xf1, - 0x0f, 0x7f, 0x7f, 0x8d, 0x8b, 0xec, 0x34, 0xfa, 0xd8, 0x7e, 0xb9, 0x9a, - 0x91, 0xed, 0xe7, 0x9d, 0x6c, 0x62, 0xd3, 0xfd, 0x38, 0x6c, 0x14, 0x58, - 0xf4, 0x03, 0x01, 0xd5, 0x0a, 0x02, 0x19, 0x9d, 0x85, 0x69, 0x40, 0xa0, - 0x33, 0x24, 0x94, 0xde, 0x96, 0xc9, 0xfa, 0x0c, 0xc8, 0x28, 0xd7, 0x85, - 0xfa, 0x64, 0x97, 0x12, 0x2b, 0x95, 0x6a, 0x2f, 0x63, 0xc3, 0x50, 0x40, - 0x2f, 0x43, 0x61, 0x26, 0x82, 0x21, 0x5e, 0x1b, 0x53, 0x55, 0x9a, 0x15, - 0x8d, 0xad, 0x66, 0x7b, 0x99, 0x9b, 0x8a, 0x86, 0x75, 0xc6, 0xa8, 0xad, - 0x6c, 0x13, 0xfc, 0x8c, 0x86, 0xf3, 0x7a, 0x09, 0x93, 0xc4, 0x4a, 0x57, - 0x9f, 0x92, 0x0a, 0x1b, 0x0d, 0xd2, 0xde, 0x5d, 0xa1, 0x14, 0xc8, 0x01, - 0x86, 0x4f, 0x3e, 0xa3, 0xcf, 0x8b, 0xaf, 0x04, 0xee, 0x71, 0xa5, 0x0e, - 0xc5, 0x3d, 0xc7, 0xfd, 0xca, 0x5a, 0x27, 0xd1, 0x3a, 0x3e, 0xb5, 0x13, - 0x1c, 0xf5, 0x20, 0x91, 0xbe, 0x5f, 0x62, 0x04, 0xb3, 0x14, 0xb4, 0x03, - 0x82, 0x41, 0xab, 0x20, 0x11, 0xfc, 0xc9, 0xd1, 0x08, 0x33, 0xe1, 0x83, - 0xe8, 0xf7, 0x31, 0x7f, 0x89, 0x61, 0x13, 0xae, 0xce, 0x0e, 0x3e, 0xec, - 0x97, 0xe4, 0x76, 0xc3, 0x37, 0x8d, 0xac, 0xca, 0xfe, 0xd5, 0x27, 0xa0, - 0xbf, 0x9a, 0x31, 0x20, 0x09, 0x6f, 0xcf, 0x81, 0x69, 0xf9, 0x85, 0xb0, - 0x88, 0x80, 0x45, 0xed, 0x65, 0x1d, 0xc7, 0xc8, 0xd9, 0x87, 0x3a, 0x3b, - 0x58, 0x79, 0xbc, 0x8d, 0x23, 0xbe, 0xdc, 0x4c, 0x31, 0xed, 0x20, 0x8d, - 0xf7, 0x64, 0x7e, 0x8a, 0xbd, 0x0e, 0xdd, 0x19, 0x11, 0x64, 0xa9, 0x91, - 0x60, 0x92, 0xda, 0xb5, 0xfc, 0x3f, 0x32, 0x32, 0x23, 0xa6, 0x93, 0xd8, - 0x34, 0xd7, 0x56, 0xd6, 0xea, 0x1a, 0x00, 0x0b, 0xf3, 0x52, 0xbf, 0x99, - 0x0a, 0x88, 0x60, 0x9d, 0x3d, 0x42, 0x9d, 0xd5, 0xde, 0x5b, 0x17, 0x24, - 0x3b, 0xff, 0x26, 0xc2, 0x85, 0x4f, 0x90, 0x33, 0x4a, 0x80, 0xee, 0x2d, - 0xff, 0xf0, 0xb6, 0x7c, 0x24, 0x48, 0x74, 0x6d, 0x48, 0x6a, 0x27, 0x46, - 0x87, 0x9d, 0x56, 0x69, 0xa1, 0xf4, 0x7e, 0x77, 0xb0, 0x96, 0x5f, 0x52, - 0x95, 0x1f, 0xe8, 0x71, 0x53, 0x65, 0xe8, 0x2d, 0x45, 0x7d, 0x52, 0x95, - 0xa8, 0x4b, 0xc8, 0x94, 0x6c, 0x76, 0x7d, 0x72, 0xba, 0x7f, 0xc3, 0x16, - 0xe6, 0x68, 0xc3, 0xe9, 0xea, 0xac, 0xf6, 0x17, 0xbc, 0xd9, 0x75, 0x9c, - 0x39, 0x4c, 0x5f, 0x91, 0x86, 0xe5, 0x60, 0x93, 0x9f, 0xbd, 0xad, 0x97, - 0x64, 0x60, 0x16, 0x61, 0x03, 0xab, 0xf9, 0x93, 0x7b, 0xf0, 0x24, 0xbd, - 0x52, 0x8f, 0xab, 0xd9, 0x7d, 0x12, 0x11, 0x1b, 0xb1, 0x13, 0x51, 0x18, - 0x1a, 0x92, 0xff, 0x48, 0xa0, 0xaa, 0x46, 0xbf, 0xc2, 0xef, 0xf1, 0x8a, - 0xab, 0x61, 0x9d, 0xe1, 0xaf, 0x05, 0x68, 0xee, 0xec, 0xab, 0x5d, 0x7f, - 0x19, 0x50, 0x73, 0xeb, 0x54, 0x8a, 0x68, 0xf9, 0xe3, 0x50, 0xa9, 0x26, - 0xc0, 0xe3, 0x11, 0xe8, 0x2a, 0x09, 0xca, 0x5f, 0x07, 0xda, 0xcb, 0xca, - 0x3c, 0x56, 0xb0, 0xb2, 0xb3, 0x76, 0xef, 0x5a, 0x2d, 0xdd, 0xaf, 0x1d, - 0x1a, 0x9f, 0xd1, 0xdc, 0x80, 0x77, 0x15, 0x51, 0xa5, 0x07, 0x85, 0x75, - 0x08, 0xe8, 0xac, 0x79, 0xc0, 0xaa, 0x2d, 0x1c, 0x5b, 0x0f, 0x92, 0x27, - 0xf1, 0x1f, 0xed, 0xcb, 0xe9, 0xf2, 0xfa, 0x1c, 0xa4, 0xb2, 0x5d, 0xc4, - 0x4f, 0x74, 0xe8, 0x6b, 0x19, 0xcf, 0xed, 0x4b, 0xfc, 0xf4, 0x5f, 0xb4, - 0x82, 0x68, 0x9b, 0xbf, 0xa4, 0x3e, 0x26, 0x25, 0x51, 0x0d, 0x0d, 0xbc, - 0xfd, 0x05, 0x79, 0xe6, 0x40, 0x40, 0x17, 0x2a, 0x86, 0x85, 0x98, 0x27, - 0x8d, 0xae, 0xbb, 0xf1, 0x0c, 0x87, 0x9d, 0x33, 0x40, 0xfb, 0xff, 0x83, - 0x7a, 0x75, 0x9f, 0x2d, 0x36, 0x6d, 0x23, 0x53, 0xbc, 0x6c, 0xbb, 0x89, - 0x3a, 0x37, 0x26, 0x3d, 0xf5, 0xa7, 0xaf, 0xcb, 0x19, 0x8f, 0x16, 0x98, - 0xde, 0x1e, 0x78, 0x6d, 0x88, 0x82, 0x01, 0x2c, 0x71, 0xba, 0x50, 0xad, - 0x44, 0x1e, 0x35, 0x43, 0x8c, 0x97, 0x95, 0xd6, 0x0d, 0x6b, 0x09, 0xb0, - 0xa2, 0xdd, 0xae, 0x16, 0xb0, 0x5c, 0xe7, 0xba, 0x78, 0xe7, 0xf9, 0x2c, - 0x6e, 0x07, 0x4a, 0xbf, 0xbc, 0xe8, 0xcf, 0x5d, 0xc1, 0x20, 0x92, 0xd7, - 0x5c, 0x0d, 0x30, 0x04, 0x40, 0x4e, 0xd0, 0x41, 0x39, 0x4b, 0x60, 0x65, - 0x67, 0x71, 0x4e, 0x04, 0x94, 0x18, 0x99, 0xf3, 0x06, 0x72, 0xb6, 0xb8, - 0x6f, 0xa0, 0x00, 0x00, 0x01, 0x05, 0x7f, 0xc9, 0x47, 0x3d, 0x5b, 0xf8, - 0x17, 0x4c, 0x12, 0x41, 0x5e, 0x5d, 0x1a, 0xec, 0x4c, 0x8d, 0xbd, 0x17, - 0x62, 0xd2, 0xc0, 0xdf, 0xf0, 0x9c, 0xfe, 0x15, 0x66, 0xdc, 0xee, 0x5f, - 0x85, 0x1e, 0xf2, 0x4f, 0x19, 0xc3, 0x4e, 0xcf, 0x7d, 0xed, 0x3d, 0xe1, - 0xe4, 0x24, 0x55, 0xc3, 0xd3, 0xa7, 0x4e, 0xc8, 0x60, 0x91, 0x51, 0x10, - 0x1e, 0x20, 0x8d, 0x16, 0xc0, 0x4f, 0x0b, 0x7d, 0x99, 0xeb, 0x79, 0x20, - 0x9d, 0xf8, 0x54, 0xd9, 0x81, 0xbe, 0x6e, 0x78, 0xfc, 0xa9, 0x62, 0xcc, - 0x92, 0xc2, 0x69, 0x11, 0x3f, 0x7a, 0xfd, 0x68, 0x01, 0x71, 0x59, 0xa9, - 0xf3, 0x19, 0x81, 0x7d, 0x57, 0x4b, 0x9a, 0x2b, 0x52, 0x5e, 0x72, 0x04, - 0x46, 0x50, 0x42, 0x4f, 0x0e, 0x9f, 0xfc, 0x45, 0x77, 0x30, 0xa3, 0x6a, - 0x0b, 0x0b, 0xc3, 0xec, 0x81, 0x65, 0xa2, 0xfe, 0x24, 0x2f, 0x6a, 0x6f, - 0xc6, 0xbb, 0x28, 0x4b, 0x01, 0x16, 0x71, 0x9a, 0x1c, 0x45, 0x4b, 0x50, - 0x97, 0x45, 0x37, 0x76, 0x50, 0x7d, 0x6b, 0x82, 0x70, 0xbe, 0x77, 0x7a, - 0x71, 0x10, 0x6a, 0xfc, 0x4c, 0xf4, 0x7f, 0xfe, 0x97, 0x8b, 0x8c, 0x7e, - 0x6e, 0x58, 0x07, 0x25, 0xe1, 0xae, 0x9e, 0x8b, 0x18, 0x91, 0x16, 0x27, - 0x0c, 0x90, 0x55, 0xeb, 0x12, 0x5b, 0x01, 0x27, 0x07, 0xdb, 0xf0, 0xf4, - 0x3b, 0x8b, 0x9b, 0xce, 0x96, 0x2d, 0x08, 0xd6, 0x69, 0xcc, 0x1d, 0xaa, - 0x88, 0xc7, 0x07, 0x56, 0x6f, 0x6f, 0xd5, 0xa9, 0xa0, 0x82, 0x51, 0x53, - 0x28, 0x10, 0xb5, 0x61, 0x85, 0xd2, 0x4c, 0x99, 0x9f, 0xe5, 0xfa, 0xe8, - 0x1e, 0x2a, 0x06, 0xa9, 0x88, 0xfe, 0x5d, 0xe0, 0x0f, 0xce, 0xe1, 0xd5, - 0x37, 0x16, 0x30, 0xd8, 0x3b, 0x86, 0x25, 0x0a, 0x3c, 0xc0, 0x94, 0x83, - 0xab, 0xf9, 0x06, 0x5c, 0x29, 0xcc, 0x59, 0x33, 0x05, 0x8e, 0x59, 0x53, - 0x53, 0x8d, 0x26, 0x00, 0x00, 0x00, 0x84, 0x7f, 0x79, 0xae, 0x34, 0xd1, - 0x76, 0x9f, 0xa0, 0x36, 0x80, 0xf7, 0xb2, 0x30, 0x51, 0x02, 0xf2, 0x0f, - 0xc6, 0x05, 0xad, 0x85, 0x6e, 0x4a, 0x43, 0x53, 0xcf, 0xa8, 0x89, 0xa2, - 0x90, 0xd4, 0x64, 0x11, 0xfa, 0xe6, 0x0b, 0x08, 0x3a, 0x6c, 0x9c, 0xfc, - 0xf7, 0xe8, 0xc2, 0x53, 0xa1, 0x5b, 0x21, 0x51, 0x22, 0x3e, 0xd7, 0x7b, - 0xcf, 0x9f, 0x23, 0x2f, 0x59, 0xa6, 0xdb, 0x99, 0x8a, 0x9b, 0x66, 0xb7, - 0x1e, 0x86, 0xaf, 0x91, 0xd8, 0x06, 0x1c, 0xd8, 0xe8, 0x20, 0x91, 0x35, - 0xcd, 0x07, 0xf5, 0x94, 0x53, 0x20, 0xfe, 0x3c, 0xfd, 0x52, 0x30, 0x4f, - 0x77, 0xf6, 0x14, 0x1d, 0x7b, 0x58, 0xee, 0x7a, 0x45, 0xfa, 0xb9, 0xf8, - 0xab, 0xbf, 0x81, 0x5e, 0xaa, 0xeb, 0x01, 0x78, 0x59, 0xf6, 0xd3, 0x57, - 0x19, 0x8e, 0x3c, 0x68, 0x03, 0xf8, 0x86, 0xd9, 0x8b, 0x0d, 0xbd, 0x59, - 0xa5, 0x52, 0x62, 0xc2, 0x86, 0xc8, 0x00, 0x7e, 0x96, 0xfb, 0x17, 0x7e, - 0xaa, 0x21, 0xc0, 0x42, 0x7d, 0x2d, 0xb3, 0xd1, 0xc4, 0x10, 0xa2, 0x01, - 0x8b, 0xd5, 0xa2, 0x26, 0x38, 0x4d, 0xcc, 0xb6, 0x5c, 0xc4, 0x05, 0xbb, - 0xab, 0xf9, 0x36, 0x56, 0x79, 0xad, 0x0f, 0xa1, 0xcd, 0x95, 0xfe, 0x79, - 0xf4, 0x35, 0x27, 0x66, 0x06, 0x7b, 0x6b, 0xa1, 0xae, 0x75, 0x8e, 0xf4, - 0xd7, 0x38, 0x68, 0x20, 0x68, 0x20, 0x7e, 0xcf, 0x8a, 0x96, 0x34, 0x32, - 0xac, 0x3d, 0xc7, 0xd0, 0xdc, 0xa1, 0xa7, 0x12, 0x88, 0x93, 0xbc, 0xae, - 0xa1, 0x2e, 0xcf, 0x0b, 0xf6, 0x4f, 0x7f, 0x93, 0x2a, 0x62, 0x7c, 0x55, - 0xd0, 0xb2, 0x80, 0x98, 0xb0, 0x96, 0xf7, 0x09, 0x15, 0x5d, 0x8b, 0x4c, - 0x74, 0x6e, 0xd6, 0x9a, 0x9d, 0x24, 0x32, 0x17, 0x46, 0xc8, 0x9f, 0xaa, - 0x85, 0x57, 0x0e, 0xb7, 0xee, 0x54, 0x46, 0x6b, 0x8e, 0xf5, 0xf5, 0xe5, - 0xae, 0xe6, 0xad, 0x3b, 0x7c, 0xbb, 0x42, 0x50, 0x73, 0x8a, 0x85, 0xc2, - 0xdb, 0xc4, 0x94, 0x34, 0x86, 0x80, 0xc3, 0x72, 0x58, 0x56, 0xb3, 0xe8, - 0x11, 0xc5, 0xbb, 0x24, 0x5b, 0xd9, 0x71, 0x0e, 0xe1, 0x4d, 0xf2, 0xbf, - 0x31, 0xe1, 0x03, 0x20, 0x64, 0xe7, 0x9f, 0x16, 0xda, 0xd3, 0x42, 0xfb, - 0x60, 0x92, 0xfe, 0xe2, 0x71, 0xdc, 0x17, 0xa2, 0x96, 0x2e, 0xeb, 0x2e, - 0x73, 0xfe, 0x33, 0x30, 0xc4, 0xcc, 0x0f, 0x6d, 0x70, 0xab, 0x8a, 0x08, - 0x82, 0x33, 0x9f, 0x54, 0x6f, 0x4a, 0xa4, 0x7c, 0x8b, 0xfd, 0xd7, 0x05, - 0xd5, 0x10, 0x44, 0x58, 0xe7, 0xb6, 0xb6, 0xdb, 0x6f, 0xe8, 0x07, 0x6d, - 0xfe, 0x0b, 0xd2, 0xd9, 0x43, 0x6c, 0x2a, 0x87, 0xc8, 0xaf, 0x57, 0x3b, - 0xde, 0x36, 0xa2, 0xdb, 0xc0, 0x1b, 0x72, 0xe8, 0x56, 0x69, 0x51, 0xbb, - 0x46, 0xc6, 0x05, 0x3e, 0xa2, 0xb3, 0xef, 0xbe, 0xa3, 0x0c, 0x09, 0x46, - 0x16, 0xbb, 0xb5, 0x51, 0x47, 0x31, 0x47, 0x79, 0xa6, 0x52, 0xc9, 0x4d, - 0x07, 0x5a, 0x57, 0x32, 0xac, 0xc8, 0x2f, 0xaf, 0x5f, 0xf4, 0x67, 0x40, - 0x20, 0xb6, 0x92, 0xe1, 0x42, 0x5a, 0x19, 0x8a, 0x14, 0x39, 0x7a, 0x11, - 0xbb, 0x19, 0xd3, 0xd6, 0x37, 0xec, 0x6a, 0xae, 0x87, 0x5a, 0xd1, 0x46, - 0x86, 0x66, 0x12, 0x70, 0x70, 0x0a, 0x69, 0x33, 0xeb, 0x41, 0xcf, 0x4c, - 0x7c, 0x8c, 0xa1, 0x04, 0xfd, 0x46, 0x18, 0x18, 0x89, 0xb2, 0x97, 0x17, - 0x22, 0x34, 0x4d, 0xba, 0x82, 0xd3, 0xab, 0x06, 0x67, 0x83, 0x78, 0xbf, - 0x52, 0x33, 0xea, 0x41, 0xb7, 0x78, 0x6a, 0x55, 0x06, 0x85, 0xc5, 0x71, - 0x68, 0x8b, 0x7f, 0xfe, 0x9d, 0x8e, 0x96, 0x56, 0x93, 0x2f, 0xe9, 0x07, - 0xfe, 0x99, 0xa6, 0xec, 0x6e, 0xdd, 0xbf, 0x0a, 0x1d, 0x4d, 0x91, 0xdb, - 0xf8, 0xbe, 0x89, 0xce, 0x31, 0x28, 0xc2, 0xca, 0xae, 0xa1, 0xac, 0x74, - 0x18, 0xae, 0xe4, 0x22, 0x38, 0x5c, 0x23, 0x9f, 0xa9, 0x4e, 0xd9, 0x8e, - 0xff, 0x58, 0xa0, 0xb0, 0xf0, 0xb7, 0x7f, 0x2e, 0x8f, 0x5c, 0xb3, 0xb0, - 0xfe, 0x7e, 0x64, 0xb4, 0x73, 0x50, 0xb3, 0x6f, 0x8d, 0x69, 0xe6, 0xb9, - 0xe3, 0x7f, 0xe8, 0xea, 0x1c, 0x0f, 0xc2, 0xb3, 0x94, 0x2d, 0x7c, 0x7b, - 0x5a, 0x72, 0x37, 0x0e, 0x63, 0x17, 0xa5, 0x73, 0x16, 0x42, 0xc3, 0x87, - 0x23, 0x9a, 0x4e, 0x4e, 0x33, 0x9c, 0x46, 0x43, 0x54, 0x73, 0x41, 0x44, - 0x7c, 0x9e, 0x1a, 0x6b, 0xdb, 0x36, 0x74, 0x05, 0x51, 0x08, 0x9b, 0x88, - 0x71, 0x52, 0x20, 0x00, 0xac, 0xd3, 0x54, 0x94, 0xf8, 0x7a, 0x25, 0xe1, - 0x88, 0x77, 0x11, 0x75, 0x63, 0xc3, 0x2c, 0xdf, 0xa3, 0x2f, 0xd3, 0x0d, - 0x0a, 0xb1, 0x4b, 0x11, 0xc4, 0x5e, 0xb9, 0xbe, 0xfa, 0xa4, 0x28, 0xfd, - 0x93, 0x9e, 0x21, 0x0a, 0x3e, 0xf2, 0xad, 0x49, 0xc7, 0xd5, 0x14, 0x35, - 0x92, 0x58, 0x3e, 0x02, 0x38, 0xeb, 0x4d, 0x12, 0x9d, 0xe9, 0x7b, 0xf8, - 0x69, 0x5c, 0xc3, 0x77, 0x71, 0xf6, 0x5a, 0x50, 0xa7, 0x78, 0xbd, 0xe1, - 0x5b, 0xa9, 0x6d, 0x8f, 0xb2, 0xe2, 0xdd, 0x0b, 0x10, 0xa8, 0x72, 0xcf, - 0x5d, 0xe5, 0xf9, 0xfe, 0xf1, 0x95, 0x00, 0x97, 0xb5, 0xf5, 0x2a, 0x0c, - 0x41, 0x49, 0xf2, 0xb9, 0xba, 0x3b, 0xa2, 0x0d, 0xaa, 0x59, 0xd6, 0xf2, - 0x23, 0xfd, 0xe6, 0xac, 0x33, 0xaa, 0x7e, 0x11, 0x6e, 0xd8, 0x93, 0x5b, - 0x99, 0xd1, 0x73, 0x13, 0xe0, 0x4a, 0x53, 0xdf, 0x9c, 0x15, 0x80, 0xda, - 0x4e, 0xaf, 0x00, 0xc6, 0xc2, 0x1a, 0xac, 0xc1, 0x7e, 0xc8, 0xaf, 0x92, - 0x36, 0xb3, 0xd2, 0x61, 0xb0, 0xcd, 0x55, 0xf6, 0x7d, 0x28, 0xf2, 0x01, - 0xc1, 0x5b, 0x5b, 0xf1, 0x4c, 0xb8, 0xcf, 0x72, 0xf6, 0xae, 0x4b, 0x66, - 0x74, 0xc3, 0xaf, 0x77, 0x3c, 0xd8, 0x0f, 0xe4, 0x38, 0xcc, 0xa5, 0x06, - 0xfc, 0x5e, 0x15, 0xf8, 0x74, 0xb1, 0xd1, 0x37, 0x6f, 0xfb, 0x97, 0x2e, - 0x18, 0x64, 0x20, 0x17, 0x8d, 0x5e, 0xf7, 0xf6, 0x83, 0xfd, 0x5b, 0x80, - 0x82, 0x7a, 0xc9, 0x12, 0x37, 0x51, 0x19, 0x8d, 0x0f, 0x09, 0x12, 0x8e, - 0x76, 0x95, 0x54, 0xd8, 0x92, 0x21, 0xc5, 0xcc, 0x53, 0x46, 0xae, 0xd7, - 0x7e, 0xe4, 0xb7, 0x9b, 0x70, 0xa8, 0xf9, 0x4a, 0xa8, 0x07, 0x5c, 0x79, - 0x7b, 0xdf, 0x82, 0x6c, 0x14, 0xc3, 0x4a, 0x9b, 0x93, 0xed, 0x12, 0xbf, - 0x36, 0x86, 0x3a, 0x9f, 0xe5, 0xe3, 0x6d, 0xc7, 0xb0, 0x1c, 0x1c, 0x2a, - 0x0f, 0xd1, 0x34, 0xf4, 0xca, 0x6b, 0xf0, 0x92, 0xb8, 0xf9, 0x9a, 0x07, - 0x1c, 0x4b, 0xc8, 0x21, 0xed, 0x27, 0x96, 0xf7, 0x00, 0x2c, 0xb5, 0xa0, - 0x05, 0xf5, 0xf8, 0xab, 0xb1, 0x47, 0x6b, 0x9a, 0xf5, 0xed, 0xdb, 0x8e, - 0xba, 0x9b, 0xb7, 0xf6, 0xe2, 0x99, 0x8f, 0xc0, 0x29, 0x63, 0x31, 0x19, - 0xcb, 0x16, 0x2d, 0x7f, 0x12, 0x6f, 0x90, 0x24, 0x31, 0xbc, 0x89, 0xa4, - 0x39, 0xb1, 0x07, 0xab, 0x0a, 0x7f, 0x92, 0xaa, 0xc0, 0x00, 0xa0, 0xb3, - 0x73, 0x28, 0x3e, 0x14, 0xdc, 0xc5, 0x8a, 0xbe, 0x00, 0xc1, 0xc1, 0xc6, - 0x2b, 0x6f, 0x69, 0x36, 0x86, 0x05, 0xc2, 0x4b, 0xf7, 0xbe, 0x9c, 0x67, - 0x35, 0x06, 0x71, 0x2f, 0xcb, 0xc1, 0x67, 0xac, 0x64, 0xee, 0x57, 0xa6, - 0x6d, 0x68, 0xb2, 0xa4, 0xfb, 0xf1, 0x4d, 0x21, 0xcf, 0x74, 0xe9, 0x9d, - 0x25, 0x99, 0x57, 0x70, 0xc5, 0x41, 0xbf, 0x4c, 0xc3, 0xbc, 0x12, 0x51, - 0x7c, 0x91, 0x61, 0xa5, 0x46, 0x67, 0xc9, 0x24, 0xd1, 0x89, 0x04, 0x02, - 0xeb, 0xca, 0x12, 0xd4, 0xb7, 0xa8, 0x3e, 0xa4, 0xac, 0x1a, 0x6f, 0x07, - 0x91, 0x38, 0x05, 0x69, 0xba, 0x44, 0x97, 0x90, 0xb8, 0xfb, 0x4f, 0xc8, - 0x25, 0x2b, 0x00, 0x61, 0x05, 0xc7, 0x23, 0xb6, 0x96, 0x66, 0xb9, 0x06, - 0x22, 0x89, 0x52, 0xe5, 0x22, 0x4d, 0xa0, 0xc4, 0x98, 0x4d, 0x9c, 0xbd, - 0x29, 0xcc, 0xbf, 0x4b, 0xf5, 0x8c, 0x56, 0xfc, 0xae, 0x86, 0x7c, 0x48, - 0xb9, 0x72, 0x14, 0xca, 0x55, 0xac, 0x50, 0x5b, 0x62, 0x79, 0x15, 0xe9, - 0x6d, 0x52, 0xad, 0xca, 0x17, 0x18, 0xf0, 0x3e, 0xa8, 0xd9, 0x5d, 0x0b, - 0xbb, 0xa7, 0x71, 0xc9, 0x33, 0xf8, 0xa8, 0x36, 0x65, 0xc3, 0x6a, 0xad, - 0xb1, 0xea, 0x02, 0x45, 0x95, 0xcd, 0x7a, 0xe7, 0xef, 0xad, 0xfd, 0xc0, - 0x8c, 0xc1, 0x68, 0x83, 0x5e, 0x85, 0x20, 0x74, 0xec, 0x0f, 0xd2, 0x3f, - 0x1d, 0x2b, 0xac, 0x80, 0xe7, 0x8a, 0x3d, 0x6e, 0xab, 0xd4, 0xbe, 0xe6, - 0x07, 0xcc, 0x93, 0x5c, 0x36, 0xf6, 0x50, 0xf7, 0xff, 0x3b, 0x5d, 0x29, - 0xe3, 0x6e, 0xa0, 0x05, 0xda, 0x45, 0xa5, 0xba, 0x8a, 0x7e, 0xc3, 0xc0, - 0x11, 0xe4, 0xfa, 0xf2, 0xd8, 0x84, 0x5e, 0x7f, 0xb4, 0x13, 0x1e, 0xcb, - 0x54, 0x2e, 0x4d, 0x40, 0x63, 0x4d, 0xe7, 0x68, 0x12, 0xc0, 0x75, 0xb0, - 0x10, 0x04, 0xd9, 0x06, 0x41, 0x22, 0x2f, 0x35, 0x08, 0x12, 0xb4, 0x58, - 0x4b, 0x91, 0x0f, 0x8c, 0xa8, 0x6c, 0xa4, 0x7e, 0xea, 0x85, 0x8c, 0xac, - 0x9b, 0xcf, 0x93, 0xcf, 0x48, 0xf7, 0xfe, 0x62, 0x01, 0x84, 0x34, 0x18, - 0x25, 0xf1, 0xbe, 0x0c, 0x80, 0xa3, 0x4f, 0x71, 0x81, 0x00, 0x64, 0x00, - 0x86, 0x00, 0x40, 0x96, 0xf0, 0x01, 0x17, 0x86, 0x00, 0x37, 0x77, 0x6f, - 0x3d, 0x1a, 0xea, 0x85, 0x30, 0x98, 0x31, 0x5e, 0x78, 0xf0, 0xb6, 0xae, - 0xcb, 0x2c, 0x84, 0xbe, 0x35, 0xc9, 0x41, 0xcd, 0x98, 0xd1, 0x18, 0x0f, - 0x0d, 0xd0, 0x7f, 0x93, 0xd1, 0xfb, 0xbb, 0xde, 0x1f, 0x05, 0xd1, 0x3d, - 0x1f, 0xc4, 0xfd, 0x5f, 0x2f, 0xf2, 0xad, 0x68, 0xfc, 0xba, 0x3f, 0xfd, - 0x8e, 0x75, 0x6f, 0x64, 0x00, 0x00, 0x00, 0x05, 0x7a, 0x7f, 0x70, 0xd9, - 0xcd, 0x8a, 0x9c, 0x65, 0xac, 0xbc, 0x05, 0xc7, 0xac, 0x85, 0x8d, 0x79, - 0x14, 0xe6, 0x67, 0x0c, 0xb0, 0xf0, 0xd9, 0xc6, 0xeb, 0xa5, 0x01, 0x43, - 0x7f, 0x0d, 0xee, 0xae, 0xd8, 0xfc, 0xad, 0x34, 0x08, 0xb2, 0x0e, 0x95, - 0x6f, 0x1b, 0x91, 0x24, 0x11, 0xff, 0x37, 0x10, 0xe1, 0xaf, 0x64, 0xd5, - 0x10, 0xa8, 0x7a, 0xcb, 0x24, 0xae, 0x2d, 0x26, 0x98, 0x4a, 0x4e, 0x92, - 0x54, 0x85, 0x59, 0xf2, 0xa3, 0x2d, 0x64, 0xc3, 0x39, 0xde, 0x0e, 0x75, - 0xb5, 0x2b, 0xf5, 0x83, 0x49, 0x73, 0x95, 0xff, 0x05, 0xf6, 0x87, 0xa3, - 0x5f, 0xd7, 0x23, 0x55, 0xf8, 0x97, 0xef, 0x68, 0x33, 0xf2, 0xee, 0x03, - 0x70, 0xb3, 0x88, 0xef, 0x94, 0x01, 0x27, 0x06, 0xfc, 0xbf, 0xaf, 0x5d, - 0x44, 0xe2, 0x35, 0xe5, 0x24, 0x45, 0xc1, 0x49, 0x71, 0xf0, 0xbc, 0x47, - 0x81, 0xcd, 0x3f, 0x67, 0x67, 0x38, 0x3b, 0xf3, 0x3b, 0xbe, 0xcb, 0x2f, - 0x50, 0xc8, 0xc3, 0x32, 0x75, 0x2a, 0x4f, 0x90, 0x9f, 0xf5, 0x2b, 0x38, - 0xab, 0xca, 0x70, 0xf2, 0x5d, 0x93, 0xab, 0xea, 0xe5, 0xa3, 0x55, 0x86, - 0x2b, 0x69, 0xf5, 0x24, 0xd2, 0xb2, 0x48, 0x03, 0xbb, 0x02, 0xb1, 0xad, - 0xcb, 0xa1, 0xe5, 0xac, 0x80, 0x05, 0x88, 0xb9, 0xd1, 0xaa, 0x4f, 0x97, - 0xa7, 0x0e, 0x43, 0x6b, 0xf4, 0x92, 0x5a, 0xcb, 0xf9, 0xf9, 0xe6, 0x59, - 0xf2, 0x7c, 0x9a, 0xd0, 0x8e, 0x79, 0x79, 0x60, 0xdd, 0xf3, 0x0a, 0xf3, - 0x1e, 0x77, 0x9b, 0xcf, 0x1d, 0xca, 0x0c, 0x4a, 0x73, 0xf3, 0x97, 0xb7, - 0x35, 0xef, 0x99, 0x89, 0x72, 0x9a, 0x18, 0x28, 0x47, 0x84, 0xf6, 0x89, - 0x73, 0x85, 0x78, 0x80, 0x1f, 0x91, 0xfb, 0x9b, 0x61, 0x68, 0xec, 0x17, - 0x54, 0x99, 0xb6, 0xeb, 0xfc, 0xb6, 0xde, 0x3f, 0x6f, 0x2d, 0x4a, 0x63, - 0x74, 0xbe, 0x45, 0xe2, 0x54, 0xbe, 0xeb, 0x6a, 0x62, 0x4a, 0x6e, 0x83, - 0x09, 0x30, 0x74, 0x1a, 0x60, 0x8a, 0x4b, 0xfa, 0xf5, 0x1b, 0x67, 0x38, - 0xf1, 0x66, 0x75, 0x9f, 0x61, 0xde, 0xe1, 0x50, 0x98, 0x62, 0x0a, 0xc1, - 0x69, 0x6b, 0x54, 0x38, 0x62, 0x96, 0x48, 0x67, 0xd5, 0x64, 0x28, 0x2d, - 0x42, 0x17, 0xe7, 0xc4, 0x36, 0x21, 0xce, 0x67, 0x90, 0x5d, 0x9e, 0x67, - 0x2d, 0x4c, 0x8f, 0x9d, 0xf9, 0x29, 0x52, 0x1f, 0xa3, 0x20, 0xde, 0x52, - 0x4d, 0xc2, 0x03, 0x83, 0x20, 0xfc, 0x59, 0x48, 0x9b, 0x15, 0xfd, 0x12, - 0x4c, 0xb3, 0x2f, 0x47, 0x0f, 0x2e, 0xc8, 0xda, 0xc4, 0x9a, 0xba, 0x1f, - 0x0c, 0xcc, 0x6f, 0x0d, 0x44, 0x21, 0x8f, 0x32, 0x23, 0x80, 0x35, 0xbb, - 0x4d, 0x8b, 0x3f, 0xab, 0x75, 0xa7, 0x55, 0x74, 0x05, 0x54, 0xdb, 0xc8, - 0x91, 0x06, 0xf5, 0xdc, 0xbd, 0x0d, 0xcc, 0x89, 0x06, 0xbc, 0xae, 0x40, - 0xbf, 0x6d, 0x45, 0xb2, 0x36, 0x6b, 0x88, 0xb7, 0xa4, 0xd9, 0xcd, 0x7f, - 0xfb, 0xd5, 0xbc, 0x4d, 0x67, 0xdc, 0xe4, 0x12, 0x46, 0x54, 0x7c, 0x53, - 0xd2, 0x40, 0xb2, 0x35, 0xe5, 0x2b, 0x35, 0xcf, 0xc1, 0xf9, 0xe0, 0x06, - 0x9f, 0x55, 0xd1, 0x2a, 0x5c, 0x01, 0x6e, 0xab, 0xfb, 0xeb, 0xbb, 0x9c, - 0xb0, 0x40, 0x1e, 0x24, 0x85, 0x5d, 0x95, 0xb3, 0xf5, 0x0c, 0xf2, 0xd6, - 0x07, 0x23, 0xb4, 0x5b, 0xe3, 0xc2, 0x93, 0x9c, 0xa2, 0xf9, 0x6d, 0xe2, - 0x0a, 0x1d, 0xeb, 0xdc, 0xb7, 0xbc, 0x04, 0xf5, 0xa9, 0xa9, 0xea, 0xf3, - 0x82, 0x53, 0x92, 0x79, 0x23, 0xcc, 0xc6, 0xab, 0x3e, 0x56, 0xfc, 0xad, - 0xf7, 0x4f, 0x10, 0xef, 0x62, 0xf2, 0x87, 0x38, 0x9a, 0x8d, 0x54, 0xb2, - 0x62, 0x55, 0xb2, 0x05, 0x0a, 0x0e, 0xc0, 0x15, 0x71, 0xda, 0x8b, 0x27, - 0x09, 0x0f, 0x2b, 0x5f, 0x3f, 0xdc, 0x08, 0x72, 0x94, 0x79, 0x98, 0x5e, - 0x5e, 0xb0, 0xef, 0xe7, 0x7b, 0x25, 0x1a, 0xc2, 0x1d, 0x1a, 0x54, 0x85, - 0x60, 0x05, 0xf5, 0x59, 0x01, 0xfd, 0x38, 0x10, 0x2b, 0x4d, 0x84, 0x8d, - 0x30, 0x4e, 0xa0, 0x7b, 0xd3, 0x99, 0xc8, 0xe4, 0x15, 0x2b, 0x7b, 0xfa, - 0x98, 0xb4, 0xd3, 0x2d, 0x96, 0x99, 0xc0, 0xb6, 0x44, 0x8f, 0xdd, 0x9a, - 0x69, 0x0f, 0x69, 0x6d, 0xe5, 0x76, 0x1d, 0x76, 0xe0, 0x4f, 0x5d, 0xf5, - 0x8a, 0xf1, 0x00, 0x30, 0xe3, 0x6a, 0xe3, 0x03, 0x3e, 0xe2, 0x8d, 0x3c, - 0x4e, 0x71, 0x33, 0x31, 0xf8, 0xc1, 0xa1, 0x17, 0xd5, 0xc9, 0x88, 0xfb, - 0xf8, 0x83, 0xe2, 0x8a, 0xbd, 0xba, 0x87, 0xe1, 0x5f, 0x70, 0x3e, 0xe2, - 0x4e, 0xd6, 0x1c, 0xc2, 0x3e, 0x4e, 0xe1, 0xf5, 0x42, 0x8a, 0x3d, 0xa5, - 0x9c, 0xca, 0xbf, 0x2c, 0xcc, 0xf3, 0x4b, 0x2f, 0x15, 0x8f, 0xa7, 0x2b, - 0x35, 0xe7, 0x84, 0x31, 0x46, 0x51, 0xcf, 0xc8, 0x5c, 0x5c, 0xf3, 0xc6, - 0x19, 0xf1, 0xd7, 0x42, 0x61, 0x42, 0xb3, 0x7d, 0x90, 0x0b, 0x1d, 0xfd, - 0x52, 0xa3, 0x81, 0xa3, 0xf2, 0xe9, 0x36, 0x20, 0xdd, 0xe0, 0x91, 0xcd, - 0x8d, 0x38, 0x41, 0xc7, 0xe5, 0xfb, 0xad, 0xe4, 0xf0, 0x64, 0x19, 0xca, - 0x05, 0x71, 0xd8, 0xfc, 0x0e, 0xd1, 0xfa, 0x13, 0x58, 0x48, 0x2f, 0x14, - 0x31, 0xa5, 0xf0, 0xbc, 0x07, 0xe6, 0xb4, 0xc4, 0x85, 0x11, 0x5e, 0xb8, - 0xc4, 0x68, 0xfa, 0x29, 0x91, 0x63, 0x77, 0x83, 0x4f, 0xe8, 0x61, 0x4c, - 0xcb, 0x49, 0xda, 0xf9, 0x7f, 0xfd, 0x2f, 0x11, 0xb0, 0xc0, 0xfd, 0x74, - 0x5b, 0xa1, 0x07, 0x97, 0xd2, 0xa3, 0x99, 0xc2, 0x86, 0xee, 0xc9, 0x39, - 0x6a, 0xaa, 0x38, 0x3b, 0xd6, 0xa1, 0xba, 0xe8, 0x40, 0x96, 0x85, 0x8c, - 0x26, 0xf6, 0x8d, 0xbb, 0x91, 0xde, 0x9a, 0x08, 0xf9, 0x77, 0xba, 0x7a, - 0x55, 0xc8, 0xcf, 0xc6, 0x43, 0xf0, 0x00, 0x96, 0xd8, 0xb5, 0x1f, 0x8e, - 0xc2, 0x52, 0xd1, 0x2e, 0xe4, 0x0e, 0x4b, 0x07, 0xfb, 0xfc, 0x3e, 0xa1, - 0x6e, 0xa0, 0xa4, 0xc4, 0x03, 0xb6, 0x1b, 0x04, 0x72, 0x10, 0x48, 0x02, - 0xad, 0x5e, 0xa3, 0xfc, 0x0e, 0xb7, 0x44, 0x49, 0x3e, 0x2f, 0xac, 0xfe, - 0x9c, 0xcc, 0x84, 0x16, 0xd1, 0xf0, 0x5a, 0xa4, 0x9a, 0x4f, 0xf4, 0x0c, - 0xbf, 0xae, 0x7a, 0x3a, 0x5b, 0x39, 0x05, 0x2b, 0x00, 0x55, 0xfe, 0x8c, - 0x1a, 0x43, 0x78, 0x41, 0x42, 0x65, 0x80, 0x50, 0x76, 0xe5, 0xb7, 0x26, - 0x7b, 0x7e, 0xad, 0xe7, 0xd2, 0x37, 0xa0, 0xd2, 0xc7, 0x3f, 0xc4, 0x1d, - 0x4d, 0xdb, 0x7e, 0xeb, 0xff, 0xea, 0xeb, 0x41, 0xdb, 0x55, 0x11, 0xf7, - 0x6b, 0x38, 0xd0, 0xd7, 0xac, 0xee, 0x82, 0x00, 0x99, 0x69, 0x2a, 0xd3, - 0x74, 0x3d, 0x2f, 0x56, 0xe0, 0x32, 0xf0, 0xd7, 0xdc, 0x72, 0x2e, 0xd8, - 0x45, 0xf2, 0xd1, 0x9e, 0xab, 0xfb, 0xff, 0x0b, 0x16, 0x4c, 0x94, 0xc5, - 0x43, 0xd8, 0x44, 0xe7, 0x3c, 0x4a, 0x18, 0xd4, 0xf8, 0x2b, 0xa0, 0xe8, - 0x0e, 0x08, 0x1b, 0x58, 0x75, 0x71, 0xbb, 0xed, 0x1e, 0x91, 0xfa, 0x83, - 0x0f, 0xdf, 0x5e, 0xb2, 0x55, 0x16, 0x21, 0x67, 0xe1, 0xe1, 0xa8, 0xa8, - 0x93, 0x62, 0x4d, 0x82, 0xca, 0x7d, 0x04, 0x09, 0xe4, 0x7b, 0x78, 0x11, - 0xa9, 0x30, 0xcd, 0xfb, 0x62, 0xee, 0xbe, 0x47, 0x05, 0x13, 0x30, 0xe8, - 0xa1, 0x47, 0x11, 0xd7, 0x75, 0x8b, 0x1b, 0x15, 0xcc, 0xd5, 0x5a, 0xa5, - 0xb1, 0x05, 0x12, 0xc4, 0x20, 0xfe, 0x46, 0x17, 0x6a, 0x10, 0x8c, 0xd9, - 0xb4, 0x05, 0x6e, 0x1b, 0x16, 0xf5, 0xdd, 0x0e, 0x43, 0xd6, 0x54, 0x36, - 0x2b, 0x5d, 0x9c, 0x72, 0xca, 0xb7, 0xdb, 0xaa, 0xca, 0x18, 0x86, 0x57, - 0x11, 0x1a, 0x7d, 0xbb, 0x5d, 0xdf, 0x0b, 0xcf, 0x3d, 0x0e, 0x02, 0xd6, - 0x8c, 0x9f, 0xe6, 0x5c, 0xe3, 0xd3, 0x01, 0x12, 0x5c, 0x40, 0xe5, 0xa8, - 0x24, 0x40, 0xd7, 0xea, 0x33, 0x22, 0x23, 0xf1, 0xdc, 0x2e, 0x55, 0x6a, - 0x05, 0xbd, 0xc5, 0x90, 0xd0, 0xd9, 0x74, 0xff, 0x98, 0xa4, 0x59, 0x38, - 0x2b, 0x9a, 0xe4, 0x68, 0xf2, 0x7f, 0xc0, 0x53, 0x92, 0x0e, 0x49, 0x51, - 0x9f, 0x8b, 0x68, 0xe9, 0x42, 0x0f, 0x08, 0xb3, 0xb4, 0x8d, 0x3a, 0x7f, - 0x48, 0xaf, 0x6f, 0x31, 0x9c, 0x03, 0x3b, 0xe9, 0xab, 0x84, 0xf0, 0x5a, - 0x2a, 0x6d, 0xa7, 0x38, 0x91, 0x0e, 0x90, 0x35, 0x49, 0xc2, 0xd5, 0xb9, - 0xd2, 0x54, 0x14, 0x1b, 0x11, 0xe7, 0xe9, 0x4a, 0xc1, 0x6c, 0x4b, 0x6d, - 0x60, 0xe3, 0xa4, 0x0a, 0x1e, 0x3e, 0x41, 0x96, 0xae, 0x35, 0xef, 0xe1, - 0xca, 0x88, 0x4a, 0x07, 0xc2, 0xcb, 0xee, 0x2a, 0x6f, 0x08, 0x95, 0x3d, - 0x64, 0x76, 0xad, 0x31, 0xe1, 0xfb, 0x82, 0x2f, 0xbc, 0x59, 0x1c, 0x1f, - 0xcd, 0xf0, 0xa0, 0x96, 0x61, 0xfb, 0xde, 0xa2, 0x99, 0xe1, 0x90, 0xcc, - 0x43, 0x25, 0x4c, 0x8d, 0x9d, 0x5b, 0xe7, 0x34, 0xdb, 0xe9, 0x6a, 0x08, - 0x6f, 0x40, 0x78, 0x24, 0x25, 0x90, 0xd8, 0x7e, 0x76, 0x39, 0x9d, 0x00, - 0x86, 0x7c, 0xf4, 0xa2, 0xfa, 0x3b, 0x2d, 0x0e, 0xee, 0x25, 0x2b, 0x12, - 0x36, 0x10, 0x67, 0x84, 0xe7, 0xa9, 0xc4, 0xb0, 0xfb, 0x9e, 0x6c, 0xa4, - 0x53, 0x77, 0x68, 0xfc, 0x3b, 0xd5, 0x77, 0x65, 0x3c, 0xb8, 0x56, 0x9a, - 0x2c, 0x42, 0x64, 0x98, 0x53, 0x8f, 0x1d, 0x8c, 0xf7, 0x4c, 0xc5, 0xbe, - 0xad, 0xe9, 0x40, 0x0d, 0x4a, 0xd4, 0xad, 0x5e, 0xd9, 0x5e, 0x71, 0x9c, - 0xfb, 0x38, 0x73, 0x93, 0xb4, 0xa6, 0x1c, 0xa5, 0x48, 0x49, 0xb3, 0xa2, - 0x33, 0xf7, 0x54, 0x15, 0xfa, 0xc5, 0x2f, 0xda, 0x20, 0xaa, 0x95, 0x67, - 0xee, 0x47, 0x96, 0x6f, 0xce, 0x04, 0x9b, 0x75, 0xff, 0xfc, 0x3e, 0x96, - 0xc8, 0x56, 0x6d, 0x90, 0x04, 0xc0, 0x0e, 0x9b, 0x9b, 0x66, 0xff, 0x30, - 0xbc, 0x6f, 0xd1, 0x80, 0x34, 0xe7, 0x22, 0xfc, 0x2b, 0x9a, 0x36, 0x4b, - 0xcf, 0xf0, 0x3c, 0xa3, 0xd5, 0x7a, 0x3b, 0x91, 0xef, 0xcd, 0xd7, 0x25, - 0xd9, 0xa4, 0x43, 0xbc, 0x09, 0xb9, 0xf5, 0xc2, 0x35, 0xbd, 0x6c, 0x2d, - 0x04, 0x7a, 0xa0, 0xf7, 0xd3, 0xf4, 0x90, 0x2d, 0x53, 0xb4, 0x9e, 0x56, - 0xc6, 0x5e, 0x52, 0x36, 0x22, 0x7c, 0xac, 0xa3, 0xb7, 0xef, 0x59, 0xde, - 0x12, 0x83, 0x72, 0xba, 0x3d, 0x47, 0xd7, 0x9a, 0xd3, 0x03, 0x43, 0x01, - 0xed, 0x79, 0x60, 0x96, 0x4e, 0x34, 0xd9, 0x98, 0xdb, 0x06, 0xb9, 0x6f, - 0xc6, 0xca, 0x63, 0x5b, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x02, 0x1e, 0x7f, - 0xa2, 0x79, 0x45, 0x83, 0x11, 0xcb, 0xe3, 0x7a, 0x18, 0x46, 0x8d, 0xc0, - 0xce, 0xc5, 0x1c, 0x78, 0x39, 0xdb, 0x78, 0xff, 0x7b, 0xbf, 0xac, 0x52, - 0xc8, 0x56, 0xe6, 0x20, 0x76, 0xb2, 0xd6, 0x3f, 0x46, 0x0a, 0x67, 0x1d, - 0xc5, 0xb3, 0xd0, 0xd3, 0x16, 0xee, 0x18, 0x02, 0xdb, 0xb4, 0x11, 0xa7, - 0x2d, 0x12, 0x59, 0xab, 0xa8, 0xab, 0x3c, 0xb0, 0xe6, 0x2d, 0xed, 0x1b, - 0xe0, 0x84, 0xee, 0xd8, 0xdf, 0xf8, 0x5a, 0x0b, 0x58, 0x29, 0x1e, 0x24, - 0x0e, 0x0f, 0x1f, 0x71, 0x4b, 0x72, 0x3d, 0x99, 0x3f, 0x14, 0x92, 0xf2, - 0xb2, 0x7b, 0xc6, 0xa6, 0x69, 0x5c, 0xb6, 0x02, 0x1f, 0x19, 0x66, 0x91, - 0x6b, 0x7f, 0x56, 0x65, 0x67, 0x70, 0x43, 0xd4, 0x75, 0x8d, 0x77, 0x49, - 0xef, 0x24, 0xee, 0xb8, 0xd7, 0x28, 0x5c, 0x31, 0xdd, 0x73, 0x0d, 0x92, - 0x76, 0xe8, 0x12, 0x55, 0xfa, 0x5f, 0xc0, 0xa2, 0x3f, 0x95, 0xa2, 0x08, - 0xf8, 0x1b, 0xc0, 0x11, 0x31, 0xf1, 0x3e, 0x64, 0x7d, 0x40, 0x7c, 0xcb, - 0x59, 0xb6, 0x98, 0x73, 0x42, 0xdb, 0x08, 0xf9, 0xfe, 0xce, 0x6b, 0xa9, - 0x31, 0xec, 0xed, 0x8d, 0xc1, 0xd5, 0xb3, 0x9e, 0xcd, 0xff, 0xa7, 0x09, - 0xd8, 0x6f, 0x2a, 0x51, 0x6c, 0xa1, 0x1e, 0x04, 0x4c, 0x8a, 0x90, 0x11, - 0x29, 0xd0, 0xa1, 0xb4, 0xdb, 0x1d, 0xf3, 0xea, 0xe9, 0x86, 0xd7, 0xa5, - 0x65, 0xb8, 0x34, 0x8a, 0x1a, 0xb7, 0x37, 0xe2, 0xa2, 0x35, 0x50, 0x97, - 0x61, 0xc7, 0x2c, 0xb9, 0x62, 0x6f, 0x40, 0x3f, 0x53, 0xe2, 0x30, 0x9e, - 0x99, 0xc7, 0xd5, 0xa1, 0x79, 0xbf, 0xc3, 0x1c, 0x37, 0x64, 0x73, 0x19, - 0xc7, 0x2f, 0xab, 0x07, 0x9f, 0x4d, 0x90, 0xf8, 0x17, 0x38, 0x89, 0xa4, - 0x22, 0x60, 0x05, 0x25, 0xe1, 0x57, 0x95, 0xa9, 0x86, 0x7d, 0xa0, 0x7e, - 0x7d, 0x7f, 0x49, 0xe4, 0xd0, 0x25, 0x04, 0x2b, 0x7a, 0x60, 0xff, 0x42, - 0xbe, 0x10, 0x88, 0x78, 0x45, 0xd8, 0xb4, 0xf9, 0x82, 0x2f, 0x7d, 0xa7, - 0x30, 0xf0, 0xf9, 0xbc, 0x5d, 0x86, 0x57, 0x04, 0x55, 0x36, 0xbf, 0x94, - 0x07, 0xa1, 0x4f, 0x0a, 0xed, 0xc9, 0x6b, 0x32, 0xc1, 0x5c, 0x6b, 0x53, - 0x7c, 0x8c, 0x5c, 0x33, 0xc4, 0x9b, 0x58, 0x15, 0x1b, 0x85, 0x4d, 0x96, - 0x73, 0xc4, 0xb2, 0xec, 0x34, 0xea, 0x1b, 0x61, 0x3f, 0x78, 0xe3, 0xc1, - 0x99, 0x64, 0xf1, 0x06, 0x33, 0x5d, 0x58, 0xe8, 0xde, 0x74, 0xba, 0xc5, - 0x70, 0x07, 0xe0, 0xb0, 0xc5, 0x40, 0xc2, 0xe6, 0xcf, 0x5c, 0xcc, 0x06, - 0xbe, 0x3c, 0xe1, 0x6c, 0x5b, 0xf3, 0xc5, 0x5f, 0x77, 0x25, 0x70, 0x71, - 0x25, 0x22, 0xb4, 0x94, 0xf8, 0xc1, 0x23, 0x9d, 0xc7, 0x70, 0xd4, 0xbd, - 0x19, 0x54, 0xf9, 0x22, 0xd0, 0xee, 0xed, 0x1c, 0xec, 0x47, 0x25, 0xfe, - 0x02, 0x00, 0x46, 0x5e, 0x9f, 0xaf, 0x33, 0x9d, 0x94, 0x5c, 0xbb, 0x3e, - 0x56, 0xf8, 0xca, 0x73, 0xcb, 0x25, 0x98, 0xfe, 0xfe, 0x6c, 0x63, 0xf7, - 0x7f, 0x2e, 0xc2, 0x3c, 0x87, 0x13, 0x97, 0xdb, 0xd2, 0x50, 0xef, 0xfd, - 0xf6, 0x92, 0xde, 0x38, 0x9a, 0x06, 0x5c, 0xfe, 0xb3, 0x83, 0xf8, 0xbe, - 0x92, 0x77, 0x58, 0xef, 0xf7, 0x31, 0x25, 0xfa, 0x61, 0x24, 0x9b, 0x2c, - 0xaf, 0xae, 0x4e, 0xe9, 0xe9, 0xb5, 0x13, 0x11, 0x83, 0xfa, 0xe7, 0xa3, - 0x12, 0xa8, 0x9b, 0xe2, 0xe9, 0xfb, 0x18, 0xd8, 0x75, 0x94, 0x3a, 0xe9, - 0x3a, 0xb4, 0x73, 0x94, 0xf2, 0xda, 0xcb, 0xe0, 0x22, 0xf2, 0x7f, 0xe6, - 0x48, 0x60, 0x2a, 0xf9, 0xf1, 0xe0, 0xa0, 0x31, 0x89, 0xc6, 0x9e, 0x7f, - 0x38, 0xd6, 0xb5, 0x3e, 0x67, 0x47, 0xb2, 0xc1, 0xa2, 0xcf, 0xf4, 0x5d, - 0x33, 0x2b, 0x3b, 0x87, 0xd0, 0x3c, 0x32, 0xc6, 0xa5, 0xae, 0xda, 0xab, - 0x4e, 0x0c, 0x04, 0xf9, 0x33, 0x04, 0x9e, 0xfd, 0xb6, 0x95, 0x54, 0x02, - 0x3d, 0x77, 0x68, 0x9e, 0x02, 0x23, 0x7f, 0x62, 0x65, 0x07, 0xf6, 0xc7, - 0x80, 0x00, 0x00, 0x01, 0x4e, 0x7f, 0xa4, 0x01, 0xde, 0x65, 0xb9, 0x4c, - 0xc8, 0x2b, 0xa4, 0xd3, 0x7c, 0xf2, 0x87, 0x6d, 0x11, 0x12, 0x1c, 0x3f, - 0x22, 0xca, 0x14, 0xca, 0x91, 0x51, 0x22, 0x02, 0x77, 0xd7, 0x75, 0xdf, - 0x8a, 0x8d, 0x57, 0x5d, 0xd1, 0xd1, 0x87, 0xd3, 0x60, 0x3e, 0x51, 0xa2, - 0xe9, 0x2b, 0x1e, 0x9a, 0xbd, 0xa9, 0x9d, 0xf7, 0x74, 0x61, 0xf8, 0x6a, - 0xf1, 0xd0, 0x6f, 0xfa, 0x3d, 0xd0, 0x80, 0xa2, 0x00, 0x75, 0xa5, 0x41, - 0x14, 0xf2, 0x84, 0x34, 0x96, 0xe2, 0x1f, 0xea, 0x60, 0xf6, 0x1b, 0x30, - 0x7e, 0x8b, 0xee, 0xd1, 0xc5, 0x98, 0xb6, 0x8e, 0xaa, 0xd5, 0xb3, 0x45, - 0x27, 0x51, 0x1d, 0x23, 0x44, 0xc3, 0x0b, 0x86, 0x97, 0xf4, 0xa8, 0x9f, - 0xf2, 0x74, 0xaf, 0xb0, 0x58, 0x6b, 0x39, 0x98, 0xe5, 0xe1, 0xf5, 0x61, - 0xb4, 0x56, 0xc0, 0x26, 0xdc, 0xe2, 0x09, 0xdc, 0x16, 0xd9, 0xec, 0x81, - 0x3e, 0x8d, 0x3c, 0x79, 0x65, 0x9d, 0x56, 0x18, 0x6a, 0x30, 0x53, 0x60, - 0x0d, 0x3c, 0x06, 0x2d, 0xb6, 0x9a, 0x18, 0x0e, 0x81, 0xde, 0x2e, 0x02, - 0xba, 0x06, 0x5e, 0xe6, 0x9b, 0x42, 0xa8, 0x6c, 0x48, 0xd3, 0xcd, 0x95, - 0xb0, 0x9a, 0xc9, 0xa2, 0x6a, 0xbe, 0x45, 0xf9, 0x39, 0xb6, 0x5e, 0x64, - 0x7c, 0x40, 0x7d, 0x36, 0xa2, 0x8d, 0x16, 0xe2, 0x2d, 0x79, 0xda, 0x83, - 0x5a, 0xfa, 0x53, 0x00, 0x14, 0x36, 0xc3, 0xd8, 0x0b, 0x4f, 0xfa, 0x69, - 0x41, 0x5f, 0x7c, 0xf6, 0xd1, 0x10, 0x1b, 0xbd, 0x2e, 0x17, 0xad, 0x51, - 0x87, 0xaf, 0xe1, 0x98, 0xd6, 0x70, 0x76, 0x43, 0x34, 0x68, 0xae, 0xf9, - 0xe4, 0x12, 0x48, 0xf1, 0x0f, 0xe5, 0x50, 0x47, 0x81, 0x9d, 0xa6, 0xab, - 0x4a, 0xa3, 0x29, 0xb3, 0x55, 0x81, 0xf3, 0x34, 0xdf, 0x79, 0x56, 0x71, - 0x13, 0xd0, 0x18, 0xaf, 0xde, 0x5d, 0x32, 0xdd, 0x14, 0xc2, 0x5a, 0x4f, - 0xcf, 0x81, 0x59, 0x31, 0x17, 0xbf, 0xae, 0x77, 0x5e, 0x62, 0x57, 0x03, - 0xb2, 0x8c, 0xfd, 0xdf, 0x61, 0xe5, 0x5d, 0xc6, 0x95, 0xaa, 0x55, 0xbb, - 0x0d, 0x93, 0x7e, 0xb9, 0x55, 0xf1, 0x01, 0xeb, 0xa9, 0xb6, 0xdb, 0x78, - 0xfe, 0xbf, 0x61, 0xf6, 0xbd, 0x86, 0x52, 0x91, 0xa5, 0x51, 0xf4, 0xbd, - 0x96, 0x63, 0x9c, 0x08, 0x57, 0x0f, 0xcd, 0x13, 0x69, 0xa5, 0xa3, 0xd1, - 0xee, 0x2d, 0xa9, 0xe5, 0xc0, 0xd1, 0x3b, 0x5d, 0x26, 0x16, 0x75, 0x10, - 0x70, 0x08, 0x00, 0x7f, 0xd8, 0x34, 0x3a, 0x8c, 0xb2, 0x4a, 0x41, 0xaf, - 0x0f, 0x8c, 0x36, 0xa5, 0x47, 0x46, 0x68, 0x6b, 0x7b, 0x11, 0x71, 0xb1, - 0x9c, 0xd7, 0xa0, 0x83, 0x48, 0x02, 0x5a, 0xcc, 0x32, 0x6e, 0x38, 0x5a, - 0x2c, 0x26, 0xfb, 0xe7, 0x3d, 0xb5, 0x64, 0x81, 0xfa, 0x91, 0x1e, 0xfd, - 0x77, 0x7e, 0xe1, 0x9e, 0xab, 0x55, 0x44, 0x76, 0x22, 0x95, 0xff, 0xb3, - 0xa5, 0x67, 0xbd, 0xf5, 0x4d, 0x84, 0x34, 0xc2, 0x7b, 0xe6, 0x6f, 0xbf, - 0x55, 0x52, 0x27, 0x31, 0x8e, 0xa3, 0xf7, 0xad, 0xde, 0xb7, 0x7b, 0x77, - 0x06, 0xb2, 0xc8, 0xec, 0xf4, 0xd6, 0xdb, 0xad, 0xdf, 0x03, 0x9f, 0x09, - 0xc8, 0x4a, 0xaf, 0x1d, 0x8e, 0x01, 0x04, 0x8d, 0x68, 0xf2, 0xa8, 0xb5, - 0xb4, 0x33, 0xa1, 0xb0, 0x6a, 0x5a, 0x12, 0x7e, 0xfe, 0xe2, 0x7a, 0xd6, - 0x1c, 0x30, 0x81, 0xb7, 0x84, 0x8a, 0x5c, 0xbd, 0x63, 0x31, 0x7b, 0x50, - 0x8c, 0xf1, 0x45, 0x7f, 0x6e, 0xb7, 0x7f, 0x26, 0x0e, 0xdb, 0xa7, 0x42, - 0x7b, 0x0d, 0x06, 0x9f, 0x81, 0x79, 0x39, 0x38, 0x80, 0xd2, 0xe8, 0xe6, - 0xef, 0xdf, 0x39, 0x1b, 0x0d, 0x5d, 0x26, 0xd9, 0x71, 0x14, 0xb0, 0x9f, - 0xdc, 0x17, 0xa2, 0xa0, 0x8a, 0x70, 0x67, 0x28, 0x0e, 0x65, 0x6f, 0x0a, - 0x04, 0x4d, 0x69, 0xbb, 0x45, 0xf7, 0xcc, 0x7a, 0xc7, 0xb3, 0x38, 0x8c, - 0x0b, 0xab, 0x46, 0xc7, 0x4e, 0x62, 0x06, 0x65, 0x85, 0x06, 0xe8, 0x87, - 0x28, 0xe1, 0x99, 0x3d, 0x44, 0xc8, 0xcd, 0x05, 0xef, 0xc9, 0xa9, 0x9f, - 0x6d, 0xc9, 0x17, 0x2f, 0x9a, 0xa8, 0xb1, 0x78, 0x41, 0xf1, 0x09, 0x7a, - 0xe3, 0xd9, 0xc5, 0x3e, 0xf8, 0x18, 0xb3, 0xfb, 0x70, 0xef, 0x31, 0x01, - 0x0d, 0xc7, 0xd1, 0x28, 0x7d, 0xd2, 0x74, 0xe8, 0x50, 0x0c, 0x21, 0x3c, - 0x77, 0x3c, 0xa8, 0xec, 0x7f, 0x6d, 0x95, 0xd5, 0x18, 0x26, 0xfc, 0xe1, - 0x67, 0xa6, 0xb3, 0xe6, 0x27, 0x4b, 0x6a, 0x68, 0x46, 0x19, 0x4b, 0xa6, - 0xa4, 0x69, 0xa9, 0x51, 0x40, 0x44, 0x37, 0xc6, 0xd5, 0x47, 0x0e, 0xdc, - 0xb3, 0x27, 0x36, 0x75, 0x28, 0x66, 0x70, 0xc6, 0x41, 0x69, 0xd4, 0xa8, - 0xea, 0x97, 0x1b, 0x1c, 0xb2, 0xf3, 0x57, 0x78, 0x62, 0xfc, 0xc6, 0xad, - 0x02, 0xbe, 0x1a, 0xa0, 0x6c, 0x29, 0xd1, 0x40, 0x83, 0xa1, 0x39, 0x5b, - 0x21, 0x6d, 0xb9, 0x14, 0xd2, 0x53, 0xb6, 0x56, 0x41, 0x7d, 0x41, 0x21, - 0x38, 0x10, 0x4d, 0x28, 0x5f, 0xb6, 0xa0, 0xb4, 0x76, 0xcd, 0xdb, 0x6f, - 0xac, 0xfd, 0x7a, 0x29, 0x97, 0xe5, 0x14, 0x52, 0xc4, 0xc0, 0x97, 0x8d, - 0x81, 0xf3, 0xa6, 0x0e, 0x86, 0x83, 0xab, 0x04, 0x90, 0xc5, 0xfc, 0xd9, - 0xae, 0x00, 0xb7, 0xa3, 0x61, 0xd0, 0x29, 0x57, 0x56, 0xbf, 0xa7, 0xf9, - 0x8d, 0x7e, 0xc4, 0xb0, 0x64, 0xf4, 0x01, 0xf4, 0x6c, 0x27, 0xdb, 0x27, - 0x08, 0x52, 0xed, 0x44, 0xc7, 0x54, 0xc9, 0xaa, 0xbc, 0x16, 0x8f, 0xee, - 0x89, 0x17, 0xee, 0x70, 0x75, 0xaa, 0xa9, 0xb5, 0x62, 0x7f, 0x50, 0x35, - 0xc4, 0xae, 0xa3, 0x37, 0x6e, 0x48, 0x98, 0xa9, 0x89, 0x58, 0x4a, 0xcf, - 0x39, 0xad, 0x44, 0xbd, 0x71, 0x23, 0xe9, 0x0d, 0xc7, 0xbc, 0x55, 0xca, - 0x92, 0xd6, 0xaf, 0x4a, 0x47, 0x54, 0xd2, 0x76, 0xe2, 0x36, 0x6b, 0xb7, - 0x89, 0x2d, 0x5b, 0x55, 0x5c, 0xd5, 0xdf, 0xf0, 0xcd, 0xdf, 0x2f, 0xf6, - 0xab, 0xfa, 0x3f, 0x52, 0xc3, 0xa2, 0x91, 0x6b, 0x6d, 0xed, 0x30, 0x64, - 0xe7, 0x2e, 0x28, 0x8e, 0xff, 0xd0, 0x83, 0x88, 0x33, 0x4f, 0x51, 0x1a, - 0x9f, 0x1f, 0xa5, 0xd7, 0x05, 0xca, 0x43, 0x14, 0xde, 0xf7, 0x0c, 0x7d, - 0x50, 0x13, 0xd5, 0x42, 0x37, 0x1f, 0x92, 0xa5, 0x60, 0xb2, 0x5f, 0x06, - 0xe4, 0x55, 0xdb, 0x54, 0x63, 0xe2, 0xb1, 0x34, 0x89, 0xe5, 0xda, 0xae, - 0x95, 0x08, 0x87, 0xf1, 0xe0, 0x14, 0x7c, 0x28, 0x19, 0x8a, 0xce, 0xd2, - 0x18, 0xef, 0x3d, 0x95, 0x45, 0x17, 0xd1, 0xb3, 0x5c, 0x05, 0x74, 0x55, - 0x0d, 0x2a, 0xaa, 0x9c, 0x75, 0xab, 0xc8, 0xb8, 0x46, 0x7c, 0x2f, 0xec, - 0x36, 0x2d, 0xb5, 0xd1, 0xa2, 0x5e, 0xe7, 0xc9, 0xe5, 0xfe, 0x05, 0x00, - 0xba, 0x7f, 0xbc, 0x3a, 0x2b, 0x46, 0xb0, 0xa1, 0x15, 0x39, 0x45, 0xab, - 0x63, 0x42, 0x63, 0xd7, 0x5e, 0x11, 0xf2, 0xb0, 0xe6, 0x04, 0x7f, 0x52, - 0xa2, 0x43, 0xad, 0x5c, 0x3a, 0x60, 0xbf, 0x15, 0xe5, 0xd1, 0xb9, 0x97, - 0xf6, 0xf7, 0xf9, 0xd1, 0xf5, 0x43, 0xa4, 0x7d, 0x85, 0x2e, 0xad, 0x4e, - 0x16, 0x5f, 0xb4, 0x63, 0x44, 0x03, 0xe3, 0xcc, 0x8a, 0x4a, 0x39, 0x0e, - 0x61, 0x72, 0xef, 0xd2, 0x87, 0x7a, 0x2a, 0x59, 0x6a, 0xc1, 0x31, 0x96, - 0x1d, 0x70, 0xbb, 0x85, 0xe3, 0xb7, 0xb7, 0x61, 0x17, 0xc5, 0x43, 0x9b, - 0x7c, 0x79, 0x8f, 0x20, 0x12, 0x20, 0x28, 0x39, 0x61, 0x87, 0xfe, 0x71, - 0x08, 0xb1, 0x9a, 0x22, 0xdc, 0xa2, 0x90, 0x26, 0x80, 0x31, 0x36, 0xda, - 0xf3, 0x6a, 0xba, 0xac, 0x6a, 0x25, 0x8e, 0x77, 0xa2, 0x7a, 0x5b, 0xdf, - 0xf3, 0x11, 0x33, 0x8d, 0xe2, 0x00, 0xcc, 0xeb, 0x7f, 0x48, 0x94, 0x59, - 0xa7, 0xce, 0x97, 0x01, 0xb0, 0x53, 0x62, 0x8a, 0x82, 0x61, 0xd8, 0x62, - 0xfd, 0x80, 0x96, 0x0f, 0x34, 0x48, 0xe6, 0x04, 0xa3, 0x88, 0x36, 0x76, - 0xee, 0xe5, 0x9e, 0xec, 0xb4, 0x33, 0x96, 0xcc, 0xa3, 0x33, 0x15, 0x00, - 0x63, 0x67, 0x9e, 0x3c, 0x15, 0xe4, 0x5c, 0x58, 0xcd, 0xc6, 0x69, 0x30, - 0x85, 0x86, 0x32, 0x68, 0x09, 0x29, 0x6d, 0xec, 0xdd, 0x59, 0x46, 0xe0, - 0x6b, 0x86, 0x6a, 0x56, 0x28, 0x99, 0xab, 0xfc, 0xb9, 0x8f, 0x21, 0xc8, - 0x8f, 0xf2, 0xec, 0x33, 0x1b, 0xce, 0x4a, 0x33, 0xd5, 0x12, 0x5e, 0x9f, - 0x01, 0xde, 0x26, 0x49, 0x4e, 0xb1, 0xe3, 0x54, 0xdb, 0x13, 0x6f, 0x1b, - 0x23, 0x22, 0x4c, 0xd0, 0xd8, 0xe8, 0x13, 0xfb, 0x7e, 0xae, 0x49, 0x77, - 0xb4, 0x0d, 0x42, 0x59, 0xfa, 0x29, 0x7e, 0x13, 0xdb, 0x5e, 0xac, 0x11, - 0xa5, 0xfd, 0x91, 0x06, 0x0b, 0xbf, 0xe8, 0x13, 0x07, 0x55, 0xa4, 0x7c, - 0x48, 0xc4, 0x71, 0xe7, 0x13, 0x64, 0x93, 0xba, 0x39, 0xb4, 0xca, 0x97, - 0x10, 0x76, 0x99, 0x6b, 0x78, 0x8b, 0x23, 0x49, 0x03, 0xda, 0x12, 0xd5, - 0x9c, 0xcb, 0x19, 0x86, 0x1a, 0xb2, 0x3b, 0x80, 0x47, 0xa7, 0x50, 0x19, - 0x73, 0xfe, 0x06, 0x0c, 0xec, 0x99, 0xc3, 0x9a, 0x0b, 0x61, 0x9c, 0x16, - 0x8e, 0x83, 0xca, 0xa3, 0xc9, 0x7a, 0xd3, 0xad, 0x2a, 0xac, 0xb6, 0x5a, - 0x34, 0xf5, 0x9b, 0xb2, 0xfe, 0x3b, 0x2d, 0x7d, 0x6f, 0xd4, 0xa4, 0xd8, - 0xf2, 0xc0, 0xea, 0xef, 0x70, 0x96, 0x68, 0xfa, 0x6f, 0x77, 0xdc, 0xc5, - 0xfc, 0xb5, 0x07, 0x21, 0x18, 0xf5, 0xeb, 0x03, 0xb3, 0xa5, 0x00, 0xa9, - 0xdf, 0x58, 0xa2, 0xb0, 0xad, 0x0c, 0xc2, 0x5a, 0x0b, 0x87, 0x14, 0x6c, - 0x2e, 0xb5, 0x2b, 0xc6, 0xcc, 0xc8, 0x55, 0xbd, 0x63, 0xaa, 0xae, 0x15, - 0x2d, 0x31, 0x85, 0x89, 0xee, 0x1a, 0x82, 0xe0, 0x6e, 0x27, 0xa3, 0x46, - 0x50, 0x93, 0x1a, 0x90, 0xf6, 0x72, 0xb8, 0x34, 0x97, 0xfb, 0x31, 0x1f, - 0x47, 0x62, 0xcd, 0x2a, 0x51, 0x81, 0xc8, 0x77, 0x1c, 0xf5, 0xac, 0xe9, - 0x6a, 0x82, 0x00, 0x5a, 0x3d, 0xa0, 0xe1, 0xa6, 0x72, 0x1b, 0x36, 0x33, - 0x11, 0xd1, 0x72, 0xe4, 0x6d, 0x89, 0x8d, 0xc3, 0x46, 0x88, 0xbd, 0xf7, - 0x78, 0x32, 0x07, 0xca, 0xb4, 0x2b, 0x4c, 0x27, 0xf7, 0x2d, 0x64, 0x2d, - 0xbf, 0xc7, 0x8a, 0x3f, 0xed, 0x3a, 0x15, 0x0e, 0x61, 0x08, 0x4e, 0xca, - 0x76, 0x17, 0xaa, 0x4e, 0x45, 0x08, 0xce, 0xcc, 0x78, 0xe3, 0x5e, 0xce, - 0x90, 0x4d, 0xc5, 0x1f, 0xe4, 0x16, 0x67, 0xed, 0x2c, 0xf3, 0xf1, 0x5e, - 0xce, 0xeb, 0x29, 0x92, 0xc2, 0x1c, 0xe3, 0x7c, 0x4e, 0x7d, 0xe9, 0x6f, - 0xad, 0xfa, 0x30, 0x35, 0x86, 0x11, 0xab, 0x0b, 0xa8, 0xad, 0xa3, 0x88, - 0x47, 0xf5, 0x36, 0x5b, 0xbb, 0xa7, 0x5f, 0x88, 0xf6, 0xd9, 0x6b, 0x74, - 0xd6, 0xe9, 0x6c, 0x07, 0x64, 0x6f, 0xd5, 0x2f, 0xa3, 0xe4, 0xbc, 0xf6, - 0xc9, 0xe5, 0xde, 0x2b, 0x50, 0xac, 0xf7, 0x0c, 0x02, 0x5b, 0x3a, 0x0c, - 0x52, 0xc2, 0x76, 0x4b, 0xe1, 0xb1, 0x63, 0xcb, 0x44, 0xc9, 0x1a, 0xb6, - 0xbb, 0x91, 0xe2, 0x22, 0x75, 0x49, 0x6d, 0x84, 0x98, 0x70, 0xab, 0xb8, - 0x0a, 0x5b, 0x79, 0x64, 0xe8, 0xde, 0x52, 0xa0, 0x04, 0x1b, 0x78, 0x22, - 0xc0, 0xe9, 0xd0, 0x9d, 0xf1, 0x24, 0x79, 0x44, 0xe2, 0x11, 0xda, 0x21, - 0xcc, 0xc6, 0xf9, 0x13, 0x88, 0x19, 0xa3, 0x4b, 0xd2, 0x6b, 0x3d, 0x2a, - 0xfd, 0x01, 0xad, 0xa4, 0x80, 0x93, 0x5c, 0xea, 0xb6, 0x99, 0x27, 0x45, - 0x3d, 0x2b, 0xa7, 0x17, 0xa5, 0xb5, 0xbd, 0x27, 0xfb, 0x4e, 0xe3, 0x16, - 0x20, 0x7c, 0x81, 0xb3, 0x38, 0x8e, 0x0d, 0x80, 0x65, 0x7f, 0x26, 0x07, - 0x22, 0xe3, 0x80, 0x0c, 0x4a, 0x25, 0x23, 0xae, 0x65, 0x1a, 0xc9, 0x45, - 0xfc, 0xc7, 0x80, 0xf9, 0x55, 0x0f, 0xcd, 0xa3, 0xbe, 0xcb, 0x3c, 0x8a, - 0xe7, 0x92, 0xe6, 0xd8, 0x7a, 0x51, 0x3f, 0x99, 0x84, 0xfc, 0xa1, 0x32, - 0x33, 0x2b, 0x3d, 0x8c, 0x82, 0x7a, 0x5c, 0xe0, 0x2b, 0x91, 0xd8, 0xad, - 0x48, 0x39, 0xb6, 0xc9, 0x8f, 0xb2, 0x17, 0x08, 0xba, 0xb9, 0x6e, 0x81, - 0x67, 0x8a, 0x96, 0x51, 0x0c, 0xa7, 0xd9, 0xa9, 0x4a, 0x39, 0xe5, 0xc7, - 0x3b, 0x2c, 0xc4, 0xdf, 0x89, 0xa5, 0x39, 0x99, 0xa7, 0x40, 0x42, 0xde, - 0x0b, 0x38, 0xec, 0xb6, 0xce, 0x90, 0xf7, 0xeb, 0xe6, 0x27, 0x3f, 0xbe, - 0xfb, 0x6d, 0x8a, 0x05, 0x58, 0x1d, 0xbe, 0xbf, 0x9d, 0x26, 0x10, 0xe3, - 0x31, 0x7f, 0x02, 0x78, 0x51, 0x74, 0xdf, 0x12, 0x1f, 0xde, 0xc6, 0x92, - 0x53, 0x1e, 0x47, 0x4f, 0xa7, 0x04, 0x01, 0x1c, 0xea, 0x0b, 0x71, 0x4d, - 0xe0, 0x6d, 0xde, 0x89, 0x2e, 0x0d, 0x3b, 0x0d, 0xcc, 0xd6, 0xa3, 0x09, - 0xce, 0x0b, 0x71, 0x33, 0xf3, 0x85, 0x6d, 0x3a, 0xe7, 0x50, 0x40, 0x21, - 0x5d, 0x0b, 0x58, 0xfe, 0x60, 0xc8, 0xa8, 0xdf, 0x8e, 0xa3, 0x7e, 0xd8, - 0x07, 0x58, 0x0f, 0x95, 0xae, 0xdb, 0x1e, 0x13, 0x5d, 0x04, 0xdb, 0x16, - 0x13, 0x12, 0x41, 0x44, 0x16, 0x93, 0x8c, 0xff, 0xc6, 0xf3, 0x53, 0x3a, - 0x83, 0x00, 0x30, 0x21, 0x4b, 0xef, 0x08, 0x29, 0x98, 0xf0, 0x1f, 0x6d, - 0x66, 0xa7, 0x58, 0xe0, 0x4c, 0xd8, 0xae, 0x9d, 0xdb, 0x7a, 0x9b, 0xa6, - 0xb6, 0xa4, 0x8a, 0x92, 0x82, 0xa2, 0x03, 0x8d, 0xd9, 0x38, 0xd1, 0x84, - 0xe4, 0x38, 0x44, 0xb3, 0x2c, 0xdb, 0x66, 0xba, 0x47, 0x35, 0x4e, 0xf6, - 0xd9, 0x8a, 0x30, 0xe3, 0x48, 0x94, 0x59, 0xce, 0xb7, 0x22, 0xd7, 0x44, - 0xb1, 0x7e, 0x71, 0xf7, 0x1f, 0xdc, 0xd7, 0x6f, 0x85, 0x74, 0x08, 0x17, - 0x7a, 0xdb, 0xe1, 0x6f, 0x71, 0x6d, 0xb0, 0x33, 0x5c, 0xbb, 0x15, 0xaa, - 0xc5, 0xbc, 0x9f, 0xc9, 0x14, 0x2d, 0xb9, 0xe2, 0x22, 0x4b, 0x52, 0xa8, - 0xbc, 0x07, 0xd6, 0xfb, 0x5e, 0x35, 0x2c, 0xfb, 0xfc, 0x17, 0x87, 0x52, - 0x15, 0xa8, 0x3b, 0x25, 0x3c, 0x37, 0x0e, 0xa8, 0xf6, 0xed, 0x06, 0x8d, - 0x6c, 0x87, 0x94, 0xa3, 0xd8, 0x04, 0x55, 0x3c, 0xd6, 0xc9, 0xe5, 0x11, - 0xbb, 0xf9, 0xd1, 0x21, 0x67, 0x06, 0x74, 0xf2, 0x0e, 0x6c, 0x15, 0xca, - 0x7a, 0x27, 0xf4, 0x0c, 0xc5, 0x70, 0xb6, 0xbd, 0x3d, 0x34, 0x61, 0x8f, - 0x40, 0x7c, 0x86, 0x1f, 0x8a, 0x33, 0xe6, 0x81, 0x02, 0xd7, 0xf4, 0xfd, - 0xbd, 0x03, 0xb6, 0x8e, 0x7b, 0xe7, 0x0a, 0xe8, 0xb5, 0xba, 0x6a, 0xb9, - 0x40, 0xa3, 0x50, 0x98, 0x81, 0x00, 0x85, 0x00, 0x86, 0x00, 0x40, 0x96, - 0xf0, 0x01, 0x17, 0x86, 0x00, 0x48, 0x7f, 0x1a, 0xfe, 0xdf, 0x93, 0xdd, - 0x5a, 0x96, 0x15, 0x51, 0xf8, 0x02, 0x7e, 0x53, 0xe3, 0x75, 0x4f, 0x5d, - 0xd3, 0xbb, 0x36, 0xa0, 0xdf, 0x62, 0xf8, 0xee, 0xfc, 0x15, 0x75, 0x99, - 0x33, 0x4d, 0xd5, 0xbd, 0x37, 0xa6, 0xe9, 0x9f, 0x2b, 0x34, 0x5d, 0x4e, - 0x52, 0xf0, 0x83, 0xea, 0xf8, 0x61, 0xa1, 0xd7, 0xa9, 0xce, 0xf5, 0x11, - 0x3b, 0xf9, 0x66, 0x17, 0xb1, 0x9c, 0x59, 0xb7, 0x1d, 0xdc, 0x99, 0xce, - 0x3f, 0x94, 0xcd, 0xfa, 0x60, 0x00, 0x00, 0x00, 0x05, 0x30, 0x7f, 0x70, - 0xb9, 0x14, 0x96, 0x64, 0x7d, 0xfa, 0xfe, 0x53, 0x74, 0x3e, 0xcb, 0x80, - 0x5d, 0x04, 0xe0, 0x7a, 0x8a, 0xbe, 0x8c, 0xdf, 0x4d, 0xde, 0xfd, 0x1a, - 0xe1, 0xda, 0x61, 0x04, 0x5b, 0x50, 0xda, 0x5b, 0x7e, 0xc2, 0x5a, 0xb5, - 0xb7, 0x0d, 0x9a, 0xf8, 0xae, 0x47, 0x8e, 0x24, 0x6b, 0x46, 0x5a, 0xae, - 0x9e, 0xd2, 0x7d, 0xbf, 0x08, 0x0c, 0x31, 0x19, 0xf3, 0x60, 0x07, 0x8e, - 0xd9, 0x46, 0x88, 0x68, 0xe6, 0x66, 0x8e, 0xe6, 0x86, 0xd7, 0xaf, 0xf7, - 0x3e, 0x60, 0x3a, 0x9b, 0xe5, 0x1e, 0xa0, 0x00, 0xd6, 0xf8, 0x0f, 0xc6, - 0xb8, 0x50, 0x84, 0x76, 0x4e, 0x4e, 0x97, 0xf3, 0x28, 0x78, 0xd0, 0xbb, - 0x04, 0x6f, 0x79, 0xdf, 0x81, 0xbb, 0x0f, 0xe5, 0xad, 0xd7, 0xd7, 0xa1, - 0x78, 0x20, 0x6b, 0xe7, 0xff, 0xd7, 0xfa, 0x6d, 0xa0, 0xe8, 0x4b, 0xde, - 0x39, 0x60, 0x51, 0x1a, 0x03, 0xf4, 0xd2, 0xdd, 0xbb, 0xb7, 0xa1, 0x63, - 0x70, 0x1e, 0x10, 0x80, 0x40, 0xf2, 0x5f, 0x4c, 0x1c, 0xf3, 0xd6, 0xa5, - 0xd5, 0x5e, 0xba, 0xec, 0x08, 0xf8, 0x5b, 0x3f, 0x2f, 0xbd, 0x8a, 0xed, - 0x7b, 0x4b, 0xc8, 0xe3, 0x55, 0x71, 0x64, 0x68, 0x45, 0x2b, 0x13, 0x87, - 0x1f, 0xfa, 0xa8, 0x86, 0x92, 0xda, 0xa8, 0xf0, 0x02, 0x2b, 0x6b, 0xfb, - 0xb2, 0xb9, 0x3d, 0x3b, 0xbb, 0xb7, 0xed, 0x87, 0x3d, 0xc0, 0x81, 0xd6, - 0x30, 0x8a, 0xd8, 0x1f, 0xb9, 0x3e, 0xfa, 0xc4, 0x2f, 0xd6, 0xef, 0x50, - 0xc7, 0x40, 0xa4, 0x30, 0x41, 0xe1, 0xa5, 0xd6, 0x26, 0x5f, 0xac, 0xdb, - 0x44, 0x69, 0xdc, 0x66, 0x55, 0x5b, 0x59, 0xe3, 0xff, 0xc1, 0xd2, 0xc3, - 0xbb, 0x78, 0x04, 0x55, 0xd9, 0x5d, 0x64, 0x42, 0x87, 0x86, 0xcd, 0xc5, - 0xcf, 0xc9, 0xbd, 0x24, 0x77, 0x16, 0xbb, 0x1e, 0x8e, 0x92, 0x6e, 0x9e, - 0x72, 0xb6, 0xe3, 0xd0, 0x41, 0xac, 0x91, 0x49, 0xd2, 0x20, 0x38, 0x3a, - 0xcc, 0xcf, 0xf6, 0x81, 0x85, 0xee, 0x68, 0x6e, 0x90, 0xac, 0x5a, 0x9e, - 0x50, 0x41, 0x9d, 0xf8, 0xe8, 0xc4, 0x31, 0x05, 0x2a, 0x1c, 0x2e, 0x66, - 0x90, 0xd5, 0xcc, 0x76, 0xb3, 0x3d, 0x20, 0xd4, 0xd1, 0x84, 0x5c, 0x76, - 0xaa, 0x54, 0x5c, 0x89, 0xb7, 0xe8, 0x6c, 0x4b, 0x35, 0x24, 0x2d, 0xd9, - 0xe3, 0xdc, 0x18, 0x9b, 0xdf, 0x12, 0xdf, 0xe5, 0x3f, 0xe9, 0x07, 0x66, - 0x29, 0x7f, 0x09, 0x0f, 0x66, 0xc9, 0x4b, 0x25, 0xce, 0x51, 0xb4, 0x9e, - 0xea, 0x32, 0xef, 0xf1, 0x13, 0x60, 0xdd, 0xe8, 0xe7, 0x93, 0xf0, 0x56, - 0x46, 0x0b, 0x95, 0x47, 0xfe, 0x17, 0xd5, 0xc7, 0x7c, 0x7a, 0xae, 0xac, - 0x94, 0x2a, 0x63, 0x9f, 0x5f, 0x39, 0x3e, 0xae, 0xd7, 0xa1, 0x62, 0x5b, - 0xc8, 0xb1, 0x00, 0xd3, 0x22, 0x76, 0x9d, 0x37, 0x0c, 0x3d, 0x33, 0xa1, - 0xcc, 0xf0, 0x11, 0x1f, 0x1f, 0x7e, 0x74, 0x05, 0x9d, 0x45, 0xcc, 0xc7, - 0x30, 0xc7, 0x1a, 0xa7, 0x72, 0x18, 0x07, 0x22, 0x72, 0xd4, 0xbe, 0xaa, - 0xe0, 0xf1, 0x23, 0x2f, 0x15, 0x5e, 0xbd, 0x94, 0xcb, 0x98, 0x9d, 0xa0, - 0x81, 0xe1, 0x4a, 0x53, 0x91, 0x8f, 0x50, 0x58, 0x34, 0x2a, 0xce, 0x26, - 0xac, 0x4d, 0x1a, 0xbc, 0xca, 0x03, 0xd0, 0x4c, 0x42, 0x12, 0x9e, 0x20, - 0x61, 0xcf, 0xcf, 0x46, 0x31, 0xcb, 0x92, 0x25, 0xde, 0x5a, 0xcd, 0x64, - 0x52, 0xb5, 0xfc, 0xeb, 0x4e, 0x6f, 0xf6, 0xae, 0x72, 0x8b, 0x00, 0xac, - 0x7d, 0x2e, 0x5e, 0xfc, 0xd0, 0x91, 0xfa, 0x41, 0xf4, 0xbb, 0xbc, 0xd7, - 0xe9, 0x76, 0x57, 0xf3, 0xed, 0x16, 0x6f, 0xb1, 0xc9, 0xeb, 0x96, 0x09, - 0x02, 0x27, 0x7a, 0xcd, 0xd3, 0x6b, 0x82, 0x98, 0xd4, 0xb2, 0xca, 0x2b, - 0x58, 0x29, 0x0b, 0x11, 0xeb, 0xcb, 0xa7, 0xca, 0x29, 0x50, 0x43, 0xe4, - 0x2f, 0x67, 0xb3, 0x7c, 0xb7, 0xbc, 0xf8, 0xbb, 0xc2, 0x72, 0xac, 0x65, - 0xf8, 0x7c, 0x26, 0xf1, 0x33, 0x92, 0xd6, 0x2d, 0x26, 0xba, 0x99, 0x38, - 0xa2, 0x6d, 0xc8, 0xba, 0x13, 0x5f, 0x30, 0x6b, 0xe6, 0x90, 0x80, 0x86, - 0x90, 0xb1, 0x8a, 0x49, 0xdc, 0x97, 0x42, 0x3a, 0xaf, 0x17, 0x97, 0x3b, - 0xf9, 0xcb, 0x3a, 0x32, 0x61, 0x32, 0x24, 0x47, 0x94, 0xce, 0xf0, 0xfb, - 0x22, 0x87, 0x54, 0x4f, 0x6b, 0xf1, 0x8b, 0xaa, 0x97, 0xce, 0xa2, 0xc8, - 0xd7, 0x3f, 0x0d, 0x11, 0x32, 0xd1, 0x3f, 0xc5, 0x62, 0x69, 0x31, 0x1a, - 0xfd, 0x2e, 0x4b, 0xc3, 0xdf, 0xb6, 0xf5, 0x33, 0x93, 0x2c, 0x55, 0x10, - 0x83, 0xaf, 0xf2, 0xd4, 0xe2, 0x5c, 0x55, 0xc9, 0xf5, 0x5f, 0x71, 0xdc, - 0x10, 0xef, 0xf3, 0x3d, 0xfd, 0xa6, 0xd1, 0x61, 0x1f, 0x15, 0x5a, 0x89, - 0xd1, 0xb0, 0x6d, 0xc5, 0x7c, 0x1c, 0x94, 0x2a, 0xd5, 0xa8, 0xcd, 0x4e, - 0x0a, 0x74, 0x06, 0x8e, 0x41, 0x6e, 0x5e, 0x66, 0x6a, 0x1e, 0x30, 0xa6, - 0xba, 0x8c, 0x76, 0xbe, 0x06, 0x68, 0x9b, 0xcb, 0xa8, 0x42, 0x0f, 0x0d, - 0x73, 0x70, 0xb4, 0x67, 0x3d, 0xed, 0x61, 0x19, 0xbf, 0x95, 0xa3, 0x8f, - 0x7b, 0x9a, 0xa8, 0x47, 0xd5, 0x99, 0x8f, 0xc7, 0x2c, 0xcd, 0xf4, 0xd4, - 0x6b, 0xb8, 0xe7, 0xb2, 0xd5, 0xb6, 0xa8, 0x73, 0x60, 0x25, 0x4f, 0xab, - 0x41, 0x07, 0x7b, 0x45, 0x2f, 0x62, 0x0a, 0xb3, 0x78, 0xa4, 0x75, 0x53, - 0x4a, 0xe1, 0x1b, 0xee, 0x01, 0xd7, 0x95, 0x65, 0xfa, 0x12, 0x98, 0x1b, - 0xdb, 0x9d, 0xae, 0x1e, 0xd2, 0x86, 0xa1, 0x36, 0xc3, 0x73, 0x93, 0x79, - 0x40, 0x50, 0x4a, 0xd3, 0x49, 0x9f, 0x96, 0x0a, 0x92, 0xfe, 0xff, 0xd2, - 0x07, 0x96, 0xc0, 0x2d, 0xab, 0xde, 0xad, 0xaf, 0xc4, 0x96, 0xb7, 0x55, - 0x31, 0x7c, 0x61, 0x70, 0x6b, 0x32, 0xcd, 0x65, 0x72, 0x9c, 0xa8, 0x71, - 0x07, 0x36, 0xc2, 0x34, 0x19, 0xbe, 0x1a, 0x7d, 0x49, 0x89, 0x07, 0xb0, - 0xdf, 0xf2, 0x0c, 0xab, 0x64, 0x5a, 0x99, 0xf4, 0x26, 0xe9, 0x48, 0x95, - 0x7a, 0x6c, 0xda, 0xf7, 0x2b, 0x6d, 0x88, 0x07, 0x32, 0xc8, 0x02, 0x62, - 0x2c, 0xe4, 0xfe, 0xef, 0x4a, 0x4f, 0x98, 0xf4, 0xbb, 0x49, 0xd8, 0x2d, - 0x23, 0x77, 0x10, 0x03, 0x20, 0x13, 0x7a, 0x05, 0xc7, 0x99, 0x54, 0xec, - 0x3e, 0x48, 0x4f, 0x5a, 0xe3, 0xda, 0x66, 0xe4, 0xea, 0x4d, 0xbd, 0x57, - 0xb7, 0x9d, 0xce, 0x12, 0x5b, 0x3c, 0xa2, 0xb8, 0x24, 0x17, 0x4f, 0x7f, - 0x95, 0xbd, 0xfb, 0xaa, 0x59, 0xce, 0x7c, 0xfc, 0xb8, 0x30, 0xe2, 0x7f, - 0xbe, 0x3c, 0x04, 0xfe, 0x1c, 0x62, 0xa9, 0x48, 0x54, 0x90, 0xf2, 0x24, - 0x82, 0xdd, 0xd9, 0xc9, 0x69, 0x74, 0x17, 0xc9, 0x2e, 0xf5, 0x58, 0xdc, - 0xb5, 0xa4, 0x43, 0x74, 0x9c, 0x11, 0x29, 0x80, 0x23, 0x60, 0x19, 0x03, - 0xfe, 0xcb, 0x33, 0x98, 0x53, 0xb9, 0x10, 0xba, 0xc8, 0x7f, 0xa2, 0x95, - 0x57, 0x6b, 0x9b, 0x37, 0x5f, 0x52, 0x5e, 0x09, 0x65, 0x6d, 0x09, 0x74, - 0xdc, 0x6a, 0x03, 0xb3, 0x64, 0x01, 0x35, 0x19, 0xee, 0xb1, 0xe4, 0x82, - 0xba, 0xf0, 0x14, 0x05, 0x44, 0xfa, 0x81, 0x07, 0xd4, 0xd5, 0xc1, 0x4f, - 0xe8, 0xd0, 0xd1, 0xcb, 0xd9, 0xa2, 0x31, 0xa3, 0x53, 0x5d, 0x48, 0x24, - 0xbd, 0xd8, 0x38, 0xaa, 0x72, 0x92, 0x28, 0xdb, 0x8b, 0x65, 0x51, 0x05, - 0xf3, 0x50, 0xad, 0xa3, 0xa1, 0x57, 0xd3, 0x36, 0x4b, 0xbd, 0x50, 0xf0, - 0xe2, 0xf6, 0x11, 0xce, 0xc7, 0x97, 0x74, 0x5e, 0x2a, 0xf2, 0xde, 0x83, - 0xdf, 0xf2, 0xe8, 0x10, 0xe2, 0x02, 0x68, 0x4c, 0xfe, 0x55, 0x61, 0xf4, - 0x91, 0x4c, 0x56, 0x0a, 0x43, 0xbc, 0x49, 0xea, 0xf6, 0x9a, 0x63, 0x35, - 0xa1, 0x99, 0xa0, 0xfd, 0x2a, 0x19, 0xfc, 0x47, 0x82, 0x52, 0x03, 0x18, - 0xe5, 0xa7, 0xa6, 0xd1, 0x53, 0x7f, 0xc6, 0x7d, 0x04, 0x15, 0x81, 0xd4, - 0x67, 0x55, 0x07, 0x3b, 0x81, 0x5e, 0x85, 0x99, 0xf0, 0xbd, 0x29, 0x6e, - 0x38, 0x97, 0x34, 0x30, 0x30, 0xc3, 0x75, 0x55, 0x3d, 0xf2, 0x6a, 0xdb, - 0x25, 0x3e, 0x33, 0x82, 0xd0, 0x91, 0x19, 0x8c, 0x01, 0xeb, 0x56, 0x11, - 0x46, 0x28, 0x9a, 0x8c, 0xf8, 0x43, 0x1a, 0x60, 0x6c, 0x18, 0x55, 0x05, - 0x6c, 0x44, 0x20, 0xe0, 0x4b, 0x45, 0xf1, 0x18, 0x2c, 0x03, 0xf9, 0xce, - 0x77, 0x86, 0x91, 0x0e, 0xd3, 0xd9, 0x1a, 0x67, 0x60, 0x19, 0x52, 0xbc, - 0xa1, 0x0f, 0xbd, 0x2e, 0x0a, 0xba, 0xf7, 0x1d, 0x51, 0x4a, 0x16, 0xc6, - 0xf7, 0xc1, 0x40, 0x64, 0x50, 0x9b, 0xf2, 0x5a, 0x66, 0x4a, 0x6b, 0x04, - 0x56, 0x2f, 0x26, 0x7b, 0x11, 0x3f, 0xb9, 0xf0, 0xe8, 0xc2, 0xa5, 0x61, - 0x1c, 0xff, 0xff, 0x5b, 0xc5, 0x53, 0x32, 0x6c, 0xeb, 0xab, 0x2b, 0x4d, - 0x0d, 0xe3, 0x73, 0x87, 0xdc, 0x48, 0x54, 0xcf, 0xc3, 0x21, 0x98, 0x29, - 0xbb, 0x19, 0x29, 0x81, 0xd8, 0x71, 0xbe, 0xad, 0xa8, 0xab, 0xbd, 0x1e, - 0xc6, 0x82, 0x6f, 0x68, 0x37, 0x42, 0x5b, 0xa3, 0x1e, 0x87, 0xe2, 0x6d, - 0x51, 0x75, 0x4b, 0x6f, 0x92, 0x94, 0x31, 0xe6, 0xbe, 0xf9, 0xf7, 0x68, - 0x30, 0x68, 0x7d, 0x07, 0xe9, 0x56, 0x8b, 0xe8, 0x1c, 0x57, 0xaf, 0xe0, - 0xb4, 0x7f, 0x61, 0xea, 0x86, 0xa3, 0x4c, 0xdf, 0xe4, 0xc2, 0x71, 0xc2, - 0xd8, 0x19, 0x4d, 0x31, 0x2e, 0xd6, 0x43, 0x15, 0x49, 0xd9, 0x2e, 0x60, - 0x01, 0x64, 0x51, 0x12, 0x21, 0x11, 0x93, 0x13, 0x57, 0x18, 0xd1, 0x8b, - 0xa4, 0x1c, 0xe8, 0x3a, 0xdd, 0x63, 0x52, 0x41, 0x34, 0x35, 0x75, 0x20, - 0xc7, 0x03, 0x7d, 0x44, 0x8a, 0xd7, 0x51, 0x2a, 0x64, 0xb7, 0x29, 0x31, - 0xab, 0xab, 0x0c, 0x9c, 0x0d, 0x40, 0xd5, 0x57, 0x96, 0xee, 0x21, 0x96, - 0xa6, 0x23, 0x19, 0xd5, 0x62, 0x49, 0x47, 0xfa, 0x67, 0x5a, 0xaa, 0x07, - 0xcf, 0xce, 0x3f, 0x4b, 0x14, 0x00, 0x00, 0x00, 0x02, 0x04, 0x7f, 0x6e, - 0xb3, 0xbd, 0xea, 0x91, 0xf0, 0x1b, 0xe1, 0x32, 0x4f, 0xa1, 0xe2, 0xe9, - 0xbe, 0x34, 0x23, 0xf2, 0xb7, 0x11, 0x1b, 0x03, 0x5c, 0x46, 0x5c, 0xbd, - 0xc1, 0x41, 0x3f, 0x93, 0x49, 0xe4, 0xf8, 0xd0, 0xd0, 0x4a, 0x3a, 0x5c, - 0xf3, 0x20, 0x16, 0x81, 0xad, 0xa2, 0x55, 0xc3, 0xd1, 0x50, 0x4f, 0x2c, - 0x81, 0xe7, 0x35, 0xde, 0xa6, 0x9f, 0xa1, 0x49, 0xf4, 0x90, 0x9b, 0x19, - 0x6a, 0xb9, 0x2c, 0x95, 0x61, 0x21, 0xdc, 0x3b, 0x37, 0x1d, 0x3f, 0xab, - 0x40, 0x64, 0x6a, 0x8d, 0x76, 0x34, 0x17, 0xa0, 0x72, 0x11, 0x3d, 0x32, - 0xbf, 0xa6, 0xf9, 0xf6, 0xb3, 0x9c, 0xda, 0xd5, 0x32, 0x89, 0xf5, 0xbf, - 0xb8, 0x65, 0xb4, 0x4c, 0x87, 0xfd, 0x14, 0x47, 0x82, 0x84, 0x96, 0xde, - 0x9e, 0xd1, 0x3e, 0x2d, 0xfb, 0x3e, 0x13, 0xcd, 0xee, 0xba, 0x51, 0x6e, - 0x0d, 0x68, 0x85, 0xdc, 0xe3, 0x9e, 0xfd, 0xd7, 0x7d, 0xb0, 0x94, 0xc1, - 0x70, 0x7c, 0x6d, 0x85, 0x3d, 0x02, 0xc7, 0x84, 0xd3, 0xae, 0x86, 0x34, - 0x38, 0xfe, 0x80, 0x1e, 0xad, 0xc6, 0xba, 0xf1, 0x5f, 0xe2, 0x3b, 0x86, - 0x48, 0x49, 0x0e, 0x30, 0x9b, 0x83, 0xff, 0xe5, 0x89, 0xf3, 0x5b, 0xb7, - 0x7e, 0x12, 0x3b, 0x25, 0x61, 0x85, 0xbd, 0xaf, 0xb8, 0xaf, 0x91, 0xd1, - 0x99, 0xa4, 0xcb, 0x6c, 0x92, 0x4a, 0xf4, 0x94, 0xbf, 0x91, 0xa6, 0xc1, - 0x63, 0x40, 0xa7, 0x09, 0x7d, 0x47, 0xd4, 0x36, 0x71, 0x27, 0x8c, 0x2d, - 0x78, 0xf7, 0x41, 0x5c, 0x8f, 0xbc, 0x31, 0xf6, 0x9e, 0xd6, 0xdd, 0x50, - 0x81, 0x3a, 0x02, 0xf7, 0x8d, 0x9a, 0xfd, 0xd5, 0x64, 0xac, 0x42, 0xa7, - 0x87, 0xbd, 0xf5, 0xf0, 0x27, 0x0f, 0xf0, 0x0e, 0x22, 0x8f, 0x9c, 0x30, - 0xdc, 0xdc, 0x06, 0x35, 0xa1, 0xcd, 0x10, 0xc5, 0x84, 0xb5, 0x3a, 0x3c, - 0x7c, 0xa3, 0xa7, 0xc3, 0x5e, 0xaf, 0x69, 0xf2, 0xa4, 0xab, 0x8a, 0xf7, - 0xf4, 0x69, 0xfe, 0x41, 0x90, 0x5f, 0xa8, 0xc9, 0x49, 0xc1, 0x6e, 0x5f, - 0x10, 0x3a, 0x80, 0x7d, 0x76, 0x04, 0x08, 0x2f, 0x9f, 0x53, 0xf6, 0x51, - 0xd6, 0x41, 0x83, 0xc9, 0x34, 0x11, 0x47, 0x53, 0xc7, 0xae, 0xd7, 0xc4, - 0xb6, 0x3e, 0x16, 0x16, 0x0f, 0x60, 0x7f, 0xf6, 0x2e, 0xaf, 0x4b, 0xd0, - 0xdc, 0xab, 0xfe, 0x70, 0xba, 0xb9, 0xc4, 0x81, 0xd0, 0xbc, 0x88, 0xfa, - 0x71, 0xeb, 0x1b, 0xfe, 0x9a, 0x70, 0x9d, 0xfb, 0xbd, 0x73, 0x79, 0x44, - 0xcf, 0x49, 0xed, 0x20, 0x47, 0x48, 0x61, 0x82, 0x0c, 0xf6, 0x0a, 0x12, - 0x16, 0xcb, 0x08, 0xcf, 0xc8, 0x26, 0x2c, 0x1a, 0x1e, 0x6d, 0xa2, 0x86, - 0x6a, 0x0e, 0x63, 0x98, 0xa8, 0xcf, 0xb0, 0x5b, 0x07, 0x1d, 0x78, 0x57, - 0xc6, 0x6a, 0x73, 0x03, 0xb5, 0xa4, 0x47, 0x6c, 0xe5, 0x3d, 0x6e, 0x82, - 0xdd, 0x41, 0xca, 0x4e, 0xe1, 0x28, 0x9b, 0x2b, 0x5f, 0xdf, 0xa2, 0xba, - 0x5c, 0xaf, 0xae, 0x0b, 0xe0, 0xbb, 0x13, 0x7e, 0x0e, 0x49, 0x85, 0x10, - 0x06, 0xdd, 0xe6, 0x8d, 0x1a, 0x82, 0x5f, 0xd6, 0xf8, 0x8f, 0x13, 0xa6, - 0x1e, 0x26, 0xc7, 0x78, 0x18, 0x3f, 0xe4, 0xe2, 0xae, 0x26, 0x6d, 0xf9, - 0xae, 0xcd, 0xc4, 0xe1, 0x9f, 0x1a, 0x80, 0x3a, 0x92, 0x5b, 0x37, 0x0a, - 0xae, 0xc5, 0xee, 0x43, 0xd8, 0x1e, 0x2d, 0xbc, 0x2a, 0xb2, 0x34, 0xfe, - 0xd4, 0x41, 0xb1, 0xe7, 0xc5, 0x0f, 0xb3, 0xbf, 0x3a, 0xc2, 0x2d, 0xe5, - 0x4e, 0xd3, 0x1c, 0x6c, 0x18, 0xc0, 0x66, 0x52, 0x47, 0x2d, 0x2f, 0xf3, - 0x6d, 0x99, 0xbe, 0xc9, 0x67, 0xfe, 0xe2, 0x32, 0xd9, 0xff, 0x91, 0xa7, - 0x44, 0x3c, 0xe2, 0xe4, 0xde, 0x06, 0xce, 0x1f, 0x11, 0x7b, 0xaf, 0x18, - 0x6f, 0xdc, 0xc4, 0xeb, 0x93, 0x01, 0x6f, 0xb7, 0x04, 0x00, 0x00, 0x00, - 0x01, 0x1e, 0x7f, 0x70, 0xdb, 0x9b, 0x10, 0x21, 0x28, 0x18, 0x37, 0xd8, - 0x0a, 0xdb, 0x5a, 0x3e, 0xcd, 0xd8, 0x44, 0xa7, 0xd5, 0x17, 0x2a, 0x9a, - 0x10, 0x1b, 0xd7, 0xa8, 0x87, 0x6a, 0x02, 0xe3, 0x5d, 0x00, 0xf7, 0x88, - 0x66, 0xc8, 0xb6, 0x8c, 0xd5, 0x1f, 0xb2, 0x6b, 0x0a, 0x6f, 0x86, 0xc8, - 0x9e, 0x0a, 0x2a, 0x6b, 0x89, 0xaf, 0x45, 0x6b, 0x0b, 0x5d, 0xa1, 0xc8, - 0xc2, 0x92, 0xd4, 0xc1, 0x4f, 0x2e, 0xf1, 0x40, 0x30, 0x0b, 0x20, 0xf2, - 0x26, 0x69, 0x65, 0x09, 0xe0, 0x93, 0xe8, 0x8c, 0xe0, 0x74, 0x0f, 0x1a, - 0x1c, 0x0d, 0xcd, 0xaa, 0x2d, 0xec, 0x81, 0xe5, 0x1d, 0x2b, 0x95, 0xae, - 0x92, 0x7a, 0x6b, 0x12, 0x10, 0xfa, 0xe2, 0x4b, 0xfa, 0x52, 0x31, 0x1e, - 0xb0, 0xff, 0x61, 0x44, 0xd9, 0x1f, 0xad, 0x26, 0x90, 0x98, 0x08, 0x24, - 0x01, 0xfb, 0x2e, 0xd5, 0xf7, 0xe9, 0x6d, 0x43, 0xa8, 0x08, 0x9c, 0x0b, - 0xb2, 0x45, 0xac, 0x10, 0xc5, 0xf0, 0xc5, 0x20, 0x15, 0xdf, 0x86, 0x63, - 0x34, 0xfe, 0xbb, 0x66, 0x5c, 0x02, 0xf2, 0x81, 0x8e, 0x75, 0x2d, 0x78, - 0x97, 0xfc, 0x7e, 0x39, 0x66, 0x66, 0xd8, 0x2c, 0xcd, 0x58, 0x87, 0x8f, - 0x1f, 0x20, 0x47, 0x2b, 0x35, 0x51, 0x66, 0x74, 0x39, 0xca, 0x1e, 0xac, - 0xf5, 0xc4, 0x06, 0x1b, 0xb3, 0x6e, 0x76, 0x33, 0x03, 0x07, 0x5b, 0x4d, - 0x82, 0x87, 0xd6, 0x09, 0x7b, 0x5a, 0x60, 0xb3, 0x31, 0x3a, 0xbe, 0xb1, - 0x6b, 0xf2, 0x3f, 0x7e, 0xa3, 0xec, 0x06, 0x12, 0xb6, 0x13, 0x91, 0x9f, - 0x3b, 0xd7, 0xe8, 0x2d, 0xa5, 0xf3, 0x23, 0xcb, 0x26, 0xe2, 0x8d, 0xca, - 0x19, 0x68, 0x33, 0x77, 0xbe, 0x62, 0x2e, 0x23, 0x15, 0x3b, 0x9c, 0x5f, - 0xe2, 0x6d, 0x9d, 0xb1, 0x1d, 0x9b, 0x8c, 0xf1, 0xd0, 0x76, 0xcf, 0x77, - 0xeb, 0x7f, 0x5d, 0xae, 0xb8, 0xca, 0x58, 0xdc, 0x52, 0xdd, 0xfd, 0x7b, - 0xbe, 0x04, 0x92, 0x81, 0x51, 0x1b, 0x53, 0x9c, 0x46, 0x9b, 0x89, 0x0c, - 0xbc, 0x2d, 0x85, 0x41, 0x30, 0xb0, 0x6e, 0x5c, 0xa1, 0x6f, 0xdf, 0x00, - 0x7f, 0x6e, 0x24, 0x86, 0xc7, 0x8c, 0x85, 0xaa, 0xf1, 0x46, 0xbe, 0x07, - 0xde, 0x2d, 0x72, 0x14, 0xfd, 0xf9, 0x68, 0x60, 0x7b, 0xb4, 0x54, 0xe2, - 0x09, 0x07, 0x8a, 0x65, 0x5a, 0xf0, 0x83, 0xe1, 0x8c, 0x92, 0xc7, 0x20, - 0x6e, 0xdb, 0xb5, 0x11, 0xac, 0x21, 0x4c, 0xe7, 0xb6, 0xd3, 0x6e, 0xb9, - 0x7e, 0x85, 0x55, 0xd2, 0x79, 0xf5, 0x44, 0x67, 0x1b, 0x50, 0x87, 0xa7, - 0xac, 0x0a, 0x6c, 0x1d, 0x21, 0x03, 0x1a, 0xf0, 0x2a, 0x54, 0x0a, 0xc2, - 0x4e, 0x33, 0xca, 0x32, 0xf9, 0xca, 0x47, 0xc9, 0x90, 0x79, 0xc8, 0xbd, - 0xf1, 0x78, 0x24, 0xfa, 0xb8, 0x3c, 0xe8, 0xce, 0x6c, 0x00, 0xc9, 0x6d, - 0x72, 0xfa, 0x3d, 0x10, 0x7e, 0x63, 0x1b, 0x94, 0x54, 0xf1, 0x53, 0x9a, - 0xdc, 0x09, 0x89, 0xc7, 0x70, 0x5c, 0xf2, 0xb0, 0x1b, 0x1b, 0xb8, 0xfe, - 0xb9, 0x41, 0x10, 0x55, 0x8b, 0xdf, 0x97, 0x31, 0x11, 0xc7, 0x89, 0xd0, - 0x21, 0x40, 0x7b, 0x95, 0x84, 0x2e, 0x7a, 0x33, 0x8c, 0xb8, 0x85, 0xd1, - 0xff, 0xf3, 0x70, 0x44, 0x42, 0x46, 0x90, 0xba, 0xe9, 0xc8, 0xb6, 0x78, - 0xed, 0x9f, 0xfe, 0xab, 0x34, 0x8a, 0x19, 0x3a, 0xd5, 0x90, 0xf1, 0x5c, - 0x31, 0x36, 0x9d, 0x60, 0x97, 0xd5, 0x90, 0x72, 0x0c, 0xef, 0xe2, 0xc0, - 0xb4, 0xcf, 0x59, 0x76, 0xcf, 0xbf, 0x3b, 0xf0, 0x72, 0x5c, 0xee, 0x5b, - 0x5b, 0x9f, 0xeb, 0x8f, 0x09, 0xec, 0xe6, 0x82, 0x85, 0x82, 0xe2, 0x88, - 0xd6, 0xbd, 0xe5, 0x8e, 0x7f, 0x62, 0x8d, 0x8f, 0x5c, 0x15, 0x2b, 0x2d, - 0xf2, 0x96, 0xf1, 0x9b, 0x50, 0x61, 0xac, 0x22, 0x1b, 0xf7, 0xbb, 0xf2, - 0xda, 0xd2, 0x1f, 0xbb, 0x9a, 0x6a, 0x8c, 0xaa, 0x8e, 0xba, 0xdb, 0x3f, - 0xe2, 0xdc, 0x52, 0xee, 0xea, 0x79, 0x22, 0x2b, 0x9c, 0x04, 0x84, 0x05, - 0xc8, 0x99, 0x9e, 0x0e, 0x39, 0xcc, 0xb9, 0x3d, 0x15, 0x39, 0x43, 0x26, - 0xb5, 0xf7, 0x68, 0x26, 0x61, 0x04, 0xeb, 0x6d, 0x9a, 0x89, 0xcc, 0x2a, - 0xff, 0x40, 0x7c, 0xd7, 0xac, 0x78, 0xa5, 0xb5, 0x02, 0xa1, 0x83, 0x7b, - 0x6a, 0x2b, 0x1e, 0xdd, 0x32, 0x50, 0x98, 0x27, 0x4e, 0x9c, 0xc0, 0x36, - 0xc2, 0x7f, 0x31, 0x9d, 0x74, 0x1c, 0xea, 0xff, 0xea, 0x6d, 0xda, 0xe8, - 0x99, 0x7a, 0x7f, 0xe5, 0xb0, 0xe3, 0xd6, 0xcd, 0x68, 0x3b, 0x3b, 0xf5, - 0xeb, 0x80, 0x25, 0x23, 0x8d, 0x85, 0xd4, 0x7a, 0xaa, 0x2e, 0xdf, 0xab, - 0xb0, 0x6b, 0x2c, 0x35, 0x18, 0x76, 0xe7, 0x18, 0x63, 0xa6, 0x64, 0x9e, - 0x13, 0x7d, 0xe0, 0xc0, 0x80, 0xcf, 0x6f, 0x35, 0xa6, 0xf8, 0x3c, 0xef, - 0x65, 0xf4, 0xbf, 0xe4, 0x00, 0x00, 0x7b, 0x4a, 0xe9, 0xa6, 0x54, 0x71, - 0x9f, 0xfa, 0x88, 0xdf, 0xc1, 0x28, 0x7f, 0x39, 0x74, 0x9d, 0xdd, 0x4c, - 0x2d, 0xf2, 0x3c, 0x72, 0x8c, 0x4f, 0x2d, 0xe2, 0x86, 0xa0, 0xee, 0x3d, - 0xed, 0xac, 0x41, 0xbe, 0xa2, 0xda, 0xde, 0xdb, 0x2a, 0xa1, 0x53, 0xb2, - 0x04, 0xd8, 0xdd, 0xa7, 0xeb, 0x96, 0x2d, 0xd5, 0xc9, 0xd9, 0x1f, 0x46, - 0x15, 0x30, 0x53, 0xed, 0x49, 0x2d, 0xd1, 0xc1, 0x67, 0x24, 0x41, 0x01, - 0xd1, 0x4b, 0xb4, 0x6d, 0xb1, 0x61, 0x9b, 0xf9, 0x50, 0xd1, 0xcb, 0xde, - 0x2d, 0x8c, 0x99, 0xa8, 0x77, 0xc1, 0xee, 0xc3, 0x73, 0xc0, 0x37, 0x5f, - 0x80, 0x2c, 0x62, 0xd2, 0xf0, 0x2c, 0x09, 0xfd, 0x1b, 0xc6, 0x46, 0xc1, - 0xf7, 0xb0, 0x03, 0x70, 0x9f, 0x86, 0x2c, 0xe6, 0x12, 0x9a, 0xec, 0x4a, - 0x11, 0x98, 0x5d, 0x21, 0x1e, 0xc8, 0x07, 0x08, 0x98, 0x81, 0x91, 0x0f, - 0x60, 0xe6, 0x52, 0x44, 0x62, 0x25, 0xfb, 0x89, 0x3e, 0xb4, 0xff, 0x6e, - 0x45, 0xbb, 0x00, 0x5d, 0xbb, 0x07, 0x58, 0xdc, 0x76, 0x88, 0x34, 0xb6, - 0x23, 0x28, 0xe1, 0x0f, 0x50, 0xb1, 0xee, 0xef, 0x87, 0xae, 0xd6, 0x08, - 0x62, 0x47, 0xfc, 0x7a, 0x05, 0xfd, 0xe3, 0x3d, 0x3f, 0xd3, 0x91, 0xd6, - 0xfb, 0x21, 0xd9, 0xad, 0xad, 0x34, 0x01, 0x41, 0xda, 0xab, 0xd8, 0xbf, - 0x81, 0x08, 0x8a, 0x14, 0x83, 0x3b, 0xc1, 0xb8, 0xc5, 0xed, 0xa4, 0xab, - 0x72, 0x12, 0xc4, 0xd3, 0x1e, 0xc6, 0xdf, 0x07, 0xf8, 0xd7, 0x9f, 0x38, - 0x4f, 0xca, 0x2f, 0xc3, 0x8d, 0x28, 0x80, 0x52, 0xac, 0x4d, 0x59, 0x35, - 0x7c, 0x63, 0x1a, 0x49, 0xc9, 0x29, 0xcc, 0xed, 0xab, 0xfc, 0x4d, 0xae, - 0xc4, 0x4f, 0x8c, 0x91, 0x8b, 0x64, 0x1a, 0xdb, 0xdd, 0xcc, 0x05, 0xfb, - 0x8e, 0x15, 0x7e, 0x56, 0x0c, 0x6f, 0x17, 0x6e, 0xc7, 0xbe, 0x45, 0x8d, - 0xa0, 0xb5, 0xe1, 0x55, 0xe4, 0x4d, 0xd6, 0xb5, 0xb0, 0x6d, 0xd9, 0xb0, - 0x9c, 0xe4, 0xbe, 0x47, 0xa9, 0xfd, 0x08, 0x6c, 0x86, 0x50, 0x5e, 0x92, - 0xdb, 0xcd, 0xc3, 0xd1, 0xeb, 0x22, 0xf9, 0x7e, 0x86, 0x83, 0x05, 0xb0, - 0x2f, 0xd2, 0xe5, 0x9a, 0xbd, 0xf7, 0x3d, 0x67, 0x6a, 0x74, 0x3d, 0xd8, - 0xb8, 0xd2, 0x27, 0xe8, 0x72, 0xc9, 0xf0, 0xbf, 0xbd, 0xc8, 0x66, 0x7d, - 0x37, 0x40, 0x5c, 0x44, 0xf1, 0xf1, 0x17, 0xfe, 0x38, 0x4b, 0x55, 0x76, - 0xff, 0xea, 0xf9, 0xc4, 0x9b, 0x12, 0xca, 0x31, 0x90, 0x4c, 0x36, 0xc8, - 0x80, 0xf1, 0x3f, 0x94, 0x84, 0xca, 0x1a, 0xf3, 0xc6, 0xba, 0x76, 0x08, - 0x89, 0x38, 0x26, 0x92, 0x46, 0x00, 0xd2, 0x32, 0x91, 0x3e, 0x8d, 0x3e, - 0xa7, 0x39, 0xba, 0x6d, 0x8c, 0x20, 0xfe, 0xcc, 0x40, 0xee, 0xa7, 0xd8, - 0x5d, 0x93, 0xc9, 0x17, 0x13, 0x43, 0x5c, 0x87, 0xf5, 0x92, 0x2b, 0x8a, - 0x82, 0xd3, 0xbb, 0x80, 0x76, 0xd3, 0x13, 0x83, 0x65, 0x4e, 0x7d, 0x0b, - 0x37, 0xbb, 0xb2, 0x73, 0x8d, 0x4c, 0x54, 0x89, 0xd7, 0x5e, 0x6c, 0xc5, - 0x95, 0xa9, 0x15, 0x01, 0x85, 0x41, 0x69, 0x77, 0x0a, 0x52, 0x8a, 0x23, - 0xae, 0xf8, 0xd7, 0x26, 0x17, 0x02, 0xd8, 0xc0, 0x9c, 0x6b, 0x7a, 0x6f, - 0x90, 0x6d, 0x52, 0xb6, 0x80, 0xfc, 0x80, 0x01, 0x72, 0x5c, 0x4b, 0xab, - 0x70, 0x48, 0x73, 0xb8, 0x54, 0x2f, 0x9b, 0xbb, 0x97, 0xc7, 0xd8, 0x55, - 0xa9, 0x5a, 0x7d, 0x17, 0xd8, 0xf5, 0xb0, 0x2d, 0x82, 0x25, 0x7c, 0xad, - 0xfd, 0x59, 0x31, 0x60, 0xb5, 0xd1, 0xee, 0x9f, 0x2a, 0xe8, 0xd6, 0xc7, - 0x84, 0x3d, 0xd4, 0x42, 0x36, 0x99, 0x1e, 0xcf, 0xf1, 0x41, 0xa5, 0x6a, - 0x8e, 0x3b, 0x32, 0xe3, 0xcd, 0xf7, 0x27, 0x79, 0x82, 0x2e, 0x0f, 0xb2, - 0xf9, 0x8f, 0xc9, 0xa0, 0x47, 0xb2, 0x4d, 0x02, 0xa5, 0x8c, 0x33, 0x38, - 0xd2, 0x29, 0xbc, 0x69, 0xb5, 0xb7, 0x4e, 0xed, 0x60, 0x1a, 0x13, 0x7c, - 0xa1, 0x31, 0x66, 0x08, 0x37, 0xf8, 0x72, 0x01, 0xd1, 0xc9, 0xdc, 0xac, - 0x1e, 0xea, 0x03, 0x4a, 0xf8, 0x74, 0x92, 0xee, 0xa0, 0x69, 0x26, 0xaf, - 0x93, 0xf1, 0x05, 0xef, 0x38, 0x2f, 0xa4, 0xa6, 0x4c, 0x5d, 0xce, 0xfb, - 0x9f, 0x74, 0xd7, 0x9c, 0xcc, 0x81, 0x96, 0x6a, 0x53, 0x2c, 0x34, 0x66, - 0x9a, 0x44, 0xde, 0x7d, 0x35, 0x14, 0x9e, 0xe7, 0x80, 0x91, 0xf2, 0x9a, - 0x08, 0x7e, 0x28, 0xd1, 0x9c, 0x28, 0xd2, 0x9b, 0x63, 0x54, 0xce, 0xe7, - 0xd9, 0xb2, 0xf1, 0xc7, 0x49, 0x50, 0xcf, 0x59, 0xa6, 0xb6, 0x73, 0xdd, - 0x9b, 0xb5, 0x93, 0xa3, 0x27, 0x6f, 0x20, 0x95, 0x2f, 0x2e, 0xff, 0x29, - 0xef, 0x0b, 0x68, 0xce, 0x18, 0x5f, 0x11, 0x02, 0xb5, 0x2f, 0x22, 0x8b, - 0x25, 0x17, 0x29, 0xc3, 0x62, 0x68, 0x15, 0xb2, 0xec, 0x95, 0xf1, 0xd3, - 0x5a, 0xc8, 0x0c, 0x31, 0x9c, 0x1d, 0x8a, 0x44, 0xe5, 0xb5, 0x63, 0x8e, - 0xd7, 0x85, 0x93, 0x32, 0x0c, 0x53, 0xbc, 0x00, 0x80, 0xf9, 0x73, 0x41, - 0x2b, 0x44, 0xee, 0xbe, 0xbc, 0x66, 0x88, 0xcb, 0xf7, 0x40, 0xb6, 0x39, - 0xd3, 0xbe, 0xe0, 0x2a, 0x9b, 0x08, 0xdc, 0xa2, 0x91, 0x7c, 0xed, 0x50, - 0xdb, 0x14, 0x42, 0xbb, 0xc8, 0xce, 0x69, 0xe3, 0x99, 0x4e, 0x3e, 0x19, - 0x77, 0x98, 0xac, 0xce, 0x81, 0xac, 0xad, 0x59, 0x37, 0x10, 0x79, 0x7e, - 0x5e, 0x8a, 0x26, 0x71, 0x9c, 0xe6, 0xf1, 0xca, 0x7c, 0xf9, 0xb7, 0x5c, - 0xb7, 0x4b, 0x4e, 0xcd, 0x73, 0x96, 0x10, 0xb2, 0x7e, 0x66, 0xe2, 0x6a, - 0x65, 0x8e, 0x42, 0x23, 0xea, 0xba, 0x16, 0x7e, 0x1e, 0x41, 0x42, 0xbe, - 0x6e, 0xab, 0xb7, 0x90, 0x90, 0x8d, 0xee, 0x5e, 0xfa, 0xee, 0x3b, 0x6d, - 0x50, 0xde, 0x62, 0x5f, 0x22, 0x66, 0x34, 0x65, 0x24, 0x32, 0xe1, 0x9f, - 0x2e, 0x9d, 0x42, 0x04, 0xe0, 0x23, 0x12, 0x35, 0x30, 0xcf, 0x40, 0x9a, - 0x99, 0xda, 0xda, 0xbc, 0xe5, 0xfc, 0xb4, 0x81, 0x05, 0xe8, 0x70, 0xda, - 0x8b, 0x83, 0xae, 0xf7, 0xc4, 0xaf, 0x1a, 0x41, 0x7d, 0xf5, 0x49, 0xc3, - 0x9c, 0x28, 0x0f, 0x37, 0xd8, 0xee, 0x49, 0x86, 0x97, 0x24, 0xc1, 0xd7, - 0x8c, 0x7b, 0xcf, 0x95, 0xea, 0xcd, 0xe2, 0x26, 0xca, 0x89, 0xa2, 0xfa, - 0xa5, 0xc5, 0x83, 0x16, 0xf4, 0x67, 0xea, 0x64, 0x82, 0x2f, 0x6e, 0xab, - 0x18, 0x77, 0xdd, 0xbb, 0x93, 0x8f, 0xa8, 0x0f, 0x93, 0xed, 0x13, 0x48, - 0x37, 0xc7, 0x1e, 0x2c, 0x59, 0x8b, 0xf8, 0x53, 0x17, 0x0c, 0xbf, 0xda, - 0x02, 0x33, 0x1a, 0x30, 0x3d, 0x22, 0x99, 0x19, 0x51, 0x91, 0xf3, 0x68, - 0x24, 0x38, 0x7e, 0x68, 0x3e, 0x32, 0xa3, 0x28, 0x97, 0xdf, 0x07, 0x67, - 0x34, 0xa1, 0x5d, 0x29, 0xfb, 0x41, 0x6c, 0x5d, 0xc0, 0x67, 0xc4, 0xfa, - 0xb3, 0x94, 0x88, 0x7a, 0xa5, 0xec, 0x6a, 0x69, 0x36, 0x52, 0x19, 0xa8, - 0xb7, 0x89, 0x01, 0xce, 0x9b, 0x1c, 0xcf, 0x5e, 0x9e, 0x52, 0x33, 0x75, - 0x47, 0x8f, 0xc6, 0xbb, 0xa2, 0x08, 0x35, 0xd3, 0x92, 0x8b, 0xf9, 0x3b, - 0xd5, 0xbd, 0xa5, 0x2e, 0x11, 0x9b, 0x7c, 0x65, 0xcd, 0xfe, 0xc7, 0x2f, - 0xd2, 0xd4, 0x00, 0x9c, 0x63, 0x11, 0xc8, 0x7d, 0x7a, 0xa2, 0x5a, 0x82, - 0x2b, 0x01, 0xf1, 0xa9, 0xb5, 0x1c, 0xad, 0x50, 0x8b, 0x6b, 0x16, 0x42, - 0x7b, 0xd8, 0x99, 0x6c, 0xf3, 0x0f, 0xe9, 0xfb, 0xdf, 0xf5, 0xb2, 0x16, - 0x7b, 0x2a, 0xba, 0x2c, 0x49, 0x81, 0x1e, 0x2e, 0x04, 0x01, 0xc2, 0x07, - 0xd3, 0x54, 0x84, 0x81, 0xdc, 0x6f, 0xfb, 0x28, 0x07, 0x4f, 0x56, 0x1e, - 0x31, 0x68, 0x33, 0x9a, 0xed, 0xbf, 0x69, 0x31, 0x74, 0x28, 0x46, 0xf8, - 0x96, 0xef, 0xe5, 0x52, 0x1e, 0xc5, 0x21, 0x86, 0x63, 0x42, 0xff, 0xae, - 0x36, 0x79, 0xf4, 0x9c, 0x2d, 0x60, 0xc5, 0xe5, 0x9d, 0x9d, 0x32, 0x1c, - 0x82, 0x6b, 0xdc, 0x35, 0x39, 0x94, 0x31, 0xb4, 0xd0, 0x45, 0x16, 0xfe, - 0xe3, 0x3e, 0x77, 0x28, 0x3c, 0x3d, 0xc1, 0x41, 0x21, 0x4c, 0x42, 0xb3, - 0xa3, 0x3c, 0xf7, 0x33, 0x94, 0x7d, 0xf3, 0xe6, 0x87, 0x05, 0x98, 0xed, - 0xac, 0x6c, 0xb3, 0xb0, 0xb0, 0x73, 0x3d, 0x12, 0xda, 0x84, 0x7d, 0x9b, - 0x8f, 0x83, 0x40, 0xf7, 0x39, 0x6c, 0x38, 0x6c, 0x67, 0x4e, 0x8f, 0xbd, - 0xe5, 0xe3, 0x57, 0x6b, 0xa6, 0x5f, 0xcb, 0xe1, 0xa8, 0x15, 0x3e, 0xdc, - 0x67, 0xc5, 0x97, 0xc7, 0xe5, 0xe1, 0xf0, 0x80, 0xa0, 0x59, 0xae, 0x0e, - 0x9d, 0xd4, 0x70, 0x5c, 0x9c, 0x81, 0x5a, 0x98, 0x06, 0xf5, 0x72, 0x04, - 0x5c, 0xfc, 0x48, 0x1f, 0xf4, 0x73, 0x88, 0xae, 0x3e, 0xd6, 0x49, 0x47, - 0x00, 0x57, 0xbe, 0x1c, 0xcf, 0x72, 0x3d, 0xc5, 0xc2, 0xea, 0x60, 0x37, - 0xa2, 0xf6, 0x33, 0xdb, 0x27, 0xc3, 0x5a, 0xa7, 0x5a, 0xb5, 0x54, 0x44, - 0xd3, 0x25, 0xde, 0x21, 0x0d, 0x96, 0xda, 0x16, 0x9d, 0xde, 0x8e, 0xc1, - 0xf7, 0x1c, 0x6c, 0xc5, 0x4e, 0x6e, 0xae, 0xad, 0x4a, 0x52, 0x94, 0x67, - 0xf9, 0x85, 0xaf, 0x92, 0xf9, 0x30, 0x20, 0xaa, 0xfe, 0x83, 0x26, 0x1d, - 0xba, 0x3e, 0x45, 0x01, 0xcf, 0x99, 0xdd, 0xdd, 0x4d, 0x76, 0xd5, 0x63, - 0x88, 0x18, 0x79, 0xf3, 0xa4, 0x0b, 0xbf, 0xf6, 0x1c, 0x6e, 0x8f, 0x7e, - 0x20, 0x95, 0xc4, 0x9e, 0xf9, 0x94, 0x0d, 0x00, 0xc6, 0xb7, 0xb2, 0x27, - 0xa7, 0x90, 0x45, 0x50, 0x82, 0xac, 0xfa, 0xb9, 0x04, 0x66, 0xfc, 0xb8, - 0xaf, 0x8c, 0x80, 0x5b, 0xd5, 0xd7, 0xad, 0x15, 0x50, 0xa8, 0xa5, 0x7c, - 0x0a, 0x3d, 0x6b, 0x8a, 0xc6, 0x7f, 0xc2, 0xb5, 0x74, 0x2b, 0x00, 0xa8, - 0x38, 0x5d, 0x78, 0x11, 0x85, 0xc7, 0x71, 0x83, 0xd0, 0xc7, 0x0a, 0x56, - 0x95, 0x47, 0x05, 0x76, 0x81, 0xeb, 0xcd, 0x8e, 0xab, 0xd4, 0xcc, 0xc8, - 0xef, 0xaf, 0xe9, 0x89, 0xb8, 0x81, 0xc5, 0xf0, 0x8a, 0xf1, 0x0a, 0x3f, - 0x85, 0x2e, 0x9d, 0x43, 0x15, 0x21, 0x5c, 0x1c, 0xcf, 0x6b, 0x97, 0x92, - 0x4d, 0xa5, 0xfd, 0x3f, 0xcf, 0x26, 0x48, 0x81, 0x99, 0xb8, 0x15, 0x9f, - 0x4f, 0x08, 0x02, 0xa8, 0xf8, 0x3a, 0x48, 0x56, 0x20, 0x7b, 0x3a, 0xde, - 0xfc, 0x40, 0x22, 0x9e, 0x65, 0xc1, 0xcc, 0x1f, 0x22, 0xc2, 0x13, 0x84, - 0xb3, 0x8e, 0x37, 0x41, 0x5d, 0x96, 0xbc, 0x53, 0x3e, 0x8a, 0x75, 0xc6, - 0x2d, 0xb7, 0x48, 0x43, 0xe9, 0xb4, 0xb9, 0x02, 0x1f, 0x8e, 0x4e, 0xbb, - 0xd0, 0x3c, 0x06, 0x6d, 0xdb, 0xe1, 0x9b, 0x89, 0xe2, 0x76, 0xfd, 0x27, - 0x09, 0x12, 0x73, 0x50, 0x08, 0xe8, 0xc9, 0xbd, 0x56, 0x80, 0x8a, 0xad, - 0xf4, 0x72, 0xac, 0xa0, 0xfa, 0x74, 0x6c, 0x30, 0x31, 0x02, 0xca, 0x59, - 0xb2, 0x35, 0xdc, 0x4e, 0xd1, 0xc8, 0x29, 0xf0, 0x0f, 0xd5, 0xc3, 0xdf, - 0x60, 0xc9, 0x5a, 0x97, 0x30, 0xff, 0x94, 0xc5, 0x4d, 0x94, 0x44, 0x28, - 0x9d, 0x45, 0x94, 0x02, 0x5e, 0xfa, 0x3d, 0x37, 0x03, 0x0d, 0xc9, 0x96, - 0x37, 0xa4, 0x1b, 0x1f, 0x10, 0xa5, 0xce, 0x76, 0xf1, 0xc0, 0x08, 0x33, - 0x85, 0xbd, 0xe9, 0xf2, 0x65, 0x15, 0x58, 0xf8, 0x10, 0x18, 0xe6, 0xe3, - 0x2d, 0x07, 0x7e, 0x5d, 0x37, 0x1a, 0x2b, 0x38, 0xd4, 0x8d, 0x07, 0xc3, - 0x7a, 0x47, 0xd7, 0x96, 0x8e, 0x0e, 0x5e, 0xb3, 0x13, 0x8c, 0xc8, 0x2d, - 0x0b, 0xc9, 0x9e, 0x92, 0xfe, 0x81, 0x24, 0x94, 0xe1, 0x6f, 0x86, 0xb9, - 0xdb, 0x09, 0xaa, 0xf1, 0x3a, 0x75, 0x49, 0x00, 0xa3, 0xf8, 0x95, 0xdb, - 0x45, 0xad, 0xe1, 0x15, 0x2a, 0x61, 0x9d, 0x83, 0x25, 0xcd, 0xb9, 0x78, - 0x97, 0x00, 0x3f, 0xa1, 0x26, 0x83, 0x61, 0xaf, 0x29, 0xbf, 0x92, 0xde, - 0xbe, 0xf9, 0xbd, 0x91, 0x01, 0xf3, 0x97, 0xd7, 0x7f, 0xb5, 0xab, 0x51, - 0x18, 0x2b, 0x44, 0xb9, 0xf1, 0x73, 0x69, 0x3a, 0x89, 0xef, 0x4a, 0x90, - 0x3d, 0x28, 0x55, 0xfe, 0xc4, 0x3f, 0xbf, 0xa9, 0x6b, 0x25, 0x5a, 0xbc, - 0x9a, 0x56, 0x94, 0xb1, 0x81, 0x47, 0x0a, 0xb0, 0x89, 0x4d, 0x93, 0x89, - 0x83, 0xe5, 0x55, 0x39, 0xec, 0x4d, 0x6e, 0xd2, 0xb1, 0xce, 0xbe, 0x79, - 0xab, 0x49, 0xe7, 0xd5, 0x36, 0x43, 0x74, 0xb8, 0x68, 0x46, 0x3b, 0x09, - 0x83, 0xd1, 0x00, 0x00, 0xa3, 0x4e, 0xf9, 0x81, 0x00, 0xa7, 0x00, 0x86, - 0x00, 0x40, 0x96, 0xf0, 0x01, 0x17, 0x86, 0x00, 0x06, 0x70, 0x67, 0xbe, - 0x60, 0xf8, 0x00, 0x00, 0x00, 0x05, 0x05, 0x7c, 0x17, 0x3f, 0x4b, 0x06, - 0x6b, 0x82, 0xef, 0x6a, 0xef, 0x50, 0x9b, 0x12, 0x16, 0x71, 0x2d, 0x4f, - 0x23, 0xf4, 0xe9, 0x34, 0x4f, 0x5a, 0x6b, 0x04, 0xf5, 0x73, 0x96, 0x6c, - 0xc6, 0x70, 0x9c, 0xa9, 0x3c, 0xff, 0xf5, 0xe5, 0x36, 0x17, 0xd8, 0x4f, - 0x56, 0xd5, 0x99, 0xff, 0x62, 0x92, 0xef, 0x1d, 0x98, 0xab, 0x94, 0x50, - 0xfe, 0xdf, 0x70, 0xb7, 0x15, 0x40, 0x1f, 0x0a, 0x6b, 0x5e, 0xc4, 0xd8, - 0xba, 0x84, 0xb1, 0xe6, 0x44, 0x1e, 0xd5, 0x26, 0xc6, 0xde, 0xc5, 0xd4, - 0x68, 0xac, 0xb0, 0x37, 0xdb, 0x05, 0x02, 0x98, 0x08, 0xc3, 0xd2, 0xdc, - 0xc5, 0xe2, 0x5d, 0x9e, 0x13, 0xae, 0x56, 0x3d, 0xae, 0x21, 0xf8, 0x23, - 0xb6, 0x84, 0x5a, 0x0c, 0xf0, 0x79, 0x13, 0x9e, 0x24, 0x0e, 0x3d, 0xb6, - 0x2f, 0x4c, 0xc4, 0x30, 0x41, 0xa5, 0x56, 0x58, 0x47, 0x49, 0xe8, 0x42, - 0x74, 0xa5, 0xfb, 0x97, 0xfe, 0xfc, 0x2e, 0x8b, 0x07, 0x98, 0x36, 0x49, - 0x5d, 0x11, 0x88, 0xba, 0x23, 0xb4, 0x46, 0x8c, 0x42, 0xaf, 0xfb, 0xfb, - 0x8b, 0xcd, 0xd9, 0x90, 0xaa, 0xa0, 0x81, 0x37, 0x60, 0x02, 0xea, 0x5b, - 0xf2, 0xcb, 0xcb, 0x57, 0xaa, 0x07, 0x95, 0x06, 0x5e, 0xf6, 0xad, 0x34, - 0x53, 0xca, 0x3c, 0x73, 0xa9, 0x95, 0xa8, 0x4e, 0x27, 0xac, 0x26, 0x3a, - 0xed, 0xe5, 0x5e, 0xac, 0xdf, 0x91, 0xfc, 0x47, 0x1f, 0x33, 0xfd, 0xa9, - 0x3b, 0xe7, 0x21, 0x65, 0xb5, 0x90, 0xc7, 0xf0, 0xf6, 0x49, 0x8b, 0x0f, - 0xae, 0x4c, 0xf9, 0x5b, 0x68, 0x79, 0xd4, 0xb4, 0xff, 0x5d, 0x0e, 0xc1, - 0x71, 0x59, 0x6b, 0x9f, 0x27, 0x2e, 0x97, 0xf2, 0x08, 0xda, 0xe7, 0xe0, - 0xa3, 0x6a, 0x3f, 0xd6, 0x83, 0x5b, 0xc4, 0x88, 0x30, 0x5b, 0x17, 0xe7, - 0xbc, 0x78, 0x66, 0x57, 0x14, 0xcb, 0x8b, 0x73, 0x36, 0x73, 0xfe, 0xd4, - 0x13, 0x40, 0xcc, 0x18, 0xe9, 0xcb, 0x3b, 0x82, 0x0f, 0x50, 0xaa, 0x2f, - 0x45, 0x10, 0x15, 0x29, 0xb5, 0x52, 0xa7, 0xd5, 0x33, 0xcf, 0x72, 0xb2, - 0xbc, 0xf9, 0x15, 0xbb, 0xf1, 0xf2, 0x54, 0x3b, 0x5c, 0xc9, 0xd2, 0x94, - 0x4c, 0x7f, 0x2a, 0xd1, 0xd8, 0x70, 0xb6, 0x6b, 0x39, 0x5c, 0x91, 0x46, - 0x28, 0x17, 0xb1, 0x2b, 0x8e, 0xdc, 0xbb, 0xce, 0xc3, 0x8d, 0x72, 0x5a, - 0xb0, 0xb1, 0x6a, 0xa7, 0x84, 0x77, 0xed, 0xdd, 0x7e, 0x49, 0xce, 0x63, - 0x5d, 0xb5, 0x7c, 0xe9, 0x59, 0xbb, 0xfc, 0xe8, 0x9e, 0x68, 0x6b, 0x1b, - 0x8d, 0xaa, 0x33, 0xa1, 0xc0, 0x60, 0x03, 0xe4, 0xac, 0xf8, 0xa9, 0xe0, - 0x43, 0xc5, 0x66, 0x49, 0xe4, 0x83, 0x63, 0xc3, 0xe0, 0x78, 0xe1, 0xe6, - 0x1e, 0x47, 0xbd, 0xb0, 0xeb, 0x32, 0xa9, 0x7f, 0x8d, 0xdb, 0xe3, 0xce, - 0xab, 0x79, 0x71, 0x8e, 0x3b, 0x84, 0xc4, 0xcd, 0x33, 0x83, 0xa5, 0x20, - 0x0b, 0xeb, 0xcd, 0xcb, 0xb6, 0xf2, 0x50, 0x11, 0x5e, 0x68, 0x46, 0xa2, - 0x9a, 0x55, 0xc3, 0x0a, 0x7f, 0xe9, 0x49, 0x70, 0x77, 0xab, 0x81, 0x5b, - 0xe4, 0x9e, 0x95, 0x9a, 0xa8, 0xb3, 0xa4, 0x84, 0xcc, 0x02, 0x47, 0xfb, - 0x1b, 0x04, 0x5f, 0x73, 0x25, 0xea, 0xed, 0x54, 0xf5, 0x1b, 0x44, 0x54, - 0x4d, 0x68, 0x01, 0x4d, 0x7a, 0xc3, 0x13, 0x31, 0x85, 0xf5, 0x10, 0xca, - 0x57, 0xab, 0x36, 0x98, 0x53, 0xc2, 0x14, 0x45, 0x73, 0x4f, 0xb7, 0xac, - 0xd1, 0x6f, 0x3c, 0x1e, 0xa4, 0x92, 0x11, 0x2e, 0xe9, 0x0c, 0xa1, 0x25, - 0xf0, 0xab, 0x70, 0x00, 0xe6, 0x67, 0xf5, 0xbd, 0x52, 0x3d, 0x63, 0xa7, - 0xef, 0x36, 0x98, 0x9b, 0x04, 0xfc, 0x72, 0x73, 0x49, 0x2c, 0x38, 0x19, - 0xb9, 0xac, 0x71, 0x1d, 0xd9, 0x68, 0xd6, 0x0c, 0x68, 0xc3, 0xf3, 0xfa, - 0xad, 0xc4, 0xcd, 0x94, 0x30, 0x2f, 0x31, 0xfe, 0x7b, 0xfd, 0x7d, 0x34, - 0x79, 0xa9, 0x5f, 0x60, 0x28, 0xf4, 0xa3, 0xfc, 0xdc, 0x60, 0x1a, 0x82, - 0xbe, 0x6d, 0x26, 0xb9, 0x4b, 0x29, 0xec, 0x8c, 0x83, 0x5c, 0x06, 0x8a, - 0x5d, 0xd4, 0x34, 0xf0, 0x4e, 0x53, 0xe9, 0xfe, 0xdc, 0x93, 0x2a, 0xff, - 0x05, 0x4b, 0x06, 0x94, 0x59, 0xad, 0x5d, 0xdf, 0x87, 0x3e, 0x7d, 0xf2, - 0xb8, 0x96, 0x05, 0x3c, 0x07, 0xf9, 0xfa, 0xb5, 0x1f, 0x9c, 0x64, 0xbb, - 0x61, 0x8a, 0xea, 0x22, 0x3f, 0xbb, 0x1c, 0x6d, 0x1e, 0x00, 0xf5, 0x21, - 0x5a, 0x28, 0x1c, 0x06, 0xca, 0x18, 0x79, 0x46, 0x1c, 0x40, 0x7f, 0x08, - 0x50, 0x42, 0x08, 0x93, 0xa4, 0x75, 0x9e, 0x94, 0x44, 0x2b, 0x4b, 0x88, - 0x22, 0xc2, 0xd8, 0x58, 0xc3, 0x1b, 0x62, 0xf8, 0xc1, 0x22, 0x1e, 0xb0, - 0x7f, 0x3a, 0x2d, 0xfa, 0x74, 0x2c, 0xc7, 0x3f, 0x1c, 0x53, 0x89, 0x28, - 0xd2, 0x3c, 0xa6, 0x0a, 0x65, 0x7b, 0x3a, 0x01, 0x5c, 0xfc, 0x2f, 0x51, - 0xaf, 0x67, 0x61, 0x7a, 0xe0, 0x05, 0xfe, 0xfc, 0x7f, 0x32, 0x43, 0xf2, - 0xc6, 0x60, 0xb2, 0xcc, 0xbc, 0xc0, 0xd8, 0xdc, 0xc5, 0xb8, 0xc2, 0x91, - 0x9e, 0x10, 0x26, 0x76, 0x8c, 0xbc, 0xa9, 0xd9, 0x3a, 0x7a, 0xf0, 0xe6, - 0xd1, 0x3d, 0x0e, 0x31, 0x3d, 0x57, 0xe2, 0x18, 0x02, 0x24, 0xe6, 0xd2, - 0x27, 0x94, 0x37, 0x56, 0x81, 0xf3, 0x13, 0x39, 0xc6, 0x51, 0x02, 0xc5, - 0x8b, 0xdd, 0xae, 0xcb, 0x8b, 0x08, 0x6a, 0x71, 0xb1, 0x25, 0x1d, 0xdb, - 0x6c, 0x9b, 0x95, 0x4a, 0x8e, 0x9f, 0x6c, 0x0a, 0xe4, 0x9a, 0xb3, 0x3d, - 0x6f, 0xf4, 0x51, 0x88, 0xc1, 0x6a, 0x0a, 0xdb, 0xd1, 0xae, 0xd6, 0x68, - 0xe2, 0xf3, 0x17, 0x5c, 0xfa, 0xe8, 0xa3, 0x8a, 0x5a, 0xde, 0xb1, 0x28, - 0x27, 0xc6, 0xec, 0xa6, 0xa4, 0xc1, 0x85, 0x42, 0xa7, 0x1d, 0x61, 0xca, - 0x31, 0x3c, 0x62, 0x63, 0xdc, 0x96, 0x1b, 0x9f, 0x82, 0xe7, 0x41, 0x63, - 0x11, 0x1a, 0x56, 0x1c, 0x8d, 0x65, 0xd7, 0xe6, 0x50, 0xb9, 0x74, 0x12, - 0xd6, 0xa9, 0xca, 0x75, 0x36, 0x98, 0x17, 0x43, 0x1d, 0x0f, 0x64, 0x7f, - 0x9e, 0x98, 0xc8, 0x21, 0xd7, 0xe4, 0xec, 0xc7, 0xec, 0x88, 0x77, 0x67, - 0xfa, 0x0f, 0xc5, 0x27, 0x09, 0xed, 0x73, 0x64, 0x2c, 0x15, 0x4b, 0xa4, - 0x96, 0x7e, 0x2a, 0x33, 0xad, 0x5d, 0xe5, 0xf1, 0xf9, 0x96, 0xbf, 0xc2, - 0x63, 0x3b, 0x7c, 0xb9, 0x0a, 0xc7, 0xf4, 0x48, 0x6f, 0x42, 0xc8, 0xd1, - 0xf1, 0xe6, 0x54, 0xc0, 0xe2, 0x0b, 0xd2, 0x54, 0x88, 0x8e, 0xba, 0x0d, - 0x26, 0xfe, 0xb1, 0x5f, 0xc1, 0xa9, 0x33, 0x00, 0xef, 0x1b, 0xe3, 0x5f, - 0x38, 0x3b, 0xae, 0x17, 0x22, 0xe7, 0x79, 0xce, 0x7c, 0x8b, 0x36, 0x72, - 0x03, 0x95, 0x96, 0x1b, 0x8b, 0x6b, 0x21, 0xbb, 0x5e, 0x59, 0x5b, 0x05, - 0xb1, 0x00, 0xa9, 0x65, 0x30, 0xaf, 0x22, 0x93, 0x4e, 0x7d, 0x76, 0x96, - 0xb9, 0xdf, 0x86, 0x91, 0x4d, 0x8d, 0x8a, 0xb6, 0x9f, 0x8b, 0x35, 0xdd, - 0xab, 0xf5, 0x91, 0xf3, 0xdc, 0x1a, 0x9b, 0x6d, 0xfb, 0x9f, 0x4f, 0xdf, - 0x45, 0xbc, 0xfe, 0x0b, 0x2a, 0x20, 0xb9, 0x22, 0xbc, 0x99, 0x00, 0x05, - 0xc3, 0xd4, 0x40, 0x62, 0xc8, 0x4f, 0xb0, 0x0e, 0x69, 0xb7, 0x52, 0xcf, - 0x5a, 0x14, 0xa0, 0x81, 0xe0, 0x96, 0xd5, 0x98, 0x57, 0x00, 0x13, 0x80, - 0x98, 0x70, 0xa4, 0x1a, 0x0b, 0x46, 0x33, 0x02, 0xfa, 0x06, 0x20, 0x98, - 0x85, 0x3c, 0xda, 0x05, 0x2c, 0xae, 0xa5, 0xc0, 0xa6, 0x5e, 0x87, 0xe9, - 0xb1, 0xeb, 0xff, 0x74, 0xe2, 0xfc, 0xc5, 0xcc, 0x67, 0x49, 0x91, 0xb5, - 0x7e, 0xdd, 0x1f, 0xfb, 0x3b, 0x78, 0xa1, 0x40, 0x6c, 0x43, 0xe7, 0x97, - 0x00, 0x25, 0xb7, 0x92, 0x34, 0x4f, 0x49, 0x8a, 0xf8, 0x9f, 0x3e, 0x4d, - 0x8f, 0xa3, 0x7d, 0xe4, 0x66, 0xfd, 0x30, 0x4d, 0xe7, 0xc0, 0xf5, 0xbc, - 0xf3, 0x1f, 0x3e, 0x0b, 0x8f, 0x9b, 0x91, 0xc2, 0x4c, 0x8c, 0x8e, 0x27, - 0x11, 0x53, 0xcd, 0x0d, 0xdb, 0x48, 0xf3, 0x47, 0xdc, 0x23, 0xfc, 0xfc, - 0xdf, 0x2d, 0x75, 0xf4, 0xa4, 0x00, 0x11, 0x22, 0x83, 0x22, 0x64, 0x90, - 0xb5, 0xa5, 0x69, 0xb4, 0x26, 0x8b, 0xea, 0x4d, 0x5c, 0xb9, 0x5b, 0xb3, - 0xb0, 0x68, 0x6b, 0x6e, 0x28, 0x3c, 0xb8, 0x4f, 0xa0, 0x67, 0xfd, 0x10, - 0xc2, 0xe4, 0xe9, 0x3b, 0x06, 0x48, 0x01, 0x70, 0x67, 0xde, 0x7b, 0x7d, - 0x0e, 0xdf, 0x50, 0x2a, 0x1f, 0x6e, 0x0a, 0xe2, 0x89, 0x68, 0xf1, 0x45, - 0x90, 0xa3, 0xd1, 0x27, 0xe6, 0x96, 0xa5, 0x92, 0xa2, 0xf2, 0x87, 0x06, - 0x80, 0x85, 0xd5, 0x76, 0x46, 0x1b, 0x2f, 0x08, 0x75, 0x4e, 0x6d, 0x43, - 0x5c, 0x78, 0x17, 0x8e, 0x9d, 0x8c, 0xc3, 0xe8, 0x10, 0xcd, 0x2a, 0x88, - 0xfe, 0x6b, 0xbc, 0x61, 0x23, 0x35, 0x68, 0x82, 0x6c, 0x45, 0x7a, 0x38, - 0x51, 0xf8, 0x3e, 0xff, 0xd4, 0xc2, 0x80, 0x48, 0x2c, 0x6f, 0x03, 0xe9, - 0x85, 0x21, 0x04, 0x9b, 0x07, 0x61, 0x6c, 0xa4, 0x6f, 0xa2, 0xdd, 0x0f, - 0x4a, 0x61, 0x78, 0xcd, 0x70, 0xac, 0x47, 0xaf, 0x1b, 0xc0, 0xd9, 0x72, - 0x2a, 0xd6, 0xe4, 0xd6, 0x84, 0xec, 0xed, 0xc9, 0xf6, 0xba, 0x70, 0xaa, - 0xf8, 0xa1, 0xb9, 0x8b, 0x13, 0xcc, 0x50, 0x5f, 0x34, 0x57, 0xc2, 0xc0, - 0x0a, 0xd8, 0x39, 0xe4, 0xe0, 0xa8, 0xe8, 0x07, 0x92, 0x09, 0x48, 0xed, - 0xeb, 0x50, 0x48, 0x02, 0xe5, 0xde, 0x03, 0x39, 0x5f, 0x43, 0xff, 0xc5, - 0x22, 0x1c, 0xb9, 0x7a, 0xd9, 0x97, 0x27, 0x5a, 0x18, 0xe9, 0x02, 0xb3, - 0xd9, 0x6e, 0x52, 0x8e, 0xa1, 0x0f, 0xb4, 0x00, 0x00, 0x00, 0x01, 0x9f, - 0x7f, 0xa4, 0x48, 0xd9, 0xf2, 0x9b, 0x10, 0x81, 0xcf, 0x2e, 0x40, 0x8e, - 0x6d, 0x93, 0xaf, 0x84, 0xb5, 0x23, 0xef, 0x2a, 0x4c, 0x94, 0x69, 0x4c, - 0x10, 0x91, 0x6b, 0xb5, 0x0a, 0x6b, 0xe3, 0xe9, 0xcd, 0x5d, 0xad, 0x88, - 0x19, 0x4e, 0x0a, 0x52, 0xab, 0x62, 0x70, 0x28, 0x68, 0xa2, 0x28, 0xe1, - 0x62, 0xc3, 0x1c, 0x44, 0x26, 0x6a, 0x6c, 0xba, 0x0c, 0x95, 0xea, 0x99, - 0xc8, 0x94, 0x1f, 0xb2, 0x8b, 0xf2, 0xe7, 0x53, 0xca, 0xbc, 0x47, 0x56, - 0xe7, 0x88, 0xfb, 0x8b, 0xc7, 0xf1, 0xbd, 0x0a, 0xee, 0xc2, 0xc7, 0xf2, - 0x22, 0x6f, 0x44, 0x7c, 0x25, 0x6a, 0xda, 0xe0, 0x32, 0xc7, 0x2b, 0x99, - 0x57, 0xe5, 0xb2, 0xa8, 0x3d, 0x89, 0x32, 0xc0, 0xab, 0x99, 0xd5, 0xc1, - 0xff, 0xfd, 0x70, 0x57, 0x61, 0x68, 0x20, 0xb6, 0x07, 0xe3, 0x9a, 0x86, - 0xd5, 0x80, 0xb8, 0x6a, 0xc3, 0xf0, 0xf3, 0x90, 0x05, 0x46, 0x29, 0x5e, - 0x13, 0xae, 0x0c, 0x99, 0xfe, 0x51, 0x10, 0xb6, 0xf6, 0x03, 0x7d, 0xa7, - 0x5c, 0xf9, 0xf8, 0x0a, 0x37, 0x12, 0xbc, 0xf2, 0x5f, 0x3d, 0x66, 0xea, - 0x10, 0xfb, 0xd6, 0x5f, 0x43, 0x29, 0x91, 0xa8, 0xa9, 0x4c, 0x5e, 0xa3, - 0x1d, 0x2c, 0x19, 0xb0, 0xab, 0x4b, 0x17, 0xf9, 0x0a, 0x5a, 0x6a, 0x46, - 0x36, 0x6f, 0xfc, 0x06, 0x7d, 0xb3, 0x88, 0x4c, 0xc8, 0x14, 0xad, 0xc2, - 0xea, 0x32, 0x35, 0x13, 0xa7, 0x6a, 0xef, 0x09, 0x4e, 0x05, 0xf4, 0x7d, - 0xda, 0x32, 0x7c, 0x82, 0x4a, 0x9c, 0x02, 0x65, 0xd6, 0xf3, 0x3b, 0x7e, - 0xe4, 0x4a, 0xe9, 0x18, 0x9a, 0xde, 0x7e, 0x8a, 0x2c, 0x00, 0xf5, 0x58, - 0x4f, 0x61, 0xb0, 0x76, 0x98, 0x00, 0x5d, 0x2e, 0x91, 0x16, 0xf4, 0x2e, - 0x60, 0x83, 0x32, 0xd6, 0x28, 0x7b, 0xf8, 0x12, 0x72, 0x8c, 0xdd, 0xe4, - 0x56, 0x71, 0xb5, 0xdb, 0x5c, 0x88, 0x92, 0xe0, 0xbf, 0x5d, 0xd4, 0x9f, - 0xc5, 0x7e, 0x17, 0x92, 0x00, 0x38, 0xa6, 0xe0, 0x0d, 0xb1, 0x9f, 0xa9, - 0xbb, 0xad, 0x01, 0x25, 0xb6, 0x8d, 0x40, 0x87, 0x2f, 0x42, 0x24, 0xa2, - 0x42, 0xd2, 0x5f, 0xe0, 0xff, 0x49, 0x32, 0x74, 0x38, 0xea, 0x5c, 0x68, - 0x76, 0x45, 0xd9, 0x94, 0x93, 0xd4, 0x67, 0xd0, 0x21, 0x09, 0xe0, 0xb2, - 0x19, 0x1c, 0xa3, 0x04, 0x63, 0xec, 0x0d, 0x36, 0x60, 0xf3, 0x41, 0xce, - 0xc1, 0xc1, 0x19, 0x14, 0xd3, 0x8d, 0xc9, 0x00, 0xeb, 0xa6, 0xcf, 0x36, - 0xe2, 0xad, 0xa5, 0x73, 0x0b, 0x2a, 0x79, 0x14, 0x8c, 0x7d, 0xd8, 0x05, - 0x29, 0xe0, 0xd8, 0x2a, 0xbb, 0x29, 0xe3, 0x12, 0xbe, 0x1d, 0xbd, 0x6c, - 0xd4, 0x2a, 0x76, 0xc3, 0xb1, 0xfb, 0x5e, 0x10, 0x12, 0xf5, 0xe1, 0xb1, - 0xd5, 0x9b, 0x39, 0x35, 0xc8, 0x12, 0x0b, 0x92, 0xe0, 0x8e, 0x8c, 0x60, - 0x5d, 0x6c, 0x3f, 0x2c, 0xd5, 0x01, 0xb9, 0x83, 0x2f, 0x7f, 0xd0, 0xb1, - 0x67, 0xe6, 0xfc, 0x2c, 0xf9, 0x77, 0x32, 0x33, 0x2d, 0x08, 0xff, 0x4f, - 0xce, 0x61, 0x68, 0x2c, 0x02, 0x5e, 0x80, 0x00, 0x00, 0x00, 0xe9, 0x7f, - 0xe6, 0x9f, 0xae, 0x81, 0xa6, 0xd1, 0x24, 0xbd, 0x43, 0xb9, 0x42, 0x20, - 0x5b, 0xcc, 0xb7, 0x49, 0x69, 0x76, 0x42, 0x50, 0xb6, 0x8a, 0x7f, 0x31, - 0xc8, 0x15, 0xc3, 0x56, 0x73, 0xf6, 0x74, 0x1f, 0x51, 0xba, 0x34, 0x36, - 0xf1, 0xe7, 0xfa, 0xdf, 0x86, 0x59, 0x85, 0x09, 0x72, 0x58, 0x33, 0xf4, - 0x59, 0x3d, 0x4b, 0x2f, 0x76, 0x94, 0x20, 0x8a, 0x92, 0xb8, 0xf7, 0x3a, - 0x70, 0x1b, 0xb7, 0xbb, 0xfb, 0x12, 0xdb, 0x6b, 0x98, 0x5d, 0x76, 0xe8, - 0xf4, 0x1b, 0xff, 0x61, 0x10, 0xb1, 0x12, 0x17, 0x59, 0xbe, 0xe7, 0x7a, - 0xb6, 0x6b, 0x91, 0x61, 0x7c, 0x56, 0x93, 0xb6, 0xdf, 0xa2, 0x1b, 0x92, - 0xb7, 0x85, 0xac, 0x63, 0x76, 0x38, 0x13, 0x89, 0x88, 0xf6, 0x6d, 0xc0, - 0x9e, 0xbf, 0x09, 0x3e, 0x37, 0x17, 0xaa, 0x2c, 0x52, 0xcb, 0xc1, 0x73, - 0xca, 0xa7, 0xf8, 0xc5, 0x44, 0x0e, 0x82, 0x0f, 0xa0, 0xcc, 0xcc, 0x3f, - 0xb0, 0xae, 0x21, 0xc6, 0xc2, 0xdd, 0x20, 0x8f, 0x06, 0x8e, 0xee, 0x04, - 0xea, 0x55, 0x1e, 0xab, 0xa3, 0xf9, 0x38, 0xc7, 0x5a, 0x74, 0x35, 0xc0, - 0x9b, 0xc5, 0x85, 0x24, 0x81, 0x5a, 0x8b, 0x22, 0x7f, 0xc7, 0xd7, 0x3b, - 0x96, 0x3c, 0xf2, 0x89, 0x39, 0x84, 0x92, 0x87, 0xe6, 0x10, 0x78, 0x57, - 0xb3, 0x5c, 0xe9, 0x46, 0xa4, 0xb0, 0xb4, 0x83, 0x64, 0x87, 0x9b, 0xd2, - 0x67, 0x66, 0x87, 0x86, 0xe6, 0x0d, 0x14, 0xa8, 0x18, 0x15, 0x42, 0xad, - 0x6c, 0xf3, 0x98, 0x4c, 0x19, 0x11, 0xbc, 0x50, 0x8d, 0x96, 0x48, 0xee, - 0xe1, 0x16, 0x7d, 0xf0, 0x79, 0xc8, 0xa0, 0x79, 0x2e, 0x01, 0x02, 0x4e, - 0x7f, 0x56, 0xc2, 0x00, 0x7f, 0x6b, 0x82, 0x89, 0xf7, 0x05, 0x28, 0x2f, - 0x91, 0xb1, 0x70, 0x25, 0xf5, 0xaa, 0x06, 0xd5, 0xd5, 0x97, 0xa9, 0x76, - 0x0b, 0x35, 0x61, 0x95, 0xed, 0x08, 0xc7, 0x43, 0x69, 0xda, 0x89, 0x6e, - 0x83, 0x16, 0xdc, 0x64, 0xcf, 0x93, 0x6d, 0x08, 0x11, 0xd1, 0x3e, 0xed, - 0xdd, 0xb7, 0x8e, 0xd0, 0xfd, 0xed, 0x8e, 0x3d, 0x2c, 0x3c, 0x7a, 0x0c, - 0x0d, 0x1e, 0x87, 0xe0, 0x7e, 0x33, 0xcf, 0xbb, 0x5d, 0x8b, 0x79, 0x29, - 0xad, 0xab, 0x7e, 0x86, 0xaa, 0x04, 0x0e, 0xa0, 0x68, 0x80, 0x9c, 0xfe, - 0x46, 0xd4, 0xe7, 0x26, 0xe3, 0x52, 0xf6, 0x3e, 0xc6, 0xe7, 0x86, 0x0d, - 0x14, 0x56, 0xf7, 0xbd, 0xfe, 0x04, 0x2c, 0x66, 0xc5, 0x7d, 0xd8, 0xad, - 0xec, 0xbc, 0xf7, 0x0e, 0x2e, 0x6f, 0x06, 0x20, 0x2f, 0xc4, 0x22, 0xfa, - 0x89, 0x3c, 0x7a, 0xa3, 0x31, 0xa1, 0xa8, 0x8b, 0xcc, 0x53, 0xd4, 0x5c, - 0x1e, 0x9e, 0xbe, 0x91, 0x7b, 0x26, 0x42, 0x65, 0xfa, 0xbb, 0x71, 0xb8, - 0x9e, 0xc8, 0xb6, 0x5f, 0xb2, 0x43, 0xef, 0x2b, 0xa6, 0x36, 0xf3, 0x76, - 0x94, 0x6c, 0x4d, 0x03, 0x32, 0x1d, 0x3d, 0x8c, 0x88, 0x8b, 0x59, 0x75, - 0xb3, 0xca, 0x07, 0xeb, 0x46, 0x3f, 0x34, 0x03, 0xe3, 0xcb, 0xdf, 0xb2, - 0x3c, 0x2c, 0x42, 0x52, 0xd7, 0x8b, 0xa5, 0x32, 0x7a, 0x34, 0x88, 0x30, - 0xa8, 0x99, 0x40, 0x94, 0xcd, 0x98, 0x24, 0xf3, 0xe6, 0xaf, 0x27, 0x7c, - 0xe6, 0x45, 0x26, 0x4b, 0xc1, 0x3d, 0xda, 0x47, 0xad, 0xc0, 0x92, 0xf1, - 0xcf, 0x13, 0x37, 0x9d, 0xc0, 0xa6, 0xea, 0x7d, 0xc4, 0x8b, 0x6e, 0xbd, - 0x10, 0xa8, 0xcb, 0x2c, 0x8d, 0xac, 0xb7, 0xbf, 0xc7, 0x27, 0xb6, 0x67, - 0x9d, 0x01, 0x3d, 0xb4, 0xef, 0x6d, 0x10, 0xb1, 0xf8, 0x86, 0xba, 0x5c, - 0xae, 0x06, 0x35, 0x4b, 0x99, 0xe0, 0x4d, 0xf7, 0x07, 0x63, 0x07, 0x8d, - 0xf3, 0xa0, 0xb8, 0x06, 0x6b, 0xe4, 0xb0, 0xfe, 0x79, 0xa4, 0x2d, 0x28, - 0x6e, 0xd3, 0x9e, 0x7e, 0x92, 0xd7, 0x69, 0x0a, 0x6e, 0xb5, 0x12, 0xb7, - 0x79, 0x13, 0xd8, 0xf1, 0x82, 0x11, 0xf6, 0xe0, 0xb8, 0x05, 0x13, 0xf8, - 0x8b, 0xcf, 0xb3, 0xab, 0x17, 0xfe, 0xf4, 0x22, 0x1e, 0xbd, 0x88, 0x4e, - 0x95, 0x7d, 0x05, 0xf4, 0x2a, 0xba, 0xc9, 0x22, 0xaa, 0xb8, 0x96, 0x19, - 0x4b, 0xed, 0x2b, 0xfc, 0x21, 0x3f, 0xf8, 0x9c, 0xaf, 0xb4, 0x31, 0x3e, - 0xa0, 0x45, 0x3c, 0xce, 0xde, 0x94, 0x56, 0xc7, 0xd8, 0x24, 0xfc, 0xb7, - 0x22, 0x74, 0x62, 0x20, 0x3a, 0x47, 0xae, 0xdc, 0x05, 0x64, 0x27, 0x4b, - 0xab, 0xb5, 0xf1, 0x18, 0x43, 0xa4, 0x6c, 0x00, 0xdc, 0x61, 0xb6, 0xeb, - 0x14, 0x5e, 0xaf, 0xe8, 0xd2, 0x43, 0x67, 0x88, 0xc9, 0xb7, 0x1e, 0xd8, - 0x3b, 0x8a, 0xe1, 0x4c, 0xa5, 0x03, 0x6c, 0x8c, 0x38, 0xa8, 0x40, 0xe0, - 0xe9, 0xf8, 0x42, 0x58, 0x21, 0x7c, 0x85, 0x5d, 0x82, 0x9a, 0x9f, 0x11, - 0xf4, 0x72, 0x05, 0xe7, 0x6e, 0x04, 0x25, 0x18, 0x84, 0xf3, 0x3a, 0x1b, - 0xa0, 0x18, 0xe4, 0x5a, 0x58, 0xb7, 0xd2, 0x9b, 0xd3, 0xb9, 0x0e, 0xb8, - 0x93, 0x86, 0x91, 0x29, 0xa4, 0x1b, 0x60, 0xa7, 0x2d, 0x0d, 0x1d, 0xea, - 0x08, 0x90, 0x8a, 0x98, 0x02, 0xf8, 0x1b, 0x06, 0xb0, 0xef, 0x88, 0xbb, - 0xc4, 0xef, 0xfb, 0xbc, 0xf4, 0x74, 0x41, 0x28, 0xd0, 0x64, 0xdb, 0x47, - 0x2e, 0xa5, 0xfe, 0x01, 0x15, 0x4c, 0xb0, 0x0d, 0x80, 0x98, 0x1b, 0x17, - 0x8e, 0x50, 0xaf, 0x12, 0x5b, 0xd9, 0xf2, 0x41, 0xb4, 0x84, 0x33, 0x74, - 0xe9, 0x86, 0xf9, 0xb7, 0xae, 0x69, 0x7e, 0x52, 0x91, 0x27, 0xd3, 0xa5, - 0x85, 0x3c, 0xec, 0x2d, 0x39, 0x8f, 0xd8, 0xbb, 0x31, 0x42, 0xa1, 0xb6, - 0x27, 0x28, 0x4d, 0x72, 0x74, 0xbe, 0xca, 0xf5, 0xd8, 0xce, 0x42, 0x72, - 0x26, 0xcb, 0x68, 0x78, 0x1f, 0x35, 0xcc, 0x2d, 0xac, 0xb4, 0xbb, 0x7a, - 0xb6, 0x1f, 0x51, 0x09, 0x0e, 0xe4, 0xce, 0x92, 0x70, 0x36, 0x54, 0xa7, - 0x7f, 0x24, 0x60, 0xe8, 0x44, 0xcc, 0x19, 0x4e, 0x2d, 0xd7, 0x8d, 0x84, - 0x73, 0xd6, 0xbd, 0x0e, 0x3d, 0xea, 0x45, 0xbc, 0x70, 0xcb, 0x30, 0x28, - 0x83, 0x5d, 0x01, 0x9a, 0xe1, 0xb0, 0x21, 0x66, 0x88, 0xe7, 0xad, 0x46, - 0xbd, 0x1c, 0x50, 0xb2, 0x39, 0x08, 0x7c, 0x1d, 0x8d, 0xca, 0xcd, 0x9d, - 0xf9, 0x63, 0xc2, 0x0b, 0xdf, 0x01, 0xb0, 0x58, 0x49, 0xb9, 0x24, 0xe3, - 0xe9, 0x3d, 0xa3, 0xfc, 0x8a, 0x90, 0x9c, 0xbd, 0xe2, 0x0c, 0x74, 0xc3, - 0x12, 0x52, 0x6a, 0xa4, 0x67, 0xb2, 0x9b, 0xda, 0x81, 0xa1, 0x25, 0x53, - 0x0d, 0x87, 0xec, 0x1b, 0x44, 0x80, 0xe5, 0x94, 0x2c, 0xb9, 0xc4, 0xfc, - 0xf3, 0xa5, 0xdc, 0xb3, 0x88, 0x0f, 0x27, 0xc1, 0x8d, 0xe3, 0xfb, 0x4e, - 0x76, 0x57, 0xfd, 0x28, 0x02, 0x2b, 0x9a, 0x0e, 0x39, 0x78, 0x34, 0x34, - 0x10, 0xe8, 0x35, 0x07, 0x28, 0x69, 0xdc, 0x25, 0xa7, 0x3a, 0xa2, 0xa5, - 0x69, 0xe6, 0xaf, 0xad, 0x69, 0xbf, 0x07, 0x48, 0x48, 0xc9, 0x2b, 0xf0, - 0xcc, 0x7d, 0x60, 0x86, 0xa7, 0x56, 0xe2, 0x18, 0x23, 0x6e, 0x8f, 0xa4, - 0x4a, 0xf4, 0x8b, 0x1c, 0x16, 0xf8, 0x30, 0x60, 0xd5, 0xc4, 0x93, 0x66, - 0x31, 0x11, 0x2d, 0xa6, 0x8d, 0x2f, 0x34, 0x38, 0x66, 0xc2, 0x5e, 0xca, - 0xbd, 0x79, 0xeb, 0x42, 0xbb, 0x20, 0x88, 0x89, 0xcb, 0xd5, 0xbe, 0x22, - 0xa9, 0x31, 0x0e, 0x21, 0x9d, 0xd6, 0x27, 0x3b, 0xab, 0xa1, 0xf7, 0xd7, - 0xf3, 0x6a, 0x74, 0xe5, 0xab, 0xad, 0xd3, 0xc9, 0xc5, 0x85, 0x5a, 0x1d, - 0xd1, 0xc3, 0xb5, 0x85, 0xc2, 0xde, 0x51, 0x3b, 0x0b, 0x4a, 0x6e, 0x2b, - 0x35, 0x5a, 0xe5, 0xa6, 0x3a, 0xce, 0xe8, 0x77, 0x08, 0x91, 0x26, 0xe1, - 0x68, 0xa8, 0xf4, 0x01, 0x49, 0x6a, 0xca, 0x05, 0x19, 0x18, 0x2a, 0x55, - 0x7e, 0x56, 0x03, 0xd6, 0x6b, 0x07, 0xa4, 0xa2, 0x96, 0x4f, 0x7f, 0x73, - 0x89, 0x32, 0x09, 0xba, 0x76, 0xfc, 0x40, 0x7b, 0x77, 0x28, 0x8f, 0x81, - 0x84, 0x1d, 0x5a, 0xb3, 0x8a, 0xc3, 0xb2, 0x30, 0x69, 0xcf, 0xab, 0x1c, - 0x04, 0xcb, 0x79, 0x10, 0x3f, 0x6b, 0x42, 0xc0, 0xcb, 0x36, 0x96, 0xe6, - 0xde, 0xc2, 0x59, 0xca, 0x52, 0xdc, 0x41, 0x3d, 0xaf, 0xcd, 0xea, 0x83, - 0xa3, 0x9f, 0x25, 0xab, 0x19, 0x26, 0xef, 0x69, 0xb9, 0xd9, 0x1a, 0xfa, - 0x28, 0x61, 0x27, 0x07, 0x81, 0xf9, 0xc1, 0xc4, 0xf6, 0x34, 0x98, 0x72, - 0x11, 0x11, 0xf6, 0x95, 0x0c, 0x82, 0x02, 0xaa, 0xbb, 0xc2, 0xec, 0xcb, - 0x49, 0x8f, 0xa0, 0x22, 0x00, 0xf0, 0x96, 0xb5, 0xa3, 0x7b, 0xd1, 0x6a, - 0x91, 0x88, 0x88, 0x7a, 0x41, 0xdc, 0xb4, 0x1c, 0x37, 0xe6, 0x67, 0x78, - 0x8d, 0x30, 0xd1, 0xe2, 0x97, 0x5a, 0xab, 0xdc, 0xad, 0xdf, 0x84, 0x72, - 0x78, 0xfa, 0xed, 0x40, 0x5d, 0x16, 0x97, 0x6a, 0x17, 0xf2, 0x03, 0x6c, - 0x5b, 0xdc, 0x0b, 0x21, 0x35, 0x0d, 0x17, 0x2a, 0x72, 0x3d, 0x1b, 0xd5, - 0x9a, 0x5d, 0x97, 0x93, 0xe2, 0x84, 0x35, 0x91, 0xc3, 0xde, 0xa3, 0xb8, - 0x1f, 0x51, 0xf7, 0x15, 0xc9, 0x32, 0xe6, 0x47, 0x20, 0x15, 0x07, 0x2d, - 0x15, 0xb3, 0xce, 0xea, 0x19, 0xfa, 0xcc, 0x4e, 0xfa, 0x34, 0x0c, 0xcb, - 0x79, 0xb1, 0xbd, 0xf6, 0xc6, 0xac, 0x7b, 0x46, 0xc5, 0xfb, 0xb6, 0x5d, - 0x67, 0x99, 0x83, 0xa1, 0xba, 0x32, 0xa9, 0x58, 0x99, 0xb8, 0xb7, 0xe0, - 0x5e, 0x2a, 0xf9, 0x77, 0xc0, 0x44, 0x81, 0x5b, 0x97, 0x16, 0x49, 0x15, - 0x18, 0x20, 0x92, 0x5c, 0x4e, 0xeb, 0xf0, 0xc9, 0x39, 0x0a, 0x9a, 0x59, - 0xd3, 0x49, 0x25, 0x2a, 0xf1, 0xe9, 0x2f, 0x4a, 0x65, 0x40, 0x77, 0x1b, - 0x67, 0xb0, 0xff, 0x4e, 0xb9, 0x1e, 0x86, 0xac, 0x55, 0xc0, 0x1e, 0xeb, - 0xaf, 0x56, 0x4d, 0x8a, 0xc0, 0xe1, 0xb4, 0x77, 0x13, 0xc4, 0x98, 0x0e, - 0x3c, 0xb9, 0x8c, 0x2d, 0xe0, 0x3d, 0x23, 0xc7, 0x3b, 0x30, 0x7b, 0xc7, - 0xc2, 0x65, 0xd5, 0x8d, 0x0a, 0x28, 0xc1, 0x5f, 0xf4, 0x28, 0x3a, 0x70, - 0x57, 0xfd, 0xbb, 0x7c, 0x7b, 0x67, 0x25, 0x71, 0xa6, 0x36, 0x93, 0xff, - 0xef, 0xcd, 0x51, 0x1a, 0xfc, 0xc9, 0x87, 0x29, 0x11, 0xce, 0x75, 0x54, - 0x28, 0x50, 0xe2, 0x31, 0x9a, 0x87, 0x9a, 0xf0, 0x29, 0x6a, 0x3a, 0x19, - 0x89, 0xe1, 0x27, 0xd1, 0x70, 0x72, 0x1d, 0x14, 0x71, 0x6d, 0x5b, 0xad, - 0x58, 0xc3, 0xb1, 0xfe, 0xbd, 0x72, 0x11, 0x48, 0x0b, 0x06, 0xe8, 0x74, - 0x82, 0x1f, 0xd9, 0x96, 0xa6, 0x2c, 0x7d, 0x9f, 0x21, 0x3d, 0xcd, 0x57, - 0x5c, 0x5a, 0x78, 0xfd, 0x49, 0xd9, 0xf1, 0xdb, 0x31, 0xb8, 0xd8, 0xaa, - 0x73, 0x51, 0xba, 0x51, 0xcf, 0x22, 0x66, 0x78, 0x71, 0xb8, 0x11, 0xd2, - 0x7b, 0xd7, 0x84, 0x7e, 0x35, 0xe9, 0x2a, 0x40, 0x74, 0xb8, 0x3f, 0xda, - 0xe3, 0xf2, 0x5c, 0x00, 0x29, 0xb9, 0x60, 0xb8, 0x15, 0x50, 0xab, 0x08, - 0xa5, 0x76, 0x20, 0xb3, 0x6d, 0x93, 0x2e, 0x58, 0x9f, 0xc8, 0x51, 0xf4, - 0xba, 0x96, 0xc0, 0x3c, 0x39, 0x4d, 0xff, 0x46, 0x86, 0xc0, 0xdb, 0xd3, - 0x21, 0xa2, 0x1c, 0x7b, 0xce, 0x2e, 0x4a, 0x8c, 0x3b, 0x59, 0x81, 0xfb, - 0xa5, 0xcc, 0xd8, 0xe9, 0x07, 0x6b, 0xc1, 0xcc, 0x23, 0xbb, 0xfc, 0x8e, - 0x5c, 0xb8, 0x44, 0x68, 0x36, 0x34, 0x9c, 0x44, 0xd2, 0x9e, 0x0f, 0x53, - 0xc9, 0xfe, 0x41, 0xba, 0x55, 0x49, 0xad, 0x8e, 0x5b, 0x82, 0x9d, 0xcd, - 0xc4, 0xbc, 0x16, 0xa2, 0x0d, 0xfc, 0xaf, 0x6f, 0xe5, 0xb3, 0x63, 0x7c, - 0x47, 0x79, 0x07, 0x59, 0x8b, 0xfe, 0xf3, 0x00, 0x07, 0xf0, 0x50, 0x57, - 0xa6, 0xd7, 0xb8, 0xdd, 0x46, 0xb6, 0xa3, 0x80, 0x3b, 0x36, 0xbd, 0xaa, - 0xb3, 0x5b, 0xa0, 0xee, 0x02, 0x19, 0xf4, 0xd7, 0x7e, 0xaf, 0xbb, 0xa1, - 0xc4, 0xb3, 0x0f, 0xab, 0x57, 0x89, 0x66, 0x82, 0x4f, 0xdc, 0x15, 0xa0, - 0xf2, 0xe2, 0x6a, 0x49, 0x41, 0x86, 0xe4, 0x50, 0x06, 0xda, 0x49, 0xa2, - 0x06, 0xca, 0xf1, 0x2d, 0xbb, 0x8b, 0x83, 0xb7, 0x0e, 0xdd, 0x44, 0xd4, - 0xe7, 0xf2, 0xe6, 0x4e, 0xac, 0x8e, 0x61, 0xa3, 0x8a, 0x01, 0xba, 0x7b, - 0x88, 0xf4, 0xd7, 0x0f, 0xeb, 0xf6, 0x6c, 0x7f, 0x49, 0x4e, 0xd4, 0x9d, - 0xe7, 0x9e, 0xaf, 0xbb, 0x0a, 0x3b, 0x69, 0x7d, 0xbb, 0x2b, 0xbb, 0xf4, - 0x04, 0x4a, 0xe3, 0x57, 0xdc, 0x70, 0x7e, 0xec, 0x7a, 0xf0, 0xc5, 0x0c, - 0xb7, 0x1d, 0x1b, 0xa2, 0xae, 0xd5, 0xcd, 0xaf, 0xb1, 0xdc, 0x3b, 0x03, - 0x28, 0xec, 0xc2, 0x70, 0xf2, 0x7a, 0x4e, 0x47, 0x3b, 0x45, 0xb9, 0x8b, - 0x15, 0xed, 0xd9, 0x19, 0xbd, 0x6e, 0x56, 0x75, 0xf0, 0xe4, 0x49, 0x3b, - 0xc4, 0xb2, 0xfa, 0x5a, 0x44, 0x4c, 0x1a, 0xbb, 0xce, 0x64, 0xed, 0x7a, - 0x18, 0xc8, 0x02, 0x62, 0x43, 0x75, 0xfc, 0x20, 0x46, 0xf5, 0xf2, 0x5b, - 0xc5, 0xc8, 0xe7, 0xce, 0xe4, 0xf4, 0x9d, 0x28, 0xb9, 0x76, 0x46, 0xff, - 0xb3, 0x18, 0x8f, 0x72, 0x7b, 0x4a, 0xfa, 0x01, 0xdc, 0x38, 0x97, 0x10, - 0x46, 0x79, 0x15, 0x69, 0x4f, 0xb7, 0xed, 0xa6, 0xb5, 0x48, 0xa2, 0xf1, - 0xe3, 0x39, 0xec, 0x98, 0x07, 0x27, 0x3d, 0xcf, 0x52, 0x50, 0x77, 0x35, - 0x9c, 0xd2, 0x98, 0x82, 0x63, 0xeb, 0xed, 0x0e, 0x80, 0xe7, 0x02, 0x4b, - 0xfa, 0xb5, 0x67, 0x99, 0x32, 0x76, 0xd8, 0xae, 0x80, 0x6f, 0x44, 0xf7, - 0x26, 0x24, 0x1a, 0x07, 0xe2, 0x7f, 0x3d, 0xa7, 0x64, 0xa6, 0x62, 0x6b, - 0x8f, 0x85, 0xa9, 0x44, 0xf1, 0x1d, 0x48, 0x28, 0xdf, 0x74, 0xf0, 0x2e, - 0x92, 0x5e, 0x45, 0x32, 0x34, 0x43, 0x10, 0x9d, 0x4c, 0xcb, 0x58, 0x58, - 0xcf, 0xd6, 0xbb, 0x3a, 0xe7, 0xc9, 0x26, 0x9f, 0x82, 0x25, 0xe1, 0x56, - 0x83, 0x44, 0x73, 0x72, 0x34, 0x52, 0x70, 0x00, 0x00, 0xcc, 0xa6, 0xe0, - 0x39, 0xff, 0x70, 0x71, 0x9f, 0x2a, 0x41, 0x36, 0xca, 0x3c, 0xb7, 0x7c, - 0xb7, 0x68, 0x8c, 0x11, 0xb0, 0xf0, 0x0c, 0x63, 0x4e, 0x13, 0x60, 0xc7, - 0xca, 0x0a, 0xa0, 0xec, 0x69, 0x11, 0x7c, 0x81, 0xc1, 0x55, 0xba, 0x17, - 0x45, 0xeb, 0xc5, 0x39, 0x79, 0x39, 0xa6, 0x55, 0xc7, 0xa5, 0xb8, 0x01, - 0x9e, 0x92, 0x79, 0xeb, 0xd5, 0xe2, 0x94, 0x7d, 0x1c, 0x84, 0xd8, 0xd0, - 0x7f, 0xe7, 0x04, 0xed, 0xac, 0xca, 0x99, 0x1f, 0xa4, 0xe7, 0x29, 0x0d, - 0x66, 0x22, 0xb0, 0xb2, 0x9d, 0xb2, 0x4c, 0xe7, 0x85, 0xce, 0xc0, 0x9d, - 0xbb, 0x78, 0x4c, 0x37, 0x2c, 0x94, 0x7e, 0xc8, 0x05, 0x98, 0x22, 0x42, - 0xf3, 0x1b, 0x45, 0x69, 0x47, 0xc0, 0xff, 0xfe, 0xc7, 0x48, 0x9e, 0xc7, - 0xa4, 0xb8, 0x9f, 0xd1, 0x29, 0x76, 0x0e, 0x04, 0x79, 0xd5, 0x23, 0x55, - 0xad, 0x8a, 0x25, 0xfc, 0xad, 0x60, 0x98, 0x42, 0x0c, 0xa6, 0xe4, 0x64, - 0x30, 0xc4, 0xea, 0xbc, 0x5f, 0x6a, 0x07, 0x26, 0x7c, 0x8b, 0xdc, 0x36, - 0x1f, 0xf6, 0x4a, 0x36, 0x77, 0x42, 0x3c, 0xcd, 0x36, 0xd2, 0x4e, 0x8a, - 0x8e, 0x05, 0xb4, 0xa0, 0xab, 0x1e, 0x41, 0xb4, 0x82, 0xe4, 0xe9, 0x5e, - 0x6e, 0x27, 0xf0, 0xfe, 0x9f, 0x79, 0x41, 0x2a, 0xdf, 0x1d, 0xbe, 0x62, - 0xca, 0x1b, 0x3a, 0x5b, 0xcb, 0x86, 0x2b, 0xfd, 0xe6, 0x83, 0x94, 0xf5, - 0x65, 0x23, 0xff, 0x4d, 0xb6, 0xe2, 0x4a, 0x56, 0x89, 0x7e, 0x7d, 0xc3, - 0x2c, 0xd4, 0xa3, 0x69, 0x9a, 0x2f, 0x72, 0x25, 0x6e, 0x58, 0x00, 0xaa, - 0x2c, 0x66, 0x88, 0x86, 0xd2, 0xcc, 0x04, 0x19, 0xcb, 0x1e, 0xf0, 0x9b, - 0x25, 0x8a, 0x1c, 0xb3, 0x5f, 0x48, 0x51, 0x74, 0x84, 0xca, 0xae, 0x3d, - 0x99, 0x1f, 0xa3, 0x2d, 0xbf, 0x97, 0x56, 0x54, 0x61, 0xb3, 0x4e, 0x00, - 0xa3, 0x4c, 0xbd, 0x81, 0x00, 0xc8, 0x00, 0x86, 0x00, 0x40, 0x96, 0xf0, - 0x01, 0x17, 0x86, 0x00, 0x0c, 0x7f, 0x88, 0x15, 0x07, 0xf2, 0x2e, 0x0e, - 0x27, 0xcb, 0x0c, 0x2c, 0x00, 0x00, 0x00, 0x04, 0x0c, 0x7e, 0xdd, 0x5f, - 0x17, 0xc9, 0x99, 0x69, 0x17, 0x29, 0xd6, 0xfd, 0xe0, 0x80, 0xc1, 0xa3, - 0xa0, 0x87, 0x0b, 0x49, 0xaa, 0xba, 0x18, 0xdf, 0xad, 0xb0, 0x55, 0xc1, - 0x56, 0x6f, 0xba, 0x53, 0x1d, 0x28, 0xec, 0x91, 0x2d, 0x57, 0x8c, 0x2c, - 0x58, 0x49, 0x16, 0x3c, 0xb6, 0x7b, 0x90, 0x8a, 0xee, 0xb0, 0xf1, 0x45, - 0x36, 0x10, 0x86, 0xea, 0xe2, 0x1f, 0x90, 0x99, 0x5a, 0x60, 0x6a, 0xbb, - 0x08, 0xc6, 0x90, 0xa9, 0x7c, 0x60, 0x06, 0x8c, 0x1e, 0xf3, 0x46, 0x34, - 0x0e, 0x2b, 0x75, 0xd5, 0xd8, 0x3e, 0x60, 0x0b, 0xa7, 0x12, 0x59, 0x93, - 0xa8, 0xef, 0xa0, 0x94, 0xc7, 0x89, 0x58, 0x6b, 0x99, 0x2f, 0x0c, 0xb1, - 0xef, 0x02, 0x89, 0x17, 0x49, 0xb9, 0x32, 0x8f, 0x8b, 0x8e, 0xfd, 0x06, - 0x00, 0x23, 0x81, 0xdc, 0x73, 0x2e, 0xce, 0x22, 0x57, 0xec, 0x20, 0xd2, - 0x64, 0x9f, 0x6f, 0x43, 0xad, 0xe0, 0x0c, 0x82, 0xe2, 0xa1, 0xc3, 0x2e, - 0x2b, 0x9e, 0xba, 0x93, 0xb6, 0x57, 0x75, 0xfc, 0x62, 0x0e, 0x63, 0x94, - 0x30, 0xf7, 0x0e, 0x3d, 0x6c, 0x6c, 0xdb, 0x28, 0xc6, 0xe3, 0x11, 0x52, - 0x2a, 0xf1, 0x81, 0x8f, 0xa6, 0xbd, 0xb9, 0xa8, 0x85, 0xda, 0x7f, 0x6c, - 0xe6, 0x02, 0x8d, 0x63, 0x41, 0x41, 0x0e, 0xb2, 0x49, 0x18, 0x1d, 0x3e, - 0x2a, 0xcf, 0xed, 0x36, 0x1c, 0x19, 0xb0, 0x13, 0x11, 0xcf, 0xf3, 0xdc, - 0x4d, 0x1b, 0xce, 0xf3, 0xac, 0xd8, 0xdb, 0x39, 0x5d, 0xb8, 0xd2, 0x3d, - 0xb4, 0xaf, 0x7f, 0xca, 0x44, 0xe8, 0xf4, 0x53, 0x73, 0xeb, 0xe2, 0x25, - 0x7c, 0x09, 0x6a, 0xa8, 0x42, 0xe9, 0xaf, 0x87, 0x7c, 0xfa, 0x2b, 0x70, - 0x2f, 0x60, 0xb7, 0x5b, 0x77, 0xa9, 0x37, 0x14, 0xae, 0xae, 0x6b, 0x33, - 0xc3, 0x0e, 0x23, 0x2c, 0xb7, 0xd5, 0x73, 0xa8, 0x90, 0xd8, 0xba, 0x39, - 0xdb, 0x56, 0x9d, 0x4a, 0x14, 0x0b, 0x5c, 0x74, 0xab, 0x72, 0x0e, 0x2a, - 0xb8, 0x0d, 0xc8, 0xb6, 0x53, 0x87, 0xd8, 0xb3, 0xd9, 0xf5, 0x41, 0xf9, - 0xfa, 0xf1, 0x6f, 0x2a, 0x28, 0x28, 0xde, 0xe4, 0x9d, 0xd6, 0xf7, 0x00, - 0xc1, 0xd4, 0x22, 0x03, 0x9d, 0x5e, 0x37, 0x93, 0x4a, 0x8a, 0x1a, 0xf1, - 0xb8, 0x8e, 0x86, 0xf3, 0x82, 0x4f, 0xd5, 0x9e, 0xb0, 0x2c, 0x4b, 0xba, - 0x96, 0x4b, 0x6a, 0xca, 0x0f, 0xd0, 0xf1, 0xfd, 0xd0, 0x1e, 0xe7, 0xa9, - 0xfd, 0x39, 0x1d, 0x15, 0xf5, 0x2b, 0x67, 0xef, 0x65, 0x8f, 0xe4, 0x15, - 0x91, 0x0e, 0xc1, 0x6c, 0xc2, 0xfa, 0xad, 0xe1, 0xfd, 0x4b, 0x0d, 0x95, - 0x39, 0x1d, 0xbf, 0xe7, 0x02, 0x7c, 0x32, 0x6d, 0x3c, 0x9b, 0x49, 0x05, - 0x7c, 0x89, 0xa6, 0x5a, 0xeb, 0x7e, 0x0e, 0xf8, 0x66, 0xd8, 0xdf, 0xb5, - 0x17, 0x25, 0x72, 0x72, 0xa9, 0x66, 0x15, 0x05, 0x17, 0xfd, 0x51, 0x1b, - 0x9c, 0xae, 0x02, 0x39, 0xf2, 0xec, 0x53, 0x45, 0x00, 0x1f, 0x89, 0x93, - 0x22, 0xf7, 0xed, 0xe4, 0xd5, 0x33, 0xb4, 0xf7, 0x0c, 0xf8, 0xc7, 0xa1, - 0x85, 0x3d, 0x03, 0xd1, 0x44, 0xf3, 0x36, 0xfc, 0x1d, 0x0c, 0xca, 0x47, - 0xa7, 0xe2, 0x5b, 0x1d, 0x1f, 0x1b, 0x29, 0x04, 0xe8, 0x11, 0xa2, 0x43, - 0xa9, 0x32, 0x76, 0xc3, 0x6a, 0x38, 0xe2, 0xac, 0xe9, 0xc4, 0xdb, 0x13, - 0x37, 0x5c, 0x2d, 0xd3, 0x02, 0x6a, 0x4b, 0x5f, 0xd7, 0x78, 0x74, 0x02, - 0xfb, 0x1a, 0x60, 0x56, 0x2b, 0xab, 0x7a, 0xa8, 0x89, 0xcc, 0x78, 0xb0, - 0x9a, 0xe4, 0x0a, 0x5b, 0x08, 0xca, 0x1d, 0x55, 0x2f, 0xbf, 0x46, 0xee, - 0xaa, 0x38, 0xcc, 0x85, 0x4e, 0x9c, 0x7e, 0x25, 0x22, 0x51, 0x84, 0x3a, - 0xda, 0x25, 0xfa, 0x6e, 0x32, 0x4a, 0xa3, 0xd4, 0x45, 0x92, 0xba, 0x46, - 0x87, 0x48, 0x48, 0x3b, 0xa8, 0xd8, 0x2c, 0xd0, 0x98, 0x2f, 0xe5, 0xe3, - 0xee, 0xd8, 0xf5, 0xba, 0x55, 0xf4, 0xe4, 0x4d, 0x74, 0xf5, 0x7e, 0xa0, - 0x8e, 0x31, 0x20, 0x30, 0xe0, 0x33, 0x10, 0xac, 0x22, 0x9f, 0xcb, 0xf9, - 0x7d, 0xef, 0x1c, 0x0a, 0x59, 0x79, 0x35, 0xa3, 0x50, 0x36, 0x42, 0x71, - 0x1a, 0x2b, 0x06, 0x2c, 0x90, 0xac, 0x16, 0x77, 0x66, 0x42, 0x84, 0xd3, - 0x68, 0xbc, 0xe7, 0x0b, 0x60, 0x33, 0x71, 0x09, 0xa2, 0xa8, 0xa8, 0x1a, - 0x5c, 0x15, 0xbe, 0xc7, 0xb9, 0x19, 0xc7, 0xcd, 0x00, 0xa1, 0x84, 0x57, - 0xe5, 0x59, 0xa1, 0x7e, 0xc2, 0xe6, 0x45, 0xa1, 0xec, 0x19, 0xf4, 0xd1, - 0x5d, 0x35, 0xc0, 0x0a, 0x0e, 0xd9, 0xce, 0x96, 0x74, 0x6a, 0x94, 0x5b, - 0x21, 0x02, 0xce, 0x86, 0xd3, 0x7e, 0x26, 0x84, 0x66, 0xe0, 0x40, 0xc9, - 0xa1, 0xe1, 0xfb, 0x4c, 0xab, 0x42, 0x7d, 0x52, 0x0e, 0x62, 0x6a, 0xaf, - 0xe8, 0xe0, 0x40, 0x00, 0xb0, 0x0c, 0xc5, 0xc9, 0x3d, 0xbb, 0x32, 0xe9, - 0x80, 0x28, 0xf2, 0xb5, 0x31, 0xf6, 0x36, 0x3d, 0xb7, 0xc4, 0x27, 0x6a, - 0x34, 0x3b, 0x3c, 0x4b, 0xc5, 0x25, 0x4f, 0x62, 0xdc, 0x2c, 0xfb, 0x22, - 0x0a, 0x54, 0x81, 0x16, 0x1f, 0xa2, 0x03, 0x61, 0xaf, 0x38, 0x04, 0x81, - 0x2f, 0x68, 0x52, 0xae, 0xb4, 0x85, 0x7e, 0x3c, 0xd7, 0xd2, 0xca, 0x73, - 0xc2, 0x48, 0x7a, 0xad, 0x05, 0x09, 0xfb, 0x7d, 0xd6, 0xed, 0xc8, 0x04, - 0xaf, 0x91, 0x7b, 0x5e, 0xa0, 0xbe, 0x19, 0x84, 0x98, 0xca, 0x00, 0x6f, - 0x14, 0x9c, 0xc6, 0x02, 0xbf, 0x40, 0xd1, 0x7e, 0x14, 0x31, 0xc7, 0xa3, - 0xf7, 0xbb, 0x8f, 0xd6, 0x6a, 0x38, 0xaf, 0x5b, 0x1f, 0x90, 0xa8, 0xff, - 0xc8, 0xe3, 0x5c, 0x95, 0x32, 0x88, 0x66, 0xbb, 0x36, 0x91, 0x04, 0xbc, - 0xfe, 0x15, 0x13, 0xce, 0x31, 0x17, 0x2a, 0x8b, 0xb4, 0x15, 0x1e, 0xc7, - 0xf0, 0xdf, 0x45, 0x3e, 0x22, 0x0e, 0x1d, 0x9e, 0xf2, 0x57, 0x38, 0x07, - 0x4f, 0xf6, 0x64, 0xb1, 0x31, 0xf5, 0xcc, 0x7f, 0xdb, 0x38, 0x80, 0x69, - 0x0c, 0xbc, 0x69, 0xbd, 0x6b, 0x40, 0x85, 0x21, 0x58, 0xb7, 0x89, 0x79, - 0xd3, 0x5d, 0xef, 0x34, 0xf6, 0xee, 0xee, 0x5f, 0x71, 0x0c, 0x65, 0x19, - 0x97, 0xcd, 0x41, 0x46, 0x93, 0x71, 0x32, 0x61, 0x84, 0xff, 0xd0, 0x84, - 0x3f, 0xa5, 0x97, 0xa5, 0x00, 0xb5, 0x4b, 0x88, 0x98, 0xaf, 0xfb, 0xe1, - 0x82, 0x1d, 0x9f, 0x6b, 0x8c, 0xbf, 0xeb, 0xee, 0xe8, 0x07, 0xaf, 0x92, - 0x6d, 0x3e, 0x6a, 0x12, 0xb2, 0x64, 0x6a, 0x6c, 0x07, 0xaa, 0x6b, 0x07, - 0x09, 0x7d, 0x30, 0x67, 0x17, 0xd5, 0x9c, 0x50, 0xd4, 0x51, 0x11, 0x52, - 0xeb, 0x2b, 0x44, 0x11, 0x80, 0x64, 0x1a, 0x24, 0xf5, 0xdd, 0xc5, 0x78, - 0xd0, 0x9c, 0x75, 0x32, 0x74, 0x41, 0xca, 0x89, 0x08, 0x87, 0xf8, 0xb5, - 0x09, 0x44, 0xd9, 0x18, 0x09, 0x27, 0x77, 0x7a, 0xb7, 0x83, 0x1b, 0x48, - 0xe6, 0x2c, 0x8d, 0xbe, 0x44, 0x21, 0xcf, 0xa5, 0x20, 0x01, 0x07, 0x9d, - 0xa4, 0x2b, 0x74, 0x32, 0x30, 0xc9, 0x46, 0x92, 0xde, 0x32, 0x3e, 0x49, - 0x7a, 0xfa, 0x30, 0xf4, 0x51, 0x64, 0x4a, 0xb6, 0x84, 0x75, 0x15, 0x9a, - 0x1a, 0xb8, 0x13, 0xb6, 0xe6, 0x00, 0x12, 0xcc, 0x16, 0x72, 0x5b, 0x73, - 0x70, 0xb8, 0x53, 0x5f, 0x77, 0x31, 0xad, 0xeb, 0x81, 0x4f, 0x12, 0xaa, - 0x4b, 0xeb, 0xd5, 0x73, 0x32, 0xa4, 0x9a, 0x56, 0xf7, 0xed, 0x5d, 0xcb, - 0xd7, 0xf6, 0xa3, 0x99, 0x51, 0xb8, 0xb6, 0x9d, 0x7c, 0x5d, 0x75, 0x06, - 0x94, 0x8d, 0x59, 0x47, 0x32, 0xd2, 0x3d, 0x11, 0x74, 0x0a, 0x84, 0x4a, - 0x8a, 0x72, 0xf8, 0x46, 0xfd, 0xe1, 0x00, 0x85, 0x90, 0x0d, 0xf0, 0xcb, - 0x9f, 0xb1, 0x7a, 0x6c, 0x01, 0x63, 0xc0, 0x34, 0xc5, 0x2e, 0xd5, 0x38, - 0x00, 0x00, 0x00, 0x01, 0x7a, 0x6e, 0xa3, 0xaa, 0xc7, 0xf5, 0xb1, 0x7f, - 0x7e, 0xec, 0x6e, 0x9f, 0x02, 0x11, 0x40, 0x10, 0xb5, 0xd0, 0x38, 0xc6, - 0xab, 0x56, 0x70, 0x30, 0x93, 0xf1, 0xde, 0x78, 0x21, 0x83, 0x8f, 0x78, - 0x4b, 0x78, 0xce, 0x82, 0xb6, 0x9b, 0x29, 0xe5, 0x8f, 0x49, 0x16, 0x0d, - 0x81, 0x37, 0x76, 0xbd, 0xf6, 0x9b, 0x07, 0xb9, 0x45, 0x74, 0xbd, 0x75, - 0x71, 0x9a, 0xe8, 0xde, 0x12, 0xd7, 0x9a, 0x44, 0xca, 0xcd, 0xa1, 0x8f, - 0xf0, 0xf5, 0x67, 0x8d, 0xbc, 0x62, 0x28, 0x59, 0x14, 0xd1, 0xdb, 0x95, - 0x18, 0xad, 0x27, 0xa5, 0x70, 0x13, 0x8d, 0x1a, 0x32, 0x56, 0xab, 0xcc, - 0xd3, 0x16, 0x4c, 0x68, 0x56, 0xbb, 0xe1, 0x6c, 0x33, 0x72, 0xc4, 0xc8, - 0x15, 0x9e, 0x8b, 0xe2, 0x0a, 0xd7, 0xac, 0xc5, 0x16, 0xe6, 0x68, 0xdb, - 0xeb, 0x6c, 0x38, 0x16, 0xf3, 0xea, 0x4e, 0x68, 0xe7, 0xe3, 0x1f, 0x89, - 0xf8, 0x4d, 0xa2, 0x5f, 0x33, 0x4c, 0x87, 0x3c, 0x74, 0x2d, 0x60, 0xd9, - 0x88, 0xe8, 0x75, 0x25, 0x11, 0xfa, 0x0f, 0x8f, 0x4f, 0xc3, 0x0f, 0x48, - 0x35, 0x46, 0xed, 0x47, 0x3c, 0x85, 0x8f, 0x93, 0x71, 0xa7, 0xa4, 0x04, - 0x06, 0xc6, 0x68, 0x41, 0x77, 0xd7, 0x6e, 0x36, 0x93, 0xd2, 0x57, 0x8e, - 0xd2, 0x8e, 0x6c, 0x4a, 0x15, 0x33, 0xee, 0x8c, 0xdf, 0xd7, 0xb8, 0x04, - 0x57, 0xb0, 0x34, 0xd9, 0x35, 0x59, 0x91, 0x46, 0x86, 0x9f, 0xf4, 0x8e, - 0x82, 0x88, 0x94, 0x7e, 0xc8, 0x6b, 0x25, 0x78, 0xdf, 0x2a, 0x80, 0x24, - 0x5e, 0x0b, 0x1e, 0x84, 0x53, 0xca, 0xd5, 0x43, 0x5f, 0xfc, 0xb7, 0xbd, - 0x81, 0xc9, 0xbf, 0x8d, 0xf9, 0xb5, 0xfe, 0xcd, 0x3b, 0x3e, 0x8e, 0xcb, - 0x34, 0xcc, 0xd8, 0xc4, 0xe5, 0xaf, 0x68, 0x18, 0x53, 0xac, 0x48, 0xbf, - 0x04, 0xb3, 0x38, 0x64, 0xf0, 0x9a, 0x3d, 0x7c, 0x8f, 0xc0, 0xb4, 0x7b, - 0x75, 0x48, 0x49, 0x72, 0x04, 0x2e, 0x28, 0x14, 0x90, 0xbc, 0x12, 0xc6, - 0xee, 0x2a, 0xa1, 0x90, 0xaf, 0x7f, 0xb7, 0xa9, 0x46, 0x2d, 0x40, 0xfd, - 0x4b, 0xf6, 0x5c, 0xf8, 0x6d, 0xd9, 0xd0, 0x8a, 0x58, 0xf1, 0xae, 0x9b, - 0xbc, 0xfd, 0xec, 0x17, 0xa0, 0x74, 0x94, 0x28, 0x6a, 0xf4, 0xf0, 0x47, - 0xe4, 0xf2, 0xe7, 0x2b, 0xfc, 0xcc, 0x83, 0x9c, 0xe7, 0xcf, 0xcb, 0x47, - 0xa2, 0x96, 0xca, 0x4f, 0xff, 0x79, 0xf7, 0x96, 0xd1, 0xfa, 0x10, 0x3d, - 0x93, 0x03, 0xe2, 0xbb, 0x03, 0x62, 0xdc, 0xf1, 0x53, 0xe0, 0x69, 0xe5, - 0xac, 0x45, 0xbb, 0x86, 0x7a, 0x0f, 0xb6, 0x79, 0xc9, 0xcf, 0x32, 0x04, - 0x5d, 0xce, 0x2b, 0xde, 0x58, 0x78, 0x3e, 0x24, 0x73, 0x07, 0xeb, 0xab, - 0x80, 0xed, 0x06, 0xe1, 0x2f, 0x72, 0x2b, 0xf0, 0x8d, 0xff, 0x00, 0x00, - 0x00, 0x00, 0xed, 0x7f, 0x76, 0xcd, 0x2f, 0x8f, 0xec, 0x04, 0x16, 0x1e, - 0x91, 0x73, 0xc7, 0x81, 0x80, 0x77, 0xf7, 0x4d, 0x29, 0x6b, 0x2f, 0x8c, - 0x8e, 0xb8, 0x97, 0xe9, 0x9e, 0xe5, 0xcb, 0x08, 0xe4, 0x67, 0x42, 0x31, - 0x8b, 0xd9, 0x23, 0x51, 0xa6, 0xc7, 0xfa, 0x2c, 0x30, 0x76, 0xfb, 0x66, - 0xfe, 0x39, 0x2f, 0xde, 0x53, 0x3f, 0x31, 0xf3, 0x81, 0x4f, 0x29, 0xb8, - 0x62, 0xa3, 0xc6, 0xc9, 0x19, 0x43, 0x03, 0x34, 0x5c, 0x35, 0x95, 0xb2, - 0x5a, 0x06, 0x8d, 0xe1, 0x05, 0x17, 0xb9, 0xfd, 0x78, 0xe6, 0xde, 0x8b, - 0x6c, 0x06, 0x4b, 0x61, 0xb8, 0x2f, 0x65, 0x3c, 0x37, 0x8d, 0x7d, 0x7a, - 0x67, 0x8e, 0xf1, 0x50, 0x70, 0x6a, 0xff, 0x7f, 0x6e, 0x35, 0x32, 0x2f, - 0x45, 0x8d, 0xb8, 0xdd, 0xca, 0x58, 0x68, 0x45, 0xbf, 0x5b, 0xf8, 0xb4, - 0xbc, 0x3c, 0x52, 0xfb, 0xa3, 0x78, 0x45, 0xea, 0x60, 0xe2, 0x37, 0xcd, - 0xb5, 0xc3, 0xca, 0x95, 0xe1, 0x72, 0x3f, 0x0f, 0xd5, 0x12, 0x7d, 0x2f, - 0x54, 0xd8, 0xea, 0x6c, 0x38, 0x36, 0x88, 0x46, 0xf8, 0x89, 0x61, 0xa7, - 0x6c, 0x10, 0xa8, 0xec, 0xa2, 0x6b, 0x4f, 0x36, 0x07, 0x71, 0xbf, 0x97, - 0x02, 0x65, 0xa0, 0x61, 0x18, 0x4a, 0x98, 0x40, 0xcb, 0xf1, 0xb3, 0x93, - 0x43, 0xc7, 0xb2, 0x09, 0x86, 0xe5, 0x23, 0x36, 0x37, 0x88, 0x04, 0xa5, - 0x3a, 0xef, 0xde, 0x03, 0x83, 0xba, 0x70, 0x1a, 0x9d, 0x1a, 0x8d, 0xac, - 0x3c, 0xa5, 0x22, 0x43, 0x89, 0x4f, 0x03, 0x9b, 0x6c, 0x7d, 0xe0, 0x45, - 0xe4, 0x84, 0x64, 0x1b, 0x4a, 0xc6, 0xee, 0x85, 0x69, 0xb7, 0xfb, 0x96, - 0xde, 0xd0, 0x29, 0xc0, 0xaf, 0xe4, 0x02, 0x7d, 0x57, 0x37, 0xa9, 0xb0, - 0x7f, 0xd7, 0x3c, 0xc3, 0x7d, 0x35, 0xa9, 0x1c, 0x4e, 0x9a, 0xdc, 0xae, - 0x33, 0xc5, 0xfe, 0x79, 0xb4, 0x9c, 0x57, 0x68, 0xe5, 0x2d, 0xe4, 0x13, - 0x7d, 0x5f, 0x66, 0xfa, 0xc8, 0xd2, 0x4b, 0x52, 0x99, 0x9d, 0x1c, 0x5c, - 0xee, 0x41, 0xa3, 0x59, 0x1c, 0xe6, 0xbf, 0x80, 0x00, 0x00, 0x0c, 0xa1, - 0x1a, 0x9a, 0x69, 0x82, 0x2d, 0x3c, 0x15, 0x90, 0x25, 0x28, 0x1f, 0xf3, - 0x3b, 0x35, 0xdf, 0x20, 0x8b, 0x36, 0x80, 0xa4, 0xe7, 0x7b, 0x42, 0x92, - 0xe6, 0xa2, 0x73, 0xbf, 0xa4, 0xfd, 0x58, 0xe6, 0xe9, 0xac, 0xd6, 0xd1, - 0xfe, 0x7d, 0xba, 0x8e, 0xaf, 0x31, 0x70, 0x2b, 0x96, 0x85, 0x98, 0x9c, - 0xd5, 0x29, 0xda, 0xb7, 0x43, 0x90, 0xbc, 0x04, 0x34, 0xe2, 0xa4, 0x6c, - 0x0a, 0xbf, 0x73, 0x86, 0xf1, 0x95, 0xfa, 0x8d, 0x19, 0x8c, 0xb9, 0xfa, - 0x8a, 0x36, 0x60, 0xaf, 0x7c, 0xd8, 0x7b, 0x9d, 0x3d, 0xbb, 0xed, 0xd7, - 0xef, 0xb8, 0x89, 0x84, 0xea, 0xf7, 0xf2, 0xef, 0x2f, 0x6c, 0xdc, 0xbc, - 0xb1, 0x9d, 0x56, 0x34, 0x9c, 0xe3, 0xfb, 0x08, 0xf9, 0xa8, 0xe6, 0xb6, - 0x94, 0x99, 0x41, 0xf3, 0x61, 0xc4, 0xe1, 0x44, 0xee, 0x9b, 0x29, 0xf1, - 0x94, 0x7e, 0xf9, 0x27, 0xc6, 0x7b, 0x00, 0x46, 0x6b, 0xd4, 0xd8, 0x5e, - 0x2b, 0xfa, 0x3a, 0xd4, 0x06, 0x1e, 0x83, 0x71, 0x04, 0xcf, 0x8f, 0x29, - 0x47, 0x92, 0x82, 0xd9, 0x0e, 0x2d, 0x33, 0x7f, 0x80, 0x1b, 0x20, 0x7b, - 0xde, 0x68, 0xac, 0xd9, 0x3c, 0xcd, 0x4c, 0x1f, 0xbe, 0xb4, 0x5d, 0x27, - 0x90, 0xbd, 0xdf, 0x95, 0x10, 0x44, 0x65, 0x58, 0x93, 0xc0, 0x1f, 0xe8, - 0x48, 0x14, 0x99, 0xd8, 0x65, 0x43, 0x51, 0xfa, 0xcb, 0x01, 0x2e, 0x43, - 0xe3, 0x79, 0x4b, 0x1b, 0x78, 0xac, 0x8e, 0x29, 0x16, 0x05, 0x05, 0x3a, - 0xaf, 0xfd, 0xca, 0x2c, 0x50, 0x89, 0x29, 0x38, 0x21, 0x1c, 0x6a, 0xc3, - 0xb2, 0x65, 0xfc, 0xe6, 0xd2, 0xfb, 0xdc, 0xfd, 0xc7, 0x62, 0x12, 0x97, - 0xd5, 0xdd, 0x72, 0xe1, 0xf7, 0x8d, 0x1b, 0x49, 0x3e, 0x49, 0x91, 0x66, - 0xeb, 0x8c, 0x94, 0x5e, 0x13, 0x44, 0xac, 0x44, 0x18, 0xc0, 0x2f, 0xe6, - 0xd7, 0xf9, 0x78, 0xbf, 0xb8, 0x65, 0xb6, 0x71, 0x44, 0xf6, 0xdc, 0x9d, - 0xd0, 0x12, 0xd1, 0x44, 0x1b, 0x4c, 0xb4, 0xb3, 0x83, 0xce, 0xf5, 0xee, - 0x9a, 0xf8, 0x8a, 0xeb, 0xaa, 0xc5, 0xc4, 0xe0, 0x9a, 0xec, 0x82, 0x3c, - 0x2b, 0x35, 0xe4, 0xe2, 0x20, 0x37, 0xcb, 0xc6, 0x4e, 0xb0, 0xbd, 0xd3, - 0x77, 0xdb, 0x0a, 0xf7, 0xd2, 0xc6, 0x22, 0xb2, 0x2d, 0x6b, 0x17, 0xd5, - 0xb1, 0xbf, 0x73, 0xc9, 0xe0, 0xc8, 0x9f, 0x41, 0x37, 0xd4, 0x26, 0xdb, - 0x33, 0xc0, 0x80, 0x41, 0xaa, 0x1e, 0x04, 0xed, 0x47, 0x68, 0x30, 0x51, - 0xf4, 0x90, 0x31, 0x6d, 0x86, 0x66, 0x8c, 0xb2, 0x96, 0xbf, 0x1c, 0x32, - 0xd9, 0x6e, 0x2e, 0x02, 0x61, 0x61, 0x27, 0x4a, 0x54, 0x8d, 0x49, 0x18, - 0x56, 0xd1, 0x5a, 0xc1, 0x56, 0x96, 0x9c, 0x5e, 0x9c, 0x09, 0xa3, 0x02, - 0x74, 0x83, 0x6a, 0x5e, 0xd3, 0xe5, 0x47, 0xd7, 0x5b, 0xff, 0x6d, 0x38, - 0x10, 0xd4, 0x6b, 0x0f, 0x18, 0xae, 0xfa, 0x8f, 0x68, 0xf2, 0x6a, 0x3c, - 0x70, 0x00, 0x18, 0x81, 0xb9, 0x5a, 0x94, 0x46, 0x99, 0x3e, 0xc2, 0x4d, - 0xae, 0x83, 0x0c, 0x9f, 0x3f, 0x3d, 0xe5, 0xac, 0x65, 0x28, 0xdc, 0xb9, - 0x61, 0x24, 0x11, 0xd5, 0x52, 0xc8, 0x29, 0xc2, 0xf3, 0xf5, 0x6f, 0x8a, - 0x6c, 0xa6, 0x38, 0xa9, 0xb0, 0x87, 0x79, 0x19, 0xc2, 0x8f, 0x77, 0x9a, - 0x73, 0x00, 0xba, 0x82, 0x4d, 0x18, 0x86, 0xb7, 0xf8, 0xc0, 0x56, 0xbe, - 0xdd, 0xf7, 0xdf, 0xc7, 0xec, 0x9f, 0xfa, 0x9a, 0x56, 0xd5, 0xbc, 0x35, - 0x6b, 0x73, 0xbf, 0xfb, 0x0a, 0xa9, 0xaa, 0x1b, 0x92, 0xcc, 0xfa, 0x42, - 0x40, 0xbb, 0x0c, 0x5d, 0xd2, 0x86, 0xbe, 0x0f, 0x1b, 0x1a, 0x77, 0x92, - 0x65, 0x95, 0x80, 0xa7, 0x4a, 0x13, 0x56, 0xed, 0x00, 0x78, 0xb5, 0x68, - 0x22, 0xac, 0x1c, 0x40, 0x5c, 0xac, 0xe0, 0xc8, 0xe8, 0xe6, 0xaa, 0x9d, - 0x44, 0xb0, 0x29, 0xc4, 0xbe, 0x1d, 0xd0, 0xee, 0x95, 0x2c, 0x6b, 0x29, - 0x64, 0xfe, 0x44, 0xb1, 0xa7, 0xde, 0x33, 0x0f, 0xb5, 0x74, 0x26, 0x6f, - 0x49, 0x2b, 0x48, 0x13, 0xec, 0xe6, 0xa5, 0xce, 0xd7, 0x87, 0x7a, 0x67, - 0x0c, 0x29, 0x50, 0x7b, 0x7d, 0x26, 0xc9, 0xf8, 0x3f, 0xf3, 0xe0, 0x48, - 0x8c, 0xa1, 0xec, 0x75, 0xd7, 0xe0, 0x61, 0xea, 0x0d, 0x85, 0x79, 0x7f, - 0x30, 0x85, 0xe4, 0x18, 0xa0, 0x46, 0x99, 0x6f, 0xce, 0xd7, 0x53, 0x1a, - 0xc5, 0x7d, 0x82, 0x3e, 0x3f, 0xe9, 0x99, 0x42, 0x51, 0x99, 0x5d, 0xf9, - 0x8f, 0xc5, 0x68, 0x1a, 0x94, 0x82, 0x21, 0xab, 0x46, 0x9e, 0x35, 0xe6, - 0xdf, 0xd3, 0x69, 0x98, 0x5d, 0xb1, 0xfb, 0x10, 0x2d, 0x6a, 0x48, 0x87, - 0xe0, 0x20, 0xe5, 0xae, 0xec, 0xda, 0x3d, 0x8e, 0xdb, 0x1b, 0x2a, 0x8b, - 0x5d, 0x61, 0xa4, 0x95, 0x25, 0x5d, 0x54, 0xf3, 0xfc, 0x14, 0x66, 0x3b, - 0x00, 0xdc, 0x59, 0x55, 0x67, 0x40, 0x13, 0xbe, 0x57, 0x67, 0x5f, 0xb4, - 0xdf, 0x90, 0x23, 0x08, 0x3f, 0x4a, 0x98, 0x3c, 0xb9, 0x4b, 0x4d, 0xc2, - 0x12, 0x68, 0x29, 0xd7, 0x0c, 0x5b, 0x43, 0x0f, 0x5a, 0x62, 0x6d, 0xe0, - 0x35, 0x9b, 0xb1, 0x63, 0x1a, 0x50, 0x3f, 0xd9, 0x19, 0xd8, 0x7c, 0x64, - 0xa6, 0xf1, 0x6a, 0x65, 0xbc, 0xe1, 0x66, 0x1f, 0x41, 0xb7, 0x6a, 0x27, - 0x11, 0xa0, 0x5c, 0x12, 0x4f, 0x97, 0xd5, 0xac, 0xb6, 0x1d, 0xcc, 0x9c, - 0xe2, 0xff, 0x13, 0xee, 0x61, 0x99, 0xcf, 0x48, 0x54, 0x24, 0x1f, 0x32, - 0x69, 0x98, 0x59, 0xfd, 0xe5, 0x56, 0xb6, 0x89, 0x9f, 0xf3, 0x12, 0x5a, - 0x92, 0x83, 0x92, 0x57, 0x55, 0x1f, 0xa5, 0xf5, 0x07, 0x6a, 0x00, 0xad, - 0xac, 0x80, 0x5d, 0x76, 0x42, 0xd4, 0x44, 0xcf, 0x2b, 0x48, 0x67, 0xdd, - 0x47, 0xd1, 0xbc, 0x7d, 0xd1, 0x41, 0x0a, 0xc9, 0x71, 0x4d, 0x83, 0xa1, - 0x4b, 0xf3, 0x70, 0x23, 0xe6, 0xef, 0x83, 0x33, 0x8c, 0x0c, 0x47, 0xcb, - 0x18, 0x6c, 0xef, 0xf1, 0x48, 0xf1, 0xbd, 0x2d, 0x22, 0xac, 0x5f, 0xfa, - 0x0b, 0x60, 0x44, 0xa4, 0x50, 0x60, 0x72, 0x2b, 0x4d, 0x13, 0xc6, 0xb7, - 0xb8, 0x55, 0xd5, 0xc1, 0xe1, 0x46, 0x34, 0xc3, 0x25, 0x1e, 0x71, 0xf2, - 0xf8, 0x61, 0xa4, 0x59, 0x09, 0xba, 0x4f, 0x6f, 0xd3, 0xac, 0xae, 0x65, - 0x38, 0xa8, 0x99, 0xfb, 0xfe, 0x7e, 0xf0, 0x7c, 0xdd, 0xca, 0xae, 0x70, - 0x17, 0xc4, 0x55, 0xd9, 0x8e, 0x24, 0xb5, 0x08, 0x0f, 0x85, 0xba, 0xff, - 0x8c, 0x5a, 0x41, 0x96, 0x6c, 0xdb, 0xfd, 0x24, 0x01, 0x17, 0xfb, 0x04, - 0x2c, 0xb6, 0x58, 0x0f, 0x48, 0x6b, 0xa8, 0x9b, 0xb3, 0x61, 0x39, 0x6e, - 0x19, 0x54, 0x5b, 0xe2, 0x83, 0x44, 0x39, 0x45, 0xfc, 0xf8, 0xca, 0xd4, - 0x24, 0xa3, 0x5c, 0x6d, 0x96, 0x35, 0x9b, 0x19, 0x85, 0xa8, 0xc9, 0xc4, - 0x1b, 0xf2, 0x0d, 0x59, 0xb9, 0x19, 0xb4, 0xdf, 0xd4, 0xcd, 0x55, 0xbb, - 0x8a, 0xce, 0x1a, 0xfe, 0xeb, 0x0e, 0x2b, 0x35, 0x74, 0x74, 0xeb, 0xd7, - 0xb5, 0xef, 0x43, 0x79, 0xa8, 0x9f, 0x3c, 0x7d, 0xde, 0x23, 0x3c, 0x72, - 0xab, 0xed, 0x8d, 0xb9, 0xa5, 0x19, 0x9d, 0x5f, 0xef, 0xf8, 0x2d, 0xc0, - 0xfe, 0xab, 0xc7, 0x01, 0x31, 0x20, 0x17, 0x22, 0xa5, 0x56, 0x10, 0x38, - 0x15, 0x69, 0x25, 0xd3, 0xf8, 0x3e, 0x14, 0x9c, 0xa0, 0x51, 0x9d, 0x1d, - 0xd3, 0xb5, 0x87, 0x94, 0x47, 0x09, 0xd7, 0x5f, 0x78, 0x9b, 0xd0, 0x4b, - 0xe9, 0x52, 0x5e, 0x9b, 0x51, 0x22, 0x48, 0xe4, 0x00, 0x96, 0xc4, 0x85, - 0x11, 0xb3, 0x19, 0xd4, 0x9f, 0x88, 0x0a, 0x6d, 0x14, 0xec, 0x5a, 0xd5, - 0xac, 0x4d, 0xf7, 0x1e, 0x16, 0xe1, 0x9b, 0x80, 0x82, 0x44, 0x76, 0x7c, - 0x21, 0xac, 0xe4, 0x39, 0xd3, 0xa3, 0x08, 0x8c, 0x10, 0xaa, 0xed, 0x15, - 0xb4, 0x27, 0xa6, 0xd0, 0xfe, 0x00, 0x8c, 0x73, 0x08, 0x5a, 0x12, 0x63, - 0x9c, 0xf5, 0x1b, 0x53, 0xf9, 0xbd, 0x4a, 0x00, 0x87, 0x2d, 0xe5, 0xf5, - 0xa3, 0xea, 0x84, 0xc1, 0x6f, 0xee, 0xc8, 0x71, 0x25, 0x64, 0xf7, 0xdc, - 0x77, 0x29, 0xf5, 0x8a, 0xfc, 0x93, 0x03, 0x0a, 0x9b, 0xaf, 0x44, 0xf7, - 0x7b, 0x56, 0xa6, 0x75, 0xd3, 0x3b, 0x35, 0xb2, 0x48, 0x35, 0xdd, 0x45, - 0x18, 0xf6, 0x85, 0x3d, 0x8f, 0x0d, 0x3c, 0x20, 0x02, 0x2d, 0x66, 0x63, - 0xb2, 0x31, 0x5d, 0xb0, 0x2e, 0x99, 0xaf, 0x2c, 0xd9, 0xa5, 0xe4, 0xae, - 0xc0, 0x28, 0x3e, 0x75, 0x52, 0xca, 0x4f, 0x3f, 0x66, 0x30, 0x08, 0xf9, - 0x97, 0xdd, 0x28, 0x07, 0x8f, 0x3c, 0x6d, 0x2e, 0xc1, 0xb0, 0x6c, 0x98, - 0x2e, 0x16, 0x36, 0x13, 0x4f, 0x33, 0x69, 0x74, 0x40, 0x54, 0x58, 0x90, - 0x9a, 0xbd, 0x84, 0xc1, 0xc5, 0x89, 0xbf, 0x8e, 0x9c, 0x96, 0x84, 0xd8, - 0x18, 0xdf, 0x41, 0xac, 0xdb, 0x0a, 0xc3, 0x39, 0x47, 0xf1, 0xe5, 0x1b, - 0xe9, 0xe4, 0xa6, 0x42, 0x4d, 0x14, 0x8e, 0x24, 0x0d, 0x14, 0x1e, 0xad, - 0x2c, 0x6f, 0xce, 0x1a, 0xd6, 0x23, 0xad, 0x18, 0x38, 0xbe, 0x63, 0xe1, - 0x11, 0xd8, 0x54, 0x2a, 0xca, 0x00, 0xf9, 0x0d, 0xd2, 0xb3, 0xca, 0x97, - 0x17, 0xd6, 0x44, 0xf4, 0x97, 0xcf, 0x4a, 0xa1, 0xd6, 0x3a, 0x09, 0xf2, - 0xc4, 0x98, 0xf6, 0x36, 0x1c, 0xa9, 0x68, 0x83, 0x06, 0x9d, 0xdb, 0x17, - 0x19, 0xd2, 0xa1, 0x5e, 0xbe, 0x11, 0x7b, 0x3a, 0x16, 0x39, 0x55, 0xdd, - 0xdc, 0x13, 0x30, 0xc2, 0xad, 0x5b, 0xb1, 0xb4, 0x17, 0x2a, 0x3b, 0xf2, - 0x9d, 0x96, 0x56, 0xcd, 0x20, 0xd4, 0xd9, 0xf4, 0xa8, 0x71, 0x14, 0xc9, - 0x4f, 0x8f, 0xc0, 0x0e, 0x43, 0xd6, 0x8c, 0xc3, 0x38, 0x58, 0xe8, 0x4c, - 0xa8, 0x68, 0x6c, 0x81, 0x9f, 0xbb, 0x00, 0xb6, 0x6e, 0x73, 0x6e, 0x65, - 0xfe, 0x73, 0x66, 0x6c, 0xae, 0xf3, 0x0e, 0x26, 0xd4, 0xf0, 0x2a, 0x1b, - 0xd0, 0xd4, 0x80, 0xf2, 0x2b, 0x8d, 0x36, 0xbb, 0x38, 0xc4, 0x00, 0x23, - 0xa0, 0x01, 0xd6, 0x1b, 0x17, 0x2a, 0x7d, 0x72, 0xa5, 0x1e, 0x89, 0x2a, - 0x14, 0x7b, 0xd1, 0x17, 0x51, 0x6f, 0x03, 0x8e, 0xce, 0x06, 0x6b, 0xe7, - 0x94, 0xf3, 0x15, 0xe5, 0x07, 0x89, 0xb8, 0x89, 0x04, 0x4d, 0x72, 0x30, - 0x78, 0xfc, 0xc0, 0x51, 0xac, 0x02, 0x68, 0x3a, 0x91, 0xde, 0xb7, 0x32, - 0xeb, 0x4f, 0x74, 0x09, 0x10, 0x9d, 0x74, 0xa2, 0x4f, 0x17, 0x95, 0x2a, - 0x75, 0x79, 0xad, 0x84, 0x3b, 0x98, 0xaa, 0xb8, 0xb1, 0x09, 0x25, 0x1d, - 0x6f, 0xd8, 0x35, 0xbe, 0xf0, 0x07, 0x03, 0xb8, 0xb1, 0xf8, 0x93, 0x72, - 0x33, 0xb8, 0xd2, 0xad, 0xcd, 0xd0, 0x6e, 0x99, 0x13, 0x00, 0x3b, 0x49, - 0x33, 0x7f, 0xec, 0x13, 0x71, 0xf6, 0x96, 0x45, 0xdf, 0xa3, 0x8b, 0x87, - 0x61, 0x47, 0x62, 0x6c, 0x91, 0x19, 0xe6, 0xbb, 0x8b, 0xc5, 0x46, 0x45, - 0xff, 0x57, 0xcf, 0xb6, 0x09, 0xa2, 0x6a, 0x80, 0x27, 0x8c, 0x1a, 0xea, - 0xa7, 0xca, 0x16, 0x0c, 0x66, 0x97, 0x00, 0x47, 0x2d, 0x34, 0x42, 0xad, - 0xfa, 0x41, 0x69, 0x85, 0x4c, 0x91, 0x23, 0x67, 0xd0, 0x6b, 0x4e, 0x27, - 0x5d, 0x75, 0xc5, 0x40, 0x39, 0xe2, 0xdf, 0x93, 0xe2, 0x23, 0x3a, 0x57, - 0xab, 0x36, 0xb7, 0x05, 0x31, 0x1b, 0x9c, 0xfd, 0x4e, 0x90, 0x26, 0xce, - 0xb4, 0x52, 0xff, 0x61, 0xc6, 0x76, 0x87, 0x58, 0x57, 0xf9, 0x39, 0x00, - 0x1c, 0x53, 0xbb, 0x6b, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, - 0xbb, 0x8f, 0xb3, 0x81, 0x0e, 0xb7, 0x8a, 0xf7, 0x81, 0x01, 0xf1, 0x82, - 0x01, 0xa7, 0xf0, 0x81, 0x03}; diff --git a/dom/media/benchmark/sample b/dom/media/benchmark/sample deleted file mode 100755 index 4f4f7a56fb7..00000000000 --- a/dom/media/benchmark/sample +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/bash -e -wget http://people.mozilla.org/~ajones/frame-drop-test/bbb-31.webm -O bbb-31.webm -ffmpeg -i bbb-31.webm -frames:v 8 -codec copy -map 0:0 sWebMSample.webm -y -mv sWebMSample.webm sWebMSample -xxd -i sWebMSample |head --lines=-1 | sed 's/unsigned char/static const uint8_t/' > ../WebMSample.h -rm sWebMSample -rm bbb-31.webm diff --git a/dom/media/fuzz/FuzzMedia.cpp b/dom/media/fuzz/FuzzMedia.cpp index add6e144860..959e3c5973f 100644 --- a/dom/media/fuzz/FuzzMedia.cpp +++ b/dom/media/fuzz/FuzzMedia.cpp @@ -4,7 +4,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "ADTSDemuxer.h" -#include "Benchmark.h" #include "BufferMediaResource.h" #include "FlacDemuxer.h" #include "FuzzingInterface.h" @@ -16,9 +15,96 @@ #include "systemservices/MediaUtils.h" #include "WaveDemuxer.h" #include "WebMDemuxer.h" +#include "QueueObject.h" +#include "PlatformDecoderModule.h" +#include "mozilla/TaskQueue.h" +#include "PDMFactory.h" +#include "mozilla/gfx/gfxVars.h" +#include "MediaDataDecoderProxy.h" using namespace mozilla; +class Benchmark; + +class BenchmarkPlayback : public QueueObject { + friend class Benchmark; + BenchmarkPlayback(Benchmark* aGlobalState, MediaDataDemuxer* aDemuxer); + void DemuxSamples(); + void DemuxNextSample(); + void GlobalShutdown(); + void InitDecoder(UniquePtr&& aInfo); + + void Output(MediaDataDecoder::DecodedData&& aResults); + void Error(const MediaResult& aError); + void InputExhausted(); + + // Shutdown trackdemuxer and demuxer if any and shutdown the task queues. + void FinalizeShutdown(); + + Atomic mGlobalState; + + RefPtr mDecoderTaskQueue; + RefPtr mDecoder; + + // Object only accessed on Thread() + RefPtr mDemuxer; + RefPtr mTrackDemuxer; + nsTArray> mSamples; + UniquePtr mInfo; + size_t mSampleIndex; + Maybe mDecodeStartTime; + uint32_t mFrameCount; + bool mFinished; + bool mDrained; +}; + +// Init() must have been called at least once prior on the +// main thread. +class Benchmark : public QueueObject { + public: + NS_INLINE_DECL_THREADSAFE_REFCOUNTING(Benchmark) + + struct Parameters { + Parameters() + : mFramesToMeasure(UINT32_MAX), + mStartupFrame(1), + mTimeout(TimeDuration::Forever()) {} + + Parameters(uint32_t aFramesToMeasure, uint32_t aStartupFrame, + uint32_t aStopAtFrame, const TimeDuration& aTimeout) + : mFramesToMeasure(aFramesToMeasure), + mStartupFrame(aStartupFrame), + mStopAtFrame(Some(aStopAtFrame)), + mTimeout(aTimeout) {} + + const uint32_t mFramesToMeasure; + const uint32_t mStartupFrame; + const Maybe mStopAtFrame; + const TimeDuration mTimeout; + }; + + typedef MozPromise + BenchmarkPromise; + + explicit Benchmark(MediaDataDemuxer* aDemuxer, + const Parameters& aParameters = Parameters()); + RefPtr Run(); + + // Must be called on the main thread. + static void Init(); + + private: + friend class BenchmarkPlayback; + virtual ~Benchmark(); + void ReturnResult(uint32_t aDecodeFps); + void ReturnError(const MediaResult& aError); + void Dispose(); + const Parameters mParameters; + RefPtr mKeepAliveUntilComplete; + BenchmarkPlayback mPlaybackState; + MozPromiseHolder mPromise; +}; + class FuzzRunner { public: explicit FuzzRunner(Benchmark* aBenchmark) : mBenchmark(aBenchmark) {} @@ -28,7 +114,7 @@ class FuzzRunner { MOZ_ASSERT(NS_IsMainThread()); bool done = false; - mBenchmark->Init(); + Benchmark::Init(); mBenchmark->Run()->Then( // Non DocGroup-version of AbstractThread::MainThread() is fine for // testing. @@ -37,13 +123,279 @@ class FuzzRunner { // Wait until benchmark completes. SpinEventLoopUntil("FuzzRunner::Run"_ns, [&]() { return done; }); - return; } private: RefPtr mBenchmark; }; +Benchmark::Benchmark(MediaDataDemuxer* aDemuxer, const Parameters& aParameters) + : QueueObject( + TaskQueue::Create(GetMediaThreadPool(MediaThreadType::SUPERVISOR), + "Benchmark::QueueObject")), + mParameters(aParameters), + mPlaybackState(this, aDemuxer) { + MOZ_COUNT_CTOR(Benchmark); +} + +Benchmark::~Benchmark() { MOZ_COUNT_DTOR(Benchmark); } + +RefPtr Benchmark::Run() { + RefPtr self = this; + mKeepAliveUntilComplete = this; + return InvokeAsync(Thread(), __func__, [self] { + RefPtr p = self->mPromise.Ensure(__func__); + self->mPlaybackState.Dispatch(NS_NewRunnableFunction( + "Benchmark::Run", [self]() { self->mPlaybackState.DemuxSamples(); })); + return p; + }); +} + +void Benchmark::ReturnResult(uint32_t aDecodeFps) { + MOZ_ASSERT(OnThread()); + + mPromise.ResolveIfExists(aDecodeFps, __func__); +} + +void Benchmark::ReturnError(const MediaResult& aError) { + MOZ_ASSERT(OnThread()); + + mPromise.RejectIfExists(aError, __func__); +} + +void Benchmark::Dispose() { + MOZ_ASSERT(OnThread()); + + mKeepAliveUntilComplete = nullptr; +} + +void Benchmark::Init() { + MOZ_ASSERT(NS_IsMainThread()); + mozilla::gfx::gfxVars::Initialize(); +} + +BenchmarkPlayback::BenchmarkPlayback(Benchmark* aGlobalState, + MediaDataDemuxer* aDemuxer) + : QueueObject( + TaskQueue::Create(GetMediaThreadPool(MediaThreadType::SUPERVISOR), + "BenchmarkPlayback::QueueObject")), + mGlobalState(aGlobalState), + mDecoderTaskQueue(TaskQueue::Create( + GetMediaThreadPool(MediaThreadType::PLATFORM_DECODER), + "BenchmarkPlayback::mDecoderTaskQueue")), + mDemuxer(aDemuxer), + mSampleIndex(0), + mFrameCount(0), + mFinished(false), + mDrained(false) {} + +void BenchmarkPlayback::DemuxSamples() { + MOZ_ASSERT(OnThread()); + + RefPtr ref(mGlobalState); + mDemuxer->Init()->Then( + Thread(), __func__, + [this, ref](nsresult aResult) { + MOZ_ASSERT(OnThread()); + if (mDemuxer->GetNumberTracks(TrackInfo::kVideoTrack)) { + mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kVideoTrack, 0); + } else if (mDemuxer->GetNumberTracks(TrackInfo::kAudioTrack)) { + mTrackDemuxer = mDemuxer->GetTrackDemuxer(TrackInfo::kAudioTrack, 0); + } + if (!mTrackDemuxer) { + Error(MediaResult(NS_ERROR_FAILURE, "Can't create track demuxer")); + return; + } + DemuxNextSample(); + }, + [this, ref](const MediaResult& aError) { Error(aError); }); +} + +void BenchmarkPlayback::DemuxNextSample() { + MOZ_ASSERT(OnThread()); + + RefPtr ref(mGlobalState); + RefPtr promise = + mTrackDemuxer->GetSamples(); + promise->Then( + Thread(), __func__, + [this, ref](RefPtr aHolder) { + mSamples.AppendElements(aHolder->GetMovableSamples()); + if (ref->mParameters.mStopAtFrame && + mSamples.Length() == ref->mParameters.mStopAtFrame.ref()) { + InitDecoder(mTrackDemuxer->GetInfo()); + } else { + Dispatch( + NS_NewRunnableFunction("BenchmarkPlayback::DemuxNextSample", + [this, ref]() { DemuxNextSample(); })); + } + }, + [this, ref](const MediaResult& aError) { + switch (aError.Code()) { + case NS_ERROR_DOM_MEDIA_END_OF_STREAM: + InitDecoder(mTrackDemuxer->GetInfo()); + break; + default: + Error(aError); + break; + } + }); +} + +void BenchmarkPlayback::InitDecoder(UniquePtr&& aInfo) { + MOZ_ASSERT(OnThread()); + + if (!aInfo) { + Error(MediaResult(NS_ERROR_FAILURE, "Invalid TrackInfo")); + return; + } + + RefPtr platform = new PDMFactory(); + mInfo = std::move(aInfo); + RefPtr ref(mGlobalState); + platform->CreateDecoder(CreateDecoderParams{*mInfo}) + ->Then( + Thread(), __func__, + [this, ref](RefPtr&& aDecoder) { + mDecoder = new MediaDataDecoderProxy( + aDecoder.forget(), do_AddRef(mDecoderTaskQueue.get())); + mDecoder->Init()->Then( + Thread(), __func__, + [this, ref](TrackInfo::TrackType aTrackType) { + InputExhausted(); + }, + [this, ref](const MediaResult& aError) { Error(aError); }); + }, + [this, ref](const MediaResult& aError) { Error(aError); }); +} + +void BenchmarkPlayback::FinalizeShutdown() { + MOZ_ASSERT(OnThread()); + + MOZ_ASSERT(mFinished, "GlobalShutdown must have been run"); + MOZ_ASSERT(!mDecoder, "mDecoder must have been shutdown already"); + MOZ_ASSERT(!mDemuxer, "mDemuxer must have been shutdown already"); + MOZ_DIAGNOSTIC_ASSERT(mDecoderTaskQueue->IsEmpty()); + mDecoderTaskQueue = nullptr; + + RefPtr ref(mGlobalState); + ref->Thread()->Dispatch(NS_NewRunnableFunction( + "BenchmarkPlayback::FinalizeShutdown", [ref]() { ref->Dispose(); })); +} + +void BenchmarkPlayback::GlobalShutdown() { + MOZ_ASSERT(OnThread()); + + MOZ_ASSERT(!mFinished, "We've already shutdown"); + + mFinished = true; + + if (mTrackDemuxer) { + mTrackDemuxer->Reset(); + mTrackDemuxer->BreakCycles(); + mTrackDemuxer = nullptr; + } + mDemuxer = nullptr; + + if (mDecoder) { + RefPtr ref(mGlobalState); + mDecoder->Flush()->Then( + Thread(), __func__, + [ref, this]() { + mDecoder->Shutdown()->Then( + Thread(), __func__, [ref, this]() { FinalizeShutdown(); }, + []() { MOZ_CRASH("not reached"); }); + mDecoder = nullptr; + mInfo = nullptr; + }, + []() { MOZ_CRASH("not reached"); }); + } else { + FinalizeShutdown(); + } +} + +void BenchmarkPlayback::Output(MediaDataDecoder::DecodedData&& aResults) { + MOZ_ASSERT(OnThread()); + MOZ_ASSERT(!mFinished); + + RefPtr ref(mGlobalState); + mFrameCount += aResults.Length(); + if (!mDecodeStartTime && mFrameCount >= ref->mParameters.mStartupFrame) { + mDecodeStartTime = Some(TimeStamp::Now()); + } + TimeStamp now = TimeStamp::Now(); + uint32_t frames = mFrameCount - ref->mParameters.mStartupFrame; + TimeDuration elapsedTime = now - mDecodeStartTime.refOr(now); + if (((frames == ref->mParameters.mFramesToMeasure) && + mFrameCount > ref->mParameters.mStartupFrame && frames > 0) || + elapsedTime >= ref->mParameters.mTimeout || mDrained) { + uint32_t decodeFps = frames / elapsedTime.ToSeconds(); + GlobalShutdown(); + ref->Dispatch(NS_NewRunnableFunction( + "BenchmarkPlayback::Output", + [ref, decodeFps]() { ref->ReturnResult(decodeFps); })); + } +} + +void BenchmarkPlayback::Error(const MediaResult& aError) { + MOZ_ASSERT(OnThread()); + + RefPtr ref(mGlobalState); + GlobalShutdown(); + ref->Dispatch( + NS_NewRunnableFunction("BenchmarkPlayback::Error", + [ref, aError]() { ref->ReturnError(aError); })); +} + +void BenchmarkPlayback::InputExhausted() { + MOZ_ASSERT(OnThread()); + MOZ_ASSERT(!mFinished); + + if (mSampleIndex >= mSamples.Length()) { + Error(MediaResult(NS_ERROR_FAILURE, "Nothing left to decode")); + return; + } + + RefPtr sample = mSamples[mSampleIndex]; + RefPtr ref(mGlobalState); + RefPtr p = mDecoder->Decode(sample); + + mSampleIndex++; + if (mSampleIndex == mSamples.Length() && !ref->mParameters.mStopAtFrame) { + // Complete current frame decode then drain if still necessary. + p->Then( + Thread(), __func__, + [ref, this](MediaDataDecoder::DecodedData&& aResults) { + Output(std::move(aResults)); + if (!mFinished) { + mDecoder->Drain()->Then( + Thread(), __func__, + [ref, this](MediaDataDecoder::DecodedData&& aResults) { + mDrained = true; + Output(std::move(aResults)); + MOZ_ASSERT(mFinished, "We must be done now"); + }, + [ref, this](const MediaResult& aError) { Error(aError); }); + } + }, + [ref, this](const MediaResult& aError) { Error(aError); }); + } else { + if (mSampleIndex == mSamples.Length() && ref->mParameters.mStopAtFrame) { + mSampleIndex = 0; + } + // Continue decoding + p->Then( + Thread(), __func__, + [ref, this](MediaDataDecoder::DecodedData&& aResults) { + Output(std::move(aResults)); + if (!mFinished) { + InputExhausted(); + } + }, + [ref, this](const MediaResult& aError) { Error(aError); }); + } +} + #define MOZ_MEDIA_FUZZER(_name) \ static int FuzzingRunMedia##_name(const uint8_t* data, size_t size) { \ if (!size) { \ diff --git a/dom/media/gtest/TestBenchmarkStorage.cpp b/dom/media/gtest/TestBenchmarkStorage.cpp deleted file mode 100644 index 0f1eb7e4c42..00000000000 --- a/dom/media/gtest/TestBenchmarkStorage.cpp +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "mozilla/BenchmarkStorageParent.h" - -#include "gmock/gmock.h" -#include "gtest/gtest-printers.h" -#include "gtest/gtest.h" - -using ::testing::Return; -using namespace mozilla; - -TEST(BenchmarkStorage, MovingAverage) -{ - int32_t av = 0; - int32_t win = 0; - int32_t val = 100; - BenchmarkStorageParent::MovingAverage(av, win, val); - EXPECT_EQ(av, val) << "1st average"; - EXPECT_EQ(win, 1) << "1st window"; - - av = 50; - win = 1; - val = 100; - BenchmarkStorageParent::MovingAverage(av, win, val); - EXPECT_EQ(av, 75) << "2nd average"; - EXPECT_EQ(win, 2) << "2nd window"; - - av = 100; - win = 9; - val = 90; - BenchmarkStorageParent::MovingAverage(av, win, val); - EXPECT_EQ(av, 99) << "9th average"; - EXPECT_EQ(win, 10) << "9th window"; - - av = 90; - win = 19; - val = 90; - BenchmarkStorageParent::MovingAverage(av, win, val); - EXPECT_EQ(av, 90) << "19th average"; - EXPECT_EQ(win, 20) << "19th window"; - - av = 90; - win = 20; - val = 100; - BenchmarkStorageParent::MovingAverage(av, win, val); - EXPECT_EQ(av, 91) << "20th average"; - EXPECT_EQ(win, 20) << "20th window"; -} - -TEST(BenchmarkStorage, ParseStoredValue) -{ - int32_t win = 0; - int32_t score = BenchmarkStorageParent::ParseStoredValue(1100, win); - EXPECT_EQ(win, 1) << "Window"; - EXPECT_EQ(score, 100) << "Score/Percentage"; - - win = 0; - score = BenchmarkStorageParent::ParseStoredValue(10099, win); - EXPECT_EQ(win, 10) << "Window"; - EXPECT_EQ(score, 99) << "Score/Percentage"; - - win = 0; - score = BenchmarkStorageParent::ParseStoredValue(15038, win); - EXPECT_EQ(win, 15) << "Window"; - EXPECT_EQ(score, 38) << "Score/Percentage"; - - win = 0; - score = BenchmarkStorageParent::ParseStoredValue(20099, win); - EXPECT_EQ(win, 20) << "Window"; - EXPECT_EQ(score, 99) << "Score/Percentage"; -} - -TEST(BenchmarkStorage, PrepareStoredValue) -{ - int32_t stored_value = BenchmarkStorageParent::PrepareStoredValue(80, 1); - EXPECT_EQ(stored_value, 1080) << "Window"; - - stored_value = BenchmarkStorageParent::PrepareStoredValue(100, 6); - EXPECT_EQ(stored_value, 6100) << "Window"; - - stored_value = BenchmarkStorageParent::PrepareStoredValue(1, 10); - EXPECT_EQ(stored_value, 10001) << "Window"; - - stored_value = BenchmarkStorageParent::PrepareStoredValue(88, 13); - EXPECT_EQ(stored_value, 13088) << "Window"; - - stored_value = BenchmarkStorageParent::PrepareStoredValue(100, 20); - EXPECT_EQ(stored_value, 20100) << "Window"; -} diff --git a/dom/media/gtest/TestDecoderBenchmark.cpp b/dom/media/gtest/TestDecoderBenchmark.cpp deleted file mode 100644 index 85091a49468..00000000000 --- a/dom/media/gtest/TestDecoderBenchmark.cpp +++ /dev/null @@ -1,66 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "DecoderBenchmark.h" - -#include "gmock/gmock.h" -#include "gtest/gtest-printers.h" -#include "gtest/gtest.h" - -using ::testing::Return; -using namespace mozilla; - -TEST(DecoderBenchmark, CreateKey) -{ - DecoderBenchmarkInfo info{"video/av1"_ns, 1, 1, 1, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info), - "ResolutionLevel0-FrameRateLevel0-8bit"_ns) - << "Min level"; - - DecoderBenchmarkInfo info1{"video/av1"_ns, 5000, 5000, 100, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info1), - "ResolutionLevel7-FrameRateLevel4-8bit"_ns) - << "Max level"; - - DecoderBenchmarkInfo info2{"video/av1"_ns, 854, 480, 30, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info2), - "ResolutionLevel3-FrameRateLevel2-8bit"_ns) - << "On the top of 4th resolution level"; - - DecoderBenchmarkInfo info3{"video/av1"_ns, 1270, 710, 24, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info3), - "ResolutionLevel4-FrameRateLevel1-8bit"_ns) - << "Closer to 5th resolution level - bellow"; - - DecoderBenchmarkInfo info4{"video/av1"_ns, 1290, 730, 24, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info4), - "ResolutionLevel4-FrameRateLevel1-8bit"_ns) - << "Closer to 5th resolution level - above"; - - DecoderBenchmarkInfo info5{"video/av1"_ns, 854, 480, 20, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info5), - "ResolutionLevel3-FrameRateLevel1-8bit"_ns) - << "Closer to 2nd frame rate level - bellow"; - - DecoderBenchmarkInfo info6{"video/av1"_ns, 854, 480, 26, 8}; - EXPECT_EQ(KeyUtil::CreateKey(info6), - "ResolutionLevel3-FrameRateLevel1-8bit"_ns) - << "Closer to 2nd frame rate level - above"; - - DecoderBenchmarkInfo info7{"video/av1"_ns, 1280, 720, 24, 10}; - EXPECT_EQ(KeyUtil::CreateKey(info7), - "ResolutionLevel4-FrameRateLevel1-non8bit"_ns) - << "Bit depth 10 bits"; - - DecoderBenchmarkInfo info8{"video/av1"_ns, 1280, 720, 24, 12}; - EXPECT_EQ(KeyUtil::CreateKey(info8), - "ResolutionLevel4-FrameRateLevel1-non8bit"_ns) - << "Bit depth 12 bits"; - - DecoderBenchmarkInfo info9{"video/av1"_ns, 1280, 720, 24, 16}; - EXPECT_EQ(KeyUtil::CreateKey(info9), - "ResolutionLevel4-FrameRateLevel1-non8bit"_ns) - << "Bit depth 16 bits"; -} diff --git a/dom/media/gtest/TestKeyValueStorage.cpp b/dom/media/gtest/TestKeyValueStorage.cpp deleted file mode 100644 index 7ba65343e33..00000000000 --- a/dom/media/gtest/TestKeyValueStorage.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-*/ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this file, - * You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "mozilla/KeyValueStorage.h" - -#include "gmock/gmock.h" -#include "gtest/gtest-printers.h" -#include "gtest/gtest.h" - -#include "GMPTestMonitor.h" - -using ::testing::Return; -using namespace mozilla; - -TEST(TestKeyValueStorage, BasicPutGet) -{ - auto kvs = MakeRefPtr(); - - nsCString name("database_name"); - nsCString key("key1"); - int32_t value = 100; - - GMPTestMonitor mon; - - kvs->Put(name, key, value) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [&](bool) { return kvs->Get(name, key); }, - [](nsresult rv) { - EXPECT_TRUE(false) << "Put promise has been rejected"; - return KeyValueStorage::GetPromise::CreateAndReject(rv, __func__); - }) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [&](int32_t aValue) { - EXPECT_EQ(aValue, value) << "Values are the same"; - mon.SetFinished(); - }, - [&](nsresult rv) { - EXPECT_TRUE(false) << "Get Promise has been rejected"; - mon.SetFinished(); - }); - - mon.AwaitFinished(); -} - -TEST(TestKeyValueStorage, GetNonExistedKey) -{ - auto kvs = MakeRefPtr(); - - nsCString name("database_name"); - nsCString key("NonExistedKey"); - - GMPTestMonitor mon; - - kvs->Get(name, key)->Then( - GetCurrentSerialEventTarget(), __func__, - [&mon](int32_t aValue) { - EXPECT_EQ(aValue, -1) << "When key does not exist return -1"; - mon.SetFinished(); - }, - [&mon](nsresult rv) { - EXPECT_TRUE(false) << "Get Promise has been rejected"; - mon.SetFinished(); - }); - - mon.AwaitFinished(); -} - -TEST(TestKeyValueStorage, Clear) -{ - auto kvs = MakeRefPtr(); - - nsCString name("database_name"); - nsCString key("key1"); - int32_t value = 100; - - GMPTestMonitor mon; - - kvs->Put(name, key, value) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [&](bool) { return kvs->Clear(name); }, - [](nsresult rv) { - EXPECT_TRUE(false) << "Put promise has been rejected"; - return GenericPromise::CreateAndReject(rv, __func__); - }) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [&](bool) { return kvs->Get(name, key); }, - [](nsresult rv) { - EXPECT_TRUE(false) << "Clear promise has been rejected"; - return KeyValueStorage::GetPromise::CreateAndReject(rv, __func__); - }) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [&](int32_t aValue) { - EXPECT_EQ(aValue, -1) << "After clear the key does not exist"; - mon.SetFinished(); - }, - [&](nsresult rv) { - EXPECT_TRUE(false) << "Get Promise has been rejected"; - mon.SetFinished(); - }); - - mon.AwaitFinished(); -} diff --git a/dom/media/gtest/TestMediaDataDecoder.cpp b/dom/media/gtest/TestMediaDataDecoder.cpp deleted file mode 100644 index 820b15b718f..00000000000 --- a/dom/media/gtest/TestMediaDataDecoder.cpp +++ /dev/null @@ -1,96 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "gtest/gtest.h" -#include "Benchmark.h" -#include "MockMediaResource.h" -#include "DecoderTraits.h" -#include "MediaContainerType.h" -#include "MP4Demuxer.h" -#include "MP4Decoder.h" -#include "WebMDecoder.h" -#include "WebMDemuxer.h" -#include "mozilla/AbstractThread.h" -#include "mozilla/gtest/MozAssertions.h" -#include "mozilla/SpinEventLoopUntil.h" -#include "nsMimeTypes.h" - -using namespace mozilla; - -class BenchmarkRunner { - public: - explicit BenchmarkRunner(Benchmark* aBenchmark) : mBenchmark(aBenchmark) {} - - uint32_t Run() { - bool done = false; - uint32_t result = 0; - - mBenchmark->Init(); - mBenchmark->Run()->Then( - // Non DocGroup-version of AbstractThread::MainThread() is fine for - // testing. - AbstractThread::MainThread(), __func__, - [&](uint32_t aDecodeFps) { - result = aDecodeFps; - done = true; - }, - [&]() { done = true; }); - - // Wait until benchmark completes. - SpinEventLoopUntil("BenchmarkRunner::Run"_ns, [&]() { return done; }); - return result; - } - - private: - RefPtr mBenchmark; -}; - -TEST(MediaDataDecoder, H264) -{ - if (!MP4Decoder::IsSupportedType(MediaContainerType(MEDIAMIMETYPE(VIDEO_MP4)), - /* DecoderDoctorDiagnostics* */ nullptr)) { - EXPECT_TRUE(true); - } else { - RefPtr resource = new MockMediaResource("gizmo.mp4"); - nsresult rv = resource->Open(); - EXPECT_NS_SUCCEEDED(rv); - - BenchmarkRunner runner(new Benchmark(new MP4Demuxer(resource))); - EXPECT_GT(runner.Run(), 0u); - } -} - -// Decoding AV1 via. ffvpx is supported on Linux only. -#if defined(MOZ_AV1) && defined(MOZ_WIDGET_GTK) && !defined(MOZ_FFVPX_AUDIOONLY) -TEST(MediaDataDecoder, AV1) -{ - if (!MP4Decoder::IsSupportedType(MediaContainerType(MEDIAMIMETYPE(VIDEO_MP4)), - /* DecoderDoctorDiagnostics* */ nullptr)) { - EXPECT_TRUE(true); - } else { - RefPtr resource = new MockMediaResource("av1.mp4"); - nsresult rv = resource->Open(); - EXPECT_NS_SUCCEEDED(rv); - - BenchmarkRunner runner(new Benchmark(new MP4Demuxer(resource))); - EXPECT_GT(runner.Run(), 0u); - } -} -#endif - -TEST(MediaDataDecoder, VP9) -{ - if (!WebMDecoder::IsSupportedType( - MediaContainerType(MEDIAMIMETYPE(VIDEO_WEBM)))) { - EXPECT_TRUE(true); - } else { - RefPtr resource = new MockMediaResource("vp9cake.webm"); - nsresult rv = resource->Open(); - EXPECT_NS_SUCCEEDED(rv); - - BenchmarkRunner runner(new Benchmark(new WebMDemuxer(resource))); - EXPECT_GT(runner.Run(), 0u); - } -} diff --git a/dom/media/gtest/moz.build b/dom/media/gtest/moz.build index e7eaf85baa7..033ad6bdd21 100644 --- a/dom/media/gtest/moz.build +++ b/dom/media/gtest/moz.build @@ -36,22 +36,18 @@ UNIFIED_SOURCES += [ "TestAudioSinkWrapper.cpp", "TestAudioTrackEncoder.cpp", "TestAudioTrackGraph.cpp", - "TestBenchmarkStorage.cpp", "TestBitWriter.cpp", "TestBlankVideoDataCreator.cpp", "TestBufferReader.cpp", "TestCubebInputStream.cpp", "TestDataMutex.cpp", - "TestDecoderBenchmark.cpp", "TestDeviceInputTrack.cpp", "TestDriftCompensation.cpp", "TestGMPUtils.cpp", "TestGroupId.cpp", "TestImageConversion.cpp", "TestIntervalSet.cpp", - "TestKeyValueStorage.cpp", "TestMediaCodecsSupport.cpp", - "TestMediaDataDecoder.cpp", "TestMediaDataEncoder.cpp", "TestMediaEventSource.cpp", "TestMediaInfo.cpp", diff --git a/dom/media/mediacapabilities/BenchmarkStorageChild.cpp b/dom/media/mediacapabilities/BenchmarkStorageChild.cpp deleted file mode 100644 index 32bf9adac21..00000000000 --- a/dom/media/mediacapabilities/BenchmarkStorageChild.cpp +++ /dev/null @@ -1,36 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "BenchmarkStorageChild.h" -#include "mozilla/dom/ContentChild.h" - -namespace mozilla { - -static PBenchmarkStorageChild* sChild = nullptr; - -/* static */ -PBenchmarkStorageChild* BenchmarkStorageChild::Instance() { - MOZ_ASSERT(NS_IsMainThread()); - if (!sChild) { - sChild = new BenchmarkStorageChild(); - PContentChild* contentChild = dom::ContentChild::GetSingleton(); - MOZ_ASSERT(contentChild); - if (!contentChild->SendPBenchmarkStorageConstructor()) { - MOZ_CRASH("SendPBenchmarkStorageConstructor failed"); - } - } - MOZ_ASSERT(sChild); - return sChild; -} - -BenchmarkStorageChild::~BenchmarkStorageChild() { - MOZ_ASSERT(NS_IsMainThread()); - if (sChild == this) { - sChild = nullptr; - } -} - -} // namespace mozilla diff --git a/dom/media/mediacapabilities/BenchmarkStorageChild.h b/dom/media/mediacapabilities/BenchmarkStorageChild.h deleted file mode 100644 index c53571e13bb..00000000000 --- a/dom/media/mediacapabilities/BenchmarkStorageChild.h +++ /dev/null @@ -1,28 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef include_dom_media_mediacapabilities_BenchmarkStorageChild_h -#define include_dom_media_mediacapabilities_BenchmarkStorageChild_h - -#include "mozilla/PBenchmarkStorageChild.h" - -namespace mozilla { - -class BenchmarkStorageChild : public PBenchmarkStorageChild { - public: - /* Singleton class to avoid recreating the protocol every time we need access - * to the storage. */ - static PBenchmarkStorageChild* Instance(); - - ~BenchmarkStorageChild(); - - private: - BenchmarkStorageChild() = default; -}; - -} // namespace mozilla - -#endif // include_dom_media_mediacapabilities_BenchmarkStorageChild_h diff --git a/dom/media/mediacapabilities/BenchmarkStorageParent.cpp b/dom/media/mediacapabilities/BenchmarkStorageParent.cpp deleted file mode 100644 index 64ae6ddd445..00000000000 --- a/dom/media/mediacapabilities/BenchmarkStorageParent.cpp +++ /dev/null @@ -1,130 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "BenchmarkStorageParent.h" -#include "KeyValueStorage.h" - -namespace mozilla { - -/* Moving average window size. */ -const int32_t AVG_WINDOW = 20; -/* Calculate the moving average for the new value aValue for the current window - * aWindow and the already existing average aAverage. When the method returns - * aAverage will contain the new average and aWindow will contain the new - * window.*/ -void BenchmarkStorageParent::MovingAverage(int32_t& aAverage, int32_t& aWindow, - const int32_t aValue) { - if (aWindow < AVG_WINDOW) { - aAverage = (aAverage * aWindow + aValue) / (aWindow + 1); - aWindow++; - return; - } - MOZ_ASSERT(aWindow == AVG_WINDOW); - aAverage = (aAverage - aAverage / aWindow) + (aValue / aWindow); -} - -/* In order to decrease the number of times the database is accessed when the - * moving average is stored or retrieved we use the same value to store _both_ - * the window and the average. The range of the average is limited since it is - * a percentage (0-100), and the range of the window is limited - * (1-20). Thus the number that is stored in the database is in the form - * (digits): WWAAA. For example, the value stored when an average(A) of 88 - * corresponds to a window(W) 7 is 7088. The average of 100 that corresponds to - * a window of 20 is 20100. The following methods are helpers to extract or - * construct the stored value according to the above. */ - -/* Stored value will be in the form WWAAA(19098). We need to extract the window - * (19) and the average score (98). The aValue will - * be parsed, the aWindow will contain the window (of the moving average) and - * the return value will contain the average itself. */ -int32_t BenchmarkStorageParent::ParseStoredValue(int32_t aValue, - int32_t& aWindow) { - MOZ_ASSERT(aValue > 999); - MOZ_ASSERT(aValue < 100000); - - int32_t score = aValue % 1000; - aWindow = (aValue / 1000) % 100; - return score; -} - -int32_t BenchmarkStorageParent::PrepareStoredValue(int32_t aScore, - int32_t aWindow) { - MOZ_ASSERT(aScore >= 0); - MOZ_ASSERT(aScore <= 100); - MOZ_ASSERT(aWindow > 0); - MOZ_ASSERT(aWindow < 21); - - return aWindow * 1000 + aScore; -} - -BenchmarkStorageParent::BenchmarkStorageParent() - : mStorage(new KeyValueStorage) {} - -IPCResult BenchmarkStorageParent::RecvPut(const nsCString& aDbName, - const nsCString& aKey, - const int32_t& aValue) { - // In order to calculate and store the new moving average, we need to get the - // stored value and window first, to calculate the new score and window, and - // then to store the new aggregated value. - mStorage->Get(aDbName, aKey) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [storage = mStorage, aDbName, aKey, aValue](int32_t aResult) { - int32_t window = 0; - int32_t average = 0; - if (aResult >= 0) { - // The key found. - average = ParseStoredValue(aResult, window); - } - MovingAverage(average, window, aValue); - int32_t newValue = PrepareStoredValue(average, window); - // Avoid storing if the values are the same. This is an optimization - // to minimize the disk usage. - if (aResult != newValue) { - storage->Put(aDbName, aKey, newValue); - } - }, - [](nsresult rv) { /*do nothing*/ }); - - return IPC_OK(); -} - -IPCResult BenchmarkStorageParent::RecvGet(const nsCString& aDbName, - const nsCString& aKey, - GetResolver&& aResolve) { - mStorage->Get(aDbName, aKey) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [aResolve](int32_t aResult) { - int32_t window = 0; // not used - aResolve(aResult < 0 ? -1 : ParseStoredValue(aResult, window)); - }, - [aResolve](nsresult rv) { aResolve(-1); }); - - return IPC_OK(); -} - -IPCResult BenchmarkStorageParent::RecvCheckVersion(const nsCString& aDbName, - int32_t aVersion) { - mStorage->Get(aDbName, "Version"_ns) - ->Then( - GetCurrentSerialEventTarget(), __func__, - [storage = mStorage, aDbName, aVersion](int32_t aResult) { - if (aVersion != aResult) { - storage->Clear(aDbName)->Then( - GetCurrentSerialEventTarget(), __func__, - [storage, aDbName, aVersion](bool) { - storage->Put(aDbName, "Version"_ns, aVersion); - }, - [](nsresult rv) { /*do nothing*/ }); - } - }, - [](nsresult rv) { /*do nothing*/ }); - - return IPC_OK(); -} - -}; // namespace mozilla diff --git a/dom/media/mediacapabilities/BenchmarkStorageParent.h b/dom/media/mediacapabilities/BenchmarkStorageParent.h deleted file mode 100644 index e9c8f9dd9ba..00000000000 --- a/dom/media/mediacapabilities/BenchmarkStorageParent.h +++ /dev/null @@ -1,43 +0,0 @@ -/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim: set ts=8 sts=2 et sw=2 tw=80: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef include_dom_media_mediacapabilities_BenchmarkStorageParent_h -#define include_dom_media_mediacapabilities_BenchmarkStorageParent_h - -#include "mozilla/PBenchmarkStorageParent.h" - -namespace mozilla { -class KeyValueStorage; - -using mozilla::ipc::IPCResult; - -class BenchmarkStorageParent : public PBenchmarkStorageParent { - friend class PBenchmarkStorageParent; - - public: - BenchmarkStorageParent(); - - IPCResult RecvPut(const nsCString& aDbName, const nsCString& aKey, - const int32_t& aValue); - - IPCResult RecvGet(const nsCString& aDbName, const nsCString& aKey, - GetResolver&& aResolve); - - IPCResult RecvCheckVersion(const nsCString& aDbName, int32_t aVersion); - - /* Helper methods exposed here to be tested via gtest. */ - static void MovingAverage(int32_t& aAverage, int32_t& aWindow, - const int32_t aValue); - static int32_t ParseStoredValue(int32_t aValue, int32_t& aWindow); - static int32_t PrepareStoredValue(int32_t aScore, int32_t aWindow); - - private: - RefPtr mStorage; -}; - -} // namespace mozilla - -#endif // include_dom_media_mediacapabilities_BenchmarkStorageParent_h diff --git a/dom/media/mediacapabilities/DecoderBenchmark.cpp b/dom/media/mediacapabilities/DecoderBenchmark.cpp deleted file mode 100644 index b5c9a2a693a..00000000000 --- a/dom/media/mediacapabilities/DecoderBenchmark.cpp +++ /dev/null @@ -1,243 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include "DecoderBenchmark.h" -#include "mozilla/BenchmarkStorageChild.h" -#include "mozilla/media/MediaUtils.h" -#include "mozilla/StaticPrefs_media.h" - -namespace mozilla { - -void DecoderBenchmark::StoreScore(const nsACString& aDecoderName, - const nsACString& aKey, - RefPtr aStats) { - FrameStatisticsData statsData = aStats->GetFrameStatisticsData(); - uint64_t totalFrames = FrameStatistics::GetTotalFrames(statsData); - uint64_t droppedFrames = FrameStatistics::GetDroppedFrames(statsData); - - MOZ_ASSERT(droppedFrames <= totalFrames); - MOZ_ASSERT(totalFrames >= mLastTotalFrames); - MOZ_ASSERT(droppedFrames >= mLastDroppedFrames); - - uint64_t diffTotalFrames = totalFrames - mLastTotalFrames; - uint64_t diffDroppedFrames = droppedFrames - mLastDroppedFrames; - - /* Update now in case the method returns at the if check bellow. */ - mLastTotalFrames = totalFrames; - mLastDroppedFrames = droppedFrames; - - /* A minimum number of 10 frames is required to store the score. */ - if (diffTotalFrames < 10) { - return; - } - - int32_t percentage = - 100 - 100 * float(diffDroppedFrames) / float(diffTotalFrames); - - MOZ_ASSERT(percentage >= 0); - - Put(aDecoderName, aKey, percentage); -} - -void DecoderBenchmark::Put(const nsACString& aDecoderName, - const nsACString& aKey, int32_t aValue) { - MOZ_ASSERT(NS_IsMainThread()); - const nsCString name(aDecoderName); - const nsCString key(aKey); - BenchmarkStorageChild::Instance()->SendPut(name, key, aValue); -} - -RefPtr DecoderBenchmark::GetScore( - const nsACString& aDecoderName, const nsACString& aKey) { - if (NS_IsMainThread()) { - return Get(aDecoderName, aKey); - } - - RefPtr self = this; - const nsCString decoderName(aDecoderName); - const nsCString key(aKey); - return InvokeAsync( - GetMainThreadSerialEventTarget(), __func__, - [self, decoderName, key] { return self->Get(decoderName, key); }); -} - -RefPtr DecoderBenchmark::Get( - const nsACString& aDecoderName, const nsACString& aKey) { - MOZ_ASSERT(NS_IsMainThread()); - - const nsCString name(aDecoderName); - const nsCString key(aKey); - return BenchmarkStorageChild::Instance()->SendGet(name, key)->Then( - GetCurrentSerialEventTarget(), __func__, - [](int32_t aResult) { - return BenchmarkScorePromise::CreateAndResolve(aResult, __func__); - }, - [](ipc::ResponseRejectReason&&) { - return BenchmarkScorePromise::CreateAndReject(NS_ERROR_FAILURE, - __func__); - }); -} - -/* The key string consists of the video properties resolution, framerate, - * and bitdepth. There are various levels for each of them. The key is - * formated by the closest level, for example, a video with width=1920, - * height=1080, frameRate=24, and bitdepth=8bit will have the key: - * "ResolutionLevel5-FrameRateLevel1-8bit". */ - -#define NELEMS(x) (sizeof(x) / sizeof((x)[0])) - -/* Keep them sorted */ -const uint32_t PixelLevels[] = { - /* 256x144 =*/36864, - /* 426x240 =*/102240, - /* 640x360 =*/230400, - /* 854x480 =*/409920, - /* 1280x720 =*/921600, - /* 1920x1080 =*/2073600, - /* 2560x1440 =*/3686400, - /* 3840x2160 =*/8294400, -}; -const size_t PixelLevelsSize = NELEMS(PixelLevels); - -const uint32_t FrameRateLevels[] = { - 15, 24, 30, 50, 60, -}; -const size_t FrameRateLevelsSize = NELEMS(FrameRateLevels); - -/* static */ -nsCString KeyUtil::FindLevel(const uint32_t aLevels[], const size_t length, - uint32_t aValue) { - MOZ_ASSERT(aValue); - if (aValue <= aLevels[0]) { - return "Level0"_ns; - } - nsAutoCString level("Level"); - size_t lastIndex = length - 1; - if (aValue >= aLevels[lastIndex]) { - level.AppendInt(static_cast(lastIndex)); - return std::move(level); - } - for (size_t i = 0; i < lastIndex; ++i) { - if (aValue >= aLevels[i + 1]) { - continue; - } - if (aValue - aLevels[i] < aLevels[i + 1] - aValue) { - level.AppendInt(static_cast(i)); - return std::move(level); - } - level.AppendInt(static_cast(i + 1)); - return std::move(level); - } - MOZ_CRASH("Array is not sorted"); - return ""_ns; -} - -/* static */ -nsCString KeyUtil::BitDepthToStr(uint8_t aBitDepth) { - switch (aBitDepth) { - case 8: // ColorDepth::COLOR_8 - return "-8bit"_ns; - case 10: // ColorDepth::COLOR_10 - case 12: // ColorDepth::COLOR_12 - case 16: // ColorDepth::COLOR_16 - return "-non8bit"_ns; - } - MOZ_ASSERT_UNREACHABLE("invalid color depth value"); - return ""_ns; -} - -/* static */ -nsCString KeyUtil::CreateKey(const DecoderBenchmarkInfo& aBenchInfo) { - nsAutoCString key("Resolution"); - key.Append(FindLevel(PixelLevels, PixelLevelsSize, - aBenchInfo.mWidth * aBenchInfo.mHeight)); - - key.Append("-FrameRate"); - key.Append( - FindLevel(FrameRateLevels, FrameRateLevelsSize, aBenchInfo.mFrameRate)); - - key.Append(BitDepthToStr(aBenchInfo.mBitDepth)); - - return std::move(key); -} - -void DecoderBenchmark::Store(const DecoderBenchmarkInfo& aBenchInfo, - RefPtr aStats) { - if (!XRE_IsContentProcess()) { - NS_WARNING( - "Storing a benchmark is only allowed only from the content process."); - return; - } - StoreScore(aBenchInfo.mContentType, KeyUtil::CreateKey(aBenchInfo), aStats); -} - -/* static */ -RefPtr DecoderBenchmark::Get( - const DecoderBenchmarkInfo& aBenchInfo) { - if (!XRE_IsContentProcess()) { - NS_WARNING( - "Getting a benchmark is only allowed only from the content process."); - return BenchmarkScorePromise::CreateAndReject(NS_ERROR_FAILURE, __func__); - } - // There is no need for any of the data members to query the database, thus - // it can be a static method. - auto bench = MakeRefPtr(); - return bench->GetScore(aBenchInfo.mContentType, - KeyUtil::CreateKey(aBenchInfo)); -} - -static nsTHashMap DecoderVersionTable() { - nsTHashMap decoderVersionTable; - - /* - * For the decoders listed here, the benchmark version number will be checked. - * If the version number does not exist in the database or is different than - * the version number listed here, all the benchmark entries for this decoder - * will be erased. An example of assigning the version number `1` for AV1 - * decoder is: - * - * decoderVersionTable.InsertOrUpdate("video/av1"_ns, 1); - * - * For the decoders not listed here the `CheckVersion` method exits early, to - * avoid sending unecessary IPC messages. - */ - - return decoderVersionTable; -} - -/* static */ -void DecoderBenchmark::CheckVersion(const nsACString& aDecoderName) { - if (!XRE_IsContentProcess()) { - NS_WARNING( - "Checking version is only allowed only from the content process."); - return; - } - - if (!StaticPrefs::media_mediacapabilities_from_database()) { - return; - } - - nsCString name(aDecoderName); - int32_t version; - if (!DecoderVersionTable().Get(name, &version)) { - // A version is not set for that decoder ignore. - return; - } - - if (NS_IsMainThread()) { - BenchmarkStorageChild::Instance()->SendCheckVersion(name, version); - return; - } - - DebugOnly rv = - GetMainThreadSerialEventTarget()->Dispatch(NS_NewRunnableFunction( - "DecoderBenchmark::CheckVersion", [name, version]() { - BenchmarkStorageChild::Instance()->SendCheckVersion(name, version); - })); - MOZ_ASSERT(NS_SUCCEEDED(rv)); -} - -} // namespace mozilla diff --git a/dom/media/mediacapabilities/DecoderBenchmark.h b/dom/media/mediacapabilities/DecoderBenchmark.h deleted file mode 100644 index af730fcef30..00000000000 --- a/dom/media/mediacapabilities/DecoderBenchmark.h +++ /dev/null @@ -1,77 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* vim:set ts=2 sw=2 sts=2 et cindent: */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#ifndef MOZILLA_DECODER_BENCHMARK_H -#define MOZILLA_DECODER_BENCHMARK_H - -#include "FrameStatistics.h" -#include "mozilla/BenchmarkStorageChild.h" -#include "mozilla/KeyValueStorage.h" - -namespace mozilla { - -typedef KeyValueStorage::GetPromise BenchmarkScorePromise; - -struct DecoderBenchmarkInfo final { - const nsCString mContentType; - const int32_t mWidth; - const int32_t mHeight; - const int32_t mFrameRate; - const uint32_t mBitDepth; -}; - -class DecoderBenchmark final { - NS_INLINE_DECL_THREADSAFE_REFCOUNTING(DecoderBenchmark) - - public: - void Store(const DecoderBenchmarkInfo& aBenchInfo, - RefPtr aStats); - - static RefPtr Get( - const DecoderBenchmarkInfo& aBenchInfo); - - /* For the specific decoder, specified by aDecoderName, it compares the - * version number, from a static list of versions, to the version number - * found in the database. If those numbers are different all benchmark - * entries for that decoder are deleted. */ - static void CheckVersion(const nsACString& aDecoderName); - - private: - void StoreScore(const nsACString& aDecoderName, const nsACString& aKey, - RefPtr aStats); - - RefPtr GetScore(const nsACString& aDecoderName, - const nsACString& aKey); - - void Put(const nsACString& aDecoderName, const nsACString& aKey, - int32_t aValue); - - RefPtr Get(const nsACString& aDecoderName, - const nsACString& aKey); - ~DecoderBenchmark() = default; - - // Keep the last TotalFrames and DroppedFrames from FrameStatistics. - // FrameStatistics keep an ever-increasing counter across the entire video and - // even when there are resolution changes. This code is called whenever there - // is a resolution change and we need to calculate the benchmark since the - // last call. - uint64_t mLastTotalFrames = 0; - uint64_t mLastDroppedFrames = 0; -}; - -class KeyUtil { - public: - static nsCString CreateKey(const DecoderBenchmarkInfo& aBenchInfo); - - private: - static nsCString BitDepthToStr(uint8_t aBitDepth); - static nsCString FindLevel(const uint32_t aLevels[], const size_t length, - uint32_t aValue); -}; - -} // namespace mozilla - -#endif // MOZILLA_DECODER_BENCHMARK_H diff --git a/dom/media/mediacapabilities/MediaCapabilities.cpp b/dom/media/mediacapabilities/MediaCapabilities.cpp index 8a80f6cbfb3..43366756b5b 100644 --- a/dom/media/mediacapabilities/MediaCapabilities.cpp +++ b/dom/media/mediacapabilities/MediaCapabilities.cpp @@ -11,8 +11,6 @@ #include #include "AllocationPolicy.h" -#include "Benchmark.h" -#include "DecoderBenchmark.h" #include "DecoderTraits.h" #include "MediaInfo.h" #include "MediaRecorder.h" @@ -463,7 +461,7 @@ void MediaCapabilities::CreateMediaCapabilitiesDecodingInfo( return AllocationWrapper::CreateDecoder(params, sVideoAllocPolicy) ->Then( taskQueue, __func__, - [taskQueue, frameRate, shouldResistFingerprinting, + [taskQueue, shouldResistFingerprinting, config = std::move(config)]( AllocationWrapper::AllocateDecoderPromise:: ResolveOrRejectValue&& aValue) mutable { @@ -477,7 +475,7 @@ void MediaCapabilities::CreateMediaCapabilitiesDecodingInfo( // efficient. RefPtr p = decoder->Init()->Then( taskQueue, __func__, - [taskQueue, decoder, frameRate, + [taskQueue, decoder, shouldResistFingerprinting, config = std::move(config)]( MediaDataDecoder::InitPromise:: @@ -494,39 +492,7 @@ void MediaCapabilities::CreateMediaCapabilitiesDecodingInfo( p = CapabilitiesPromise::CreateAndResolve(std::move(info), __func__); } else { MOZ_ASSERT(config->IsVideo()); - if (StaticPrefs::media_mediacapabilities_from_database()) { - nsAutoCString reason; - bool powerEfficient = - decoder->IsHardwareAccelerated(reason); - - int32_t videoFrameRate = std::clamp(frameRate, 1, INT32_MAX); - - DecoderBenchmarkInfo benchmarkInfo{ - config->mMimeType, - config->GetAsVideoInfo()->mImage.width, - config->GetAsVideoInfo()->mImage.height, - videoFrameRate, 8}; - - p = DecoderBenchmark::Get(benchmarkInfo)->Then( - GetMainThreadSerialEventTarget(), - __func__, - [powerEfficient](int32_t score) { - // score < 0 means no entry found. - bool smooth = score < 0 || score > - StaticPrefs:: - media_mediacapabilities_drop_threshold(); - MediaCapabilitiesDecodingInfo info; - info.mSupported = true; - info.mSmooth = smooth; - info.mPowerEfficient = powerEfficient; - return CapabilitiesPromise:: - CreateAndResolve(std::move(info), __func__); - }, - [](nsresult rv) { - return CapabilitiesPromise:: - CreateAndReject(rv, __func__); - }); - } else if (config->GetAsVideoInfo()->mImage.height < 480) { + if (config->GetAsVideoInfo()->mImage.height < 480) { // Assume that we can do stuff at 480p or less in // a power efficient manner and smoothly. If // greater than 480p we assume that if the video @@ -543,28 +509,6 @@ void MediaCapabilities::CreateMediaCapabilitiesDecodingInfo( bool smooth = true; bool powerEfficient = decoder->IsHardwareAccelerated(reason); - if (!powerEfficient && - VPXDecoder::IsVP9(config->mMimeType)) { - smooth = VP9Benchmark::IsVP9DecodeFast( - true /* default */); - uint32_t fps = - VP9Benchmark::MediaBenchmarkVp9Fps(); - if (!smooth && fps > 0) { - // The VP9 estimizer decode a 1280x720 video. - // Let's adjust the result for the resolution - // and frame rate of what we actually want. If - // the result is twice that we need we assume - // it will be smooth. - const auto& videoConfig = - *config->GetAsVideoInfo(); - double needed = ((1280.0 * 720.0) / - (videoConfig.mImage.width * - videoConfig.mImage.height) * - fps) / - frameRate; - smooth = needed > 2; - } - } MediaCapabilitiesDecodingInfo info; info.mSupported = true; info.mSmooth = smooth; diff --git a/dom/media/mediacapabilities/PBenchmarkStorage.ipdl b/dom/media/mediacapabilities/PBenchmarkStorage.ipdl deleted file mode 100644 index 220d83f978e..00000000000 --- a/dom/media/mediacapabilities/PBenchmarkStorage.ipdl +++ /dev/null @@ -1,23 +0,0 @@ -/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -include protocol PContent; - -namespace mozilla { - -[ManualDealloc] -async protocol PBenchmarkStorage -{ - manager PContent; - -parent: - async Put(nsCString aDbName, nsCString aKey, int32_t aValue); - async Get(nsCString aDbName, nsCString aKey) returns(int32_t aValue); - async CheckVersion(nsCString aDbName, int32_t aVersion); - async __delete__(); - -}; - -} // namespace mozilla diff --git a/dom/media/mediacapabilities/moz.build b/dom/media/mediacapabilities/moz.build index bafd3de59c1..1ac4d4d4c24 100644 --- a/dom/media/mediacapabilities/moz.build +++ b/dom/media/mediacapabilities/moz.build @@ -7,26 +7,10 @@ EXPORTS.mozilla.dom += [ "MediaCapabilities.h", ] -EXPORTS.mozilla += [ - "BenchmarkStorageChild.h", - "BenchmarkStorageParent.h", - "KeyValueStorage.h", -] - -EXPORTS += [ - "DecoderBenchmark.h", -] - UNIFIED_SOURCES += [ - "BenchmarkStorageChild.cpp", - "BenchmarkStorageParent.cpp", - "DecoderBenchmark.cpp", - "KeyValueStorage.cpp", "MediaCapabilities.cpp", ] -IPDL_SOURCES += ["PBenchmarkStorage.ipdl"] - include("/ipc/chromium/chromium-config.mozbuild") FINAL_LIBRARY = "xul" diff --git a/dom/media/mediasource/MediaSource.cpp b/dom/media/mediasource/MediaSource.cpp index 37dad0a23d7..3431686d782 100644 --- a/dom/media/mediasource/MediaSource.cpp +++ b/dom/media/mediasource/MediaSource.cpp @@ -7,7 +7,6 @@ #include "MediaSource.h" #include "AsyncEventRunner.h" -#include "Benchmark.h" #include "DecoderDoctorDiagnostics.h" #include "DecoderTraits.h" #include "MP4Decoder.h" @@ -80,10 +79,10 @@ static bool IsVP9Forced(DecoderDoctorDiagnostics* aDiagnostics) { MediaContainerType(MEDIAMIMETYPE(VIDEO_MP4)), aDiagnostics); bool hwsupported = gfx::gfxVars::CanUseHardwareVideoDecoding(); #ifdef MOZ_WIDGET_ANDROID - return !mp4supported || !hwsupported || VP9Benchmark::IsVP9DecodeFast() || + return !mp4supported || !hwsupported || java::HardwareCodecCapabilityUtils::HasHWVP9(false /* aIsEncoder */); #else - return !mp4supported || !hwsupported || VP9Benchmark::IsVP9DecodeFast(); + return !mp4supported || !hwsupported; #endif } diff --git a/dom/media/moz.build b/dom/media/moz.build index 222bab4484a..73d244e0d2b 100644 --- a/dom/media/moz.build +++ b/dom/media/moz.build @@ -139,7 +139,6 @@ EXPORTS += [ "AudioSegment.h", "AudioStream.h", "BackgroundVideoDecodingPermissionObserver.h", - "Benchmark.h", "BitReader.h", "BitWriter.h", "BufferMediaResource.h", @@ -263,7 +262,6 @@ UNIFIED_SOURCES += [ "AudioTrackList.cpp", "BackgroundVideoDecodingPermissionObserver.cpp", "BaseMediaResource.cpp", - "Benchmark.cpp", "BitReader.cpp", "BitWriter.cpp", "CallbackThreadRegistry.cpp", diff --git a/dom/media/webcodecs/AudioData.cpp b/dom/media/webcodecs/AudioData.cpp index d50b5c056f4..9c0bf768e82 100644 --- a/dom/media/webcodecs/AudioData.cpp +++ b/dom/media/webcodecs/AudioData.cpp @@ -251,6 +251,9 @@ uint32_t AudioData::NumberOfChannels() const { // https://w3c.github.io/webcodecs/#dom-audiodata-duration uint64_t AudioData::Duration() const { AssertIsOnOwningThread(); + if (!mNumberOfFrames) { + return 0; + } // The spec isn't clear in which direction to convert to integer. // https://github.com/w3c/webcodecs/issues/726 return static_cast( diff --git a/dom/metrics.yaml b/dom/metrics.yaml index f8dfd7eea22..4f19e1e601a 100644 --- a/dom/metrics.yaml +++ b/dom/metrics.yaml @@ -49,6 +49,7 @@ perf: - https://bugzilla.mozilla.org/show_bug.cgi?id=1892231 - https://bugzilla.mozilla.org/show_bug.cgi?id=1923894 - https://bugzilla.mozilla.org/show_bug.cgi?id=1954216 + - https://bugzilla.mozilla.org/show_bug.cgi?id=1949038 data_reviews: - https://bugzilla.mozilla.org/show_bug.cgi?id=1759744#c5 - https://bugzilla.mozilla.org/show_bug.cgi?id=1799727#c4 @@ -138,6 +139,10 @@ perf: 2 - assistive technology in use" type: quantity unit: integer + has_ssd: + description: + "Whether the user has SSD in their hardware or not. Only available on Windows, after startup-idle-tasks are done" + type: boolean send_in_pings: - pageload diff --git a/dom/notification/Notification.cpp b/dom/notification/Notification.cpp index bfd84e1ff6a..8eafde76b10 100644 --- a/dom/notification/Notification.cpp +++ b/dom/notification/Notification.cpp @@ -404,8 +404,8 @@ already_AddRefed Notification::ValidateAndCreate( // Step 12: If options["icon"] exists, then parse it using baseURL, and if // that does not return failure, set notification’s icon URL to the return // value. (Otherwise icon URL is not set.) - nsString iconUrl = aOptions.mIcon; - ResolveIconURL(aGlobal, iconUrl); + nsAutoString iconUrl; + ResolveIconURL(aGlobal, aOptions.mIcon, iconUrl); // Step 19: Set notification’s actions to « ». nsTArray actions; @@ -573,7 +573,8 @@ uint32_t Notification::MaxActions(const GlobalObject& aGlobal) { } nsresult Notification::ResolveIconURL(nsIGlobalObject* aGlobal, - nsString& aIconUrl) { + const nsAString& aIconUrl, + nsString& aDecodedUrl) { nsresult rv = NS_OK; if (aIconUrl.IsEmpty()) { @@ -613,7 +614,8 @@ nsresult Notification::ResolveIconURL(nsIGlobalObject* aGlobal, if (NS_SUCCEEDED(rv)) { nsAutoCString src; srcUri->GetSpec(src); - CopyUTF8toUTF16(src, aIconUrl); + // XXX(krosylight): We should be able to pass UTF8 as-is, or ideally the URI object itself. + CopyUTF8toUTF16(src, aDecodedUrl); } if (encoding == UTF_8_ENCODING) { @@ -628,12 +630,12 @@ nsresult Notification::ResolveIconURL(nsIGlobalObject* aGlobal, nsCOMPtr srcUriUtf8; nsresult rvUtf8 = - NS_NewURI(getter_AddRefs(srcUri), aIconUrl, UTF_8_ENCODING, baseUri); + NS_NewURI(getter_AddRefs(srcUriUtf8), aIconUrl, UTF_8_ENCODING, baseUri); if (NS_SUCCEEDED(rv)) { if (NS_SUCCEEDED(rvUtf8)) { bool equals = false; - if (NS_SUCCEEDED(baseUri->Equals(srcUri, &equals))) { + if (NS_SUCCEEDED(srcUri->Equals(srcUriUtf8, &equals))) { if (equals) { // Okay to be parsed with UTF8 label = glean::web_notification::IconUrlEncodingLabel::eUtf8; diff --git a/dom/notification/Notification.h b/dom/notification/Notification.h index cdcd538f025..b81c6279e37 100644 --- a/dom/notification/Notification.h +++ b/dom/notification/Notification.h @@ -194,7 +194,7 @@ class Notification : public DOMEventTargetHelper, public SupportsWeakPtr { bool CreateActor(); bool SendShow(Promise* aPromise); - static nsresult ResolveIconURL(nsIGlobalObject* aGlobal, nsString& aIconURL); + static nsresult ResolveIconURL(nsIGlobalObject* aGlobal, const nsAString& aIconURL, nsString& aResolvedURL); }; } // namespace mozilla::dom diff --git a/dom/notification/test/mochitest/mochitest.toml b/dom/notification/test/mochitest/mochitest.toml index 4ca82bf4bed..69a128ab59b 100644 --- a/dom/notification/test/mochitest/mochitest.toml +++ b/dom/notification/test/mochitest/mochitest.toml @@ -20,9 +20,10 @@ support-files = ["blank.html"] ["test_notification_crossorigin_iframe_nested_glean.html"] support-files = ["blank.html"] -# This test needs to be run on HTTP (not HTTPS). +["test_notification_euc_kr.html"] ["test_notification_insecure_context.html"] +# This test needs to be run on HTTP (not HTTPS). skip-if = [ "http3", "http2", diff --git a/dom/notification/test/mochitest/test_notification_euc_kr.html b/dom/notification/test/mochitest/test_notification_euc_kr.html new file mode 100644 index 00000000000..5b0d738869f --- /dev/null +++ b/dom/notification/test/mochitest/test_notification_euc_kr.html @@ -0,0 +1,37 @@ + + + + + + diff --git a/dom/privateattribution/PrivateAttributionService.sys.mjs b/dom/privateattribution/PrivateAttributionService.sys.mjs index 76886ae1b58..e61945c7b16 100644 --- a/dom/privateattribution/PrivateAttributionService.sys.mjs +++ b/dom/privateattribution/PrivateAttributionService.sys.mjs @@ -272,8 +272,10 @@ export class PrivateAttributionService { async sendDapReport(id, index, size, value) { const task = { id, + vdaf: "sumvec", + bits: 8, + length: size, time_precision: 60, - measurement_type: "vecu8", }; const measurement = new Array(size).fill(0); diff --git a/dom/privateattribution/tests/xpcshell/test_ppa.js b/dom/privateattribution/tests/xpcshell/test_ppa.js index 560e464350e..13ee8a5a629 100644 --- a/dom/privateattribution/tests/xpcshell/test_ppa.js +++ b/dom/privateattribution/tests/xpcshell/test_ppa.js @@ -167,7 +167,13 @@ add_task(async function testSuccessfulConversion() { ); const expectedMeasurement = { - task: { id: TASK_ID, time_precision: 60, measurement_type: "vecu8" }, + task: { + id: TASK_ID, + vdaf: "sumvec", + bits: 8, + length: HISTOGRAM_SIZE, + time_precision: 60, + }, measurement: [0, 1, 0, 0, 0], timeout: 30000, }; diff --git a/dom/quota/ActorsParent.cpp b/dom/quota/ActorsParent.cpp index fb7019fb44a..1b7d63bf5a0 100644 --- a/dom/quota/ActorsParent.cpp +++ b/dom/quota/ActorsParent.cpp @@ -3560,6 +3560,8 @@ nsresult QuotaManager::RestoreDirectoryMetadata2(nsIFile* aDirectory) { MOZ_ASSERT(aDirectory); MOZ_ASSERT(mStorageConnection); + glean::quotamanager::restore_origin_directory_metadata_counter.Add(); + RefPtr helper = new RestoreDirectoryMetadata2Helper(aDirectory); diff --git a/dom/quota/metrics.yaml b/dom/quota/metrics.yaml index ee3c50d8851..38b4b6c5b84 100644 --- a/dom/quota/metrics.yaml +++ b/dom/quota/metrics.yaml @@ -69,6 +69,27 @@ dom.quota.try: Optionally, the stack within process_id. type: string telemetry_mirror: DomQuotaTry_Error_Step +quotamanager: + restore_origin_directory_metadata_counter: + type: counter + description: > + Increments each time QuotaManager::RestoreDirectoryMetadata2 is called to + restore origin directory metadata. This typically occurs when expected + directory metadata is missing or needs to be regenerated. The counter is + incremented regardless of whether the restoration ultimately succeeds or + fails. + This can provide insight into the impacts of specific code changes, + including potential optimizations or regressions. + bugs: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1961884 + data_reviews: + - https://bugzilla.mozilla.org/show_bug.cgi?id=1961884 + data_sensitivity: + - technical + notification_emails: + - jvarga@mozilla.com + - storage-telemetry@mozilla.com + expires: 142 quotamanager.initialize.repository: number_of_iterations: type: labeled_custom_distribution diff --git a/dom/security/nsContentSecurityUtils.cpp b/dom/security/nsContentSecurityUtils.cpp index f8efeed076f..856c264faa4 100644 --- a/dom/security/nsContentSecurityUtils.cpp +++ b/dom/security/nsContentSecurityUtils.cpp @@ -1969,18 +1969,25 @@ void nsContentSecurityUtils::AssertChromePageHasCSP(Document* aDocument) { return; } - static nsLiteralCString sAllowedChromePagesWithNoCSP[] = { - // Test files - "chrome://mochikit/"_ns, - "chrome://mochitests/"_ns, - "chrome://pageloader/content/pageloader.xhtml"_ns, - "chrome://reftest/"_ns, - "chrome://remote/content/marionette/"_ns, - }; + // TODO These are injecting scripts so it cannot be blocked without + // further coordination. + if (StringBeginsWith(spec, "chrome://remote/content/marionette/"_ns)) { + return; + } - for (const nsLiteralCString& entry : sAllowedChromePagesWithNoCSP) { - if (StringBeginsWith(spec, entry)) { - return; + if (xpc::IsInAutomation()) { + // Test files + static nsLiteralCString sAllowedTestPathsWithNoCSP[] = { + "chrome://mochikit/"_ns, + "chrome://mochitests/"_ns, + "chrome://pageloader/content/pageloader.xhtml"_ns, + "chrome://reftest/"_ns, + }; + + for (const nsLiteralCString& entry : sAllowedTestPathsWithNoCSP) { + if (StringBeginsWith(spec, entry)) { + return; + } } } diff --git a/dom/svg/SVGAnimatedLength.cpp b/dom/svg/SVGAnimatedLength.cpp index 5176bc5a1e6..0a570be640c 100644 --- a/dom/svg/SVGAnimatedLength.cpp +++ b/dom/svg/SVGAnimatedLength.cpp @@ -133,8 +133,9 @@ GeckoFontMetrics UserSpaceMetrics::GetFontMetrics(const Element* aElement) { metrics = Gecko_GetFontMetrics( presContext, WritingMode(style).IsVertical(), style->StyleFont(), style->StyleFont()->mFont.size, - /* aUseUserFontSet = */ true, - /* aRetrieveMathScales */ false); + StyleQueryFontMetricsFlags::USE_USER_FONT_SET | + StyleQueryFontMetricsFlags::NEEDS_CH | + StyleQueryFontMetricsFlags::NEEDS_IC); }); } return metrics; @@ -290,8 +291,9 @@ GeckoFontMetrics NonSVGFrameUserSpaceMetrics::GetFontMetricsForType( return Gecko_GetFontMetrics( mFrame->PresContext(), mFrame->GetWritingMode().IsVertical(), mFrame->StyleFont(), mFrame->StyleFont()->mFont.size, - /* aUseUserFontSet = */ true, - /* aRetrieveMathScales */ false); + StyleQueryFontMetricsFlags::USE_USER_FONT_SET | + StyleQueryFontMetricsFlags::NEEDS_CH | + StyleQueryFontMetricsFlags::NEEDS_IC); case Type::Root: return GetFontMetrics( mFrame->PresContext()->Document()->GetRootElement()); diff --git a/dom/tests/mochitest/general/test_interfaces.js b/dom/tests/mochitest/general/test_interfaces.js index d58160eff80..19b4cdac0b7 100644 --- a/dom/tests/mochitest/general/test_interfaces.js +++ b/dom/tests/mochitest/general/test_interfaces.js @@ -1483,6 +1483,8 @@ let interfaceNamesInGlobalScope = [ // IMPORTANT: Do not change this list without review from a DOM peer! { name: "VideoPlaybackQuality", insecureContext: true }, // IMPORTANT: Do not change this list without review from a DOM peer! + { name: "ViewTransition", insecureContext: true, nightly: true }, + // IMPORTANT: Do not change this list without review from a DOM peer! { name: "VisualViewport", insecureContext: true }, // IMPORTANT: Do not change this list without review from a DOM peer! { name: "VTTCue", insecureContext: true }, @@ -1703,7 +1705,7 @@ let interfaceNamesInGlobalScope = [ // IMPORTANT: Do not change this list without review from a DOM peer! { name: "onbeforeinput", insecureContext: true }, // IMPORTANT: Do not change this list without review from a DOM peer! - { name: "onbeforematch", insecureContext: true, nightly: true }, + { name: "onbeforematch", insecureContext: true }, // IMPORTANT: Do not change this list without review from a DOM peer! { name: "onbeforeprint", insecureContext: true }, // IMPORTANT: Do not change this list without review from a DOM peer! diff --git a/dom/webauthn/PWebAuthnTransaction.ipdl b/dom/webauthn/PWebAuthnTransaction.ipdl index 4f4f2e3cfcb..28ac462c7d0 100644 --- a/dom/webauthn/PWebAuthnTransaction.ipdl +++ b/dom/webauthn/PWebAuthnTransaction.ipdl @@ -16,7 +16,10 @@ include protocol PWindowGlobal; +include "mozilla/dom/WebAuthnIPCUtils.h"; + using mozilla::dom::MaybeDiscardedBrowsingContext from "mozilla/dom/BrowsingContext.h"; +using mozilla::dom::CredentialProtectionPolicy from "mozilla/dom/WebAuthenticationBinding.h"; namespace mozilla { namespace dom { @@ -32,6 +35,11 @@ struct WebAuthnScopedCredential { uint8_t transports; }; +struct WebAuthnExtensionCredProtect { + CredentialProtectionPolicy policy; + bool required; +}; + struct WebAuthnExtensionCredProps { bool credProps; }; @@ -70,6 +78,7 @@ struct WebAuthnExtensionPrfEvalByCredentialEntry { }; union WebAuthnExtension { + WebAuthnExtensionCredProtect; WebAuthnExtensionCredProps; WebAuthnExtensionHmacSecret; WebAuthnExtensionLargeBlob; diff --git a/dom/webauthn/PublicKeyCredential.cpp b/dom/webauthn/PublicKeyCredential.cpp index 523e4abf05b..b542f02b2bb 100644 --- a/dom/webauthn/PublicKeyCredential.cpp +++ b/dom/webauthn/PublicKeyCredential.cpp @@ -178,15 +178,21 @@ already_AddRefed PublicKeyCredential::GetClientCapabilities( entry->mKey = u"extension:credProps"_ns; entry->mValue = true; - // Bug 1844449: support the credProtect extension. - // entry = capabilities.Entries().AppendElement(); - // entry->mKey = u"extension:credentialProtectionPolicy"_ns; - // entry->mValue = true; + entry = capabilities.Entries().AppendElement(); + entry->mKey = u"extension:credentialProtectionPolicy"_ns; +#if defined(XP_MACOSX) || defined(MOZ_WIDGET_ANDROID) + entry->mValue = false; +#else + entry->mValue = true; +#endif - // Bug 1844449: support the credProtect extension. - // entry = capabilities.Entries().AppendElement(); - // entry->mKey = u"extension:enforceCredentialProtectionPolicy"_ns; - // entry->mValue = true; + entry = capabilities.Entries().AppendElement(); + entry->mKey = u"extension:enforceCredentialProtectionPolicy"_ns; +#if defined(XP_MACOSX) || defined(MOZ_WIDGET_ANDROID) + entry->mValue = false; +#else + entry->mValue = true; +#endif // Bug 1844448: support the credBlob extension. // entry = capabilities.Entries().AppendElement(); @@ -656,25 +662,33 @@ void PublicKeyCredential::ParseCreationOptionsFromJSON( aResult.mAttestation = aOptions.mAttestation; if (aOptions.mExtensions.WasPassed()) { - if (aOptions.mExtensions.Value().mAppid.WasPassed()) { - aResult.mExtensions.mAppid.Construct( - aOptions.mExtensions.Value().mAppid.Value()); + const AuthenticationExtensionsClientInputsJSON& extInputsJSON = + aOptions.mExtensions.Value(); + AuthenticationExtensionsClientInputs& extInputs = aResult.mExtensions; + if (extInputsJSON.mAppid.WasPassed()) { + extInputs.mAppid.Construct(extInputsJSON.mAppid.Value()); } - if (aOptions.mExtensions.Value().mCredProps.WasPassed()) { - aResult.mExtensions.mCredProps.Construct( - aOptions.mExtensions.Value().mCredProps.Value()); + if (extInputsJSON.mCredentialProtectionPolicy.WasPassed()) { + extInputs.mCredentialProtectionPolicy.Construct( + extInputsJSON.mCredentialProtectionPolicy.Value()); } - if (aOptions.mExtensions.Value().mHmacCreateSecret.WasPassed()) { - aResult.mExtensions.mHmacCreateSecret.Construct( - aOptions.mExtensions.Value().mHmacCreateSecret.Value()); + if (extInputsJSON.mEnforceCredentialProtectionPolicy.WasPassed()) { + extInputs.mEnforceCredentialProtectionPolicy.Construct( + extInputsJSON.mEnforceCredentialProtectionPolicy.Value()); } - if (aOptions.mExtensions.Value().mMinPinLength.WasPassed()) { - aResult.mExtensions.mMinPinLength.Construct( - aOptions.mExtensions.Value().mMinPinLength.Value()); + if (extInputsJSON.mCredProps.WasPassed()) { + extInputs.mCredProps.Construct(extInputsJSON.mCredProps.Value()); } - if (aOptions.mExtensions.Value().mLargeBlob.WasPassed()) { + if (extInputsJSON.mHmacCreateSecret.WasPassed()) { + extInputs.mHmacCreateSecret.Construct( + extInputsJSON.mHmacCreateSecret.Value()); + } + if (extInputsJSON.mMinPinLength.WasPassed()) { + extInputs.mMinPinLength.Construct(extInputsJSON.mMinPinLength.Value()); + } + if (extInputsJSON.mLargeBlob.WasPassed()) { const AuthenticationExtensionsLargeBlobInputsJSON& largeBlobInputsJSON = - aOptions.mExtensions.Value().mLargeBlob.Value(); + extInputsJSON.mLargeBlob.Value(); AuthenticationExtensionsLargeBlobInputs& largeBlobInputs = aResult.mExtensions.mLargeBlob.Construct(); if (!DecodeAuthenticationExtensionsLargeBlobInputsJSON( @@ -684,11 +698,10 @@ void PublicKeyCredential::ParseCreationOptionsFromJSON( return; } } - if (aOptions.mExtensions.Value().mPrf.WasPassed()) { + if (extInputsJSON.mPrf.WasPassed()) { const AuthenticationExtensionsPRFInputsJSON& prfInputsJSON = - aOptions.mExtensions.Value().mPrf.Value(); - AuthenticationExtensionsPRFInputs& prfInputs = - aResult.mExtensions.mPrf.Construct(); + extInputsJSON.mPrf.Value(); + AuthenticationExtensionsPRFInputs& prfInputs = extInputs.mPrf.Construct(); if (!DecodeAuthenticationExtensionsPRFInputsJSON(aGlobal, prfInputsJSON, prfInputs, aRv)) { aRv.ThrowEncodingError("could not decode prf inputs as urlsafe base64"); diff --git a/dom/webauthn/WebAuthnArgs.cpp b/dom/webauthn/WebAuthnArgs.cpp index 104e86fbcd5..6a475613eb7 100644 --- a/dom/webauthn/WebAuthnArgs.cpp +++ b/dom/webauthn/WebAuthnArgs.cpp @@ -100,6 +100,25 @@ WebAuthnRegisterArgs::GetExcludeListTransports( return NS_OK; } +NS_IMETHODIMP +WebAuthnRegisterArgs::GetCredentialProtectionPolicy( + nsACString& aCredentialProtectionPolicy) { + if (mCredentialProtectionPolicy.isSome()) { + aCredentialProtectionPolicy = + GetEnumString(mCredentialProtectionPolicy.ref()); + return NS_OK; + } + return NS_ERROR_NOT_AVAILABLE; +} + +NS_IMETHODIMP +WebAuthnRegisterArgs::GetEnforceCredentialProtectionPolicy( + bool* aEnforceCredentialProtectionPolicy) { + *aEnforceCredentialProtectionPolicy = mEnforceCredentialProtectionPolicy; + + return NS_OK; +} + NS_IMETHODIMP WebAuthnRegisterArgs::GetCredProps(bool* aCredProps) { *aCredProps = mCredProps; diff --git a/dom/webauthn/WebAuthnArgs.h b/dom/webauthn/WebAuthnArgs.h index d6b75ba21ca..833e7103c57 100644 --- a/dom/webauthn/WebAuthnArgs.h +++ b/dom/webauthn/WebAuthnArgs.h @@ -26,6 +26,7 @@ class WebAuthnRegisterArgs final : public nsIWebAuthnRegisterArgs { mClientDataJSON(aClientDataJSON), mPrivateBrowsing(aPrivateBrowsing), mInfo(aInfo), + mEnforceCredentialProtectionPolicy(false), mCredProps(false), mHmacCreateSecret(false), mLargeBlobSupportRequired(Nothing()), @@ -33,6 +34,12 @@ class WebAuthnRegisterArgs final : public nsIWebAuthnRegisterArgs { mPrf(false) { for (const WebAuthnExtension& ext : mInfo.Extensions()) { switch (ext.type()) { + case WebAuthnExtension::TWebAuthnExtensionCredProtect: + mCredentialProtectionPolicy.emplace( + ext.get_WebAuthnExtensionCredProtect().policy()); + mEnforceCredentialProtectionPolicy = + ext.get_WebAuthnExtensionCredProtect().required(); + break; case WebAuthnExtension::TWebAuthnExtensionCredProps: mCredProps = ext.get_WebAuthnExtensionCredProps().credProps(); break; @@ -65,6 +72,9 @@ class WebAuthnRegisterArgs final : public nsIWebAuthnRegisterArgs { const bool mPrivateBrowsing; const WebAuthnMakeCredentialInfo mInfo; + Maybe mCredentialProtectionPolicy; + bool mEnforceCredentialProtectionPolicy; + // Flags to indicate whether an extension is being requested. bool mCredProps; bool mHmacCreateSecret; @@ -89,6 +99,8 @@ class WebAuthnSignArgs final : public nsIWebAuthnSignArgs { mPrf(false) { for (const WebAuthnExtension& ext : mInfo.Extensions()) { switch (ext.type()) { + case WebAuthnExtension::TWebAuthnExtensionCredProtect: + break; case WebAuthnExtension::TWebAuthnExtensionCredProps: break; case WebAuthnExtension::TWebAuthnExtensionHmacSecret: diff --git a/dom/webauthn/WebAuthnHandler.cpp b/dom/webauthn/WebAuthnHandler.cpp index 87ee914ee98..e3df8f341ff 100644 --- a/dom/webauthn/WebAuthnHandler.cpp +++ b/dom/webauthn/WebAuthnHandler.cpp @@ -257,6 +257,17 @@ already_AddRefed WebAuthnHandler::MakeCredential( } } + if (aOptions.mExtensions.mCredentialProtectionPolicy.WasPassed()) { + bool enforceCredProtect = false; + if (aOptions.mExtensions.mEnforceCredentialProtectionPolicy.WasPassed()) { + enforceCredProtect = + aOptions.mExtensions.mEnforceCredentialProtectionPolicy.Value(); + } + extensions.AppendElement(WebAuthnExtensionCredProtect( + aOptions.mExtensions.mCredentialProtectionPolicy.Value(), + enforceCredProtect)); + } + if (aOptions.mExtensions.mCredProps.WasPassed()) { bool credProps = aOptions.mExtensions.mCredProps.Value(); if (credProps) { diff --git a/dom/webauthn/WebAuthnIPCUtils.h b/dom/webauthn/WebAuthnIPCUtils.h new file mode 100644 index 00000000000..75f352645ea --- /dev/null +++ b/dom/webauthn/WebAuthnIPCUtils.h @@ -0,0 +1,20 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_dom_WebAuthnIPCUtils_h +#define mozilla_dom_WebAuthnIPCUtils_h + +#include "mozilla/dom/BindingIPCUtils.h" +#include "mozilla/dom/WebAuthenticationBinding.h" + +namespace IPC { +template <> +struct ParamTraits + : public mozilla::dom::WebIDLEnumSerializer< + mozilla::dom::CredentialProtectionPolicy> {}; +} // namespace IPC + +#endif // mozilla_dom_WebAuthnIPCUtils_h diff --git a/dom/webauthn/WinWebAuthnService.cpp b/dom/webauthn/WinWebAuthnService.cpp index 074f08ff50b..d98407ad188 100644 --- a/dom/webauthn/WinWebAuthnService.cpp +++ b/dom/webauthn/WinWebAuthnService.cpp @@ -268,9 +268,6 @@ WinWebAuthnService::MakeCredential(uint64_t aTransactionId, return; } - BOOL HmacCreateSecret = FALSE; - BOOL MinPinLength = FALSE; - // RP Information nsString rpId; Unused << aArgs->GetRpId(rpId); @@ -449,39 +446,82 @@ WinWebAuthnService::MakeCredential(uint64_t aTransactionId, winAttestation = WEBAUTHN_ATTESTATION_CONVEYANCE_PREFERENCE_ANY; } - bool requestedPrf; - Unused << aArgs->GetPrf(&requestedPrf); - if (requestedPrf) { - winEnablePrf = TRUE; + // Extensions that might require an entry in the extensions array: + // credProtect, hmac-secret, minPinLength. + nsTArray rgExtension(3); + WEBAUTHN_CRED_PROTECT_EXTENSION_IN winCredProtect = { + .dwCredProtect = WEBAUTHN_USER_VERIFICATION_ANY, + .bRequireCredProtect = FALSE, + }; + BOOL winHmacCreateSecret = FALSE; + BOOL winMinPinLength = FALSE; + + nsCString credProtectPolicy; + if (NS_SUCCEEDED( + aArgs->GetCredentialProtectionPolicy(credProtectPolicy))) { + Maybe policy( + StringToEnum(credProtectPolicy)); + if (policy.isNothing()) { + aPromise->Reject(NS_ERROR_DOM_NOT_SUPPORTED_ERR); + return; + } + switch (policy.ref()) { + case CredentialProtectionPolicy::UserVerificationOptional: + winCredProtect.dwCredProtect = + WEBAUTHN_USER_VERIFICATION_OPTIONAL; + break; + case CredentialProtectionPolicy:: + UserVerificationOptionalWithCredentialIDList: + winCredProtect.dwCredProtect = + WEBAUTHN_USER_VERIFICATION_OPTIONAL_WITH_CREDENTIAL_ID_LIST; + break; + case CredentialProtectionPolicy::UserVerificationRequired: + winCredProtect.dwCredProtect = + WEBAUTHN_USER_VERIFICATION_REQUIRED; + break; + } + + bool enforceCredProtectPolicy; + if (NS_SUCCEEDED(aArgs->GetEnforceCredentialProtectionPolicy( + &enforceCredProtectPolicy)) && + enforceCredProtectPolicy) { + winCredProtect.bRequireCredProtect = TRUE; + } + + rgExtension.AppendElement(WEBAUTHN_EXTENSION{ + .pwszExtensionIdentifier = + WEBAUTHN_EXTENSIONS_IDENTIFIER_CRED_PROTECT, + .cbExtension = sizeof(WEBAUTHN_CRED_PROTECT_EXTENSION_IN), + .pvExtension = &winCredProtect, + }); } - bool requestedCredProps; - Unused << aArgs->GetCredProps(&requestedCredProps); + bool requestedPrf; + bool requestedHmacCreateSecret; + if (NS_SUCCEEDED(aArgs->GetPrf(&requestedPrf)) && + NS_SUCCEEDED( + aArgs->GetHmacCreateSecret(&requestedHmacCreateSecret)) && + (requestedPrf || requestedHmacCreateSecret)) { + winEnablePrf = requestedPrf ? TRUE : FALSE; + winHmacCreateSecret = TRUE; + rgExtension.AppendElement(WEBAUTHN_EXTENSION{ + .pwszExtensionIdentifier = + WEBAUTHN_EXTENSIONS_IDENTIFIER_HMAC_SECRET, + .cbExtension = sizeof(BOOL), + .pvExtension = &winHmacCreateSecret, + }); + } bool requestedMinPinLength; - Unused << aArgs->GetMinPinLength(&requestedMinPinLength); - - bool requestedHmacCreateSecret; - Unused << aArgs->GetHmacCreateSecret(&requestedHmacCreateSecret); - - // Extensions that might require an entry: hmac-secret, minPinLength. - WEBAUTHN_EXTENSION rgExtension[2] = {}; - DWORD cExtensions = 0; - if (requestedPrf || requestedHmacCreateSecret) { - HmacCreateSecret = TRUE; - rgExtension[cExtensions].pwszExtensionIdentifier = - WEBAUTHN_EXTENSIONS_IDENTIFIER_HMAC_SECRET; - rgExtension[cExtensions].cbExtension = sizeof(BOOL); - rgExtension[cExtensions].pvExtension = &HmacCreateSecret; - cExtensions++; - } - if (requestedMinPinLength) { - MinPinLength = TRUE; - rgExtension[cExtensions].pwszExtensionIdentifier = - WEBAUTHN_EXTENSIONS_IDENTIFIER_MIN_PIN_LENGTH; - rgExtension[cExtensions].cbExtension = sizeof(BOOL); - rgExtension[cExtensions].pvExtension = &MinPinLength; - cExtensions++; + if (NS_SUCCEEDED(aArgs->GetMinPinLength(&requestedMinPinLength)) && + requestedMinPinLength) { + winMinPinLength = TRUE; + rgExtension.AppendElement(WEBAUTHN_EXTENSION{ + .pwszExtensionIdentifier = + WEBAUTHN_EXTENSIONS_IDENTIFIER_MIN_PIN_LENGTH, + .cbExtension = sizeof(BOOL), + .pvExtension = &winMinPinLength, + }); } WEBAUTHN_COSE_CREDENTIAL_PARAMETERS WebAuthNCredentialParameters = { @@ -578,9 +618,11 @@ WinWebAuthnService::MakeCredential(uint64_t aTransactionId, NULL, // JsonExt }; - if (cExtensions != 0) { - WebAuthNCredentialOptions.Extensions.cExtensions = cExtensions; - WebAuthNCredentialOptions.Extensions.pExtensions = rgExtension; + if (rgExtension.Length() != 0) { + WebAuthNCredentialOptions.Extensions.cExtensions = + rgExtension.Length(); + WebAuthNCredentialOptions.Extensions.pExtensions = + rgExtension.Elements(); } PWEBAUTHN_CREDENTIAL_ATTESTATION pWebAuthNCredentialAttestation = @@ -603,6 +645,8 @@ WinWebAuthnService::MakeCredential(uint64_t aTransactionId, // include a flag to indicate whether a resident key was created. We // copy that flag to the credProps extension output only if the RP // requested the credProps extension. + bool requestedCredProps; + Unused << aArgs->GetCredProps(&requestedCredProps); if (requestedCredProps && pWebAuthNCredentialAttestation->dwVersion >= WEBAUTHN_CREDENTIAL_ATTESTATION_VERSION_4) { diff --git a/dom/webauthn/authrs_bridge/src/lib.rs b/dom/webauthn/authrs_bridge/src/lib.rs index 1508ff782f7..c5226676f6f 100644 --- a/dom/webauthn/authrs_bridge/src/lib.rs +++ b/dom/webauthn/authrs_bridge/src/lib.rs @@ -15,9 +15,9 @@ use authenticator::{ ctap2::server::{ AuthenticationExtensionsClientInputs, AuthenticationExtensionsPRFInputs, AuthenticationExtensionsPRFOutputs, AuthenticationExtensionsPRFValues, - AuthenticatorAttachment, PublicKeyCredentialDescriptor, PublicKeyCredentialParameters, - PublicKeyCredentialUserEntity, RelyingParty, ResidentKeyRequirement, - UserVerificationRequirement, + AuthenticatorAttachment, CredentialProtectionPolicy, PublicKeyCredentialDescriptor, + PublicKeyCredentialParameters, PublicKeyCredentialUserEntity, RelyingParty, + ResidentKeyRequirement, UserVerificationRequirement, }, errors::AuthenticatorError, statecallback::StateCallback, @@ -828,6 +828,30 @@ impl AuthrsService { } } + let mut credential_protection_policy = None; + let mut enforce_credential_protection_policy = None; + let mut cred_protect_policy_value = nsCString::new(); + let mut enforce_cred_protect_value = false; + if unsafe { args.GetCredentialProtectionPolicy(&mut *cred_protect_policy_value) } + .to_result() + .is_ok() + { + unsafe { args.GetEnforceCredentialProtectionPolicy(&mut enforce_cred_protect_value) } + .to_result()?; + credential_protection_policy = if cred_protect_policy_value + .eq("userVerificationOptional") + { + Some(CredentialProtectionPolicy::UserVerificationOptional) + } else if cred_protect_policy_value.eq("userVerificationOptionalWithCredentialIDList") { + Some(CredentialProtectionPolicy::UserVerificationOptionalWithCredentialIDList) + } else if cred_protect_policy_value.eq("userVerificationRequired") { + Some(CredentialProtectionPolicy::UserVerificationRequired) + } else { + return Err(NS_ERROR_FAILURE); + }; + enforce_credential_protection_policy = Some(enforce_cred_protect_value); + } + let mut cred_props = false; unsafe { args.GetCredProps(&mut cred_props) }.to_result()?; @@ -889,6 +913,8 @@ impl AuthrsService { user_verification_req, resident_key_req, extensions: AuthenticationExtensionsClientInputs { + credential_protection_policy, + enforce_credential_protection_policy, cred_props: cred_props.then_some(true), hmac_create_secret, min_pin_length: min_pin_length.then_some(true), diff --git a/dom/webauthn/authrs_bridge/src/test_token.rs b/dom/webauthn/authrs_bridge/src/test_token.rs index 021af2a9302..8941337c45c 100644 --- a/dom/webauthn/authrs_bridge/src/test_token.rs +++ b/dom/webauthn/authrs_bridge/src/test_token.rs @@ -26,8 +26,8 @@ use authenticator::ctap2::{ }, preflight::CheckKeyHandle, server::{ - AuthenticatorAttachment, PublicKeyCredentialDescriptor, PublicKeyCredentialUserEntity, - RelyingParty, + AuthenticatorAttachment, CredentialProtectionPolicy, PublicKeyCredentialDescriptor, + PublicKeyCredentialUserEntity, RelyingParty, }, }; use authenticator::errors::{AuthenticatorError, CommandError, HIDError, U2FTokenError}; @@ -62,6 +62,7 @@ struct TestTokenCredential { sign_count: AtomicU32, is_discoverable_credential: bool, rp: RelyingParty, + credential_protection_policy: CredentialProtectionPolicy, } impl TestTokenCredential { @@ -153,6 +154,7 @@ impl TestToken { is_discoverable_credential: bool, user_handle: &[u8], sign_count: u32, + credential_protection_policy: CredentialProtectionPolicy, ) { let c = TestTokenCredential { id: id.to_vec(), @@ -161,6 +163,7 @@ impl TestToken { is_discoverable_credential, user_handle: user_handle.to_vec(), sign_count: AtomicU32::new(sign_count), + credential_protection_policy, }; let mut credlist = self.credentials.borrow_mut(); @@ -425,6 +428,13 @@ impl VirtualFidoDevice for TestToken { // 11. Non-discoverable credential case // return at most one assertion matching an allowed credential ID for credential in eligible_cred_iter { + if !self.is_user_verified + && credential.credential_protection_policy + == CredentialProtectionPolicy::UserVerificationRequired + { + // Enforce the credential protection policy given that we have an allow list. + continue; + } if req.allow_list.iter().any(|x| x.id == credential.id) { let mut assertion: GetAssertionResponse = credential.assert(&req.client_data_hash, flags)?; @@ -453,6 +463,13 @@ impl VirtualFidoDevice for TestToken { // 12. Discoverable credential case // return any number of assertions from credentials bound to this RP ID for credential in eligible_cred_iter.filter(|x| x.is_discoverable_credential) { + if !(self.is_user_verified + || credential.credential_protection_policy + == CredentialProtectionPolicy::UserVerificationOptional) + { + // Enforce the credential protection policy given that we do not have an allow list. + continue; + } let mut assertion: GetAssertionResponse = credential.assert(&req.client_data_hash, flags)?.into(); assertion.auth_data.extensions = Extension::default(); @@ -593,6 +610,7 @@ impl VirtualFidoDevice for TestToken { extensions.min_pin_length = Some(4); } + extensions.cred_protect = req.extensions.cred_protect; if let Some(req_hmac_or_prf) = &req.extensions.hmac_secret { match req_hmac_or_prf { HmacCreateSecretOrPrf::HmacCreateSecret(true) | HmacCreateSecretOrPrf::Prf => { @@ -625,6 +643,9 @@ impl VirtualFidoDevice for TestToken { req.options.resident_key.unwrap_or(false), &req.user.clone().unwrap_or_default().id, counter, + req.extensions + .cred_protect + .unwrap_or(CredentialProtectionPolicy::UserVerificationOptional), ); // 19. Generate attestation statement @@ -821,6 +842,7 @@ impl TestTokenManager { is_resident_credential, user_handle, sign_count, + CredentialProtectionPolicy::UserVerificationOptional, ); Ok(()) } diff --git a/dom/webauthn/moz.build b/dom/webauthn/moz.build index b83f5444f8d..fcadbcbc0c7 100644 --- a/dom/webauthn/moz.build +++ b/dom/webauthn/moz.build @@ -29,6 +29,7 @@ EXPORTS.mozilla.dom += [ "AuthenticatorResponse.h", "PublicKeyCredential.h", "WebAuthnHandler.h", + "WebAuthnIPCUtils.h", "WebAuthnPromiseHolder.h", "WebAuthnTransactionChild.h", "WebAuthnTransactionParent.h", diff --git a/dom/webauthn/nsIWebAuthnArgs.idl b/dom/webauthn/nsIWebAuthnArgs.idl index ee322a0d354..8d48becd483 100644 --- a/dom/webauthn/nsIWebAuthnArgs.idl +++ b/dom/webauthn/nsIWebAuthnArgs.idl @@ -40,6 +40,8 @@ interface nsIWebAuthnRegisterArgs : nsISupports { // WebAuthn AuthenticationExtensionsClientInputs. That's not feasible here. // So we define a getter for each supported extension input and use the // return code to signal presence. + [must_use] readonly attribute AUTF8String credentialProtectionPolicy; + [must_use] readonly attribute boolean enforceCredentialProtectionPolicy; [must_use] readonly attribute boolean credProps; [must_use] readonly attribute boolean hmacCreateSecret; [must_use] readonly attribute boolean minPinLength; diff --git a/dom/webauthn/tests/test_webauthn_get_assertion.html b/dom/webauthn/tests/test_webauthn_get_assertion.html index 3de282a09ae..9b161f8d753 100644 --- a/dom/webauthn/tests/test_webauthn_get_assertion.html +++ b/dom/webauthn/tests/test_webauthn_get_assertion.html @@ -18,8 +18,9 @@ diff --git a/dom/webauthn/tests/u2futil.js b/dom/webauthn/tests/u2futil.js index e8026e8e599..d9353a298d4 100644 --- a/dom/webauthn/tests/u2futil.js +++ b/dom/webauthn/tests/u2futil.js @@ -72,6 +72,18 @@ async function addVirtualAuthenticator( return id; } +async function setUserVerified(authenticatorId, isUserVerified) { + await SpecialPowers.spawnChrome( + [authenticatorId, isUserVerified], + (authenticatorId, isUserVerified) => { + let webauthnService = Cc["@mozilla.org/webauthn/service;1"].getService( + Ci.nsIWebAuthnService + ); + webauthnService.setUserVerified(authenticatorId, isUserVerified); + } + ); +} + function handleEventMessage(event) { if ("test" in event.data) { let summary = event.data.test + ": " + event.data.msg; diff --git a/dom/webgpu/moz.build b/dom/webgpu/moz.build index 76e1a72d4fc..99814d5561a 100644 --- a/dom/webgpu/moz.build +++ b/dom/webgpu/moz.build @@ -8,6 +8,7 @@ with Files("**"): BUG_COMPONENT = ("Core", "Graphics: WebGPU") MOCHITEST_MANIFESTS += [ + "tests/mochitest/mochitest-disabled.toml", "tests/mochitest/mochitest-no-pref.toml", "tests/mochitest/mochitest-resistfingerprinting.toml", "tests/mochitest/mochitest.toml", diff --git a/dom/webgpu/tests/mochitest/mochitest-disabled.toml b/dom/webgpu/tests/mochitest/mochitest-disabled.toml new file mode 100644 index 00000000000..73b128533d2 --- /dev/null +++ b/dom/webgpu/tests/mochitest/mochitest-disabled.toml @@ -0,0 +1,19 @@ +[DEFAULT] +subsuite = "webgpu" + +# This file's tests should run when WebGPU is disabled by the logic in +# `gfxPlatform::InitWebGPUConfig`. +# +# This condition should be the exact complement of the `run-if` condition +# in `mochitest.toml`. +run-if = ["!(nightly_build || (os == 'win' && early_beta_or_earlier))"] + +# `test-verify` jobs don't guarantee a GPU, so skip them. +skip-if = ["verify"] + +# Even if the pref were enabled, WebGPU is only available in secure contexts. +# +# See spec WebIDL, like this: https://www.w3.org/TR/webgpu/#navigatorgpu +scheme = "https" + +["test_adapter_disabled.html"] diff --git a/dom/webgpu/tests/mochitest/mochitest-no-pref.toml b/dom/webgpu/tests/mochitest/mochitest-no-pref.toml index ef83071c666..6b637b934df 100644 --- a/dom/webgpu/tests/mochitest/mochitest-no-pref.toml +++ b/dom/webgpu/tests/mochitest/mochitest-no-pref.toml @@ -1,6 +1,8 @@ [DEFAULT] subsuite = "webgpu" -run-if = ["release_or_beta"] +# This file's tests should run when 'modules/libpref/init/StaticPrefList.yaml' +# defaults the 'dom.webgpu.enabled' pref to true. +run-if = ["!early_beta_or_earlier"] skip-if = ["verify"] # `test-verify` jobs don't guarantee a GPU, so skip them. # Even if the pref were enabled, WebGPU is only available in secure contexts. @@ -8,4 +10,4 @@ skip-if = ["verify"] # `test-verify` jobs don't guarantee a GPU, so skip them. # See spec WebIDL, like this: https://www.w3.org/TR/webgpu/#navigatorgpu scheme = "https" -["test_disabled.html"] +["test_gpu_disabled.html"] diff --git a/dom/webgpu/tests/mochitest/mochitest.toml b/dom/webgpu/tests/mochitest/mochitest.toml index 2c20197a39f..064561636bc 100644 --- a/dom/webgpu/tests/mochitest/mochitest.toml +++ b/dom/webgpu/tests/mochitest/mochitest.toml @@ -1,7 +1,16 @@ [DEFAULT] subsuite = "webgpu" -run-if = ["!release_or_beta"] -skip-if = ["verify"] # `test-verify` jobs don't guarantee a GPU, so skip them. + +# This test suite should run when WebGPU is enabled by the preprocessor +# conditionals in `gfxPlatform::InitWebGPUConfig`. +# +# This condition should be the exact complement of the `run-if` +# condition in `mochitest-disabled.html`. +run-if = ["nightly_build || (os == 'win' && early_beta_or_earlier)"] + +# `test-verify` jobs don't guarantee a GPU, so skip them. +skip-if = ["verify"] + prefs = [ "dom.webgpu.enabled=true", "dom.webgpu.workers.enabled=true", @@ -68,3 +77,5 @@ scheme = "http" ["test_submit_render_empty.html"] ["test_submit_render_empty.worker.html"] + +["test_adapter_enabled.html"] diff --git a/dom/webgpu/tests/mochitest/test_adapter_disabled.html b/dom/webgpu/tests/mochitest/test_adapter_disabled.html new file mode 100644 index 00000000000..ea097da373e --- /dev/null +++ b/dom/webgpu/tests/mochitest/test_adapter_disabled.html @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/dom/webgpu/tests/mochitest/test_adapter_enabled.html b/dom/webgpu/tests/mochitest/test_adapter_enabled.html new file mode 100644 index 00000000000..0d79feda79a --- /dev/null +++ b/dom/webgpu/tests/mochitest/test_adapter_enabled.html @@ -0,0 +1,26 @@ + + + + + + + + + + + diff --git a/dom/webgpu/tests/mochitest/test_disabled.html b/dom/webgpu/tests/mochitest/test_gpu_disabled.html similarity index 100% rename from dom/webgpu/tests/mochitest/test_disabled.html rename to dom/webgpu/tests/mochitest/test_gpu_disabled.html diff --git a/dom/webidl/HTMLDialogElement.webidl b/dom/webidl/HTMLDialogElement.webidl index 22741b8ca53..5f16d98ee0f 100644 --- a/dom/webidl/HTMLDialogElement.webidl +++ b/dom/webidl/HTMLDialogElement.webidl @@ -24,4 +24,6 @@ interface HTMLDialogElement : HTMLElement { undefined showModal(); [CEReactions] undefined close(optional DOMString returnValue); + [CEReactions, Pref="dom.element.dialog.request_close.enabled"] + undefined requestClose(optional DOMString returnValue); }; diff --git a/dom/webidl/WebAuthentication.webidl b/dom/webidl/WebAuthentication.webidl index 6410fd5bd39..90b0cabfe25 100644 --- a/dom/webidl/WebAuthentication.webidl +++ b/dom/webidl/WebAuthentication.webidl @@ -298,6 +298,28 @@ partial dictionary AuthenticationExtensionsClientOutputsJSON { * */ +// credProtect +// +enum CredentialProtectionPolicy { + "userVerificationOptional", + "userVerificationOptionalWithCredentialIDList", + "userVerificationRequired", +}; + +partial dictionary AuthenticationExtensionsClientInputs { + CredentialProtectionPolicy credentialProtectionPolicy; + // The specification includes a default `= false` value for + // enforceCredentialProtectionPolicy. We omit it here to distinguish between + // three logical cases: the extension was not sent, the extension was sent + // with value false, the extension was sent with value true. + boolean enforceCredentialProtectionPolicy; +}; + +partial dictionary AuthenticationExtensionsClientInputsJSON { + CredentialProtectionPolicy credentialProtectionPolicy; + boolean enforceCredentialProtectionPolicy; +}; + // hmac-secret // // note: we don't support hmac-secret in get() (see instead the prf extension) diff --git a/gfx/layers/apz/test/mochitest/test_group_zoom-2.html b/gfx/layers/apz/test/mochitest/test_group_zoom-2.html index 47535c025ad..a727843355a 100644 --- a/gfx/layers/apz/test/mochitest/test_group_zoom-2.html +++ b/gfx/layers/apz/test/mochitest/test_group_zoom-2.html @@ -46,6 +46,8 @@ var subtests = [ {"file": "helper_zoom_restore_position_tabswitch.html", "prefs": prefs}, {"file": "helper_zoom_with_dynamic_toolbar.html", "prefs": prefs}, {"file": "helper_visual_scrollbars_pagescroll.html", "prefs": prefs}, + {"file": "helper_click_interrupt_animation.html", + "prefs": [...prefs, ["layout.scroll.disable-pixel-alignment", true]]}, {"file": "helper_overflowhidden_zoom.html", "prefs": prefs}, {"file": "helper_zoom_keyboardscroll.html", "prefs": prefs}, {"file": "helper_zoom_out_clamped_scrollpos.html", "prefs": instant_repaint_prefs}, @@ -61,11 +63,6 @@ if (isApzEnabled()) { SimpleTest.requestLongerTimeout(2); SimpleTest.waitForExplicitFinish(); - if (getPlatform() != "mac") { - // Disabled on Mac due to frequent intermittents (bug 1959374). - subtests.push({"file": "helper_click_interrupt_animation.html", "prefs": prefs}); - } - if (getPlatform() == "linux") { subtests.push( {"file": "helper_zoom_with_touchpad.html", "prefs": prefs}, diff --git a/gfx/thebes/gfxPlatform.cpp b/gfx/thebes/gfxPlatform.cpp index daf108e6611..5e3d63d5874 100644 --- a/gfx/thebes/gfxPlatform.cpp +++ b/gfx/thebes/gfxPlatform.cpp @@ -3203,10 +3203,14 @@ void gfxPlatform::InitWebGPUConfig() { feature.Disable(FeatureStatus::Blocklisted, message.get(), failureId); } -#if !(defined(NIGHTLY_BUILD) || (defined(XP_WIN) && defined(EARLY_BETA_OR_EARLIER))) - feature.ForceDisable(FeatureStatus::Blocked, - "WebGPU cannot be enabled unless in Nightly, or Early Beta on Windows.", - "WEBGPU_DISABLE_RELEASE_OR_NON_WINDOWS_EARLY_BETA"_ns); + // When this condition changes, be sure to update the `run-if` + // conditions in `dom/webgpu/tests/mochitest/*.toml` accordingly. +#if !(defined(NIGHTLY_BUILD) || \ + (defined(XP_WIN) && defined(EARLY_BETA_OR_EARLIER))) + feature.ForceDisable( + FeatureStatus::Blocked, + "WebGPU cannot be enabled unless in Nightly, or Early Beta on Windows.", + "WEBGPU_DISABLE_RELEASE_OR_NON_WINDOWS_EARLY_BETA"_ns); #endif gfxVars::SetAllowWebGPU(feature.IsEnabled()); diff --git a/gfx/thebes/gfxTextRun.cpp b/gfx/thebes/gfxTextRun.cpp index 3730fca4f92..28d828fc701 100644 --- a/gfx/thebes/gfxTextRun.cpp +++ b/gfx/thebes/gfxTextRun.cpp @@ -3940,7 +3940,7 @@ already_AddRefed gfxFontGroup::WhichSystemFontSupportsChar( } gfxFont::Metrics gfxFontGroup::GetMetricsForCSSUnits( - gfxFont::Orientation aOrientation) { + gfxFont::Orientation aOrientation, StyleQueryFontMetricsFlags aFlags) { bool isFirst; RefPtr font = GetFirstValidFont(0x20, nullptr, &isFirst); auto metrics = font->GetMetrics(aOrientation); @@ -3948,7 +3948,8 @@ gfxFont::Metrics gfxFontGroup::GetMetricsForCSSUnits( // If the font we used to get metrics was not the first in the list, // or if it doesn't support the ZERO character, check for the font that // does support ZERO and use its metrics for the 'ch' unit. - if (!isFirst || !font->HasCharacter('0')) { + if ((aFlags & StyleQueryFontMetricsFlags::NEEDS_CH) && + (!isFirst || !font->HasCharacter('0'))) { RefPtr zeroFont = GetFirstValidFont('0'); if (zeroFont != font) { const auto& zeroMetrics = zeroFont->GetMetrics(aOrientation); @@ -3957,7 +3958,8 @@ gfxFont::Metrics gfxFontGroup::GetMetricsForCSSUnits( } // Likewise for the WATER ideograph character used as the basis for 'ic'. - if (!isFirst || !font->HasCharacter(0x6C34)) { + if ((aFlags & StyleQueryFontMetricsFlags::NEEDS_IC) && + (!isFirst || !font->HasCharacter(0x6C34))) { RefPtr icFont = GetFirstValidFont(0x6C34); if (icFont != font) { const auto& icMetrics = icFont->GetMetrics(aOrientation); diff --git a/gfx/thebes/gfxTextRun.h b/gfx/thebes/gfxTextRun.h index a527ad3d817..7fbb5d8e7f6 100644 --- a/gfx/thebes/gfxTextRun.h +++ b/gfx/thebes/gfxTextRun.h @@ -1072,7 +1072,11 @@ class gfxFontGroup final : public gfxTextRunFactory { // to render specific characters, not simply the "first available" font. // https://drafts.csswg.org/css-values-4/#ch // https://drafts.csswg.org/css-values-4/#ic - gfxFont::Metrics GetMetricsForCSSUnits(gfxFont::Orientation aOrientation); + // Whether extra font resources may be loaded to resolve 'ch' and 'ic' + // depends on the corresponding flags passed by the caller. + gfxFont::Metrics GetMetricsForCSSUnits( + gfxFont::Orientation aOrientation, + mozilla::StyleQueryFontMetricsFlags aFlags); protected: friend class mozilla::PostTraversalTask; diff --git a/gfx/wgpu_bindings/Cargo.toml b/gfx/wgpu_bindings/Cargo.toml index 368bb456993..45560841c52 100644 --- a/gfx/wgpu_bindings/Cargo.toml +++ b/gfx/wgpu_bindings/Cargo.toml @@ -17,7 +17,7 @@ default = [] [dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" +rev = "35f131ff10153e48b790e1f156c864734063ce71" # TODO: remove the replay feature on the next update containing https://github.com/gfx-rs/wgpu/pull/5182 features = [ "serde", @@ -33,33 +33,33 @@ features = [ [target.'cfg(any(target_os = "macos", target_os = "ios"))'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" +rev = "35f131ff10153e48b790e1f156c864734063ce71" features = ["metal"] # We want the wgpu-core Direct3D backends on Windows. [target.'cfg(windows)'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" +rev = "35f131ff10153e48b790e1f156c864734063ce71" features = ["dx12"] # We want the wgpu-core Vulkan backend on Linux and Windows. [target.'cfg(any(windows, all(unix, not(any(target_os = "macos", target_os = "ios")))))'.dependencies.wgc] package = "wgpu-core" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" +rev = "35f131ff10153e48b790e1f156c864734063ce71" features = ["vulkan"] [dependencies.wgt] package = "wgpu-types" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" +rev = "35f131ff10153e48b790e1f156c864734063ce71" [dependencies.wgh] package = "wgpu-hal" git = "https://github.com/gfx-rs/wgpu" -rev = "f1c496523ff0aa10c162fd01ad606960e925a5a4" -features = ["oom_panic", "device_lost_panic", "internal_error_panic"] +rev = "35f131ff10153e48b790e1f156c864734063ce71" +features = ["device_lost_panic", "internal_error_panic"] [target.'cfg(windows)'.dependencies] windows = { version = "0.58", default-features = false, features = [ diff --git a/gfx/wgpu_bindings/moz.yaml b/gfx/wgpu_bindings/moz.yaml index aa11c8a6f80..1949145d165 100644 --- a/gfx/wgpu_bindings/moz.yaml +++ b/gfx/wgpu_bindings/moz.yaml @@ -8,8 +8,8 @@ origin: name: wgpu description: A cross-platform pure-Rust graphics API, modeled on the WebGPU standard url: https://github.com/gfx-rs/wgpu - release: f1c496523ff0aa10c162fd01ad606960e925a5a4 (2025-04-11T18:18:43Z). - revision: f1c496523ff0aa10c162fd01ad606960e925a5a4 + release: 35f131ff10153e48b790e1f156c864734063ce71 (Wed Apr 23 03:30:36 2025 +0000). + revision: 35f131ff10153e48b790e1f156c864734063ce71 license: ['MIT', 'Apache-2.0'] updatebot: diff --git a/gfx/wgpu_bindings/src/server.rs b/gfx/wgpu_bindings/src/server.rs index 29de05de4aa..68aaac5156a 100644 --- a/gfx/wgpu_bindings/src/server.rs +++ b/gfx/wgpu_bindings/src/server.rs @@ -136,7 +136,6 @@ pub extern "C" fn wgpu_server_new(owner: *mut c_void, use_dxc: bool) -> *mut Glo let dx12_shader_compiler = if use_dxc { wgt::Dx12Compiler::DynamicDxc { dxc_path: "dxcompiler.dll".into(), - dxil_path: "dxil.dll".into(), max_shader_model: wgt::DxcShaderModel::V6_6, } } else { @@ -158,6 +157,10 @@ pub extern "C" fn wgpu_server_new(owner: *mut c_void, use_dxc: bool) -> *mut Glo }, noop: wgt::NoopBackendOptions { enable: false }, }, + memory_budget_thresholds: wgt::MemoryBudgetThresholds { + for_resource_creation: Some(95), + for_device_loss: Some(100), + }, }, ); let global = Global { global, owner }; diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ffc4b69626c..8e7ca15f423 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,8 +5,6 @@ lint = "31.9.2" python-envs-plugin = "0.0.31" maven-ant-tasks = "2.1.3" -okhttp = "4.12.0" -okio = "3.10.1" androidsvg = "1.4" detekt = "1.23.8" ktlint = "0.49.1" @@ -59,7 +57,7 @@ installreferrer = "2.2" material = "1.12.0" osslicenses-plugin = "0.10.6" play-review = "2.0.2" -play-services-ads-id = "18.1.0" +play-services-ads-id = "18.2.0" play-services-base = "18.7.0" play-services-fido = "21.2.0" protobuf = "4.30.2" # Keep Protobuf in sync with the version used by AppServices. @@ -98,7 +96,9 @@ robolectric = "4.14.1" # Third party library versions adjust = "5.3.0" -sentry = "8.8.0" +okhttp = "4.12.0" +okio = "3.11.0" +sentry = "8.9.0" commons-exec = "1.3" spotless = "7.0.2" diff --git a/intl/components/gtest/TestDateTimeFormat.cpp b/intl/components/gtest/TestDateTimeFormat.cpp index 4a0b0788ed3..3a7846522a8 100644 --- a/intl/components/gtest/TestDateTimeFormat.cpp +++ b/intl/components/gtest/TestDateTimeFormat.cpp @@ -574,9 +574,6 @@ TEST(IntlDateTimeFormat, SetStartTimeIfGregorian) auto timeZone = Some(MakeStringSpan(u"UTC")); - // Beginning of ECMAScript time. - constexpr double StartOfTime = -8.64e15; - // Gregorian change date defaults to October 15, 1582 in ICU. Test with a date // before the default change date, in this case January 1, 1582. constexpr double FirstJanuary1582 = -12244089600000.0; @@ -597,38 +594,25 @@ TEST(IntlDateTimeFormat, SetStartTimeIfGregorian) MakeStringSpan(locale), style, gen.get(), timeZone) .unwrap(); - const char* Dec22_1581; const char* Jan01_1582; const char* Jan01_1583; if (locale == "en-US-u-ca-iso8601"sv) { - Dec22_1581 = "1581 December 22"; Jan01_1582 = "1582 January 1"; Jan01_1583 = "1583 January 1"; } else { - Dec22_1581 = "December 22, 1581"; Jan01_1582 = "January 1, 1582"; Jan01_1583 = "January 1, 1583"; } TestBuffer buffer; - // Before the default Gregorian change date, so interpreted in the Julian - // calendar, which is December 22, 1581. - dtFormat->TryFormat(FirstJanuary1582, buffer).unwrap(); - ASSERT_TRUE(buffer.verboseMatches(Dec22_1581)); - - // After default Gregorian change date, so January 1, 1583. - dtFormat->TryFormat(FirstJanuary1582 + oneYear, buffer).unwrap(); - ASSERT_TRUE(buffer.verboseMatches(Jan01_1583)); - - // Adjust the start time to use a proleptic Gregorian calendar. - dtFormat->SetStartTimeIfGregorian(StartOfTime); - - // Now interpreted in proleptic Gregorian calendar at January 1, 1582. + // Before the default Gregorian change date, but not interpreted in the + // Julian calendar, which is December 22, 1581. Instead interpreted in + // proleptic Gregorian calendar at January 1, 1582. dtFormat->TryFormat(FirstJanuary1582, buffer).unwrap(); ASSERT_TRUE(buffer.verboseMatches(Jan01_1582)); - // Still January 1, 1583. + // After default Gregorian change date, so January 1, 1583. dtFormat->TryFormat(FirstJanuary1582 + oneYear, buffer).unwrap(); ASSERT_TRUE(buffer.verboseMatches(Jan01_1583)); } diff --git a/intl/components/moz.build b/intl/components/moz.build index 592375bdbf5..c33016c3d27 100644 --- a/intl/components/moz.build +++ b/intl/components/moz.build @@ -77,6 +77,9 @@ LOCAL_INCLUDES += [ "/intl/icu_capi/bindings/c", ] +if not CONFIG["MOZ_SYSTEM_ICU"]: + DIRS += ["src/calendar"] + # At the time of this writing the MOZ_HAS_MOZGLUE define must be true in order to # correctly include ConvertUtf8toUtf16 in certain include paths, otherwise it results # in a compile time "undeclared identifier" error. See: diff --git a/intl/components/src/DateIntervalFormat.cpp b/intl/components/src/DateIntervalFormat.cpp index 0097668f8bc..c09b3433897 100644 --- a/intl/components/src/DateIntervalFormat.cpp +++ b/intl/components/src/DateIntervalFormat.cpp @@ -2,12 +2,18 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -#include "DateTimeFormat.h" // for DATE_TIME_FORMAT_REPLACE_SPECIAL_SPACES #include "DateTimeFormatUtils.h" #include "ScopedICUObject.h" #include "mozilla/intl/Calendar.h" #include "mozilla/intl/DateIntervalFormat.h" +#include "mozilla/intl/DateTimeFormat.h" + +#if !MOZ_SYSTEM_ICU +# include "unicode/calendar.h" +# include "unicode/datefmt.h" +# include "unicode/dtitvfmt.h" +#endif namespace mozilla::intl { @@ -63,7 +69,23 @@ Result, ICUError> DateIntervalFormat::TryCreate( return Err(ToICUError(status)); } - return UniquePtr(new DateIntervalFormat(dif)); + auto result = UniquePtr(new DateIntervalFormat(dif)); + +#if !MOZ_SYSTEM_ICU + auto* dtif = reinterpret_cast(dif); + const icu::Calendar* calendar = dtif->getDateFormat()->getCalendar(); + + auto replacement = CreateCalendarOverride(calendar); + if (replacement.isErr()) { + return replacement.propagateErr(); + } + + if (auto newCalendar = replacement.unwrap()) { + dtif->adoptCalendar(newCalendar.release()); + } +#endif + + return result; } DateIntervalFormat::~DateIntervalFormat() { @@ -133,6 +155,50 @@ ICUResult DateIntervalFormat::TryFormatDateTime( return Ok(); } +ICUResult DateIntervalFormat::TryFormatDateTime( + double aStart, double aEnd, const DateTimeFormat* aDateTimeFormat, + AutoFormattedDateInterval& aFormatted, bool* aPracticallyEqual) const { +#if MOZ_SYSTEM_ICU + // We can't access the calendar used by UDateIntervalFormat to change it to a + // proleptic Gregorian calendar. Instead we need to call a different formatter + // function which accepts UCalendar instead of UDate. + // But creating new UCalendar objects for each call is slow, so when we can + // ensure that the input dates are later than the Gregorian change date, + // directly call the formatter functions taking UDate. + + constexpr int32_t msPerDay = 24 * 60 * 60 * 1000; + + // The Gregorian change date "1582-10-15T00:00:00.000Z". + constexpr double GregorianChangeDate = -12219292800000.0; + + // Add a full day to account for time zone offsets. + constexpr double GregorianChangeDatePlusOneDay = + GregorianChangeDate + msPerDay; + + if (aStart < GregorianChangeDatePlusOneDay || + aEnd < GregorianChangeDatePlusOneDay) { + // Create calendar objects for the start and end date by cloning the date + // formatter calendar. The date formatter calendar already has the correct + // time zone set and was changed to use a proleptic Gregorian calendar. + auto startCal = aDateTimeFormat->CloneCalendar(aStart); + if (startCal.isErr()) { + return startCal.propagateErr(); + } + + auto endCal = aDateTimeFormat->CloneCalendar(aEnd); + if (endCal.isErr()) { + return endCal.propagateErr(); + } + + return TryFormatCalendar(*startCal.unwrap(), *endCal.unwrap(), aFormatted, + aPracticallyEqual); + } +#endif + + // The common fast path which doesn't require creating calendar objects. + return TryFormatDateTime(aStart, aEnd, aFormatted, aPracticallyEqual); +} + ICUResult DateIntervalFormat::TryFormattedToParts( const AutoFormattedDateInterval& aFormatted, DateTimePartVector& aParts) const { diff --git a/intl/components/src/DateIntervalFormat.h b/intl/components/src/DateIntervalFormat.h index c4dbce807a7..aac9be9e46f 100644 --- a/intl/components/src/DateIntervalFormat.h +++ b/intl/components/src/DateIntervalFormat.h @@ -17,6 +17,7 @@ namespace mozilla::intl { class Calendar; +class DateTimeFormat; using AutoFormattedDateInterval = AutoFormattedResult, ICUError> DateTimeFormat::TryCreateFromStyle( return Err(ToICUError(status)); } + MOZ_TRY(ApplyCalendarOverride(dateFormat)); + auto df = UniquePtr(new DateTimeFormat(dateFormat)); if (aStyleBag.time && (aStyleBag.hour12 || aStyleBag.hourCycle)) { @@ -564,11 +566,12 @@ DateTimeFormat::TryCreateFromPattern( UDateFormat* dateFormat = udat_open( UDAT_PATTERN, UDAT_PATTERN, IcuLocale(aLocale), tzID, tzIDLength, aPattern.data(), static_cast(aPattern.size()), &status); - if (U_FAILURE(status)) { return Err(ToICUError(status)); } + MOZ_TRY(ApplyCalendarOverride(dateFormat)); + // The DateTimeFormat wrapper will control the life cycle of the ICU // dateFormat object. return UniquePtr(new DateTimeFormat(dateFormat)); @@ -612,13 +615,6 @@ ICUResult DateTimeFormat::CacheSkeleton(Span aSkeleton) { return Err(ICUError::OutOfMemory); } -void DateTimeFormat::SetStartTimeIfGregorian(double aTime) { - UErrorCode status = U_ZERO_ERROR; - UCalendar* cal = const_cast(udat_getCalendar(mDateFormat)); - ucal_setGregorianChange(cal, aTime, &status); - // An error here means the calendar is not Gregorian, and can be ignored. -} - /* static */ Result, ICUError> DateTimeFormat::CloneCalendar( double aUnixEpoch) const { diff --git a/intl/components/src/DateTimeFormat.h b/intl/components/src/DateTimeFormat.h index 661ca6dfd1d..4dda4a9006c 100644 --- a/intl/components/src/DateTimeFormat.h +++ b/intl/components/src/DateTimeFormat.h @@ -477,12 +477,6 @@ class DateTimeFormat final { } return Ok(); } - /** - * Set the start time of the Gregorian calendar. This is useful for - * ensuring the consistent use of a proleptic Gregorian calendar for ECMA-402. - * https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar - */ - void SetStartTimeIfGregorian(double aTime); /** * Determines the resolved components for the current DateTimeFormat. diff --git a/intl/components/src/DateTimeFormatUtils.cpp b/intl/components/src/DateTimeFormatUtils.cpp index fd0649461e9..3aa6f873784 100644 --- a/intl/components/src/DateTimeFormatUtils.cpp +++ b/intl/components/src/DateTimeFormatUtils.cpp @@ -3,8 +3,19 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "mozilla/Assertions.h" +#include "mozilla/Try.h" #include "DateTimeFormatUtils.h" +#include "mozilla/intl/ICU4CGlue.h" + +#include + +#if !MOZ_SYSTEM_ICU +# include "calendar/ICU4XChineseCalendar.h" +# include "calendar/ICU4XDangiCalendar.h" +# include "unicode/datefmt.h" +# include "unicode/gregocal.h" +#endif namespace mozilla::intl { @@ -101,4 +112,122 @@ DateTimePartType ConvertUFormatFieldToPartType(UDateFormatField fieldName) { return DateTimePartType::Unknown; } +// Start of ECMAScript time. +static constexpr double StartOfTime = -8.64e15; + +#if !MOZ_SYSTEM_ICU +static bool IsGregorianLikeCalendar(const char* type) { + return std::strcmp(type, "gregorian") == 0 || + std::strcmp(type, "iso8601") == 0 || + std::strcmp(type, "buddhist") == 0 || + std::strcmp(type, "japanese") == 0 || std::strcmp(type, "roc") == 0; +} + +/** + * Set the start time of the Gregorian calendar. This is useful for + * ensuring the consistent use of a proleptic Gregorian calendar for ECMA-402. + * https://en.wikipedia.org/wiki/Proleptic_Gregorian_calendar + */ +static Result SetGregorianChangeDate( + icu::GregorianCalendar* gregorian) { + UErrorCode status = U_ZERO_ERROR; + gregorian->setGregorianChange(StartOfTime, status); + if (U_FAILURE(status)) { + return Err(ToICUError(status)); + } + return Ok{}; +} + +static bool IsCalendarReplacementSupported(const char* type) { + return std::strcmp(type, "chinese") == 0 || std::strcmp(type, "dangi") == 0; +} + +static Result, ICUError> CreateCalendarReplacement( + const icu::Calendar* calendar) { + const char* type = calendar->getType(); + MOZ_ASSERT(IsCalendarReplacementSupported(type)); + + UErrorCode status = U_ZERO_ERROR; + icu::Locale locale = calendar->getLocale(ULOC_ACTUAL_LOCALE, status); + locale.setKeywordValue("calendar", type, status); + if (U_FAILURE(status)) { + return Err(ToICUError(status)); + } + + const icu::TimeZone& timeZone = calendar->getTimeZone(); + + UniquePtr replacement = nullptr; + if (std::strcmp(type, "chinese") == 0) { + replacement.reset( + new calendar::ICU4XChineseCalendar(timeZone, locale, status)); + } else { + MOZ_ASSERT(std::strcmp(type, "dangi") == 0); + replacement.reset( + new calendar::ICU4XDangiCalendar(timeZone, locale, status)); + } + if (replacement == nullptr) { + return Err(ICUError::OutOfMemory); + } + if (U_FAILURE(status)) { + return Err(ToICUError(status)); + } + + return replacement; +} +#endif + +Result ApplyCalendarOverride(UDateFormat* aDateFormat) { +#if !MOZ_SYSTEM_ICU + icu::DateFormat* df = reinterpret_cast(aDateFormat); + const icu::Calendar* calendar = df->getCalendar(); + + const char* type = calendar->getType(); + + if (IsGregorianLikeCalendar(type)) { + auto* gregorian = static_cast(calendar); + MOZ_TRY( + SetGregorianChangeDate(const_cast(gregorian))); + } + else if (IsCalendarReplacementSupported(type)) { + auto replacement = CreateCalendarReplacement(calendar); + if (replacement.isErr()) { + return replacement.propagateErr(); + } + df->adoptCalendar(replacement.unwrap().release()); + } +#else + UErrorCode status = U_ZERO_ERROR; + UCalendar* cal = const_cast(udat_getCalendar(aDateFormat)); + ucal_setGregorianChange(cal, StartOfTime, &status); + // An error here means the calendar is not Gregorian, and can be ignored. +#endif + + return Ok{}; +} + +#if !MOZ_SYSTEM_ICU +Result, ICUError> CreateCalendarOverride( + const icu::Calendar* calendar) { + const char* type = calendar->getType(); + + if (IsGregorianLikeCalendar(type)) { + UniquePtr gregorian( + static_cast(calendar)->clone()); + if (!gregorian) { + return Err(ICUError::OutOfMemory); + } + + MOZ_TRY(SetGregorianChangeDate(gregorian.get())); + + return UniquePtr{gregorian.release()}; + } + + if (IsCalendarReplacementSupported(type)) { + return CreateCalendarReplacement(calendar); + } + + return UniquePtr{}; +} +#endif + } // namespace mozilla::intl diff --git a/intl/components/src/DateTimeFormatUtils.h b/intl/components/src/DateTimeFormatUtils.h index 89187b9871e..51555b8f98e 100644 --- a/intl/components/src/DateTimeFormatUtils.h +++ b/intl/components/src/DateTimeFormatUtils.h @@ -5,10 +5,24 @@ #define intl_components_DateTimeFormatUtils_h_ #include "unicode/udat.h" +#if !MOZ_SYSTEM_ICU +# include "unicode/calendar.h" +#endif + +#include "mozilla/Result.h" +#include "mozilla/UniquePtr.h" #include "mozilla/intl/DateTimePart.h" +#include "mozilla/intl/ICUError.h" namespace mozilla::intl { DateTimePartType ConvertUFormatFieldToPartType(UDateFormatField fieldName); + +Result ApplyCalendarOverride(UDateFormat* aDateFormat); + +#if !MOZ_SYSTEM_ICU +Result, ICUError> CreateCalendarOverride( + const icu::Calendar* calendar); +#endif } // namespace mozilla::intl #endif diff --git a/intl/components/src/calendar/ICU4XCalendar.cpp b/intl/components/src/calendar/ICU4XCalendar.cpp new file mode 100644 index 00000000000..f226945186e --- /dev/null +++ b/intl/components/src/calendar/ICU4XCalendar.cpp @@ -0,0 +1,637 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/intl/calendar/ICU4XCalendar.h" + +#include "mozilla/Assertions.h" +#include "mozilla/TextUtils.h" +#include "mozilla/intl/ICU4XGeckoDataProvider.h" + +#include +#include +#include +#include + +#include "unicode/timezone.h" + +#include "diplomat_runtime.h" +#include "ICU4XDataProvider.h" +#include "ICU4XError.h" + +namespace mozilla::intl::calendar { + +// Copied from js/src/util/Text.h +template +static constexpr uint8_t AsciiDigitToNumber(CharT c) { + using UnsignedCharT = std::make_unsigned_t; + auto uc = static_cast(c); + return uc - '0'; +} + +static UniqueICU4XCalendar CreateICU4XCalendar( + capi::ICU4XAnyCalendarKind kind) { + auto result = capi::ICU4XCalendar_create_for_kind(GetDataProvider(), kind); + if (!result.is_ok) { + return nullptr; + } + return UniqueICU4XCalendar{result.ok}; +} + +static UniqueICU4XDate CreateICU4XDate(const ISODate& date, + const capi::ICU4XCalendar* calendar) { + auto result = capi::ICU4XDate_create_from_iso_in_calendar( + date.year, date.month, date.day, calendar); + if (!result.is_ok) { + return nullptr; + } + return UniqueICU4XDate{result.ok}; +} + +static UniqueICU4XDate CreateDateFromCodes(const capi::ICU4XCalendar* calendar, + std::string_view era, + int32_t eraYear, MonthCode monthCode, + int32_t day) { + auto monthCodeView = std::string_view{monthCode}; + auto date = capi::ICU4XDate_create_from_codes_in_calendar( + era.data(), era.length(), eraYear, monthCodeView.data(), + monthCodeView.length(), day, calendar); + if (date.is_ok) { + return UniqueICU4XDate{date.ok}; + } + return nullptr; +} + +// Copied from js/src/builtin/temporal/Calendar.cpp +static UniqueICU4XDate CreateDateFrom(const capi::ICU4XCalendar* calendar, + std::string_view era, int32_t eraYear, + int32_t month, int32_t day) { + MOZ_ASSERT(1 <= month && month <= 13); + + // Create date with month number replaced by month-code. + auto monthCode = MonthCode{std::min(month, 12)}; + auto date = CreateDateFromCodes(calendar, era, eraYear, monthCode, day); + if (!date) { + return nullptr; + } + + // If the ordinal month of |date| matches the input month, no additional + // changes are necessary and we can directly return |date|. + int32_t ordinal = capi::ICU4XDate_ordinal_month(date.get()); + if (ordinal == month) { + return date; + } + + // Otherwise we need to handle three cases: + // 1. The input year contains a leap month and we need to adjust the + // month-code. + // 2. The thirteenth month of a year without leap months was requested. + // 3. The thirteenth month of a year with leap months was requested. + if (ordinal > month) { + MOZ_ASSERT(1 < month && month <= 12); + + // This case can only happen in leap years. + MOZ_ASSERT(capi::ICU4XDate_months_in_year(date.get()) == 13); + + // Leap months can occur after any month in the Chinese calendar. + // + // Example when the fourth month is a leap month between M03 and M04. + // + // Month code: M01 M02 M03 M03L M04 M05 M06 ... + // Ordinal month: 1 2 3 4 5 6 7 + + // The month can be off by exactly one. + MOZ_ASSERT((ordinal - month) == 1); + + // First try the case when the previous month isn't a leap month. This + // case can only occur when |month > 2|, because otherwise we know that + // "M01L" is the correct answer. + if (month > 2) { + auto previousMonthCode = MonthCode{month - 1}; + date = + CreateDateFromCodes(calendar, era, eraYear, previousMonthCode, day); + if (!date) { + return nullptr; + } + int32_t ordinal = capi::ICU4XDate_ordinal_month(date.get()); + if (ordinal == month) { + return date; + } + } + + // Fall-through when the previous month is a leap month. + } else { + MOZ_ASSERT(month == 13); + MOZ_ASSERT(ordinal == 12); + + // Years with leap months contain thirteen months. + if (capi::ICU4XDate_months_in_year(date.get()) != 13) { + return nullptr; + } + + // Fall-through to return leap month "M12L" at the end of the year. + } + + // Finally handle the case when the previous month is a leap month. + auto leapMonthCode = MonthCode{month - 1, /* isLeapMonth= */ true}; + return CreateDateFromCodes(calendar, era, eraYear, leapMonthCode, day); +} + +static ISODate ToISODate(const capi::ICU4XDate* date) { + UniqueICU4XIsoDate isoDate{capi::ICU4XDate_to_iso(date)}; + + int32_t isoYear = capi::ICU4XIsoDate_year(isoDate.get()); + int32_t isoMonth = capi::ICU4XIsoDate_month(isoDate.get()); + int32_t isoDay = capi::ICU4XIsoDate_day_of_month(isoDate.get()); + + return {isoYear, isoMonth, isoDay}; +} + +//////////////////////////////////////////////////////////////////////////////// + +ICU4XCalendar::ICU4XCalendar(capi::ICU4XAnyCalendarKind kind, + const icu::Locale& locale, UErrorCode& success) + : icu::Calendar(icu::TimeZone::forLocaleOrDefault(locale), locale, success), + kind_(kind) {} + +ICU4XCalendar::ICU4XCalendar(capi::ICU4XAnyCalendarKind kind, + const icu::TimeZone& timeZone, + const icu::Locale& locale, UErrorCode& success) + : icu::Calendar(timeZone, locale, success), kind_(kind) {} + +ICU4XCalendar::ICU4XCalendar(const ICU4XCalendar& other) + : icu::Calendar(other), kind_(other.kind_) {} + +ICU4XCalendar::~ICU4XCalendar() = default; + +/** + * Get or create the underlying ICU4X calendar. + */ +capi::ICU4XCalendar* ICU4XCalendar::getICU4XCalendar(UErrorCode& status) const { + if (U_FAILURE(status)) { + return nullptr; + } + if (!calendar_) { + auto result = CreateICU4XCalendar(kind_); + if (!result) { + status = U_INTERNAL_PROGRAM_ERROR; + return nullptr; + } + calendar_ = std::move(result); + } + return calendar_.get(); +} + +/** + * Get or create the fallback ICU4C calendar. Used for dates outside the range + * supported by ICU4X. + */ +icu::Calendar* ICU4XCalendar::getFallbackCalendar(UErrorCode& status) const { + if (U_FAILURE(status)) { + return nullptr; + } + if (!fallback_) { + icu::Locale locale = getLocale(ULOC_ACTUAL_LOCALE, status); + locale.setKeywordValue("calendar", getType(), status); + fallback_.reset( + icu::Calendar::createInstance(getTimeZone(), locale, status)); + } + return fallback_.get(); +} + +UniqueICU4XDate ICU4XCalendar::createICU4XDate(const ISODate& date, + UErrorCode& status) const { + MOZ_ASSERT(U_SUCCESS(status)); + + auto* calendar = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return nullptr; + } + + auto dt = CreateICU4XDate(date, calendar); + if (!dt) { + status = U_INTERNAL_PROGRAM_ERROR; + } + return dt; +} + +UniqueICU4XDate ICU4XCalendar::createICU4XDate(const CalendarDate& date, + UErrorCode& status) const { + MOZ_ASSERT(U_SUCCESS(status)); + + auto* calendar = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return nullptr; + } + + auto era = eraName(date.year); + + auto dt = + CreateDateFromCodes(calendar, era, date.year, date.monthCode, date.day); + if (!dt) { + status = U_INTERNAL_PROGRAM_ERROR; + } + return dt; +} + +MonthCode ICU4XCalendar::monthCodeFrom(const capi::ICU4XDate* date, + UErrorCode& status) { + MOZ_ASSERT(U_SUCCESS(status)); + + // Storage for the largest valid month code and the terminating NUL-character. + char buf[4 + 1] = {}; + auto writable = capi::diplomat_simple_writeable(buf, std::size(buf)); + + if (!capi::ICU4XDate_month_code(date, &writable).is_ok) { + status = U_INTERNAL_PROGRAM_ERROR; + return {}; + } + + auto view = std::string_view{writable.buf, writable.len}; + + MOZ_ASSERT(view.length() >= 3); + MOZ_ASSERT(view[0] == 'M'); + MOZ_ASSERT(mozilla::IsAsciiDigit(view[1])); + MOZ_ASSERT(mozilla::IsAsciiDigit(view[2])); + MOZ_ASSERT_IF(view.length() > 3, view[3] == 'L'); + + int32_t ordinal = + AsciiDigitToNumber(view[1]) * 10 + AsciiDigitToNumber(view[2]); + bool isLeapMonth = view.length() > 3; + + return MonthCode{ordinal, isLeapMonth}; +} + +//////////////////////////////////////////// +// icu::Calendar implementation overrides // +//////////////////////////////////////////// + +const char* ICU4XCalendar::getTemporalMonthCode(UErrorCode& status) const { + int32_t month = get(UCAL_MONTH, status); + int32_t isLeapMonth = get(UCAL_IS_LEAP_MONTH, status); + if (U_FAILURE(status)) { + return nullptr; + } + + static const char* MonthCodes[] = { + // Non-leap months. + "M01", + "M02", + "M03", + "M04", + "M05", + "M06", + "M07", + "M08", + "M09", + "M10", + "M11", + "M12", + "M13", + + // Leap months. (Note: There's no thirteenth leap month.) + "M01L", + "M02L", + "M03L", + "M04L", + "M05L", + "M06L", + "M07L", + "M08L", + "M09L", + "M10L", + "M11L", + "M12L", + }; + + size_t index = month + (isLeapMonth ? 12 : 0); + if (index >= std::size(MonthCodes)) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return nullptr; + } + return MonthCodes[index]; +} + +void ICU4XCalendar::setTemporalMonthCode(const char* code, UErrorCode& status) { + if (U_FAILURE(status)) { + return; + } + + size_t len = std::strlen(code); + if (len < 3 || len > 4 || code[0] != 'M' || !IsAsciiDigit(code[1]) || + !IsAsciiDigit(code[2]) || (len == 4 && code[3] != 'L')) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + int32_t month = + AsciiDigitToNumber(code[1]) * 10 + AsciiDigitToNumber(code[2]); + bool isLeapMonth = len == 4; + + if (month < 1 || month > 13 || (month == 13 && isLeapMonth)) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + // Check if this calendar supports the requested month code. + auto monthCode = MonthCode{month, isLeapMonth}; + if (!hasMonthCode(monthCode)) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return; + } + + set(UCAL_MONTH, monthCode.ordinal() - 1); + set(UCAL_IS_LEAP_MONTH, int32_t(monthCode.isLeapMonth())); +} + +int32_t ICU4XCalendar::internalGetMonth(int32_t defaultValue, + UErrorCode& status) const { + if (U_FAILURE(status)) { + return 0; + } + if (resolveFields(kMonthPrecedence) == UCAL_MONTH) { + return internalGet(UCAL_MONTH, defaultValue); + } + if (!hasLeapMonths()) { + return internalGet(UCAL_ORDINAL_MONTH); + } + return internalGetMonth(status); +} + +/** + * Return the current month, possibly by computing it from |UCAL_ORDINAL_MONTH|. + */ +int32_t ICU4XCalendar::internalGetMonth(UErrorCode& status) const { + if (U_FAILURE(status)) { + return 0; + } + if (resolveFields(kMonthPrecedence) == UCAL_MONTH) { + return internalGet(UCAL_MONTH); + } + if (!hasLeapMonths()) { + return internalGet(UCAL_ORDINAL_MONTH); + } + + int32_t extendedYear = internalGet(UCAL_EXTENDED_YEAR); + int32_t ordinalMonth = internalGet(UCAL_ORDINAL_MONTH); + + int32_t month; + int32_t isLeapMonth; + if (requiresFallbackForExtendedYear(extendedYear)) { + // Use the fallback calendar for years outside the range supported by ICU4X. + auto* fallback = getFallbackCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + fallback->clear(); + fallback->set(UCAL_EXTENDED_YEAR, extendedYear); + fallback->set(UCAL_ORDINAL_MONTH, ordinalMonth); + fallback->set(UCAL_DAY_OF_MONTH, 1); + + month = fallback->get(UCAL_MONTH, status); + isLeapMonth = fallback->get(UCAL_IS_LEAP_MONTH, status); + if (U_FAILURE(status)) { + return 0; + } + } else { + auto* cal = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + + UniqueICU4XDate date = CreateDateFrom(cal, eraName(extendedYear), + extendedYear, ordinalMonth + 1, 1); + if (!date) { + status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } + + MonthCode monthCode = monthCodeFrom(date.get(), status); + if (U_FAILURE(status)) { + return 0; + } + + month = monthCode.ordinal() - 1; + isLeapMonth = monthCode.isLeapMonth(); + } + + auto* nonConstThis = const_cast(this); + nonConstThis->internalSet(UCAL_IS_LEAP_MONTH, isLeapMonth); + nonConstThis->internalSet(UCAL_MONTH, month); + + return month; +} + +void ICU4XCalendar::add(UCalendarDateFields field, int32_t amount, + UErrorCode& status) { + switch (field) { + case UCAL_MONTH: + case UCAL_ORDINAL_MONTH: + if (amount != 0) { + // Our implementation doesn't yet support this action. + status = U_ILLEGAL_ARGUMENT_ERROR; + break; + } + break; + default: + Calendar::add(field, amount, status); + break; + } +} + +void ICU4XCalendar::add(EDateFields field, int32_t amount, UErrorCode& status) { + add(static_cast(field), amount, status); +} + +void ICU4XCalendar::roll(UCalendarDateFields field, int32_t amount, + UErrorCode& status) { + switch (field) { + case UCAL_MONTH: + case UCAL_ORDINAL_MONTH: + if (amount != 0) { + // Our implementation doesn't yet support this action. + status = U_ILLEGAL_ARGUMENT_ERROR; + break; + } + break; + default: + Calendar::roll(field, amount, status); + break; + } +} + +void ICU4XCalendar::roll(EDateFields field, int32_t amount, + UErrorCode& status) { + roll(static_cast(field), amount, status); +} + +int32_t ICU4XCalendar::handleGetExtendedYear(UErrorCode& status) { + if (U_FAILURE(status)) { + return 0; + } + if (newerField(UCAL_EXTENDED_YEAR, UCAL_YEAR) == UCAL_EXTENDED_YEAR) { + return internalGet(UCAL_EXTENDED_YEAR, 1); + } + + // We don't yet support the case when UCAL_YEAR is newer. + status = U_UNSUPPORTED_ERROR; + return 0; +} + +int32_t ICU4XCalendar::handleGetYearLength(int32_t extendedYear, + UErrorCode& status) const { + // Use the (slower) default implementation for years outside the range + // supported by ICU4X. + if (requiresFallbackForExtendedYear(extendedYear)) { + return icu::Calendar::handleGetYearLength(extendedYear, status); + } + + auto* cal = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + + UniqueICU4XDate date = + CreateDateFrom(cal, eraName(extendedYear), extendedYear, 1, 1); + if (!date) { + status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } + return capi::ICU4XDate_days_in_year(date.get()); +} + +/** + * Return the number of days in a month. + */ +int32_t ICU4XCalendar::handleGetMonthLength(int32_t extendedYear, int32_t month, + UErrorCode& status) const { + if (U_FAILURE(status)) { + return 0; + } + + // ICU4C supports wrap around. We don't support this case. + if (month < 0 || month > 11) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + // Use the fallback calendar for years outside the range supported by ICU4X. + if (requiresFallbackForExtendedYear(extendedYear)) { + auto* fallback = getFallbackCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + fallback->clear(); + fallback->set(UCAL_EXTENDED_YEAR, extendedYear); + fallback->set(UCAL_MONTH, month); + fallback->set(UCAL_DAY_OF_MONTH, 1); + + return fallback->getActualMaximum(UCAL_DAY_OF_MONTH, status); + } + + auto* cal = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + + bool isLeapMonth = internalGet(UCAL_IS_LEAP_MONTH) != 0; + auto monthCode = MonthCode{month + 1, isLeapMonth}; + UniqueICU4XDate date = CreateDateFromCodes(cal, eraName(extendedYear), + extendedYear, monthCode, 1); + if (!date) { + status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } + + return capi::ICU4XDate_days_in_month(date.get()); +} + +/** + * Return the start of the month as a Julian date. + */ +int64_t ICU4XCalendar::handleComputeMonthStart(int32_t extendedYear, + int32_t month, UBool useMonth, + UErrorCode& status) const { + if (U_FAILURE(status)) { + return 0; + } + + // ICU4C supports wrap around. We don't support this case. + if (month < 0 || month > 11) { + status = U_ILLEGAL_ARGUMENT_ERROR; + return 0; + } + + // Use the fallback calendar for years outside the range supported by ICU4X. + if (requiresFallbackForExtendedYear(extendedYear)) { + auto* fallback = getFallbackCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + fallback->clear(); + fallback->set(UCAL_EXTENDED_YEAR, extendedYear); + if (useMonth) { + fallback->set(UCAL_MONTH, month); + fallback->set(UCAL_IS_LEAP_MONTH, internalGet(UCAL_IS_LEAP_MONTH)); + } else { + fallback->set(UCAL_ORDINAL_MONTH, month); + } + fallback->set(UCAL_DAY_OF_MONTH, 1); + + int32_t newMoon = fallback->get(UCAL_JULIAN_DAY, status); + if (U_FAILURE(status)) { + return 0; + } + return newMoon - 1; + } + + auto* cal = getICU4XCalendar(status); + if (U_FAILURE(status)) { + return 0; + } + + UniqueICU4XDate date{}; + if (useMonth) { + bool isLeapMonth = internalGet(UCAL_IS_LEAP_MONTH) != 0; + auto monthCode = MonthCode{month + 1, isLeapMonth}; + date = CreateDateFromCodes(cal, eraName(extendedYear), extendedYear, + monthCode, 1); + } else { + date = + CreateDateFrom(cal, eraName(extendedYear), extendedYear, month + 1, 1); + } + if (!date) { + status = U_INTERNAL_PROGRAM_ERROR; + return 0; + } + + auto isoDate = ToISODate(date.get()); + int32_t newMoon = MakeDay(isoDate); + + return (newMoon - 1) + kEpochStartAsJulianDay; +} + +/** + * Default implementation of handleComputeFields when using the fallback + * calendar. + */ +void ICU4XCalendar::handleComputeFieldsFromFallback(int32_t julianDay, + UErrorCode& status) { + auto* fallback = getFallbackCalendar(status); + if (U_FAILURE(status)) { + return; + } + fallback->clear(); + fallback->set(UCAL_JULIAN_DAY, julianDay); + + internalSet(UCAL_ERA, fallback->get(UCAL_ERA, status)); + internalSet(UCAL_YEAR, fallback->get(UCAL_YEAR, status)); + internalSet(UCAL_EXTENDED_YEAR, fallback->get(UCAL_EXTENDED_YEAR, status)); + internalSet(UCAL_MONTH, fallback->get(UCAL_MONTH, status)); + internalSet(UCAL_ORDINAL_MONTH, fallback->get(UCAL_ORDINAL_MONTH, status)); + internalSet(UCAL_IS_LEAP_MONTH, fallback->get(UCAL_IS_LEAP_MONTH, status)); + internalSet(UCAL_DAY_OF_MONTH, fallback->get(UCAL_DAY_OF_MONTH, status)); + internalSet(UCAL_DAY_OF_YEAR, fallback->get(UCAL_DAY_OF_YEAR, status)); +} + +} // namespace mozilla::intl::calendar diff --git a/intl/components/src/calendar/ICU4XCalendar.h b/intl/components/src/calendar/ICU4XCalendar.h new file mode 100644 index 00000000000..f1fc69e95f2 --- /dev/null +++ b/intl/components/src/calendar/ICU4XCalendar.h @@ -0,0 +1,168 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ICU4XCalendar_h_ +#define intl_components_calendar_ICU4XCalendar_h_ + +#include "mozilla/intl/calendar/ICU4XUniquePtr.h" +#include "mozilla/intl/calendar/ISODate.h" +#include "mozilla/intl/calendar/MonthCode.h" + +#include +#include +#include +#include + +#include "unicode/calendar.h" +#include "unicode/locid.h" +#include "unicode/timezone.h" +#include "unicode/utypes.h" + +#include "ICU4XAnyCalendarKind.h" + +namespace mozilla::intl::calendar { + +/** + * Abstract class to implement icu::Calendar using ICU4X. + */ +class ICU4XCalendar : public icu::Calendar { + mutable UniqueICU4XCalendar calendar_{}; + mutable std::unique_ptr fallback_{}; + capi::ICU4XAnyCalendarKind kind_; + + protected: + ICU4XCalendar(capi::ICU4XAnyCalendarKind kind, const icu::Locale& locale, + UErrorCode& success); + ICU4XCalendar(capi::ICU4XAnyCalendarKind kind, const icu::TimeZone& timeZone, + const icu::Locale& locale, UErrorCode& success); + ICU4XCalendar(const ICU4XCalendar& other); + + /** + * Get or create the underlying ICU4X calendar. + */ + capi::ICU4XCalendar* getICU4XCalendar(UErrorCode& status) const; + + /** + * Get or create the ICU4C fallback calendar implementation. + */ + icu::Calendar* getFallbackCalendar(UErrorCode& status) const; + + protected: + /** + * Return the ICU4X era name for the given extended year. + */ + virtual std::string_view eraName(int32_t extendedYear) const = 0; + + /** + * Return true if this calendar contains any leap months. + */ + virtual bool hasLeapMonths() const = 0; + + /** + * Return true if this calendar contains the requested month code. + */ + virtual bool hasMonthCode(MonthCode monthCode) const = 0; + + /** + * Subclasses can request to use the ICU4C fallback calendar. + * + * Can be removed when is + * fixed. + */ + virtual bool requiresFallbackForExtendedYear(int32_t year) const = 0; + virtual bool requiresFallbackForGregorianYear(int32_t year) const = 0; + + protected: + static constexpr int32_t kEpochStartAsJulianDay = + 2440588; // January 1, 1970 (Gregorian) + + /** + * Return the month code of |date|. + */ + static MonthCode monthCodeFrom(const capi::ICU4XDate* date, + UErrorCode& status); + + /** + * Create a new ICU4X date object from an ISO date. + */ + UniqueICU4XDate createICU4XDate(const ISODate& date, + UErrorCode& status) const; + + /** + * Create a new ICU4X date object from a calendar date. + */ + UniqueICU4XDate createICU4XDate(const CalendarDate& date, + UErrorCode& status) const; + + public: + ICU4XCalendar() = delete; + virtual ~ICU4XCalendar(); + + const char* getTemporalMonthCode(UErrorCode& status) const override; + void setTemporalMonthCode(const char* code, UErrorCode& status) override; + + void add(UCalendarDateFields field, int32_t amount, + UErrorCode& status) override; + void add(EDateFields field, int32_t amount, UErrorCode& status) override; + void roll(UCalendarDateFields field, int32_t amount, + UErrorCode& status) override; + void roll(EDateFields field, int32_t amount, UErrorCode& status) override; + + protected: + int32_t internalGetMonth(int32_t defaultValue, + UErrorCode& status) const override; + int32_t internalGetMonth(UErrorCode& status) const override; + + int64_t handleComputeMonthStart(int32_t extendedYear, int32_t month, + UBool useMonth, + UErrorCode& status) const override; + int32_t handleGetMonthLength(int32_t extendedYear, int32_t month, + UErrorCode& status) const override; + int32_t handleGetYearLength(int32_t extendedYear, + UErrorCode& status) const override; + + int32_t handleGetExtendedYear(UErrorCode& status) override; + + protected: + /** + * handleComputeFields implementation using the ICU4C fallback calendar. + */ + void handleComputeFieldsFromFallback(int32_t julianDay, UErrorCode& status); +}; + +/** + * `IMPL_SYSTEM_DEFAULT_CENTURY` is internal to "i18n/gregoimp.h", so we have + * to provider our own helper class to implement default centuries. + */ +template +class SystemDefaultCentury { + mutable UDate start_ = DBL_MIN; + mutable int32_t startYear_ = -1; + mutable std::once_flag init_{}; + + void initialize() const { + UErrorCode status = U_ZERO_ERROR; + Calendar calendar(Locale::identifier, status); + if (U_FAILURE(status)) { + return; + } + calendar.setTime(icu::Calendar::getNow(), status); + calendar.add(UCAL_EXTENDED_YEAR, -80, status); + start_ = calendar.getTime(status); + startYear_ = calendar.get(UCAL_YEAR, status); + } + + public: + UDate start() const { + std::call_once(init_, [this] { initialize(); }); + return start_; + } + int32_t startYear() const { + std::call_once(init_, [this] { initialize(); }); + return startYear_; + } +}; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/ICU4XChineseBasedCalendar.cpp b/intl/components/src/calendar/ICU4XChineseBasedCalendar.cpp new file mode 100644 index 00000000000..eecdc47fb27 --- /dev/null +++ b/intl/components/src/calendar/ICU4XChineseBasedCalendar.cpp @@ -0,0 +1,204 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/intl/calendar/ICU4XChineseBasedCalendar.h" + +namespace mozilla::intl::calendar { + +ICU4XChineseBasedCalendar::ICU4XChineseBasedCalendar( + capi::ICU4XAnyCalendarKind kind, const icu::Locale& locale, + UErrorCode& success) + : ICU4XCalendar(kind, locale, success) {} + +ICU4XChineseBasedCalendar::ICU4XChineseBasedCalendar( + capi::ICU4XAnyCalendarKind kind, const icu::TimeZone& timeZone, + const icu::Locale& locale, UErrorCode& success) + : ICU4XCalendar(kind, timeZone, locale, success) {} + +ICU4XChineseBasedCalendar::ICU4XChineseBasedCalendar( + const ICU4XChineseBasedCalendar& other) + : ICU4XCalendar(other) {} + +ICU4XChineseBasedCalendar::~ICU4XChineseBasedCalendar() = default; + +//////////////////////////////////////////// +// ICU4XCalendar implementation overrides // +//////////////////////////////////////////// + +bool ICU4XChineseBasedCalendar::hasLeapMonths() const { return true; } + +bool ICU4XChineseBasedCalendar::hasMonthCode(MonthCode monthCode) const { + return monthCode.ordinal() <= 12; +} + +bool ICU4XChineseBasedCalendar::requiresFallbackForExtendedYear( + int32_t year) const { + // Same limits as in js/src/builtin/temporal/Calendar.cpp. + return std::abs(year) > 10'000; +} + +bool ICU4XChineseBasedCalendar::requiresFallbackForGregorianYear( + int32_t year) const { + // Same limits as in js/src/builtin/temporal/Calendar.cpp. + return std::abs(year) > 10'000; +} + +//////////////////////////////////////////// +// icu::Calendar implementation overrides // +//////////////////////////////////////////// + +bool ICU4XChineseBasedCalendar::inTemporalLeapYear(UErrorCode& status) const { + int32_t days = getActualMaximum(UCAL_DAY_OF_YEAR, status); + if (U_FAILURE(status)) { + return false; + } + + constexpr int32_t maxDaysInMonth = 30; + constexpr int32_t monthsInNonLeapYear = 12; + return days > (monthsInNonLeapYear * maxDaysInMonth); +} + +int32_t ICU4XChineseBasedCalendar::getRelatedYear(UErrorCode& status) const { + int32_t year = get(UCAL_EXTENDED_YEAR, status); + if (U_FAILURE(status)) { + return 0; + } + return year + relatedYearDifference(); +} + +void ICU4XChineseBasedCalendar::setRelatedYear(int32_t year) { + set(UCAL_EXTENDED_YEAR, year - relatedYearDifference()); +} + +void ICU4XChineseBasedCalendar::handleComputeFields(int32_t julianDay, + UErrorCode& status) { + int32_t gyear = getGregorianYear(); + + // Use the fallback calendar for years outside the range supported by ICU4X. + if (requiresFallbackForGregorianYear(gyear)) { + handleComputeFieldsFromFallback(julianDay, status); + return; + } + + int32_t gmonth = getGregorianMonth() + 1; + int32_t gday = getGregorianDayOfMonth(); + + MOZ_ASSERT(1 <= gmonth && gmonth <= 12); + MOZ_ASSERT(1 <= gday && gday <= 31); + + auto date = createICU4XDate(ISODate{gyear, gmonth, gday}, status); + if (U_FAILURE(status)) { + return; + } + MOZ_ASSERT(date); + + MonthCode monthCode = monthCodeFrom(date.get(), status); + if (U_FAILURE(status)) { + return; + } + + int32_t extendedYear = capi::ICU4XDate_year_in_era(date.get()); + int32_t month = capi::ICU4XDate_ordinal_month(date.get()); + int32_t dayOfMonth = capi::ICU4XDate_day_of_month(date.get()); + int32_t dayOfYear = capi::ICU4XDate_day_of_year(date.get()); + + MOZ_ASSERT(1 <= month && month <= 13); + MOZ_ASSERT(1 <= dayOfMonth && dayOfMonth <= 30); + MOZ_ASSERT(1 <= dayOfYear && dayOfYear <= (13 * 30)); + + // Compute the cycle and year of cycle relative to the Chinese calendar, even + // when this is the Dangi calendar. + int32_t chineseExtendedYear = + extendedYear + relatedYearDifference() - chineseRelatedYearDiff; + int32_t cycle_year = chineseExtendedYear - 1; + int32_t cycle = FloorDiv(cycle_year, 60); + int32_t yearOfCycle = cycle_year - (cycle * 60); + + internalSet(UCAL_ERA, cycle + 1); + internalSet(UCAL_YEAR, yearOfCycle + 1); + internalSet(UCAL_EXTENDED_YEAR, extendedYear); + internalSet(UCAL_MONTH, monthCode.ordinal() - 1); + internalSet(UCAL_ORDINAL_MONTH, month - 1); + internalSet(UCAL_IS_LEAP_MONTH, monthCode.isLeapMonth() ? 1 : 0); + internalSet(UCAL_DAY_OF_MONTH, dayOfMonth); + internalSet(UCAL_DAY_OF_YEAR, dayOfYear); +} + +// Limits table copied from i18n/chnsecal.cpp. Licensed under: +// +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +static const int32_t CHINESE_CALENDAR_LIMITS[UCAL_FIELD_COUNT][4] = { + // clang-format off + // Minimum Greatest Least Maximum + // Minimum Maximum + { 1, 1, 83333, 83333}, // ERA + { 1, 1, 60, 60}, // YEAR + { 0, 0, 11, 11}, // MONTH + { 1, 1, 50, 55}, // WEEK_OF_YEAR + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // WEEK_OF_MONTH + { 1, 1, 29, 30}, // DAY_OF_MONTH + { 1, 1, 353, 385}, // DAY_OF_YEAR + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // DAY_OF_WEEK + { -1, -1, 5, 5}, // DAY_OF_WEEK_IN_MONTH + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // AM_PM + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // HOUR + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // HOUR_OF_DAY + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // MINUTE + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // SECOND + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // MILLISECOND + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // ZONE_OFFSET + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // DST_OFFSET + { -5000000, -5000000, 5000000, 5000000}, // YEAR_WOY + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // DOW_LOCAL + { -5000000, -5000000, 5000000, 5000000}, // EXTENDED_YEAR + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // JULIAN_DAY + {/*N/A*/-1,/*N/A*/-1,/*N/A*/-1,/*N/A*/-1}, // MILLISECONDS_IN_DAY + { 0, 0, 1, 1}, // IS_LEAP_MONTH + { 0, 0, 11, 12}, // ORDINAL_MONTH + // clang-format on +}; + +int32_t ICU4XChineseBasedCalendar::handleGetLimit(UCalendarDateFields field, + ELimitType limitType) const { + return CHINESE_CALENDAR_LIMITS[field][limitType]; +} + +// Field resolution table copied from i18n/chnsecal.cpp. Licensed under: +// +// © 2016 and later: Unicode, Inc. and others. +// License & terms of use: http://www.unicode.org/copyright.html +const icu::UFieldResolutionTable + ICU4XChineseBasedCalendar::CHINESE_DATE_PRECEDENCE[] = { + // clang-format off + { + { UCAL_DAY_OF_MONTH, kResolveSTOP }, + { UCAL_WEEK_OF_YEAR, UCAL_DAY_OF_WEEK, kResolveSTOP }, + { UCAL_WEEK_OF_MONTH, UCAL_DAY_OF_WEEK, kResolveSTOP }, + { UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DAY_OF_WEEK, kResolveSTOP }, + { UCAL_WEEK_OF_YEAR, UCAL_DOW_LOCAL, kResolveSTOP }, + { UCAL_WEEK_OF_MONTH, UCAL_DOW_LOCAL, kResolveSTOP }, + { UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DOW_LOCAL, kResolveSTOP }, + { UCAL_DAY_OF_YEAR, kResolveSTOP }, + { kResolveRemap | UCAL_DAY_OF_MONTH, UCAL_IS_LEAP_MONTH, kResolveSTOP }, + { kResolveSTOP } + }, + { + { UCAL_WEEK_OF_YEAR, kResolveSTOP }, + { UCAL_WEEK_OF_MONTH, kResolveSTOP }, + { UCAL_DAY_OF_WEEK_IN_MONTH, kResolveSTOP }, + { kResolveRemap | UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DAY_OF_WEEK, kResolveSTOP }, + { kResolveRemap | UCAL_DAY_OF_WEEK_IN_MONTH, UCAL_DOW_LOCAL, kResolveSTOP }, + { kResolveSTOP } + }, + {{kResolveSTOP}} + // clang-format on +}; + +const icu::UFieldResolutionTable* +ICU4XChineseBasedCalendar::getFieldResolutionTable() const { + return CHINESE_DATE_PRECEDENCE; +} + +} // namespace mozilla::intl::calendar diff --git a/intl/components/src/calendar/ICU4XChineseBasedCalendar.h b/intl/components/src/calendar/ICU4XChineseBasedCalendar.h new file mode 100644 index 00000000000..ed16fda5b00 --- /dev/null +++ b/intl/components/src/calendar/ICU4XChineseBasedCalendar.h @@ -0,0 +1,63 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ICU4XChineseBasedCalendar_h_ +#define intl_components_calendar_ICU4XChineseBasedCalendar_h_ + +#include "mozilla/intl/calendar/ICU4XCalendar.h" + +#include +#include + +namespace mozilla::intl::calendar { + +/** + * Abstract base class for Chinese-based calendars. + * + * Overrides the same methods as icu::ChineseCalendar to ensure compatible + * behavior even when using ICU4X as the underlying calendar implementation. + */ +class ICU4XChineseBasedCalendar : public ICU4XCalendar { + protected: + ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind kind, + const icu::Locale& locale, UErrorCode& success); + ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind kind, + const icu::TimeZone& timeZone, + const icu::Locale& locale, UErrorCode& success); + ICU4XChineseBasedCalendar(const ICU4XChineseBasedCalendar& other); + + public: + ICU4XChineseBasedCalendar() = delete; + virtual ~ICU4XChineseBasedCalendar(); + + protected: + bool hasLeapMonths() const override; + bool hasMonthCode(MonthCode monthCode) const override; + bool requiresFallbackForExtendedYear(int32_t year) const override; + bool requiresFallbackForGregorianYear(int32_t year) const override; + + /** + * Difference to the related Gregorian year. + */ + virtual int32_t relatedYearDifference() const = 0; + + static constexpr int32_t chineseRelatedYearDiff = -2637; + + public: + bool inTemporalLeapYear(UErrorCode& status) const override; + int32_t getRelatedYear(UErrorCode& status) const override; + void setRelatedYear(int32_t year) override; + + protected: + void handleComputeFields(int32_t julianDay, UErrorCode& status) override; + int32_t handleGetLimit(UCalendarDateFields field, + ELimitType limitType) const override; + const icu::UFieldResolutionTable* getFieldResolutionTable() const override; + + private: + static const icu::UFieldResolutionTable CHINESE_DATE_PRECEDENCE[]; +}; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/ICU4XChineseCalendar.cpp b/intl/components/src/calendar/ICU4XChineseCalendar.cpp new file mode 100644 index 00000000000..611c2d265e7 --- /dev/null +++ b/intl/components/src/calendar/ICU4XChineseCalendar.cpp @@ -0,0 +1,55 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/intl/calendar/ICU4XChineseCalendar.h" + +namespace mozilla::intl::calendar { + +ICU4XChineseCalendar::ICU4XChineseCalendar(const icu::Locale& locale, + UErrorCode& success) + : ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind_Chinese, locale, + success) {} + +ICU4XChineseCalendar::ICU4XChineseCalendar(const icu::TimeZone& timeZone, + const icu::Locale& locale, + UErrorCode& success) + : ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind_Chinese, timeZone, + locale, success) {} + +ICU4XChineseCalendar::ICU4XChineseCalendar(const ICU4XChineseCalendar& other) + : ICU4XChineseBasedCalendar(other) {} + +ICU4XChineseCalendar::~ICU4XChineseCalendar() = default; + +ICU4XChineseCalendar* ICU4XChineseCalendar::clone() const { + return new ICU4XChineseCalendar(*this); +} + +const char* ICU4XChineseCalendar::getType() const { return "chinese"; } + +//////////////////////////////////////////// +// ICU4XCalendar implementation overrides // +//////////////////////////////////////////// + +std::string_view ICU4XChineseCalendar::eraName(int32_t extendedYear) const { + return "chinese"; +} + +//////////////////////////////////////////// +// icu::Calendar implementation overrides // +//////////////////////////////////////////// + +UDate ICU4XChineseCalendar::defaultCenturyStart() const { + return defaultCentury_.start(); +} + +int32_t ICU4XChineseCalendar::defaultCenturyStartYear() const { + return defaultCentury_.startYear(); +} + +UBool ICU4XChineseCalendar::haveDefaultCentury() const { return true; } + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICU4XChineseCalendar) + +} // namespace mozilla::intl::calendar diff --git a/intl/components/src/calendar/ICU4XChineseCalendar.h b/intl/components/src/calendar/ICU4XChineseCalendar.h new file mode 100644 index 00000000000..a7c4dfed65f --- /dev/null +++ b/intl/components/src/calendar/ICU4XChineseCalendar.h @@ -0,0 +1,60 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ICU4XChineseCalendar_h_ +#define intl_components_calendar_ICU4XChineseCalendar_h_ + +#include "mozilla/intl/calendar/ICU4XChineseBasedCalendar.h" + +#include +#include + +#include "unicode/uobject.h" + +namespace mozilla::intl::calendar { + +/** + * Chinese calendar implementation. + * + * Overrides the same methods as icu::ChineseCalendar to ensure compatible + * behavior even when using ICU4X as the underlying calendar implementation. + */ +class ICU4XChineseCalendar : public ICU4XChineseBasedCalendar { + public: + ICU4XChineseCalendar() = delete; + ICU4XChineseCalendar(const icu::Locale& locale, UErrorCode& success); + ICU4XChineseCalendar(const icu::TimeZone& timeZone, const icu::Locale& locale, + UErrorCode& success); + ICU4XChineseCalendar(const ICU4XChineseCalendar& other); + + virtual ~ICU4XChineseCalendar(); + + ICU4XChineseCalendar* clone() const override; + + const char* getType() const override; + + protected: + std::string_view eraName(int32_t extendedYear) const override; + + int32_t relatedYearDifference() const override { + return chineseRelatedYearDiff; + } + + public: + UClassID getDynamicClassID() const override; + static UClassID U_EXPORT2 getStaticClassID(); + + protected: + DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY + + struct SystemDefaultCenturyLocale { + static inline const char* identifier = "@calendar=chinese"; + }; + static inline SystemDefaultCentury + defaultCentury_{}; +}; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/ICU4XDangiCalendar.cpp b/intl/components/src/calendar/ICU4XDangiCalendar.cpp new file mode 100644 index 00000000000..47885758aed --- /dev/null +++ b/intl/components/src/calendar/ICU4XDangiCalendar.cpp @@ -0,0 +1,55 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/intl/calendar/ICU4XDangiCalendar.h" + +namespace mozilla::intl::calendar { + +ICU4XDangiCalendar::ICU4XDangiCalendar(const icu::Locale& locale, + UErrorCode& success) + : ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind_Dangi, locale, + success) {} + +ICU4XDangiCalendar::ICU4XDangiCalendar(const icu::TimeZone& timeZone, + const icu::Locale& locale, + UErrorCode& success) + : ICU4XChineseBasedCalendar(capi::ICU4XAnyCalendarKind_Dangi, timeZone, + locale, success) {} + +ICU4XDangiCalendar::ICU4XDangiCalendar(const ICU4XDangiCalendar& other) + : ICU4XChineseBasedCalendar(other) {} + +ICU4XDangiCalendar::~ICU4XDangiCalendar() = default; + +ICU4XDangiCalendar* ICU4XDangiCalendar::clone() const { + return new ICU4XDangiCalendar(*this); +} + +const char* ICU4XDangiCalendar::getType() const { return "dangi"; } + +//////////////////////////////////////////// +// ICU4XCalendar implementation overrides // +//////////////////////////////////////////// + +std::string_view ICU4XDangiCalendar::eraName(int32_t extendedYear) const { + return "dangi"; +} + +//////////////////////////////////////////// +// icu::Calendar implementation overrides // +//////////////////////////////////////////// + +UDate ICU4XDangiCalendar::defaultCenturyStart() const { + return defaultCentury_.start(); +} + +int32_t ICU4XDangiCalendar::defaultCenturyStartYear() const { + return defaultCentury_.startYear(); +} + +UBool ICU4XDangiCalendar::haveDefaultCentury() const { return true; } + +UOBJECT_DEFINE_RTTI_IMPLEMENTATION(ICU4XDangiCalendar) + +} // namespace mozilla::intl::calendar diff --git a/intl/components/src/calendar/ICU4XDangiCalendar.h b/intl/components/src/calendar/ICU4XDangiCalendar.h new file mode 100644 index 00000000000..a930b2b7b94 --- /dev/null +++ b/intl/components/src/calendar/ICU4XDangiCalendar.h @@ -0,0 +1,62 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ICU4XDangiCalendar_h_ +#define intl_components_calendar_ICU4XDangiCalendar_h_ + +#include "mozilla/intl/calendar/ICU4XChineseBasedCalendar.h" + +#include +#include + +#include "unicode/uobject.h" + +namespace mozilla::intl::calendar { + +/** + * Dangi (traditional Korean) calendar implementation. + * + * Overrides the same methods as icu::DangiCalendar to ensure compatible + * behavior even when using ICU4X as the underlying calendar implementation. + */ +class ICU4XDangiCalendar : public ICU4XChineseBasedCalendar { + public: + ICU4XDangiCalendar() = delete; + ICU4XDangiCalendar(const icu::Locale& locale, UErrorCode& success); + ICU4XDangiCalendar(const icu::TimeZone& timeZone, const icu::Locale& locale, + UErrorCode& success); + ICU4XDangiCalendar(const ICU4XDangiCalendar& other); + + virtual ~ICU4XDangiCalendar(); + + ICU4XDangiCalendar* clone() const override; + + const char* getType() const override; + + protected: + std::string_view eraName(int32_t extendedYear) const override; + + static constexpr int32_t dangiRelatedYearDiff = -2333; + + int32_t relatedYearDifference() const override { + return dangiRelatedYearDiff; + } + + public: + UClassID getDynamicClassID() const override; + static UClassID U_EXPORT2 getStaticClassID(); + + protected: + DECLARE_OVERRIDE_SYSTEM_DEFAULT_CENTURY + + struct SystemDefaultCenturyLocale { + static inline const char* identifier = "@calendar=dangi"; + }; + static inline SystemDefaultCentury + defaultCentury_{}; +}; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/ICU4XUniquePtr.h b/intl/components/src/calendar/ICU4XUniquePtr.h new file mode 100644 index 00000000000..300c1f2930d --- /dev/null +++ b/intl/components/src/calendar/ICU4XUniquePtr.h @@ -0,0 +1,42 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ICU4XUniquePtr_h_ +#define intl_components_calendar_ICU4XUniquePtr_h_ + +#include "mozilla/UniquePtr.h" + +#include "ICU4XCalendar.h" +#include "ICU4XDate.h" +#include "ICU4XIsoDate.h" + +namespace mozilla::intl::calendar { + +class ICU4XCalendarDeleter { + public: + void operator()(capi::ICU4XCalendar* ptr) { + capi::ICU4XCalendar_destroy(ptr); + } +}; + +using UniqueICU4XCalendar = + mozilla::UniquePtr; + +class ICU4XDateDeleter { + public: + void operator()(capi::ICU4XDate* ptr) { capi::ICU4XDate_destroy(ptr); } +}; + +using UniqueICU4XDate = mozilla::UniquePtr; + +class ICU4XIsoDateDeleter { + public: + void operator()(capi::ICU4XIsoDate* ptr) { capi::ICU4XIsoDate_destroy(ptr); } +}; + +using UniqueICU4XIsoDate = + mozilla::UniquePtr; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/ISODate.cpp b/intl/components/src/calendar/ISODate.cpp new file mode 100644 index 00000000000..ac1793e8417 --- /dev/null +++ b/intl/components/src/calendar/ISODate.cpp @@ -0,0 +1,59 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/Assertions.h" +#include "mozilla/intl/calendar/ISODate.h" + +#include +#include +#include + +namespace mozilla::intl::calendar { + +// Copied from js/src/builtin/temporal/Calendar.cpp + +static int32_t DayFromYear(int32_t year) { + return 365 * (year - 1970) + FloorDiv(year - 1969, 4) - + FloorDiv(year - 1901, 100) + FloorDiv(year - 1601, 400); +} + +static constexpr bool IsISOLeapYear(int32_t year) { + return (year % 4 == 0) && ((year % 100 != 0) || (year % 400 == 0)); +} + +static constexpr int32_t ISODaysInMonth(int32_t year, int32_t month) { + MOZ_ASSERT(1 <= month && month <= 12); + + constexpr uint8_t daysInMonth[2][13] = { + {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}, + {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}}; + + return daysInMonth[IsISOLeapYear(year)][month]; +} + +static constexpr auto FirstDayOfMonth(int32_t year) { + // The following array contains the day of year for the first day of each + // month, where index 0 is January, and day 0 is January 1. + std::array days = {}; + for (int32_t month = 1; month <= 12; ++month) { + days[month] = days[month - 1] + ISODaysInMonth(year, month); + } + return days; +} + +static int32_t ISODayOfYear(const ISODate& isoDate) { + const auto& [year, month, day] = isoDate; + + // First day of month arrays for non-leap and leap years. + constexpr decltype(FirstDayOfMonth(0)) firstDayOfMonth[2] = { + FirstDayOfMonth(1), FirstDayOfMonth(0)}; + + return firstDayOfMonth[IsISOLeapYear(year)][month - 1] + day; +} + +int32_t MakeDay(const ISODate& date) { + return DayFromYear(date.year) + ISODayOfYear(date) - 1; +} + +} // namespace mozilla::intl::calendar diff --git a/intl/components/src/calendar/ISODate.h b/intl/components/src/calendar/ISODate.h new file mode 100644 index 00000000000..569c3c6e757 --- /dev/null +++ b/intl/components/src/calendar/ISODate.h @@ -0,0 +1,41 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_ISODate_h_ +#define intl_components_calendar_ISODate_h_ + +#include "mozilla/intl/calendar/MonthCode.h" + +#include + +namespace mozilla::intl::calendar { + +struct ISODate final { + int32_t year = 0; + int32_t month = 0; + int32_t day = 0; +}; + +struct CalendarDate final { + int32_t year = 0; + MonthCode monthCode = {}; + int32_t day = 0; +}; + +inline int32_t FloorDiv(int32_t dividend, int32_t divisor) { + int32_t quotient = dividend / divisor; + int32_t remainder = dividend % divisor; + if (remainder < 0) { + quotient -= 1; + } + return quotient; +} + +/** + * Return the day relative to the Unix epoch, January 1 1970. + */ +int32_t MakeDay(const ISODate& date); + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/MonthCode.h b/intl/components/src/calendar/MonthCode.h new file mode 100644 index 00000000000..9056c4afbe1 --- /dev/null +++ b/intl/components/src/calendar/MonthCode.h @@ -0,0 +1,102 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ +#ifndef intl_components_calendar_MonthCode_h_ +#define intl_components_calendar_MonthCode_h_ + +#include +#include +#include + +namespace mozilla::intl::calendar { + +// Copied from js/src/builtin/temporal/MonthCode.h + +class MonthCode final { + public: + enum class Code { + Invalid = 0, + + // Months 01 - M12. + M01 = 1, + M02, + M03, + M04, + M05, + M06, + M07, + M08, + M09, + M10, + M11, + M12, + + // Epagomenal month M13. + M13, + + // Leap months M01 - M12. + M01L, + M02L, + M03L, + M04L, + M05L, + M06L, + M07L, + M08L, + M09L, + M10L, + M11L, + M12L, + }; + + private: + static constexpr int32_t toLeapMonth = + static_cast(Code::M01L) - static_cast(Code::M01); + + Code code_ = Code::Invalid; + + public: + constexpr MonthCode() = default; + + constexpr explicit MonthCode(Code code) : code_(code) {} + + constexpr explicit MonthCode(int32_t month, bool isLeapMonth = false) { + code_ = static_cast(month + (isLeapMonth ? toLeapMonth : 0)); + } + + constexpr auto code() const { return code_; } + + constexpr int32_t ordinal() const { + int32_t ordinal = static_cast(code_); + if (isLeapMonth()) { + ordinal -= toLeapMonth; + } + return ordinal; + } + + constexpr bool isLeapMonth() const { return code_ >= Code::M01L; } + + constexpr explicit operator std::string_view() const { + constexpr const char* name = + "M01L" + "M02L" + "M03L" + "M04L" + "M05L" + "M06L" + "M07L" + "M08L" + "M09L" + "M10L" + "M11L" + "M12L" + "M13"; + size_t index = (ordinal() - 1) * 4; + size_t length = 3 + isLeapMonth(); + return {name + index, length}; + } +}; + +} // namespace mozilla::intl::calendar + +#endif diff --git a/intl/components/src/calendar/moz.build b/intl/components/src/calendar/moz.build new file mode 100644 index 00000000000..0be57d6b65a --- /dev/null +++ b/intl/components/src/calendar/moz.build @@ -0,0 +1,35 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +FINAL_LIBRARY = "intlcomponents" + +EXPORTS.mozilla.intl.calendar = [ + "ICU4XCalendar.h", + "ICU4XChineseBasedCalendar.h", + "ICU4XChineseCalendar.h", + "ICU4XDangiCalendar.h", + "ICU4XUniquePtr.h", + "ISODate.h", + "MonthCode.h", +] + +LOCAL_INCLUDES += [ + "/intl/icu_capi/bindings/c", +] + +UNIFIED_SOURCES += [ + "ICU4XCalendar.cpp", + "ICU4XChineseBasedCalendar.cpp", + "ICU4XChineseCalendar.cpp", + "ICU4XDangiCalendar.cpp", + "ISODate.cpp", +] + +# ICU requires RTTI +if CONFIG["CC_TYPE"] in ("clang", "gcc"): + CXXFLAGS += ["-frtti"] +elif CONFIG["OS_TARGET"] == "WINNT": + CXXFLAGS += ["-GR"] diff --git a/intl/icu-patches/bug-1954138-ICU-23069-rosh-hashanah-postponement.diff b/intl/icu-patches/bug-1954138-ICU-23069-rosh-hashanah-postponement.diff new file mode 100644 index 00000000000..bbdbf9130b0 --- /dev/null +++ b/intl/icu-patches/bug-1954138-ICU-23069-rosh-hashanah-postponement.diff @@ -0,0 +1,24 @@ +diff --git a/intl/icu/source/i18n/hebrwcal.cpp b/intl/icu/source/i18n/hebrwcal.cpp +--- a/intl/icu/source/i18n/hebrwcal.cpp ++++ b/intl/icu/source/i18n/hebrwcal.cpp +@@ -441,19 +441,18 @@ int32_t startOfYear(int32_t year, UError + day = months * 29LL + frac / DAY_PARTS; // Whole # part of calculation + frac = frac % DAY_PARTS; // Time of day + + int32_t wd = (day % 7); // Day of week (0 == Monday) + + if (wd == 2 || wd == 4 || wd == 6) { + // If the 1st is on Sun, Wed, or Fri, postpone to the next day + day += 1; +- wd = (day % 7); + } +- if (wd == 1 && frac > 15*HOUR_PARTS+204 && !HebrewCalendar::isLeapYear(year) ) { ++ else if (wd == 1 && frac > 15*HOUR_PARTS+204 && !HebrewCalendar::isLeapYear(year) ) { + // If the new moon falls after 3:11:20am (15h204p from the previous noon) + // on a Tuesday and it is not a leap year, postpone by 2 days. + // This prevents 356-day years. + day += 2; + } + else if (wd == 0 && frac > 21*HOUR_PARTS+589 && HebrewCalendar::isLeapYear(year-1) ) { + // If the new moon falls after 9:32:43 1/3am (21h589p from yesterday noon) + // on a Monday and *last* year was a leap year, postpone by 1 day. diff --git a/intl/icu-patches/bug-1954138-dtitvfmt-adopt-calendar.diff b/intl/icu-patches/bug-1954138-dtitvfmt-adopt-calendar.diff new file mode 100644 index 00000000000..88a0ed22827 --- /dev/null +++ b/intl/icu-patches/bug-1954138-dtitvfmt-adopt-calendar.diff @@ -0,0 +1,69 @@ +diff --git a/intl/icu/source/i18n/dtitvfmt.cpp b/intl/icu/source/i18n/dtitvfmt.cpp +--- a/intl/icu/source/i18n/dtitvfmt.cpp ++++ b/intl/icu/source/i18n/dtitvfmt.cpp +@@ -631,16 +631,38 @@ DateIntervalFormat::getTimeZone() const + if (fDateFormat != nullptr) { + Mutex lock(&gFormatterMutex); + return fDateFormat->getTimeZone(); + } + // If fDateFormat is nullptr (unexpected), create default timezone. + return *(TimeZone::createDefault()); + } + ++void DateIntervalFormat::adoptCalendar(Calendar *calendarToAdopt) { ++ if (fDateFormat != nullptr) { ++ fDateFormat->adoptCalendar(calendarToAdopt); ++ } ++ ++ // The fDateFormat has the primary calendar for the DateIntervalFormat and has ++ // ownership of any adopted Calendar; fFromCalendar and fToCalendar are internal ++ // work clones of that calendar. ++ ++ delete fFromCalendar; ++ fFromCalendar = nullptr; ++ ++ delete fToCalendar; ++ fToCalendar = nullptr; ++ ++ const Calendar *calendar = fDateFormat->getCalendar(); ++ if (calendar != nullptr) { ++ fFromCalendar = calendar->clone(); ++ fToCalendar = calendar->clone(); ++ } ++} ++ + void + DateIntervalFormat::setContext(UDisplayContext value, UErrorCode& status) + { + if (U_FAILURE(status)) + return; + if (static_cast(static_cast(value) >> 8) == UDISPCTX_TYPE_CAPITALIZATION) { + fCapitalizationContext = value; + } else { +diff --git a/intl/icu/source/i18n/unicode/dtitvfmt.h b/intl/icu/source/i18n/unicode/dtitvfmt.h +--- a/intl/icu/source/i18n/unicode/dtitvfmt.h ++++ b/intl/icu/source/i18n/unicode/dtitvfmt.h +@@ -637,16 +637,23 @@ public: + /** + * Sets the time zone for the calendar used by this DateIntervalFormat object. + * @param zone the new time zone. + * @stable ICU 4.8 + */ + virtual void setTimeZone(const TimeZone& zone); + + /** ++ * Sets the calendar used by this DateIntervalFormat object. The caller no longer owns ++ * the Calendar object and should not delete it after this call. ++ * @param calendarToAdopt the Calendar to be adopted. ++ */ ++ virtual void adoptCalendar(Calendar *calendarToAdopt); ++ ++ /** + * Set a particular UDisplayContext value in the formatter, such as + * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted + * result to be capitalized appropriately for the context in which + * it is intended to be used, considering both the locale and the + * type of field at the beginning of the formatted result. + * @param value The UDisplayContext value to set. + * @param status Input/output status. If at entry this indicates a failure + * status, the function will do nothing; otherwise this will be diff --git a/intl/icu/source/i18n/dtitvfmt.cpp b/intl/icu/source/i18n/dtitvfmt.cpp index b5343f12c80..739c6eee59d 100644 --- a/intl/icu/source/i18n/dtitvfmt.cpp +++ b/intl/icu/source/i18n/dtitvfmt.cpp @@ -636,6 +636,28 @@ DateIntervalFormat::getTimeZone() const return *(TimeZone::createDefault()); } +void DateIntervalFormat::adoptCalendar(Calendar *calendarToAdopt) { + if (fDateFormat != nullptr) { + fDateFormat->adoptCalendar(calendarToAdopt); + } + + // The fDateFormat has the primary calendar for the DateIntervalFormat and has + // ownership of any adopted Calendar; fFromCalendar and fToCalendar are internal + // work clones of that calendar. + + delete fFromCalendar; + fFromCalendar = nullptr; + + delete fToCalendar; + fToCalendar = nullptr; + + const Calendar *calendar = fDateFormat->getCalendar(); + if (calendar != nullptr) { + fFromCalendar = calendar->clone(); + fToCalendar = calendar->clone(); + } +} + void DateIntervalFormat::setContext(UDisplayContext value, UErrorCode& status) { diff --git a/intl/icu/source/i18n/hebrwcal.cpp b/intl/icu/source/i18n/hebrwcal.cpp index 70dfe9b7c73..5019b334b12 100644 --- a/intl/icu/source/i18n/hebrwcal.cpp +++ b/intl/icu/source/i18n/hebrwcal.cpp @@ -445,9 +445,8 @@ int32_t startOfYear(int32_t year, UErrorCode &status) if (wd == 2 || wd == 4 || wd == 6) { // If the 1st is on Sun, Wed, or Fri, postpone to the next day day += 1; - wd = (day % 7); } - if (wd == 1 && frac > 15*HOUR_PARTS+204 && !HebrewCalendar::isLeapYear(year) ) { + else if (wd == 1 && frac > 15*HOUR_PARTS+204 && !HebrewCalendar::isLeapYear(year) ) { // If the new moon falls after 3:11:20am (15h204p from the previous noon) // on a Tuesday and it is not a leap year, postpone by 2 days. // This prevents 356-day years. diff --git a/intl/icu/source/i18n/unicode/dtitvfmt.h b/intl/icu/source/i18n/unicode/dtitvfmt.h index 7bfdf2d8a28..340d8519710 100644 --- a/intl/icu/source/i18n/unicode/dtitvfmt.h +++ b/intl/icu/source/i18n/unicode/dtitvfmt.h @@ -641,6 +641,13 @@ public: */ virtual void setTimeZone(const TimeZone& zone); + /** + * Sets the calendar used by this DateIntervalFormat object. The caller no longer owns + * the Calendar object and should not delete it after this call. + * @param calendarToAdopt the Calendar to be adopted. + */ + virtual void adoptCalendar(Calendar *calendarToAdopt); + /** * Set a particular UDisplayContext value in the formatter, such as * UDISPCTX_CAPITALIZATION_FOR_STANDALONE. This causes the formatted diff --git a/intl/update-icu.sh b/intl/update-icu.sh index f8fccda7a10..d8d07ee7bd5 100755 --- a/intl/update-icu.sh +++ b/intl/update-icu.sh @@ -60,6 +60,8 @@ for patch in \ bug-1790071-ICU-22132-standardize-vtzone-output.diff \ double-conversion.diff \ bug-1856290-ICU-20548-dateinterval-timezone.diff \ + bug-1954138-dtitvfmt-adopt-calendar.diff \ + bug-1954138-ICU-23069-rosh-hashanah-postponement.diff \ ; do echo "Applying local patch $patch" patch -d ${icu_dir}/../../ -p1 --no-backup-if-mismatch < ${icu_dir}/../icu-patches/$patch diff --git a/js/public/HeapAPI.h b/js/public/HeapAPI.h index e712e3481ed..6b3fd9aa0cd 100644 --- a/js/public/HeapAPI.h +++ b/js/public/HeapAPI.h @@ -303,7 +303,7 @@ class alignas(TypicalCacheLineSize) MarkBitmap { } inline bool markIfUnmarked(const void* cell, MarkColor color); - inline bool markIfUnmarkedAtomic(const void* cell, MarkColor color); + inline bool markIfUnmarkedThreadSafe(const void* cell, MarkColor color); inline void markBlack(const void* cell); inline void markBlackAtomic(const void* cell); inline void copyMarkBit(TenuredCell* dst, const TenuredCell* src, diff --git a/js/public/friend/ErrorNumbers.msg b/js/public/friend/ErrorNumbers.msg index 7c542bf699a..b47b4272418 100644 --- a/js/public/friend/ErrorNumbers.msg +++ b/js/public/friend/ErrorNumbers.msg @@ -899,7 +899,7 @@ MSG_DEF(JSMSG_TEMPORAL_PLAIN_DATE_TIME_INVALID, 0, JSEXN_RANGEERR, "argument MSG_DEF(JSMSG_TEMPORAL_PLAIN_TIME_INVALID, 0, JSEXN_RANGEERR, "arguments must be valid ISO time values") MSG_DEF(JSMSG_TEMPORAL_PLAIN_TIME_INVALID_VALUE, 4, JSEXN_RANGEERR, "time value \"{0}\" not in {1}..{2}: {3}") MSG_DEF(JSMSG_TEMPORAL_PLAIN_TIME_MISSING_UNIT, 0, JSEXN_TYPEERR, "Time-like objects must have at least one time unit") -MSG_DEF(JSMSG_TEMPORAL_PLAIN_MONTH_DAY_INVALID, 0, JSEXN_RANGEERR, "year-month-day must be valid iso dates") +MSG_DEF(JSMSG_TEMPORAL_PLAIN_MONTH_DAY_INVALID, 0, JSEXN_RANGEERR, "month-day must be valid ISO date values") MSG_DEF(JSMSG_TEMPORAL_PLAIN_YEAR_MONTH_INVALID, 0, JSEXN_RANGEERR, "year-month must be valid ISO date values") MSG_DEF(JSMSG_TEMPORAL_ZONED_DATE_TIME_NO_TIME_FOUND, 0, JSEXN_RANGEERR, "date-time can't be represented in the given time zone") MSG_DEF(JSMSG_TEMPORAL_ZONED_DATE_TIME_INCONSISTENT_INSTANT, 0, JSEXN_RANGEERR, "time zone computed inconsistent instant values") diff --git a/js/public/friend/UsageStatistics.h b/js/public/friend/UsageStatistics.h index 6d10a52da57..3147a2f7138 100644 --- a/js/public/friend/UsageStatistics.h +++ b/js/public/friend/UsageStatistics.h @@ -119,7 +119,8 @@ extern JS_PUBLIC_API void JS_SetAccumulateTelemetryCallback( _(DATEPARSE, DateParse) \ _(DATEPARSE_IMPL_DEF, DateParseImplDef) \ _(OPTIMIZE_ARRAY_SPECIES_FUSE, OptimizeArraySpeciesFuse) \ - _(OPTIMIZE_PROMISE_LOOKUP_FUSE, OptimizePromiseLookupFuse) + _(OPTIMIZE_PROMISE_LOOKUP_FUSE, OptimizePromiseLookupFuse) \ + _(REGEXP_SYMBOL_PROTOCOL_ON_PRIMITIVE, RegExpSymbolProtocolOnPrimitive) /* * Use counter names passed to the accumulate use counter callback. diff --git a/js/src/aclocal.m4 b/js/src/aclocal.m4 deleted file mode 100644 index 4151cbd8878..00000000000 --- a/js/src/aclocal.m4 +++ /dev/null @@ -1,23 +0,0 @@ -dnl -dnl Local autoconf macros used with mozilla -dnl The contents of this file are under the Public Domain. -dnl - -builtin(include, ../../build/autoconf/hooks.m4)dnl -builtin(include, ../../build/autoconf/config.status.m4)dnl -builtin(include, ../../build/autoconf/altoptions.m4)dnl - -define([__MOZ_AC_INIT_PREPARE], defn([AC_INIT_PREPARE])) -define([AC_INIT_PREPARE], -[if test -z "$srcdir"; then - srcdir=`dirname "[$]0"` -fi -srcdir="$srcdir/../.." -__MOZ_AC_INIT_PREPARE($1) -]) - -dnl This won't actually read the mozconfig, but data that configure.py -dnl will have placed for us to read. Configure.py takes care of not reading -dnl the mozconfig where appropriate but can still give us some variables -dnl to read. -MOZ_READ_MOZCONFIG(.) diff --git a/js/src/builtin/String.js b/js/src/builtin/String.js index 1c3b04380f5..563b7d3b677 100644 --- a/js/src/builtin/String.js +++ b/js/src/builtin/String.js @@ -30,6 +30,9 @@ function String_match(regexp) { // Step 2.b. if (matcher !== undefined) { + if (!IsObject(regexp)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(matcher, regexp, this); } } @@ -94,6 +97,9 @@ function String_matchAll(regexp) { // Step 2.d. if (matcher !== undefined) { + if (!IsObject(regexp)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(matcher, regexp, this); } } @@ -221,6 +227,9 @@ function String_replace(searchValue, replaceValue) { // Step 2.b. if (replacer !== undefined) { + if (!IsObject(searchValue)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(replacer, searchValue, this, replaceValue); } } @@ -313,6 +322,9 @@ function String_replaceAll(searchValue, replaceValue) { // Step 2.b. if (replacer !== undefined) { + if (!IsObject(searchValue)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(replacer, searchValue, this, replaceValue); } } @@ -428,6 +440,9 @@ function String_search(regexp) { // Step 2.b. if (searcher !== undefined) { + if (!IsObject(regexp)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(searcher, regexp, this); } } @@ -491,6 +506,9 @@ function String_split(separator, limit) { // Step 2.b. if (splitter !== undefined) { + if (!IsObject(separator)) { + RegExpSymbolProtocolOnPrimitiveCounter(); + } return callContentFunction(splitter, separator, this, limit); } } diff --git a/js/src/builtin/intl/DateTimeFormat.cpp b/js/src/builtin/intl/DateTimeFormat.cpp index d163e0bad31..e27b9f08184 100644 --- a/js/src/builtin/intl/DateTimeFormat.cpp +++ b/js/src/builtin/intl/DateTimeFormat.cpp @@ -1638,10 +1638,6 @@ static mozilla::intl::DateTimeFormat* NewDateTimeFormat( df = dfResult.unwrap(); } - // ECMAScript requires the Gregorian calendar to be used from the beginning - // of ECMAScript time. - df->SetStartTimeIfGregorian(StartOfTime); - return df.release(); } @@ -2578,51 +2574,12 @@ static bool PartitionDateTimeRangePattern( MOZ_ASSERT(x.isValid()); MOZ_ASSERT(y.isValid()); - // We can't access the calendar used by UDateIntervalFormat to change it to a - // proleptic Gregorian calendar. Instead we need to call a different formatter - // function which accepts UCalendar instead of UDate. - // But creating new UCalendar objects for each call is slow, so when we can - // ensure that the input dates are later than the Gregorian change date, - // directly call the formatter functions taking UDate. - - // The Gregorian change date "1582-10-15T00:00:00.000Z". - constexpr double GregorianChangeDate = -12219292800000.0; - - // Add a full day to account for time zone offsets. - constexpr double GregorianChangeDatePlusOneDay = - GregorianChangeDate + msPerDay; - - mozilla::intl::ICUResult result = Ok(); - if (x.toDouble() < GregorianChangeDatePlusOneDay || - y.toDouble() < GregorianChangeDatePlusOneDay) { - // Create calendar objects for the start and end date by cloning the date - // formatter calendar. The date formatter calendar already has the correct - // time zone set and was changed to use a proleptic Gregorian calendar. - auto startCal = df->CloneCalendar(x.toDouble()); - if (startCal.isErr()) { - intl::ReportInternalError(cx, startCal.unwrapErr()); - return false; - } - - auto endCal = df->CloneCalendar(y.toDouble()); - if (endCal.isErr()) { - intl::ReportInternalError(cx, endCal.unwrapErr()); - return false; - } - - result = dif->TryFormatCalendar(*startCal.unwrap(), *endCal.unwrap(), - formatted, equal); - } else { - // The common fast path which doesn't require creating calendar objects. - result = - dif->TryFormatDateTime(x.toDouble(), y.toDouble(), formatted, equal); - } - + auto result = + dif->TryFormatDateTime(x.toDouble(), y.toDouble(), df, formatted, equal); if (result.isErr()) { intl::ReportInternalError(cx, result.unwrapErr()); return false; } - return true; } diff --git a/js/src/builtin/temporal/Calendar.cpp b/js/src/builtin/temporal/Calendar.cpp index 20846179566..fb75a20fa39 100644 --- a/js/src/builtin/temporal/Calendar.cpp +++ b/js/src/builtin/temporal/Calendar.cpp @@ -537,6 +537,75 @@ bool js::temporal::GetTemporalCalendarWithISODefault( return ToTemporalCalendar(cx, calendarValue, result); } +static inline bool DayOfMonthCanBeZero(CalendarId calendarId) { + // Workaround when day-of-month returns zero. + // + // See . + static constexpr mozilla::EnumSet calendars{ + CalendarId::Islamic, + CalendarId::IslamicRGSA, + CalendarId::IslamicUmmAlQura, + }; + return calendars.contains(calendarId); +} + +static inline int32_t OrdinalMonth(CalendarId calendarId, + const capi::ICU4XDate* date) { + int32_t month = capi::ICU4XDate_ordinal_month(date); + MOZ_ASSERT(month > 0); + + if (DayOfMonthCanBeZero(calendarId)) { + // If |dayOfMonth| is zero, interpret as last day of previous month. + int32_t dayOfMonth = capi::ICU4XDate_day_of_month(date); + if (dayOfMonth == 0) { + MOZ_ASSERT(month > 1); + month -= 1; + } + } + + return month; +} + +static inline int32_t DayOfMonth(CalendarId calendarId, + const capi::ICU4XDate* date) { + int32_t dayOfMonth = capi::ICU4XDate_day_of_month(date); + + if (DayOfMonthCanBeZero(calendarId)) { + // If |dayOfMonth| is zero, interpret as last day of previous month. + if (dayOfMonth == 0) { + MOZ_ASSERT(CalendarDaysInMonth(calendarId).second == 30); + dayOfMonth = 30; + } + } + + MOZ_ASSERT(dayOfMonth > 0); + return dayOfMonth; +} + +static inline int32_t DayOfYear(const capi::ICU4XDate* date) { + int32_t dayOfYear = capi::ICU4XDate_day_of_year(date); + MOZ_ASSERT(dayOfYear > 0); + return dayOfYear; +} + +static inline int32_t DaysInMonth(const capi::ICU4XDate* date) { + int32_t daysInMonth = capi::ICU4XDate_days_in_month(date); + MOZ_ASSERT(daysInMonth > 0); + return daysInMonth; +} + +static inline int32_t DaysInYear(const capi::ICU4XDate* date) { + int32_t daysInYear = capi::ICU4XDate_days_in_year(date); + MOZ_ASSERT(daysInYear > 0); + return daysInYear; +} + +static inline int32_t MonthsInYear(const capi::ICU4XDate* date) { + int32_t monthsInYear = capi::ICU4XDate_months_in_year(date); + MOZ_ASSERT(monthsInYear > 0); + return monthsInYear; +} + static auto ToAnyCalendarKind(CalendarId id) { switch (id) { case CalendarId::ISO8601: @@ -1121,7 +1190,12 @@ static UniqueICU4XDate CreateDateFromCodes(JSContext* cx, CalendarId calendarId, // // Chinese/Dangi calendar: // Pick the next month, for example M03L -> M04, except for M12L, because - // we don't to switch over to the next year. + // we don't want to switch over to the next year. + + // TODO: Temporal spec polyfill replaces M03L with M03 for Chinese/Dangi. + // No idea what are the "cultural conventions" for these two calendars... + // + // https://github.com/tc39/proposal-intl-era-monthcode/issues/32 int32_t nonLeapMonth = std::min(monthCode.ordinal() + 1, 12); auto nonLeapMonthCode = MonthCode{nonLeapMonth}; @@ -1150,8 +1224,7 @@ static UniqueICU4XDate CreateDateFromCodes(JSContext* cx, CalendarId calendarId, return nullptr; } - int32_t daysInMonth = - capi::ICU4XDate_days_in_month(firstDayOfMonth.get()); + int32_t daysInMonth = DaysInMonth(firstDayOfMonth.get()); MOZ_ASSERT(day > daysInMonth); return CreateDateFromCodes(cx, calendarId, calendar, eraYear, monthCode, daysInMonth, overflow); @@ -1225,9 +1298,8 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, if (!date) { return nullptr; } - MOZ_ASSERT_IF( - CalendarEraStartsAtYearBoundary(calendarId), - capi::ICU4XDate_ordinal_month(date.get()) == uint32_t(month)); + MOZ_ASSERT_IF(CalendarEraStartsAtYearBoundary(calendarId), + OrdinalMonth(calendarId, date.get()) == month); return date; } @@ -1250,7 +1322,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, // If the ordinal month of |date| matches the input month, no additional // changes are necessary and we can directly return |date|. - int32_t ordinal = capi::ICU4XDate_ordinal_month(date.get()); + int32_t ordinal = OrdinalMonth(calendarId, date.get()); if (ordinal == month) { return date; } @@ -1264,7 +1336,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, MOZ_ASSERT(1 < month && month <= 12); // This case can only happen in leap years. - MOZ_ASSERT(capi::ICU4XDate_months_in_year(date.get()) == 13); + MOZ_ASSERT(MonthsInYear(date.get()) == 13); // Leap months can occur after any month in the Chinese calendar. // @@ -1287,7 +1359,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, return nullptr; } - int32_t ordinal = capi::ICU4XDate_ordinal_month(date.get()); + int32_t ordinal = OrdinalMonth(calendarId, date.get()); if (ordinal == month) { return date; } @@ -1299,7 +1371,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, MOZ_ASSERT(ordinal == 12); // Years with leap months contain thirteen months. - if (capi::ICU4XDate_months_in_year(date.get()) != 13) { + if (MonthsInYear(date.get()) != 13) { if (overflow == TemporalOverflow::Reject) { ReportCalendarFieldOverflow(cx, "month", month); return nullptr; @@ -1317,7 +1389,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, if (!date) { return nullptr; } - MOZ_ASSERT(capi::ICU4XDate_ordinal_month(date.get()) == uint32_t(month), + MOZ_ASSERT(OrdinalMonth(calendarId, date.get()) == month, "unexpected ordinal month"); return date; } @@ -1338,7 +1410,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, // If the ordinal month of |date| matches the input month, no additional // changes are necessary and we can directly return |date|. - int32_t ordinal = capi::ICU4XDate_ordinal_month(date.get()); + int32_t ordinal = OrdinalMonth(calendarId, date.get()); if (ordinal == month) { return date; } @@ -1351,7 +1423,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, MOZ_ASSERT(1 < month && month <= 12); // This case can only happen in leap years. - MOZ_ASSERT(capi::ICU4XDate_months_in_year(date.get()) == 13); + MOZ_ASSERT(MonthsInYear(date.get()) == 13); // Leap months can occur between M05 and M06 in the Hebrew calendar. // @@ -1379,7 +1451,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendarId, if (!date) { return nullptr; } - MOZ_ASSERT(capi::ICU4XDate_ordinal_month(date.get()) == uint32_t(month), + MOZ_ASSERT(OrdinalMonth(calendarId, date.get()) == month, "unexpected ordinal month"); return date; } @@ -1564,6 +1636,15 @@ static bool CalendarDateMonthCode(JSContext* cx, CalendarId calendar, monthCode = RegularAdarII; } + if (DayOfMonthCanBeZero(calendar)) { + // If |dayOfMonth| is zero, interpret as last day of previous month. + int32_t dayOfMonth = capi::ICU4XDate_day_of_month(date); + if (dayOfMonth == 0) { + MOZ_ASSERT(ordinal > 1 && !isLeapMonth); + monthCode = MonthCode{ordinal - 1}; + } + } + // The month code must be valid for this calendar. MOZ_ASSERT(CalendarMonthCodes(calendar).contains(monthCode)); @@ -1939,10 +2020,11 @@ static bool CalendarFieldEraYearMatchesYear(JSContext* cx, CalendarId calendar, * > month. */ static bool CalendarFieldMonthCodeMatchesMonth(JSContext* cx, + CalendarId calendarId, Handle fields, const capi::ICU4XDate* date, int32_t month) { - int32_t ordinal = capi::ICU4XDate_ordinal_month(date); + int32_t ordinal = OrdinalMonth(calendarId, date); // The user requested month must match the actual ordinal month. if (month != ordinal) { @@ -2013,7 +2095,7 @@ static UniqueICU4XDate CreateDateFrom(JSContext* cx, CalendarId calendar, // |month| and |monthCode| must be consistent. if (month.code != MonthCode{} && month.ordinal > 0) { - if (!CalendarFieldMonthCodeMatchesMonth(cx, fields, date.get(), + if (!CalendarFieldMonthCodeMatchesMonth(cx, calendar, fields, date.get(), month.ordinal)) { return nullptr; } @@ -2224,11 +2306,11 @@ static bool CalendarMonthDayToISOReferenceDate(JSContext* cx, // Call into ICU4X if `day` exceeds the minimum number of days. int32_t minDaysInMonth = CalendarDaysInMonth(calendar, monthCode).first; if (day > minDaysInMonth) { - day = capi::ICU4XDate_day_of_month(date.get()); + day = DayOfMonth(calendar, date.get()); } } else { MOZ_ASSERT(overflow == TemporalOverflow::Reject); - MOZ_ASSERT(day == int32_t(capi::ICU4XDate_day_of_month(date.get()))); + MOZ_ASSERT(day == DayOfMonth(calendar, date.get())); } } else { MOZ_ASSERT(monthCode != MonthCode{}); @@ -2339,7 +2421,7 @@ static bool CalendarMonthDayToISOReferenceDate(JSContext* cx, // |month| and |monthCode| must be consistent. if (month.code != MonthCode{} && month.ordinal > 0) { - if (!CalendarFieldMonthCodeMatchesMonth(cx, fields, date.get(), + if (!CalendarFieldMonthCodeMatchesMonth(cx, calendar, fields, date.get(), month.ordinal)) { return false; } @@ -2573,7 +2655,7 @@ bool js::temporal::CalendarMonth(JSContext* cx, Handle calendar, return false; } - int32_t month = capi::ICU4XDate_ordinal_month(dt.get()); + int32_t month = OrdinalMonth(calendarId, dt.get()); result.setInt32(month); return true; } @@ -2654,7 +2736,7 @@ bool js::temporal::CalendarDay(JSContext* cx, Handle calendar, return false; } - int32_t day = capi::ICU4XDate_day_of_month(dt.get()); + int32_t day = DayOfMonth(calendarId, dt.get()); result.setInt32(day); return true; } @@ -2740,8 +2822,8 @@ bool js::temporal::CalendarDayOfYear(JSContext* cx, } auto eraYear = CalendarEraYear(calendarId, year); - int32_t dayOfYear = capi::ICU4XDate_day_of_month(dt.get()); - int32_t month = capi::ICU4XDate_ordinal_month(dt.get()); + int32_t dayOfYear = DayOfMonth(calendarId, dt.get()); + int32_t month = OrdinalMonth(calendarId, dt.get()); // Add the number of days of all preceding months to compute the overall day // of the year. @@ -2752,16 +2834,16 @@ bool js::temporal::CalendarDayOfYear(JSContext* cx, return false; } - dayOfYear += capi::ICU4XDate_days_in_month(previousMonth.get()); + dayOfYear += DaysInMonth(previousMonth.get()); } - MOZ_ASSERT(dayOfYear <= capi::ICU4XDate_days_in_year(dt.get())); + MOZ_ASSERT(dayOfYear <= DaysInYear(dt.get())); result.setInt32(dayOfYear); return true; } - int32_t day = capi::ICU4XDate_day_of_year(dt.get()); + int32_t day = DayOfYear(dt.get()); result.setInt32(day); return true; } @@ -2938,7 +3020,7 @@ bool js::temporal::CalendarDaysInMonth(JSContext* cx, return false; } - int32_t days = capi::ICU4XDate_days_in_month(dt.get()); + int32_t days = DaysInMonth(dt.get()); result.setInt32(days); return true; } @@ -2971,7 +3053,7 @@ bool js::temporal::CalendarDaysInYear(JSContext* cx, return false; } - int32_t days = capi::ICU4XDate_days_in_year(dt.get()); + int32_t days = DaysInYear(dt.get()); result.setInt32(days); return true; } @@ -3004,7 +3086,7 @@ bool js::temporal::CalendarMonthsInYear(JSContext* cx, return false; } - int32_t months = capi::ICU4XDate_months_in_year(dt.get()); + int32_t months = MonthsInYear(dt.get()); result.setInt32(months); return true; } @@ -3057,7 +3139,7 @@ bool js::temporal::CalendarInLeapYear(JSContext* cx, MOZ_ASSERT(!CalendarHasLeapMonths(calendarId)); // Solar calendars have either 365 or 366 days per year. - int32_t days = capi::ICU4XDate_days_in_year(dt.get()); + int32_t days = DaysInYear(dt.get()); MOZ_ASSERT(days == 365 || days == 366); // Leap years have 366 days. @@ -3076,7 +3158,7 @@ bool js::temporal::CalendarInLeapYear(JSContext* cx, // // Allow 353 days to workaround // . - int32_t days = capi::ICU4XDate_days_in_year(dt.get()); + int32_t days = DaysInYear(dt.get()); MOZ_ASSERT(days == 353 || days == 354 || days == 355); // Leap years have 355 days. @@ -3091,7 +3173,7 @@ bool js::temporal::CalendarInLeapYear(JSContext* cx, // Calendars with separate leap months have either 12 or 13 months per // year. - int32_t months = capi::ICU4XDate_months_in_year(dt.get()); + int32_t months = MonthsInYear(dt.get()); MOZ_ASSERT(months == 12 || months == 13); // Leap years have 13 months. @@ -3158,7 +3240,7 @@ static bool ISODateToFields(JSContext* cx, Handle calendar, // Step 4. if (type == DateFieldType::MonthDay || type == DateFieldType::Date) { - int32_t day = capi::ICU4XDate_day_of_month(dt.get()); + int32_t day = DayOfMonth(calendarId, dt.get()); result.setDay(day); } @@ -3475,7 +3557,7 @@ static bool ToCalendarDate(JSContext* cx, CalendarId calendarId, return false; } - int32_t day = capi::ICU4XDate_day_of_month(dt); + int32_t day = DayOfMonth(calendarId, dt); *result = {year, monthCode, day}; return true; @@ -3492,8 +3574,9 @@ static bool ToCalendarDate(JSContext* cx, CalendarId calendarId, if (!CalendarDateYear(cx, calendarId, dt, &year)) { return false; } - int32_t month = capi::ICU4XDate_ordinal_month(dt); - int32_t day = capi::ICU4XDate_day_of_month(dt); + + int32_t month = OrdinalMonth(calendarId, dt); + int32_t day = DayOfMonth(calendarId, dt); *result = {year, month, day}; return true; @@ -3559,9 +3642,8 @@ static bool AddYearMonthDuration(JSContext* cx, CalendarId calendarId, if (months > 0) { while (true) { // Check if adding |months| is still in the current year. - int32_t month = capi::ICU4XDate_ordinal_month(firstDayOfMonth.get()); - int32_t monthsInYear = - capi::ICU4XDate_months_in_year(firstDayOfMonth.get()); + int32_t month = OrdinalMonth(calendarId, firstDayOfMonth.get()); + int32_t monthsInYear = MonthsInYear(firstDayOfMonth.get()); if (month + months <= monthsInYear) { break; } @@ -3583,7 +3665,7 @@ static bool AddYearMonthDuration(JSContext* cx, CalendarId calendarId, while (true) { // Check if subtracting |months| is still in the current year. - int32_t month = capi::ICU4XDate_ordinal_month(firstDayOfMonth.get()); + int32_t month = OrdinalMonth(calendarId, firstDayOfMonth.get()); if (month + months >= 1) { break; } @@ -3604,8 +3686,7 @@ static bool AddYearMonthDuration(JSContext* cx, CalendarId calendarId, } // Compute the actual month to find the correct month code. - int32_t month = - capi::ICU4XDate_ordinal_month(firstDayOfMonth.get()) + months; + int32_t month = OrdinalMonth(calendarId, firstDayOfMonth.get()) + months; firstDayOfMonth = CreateDateFrom(cx, calendarId, calendar, eraYear, month, 1, TemporalOverflow::Constrain); if (!firstDayOfMonth) { @@ -4013,16 +4094,16 @@ static bool DifferenceNonISODate(JSContext* cx, CalendarId calendarId, // Convert years to months if necessary. if (largestUnit == TemporalUnit::Month && years != 0) { - auto monthsUntilEndOfYear = [](const capi::ICU4XDate* date) { - int32_t month = capi::ICU4XDate_ordinal_month(date); - int32_t monthsInYear = capi::ICU4XDate_months_in_year(date); + auto monthsUntilEndOfYear = [calendarId](const capi::ICU4XDate* date) { + int32_t month = OrdinalMonth(calendarId, date); + int32_t monthsInYear = MonthsInYear(date); MOZ_ASSERT(1 <= month && month <= monthsInYear); return monthsInYear - month + 1; }; - auto monthsSinceStartOfYear = [](const capi::ICU4XDate* date) { - return capi::ICU4XDate_ordinal_month(date) - 1; + auto monthsSinceStartOfYear = [calendarId](const capi::ICU4XDate* date) { + return OrdinalMonth(calendarId, date) - 1; }; // Add months until end of year resp. since start of year. @@ -4041,7 +4122,7 @@ static bool DifferenceNonISODate(JSContext* cx, CalendarId calendarId, if (!dt) { return false; } - months += capi::ICU4XDate_months_in_year(dt.get()) * sign; + months += MonthsInYear(dt.get()) * sign; } // Add months since start of year resp. until end of year. diff --git a/js/src/builtin/temporal/Calendar.h b/js/src/builtin/temporal/Calendar.h index 72059cc6b69..0c7ae3f01e0 100644 --- a/js/src/builtin/temporal/Calendar.h +++ b/js/src/builtin/temporal/Calendar.h @@ -76,17 +76,9 @@ enum class CalendarId : int32_t { inline constexpr auto availableCalendars = { CalendarId::ISO8601, CalendarId::Buddhist, -// See Bug 1950425, this calendar is only available on Nightly due to -// inconsistencies between ICU4X and ICU4C. -#ifdef NIGHTLY_BUILD CalendarId::Chinese, -#endif CalendarId::Coptic, -// See Bug 1950425, this calendar is only available on Nightly due to -// inconsistencies between ICU4X and ICU4C. -#ifdef NIGHTLY_BUILD CalendarId::Dangi, -#endif CalendarId::Ethiopian, CalendarId::EthiopianAmeteAlem, CalendarId::Gregorian, diff --git a/js/src/configure b/js/src/configure index e2c672e40d1..5934991770b 100755 --- a/js/src/configure +++ b/js/src/configure @@ -6,8 +6,7 @@ SRCDIR=$(dirname $0) TOPSRCDIR="$SRCDIR"/../.. PYTHON3="${PYTHON3:-python3}" -export OLD_CONFIGURE="$SRCDIR"/old-configure set -- "$@" --enable-project=js - +export MOZ_JS_CONFIGURE=1 exec "$PYTHON3" "$TOPSRCDIR/configure.py" "$@" diff --git a/js/src/debugger/Object.cpp b/js/src/debugger/Object.cpp index b7ea4b6f66d..2d177b5aade 100644 --- a/js/src/debugger/Object.cpp +++ b/js/src/debugger/Object.cpp @@ -168,6 +168,7 @@ struct MOZ_STACK_CLASS DebuggerObject::CallData { bool boundArgumentsGetter(); bool allocationSiteGetter(); bool isErrorGetter(); + bool isMutedErrorGetter(); bool errorMessageNameGetter(); bool errorNotesGetter(); bool errorLineNumberGetter(); @@ -508,6 +509,11 @@ bool DebuggerObject::CallData::isErrorGetter() { return true; } +bool DebuggerObject::CallData::isMutedErrorGetter() { + args.rval().setBoolean(object->isMutedError(cx)); + return true; +} + bool DebuggerObject::CallData::errorNotesGetter() { return DebuggerObject::getErrorNotes(cx, object, args.rval()); } @@ -1514,6 +1520,7 @@ const JSPropertySpec DebuggerObject::properties_[] = { JS_DEBUG_PSG("boundArguments", boundArgumentsGetter), JS_DEBUG_PSG("allocationSite", allocationSiteGetter), JS_DEBUG_PSG("isError", isErrorGetter), + JS_DEBUG_PSG("isMutedError", isMutedErrorGetter), JS_DEBUG_PSG("errorMessageName", errorMessageNameGetter), JS_DEBUG_PSG("errorNotes", errorNotesGetter), JS_DEBUG_PSG("errorLineNumber", errorLineNumberGetter), @@ -1690,6 +1697,31 @@ bool DebuggerObject::isError() const { return referent->is(); } +bool DebuggerObject::isMutedError(JSContext* cx) const { + JS::Rooted referent(cx, this->referent()); + + if (IsCrossCompartmentWrapper(referent)) { + // We only check for error classes, so CheckedUnwrapStatic is OK. + referent = CheckedUnwrapStatic(referent); + if (!referent) { + return false; + } + } + + if (!referent->is()) { + return false; + } + + JSErrorReport* report = referent->as().getErrorReport(); + if (!report) { + // If the error report was missing, isMuted field can never be true, + // and just returning false is OK. + return false; + } + + return report->isMuted; +} + /* static */ bool DebuggerObject::getClassName(JSContext* cx, Handle object, MutableHandleString result) { diff --git a/js/src/debugger/Object.h b/js/src/debugger/Object.h index 15d2800e763..00c68bc5652 100644 --- a/js/src/debugger/Object.h +++ b/js/src/debugger/Object.h @@ -174,6 +174,7 @@ class DebuggerObject : public NativeObject { bool isScriptedProxy() const; bool isPromise() const; bool isError() const; + bool isMutedError(JSContext* cx) const; bool name(JSContext* cx, JS::MutableHandle result) const; bool displayName(JSContext* cx, JS::MutableHandle result) const; diff --git a/js/src/doc/Debugger/Debugger.Object.md b/js/src/doc/Debugger/Debugger.Object.md index 1e5de6719e0..d89c812ee31 100644 --- a/js/src/doc/Debugger/Debugger.Object.md +++ b/js/src/doc/Debugger/Debugger.Object.md @@ -157,6 +157,10 @@ is a function proxy or not debuggee code, this is `undefined`. ### `isError` `true` if the referent is any potentially wrapped Error; `false` otherwise. +### `isMutedError` +`true` if the referent is any potentially wrapped Error associated with a muted +error report; `false` otherwise. + ### `errorMessageName` If the referent is an error created with an engine internal message template this is a string which is the name of the template; `undefined` otherwise. diff --git a/js/src/gc/BufferAllocator.cpp b/js/src/gc/BufferAllocator.cpp index 107beaabe7c..559a8cc5da4 100644 --- a/js/src/gc/BufferAllocator.cpp +++ b/js/src/gc/BufferAllocator.cpp @@ -882,7 +882,7 @@ bool BufferAllocator::markTenuredAlloc(void* alloc) { bool BufferAllocator::markSmallTenuredAlloc(void* alloc) { auto* cell = GetHeaderFromAlloc(alloc); - return cell->markIfUnmarkedAtomic(MarkColor::Black); + return cell->markIfUnmarkedThreadSafe(MarkColor::Black); } bool BufferAllocator::markMediumTenuredAlloc(void* alloc) { @@ -893,7 +893,8 @@ bool BufferAllocator::markMediumTenuredAlloc(void* alloc) { return false; } - return chunk->markBits.ref().markIfUnmarkedAtomic(alloc, MarkColor::Black); + return chunk->markBits.ref().markIfUnmarkedThreadSafe(alloc, + MarkColor::Black); } void BufferAllocator::startMinorCollection(MaybeLock& lock) { @@ -2438,7 +2439,7 @@ bool BufferAllocator::markLargeTenuredBuffer(LargeBuffer* buffer) { // Bug 1961755: This method can return false positives. A fully atomic version // would be preferable in this case. - return headerCell->markIfUnmarkedAtomic(MarkColor::Black); + return headerCell->markIfUnmarkedThreadSafe(MarkColor::Black); } bool BufferAllocator::sweepLargeTenured(LargeBuffer* header) { diff --git a/js/src/gc/Cell.h b/js/src/gc/Cell.h index 47751203cbe..d4a8c83c1e1 100644 --- a/js/src/gc/Cell.h +++ b/js/src/gc/Cell.h @@ -252,7 +252,7 @@ class TenuredCell : public Cell { // The return value indicates if the cell went from unmarked to marked. MOZ_ALWAYS_INLINE bool markIfUnmarked( MarkColor color = MarkColor::Black) const; - MOZ_ALWAYS_INLINE bool markIfUnmarkedAtomic(MarkColor color) const; + MOZ_ALWAYS_INLINE bool markIfUnmarkedThreadSafe(MarkColor color) const; MOZ_ALWAYS_INLINE void markBlack() const; MOZ_ALWAYS_INLINE void markBlackAtomic() const; MOZ_ALWAYS_INLINE void copyMarkBitsFrom(const TenuredCell* src); diff --git a/js/src/gc/Heap-inl.h b/js/src/gc/Heap-inl.h index 3716b117f6c..d62ac4ef3ad 100644 --- a/js/src/gc/Heap-inl.h +++ b/js/src/gc/Heap-inl.h @@ -83,8 +83,8 @@ inline size_t& js::gc::Arena::atomBitmapStart() { // Mark bitmap API: -// The following methods that update the mark bits are not thread safe and must -// not be called in parallel with each other. +// Unless noted otherwise, the following methods that update the mark bits are +// not thread safe and must not be called in parallel with each other. // // They use separate read and write operations to avoid an unnecessarily strict // atomic update on the marking bitmap. @@ -120,14 +120,16 @@ js::gc::MarkBitmap::markIfUnmarked( return true; } +// This version of the method is safe in the face of concurrent writes to the +// mark bitmap but if two threads attempt to mark the same cell at the same time +// then both calls can succeed and return true. +// +// This method is used for parallel marking where the extra synchronization +// required to avoid this results in worse performance overall. template MOZ_ALWAYS_INLINE bool -js::gc::MarkBitmap::markIfUnmarkedAtomic( +js::gc::MarkBitmap::markIfUnmarkedThreadSafe( const void* cell, MarkColor color) { - // This version of the method is safe in the face of concurrent writes to the - // mark bitmap but may return false positives. The extra synchronisation - // necessary to avoid this resulted in worse performance overall. - MarkBitmapWord* word; uintptr_t mask; getMarkWordAndMask(cell, ColorBit::BlackBit, &word, &mask); @@ -244,8 +246,8 @@ bool js::gc::TenuredCell::markIfUnmarked(MarkColor color /* = Black */) const { return chunk()->markBits.markIfUnmarked(this, color); } -bool js::gc::TenuredCell::markIfUnmarkedAtomic(MarkColor color) const { - return chunk()->markBits.markIfUnmarkedAtomic(this, color); +bool js::gc::TenuredCell::markIfUnmarkedThreadSafe(MarkColor color) const { + return chunk()->markBits.markIfUnmarkedThreadSafe(this, color); } void js::gc::TenuredCell::markBlack() const { diff --git a/js/src/gc/Marking.cpp b/js/src/gc/Marking.cpp index 370bb65d260..04674bc8c46 100644 --- a/js/src/gc/Marking.cpp +++ b/js/src/gc/Marking.cpp @@ -1226,7 +1226,7 @@ bool js::GCMarker::mark(T* thing) { TraceKindCanBeGray::value ? markColor() : MarkColor::Black; if constexpr (bool(opts & MarkingOptions::ParallelMarking)) { - return thing->asTenured().markIfUnmarkedAtomic(color); + return thing->asTenured().markIfUnmarkedThreadSafe(color); } return thing->asTenured().markIfUnmarked(color); diff --git a/js/src/jit-test/tests/string-methods-regexp-symbols-telemetry.js b/js/src/jit-test/tests/string-methods-regexp-symbols-telemetry.js new file mode 100644 index 00000000000..83ba79f4583 --- /dev/null +++ b/js/src/jit-test/tests/string-methods-regexp-symbols-telemetry.js @@ -0,0 +1,62 @@ +// Test the telemetry added in Bug 1950211 +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 0); + +"abc".match(/b/); +"abc".match({ [Symbol.match]: () => [] }); +"abc".match("b"); +"abc".match(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 0); +Number.prototype[Symbol.match] = () => []; +"abc".match(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 1); +delete Number.prototype[Symbol.match]; + +"abc".matchAll(/b/g); +"abc".matchAll({ [Symbol.matchAll]: () => [] }); +"abc".matchAll("b"); +"abc".matchAll(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 1); +Number.prototype[Symbol.matchAll] = () => []; +"abc".matchAll(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 2); +delete Number.prototype[Symbol.matchAll]; + +"abc".replace(/b/, "d"); +"abc".replace({ [Symbol.replace]: () => "" }); +"abc".replace("b", "d"); +"abc".replace(42, "d"); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 2); +Number.prototype[Symbol.replace] = () => ""; +"abc".replace(42, "d"); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 3); +delete Number.prototype[Symbol.replace]; + +"abc".replaceAll(/b/g, "d"); +"abc".replaceAll({ [Symbol.replace]: () => "" }); +"abc".replaceAll("b", "d"); +"abc".replaceAll(42, "d"); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 3); +Number.prototype[Symbol.replace] = () => ""; +"abc".replaceAll(42, "d"); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 4); +delete Number.prototype[Symbol.replace]; + +"abc".search(/b/); +"abc".search({ [Symbol.search]: () => -1 }); +"abc".search("b"); +"abc".search(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 4); +Number.prototype[Symbol.search] = () => -1; +"abc".search(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 5); +delete Number.prototype[Symbol.search]; + +"abc".split(/b/); +"abc".split({ [Symbol.split]: () => [] }); +"abc".split("b"); +"abc".split(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 5); +Number.prototype[Symbol.split] = () => []; +"abc".split(42); +assertEq(getUseCounterResults().RegExpSymbolProtocolOnPrimitive, 6); +delete Number.prototype[Symbol.split]; diff --git a/js/src/jit-test/tests/wasm/gc/bug-1962634.js b/js/src/jit-test/tests/wasm/gc/bug-1962634.js new file mode 100644 index 00000000000..1f402fb23db --- /dev/null +++ b/js/src/jit-test/tests/wasm/gc/bug-1962634.js @@ -0,0 +1,38 @@ +// |jit-test| skip-if: !wasmDebuggingEnabled() + +const f = newGlobal({ newCompartment: true }); +f.g = this; +f.eval(` + Debugger(g).onEnterFrame = function(frame) { frame.environment } +`); + +const types = [ + "anyref", "(ref any)", + "eqref", "(ref eq)", + "i31ref", "(ref i31)", + "structref", "(ref struct)", + "arrayref", "(ref array)", + "nullref", "(ref none)", + + "funcref", "(ref func)", + "nullfuncref", "(ref nofunc)", + + "externref", "(ref extern)", + "nullexternref", "(ref noextern)", + + "exnref", "(ref exn)", + "nullexnref", "(ref noexn)", + + "(ref null $s)", "(ref $s)", +]; + +for (const type of types) { + const m = new WebAssembly.Module(wasmTextToBinary(`(module + (type $s (struct)) + (func (export "test") + (local ${type}) + ) + )`)); + const { test } = new WebAssembly.Instance(m).exports; + test(); +} diff --git a/js/src/jit-test/tests/wasm/unroll1.js b/js/src/jit-test/tests/wasm/unroll1.js new file mode 100644 index 00000000000..f4b4a532238 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll1.js @@ -0,0 +1,39 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test: 2 exiting values, 1 exit target => can be unrolled. + +let t = ` +(module + (func (export "f1") (param $limit i32) (result i32) + (local $x i32) + (local $y i32) + (local.set $x (i32.const 1)) + (local.set $y (i32.const 1000)) + (loop $cont + ;; x = x + 1 + (local.set $x (i32.add (local.get $x) (i32.const 1))) + ;; y = y - 7 + (local.set $y (i32.sub (local.get $x) (i32.const 7))) + ;; + (br_if $cont (i32.lt_u (local.get $x) (local.get $limit))) + ) + (i32.mul (local.get $x) (local.get $y)) + ) +)`; + +let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +// Run the loop some varying number of times, with the aim of exiting it at +// each copy of the loop, so as to check that the post-loop values of `x` and +// `y` are correct, regardless of which copy of the original loop exited. + +assertEq(i.exports.f1(100), 9300); +assertEq(i.exports.f1(101), 9494); +assertEq(i.exports.f1(102), 9690); +assertEq(i.exports.f1(103), 9888); +assertEq(i.exports.f1(104), 10088); +assertEq(i.exports.f1(105), 10290); +assertEq(i.exports.f1(106), 10494); +assertEq(i.exports.f1(107), 10700); +assertEq(i.exports.f1(108), 10908); +assertEq(i.exports.f1(109), 11118); diff --git a/js/src/jit-test/tests/wasm/unroll2.js b/js/src/jit-test/tests/wasm/unroll2.js new file mode 100644 index 00000000000..3628c145159 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll2.js @@ -0,0 +1,46 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test: 0 exiting values, 1 exit target => can be unrolled. + +let t = ` +(module + (memory (export "mem") 1) + (func (export "my_memset") + (param $start i32) (param $byte i32) (param $count i32) + (local $limit i32) + (local.set $limit (i32.add (local.get $start) (local.get $count))) + (if (i32.lt_u (local.get $start) (local.get $limit)) + (then + (loop $cont + (i32.store8 (local.get $start) (local.get $byte)) + (local.set $start (i32.add (local.get $start) (i32.const 1))) + (br_if $cont (i32.lt_u (local.get $start) (local.get $limit))) + ) + ) + ) + ) +)`; + +let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +i.exports.my_memset(1, 22, 1); +i.exports.my_memset(3, 33, 2); +i.exports.my_memset(6, 44, 3); +i.exports.my_memset(10, 55, 4); +i.exports.my_memset(15, 66, 5); +i.exports.my_memset(21, 77, 6); +i.exports.my_memset(28, 88, 7); +i.exports.my_memset(36, 99, 8); + +let buf = new Uint8Array(i.exports.mem.buffer); + +let s = ""; +for (let i = 0; i < 45; i++) { + s = s + (buf[i] + " "); +} + +let expected = + "0 22 0 33 33 0 44 44 44 0 55 55 55 55 0 66 66 66 66 66 0 77 77 77 " + + "77 77 77 0 88 88 88 88 88 88 88 0 99 99 99 99 99 99 99 99 0 "; + +assertEq(s, expected); diff --git a/js/src/jit-test/tests/wasm/unroll3.js b/js/src/jit-test/tests/wasm/unroll3.js new file mode 100644 index 00000000000..163e99b8899 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll3.js @@ -0,0 +1,33 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test: 1 exiting value, 1 exit target => can be unrolled. +// The value defined in the loop, which is used after, +// is also phi'd with a value defined before the loop. + +let t = ` +(module + (func (export "f1") (param $enterloopP i32) (param $limit i32) (result i32) + (local $merge i32) + (local $x i32) + (local.set $merge (i32.const 5000)) + (local.set $x (i32.const 1)) + (if (i32.ne (local.get $enterloopP) (i32.const 0)) + (then + (loop $cont + ;; x = x + 1 + (local.set $x (i32.add (local.get $x) (i32.const 1))) + ;; merge = x + (local.set $merge (i32.add (local.get $x) (i32.const 1111))) + ;; continue if x < limit + (br_if $cont (i32.lt_u (local.get $x) (local.get $limit))) + ) + ) + ) + (i32.mul (local.get $merge) (i32.const 17)) + ) +)`; + +let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +assertEq(i.exports.f1(0, 100), 85000); // loop not entered +assertEq(i.exports.f1(1, 100), 20587) // loop entered diff --git a/js/src/jit-test/tests/wasm/unroll4.js b/js/src/jit-test/tests/wasm/unroll4.js new file mode 100644 index 00000000000..b4bfebfbbf0 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll4.js @@ -0,0 +1,33 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test: 2 exiting values, 1 exit target => can be unrolled. +// `a` and `b` are swapped every iteration and correct unrolling depends on +// the phi nodes being treated as parallel assignments. + +let t = ` +(module + (func (export "f1") (param $limit i32) (result i64) + (local $a i64) + (local $b i64) + (local $tmp i64) + (local $x i32) + (local.set $a (i64.const 12345)) + (local.set $b (i64.const 67890)) + (loop $cont + ;; swap a and b + (local.set $tmp (local.get $a)) + (local.set $a (local.get $b)) + (local.set $b (local.get $tmp)) + ;; x = x + 1 + (local.set $x (i32.add (local.get $x) (i32.const 1))) + ;; + (br_if $cont (i32.lt_u (local.get $x) (local.get $limit))) + ) + (i64.sub (local.get $a) (local.get $b)) + ) +)`; + +let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +assertEq(i.exports.f1(100), -55545n); +assertEq(i.exports.f1(101), 55545n); diff --git a/js/src/jit-test/tests/wasm/unroll5.js b/js/src/jit-test/tests/wasm/unroll5.js new file mode 100644 index 00000000000..2e335fb6d36 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll5.js @@ -0,0 +1,44 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test. Seen to be causing assertion failures to do with +// incorrect header phi arg remapping -- the loop header contains a phi, +// neither arg of which is from inside the loop. + +let t = ` +(module + (memory 0) + (func (export "f1") + (param $local0 i32) (param $local1 i32) (param $local2 i32) + (result i32) + (local $local3 i32) (local $local4 i32) + (local $local5 i32) (local $local6 i32) + (local $local7 i32) (local $local8 i32) + (i32.load (local.get $local0)) + if + (local.set $local8 (i32.shl (local.get $local2) (i32.const 2))) + loop $again + local.get $local8 + i32.load + local.set $local4 + local.get $local5 + local.get $local2 + i32.const 4 + i32.add + local.tee $local3 + i32.store + local.get $local6 + local.set $local4 + i32.const 2 + local.set $local6 + local.get $local4 + br_if $again + end + end + i32.const 0 + ) +)`; + +let i = new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +// We only care that we can compile this without asserting (in the unroller). +assertEq(i + "", "[object WebAssembly.Instance]"); diff --git a/js/src/jit-test/tests/wasm/unroll6.js b/js/src/jit-test/tests/wasm/unroll6.js new file mode 100644 index 00000000000..cac445fe442 --- /dev/null +++ b/js/src/jit-test/tests/wasm/unroll6.js @@ -0,0 +1,58 @@ +// |jit-test| test-also=--setpref=wasm_unroll_loops=true + +// Loop unrolling test: 0 exiting values, 2 exit targets => can be unrolled. +// This is a modified version of unroll2.js. + +let t = ` +(module + (memory (export "mem") 1) + (func (export "not_really_memset") + (param $start i32) (param $byte i32) (param $count i32) + (local $limit i32) + (local.set $limit (i32.add (local.get $start) (local.get $count))) + (loop $cont + (if (i32.lt_u (local.get $start) (local.get $limit)) (then + (i32.store8 (local.get $start) + (i32.xor (local.get $byte) (i32.const 0))) + (local.set $start (i32.add (local.get $start) (i32.const 1))) + (if (i32.lt_u (local.get $start) (local.get $limit)) (then + (i32.store8 (local.get $start) + (i32.add (local.get $byte) (i32.const 100))) + (local.set $start (i32.add (local.get $start) (i32.const 1))) + ;; continue + (br $cont) + )) + ;; implied else-clause exits the loop + )) + ;; implied else-clause exits the loop + ) + ) +)`; + +let i = //wasmEvalText(t); + new WebAssembly.Instance(new WebAssembly.Module(wasmTextToBinary(t))); + +i.exports.not_really_memset(1, 22, 1); +i.exports.not_really_memset(3, 33, 2); +i.exports.not_really_memset(6, 44, 3); +i.exports.not_really_memset(10, 55, 4); +i.exports.not_really_memset(15, 66, 5); +i.exports.not_really_memset(21, 77, 6); +i.exports.not_really_memset(28, 88, 7); +i.exports.not_really_memset(36, 99, 8); + +let buf = new Uint8Array(i.exports.mem.buffer); + +let s = ""; +for (let i = 0; i < 45; i++) { + s = s + (buf[i] + " "); +} + +// The last number (22, 133, 44, 155, etc) in each zero-bordered group is of +// the form XX if the loop terminates via its first exit edge, and 1XX if it +// terminates by its second exit edge. +let expected = + "0 22 0 33 133 0 44 144 44 0 55 155 55 155 0 66 166 66 166 66 0 77 177 " + + "77 177 77 177 0 88 188 88 188 88 188 88 0 99 199 99 199 99 199 99 199 0 "; + +assertEq(s, expected); diff --git a/js/src/jit/CodeGenerator.cpp b/js/src/jit/CodeGenerator.cpp index c40d6b3c6e2..e8de6144c8c 100644 --- a/js/src/jit/CodeGenerator.cpp +++ b/js/src/jit/CodeGenerator.cpp @@ -8014,6 +8014,10 @@ bool CodeGenerator::generateBody() { continue; } + if (gen->shouldCancel("Generate Code (block loop)")) { + return false; + } + #ifdef JS_JITSPEW const char* filename = nullptr; size_t lineNumber = 0; @@ -8048,6 +8052,9 @@ bool CodeGenerator::generateBody() { for (LInstructionIterator iter = current->begin(); iter != current->end(); iter++) { + if (gen->shouldCancel("Generate Code (instruction loop)")) { + return false; + } if (!alloc().ensureBallast()) { return false; } diff --git a/js/src/jit/DominatorTree.cpp b/js/src/jit/DominatorTree.cpp index 091882f8c47..ca7133d1f0e 100644 --- a/js/src/jit/DominatorTree.cpp +++ b/js/src/jit/DominatorTree.cpp @@ -49,6 +49,7 @@ namespace js::jit { // whole graph. This is called Dynamic SNCA and both Julia and LLVM implement // this. class MOZ_RAII SemiNCA { + const MIRGenerator* mir_; MIRGraph& graph_; // State associated with each basic block. Note that the paper uses separate @@ -72,7 +73,8 @@ class MOZ_RAII SemiNCA { [[nodiscard]] bool compress(uint32_t v, uint32_t lastLinked); public: - explicit SemiNCA(MIRGraph& graph) : graph_(graph) {} + SemiNCA(const MIRGenerator* mir, MIRGraph& graph) + : mir_(mir), graph_(graph) {} [[nodiscard]] bool computeDominators(); }; @@ -200,6 +202,10 @@ bool SemiNCA::computeDominators() { // Compute semi-dominators. for (size_t w = nblocks - 1; w > 0; w--) { + if (mir_->shouldCancel("SemiNCA computeDominators")) { + return false; + } + MBasicBlock* block = state_[w].block; uint32_t semiW = state_[w].ancestor; @@ -256,15 +262,16 @@ bool SemiNCA::computeDominators() { return true; } -static bool ComputeImmediateDominators(MIRGraph& graph) { - SemiNCA semiNCA(graph); +static bool ComputeImmediateDominators(const MIRGenerator* mir, + MIRGraph& graph) { + SemiNCA semiNCA(mir, graph); return semiNCA.computeDominators(); } -bool jit::BuildDominatorTree(MIRGraph& graph) { +bool jit::BuildDominatorTree(const MIRGenerator* mir, MIRGraph& graph) { MOZ_ASSERT(graph.canBuildDominators()); - if (!ComputeImmediateDominators(graph)) { + if (!ComputeImmediateDominators(mir, graph)) { return false; } diff --git a/js/src/jit/DominatorTree.h b/js/src/jit/DominatorTree.h index a031ddbade0..d71dcaff3e3 100644 --- a/js/src/jit/DominatorTree.h +++ b/js/src/jit/DominatorTree.h @@ -9,9 +9,10 @@ namespace js::jit { +class MIRGenerator; class MIRGraph; -[[nodiscard]] bool BuildDominatorTree(MIRGraph& graph); +[[nodiscard]] bool BuildDominatorTree(const MIRGenerator* mir, MIRGraph& graph); void ClearDominatorTree(MIRGraph& graph); } // namespace js::jit diff --git a/js/src/jit/InstructionReordering.cpp b/js/src/jit/InstructionReordering.cpp index b399e0bb8ce..98ad9cf0540 100644 --- a/js/src/jit/InstructionReordering.cpp +++ b/js/src/jit/InstructionReordering.cpp @@ -5,6 +5,8 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "jit/InstructionReordering.h" + +#include "jit/MIRGenerator.h" #include "jit/MIRGraph.h" using namespace js; @@ -72,7 +74,7 @@ static void MoveConstantsToStart(MBasicBlock* block, } } -bool jit::ReorderInstructions(MIRGraph& graph) { +bool jit::ReorderInstructions(MIRGenerator* mir, MIRGraph& graph) { // Renumber all instructions in the graph as we go. size_t nextId = 0; @@ -81,6 +83,10 @@ bool jit::ReorderInstructions(MIRGraph& graph) { for (ReversePostorderIterator block(graph.rpoBegin()); block != graph.rpoEnd(); block++) { + if (mir->shouldCancel("ReorderInstructions (block loop)")) { + return false; + } + // Don't reorder instructions within entry blocks, which have special // requirements. bool isEntryBlock = @@ -120,6 +126,10 @@ bool jit::ReorderInstructions(MIRGraph& graph) { MInstructionReverseIterator rtop = ++block->rbegin(insertionPoint); for (MInstructionIterator iter(block->begin(insertionPoint)); iter != block->end();) { + if (mir->shouldCancel("ReorderInstructions (instruction loop)")) { + return false; + } + MInstruction* ins = *iter; // Filter out some instructions which are never reordered. diff --git a/js/src/jit/InstructionReordering.h b/js/src/jit/InstructionReordering.h index 055e6da5b31..a34343f63c6 100644 --- a/js/src/jit/InstructionReordering.h +++ b/js/src/jit/InstructionReordering.h @@ -12,7 +12,7 @@ namespace js { namespace jit { -[[nodiscard]] bool ReorderInstructions(MIRGraph& graph); +[[nodiscard]] bool ReorderInstructions(MIRGenerator* mir, MIRGraph& graph); } // namespace jit } // namespace js diff --git a/js/src/jit/Ion.cpp b/js/src/jit/Ion.cpp index 6b66f03991c..39a8a975f04 100644 --- a/js/src/jit/Ion.cpp +++ b/js/src/jit/Ion.cpp @@ -51,6 +51,7 @@ #include "jit/ScalarReplacement.h" #include "jit/ScriptFromCalleeToken.h" #include "jit/Sink.h" +#include "jit/UnrollLoops.h" #include "jit/ValueNumbering.h" #include "jit/WarpBuilder.h" #include "jit/WarpOracle.h" @@ -993,7 +994,8 @@ bool OptimizeMIR(MIRGenerator* mir) { } { - if (!FoldEmptyBlocks(graph)) { + bool dummy; + if (!FoldEmptyBlocks(graph, &dummy)) { return false; } gs.spewPass("Fold Empty Blocks"); @@ -1053,7 +1055,7 @@ bool OptimizeMIR(MIRGenerator* mir) { } { - if (!BuildDominatorTree(graph)) { + if (!BuildDominatorTree(mir, graph)) { return false; } // No spew: graph not changed. @@ -1400,7 +1402,7 @@ bool OptimizeMIR(MIRGenerator* mir) { if (mir->optimizationInfo().instructionReorderingEnabled() && !mir->outerInfo().hadReorderingBailout()) { - if (!ReorderInstructions(graph)) { + if (!ReorderInstructions(mir, graph)) { return false; } gs.spewPass("Reordering"); @@ -1428,6 +1430,48 @@ bool OptimizeMIR(MIRGenerator* mir) { AssertExtendedGraphCoherency(graph, /* underValueNumberer = */ false, /* force = */ true); + // Unroll and/or peel loops + if (mir->compilingWasm() && JS::Prefs::wasm_unroll_loops()) { + bool loopsChanged; + if (!UnrollLoops(mir, graph, &loopsChanged)) { + return false; + } + + gs.spewPass("Unroll loops"); + + AssertExtendedGraphCoherency(graph); + + if (mir->shouldCancel("Unroll loops")) { + return false; + } + + if (loopsChanged) { + // Rerun GVN in the hope that unrolling exposed more optimization + // opportunities. + if (!gvn.run(ValueNumberer::DontUpdateAliasAnalysis)) { + return false; + } + // And tidy up any empty blocks. + bool blocksFolded; + if (!FoldEmptyBlocks(graph, &blocksFolded)) { + return false; + } + if (blocksFolded) { + // Redo the dominator tree. + ClearDominatorTree(graph); + if (!BuildDominatorTree(mir, graph)) { + return false; + } + } + + AssertExtendedGraphCoherency(graph); + + if (mir->shouldCancel("Rerun GVN after loop unrolling")) { + return false; + } + } + } + // Remove unreachable blocks created by MBasicBlock::NewFakeLoopPredecessor // to ensure every loop header has two predecessors. (This only happens due // to OSR.) After this point, it is no longer possible to build the @@ -1468,6 +1512,10 @@ bool OptimizeMIR(MIRGenerator* mir) { } gs.spewPass("Bounds Check Elimination"); AssertGraphCoherency(graph); + + if (mir->shouldCancel("Bounds Check Elimination")) { + return false; + } } if (mir->optimizationInfo().eliminateRedundantShapeGuardsEnabled()) { @@ -1476,6 +1524,10 @@ bool OptimizeMIR(MIRGenerator* mir) { } gs.spewPass("Shape Guard Elimination"); AssertGraphCoherency(graph); + + if (mir->shouldCancel("Shape Guard Elimination")) { + return false; + } } // Run the GC Barrier Elimination pass after instruction reordering, to @@ -1487,6 +1539,10 @@ bool OptimizeMIR(MIRGenerator* mir) { } gs.spewPass("GC Barrier Elimination"); AssertGraphCoherency(graph); + + if (mir->shouldCancel("GC Barrier Elimination")) { + return false; + } } if (!mir->compilingWasm() && !mir->outerInfo().hadUnboxFoldingBailout()) { @@ -1495,6 +1551,10 @@ bool OptimizeMIR(MIRGenerator* mir) { } gs.spewPass("FoldLoadsWithUnbox"); AssertGraphCoherency(graph); + + if (mir->shouldCancel("FoldLoadsWithUnbox")) { + return false; + } } if (!mir->compilingWasm()) { @@ -1503,6 +1563,10 @@ bool OptimizeMIR(MIRGenerator* mir) { } gs.spewPass("Add KeepAlive Instructions"); AssertGraphCoherency(graph); + + if (mir->shouldCancel("Add KeepAlive Instructions")) { + return false; + } } AssertGraphCoherency(graph, /* force = */ true); diff --git a/js/src/jit/IonAnalysis.cpp b/js/src/jit/IonAnalysis.cpp index 27b7fa0a402..07bac84ff93 100644 --- a/js/src/jit/IonAnalysis.cpp +++ b/js/src/jit/IonAnalysis.cpp @@ -6,6 +6,8 @@ #include "jit/IonAnalysis.h" +#include "mozilla/HashFunctions.h" + #include #include // for ::std::pair @@ -1318,7 +1320,9 @@ bool jit::FoldTests(MIRGraph& graph) { return true; } -bool jit::FoldEmptyBlocks(MIRGraph& graph) { +bool jit::FoldEmptyBlocks(MIRGraph& graph, bool* changed) { + *changed = false; + for (MBasicBlockIterator iter(graph.begin()); iter != graph.end();) { MBasicBlock* block = *iter; iter++; @@ -1355,6 +1359,8 @@ bool jit::FoldEmptyBlocks(MIRGraph& graph) { return false; } succ->removePredecessor(block); + + *changed = true; } return true; } @@ -1813,6 +1819,10 @@ bool jit::EliminatePhis(const MIRGenerator* mir, MIRGraph& graph, // Sweep dead phis. for (PostorderIterator block = graph.poBegin(); block != graph.poEnd(); block++) { + if (mir->shouldCancel("Eliminate Phis (sweep dead phis)")) { + return false; + } + MPhiIterator iter = block->phisBegin(); while (iter != block->phisEnd()) { MPhi* phi = *iter++; @@ -2967,7 +2977,7 @@ bool jit::AccountForCFGChanges(const MIRGenerator* mir, MIRGraph& graph, } // Recompute dominator info. - if (!BuildDominatorTree(graph)) { + if (!BuildDominatorTree(mir, graph)) { return false; } @@ -5129,9 +5139,50 @@ bool jit::OptimizeIteratorIndices(const MIRGenerator* mir, MIRGraph& graph) { return true; } -void jit::DumpMIRDefinition(GenericPrinter& out, const MDefinition* def) { +// ===================================================================== +// +// Debug printing + +void jit::DumpHashedPointer(GenericPrinter& out, const void* p) { #ifdef JS_JITSPEW - out.printf("%u = %s.", def->id(), StringFromMIRType(def->type())); + if (!p) { + out.printf("NULL"); + return; + } + char tab[27] = "abcdefghijklmnopqrstuvwxyz"; + MOZ_ASSERT(tab[26] == '\0'); + mozilla::HashNumber hash = mozilla::AddToHash(mozilla::HashNumber(0), p); + hash %= (26 * 26 * 26 * 26 * 26); + char buf[6]; + for (int i = 0; i <= 4; i++) { + buf[i] = tab[hash % 26]; + hash /= 26; + } + buf[5] = '\0'; + out.printf("%s", buf); +#endif +} + +void jit::DumpMIRDefinitionID(GenericPrinter& out, const MDefinition* def, + bool showHashedPointers) { +#ifdef JS_JITSPEW + if (!def) { + out.printf("(null)"); + return; + } + if (showHashedPointers) { + DumpHashedPointer(out, def); + out.printf("."); + } + out.printf("%u", def->id()); +#endif +} + +void jit::DumpMIRDefinition(GenericPrinter& out, const MDefinition* def, + bool showHashedPointers) { +#ifdef JS_JITSPEW + DumpMIRDefinitionID(out, def, showHashedPointers); + out.printf(" = %s.", StringFromMIRType(def->type())); if (def->isConstant()) { def->printOpcode(out); } else { @@ -5148,13 +5199,76 @@ void jit::DumpMIRDefinition(GenericPrinter& out, const MDefinition* def) { } for (size_t i = 0; i < def->numOperands(); i++) { - out.printf(" %u", def->getOperand(i)->id()); + out.printf(" "); + DumpMIRDefinitionID(out, def->getOperand(i), showHashedPointers); + } +#endif +} + +void jit::DumpMIRBlockID(GenericPrinter& out, const MBasicBlock* block, + bool showHashedPointers) { +#ifdef JS_JITSPEW + if (!block) { + out.printf("Block(null)"); + return; + } + out.printf("Block"); + if (showHashedPointers) { + out.printf("."); + DumpHashedPointer(out, block); + out.printf("."); + } + out.printf("%u", block->id()); +#endif +} + +void jit::DumpMIRBlock(GenericPrinter& out, MBasicBlock* block, + bool showHashedPointers) { +#ifdef JS_JITSPEW + out.printf(" "); + DumpMIRBlockID(out, block, showHashedPointers); + out.printf(" -- preds=["); + for (uint32_t i = 0; i < block->numPredecessors(); i++) { + MBasicBlock* pred = block->getPredecessor(i); + out.printf("%s", i == 0 ? "" : ", "); + DumpMIRBlockID(out, pred, showHashedPointers); + } + out.printf("] -- LD=%u -- K=%s -- s-w-phis=", block->loopDepth(), + block->nameOfKind()); + if (block->successorWithPhis()) { + DumpMIRBlockID(out, block->successorWithPhis(), showHashedPointers); + out.printf(",#%u\n", block->positionInPhiSuccessor()); + } else { + out.printf("(null)\n"); + } + for (MPhiIterator iter(block->phisBegin()), end(block->phisEnd()); + iter != end; iter++) { + out.printf(" "); + jit::DumpMIRDefinition(out, *iter, showHashedPointers); + out.printf("\n"); + } + for (MInstructionIterator iter(block->begin()), end(block->end()); + iter != end; iter++) { + out.printf(" "); + DumpMIRDefinition(out, *iter, showHashedPointers); + out.printf("\n"); + } +#endif +} + +void jit::DumpMIRGraph(GenericPrinter& out, MIRGraph& graph, + bool showHashedPointers) { +#ifdef JS_JITSPEW + for (ReversePostorderIterator block(graph.rpoBegin()); + block != graph.rpoEnd(); block++) { + DumpMIRBlock(out, *block, showHashedPointers); } #endif } void jit::DumpMIRExpressions(GenericPrinter& out, MIRGraph& graph, - const CompileInfo& info, const char* phase) { + const CompileInfo& info, const char* phase, + bool showHashedPointers) { #ifdef JS_JITSPEW if (!JitSpewEnabled(JitSpew_MIRExpressions)) { return; @@ -5162,22 +5276,7 @@ void jit::DumpMIRExpressions(GenericPrinter& out, MIRGraph& graph, out.printf("===== %s =====\n", phase); - for (ReversePostorderIterator block(graph.rpoBegin()); - block != graph.rpoEnd(); block++) { - out.printf(" Block%u:\n", block->id()); - for (MPhiIterator iter(block->phisBegin()), end(block->phisEnd()); - iter != end; iter++) { - out.printf(" "); - jit::DumpMIRDefinition(out, *iter); - out.printf("\n"); - } - for (MInstructionIterator iter(block->begin()), end(block->end()); - iter != end; iter++) { - out.printf(" "); - DumpMIRDefinition(out, *iter); - out.printf("\n"); - } - } + DumpMIRGraph(out, graph, showHashedPointers); if (info.compilingWasm()) { out.printf("===== end wasm MIR dump =====\n"); diff --git a/js/src/jit/IonAnalysis.h b/js/src/jit/IonAnalysis.h index 5678841d5a4..93ab1c69dbc 100644 --- a/js/src/jit/IonAnalysis.h +++ b/js/src/jit/IonAnalysis.h @@ -37,7 +37,7 @@ class MTest; [[nodiscard]] bool FoldTests(MIRGraph& graph); -[[nodiscard]] bool FoldEmptyBlocks(MIRGraph& graph); +[[nodiscard]] bool FoldEmptyBlocks(MIRGraph& graph, bool* changed); [[nodiscard]] bool SplitCriticalEdges(MIRGraph& graph); @@ -188,10 +188,37 @@ bool IsDiscardable(const MDefinition* def); bool IsDiscardableAllowEffectful(const MDefinition* def); class CompileInfo; -void DumpMIRExpressions(GenericPrinter& out, MIRGraph& graph, - const CompileInfo& info, const char* phase); -void DumpMIRDefinition(GenericPrinter& out, const MDefinition* def); +// Debug printing. For avoidance of ambiguity resulting from use of integer +// IDs for MBasicBlocks and MDefinitions, these routines can optionally be +// asked to dump a base-26 hashed version of pointers too. Be aware these are +// not guaranteed to be unique, although collisions are very unlikely. + +// Dump `p`, hashed, to `out`. +void DumpHashedPointer(GenericPrinter& out, const void* p); + +// Dump the ID and possibly the pointer hash of `def`, to `out`. +void DumpMIRDefinitionID(GenericPrinter& out, const MDefinition* def, + bool showHashedPointers = false); +// Dump an MDefinition to `out`. +void DumpMIRDefinition(GenericPrinter& out, const MDefinition* def, + bool showHashedPointers = false); + +// Dump the ID and possibly the pointer hash of `block`, to `out`. +void DumpMIRBlockID(GenericPrinter& out, const MBasicBlock* block, + bool showHashedPointers = false); +// Dump an MBasicBlock to `out`. +void DumpMIRBlock(GenericPrinter& out, MBasicBlock* block, + bool showHashedPointers = false); + +// Dump an entire MIRGraph to `out`. +void DumpMIRGraph(GenericPrinter& out, MIRGraph& graph, + bool showHashedPointers = false); + +// Legacy entry point for DumpMIRGraph. +void DumpMIRExpressions(GenericPrinter& out, MIRGraph& graph, + const CompileInfo& info, const char* phase, + bool showHashedPointers = false); } // namespace jit } // namespace js diff --git a/js/src/jit/JitSpewer.cpp b/js/src/jit/JitSpewer.cpp index 100ebda1d95..d3c5130433b 100644 --- a/js/src/jit/JitSpewer.cpp +++ b/js/src/jit/JitSpewer.cpp @@ -374,6 +374,8 @@ static void PrintHelpAndExit(int status = 0) { "compiled functions only).\n" " profiling Profiling-related information\n" " dump-mir-expr Dump the MIR expressions\n" + " unroll Wasm loop unrolling and peeling -- summary info\n" + " unroll-details Wasm loop unrolling and peeling -- details\n" " warp-snapshots WarpSnapshots created by WarpOracle\n" " warp-transpiler Warp CacheIR transpiler\n" " warp-trial-inlining Trial inlining for Warp\n" @@ -483,6 +485,11 @@ void jit::CheckLogging() { EnableChannel(JitSpew_Profiling); } else if (IsFlag(found, "dump-mir-expr")) { EnableChannel(JitSpew_MIRExpressions); + } else if (IsFlag(found, "unroll")) { + EnableChannel(JitSpew_Unroll); + } else if (IsFlag(found, "unroll-details")) { + EnableChannel(JitSpew_Unroll); + EnableChannel(JitSpew_UnrollDetails); } else if (IsFlag(found, "warp-snapshots")) { EnableChannel(JitSpew_WarpSnapshots); } else if (IsFlag(found, "warp-transpiler")) { diff --git a/js/src/jit/JitSpewer.h b/js/src/jit/JitSpewer.h index 1cc7773e9b7..f503e478580 100644 --- a/js/src/jit/JitSpewer.h +++ b/js/src/jit/JitSpewer.h @@ -72,6 +72,10 @@ namespace jit { _(MarkLoadsUsedAsPropertyKeys) \ /* Output a list of MIR expressions */ \ _(MIRExpressions) \ + /* Summary info about loop unrolling */ \ + _(Unroll) \ + /* Detailed info about loop unrolling */ \ + _(UnrollDetails) \ /* Information about stub folding */ \ _(StubFolding) \ \ diff --git a/js/src/jit/Lowering.cpp b/js/src/jit/Lowering.cpp index f1c737c0c87..c661cfbd6da 100644 --- a/js/src/jit/Lowering.cpp +++ b/js/src/jit/Lowering.cpp @@ -8066,6 +8066,9 @@ bool LIRGenerator::visitBlock(MBasicBlock* block) { MOZ_ASSERT_IF(block->unreachable(), !mir()->optimizationInfo().gvnEnabled()); for (MInstructionIterator iter = block->begin(); *iter != block->lastIns(); iter++) { + if (gen->shouldCancel("Lowering (instruction loop)")) { + return false; + } if (!visitInstruction(*iter)) { return false; } diff --git a/js/src/jit/MIR-wasm.h b/js/src/jit/MIR-wasm.h index baf7b15d887..7b2a6b8ec0d 100644 --- a/js/src/jit/MIR-wasm.h +++ b/js/src/jit/MIR-wasm.h @@ -149,6 +149,8 @@ class MWasmFloatConstant : public MNullaryInstruction { extras->add(buf); } #endif + + ALLOW_CLONE(MWasmFloatConstant) }; // Converts a uint32 to a float32 (coming from wasm). @@ -171,6 +173,8 @@ class MWasmUnsignedToFloat32 : public MUnaryInstruction, AliasSet getAliasSet() const override { return AliasSet::None(); } bool canProduceFloat32() const override { return true; } + + ALLOW_CLONE(MWasmUnsignedToFloat32) }; class MWasmNewI31Ref : public MUnaryInstruction, public NoTypePolicy::Data { @@ -528,6 +532,8 @@ class MWasmInterruptCheck : public MUnaryInstruction, AliasSet getAliasSet() const override { return AliasSet::None(); } const wasm::TrapSiteDesc& trapSiteDesc() const { return trapSiteDesc_; } + + ALLOW_CLONE(MWasmInterruptCheck) }; // Directly jumps to the indicated trap, leaving Wasm code and reporting a @@ -565,6 +571,7 @@ class MWasmNeg : public MUnaryInstruction, public NoTypePolicy::Data { public: INSTRUCTION_HEADER(WasmNeg) TRIVIAL_NEW_WRAPPERS + ALLOW_CLONE(MWasmNeg) }; // Machine-level bitwise AND/OR/XOR, avoiding all JS-level complexity embodied @@ -772,6 +779,8 @@ class MWasmBoundsCheck : public MBinaryInstruction, public NoTypePolicy::Data { void setRedundant() { setNotGuard(); } const wasm::TrapSiteDesc& trapSiteDesc() const { return trapSiteDesc_; } + + ALLOW_CLONE(MWasmBoundsCheck) }; class MWasmAddOffset : public MUnaryInstruction, public NoTypePolicy::Data { @@ -829,6 +838,8 @@ class MWasmAlignmentCheck : public MUnaryInstruction, uint32_t byteSize() const { return byteSize_; } const wasm::TrapSiteDesc& trapSiteDesc() const { return trapSiteDesc_; } + + ALLOW_CLONE(MWasmAlignmentCheck) }; class MWasmLoad @@ -882,6 +893,23 @@ class MWasmLoad extras->add(buf); } #endif + + // Unfortunately we cannot use ALLOW_CLONE here, due to the variable number + // of operands. + bool canClone() const override { return true; } + MInstruction* clone(TempAllocator& alloc, + const MDefinitionVector& inputs) const override { + MInstruction* res = + MWasmLoad::New(alloc, hasMemoryBase() ? memoryBase() : nullptr, base(), + access(), type()); + if (!res) { + return nullptr; + } + for (size_t i = 0; i < numOperands(); i++) { + res->replaceOperand(i, inputs[i]); + } + return res; + } }; class MWasmStore : public MVariadicInstruction, public NoTypePolicy::Data { @@ -929,6 +957,21 @@ class MWasmStore : public MVariadicInstruction, public NoTypePolicy::Data { extras->add(buf); } #endif + + bool canClone() const override { return true; } + MInstruction* clone(TempAllocator& alloc, + const MDefinitionVector& inputs) const override { + MInstruction* res = + MWasmStore::New(alloc, hasMemoryBase() ? memoryBase() : nullptr, base(), + access(), value()); + if (!res) { + return nullptr; + } + for (size_t i = 0; i < numOperands(); i++) { + res->replaceOperand(i, inputs[i]); + } + return res; + } }; class MAsmJSMemoryAccess { @@ -1256,6 +1299,8 @@ class MWasmLoadInstanceDataField : public MUnaryInstruction, extras->add(buf); } #endif + + ALLOW_CLONE(MWasmLoadInstanceDataField) }; class MWasmLoadGlobalCell : public MUnaryInstruction, @@ -1282,6 +1327,8 @@ class MWasmLoadGlobalCell : public MUnaryInstruction, } AliasType mightAlias(const MDefinition* def) const override; + + ALLOW_CLONE(MWasmLoadGlobalCell) }; class MWasmLoadTableElement : public MBinaryInstruction, @@ -1339,6 +1386,8 @@ class MWasmStoreGlobalCell : public MBinaryInstruction, AliasSet getAliasSet() const override { return AliasSet::Store(AliasSet::WasmGlobalCell); } + + ALLOW_CLONE(MWasmStoreGlobalCell) }; class MWasmStoreStackResult : public MBinaryInstruction, @@ -1604,6 +1653,8 @@ class MWasmStackArg : public MUnaryInstruction, public NoTypePolicy::Data { uint32_t spOffset() const { return spOffset_; } void incrementOffset(uint32_t inc) { spOffset_ += inc; } + + ALLOW_CLONE(MWasmStackArg) }; template @@ -2503,6 +2554,8 @@ class MWasmLoadField : public MBinaryInstruction, public NoTypePolicy::Data { extras->add(buf); } #endif + + ALLOW_CLONE(MWasmLoadField) }; // Loads a value from base pointer, given an index and element size. This field @@ -2561,6 +2614,8 @@ class MWasmLoadElement : public MTernaryInstruction, public NoTypePolicy::Data { extras->add(buf); } #endif + + ALLOW_CLONE(MWasmLoadElement) }; // Stores a non-reference value to anlocation, denoted as a fixed offset from @@ -2629,6 +2684,8 @@ class MWasmStoreField : public MTernaryInstruction, public NoTypePolicy::Data { extras->add(buf); } #endif + + ALLOW_CLONE(MWasmStoreField) }; // Stores a reference value to a location, denoted as a fixed offset from a @@ -2701,6 +2758,8 @@ class MWasmStoreFieldRef : public MAryInstruction<4>, extras->add(buf); } #endif + + ALLOW_CLONE(MWasmStoreFieldRef) }; // Stores a non-reference value to a base pointer, given an index and element @@ -2764,6 +2823,8 @@ class MWasmStoreElement : public MQuaternaryInstruction, extras->add(buf); } #endif + + ALLOW_CLONE(MWasmStoreElement) }; // Stores a reference value to a base pointer, given an index and element size. @@ -2814,6 +2875,8 @@ class MWasmStoreElementRef : public MAryInstruction<5>, AliasSet getAliasSet() const override { return aliases_; } wasm::MaybeTrapSiteDesc maybeTrap() const { return maybeTrap_; } WasmPreBarrierKind preBarrierKind() const { return preBarrierKind_; } + + ALLOW_CLONE(MWasmStoreElementRef) }; class MWasmRefAsNonNull : public MUnaryInstruction, public NoTypePolicy::Data { @@ -2844,6 +2907,8 @@ class MWasmRefAsNonNull : public MUnaryInstruction, public NoTypePolicy::Data { } MDefinition* foldsTo(TempAllocator& alloc) override; + + ALLOW_CLONE(MWasmRefAsNonNull) }; // Tests if the wasm ref `ref` is a subtype of `destType` and returns the @@ -2880,6 +2945,8 @@ class MWasmRefTestAbstract : public MUnaryInstruction, } MDefinition* foldsTo(TempAllocator& alloc) override; + + ALLOW_CLONE(MWasmRefTestAbstract) }; // Tests if the wasm ref `ref` is a subtype of `superSTV` and returns the @@ -2920,6 +2987,8 @@ class MWasmRefTestConcrete : public MBinaryInstruction, } MDefinition* foldsTo(TempAllocator& alloc) override; + + ALLOW_CLONE(MWasmRefTestConcrete) }; // Tests if the wasm ref `ref` is a subtype of `destType` and if so returns the diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h index f6f059e46ba..9686667a452 100644 --- a/js/src/jit/MIR.h +++ b/js/src/jit/MIR.h @@ -1111,9 +1111,14 @@ class MInstruction : public MDefinition, public InlineListNode { bool canClone() const override { return true; } \ MInstruction* clone(TempAllocator& alloc, const MDefinitionVector& inputs) \ const override { \ + MOZ_ASSERT(numOperands() == inputs.length()); \ MInstruction* res = new (alloc) typename(*this); \ - for (size_t i = 0; i < numOperands(); i++) \ + if (!res) { \ + return nullptr; \ + } \ + for (size_t i = 0; i < numOperands(); i++) { \ res->replaceOperand(i, inputs[i]); \ + } \ return res; \ } @@ -1819,6 +1824,8 @@ class MGoto : public MAryControlInstruction<0, 1>, public NoTypePolicy::Data { static constexpr size_t TargetIndex = 0; MBasicBlock* target() const { return getSuccessor(TargetIndex); } + void setTarget(MBasicBlock* target) { setSuccessor(TargetIndex, target); } + AliasSet getAliasSet() const override { return AliasSet::None(); } #ifdef JS_JITSPEW @@ -1828,6 +1835,8 @@ class MGoto : public MAryControlInstruction<0, 1>, public NoTypePolicy::Data { extras->add(buf); } #endif + + ALLOW_CLONE(MGoto) }; // Tests if the input instruction evaluates to true or false, and jumps to the @@ -1859,6 +1868,11 @@ class MTest : public MAryControlInstruction<1, 2>, public TestPolicy::Data { MBasicBlock* ifTrue() const { return getSuccessor(TrueBranchIndex); } MBasicBlock* ifFalse() const { return getSuccessor(FalseBranchIndex); } + void setIfTrue(MBasicBlock* target) { setSuccessor(TrueBranchIndex, target); } + void setIfFalse(MBasicBlock* target) { + setSuccessor(FalseBranchIndex, target); + } + MBasicBlock* branchSuccessor(BranchDirection dir) const { return (dir == TRUE_BRANCH) ? ifTrue() : ifFalse(); } @@ -1884,6 +1898,19 @@ class MTest : public MAryControlInstruction<1, 2>, public TestPolicy::Data { extras->add(buf); } #endif + + bool canClone() const override { return true; } + MInstruction* clone(TempAllocator& alloc, + const MDefinitionVector& inputs) const override { + MInstruction* res = new (alloc) MTest(input(), ifTrue(), ifFalse()); + if (!res) { + return nullptr; + } + for (size_t i = 0; i < numOperands(); i++) { + res->replaceOperand(i, inputs[i]); + } + return res; + } }; // Returns from this function to the previous caller. @@ -3527,6 +3554,8 @@ class MWrapInt64ToInt32 : public MUnaryInstruction, public NoTypePolicy::Data { AliasSet getAliasSet() const override { return AliasSet::None(); } bool bottomHalf() const { return bottomHalf_; } + + ALLOW_CLONE(MWrapInt64ToInt32) }; class MExtendInt32ToInt64 : public MUnaryInstruction, @@ -3556,6 +3585,8 @@ class MExtendInt32ToInt64 : public MUnaryInstruction, return congruentIfOperandsEqual(ins); } AliasSet getAliasSet() const override { return AliasSet::None(); } + + ALLOW_CLONE(MExtendInt32ToInt64) }; // Converts an int32 value to intptr by sign-extending it. @@ -4698,6 +4729,8 @@ class MClz : public MUnaryInstruction, public BitwisePolicy::Data { MDefinition* foldsTo(TempAllocator& alloc) override; void computeRange(TempAllocator& alloc) override; void collectRangeInfoPreTrunc() override; + + ALLOW_CLONE(MClz) }; class MCtz : public MUnaryInstruction, public BitwisePolicy::Data { @@ -4727,6 +4760,8 @@ class MCtz : public MUnaryInstruction, public BitwisePolicy::Data { MDefinition* foldsTo(TempAllocator& alloc) override; void computeRange(TempAllocator& alloc) override; void collectRangeInfoPreTrunc() override; + + ALLOW_CLONE(MCtz) }; class MPopcnt : public MUnaryInstruction, public BitwisePolicy::Data { @@ -4751,6 +4786,8 @@ class MPopcnt : public MUnaryInstruction, public BitwisePolicy::Data { MDefinition* foldsTo(TempAllocator& alloc) override; void computeRange(TempAllocator& alloc) override; + + ALLOW_CLONE(MPopcnt) }; // Inline implementation of Math.sqrt(). @@ -6139,6 +6176,8 @@ class MPhi final : public MDefinition, using InputVector = js::Vector; InputVector inputs_; + // Important: if you add fields to this class, be sure to update its ::clone + // method accordingly. TruncateKind truncateKind_; bool triedToSpecialize_; bool isIterator_; @@ -6180,6 +6219,25 @@ class MPhi final : public MDefinition, return new (alloc) MPhi(alloc.alloc, resultType); } + MPhi* clone(TempAllocator& alloc, const MDefinitionVector& inputs) const { + MOZ_ASSERT(inputs.length() == inputs_.length()); + MPhi* phi = MPhi::New(alloc); + if (!phi || !phi->reserveLength(inputs.length())) { + return nullptr; + } + for (const auto& inp : inputs) { + phi->addInput(inp); + } + phi->truncateKind_ = truncateKind_; + phi->triedToSpecialize_ = triedToSpecialize_; + phi->isIterator_ = isIterator_; + phi->canProduceFloat32_ = canProduceFloat32_; + phi->canConsumeFloat32_ = canConsumeFloat32_; + phi->usageAnalysis_ = usageAnalysis_; + phi->setResultType(type()); + return phi; + } + void removeOperand(size_t index); void removeAllOperands(); @@ -6236,6 +6294,12 @@ class MPhi final : public MDefinition, inputs_.infallibleEmplaceBack(ins, this); } + // Append a new input to the input vector. May fail. + [[nodiscard]] bool addInputFallible(MDefinition* ins) { + MOZ_ASSERT_IF(type() != MIRType::Value, ins->type() == type()); + return inputs_.emplaceBack(ins, this); + } + // Appends a new input to the input vector. May perform reallocation. // Prefer reserveLength() and addInput() instead, where possible. [[nodiscard]] bool addInputSlow(MDefinition* ins) { @@ -6738,6 +6802,8 @@ class MNot : public MUnaryInstruction, public TestPolicy::Data { bool canRecoverOnBailout() const override { return type() == MIRType::Boolean; } + + ALLOW_CLONE(MNot) }; // Bailout if index + minimum < 0 or index + maximum >= length. The length used diff --git a/js/src/jit/MIRGraph.h b/js/src/jit/MIRGraph.h index d54226f3013..8fdffada3db 100644 --- a/js/src/jit/MIRGraph.h +++ b/js/src/jit/MIRGraph.h @@ -308,6 +308,12 @@ class MBasicBlock : public TempObject, public InlineListNode { // with multiple entries. void setLoopHeader(MBasicBlock* newBackedge); + // Marks this as a LOOP_HEADER block, but doesn't change anything else. + void setLoopHeader() { + MOZ_ASSERT(!isLoopHeader()); + kind_ = LOOP_HEADER; + } + // Propagates backedge slots into phis operands of the loop header. [[nodiscard]] bool inheritPhisFromBackedge(MBasicBlock* backedge); @@ -395,6 +401,13 @@ class MBasicBlock : public TempObject, public InlineListNode { void setDomIndex(uint32_t d) { domIndex_ = d; } MBasicBlock* getPredecessor(uint32_t i) const { return predecessors_[i]; } + void setPredecessor(uint32_t i, MBasicBlock* p) { predecessors_[i] = p; } + [[nodiscard]] + bool appendPredecessor(MBasicBlock* p) { + return predecessors_.append(p); + } + void erasePredecessor(uint32_t i) { predecessors_.erase(&predecessors_[i]); } + size_t indexForPredecessor(MBasicBlock* block) const { // This should only be called before critical edge splitting. MOZ_ASSERT(!block->successorWithPhis()); @@ -609,6 +622,29 @@ class MBasicBlock : public TempObject, public InlineListNode { // bails out. MResumePoint* activeResumePoint(MInstruction* ins); +#ifdef JS_JITSPEW + const char* nameOfKind() const { + switch (kind_) { + case MBasicBlock::Kind::NORMAL: + return "NORMAL"; + case MBasicBlock::Kind::PENDING_LOOP_HEADER: + return "PENDING_LOOP_HEADER"; + case MBasicBlock::Kind::LOOP_HEADER: + return "LOOP_HEADER"; + case MBasicBlock::Kind::SPLIT_EDGE: + return "SPLIT_EDGE"; + case MBasicBlock::Kind::FAKE_LOOP_PRED: + return "FAKE_LOOP_PRED"; + case MBasicBlock::Kind::INTERNAL: + return "INTERNAL"; + case MBasicBlock::Kind::DEAD: + return "DEAD"; + default: + return "MBasicBlock::Kind::???"; + } + } +#endif + private: MIRGraph& graph_; const CompileInfo& info_; // Each block originates from a particular script. diff --git a/js/src/jit/MIROps.yaml b/js/src/jit/MIROps.yaml index f5cb57eac0a..a4bbebda575 100644 --- a/js/src/jit/MIROps.yaml +++ b/js/src/jit/MIROps.yaml @@ -683,6 +683,7 @@ folds_to: custom congruent_to: if_operands_equal alias_set: none + clone: true - name: WasmUnsignedToFloat32 gen_boilerplate: false diff --git a/js/src/jit/RangeAnalysis.cpp b/js/src/jit/RangeAnalysis.cpp index 9438bbe4ea4..3ea0a48d234 100644 --- a/js/src/jit/RangeAnalysis.cpp +++ b/js/src/jit/RangeAnalysis.cpp @@ -180,6 +180,10 @@ bool RangeAnalysis::addBetaNodes() { JitSpew(JitSpew_Range, "Adding beta nodes"); for (PostorderIterator i(graph_.poBegin()); i != graph_.poEnd(); i++) { + if (mir->shouldCancel("RangeAnalysis addBetaNodes")) { + return false; + } + MBasicBlock* block = *i; JitSpew(JitSpew_Range, "Looking at block %u", block->id()); @@ -2010,6 +2014,10 @@ bool RangeAnalysis::analyzeLoop(const MBasicBlock* header) { for (ReversePostorderIterator iter(graph_.rpoBegin(header)); iter != graph_.rpoEnd(); iter++) { + if (mir->shouldCancel("RangeAnalysis analyzeLoop")) { + return false; + } + MBasicBlock* block = *iter; if (!block->isMarked()) { continue; @@ -2411,6 +2419,10 @@ bool RangeAnalysis::analyze() { for (ReversePostorderIterator iter(graph_.rpoBegin()); iter != graph_.rpoEnd(); iter++) { + if (mir->shouldCancel("RangeAnalysis analyze")) { + return false; + } + MBasicBlock* block = *iter; // No blocks are supposed to be unreachable, except when we have an OSR // block, in which case the Value Numbering phase add fixup blocks which @@ -3200,6 +3212,10 @@ bool RangeAnalysis::truncate() { for (PostorderIterator block(graph_.poBegin()); block != graph_.poEnd(); block++) { + if (mir->shouldCancel("RangeAnalysis truncate")) { + return false; + } + for (MInstructionReverseIterator iter(block->rbegin()); iter != block->rend(); iter++) { if (iter->isRecoveredOnBailout()) { @@ -3645,6 +3661,10 @@ bool RangeAnalysis::tryRemovingGuards() { for (ReversePostorderIterator block = graph_.rpoBegin(); block != graph_.rpoEnd(); block++) { + if (mir->shouldCancel("RangeAnalysis tryRemovingGuards (block loop)")) { + return false; + } + for (MDefinitionIterator iter(*block); iter; iter++) { if (!iter->isGuardRangeBailouts()) { continue; @@ -3662,6 +3682,10 @@ bool RangeAnalysis::tryRemovingGuards() { // bailout-paths which are used to shrink the input range of the // operands of the condition. for (size_t i = 0; i < guards.length(); i++) { + if (mir->shouldCancel("RangeAnalysis tryRemovingGuards (guards loop)")) { + return false; + } + MDefinition* guard = guards[i]; // If this ins is a guard even without guardRangeBailouts, diff --git a/js/src/jit/UnrollLoops.cpp b/js/src/jit/UnrollLoops.cpp new file mode 100644 index 00000000000..8d262dba652 --- /dev/null +++ b/js/src/jit/UnrollLoops.cpp @@ -0,0 +1,2079 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "jit/UnrollLoops.h" + +#include "mozilla/Maybe.h" + +#include + +#include "jit/DominatorTree.h" +#include "jit/IonAnalysis.h" +#include "jit/MIRGraph.h" + +namespace js { +namespace jit { + +// [SMDOC] Loop unroller implementation summary +// +// This is a simple loop unroller, intended (initially at least) to handle only +// wasm loops, with the aims of amortizing the per-iteration interrupt check +// cost, and of lifting an initial iteration outside the loop so as to +// facilitate subsequent optimizations. Unrolling and peeling can be selected +// independently, so the available choices are: peeling only, unrolling only, +// or both peeling and unrolling. +// +// The flow of control (for a single function) is roughly: +// +// (0) The top level function is UnrollLoops. +// +// (1) UnrollLoops calls FindInitialCandidates to identify "initial candidate" +// loops in the function. These are innermost loops. Non-innermost loops +// cannot be unrolled/peeled. +// +// (2) FindInitialCandidates counts blocks and value defs in each initial +// candidate, creating an initial score which increases with loop size. +// +// (3) Back in UnrollLoops, initial candidates whose initial score does not +// exceed InitialCandidateThreshold proceed to the next stage in the +// process: they are passed to function AnalyzeLoop. +// +// (4) AnalyzeLoop, as called from UnrollLoops, checks many structural +// invariants on each loop, since the core unroll machinery depends on +// those invariants. It also makes a final determination for each loop, as +// to whether the loop should be peeled, unrolled, peeled and unrolled, or +// be left unchanged. In the latter case it returns one of a few reasons +// why the loop is to be left unchanged. +// +// (5) AnalyzeLoop also identifies, for a loop, its basic blocks, the set of +// blocks it jumps to when exiting, and the values defined in the loop +// which are used afterwards. +// +// (6) Back in UnrollLoops, we now know which loops are suitable for +// processing, what processing is to happen to them, and what their blocks +// are. This is used to construct and initialize a `struct UnrollState` +// for each loop candidate that made it this far. +// +// (7) Before a loop can be unrolled, single-argument phi nodes need to be +// added to its exit target blocks, to "catch" values defined in the loop +// that are used afterwards. This is a limited conversion into what is +// called "Loop-Closed SSA form" in the GCC/Clang literature. UnrollLoops +// calls AddClosingPhisForLoop to get this done. This is done for all +// loops before proceeding further. +// +// (8) Finally, we get to the core of the unrolling: the loops are handed to +// UnrollAndOrPeelLoop in turn. This has extensive comments; a summary +// of the actions is: +// - blocks, phis and normal instructions are cloned so as to create +// the extra loop body copies. +// - the new blocks are added to the loop's UnrollState::blockTable. +// - during cloning, value uses are remapped to the correct iteration +// using an MDefinitionRemapper. +// - also during cloning, the new values are parked in a ValueTable for +// later reference. +// - control flow edges and predecessor vectors in the new and original +// block sets are fixed up, using RemapEdgeSource and +// RemapEdgeDestination. +// - header block phi nodes are fixed up in both the body copies +// and the original. +// - new exiting blocks are created, so as to maintain the invariant +// that there are no critical edges. +// - for exit target blocks, both their predecessor arrays and phi nodes +// (as installed by AddClosingPhisForLoop) are augmented to handle +// the new exit edges. +// - Wasm interrupt checks in all but the last body copy are nop'd out. +// - If peeling is required, the back edge of the unrolled loop is changed +// so it points at the second body copy, not the first (the original). +// - Finally, the new blocks are installed in the MIRGraph. +// +// (9) Back in UnrollLoops, once all loops have been processed, +// some function-level fixups are done: +// - the blocks are renumbered +// - the dominator tree is rebuilt +// +// UnrollLoops now returns to OptimizeMIR, handing back an indication of how +// many loops were processed. OptimizeMIR will tidy up the resulting function +// by re-running GVN, empty block removal, and possibly other transformations. + +// The core logic in UnrollAndOrPeelLoop is heavily commented but still +// nearly incomprehensible. For debugging and modification it is helpful to +// use the Dump{Block,Value}Table* routines provided. + +// The logic below functions without reference to block IDs or value IDs. + +// Much of the logic uses simple scans over vectors (classes BlockVector, +// Matrix, SimpleSet, MDefinitionRemapper) rather than more complex data +// structures. The loops we process are small, which keeps the costs of these +// scans low. The InitialCandidateThreshold value used limits most processed +// loops to about 6 blocks and 30-ish value definitions. + +// The idiom `blockTable.rowContains(0, block)` in the logic below means +// "is `block` in the original loop?" + +// ===================================================================== +// +// Tunables + +// As a crude first pass for filtering out unsuitable candidates, top level +// function UnrollLoops calculates a size-related value for each candidate, +// with lower values indicating more desirability for unrolling/peeling. +// Candidates with a score above this value will not be unrolled. Reducing the +// value therefore reduces the aggressiveness of the unroller. +const float InitialCandidateThreshold = 100.0; + +// On further analysis of candidates that pass the above test, we have more +// detailed limitations on size. The specified action will not be taken for a +// loop if the associated metric exceeds the constants here. Hence increasing +// these values increases the aggressiveness of the unroller, but only to point +// where the `InitialCandidateThreshold` would have cut it off. + +// Loops with more than this number of basic blocks or values (phis and normal +// definitions) will be excluded from peeling. The actual numbers are pretty +// much pulled out of a hat. +const size_t MaxBlocksForPeel = 12; +const size_t MaxValuesForPeel = 150; + +// Loops with more than this number of blocks or values will be excluded from +// unrolling. Unrolling adds multiple copies of the loop body, whereas peeling +// adds only one, so it seems prudent to make unrolling less aggressive than +// peeling. +const size_t MaxBlocksForUnroll = 10; +const size_t MaxValuesForUnroll = 100; + +// ===================================================================== +// +// BlockVector, a vector of MBasicBlock*s. + +using BlockVector = mozilla::Vector; + +static bool BlockVectorContains(const BlockVector& vec, + const MBasicBlock* block) { + for (const MBasicBlock* b : vec) { + if (b == block) { + return true; + } + } + return false; +} + +// ===================================================================== +// +// Matrix, a 2-D array of pointers + +template +class Matrix { + static_assert(std::is_pointer::value); + mozilla::Vector vec_; + size_t size1_ = 0; + size_t size2_ = 0; + inline size_t index(size_t ix1, size_t ix2) const { + MOZ_ASSERT(ix1 < size1_ && ix2 < size2_); + return ix1 * size2_ + ix2; + } + + public: + [[nodiscard]] bool init(size_t size1, size_t size2) { + // Not already init'd. + MOZ_ASSERT(size1_ == 0 && size2_ == 0 && vec_.empty()); + // This would be pointless. + MOZ_ASSERT(size1 > 0 && size2 > 0); + // So we can safely multiply them. InitialCandidateThreshold ensures we'll + // never have to process a loop anywhere near this big. + MOZ_RELEASE_ASSERT(size1 <= 1000 && size2 <= 1000); + size1_ = size1; + size2_ = size2; + if (!vec_.resize(size1 * size2)) { + return false; + } + // Resizing also zero-initialises all the `vec_` entries. + return true; + } + + inline size_t size1() const { + MOZ_ASSERT(size1_ * size2_ == vec_.length()); + return size1_; + } + inline size_t size2() const { + MOZ_ASSERT(size1_ * size2_ == vec_.length()); + return size2_; + } + inline T get(size_t ix1, size_t ix2) const { return vec_[index(ix1, ix2)]; } + inline void set(size_t ix1, size_t ix2, T value) { + vec_[index(ix1, ix2)] = value; + } + + // Does the matrix slice `[ix1, ..]` contain `value`? + inline bool rowContains(size_t ix1, const T value) const { + return findInRow(ix1, value).isSome(); + } + + // Find the column number (ix2) such that entry `[ix1, ix2] == value`. + mozilla::Maybe findInRow(size_t ix1, const T value) const { + for (size_t ix2 = 0; ix2 < size2_; ix2++) { + if (get(ix1, ix2) == value) { + return mozilla::Some(ix2); + } + } + return mozilla::Nothing(); + } +}; + +using BlockTable = Matrix; +using ValueTable = Matrix; + +// ===================================================================== +// +// Debug printing + +#ifdef JS_JITSPEW + +// For debugging, dump specific rows (loop body copies) of a block table. +static void DumpBlockTableRows(const BlockTable& table, int32_t firstCix, + int32_t lastCix, const char* tag) { + Fprinter& printer(JitSpewPrinter()); + printer.printf("<<<< %s\n", tag); + for (int32_t cix = firstCix; cix <= lastCix; cix++) { + if (cix == 0) { + printer.printf(" -------- Original --------\n"); + } else { + printer.printf(" -------- Copy %u --------\n", cix); + } + for (uint32_t bix = 0; bix < table.size2(); bix++) { + DumpMIRBlock(printer, table.get(uint32_t(cix), bix), + /*showHashedPointers=*/true); + } + } + printer.printf(">>>>\n"); +} + +// Dump an entire block table. +static void DumpBlockTable(const BlockTable& table, const char* tag) { + DumpBlockTableRows(table, 0, int32_t(table.size1()) - 1, tag); +} + +// Dump just the original loop body in a block table. +static void DumpBlockTableRowZero(const BlockTable& table, const char* tag) { + DumpBlockTableRows(table, 0, 0, tag); +} + +// Dump a value table. +static void DumpValueTable(const ValueTable& table, const char* tag) { + Fprinter& printer(JitSpewPrinter()); + printer.printf("<<<< %s\n", tag); + for (uint32_t cix = 0; cix < table.size1(); cix++) { + if (cix == 0) { + printer.printf(" -------- Original --------\n"); + } else { + printer.printf(" -------- Copy %u --------\n", cix); + } + for (uint32_t vix = 0; vix < table.size2(); vix++) { + printer.printf(" "); + DumpMIRDefinition(printer, table.get(cix, vix), + /*showHashedPointers=*/true); + printer.printf("\n"); + } + } + printer.printf(">>>>\n"); +} + +#endif // JS_JITSPEW + +// ===================================================================== +// +// SimpleSet, a set of pointers + +template +class SimpleSet { + static_assert(std::is_pointer::value); + mozilla::Vector vec_; + + public: + [[nodiscard]] bool copy(const SimpleSet& other) { + vec_.clear(); + for (T elem : other.vec_) { + if (!vec_.append(elem)) { + return false; + } + } + return true; + } + bool contains(T t) const { + for (auto* existing : vec_) { + if (existing == t) { + return true; + } + } + return false; + } + [[nodiscard]] bool add(T t) { + MOZ_ASSERT(t); + return contains(t) ? true : vec_.append(t); + } + bool empty() const { return vec_.empty(); } + size_t size() const { return vec_.length(); } + T get(size_t ix) const { return vec_[ix]; } +}; + +using BlockSet = SimpleSet; +using ValueSet = SimpleSet; + +// ===================================================================== +// +// MDefinitionRemapper, a very simple MDefinition*-remapping class. + +class MDefinitionRemapper { + using Pair = std::pair; + mozilla::Vector pairs; + + public: + MDefinitionRemapper() {} + // Register `original` as a key in the mapper, and map it to itself. + [[nodiscard]] bool enregister(MDefinition* original) { + MOZ_ASSERT(original); + for (auto& p : pairs) { + (void)p; + MOZ_ASSERT(p.first != original); // not mapped at all + MOZ_ASSERT(p.second == p.first); // no `update` calls happened yet + } + return pairs.append(std::pair(original, original)); + } + // Look up the binding for `original` in the mapper. + MDefinition* lookup(const MDefinition* original) const { + MOZ_ASSERT(original); + MDefinition* res = nullptr; + for (auto& p : pairs) { + if (p.first == original) { + res = p.second; + break; + } + } + return res; + } + // Update the mapper so as to map `original` to `replacement`. `original` + // must have previously been registered with ::enregister. + void update(const MDefinition* original, MDefinition* replacement) { + MOZ_ASSERT(original && replacement); + MOZ_ASSERT(original != replacement); + for (auto& p : pairs) { + if (p.first == original) { + p.second = replacement; + return; + } + } + MOZ_CRASH(); // asked to update a non-existent key + } +}; + +// ===================================================================== +// +// MakeReplacementInstruction / MakeReplacementPhi + +// Make a cloned version of `ins`, but with its arguments remapped by `mapper`. +static MInstruction* MakeReplacementInstruction( + TempAllocator& alloc, const MDefinitionRemapper& mapper, + const MInstruction* ins) { + MDefinitionVector inputs(alloc); + for (size_t i = 0; i < ins->numOperands(); i++) { + MDefinition* old = ins->getOperand(i); + MDefinition* replacement = mapper.lookup(old); + if (!replacement) { + // The mapper didn't map it, which means that `old` is a value that's not + // defined in the loop body. So leave it unchanged. + replacement = old; + } + if (!inputs.append(replacement)) { + return nullptr; + } + } + return ins->clone(alloc, inputs); +} + +// Make a cloned version of `phi`, but with its arguments remapped by `mapper`. +static MPhi* MakeReplacementPhi(TempAllocator& alloc, + const MDefinitionRemapper& mapper, + const MPhi* phi) { + MDefinitionVector inputs(alloc); + for (size_t i = 0; i < phi->numOperands(); i++) { + MDefinition* old = phi->getOperand(i); + MDefinition* replacement = mapper.lookup(old); + if (!replacement) { + replacement = old; + } + if (!inputs.append(replacement)) { + return nullptr; + } + } + return phi->clone(alloc, inputs); +} + +// ===================================================================== +// +// UnrollState + +enum class UnrollMode { Peel, Unroll, PeelAndUnroll }; + +struct UnrollState { + // What should happen to the specified loop. + const UnrollMode mode; + + // The central data structure: BlockTable, a 2-D array of block pointers. + // + // To create copies of the original loop body, we need to copy the original + // blocks and fix up the inter-block edges and phis appropriately. This + // edge-fixup is done without reference to the block IDs; instead it is done + // purely on the basis of the MBasicBlock* values themselves. Hence it does + // not make any assumption about the ordering of the block ID values. + // + // The block copies are managed using a 2-D array of block pointers, via + // which we can uniformly access the original and new blocks. The array is + // indexed by `(copy index, block index in copy)`. Both indices are + // zero-based. The sequencing of blocks implied by "block index in copy" is + // the sequence produced by the RPO iterator as it enumerates the blocks in + // the loop. + // + // Per the above, note that "block index" (`bix` in the code) is a zero-based + // index into the RPO sequence of blocks in the loop and is not to be + // confused with the pre-existing concept of "block ID". + // + // Note also that the required unroll factor (including that for the peeled + // copy, if any) is equal to the first dimension of `blockTable`, and the + // number of blocks in the original loop is implied by the second dimension + // of `blockTable`. Hence neither value needs to be stored explicitly. + BlockTable blockTable; + + // The set of blocks arrived at (directly) by exiting branches in the + // original loop. FIXME: try to make const + /*const*/ BlockSet exitTargetBlocks; + + // The set of values (MDefinition*s) defined in the original loop and used + // afterwards. + /*const*/ ValueSet exitingValues; + + explicit UnrollState(UnrollMode mode) : mode(mode) {} + + bool doPeeling() const { + return mode == UnrollMode::Peel || mode == UnrollMode::PeelAndUnroll; + } + bool doUnrolling() const { + return mode == UnrollMode::Unroll || mode == UnrollMode::PeelAndUnroll; + } +}; + +// ===================================================================== +// +// AnalyzeLoop and AnalysisResult + +// Summarises the result of a detailed analysis of a candidate loop, producing +// either a recommendation about what to do with it, or a reason why it should +// be left unchanged. +enum class AnalysisResult { + // OOM during analysis + OOM, + + // The chosen transformation for the loop .. + Peel, + Unroll, + PeelAndUnroll, + + // .. or .. reasons why the loop can't be unrolled: + // + // The unrolling/peeling machinery below relies on the fact that MIR loops + // are heavily constrained in their structure. AnalyzeLoop checks the + // relevant invariants carefully, with this value indicating non-compliance. + // Top level function UnrollLoops will MOZ_CRASH if this happens. + BadInvariants, + // Cannot be handled by the unroller: if the loop defines value(s) that are + // used after the loop, then we can only handle the case where it has one + // exiting branch. + TooComplex, + // The loop contains MIR nodes that are uncloneable + Uncloneable, + // The loop has too many blocks or values + TooLarge, + // The loop is otherwise unsuitable: + // * contains a call or table switch + // * is an infinite loop + Unsuitable +}; + +#ifdef JS_JITSPEW +static const char* Name_of_AnalysisResult(AnalysisResult res) { + switch (res) { + case AnalysisResult::OOM: + return "OOM"; + case AnalysisResult::Peel: + return "Peel"; + case AnalysisResult::Unroll: + return "Unroll"; + case AnalysisResult::PeelAndUnroll: + return "PeelAndUnroll"; + case AnalysisResult::BadInvariants: + return "BadInvariants"; + case AnalysisResult::TooComplex: + return "TooComplex"; + case AnalysisResult::Uncloneable: + return "Uncloneable"; + case AnalysisResult::TooLarge: + return "TooLarge"; + case AnalysisResult::Unsuitable: + return "Unsuitable"; + default: + MOZ_CRASH(); + } +} +#endif + +// Examine the original loop in `originalBlocks` for unrolling suitability, +// and, if acceptable, collect auxiliary information: +// +// * the set of blocks that are direct exit targets for the loop +// * the set of values defined in the loop AND used afterwards + +static AnalysisResult AnalyzeLoop(const BlockVector& originalBlocks, + BlockSet* exitTargetBlocks, + ValueSet* exitingValues) { + MOZ_ASSERT(exitTargetBlocks->empty()); + MOZ_ASSERT(exitingValues->empty()); + + // ==== BEGIN check invariants on the loop structure ==== + + // The unroller/peeler below depends on these invariants. + // In summary (where nBlocks == originalBlocks.length()): + // + // * At least 2 blocks in original loop (1 for header phis + possible insns, + // >= 0 for "ordinary" blocks, 1 for the backedge jump) + // + // * originalBlocks[0] is a loop header + // * originalBlocks[nBlocks-1] == originalBlocks[0]->backedge + // + // * all blocks in original loop have at least one insn + // * all blocks in original loop have a control insn as their last insn + // * all blocks in original loop have non-control insns for all other insns + // * all blocks in original loop have loop depth > 0 + // + // * none of originalBlocks[0 .. nBlocks-2] (inclusive) jumps to header + // + // * originalBlocks[nBlocks-1] jumps unconditionally to header + // + // * original header node has 2 preds + // * original header node pred[0] is from outside the loop, and + // pred[1] is from inside the loop. + // + // * original header node phis all have 2 args + // * original header node phis have arg[0] from outside the loop + // (because pred[0] is the loop-entry edge) + // * original header node phis have their arg[1] as + // -- (almost always) defined in the loop -- loop carried variable + // -- (very occasionally) defined outside the loop -- in which case + // this is just a vanilla phi, nothing to do with the loop. + // Hence there is nothing to check for phi arg[1]s, but leaving this + // here for clarity. + // + // Aside: how can a loop head phi not depend on a value defined within the + // loop? Consider the strange-but-valid case + // + // x = 5 ; loop { .. x = 7; .. } + // + // The loop head phi will merge the initial value (5) and the loop-defined + // value in the usual way. Imagine now the loop is LICMd; the loop defined + // value `x = 7;` is observed to be invariant and so is lifted out of the + // loop. Hence the loop head phi will have both args defined outside the + // loop. + + // * At least 2 blocks in original loop (1 for header phis + possible insns, + // >= 0 for "ordinary" blocks, 1 for the backedge jump) + const size_t numBlocksInOriginal = originalBlocks.length(); + if (numBlocksInOriginal < 2) { + return AnalysisResult::BadInvariants; + } + + // * originalBlocks[0] is a loop header + // * originalBlocks[nBlocks-1] == originalBlocks[0]->backedge + { + MBasicBlock* header = originalBlocks[0]; + if (!header->isLoopHeader() || + header->backedge() != originalBlocks[numBlocksInOriginal - 1]) { + return AnalysisResult::BadInvariants; + } + } + + // * all blocks in original loop have at least one insn + // * all blocks in original loop have a control insn as their last insn + // * all blocks in original loop have non-control insns for all other insns + // * all blocks in original loop have loop depth > 0 + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = originalBlocks[bix]; + // This is a bit lame, but .. + size_t numInsns = 0; + for (MInstructionIterator insnIter(block->begin()); + insnIter != block->end(); insnIter++) { + numInsns++; + } + if (numInsns < 1) { + return AnalysisResult::BadInvariants; + } + bool ok = true; + size_t curInsn = 0; + for (MInstructionIterator insnIter(block->begin()); + insnIter != block->end(); insnIter++) { + MInstruction* insn = *insnIter; + if (curInsn == numInsns - 1) { + ok = ok && insn->isControlInstruction(); + } else { + ok = ok && !insn->isControlInstruction(); + } + curInsn++; + } + MOZ_ASSERT(curInsn == numInsns); // internal logic + ok = ok && block->loopDepth() > 0; + if (!ok) { + return AnalysisResult::BadInvariants; + } + } + + // * none of originalBlocks[0 .. nBlocks-2] (inclusive) jumps to header + { + MBasicBlock* header = originalBlocks[0]; + for (uint32_t bix = 0; bix < numBlocksInOriginal - 1; bix++) { + MBasicBlock* block = originalBlocks[bix]; + if (!block->hasLastIns()) { + return AnalysisResult::BadInvariants; + } + MControlInstruction* lastIns = block->lastIns(); + for (size_t i = 0; i < lastIns->numSuccessors(); i++) { + if (lastIns->getSuccessor(i) == header) { + return AnalysisResult::BadInvariants; + } + } + } + } + + // originalBlocks[nBlocks-1] jumps unconditionally to header + { + MBasicBlock* header = originalBlocks[0]; + MBasicBlock* backedge = originalBlocks[numBlocksInOriginal - 1]; + if (!backedge->hasLastIns()) { + return AnalysisResult::BadInvariants; + } + MControlInstruction* lastIns = backedge->lastIns(); + if (!lastIns->isGoto() || lastIns->toGoto()->target() != header) { + return AnalysisResult::BadInvariants; + } + } + + // * original header node has 2 preds + // * original header node pred[0] is from outside the loop. + // pred[1] is from inside the loop. + { + MBasicBlock* header = originalBlocks[0]; + if (header->numPredecessors() != 2 || + BlockVectorContains(originalBlocks, header->getPredecessor(0)) || + !BlockVectorContains(originalBlocks, header->getPredecessor(1))) { + return AnalysisResult::BadInvariants; + } + } + + // * original header node phis all have 2 args + // * original header node phis have arg[0] from outside the loop + // (because pred[0] is the loop-entry edge) + // * original header node phis have their arg[1] as + // -- (almost always) defined in the loop -- loop carried variable + // -- (very occasionally) defined outside the loop -- in which case + // this is just a vanilla phi, nothing to do with the loop. + // Hence there is nothing to check for phi arg[1]s, but leaving this + // here for clarity. + { + MBasicBlock* header = originalBlocks[0]; + for (MPhiIterator phiIter(header->phisBegin()); + phiIter != header->phisEnd(); phiIter++) { + MPhi* phi = *phiIter; + if (phi->numOperands() != 2 || + BlockVectorContains(originalBlocks, phi->getOperand(0)->block())) { + return AnalysisResult::BadInvariants; + } + } + } + + // ==== END check invariants on the loop structure ==== + + // Check that all the insns are cloneable. + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = originalBlocks[bix]; + for (MInstructionIterator insIter(block->begin()); insIter != block->end(); + insIter++) { + MInstruction* ins = *insIter; + if (ins->isWasmCallCatchable() || ins->isWasmCallUncatchable() || + ins->isWasmReturnCall() || ins->isTableSwitch() + /* TODO: other node kinds unsuitable for unrolling? */) { + return AnalysisResult::Unsuitable; + } + if (!ins->canClone()) { + // `ins->opName()` will show the name of the insn kind, if you want to + // see it + return AnalysisResult::Uncloneable; + } + } + } + + // More analysis: make up a set of blocks that are not in the loop, but which + // are jumped to from within the loop. We will need this later. + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = originalBlocks[bix]; + MControlInstruction* lastIns = block->lastIns(); // asserted safe above + for (size_t i = 0; i < lastIns->numSuccessors(); i++) { + MBasicBlock* succ = lastIns->getSuccessor(i); + // See if `succ` is any of the blocks in the (original) loop. If not, + // add it to `exitTargetBlocks`. + if (!BlockVectorContains(originalBlocks, succ)) { + if (!exitTargetBlocks->add(succ)) { + return AnalysisResult::OOM; + } + } + } + } + + // If the loop has zero exits, we consider it sufficiently mutant to ignore + // (it's an infinite loop?) + if (exitTargetBlocks->empty()) { + return AnalysisResult::Unsuitable; + } + + // Even more analysis: make up a set of MDefinition*s that are defined in the + // original loop and which are used after the loop. We will later need to + // add phi nodes that generate the correct values for these, since, after + // unrolling, these values will have multiple definition points (one per + // unrolled iteration). While we're at it, count the number of values + // defined in the original loop. + size_t numValuesInOriginal = 0; + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = originalBlocks[bix]; + // Check all phi nodes .. + for (MPhiIterator phiIter(block->phisBegin()); phiIter != block->phisEnd(); + phiIter++) { + numValuesInOriginal++; + MPhi* phi = *phiIter; + bool usedAfterLoop = false; + // Is the value of `phi` used after the loop? + for (MUseIterator useIter(phi->usesBegin()); useIter != phi->usesEnd(); + useIter++) { + MUse* use = *useIter; + if (!BlockVectorContains(originalBlocks, use->consumer()->block())) { + usedAfterLoop = true; + break; + } + } + if (usedAfterLoop && !exitingValues->add(phi)) { + return AnalysisResult::OOM; + } + } + // .. and all normal nodes .. + for (MInstructionIterator insnIter(block->begin()); + insnIter != block->end(); insnIter++) { + numValuesInOriginal++; + MInstruction* insn = *insnIter; + bool usedAfterLoop = false; + // Is the value of `insn` used after the loop? + for (MUseIterator useIter(insn->usesBegin()); useIter != insn->usesEnd(); + useIter++) { + MUse* use = *useIter; + if (!BlockVectorContains(originalBlocks, use->consumer()->block())) { + usedAfterLoop = true; + break; + } + } + if (usedAfterLoop && !exitingValues->add(insn)) { + return AnalysisResult::OOM; + } + } + } + + // Due to limitations in AddClosingPhisForLoop (see comments there), + // currently we can only unroll loops where, either: + // + // * no value defined in the loop is used afterwards, in which case we handle + // any number of exits from the loop. + // + // * one or more values defined in the loop is used afterwards, in which case + // there must be one exit point from the loop. + // + // IOW we can't handle multiple exits *and* values defined in the loop. + if (exitTargetBlocks->size() >= 2 && exitingValues->size() > 0) { + return AnalysisResult::TooComplex; + } + + // There is an invariant that a loop exit target block does not contain any + // phis. This is really just the no-critical-edges invariant. + // + // By definition, a loop exit block has at least one successor in the loop + // and at least one successor outside the loop. If the loop exit target has + // phis, that would imply it has multiple predecessors. But then the edge + // would be critical, because it connects a block with multiple successors to + // a block with multiple predecessors. + // + // So enforce that; it simplifies the addition of loop-closing phis that will + // happen shortly. + for (size_t i = 0; i < exitTargetBlocks->size(); i++) { + MBasicBlock* exitTargetBlock = exitTargetBlocks->get(i); + if (!exitTargetBlock->phisEmpty()) { + return AnalysisResult::BadInvariants; + } + // Also we need this, since we'll be adding single-argument phis to this + // block during loop-closing. + if (exitTargetBlock->numPredecessors() != 1) { + return AnalysisResult::BadInvariants; + } + } + + // At this point, we've worked through all invariant- and structural- reasons + // why we can't/shouldn't unroll/peel this loop. Now we need to decide which + // (or both) of those actions should happen. + bool peel = true; + bool unroll = true; + if (numBlocksInOriginal > MaxBlocksForPeel || + numValuesInOriginal > MaxValuesForPeel) { + peel = false; + } + if (numBlocksInOriginal > MaxBlocksForUnroll || + numValuesInOriginal > MaxValuesForUnroll) { + unroll = false; + } + + if (peel) { + return unroll ? AnalysisResult::PeelAndUnroll : AnalysisResult::Peel; + } else { + return unroll ? AnalysisResult::Unroll : AnalysisResult::TooLarge; + } +} + +// ===================================================================== +// +// AddClosingPhisForLoop + +// Add "loop-closing phis" for values defined in a loop and used afterwards. +// In GCC parlance, the resulting form is called LCSSA (Loop-Closed SSA). This +// is a very limited intervention in that it can only handle a single exit in a +// loop, thereby restricting the places where the phis should go to the +// one-and-only exit block, and avoiding the need to compute iterated dominance +// frontiers. + +[[nodiscard]] +static bool AddClosingPhisForLoop(TempAllocator& alloc, + const UnrollState& state) { + // If no values exit the loop, we don't care how many exit target blocks + // there are, and need to make no changes. + if (state.exitingValues.empty()) { + return true; + } + + // Ensured by AnalyzeLoop + MOZ_ASSERT(state.exitTargetBlocks.size() == 1); + MBasicBlock* targetBlock = state.exitTargetBlocks.get(0); + // Ensured by AnalyzeLoop. Required because we're adding single-arg phis + // to `targetBlock`. + MOZ_ASSERT(targetBlock->numPredecessors() == 1); + + for (size_t i = 0; i < state.exitingValues.size(); i++) { + MDefinition* exitingValue = state.exitingValues.get(i); + // In `targetBlock`, add a single-argument phi node that "catches" + // `exitingValue`, and change all uses of `exitingValue` to be the phi + // node instead. + MPhi* phi = MPhi::New(alloc, exitingValue->type()); + if (!phi) { + return false; + } + targetBlock->addPhi(phi); + // Change all uses of `exitingValue` outside of the loop into uses of + // `phi`. + for (MUseIterator useIter(exitingValue->usesBegin()), + useIterEnd(exitingValue->usesEnd()); + useIter != useIterEnd; + /**/) { + MUse* use = *useIter++; + if (state.blockTable.rowContains(0, use->consumer()->block())) { + continue; + } + MOZ_ASSERT(use->consumer()); + use->replaceProducer(phi); + } + // Finally, make `phi` be the one-and-only user of `exitingValue`. + if (!phi->addInputFallible(exitingValue)) { + return false; + } + } + + // Invariant that should hold at this point: for each exiting value, all uses + // of it outside the loop should only be phi nodes. + for (size_t i = 0; i < state.exitingValues.size(); i++) { + MDefinition* exitingValue = state.exitingValues.get(i); + for (MUseIterator useIter(exitingValue->usesBegin()); + useIter != exitingValue->usesEnd(); useIter++) { + mozilla::DebugOnly use = *useIter; + MOZ_ASSERT_IF(!state.blockTable.rowContains(0, use->consumer()->block()), + use->consumer()->isDefinition() && + use->consumer()->toDefinition()->isPhi()); + } + } + + return true; +} + +// ===================================================================== +// +// UnrollAndOrPeelLoop + +[[nodiscard]] +static bool UnrollAndOrPeelLoop(MIRGraph& graph, UnrollState& state) { + // Prerequisites (assumed): + // * AnalyzeLoop has approved this loop for peeling and/or unrolling + // * AddClosingPhisForLoop has been called for it + // + // We expect `state` to be ready to go, with the caveat that only the first + // row of entries in `state.blockTable` have been filled in (these are the + // original loop blocks). All other entries are null and will be filled in + // by this routine. + // + // Almost all the logic here is to do with unrolling. That's because peeling + // (done far below) can be done by a trivial modification of the loop + // resulting from unrolling: make the backedge jump to the second copy of the + // loop body rather than the first. That leaves the first copy (that is, the + // original loop body) in a "will only be executed once" state, as we desire. + + // We need this so often it's worth pulling out specially. + const MBasicBlock* originalHeader = state.blockTable.get(0, 0); + MOZ_ASSERT(originalHeader->isLoopHeader()); + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_UnrollDetails)) { + Fprinter& printer(JitSpewPrinter()); + printer.printf( + "<<<< ORIGINAL FUNCTION (after LCSSA-ification of chosen loops)\n"); + DumpMIRGraph(printer, graph, /*showHashedPointers=*/true); + printer.printf(">>>>\n"); + } +#endif + + // Decide on the total unroll factor. "Copy #0" is the original loop, so the + // number of new copies is `unrollFactor - 1`. For example, if the original + // loop was `loop { B; }` then with `unrollFactor == 3`, the unrolled loop + // will be `loop { B; B; B; }`. Note that the value acquired here includes + // the copy needed for peeling, if that has been requested. + const uint32_t unrollFactor = state.blockTable.size1(); + // The logic below will fail if this doesn't hold. + MOZ_ASSERT(unrollFactor >= 2); + + // The number of blocks in the original loop. + const uint32_t numBlocksInOriginal = state.blockTable.size2(); + + // The number of values (phis and normal values) in the original loop. + uint32_t numValuesInOriginal = 0; + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(0, bix); + // This is very feeble, but I can't think of anything better. + for (MPhiIterator phiIter(block->phisBegin()); phiIter != block->phisEnd(); + phiIter++) { + numValuesInOriginal++; + } + for (MInstructionIterator insnIter(block->begin()); + insnIter != block->end(); insnIter++) { + numValuesInOriginal++; + } + } + // `numValuesInOriginal` is const after this point. + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_UnrollDetails)) { + DumpBlockTableRowZero(state.blockTable, "ORIGINAL LOOP"); + Fprinter& printer(JitSpewPrinter()); + printer.printf("<<<< EXIT TARGET BLOCKS: "); + for (size_t i = 0; i < state.exitTargetBlocks.size(); i++) { + MBasicBlock* targetBlock = state.exitTargetBlocks.get(i); + DumpMIRBlockID(printer, targetBlock, /*showHashedPointers=*/true); + printer.printf(" "); + } + printer.printf(">>>>\n"); + printer.printf("<<<< EXITING VALUES: "); + for (size_t i = 0; i < state.exitingValues.size(); i++) { + MDefinition* exitingValue = state.exitingValues.get(i); + DumpMIRDefinitionID(printer, exitingValue, /*showHashedPointers=*/true); + printer.printf(" "); + } + printer.printf(">>>>\n"); + } +#endif + + // At this point, `state.blockTable` row zero contains the original blocks, + // and all other rows are nulled out. + + // Set up the value table. This is a structure similar to + // `state.blockTable`: a 2-D array of values. This is local to this routine + // rather than being part of `state` because it is only needed here, and can + // take quite a lot of space. + // + // As with the block table, the main (actually, only) purpose of the value + // table is to make it possible to find equivalent definitions in different + // iterations. Also as above, "value index" (`vix` in the code) is a + // zero-based index into the sequence of values (including phis) in the loop + // as generated by the RPO traversal of the loop's blocks. + + ValueTable valueTable; + if (!valueTable.init(unrollFactor, numValuesInOriginal)) { + return false; + } + + // Copy the original values into row zero of `valueTable`, parking them + // end-to-end, without regard to block boundaries. All other rows remain + // nulled out for now. + { + uint32_t vix = 0; + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(0, bix); + for (MPhiIterator phiIter(block->phisBegin()); + phiIter != block->phisEnd(); phiIter++) { + valueTable.set(0, vix, *phiIter); + vix++; + } + for (MInstructionIterator insnIter(block->begin()); + insnIter != block->end(); insnIter++) { + valueTable.set(0, vix, *insnIter); + vix++; + } + } + MOZ_ASSERT(vix == numValuesInOriginal); + } + + // Set up the value remapper. This maps MDefinitions* in the original body + // to their "current" definition in new bodies. The only allowed keys are + // MDefinition*s from the original body. To enforce this, the keys have to + // be "registered" before use. + MDefinitionRemapper mapper; + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* originalBlock = state.blockTable.get(0, bix); + // Create initial entries in `mapper` for both the normal insns and phi + // nodes in `originalBlock`. + for (MPhiIterator phiIter(originalBlock->phisBegin()); + phiIter != originalBlock->phisEnd(); phiIter++) { + MPhi* originalPhi = *phiIter; + if (!mapper.enregister(originalPhi)) { + return false; + } + } + for (MInstructionIterator insnIter(originalBlock->begin()); + insnIter != originalBlock->end(); insnIter++) { + MInstruction* originalInsn = *insnIter; + if (!mapper.enregister(originalInsn)) { + return false; + } + } + } + + // Now we begin with the very core of the unrolling activity. + + // Create new empty blocks for copy indices 1 .. (unrollFactor-1) + const CompileInfo& info = originalHeader->info(); + for (uint32_t cix = 1; cix < unrollFactor; cix++) { + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* empty = MBasicBlock::New(graph, info, /*pred=*/nullptr, + MBasicBlock::Kind::NORMAL); + if (!empty) { + return false; + } + empty->setLoopDepth(state.blockTable.get(0, bix)->loopDepth()); + // We don't bother to set the block's ID, because the logic below not + // depend on it. In any case the blocks will get renumbered at the end of + // UnrollLoops, so it doesn't matter what we choose here. Unrolling + // still works even if we don't set the ID to anything. + MOZ_ASSERT(!state.blockTable.get(cix, bix)); + state.blockTable.set(cix, bix, empty); + } + } + + // Copy verbatim, blocks in the original loop, into our new copies. + // For each copy of the loop .. + for (uint32_t cix = 1; cix < unrollFactor; cix++) { + // For each block in the original copy .. + uint32_t vix = 0; + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* originalBlock = state.blockTable.get(0, bix); + MBasicBlock* clonedBlock = state.blockTable.get(cix, bix); + + // Clone the phi nodes, but don't update the mapper until all original + // arguments have been looked up. This is required because the phi nodes + // collectively implement a parallel assignment; there is no implied + // sequentiality. + mozilla::Vector, 16, SystemAllocPolicy> + mapperUpdates; + for (MPhiIterator phiIter(originalBlock->phisBegin()); + phiIter != originalBlock->phisEnd(); phiIter++) { + const MPhi* originalPhi = *phiIter; + MPhi* clonedPhi = + MakeReplacementPhi(graph.alloc(), mapper, originalPhi); + if (!clonedPhi) { + return false; + } + clonedBlock->addPhi(clonedPhi); + MOZ_ASSERT(!valueTable.get(cix, vix)); + valueTable.set(cix, vix, clonedPhi); + vix++; + if (!mapperUpdates.append(std::pair(originalPhi, clonedPhi))) { + return false; + } + } + for (auto& p : mapperUpdates) { + // Update the value mapper. The `originalPhi` values must be part of + // the original loop body and so must already have a key in `mapper`. + mapper.update(p.first, p.second); + } + + // Cloning the instructions is simpler, since we can incrementally update + // the mapper. + for (MInstructionIterator insnIter(originalBlock->begin()); + insnIter != originalBlock->end(); insnIter++) { + const MInstruction* originalInsn = *insnIter; + MInstruction* clonedInsn = + MakeReplacementInstruction(graph.alloc(), mapper, originalInsn); + if (!clonedInsn) { + return false; + } + clonedBlock->insertAtEnd(clonedInsn); + MOZ_ASSERT(!valueTable.get(cix, vix)); + valueTable.set(cix, vix, clonedInsn); + vix++; + // Update the value mapper. `originalInsn` must be part of the + // original loop body and so must already have a key in `mapper`. + mapper.update(originalInsn, clonedInsn); + } + + // Clone the block's predecessor array + MOZ_ASSERT(clonedBlock->numPredecessors() == 0); + for (uint32_t i = 0; i < originalBlock->numPredecessors(); i++) { + MBasicBlock* pred = originalBlock->getPredecessor(i); + if (!clonedBlock->appendPredecessor(pred)) { + return false; + } + } + } + + MOZ_ASSERT(vix == numValuesInOriginal); + + // Check we didn't mess up the valueTable ordering relative to the original + // (best effort assertion). + for (vix = 0; vix < numValuesInOriginal; vix++) { + MOZ_ASSERT(valueTable.get(cix, vix)->op() == + valueTable.get(0, vix)->op()); + } + } + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_UnrollDetails)) { + DumpValueTable(valueTable, "VALUE TABLE (final)"); + } +#endif + + // Fix up (remap) inter-block edges in both the original and copies, using + // uniform indexing as above (original = index 0, copies = indices >= 1): + + // For a block with copy-index N, inspect each edge. Determine the role the + // edge-destination (target) plays in the original copy: + // + // * backedge + // -> remap to header node of copy (N + 1) % unrollFactor + // (so, generates a backedge in the last copy) + // * internal jump within the original body + // -> remap to corresponding block in copy N + // * jump to after the original body + // -> unchanged (it is an exiting edge) + // * jump to before the original body + // -> this can't happen + // (but if it did, it would be just another exit block) + auto RemapEdgeDestination = + [=, &state](uint32_t cix, MBasicBlock* oldDestination) -> MBasicBlock* { + // `oldDestination` is the target of a control-flow insn in the original + // loop. Figure out what its replacement should be, for copy index `cix` + // (with `cix == 0` meaning the original copy). + + // If it is a back edge, remap to the header node of the next copy, with + // wraparound for the last copy. + if (oldDestination == state.blockTable.get(0, 0)) { + MOZ_ASSERT(oldDestination == originalHeader); + return state.blockTable.get((cix + 1) % unrollFactor, 0); + } + + // If it is to some other node within the original body, remap to the + // corresponding node in this copy. + for (uint32_t i = 1; i < numBlocksInOriginal; i++) { + if (oldDestination == state.blockTable.get(0, i)) { + return state.blockTable.get(cix, i); + } + } + + // The target of the edge is not in the original loop. Either it's to + // after the loop (an exiting branch) or it is to before the loop, although + // that would be bizarre and probably illegal. Either way, leave it + // unchanged. + return oldDestination; + }; + + // Similarly, for an edge that claims to come from `oldSource` in the + // original loop, determine where it should come from if we imagine that it + // applies to copy index `cix`. + auto RemapEdgeSource = [=, &state](uint32_t cix, + MBasicBlock* oldSource) -> MBasicBlock* { + if (oldSource == state.blockTable.get(0, numBlocksInOriginal - 1)) { + // Source is backedge node in the original loop. Remap to the backedge + // node in the previous iteration. + MOZ_ASSERT(oldSource == originalHeader->backedge()); + return state.blockTable.get(cix == 0 ? (unrollFactor - 1) : (cix - 1), + numBlocksInOriginal - 1); + } + for (uint32_t i = 0; i < numBlocksInOriginal - 1; i++) { + if (oldSource == state.blockTable.get(0, i)) { + // Source is a non-backedge node in the original loop. Remap it to + // the equivalent node in this copy. + return state.blockTable.get(cix, i); + } + } + // Source is not in the original loop. Leave unchanged. + return oldSource; + }; + + // Work through all control-flow instructions in all copies and remap their + // edges. + // For each copy of the loop, including the original .. + for (uint32_t cix = 0; cix < unrollFactor; cix++) { + // For each block in the copy .. + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* b = state.blockTable.get(cix, bix); + MControlInstruction* lastI = b->lastIns(); + if (lastI->isGoto()) { + MGoto* insn = lastI->toGoto(); + insn->setTarget(RemapEdgeDestination(cix, insn->target())); + } else if (lastI->isTest()) { + MTest* insn = lastI->toTest(); + insn->setIfTrue(RemapEdgeDestination(cix, insn->ifTrue())); + insn->setIfFalse(RemapEdgeDestination(cix, insn->ifFalse())); + } else { + // The other existing control instructions are MTableSwitch, + // MUnreachable, MWasmTrap, MWasmReturn, and MWasmReturnVoid. + // MTableSwitch is ruled out above. The others end a block without a + // successor, which means that they can't be loop blocks + // (MarkLoopBlocks marks blocks that are predecessors of the back + // edge.) So we don't expect to see them here. + MOZ_CRASH(); + } + } + } + + // Also we need to remap within the each block's predecessors vector. + // We have to do this backwards to stop RemapEdgeSource from asserting. + // For each copy of the loop, including the original .. + for (int32_t cix = unrollFactor - 1; cix >= 0; cix--) { + // For each block in the copy .. + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(cix, bix); + for (uint32_t i = 0; i < block->numPredecessors(); i++) { + MBasicBlock* oldPred = block->getPredecessor(i); + MBasicBlock* newPred = RemapEdgeSource(cix, oldPred); + block->setPredecessor(i, newPred); + } + } + } + + // Clean up the header node copies (but not for the original copy) since they + // all still claim to have two predecessors, the first of which is the entry + // edge from outside the loop. This is no longer true, so delete that + // predecessor. Remove the corresponding Phi args too. This leaves + // one-argument phis, meh. + for (uint32_t cix = 1; cix < unrollFactor; cix++) { + MBasicBlock* block = state.blockTable.get(cix, 0); + MOZ_ASSERT(block->numPredecessors() == 2); // from AnalyzeLoop + block->erasePredecessor(0); + MOZ_ASSERT(block->numPredecessors() == 1); // duh + for (MPhiIterator phiIter(block->phisBegin()); phiIter != block->phisEnd(); + phiIter++) { + MPhi* phi = *phiIter; + MOZ_ASSERT(phi->numOperands() == 2); // from AnalyzeLoop + phi->removeOperand(0); + MOZ_ASSERT(phi->numOperands() == 1); + } + } + + // Fix up the phi nodes in the original header; the previous step did not do + // that. Specifically, the second arg in each phi -- which are values that + // flow in from the backedge block -- need to be the ones from the last body + // copy; but currently they are from the original copy. At this point, the + // `mapper` should be able to tell us the correct value. + for (MPhiIterator phiIter(originalHeader->phisBegin()); + phiIter != originalHeader->phisEnd(); phiIter++) { + MPhi* phi = *phiIter; + MOZ_ASSERT(phi->numOperands() == 2); // from AnalyzeLoop + // phi arg[0] is defined before the loop. Ensured by AnalyzeLoop. + MOZ_ASSERT(!state.blockTable.rowContains(0, phi->getOperand(0)->block())); + // phi arg[1] is almost always defined in the loop (hence it is a + // loop-carried value) but is very occasionally defined before the loop + // (so it is unrelated to the loop). Proceed with maximum paranoia. + MDefinition* operand1 = phi->getOperand(1); + MDefinition* replacement = mapper.lookup(operand1); + // If we didn't find a replacement (unlikely but possible) then + // `operand1` must be defined before the loop. + MOZ_ASSERT((replacement == nullptr) == + !state.blockTable.rowContains(0, operand1->block())); + if (replacement) { + phi->replaceOperand(1, replacement); + } + } + + // Now we need to fix up the exit target blocks, by adding sources of exiting + // edges to their `predecessors_` vectors and updating their phi nodes + // accordingly. Recall that those phi nodes were previously installed in + // these blocks by AddClosingPhisForLoop. + // + // Currently the exit target blocks mention only predecessors in the original + // loop, but they also need to mention equivalent predecessors in each of the + // loop copies. + for (uint32_t cix = 0; cix < unrollFactor; cix++) { + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(cix, bix); + MControlInstruction* lastIns = block->lastIns(); + for (size_t i = 0; i < lastIns->numSuccessors(); i++) { + MBasicBlock* succ = lastIns->getSuccessor(i); + if (!state.exitTargetBlocks.contains(succ)) { + // This isn't an exiting edge -- not interesting. + continue; + } + // If `cix` is zero (the original body), we expect `succ` to already + // list `block` as a predecessor. If `cix` is nonzero (a body copy) + // then we expect `succ` *not* to list it, and we must add it. + mozilla::DebugOnly found = false; + for (uint32_t j = 0; j < succ->numPredecessors(); j++) { + if (block == succ->getPredecessor(j)) { + found = true; + break; + } + } + MOZ_ASSERT((cix == 0) == found); + if (cix > 0) { + if (!succ->appendPredecessor(block)) { + return false; + } + for (MPhiIterator phiIter(succ->phisBegin()); + phiIter != succ->phisEnd(); phiIter++) { + MPhi* phi = *phiIter; + // "+ 1" because we just added a predecessor + MOZ_ASSERT(phi->numOperands() + 1 == succ->numPredecessors()); + MDefinition* exitingValue = phi->getOperand(0); + MOZ_ASSERT(state.exitingValues.contains(exitingValue)); + // `exitingValue` is defined in the original loop body. We need to + // find the equivalent value in copy `cix` so we can add it as an + // argument to the phi. This bit is the one-and-only reason for + // `valueTable`s existence. + mozilla::Maybe colIndex = + valueTable.findInRow(0, exitingValue); + MOZ_ASSERT(colIndex.isSome()); // We must find it! + MDefinition* equivValue = valueTable.get(cix, colIndex.value()); + if (!phi->addInputFallible(equivValue)) { + return false; + } + } + } + } + } + } + + // At this point the control flow is correct. But we may now have critical + // edges where none existed before. Consider a loop {Block1, Block2} with an + // exit target Block9: + // + // Block1 + // stuff1 + // Goto Block2 + // Block2 + // stuff2 + // Test true->Block1(== continue) false->Block9(== break) + // ... + // Block9 + // this is a loop-exit target + // preds = Block2 + // + // After factor-of-2 unrolling: + // + // Block1 + // stuff1 + // Goto Block2 + // Block2 + // stuff2 + // Test true->Block3(== continue) false->Block9(== break) + // Block3 + // stuff3 + // Goto Block4 + // Block4 + // stuff4 + // Test true->Block1(== continue) false->Block9(== break) + // ... + // Block9 + // preds = Block2, Block4 + // + // Now the exiting edges (Block2 to Block9 and Block4 to Block9) are critical. + // + // The obvious fix is to insert a new block on each exiting edge. + + mozilla::Vector splitterBlocks; + for (uint32_t cix = 0; cix < unrollFactor; cix++) { + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(cix, bix); + // Inspect all successors of `block`. If any are exiting edges, create a + // new block and route through that instead. + MControlInstruction* lastIns = block->lastIns(); + for (size_t i = 0; i < lastIns->numSuccessors(); i++) { + MBasicBlock* succ = lastIns->getSuccessor(i); + if (!state.exitTargetBlocks.contains(succ)) { + // This isn't an exiting edge -- not interesting. + continue; + } + // Invent a new block. + MBasicBlock* splitter = + MBasicBlock::New(graph, info, block, MBasicBlock::Kind::SPLIT_EDGE); + if (!splitter || !splitterBlocks.append(splitter)) { + return false; + } + splitter->setLoopDepth(succ->loopDepth()); + // As with empty-block creation earlier in this routine, we don't + // bother to set the block's ID since none of the logic depends on it, + // and it will eventually be renumbered anyway by UnrollLoops. + MGoto* jump = MGoto::New(graph.alloc(), succ); + if (!jump) { + return false; + } + splitter->insertAtEnd(jump); + // For the target, fix up the `predecessor_` entry. + mozilla::DebugOnly found = false; + for (uint32_t j = 0; j < succ->numPredecessors(); j++) { + if (succ->getPredecessor(j) == block) { + succ->setPredecessor(j, splitter); + found = true; + break; + } + } + // Finally, reroute the jump to `succ` via `splitter`. + lastIns->replaceSuccessor(i, splitter); + MOZ_ASSERT(found); + } + } + } + + // Now the control flow is correct *and* we don't have any critical edges. + // Fix up the `successorWithPhis_` and `positionInPhiSuccessor_` fields in + // both the unrolled loop and the splitter blocks, thusly: + // + // For all blocks `B` in the unrolled loop, and for all splitter blocks, fix + // up the `B.successorWithPhis_` and `B.positionInPhiSuccessor_` fields. + // Each block may have at maximum one successor that has phi nodes, in which + // case `B.successorWithPhis_` should point at that block. And + // `B.positionInPhiSuccessor_` should indicate the index that successor's + // `predecessors_` vector, of B. + { + // Make up a list of blocks to fix up, then process them. + mozilla::Vector workList; + for (uint32_t cix = 0; cix < unrollFactor; cix++) { + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* block = state.blockTable.get(cix, bix); + if (!workList.append(block)) { + return false; + } + } + } + for (MBasicBlock* block : splitterBlocks) { + if (!workList.append(block)) { + return false; + } + } + // Now process them. + for (MBasicBlock* block : workList) { + // Inspect `block`s successors. + MBasicBlock* succWithPhis = nullptr; + MControlInstruction* lastIns = block->lastIns(); + // Determine `succWithPhis`, if one exists. + for (size_t i = 0; i < lastIns->numSuccessors(); i++) { + MBasicBlock* succ = lastIns->getSuccessor(i); + if (succ->phisEmpty()) { + continue; + } + MOZ_ASSERT(succ); + // `succ` is a successor to `block` that has phis. So we can't already + // have seen a (different) successor. + if (!succWithPhis) { + succWithPhis = succ; + } else if (succWithPhis == succ) { + // ignore duplicate successors + } else { + // More than one successor with phis. Structural invariants + // invalidated. Give up. + MOZ_CRASH(); + } + } + // Annotate `block`. + if (!succWithPhis) { + block->setSuccessorWithPhis(nullptr, 0); + } else { + MOZ_ASSERT(!succWithPhis->phisEmpty()); + // Figure out which of `succWithPhis`s predecessors `block` is. + // Should we assert `succWithPhis->predecessors_` is duplicate-free? + uint32_t predIx = UINT32_MAX; // invalid + for (uint32_t i = 0; i < succWithPhis->numPredecessors(); i++) { + if (succWithPhis->getPredecessor(i) == block) { + predIx = i; + break; + } + } + MOZ_ASSERT(predIx != UINT32_MAX); + block->setSuccessorWithPhis(succWithPhis, predIx); + } + } + } + + // Find and remove the MWasmInterruptCheck in all but the last iteration. + // We don't assume that there is an interrupt check, since + // wasm::FunctionCompiler::fillArray, at least, generates a loop with no + // check. + for (uint32_t cix = 0; cix < unrollFactor - 1; cix++) { + for (uint32_t vix = 0; vix < numValuesInOriginal; vix++) { + MDefinition* ins = valueTable.get(cix, vix); + if (!ins->isWasmInterruptCheck()) { + continue; + } + MWasmInterruptCheck* ic = ins->toWasmInterruptCheck(); + ic->block()->discard(ic); + valueTable.set(cix, vix, nullptr); + } + } + + // We're all done with unrolling. If peeling was also requested, make a + // minor modification to the unrolled loop: change the backedge so that, + // instead of jumping to the first body copy, make it jump to the second body + // copy. This leaves the first body copy in a + // will-only-ever-be-executed-once state, hence achieving peeling. + if (state.doPeeling()) { + MBasicBlock* backedge = + state.blockTable.get(unrollFactor - 1, numBlocksInOriginal - 1); + MBasicBlock* header0 = state.blockTable.get(0, 0); + MBasicBlock* header1 = state.blockTable.get(1, 0); + MOZ_ASSERT(header0 == originalHeader); + + // Fix up the back edge, to make it jump to the second copy of the loop + // body + MOZ_ASSERT(backedge->hasLastIns()); // should always hold (AnalyzeLoop) + MOZ_ASSERT(backedge->lastIns()->isGoto()); // AnalyzeLoop ensures + MGoto* backedgeG = backedge->lastIns()->toGoto(); + MOZ_ASSERT(backedgeG->target() == header0); // AnalyzeLoop ensures + backedgeG->setTarget(header1); + header0->clearLoopHeader(); + header1->setLoopHeader(); + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* originalBlock = state.blockTable.get(0, bix); + MOZ_ASSERT(originalBlock->loopDepth() > 0); + originalBlock->setLoopDepth(originalBlock->loopDepth() - 1); + } + + // Fix up the preds of the original header + MOZ_ASSERT(header0->numPredecessors() == 2); + MOZ_ASSERT(header0->getPredecessor(1) == backedge); + header0->erasePredecessor(1); + + // Fix up the preds of the new header + MOZ_ASSERT(header1->numPredecessors() == 1); + if (!header1->appendPredecessor(backedge)) { + return false; + } + + // Fix up phis of both headers, by moving the second operand of each phi of + // `header0` to be the second operand of the corresponding phi in + // `header1`. + MPhiIterator phiIter0(header0->phisBegin()); + MPhiIterator phiIter1(header1->phisBegin()); + while (true) { + bool finished0 = phiIter0 == header0->phisEnd(); + mozilla::DebugOnly finished1 = phiIter1 == header1->phisEnd(); + // The two blocks must have the same number of phis. + MOZ_ASSERT(finished0 == finished1); + if (finished0) { + break; + } + MPhi* phi0 = *phiIter0; + MPhi* phi1 = *phiIter1; + MOZ_ASSERT(phi0->numOperands() == 2); + MOZ_ASSERT(phi1->numOperands() == 1); + MDefinition* phi0arg1 = phi0->getOperand(1); + phi0->removeOperand(1); + if (!phi1->addInputFallible(phi0arg1)) { + return false; + } + phiIter0++; + phiIter1++; + } + + // Fix the succ-w-phis entry for `backEdge`. In very rare circumstances, + // the loop may have no header phis, so this must be conditional. + if (backedge->successorWithPhis()) { + MOZ_ASSERT(backedge->successorWithPhis() == header0); + MOZ_ASSERT(backedge->positionInPhiSuccessor() == 1); + backedge->setSuccessorWithPhis(header1, 1); + } + } + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_UnrollDetails)) { + DumpBlockTable(state.blockTable, "LOOP BLOCKS (final)"); + Fprinter& printer(JitSpewPrinter()); + printer.printf("<<<< SPLITTER BLOCKS\n"); + for (MBasicBlock* block : splitterBlocks) { + DumpMIRBlock(printer, block, /*showHashedPointers=*/true); + } + printer.printf(">>>>\n"); + } +#endif + + // Add the new blocks to the graph. + { + // We want to add them to the end of the existing loop. + MBasicBlock* cursor = state.blockTable.get(0, numBlocksInOriginal - 1); + for (uint32_t cix = 1; cix < unrollFactor; cix++) { + for (uint32_t bix = 0; bix < numBlocksInOriginal; bix++) { + MBasicBlock* addMe = state.blockTable.get(cix, bix); + graph.insertBlockAfter(cursor, addMe); + cursor = addMe; + } + } + for (MBasicBlock* addMe : splitterBlocks) { + graph.insertBlockAfter(cursor, addMe); + cursor = addMe; + } + } + + // UnrollLoops will renumber the blocks and redo the dominator tree once all + // loops have been unrolled. + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_UnrollDetails)) { + Fprinter& printer(JitSpewPrinter()); + printer.printf("<<<< FUNCTION AFTER UNROLLING\n"); + DumpMIRGraph(printer, graph, /*showHashedPointers=*/true); + printer.printf(">>>>\n"); + } +#endif + + return true; +} + +// ===================================================================== +// +// FindInitialCandidates, which finds "initial candidates" for +// unrolling/peeling. See SMDOC at the top of this file. + +struct InitialCandidate { + MBasicBlock* header; + uint32_t numBlocks; + float score; + bool valid; + InitialCandidate(MBasicBlock* header, uint32_t numBlocks) + : header(header), numBlocks(numBlocks), score(0.0), valid(true) {} +}; + +using InitialCandidateVector = + mozilla::Vector; + +[[nodiscard]] +bool FindInitialCandidates(MIRGraph& graph, + InitialCandidateVector& initialCandidates) { + // Find initial candidate loops, and place them in `initialCandidates`. + MOZ_ASSERT(initialCandidates.empty()); + + // TODO: possibly use a linear-time algorithm to find innermost loops, as + // BackTrackingAllocator.cpp does, rather than the scheme below. + // See bug 1959074. + + // Collect up the loops in the function. The iteration order doesn't matter + // here, but we have to choose something. + for (auto rpoIter(graph.rpoBegin()), rpoIterEnd(graph.rpoEnd()); + rpoIter != rpoIterEnd; ++rpoIter) { + MBasicBlock* header = *rpoIter; + if (!header->isLoopHeader()) { + continue; + } + + bool hasOsrEntry; + size_t numBlocks = MarkLoopBlocks(graph, header, &hasOsrEntry); + if (numBlocks == 0) { + // Bogus; skip. + continue; + } + UnmarkLoopBlocks(graph, header); + if (hasOsrEntry) { + // Unhandled; skip. + continue; + } + + MOZ_RELEASE_ASSERT(numBlocks <= UINT32_MAX); + if (!initialCandidates.append(InitialCandidate(header, numBlocks))) { + return false; + } + } + + // Sort the loops by size (in blocks). + std::sort(initialCandidates.begin(), initialCandidates.end(), + [](const InitialCandidate& cand1, const InitialCandidate& cand2) { + return cand1.numBlocks < cand2.numBlocks; + }); + + // Remove non-innermost candidates from consideration. We expect + // `initialCandidates` to describe contiguous, properly nested candidates. + // For each loop in `initialCandidates`, scan forwards in the vector and mark + // as invalid, any subsequent loops that contain it. + for (size_t i = 0; i < initialCandidates.length(); i++) { + const InitialCandidate& candI = initialCandidates[i]; + MOZ_ASSERT(candI.numBlocks > 0); + + for (size_t j = i + 1; j < initialCandidates.length(); j++) { + InitialCandidate& candJ = initialCandidates[j]; + MOZ_ASSERT(candJ.numBlocks > 0); + // Because sorted by size: + MOZ_ASSERT(candI.numBlocks <= candJ.numBlocks); + if (!candJ.valid) { + // Already invalidated + continue; + } + + // Determine relationship of I vs J. Either non-overlapping, or I is + // completely contained inside J. In which case invalidate J. + MOZ_ASSERT(candI.numBlocks > 0); + if (candI.header->id() + candI.numBlocks <= candJ.header->id()) { + continue; // no overlap + } + if (candJ.header->id() + candJ.numBlocks <= candI.header->id()) { + continue; // no overlap + } + // "I is completely contained within J" + MOZ_ASSERT(candJ.header->id() <= candI.header->id()); + MOZ_ASSERT(candI.header->id() + candI.numBlocks <= + candJ.header->id() + candJ.numBlocks); + // and they aren't identical + MOZ_ASSERT(candI.header->id() != candJ.header->id() || + candI.numBlocks != candJ.numBlocks); + candJ.valid = false; + } + } + + // Slide the valid ones to the start of the vector and sort by starting block + // ID. This makes it easy to verify that the cands are non-overlapping. + { + size_t wr = 0; + size_t rd; + for (rd = 0; rd < initialCandidates.length(); rd++) { + if (initialCandidates[rd].valid) { + initialCandidates[wr++] = initialCandidates[rd]; + } + } + while (wr < rd) { + initialCandidates.popBack(); + wr++; + } + } + + // Sort the loops by header ID. + std::sort(initialCandidates.begin(), initialCandidates.end(), + [](const InitialCandidate& cand1, const InitialCandidate& cand2) { + return cand1.header->id() < cand2.header->id(); + }); + + // Now we can conveniently assert non-overlappingness. + for (size_t i = 1; i < initialCandidates.length(); i++) { + MOZ_ASSERT(initialCandidates[i - 1].header->id() + + initialCandidates[i - 1].numBlocks <= + initialCandidates[i].header->id()); + } + + // Heuristics: calculate a "score" for each loop, indicating our desire to + // unroll it. **Lower** values indicate a higher desirability for unrolling. + // + // A loop gets a lower score if: + // * it is small + // * it has few blocks + // * it is deeply nested (currently ignored) + + for (InitialCandidate& cand : initialCandidates) { + uint32_t nBlocks = cand.numBlocks; + uint32_t nInsns = 0; + uint32_t nPhis = 0; + + // Visit each block in the loop + mozilla::DebugOnly numBlocksVisited = 0; + const MBasicBlock* backedge = cand.header->backedge(); + + for (auto i(graph.rpoBegin(cand.header)); /**/; ++i) { + MOZ_ASSERT(i != graph.rpoEnd(), + "UnrollLoops: loop blocks overrun graph end"); + MBasicBlock* block = *i; + numBlocksVisited++; + for (MInstructionIterator iter(block->begin()); iter != block->end(); + iter++) { + nInsns++; + } + for (MPhiIterator iter(block->phisBegin()); iter != block->phisEnd(); + iter++) { + nPhis++; + } + + if (block == backedge) { + break; + } + } + + MOZ_ASSERT(numBlocksVisited == nBlocks); + + cand.score = + 10.0 * float(nBlocks) + 2.0 * float(nInsns) + 1.0 * float(nPhis); + } + + // Sort the loops by `score`. + std::sort(initialCandidates.begin(), initialCandidates.end(), + [](const InitialCandidate& cand1, const InitialCandidate& cand2) { + return cand1.score < cand2.score; + }); + + return true; +} + +// ===================================================================== +// +// UnrollLoops, the top level of the unroller. + +bool UnrollLoops(const MIRGenerator* mir, MIRGraph& graph, bool* changed) { + *changed = false; + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_Unroll)) { + JitSpew(JitSpew_Unroll, "BEGIN UnrollLoops"); + } +#endif + + // Make up a vector of initial candidates, which are innermost loops only, + // and not too big. + + InitialCandidateVector initialCandidates; + if (!FindInitialCandidates(graph, initialCandidates)) { + return false; + } + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_Unroll)) { + for (const InitialCandidate& cand : initialCandidates) { + MOZ_ASSERT(cand.valid); + JitSpew(JitSpew_Unroll, " initial cand: score=%-5.1f blocks=%u-%u", + cand.score, cand.header->id(), + cand.header->id() + cand.numBlocks - 1); + } + } +#endif + + // Perform a more expensive analysis of the candidates, leading to a further + // reduction in the set. For those remaining, an UnrollState is created and + // initialized. Also a decision is made whether to unroll only, peel only, + // or both. + + mozilla::Vector unrollStates; + + for (const InitialCandidate& cand : initialCandidates) { + if (cand.score > InitialCandidateThreshold) { + // Give up. We just sorted them by `score`, so the rest will be even + // more undesirable for unrolling. + break; + } + + // Park the loop's blocks in a vector, so we can hand it off to + // AnalyzeLoops for examination. This is the place where the original + // block sequence, as seen by the entire rest of the machinery, is fixed. + BlockVector originalBlocks; + + const MBasicBlock* backedge = cand.header->backedge(); + + for (auto blockIter(graph.rpoBegin(cand.header)); /**/; ++blockIter) { + MOZ_ASSERT(blockIter != graph.rpoEnd()); + MBasicBlock* block = *blockIter; + if (!originalBlocks.append(block)) { + return false; + } + if (block == backedge) { + break; + } + } + + // Analyze the candidate in detail. If unrolling and/or peeling is + // approved, this also collects up for us, the loop's target block set and + // exiting value set. + BlockSet exitTargetBlocks; + ValueSet exitingValues; + + AnalysisResult res = + AnalyzeLoop(originalBlocks, &exitTargetBlocks, &exitingValues); + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_Unroll)) { + MOZ_ASSERT(cand.valid); + JitSpew(JitSpew_Unroll, " %13s: score=%-5.1f blocks=%u-%u", + Name_of_AnalysisResult(res), cand.score, cand.header->id(), + cand.header->id() + cand.numBlocks - 1); + } +#endif + + switch (res) { + case AnalysisResult::OOM: + return false; + case AnalysisResult::Peel: + case AnalysisResult::Unroll: + case AnalysisResult::PeelAndUnroll: + break; + case AnalysisResult::BadInvariants: + MOZ_CRASH("js::jit::UnrollLoops: unexpected incoming MIR"); + case AnalysisResult::TooComplex: + case AnalysisResult::Uncloneable: + case AnalysisResult::TooLarge: + case AnalysisResult::Unsuitable: + // Ignore this loop + continue; + default: + MOZ_CRASH(); + } + + // The candidate has been accepted for unrolling and/or peeling. Make an + // initial UnrollState for it and add it to our collection thereof. + + UnrollMode mode; + if (res == AnalysisResult::Peel) { + mode = UnrollMode::Peel; + } else if (res == AnalysisResult::Unroll) { + mode = UnrollMode::Unroll; + } else if (res == AnalysisResult::PeelAndUnroll) { + mode = UnrollMode::PeelAndUnroll; + } else { + MOZ_CRASH(); + } + + if (!unrollStates.emplaceBack(mode)) { + return false; + } + UnrollState* state = &unrollStates.back(); + if (!state->exitTargetBlocks.copy(exitTargetBlocks) || + !state->exitingValues.copy(exitingValues)) { + return false; + } + + // Ignoring peeling, how many times should we unroll a loop? + // For example, if the original loop was `loop { B; }` then with + // `basicUnrollingFactor = 3`, the unrolled loop will be `loop { B; B; B; + // }`. If peeling is also requested then we will unroll one more time than + // this, giving overall result `B; loop { B; B; B; }`. + uint32_t basicUnrollingFactor = JS::Prefs::wasm_unroll_factor(); + if (basicUnrollingFactor < 2) { + // It needs to be at least 2, else we're not unrolling at all. + basicUnrollingFactor = 2; + } else if (basicUnrollingFactor > 8) { + // Unrolling gives rapidly diminishing marginal gains. Even beyond 4 + // there's little benefit to be had. + basicUnrollingFactor = 8; + } + + // Decide on the total number of duplicates of the loop body we'll need + // (including the original). + uint32_t unrollingFactor; + if (res == AnalysisResult::Peel) { + // 1 for the peeled iteration, + // 1 for the loop (since we are not unrolling it) + unrollingFactor = 1 + 1; + } else if (res == AnalysisResult::Unroll) { + // No peeled iteration, we unroll only + unrollingFactor = 0 + basicUnrollingFactor; + } else if (res == AnalysisResult::PeelAndUnroll) { + // 1 peeled iteration, and we unroll the loop + unrollingFactor = 1 + basicUnrollingFactor; + } else { + MOZ_CRASH(); + } + + // Set up UnrollState::blockTable and copy in the initial loop blocks. + if (!state->blockTable.init(unrollingFactor, originalBlocks.length())) { + return false; + } + for (uint32_t bix = 0; bix < originalBlocks.length(); bix++) { + state->blockTable.set(0, bix, originalBlocks[bix]); + } + } + + // Now, finally, we have an initialized vector of UnrollStates ready to go. + // After this point, `originalBlocks` is no longer used. Also, because of + // the checking done in AnalyzeLoop, we know the transformations can't fail + // (apart from OOMing). + + // Add "loop-closing phis" for values defined in the loop and used + // afterwards. See comments on AddClosingPhisForLoop. + for (const UnrollState& state : unrollStates) { + if (!AddClosingPhisForLoop(graph.alloc(), state)) { + return false; + } + } + + // Actually do the unrolling and/or peeling. + uint32_t numLoopsPeeled = 0; + uint32_t numLoopsUnrolled = 0; + uint32_t numLoopsPeeledAndUnrolled = 0; + for (UnrollState& state : unrollStates) { + if (!UnrollAndOrPeelLoop(graph, state)) { + return false; + } + // Update stats. + switch (state.mode) { + case UnrollMode::Peel: + numLoopsPeeled++; + break; + case UnrollMode::Unroll: + numLoopsUnrolled++; + break; + case UnrollMode::PeelAndUnroll: + numLoopsPeeledAndUnrolled++; + break; + default: + MOZ_CRASH(); + } + } + + // Do function-level fixups, if anything changed. + if (!unrollStates.empty()) { + RenumberBlocks(graph); + ClearDominatorTree(graph); + if (!BuildDominatorTree(mir, graph)) { + return false; + } + } + + uint32_t numLoopsChanged = + numLoopsPeeled + numLoopsUnrolled + numLoopsPeeledAndUnrolled; + +#ifdef JS_JITSPEW + if (JitSpewEnabled(JitSpew_Unroll)) { + if (numLoopsChanged == 0) { + JitSpew(JitSpew_Unroll, "END UnrollLoops"); + } else { + JitSpew(JitSpew_Unroll, + "END UnrollLoops, %u processed (P=%u, U=%u, P&U=%u)", + numLoopsChanged, numLoopsPeeled, numLoopsUnrolled, + numLoopsPeeledAndUnrolled); + } + } +#endif + + *changed = numLoopsChanged > 0; + return true; +} + +} // namespace jit +} // namespace js diff --git a/js/src/jit/UnrollLoops.h b/js/src/jit/UnrollLoops.h new file mode 100644 index 00000000000..cad43cfc9ba --- /dev/null +++ b/js/src/jit/UnrollLoops.h @@ -0,0 +1,24 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- + * vim: set ts=8 sts=2 et sw=2 tw=80: + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef jit_UnrollLoops_h +#define jit_UnrollLoops_h + +#include + +namespace js { +namespace jit { + +class MIRGraph; +class MIRGenerator; + +[[nodiscard]] bool UnrollLoops(const MIRGenerator* mir, MIRGraph& graph, + bool* changed); + +} // namespace jit +} // namespace js + +#endif /* jit_UnrollLoops_h */ diff --git a/js/src/jit/moz.build b/js/src/jit/moz.build index 0af48120d91..efc8e6a86b1 100644 --- a/js/src/jit/moz.build +++ b/js/src/jit/moz.build @@ -95,6 +95,7 @@ UNIFIED_SOURCES += [ "TrampolineNatives.cpp", "TrialInlining.cpp", "TypePolicy.cpp", + "UnrollLoops.cpp", "ValueNumbering.cpp", "VMFunctions.cpp", "WarpBuilder.cpp", diff --git a/js/src/jit/shared/CodeGenerator-shared.cpp b/js/src/jit/shared/CodeGenerator-shared.cpp index c3f1f3366db..5f505e7794f 100644 --- a/js/src/jit/shared/CodeGenerator-shared.cpp +++ b/js/src/jit/shared/CodeGenerator-shared.cpp @@ -198,6 +198,10 @@ bool CodeGeneratorShared::generateOutOfLineCode() { current = nullptr; for (OutOfLineCode* ool : outOfLineCode_) { + if (gen->shouldCancel("Generate Code (OOL code loop)")) { + return false; + } + // Add native => bytecode mapping entries for OOL->sites. // Not enabled on wasm yet since it doesn't contain bytecode mappings. if (!gen->compilingWasm()) { diff --git a/js/src/jsapi-tests/testJitMinimalFunc.h b/js/src/jsapi-tests/testJitMinimalFunc.h index 03d53eed04d..40d6d8b4f2a 100644 --- a/js/src/jsapi-tests/testJitMinimalFunc.h +++ b/js/src/jsapi-tests/testJitMinimalFunc.h @@ -77,7 +77,7 @@ struct MinimalFunc : MinimalAlloc { return false; } RenumberBlocks(graph); - if (!BuildDominatorTree(graph)) { + if (!BuildDominatorTree(&mir, graph)) { return false; } if (!BuildPhiReverseMapping(graph)) { @@ -95,7 +95,7 @@ struct MinimalFunc : MinimalAlloc { return false; } RenumberBlocks(graph); - if (!BuildDominatorTree(graph)) { + if (!BuildDominatorTree(&mir, graph)) { return false; } if (!BuildPhiReverseMapping(graph)) { diff --git a/js/src/jsexn.cpp b/js/src/jsexn.cpp index 2e25966ec35..b20edaf24e8 100644 --- a/js/src/jsexn.cpp +++ b/js/src/jsexn.cpp @@ -495,6 +495,10 @@ bool JS::ErrorReportBuilder::init(JSContext* cx, // unrooted, we must root our exception object, if any. exnObject = &exnStack.exception().toObject(); reportp = ErrorFromException(cx, exnObject); + + if (reportp && reportp->isMuted) { + sniffingBehavior = SniffingBehavior::NoSideEffects; + } } // Be careful not to invoke ToString if we've already successfully extracted diff --git a/js/src/make-source-package.py b/js/src/make-source-package.py index 87342529123..82db8dd50c5 100755 --- a/js/src/make-source-package.py +++ b/js/src/make-source-package.py @@ -112,7 +112,6 @@ print("") rsync_filter_list = """ # Top-level config and build files -+ /aclocal.m4 + /client.mk + /configure.py + /LICENSE @@ -383,33 +382,6 @@ def copy_cargo_toml(): f.write(content) -def generate_configure(): - """Generate configure files to avoid build dependency on autoconf-2.13""" - - src_old_configure_in_file = topsrc_dir / "js" / "src" / "old-configure.in" - dest_old_configure_file = target_dir / "js" / "src" / "old-configure" - - js_src_dir = topsrc_dir / "js" / "src" - - env = os.environ.copy() - env["M4"] = m4 - env["AWK"] = awk - env["AC_MACRODIR"] = topsrc_dir / "build" / "autoconf" - - with dest_old_configure_file.open("w") as f: - subprocess.run( - [ - "sh", - str(topsrc_dir / "build" / "autoconf" / "autoconf.sh"), - f"--localdir={js_src_dir}", - str(src_old_configure_in_file), - ], - stdout=f, - check=True, - env=env, - ) - - def copy_file(filename, content): """Copy an existing file from the staging area, or create a new file with the given contents if it does not exist.""" @@ -452,7 +424,6 @@ def stage(): create_target_dir() sync_files() copy_cargo_toml() - generate_configure() copy_file("INSTALL", INSTALL_CONTENT) copy_file("README", README_CONTENT) copy_file("mozconfig", MOZCONFIG_DEBUG_CONTENT) diff --git a/js/src/old-configure.in b/js/src/old-configure.in deleted file mode 100644 index f507cae34e1..00000000000 --- a/js/src/old-configure.in +++ /dev/null @@ -1,23 +0,0 @@ -dnl -*- Mode: Autoconf; tab-width: 4; indent-tabs-mode: nil; -*- -dnl vi: set tabstop=4 shiftwidth=4 expandtab syntax=m4: -dnl This Source Code Form is subject to the terms of the Mozilla Public -dnl License, v. 2.0. If a copy of the MPL was not distributed with this -dnl file, You can obtain one at http://mozilla.org/MPL/2.0/. - -dnl Process this file with autoconf to produce a configure script. -dnl ======================================================== -AC_PREREQ(2.13) -AC_INIT(js/src/jsapi.h) -AC_CONFIG_AUX_DIR(${srcdir}/build/autoconf) - -dnl ======================================================== -dnl = -dnl = Maintainer debug option (no --enable equivalent) -dnl = -dnl ======================================================== - -dnl Spit out some output -dnl ======================================================== -MOZ_CREATE_CONFIG_STATUS() - -rm -fr confdefs* $ac_clean_files diff --git a/js/src/tests/jstests.list b/js/src/tests/jstests.list index c43af13dbed..12f72a2f5a0 100644 --- a/js/src/tests/jstests.list +++ b/js/src/tests/jstests.list @@ -1145,18 +1145,10 @@ skip script test262/built-ins/Temporal/ZonedDateTime/prototype/until/argument-st # See Bug 1950425, skip tests for calendars disabled in release or beta skip-if(release_or_beta) script non262/Temporal/Intl/defaults.js -skip-if(release_or_beta) script test262/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-common.js -skip-if(release_or_beta) script test262/staging/sm/Temporal/PlainMonthDay/from-chinese-leap-month-uncommon.js -skip-if(release_or_beta) script test262/staging/sm/Temporal/PlainMonthDay/from-chinese.js -skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/non-iso-calendars-chinese.js -skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/non-iso-calendars-dangi.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/non-iso-calendars-islamic-umalqura.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic-rgsa.js skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/islamic-calendars-islamic-umalqura.js -skip-if(release_or_beta) script test262/staging/Intl402/Temporal/old/addition-across-lunisolar-leap-months-chinese.js -skip-if(release_or_beta) script test262/intl402/Temporal/PlainYearMonth/from/reference-day-chinese.js -skip-if(release_or_beta) script test262/intl402/Temporal/PlainDate/prototype/until/until-across-lunisolar-leap-months.js # Try re-enabling when Bug 1954138 or Bug 1955545 are fixed. skip script test262/staging/Intl402/Temporal/old/non-iso-calendars-islamic.js diff --git a/js/src/tests/non262/Temporal/Intl/consistent-dates.js b/js/src/tests/non262/Temporal/Intl/consistent-dates.js new file mode 100644 index 00000000000..362c5d5e327 --- /dev/null +++ b/js/src/tests/non262/Temporal/Intl/consistent-dates.js @@ -0,0 +1,408 @@ +// |reftest| shell-option(--enable-temporal) skip-if(!this.hasOwnProperty("Temporal")||!this.hasOwnProperty("Intl")) + +// Ensure Intl.DateTimeFormat and Temporal return consistent year-month-day values +// for reasonable dates. + +const weekdays = [ + "Monday", + "Tuesday", + "Wednesday", + "Thursday", + "Friday", + "Saturday", + "Sunday", +]; + +// Map Hebrew months to their corresponding month code. +const hebrewMonths = { + "Tishri": "M01", + "Heshvan": "M02", + "Kislev": "M03", + "Tevet": "M04", + "Shevat": "M05", + "Adar I": "M05L", + "Adar II": "M06", + "Adar": "M06", + "Nisan": "M07", + "Iyar": "M08", + "Sivan": "M09", + "Tamuz": "M10", + "Av": "M11", + "Elul": "M12", +}; + +// Extract date information from a to parts formatted date. +function dateFromParts(parts) { + let relatedYear = undefined; + let year = undefined; + let monthCode = ""; + let day = 0; + let dayOfWeek = -1; + + for (let {type, value} of parts) { + switch (type) { + case "weekday": + dayOfWeek = weekdays.indexOf(value); + break; + case "year": + year = Number(value); + break; + case "relatedYear": + relatedYear = Number(value); + break; + case "month": { + if (value in hebrewMonths) { + monthCode = hebrewMonths[value]; + } else { + // Chinese/Dangi leap months end with "bis", from Latin "bis" = "twice". + let leapMonth = value.endsWith("bis"); + if (leapMonth) { + value = value.slice(0, -"bis".length); + } + monthCode = "M" + value.padStart(2, "0") + (leapMonth ? "L" : ""); + } + break; + } + case "day": + day = Number(value); + break; + case "era": + case "literal": + continue; + default: throw new Error("bad part: " + type); + } + } + assertEq(dayOfWeek >= 0, true); + assertEq(monthCode.length > 0, true, JSON.stringify(parts)); + assertEq(day > 0, true); + + dayOfWeek += 1; + + return { + relatedYear, + year, + monthCode, + day, + dayOfWeek, + }; +} + +const tests = { + buddhist: [ + // Date ranges in 1500..2500 where ICU4C and ICU4X compute different results. + // + // NOTE: These are dates before the Gregorian change date October 15, 1582. + { + start: {iso: "1500-01-01", year: 2043, monthCode: "M01", day: 1}, + end: {iso: "1582-10-14", year: 2125, monthCode: "M10", day: 14}, + }, + ], + chinese: [ + // Date ranges in 1900..2100 where ICU4C and ICU4X compute different results. + { + start: {iso: "1906-04-23", relatedYear: 1906, monthCode: "M04", day: 1}, + end: {iso: "1906-05-22", relatedYear: 1906, monthCode: "M04", day: 30}, + }, + { + start: {iso: "1917-03-23", relatedYear: 1917, monthCode: "M02L", day: 1}, + end: {iso: "1917-05-20", relatedYear: 1917, monthCode: "M03", day: 30}, + }, + { + start: {iso: "1922-06-25", relatedYear: 1922, monthCode: "M05L", day: 1}, + end: {iso: "1922-08-22", relatedYear: 1922, monthCode: "M06", day: 30}, + }, + { + start: {iso: "1954-02-03", relatedYear: 1954, monthCode: "M01", day: 1}, + end: {iso: "1954-03-04", relatedYear: 1954, monthCode: "M01", day: 30}, + }, + { + start: {iso: "1955-02-22", relatedYear: 1955, monthCode: "M02", day: 1}, + end: {iso: "1955-03-23", relatedYear: 1955, monthCode: "M02", day: 30}, + }, + { + start: {iso: "1987-07-26", relatedYear: 1987, monthCode: "M06L", day: 1}, + end: {iso: "1987-09-22", relatedYear: 1987, monthCode: "M07", day: 30}, + }, + { + start: {iso: "1999-01-17", relatedYear: 1998, monthCode: "M12", day: 1}, + end: {iso: "1999-02-15", relatedYear: 1998, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2012-08-17", relatedYear: 2012, monthCode: "M07", day: 1}, + end: {iso: "2012-09-15", relatedYear: 2012, monthCode: "M07", day: 30}, + }, + { + start: {iso: "2018-11-07", relatedYear: 2018, monthCode: "M09", day: 30}, + end: {iso: "2018-12-06", relatedYear: 2018, monthCode: "M10", day: 29}, + }, + { + start: {iso: "2027-02-06", relatedYear: 2027, monthCode: "M01", day: 1}, + end: {iso: "2027-03-07", relatedYear: 2027, monthCode: "M01", day: 30}, + }, + { + start: {iso: "2030-02-02", relatedYear: 2029, monthCode: "M12", day: 30}, + end: {iso: "2030-03-03", relatedYear: 2030, monthCode: "M01", day: 29}, + }, + { + start: {iso: "2057-09-28", relatedYear: 2057, monthCode: "M09", day: 1}, + end: {iso: "2057-10-27", relatedYear: 2057, monthCode: "M09", day: 30}, + }, + { + start: {iso: "2070-03-12", relatedYear: 2070, monthCode: "M02", day: 1}, + end: {iso: "2070-04-10", relatedYear: 2070, monthCode: "M02", day: 30}, + }, + ], + dangi: [ + // Date ranges in 1900..2100 where ICU4C and ICU4X compute different results. + { + start: {iso: "1904-01-17", relatedYear: 1903, monthCode: "M11", day: 30}, + end: {iso: "1904-02-15", relatedYear: 1903, monthCode: "M12", day: 29}, + }, + { + start: {iso: "1904-11-07", relatedYear: 1904, monthCode: "M09", day: 30}, + end: {iso: "1904-12-06", relatedYear: 1904, monthCode: "M10", day: 29}, + }, + { + start: {iso: "1905-05-04", relatedYear: 1905, monthCode: "M03", day: 30}, + end: {iso: "1905-06-02", relatedYear: 1905, monthCode: "M04", day: 29}, + }, + { + start: {iso: "1908-04-30", relatedYear: 1908, monthCode: "M03", day: 30}, + end: {iso: "1908-05-29", relatedYear: 1908, monthCode: "M04", day: 29}, + }, + { + start: {iso: "1911-12-20", relatedYear: 1911, monthCode: "M10", day: 30}, + end: {iso: "1912-01-18", relatedYear: 1911, monthCode: "M11", day: 29}, + }, + { + start: {iso: "2017-02-26", relatedYear: 2017, monthCode: "M02", day: 1}, + end: {iso: "2017-03-27", relatedYear: 2017, monthCode: "M02", day: 30}, + }, + { + start: {iso: "2051-08-06", relatedYear: 2051, monthCode: "M06", day: 30}, + end: {iso: "2051-09-04", relatedYear: 2051, monthCode: "M07", day: 29}, + }, + { + start: {iso: "2051-11-03", relatedYear: 2051, monthCode: "M10", day: 1}, + end: {iso: "2051-12-02", relatedYear: 2051, monthCode: "M10", day: 30}, + }, + { + start: {iso: "2097-01-13", relatedYear: 2096, monthCode: "M12", day: 1}, + end: {iso: "2097-02-11", relatedYear: 2096, monthCode: "M12", day: 30}, + }, + ], + hebrew: [ + // Date ranges in 1500..2500 where ICU4C and ICU4X compute different results. + // ICU bug report: . + { + start: {iso: "1700-11-12", year: 5461, monthCode: "M03", day: 1}, + end: {iso: "1701-12-01", year: 5462, monthCode: "M02", day: 30}, + }, + { + start: {iso: "1798-11-09", year: 5559, monthCode: "M03", day: 1}, + end: {iso: "1799-11-28", year: 5560, monthCode: "M02", day: 30}, + }, + { + start: {iso: "2045-11-10", year: 5806, monthCode: "M03", day: 1}, + end: {iso: "2046-11-29", year: 5807, monthCode: "M02", day: 30}, + }, + { + start: {iso: "2292-11-11", year: 6053, monthCode: "M03", day: 1}, + end: {iso: "2293-11-30", year: 6054, monthCode: "M02", day: 30}, + }, + ], + "islamic": [ + // TODO: Not yet supported. + + // Date ranges in 2000..2030 where ICU4C and ICU4X compute different results. + // { + // start: {iso: "2000-01-01", year: 1420, monthCode: "M09", day: 23}, + // end: {iso: "2029-12-31", year: 1451, monthCode: "M08", day: 25}, + // }, + ], + "islamic-umalqura": [ + // TODO: Not yet supported. + + // Date ranges in 2000..2030 where ICU4C and ICU4X compute different results. + // { + // start: {iso: "2000-02-06", year: 1420, monthCode: "M11", day: 1}, + // end: {iso: "2000-03-06", year: 1420, monthCode: "M11", day: 30}, + // }, + // { + // start: {iso: "2000-09-28", year: 1421, monthCode: "M06", day: 30}, + // end: {iso: "2000-10-27", year: 1421, monthCode: "M07", day: 29}, + // }, + // { + // start: {iso: "2001-10-17", year: 1422, monthCode: "M07", day: 30}, + // end: {iso: "2001-11-15", year: 1422, monthCode: "M08", day: 29}, + // }, + // { + // start: {iso: "2006-06-26", year: 1427, monthCode: "M06", day: 1}, + // end: {iso: "2006-07-25", year: 1427, monthCode: "M06", day: 30}, + // }, + // { + // start: {iso: "2024-12-02", year: 1446, monthCode: "M05", day: 30}, + // end: {iso: "2024-12-31", year: 1446, monthCode: "M06", day: 29}, + // }, + // { + // start: {iso: "2025-01-30", year: 1446, monthCode: "M08", day: 1}, + // end: {iso: "2025-02-28", year: 1446, monthCode: "M08", day: 30}, + // }, + // { + // start: {iso: "2029-08-11", year: 1451, monthCode: "M04", day: 1}, + // end: {iso: "2029-09-09", year: 1451, monthCode: "M04", day: 30}, + // }, + // { + // start: {iso: "2029-11-07", year: 1451, monthCode: "M07", day: 1}, + // end: {iso: "2029-12-06", year: 1451, monthCode: "M07", day: 30}, + // }, + ], + japanese: [ + // Date ranges in 1500..2500 where ICU4C and ICU4X compute different results. + // + // NOTE: These are dates before the Gregorian change date October 15, 1582. + { + start: {iso: "1500-01-01", monthCode: "M01", day: 1}, + end: {iso: "1582-10-14", monthCode: "M10", day: 14}, + }, + ], + persian: [ + // Date ranges in 1500..2500 where ICU4C and ICU4X compute different results. + // More info: https://github.com/unicode-org/icu4x/issues/4713 + { + start: {iso: "2124-03-20", year: 1503, monthCode: "M01", day: 1}, + end: {iso: "2125-03-20", year: 1503, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2223-03-21", year: 1602, monthCode: "M01", day: 1}, + end: {iso: "2224-03-20", year: 1602, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2256-03-20", year: 1635, monthCode: "M01", day: 1}, + end: {iso: "2257-03-20", year: 1635, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2289-03-20", year: 1668, monthCode: "M01", day: 1}, + end: {iso: "2290-03-20", year: 1668, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2322-03-21", year: 1701, monthCode: "M01", day: 1}, + end: {iso: "2323-03-21", year: 1701, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2355-03-21", year: 1734, monthCode: "M01", day: 1}, + end: {iso: "2356-03-20", year: 1734, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2388-03-20", year: 1767, monthCode: "M01", day: 1}, + end: {iso: "2389-03-20", year: 1767, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2421-03-20", year: 1800, monthCode: "M01", day: 1}, + end: {iso: "2422-03-20", year: 1800, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2454-03-20", year: 1833, monthCode: "M01", day: 1}, + end: {iso: "2455-03-20", year: 1833, monthCode: "M12", day: 30}, + }, + { + start: {iso: "2487-03-20", year: 1866, monthCode: "M01", day: 1}, + end: {iso: "2488-03-19", year: 1866, monthCode: "M12", day: 30}, + }, + ], + roc: [ + // Date ranges in 1500..2500 where ICU4C and ICU4X compute different results. + // + // NOTE: These are dates before the Gregorian change date October 15, 1582. + { + start: {iso: "1500-01-01", eraYear: 412, monthCode: "M01", day: 1}, + end: {iso: "1582-10-14", eraYear: 330, monthCode: "M10", day: 14}, + }, + ], +}; + +for (let [calendar, dates] of Object.entries(tests)) { + let dtf = new Intl.DateTimeFormat("en", { + timeZone: "UTC", + calendar, + year: "numeric", + month: "numeric", + day: "numeric", + weekday: "long", + }); + + for (let {start, end} of dates) { + // Compute from start date. + let isoStartDate = Temporal.PlainDate.from(start.iso); + let startDate = isoStartDate.withCalendar(calendar); + let startDateParts = dtf.formatToParts(startDate); + + // Compute from end date. + let isoEndDate = Temporal.PlainDate.from(end.iso); + let endDate = isoEndDate.withCalendar(calendar); + let endDateParts = dtf.formatToParts(endDate); + + // Compute from ranges. + let rangeParts = dtf.formatRangeToParts(startDate, endDate); + let startRangeDateParts = rangeParts.filter(({source}) => source !== "endRange"); + let endRangeDateParts = rangeParts.filter(({source}) => source !== "startRange"); + + // Entries to check. + let entries = [ + { + date: startDate, + parts: startDateParts, + expected: start, + }, + { + date: endDate, + parts: endDateParts, + expected: end, + }, + { + date: startDate, + parts: startRangeDateParts, + expected: start, + }, + { + date: endDate, + parts: endRangeDateParts, + expected: end, + }, + ]; + + for (let {date, parts, expected} of entries) { + // Ensure Temporal matches |expected|. + if (expected.year !== undefined) { + assertEq(date.year, expected.year); + } + if (expected.eraYear !== undefined) { + assertEq(date.eraYear, expected.eraYear); + } + if (expected.relatedYear !== undefined) { + assertEq(date.with({month: 1}).withCalendar("iso8601").year, expected.relatedYear); + } + assertEq(date.monthCode, expected.monthCode); + assertEq(date.day, expected.day); + + // Ensure Intl.DateTimeFormat matches |expected|. + let partsDate = dateFromParts(parts); + + if (expected.year !== undefined) { + assertEq(partsDate.year, expected.year); + } + if (expected.eraYear !== undefined) { + assertEq(partsDate.year, expected.eraYear); + } + if (partsDate.relatedYear !== undefined) { + // NB: relatedYear isn't used for range formats with chinese/dangi calendars. + assertEq(partsDate.relatedYear, expected.relatedYear); + } + assertEq(partsDate.monthCode, expected.monthCode); + assertEq(partsDate.day, expected.day); + } + } +} + +if (typeof reportCompare === "function") + reportCompare(true, true); diff --git a/js/src/vm/SelfHosting.cpp b/js/src/vm/SelfHosting.cpp index cce74053151..dcfa94f1ebc 100644 --- a/js/src/vm/SelfHosting.cpp +++ b/js/src/vm/SelfHosting.cpp @@ -1382,6 +1382,16 @@ static bool intrinsic_StringReplaceString(JSContext* cx, unsigned argc, return true; } +static bool intrinsic_RegExpSymbolProtocolOnPrimitiveCounter(JSContext* cx, + unsigned argc, + Value* vp) { + // This telemetry is to assess compatibility for tc39/ecma262#3009 and + // can later be removed (Bug 1953619). + cx->runtime()->setUseCounter( + cx->global(), JSUseCounter::REGEXP_SYMBOL_PROTOCOL_ON_PRIMITIVE); + return true; +} + static bool intrinsic_StringReplaceAllString(JSContext* cx, unsigned argc, Value* vp) { CallArgs args = CallArgsFromVp(argc, vp); @@ -2218,6 +2228,8 @@ static const JSFunctionSpec intrinsic_functions[] = { JS_INLINABLE_FN("RegExpSearcher", RegExpSearcher, 3, 0, RegExpSearcher), JS_INLINABLE_FN("RegExpSearcherLastLimit", RegExpSearcherLastLimit, 0, 0, RegExpSearcherLastLimit), + JS_FN("RegExpSymbolProtocolOnPrimitiveCounter", + intrinsic_RegExpSymbolProtocolOnPrimitiveCounter, 0, 0), JS_INLINABLE_FN("SameValue", js::obj_is, 2, 0, ObjectIs), JS_FN("SetCopy", SetObject::copy, 1, 0), JS_FN("SharedArrayBufferByteLength", diff --git a/js/src/wasm/WasmBinary.h b/js/src/wasm/WasmBinary.h index 631f0d5700d..c0c3ee2c87c 100644 --- a/js/src/wasm/WasmBinary.h +++ b/js/src/wasm/WasmBinary.h @@ -636,9 +636,18 @@ class Decoder { inline ValType Decoder::uncheckedReadValType(const TypeContext& types) { uint8_t code = uncheckedReadFixedU8(); switch (code) { + case uint8_t(TypeCode::AnyRef): + case uint8_t(TypeCode::EqRef): + case uint8_t(TypeCode::I31Ref): + case uint8_t(TypeCode::StructRef): + case uint8_t(TypeCode::ArrayRef): + case uint8_t(TypeCode::NullAnyRef): case uint8_t(TypeCode::FuncRef): + case uint8_t(TypeCode::NullFuncRef): case uint8_t(TypeCode::ExternRef): + case uint8_t(TypeCode::NullExternRef): case uint8_t(TypeCode::ExnRef): + case uint8_t(TypeCode::NullExnRef): return RefType::fromTypeCode(TypeCode(code), true); case uint8_t(TypeCode::Ref): case uint8_t(TypeCode::NullableRef): { diff --git a/js/sub.configure b/js/sub.configure deleted file mode 100644 index a331a9356bf..00000000000 --- a/js/sub.configure +++ /dev/null @@ -1,89 +0,0 @@ -# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- -# vim: set filetype=python: -# This Source Code Form is subject to the terms of the Mozilla Public -# License, v. 2.0. If a copy of the MPL was not distributed with this -# file, You can obtain one at http://mozilla.org/MPL/2.0/. - - -@depends(build_environment) -@imports("logging") -@imports(_from="__builtin__", _import="object") -@imports(_from="mozbuild.configure.util", _import="ConfigureOutputHandler") -def old_js_configure(build_env): - class PrefixOutput(object): - def __init__(self, prefix, fh): - self._fh = fh - self._begin_line = True - self._prefix = prefix - - def write(self, content): - if self._begin_line: - self._fh.write(self._prefix) - self._fh.write(("\n" + self._prefix).join(content.splitlines())) - self._begin_line = content.endswith("\n") - if self._begin_line: - self._fh.write("\n") - - def flush(self): - self._fh.flush() - - logger = logging.getLogger("moz.configure") - formatter = logging.Formatter("js/src> %(levelname)s: %(message)s") - for handler in logger.handlers: - handler.setFormatter(formatter) - if isinstance(handler, ConfigureOutputHandler): - handler._stdout = PrefixOutput("js/src> ", handler._stdout) - return os.path.join(build_env.topsrcdir, "js", "src", "old-configure") - - -@depends(old_configure.substs, mozconfig) -def old_js_configure_env(substs, mozconfig): - substs = dict(substs) - # Here, we mimic what we used to do from old-configure, which makes this - # all awkward. - - # Variables that were explicitly exported from old-configure, and those - # explicitly set in the environment when invoking old-configure, were - # automatically inherited from subconfigure. We assume the relevant ones - # have a corresponding AC_SUBST in old-configure, making them available - # in `substs`. - extra_env = {} - - for var in ( - "MOZ_DEV_EDITION", - "STLPORT_LIBS", - ): - if var in substs: - value = substs[var] - elif ( - mozconfig - and var in mozconfig - and not mozconfig[var][1].startswith("removed") - ): - value = mozconfig[var][0] - else: - continue - if isinstance(value, list): - value = " ".join(value) - extra_env[var] = value - - return extra_env - - -old_js_configure = old_configure_for(old_js_configure, extra_env=old_js_configure_env) -set_config("OLD_JS_CONFIGURE_SUBSTS", old_js_configure.substs) -set_config("OLD_JS_CONFIGURE_DEFINES", old_js_configure.defines) - - -@dependable -@imports("logging") -@imports(_from="mozbuild.configure.util", _import="ConfigureOutputHandler") -def post_old_js_configure(): - # Restore unprefixed logging. - formatter = logging.Formatter("%(levelname)s: %(message)s") - logger = logging.getLogger("moz.configure") - for handler in logger.handlers: - handler.setFormatter(formatter) - if isinstance(handler, ConfigureOutputHandler): - handler._stdout.flush() - handler._stdout = handler._stdout._fh diff --git a/js/xpconnect/src/XPCJSRuntime.cpp b/js/xpconnect/src/XPCJSRuntime.cpp index 92c4610268c..ad18fe7590b 100644 --- a/js/xpconnect/src/XPCJSRuntime.cpp +++ b/js/xpconnect/src/XPCJSRuntime.cpp @@ -754,10 +754,7 @@ void XPCJSRuntime::UnmarkSkippableJSHolders() { } void XPCJSRuntime::PrepareForForgetSkippable() { - nsCOMPtr obs = xpc::GetObserverService(); - if (obs) { - obs->NotifyObservers(nullptr, "cycle-collector-forget-skippable", nullptr); - } + nsCCUncollectableMarker::CleanupForForgetSkippable(); } void XPCJSRuntime::BeginCycleCollectionCallback(CCReason aReason) { @@ -2960,6 +2957,10 @@ static void SetUseCounterCallback(JSObject* obj, JSUseCounter counter) { case JSUseCounter::DATEPARSE_IMPL_DEF: SetUseCounter(obj, eUseCounter_custom_JS_dateparse_impl_def); return; + case JSUseCounter::REGEXP_SYMBOL_PROTOCOL_ON_PRIMITIVE: + SetUseCounter(obj, + eUseCounter_custom_JS_regexp_symbol_protocol_on_primitive); + return; case JSUseCounter::COUNT: break; } diff --git a/layout/base/PresShell.cpp b/layout/base/PresShell.cpp index fa10d805707..1d468d5fbd7 100644 --- a/layout/base/PresShell.cpp +++ b/layout/base/PresShell.cpp @@ -7097,10 +7097,8 @@ void PresShell::nsSynthMouseMoveEvent::Revoke() { } } -// static -nsIFrame* PresShell::EventHandler::GetNearestFrameContainingPresShell( - PresShell* aPresShell) { - nsViewManager* vm = aPresShell->GetViewManager(); +nsIFrame* PresShell::GetClosestAncestorFrameForAncestorView() const { + nsViewManager* vm = GetViewManager(); if (!vm) { return nullptr; } @@ -7195,6 +7193,9 @@ nsresult PresShell::HandleEvent(nsIFrame* aFrameForPresShell, bool aDontRetargetEvents, nsEventStatus* aEventStatus) { MOZ_ASSERT(aGUIEvent); + + AutoWeakFrame weakFrameForPresShell(aFrameForPresShell); + // Running tests must not expect that some mouse boundary events are fired // when something occurs in the parent process, e.g., when a popup is // opened/closed at the last mouse cursor position in the parent process (the @@ -7277,6 +7278,26 @@ nsresult PresShell::HandleEvent(nsIFrame* aFrameForPresShell, if (!CanHandleUserInputEvents(aGUIEvent)) { return NS_OK; } + // Before bug 1945988, we dispatched the mouse button event without + // committing composition and the editor will commit composition. + // However, for compatibility with the other browsers, we started + // committing composition before dispatching the mouse event. To keep + // the traditional behavior, we should compute aFrameForPresShell if it's + // reframed by dispatching the composition events (and input events) + // above. Otherwise, we stop dispatching the mouse button events newly in + // such case. + if (MOZ_UNLIKELY(!weakFrameForPresShell.IsAlive())) { + FlushPendingNotifications(FlushType::Layout); + if (MOZ_UNLIKELY(IsDestroying())) { + return NS_OK; + } + nsIFrame* const newFrameForPresShell = + GetClosestAncestorFrameForAncestorView(); + if (MOZ_UNLIKELY(!newFrameForPresShell)) { + return NS_OK; + } + weakFrameForPresShell = newFrameForPresShell; + } break; } default: @@ -7309,7 +7330,6 @@ nsresult PresShell::HandleEvent(nsIFrame* aFrameForPresShell, RefPtr rootPresShell = mPresContext->IsRoot() ? this : GetRootPresShell(); if (rootPresShell && rootPresShell->mSynthMouseMoveEvent.IsPending()) { - AutoWeakFrame frameForPresShellWeak(aFrameForPresShell); RefPtr synthMouseMoveEvent = rootPresShell->mSynthMouseMoveEvent.get(); synthMouseMoveEvent->Run(); @@ -7320,7 +7340,7 @@ nsresult PresShell::HandleEvent(nsIFrame* aFrameForPresShell, // recompute the frame. However, it could treat the user input on // unexpected element. Therefore, we should not do that until we'd // get a bug report caused by that. - if (MOZ_UNLIKELY(!frameForPresShellWeak.IsAlive())) { + if (MOZ_UNLIKELY(!weakFrameForPresShell.IsAlive())) { return NS_OK; } } @@ -7332,7 +7352,7 @@ nsresult PresShell::HandleEvent(nsIFrame* aFrameForPresShell, } EventHandler eventHandler(*this); - return eventHandler.HandleEvent(aFrameForPresShell, aGUIEvent, + return eventHandler.HandleEvent(weakFrameForPresShell, aGUIEvent, aDontRetargetEvents, aEventStatus); } @@ -7357,22 +7377,23 @@ bool PresShell::EventHandler::UpdateFocusSequenceNumber( return true; } -nsresult PresShell::EventHandler::HandleEvent(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - bool aDontRetargetEvents, - nsEventStatus* aEventStatus) { +nsresult PresShell::EventHandler::HandleEvent( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + bool aDontRetargetEvents, nsEventStatus* aEventStatus) { MOZ_ASSERT(aGUIEvent); MOZ_DIAGNOSTIC_ASSERT(aGUIEvent->IsTrusted()); MOZ_ASSERT(aEventStatus); - NS_ASSERTION(aFrameForPresShell, "aFrameForPresShell should be not null"); + NS_ASSERTION(aWeakFrameForPresShell.IsAlive(), + "aWeakFrameForPresShell should refer a frame"); // Update the latest focus sequence number with this new sequence number; // the next transasction that gets sent to the compositor will carry this over - if (UpdateFocusSequenceNumber(aFrameForPresShell, + if (UpdateFocusSequenceNumber(aWeakFrameForPresShell.GetFrame(), aGUIEvent->mFocusSequenceNumber)) { - if (aFrameForPresShell && StaticPrefs::apz_keyboard_focus_optimization()) { - aFrameForPresShell->SchedulePaint(nsIFrame::PAINT_COMPOSITE_ONLY); + if (aWeakFrameForPresShell.IsAlive() && + StaticPrefs::apz_keyboard_focus_optimization()) { + aWeakFrameForPresShell->SchedulePaint(nsIFrame::PAINT_COMPOSITE_ONLY); } } @@ -7385,7 +7406,8 @@ nsresult PresShell::EventHandler::HandleEvent(nsIFrame* aFrameForPresShell, mPresShell->RecordPointerLocation(aGUIEvent); - if (MaybeHandleEventWithAccessibleCaret(aFrameForPresShell, aGUIEvent, + const bool wasFrameForPresShellNull = !aWeakFrameForPresShell.GetFrame(); + if (MaybeHandleEventWithAccessibleCaret(aWeakFrameForPresShell, aGUIEvent, aEventStatus)) { // Handled by AccessibleCaretEventHub. return NS_OK; @@ -7397,14 +7419,19 @@ nsresult PresShell::EventHandler::HandleEvent(nsIFrame* aFrameForPresShell, } if (!aDontRetargetEvents) { + const DebugOnly wasFrameForPresShellAlive = + aWeakFrameForPresShell.IsAlive(); // If aGUIEvent should be handled in another PresShell, we should call its // HandleEvent() and do nothing here. nsresult rv = NS_OK; - if (MaybeHandleEventWithAnotherPresShell(aFrameForPresShell, aGUIEvent, + if (MaybeHandleEventWithAnotherPresShell(aWeakFrameForPresShell, aGUIEvent, aEventStatus, &rv)) { // Handled by another PresShell or nobody can handle the event. return rv; } + // If MaybeHandleEventWithAnotherPresShell() returns false, it shouldn't + // have run any script. So, aWeakFrameForPresShell must be alive. + MOZ_ASSERT_IF(wasFrameForPresShellAlive, aWeakFrameForPresShell.IsAlive()); } if (MaybeDiscardOrDelayKeyboardEvent(aGUIEvent)) { @@ -7413,13 +7440,13 @@ nsresult PresShell::EventHandler::HandleEvent(nsIFrame* aFrameForPresShell, } if (aGUIEvent->IsUsingCoordinates()) { - return HandleEventUsingCoordinates(aFrameForPresShell, aGUIEvent, + return HandleEventUsingCoordinates(aWeakFrameForPresShell, aGUIEvent, aEventStatus, aDontRetargetEvents); } // Activation events need to be dispatched even if no frame was found, since // we don't want the focus to be out of sync. - if (!aFrameForPresShell) { + if (MOZ_UNLIKELY(wasFrameForPresShellNull)) { if (!NS_EVENT_NEEDS_FRAME(aGUIEvent)) { // Push nullptr for both current event target content and frame since // there is no frame but the event does not require a frame. @@ -7441,23 +7468,28 @@ nsresult PresShell::EventHandler::HandleEvent(nsIFrame* aFrameForPresShell, return HandleEventAtFocusedContent(aGUIEvent, aEventStatus); } - return HandleEventWithFrameForPresShell(aFrameForPresShell, aGUIEvent, + return HandleEventWithFrameForPresShell(aWeakFrameForPresShell, aGUIEvent, aEventStatus); } nsresult PresShell::EventHandler::HandleEventUsingCoordinates( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsEventStatus* aEventStatus, bool aDontRetargetEvents) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aGUIEvent->IsUsingCoordinates()); MOZ_ASSERT(aEventStatus); + // The given frame has already been reframed. Then, we don't need to handle + // the event. + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive())) { + return NS_OK; + } + // Flush pending notifications to handle the event with the latest layout. // But if it causes destroying the frame for mPresShell, stop handling the // event. (why?) - AutoWeakFrame weakFrame(aFrameForPresShell); MaybeFlushPendingNotifications(aGUIEvent); - if (!weakFrame.IsAlive()) { + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive())) { *aEventStatus = nsEventStatus_eIgnore; return NS_OK; } @@ -7471,16 +7503,16 @@ nsresult PresShell::EventHandler::HandleEventUsingCoordinates( PointerLockManager::Unlock("TouchEvent"); } - nsIFrame* frameForPresShell = MaybeFlushThrottledStyles(aFrameForPresShell); - if (NS_WARN_IF(!frameForPresShell)) { + MaybeFlushThrottledStyles(aWeakFrameForPresShell); + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive())) { return NS_OK; } bool isCapturingContentIgnored = false; bool isCaptureRetargeted = false; - nsIFrame* rootFrameToHandleEvent = ComputeRootFrameToHandleEvent( - frameForPresShell, aGUIEvent, capturingContent, - &isCapturingContentIgnored, &isCaptureRetargeted); + AutoWeakFrame weakRootFrameToHandleEvent(ComputeRootFrameToHandleEvent( + aWeakFrameForPresShell.GetFrame(), aGUIEvent, capturingContent, + &isCapturingContentIgnored, &isCaptureRetargeted)); if (isCapturingContentIgnored) { capturingContent = nullptr; } @@ -7496,14 +7528,11 @@ nsresult PresShell::EventHandler::HandleEventUsingCoordinates( // Try to keep frame for following check, because frame can be damaged // during MaybeProcessPointerCapture. - { - AutoWeakFrame frameKeeper(rootFrameToHandleEvent); - PointerEventHandler::MaybeProcessPointerCapture(aGUIEvent); - // Prevent application crashes, in case damaged frame. - if (!frameKeeper.IsAlive()) { - NS_WARNING("Nothing to handle this event!"); - return NS_OK; - } + PointerEventHandler::MaybeProcessPointerCapture(aGUIEvent); + // Prevent application crashes, in case damaged frame. + if (MOZ_UNLIKELY(!weakRootFrameToHandleEvent.IsAlive())) { + NS_WARNING("Nothing to handle this event!"); + return NS_OK; } // Only capture mouse events and pointer events. @@ -7511,10 +7540,11 @@ nsresult PresShell::EventHandler::HandleEventUsingCoordinates( PointerEventHandler::GetPointerCapturingElement(aGUIEvent); if (pointerCapturingElement) { - rootFrameToHandleEvent = pointerCapturingElement->GetPrimaryFrame(); - if (!rootFrameToHandleEvent) { + weakRootFrameToHandleEvent = pointerCapturingElement->GetPrimaryFrame(); + if (!weakRootFrameToHandleEvent.IsAlive()) { return HandleEventWithPointerCapturingContentWithoutItsFrame( - aFrameForPresShell, aGUIEvent, pointerCapturingElement, aEventStatus); + aWeakFrameForPresShell, aGUIEvent, pointerCapturingElement, + aEventStatus); } } @@ -7530,11 +7560,11 @@ nsresult PresShell::EventHandler::HandleEventUsingCoordinates( // be used instead below. Also keep using the root frame if we're dealing // with a window-level mouse exit event since we want to start sending // mouse out events at the root EventStateManager. - EventTargetData eventTargetData(rootFrameToHandleEvent); + EventTargetData eventTargetData(weakRootFrameToHandleEvent.GetFrame()); if (!isCaptureRetargeted && !isWindowLevelMouseExit && !pointerCapturingElement) { if (!ComputeEventTargetFrameAndPresShellAtEventPoint( - rootFrameToHandleEvent, aGUIEvent, &eventTargetData)) { + weakRootFrameToHandleEvent, aGUIEvent, &eventTargetData)) { *aEventStatus = nsEventStatus_eIgnore; return NS_OK; } @@ -7590,7 +7620,7 @@ nsresult PresShell::EventHandler::HandleEventUsingCoordinates( // pointer event listeners change the layout, eventTargetData is // automatically updated. if (!DispatchPrecedingPointerEvent( - aFrameForPresShell, aGUIEvent, pointerCapturingElement, + aWeakFrameForPresShell, aGUIEvent, pointerCapturingElement, aDontRetargetEvents, &eventTargetData, aEventStatus)) { return NS_OK; } @@ -7663,20 +7693,24 @@ static ViewportType ViewportTypeForInputEventsRelativeToRoot() { } nsIFrame* PresShell::EventHandler::GetFrameToHandleNonTouchEvent( - nsIFrame* aRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent) { + AutoWeakFrame& aWeakRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aGUIEvent->mClass != eTouchEventClass); + if (MOZ_UNLIKELY(!aWeakRootFrameToHandleEvent.IsAlive())) { + return nullptr; + } + ViewportType viewportType = ViewportType::Layout; - if (aRootFrameToHandleEvent->Type() == LayoutFrameType::Viewport) { - nsPresContext* pc = aRootFrameToHandleEvent->PresContext(); + if (aWeakRootFrameToHandleEvent->Type() == LayoutFrameType::Viewport) { + nsPresContext* pc = aWeakRootFrameToHandleEvent->PresContext(); if (pc->IsChrome()) { viewportType = ViewportType::Visual; } else if (pc->IsRootContentDocumentCrossProcess()) { viewportType = ViewportTypeForInputEventsRelativeToRoot(); } } - RelativeTo relativeTo{aRootFrameToHandleEvent, viewportType}; + RelativeTo relativeTo{aWeakRootFrameToHandleEvent.GetFrame(), viewportType}; nsPoint eventPoint = nsLayoutUtils::GetEventCoordinatesRelativeTo(aGUIEvent, relativeTo); @@ -7691,7 +7725,7 @@ nsIFrame* PresShell::EventHandler::GetFrameToHandleNonTouchEvent( nsIFrame* targetFrame = FindFrameTargetedByInputEvent(aGUIEvent, relativeTo, eventPoint, flags); if (!targetFrame) { - return aRootFrameToHandleEvent; + return aWeakRootFrameToHandleEvent.GetFrame(); } if (targetFrame->PresShell() == mPresShell) { @@ -7703,10 +7737,9 @@ nsIFrame* PresShell::EventHandler::GetFrameToHandleNonTouchEvent( // If target is in a child document, we've not flushed its layout yet. PresShell* childPresShell = targetFrame->PresShell(); EventHandler childEventHandler(*childPresShell); - AutoWeakFrame weakFrame(aRootFrameToHandleEvent); bool layoutChanged = childEventHandler.MaybeFlushPendingNotifications(aGUIEvent); - if (!weakFrame.IsAlive()) { + if (!aWeakRootFrameToHandleEvent.IsAlive()) { // Stop handling the event if the root frame to handle event is destroyed // by the reflow. (but why?) return nullptr; @@ -7721,34 +7754,32 @@ nsIFrame* PresShell::EventHandler::GetFrameToHandleNonTouchEvent( targetFrame = FindFrameTargetedByInputEvent(aGUIEvent, relativeTo, eventPoint, flags); - return targetFrame ? targetFrame : aRootFrameToHandleEvent; + return targetFrame ? targetFrame : aWeakRootFrameToHandleEvent.GetFrame(); } bool PresShell::EventHandler::ComputeEventTargetFrameAndPresShellAtEventPoint( - nsIFrame* aRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent, EventTargetData* aEventTargetData) { - MOZ_ASSERT(aRootFrameToHandleEvent); MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aEventTargetData); if (aGUIEvent->mClass == eTouchEventClass) { nsIFrame* targetFrameAtTouchEvent = TouchManager::SetupTarget( - aGUIEvent->AsTouchEvent(), aRootFrameToHandleEvent); + aGUIEvent->AsTouchEvent(), aWeakRootFrameToHandleEvent.GetFrame()); aEventTargetData->SetFrameAndComputePresShell(targetFrameAtTouchEvent); return true; } nsIFrame* targetFrame = - GetFrameToHandleNonTouchEvent(aRootFrameToHandleEvent, aGUIEvent); + GetFrameToHandleNonTouchEvent(aWeakRootFrameToHandleEvent, aGUIEvent); aEventTargetData->SetFrameAndComputePresShell(targetFrame); return !!aEventTargetData->GetFrame(); } bool PresShell::EventHandler::DispatchPrecedingPointerEvent( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsIContent* aPointerCapturingContent, bool aDontRetargetEvents, EventTargetData* aEventTargetData, nsEventStatus* aEventStatus) { - MOZ_ASSERT(aFrameForPresShell); MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aEventTargetData); MOZ_ASSERT(aEventStatus); @@ -7764,13 +7795,30 @@ bool PresShell::EventHandler::DispatchPrecedingPointerEvent( // events from touch can be dispatched to different documents. We Pass the // original frame to PointerEventHandler, reentry PresShell::HandleEvent, // and do hit test for each point. - nsIFrame* targetFrame = aGUIEvent->mClass == eTouchEventClass - ? aFrameForPresShell - : aEventTargetData->GetFrame(); + auto targetFrameOrError = [&]() -> Result { + if (aGUIEvent->mClass == eTouchEventClass) { + // If aWeakFrameForPresShell has already been reframed before this is + // called, we don't need to handle the event. + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive())) { + return Err(NS_ERROR_FAILURE); + } + return aWeakFrameForPresShell.GetFrame(); + } + return aEventTargetData->GetFrame(); + }(); + if (MOZ_UNLIKELY(targetFrameOrError.isErr())) { + return false; + } + nsIFrame* targetFrame = targetFrameOrError.unwrap(); if (aPointerCapturingContent) { + Result overrideClickTargetOrError = + GetOverrideClickTarget(aGUIEvent, aWeakFrameForPresShell.GetFrame()); + if (MOZ_UNLIKELY(overrideClickTargetOrError.isErr())) { + return false; + } aEventTargetData->mOverrideClickTarget = - GetOverrideClickTarget(aGUIEvent, aFrameForPresShell); + overrideClickTargetOrError.unwrap(); aEventTargetData->mPresShell = PresShell::GetShellForEventTarget(nullptr, aPointerCapturingContent); if (!aEventTargetData->mPresShell) { @@ -7868,7 +7916,7 @@ class AutoEventTargetPointResetter { }; bool PresShell::EventHandler::MaybeHandleEventWithAccessibleCaret( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsEventStatus* aEventStatus) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aEventStatus); @@ -7898,7 +7946,7 @@ bool PresShell::EventHandler::MaybeHandleEventWithAccessibleCaret( do { EventTargetData eventTargetData(nullptr); if (!ComputeEventTargetFrameAndPresShellAtEventPoint( - aFrameForPresShell, aGUIEvent, &eventTargetData)) { + aWeakFrameForPresShell, aGUIEvent, &eventTargetData)) { break; } @@ -7989,7 +8037,8 @@ void PresShell::EventHandler::MaybeSynthesizeCompatMouseEventsForTouchEnd( if (MOZ_UNLIKELY(presShell->IsDestroying())) { break; } - nsIFrame* frameForPresShell = GetNearestFrameContainingPresShell(presShell); + nsIFrame* const frameForPresShell = + presShell->GetClosestAncestorFrameForAncestorView(); if (!frameForPresShell) { break; } @@ -8171,11 +8220,11 @@ nsIFrame* PresShell::EventHandler::GetFrameForHandlingEventWith( } // Otherwise, use nearest ancestor frame which includes the PresShell. - return GetNearestFrameContainingPresShell(retargetPresShell); + return retargetPresShell->GetClosestAncestorFrameForAncestorView(); } bool PresShell::EventHandler::MaybeHandleEventWithAnotherPresShell( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsEventStatus* aEventStatus, nsresult* aRv) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aEventStatus); @@ -8196,17 +8245,22 @@ bool PresShell::EventHandler::MaybeHandleEventWithAnotherPresShell( return false; } - nsIFrame* frame = GetFrameForHandlingEventWith(aGUIEvent, retargetEventDoc, - aFrameForPresShell); + nsIFrame* frame = GetFrameForHandlingEventWith( + aGUIEvent, retargetEventDoc, aWeakFrameForPresShell.GetFrame()); if (!frame) { // Nobody can handle this event. So, treat as handled by somebody to make // caller do nothing anymore. + // NOTE: If aWeakFrameForPresShell does not refer a frame (i.e., it's + // already been reframed) and aGUIEvent needs to be handled in mPresShell, + // we are here because GetFrameForHandlingEventWith() returns + // aWeakFrameForPresShell.GetFrame() as-is. In the case, we don't need to + // handle aGUIEvent, so, it's fine to return true from this method. return true; } // If we reached same frame as set to HandleEvent(), the caller should handle // the event by itself. - if (frame == aFrameForPresShell) { + if (frame == aWeakFrameForPresShell.GetFrame()) { return false; } @@ -8306,35 +8360,34 @@ bool PresShell::EventHandler::MaybeDiscardOrDelayMouseEvent( return true; } -nsIFrame* PresShell::EventHandler::MaybeFlushThrottledStyles( - nsIFrame* aFrameForPresShell) { +void PresShell::EventHandler::MaybeFlushThrottledStyles( + AutoWeakFrame& aWeakFrameForPresShell) { if (!GetDocument()) { - // XXX Only when mPresShell has document, we'll try to look for a frame - // containing mPresShell even if given frame is nullptr. Does this - // make sense? - return aFrameForPresShell; + return; } PresShell* rootPresShell = mPresShell->GetRootPresShell(); if (NS_WARN_IF(!rootPresShell)) { - return nullptr; + return; } Document* rootDocument = rootPresShell->GetDocument(); if (NS_WARN_IF(!rootDocument)) { - return nullptr; + return; } - AutoWeakFrame weakFrameForPresShell(aFrameForPresShell); { // scope for scriptBlocker. nsAutoScriptBlocker scriptBlocker; FlushThrottledStyles(*rootDocument); } - if (weakFrameForPresShell.IsAlive()) { - return aFrameForPresShell; + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive()) && + MOZ_LIKELY(!mPresShell->IsDestroying())) { + // FIXME: aWeakFrameForPresShell may be target content's frame if aGUIEvent + // of the caller is a touch event. So, we need to use different computation + // for such cases. + aWeakFrameForPresShell = + mPresShell->GetClosestAncestorFrameForAncestorView(); } - - return GetNearestFrameContainingPresShell(mPresShell); } nsIFrame* PresShell::EventHandler::ComputeRootFrameToHandleEvent( @@ -8459,7 +8512,7 @@ PresShell::EventHandler::ComputeRootFrameToHandleEventWithCapturingContent( nsresult PresShell::EventHandler::HandleEventWithPointerCapturingContentWithoutItsFrame( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsIContent* aPointerCapturingContent, nsEventStatus* aEventStatus) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(aPointerCapturingContent); @@ -8480,8 +8533,13 @@ PresShell::EventHandler::HandleEventWithPointerCapturingContentWithoutItsFrame( return NS_OK; } + Result overrideClickTargetOrError = + GetOverrideClickTarget(aGUIEvent, aWeakFrameForPresShell.GetFrame()); + if (MOZ_UNLIKELY(overrideClickTargetOrError.isErr())) { + return NS_OK; + } nsCOMPtr overrideClickTarget = - GetOverrideClickTarget(aGUIEvent, aFrameForPresShell); + overrideClickTargetOrError.unwrap(); // Dispatch events to the capturing content even it's frame is // destroyed. @@ -8635,15 +8693,22 @@ bool PresShell::EventHandler::MaybeHandleEventWithAnotherPresShell( } nsresult PresShell::EventHandler::HandleEventWithFrameForPresShell( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsEventStatus* aEventStatus) { MOZ_ASSERT(aGUIEvent); MOZ_ASSERT(!aGUIEvent->IsUsingCoordinates()); MOZ_ASSERT(!aGUIEvent->IsTargetedAtFocusedContent()); MOZ_ASSERT(aEventStatus); + // If aWeakFrameForPresShell has already been reframed before this is called, + // we don't need to handle the event. + if (MOZ_UNLIKELY(!aWeakFrameForPresShell.IsAlive())) { + return NS_OK; + } + AutoCurrentEventInfoSetter eventInfoSetter( - *this, EventTargetInfo(aGUIEvent->mMessage, aFrameForPresShell, nullptr)); + *this, EventTargetInfo(aGUIEvent->mMessage, + aWeakFrameForPresShell.GetFrame(), nullptr)); nsresult rv = NS_OK; if (mPresShell->GetCurrentEventFrame()) { @@ -12221,17 +12286,23 @@ void PresShell::NotifyStyleSheetServiceSheetRemoved(StyleSheet* aSheet, mDocument->ApplicableStylesChanged(); } -nsIContent* PresShell::EventHandler::GetOverrideClickTarget( - WidgetGUIEvent* aGUIEvent, nsIFrame* aFrame) { +Result PresShell::EventHandler::GetOverrideClickTarget( + WidgetGUIEvent* aGUIEvent, nsIFrame* aFrameForPresShell) { if (aGUIEvent->mMessage != eMouseUp) { return nullptr; } + // If aFrameForPresShell has already been reframed before this is called, + // we cannot keep handling aGUIEvent. + if (MOZ_UNLIKELY(!aFrameForPresShell)) { + return Err(NS_ERROR_FAILURE); + } + MOZ_ASSERT(aGUIEvent->mClass == eMouseEventClass); WidgetMouseEvent* mouseEvent = aGUIEvent->AsMouseEvent(); uint32_t flags = 0; - RelativeTo relativeTo{aFrame}; + RelativeTo relativeTo{aFrameForPresShell}; nsPoint eventPoint = nsLayoutUtils::GetEventCoordinatesRelativeTo(aGUIEvent, relativeTo); if (mouseEvent->mIgnoreRootScrollFrame) { diff --git a/layout/base/PresShell.h b/layout/base/PresShell.h index 7df62eebb87..2441a86f262 100644 --- a/layout/base/PresShell.h +++ b/layout/base/PresShell.h @@ -2073,6 +2073,13 @@ class PresShell final : public nsStubDocumentObserver, already_AddRefed GetParentPresShellForEventHandling(); + /** + * Return a frame for a view which is the closest ancestor view which has + * a frame. I.e., if the closest ancestor view does not have a frame, + * this returns a frame for the next closest ancestor view. + */ + [[nodiscard]] nsIFrame* GetClosestAncestorFrameForAncestorView() const; + /** * EventHandler is implementation of PresShell::HandleEvent(). */ @@ -2092,7 +2099,7 @@ class PresShell final : public nsStubDocumentObserver, * event info of mPresShell and calls HandleEventWithCurrentEventInfo() * to dispatch the event into the DOM tree. * - * @param aFrameForPresShell The frame for PresShell. If PresShell + * @param aWeakFrameForPresShell The frame for PresShell. If PresShell * has root frame, it should be set. * Otherwise, a frame which contains the * PresShell should be set instead. I.e., @@ -2106,10 +2113,9 @@ class PresShell final : public nsStubDocumentObserver, * different PresShell. * @param aEventStatus [in/out] EventStatus of aGUIEvent. */ - MOZ_CAN_RUN_SCRIPT - nsresult HandleEvent(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, bool aDontRetargetEvents, - nsEventStatus* aEventStatus); + MOZ_CAN_RUN_SCRIPT nsresult HandleEvent( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + bool aDontRetargetEvents, nsEventStatus* aEventStatus); /** * HandleEventWithTarget() tries to dispatch aEvent on aContent after @@ -2149,7 +2155,6 @@ class PresShell final : public nsStubDocumentObserver, private: static bool InZombieDocument(nsIContent* aContent); - static nsIFrame* GetNearestFrameContainingPresShell(PresShell* aPresShell); static nsIPrincipal* GetDocumentPrincipalToCompareWithBlacklist( PresShell& aPresShell); @@ -2157,7 +2162,7 @@ class PresShell final : public nsStubDocumentObserver, * HandleEventUsingCoordinates() handles aGUIEvent whose * IsUsingCoordinates() returns true with the following helper methods. * - * @param aFrameForPresShell The frame for PresShell. See + * @param aWeakFrameForPresShell The frame for PresShell. See * explanation of HandleEvent() for the * details. * @param aGUIEvent The handling event. Make sure that @@ -2166,11 +2171,9 @@ class PresShell final : public nsStubDocumentObserver, * @param aDontRetargetEvents true if we've already retarget document. * Otherwise, false. */ - MOZ_CAN_RUN_SCRIPT - nsresult HandleEventUsingCoordinates(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - nsEventStatus* aEventStatus, - bool aDontRetargetEvents); + MOZ_CAN_RUN_SCRIPT nsresult HandleEventUsingCoordinates( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + nsEventStatus* aEventStatus, bool aDontRetargetEvents); /** * EventTargetData struct stores a set of a PresShell (event handler), @@ -2311,38 +2314,36 @@ class PresShell final : public nsStubDocumentObserver, * GetFrameToHandleNonTouchEvent() returns a frame to handle the event. * This may flush pending layout if the target is in child PresShell. * - * @param aRootFrameToHandleEvent The root frame to handle the event. + * @param aWeakRootFrameToHandleEvent The root frame to handle the event. * @param aGUIEvent The handling event. * @return The frame which should handle the * event. nullptr if the caller should * stop handling the event. */ - MOZ_CAN_RUN_SCRIPT - nsIFrame* GetFrameToHandleNonTouchEvent(nsIFrame* aRootFrameToHandleEvent, - WidgetGUIEvent* aGUIEvent); + MOZ_CAN_RUN_SCRIPT nsIFrame* GetFrameToHandleNonTouchEvent( + AutoWeakFrame& aWeakRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent); /** * ComputeEventTargetFrameAndPresShellAtEventPoint() computes event * target frame at the event point of aGUIEvent and set it to * aEventTargetData. * - * @param aRootFrameToHandleEvent The root frame to handle aGUIEvent. + * @param aWeakRootFrameToHandleEvent The root frame to handle aGUIEvent. * @param aGUIEvent The handling event. * @param aEventTargetData [out] Its frame and PresShell will * be set. * @return true if the caller can handle the * event. Otherwise, false. */ - MOZ_CAN_RUN_SCRIPT - bool ComputeEventTargetFrameAndPresShellAtEventPoint( - nsIFrame* aRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent, + MOZ_CAN_RUN_SCRIPT bool ComputeEventTargetFrameAndPresShellAtEventPoint( + AutoWeakFrame& aWeakRootFrameToHandleEvent, WidgetGUIEvent* aGUIEvent, EventTargetData* aEventTargetData); /** * DispatchPrecedingPointerEvent() dispatches preceding pointer event for * aGUIEvent if Pointer Events is enabled. * - * @param aFrameForPresShell The frame for PresShell. See + * @param aWeakFrameForPresShell The frame for PresShell. See * explanation of HandleEvent() for the * details. * @param aGUIEvent The handled event. @@ -2358,13 +2359,10 @@ class PresShell final : public nsStubDocumentObserver, * @return true if the caller can handle the * event. Otherwise, false. */ - MOZ_CAN_RUN_SCRIPT - bool DispatchPrecedingPointerEvent(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - nsIContent* aPointerCapturingContent, - bool aDontRetargetEvents, - EventTargetData* aEventTargetData, - nsEventStatus* aEventStatus); + MOZ_CAN_RUN_SCRIPT bool DispatchPrecedingPointerEvent( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + nsIContent* aPointerCapturingContent, bool aDontRetargetEvents, + EventTargetData* aEventTargetData, nsEventStatus* aEventStatus); /** * MaybeDiscardEvent() checks whether it's safe to handle aGUIEvent right @@ -2421,7 +2419,7 @@ class PresShell final : public nsStubDocumentObserver, * MaybeHandleEventWithAnotherPresShell() may handle aGUIEvent with another * PresShell. * - * @param aFrameForPresShell The frame for PresShell. See + * @param aWeakFrameForPresShell The frame for PresShell. See * explanation of HandleEvent() for the * details. * @param aGUIEvent Handling event. @@ -2434,11 +2432,9 @@ class PresShell final : public nsStubDocumentObserver, * the event. Note that when no PresShell * can handle the event, this returns true. */ - MOZ_CAN_RUN_SCRIPT - bool MaybeHandleEventWithAnotherPresShell(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - nsEventStatus* aEventStatus, - nsresult* aRv); + MOZ_CAN_RUN_SCRIPT bool MaybeHandleEventWithAnotherPresShell( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + nsEventStatus* aEventStatus, nsresult* aRv); MOZ_CAN_RUN_SCRIPT nsresult RetargetEventToParent(WidgetGUIEvent* aGUIEvent, @@ -2448,17 +2444,17 @@ class PresShell final : public nsStubDocumentObserver, * MaybeHandleEventWithAccessibleCaret() may handle aGUIEvent with * AccessibleCaretEventHub if it's necessary. * - * @param aFrameForPresShell The frame for PresShell. See explanation of - * HandleEvent() for the details. + * @param aWeakFrameForPresShell + * The frame for PresShell. See explanation of + * HandleEvent() for the details. * @param aGUIEvent Event may be handled by AccessibleCaretEventHub. * @param aEventStatus [in/out] EventStatus of aGUIEvent. * @return true if AccessibleCaretEventHub handled the * event and caller shouldn't keep handling it. */ - MOZ_CAN_RUN_SCRIPT - bool MaybeHandleEventWithAccessibleCaret(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - nsEventStatus* aEventStatus); + MOZ_CAN_RUN_SCRIPT bool MaybeHandleEventWithAccessibleCaret( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + nsEventStatus* aEventStatus); /** * Maybe dispatch mouse events for aTouchEnd. This should be called after @@ -2497,10 +2493,10 @@ class PresShell final : public nsStubDocumentObserver, /** * MaybeFlushThrottledStyles() tries to flush pending animation. If it's - * flushed and then aFrameForPresShell is destroyed, returns new frame - * which contains mPresShell. + * flushed and then aWeakFrameForPresShell is reframed, this updates it to + * track the new frame (or keep nullptr if it's not available anymore). * - * @param aFrameForPresShell The frame for PresShell. See + * @param aWeakFrameForPresShell The frame for PresShell. See * explanation of HandleEvent() for the * details. This can be nullptr. * @return Maybe new frame for mPresShell. @@ -2508,8 +2504,8 @@ class PresShell final : public nsStubDocumentObserver, * and hasn't been destroyed, returns * aFrameForPresShell as-is. */ - MOZ_CAN_RUN_SCRIPT - nsIFrame* MaybeFlushThrottledStyles(nsIFrame* aFrameForPresShell); + MOZ_CAN_RUN_SCRIPT void MaybeFlushThrottledStyles( + AutoWeakFrame& aWeakFrameForPresShell); /** * ComputeRootFrameToHandleEvent() returns root frame to handle the event. @@ -2590,7 +2586,7 @@ class PresShell final : public nsStubDocumentObserver, * aGUIEvent with aPointerCapturingContent when it does not have primary * frame. * - * @param aFrameForPresShell The frame for PresShell. See + * @param aWeakFrameForPresShell The frame for PresShell. See * explanation of HandleEvent() for the * details. * @param aGUIEvent The handling event. @@ -2598,11 +2594,11 @@ class PresShell final : public nsStubDocumentObserver, * Must not be nullptr. * @param aEventStatus [in/out] The event status of aGUIEvent. * @return Basically, result of - * HandeEventWithTraget(). + * HandleEventWithTarget(). */ - MOZ_CAN_RUN_SCRIPT - nsresult HandleEventWithPointerCapturingContentWithoutItsFrame( - nsIFrame* aFrameForPresShell, WidgetGUIEvent* aGUIEvent, + MOZ_CAN_RUN_SCRIPT nsresult + HandleEventWithPointerCapturingContentWithoutItsFrame( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, nsIContent* aPointerCapturingContent, nsEventStatus* aEventStatus); /** @@ -2675,16 +2671,15 @@ class PresShell final : public nsStubDocumentObserver, * HandleEventWithFrameForPresShell() handles aGUIEvent with the frame * for mPresShell. * - * @param aFrameForPresShell The frame for mPresShell. + * @param aWeakFrameForPresShell The frame for mPresShell. * @param aGUIEvent The handling event. It shouldn't be * handled with using coordinates nor * handled at focused content. * @param aEventStatus [in/out] The status of aGUIEvent. */ - MOZ_CAN_RUN_SCRIPT - nsresult HandleEventWithFrameForPresShell(nsIFrame* aFrameForPresShell, - WidgetGUIEvent* aGUIEvent, - nsEventStatus* aEventStatus); + MOZ_CAN_RUN_SCRIPT nsresult HandleEventWithFrameForPresShell( + AutoWeakFrame& aWeakFrameForPresShell, WidgetGUIEvent* aGUIEvent, + nsEventStatus* aEventStatus); /** * HandleEventWithCurrentEventInfo() prepares to dispatch aEvent into the @@ -2795,8 +2790,13 @@ class PresShell final : public nsStubDocumentObserver, LayoutDeviceIntPoint& aTargetPt, nsIWidget* aRootWidget); - nsIContent* GetOverrideClickTarget(WidgetGUIEvent* aGUIEvent, - nsIFrame* aFrame); + /** + * Return the override click target if there is for aGUIEvent. Otherwise, + * nullptr. And this may return error if the caller shouldn't keep handling + * the event. + */ + [[nodiscard]] Result GetOverrideClickTarget( + WidgetGUIEvent* aGUIEvent, nsIFrame* aFrameForPresShell); /** * DispatchEvent() tries to dispatch aEvent and notifies aEventStateManager @@ -2921,7 +2921,7 @@ class PresShell final : public nsStubDocumentObserver, bool UpdateFocusSequenceNumber(nsIFrame* aFrameForPresShell, uint64_t aEventFocusSequenceNumber); - OwningNonNull mPresShell; + MOZ_KNOWN_LIVE const OwningNonNull mPresShell; AutoCurrentEventInfoSetter* mCurrentEventInfoSetter; static TimeStamp sLastInputCreated; static TimeStamp sLastInputProcessed; diff --git a/layout/base/UniqueOrNonOwningPtr.h b/layout/base/UniqueOrNonOwningPtr.h new file mode 100644 index 00000000000..172438c2f12 --- /dev/null +++ b/layout/base/UniqueOrNonOwningPtr.h @@ -0,0 +1,139 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +#ifndef mozilla_UniqueOrNonOwningPtr_h +#define mozilla_UniqueOrNonOwningPtr_h + +#include +#include + +#include "mozilla/Assertions.h" + +namespace mozilla { + +template +class UniqueOrNonOwningPtr; + +namespace detail { + +template +struct UniqueOfUniqueOrNonOwningSelector { + using SingleObject = UniqueOrNonOwningPtr; +}; + +template +struct UniqueOfUniqueOrNonOwningSelector; + +template +struct UniqueOfUniqueOrNonOwningSelector; + +} // namespace detail + +// `mozilla::MakeUnique` equivalent, with the same set of advantages. +// Non-owning case doesn't need this since there's no allocation. +// See below as to why only SingleObject case is supported. +template +typename detail::UniqueOfUniqueOrNonOwningSelector::SingleObject +MakeUniqueOfUniqueOrNonOwning(Args&&... aArgs) { + return UniqueOrNonOwningPtr::UniquelyOwning(new T(std::forward(aArgs)...)); +} + +/** + * A pointer that is either: + * * Uniquely-owning, as if `std::unique_ptr`/`mozilla::UniquePtr`, or + * * Non-owning, as if raw pointer. + * + * Overall, it behaves like `mozilla::Variant>`, but more + * compact. It may be helpful if you are mostly referencing existing data type + * of significant size, but sometimes generate a modified copy and refer to that. + * + * Usage notes: + * * Ownership: This structure makes ownership tracking harder. It is the + * caller's responsibility to ensure that, in the non-owning case, the data + * outlives this pointer. + * * (Ab)using the lowest bit: Owning state is tagged inline in the lowest bit, + * which is set for uniquely-owning data. It does not work with a byte-aligned + * data types, or members of a packed struct. There are asserts to try and catch + * this as early as possible. + * + * TODO(dshin): This lacks support for things that `mozilla::UniquePtr` supports - + * however, these cases will fail to compile. + * * Deleter support (Even stateless ones) + * * Interconversion (Pointing to derived from base pointer) + * * T[] + */ +template +class UniqueOrNonOwningPtr { + public: + // Check to make sure we can take on non-owning pointer to stack. + static_assert(alignof(T) != 1, "Can't support data aligned to byte boundaries."); + // Standard guarantees the null pointer value to be integer 0. + UniqueOrNonOwningPtr() : mBits{0} {} + UniqueOrNonOwningPtr(const UniqueOrNonOwningPtr&) = delete; + UniqueOrNonOwningPtr(UniqueOrNonOwningPtr&& aOther) : mBits{aOther.mBits} { + // "Release" the other one. + aOther.mBits = 0; + } + ~UniqueOrNonOwningPtr() { + if (IsUniquelyOwning()) { + delete get(); + } + } + UniqueOrNonOwningPtr& operator=(const UniqueOrNonOwningPtr& aOther) = delete; + UniqueOrNonOwningPtr& operator=(UniqueOrNonOwningPtr&& aOther) { + mBits = aOther.mBits; + // "Release" the other one. + aOther.mBits = 0; + return *this; + } + + static UniqueOrNonOwningPtr UniquelyOwning(T* aPtr) { + MOZ_ASSERT(aPtr, "Passing in null pointer as owning?"); + const uintptr_t bits = reinterpret_cast(aPtr); + MOZ_ASSERT((bits & kUniquelyOwningBit) == 0, "Odd-aligned owning pointer?"); + return UniqueOrNonOwningPtr{bits | kUniquelyOwningBit}; + } + + static UniqueOrNonOwningPtr NonOwning(T* aPtr) { + const uintptr_t bits = reinterpret_cast(aPtr); + MOZ_ASSERT((bits & kUniquelyOwningBit) == 0, "Odd-aligned non-owning pointer?"); + return UniqueOrNonOwningPtr{bits}; + } + + std::add_lvalue_reference_t operator*() const { + MOZ_ASSERT(get(), + "dereferencing a UniqueOrNonOwningPtr containing nullptr with *"); + return *get(); + } + + T* operator->() const { + MOZ_ASSERT(get(), + "dereferencing a UniqueOrNonOwningPtr containing nullptr with ->"); + return get(); + } + + explicit operator bool() const { return get() != nullptr; } + + T* get() const { return reinterpret_cast(mBits & ~kUniquelyOwningBit); } + + private: + bool IsUniquelyOwning() const { + return (mBits & kUniquelyOwningBit) != 0; + } + + // Bit for tracking uniquely-owning vs non-owning status. Check usage notes + // in the main comment block. + // NOTE: A null pointer constant has a guarantee on being integer literal 0. + static constexpr uintptr_t kUniquelyOwningBit = 1; + explicit UniqueOrNonOwningPtr(uintptr_t aValue) : mBits{aValue} {} + uintptr_t mBits; +}; + +// Unsupported +template +class UniqueOrNonOwningPtr; + +} // namespace mozilla + +#endif diff --git a/layout/base/gtest/TestUniqueOrNonOwningPtr.cpp b/layout/base/gtest/TestUniqueOrNonOwningPtr.cpp new file mode 100644 index 00000000000..f25a6ca1121 --- /dev/null +++ b/layout/base/gtest/TestUniqueOrNonOwningPtr.cpp @@ -0,0 +1,86 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gtest/gtest.h" + +#include "UniqueOrNonOwningPtr.h" + +using mozilla::MakeUniqueOfUniqueOrNonOwning; +using mozilla::UniqueOrNonOwningPtr; + +TEST(UniqueOrNonOwningPtrTest, Empty) +{ +#ifdef HAVE_64BIT_BUILD + using T = uint64_t; +#else + using T = uint32_t; +#endif + using Ptr = UniqueOrNonOwningPtr; + + static_assert(sizeof(Ptr) == sizeof(T), "Unexpected size bloat"); + + Ptr ptr; + EXPECT_FALSE(ptr); + EXPECT_EQ(ptr.get(), nullptr); +} + +struct Foo { + uint64_t mA; + uint32_t mB; + + Foo(uint64_t aA, uint32_t aB) : mA{aA}, mB{aB} {} + Foo(const Foo& aOther) = default; + + bool operator==(const Foo& aOther) const { + return mA == aOther.mA && mB == aOther.mB; + } +}; + +TEST(UniqueOrNonOwningPtrTest, NonOwningStruct) +{ + using T = Foo; + using Ptr = UniqueOrNonOwningPtr; + + T val{12, 918}; + Ptr ptr = Ptr::NonOwning(&val); + EXPECT_TRUE(ptr); + EXPECT_EQ(ptr.get(), &val); + EXPECT_EQ(*ptr, val); + EXPECT_EQ(ptr->mA, val.mA); + EXPECT_EQ(ptr->mB, val.mB); + + Ptr ptr2 = std::move(ptr); + EXPECT_FALSE(ptr); + EXPECT_EQ(ptr.get(), nullptr); + EXPECT_TRUE(ptr2); + EXPECT_EQ(ptr2.get(), &val); + EXPECT_EQ(*ptr2, val); + EXPECT_EQ(ptr2->mA, val.mA); + EXPECT_EQ(ptr2->mB, val.mB); +} + +TEST(UniqueOrNonOwningPtrTest, OwnedStruct) +{ + using T = Foo; + using Ptr = UniqueOrNonOwningPtr; + + T copy{12, 918}; + Ptr ptr = MakeUniqueOfUniqueOrNonOwning(copy); + EXPECT_TRUE(ptr); + EXPECT_NE(ptr.get(), nullptr); + EXPECT_NE(ptr.get(), ©); + EXPECT_EQ(*ptr, copy); + EXPECT_EQ(ptr->mA, copy.mA); + EXPECT_EQ(ptr->mB, copy.mB); + + Ptr ptr2 = std::move(ptr); + EXPECT_FALSE(ptr); + EXPECT_EQ(ptr.get(), nullptr); + EXPECT_TRUE(ptr2); + EXPECT_NE(ptr2.get(), nullptr); + EXPECT_NE(ptr2.get(), ©); + EXPECT_EQ(*ptr2, copy); + EXPECT_EQ(ptr2->mA, copy.mA); + EXPECT_EQ(ptr2->mB, copy.mB); +} diff --git a/layout/base/gtest/moz.build b/layout/base/gtest/moz.build index b0828552954..e35850223ea 100644 --- a/layout/base/gtest/moz.build +++ b/layout/base/gtest/moz.build @@ -8,6 +8,7 @@ UNIFIED_SOURCES += [ "TestAccessibleCaretEventHub.cpp", "TestAccessibleCaretManager.cpp", + "TestUniqueOrNonOwningPtr.cpp", ] # THE MOCK_METHOD2 macro from gtest triggers this clang warning and it's hard diff --git a/layout/base/moz.build b/layout/base/moz.build index fe8df727826..936121d658b 100644 --- a/layout/base/moz.build +++ b/layout/base/moz.build @@ -62,6 +62,7 @@ EXPORTS += [ "nsStyleSheetService.h", "StackArena.h", "TouchManager.h", + "UniqueOrNonOwningPtr.h", "Units.h", "UnitTransforms.h", "WordMovementType.h", diff --git a/layout/base/tests/chrome/printpreview_helper.xhtml b/layout/base/tests/chrome/printpreview_helper.xhtml index 3ebfde7ffa2..ef54df20726 100644 --- a/layout/base/tests/chrome/printpreview_helper.xhtml +++ b/layout/base/tests/chrome/printpreview_helper.xhtml @@ -1950,6 +1950,35 @@ async function runTest65() { }, }); await SpecialPowers.popPrefEnv(); + requestAnimationFrame(() => setTimeout(runTest66)); +} + +// Basic test for black-and-white rendering. This is mostly a crashtest for +// bug 1961975, but it also serves to verify that a blank page looks the same +// whether rendered in color vs. in black-and-white. +// (Actual content -- even black-and-white content -- is harder to test because +// our black-and-white filter adds some subtle antialiasing effects.) +async function runTest66() { + // Note: these test/ref URIs are both blank; we're testing a blank page + // rendered under two different configurations. The HTML comments are + // only there to make the data-URIs different, so that a navigation + // actually happens -- and the 'load' event fires, etc. -- when we set the + // reference-case-URI. + let test = `data:text/html,`; + let ref = `data:text/html,`; + + await compareFiles(test, ref, { + test: { + settings: { + printInColor: false, + }, + }, + ref: { + settings: { + printInColor: true, + }, + }, + }); finish(); } diff --git a/layout/generic/nsIFrame.cpp b/layout/generic/nsIFrame.cpp index 09122b069e7..fe05efa67f9 100644 --- a/layout/generic/nsIFrame.cpp +++ b/layout/generic/nsIFrame.cpp @@ -5479,7 +5479,8 @@ static bool IsRelevantBlockFrame(const nsIFrame* aFrame) { if (!aFrame->IsBlockOutside()) { return false; } - if (aFrame->GetContent()->IsInNativeAnonymousSubtree()) { + if (aFrame->GetContent() && + aFrame->GetContent()->IsInNativeAnonymousSubtree()) { // This helps skipping things like scrollbar parts. return false; } @@ -9526,12 +9527,14 @@ nsresult nsIFrame::PeekOffsetForParagraph(PeekOffsetStruct* aPos) { if (reachedLimit) { // no "stop frame" found aPos->mResultContent = frame->GetContent(); - if (ShadowRoot* shadowRoot = - aPos->mResultContent->GetShadowRootForSelection()) { - // Even if there's no children for this node, - // the elements inside the shadow root is still - // selectable - aPos->mResultContent = shadowRoot; + if (aPos->mResultContent) { + if (ShadowRoot* shadowRoot = + aPos->mResultContent->GetShadowRootForSelection()) { + // Even if there's no children for this node, + // the elements inside the shadow root is still + // selectable + aPos->mResultContent = shadowRoot; + } } if (aPos->mDirection == eDirPrevious) { aPos->mContentOffset = 0; diff --git a/layout/generic/nsPageFrame.cpp b/layout/generic/nsPageFrame.cpp index 6dd3e0ab721..9e98c354ac9 100644 --- a/layout/generic/nsPageFrame.cpp +++ b/layout/generic/nsPageFrame.cpp @@ -776,11 +776,7 @@ nsPageContentFrame* nsPageFrame::PageContentFrame() const { nsSize nsPageFrame::ComputePageSize() const { // Compute the expected page-size. - const nsPageFrame* const frame = - StaticPrefs::layout_css_allow_mixed_page_sizes() - ? this - : static_cast(FirstContinuation()); - const StylePageSize& pageSize = frame->PageContentFrame()->StylePage()->mSize; + const StylePageSize& pageSize = PageContentFrame()->StylePage()->mSize; nsSize size = PresContext()->GetPageSize(); if (pageSize.IsSize()) { // Use the specified size, @@ -822,18 +818,8 @@ float nsPageFrame::ComputeSinglePPSPageSizeScale( MOZ_ASSERT(aContentPageSize == ComputePageSize(), "Incorrect content page size"); - // Check for the simplest case first, an auto page-size which requires no - // scaling at all. - { - const nsPageFrame* const frame = - StaticPrefs::layout_css_allow_mixed_page_sizes() - ? this - : static_cast(FirstContinuation()); - const StylePageSize& pageSize = - frame->PageContentFrame()->StylePage()->mSize; - if (pageSize.IsAuto()) { - return 1.0f; - } + if (PageContentFrame()->StylePage()->mSize.IsAuto()) { + return 1.0f; } const nsContainerFrame* const parent = GetParent(); @@ -864,10 +850,6 @@ float nsPageFrame::ComputeSinglePPSPageSizeScale( } double nsPageFrame::GetPageOrientationRotation(nsSharedPageData* aPD) const { - if (!StaticPrefs::layout_css_page_orientation_enabled()) { - return 0.0; - } - if (aPD->PagesPerSheetInfo()->mNumPages == 1 && !PresContext()->IsScreen() && aPD->mPrintSettings->GetOutputFormat() != nsIPrintSettings::kOutputFormatPDF) { diff --git a/layout/style/GeckoBindings.cpp b/layout/style/GeckoBindings.cpp index 6a74c9fde3a..53f26981b2c 100644 --- a/layout/style/GeckoBindings.cpp +++ b/layout/style/GeckoBindings.cpp @@ -1285,8 +1285,8 @@ void AssertIsMainThreadOrServoFontMetricsLocked() { GeckoFontMetrics Gecko_GetFontMetrics(const nsPresContext* aPresContext, bool aIsVertical, const nsStyleFont* aFont, - Length aFontSize, bool aUseUserFontSet, - bool aRetrieveMathScales) { + Length aFontSize, + StyleQueryFontMetricsFlags flags) { AutoWriteLock guard(*sServoFFILock); // Getting font metrics can require some main thread only work to be @@ -1302,13 +1302,14 @@ GeckoFontMetrics Gecko_GetFontMetrics(const nsPresContext* aPresContext, nsPresContext* presContext = const_cast(aPresContext); RefPtr fm = nsLayoutUtils::GetMetricsFor( - presContext, aIsVertical, aFont, aFontSize, aUseUserFontSet); + presContext, aIsVertical, aFont, aFontSize, + bool(flags & StyleQueryFontMetricsFlags::USE_USER_FONT_SET)); auto* fontGroup = fm->GetThebesFontGroup(); - auto metrics = fontGroup->GetMetricsForCSSUnits(fm->Orientation()); + auto metrics = fontGroup->GetMetricsForCSSUnits(fm->Orientation(), flags); float scriptPercentScaleDown = 0; float scriptScriptPercentScaleDown = 0; - if (aRetrieveMathScales) { + if (flags & StyleQueryFontMetricsFlags::NEEDS_MATH_SCALES) { RefPtr font = fontGroup->GetFirstValidFont(); if (font->TryGetMathTable()) { scriptPercentScaleDown = static_cast( diff --git a/layout/style/GeckoBindings.h b/layout/style/GeckoBindings.h index c7cf59c2661..ba4b3b64165 100644 --- a/layout/style/GeckoBindings.h +++ b/layout/style/GeckoBindings.h @@ -472,11 +472,9 @@ struct GeckoFontMetrics { float mScriptScriptPercentScaleDown; // zero is invalid or means not found. }; -GeckoFontMetrics Gecko_GetFontMetrics(const nsPresContext*, bool is_vertical, - const nsStyleFont* font, - mozilla::Length font_size, - bool use_user_font_set, - bool retrieve_math_scales); +GeckoFontMetrics Gecko_GetFontMetrics( + const nsPresContext*, bool is_vertical, const nsStyleFont* font, + mozilla::Length font_size, mozilla::StyleQueryFontMetricsFlags flags); mozilla::StyleSheet* Gecko_StyleSheet_Clone(const mozilla::StyleSheet* aSheet); diff --git a/layout/style/ServoBindings.toml b/layout/style/ServoBindings.toml index 0ae7445cfd4..ae62e3423cd 100644 --- a/layout/style/ServoBindings.toml +++ b/layout/style/ServoBindings.toml @@ -634,7 +634,8 @@ cbindgen-types = [ { gecko = "StyleInert", servo = "crate::values::computed::ui::Inert" }, { gecko = "StyleMargin", servo = "crate::values::computed::length::Margin" }, { gecko = "StyleGenericAnchorFunction", servo = "crate::values::generics::position::GenericAnchorFunction" }, - { gecko = "StylePositionProperty", servo = "crate::values::computed::PositionProperty"}, + { gecko = "StylePositionProperty", servo = "crate::values::computed::PositionProperty" }, + { gecko = "StyleQueryFontMetricsFlags", servo = "crate::gecko::media_queries::QueryFontMetricsFlags" }, ] mapped-generic-types = [ diff --git a/layout/svg/SVGObserverUtils.cpp b/layout/svg/SVGObserverUtils.cpp index b74f5f72692..14a5732ccbe 100644 --- a/layout/svg/SVGObserverUtils.cpp +++ b/layout/svg/SVGObserverUtils.cpp @@ -495,6 +495,18 @@ void SVGIDRenderingObserver::OnRenderingChange() { } } +// Convenience function to return aFrame->GetContent() as an Element* if the +// content pointer is non-null (or just return nullptr otherwise). +// (AsElement itself isn't callable on null pointers.) +static Element* GetFrameContentAsElement(nsIFrame* aFrame) { + MOZ_ASSERT(aFrame, "Expecting a non-null frame"); + auto* content = aFrame->GetContent(); + if (content) { + return content->AsElement(); + } + return nullptr; +} + class SVGRenderingObserverProperty : public SVGIDRenderingObserver { public: NS_DECL_ISUPPORTS @@ -504,7 +516,7 @@ class SVGRenderingObserverProperty : public SVGIDRenderingObserver { uint32_t aCallbacks = kAttributeChanged | kContentAppended | kContentInserted | kContentWillBeRemoved, TargetIsValidCallback aTargetIsValidCallback = nullptr) - : SVGIDRenderingObserver(aReference, aFrame->GetContent()->AsElement(), + : SVGIDRenderingObserver(aReference, GetFrameContentAsElement(aFrame), aReferenceImage, aCallbacks, aTargetIsValidCallback), mFrameReference(aFrame) {} @@ -935,7 +947,7 @@ class SVGFilterObserverListForCSSProp final : public SVGFilterObserverList { SVGFilterObserverListForCSSProp(Span aFilters, nsIFrame* aFilteredFrame) : SVGFilterObserverList(aFilters, - aFilteredFrame->GetContent()->AsElement(), + GetFrameContentAsElement(aFilteredFrame), aFilteredFrame) {} protected: @@ -1080,7 +1092,7 @@ class SVGTemplateElementObserver : public SVGIDRenderingObserver { SVGTemplateElementObserver(SVGReference* aReference, nsIFrame* aFrame, bool aReferenceImage) - : SVGIDRenderingObserver(aReference, aFrame->GetContent()->AsElement(), + : SVGIDRenderingObserver(aReference, GetFrameContentAsElement(aFrame), aReferenceImage, kAttributeChanged | kContentAppended | kContentInserted | kContentWillBeRemoved), @@ -1752,8 +1764,8 @@ SVGPaintServerFrame* SVGObserverUtils::GetAndObservePaintServer( } void SVGObserverUtils::UpdateEffects(nsIFrame* aFrame) { - NS_ASSERTION(aFrame->GetContent()->IsElement(), - "aFrame's content should be an element"); + NS_ASSERTION(!aFrame->GetContent() || aFrame->GetContent()->IsElement(), + "aFrame's content (if non-null) should be an element"); aFrame->RemoveProperty(BackdropFilterProperty()); aFrame->RemoveProperty(FilterProperty()); diff --git a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-ko/strings.xml index 6e5b64375c9..61e1f08885f 100644 --- a/mobile/android/android-components/components/browser/toolbar/src/main/res/values-ko/strings.xml +++ b/mobile/android/android-components/components/browser/toolbar/src/main/res/values-ko/strings.xml @@ -13,7 +13,7 @@ 사이트 정보 - 읽는 중 + 로딩 중 자동 재생 설정에 의해 일부 콘텐츠가 차단되었습니다. diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/text/FadedText.kt b/mobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/text/FadedText.kt similarity index 59% rename from mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/text/FadedText.kt rename to mobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/text/FadedText.kt index 8b4cad6ba4c..00da8ccfaea 100644 --- a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/compose/text/FadedText.kt +++ b/mobile/android/android-components/components/compose/base/src/main/java/mozilla/components/compose/base/text/FadedText.kt @@ -2,7 +2,7 @@ * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ -package org.mozilla.fenix.compose.text +package mozilla.components.compose.base.text import androidx.compose.foundation.layout.width import androidx.compose.material.Text @@ -13,7 +13,6 @@ import androidx.compose.ui.layout.SubcomposeLayout import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.rememberTextMeasurer -import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection @@ -50,46 +49,51 @@ fun FadedText( FadeDirection.RIGHT } - val textAlignment = if (fadeDirection == FadeDirection.LEFT) { - TextAlign.Right - } else { - TextAlign.Left - } - SubcomposeLayout( modifier = modifier, ) { constraints -> val textLayoutResult = textMeasurer.measure( text = text, maxLines = 1, - style = style.copy( - textAlign = textAlignment, - ), + style = style, constraints = constraints, ) val visibleCharacters = textLayoutResult.getLineEnd(0, true) - val truncatedText = if (fadeDirection == FadeDirection.LEFT) { - text.takeLast(visibleCharacters) - } else { - text.take(visibleCharacters) + val isTextOverflowing = visibleCharacters < text.length + + val placeable = when (isTextOverflowing) { + true -> { + val truncatedText = if (fadeDirection == FadeDirection.LEFT) { + text.takeLast(visibleCharacters) + } else { + text.take(visibleCharacters) + } + + subcompose("truncated") { + Text( + text = truncatedText, + modifier = modifier.horizontalFadeGradient( + fadeLength = fadeLength, + fadeDirection = fadeDirection, + ), + style = style, + maxLines = 1, + ) + }.first().measure(constraints) + } + + false -> subcompose("text") { + Text( + text = text, + style = style, + maxLines = 1, + ) + }.first().measure(constraints) } - val truncatedPlaceable = subcompose("truncated") { - Text( - text = truncatedText, - modifier = modifier.horizontalFadeGradient( - fadeLength = fadeLength, - fadeDirection = fadeDirection, - ), - textAlign = textAlignment, - style = style, - maxLines = 1, - ) - }.first().measure(constraints) - - layout(truncatedPlaceable.width, truncatedPlaceable.height) { - truncatedPlaceable.place(0, 0) + layout(placeable.width, placeable.height) { + placeable.place(0, 0) } } } @@ -102,6 +106,21 @@ enum class TruncationDirection { END, } +/** + * Preview of a short[FadedText] with start truncation and fade. + */ +@Preview(showBackground = true) +@Composable +fun ShortStartFadedTextPreview() { + FadedText( + text = "127.0.0.1", + modifier = Modifier.width(200.dp), + style = TextStyle(fontSize = 16.sp), + truncationDirection = TruncationDirection.START, + fadeLength = 60.dp, + ) +} + /** * Preview of [FadedText] with start truncation and fade. */ @@ -117,6 +136,21 @@ fun StartFadedTextPreview() { ) } +/** + * Preview of a short [FadedText] with end truncation and fade + */ +@Preview(showBackground = true) +@Composable +fun ShortEndFadedTextPreview() { + FadedText( + text = "127.0.0.1", + modifier = Modifier.width(200.dp), + style = TextStyle(fontSize = 16.sp), + truncationDirection = TruncationDirection.END, + fadeLength = 60.dp, + ) +} + /** * Preview of [FadedText] with end truncation and fade */ @@ -132,6 +166,25 @@ fun EndFadedTextPreview() { ) } +/** + * Preview of a short [FadedText] with start truncation and fade and RTL language + */ +@Preview(showBackground = true) +@Composable +fun ShortRTLStartFadedTextPreview() { + CompositionLocalProvider( + LocalLayoutDirection provides LayoutDirection.Rtl, + ) { + FadedText( + text = "127.0.0.1", + modifier = Modifier.width(200.dp), + style = TextStyle(fontSize = 16.sp), + truncationDirection = TruncationDirection.START, + fadeLength = 60.dp, + ) + } +} + /** * Preview of [FadedText] with start truncation and fade and RTL language */ @@ -151,6 +204,25 @@ fun RTLStartFadedTextPreview() { } } +/** + * Preview of a short [FadedText] with end truncation and fade and RTL language + */ +@Preview(showBackground = true) +@Composable +fun ShortRTLEndFadedTextPreview() { + CompositionLocalProvider( + LocalLayoutDirection provides LayoutDirection.Rtl, + ) { + FadedText( + text = "127.0.0.1", + modifier = Modifier.width(200.dp), + style = TextStyle(fontSize = 16.sp), + truncationDirection = TruncationDirection.END, + fadeLength = 60.dp, + ) + } +} + /** * Preview of [FadedText] with end truncation and fade and RTL language */ diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-be/strings.xml new file mode 100644 index 00000000000..5a0cca0c04f --- /dev/null +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-be/strings.xml @@ -0,0 +1,13 @@ + + + + Паказаць схаваны тэкст + + Ачысціць тэкст + + Загрузка + diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-bs/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-bs/strings.xml index 6b4ac9b0613..787513b6dd6 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-bs/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-bs/strings.xml @@ -8,4 +8,6 @@ Prikaži skriveni tekst Obriši tekst + + Učitavanje diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-co/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-co/strings.xml index 8233c4158e6..1d96fd9fcf6 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-co/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-co/strings.xml @@ -8,4 +8,6 @@ Affissà u testu piattatu Squassà u testu + + Caricamentu diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-cs/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-cs/strings.xml index 035942bef94..b3e4604a0d4 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-cs/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-cs/strings.xml @@ -8,4 +8,6 @@ Zobrazit skrytý text Smazat text + + Načítání diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-cy/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-cy/strings.xml index e7be688a043..85f1d30faa5 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-cy/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-cy/strings.xml @@ -9,5 +9,5 @@ Clirio testun - Llwytho + Yn llwytho diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-en-rGB/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-en-rGB/strings.xml index 5f42bfaeb56..018a255bbd4 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-en-rGB/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-en-rGB/strings.xml @@ -8,4 +8,6 @@ Show hidden text Clear text + + Loading diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-es-rCL/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-es-rCL/strings.xml index 463db4983c5..5d16fa5018d 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-es-rCL/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-es-rCL/strings.xml @@ -8,4 +8,6 @@ Mostrar texto oculto Limpiar texto + + Cargando diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-fi/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-fi/strings.xml index c417562f3c1..278d68eb89f 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-fi/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-fi/strings.xml @@ -8,4 +8,6 @@ Näytä piilotettu teksti Tyhjennä teksti + + Ladataan diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-fy-rNL/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-fy-rNL/strings.xml index 5daa9a44841..8c72e6f3d8a 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-fy-rNL/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-fy-rNL/strings.xml @@ -8,4 +8,6 @@ Ferburgen tekst toane Tekst wiskje + + Lade diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-gn/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-gn/strings.xml index beeb5c84eea..b684a0b0260 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-gn/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-gn/strings.xml @@ -8,4 +8,6 @@ Ehechauka moñe’ẽrã kañymby Embogue moñe’ẽrã + + Henyhẽhína diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-hu/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-hu/strings.xml index 8db9c763b2f..e8e3be17f76 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-hu/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-hu/strings.xml @@ -8,4 +8,6 @@ Rejtett szöveg megjelenítése Szöveg törlése + + Betöltés diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-hy-rAM/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-hy-rAM/strings.xml index 2620242cae8..ea9d0436cc9 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-hy-rAM/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-hy-rAM/strings.xml @@ -8,4 +8,6 @@ Ցուցադրել թաքնված տեքստը Մաքրել տեքստը + + Բեռնում diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-ia/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-ia/strings.xml index 10e1818282d..7fe227239c3 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-ia/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-ia/strings.xml @@ -8,4 +8,6 @@ Monstrar le texto celate Vacuar le texto + + Cargante diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-is/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-is/strings.xml index 4fad8dd1454..37f32f8a80c 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-is/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-is/strings.xml @@ -8,4 +8,6 @@ Sýna falinn texta Hreinsa texta + + Hleð inn diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-it/strings.xml index 567be6e3673..a4b403c32fa 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-it/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-it/strings.xml @@ -8,4 +8,6 @@ Mostra testo nascosto Cancella testo + + Caricamento… diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-kk/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-kk/strings.xml index e44dac4b88d..47c05e16213 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-kk/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-kk/strings.xml @@ -8,4 +8,6 @@ Жасырын мәтінді көрсету Мәтінді тазарту + + Жүктелу diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-ko/strings.xml index 3f10f5406ea..33512a21361 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-ko/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-ko/strings.xml @@ -8,4 +8,6 @@ 숨긴 텍스트 표시 텍스트 지우기 + + 로딩 중 diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-ml/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-ml/strings.xml index ca5cf356493..970f5f6a5ff 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-ml/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-ml/strings.xml @@ -8,4 +8,6 @@ മറഞ്ഞിരിക്കുന്ന എഴുത്തു് കാണിക്കുക എഴുത്തു് വെടിപ്പാക്കുക + + ലഭ്യമാക്കുന്നു diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-nl/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-nl/strings.xml index 269eb44eed6..23ad7d999ee 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-nl/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-nl/strings.xml @@ -8,4 +8,6 @@ Verborgen tekst tonen Tekst wissen + + Laden diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-pt-rBR/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-pt-rBR/strings.xml index fba2b319915..b5602a3d091 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-pt-rBR/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-pt-rBR/strings.xml @@ -8,4 +8,6 @@ Mostrar texto oculto Limpar texto + + Carregando diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-ru/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-ru/strings.xml index 5149e5ca452..0c28a4c49e7 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-ru/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-ru/strings.xml @@ -8,4 +8,6 @@ Показать скрытый текст Очистить текст + + Загрузка diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-scn/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-scn/strings.xml index 397d3aebd6f..ad7bf4c7f97 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-scn/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-scn/strings.xml @@ -8,4 +8,6 @@ Ammustra u testu ammucciatu Scancella testu + + Staju carricannu diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-sk/strings.xml index 51521807e68..fd9f848a5ca 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-sk/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-sk/strings.xml @@ -8,4 +8,6 @@ Zobraziť skrytý text Vymazať text + + Načítava sa diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-sl/strings.xml index 7ef0094fefb..c228c8fa2e4 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-sl/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-sl/strings.xml @@ -8,4 +8,6 @@ Pokaži skrito besedilo Počisti besedilo + + Nalaganje diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-tg/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-tg/strings.xml index cc07daa5c90..5a296a2311a 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-tg/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-tg/strings.xml @@ -8,4 +8,6 @@ Нишон додани матни ноаён Пок кардани матн + + Бор шуда истодааст diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-ug/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-ug/strings.xml index 5d036db9d30..8ad50bed123 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-ug/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-ug/strings.xml @@ -8,4 +8,6 @@ يوشۇرۇن تېكىستنى كۆرسەت تېكىستنى تازىلا + + يۈكلەۋاتىدۇ diff --git a/mobile/android/android-components/components/compose/base/src/main/res/values-zh-rTW/strings.xml b/mobile/android/android-components/components/compose/base/src/main/res/values-zh-rTW/strings.xml index 20bf001be9b..eb9672611d0 100644 --- a/mobile/android/android-components/components/compose/base/src/main/res/values-zh-rTW/strings.xml +++ b/mobile/android/android-components/components/compose/base/src/main/res/values-zh-rTW/strings.xml @@ -8,4 +8,6 @@ 顯示隱藏文字 清除文字 + + 載入中 diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserDisplayToolbar.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserDisplayToolbar.kt index a13184cefa9..c01fd266b83 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserDisplayToolbar.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserDisplayToolbar.kt @@ -5,30 +5,27 @@ package mozilla.components.compose.browser.toolbar import androidx.compose.foundation.background -import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.LocalTextStyle -import androidx.compose.material.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb -import androidx.compose.ui.text.TextStyle import androidx.compose.ui.tooling.preview.PreviewLightDark import androidx.compose.ui.unit.dp import mozilla.components.compose.base.progressbar.AnimatedProgressBar import mozilla.components.compose.base.theme.AcornTheme import mozilla.components.compose.browser.toolbar.concept.Action +import mozilla.components.compose.browser.toolbar.concept.PageOrigin import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.compose.browser.toolbar.store.ProgressBarConfig import mozilla.components.compose.browser.toolbar.store.ProgressBarGravity.Bottom import mozilla.components.compose.browser.toolbar.store.ProgressBarGravity.Top +import mozilla.components.compose.browser.toolbar.ui.Origin private val ROUNDED_CORNER_SHAPE = RoundedCornerShape(8.dp) @@ -36,32 +33,37 @@ private val ROUNDED_CORNER_SHAPE = RoundedCornerShape(8.dp) * Sub-component of the [BrowserToolbar] responsible for displaying the URL and related * controls ("display mode"). * - * @param url The URL to be displayed. + * @param pageOrigin Details about the website origin. * @param colors The color scheme to use in the browser display toolbar. * @param progressBarConfig [ProgressBarConfig] configuration for the progress bar. * If `null` a progress bar will not be displayed. - * @param textStyle [TextStyle] configuration for the URL text. - * @param navigationActions List of navigation [Action]s to be displayed on left side of the - * display toolbar (outside of the URL bounding box). - * @param pageActions List of page [Action]s to be displayed to the right side of the URL of the - * display toolbar. Also see: - * [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction) - * @param browserActions List of browser [Action]s to be displayed on the right side of the - * display toolbar (outside of the URL bounding box). Also see: - * [MDN docs](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Browser_action) - * @param onUrlClicked Will be called when the user clicks on the URL. + * @param browserActionsStart List of browser [Action]s to be displayed at the start of the + * toolbar, outside of the URL bounding box. + * These should be actions relevant to the browser as a whole. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction). + * @param pageActionsStart List of navigation [Action]s to be displayed between [browserActionsStart] + * and [pageOrigin], inside of the URL bounding box. + * These should be actions relevant to specific webpages as opposed to [browserActionsStart]. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction). + * @param pageActionsEnd List of page [Action]s to be displayed between [pageOrigin] and [browserActionsEnd], + * inside of the URL bounding box. + * These should be actions relevant to specific webpages as opposed to [browserActionsStart]. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction). + * @param browserActionsEnd List of browser [Action]s to be displayed at the end of the toolbar, + * outside of the URL bounding box. + * These should be actions relevant to the browser as a whole. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction). * @param onInteraction Callback for handling [BrowserToolbarEvent]s on user interactions. */ @Composable fun BrowserDisplayToolbar( - url: String, + pageOrigin: PageOrigin, colors: BrowserDisplayToolbarColors, progressBarConfig: ProgressBarConfig?, - textStyle: TextStyle = LocalTextStyle.current, - navigationActions: List = emptyList(), - pageActions: List = emptyList(), - browserActions: List = emptyList(), - onUrlClicked: () -> Unit = {}, + browserActionsStart: List = emptyList(), + pageActionsStart: List = emptyList(), + pageActionsEnd: List = emptyList(), + browserActionsEnd: List = emptyList(), onInteraction: (BrowserToolbarEvent) -> Unit, ) { Box( @@ -72,13 +74,11 @@ fun BrowserDisplayToolbar( Row( verticalAlignment = Alignment.CenterVertically, ) { - if (navigationActions.isNotEmpty()) { + if (browserActionsStart.isNotEmpty()) { ActionContainer( - actions = navigationActions, + actions = browserActionsStart, onInteraction = onInteraction, ) - } else { - Spacer(modifier = Modifier.width(8.dp)) } Row( @@ -91,30 +91,40 @@ fun BrowserDisplayToolbar( .weight(1f), verticalAlignment = Alignment.CenterVertically, ) { - Text( - url, - color = colors.text, + if (pageActionsStart.isNotEmpty()) { + ActionContainer( + actions = pageActionsStart, + onInteraction = onInteraction, + ) + } + + Origin( + hint = pageOrigin.hint, modifier = Modifier - .clickable { onUrlClicked() } - .padding(8.dp) + .height(48.dp) .weight(1f), - maxLines = 1, - style = textStyle, + url = pageOrigin.url, + title = pageOrigin.title, + onClick = pageOrigin.onClick, + onLongClick = pageOrigin.onLongClick, + onInteraction = onInteraction, + fadeDirection = pageOrigin.fadeDirection, + textGravity = pageOrigin.textGravity, ) - ActionContainer( - actions = pageActions, - onInteraction = onInteraction, - ) + if (pageActionsEnd.isNotEmpty()) { + ActionContainer( + actions = pageActionsEnd, + onInteraction = onInteraction, + ) + } } - if (browserActions.isNotEmpty()) { + if (browserActionsEnd.isNotEmpty()) { ActionContainer( - actions = browserActions, + actions = browserActionsEnd, onInteraction = onInteraction, ) - } else { - Spacer(modifier = Modifier.width(8.dp)) } } @@ -136,7 +146,12 @@ fun BrowserDisplayToolbar( private fun BrowserDisplayToolbarPreview() { AcornTheme { BrowserDisplayToolbar( - url = "http://www.mozilla.org", + pageOrigin = PageOrigin( + hint = R.string.mozac_browser_toolbar_search_hint, + title = null, + url = null, + onClick = object : BrowserToolbarEvent {}, + ), colors = BrowserDisplayToolbarColors( background = AcornTheme.colors.layer1, urlBackground = AcornTheme.colors.layer3, @@ -146,7 +161,7 @@ private fun BrowserDisplayToolbarPreview() { progress = 66, gravity = Top, ), - navigationActions = listOf( + browserActionsStart = listOf( Action.ActionButton( icon = mozilla.components.ui.icons.R.drawable.mozac_ic_home_24, contentDescription = android.R.string.untitled, @@ -154,7 +169,7 @@ private fun BrowserDisplayToolbarPreview() { onClick = object : BrowserToolbarEvent {}, ), ), - pageActions = listOf( + pageActionsEnd = listOf( Action.ActionButton( icon = mozilla.components.ui.icons.R.drawable.mozac_ic_arrow_clockwise_24, contentDescription = android.R.string.untitled, @@ -162,7 +177,7 @@ private fun BrowserDisplayToolbarPreview() { onClick = object : BrowserToolbarEvent {}, ), ), - browserActions = listOf( + browserActionsEnd = listOf( Action.ActionButton( icon = mozilla.components.ui.icons.R.drawable.mozac_ic_ellipsis_vertical_24, contentDescription = android.R.string.untitled, diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserToolbar.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserToolbar.kt index 8d7286188c5..279812f7b12 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserToolbar.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/BrowserToolbar.kt @@ -27,8 +27,6 @@ import mozilla.components.lib.state.ext.observeAsState * "edit" mode. * @param onTextCommit Function to get executed when the user has finished editing the URL and wants * to load the entered text. - * @param onDisplayToolbarClick Function to get executed when the user clicks on the URL in "display" - * mode. * @param colors The color scheme the browser toolbar will use for the UI. */ @Composable @@ -38,7 +36,6 @@ fun BrowserToolbar( target: Target, onTextEdit: (String) -> Unit, onTextCommit: (String) -> Unit, - onDisplayToolbarClick: () -> Unit, colors: BrowserToolbarColors = BrowserToolbarDefaults.colors(), ) { val uiState by store.observeAsState(initialValue = store.state) { it } @@ -66,15 +63,13 @@ fun BrowserToolbar( ) } else { BrowserDisplayToolbar( - url = selectedTab?.content?.url ?: uiState.displayState.hint, + pageOrigin = uiState.displayState.pageOrigin, colors = colors.displayToolbarColors, progressBarConfig = progressBarConfig, - navigationActions = uiState.displayState.navigationActions, - pageActions = uiState.displayState.pageActions, - browserActions = uiState.displayState.browserActions, - onUrlClicked = { - onDisplayToolbarClick() - }, + browserActionsStart = uiState.displayState.browserActionsStart, + pageActionsStart = uiState.displayState.pageActionsStart, + pageActionsEnd = uiState.displayState.pageActionsEnd, + browserActionsEnd = uiState.displayState.browserActionsEnd, onInteraction = { store.dispatch(it) }, ) } diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/concept/PageOrigin.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/concept/PageOrigin.kt new file mode 100644 index 00000000000..f68f634e207 --- /dev/null +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/concept/PageOrigin.kt @@ -0,0 +1,75 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package mozilla.components.compose.browser.toolbar.concept + +import androidx.annotation.StringRes +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection.FADE_DIRECTION_END +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity.TEXT_GRAVITY_START +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent + +/** + * Details about the website origin. + * + * @property title The title of the website. + * @property url The URL of the website. + * @property hint Text displayed in the toolbar when there's no URL to display (e.g.: no tab or empty URL) + * @property onClick [BrowserToolbarInteraction] describing how to handle any page origin detail being clicked. + * @property onLongClick Optional [BrowserToolbarInteraction] describing how to handle any page origin detail + * being long clicked. + * @property fadeDirection The direction in which the text should fade. + * @property textGravity The gravity of the text - whether to show the start or end of long text + * that does not fit the available space. + */ +data class PageOrigin( + @StringRes val hint: Int, + val title: String?, + val url: String?, + val onClick: BrowserToolbarEvent, + val onLongClick: BrowserToolbarInteraction? = null, + val fadeDirection: FadeDirection = FADE_DIRECTION_END, + val textGravity: TextGravity = TEXT_GRAVITY_START, +) { + /** + * Static values used in the configuration of the [PageOrigin] class. + */ + companion object { + /** + * The direction in which the text should fade if it does not fit the available space. + */ + enum class FadeDirection { + /** + * No text fading. + */ + FADE_DIRECTION_NONE, + + /** + * Text that overflows the available space should be faded at the start. + */ + FADE_DIRECTION_START, + + /** + * Text that overflows the available space should be faded at the end. + */ + FADE_DIRECTION_END, + } + + /** + * The gravity of the text - whether to show the start or end of long text + * that does not fit the available space. + */ + enum class TextGravity { + /** + * Show the start of long text and hide the end part which overflows the available space. + */ + TEXT_GRAVITY_START, + + /** + * Show the end of long text and hide the start part which overflows the available space. + */ + TEXT_GRAVITY_END, + } + } +} diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt index 86eecee481e..6bbee3732fc 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarAction.kt @@ -4,6 +4,7 @@ package mozilla.components.compose.browser.toolbar.store +import mozilla.components.compose.browser.toolbar.concept.PageOrigin import mozilla.components.lib.state.Action import mozilla.components.compose.browser.toolbar.concept.Action as ToolbarAction @@ -37,34 +38,43 @@ sealed interface BrowserToolbarAction : Action { */ sealed class BrowserDisplayToolbarAction : BrowserToolbarAction { /** - * Adds a navigation [Action] to be displayed to the left side of the URL of the display toolbar - * (outside of the URL bounding box). - * - * @property action The [Action] to be added. - */ - data class AddNavigationAction(val action: ToolbarAction) : BrowserDisplayToolbarAction() - - /** - * Adds a page [Action] to be displayed to the right side of the URL of the display toolbar. - * - * @property action The [Action] to be added. - */ - data class AddPageAction(val action: ToolbarAction) : BrowserDisplayToolbarAction() - - /** - * Adds a browser [Action] to be displayed to the right side of the URL of the display toolbar - * (outside of the URL bounding box). - * - * @property action The [Action] to be added. - */ - data class AddBrowserAction(val action: ToolbarAction) : BrowserDisplayToolbarAction() - - /** - * Replaces the currently displayed list of browser actions with the provided list of actions. + * Replaces the currently displayed list of start browser actions with the provided list of actions. + * These are displayed to the left side of the URL, outside of the URL bounding box. * * @property actions The new list of [ToolbarAction]s. */ - data class UpdateBrowserActions(val actions: List) : BrowserDisplayToolbarAction() + data class BrowserActionsStartUpdated(val actions: List) : BrowserDisplayToolbarAction() + + /** + * Replaces the currently displayed list of start page actions with the provided list of actions. + * These are displayed to the left side of the URL, inside of the URL bounding box. + * + * @property actions The new list of [ToolbarAction]s. + */ + data class PageActionsStartUpdated(val actions: List) : BrowserDisplayToolbarAction() + + /** + * Replace the currently displayed details of the page with the newly provided details. + * + * @property pageOrigin The new details of the current webpage. + */ + data class PageOriginUpdated(val pageOrigin: PageOrigin) : BrowserDisplayToolbarAction() + + /** + * Replaces the currently displayed list of end page actions with the provided list of actions. + * These are displayed to the right side of the URL, inside of the URL bounding box. + * + * @property actions The new list of [ToolbarAction]s. + */ + data class PageActionsEndUpdated(val actions: List) : BrowserDisplayToolbarAction() + + /** + * Replaces the currently displayed list of end browser actions with the provided list of actions. + * These are displayed to the right side of the URL, outside of the URL bounding box. + * + * @property actions The new list of [ToolbarAction]s. + */ + data class BrowserActionsEndUpdated(val actions: List) : BrowserDisplayToolbarAction() /** * Updates the [ProgressBarConfig] of the display toolbar. diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarState.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarState.kt index 0b0a9d2ba4f..0a5b5cd0874 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarState.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarState.kt @@ -6,7 +6,10 @@ package mozilla.components.compose.browser.toolbar.store import androidx.annotation.IntRange import androidx.compose.ui.graphics.Color +import mozilla.components.compose.browser.toolbar.R import mozilla.components.compose.browser.toolbar.concept.Action +import mozilla.components.compose.browser.toolbar.concept.PageOrigin +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.lib.state.State /** @@ -46,24 +49,37 @@ enum class Mode { /** * Wrapper containing the toolbar display state. * - * @property hint Text displayed in the toolbar when there's no URL to display - * (no tab or empty URL). - * @property navigationActions List of navigation [Action]s to be displayed on left side of the - * display toolbar (outside of the URL bounding box). - * @property pageActions List of page [Action]s to be displayed to the right side of the URL of the - * display toolbar. Also see: - * [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction) - * @property browserActions List of browser [Action]s to be displayed on the right side of the - * display toolbar (outside of the URL bounding box). Also see: - * [MDN docs](https://developer.mozilla.org/en-US/Add-ons/WebExtensions/user_interface/Browser_action) + * @property browserActionsStart List of browser [Action]s to be displayed at the start of the + * toolbar, outside of the URL bounding box. + * These should be actions relevant to the browser as a whole. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction). + * @property pageActionsStart List of navigation [Action]s to be displayed between [browserActionsStart] + * and the current webpage's details, inside of the URL bounding box. + * These should be actions relevant to specific webpages as opposed to [browserActionsStart]. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction). + * @property pageOrigin Details about the current website. + * @property pageActionsEnd List of page [Action]s to be displayed between [pageOrigin] and [browserActionsEnd], + * inside of the URL bounding box. + * These should be actions relevant to specific webpages as opposed to [browserActionsStart]. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/pageAction). + * @param browserActionsEnd List of browser [Action]s to be displayed at the end of the toolbar, + * outside of the URL bounding box. + * These should be actions relevant to the browser as a whole. + * See [MDN docs](https://developer.mozilla.org/en-US/docs/Mozilla/Add-ons/WebExtensions/API/browserAction). * @property progressBarConfig [ProgressBarConfig] configuration for the progress bar. * If `null` a progress bar will not be displayed. */ data class DisplayState( - val hint: String = "", - val navigationActions: List = emptyList(), - val pageActions: List = emptyList(), - val browserActions: List = emptyList(), + val browserActionsStart: List = emptyList(), + val pageActionsStart: List = emptyList(), + val pageOrigin: PageOrigin = PageOrigin( + hint = R.string.mozac_browser_toolbar_search_hint, + title = null, + url = null, + onClick = object : BrowserToolbarEvent {}, + ), + val pageActionsEnd: List = emptyList(), + val browserActionsEnd: List = emptyList(), val progressBarConfig: ProgressBarConfig? = null, ) : State diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt index b726f146dd6..2f459c66ec7 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStore.kt @@ -4,6 +4,11 @@ package mozilla.components.compose.browser.toolbar.store +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.BrowserActionsEndUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.BrowserActionsStartUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageActionsEndUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageActionsStartUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageOriginUpdated import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.UiStore @@ -46,27 +51,33 @@ private fun reduce(state: BrowserToolbarState, action: BrowserToolbarAction): Br ), ) - is BrowserDisplayToolbarAction.UpdateBrowserActions -> state.copy( + is BrowserActionsStartUpdated -> state.copy( displayState = state.displayState.copy( - browserActions = action.actions, + browserActionsStart = action.actions, ), ) - is BrowserDisplayToolbarAction.AddNavigationAction -> state.copy( + is PageActionsStartUpdated -> state.copy( displayState = state.displayState.copy( - navigationActions = state.displayState.navigationActions + action.action, + pageActionsStart = action.actions, ), ) - is BrowserDisplayToolbarAction.AddPageAction -> state.copy( + is PageOriginUpdated -> state.copy( displayState = state.displayState.copy( - pageActions = state.displayState.pageActions + action.action, + pageOrigin = action.pageOrigin, ), ) - is BrowserDisplayToolbarAction.AddBrowserAction -> state.copy( + is PageActionsEndUpdated -> state.copy( displayState = state.displayState.copy( - browserActions = state.displayState.browserActions + action.action, + pageActionsEnd = action.actions, + ), + ) + + is BrowserActionsEndUpdated -> state.copy( + displayState = state.displayState.copy( + browserActionsEnd = action.actions, ), ) diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/CustomFadeAndGravityTextView.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/CustomFadeAndGravityTextView.kt new file mode 100644 index 00000000000..c6a7f95382b --- /dev/null +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/CustomFadeAndGravityTextView.kt @@ -0,0 +1,73 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package mozilla.components.compose.browser.toolbar.ui + +import android.annotation.SuppressLint +import android.content.Context +import android.graphics.Canvas +import android.widget.TextView +import androidx.appcompat.widget.AppCompatTextView +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection.FADE_DIRECTION_END +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection.FADE_DIRECTION_START +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity.TEXT_GRAVITY_END +import kotlin.math.max +import kotlin.math.roundToInt + +/** + * Custom [TextView] meant to only be used programatically with special support for longer texts that: + * - can be faded at the start or end of the screen or not at all + * - can have the start text shown with the end clipped or the end text shown with the start clipped. + * + * @param context [Context] used to instantiate this `View`. + * @param fadeDirection [FadeDirection] The direction in which the text should be faded. + * @param textGravity [TextGravity] The gravity of the text. + */ +@SuppressLint("ViewConstructor") +internal class CustomFadeAndGravityTextView( + context: Context, + private val fadeDirection: FadeDirection, + private val textGravity: TextGravity, +) : AppCompatTextView(context) { + override fun getLeftFadingEdgeStrength() = when (fadeDirection) { + FADE_DIRECTION_START -> getFadeStrength() + else -> 0f + } + + override fun getRightFadingEdgeStrength() = when (fadeDirection) { + FADE_DIRECTION_END -> getFadeStrength() + else -> 0f + } + + override fun draw(canvas: Canvas) { + if (textGravity == TEXT_GRAVITY_END) { + scrollToEnd() + } + + super.draw(canvas) + } + + private fun getFadeStrength() = + when (computeHorizontalScrollOffset() + computeHorizontalScrollExtent() < computeHorizontalScrollRange()) { + true -> FADE_STRENGTH_FULL + false -> FADE_STRENGTH_NONE + } + + private fun scrollToEnd() { + if (layout != null) { + val textWidth = layout.getLineWidth(0) + val availableWidth = measuredWidth - paddingLeft - paddingRight + val textOverflow = max(textWidth - availableWidth - SCROLL_OFFSET_TO_FORCE_FADE, 0f) + scrollTo(textOverflow.roundToInt(), 0) + } + } + + companion object { + const val FADE_STRENGTH_FULL = 1f + const val FADE_STRENGTH_NONE = 0f + const val SCROLL_OFFSET_TO_FORCE_FADE = 2 + } +} diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/Origin.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/Origin.kt new file mode 100644 index 00000000000..a4c13e25fa7 --- /dev/null +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/java/mozilla/components/compose/browser/toolbar/ui/Origin.kt @@ -0,0 +1,298 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package mozilla.components.compose.browser.toolbar.ui + +import android.content.res.Configuration.UI_MODE_NIGHT_YES +import android.content.res.Configuration.UI_MODE_TYPE_NORMAL +import android.view.Gravity +import android.view.View +import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import android.widget.LinearLayout +import androidx.annotation.StringRes +import androidx.appcompat.widget.AppCompatTextView +import androidx.compose.foundation.background +import androidx.compose.runtime.Composable +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.toArgb +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.sp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.view.isVisible +import mozilla.components.browser.menu2.BrowserMenuController +import mozilla.components.compose.base.theme.AcornTheme +import mozilla.components.compose.browser.toolbar.R +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection.FADE_DIRECTION_END +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.FadeDirection.FADE_DIRECTION_START +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity.TEXT_GRAVITY_END +import mozilla.components.compose.browser.toolbar.concept.PageOrigin.Companion.TextGravity.TEXT_GRAVITY_START +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarMenu +import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.CombinedEventAndMenu + +private const val URL_TEXT_SIZE_ALONE = 15 +private const val URL_TEXT_SIZE_WITH_TITLE = 12 + +/** + * Custom layout for showing the origin - title and url of a webpage. + * + * @param hint [StringRes] the string to show when the URL is not available + * @param modifier [Modifier] to apply to this composable for further customisation. + * @param url the URL of the webpage. Can be `null` or empty, in which vase the [hint] will be shown. + * @param title the title of the webpage. Can be `null` or empty, in which case only [url] or [hint] will be shown. + * @param onClick [BrowserToolbarEvent] to be dispatched when this layout is clicked. + * @param onLongClick Optional [BrowserToolbarInteraction] describing how to handle this layout being long clicked. + * @param onInteraction [BrowserToolbarInteraction] to be dispatched when this layout is interacted with. + * @param onInteraction Callback for handling [BrowserToolbarEvent]s on user interactions. + * @param fadeDirection [FadeDirection] How the displayed text should be faded. + * @param textGravity [TextGravity] How the displayed text should be aligned. + */ +@Composable +internal fun Origin( + @StringRes hint: Int, + modifier: Modifier = Modifier, + url: String? = null, + title: String? = null, + onClick: BrowserToolbarEvent, + onLongClick: BrowserToolbarInteraction?, + onInteraction: (BrowserToolbarEvent) -> Unit, + fadeDirection: FadeDirection, + textGravity: TextGravity, +) { + OriginView( + hint = stringResource(hint), + url = url, + title = title, + fadeDirection = fadeDirection, + textGravity = textGravity, + onClick = onClick, + onLongClick = onLongClick, + onInteraction = onInteraction, + modifier = modifier, + ) +} + +@Composable +@Suppress("LongMethod", "LongParameterList") +private fun OriginView( + hint: String, + url: String?, + title: String?, + fadeDirection: FadeDirection, + textGravity: TextGravity, + onClick: BrowserToolbarEvent, + onLongClick: BrowserToolbarInteraction?, + onInteraction: (BrowserToolbarEvent) -> Unit, + modifier: Modifier = Modifier, +) { + val shouldShowTitle = remember { title != null && title.isNotEmpty() } + val urlTextSize = remember(shouldShowTitle) { + when (shouldShowTitle) { + true -> URL_TEXT_SIZE_WITH_TITLE.sp + false -> URL_TEXT_SIZE_ALONE.sp + } + } + val urlGravity = remember(shouldShowTitle) { + when (shouldShowTitle) { + true -> Gravity.TOP or Gravity.LEFT + false -> Gravity.CENTER_VERTICAL or Gravity.LEFT + } + } + val urlToShow = remember(url) { + when (url == null || url.isBlank()) { + true -> hint + else -> url + } + } + val longClickMenu = key(onLongClick) { onLongClick.buildMenu(onInteraction) } + val textColor = AcornTheme.colors.textPrimary + + AndroidView( + modifier = modifier, + factory = { context -> + LinearLayout(context).apply { + orientation = LinearLayout.VERTICAL + gravity = Gravity.CENTER_VERTICAL + isClickable = true + isFocusable = true + addView( + CustomFadeAndGravityTextView(context, fadeDirection, textGravity).apply { + text = title + gravity = Gravity.BOTTOM or Gravity.LEFT + setSingleLine() + isVisible = shouldShowTitle + textSize = URL_TEXT_SIZE_ALONE.sp.value + setTextColor(textColor.toArgb()) + layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f) + }, + ) + + addView( + CustomFadeAndGravityTextView(context, fadeDirection, textGravity).apply { + text = urlToShow + gravity = urlGravity + setSingleLine() + textSize = urlTextSize.value + setTextColor(textColor.toArgb()) + layoutParams = LinearLayout.LayoutParams(MATCH_PARENT, 0, 1f) + }, + ) + + setOnClickListener { onInteraction(onClick) } + setLongClickHandling(onLongClick, longClickMenu, onInteraction) + } + }, + update = { container -> + (container.getChildAt(0) as? AppCompatTextView)?.apply { + text = title + isVisible = shouldShowTitle + } + (container.getChildAt(1) as? AppCompatTextView)?.apply { + text = urlToShow + gravity = urlGravity + textSize = urlTextSize.value + } + + container.setLongClickHandling(onLongClick, longClickMenu, onInteraction) + }, + ) +} + +private fun View.setLongClickHandling( + onLongClick: BrowserToolbarInteraction?, + longClickMenu: BrowserMenuController?, + onInteraction: (BrowserToolbarEvent) -> Unit, +) { + if (onLongClick is BrowserToolbarEvent) { + setOnLongClickListener { + onInteraction(onLongClick) + true + } + } else if (onLongClick is BrowserToolbarMenu && longClickMenu != null) { + setOnLongClickListener { + longClickMenu.show(anchor = this) + true + } + } else if (onLongClick is CombinedEventAndMenu && longClickMenu != null) { + setOnLongClickListener { + onInteraction(onLongClick.event) + longClickMenu.show(anchor = this) + true + } + } else { + setOnLongClickListener(null) + } +} + +@Preview(showBackground = true) +@Composable +private fun OriginPreviewWithJustTheHint() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + url = null, + title = null, + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_END, + textGravity = TEXT_GRAVITY_START, + ) + } +} + +@Preview(uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL) +@Composable +private fun OriginPreviewWithTitleAndURL() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + modifier = Modifier.background(AcornTheme.colors.layer1), + url = "https://mozilla.com", + title = "Test title", + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_END, + textGravity = TEXT_GRAVITY_START, + ) + } +} + +@Preview(showBackground = true, widthDp = 160) +@Composable +private fun OriginPreviewWithTitleAndURLStart() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + url = "https://mozilla.com/firefox-browser", + title = "Test title", + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_END, + textGravity = TEXT_GRAVITY_START, + ) + } +} + +@Preview(widthDp = 160, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL) +@Composable +private fun OriginPreviewWithTitleAndURLEnd() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + modifier = Modifier.background(AcornTheme.colors.layer1), + url = "https://mozilla.com/firefox-browser", + title = "Test title", + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_END, + textGravity = TEXT_GRAVITY_END, + ) + } +} + +@Preview(widthDp = 160) +@Composable +private fun OriginPreviewWithJustURLStart() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + modifier = Modifier.background(AcornTheme.colors.layer1), + url = "https://mozilla.com/firefox-browser", + title = null, + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_END, + textGravity = TEXT_GRAVITY_START, + ) + } +} + +@Preview(widthDp = 160, uiMode = UI_MODE_NIGHT_YES or UI_MODE_TYPE_NORMAL) +@Composable +private fun OriginPreviewWithJustURLEnd() { + AcornTheme { + Origin( + hint = R.string.mozac_browser_toolbar_search_hint, + modifier = Modifier.background(AcornTheme.colors.layer1), + url = "https://mozilla.com/firefox-browser", + title = null, + onClick = object : BrowserToolbarEvent {}, + onLongClick = null, + onInteraction = {}, + fadeDirection = FADE_DIRECTION_START, + textGravity = TEXT_GRAVITY_END, + ) + } +} diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-be/strings.xml index 737ac0e0c90..f1e5d465ac0 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-be/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-be/strings.xml @@ -2,4 +2,6 @@ Ачысціць + + Шукаць ці ўвесці адрас diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bg/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bg/strings.xml index c3d3ad6e85f..609d8568b2d 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bg/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bg/strings.xml @@ -2,4 +2,6 @@ Изчистване + + Търсете или въведете адрес diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bs/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bs/strings.xml index 41b0f1d12a5..14d38e4e0e0 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bs/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-bs/strings.xml @@ -2,4 +2,6 @@ Očisti + + Unesite termin za pretragu ili adresu diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-co/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-co/strings.xml index 5b42df6b31d..fd0d2f7a912 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-co/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-co/strings.xml @@ -2,4 +2,6 @@ Squassà + + Circà o stampittà un indirizzu diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cs/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cs/strings.xml index 3c2337fe38c..275f6702adb 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cs/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cs/strings.xml @@ -2,4 +2,6 @@ Vymazat + + Zadejte hledání nebo adresu diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cy/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cy/strings.xml index edc85bdc713..1b6d5811c80 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cy/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-cy/strings.xml @@ -2,4 +2,6 @@ Clirio + + Chwilio neu gyfeiriad gwe diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-de/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-de/strings.xml index 2a8f5fd3318..a0e9b88cf78 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-de/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-de/strings.xml @@ -2,4 +2,6 @@ Löschen + + Suche oder Adresse eingeben diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-dsb/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-dsb/strings.xml index ee57bcec333..4d3949750d7 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-dsb/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-dsb/strings.xml @@ -2,4 +2,6 @@ Lašowaś + + Pytaś abo adresu zapódaś diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-en-rGB/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-en-rGB/strings.xml index 04d62d83abe..161954ab975 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-en-rGB/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-en-rGB/strings.xml @@ -2,4 +2,6 @@ Clear + + Search or enter address diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rAR/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rAR/strings.xml index a98736b35d3..96d224cf192 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rAR/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rAR/strings.xml @@ -2,4 +2,6 @@ Eliminar + + Buscar o ingresar dirección diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rCL/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rCL/strings.xml index 6e9f60dc6ce..5c5776aed94 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rCL/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-es-rCL/strings.xml @@ -2,4 +2,6 @@ Limpiar + + Buscar o ingresar dirección diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-fy-rNL/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-fy-rNL/strings.xml index a7fb87557d0..6ff71ee822d 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-fy-rNL/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-fy-rNL/strings.xml @@ -2,4 +2,6 @@ Wiskje + + Fier sykterm of adres yn diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-gl/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-gl/strings.xml index 1b418fc9904..6c615481542 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-gl/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-gl/strings.xml @@ -2,4 +2,6 @@ Borrar + + Buscar ou escribir o enderezo diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hsb/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hsb/strings.xml index 38718b2b790..3ef88b40bc4 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hsb/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hsb/strings.xml @@ -2,4 +2,6 @@ Zhašeć + + Pytać abo adresu zapodać diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hu/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hu/strings.xml index a8d37576829..34a1d83029c 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hu/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hu/strings.xml @@ -2,4 +2,6 @@ Törlés + + Keressen, vagy adjon meg címet diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hy-rAM/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hy-rAM/strings.xml index 6fe9232cd0d..1d649d773b2 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hy-rAM/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-hy-rAM/strings.xml @@ -2,4 +2,6 @@ Մաքրել + + Որոնեք կամ մուտքագրեք հասցեն diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ia/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ia/strings.xml index ff0ed119f61..fa25cfd1154 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ia/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ia/strings.xml @@ -2,4 +2,6 @@ Vacuar + + Insere un adresse o face un recerca diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-is/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-is/strings.xml index f965e05e13f..73d9f5df98e 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-is/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-is/strings.xml @@ -2,4 +2,6 @@ Hreinsa + + Leitaðu eða settu inn vistfang diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-it/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-it/strings.xml index 1f619c92d8c..ca375a9ee36 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-it/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-it/strings.xml @@ -2,4 +2,6 @@ Cancella + + Cerca o inserisci un indirizzo diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-iw/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-iw/strings.xml index 910de114e45..ab20b55d35f 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-iw/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-iw/strings.xml @@ -2,4 +2,6 @@ ניקוי + + חיפוש או הכנסת כתובת diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-kk/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-kk/strings.xml index ae5dab73adc..4c7e48c4fdd 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-kk/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-kk/strings.xml @@ -2,4 +2,6 @@ Тазарту + + Іздеу немесе адрес diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ko/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ko/strings.xml index bd9b06f12ac..901dcdd79b1 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ko/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ko/strings.xml @@ -2,4 +2,6 @@ 지우기 + + 검색어 또는 주소 입력 diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ml/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ml/strings.xml index 078b67db504..30ed32cbedd 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ml/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ml/strings.xml @@ -2,4 +2,6 @@ മായ്ക്കുക + + വിലാസം തിരയുക അല്ലെങ്കില്‍ നല്‍കുക diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nl/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nl/strings.xml index a45046c9857..9118eba883d 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nl/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nl/strings.xml @@ -2,4 +2,6 @@ Wissen + + Voer zoekterm of adres in diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nn-rNO/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nn-rNO/strings.xml index 53b7e78d420..611d09174c8 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nn-rNO/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-nn-rNO/strings.xml @@ -2,4 +2,6 @@ Tøm + + Søk eller skriv inn ei adresse diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rBR/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rBR/strings.xml index acee8859657..8187da5b9d7 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rBR/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rBR/strings.xml @@ -2,4 +2,6 @@ Limpar + + Pesquise ou digite um endereço diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rPT/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rPT/strings.xml index acee8859657..3be0f6a3c72 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rPT/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-pt-rPT/strings.xml @@ -2,4 +2,6 @@ Limpar + + Pesquisar ou introduzir um endereço diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ru/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ru/strings.xml index 3167e9cbc99..cece05c23f6 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ru/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ru/strings.xml @@ -2,4 +2,6 @@ Очистить + + Введите запрос или адрес diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sk/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sk/strings.xml index 5b318feaed2..cc838c5e04a 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sk/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sk/strings.xml @@ -2,4 +2,6 @@ Vymazať + + Zadajte adresu alebo výraz vyhľadávania diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sl/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sl/strings.xml index 396717db9de..14b7fb8b045 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sl/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sl/strings.xml @@ -2,4 +2,6 @@ Počisti + + Iskanje ali naslov strani diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sv-rSE/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sv-rSE/strings.xml index fc96599c6dd..a18a7fb90db 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sv-rSE/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-sv-rSE/strings.xml @@ -2,4 +2,6 @@ Rensa + + Sök eller ange adress diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tg/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tg/strings.xml index 9d870efc0d4..5bb110fafa2 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tg/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tg/strings.xml @@ -2,4 +2,6 @@ Пок кардан + + Нишониеро ҷустуҷӯ кунед ё ворид намоед diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tr/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tr/strings.xml index 51e8e60aedb..c04b82c6874 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tr/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-tr/strings.xml @@ -2,4 +2,6 @@ Temizle + + Arama yapın veya adres yazın diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ug/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ug/strings.xml index 77383ac4eb0..01d1e4e2598 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ug/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-ug/strings.xml @@ -2,4 +2,6 @@ تازىلاش + + ئىزدەيدۇ ياكى ئادرېس كىرگۈزۈلىدۇ diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-zh-rTW/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-zh-rTW/strings.xml index 83ef30a178c..235aa93c0b6 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-zh-rTW/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values-zh-rTW/strings.xml @@ -2,4 +2,6 @@ 清除 + + 進行搜尋或輸入網址 diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values/strings.xml b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values/strings.xml index ae85fd5c80e..5568da54b10 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values/strings.xml +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/main/res/values/strings.xml @@ -5,4 +5,6 @@ Clear + + Search or enter address diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt b/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt index bf0440c9db6..6350349372a 100644 --- a/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/test/java/mozilla/components/compose/browser/toolbar/store/BrowserToolbarStoreTest.kt @@ -5,7 +5,14 @@ package mozilla.components.compose.browser.toolbar.store import androidx.test.ext.junit.runners.AndroidJUnit4 +import mozilla.components.compose.browser.toolbar.R import mozilla.components.compose.browser.toolbar.concept.Action.ActionButton +import mozilla.components.compose.browser.toolbar.concept.PageOrigin +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.BrowserActionsEndUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.BrowserActionsStartUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageActionsEndUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageActionsStartUpdated +import mozilla.components.compose.browser.toolbar.store.BrowserDisplayToolbarAction.PageOriginUpdated import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Assert.assertEquals @@ -34,23 +41,6 @@ class BrowserToolbarStoreTest { assertNull(store.state.editState.editText) } - @Test - fun `GIVEN browser actions already set WHEN updating them THEN replace all current ones with the newly provided list`() { - val initialBrowserActions = listOf(fakeActionButton()) - val updatedListOfBrowserActions = listOf(fakeActionButton()) - val store = BrowserToolbarStore( - initialState = BrowserToolbarState( - displayState = DisplayState( - browserActions = initialBrowserActions, - ), - ), - ) - - store.dispatch(BrowserDisplayToolbarAction.UpdateBrowserActions(updatedListOfBrowserActions)) - - assertEquals(store.state.displayState.browserActions, updatedListOfBrowserActions) - } - @Test fun `WHEN update edit text action is dispatched THEN update edit text state`() { val store = BrowserToolbarStore() @@ -104,63 +94,92 @@ class BrowserToolbarStoreTest { } @Test - fun `WHEN add navigation action is dispatched THEN update display navigation actions state`() { + fun `WHEN updating start browser actions THEN replace the old actions with the new ones`() { val store = BrowserToolbarStore() val action1 = fakeActionButton() val action2 = fakeActionButton() + val action3 = fakeActionButton() + assertEquals(0, store.state.displayState.browserActionsStart.size) - assertEquals(0, store.state.displayState.navigationActions.size) + store.dispatch(BrowserActionsStartUpdated(listOf(action1))) + assertEquals(listOf(action1), store.state.displayState.browserActionsStart) - store.dispatch(BrowserDisplayToolbarAction.AddNavigationAction(action = action1)) - - assertEquals(1, store.state.displayState.navigationActions.size) - assertEquals(action1, store.state.displayState.navigationActions.first()) - - store.dispatch(BrowserDisplayToolbarAction.AddNavigationAction(action = action2)) - - assertEquals(2, store.state.displayState.navigationActions.size) - assertEquals(action1, store.state.displayState.navigationActions.first()) - assertEquals(action2, store.state.displayState.navigationActions.last()) + store.dispatch(BrowserActionsStartUpdated(listOf(action2, action3))) + assertEquals(listOf(action2, action3), store.state.displayState.browserActionsStart) } @Test - fun `WHEN add page action is dispatched THEN update display page actions state`() { + fun `WHEN updating start page actions THEN replace old actions with the new one`() { val store = BrowserToolbarStore() val action1 = fakeActionButton() val action2 = fakeActionButton() + val action3 = fakeActionButton() + assertEquals(0, store.state.displayState.pageActionsStart.size) - assertEquals(0, store.state.displayState.pageActions.size) + store.dispatch(PageActionsStartUpdated(listOf(action1))) + assertEquals(listOf(action1), store.state.displayState.pageActionsStart) - store.dispatch(BrowserDisplayToolbarAction.AddPageAction(action = action1)) + store.dispatch(PageActionsStartUpdated(listOf(action2, action3))) + assertEquals(listOf(action2, action3), store.state.displayState.pageActionsStart) - assertEquals(1, store.state.displayState.pageActions.size) - assertEquals(action1, store.state.displayState.pageActions.first()) - - store.dispatch(BrowserDisplayToolbarAction.AddPageAction(action = action2)) - - assertEquals(2, store.state.displayState.pageActions.size) - assertEquals(action1, store.state.displayState.pageActions.first()) - assertEquals(action2, store.state.displayState.pageActions.last()) + store.dispatch(PageActionsStartUpdated(emptyList())) + assertEquals(0, store.state.displayState.pageActionsStart.size) } @Test - fun `WHEN add browser action is dispatched THEN update display browser actions state`() { + fun `WHEN updating end page actions THEN replace old actions with the new one`() { val store = BrowserToolbarStore() val action1 = fakeActionButton() val action2 = fakeActionButton() + val action3 = fakeActionButton() + assertEquals(0, store.state.displayState.pageActionsEnd.size) - assertEquals(0, store.state.displayState.browserActions.size) + store.dispatch(PageActionsEndUpdated(listOf(action1))) + assertEquals(listOf(action1), store.state.displayState.pageActionsEnd) - store.dispatch(BrowserDisplayToolbarAction.AddBrowserAction(action = action1)) + store.dispatch(PageActionsEndUpdated(listOf(action2, action3))) + assertEquals(listOf(action2, action3), store.state.displayState.pageActionsEnd) - assertEquals(1, store.state.displayState.browserActions.size) - assertEquals(action1, store.state.displayState.browserActions.first()) + store.dispatch(PageActionsEndUpdated(emptyList())) + assertEquals(0, store.state.displayState.pageActionsEnd.size) + } - store.dispatch(BrowserDisplayToolbarAction.AddBrowserAction(action = action2)) + @Test + fun `WHEN updating the page origin details THEN replace the old details with the new ones`() { + val store = BrowserToolbarStore() + val defaultPageDetails = PageOrigin( + hint = R.string.mozac_browser_toolbar_search_hint, + title = null, + url = null, + onClick = object : BrowserToolbarEvent {}, + ) + val newPageDetails = PageOrigin( + hint = Random.nextInt(), + title = "test", + url = "https://firefox.com", + onClick = object : BrowserToolbarEvent {}, + onLongClick = object : BrowserToolbarEvent {}, + ) + assertPageOriginEquals(defaultPageDetails, store.state.displayState.pageOrigin) - assertEquals(2, store.state.displayState.browserActions.size) - assertEquals(action1, store.state.displayState.browserActions.first()) - assertEquals(action2, store.state.displayState.browserActions.last()) + store.dispatch(PageOriginUpdated(newPageDetails)) + + assertEquals(newPageDetails, store.state.displayState.pageOrigin) + } + + @Test + fun `WHEN updating end browser actions THEN replace the old actions with the new ones`() { + val store = BrowserToolbarStore() + val action1 = fakeActionButton() + val action2 = fakeActionButton() + val action3 = fakeActionButton() + assertEquals(0, store.state.displayState.browserActionsEnd.size) + + store.dispatch(BrowserActionsEndUpdated(listOf(action1))) + assertEquals(listOf(action1), store.state.displayState.browserActionsEnd) + + store.dispatch(BrowserActionsEndUpdated(listOf(action2, action3))) + assertEquals(listOf(action2, action3), store.state.displayState.browserActionsEnd) } private fun fakeActionButton() = ActionButton( @@ -169,4 +188,11 @@ class BrowserToolbarStoreTest { tint = Random.nextInt(), onClick = object : BrowserToolbarEvent {}, ) + + private fun assertPageOriginEquals(expected: PageOrigin, actual: PageOrigin) { + assertEquals(expected.hint, actual.hint) + assertEquals(expected.title, actual.title) + assertEquals(expected.url, actual.url) + // Cannot check the onClick and onLongClick anonymous object + } } diff --git a/mobile/android/android-components/components/compose/browser-toolbar/src/test/resources/robolectric.properties b/mobile/android/android-components/components/compose/browser-toolbar/src/test/resources/robolectric.properties new file mode 100644 index 00000000000..3f67ea5ac1b --- /dev/null +++ b/mobile/android/android-components/components/compose/browser-toolbar/src/test/resources/robolectric.properties @@ -0,0 +1 @@ +sdk=35 diff --git a/mobile/android/android-components/components/feature/app-links/src/main/res/values-be/strings.xml b/mobile/android/android-components/components/feature/app-links/src/main/res/values-be/strings.xml index 002b6e59128..cc04650d290 100644 --- a/mobile/android/android-components/components/feature/app-links/src/main/res/values-be/strings.xml +++ b/mobile/android/android-components/components/feature/app-links/src/main/res/values-be/strings.xml @@ -4,8 +4,18 @@ Адкрыць у… Адкрыць у праграме? Вашы дзеянні, магчыма, больш не будуць прыватнымі. + + Адкрыць у %s? Вашы дзеянні, магчыма, больш не будуць прыватнымі. Адкрыць у іншай праграме + + Адкрыць у %s Ахатә синхронизациа асервер - - Мозилла ахыԥхьаӡара/асинхронизациа асервер ԥсахуп. Аԥсахрақәа рхархәаразы апликациа ааныжьра… Аԥхьаӡара diff --git a/mobile/android/fenix/app/src/main/res/values-am/strings.xml b/mobile/android/fenix/app/src/main/res/values-am/strings.xml index 198512db1df..68aef61ee0c 100644 --- a/mobile/android/fenix/app/src/main/res/values-am/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-am/strings.xml @@ -835,8 +835,6 @@ ብጁ የMozilla መለያ አገልጋይ ብጁ የማመሳሰል አገልጋይ - - የMozilla መለያ/አመሳስል አገልጋይ ተቀይሯል። ለውጦችን ለመተግበር መተግበሪያውን በማቆም ላይ… መለያ @@ -1524,9 +1522,9 @@ ማውረድ አልተሳካም - ውርዶችን ይፈልጉ + ውርዶችን ይፈልጉ - ምንም ውጤቶች አልተገኙም + ምንም ውጤቶች አልተገኙም ሁሉንም ይምረጡ خادوم مزامنة مخصص - - تعدّل خادم حسابات Mozilla/Sync. سيغلق التطبيق لإجراء التغييرات… الحساب diff --git a/mobile/android/fenix/app/src/main/res/values-azb/strings.xml b/mobile/android/fenix/app/src/main/res/values-azb/strings.xml index baa9c33abfc..6e572566442 100644 --- a/mobile/android/fenix/app/src/main/res/values-azb/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-azb/strings.xml @@ -614,8 +614,6 @@ اؤزل موْزیلا حسابیْ سِروری اؤزل دؤنگل سرور - - موْزیلا حسابیْ/دؤنگل سروری دگیشدیریلدی. دگیشمه‌لری یئرینه سالماق اوچون اپلیکیشن‌دن چیخیلیر… حساب diff --git a/mobile/android/fenix/app/src/main/res/values-be/strings.xml b/mobile/android/fenix/app/src/main/res/values-be/strings.xml index dee73f08b88..73d82c2437d 100644 --- a/mobile/android/fenix/app/src/main/res/values-be/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-be/strings.xml @@ -115,6 +115,12 @@ Text for the title displayed in the contextual feature recommendation popup promoting the navigation bar. --> Аглядайце хутчэй з новай навігацыяй + + Правядзіце пальцам па панэлі інструментаў, каб пераключыць укладкі Патрабуецца доступ да камеры. Перайдзіце ў налады Android, націсніце "Дазволы", і затым "Дазволіць". @@ -504,6 +510,8 @@ uBlock Origin Privacy Badger + + Search by Image Водгукі: %1$s @@ -668,8 +676,6 @@ Уласны сервер уліковых запісаў Mozilla Уласны сервер сінхранізацыі - - Сервер уліковых запісаў Mozilla/сінхранізацыі зменены. Выхад з праграмы, каб прымяніць змены… Уліковы запіс @@ -1217,6 +1223,8 @@ Вылучана: %1$d Выдаліць + + Іншыя Увядзіце пошукавыя запыты + + Выдаліць закладку + + Выдаліць папку Шукаць у закладках Личен сървър за Sync - - Променен акаунт в Mozilla/Sync. Излизане от приложението за прилагане на промените… Профил @@ -1527,9 +1525,9 @@ Грешка при изтегляне - Търсене на изтегляния + Търсене на изтегляния - Няма резултати + Няма резултати Избиране на всичко Икона за предпочитание за изключение с подобрена защита от проследяване @@ -3197,6 +3195,8 @@ Не са намерени тракери Настройки за поверителност и сигурност + + Права Dafariad Sync personelaet - - Kemmet eo bet an dafariad kontoù Mozilla/Sync. Serriñ a raio an arload evit kemer ar c\'hemmoù e kont… Kont diff --git a/mobile/android/fenix/app/src/main/res/values-bs/strings.xml b/mobile/android/fenix/app/src/main/res/values-bs/strings.xml index 946034f2f0a..4045268c0d1 100644 --- a/mobile/android/fenix/app/src/main/res/values-bs/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-bs/strings.xml @@ -834,8 +834,6 @@ Prilagođeni server Mozilla računa Zaseban Sync server - - Mozilla račun/Sync server izmijenjen. Napuštanje aplikacije radi primjene promjena… Račun @@ -1527,9 +1525,9 @@ Neuspjelo preuzimanje - Traži preuzimanja + Traži preuzimanja - Nema pronađenih rezultata + Nema pronađenih rezultata Označi sve Ikona preferencije izuzetaka poboljšane zaštite od praćenja @@ -3197,6 +3195,8 @@ Nisu pronađeni tragači Podešavanja sigurnosti i privatnosti + + Dozvole Servidor del Sync personalitzat - - S’ha modificat el servidor de comptes de Mozilla o del Sync. L’aplicació es tancarà per aplicar els canvis… Compte @@ -1521,9 +1519,9 @@ Ha fallat la baixada - Cerca les baixades + Cerca les baixades - No s’ha trobat cap resultat + No s’ha trobat cap resultat Selecciona-ho tot Icona de la preferència d’excepció de protecció contra el seguiment millorada diff --git a/mobile/android/fenix/app/src/main/res/values-cak/strings.xml b/mobile/android/fenix/app/src/main/res/values-cak/strings.xml index f552743de0c..2c62632f769 100644 --- a/mobile/android/fenix/app/src/main/res/values-cak/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-cak/strings.xml @@ -549,8 +549,6 @@ Ichinan ruk\'u\'x rusamaj Mozilla account Ichinan ruk\'u\'x rusamaj Sync - - Xjal ruk\'u\'x kisamaj Mozilla Account/Sync. Nitz\'apïx chokoy richin yesamajïx ri taq jaloj… Rub\'i\' taqoya\'l diff --git a/mobile/android/fenix/app/src/main/res/values-co/strings.xml b/mobile/android/fenix/app/src/main/res/values-co/strings.xml index fb83c3d9f3d..31e06452e9c 100644 --- a/mobile/android/fenix/app/src/main/res/values-co/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-co/strings.xml @@ -837,8 +837,6 @@ Servitore persunalizatu di contu Mozilla Servitore persunalizatu di sincrunizazione - - Servitore di contu o di sincrunizazione Mozilla mudificatu. Chjusura di l’appiecazione per piglià i cambiamenti in contu… Contu @@ -1530,9 +1528,9 @@ Fiascu di u scaricamentu - Circà in i scaricamenti + Circà in i scaricamenti - Nisunu risultatu trovu + Nisunu risultatu trovu Tuttu selezziunà Lucalizazione - - + Nutificazione Allucamentu permanente @@ -2286,7 +2283,7 @@ --> Icona di preferenza d’eccezzione à a prutezzione rinfurzata contr’à u spiunagiu @@ -3200,6 +3197,8 @@ Ùn si trova nisunu perseguitatore Parametri di cunfidenzialità è di sicurità + + Permessi Vlastní server pro synchronizaci - - Server pro účet Mozilly nebo synchronizaci byl změněn. Pro aplikování změn se nyní aplikace ukončí… Účet @@ -1529,9 +1527,9 @@ Stahování selhalo - Vyhledávání stažených souborů + Vyhledávání stažených souborů - Nenalezeny žádné výsledky + Nenalezeny žádné výsledky Vybrat vše Ikona nastavení výjimek z rozšířené ochrany proti sledování @@ -3198,6 +3196,8 @@ Nebyly nalezeny žádné sledovací prvky Nastavení soukromí a bezpečnosti + + Oprávnění Gweinydd Sync Cyfaddas - - Mae eich cyfrif Mozilla/Gweinydd Sync wedi’i addasu. Wrthi’n gadael y rhaglen er mwyn gwneud newidiadau… Cyfrif @@ -1529,9 +1527,9 @@ Methodd y llwytho i lawr - Chwilio\'r llwythi + Chwilio\'r llwythi - Heb ganfod canlyniadau + Heb ganfod canlyniadau Dewis y cyfan Eicon dewis eithriad diogelu tracio gwell @@ -3199,6 +3197,8 @@ Heb ganfod tracwyr Gosodiadau preifatrwydd a diogelwch + + Caniatâd Selvvalgt synkroniseringsserver - - Mozilla-konto/Sync-server ændret. Afslutter applikationen for at anvende ændringerne… Konto @@ -1527,9 +1525,9 @@ Hentning mislykkedes - Søg i hentede filer + Søg i hentede filer - Ingen resultater fundet + Ingen resultater fundet Vælg alle Ikon for undtagelsesindstillinger for udvidet beskyttelse mod sporing diff --git a/mobile/android/fenix/app/src/main/res/values-de/strings.xml b/mobile/android/fenix/app/src/main/res/values-de/strings.xml index 7e9c62c8d91..534b52d69bf 100644 --- a/mobile/android/fenix/app/src/main/res/values-de/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-de/strings.xml @@ -837,8 +837,6 @@ Benutzerdefinierter Mozilla-Kontoserver Benutzerdefinierter Sync-Server - - Server für Mozilla-Konto/Sync geändert. Anwendung wird beendet, um Änderungen zu übernehmen… Konto @@ -1530,9 +1528,9 @@ Download fehlgeschlagen - Downloads durchsuchen + Downloads durchsuchen - Keine Ergebnisse gefunden + Keine Ergebnisse gefunden Alle auswählen Ausnahme-Einstellungssymbol für verbesserten Tracking-Schutz @@ -3199,6 +3197,8 @@ Keine Tracker gefunden Einstellungen zu Datenschutz und Sicherheit + + Berechtigungen Swójski synchronizěrowański serwer - - Kontowy resp. synchronizěrowański serwer Mozilla jo se změnił. Nałoženje se kóńcy, aby se změny nałožyli… Konto @@ -1530,9 +1528,9 @@ Ześěgnjenje njejo se raźiło - Ześěgnjenja pśepytaś + Ześěgnjenja pśepytaś - Žedne wuslědki namakane + Žedne wuslědki namakane Wšykne wubraś Symbol wuwześowego nastajenja za pólěpšony slědowański šćit @@ -3199,6 +3197,8 @@ Žedne pśeslědowaki namakane Nastajenja priwatnosći a wěstoty + + Pšawa Προσαρμοσμένος διακομιστής Sync - - Ο διακομιστής λογαριασμού Mozilla και συγχρονισμού τροποποιήθηκε. Τερματισμός εφαρμογής για εφαρμογή των αλλαγών… Λογαριασμός @@ -1524,9 +1522,9 @@ Η λήψη απέτυχε - Αναζήτηση λήψεων + Αναζήτηση λήψεων - Δεν βρέθηκαν αποτελέσματα + Δεν βρέθηκαν αποτελέσματα Επιλογή όλων Εικονίδιο προτίμησης εξαίρεσης από την ενισχυμένη προστασία από καταγραφή diff --git a/mobile/android/fenix/app/src/main/res/values-en-rCA/strings.xml b/mobile/android/fenix/app/src/main/res/values-en-rCA/strings.xml index 9d95cd32a53..93cd7f138d8 100644 --- a/mobile/android/fenix/app/src/main/res/values-en-rCA/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-en-rCA/strings.xml @@ -826,8 +826,6 @@ Custom Mozilla account server Custom Sync server - - Mozilla account/Sync server modified. Quitting the application to apply changes… Account @@ -2204,7 +2202,7 @@ --> Enhanced tracking protection exception preference icon diff --git a/mobile/android/fenix/app/src/main/res/values-en-rGB/strings.xml b/mobile/android/fenix/app/src/main/res/values-en-rGB/strings.xml index f60598d397c..b94cb52ef9b 100644 --- a/mobile/android/fenix/app/src/main/res/values-en-rGB/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-en-rGB/strings.xml @@ -836,8 +836,6 @@ Custom Mozilla account server Custom Sync server - - Mozilla account/Sync server modified. Quitting the application to apply changes… Account @@ -1529,9 +1527,9 @@ Download failed - Search downloads + Search downloads - No results found + No results found Select all Enhanced tracking protection exception preference icon @@ -3199,6 +3197,8 @@ No trackers found Privacy and security settings + + Permissions Personecigita servilo de spegulado - - La agordoj de konto de Mozilla aŭ de spegulado ŝanĝiĝis. Apo finiĝas por apliki la ŝanĝojn… Konto @@ -1527,9 +1525,9 @@ Elŝuto malsukcesa - Serĉi en elŝutoj + Serĉi en elŝutoj - Neniu rezulto trovita + Neniu rezulto trovita Elekti ĉion Emblemo de la prefero de escepto por plibonigita protekto kontraŭ spurado diff --git a/mobile/android/fenix/app/src/main/res/values-es-rAR/strings.xml b/mobile/android/fenix/app/src/main/res/values-es-rAR/strings.xml index e9661ca07b0..b7090f60a4b 100644 --- a/mobile/android/fenix/app/src/main/res/values-es-rAR/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-es-rAR/strings.xml @@ -835,8 +835,6 @@ Servidor personalizado de cuenta de Mozilla Servidor personalizado de Sync - - Cuenta de Mozilla/servidor de Sync modificados. Saliendo de la aplicación para aplicar cambios… Cuenta @@ -1528,9 +1526,9 @@ Falló la descarga - Buscar descargas + Buscar descargas - No se encontraron resultados + No se encontraron resultados Seleccionar todo Icono de preferencia de excepción de protección de rastreo mejorada @@ -3197,6 +3195,8 @@ No se encontraron rastreadores Configuración de privacidad y seguridad + + Permisos Servidor personalizado de Sync - - Servidores de cuenta de Mozilla y Sync modificados. Cerrando la aplicación para aplicar los cambios… Cuenta @@ -1529,9 +1527,9 @@ Descarga fallida - Buscar en descargas + Buscar en descargas - No se encontraron resultados + No se encontraron resultados Seleccionar todo Ícono de preferencia de excepción de la protección de seguimiento mejorada @@ -3198,6 +3196,8 @@ No se encontraron rastreadores Ajustes de privacidad y seguridad + + Permisos Servidor personalizado de Sync - - Servidores de cuenta de Mozilla y Sync modificados. Cerrando la aplicación para aplicar los cambios… Cuenta @@ -1528,9 +1526,9 @@ Descarga fallida - Buscar en descargas + Buscar en descargas - No se han encontrado resultados + No se han encontrado resultados Seleccionar todo Icono de preferencia de excepción de protección contra el rastreo mejorada diff --git a/mobile/android/fenix/app/src/main/res/values-es-rMX/strings.xml b/mobile/android/fenix/app/src/main/res/values-es-rMX/strings.xml index c2ae4f44167..beccb11519e 100644 --- a/mobile/android/fenix/app/src/main/res/values-es-rMX/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-es-rMX/strings.xml @@ -817,8 +817,6 @@ Servidor de cuenta personalizado de Mozilla Servidor personalizado de Sync - - Servidores de cuenta de Mozilla y Sync modificados. Cerrando la aplicación para aplicar los cambios… Cuenta @@ -2159,7 +2157,7 @@ --> Ícono de preferencia de excepción de protección contra el rastreo mejorada diff --git a/mobile/android/fenix/app/src/main/res/values-es/strings.xml b/mobile/android/fenix/app/src/main/res/values-es/strings.xml index 24657bc02ea..9359ab82093 100644 --- a/mobile/android/fenix/app/src/main/res/values-es/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-es/strings.xml @@ -835,8 +835,6 @@ Servidor personalizado de cuenta de Mozilla Servidor personalizado de Sync - - Servidores de cuenta de Mozilla y Sync modificados. Cerrando la aplicación para aplicar los cambios… Cuenta @@ -1528,9 +1526,9 @@ Descarga fallida - Buscar en descargas + Buscar en descargas - No se han encontrado resultados + No se han encontrado resultados Seleccionar todo Icono de preferencia de excepción de protección contra el rastreo mejorada diff --git a/mobile/android/fenix/app/src/main/res/values-eu/strings.xml b/mobile/android/fenix/app/src/main/res/values-eu/strings.xml index 6a29e83ed89..734e0d1e3d4 100644 --- a/mobile/android/fenix/app/src/main/res/values-eu/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-eu/strings.xml @@ -836,8 +836,6 @@ Mozilla kontu-zerbitzari pertsonalizatua Sinkronizaziorako zerbitzari pertsonalizatua - - Mozilla kontuko/Sync zerbitzaria aldatuta. Aplikaziotik irteten aldaketak aplikatzeko… Kontua @@ -1529,9 +1527,9 @@ Deskargak huts egin du - Bilatu deskargak + Bilatu deskargak - Ez da emaitzarik aurkitu + Ez da emaitzarik aurkitu Hautatu dena Jarraipenaren babes hobetuaren salbuespenen hobespen-ikonoa diff --git a/mobile/android/fenix/app/src/main/res/values-fa/strings.xml b/mobile/android/fenix/app/src/main/res/values-fa/strings.xml index b6f4719ac60..3d0a751891e 100644 --- a/mobile/android/fenix/app/src/main/res/values-fa/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-fa/strings.xml @@ -836,8 +836,6 @@ کارساز حساب کاربری سفارشی Mozilla کارساز همگام‌سازی سفارشی - - کارساز حساب/همگام‌سازی Mozilla تغییر کرد. برای اعمال تغییرات برنامه را ببندید… حساب کاربری diff --git a/mobile/android/fenix/app/src/main/res/values-fi/strings.xml b/mobile/android/fenix/app/src/main/res/values-fi/strings.xml index fc75a9a8158..d1136016203 100644 --- a/mobile/android/fenix/app/src/main/res/values-fi/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-fi/strings.xml @@ -828,8 +828,6 @@ Mukautettu Mozilla-tilin palvelin Mukautettu synkronointipalvelin - - Mozilla-tilin tai synkronoinnin palvelinta muutettu. Lopetetaan sovellus, jotta muutokset tulevat voimaan… Tili @@ -1513,9 +1511,9 @@ Lataus epäonnistui - Etsi latauksista + Etsi latauksista - Tuloksia ei löytynyt + Tuloksia ei löytynyt Valitse kaikki Tehostetun seurannan suojauksen poikkeusasetuskuvake diff --git a/mobile/android/fenix/app/src/main/res/values-fr/strings.xml b/mobile/android/fenix/app/src/main/res/values-fr/strings.xml index 84ac0412a56..7b4ef6c45fd 100644 --- a/mobile/android/fenix/app/src/main/res/values-fr/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-fr/strings.xml @@ -832,8 +832,6 @@ Serveur de compte Mozilla personnalisé Serveur de synchronisation personnalisé - - Serveur pour la synchronisation ou le compte Mozilla modifié. Fermeture de l’application pour appliquer les modifications… Compte @@ -1525,9 +1523,9 @@ Échec du téléchargement - Rechercher dans les téléchargements + Rechercher dans les téléchargements - Aucun résultat + Aucun résultat Tout sélectionner Icône de préférence d’exception à la protection renforcée contre le pistage diff --git a/mobile/android/fenix/app/src/main/res/values-fur/strings.xml b/mobile/android/fenix/app/src/main/res/values-fur/strings.xml index 07ecdf178b4..264a4c03887 100644 --- a/mobile/android/fenix/app/src/main/res/values-fur/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-fur/strings.xml @@ -837,8 +837,6 @@ Servidôr di account Mozilla personalizât Servidôr personalizât par Sync - - Modificât servidôr par account Mozilla e sincronizazion. Daûr a sierâ la aplicazion par aplicâ lis modifichis… Account @@ -1526,9 +1524,9 @@ Discjariament falît - Cîr tai discjariâts + Cîr tai discjariâts - Nissun risultât cjatât + Nissun risultât cjatât Selezione dut Icone des preferencis pes ecezions pe protezion des spiis miorade diff --git a/mobile/android/fenix/app/src/main/res/values-fy-rNL/strings.xml b/mobile/android/fenix/app/src/main/res/values-fy-rNL/strings.xml index 3fb080ac1e8..0fc7002945f 100644 --- a/mobile/android/fenix/app/src/main/res/values-fy-rNL/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-fy-rNL/strings.xml @@ -838,8 +838,6 @@ Oanpaste Mozilla-accountserver Oanpaste Syncserver - - Mozilla-account-/Syngronisaasjeserver oanpast. Tapassing wurdt ôfsluten om wizigingen ta te passen… Account @@ -1531,9 +1529,9 @@ Downloaden mislearre - Downloads trochsykje + Downloads trochsykje - Gjin resultaten fûn + Gjin resultaten fûn Alles selektearje Piktogram foar de foarkar foar Ferbettere beskerming tsjin folgjen-útsûndering @@ -3201,6 +3199,8 @@ Gjin trackers fûn Privacy- en befeiligingsynstellingen + + Tastimmingen Frithealaiche sioncronachaidh gnàthaichte - - Chaidh frithealaichte nan cunntasan Mozilla no an t-sioncronachaidh atharrachadh. Fàg an aplacaid gus na h-atharraichean a chur an gnìomh… Cunntas diff --git a/mobile/android/fenix/app/src/main/res/values-gl/strings.xml b/mobile/android/fenix/app/src/main/res/values-gl/strings.xml index f06b3e24ac7..356f8b0cec2 100644 --- a/mobile/android/fenix/app/src/main/res/values-gl/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-gl/strings.xml @@ -837,8 +837,6 @@ Servidor de contas de Mozilla personalizado Servidor de sincronización personalizado - - Conta de Mozilla/servidor de sincronización modificado. Saíndo da aplicación para aplicar os cambios… Conta @@ -1530,9 +1528,9 @@ Produciuse un fallo ao descargar - Busca descargas + Busca descargas - Non se atoparon resultados + Non se atoparon resultados Seleccionar todo Icona de preferencia de excepción de protección de rastrexo mellorada @@ -3199,6 +3197,8 @@ Non se atoparon rastrexadores Configuración de privacidade e seguridade + + Permisos Mohendahavusu Sync momba’etepyre - - Mozilla mba’ete/Sync mohendahavusu moambuepyre. Esẽ tembiporu’ígui iñambue hag̃ua… Mba’ete @@ -900,6 +898,8 @@ Emoherakuã juajuha Emoĩ juajuha mboguejyha %1$s WhatsApp omoherakuãpyrévape + + Eipepirũ ne angirũnguérape toikundaha pya’e ha tekorosãme %1$s ndive emoherakuãvo juajuha WhatsApp-pe. Juajuha moherakuãpyre @@ -1514,9 +1514,9 @@ Ñemboguejy ojavy - Ñemboguejy jeheka + Ñemboguejy jeheka - Ndaipóri tembiapokue + Ndaipóri tembiapokue Mbosa’ypa Erohoryvéva ta’ãnga’i ñemo’ã ykeguáva jehapykueho rovake @@ -3476,6 +3476,8 @@ ¡Eiméma tape ku’ápe! Mbohapy jeku’e hu’ãma ha 3 hemby. Emohu’ãma 4 jeku’e. ¡Mokõintema opyta! + + ¡Oĩmbotaitéma! Eiméma ag̃uiete tenda eg̃uahẽsehápegui. Prilagođeni poslužitelj za sinkronizaciju - - Mozilla račun/server za sinkronizaciju je promijenjen. Aplikacija se zatvara kako bi se promjene primijenile … Račun diff --git a/mobile/android/fenix/app/src/main/res/values-hsb/strings.xml b/mobile/android/fenix/app/src/main/res/values-hsb/strings.xml index e7804d13e89..26b2b912109 100644 --- a/mobile/android/fenix/app/src/main/res/values-hsb/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-hsb/strings.xml @@ -837,8 +837,6 @@ Swójski kontowy serwer Mozilla Swójski synchronizowanski serwer - - Kontowy resp. synchronizowanski serwer Mozilla je so změnił. Nałoženje so kónči, zo bychu so změny nałožili… Konto @@ -1530,9 +1528,9 @@ Sćehnjenje njeje so poradźiło - Sćehnjenja přepytać + Sćehnjenja přepytać - Žane wuslědki namakane + Žane wuslědki namakane Wšě wubrać Symbol wuwzaćoweho nastajenja za polěpšeny slědowanski škit @@ -3199,6 +3197,8 @@ Žane přesćěhowaki namakane Nastajenja priwatnosće a wěstoty + + Prawa Egyéni Sync kiszolgáló - - A Mozilla-fiók/Sync-kiszolgáló módosítva. Kilépés az alkalmazásból a változások érvényesítéséhez… Fiók @@ -1485,6 +1483,10 @@ Eltávolítás Törlés + + Navigálás visszafelé + + Navigálás fel Webcím megosztása @@ -1525,9 +1527,9 @@ Letöltés sikertelen - Keresés a letöltések között + Keresés a letöltések között - Nincs találat + Nincs találat Összes kiválasztása Fokozott követés elleni védelem kivételeinek beállítási ikonja @@ -3194,6 +3196,8 @@ Nem találhatóak nyomkövetők Adatvédelmi és biztonsági beállítások + + Engedélyek Ընտրովի համաժամեցման սերվեր - - Mozilla հաշիվը/Համաժամեցման սպասարկիչը փոփոխվել են: Դուրս եկեք հավելվածից՝ փոփոխությունները գորխադրելու համար… Հաշիվ @@ -1528,9 +1526,9 @@ Ներբեռնումը ձախողվեց - Որոնել ներբեռնում + Որոնել ներբեռնում - Արդյունքներ չկան + Արդյունքներ չկան Նշել բոլորը Ընդլայնված հետագծման պաշտպանության բացառության նախապատվության պատկերակ @@ -3197,6 +3195,8 @@ Հետագծողներ չեն գտնվել Գաղտնիության և անվտանգության հավելումներ + + Թույլտվություններ Servitor del Sync personalisate - - Servitor de conto/sync Mozillac modificate. Quitante le application pro applicar cambiamentos… Conto @@ -1530,9 +1528,9 @@ Discargamento fallite - Cercar in le discargamentos + Cercar in le discargamentos - Nulle resultato trovate + Nulle resultato trovate Seliger toto Icone de preferentia de exception al protection reinfortiate contra le traciamento @@ -3203,6 +3201,8 @@ Nulle traciatores trovate Configurationes de confidentialitate e securitate + + Permissos Penyedia Sync khusus - - Akun Mozilla/server Sync diubah. Keluar dari aplikasi untuk menerapkan perubahan… Akun @@ -1521,9 +1519,9 @@ Unduhan gagal - Cari di unduhan + Cari di unduhan - Tidak ada yang ditemukan + Tidak ada yang ditemukan Ikon preferensi pengecualian perlindungan pelacakan yang ditingkatkan diff --git a/mobile/android/fenix/app/src/main/res/values-is/strings.xml b/mobile/android/fenix/app/src/main/res/values-is/strings.xml index 9bf5c30a2ca..2df6301397d 100644 --- a/mobile/android/fenix/app/src/main/res/values-is/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-is/strings.xml @@ -836,8 +836,6 @@ Sérsniðinn netþjónn fyrir Mozilla-aðganga Sérsniðinn samstillingarþjónn - - Mozilla-reikningi / samstillingarþjóni hefur verið breytt. Slekk á forritinu til að innleiða breytingar… Reikningur @@ -1203,9 +1201,9 @@ --> Dragðu til að endurlesa - Skrunaðu til að fela verkfæraslána + Skrunaðu til að fela verkfærastikuna - Strjúka verkfæraslánni upp til að opna flipa + Strjúktu verkfærastikunni upp til að opna flipa Skrunaðu til að fela veffangastiku og verkfærastiku @@ -1223,7 +1221,7 @@ Bókarmerkja valmynd - Bókamerkjaslá + Bókamerkjastika Önnur bókamerki @@ -1529,9 +1527,9 @@ Niðurhal mistókst - Leita í sóttum skrám + Leita í sóttum skrám - Engar niðurstöður fundust + Engar niðurstöður fundust Velja allt Tákn fyrir undantekningartilvik varðandi auka rakningarvernd @@ -3199,6 +3197,8 @@ Engir rekjarar fundust Friðhelgi og öryggisstillingar + + Heimildir Server personalizzato per Sync - - Server per account Mozilla e sincronizzazione modificato. L’app verrà chiusa per applicare le modifiche… Account @@ -1527,9 +1525,9 @@ Download non riuscito - Cerca nei download + Cerca nei download - Nessun risultato trovato + Nessun risultato trovato Seleziona tutto Icona delle preferenze per le eccezioni della protezione antitracciamento avanzata @@ -3196,6 +3194,8 @@ Nessun elemento tracciante rilevato Impostazioni per privacy e sicurezza + + Permessi שרת Sync מותאם אישית - - שרת חשבון Mozilla השתנה. היישום ייסגר לצורך להחלת השינויים… חשבון @@ -1527,9 +1525,9 @@ ההורדה נכשלה - חיפוש בהורדות + חיפוש בהורדות - לא נמצאו תוצאות + לא נמצאו תוצאות בחירת הכול סמל של העדפת חריגות להגנת מעקב מתקדמת @@ -3192,6 +3190,8 @@ לא נמצאו רכיבי מעקב הגדרות פרטיות ואבטחה + + הרשאות カスタム Sync サーバー - - Mozilla アカウント/Sync サーバーが変更されました。変更を適用するためにアプリケーションを終了しています… アカウント @@ -1529,9 +1527,9 @@ ダウンロードに失敗しました - ダウンロードを検索 + ダウンロードを検索 - 検索結果はありません + 検索結果はありません すべて選択 強化型トラッキング防止の例外設定のアイコン diff --git a/mobile/android/fenix/app/src/main/res/values-ka/strings.xml b/mobile/android/fenix/app/src/main/res/values-ka/strings.xml index 77a466fffef..3f1498d1ab6 100644 --- a/mobile/android/fenix/app/src/main/res/values-ka/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-ka/strings.xml @@ -837,8 +837,6 @@ Mozilla-ანგარიშის მითითებული სერვერი დასინქრონების მითითებული სერვერი - - Mozilla-ანგარიშის/სინქრონიზაციის სერვერი შეიცვალა. პროგრამა დაიხურება ცვლილებების ასახვისთვის… ანგარიში @@ -1526,9 +1524,9 @@ ჩამოტვირთვა ვერ მოხერხდა - ძიება ჩამოტვირთვებში + ძიება ჩამოტვირთვებში - შედეგები ვერ მოიძებნა + შედეგები ვერ მოიძებნა ყველას მონიშვნა თვალთვალისგან გაძლიერებული დაცვის გამონაკლისის მანიშნებელი ხატულა diff --git a/mobile/android/fenix/app/src/main/res/values-kab/strings.xml b/mobile/android/fenix/app/src/main/res/values-kab/strings.xml index df3ca5ec5e5..989bc266788 100644 --- a/mobile/android/fenix/app/src/main/res/values-kab/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-kab/strings.xml @@ -779,8 +779,6 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Sagen aqeddac n umiḍan Mozilla Sagen aeddac n umtawi - - Aqeddac i umtawi neɣ amiḍan n Mozilla yettwasenfel, Ffeɣ seg usnas akken ad iddu usnifel… Amiḍan @@ -1411,9 +1409,9 @@ Tiktiwin tigejdanin yuzzlen ur nṣeḥḥi ara Ifuyla ittwazedmen - Nadi isadaren + Nadi isadaren - Ulac igmad yettwafen + Ulac igmad yettwafen Fren akk Tignit n usmenyif n tasureft i ummesten yettwasǧehden mgal aḍfar diff --git a/mobile/android/fenix/app/src/main/res/values-kk/strings.xml b/mobile/android/fenix/app/src/main/res/values-kk/strings.xml index 0b2e4cc6696..b1280210ca5 100644 --- a/mobile/android/fenix/app/src/main/res/values-kk/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-kk/strings.xml @@ -830,8 +830,6 @@ Таңдауыңызша Mozilla тіркелгі сервері Таңдауыңызша синхрондау сервері - - Mozilla тіркелгісі/синхрондау сервері өзгертілген. Өзгерістерді іске асыру үшін қолданба жұмысын аяқтау… Тіркелгі @@ -1506,9 +1504,9 @@ Жүктеп алу сәтсіз аяқталды - Жүктемелер ішінен іздеу + Жүктемелер ішінен іздеу - Нәтижелер табылмады + Нәтижелер табылмады Барлығын таңдау Бақылаудан жақсартылған қорғаныстың ережеден тыс жағдайының баптау таңбашасы diff --git a/mobile/android/fenix/app/src/main/res/values-ko/strings.xml b/mobile/android/fenix/app/src/main/res/values-ko/strings.xml index c173ff1b1e5..8c3beeaa391 100644 --- a/mobile/android/fenix/app/src/main/res/values-ko/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-ko/strings.xml @@ -837,8 +837,6 @@ 사용자 지정 Mozilla 계정 서버 사용자 지정 동기화 서버 - - Mozilla 계정/동기화 서버가 수정되었습니다. 변경사항을 적용하기 위해 애플리케이션을 종료하는 중… 계정 @@ -1530,9 +1528,9 @@ 다운로드 실패 - 다운로드 검색 + 다운로드 검색 - 결과 없음 + 결과 없음 모두 선택 향상된 추적 방지 기능의 예외 설정 아이콘 @@ -3199,6 +3197,8 @@ 추적기 없음 개인 정보 및 보안 설정 + + 권한 ກຳຫນົດເຊີເວີ Sync - - ບັນຊີ Mozilla/ເຊີບເວີ Sync ຖືກແກ້ໄຂ. ກຳລັງອອກຈາກແອັບພລິເຄຊັນເພື່ອນຳໃຊ້ການປ່ຽນແປງ… ບັນຊີ @@ -1528,9 +1526,9 @@ ການດາວໂຫຼດລົ້ມເຫລວ - ຄົ້ນຫາການດາວໂຫຼດ + ຄົ້ນຫາການດາວໂຫຼດ - ບໍ່ພົບຜົນການຄົ້ນຫາ + ບໍ່ພົບຜົນການຄົ້ນຫາ ເລືອກ​ທັງ​ຫມົດ @@ -2278,7 +2276,7 @@ --> ໄອຄອນການຍົກເວັ້ນການປ້ອງກັນການຕິດຕາມທີ່ປັບປຸງໃຫ້ດີຂຶ້ນ diff --git a/mobile/android/fenix/app/src/main/res/values-ml/strings.xml b/mobile/android/fenix/app/src/main/res/values-ml/strings.xml index 715a1150f5e..c7f86ebe762 100644 --- a/mobile/android/fenix/app/src/main/res/values-ml/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-ml/strings.xml @@ -812,8 +812,6 @@ ഇഷ്ടനുസൃത മോസില്ല അക്കൗണ്ടു് സേവനദാതാവു് ഇഷ്‌ടാനുസൃത സമന്വയ സെർവർ - - ഫയർ‌ഫോക്സ് അകൗണ്ട്/സമന്വയ പ്രദായിണി പുതുച്ചു. മാറ്റങ്ങൾ പ്രയോഗിക്കുന്നതിന് പ്രയോഗത്തിൽ നിന്നു പുറത്തുകടക്കുന്നു… അക്കൗണ്ട് @@ -1451,9 +1449,9 @@ ഇറക്കിവയ്ക്കൽ തോറ്റു - ഇറക്കിവച്ചതിലു് തിരയുക + ഇറക്കിവച്ചതിലു് തിരയുക - ഫലങ്ങളൊന്നും കിട്ടിയില്ല + ഫലങ്ങളൊന്നും കിട്ടിയില്ല എല്ലാം തിരഞ്ഞെടുക്കുക മെച്ചപ്പെടുത്തിയ പിന്തുടൎച്ച പരിരക്ഷണ ഒഴിവാക്കൽ മുൻഗണന അടയാളം @@ -3042,6 +3040,8 @@ പിന്തുടർച്ചയന്ത്രങ്ങൾ കണ്ടെത്താൻ കഴിഞ്ഞില്ല സ്വകാര്യതയും സുരക്ഷ ക്രമീകരണങ്ങൾ + + അനുമതികൾ Selvvalgt synkroniseringsserver - - Mozilla-konto/synkroniseringsserver endret. Avslutter applikasjonen for å legge til endringer… Konto @@ -2181,7 +2179,7 @@ --> Ikon for unntaksinnstillinger for utvidet sporingsbeskyttelse diff --git a/mobile/android/fenix/app/src/main/res/values-nl/strings.xml b/mobile/android/fenix/app/src/main/res/values-nl/strings.xml index 723f44b61ca..388de04edab 100644 --- a/mobile/android/fenix/app/src/main/res/values-nl/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-nl/strings.xml @@ -838,8 +838,6 @@ Aangepaste Mozilla-accountserver Aangepaste Synchronisatieserver - - Mozilla-account-/Synchronisatieserver aangepast. Toepassing wordt afgesloten om wijzigingen toe te passen… Account @@ -1531,9 +1529,9 @@ Downloaden mislukt - Downloads doorzoeken + Downloads doorzoeken - Geen resultaten gevonden + Geen resultaten gevonden Alles selecteren Pictogram voor de voorkeur voor Verbeterde bescherming tegen volgen-uitzondering @@ -3200,6 +3198,8 @@ Geen trackers gevonden Privacy- en beveiligingsinstellingen + + Toestemmingen Tilpassa synkroniseringsserver - - Mozilla-konto/synkroniseringsserver er endra. Avsluttar programmet for å kunne bruke endringane… Konto @@ -1528,9 +1526,9 @@ Mislykka nedlasting - Søk i nedlastingar + Søk i nedlastingar - Fann ingen resultat + Fann ingen resultat Merk alle Ikon for unntaksinnstillingar for utvida vern mot sporing @@ -3197,6 +3195,8 @@ Fann ingen sporarar Personvern- og sikkerheitsinnstillingar + + Løyve Servidor Sync personalizat - - Servidor de sincronizacion o compte Mozilla modificat. Tampadura de l’aplicacion per aplicar las modificacions… Compte @@ -1521,9 +1519,9 @@ Fracàs del telecargament - Recercar dins los telecargaments + Recercar dins los telecargaments - Cap de resultat pas trobat + Cap de resultat pas trobat Tot seleccionar Icòna de preferéncia d’excepcion de proteccion renfortida contra lo seguiment diff --git a/mobile/android/fenix/app/src/main/res/values-pa-rIN/strings.xml b/mobile/android/fenix/app/src/main/res/values-pa-rIN/strings.xml index d6b3088fded..748bcb2a942 100644 --- a/mobile/android/fenix/app/src/main/res/values-pa-rIN/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-pa-rIN/strings.xml @@ -840,9 +840,6 @@ ਪਸੰਦੀਦਾ Mozilla ਖਾਤਾ ਸਰਵਰ ਪਸੰਦੀਦਾ ਸਿੰਕ ਸਰਵਰ - - Mozilla ਖਾਤਾ/ਸਿੰਕ ਸਰਵਰ ਨੂੰ ਸੋਧਿਆ ਗਿਆ ਹੈ। -ਤਬਦੀਲੀਆਂ ਲਾਗੂ ਕਰਨ ਵਾਸਤੇ ਐਪਲੀਕੇਸ਼ਨ ਨੂੰ ਬੰਦ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ… ਖਾਤਾ @@ -1530,9 +1527,9 @@ ਡਾਊਨਲੋਡ ਅਸਫ਼ਲ ਹੈ - ਡਾਊਨਲੋਡਾਂ ਨੂੰ ਖੋਜੋ + ਡਾਊਨਲੋਡਾਂ ਨੂੰ ਖੋਜੋ - ਨਤੀਜੇ ਨਹੀਂ ਲੱਭੇ + ਨਤੀਜੇ ਨਹੀਂ ਲੱਭੇ ਸਭ ਨੂੰ ਚੁਣੋ ਵਾਧਾ ਕੀਤੀ ਟਰੈਕਿੰਗ ਰੋਧੀ ਛੋਟ ਪਸੰਦ ਆਈਕਾਨ diff --git a/mobile/android/fenix/app/src/main/res/values-pa-rPK/strings.xml b/mobile/android/fenix/app/src/main/res/values-pa-rPK/strings.xml index 0d6cad454bc..7b9e702945f 100644 --- a/mobile/android/fenix/app/src/main/res/values-pa-rPK/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-pa-rPK/strings.xml @@ -616,8 +616,6 @@ پسندیدہ موزیلا کھاتا سرور پسندیدہ سنک سرور - - موزیلا کھاتا/سنک سرور نوں سودھیا گیا اے۔ تبدیلیاں لاگو کرن واسطے ایپلیکیشن نوں بند کیتا جا رہا اے… کھاتہ diff --git a/mobile/android/fenix/app/src/main/res/values-pl/strings.xml b/mobile/android/fenix/app/src/main/res/values-pl/strings.xml index 5e30af0663e..f5d4067fa4f 100644 --- a/mobile/android/fenix/app/src/main/res/values-pl/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-pl/strings.xml @@ -836,8 +836,6 @@ Własny serwer kont Mozilli Własny serwer synchronizacji - - Zmieniono serwer kont Mozilli/synchronizacji. Wyłączanie aplikacji, aby zastosować zmiany… Konto @@ -1529,9 +1527,9 @@ Pobranie się nie powiodło - Szukaj w pobranych plikach + Szukaj w pobranych plikach - Brak wyników + Brak wyników Zaznacz wszystko Ikona preferencji wyjątku wzmocnionej ochrony przed śledzeniem diff --git a/mobile/android/fenix/app/src/main/res/values-pt-rBR/strings.xml b/mobile/android/fenix/app/src/main/res/values-pt-rBR/strings.xml index b28de2bd759..0c44d67eb04 100644 --- a/mobile/android/fenix/app/src/main/res/values-pt-rBR/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-pt-rBR/strings.xml @@ -836,8 +836,6 @@ Servidor personalizado de conta Mozilla Servidor personalizado de sincronização - - Modificado o servidor de conta Mozilla e sincronização. Saindo do aplicativo para aplicar as mudanças… Conta @@ -1529,9 +1527,9 @@ Falha ao baixar arquivo - Pesquisar nos arquivos baixados + Pesquisar nos arquivos baixados - Nenhum resultado encontrado + Nenhum resultado encontrado Selecionar tudo Ícone de preferência de exceção de proteção aprimorada contra rastreamento @@ -3199,6 +3197,8 @@ Nenhum rastreador encontrado Configurações de privacidade e segurança + + Permissões Servidor de sincronização personalizado - - Servidor de conta/Sincronização Mozilla modificado. A sair da aplicação para aplicar alterações… Conta @@ -1529,9 +1527,9 @@ Transferência falhou - Pesquisar transferências + Pesquisar transferências - Não foram encontrados resultados + Não foram encontrados resultados Selecionar tudo Ícone de preferências de exceção para a proteção melhorada contra a monitorização @@ -3199,6 +3197,8 @@ Não foram encontrados rastreadores Definições de privacidade e de segurança + + Permissões Server persunalisà per Sync - - Il server per il conto da Mozilla/Sync è vegnì modifitgà. L\'applicaziun vegn serrada per applitgar las midadas… Conto @@ -1527,9 +1525,9 @@ Telechargiada betg reussida - Retschertgar las telechargiadas + Retschertgar las telechargiadas - Na chattà nagins resultats + Na chattà nagins resultats Selecziunar tut Icona da las preferenzas per las excepziuns da la protecziun avanzada cunter il fastizar diff --git a/mobile/android/fenix/app/src/main/res/values-ru/strings.xml b/mobile/android/fenix/app/src/main/res/values-ru/strings.xml index 08c50b27fa1..552c2309676 100644 --- a/mobile/android/fenix/app/src/main/res/values-ru/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-ru/strings.xml @@ -836,8 +836,6 @@ Пользовательский сервер аккаунтов Mozilla Пользовательский сервер Синхронизации - - Изменён аккаунт Mozilla/сервер синхронизации. Выход из приложения для применения изменений… Аккаунт @@ -1529,9 +1527,9 @@ Загрузка не удалась - Поиск в загрузках + Поиск в загрузках - Результатов не найдено + Результатов не найдено Выбрать все Значок настройки исключения Улучшенной защиты от отслеживания @@ -3199,6 +3197,8 @@ Трекеров не найдено Настройки защиты и приватности + + Разрешения ᱠᱩᱥᱤᱭᱟᱜ ᱥᱭᱝᱠ ᱥᱟᱹᱨᱣᱟᱹᱨ - - Mozilla ᱠᱷᱟᱛᱟ/ ᱥᱭᱝᱠ ᱠᱟᱹᱨᱣᱟᱹᱨ ᱵᱚᱫᱚᱞᱮᱱᱟ ᱾ ᱵᱚᱫᱚᱞ ᱠᱚ ᱫᱚᱦᱚ ᱞᱟᱹᱜᱤᱫ ᱮᱯᱞᱤᱠᱮᱥᱚᱱ ᱵᱚᱸᱫᱚᱜ ᱠᱟᱱᱟ… ᱠᱷᱟᱛᱟ @@ -1456,9 +1454,9 @@ ᱰᱟᱣᱱᱞᱚᱰ ᱰᱤᱜᱟᱹᱣᱮᱱᱟ - ᱰᱟᱩᱱᱞᱚᱰ ᱯᱟᱱᱛᱮ ᱢᱮ + ᱰᱟᱩᱱᱞᱚᱰ ᱯᱟᱱᱛᱮ ᱢᱮ - ᱪᱮᱫ ᱛᱮᱞᱟ ᱵᱟᱭ ᱧᱟᱢ ᱞᱮᱱᱟ + ᱪᱮᱫ ᱛᱮᱞᱟ ᱵᱟᱭ ᱧᱟᱢ ᱞᱮᱱᱟ ᱵᱟᱲᱦᱟᱣᱟᱠᱟᱱ ᱯᱟᱸᱡᱟ ᱨᱚᱯᱷᱟ ᱵᱟᱹᱨᱜᱤᱞ ᱠᱩᱥᱤ ᱪᱤᱱᱦᱟᱹ diff --git a/mobile/android/fenix/app/src/main/res/values-scn/strings.xml b/mobile/android/fenix/app/src/main/res/values-scn/strings.xml index 1dd9a4f2f17..084ab9a2141 100644 --- a/mobile/android/fenix/app/src/main/res/values-scn/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-scn/strings.xml @@ -837,8 +837,6 @@ Sirburi dî cunti Mozilla pirsunalizzatu Sirburi di Sync pirsunalizzatu - - Canciasti u sirburi dî cunti Mozilla o di Sync. Hâ nèsciri di l\'applicazzioni pi riggistrari i canci… Cuntu @@ -1530,9 +1528,9 @@ Scarricamentu sfallutu - Riscedi nnê scarricamenti + Riscedi nnê scarricamenti - Nun attruvai nuḍḍu risurtatu + Nun attruvai nuḍḍu risurtatu Scarta tuttu Cona dâ prifirenza pi l\'eccizzioni dâ prutizzioni avanzata dî trazzamenti diff --git a/mobile/android/fenix/app/src/main/res/values-si/strings.xml b/mobile/android/fenix/app/src/main/res/values-si/strings.xml index f61d1009ac0..b96b885e9af 100644 --- a/mobile/android/fenix/app/src/main/res/values-si/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-si/strings.xml @@ -677,8 +677,6 @@ අභිරුචි මොසිල්ලා ගිණුම් සේවාදායකය අභිරුචි සමමුහුර්ත සේවාදායකය - - මොසිල්ලා ගිණුම / සමමුහූර්ත සේවාදායකය වෙනස් කර ඇත. වෙනස්කම් යෙදීමට යෙදුමෙන් ඉවත් වෙමින්… ගිණුම diff --git a/mobile/android/fenix/app/src/main/res/values-sk/strings.xml b/mobile/android/fenix/app/src/main/res/values-sk/strings.xml index cfa1adeaf49..27bf608ebe4 100644 --- a/mobile/android/fenix/app/src/main/res/values-sk/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-sk/strings.xml @@ -836,8 +836,6 @@ Vlastný server pre účet Mozilla Vlastný server pre synchronizáciu - - Server pre účet Mozilla alebo synchronizáciu bol zmenený. Pre použitie zmien sa teraz aplikácia ukončí… Účet @@ -1529,9 +1527,9 @@ Sťahovanie zlyhalo - Hľadať v stiahnutých súboroch + Hľadať v stiahnutých súboroch - Nenašli sa žiadne výsledky + Nenašli sa žiadne výsledky Vybrať všetko Ikona nastavenia výnimky z Rozšírenej ochrany pred sledovaním @@ -3198,6 +3196,8 @@ Nenašli sa žiadne sledovacie prvky Nastavenie súkromia a bezpečnosti + + Povolenia من پسند ہم وقت سرور - - موزیلا کھاتہ/ہم وقت سرور دی تجدید تھی ڳئی ہے۔ تبدیلیان لاگو کرݨ کیتے ایپ چھوڑیندے پئے ہو۔۔۔ کھاتہ diff --git a/mobile/android/fenix/app/src/main/res/values-sl/strings.xml b/mobile/android/fenix/app/src/main/res/values-sl/strings.xml index a14e5c8d0db..5d18c69134e 100644 --- a/mobile/android/fenix/app/src/main/res/values-sl/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-sl/strings.xml @@ -828,8 +828,6 @@ Strežnik računov Mozilla po meri Sinhronizacijski strežnik po meri - - Strežnik računa Mozilla/sinhronizacije je spremenjen. Zapiranje aplikacije za uveljavitev sprememb … Račun @@ -1521,9 +1519,9 @@ Prenos ni uspel - Iskanje po prenosih + Iskanje po prenosih - Ni zadetkov + Ni zadetkov Izberi vse Ikona nastavitve izjem za izboljšano zaščito pred sledenjem @@ -3190,6 +3188,8 @@ Ni najdenih sledilcev Nastavitve za zasebnost in varnost + + Dovoljenja Shërbyes vetjak Sync - - U ndryshua llogari Mozilla/shërbyes Njëkohësimesh. Po mbyllet aplikacioni, për të aplikuar ndryshimet… Llogari @@ -1521,9 +1519,9 @@ Shkarkimi dështoi - Kërko te shkarkimet + Kërko te shkarkimet - S’u gjetën përfundime + S’u gjetën përfundime Ikonë parapëlqimi përjashtimi nga mbrojtje e thelluar nga gjurmimi diff --git a/mobile/android/fenix/app/src/main/res/values-sr/strings.xml b/mobile/android/fenix/app/src/main/res/values-sr/strings.xml index aa449275d6c..a1f93053047 100644 --- a/mobile/android/fenix/app/src/main/res/values-sr/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-sr/strings.xml @@ -711,8 +711,6 @@ Прилагођени сервер Mozilla налога Прилагођени Sync сервер - - Mozilla налог/сервер за синхронизацију је измењен. Затварање апликације ради примене промена… Налог diff --git a/mobile/android/fenix/app/src/main/res/values-su/strings.xml b/mobile/android/fenix/app/src/main/res/values-su/strings.xml index 8fdc4623f11..c4941013bc1 100644 --- a/mobile/android/fenix/app/src/main/res/values-su/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-su/strings.xml @@ -632,8 +632,6 @@ Serper akun Mozilal kustom Serper Sync kustom - - Akun Mozilla/Server Sync dirobah. Ngaluarkeun aplikasi pikeun nerapkeun parobahan… Akun diff --git a/mobile/android/fenix/app/src/main/res/values-sv-rSE/strings.xml b/mobile/android/fenix/app/src/main/res/values-sv-rSE/strings.xml index 4f41fb10488..c1b750eaf52 100644 --- a/mobile/android/fenix/app/src/main/res/values-sv-rSE/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-sv-rSE/strings.xml @@ -836,8 +836,6 @@ Anpassad Mozilla-kontoserver Anpassad synkroniseringsserver - - Mozilla-konto/synkroniseringsserver har ändrats. Avslutar programmet för att tillämpa ändringar… Konto @@ -1529,9 +1527,9 @@ Nedladdning misslyckades - Sök nedladdningar + Sök nedladdningar - Inga resultat hittades + Inga resultat hittades Markera allt Ikon för undantagsinställningar för förbättrat spårningsskydd @@ -3199,6 +3197,8 @@ Inga spårare hittades Sekretess och säkerhetsinställningar + + Behörigheter Сервери ҳамоҳангсозии фармоишӣ - - Сервери ҳисоб/ҳамоҳангсозии «Mozilla» тағйир ёфт. Барои татбиқ кардани тағйирот барнома бояд хомӯш карда шавад… Ҳисоб @@ -1530,9 +1528,9 @@ Боргирӣ иҷро нашуд - Ҷустуҷӯ дар боргириҳо + Ҷустуҷӯ дар боргириҳо - Ягон натиҷа ёфт нашуд + Ягон натиҷа ёфт нашуд Ҳамаро интихоб кардан Нишони хусусияти истисно барои муҳофизати такмилёфта аз пайгирӣ @@ -3199,6 +3197,8 @@ Ягон васоити пайгирӣ ёфт нашуд Танзимоти махфият ва амният + + Иҷозатҳо เซิร์ฟเวอร์ Sync ที่กำหนดเอง - - เปลี่ยนแปลงเซิร์ฟเวอร์บัญชี Mozilla/Sync แล้ว กำลังออกจากแอปพลิเคชันเพื่อนำการเปลี่ยนแปลงไปใช้… บัญชี @@ -1509,9 +1507,9 @@ การดาวน์โหลดล้มเหลว - ค้นหาการดาวน์โหลด + ค้นหาการดาวน์โหลด - ไม่พบผลลัพธ์ + ไม่พบผลลัพธ์ เลือกทั้งหมด ไอคอนการกำหนดลักษณะข้อยกเว้นการป้องกันการติดตามที่ปรับปรุงใหม่ diff --git a/mobile/android/fenix/app/src/main/res/values-tl/strings.xml b/mobile/android/fenix/app/src/main/res/values-tl/strings.xml index f8c01e12647..7edeb16f386 100644 --- a/mobile/android/fenix/app/src/main/res/values-tl/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-tl/strings.xml @@ -660,8 +660,6 @@ Pasadyang Mozilla account server Pasadya na Sync server - - Nabago na ang Mozilla account/Sync server. Magsasara na ang application para mailapat ang mga pagbabago… Account @@ -1265,9 +1263,9 @@ Bigo ang pag-download - Hanapin sa mga download + Hanapin sa mga download - Walang natagpuang resulta + Walang natagpuang resulta Piliin lahat Alamin diff --git a/mobile/android/fenix/app/src/main/res/values-tr/strings.xml b/mobile/android/fenix/app/src/main/res/values-tr/strings.xml index 2749891e3b5..0f2656510b4 100644 --- a/mobile/android/fenix/app/src/main/res/values-tr/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-tr/strings.xml @@ -836,8 +836,6 @@ Özel Mozilla hesabı sunucusu Özel Sync sunucusu - - Mozilla hesabı/Sync sunucusu değiştirildi. Değişiklikleri uygulamak için uygulamadan çıkılıyor… Hesap @@ -1529,9 +1527,9 @@ İndirme başarısız oldu - İndirilenlerde ara + İndirilenlerde ara - Sonuç bulunamadı + Sonuç bulunamadı Tümünü seç Gelişmiş izlenme koruması istisna tercihi simgesi @@ -3198,6 +3196,8 @@ Hiç takip kodu bulunamadı Gizlilik ve güvenlik ayarları + + İzinler ئىختىيارى قەدەمداش مۇلازىمېتىر - - Mozilla ھېسابات/قەدەمداش مۇلازىمېتىر تەڭشىكى ئۆزگەردى. ئۆزگىرىشنى قوللىنىش ئۈچۈن پىروگراممىدىن چېكىنىۋاتىدۇ… ھېسابات @@ -1529,9 +1527,9 @@ چۈشۈرەلمىدى - چۈشۈرۈشنى ئىزدە + چۈشۈرۈشنى ئىزدە - ھېچقانداق نەتىجە تېپىلمىدى + ھېچقانداق نەتىجە تېپىلمىدى ھەممىنى تاللا كۈچەيتىلگەن ئىز قوغلاشتىن قوغداش مۇستەسنا مايىللىق سىنبەلگىسى @@ -3198,6 +3196,8 @@ ھېچقانداق ئىزلىغۇچى تېپىلمىدى شەخسىيەت ۋە بىخەتەرلىك تەڭشىكى + + ئىجازەت Спеціальний сервер синхронізації - - Сервер облікового запису/синхронізації Mozilla змінено. Вихід з програми для застосування змін… Обліковий запис @@ -1529,9 +1527,9 @@ Збій завантаження - Пошук завантажень + Пошук завантажень - Результатів не знайдено + Результатів не знайдено Вибрати все Піктограма налаштувань винятків розширеного захисту від стеження diff --git a/mobile/android/fenix/app/src/main/res/values-vi/strings.xml b/mobile/android/fenix/app/src/main/res/values-vi/strings.xml index 39e3753493d..f444d3f432e 100644 --- a/mobile/android/fenix/app/src/main/res/values-vi/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-vi/strings.xml @@ -836,8 +836,6 @@ Máy chủ tài khoản Mozilla tùy chỉnh Tùy chỉnh máy chủ đồng bộ hóa - - Đã sửa đổi máy chủ/tài khoản đồng bộ hóa Mozilla. Đang thoát khỏi ứng dụng để áp dụng các thay đổi… Tài khoản @@ -1529,9 +1527,9 @@ Tải xuống không thành công - Tìm kiếm tải xuống + Tìm kiếm tải xuống - Không tìm thấy kết quả nào + Không tìm thấy kết quả nào Chọn tất cả Biểu tượng tùy chọn ngoại lệ trình chống theo dõi nâng cao diff --git a/mobile/android/fenix/app/src/main/res/values-zh-rCN/strings.xml b/mobile/android/fenix/app/src/main/res/values-zh-rCN/strings.xml index f4d9f5bcd05..1a6102ff56d 100644 --- a/mobile/android/fenix/app/src/main/res/values-zh-rCN/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-zh-rCN/strings.xml @@ -813,13 +813,13 @@ 关闭 - 在所有标签页启用 + 对所有标签页开启 仅在隐私标签页启用 详细了解 - 在所有标签页启用 + 对所有标签页启用 仅在隐私标签页启用 @@ -834,8 +834,6 @@ 自定义 Mozilla 账户服务器 自定义同步服务器 - - 已更改 Mozilla 账户/同步服务器设置。正在退出应用程序以应用更改… 账户 @@ -1527,9 +1525,9 @@ 下载失败 - 搜索下载项 + 搜索下载项 - 未找到结果 + 未找到结果 全选 增强型跟踪保护例外首选项图标 diff --git a/mobile/android/fenix/app/src/main/res/values-zh-rTW/strings.xml b/mobile/android/fenix/app/src/main/res/values-zh-rTW/strings.xml index 375f5eb356d..63bbc21d137 100644 --- a/mobile/android/fenix/app/src/main/res/values-zh-rTW/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values-zh-rTW/strings.xml @@ -834,8 +834,6 @@ 自訂 Mozilla 帳號伺服器 自訂同步伺服器 - - 已更改 Mozilla 帳號 / 同步伺服器設定。將結束應用程式讓變更生效… 帳號 @@ -1527,9 +1525,9 @@ 下載失敗 - 搜尋下載項目 + 搜尋下載項目 - 找不到結果 + 找不到結果 選擇全部 加強型追蹤保護例外設定圖示 @@ -3198,6 +3196,8 @@ 找不到追蹤器 隱私權與安全性設定 + + 權限 - + pref_key_make_default_browser pref_key_search_settings pref_key_search_engine @@ -200,7 +200,7 @@ pref_key_cookie_banner_private_mode - + pref_key_doh_settings pref_key_doh_settings_mode pref_key_doh_provider_uri @@ -261,8 +261,9 @@ pref_key_open_links_in_apps_never pref_key_external_download_manager pref_key_allow_screenshots_in_private_mode - pref_key_private_browsing_biometrics_enabled + pref_key_private_browsing_locked_enabled pref_key_privacy_enable_global_privacy_control + pref_key_private_screen_locked pref_key_adjust_campaign pref_key_adjust_network @@ -335,7 +336,7 @@ pref_key_open_tabs_count pref_key_open_private_tabs_count - pref_key_tab_strip + pref_key_tab_strip pref_key_installed_addons_count diff --git a/mobile/android/fenix/app/src/main/res/values/static_strings.xml b/mobile/android/fenix/app/src/main/res/values/static_strings.xml index ede441c58e7..55d4a54a5d2 100644 --- a/mobile/android/fenix/app/src/main/res/values/static_strings.xml +++ b/mobile/android/fenix/app/src/main/res/values/static_strings.xml @@ -2,7 +2,7 @@ - + Firefox Fenix Firefox @@ -114,8 +114,8 @@ Enable Shortcut Suggestions - Enable Tab Strip - Highly experimental, early access preview. + Enable Tab Strip + Highly experimental, early access preview. Enable DNS over HTTPS settings diff --git a/mobile/android/fenix/app/src/main/res/values/strings.xml b/mobile/android/fenix/app/src/main/res/values/strings.xml index 186be6198a9..a6678bf3100 100644 --- a/mobile/android/fenix/app/src/main/res/values/strings.xml +++ b/mobile/android/fenix/app/src/main/res/values/strings.xml @@ -1361,9 +1361,9 @@ Download failed - Search downloads + Search downloads - No results found + No results found Select all @@ -2057,9 +2057,9 @@ Enhanced tracking protection exception preference icon for ETP settings. --> Enhanced tracking protection exception preference icon - + - DNS Over HTTPS + DNS over HTTPS Domain Name System (DNS) over HTTPS sends your request for a domain name through an encrypted connection, providing a secure DNS and making it harder for others to see which website you’re about to access. %1$s @@ -3179,6 +3179,20 @@ You’ve completed all 6 setup steps. Enjoy the speed, privacy, and security of %1$s. + + + Complete all 5 steps to set up %1$s for the best browsing experience. + + Great start! You’ve completed 1 out of 5 steps. + + You’ve completed 2 out of 5 steps. Great progress! + + You’re halfway there! Three steps finished and 2 to go. + + Almost there! You’re just 1 step away from the finish line. + + You’ve completed all 5 setup steps. Enjoy the speed, privacy, and security of %1$s. + Set as default browser diff --git a/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml index 882935cad00..bbf33c2fcac 100644 --- a/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml +++ b/mobile/android/fenix/app/src/main/res/xml/private_browsing_preferences.xml @@ -17,7 +17,7 @@ android:title="@string/preferences_allow_screenshots_in_private_mode" /> diff --git a/mobile/android/fenix/app/src/main/res/xml/secret_settings_preferences.xml b/mobile/android/fenix/app/src/main/res/xml/secret_settings_preferences.xml index ed0513b5ea2..295a560d1a6 100644 --- a/mobile/android/fenix/app/src/main/res/xml/secret_settings_preferences.xml +++ b/mobile/android/fenix/app/src/main/res/xml/secret_settings_preferences.xml @@ -15,11 +15,6 @@ android:key="@string/pref_key_nimbus_use_preview" android:title="@string/preferences_nimbus_use_preview_collection" app:iconSpaceReserved="false" /> - (), store.state.itemsToDisplay) dispatcher.scheduler.advanceTimeBy(UNDO_DELAY_PASSED.milliseconds) assertEquals(store.state.pendingDeletionIds, deleteItemSet) assertEquals(expectedUIStateAfterDeleteAction, store.state) - assertEquals(listOf(), store.state.itemsToDisplay) browserStoreMiddleware.assertLastAction(DownloadAction.RemoveDownloadAction::class) { action -> assertEquals(fileItem1.id, action.downloadId) @@ -211,15 +325,12 @@ class DownloadUIStoreTest { pendingDeletionIds = deleteItemSet, ) assertEquals(expectedUIState, store.state) - assertEquals(0, store.state.itemsToDisplay.size) store.dispatch(DownloadUIAction.UndoPendingDeletionSet(deleteItemSet)) assertEquals(store.state.pendingDeletionIds, emptySet()) - assertTrue(store.state.itemsToDisplay.contains(fileItem1)) dispatcher.scheduler.advanceTimeBy(UNDO_DELAY_PASSED.milliseconds) assertEquals(store.state.pendingDeletionIds, emptySet()) - assertTrue(store.state.itemsToDisplay.contains(fileItem1)) browserStoreMiddleware.assertNotDispatched(DownloadAction.RemoveDownloadAction::class) } @@ -238,7 +349,6 @@ class DownloadUIStoreTest { pendingDeletionIds = deleteItemSet, ) assertEquals(expectedUIState, store.state) - assertEquals(0, store.state.itemsToDisplay.size) dispatcher.scheduler.advanceTimeBy(UNDO_DELAY_PASSED.milliseconds) store.dispatch(DownloadUIAction.UndoPendingDeletionSet(deleteItemSet)) @@ -330,7 +440,7 @@ class DownloadUIStoreTest { ) downloadsStore.waitUntilIdle() - val expectedList = + val expectedList = DownloadUIState.ItemsState.Items( listOf( HeaderItem(CreatedTime.TODAY), FileItem( @@ -356,9 +466,10 @@ class DownloadUIStoreTest { status = DownloadState.Status.COMPLETED, createdTime = CreatedTime.OLDER, ), - ) + ), + ) - assertEquals(expectedList, downloadsStore.state.itemsToDisplay) + assertEquals(expectedList, downloadsStore.state.itemsState) } @Test @@ -401,22 +512,24 @@ class DownloadUIStoreTest { ) downloadsStore.waitUntilIdle() - val expectedList = listOf( - HeaderItem(CreatedTime.OLDER), - FileItem( - id = "1", - url = "https://www.google.com", - fileName = "1.pdf", - filePath = "downloads/1.pdf", - formattedSize = "10000", - displayedShortUrl = "google.com", - contentType = "application/pdf", - status = DownloadState.Status.COMPLETED, - createdTime = CreatedTime.OLDER, + val expectedList = DownloadUIState.ItemsState.Items( + listOf( + HeaderItem(CreatedTime.OLDER), + FileItem( + id = "1", + url = "https://www.google.com", + fileName = "1.pdf", + filePath = "downloads/1.pdf", + formattedSize = "10000", + displayedShortUrl = "google.com", + contentType = "application/pdf", + status = DownloadState.Status.COMPLETED, + createdTime = CreatedTime.OLDER, + ), ), ) - assertEquals(expectedList, downloadsStore.state.itemsToDisplay) + assertEquals(expectedList, downloadsStore.state.itemsState) } private fun LocalDate.toEpochMilli(zoneId: ZoneId): Long { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/ChecklistItemTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/ChecklistItemTest.kt index 0cb9bf4f0dc..9486f09c32c 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/ChecklistItemTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/ChecklistItemTest.kt @@ -5,11 +5,16 @@ package org.mozilla.fenix.home.setup.store import androidx.annotation.StringRes +import mozilla.components.support.test.mock +import mozilla.components.support.test.whenever import org.junit.Assert.assertEquals import org.junit.Test import org.mozilla.fenix.R import org.mozilla.fenix.components.appstate.setup.checklist.ChecklistItem +import org.mozilla.fenix.components.appstate.setup.checklist.getSetupChecklistCollection import org.mozilla.fenix.components.appstate.setup.checklist.getTaskProgress +import org.mozilla.fenix.nimbus.SetupChecklistType +import org.mozilla.fenix.utils.Settings class ChecklistItemTest { @@ -114,6 +119,182 @@ class ChecklistItemTest { assertEquals(2, progress.completedTasks) } + @Test + fun `WHEN collection 1 THEN getSetupChecklistCollection returns a list of the expected tasks`() { + val settings = mock() + val isCompleted = false + whenever(settings.isDefaultBrowserBlocking()).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepExtensions).thenReturn(isCompleted) + whenever(settings.signedInFxaAccount).thenReturn(isCompleted) + + val result = getSetupChecklistCollection( + settings = settings, + collection = SetupChecklistType.COLLECTION_1, + ) + + val expected = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SET_AS_DEFAULT, + title = R.string.setup_checklist_task_default_browser, + icon = R.drawable.mozac_ic_globe_24, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.EXPLORE_EXTENSION, + title = R.string.setup_checklist_task_explore_extensions, + icon = R.drawable.ic_addons_extensions, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SIGN_IN, + title = R.string.setup_checklist_task_account_sync, + icon = R.drawable.ic_fx_accounts_avatar, + isCompleted = isCompleted, + ), + ) + + assertEquals(expected, result) + } + + @Test + fun `WHEN collection 2 THEN getSetupChecklistCollection returns a list of the expected groups`() { + val settings = mock() + val isCompleted = false + whenever(settings.isDefaultBrowserBlocking()).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepExtensions).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepTheme).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepToolbar).thenReturn(isCompleted) + whenever(settings.signedInFxaAccount).thenReturn(isCompleted) + + val result = getSetupChecklistCollection( + settings = settings, + collection = SetupChecklistType.COLLECTION_2, + ) + + val expected = listOf( + ChecklistItem.Group( + title = R.string.setup_checklist_group_essentials, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SET_AS_DEFAULT, + title = R.string.setup_checklist_task_default_browser, + icon = R.drawable.mozac_ic_globe_24, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SIGN_IN, + title = R.string.setup_checklist_task_account_sync, + icon = R.drawable.ic_fx_accounts_avatar, + isCompleted = isCompleted, + ), + ), + ), + ChecklistItem.Group( + title = R.string.setup_checklist_group_customize, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SELECT_THEME, + title = R.string.setup_checklist_task_theme_selection, + icon = R.drawable.mozac_ic_themes_24, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.CHANGE_TOOLBAR_PLACEMENT, + title = R.string.setup_checklist_task_toolbar_selection, + icon = R.drawable.mozac_ic_tool_24, + isCompleted = isCompleted, + ), + ), + ), + ChecklistItem.Group( + title = R.string.setup_checklist_group_helpful_tools, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.INSTALL_SEARCH_WIDGET, + title = R.string.setup_checklist_task_search_widget, + icon = R.drawable.ic_search, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.EXPLORE_EXTENSION, + title = R.string.setup_checklist_task_explore_extensions, + icon = R.drawable.ic_addons_extensions, + isCompleted = isCompleted, + ), + ), + ), + ) + + assertEquals(expected, result) + } + + @Test + fun `WHEN collection 2 and tab strip enabled THEN getSetupChecklistCollection returns a list of the expected groups`() { + val settings = mock() + val isCompleted = false + whenever(settings.isDefaultBrowserBlocking()).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepExtensions).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepTheme).thenReturn(isCompleted) + whenever(settings.hasCompletedSetupStepToolbar).thenReturn(isCompleted) + whenever(settings.signedInFxaAccount).thenReturn(isCompleted) + + val result = getSetupChecklistCollection( + settings = settings, + collection = SetupChecklistType.COLLECTION_2, + tabStripEnabled = true, + ) + + val expected = listOf( + ChecklistItem.Group( + title = R.string.setup_checklist_group_essentials, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SET_AS_DEFAULT, + title = R.string.setup_checklist_task_default_browser, + icon = R.drawable.mozac_ic_globe_24, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SIGN_IN, + title = R.string.setup_checklist_task_account_sync, + icon = R.drawable.ic_fx_accounts_avatar, + isCompleted = isCompleted, + ), + ), + ), + ChecklistItem.Group( + title = R.string.setup_checklist_group_customize, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.SELECT_THEME, + title = R.string.setup_checklist_task_theme_selection, + icon = R.drawable.mozac_ic_themes_24, + isCompleted = isCompleted, + ), + ), + ), + ChecklistItem.Group( + title = R.string.setup_checklist_group_helpful_tools, + tasks = listOf( + ChecklistItem.Task( + type = ChecklistItem.Task.Type.INSTALL_SEARCH_WIDGET, + title = R.string.setup_checklist_task_search_widget, + icon = R.drawable.ic_search, + isCompleted = isCompleted, + ), + ChecklistItem.Task( + type = ChecklistItem.Task.Type.EXPLORE_EXTENSION, + title = R.string.setup_checklist_task_explore_extensions, + icon = R.drawable.ic_addons_extensions, + isCompleted = isCompleted, + ), + ), + ), + ) + + assertEquals(expected, result) + } + private fun buildTask( @StringRes title: Int = R.string.setup_checklist_task_default_browser, isCompleted: Boolean, diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddlewareTest.kt index c755aa58e61..fa8c916aa2e 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddlewareTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddlewareTest.kt @@ -99,7 +99,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) - val toolbarBrowserActions = toolbarStore.state.displayState.browserActions + val toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) val tabCounterButton = toolbarBrowserActions[0] as TabCounterAction val menuButton = toolbarBrowserActions[1] as ActionButton @@ -118,7 +118,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) - val toolbarBrowserActions = toolbarStore.state.displayState.browserActions + val toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(0, toolbarBrowserActions.size) } @@ -139,7 +139,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) - val toolbarBrowserActions = toolbarStore.state.displayState.browserActions + val toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd val tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(1), tabCounterButton) } @@ -164,7 +164,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) - val toolbarBrowserActions = toolbarStore.state.displayState.browserActions + val toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd val tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(2, true), tabCounterButton) } @@ -188,7 +188,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) testScheduler.advanceUntilIdle() - var toolbarBrowserActions = toolbarStore.state.displayState.browserActions + var toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(0, toolbarBrowserActions.size) // In landscape the navigation bar is not displayed @@ -196,7 +196,7 @@ class BrowserToolbarMiddlewareTest { appStore.dispatch(AppAction.OrientationChange(Landscape)).joinBlocking() testScheduler.advanceUntilIdle() - toolbarBrowserActions = toolbarStore.state.displayState.browserActions + toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) val tabCounterButton = toolbarBrowserActions[0] as TabCounterAction val menuButton = toolbarBrowserActions[1] as ActionButton @@ -222,7 +222,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) testScheduler.advanceUntilIdle() - var toolbarBrowserActions = toolbarStore.state.displayState.browserActions + var toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) val tabCounterButton = toolbarBrowserActions[0] as TabCounterAction val menuButton = toolbarBrowserActions[1] as ActionButton @@ -234,7 +234,7 @@ class BrowserToolbarMiddlewareTest { appStore.dispatch(AppAction.OrientationChange(Portrait)).joinBlocking() testScheduler.advanceUntilIdle() - toolbarBrowserActions = toolbarStore.state.displayState.browserActions + toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(0, toolbarBrowserActions.size) } @@ -251,7 +251,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) testScheduler.advanceUntilIdle() - var toolbarBrowserActions = toolbarStore.state.displayState.browserActions + var toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) var tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(0), tabCounterButton) @@ -262,7 +262,7 @@ class BrowserToolbarMiddlewareTest { browserStore.dispatch(AddTabAction(newPrivateTab)).joinBlocking() testScheduler.advanceUntilIdle() - toolbarBrowserActions = toolbarStore.state.displayState.browserActions + toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(1), tabCounterButton) @@ -287,7 +287,7 @@ class BrowserToolbarMiddlewareTest { middleware = listOf(middleware), ) testScheduler.advanceUntilIdle() - var toolbarBrowserActions = toolbarStore.state.displayState.browserActions + var toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) var tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(1, true), tabCounterButton) @@ -295,7 +295,7 @@ class BrowserToolbarMiddlewareTest { browserStore.dispatch(RemoveTabAction(initialPrivateTab.id)).joinBlocking() testScheduler.advanceUntilIdle() - toolbarBrowserActions = toolbarStore.state.displayState.browserActions + toolbarBrowserActions = toolbarStore.state.displayState.browserActionsEnd assertEquals(2, toolbarBrowserActions.size) tabCounterButton = toolbarBrowserActions[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(0, true), tabCounterButton) @@ -315,7 +315,7 @@ class BrowserToolbarMiddlewareTest { val toolbarStore = BrowserToolbarStore( middleware = listOf(middleware), ) - val menuButton = toolbarStore.state.displayState.browserActions[1] as ActionButton + val menuButton = toolbarStore.state.displayState.browserActionsEnd[1] as ActionButton toolbarStore.dispatch(menuButton.onClick as BrowserToolbarEvent) @@ -342,7 +342,7 @@ class BrowserToolbarMiddlewareTest { val toolbarStore = BrowserToolbarStore( middleware = listOf(middleware), ) - val tabCounterButton = toolbarStore.state.displayState.browserActions[0] as TabCounterAction + val tabCounterButton = toolbarStore.state.displayState.browserActionsEnd[0] as TabCounterAction toolbarStore.dispatch(tabCounterButton.onClick) @@ -367,7 +367,7 @@ class BrowserToolbarMiddlewareTest { val toolbarStore = BrowserToolbarStore( middleware = listOf(middleware), ) - val tabCounterButton = toolbarStore.state.displayState.browserActions[0] as TabCounterAction + val tabCounterButton = toolbarStore.state.displayState.browserActionsEnd[0] as TabCounterAction toolbarStore.dispatch(tabCounterButton.onClick) @@ -392,7 +392,7 @@ class BrowserToolbarMiddlewareTest { val toolbarStore = BrowserToolbarStore( middleware = listOf(middleware), ) - val tabCounterButton = toolbarStore.state.displayState.browserActions[0] as TabCounterAction + val tabCounterButton = toolbarStore.state.displayState.browserActionsEnd[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(0, false), tabCounterButton) val tabCounterMenuItems = (tabCounterButton.onLongClick as BrowserToolbarMenu).items() @@ -430,7 +430,7 @@ class BrowserToolbarMiddlewareTest { val toolbarStore = BrowserToolbarStore( middleware = listOf(middleware), ) - val tabCounterButton = toolbarStore.state.displayState.browserActions[0] as TabCounterAction + val tabCounterButton = toolbarStore.state.displayState.browserActionsEnd[0] as TabCounterAction assertEqualsToolbarButton(expectedToolbarButton(0, true), tabCounterButton) val tabCounterMenuItems = (tabCounterButton.onLongClick as BrowserToolbarMenu).items() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/HomeToolbarViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/HomeToolbarViewTest.kt index 165cc59e858..c908ddc0681 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/HomeToolbarViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/toolbar/HomeToolbarViewTest.kt @@ -72,7 +72,6 @@ class HomeToolbarViewTest { @Test fun `GIVEN navbar isn't visible WHEN updateLayout is called THEN tab counter and menu are visible and initialized`() { every { testContext.settings().navigationToolbarEnabled } returns false - every { testContext.settings().tabStripEnabled } returns false toolbarView.updateButtonVisibility(mockk(relaxed = true), testContext.shouldAddNavigationBar()) assertTrue(toolbarView.menuButton.isVisible) @@ -84,7 +83,6 @@ class HomeToolbarViewTest { @Test fun `GIVEN mode is landscape WHEN updateLayout is called THEN tab counter and menu are visible and initialized`() { every { testContext.settings().navigationToolbarEnabled } returns false - every { testContext.settings().tabStripEnabled } returns false toolbarView.updateButtonVisibility(mockk(relaxed = true), testContext.shouldAddNavigationBar(false)) @@ -108,7 +106,6 @@ class HomeToolbarViewTest { every { testContext.isLargeWindow() } returns true every { testContext.settings().navigationToolbarEnabled } returns false - every { testContext.settings().tabStripEnabled } returns false toolbarView.updateButtonVisibility(mockk(relaxed = true), testContext.shouldAddNavigationBar(false)) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/HomeToolbarViewTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/HomeToolbarViewTest.kt index 15bce0fe873..06990a7aa7a 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/HomeToolbarViewTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/toolbar/HomeToolbarViewTest.kt @@ -154,7 +154,6 @@ class HomeToolbarViewTest { every { context.settings().shouldShowBookmarkSuggestions } returns true every { context.settings().navigationToolbarEnabled } returns false every { context.settings().shouldAutocompleteInAwesomebar } returns false - every { context.settings().tabStripEnabled } returns false val view = buildToolbarView(false) mockkObject(FeatureFlags) @@ -171,7 +170,6 @@ class HomeToolbarViewTest { every { context.settings().shouldShowHistorySuggestions } returns true every { context.settings().shouldShowBookmarkSuggestions } returns true every { context.settings().navigationToolbarEnabled } returns false - every { context.settings().tabStripEnabled } returns false val view = buildToolbarView(false) mockkObject(FeatureFlags) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/toolbar/DefaultToolbarMenuTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/toolbar/DefaultToolbarMenuTest.kt index a0480463eba..261ca58f692 100644 --- a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/toolbar/DefaultToolbarMenuTest.kt +++ b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/toolbar/DefaultToolbarMenuTest.kt @@ -5,24 +5,19 @@ package org.mozilla.fenix.toolbar import android.content.Context -import androidx.core.net.toUri import androidx.lifecycle.LifecycleOwner import io.mockk.every import io.mockk.mockk -import io.mockk.mockkStatic import io.mockk.spyk -import io.mockk.unmockkStatic import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.storage.BookmarksStorage import mozilla.components.feature.top.sites.PinnedSiteStorage import mozilla.components.support.test.rule.MainCoroutineRule -import org.junit.After import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Before -import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.mozilla.fenix.components.toolbar.DefaultToolbarMenu @@ -42,9 +37,6 @@ class DefaultToolbarMenuTest { @Before fun setUp() { - mockkStatic("androidx.core.net.UriKt") - every { any().toUri() } returns mockk(relaxed = true) - lifecycleOwner = mockk(relaxed = true) context = mockk(relaxed = true) @@ -63,11 +55,6 @@ class DefaultToolbarMenuTest { ) } - @After - fun tearDown() { - unmockkStatic("androidx.core.net.UriKt") - } - private fun createMenu() { toolbarMenu = spyk( DefaultToolbarMenu( @@ -87,7 +74,6 @@ class DefaultToolbarMenuTest { } @Test - @Ignore("Intermittent test: https://github.com/mozilla-mobile/fenix/issues/18822") fun `WHEN the bottom toolbar is set THEN the first item in the list is not the navigation`() { every { context.settings().shouldUseBottomToolbar } returns true createMenu() @@ -102,7 +88,6 @@ class DefaultToolbarMenuTest { } @Test - @Ignore("Intermittent test: https://github.com/mozilla-mobile/fenix/issues/18822") fun `WHEN the top toolbar is set THEN the first item in the list is the navigation`() { every { context.settings().shouldUseBottomToolbar } returns false createMenu() @@ -117,7 +102,6 @@ class DefaultToolbarMenuTest { } @Test - @Ignore("Intermittent test: https://github.com/mozilla-mobile/fenix/issues/18822") fun `WHEN the bottom toolbar is set THEN the nav menu should be the last item`() { every { context.settings().shouldUseBottomToolbar } returns true @@ -133,7 +117,6 @@ class DefaultToolbarMenuTest { } @Test - @Ignore("Intermittent test: https://github.com/mozilla-mobile/fenix/issues/18822") fun `WHEN the top toolbar is set THEN settings should be the last item`() { every { context.settings().shouldUseBottomToolbar } returns false diff --git a/mobile/android/fenix/automation/taskcluster/androidTest/flank-arm64-v8a-baseline-profile.yml b/mobile/android/fenix/automation/taskcluster/androidTest/flank-arm64-v8a-baseline-profile.yml index 9f1ddd5f1e3..5741e5f2149 100644 --- a/mobile/android/fenix/automation/taskcluster/androidTest/flank-arm64-v8a-baseline-profile.yml +++ b/mobile/android/fenix/automation/taskcluster/androidTest/flank-arm64-v8a-baseline-profile.yml @@ -15,9 +15,10 @@ gcloud: test: /test/path auto-google-login: false - use-orchestrator: true + use-orchestrator: false environment-variables: clearPackageData: true + androidx.benchmark.enabledRules: BaselineProfile directories-to-pull: - /sdcard/Android/media/ performance-metrics: true diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/onboarding/OnboardingFirstScreenCompose.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/onboarding/OnboardingFirstScreenCompose.kt index ee35f87d0d7..00abe12e7d0 100644 --- a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/onboarding/OnboardingFirstScreenCompose.kt +++ b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/fragment/onboarding/OnboardingFirstScreenCompose.kt @@ -35,6 +35,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withLink import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp +import mozilla.components.support.utils.ext.isLandscape import mozilla.components.ui.colors.PhotonColors import org.mozilla.focus.R import org.mozilla.focus.ui.theme.FocusTheme @@ -74,6 +75,20 @@ fun OnBoardingFirstScreenCompose( ) { Spacer(Modifier.weight(TOP_SPACER_WEIGHT)) + Image( + painter = painterResource(R.drawable.onboarding_logo), + contentDescription = LocalContext.current.getString(R.string.app_name), + modifier = Modifier + .size(150.dp, 150.dp) + .then( + if (LocalContext.current.isLandscape()) { + Modifier.weight(1f, false) + } else { + Modifier + }, + ), + ) + TitleContent() Spacer(Modifier.weight(MIDDLE_SPACER_WEIGHT)) @@ -102,12 +117,6 @@ fun OnBoardingFirstScreenCompose( @Composable private fun TitleContent() { - Image( - painter = painterResource(R.drawable.onboarding_logo), - contentDescription = LocalContext.current.getString(R.string.app_name), - modifier = Modifier.size(150.dp, 150.dp), - ) - Text( text = stringResource( R.string.onboarding_first_screen_title, diff --git a/mobile/android/focus-android/app/src/main/res/values-is/strings.xml b/mobile/android/focus-android/app/src/main/res/values-is/strings.xml index 29c9e1a7c9a..41f716560b1 100644 --- a/mobile/android/focus-android/app/src/main/res/values-is/strings.xml +++ b/mobile/android/focus-android/app/src/main/res/values-is/strings.xml @@ -213,7 +213,7 @@ Summary for the toggle to enable autocomplete for the topsites list %s is the name of the app (for example "Firefox Focus" or "Firefox Klar"). --> - Virkja sjálfvirka útfyllingu í staðsetningarslá %s á rúmlega 450 vinsælum slóðum. + Virkja sjálfvirka útfyllingu í veffangastiku %s á rúmlega 450 vinsælum slóðum. Fyrir vefsvæði sem þú bætir við - + connect-src-websocket-blocked @@ -18,9 +18,14 @@ }); try { - var ws = new WebSocket("ws://{{domains[www1]}}:{{ports[http][0]}}/echo"); + var ws = new WebSocket("ws://{{domains[www1]}}:{{ports[ws][0]}}/echo"); - if (ws.readyState == WebSocket.CLOSING || ws.readyState == WebSocket.CLOSED) { + // Not all browsers fail the connection in a synchronous fashion. + if (ws.readyState == WebSocket.CONNECTING) { + setTimeout( function() { + ws.readyState != WebSocket.CLOSED ? log("allowed") : log("blocked"); + }, 1000); + } else if (ws.readyState == WebSocket.CLOSED) { log("blocked"); } else { log("allowed"); diff --git a/testing/web-platform/tests/content-security-policy/connect-src/connect-src-websocket-blocked.sub.html b/testing/web-platform/tests/content-security-policy/connect-src/connect-src-websocket-blocked.sub.html index 02c52837bb8..2cc3f1b5a05 100644 --- a/testing/web-platform/tests/content-security-policy/connect-src/connect-src-websocket-blocked.sub.html +++ b/testing/web-platform/tests/content-security-policy/connect-src/connect-src-websocket-blocked.sub.html @@ -18,9 +18,14 @@ }); try { - var ws = new WebSocket("ws://{{domains[www1]}}:{{ports[http][0]}}/echo"); + var ws = new WebSocket("ws://{{domains[www1]}}:{{ports[ws][0]}}/echo"); - if (ws.readyState == WebSocket.CLOSING || ws.readyState == WebSocket.CLOSED) { + // Not all browsers fail the connection in a synchronous fashion. + if (ws.readyState == WebSocket.CONNECTING) { + setTimeout( function() { + ws.readyState != WebSocket.CLOSED ? log("allowed") : log("blocked"); + }, 1000); + } else if (ws.readyState == WebSocket.CLOSED) { log("blocked"); } else { log("allowed"); diff --git a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-allowed-meta.https.html b/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-allowed-meta.https.html deleted file mode 100644 index 087498f0c57..00000000000 --- a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-allowed-meta.https.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - diff --git a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-blocked-meta.https.html b/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-blocked-meta.https.html deleted file mode 100644 index fe69c61f5b6..00000000000 --- a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script-blocked-meta.https.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - diff --git a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script.https.html b/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script.https.html deleted file mode 100644 index 65553e523cc..00000000000 --- a/testing/web-platform/tests/content-security-policy/tentative/require-sri-for/script.https.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - - - - diff --git a/testing/web-platform/tests/credential-management/non-fully-active.https.html b/testing/web-platform/tests/credential-management/non-fully-active.https.html index 508b4325d78..a0a76f0fce1 100644 --- a/testing/web-platform/tests/credential-management/non-fully-active.https.html +++ b/testing/web-platform/tests/credential-management/non-fully-active.https.html @@ -26,7 +26,7 @@ const iframe = document.querySelector("iframe"); // The signal check happens after the fully active check. - // This allows us to confirm the the right error is thrown + // This allows us to confirm the right error is thrown // and in the right order. const controller = new iframe.contentWindow.AbortController(); const signal = controller.signal; diff --git a/testing/web-platform/tests/css/CSS2/css1/c414-flt-ln-002.xht b/testing/web-platform/tests/css/CSS2/css1/c414-flt-ln-002.xht index 99965439661..ef5448c4893 100644 --- a/testing/web-platform/tests/css/CSS2/css1/c414-flt-ln-002.xht +++ b/testing/web-platform/tests/css/CSS2/css1/c414-flt-ln-002.xht @@ -30,7 +30,7 @@

Test passes if for each matching pair of colored boxes either: