[haiku-commits] haiku: hrev53293 - src/apps/drivesetup

  • From: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Thu, 25 Jul 2019 15:17:37 -0400 (EDT)

hrev53293 adds 1 changeset to branch 'master'
old head: 61be57c0e657ad09a5288e1ef4c268381d1a28e1
new head: fc8ec821164223c6707e69654cadaee5b897de01
overview: 
https://git.haiku-os.org/haiku/log/?qt=range&q=fc8ec8211642+%5E61be57c0e657

----------------------------------------------------------------------------

fc8ec8211642: DriveSetup: vizualize more information
  
  - Show a lock for encrypted partitions (bitlocker, pgp, safeboot, luks)
  - Show icons for boot, shared, virtual or read-only partitions
  - Use different colors for boot, bfs, encrypted partitions
  - Show partition usage in visual overview (only for mounted volumes)
  - Add more infos in the parameter column
  - Add columns with free space and block size
  
  Fixes #10098 (as mentionned there, TrueCrypt/DriveEncryption can't be
  detected)
  
  Change-Id: I44914bacfabadaec4f862c8816f9575dc9617798
  Reviewed-on: https://review.haiku-os.org/c/1399
  Reviewed-by: Kacper Kasper <kacperkasper@xxxxxxxxx>
  Reviewed-by: waddlesplash <waddlesplash@xxxxxxxxx>
  Reviewed-by: Alex von Gluck IV <kallisti5@xxxxxxxxxxx>

                             [ Dancsó Róbert <dancso.robert@xxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

Revision:    hrev53293
Commit:      fc8ec821164223c6707e69654cadaee5b897de01
URL:         https://git.haiku-os.org/haiku/commit/?id=fc8ec8211642
Author:      Dancsó Róbert <dancso.robert@xxxxxxxxxxxxx>
Date:        Tue Apr  9 17:28:28 2019 UTC
Committer:   Alex von Gluck IV <kallisti5@xxxxxxxxxxx>
Commit-Date: Thu Jul 25 19:17:23 2019 UTC

Ticket:      https://dev.haiku-os.org/ticket/10098

----------------------------------------------------------------------------

6 files changed, 647 insertions(+), 28 deletions(-)
src/apps/drivesetup/DiskView.cpp        | 143 ++++++++++-
src/apps/drivesetup/EncryptionUtils.cpp |  42 ++++
src/apps/drivesetup/EncryptionUtils.h   |  15 ++
src/apps/drivesetup/Jamfile             |   2 +
src/apps/drivesetup/PartitionList.cpp   | 117 +++++++--
src/apps/drivesetup/icons.h             | 356 ++++++++++++++++++++++++++++

----------------------------------------------------------------------------

diff --git a/src/apps/drivesetup/DiskView.cpp b/src/apps/drivesetup/DiskView.cpp
index 6c72090f3a..996f9acb0f 100644
--- a/src/apps/drivesetup/DiskView.cpp
+++ b/src/apps/drivesetup/DiskView.cpp
@@ -1,5 +1,6 @@
 /*
  * Copyright 2007-2010 Stephan Aßmus <superstippi@xxxxxx>.
+ * Copyright 2013, Dancsó Róbert <dancso.robert@xxxxxxxxxxxxx>
  * All rights reserved. Distributed under the terms of the MIT license.
  */
 
@@ -7,15 +8,25 @@
 
 #include <stdio.h>
 
+#include <Application.h>
+#include <Bitmap.h>
 #include <DiskDeviceVisitor.h>
 #include <Catalog.h>
 #include <GroupLayout.h>
 #include <HashMap.h>
+#include <IconUtils.h>
 #include <LayoutItem.h>
+#include <LayoutUtils.h>
 #include <Locale.h>
 #include <PartitioningInfo.h>
+#include <Path.h>
+#include <Resources.h>
 #include <String.h>
+#include <Volume.h>
+#include <VolumeRoster.h>
 
+#include "icons.h"
+#include "EncryptionUtils.h"
 #include "MainWindow.h"
 
 
@@ -34,7 +45,7 @@ static const float            kLayoutInset    = 6;
 class PartitionView : public BView {
 public:
        PartitionView(const char* name, float weight, off_t offset,
-                       int32 level, partition_id id)
+                       int32 level, partition_id id, BPartition* partition)
                :
                BView(name, B_WILL_DRAW | B_SUPPORTS_LAYOUT | 
B_FULL_UPDATE_ON_RESIZE),
                fID(id),
@@ -63,7 +74,43 @@ public:
                fGroupLayout->SetInsets(kLayoutInset, kLayoutInset + 
font.Size(),
                        kLayoutInset, kLayoutInset);
 
-               SetExplicitMinSize(BSize(font.Size() + 6, 30));
+               SetExplicitMinSize(BSize(font.Size() + 20, 30));
+
+               BVolume volume;
+               partition->GetVolume(&volume);
+
+               BVolume boot;
+               BVolumeRoster().GetBootVolume(&boot);
+               fBoot = volume == boot;
+               fReadOnly = volume.IsReadOnly();
+               fShared = volume.IsShared();
+               fEncrypted = false;
+
+               _ComputeFullName(partition, name);
+
+               fUsed = 100.0 / ((float)volume.Capacity()
+                               / (volume.Capacity() - volume.FreeBytes()));
+               if (fUsed < 0)
+                       fUsed = 100.0;
+
+               fIcon = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32);
+
+               fBFS = BString(partition->ContentType()) == "Be File System";
+
+               if (fBoot)
+                       BIconUtils::GetVectorIcon(kLeaf, sizeof(kLeaf), fIcon);
+               else if (fEncrypted)
+                       BIconUtils::GetVectorIcon(kEncrypted, 
sizeof(kEncrypted), fIcon);
+               else if (fReadOnly)
+                       BIconUtils::GetVectorIcon(kReadOnly, sizeof(kReadOnly), 
fIcon);
+               else if (fShared)
+                       BIconUtils::GetVectorIcon(kShared, sizeof(kShared), 
fIcon);
+               else if (fVirtual)
+                       BIconUtils::GetVectorIcon(kFile, sizeof(kFile), fIcon);
+               else {
+                       delete fIcon;
+                       fIcon = NULL;
+               }
        }
 
        virtual void MouseDown(BPoint where)
@@ -94,22 +141,58 @@ public:
 
                BRect b(Bounds());
                if (fSelected) {
-                       SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR));
+                       if (fReadOnly)
+                               SetHighColor(make_color(255, 128, 128));
+                       else if (fBoot || fBFS)
+                               SetHighColor(make_color(128, 255, 128));
+                       else
+                               
SetHighColor(ui_color(B_KEYBOARD_NAVIGATION_COLOR));
                        StrokeRect(b, B_SOLID_HIGH);
                        b.InsetBy(1, 1);
                        StrokeRect(b, B_SOLID_HIGH);
                        b.InsetBy(1, 1);
-               } else if (fLevel > 0) {
+               } else if (fLevel >= 0) {
                        StrokeRect(b, B_SOLID_HIGH);
                        b.InsetBy(1, 1);
                }
 
+               if (CountChildren() == 0)
+                       SetLowColor(make_color(255, 255, 255));
                FillRect(b, B_SOLID_LOW);
 
+               if (fEncrypted && CountChildren() == 0) {
+                       SetHighColor(make_color(128, 128, 128));
+                       StrokeRect(b, B_SOLID_HIGH);
+                       b.InsetBy(1, 1);
+                       SetLowColor(make_color(224, 224, 0));
+                       BRect e(BPoint(15, b.top), b.RightBottom());
+                       e.InsetBy(1, 1);
+                       FillRect(e, kStripes);
+               }
+
                // prevent the text from moving when border width changes
                if (!fSelected)
                        b.InsetBy(1, 1);
 
+               BRect used(b.LeftTop(), BSize(b.Width() / (100.0 / fUsed), 
b.Height()));
+
+               SetLowColor(make_color(240, 248, 255));
+
+               if (fReadOnly)
+                       SetLowColor(make_color(255, 224, 224));
+               if (fBoot || fBFS)
+                       SetLowColor(make_color(224, 255, 224));
+               if (CountChildren() == 0)
+                       FillRect(used, B_SOLID_LOW);
+
+               if (fIcon && CountChildren() == 0) {
+                       BPoint where = b.RightBottom() - 
BPoint(fIcon->Bounds().Width(),
+                               fIcon->Bounds().Height());
+                       SetDrawingMode(B_OP_OVER);
+                       DrawBitmap(fIcon, where);
+                       SetDrawingMode(B_OP_COPY);
+               }
+
                float width;
                BFont font;
                GetFont(&font);
@@ -169,6 +252,11 @@ public:
                Invalidate();
        }
 
+       bool IsEncrypted()
+       {
+               return fEncrypted;
+       }
+
 private:
        void _SetMouseOver(bool mouseOver)
        {
@@ -178,6 +266,30 @@ private:
                Invalidate();
        }
 
+       void _ComputeFullName(BPartition* partition, const char* name)
+       {
+               BString fullName(name);
+               fVirtual = partition->Device()->IsFile();
+               if (fVirtual)
+                       fullName << " (" << B_TRANSLATE("Virtual") << ")";
+
+               while (partition != NULL) {
+                       BPath path;
+                       partition->GetPath(&path);
+
+                       const char* encrypter = EncryptionType(path.Path());
+                       if (encrypter != NULL) {
+                               fullName << " (" << encrypter << ")";
+                               fEncrypted = true;
+                               break;
+                       }
+                       partition = partition->Parent();
+               }
+
+               SetName(fullName);
+       }
+
+
 private:
        partition_id    fID;
        float                   fWeight;
@@ -186,6 +298,15 @@ private:
        bool                    fSelected;
        bool                    fMouseOver;
        BGroupLayout*   fGroupLayout;
+
+       bool                    fBoot;
+       bool                    fReadOnly;
+       bool                    fShared;
+       bool                    fEncrypted;
+       bool                    fVirtual;
+       float                   fUsed;
+       bool                    fBFS;
+       BBitmap*                fIcon;
 };
 
 
@@ -208,8 +329,11 @@ public:
                else
                        name = B_TRANSLATE("Device");
 
+               if (BString(device->ContentName()).Length() > 0)
+                       name = device->ContentName();
+
                PartitionView* view = new PartitionView(name, 1.0,
-                       device->Offset(), 0, device->ID());
+                       device->Offset(), 0, device->ID(), device);
                fViewMap.Put(device->ID(), view);
                fView->GetLayout()->AddView(view);
                _AddSpaces(device, view);
@@ -236,13 +360,13 @@ public:
                        else {
                                char buffer[64];
                                snprintf(buffer, 64, B_TRANSLATE("Partition 
%ld"),
-                                       partition->ID());
+                                       partition->ID(), partition);
                                name << buffer;
                        }
                }
                partition_id id = partition->ID();
                PartitionView* view = new PartitionView(name.String(), scale, 
offset,
-                       level, id);
+                       level, id, partition);
                view->SetSelected(id == fSelectedPartition);
                PartitionView* parent = fViewMap.Get(partition->Parent()->ID());
                BGroupLayout* layout = parent->GroupLayout();
@@ -296,8 +420,9 @@ public:
                                double scale = (double)size / parentSize;
                                partition_id id
                                        = 
fSpaceIDMap.SpaceIDFor(partition->ID(), offset);
-                               PartitionView* view = new 
PartitionView(B_TRANSLATE("<empty>"),
-                                       scale, offset, parentView->Level() + 1, 
id);
+                               PartitionView* view = new PartitionView(
+                                       B_TRANSLATE("<empty or unknown>"), 
scale, offset,
+                                       parentView->Level() + 1, id, partition);
 
                                fViewMap.Put(id, view);
                                BGroupLayout* layout = 
parentView->GroupLayout();
diff --git a/src/apps/drivesetup/EncryptionUtils.cpp 
b/src/apps/drivesetup/EncryptionUtils.cpp
new file mode 100644
index 0000000000..40151b6229
--- /dev/null
+++ b/src/apps/drivesetup/EncryptionUtils.cpp
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2014, Dancsó Róbert <dancso.robert@xxxxxxxxxxxxx>
+ *
+ * Distributed under terms of the MIT license.
+ */
+
+
+#include "EncryptionUtils.h"
+
+#include <Catalog.h>
+#include <File.h>
+#include <Locale.h>
+#include <String.h>
+
+
+#define B_TRANSLATION_CONTEXT "Encryption utils"
+
+
+const char*
+EncryptionType(const char* path)
+{
+       char buffer[11];
+       BString encrypter;
+       off_t length = BFile(path, B_READ_ONLY).Read(&buffer, 11);
+       if (length != 11)
+               return NULL;
+       encrypter.Append(buffer, 11);
+
+       if (encrypter.FindFirst("-FVE-FS-") >= 0) {
+               return B_TRANSLATE("BitLocker encrypted");
+       } else if (encrypter.FindFirst("PGPGUARD") >= 0) {
+               return B_TRANSLATE("PGP encrypted");
+       } else if (encrypter.FindFirst("SafeBoot") >= 0) {
+               return B_TRANSLATE("SafeBoot encrypted");
+       } else if (encrypter.FindFirst("LUKS") >= 0) {
+               return B_TRANSLATE("LUKS encrypted");
+       }
+
+       return NULL;
+}
+
+
diff --git a/src/apps/drivesetup/EncryptionUtils.h 
b/src/apps/drivesetup/EncryptionUtils.h
new file mode 100644
index 0000000000..8edce27f31
--- /dev/null
+++ b/src/apps/drivesetup/EncryptionUtils.h
@@ -0,0 +1,15 @@
+/*
+ * EncryptionUtils.h
+ * Copyright (C) 2019 Adrien Destugues <pulkomandy@xxxxxxxxxxxxx>
+ *
+ * Distributed under terms of the MIT license.
+ */
+
+#ifndef ENCRYPTIONUTILS_H
+#define ENCRYPTIONUTILS_H
+
+
+const char* EncryptionType(const char* path);
+
+
+#endif /* !ENCRYPTIONUTILS_H */
diff --git a/src/apps/drivesetup/Jamfile b/src/apps/drivesetup/Jamfile
index 7343b1dcca..de36f2da3b 100644
--- a/src/apps/drivesetup/Jamfile
+++ b/src/apps/drivesetup/Jamfile
@@ -10,6 +10,7 @@ Preference DriveSetup :
        CreateParametersPanel.cpp
        DiskView.cpp
        DriveSetup.cpp
+       EncryptionUtils.cpp
        InitParametersPanel.cpp
        MainWindow.cpp
        PartitionList.cpp
@@ -27,6 +28,7 @@ DoCatalogs DriveSetup :
        ChangeParametersPanel.cpp
        CreateParametersPanel.cpp
        DiskView.cpp
+       EncryptionUtils.cpp
        InitParametersPanel.cpp
        MainWindow.cpp
        PartitionList.cpp
diff --git a/src/apps/drivesetup/PartitionList.cpp 
b/src/apps/drivesetup/PartitionList.cpp
index 1fd294685e..74e2a10e76 100644
--- a/src/apps/drivesetup/PartitionList.cpp
+++ b/src/apps/drivesetup/PartitionList.cpp
@@ -1,5 +1,6 @@
 /*
- * Copyright 2006-2013, Haiku Inc. All rights reserved.
+ * Copyright 2006-2019, Haiku Inc. All rights reserved.
+ * Copyright 2014, Dancsó Róbert <dancso.robert@xxxxxxxxxxxxx>
  * Distributed under the terms of the MIT license.
  *
  * Authors:
@@ -7,20 +8,29 @@
  *             James Urquhart
  *             Stephan Aßmus <superstippi@xxxxxx>
  *             Axel Dörfler, axeld@xxxxxxxxxxxxxxxx
+ *             Adrien Destugues, pulkomandy@xxxxxxxxxxxxx
  */
 
 
 #include "PartitionList.h"
 
+#include <stdio.h>
 #include <Catalog.h>
 #include <ColumnTypes.h>
+#include <DiskDevice.h>
+#include <File.h>
+#include <IconUtils.h>
 #include <Locale.h>
 #include <Path.h>
+#include <Volume.h>
+#include <VolumeRoster.h>
 
 #include <driver_settings.h>
 
+#include "EncryptionUtils.h"
 #include "Support.h"
 #include "MainWindow.h"
+#include "icons.h"
 
 
 #undef B_TRANSLATION_CONTEXT
@@ -35,6 +45,8 @@ enum {
        kVolumeNameColumn,
        kMountedAtColumn,
        kSizeColumn,
+       kFreeSizeColumn,
+       kBlockSizeColumn,
        kParametersColumn,
        kPartitionTypeColumn,
 };
@@ -195,6 +207,17 @@ PartitionColumn::InitTextMargin(BView* parent)
 // #pragma mark - PartitionListRow
 
 
+static inline void
+appendParameter(BString& string, bool append, const char* parameter)
+{
+       if (!append)
+               return;
+       if (string.Length() > 0)
+               string.Append(", ");
+       string.Append(parameter);
+}
+
+
 PartitionListRow::PartitionListRow(BPartition* partition)
        :
        Inherited(),
@@ -208,14 +231,58 @@ PartitionListRow::PartitionListRow(BPartition* partition)
 
        // Device icon
 
-       BBitmap* icon = NULL;
-       if (partition->IsDevice()) {
-               icon_size size = B_MINI_ICON;
-               icon = new BBitmap(BRect(0, 0, size - 1, size - 1), B_RGBA32);
-               if (partition->GetIcon(icon, size) != B_OK) {
+       BVolume volume;
+       partition->GetVolume(&volume);
+
+       BVolume boot;
+       BVolumeRoster().GetBootVolume(&boot);
+
+       bool fBoot;
+       bool fReadOnly;
+       bool fShared;
+       bool fEncrypted = false;
+
+       fBoot = volume == boot;
+       fReadOnly = volume.IsReadOnly();
+       fShared = volume.IsShared();
+
+       BString parameters;
+       appendParameter(parameters, fBoot, B_TRANSLATE("Boot"));
+       appendParameter(parameters, partition->Device()->IsFile(),
+               B_TRANSLATE("Virtual"));
+       appendParameter(parameters, fReadOnly, B_TRANSLATE("Read only"));
+       appendParameter(parameters, volume.IsRemovable(), 
B_TRANSLATE("Removable"));
+       appendParameter(parameters, fShared, B_TRANSLATE("Shared"));
+       appendParameter(parameters, volume.KnowsMime(), B_TRANSLATE("Mimes"));
+       appendParameter(parameters, volume.KnowsAttr(), 
B_TRANSLATE("Attributes"));
+       appendParameter(parameters, volume.KnowsQuery(), 
B_TRANSLATE("Queries"));
+
+       const char* encrypter = EncryptionType(path.Path());
+       if (encrypter != NULL) {
+               appendParameter(parameters, true, encrypter);
+               fEncrypted = true;
+       }
+
+       BBitmap *icon = new BBitmap(BRect(0, 0, 15, 15), B_RGBA32);
+
+       if (fBoot)
+               BIconUtils::GetVectorIcon(kLeaf, sizeof(kLeaf), icon);
+       else if (fEncrypted)
+               BIconUtils::GetVectorIcon(kEncrypted, sizeof(kEncrypted), icon);
+       else if (fReadOnly)
+               BIconUtils::GetVectorIcon(kReadOnly, sizeof(kReadOnly), icon);
+       else if (fShared)
+               BIconUtils::GetVectorIcon(kShared, sizeof(kShared), icon);
+       else if (partition->Device()->IsFile())
+               BIconUtils::GetVectorIcon(kFile, sizeof(kFile), icon);
+       else if (partition->IsDevice()) {
+               if (partition->GetIcon(icon, B_MINI_ICON) != B_OK) {
                        delete icon;
                        icon = NULL;
                }
+       } else {
+               delete icon;
+               icon = NULL;
        }
 
        SetField(new BBitmapStringField(icon, path.Path()), kDeviceColumn);
@@ -260,30 +327,37 @@ PartitionListRow::PartitionListRow(BPartition* partition)
                char size[1024];
                SetField(new BStringField(string_for_size(partition->Size(), 
size,
                        sizeof(size))), kSizeColumn);
-       } else {
+       } else
                SetField(new BStringField(kUnavailableString), kSizeColumn);
-       }
+
+       if (volume.FreeBytes() > 0) {
+               char size[1024];
+               SetField(new BStringField(string_for_size(volume.FreeBytes(), 
size,
+                       sizeof(size))), kFreeSizeColumn);
+       } else
+               SetField(new BStringField(kUnavailableString), kFreeSizeColumn);
+
+       char blocksize[16];
+       snprintf(blocksize, sizeof(blocksize), "%" B_PRIu32,
+               partition->BlockSize());
+       SetField(new BStringField(blocksize), kBlockSizeColumn);
 
        // Additional parameters
 
        if (partition->Parameters() != NULL) {
-               BString parameters;
-
                // check parameters
                void* handle = 
parse_driver_settings_string(partition->Parameters());
                if (handle != NULL) {
-                       bool active = get_driver_boolean_parameter(handle, 
"active", false, true);
-                       if (active)
-                               parameters += B_TRANSLATE("Active");
+                       bool active = get_driver_boolean_parameter(handle, 
"active", false,
+                               true);
+                       appendParameter(parameters, active, 
B_TRANSLATE("Active"));
 
                        delete_driver_settings(handle);
                }
-
-               SetField(new BStringField(parameters), kParametersColumn);
-       } else {
-               SetField(new BStringField(kUnavailableString), 
kParametersColumn);
        }
 
+       SetField(new BStringField(parameters), kParametersColumn);
+
        // Partition type
 
        if (partitionType.IsEmpty())
@@ -304,7 +378,8 @@ PartitionListRow::PartitionListRow(partition_id parentID, 
partition_id id,
        // TODO: design icon for spaces on partitions
        SetField(new BBitmapStringField(NULL, "-"), kDeviceColumn);
 
-       SetField(new BStringField(B_TRANSLATE("<empty>")), kFilesystemColumn);
+       SetField(new BStringField(B_TRANSLATE("<empty or unknown>")),
+               kFilesystemColumn);
        SetField(new BStringField(kUnavailableString), kVolumeNameColumn);
 
        SetField(new BStringField(kUnavailableString), kMountedAtColumn);
@@ -342,8 +417,12 @@ PartitionListView::PartitionListView(const BRect& frame, 
uint32 resizeMode)
                B_TRUNCATE_MIDDLE), kVolumeNameColumn);
        AddColumn(new PartitionColumn(B_TRANSLATE("Mounted at"), 100, 50, 500,
                B_TRUNCATE_MIDDLE), kMountedAtColumn);
-       AddColumn(new PartitionColumn(B_TRANSLATE("Size"), 100, 50, 500,
+       AddColumn(new PartitionColumn(B_TRANSLATE("Size"), 80, 50, 500,
                B_TRUNCATE_END, B_ALIGN_RIGHT), kSizeColumn);
+       AddColumn(new PartitionColumn(B_TRANSLATE("Free space"), 80, 50, 500,
+               B_TRUNCATE_END, B_ALIGN_RIGHT), kFreeSizeColumn);
+       AddColumn(new PartitionColumn(B_TRANSLATE("Block size"), 50, 50, 500,
+               B_TRUNCATE_END, B_ALIGN_RIGHT), kBlockSizeColumn);
        AddColumn(new PartitionColumn(B_TRANSLATE("Parameters"), 100, 50, 500,
                B_TRUNCATE_END), kParametersColumn);
        AddColumn(new PartitionColumn(B_TRANSLATE("Partition type"), 200, 50, 
500,
diff --git a/src/apps/drivesetup/icons.h b/src/apps/drivesetup/icons.h
new file mode 100644
index 0000000000..40fc94c2a8
--- /dev/null
+++ b/src/apps/drivesetup/icons.h
@@ -0,0 +1,356 @@
+const unsigned char kLeaf[] = {
+       0x6e, 0x63, 0x69, 0x66, 0x02, 0x05, 0x00, 0x02, 0x01, 0x06, 0x02, 0x38,
+       0xcc, 0x87, 0xbd, 0x08, 0x3d, 0x3d, 0xcc, 0x62, 0x39, 0x81, 0x95, 0x46,
+       0x09, 0x92, 0x4a, 0x99, 0x6b, 0x00, 0xff, 0xb1, 0x1b, 0xff, 0xff, 0xf9,
+       0xc7, 0x01, 0x06, 0x0d, 0xee, 0x1f, 0xbf, 0x03, 0x2f, 0x44, 0x2b, 0x4f,
+       0x2b, 0x48, 0x29, 0x4b, 0x24, 0x4a, 0x29, 0x53, 0x23, 0x50, 0x29, 0x53,
+       0x23, 0x54, 0x29, 0x54, 0x23, 0x54, 0x2e, 0x58, 0x26, 0x5a, 0x2e, 0x58,
+       0x5c, 0x30, 0x30, 0x58, 0x30, 0x58, 0x38, 0x5a, 0x3b, 0x54, 0x3b, 0x54,
+       0x35, 0x54, 0x35, 0x53, 0x35, 0x53, 0x3b, 0x50, 0x3a, 0x4a, 0x33, 0x4f,
+       0x35, 0x4b, 0x33, 0x48, 0x03, 0x0a, 0x00, 0x01, 0x00, 0x1a, 0x41, 0xcc,
+       0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcc, 0x0a, 0x43, 0xa6,
+       0x76, 0xcb, 0x99, 0xb5, 0x15, 0xff, 0x01, 0x17, 0x83, 0x00, 0x04, 0x0a,
+       0x00, 0x01, 0x00, 0x1a, 0x41, 0xcc, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x00, 0x41, 0xcc, 0x0a, 0x43, 0xa6, 0x76, 0xcb, 0x99, 0xb5, 0x00, 0x15,
+       0x01, 0x17, 0x84, 0x00, 0x04, 0x0a, 0x01, 0x01, 0x00, 0x02, 0x41, 0xcc,
+       0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0xcc, 0x0a, 0x43, 0xa6,
+       0x76, 0xcb, 0x99, 0xb5
+};
+
+const unsigned char kEncrypted[] = {
+       0x6e, 0x63, 0x69, 0x66, 0x02, 0x05, 0x00, 0x03, 0xff, 0x00, 0x00, 0x03,
+       0x02, 0x04, 0x31, 0x22, 0xbd, 0x10, 0x22, 0xb6, 0x77, 0x22, 0x22, 0x31,
+       0x22, 0xb6, 0x77, 0x22, 0xbd, 0x10, 0x31, 0x40, 0xb6, 0x77, 0x40, 0xbd,
+       0x10, 0x40, 0x40, 0x31, 0x40, 0xbd, 0x10, 0x40, 0xb6, 0x77, 0x02, 0x03,
+       0x28, 0x37, 0x28, 0x37, 0x25, 0x33, 0xb6, 0xaa, 0xb6, 0xaa, 0xb5, 0x50,
+       0xb8, 0x07, 0xb8, 0x07, 0xb5, 0x50, 0x37, 0x28, 0xba, 0xe0, 0xb4, 0xe7,
+       0x38, 0x29, 0x02, 0x03, 0x3a, 0x2b, 0x3a, 0x2b, 0x3e, 0x2f, 0xbc, 0xdd,
+       0xbc, 0xdd, 0xbe, 0x34, 0xbb, 0x86, 0xbb, 0x84, 0xbe, 0x35, 0x2b, 0x3a,
+       0x2f, 0x3d, 0x2b, 0x3a, 0x02, 0x0a, 0x00, 0x03, 0x00, 0x01, 0x02, 0x12,
+       0x41, 0x95, 0x35, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x41, 0x95, 0x35,
+       0x40, 0x17, 0x64, 0x40, 0x17, 0x64, 0x01, 0x17, 0x83, 0x02, 0x04, 0x0a,
+       0x01, 0x03, 0x00, 0x01, 0x02, 0x02, 0x41, 0x95, 0x35, 0x00, 0x00, 0x00,
+       0x00, 0x00, 0x00, 0x41, 0x95, 0x35, 0x40, 0x17, 0x64, 0x40, 0x17, 0x64
+};
+
+const unsigned char kReadOnly[] = {
+       0x6e, 0x63, 0x69, 0x66, 0x0f, 0x05, 0x01, 0x02, 0x00, 0x06, 0x03, 0x38,
+       0xd2, 0xf7, 0x3c, 0xd1, 0x63, 0xbf, 0x82, 0xb2, 0x3b, 0x84, 0xa9, 0x4b,
+       0x88, 0x50, 0x49, 0x10, 0xc9, 0x00, 0xff, 0xef, 0xa5, 0xbd, 0xff, 0xfc,
+       0xc0, 0xff, 0xff, 0xf8, 0x90, 0x02, 0x01, 0x06, 0x02, 0x3e, 0x49, 0x24,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xaa, 0xaa, 0x49, 0x40, 0x00,
+       0x4a, 0x80, 0x00, 0xff, 0xff, 0xfc, 0xc0, 0x7c, 0xf1, 0xb7, 0x06, 0x02,
+       0x00, 0x16, 0x02, 0x3a, 0x55, 0xa6, 0xba, 0xc2, 0x29, 0x3f, 0x0d, 0xa3,
+       0x3e, 0x95, 0x86, 0x46, 0xc2, 0xeb, 0x47, 0xa1, 0xd6, 0x00, 0x01, 0xff,
+       0x9e, 0x02, 0x00, 0x06, 0x03, 0xb4, 0xa7, 0xac, 0x38, 0xfc, 0xa2, 0xbb,
+       0xf7, 0x7b, 0xb7, 0x86, 0xa6, 0x49, 0x3b, 0x6c, 0x47, 0x11, 0x63, 0x00,
+       0xff, 0xee, 0xd5, 0x8d, 0xdb, 0xab, 0x5f, 0xcf, 0xff, 0xee, 0xd5, 0x02,
+       0x00, 0x06, 0x02, 0x3d, 0x4d, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+       0x40, 0x00, 0x00, 0x4a, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xea,
+       0xba, 0xff, 0xff, 0xf6, 0xe3, 0x02, 0x00, 0x06, 0x03, 0x00, 0x00, 0x00,
+       0x39, 0x0c, 0x30, 0xbb, 0xcf, 0x3c, 0x00, 0x00, 0x00, 0x4b, 0x60, 0x00,
+       0x46, 0x00, 0x00, 0x00, 0xff, 0xea, 0xee, 0xc6, 0xd1, 0x7c, 0x8a, 0xff,
+       0xda, 0x9f, 0xaa, 0x02, 0x00, 0x06, 0x02, 0xaa, 0xb1, 0xfb, 0x3a, 0x08,
+       0x1f, 0xbe, 0x8a, 0x26, 0xaf, 0x5e, 0x79, 0x4c, 0x50, 0x14, 0x46, 0xc6,
+       0xa1, 0x00, 0xff, 0xe3, 0xe8, 0xff, 0xf8, 0xa1, 0xb1, 0x02, 0x00, 0x06,
+       0x02, 0x3c, 0x08, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+       0x00, 0x4a, 0x40, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfb, 0xb5, 0x0d, 0x00,
+       0xf0, 0xab, 0x06, 0x02, 0x00, 0x06, 0x02, 0xb6, 0x6e, 0x92, 0x3a, 0x77,
+       0x41, 0xbf, 0xe2, 0x39, 0xbb, 0xd4, 0x8d, 0x4c, 0x06, 0x3f, 0x48, 0xc5,
+       0xf5, 0x00, 0xa5, 0x2a, 0x04, 0xff, 0xfd, 0xb4, 0x4b, 0x02, 0x00, 0x06,
+       0x02, 0x3b, 0x8e, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+       0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0xb0, 0x3a, 0xff,
+       0xe9, 0xda, 0x71, 0x03, 0xe2, 0xc2, 0x55, 0x04, 0x00, 0x66, 0x03, 0x80,
+       0x00, 0x00, 0x02, 0x00, 0x06, 0x02, 0x00, 0x00, 0x00, 0x3c, 0x20, 0x00,
+       0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x48, 0xe0, 0x00,
+       0x00, 0xff, 0xab, 0xab, 0xff, 0xd9, 0x00, 0x00, 0x0c, 0x06, 0x0c, 0xae,
+       0xaa, 0xba, 0xb4, 0x0b, 0xc1, 0x4b, 0x33, 0xc5, 0xad, 0xb7, 0x5d, 0xc3,
+       0x71, 0xbd, 0xef, 0xc8, 0x05, 0xc1, 0x3e, 0xca, 0x02, 0xc4, 0xe0, 0x4f,
+       0x41, 0xc5, 0x07, 0x37, 0x4b, 0x39, 0x4a, 0x45, 0xc3, 0x3c, 0xc6, 0xd1,
+       0xc3, 0x6f, 0xca, 0x28, 0xbf, 0x80, 0xc1, 0x18, 0xbb, 0x1e, 0xc5, 0x1b,
+       0xbd, 0x3e, 0xbf, 0x07, 0xba, 0x06, 0x3a, 0xb8, 0xba, 0x06, 0x09, 0xae,
+       0xaa, 0x02, 0xb5, 0x7d, 0x43, 0xb9, 0xb9, 0xc5, 0xed, 0xb7, 0xbb, 0x49,
+       0xbb, 0xb7, 0x56, 0xbd, 0x75, 0xcb, 0x34, 0xc6, 0xf0, 0xc5, 0xc2, 0x4e,
+       0x4f, 0x51, 0x4b, 0xc9, 0xbb, 0xc4, 0x28, 0xca, 0x8e, 0xc3, 0xaf, 0x40,
+       0x34, 0x06, 0x06, 0xb2, 0x08, 0x31, 0x24, 0x53, 0x56, 0x29, 0x56, 0x25,
+       0x56, 0x2d, 0x53, 0x2e, 0x31, 0x26, 0x29, 0x0a, 0x06, 0x31, 0x24, 0xb8,
+       0xba, 0xb5, 0xb2, 0xb8, 0xba, 0xb7, 0x79, 0x31, 0x2e, 0xb6, 0x77, 0xb6,
+       0xec, 0xb6, 0x7c, 0xb6, 0x3c, 0x0a, 0x04, 0x33, 0x24, 0xb9, 0x69, 0xb5,
+       0xba, 0x4a, 0x27, 0x4d, 0x24, 0x08, 0x04, 0xba, 0x28, 0xb4, 0xd3, 0x30,
+       0x27, 0x30, 0x2b, 0xba, 0x28, 0xb8, 0x58, 0x06, 0x06, 0x2e, 0x0b, 0x53,
+       0x24, 0x50, 0x29, 0x50, 0x25, 0x50, 0x2d, 0x53, 0x2e, 0x4f, 0x4c, 0x29,
+       0x4c, 0x2d, 0x4c, 0x25, 0x4f, 0x24, 0x00, 0x03, 0xc4, 0xea, 0xb4, 0xd3,
+       0xc4, 0xea, 0xb4, 0xd3, 0xc4, 0x92, 0xb5, 0x17, 0x4b, 0x29, 0x4b, 0xb5,
+       0x9e, 0x4b, 0xb7, 0x8d, 0xc4, 0xea, 0xb8, 0x58, 0xc4, 0x92, 0xb8, 0x14,
+       0xc4, 0xea, 0xb8, 0x58, 0x06, 0x04, 0xee, 0x53, 0x24, 0x56, 0x29, 0x56,
+       0x25, 0x56, 0x2d, 0x53, 0x2e, 0x50, 0x29, 0x50, 0x2d, 0x50, 0x25, 0x0a,
+       0x04, 0xb9, 0x69, 0xb5, 0xba, 0xb9, 0x69, 0xb7, 0x71, 0x4a, 0x2b, 0x4a,
+       0x27, 0x0a, 0x04, 0xb9, 0x69, 0xb7, 0x71, 0x33, 0x2e, 0x4d, 0x2e, 0x4a,
+       0x2b, 0x0a, 0x0c, 0x48, 0x2a, 0x40, 0x22, 0x35, 0x2d, 0x2a, 0x22, 0x22,
+       0x2a, 0x2d, 0x35, 0x22, 0x40, 0x2a, 0x48, 0x35, 0x3d, 0x40, 0x48, 0x48,
+       0x40, 0x3d, 0x35, 0x0a, 0x0a, 0x00, 0x03, 0x02, 0x05, 0x07, 0x12, 0x40,
+       0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40, 0x26, 0x8f, 0xc6,
+       0x03, 0xab, 0x4b, 0x1c, 0x95, 0x01, 0x17, 0x84, 0x00, 0x04, 0x0a, 0x04,
+       0x01, 0x03, 0x02, 0x40, 0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83,
+       0x40, 0x26, 0x8f, 0xc6, 0x03, 0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x05, 0x01,
+       0x04, 0x02, 0x40, 0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40,
+       0x26, 0x8f, 0xc6, 0x03, 0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x08, 0x01, 0x09,
+       0x02, 0x40, 0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40, 0x26,
+       0x8f, 0xc6, 0x03, 0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x09, 0x01, 0x0a, 0x02,
+       0x40, 0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40, 0x26, 0x8f,
+       0xc6, 0x03, 0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x06, 0x01, 0x06, 0x02, 0x40,
+       0x26, 0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40, 0x26, 0x8f, 0xc6,
+       0x03, 0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x07, 0x01, 0x08, 0x02, 0x40, 0x26,
+       0x8f, 0xbf, 0xa4, 0x83, 0x3f, 0xa4, 0x83, 0x40, 0x26, 0x8f, 0xc6, 0x03,
+       0xab, 0x4b, 0x1c, 0x95, 0x0a, 0x0c, 0x01, 0x0b, 0x30, 0x36, 0x36, 0x01,
+       0x17, 0x83, 0x22, 0x04, 0x0a, 0x0d, 0x01, 0x0b, 0x30, 0x34, 0x34, 0x01,
+       0x17, 0x83, 0x22, 0x04, 0x0a, 0x0e, 0x01, 0x0b, 0x20, 0x34, 0x34
+};
+
+const unsigned char kShared[] = {
+       0x6e, 0x63, 0x69, 0x66, 0x13, 0x04, 0x00, 0x4c, 0x03, 0xff, 0xcb, 0x9a,
+       0x01, 0xcd, 0x98, 0x66, 0xb2, 0x01, 0xcd, 0x99, 0x66, 0xb2, 0x01, 0xcd,
+       0x99, 0x66, 0xb2, 0x01, 0xcd, 0x99, 0x66, 0xb2, 0x01, 0xcd, 0x99, 0x66,
+       0xb2, 0x01, 0xcd, 0x99, 0x66, 0xb2, 0x01, 0xcd, 0x99, 0x66, 0xb2, 0x01,
+       0xcd, 0x98, 0x66, 0xb2, 0x04, 0xff, 0xf2, 0x04, 0xff, 0xf2, 0x04, 0xff,
+       0xf2, 0x04, 0xff, 0xf2, 0x05, 0x00, 0x04, 0xff, 0xb2, 0x01, 0xcd, 0x98,
+       0x66, 0xb2, 0x04, 0x00, 0x2b, 0x05, 0x00, 0x12, 0x06, 0x17, 0xeb, 0xff,
+       0xbe, 0xff, 0xbe, 0x3f, 0xc5, 0xdd, 0xb9, 0x18, 0xcb, 0xb1, 0xba, 0x52,
+       0xc4, 0xc9, 0xb8, 0xdc, 0xc4, 0x28, 0xb9, 0x72, 0xc2, 0xdc, 0xba, 0x19,
+       0xc1, 0xb3, 0xb9, 0xb6, 0xc2, 0x3c, 0xb9, 0xaf, 0xc1, 0xb3, 0xb9, 0xb6,
+       0xb7, 0xbb, 0xb9, 0xb6, 0xb7, 0xbb, 0xb9, 0xb6, 0xb6, 0x4f, 0xb9, 0xb6,
+       0xb7, 0x9b, 0xbc, 0x6c, 0xb5, 0xaa, 0xbc, 0x6c, 0xb7, 0x9b, 0xbc, 0x6c,
+       0xbb, 0x19, 0xbc, 0x6c, 0xbb, 0x19, 0xbc, 0x6c, 0xbb, 0xa1, 0xbc, 0x77,
+       0xbc, 0x21, 0xbd, 0x12, 0xbc, 0x21, 0xbc, 0x8e, 0xbc, 0x21, 0xbd, 0x12,
+       0xbb, 0xbf, 0xbe, 0x1b, 0xb3, 0xb8, 0xc5, 0xdf, 0xb3, 0xb8, 0xc5, 0xdf,
+       0xb2, 0x4b, 0xc7, 0x4d, 0xb5, 0x87, 0xc7, 0xb0, 0xb4, 0x90, 0xc8, 0xa7,
+       0xb5, 0x87, 0xc7, 0xb0, 0xb5, 0x8d, 0xc7, 0xb1, 0xb5, 0x24, 0xc8, 0x13,
+       0xb5, 0x24, 0xc8, 0x13, 0xb3, 0xb8, 0xc9, 0x80, 0xb8, 0x41, 0xc9, 0x52,
+       0xb6, 0x4f, 0xcb, 0x01, 0xb8, 0x41, 0xc9, 0x52, 0xb8, 0x96, 0xc8, 0xfa,
+       0xb8, 0x96, 0xc8, 0xfa, 0xb7, 0xaf, 0xca, 0x8b, 0xbc, 0x47, 0xc9, 0xcc,
+       0xba, 0xed, 0xcb, 0x75, 0xbc, 0x47, 0xc9, 0xcc, 0xbc, 0x8f, 0xc9, 0x86,
+       0xbc, 0x95, 0xc9, 0x88, 0xbc, 0x95, 0xc9, 0x88, 0xba, 0xef, 0xcb, 0x24,
+       0xbf, 0x80, 0xca, 0x68, 0xbd, 0xb0, 0xcc, 0x58, 0xbf, 0x80, 0xca, 0x68,
+       0x4d, 0xc5, 0x19, 0xc9, 0x55, 0xc0, 0x4f, 0xc8, 0xd0, 0xc1, 0x37, 0xc9,
+       0xd9, 0xbf, 0x66, 0xc9, 0x77, 0xbd, 0xda, 0xc9, 0xb8, 0xbf, 0x25, 0xc9,
+       0x77, 0xbd, 0xda, 0xca, 0x5f, 0xbd, 0x12, 0xca, 0x5f, 0xbd, 0x12, 0xca,
+       0xa4, 0xbc, 0x2f, 0x06, 0x09, 0xdf, 0xfb, 0x03, 0xc2, 0xd1, 0xba, 0x5d,
+       0xc2, 0xd1, 0xba, 0x5d, 0xc3, 0x09, 0xba, 0x68, 0xc4, 0x46, 0xbb, 0x84,
+       0xc4, 0x46, 0xba, 0xf9, 0xc4, 0x46, 0xbb, 0x84, 0xbb, 0xd1, 0xc4, 0x92,
+       0xbb, 0xc9, 0xc4, 0x92, 0xbb, 0xc9, 0xc6, 0x1a, 0xbb, 0xa0, 0x56, 0xbd,
+       0x7f, 0x56, 0xbc, 0x25, 0x56, 0xbd, 0x7f, 0xc8, 0x59, 0xbc, 0x67, 0xc8,
+       0xb7, 0xbc, 0x65, 0xc8, 0xb7, 0xbc, 0x65, 0xc8, 0x12, 0xbb, 0x65, 0xc4,
+       0x9e, 0xbb, 0x70, 0xc6, 0x28, 0x35, 0xc4, 0x57, 0xba, 0x94, 0xc2, 0xe9,
+       0xb9, 0xd4, 0xc3, 0x0d, 0xb9, 0xdc, 0xc2, 0xe9, 0xb9, 0xd4, 0x06, 0x08,
+       0xbe, 0xbf, 0xb7, 0x35, 0xbb, 0xe0, 0xbc, 0x6b, 0xbb, 0x99, 0xbc, 0x6b,
+       0xbb, 0x99, 0x3a, 0xbd, 0x11, 0xbf, 0xe8, 0xbc, 0xce, 0xbd, 0xe6, 0xbd,
+       0x78, 0xc1, 0x90, 0xbc, 0x40, 0xc2, 0xb9, 0xbc, 0x21, 0xc0, 0x2c, 0xbd,
+       0xdf, 0xc1, 0x61, 0xbd, 0x57, 0xbe, 0xf7, 0xbe, 0x68, 0xbb, 0x7b, 0xbe,
+       0xae, 0xbd, 0x7f, 0xbe, 0x8c, 0xbb, 0x99, 0xbd, 0xbf, 0xbb, 0xe2, 0xbc,
+       0x88, 0xbc, 0xac, 0xbc, 0xa4, 0xb9, 0x6e, 0xbc, 0x34, 0xb7, 0x9b, 0xbc,
+       0x6c, 0x06, 0x09, 0xfe, 0xbf, 0x03, 0xbf, 0xc5, 0xc3, 0xc5, 0xc0, 0x4f,
+       0xc4, 0xb6, 0xc0, 0x93, 0xc4, 0x4f, 0xc0, 0x0b, 0xc5, 0x1d, 0xbe, 0x07,
+       0xc6, 0xb8, 0xbe, 0x29, 0xc6, 0x2f, 0xbd, 0x39, 0xc7, 0x41, 0xbc, 0x28,
+       0xc8, 0xdc, 0xbc, 0x6b, 0xc8, 0x53, 0xbb, 0xe2, 0xc9, 0x67, 0xb9, 0xe0,
+       0xc9, 0xab, 0xba, 0x6a, 0xc9, 0xab, 0xb9, 0x57, 0xc9, 0xab, 0xb9, 0xbd,
+       0xca, 0x9b, 0xb9, 0x34, 0xca, 0x9b, 0xba, 0x46, 0xca, 0x9b, 0xbc, 0x47,
+       0xc9, 0xcc, 0xbb, 0x9b, 0xca, 0x76, 0xbc, 0x47, 0xc9, 0xcc, 0xc0, 0xfa,
+       0xc5, 0x1d, 0xc2, 0x0c, 0xc4, 0xb6, 0xc1, 0xa5, 0xc4, 0x70, 0xc1, 0x61,
+       0xc4, 0x70, 0x06, 0x09, 0xfe, 0xbf, 0x03, 0xbb, 0xc1, 0xc2, 0xf7, 0xbc,
+       0x4a, 0xc3, 0xe8, 0xbc, 0x8f, 0xc3, 0x81, 0xbc, 0x05, 0xc4, 0x4f, 0xba,
+       0x03, 0xc5, 0xeb, 0xba, 0x24, 0xc5, 0x61, 0xb9, 0x34, 0xc6, 0x73, 0xb8,
+       0x22, 0xc8, 0x0e, 0xb8, 0x67, 0xc7, 0x85, 0xb7, 0xdd, 0xc8, 0x99, 0xb5,
+       0xda, 0xc8, 0xdc, 0xb6, 0x64, 0xc8, 0xdc, 0xb5, 0x51, 0xc8, 0xdc, 0xb5,
+       0xb9, 0xc9, 0xcd, 0xb5, 0x3a, 0xc9, 0x97, 0xb6, 0x85, 0xca, 0x26, 0xb8,
+       0x42, 0xc8, 0xfe, 0xb7, 0x95, 0xc9, 0xa7, 0xb8, 0x42, 0xc8, 0xfe, 0x39,
+       0xc4, 0x4f, 0xbe, 0x07, 0xc3, 0xe8, 0xbd, 0xa0, 0xc3, 0xa2, 0x3a, 0xc3,
+       0xa2, 0x06, 0x09, 0xfe, 0xbf, 0x03, 0xba, 0x03, 0xc0, 0xf4, 0xba, 0x8c,
+       0xc1, 0xe5, 0xba, 0xd1, 0xc1, 0x7d, 0xba, 0x47, 0xc2, 0x4c, 0xb8, 0x45,
+       0xc3, 0xe8, 0xb8, 0x67, 0xc3, 0x5e, 0xb7, 0x76, 0xc4, 0x70, 0xb6, 0x64,
+       0xc6, 0x0c, 0xb6, 0xa9, 0xc5, 0x84, 0xb6, 0x20, 0xc6, 0x96, 0xb4, 0x1d,
+       0xc6, 0xda, 0xb5, 0x17, 0xc7, 0x53, 0xb3, 0xa1, 0xc6, 0x9f, 0xb3, 0xfa,
+       0xc7, 0xcb, 0xb3, 0x71, 0xc7, 0xcb, 0xb4, 0x83, 0xc7, 0xcb, 0xb6, 0x84,
+       0xc6, 0xfc, 0xb5, 0xd6, 0xc7, 0xa5, 0xb6, 0x84, 0xc6, 0xfc, 0xbb, 0x37,
+       0xc2, 0x4c, 0xbc, 0x4a, 0xc1, 0xe5, 0xbb, 0xe2, 0xc1, 0xa1, 0xbb, 0x9e,
+       0xc1, 0xa1, 0x02, 0x05, 0xbc, 0xb1, 0xbf, 0x15, 0xbc, 0xb1, 0xbf, 0x15,
+       0xbd, 0xa0, 0xbf, 0x36, 0xc0, 0x2c, 0xc0, 0x6c, 0xbf, 0xa4, 0xc0, 0x05,
+       0xc0, 0xb6, 0xc0, 0xd3, 0xc3, 0x20, 0xc1, 0xa1, 0xc2, 0xda, 0xc0, 0xd3,
+       0xc2, 0x52, 0xc1, 0x17, 0xc0, 0x72, 0xc1, 0x17, 0xc1, 0x66, 0xc1, 0x72,
+       0xbf, 0x5e, 0xc0, 0xb0, 0xbd, 0xe6, 0x41, 0xbe, 0x6f, 0xc0, 0x6c, 0x3a,
+       0xbf, 0xe2, 0x02, 0x02, 0xbd, 0x7f, 0xbe, 0x8c, 0xbe, 0xf7, 0xbf, 0x7c,
+       0xbe, 0xb4, 0xbe, 0x8c, 0xc3, 0x20, 0xbd, 0x9b, 0xc2, 0x52, 0xbe, 0x46,
+       0xc1, 0xeb, 0xbe, 0xcf, 0x02, 0x03, 0xc0, 0x2c, 0xc1, 0xc2, 0xc0, 0x93,
+       0xc1, 0xe5, 0xc1, 0x61, 0xc2, 0x08, 0xc2, 0xb9, 0xc2, 0x29, 0xc2, 0x52,
+       0xc1, 0xe5, 0xc3, 0x20, 0xc2, 0x6f, 0xc3, 0x41, 0xc3, 0x1a, 0xc3, 0x41,
+       0xc3, 0x1a, 0xc2, 0x73, 0xc2, 0xb3, 0x06, 0x08, 0xff, 0xaa, 0xb3, 0xfd,
+       0xc6, 0xa8, 0xb3, 0xc5, 0xc6, 0x54, 0xb4, 0x6c, 0xc6, 0x70, 0xb5, 0x83,
+       0xc5, 0x43, 0xb5, 0x4a, 0xc5, 0xb3, 0xb5, 0xba, 0xc4, 0xd4, 0xb6, 0x7e,
+       0xc4, 0x2b, 0xb5, 0xf3, 0xc4, 0x80, 0xb7, 0x09, 0xc3, 0xd8, 0xb8, 0xad,
+       0xc2, 0x51, 0xb8, 0x75, 0xc2, 0xc0, 0xb8, 0xe5, 0xc1, 0xe1, 0xb9, 0xa9,
+       0xc1, 0x1e, 0xba, 0x4e, 0xc0, 0xcc, 0xbb, 0x0e, 0xbf, 0x19, 0xb4, 0x18,
+       0xc5, 0xb4, 0x06, 0x08, 0xff, 0xaa, 0xb5, 0xb3, 0xc8, 0xa0, 0xb5, 0x7a,
+       0xc8, 0x4d, 0xb6, 0x22, 0xc8, 0x69, 0xb7, 0x37, 0xc7, 0x3a, 0xb7, 0x00,
+       0xc7, 0xaa, 0xb7, 0x6f, 0xc6, 0xcc, 0xb8, 0x34, 0xc6, 0x23, 0xb7, 0xa8,
+       0xc6, 0x77, 0xb8, 0xc0, 0xc5, 0xd0, 0xba, 0x62, 0xc4, 0x49, 0xba, 0x2b,
+       0xc4, 0xb9, 0xba, 0x9b, 0xc3, 0xd8, 0x35, 0xc3, 0x14, 0xbc, 0x5b, 0xc2,
+       0xe6, 0xbb, 0x95, 0xc2, 0x1a, 0xb5, 0xcd, 0xc7, 0xaa, 0x06, 0x08, 0xff,
+       0xe8, 0xb9, 0x19, 0xc9, 0x94, 0xb8, 0x9e, 0xc9, 0x22, 0xb9, 0x89, 0xc9,
+       0x5b, 0xba, 0x9f, 0xc8, 0x2f, 0xba, 0x68, 0xc8, 0x9d, 0xba, 0xd6, 0xc7,
+       0xbe, 0xbb, 0x9b, 0xc7, 0x17, 0xbb, 0x0f, 0xc7, 0x6b, 0xbc, 0x03, 0xc6,
+       0xd7, 0xbd, 0x6e, 0xc5, 0xa9, 0xbc, 0xe9, 0xc6, 0x2b, 0xbd, 0x9b, 0xc5,
+       0x7f, 0xbd, 0x29, 0xbb, 0x93, 0xc6, 0xdb, 0xbb, 0x05, 0xc6, 0xd7, 0xb9,
+       0x33, 0xc8, 0x9e, 0xb9, 0x33, 0xc8, 0x9e, 0xb9, 0x33, 0xc8, 0x9d, 0x06,
+       0x06, 0xff, 0x0e, 0xbc, 0xce, 0xca, 0x7b, 0xbb, 0xdb, 0xca, 0x48, 0xbd,
+       0x3e, 0xca, 0x43, 0xbe, 0x53, 0xc9, 0x15, 0xbe, 0x1b, 0xc9, 0x84, 0xbe,
+       0x8c, 0xc8, 0xa5, 0xbf, 0x4e, 0xc7, 0xfe, 0xbe, 0xc3, 0xc8, 0x51, 0xbf,
+       0xab, 0xc7, 0xc6, 0xc0, 0xf1, 0xc6, 0xbe, 0xc0, 0x6b, 0xc7, 0x38, 0xc1,
+       0x35, 0xc6, 0x81, 0xbf, 0xe0, 0xc6, 0x9f, 0xbc, 0xe8, 0xc9, 0x84, 0xbc,
+       0xe8, 0xc9, 0x84, 0xbc, 0xe9, 0xc9, 0x84, 0x02, 0x1e, 0xca, 0xe4, 0xbb,
+       0xfe, 0xca, 0xe4, 0xbc, 0x5f, 0xca, 0xe4, 0xbb, 0xb6, 0xca, 0xa6, 0xbb,
+       0x1a, 0xca, 0xd3, 0xbb, 0x6a, 0xca, 0x19, 0xba, 0x20, 0xc5, 0xec, 0xb8,
+       0xd4, 0xc8, 0x8c, 0xb9, 0x62, 0xc4, 0xd1, 0xb8, 0x99, 0xc4, 0x04, 0xb9,
+       0x39, 0xc4, 0x24, 0xb9, 0x1c, 0xc3, 0xfa, 0xb9, 0x3e, 0xc2, 0xdf, 0xb9,
+       0xca, 0xc3, 0x14, 0xb9, 0xb0, 0xc2, 0xa3, 0xb9, 0xaa, 0xc1, 0xaf, 0xb9,
+       0x70, 0xc2, 0x25, 0xb9, 0x6c, 0xc1, 0xaf, 0xb9, 0x70, 0xb7, 0xbb, 0xb9,
+       0x70, 0xb7, 0xbb, 0xb9, 0x70, 0xb6, 0xc9, 0xb9, 0x70, 0xb6, 0x1f, 0xbb,
+       0x4c, 0xb6, 0x1f, 0xba, 0x6b, 0xb6, 0x1f, 0xbb, 0xae, 0xb6, 0x7b, 0xbc,
+       0x44, 0xb6, 0x3e, 0xbc, 0x04, 0xb6, 0xa9, 0xbc, 0x76, 0xb7, 0x9b, 0xbc,
+       0xb2, 0xb7, 0x01, 0xbc, 0xb2, 0xb7, 0x9b, 0xbc, 0xb2, 0xbb, 0x19, 0xbc,
+       0xb2, 0xbb, 0x19, 0xbc, 0xb2, 0xbb, 0xb5, 0xbc, 0xbe, 0xbb, 0xdc, 0xbd,
+       0x0b, 0xbb, 0xd8, 0xbc, 0xda, 0xbb, 0xd1, 0xbd, 0x26, 0xbb, 0x84, 0xbd,
+       0xf5, 0xbb, 0x8d, 0xbd, 0xdc, 0xbb, 0x6d, 0xbe, 0x0b, 0xb3, 0x89, 0xc5,
+       0xaf, 0xb3, 0x89, 0xc5, 0xaf, 0xb3, 0x25, 0xc6, 0x11, 0x20, 0xc6, 0xcf,
+       0x20, 0xc6, 0x75, 0x20, 0xc7, 0x30, 0xb3, 0x68, 0xc7, 0xbf, 0xb3, 0x2c,
+       0xc7, 0x85, 0xb3, 0xb8, 0xc8, 0x10, 0xb4, 0xa8, 0xc8, 0x46, 0x23, 0xc8,
+       0x42, 0xb4, 0x5e, 0xc8, 0xc6, 0xb4, 0xce, 0xc9, 0xbb, 0xb4, 0x69, 0x58,
+       0xb5, 0x7d, 0xca, 0x78, 0x2d, 0xc9, 0xb5, 0xb6, 0xf5, 0xca, 0x98, 0xb8,
+       0x32, 0xc9, 0xc1, 0xb8, 0x38, 0xc9, 0xd9, 0xb8, 0x34, 0xc9, 0xcf, 0xb8,
+       0x65, 0xca, 0x5e, 0xb9, 0xb6, 0xca, 0xe6, 0xb8, 0xf3, 0xca, 0xc2, 0xba,
+       0x4f, 0xcb, 0x01, 0xbb, 0xd0, 0xca, 0x8a, 0xbb, 0x1f, 0xca, 0xf2, 0xbb,
+       0xd0, 0xca, 0x9f, 0xbb, 0xd9, 0xca, 0xc2, 0xbb, 0xd4, 0xca, 0xb3, 0xbb,
+       0xf5, 0xcb, 0x2c, 0xbc, 0xd8, 0xcb, 0x9c, 0xbc, 0x52, 0xcb, 0x7b, 0xbd,
+       0x8e, 0xcb, 0xca, 0xbf, 0xb2, 0xca, 0x97, 0xbe, 0xb9, 0xcb, 0x9f, 0xbf,
+       0xb0, 0xca, 0x99, 0xc5, 0x1f, 0xc5, 0x4a, 0xc5, 0x1f, 0xc5, 0x4a, 0xc5,
+       0x48, 0xc5, 0x21, 0xc9, 0x91, 0xc0, 0x71, 0xc9, 0x09, 0xc1, 0x5e, 0xc9,
+       0xda, 0xbf, 0xf1, 0xc9, 0xf4, 0xbf, 0x38, 0xc9, 0xf4, 0xbf, 0x99, 0xc9,
+       0xf4, 0xbe, 0xeb, 0xc9, 0xcc, 0xbe, 0x25, 0xc9, 0xe4, 0xbe, 0x98, 0xc9,
+       0xcc, 0xbe, 0x25, 0xca, 0x9a, 0xbd, 0x3a, 0xca, 0x9a, 0xbd, 0x3a, 0xca,
+       0x9a, 0xbd, 0x3a, 0x06, 0x35, 0xfb, 0xff, 0xbf, 0xfa, 0xbf, 0xaf, 0xfe,
+       0xbf, 0xea, 0xef, 0xff, 0xbf, 0xfe, 0x03, 0xca, 0x2d, 0xbc, 0xcf, 0xca,
+       0x41, 0xbc, 0x91, 0xca, 0x2d, 0xbc, 0xcf, 0xc9, 0x2c, 0xbd, 0xc0, 0xc9,
+       0x46, 0xbe, 0x41, 0xc9, 0x46, 0xbe, 0x41, 0xc9, 0x5d, 0xbe, 0xb2, 0xc9,
+       0x6c, 0xbf, 0x39, 0xc9, 0x6c, 0xbe, 0xfb, 0xc9, 0x6c, 0xbf, 0x88, 0xc9,
+       0x1a, 0xc0, 0x2c, 0xc9, 0x54, 0xbf, 0xc5, 0xc8, 0xb1, 0xc0, 0xe4, 0xc4,
+       0xbe, 0xc4, 0xe9, 0xc5, 0xd1, 0xc3, 0xd5, 0xc4, 0xbe, 0xc4, 0xe9, 0xbf,
+       0x4f, 0xca, 0x36, 0xbf, 0x4f, 0xca, 0x36, 0xbe, 0x7e, 0xcb, 0x17, 0xbc,
+       0xf9, 0xcb, 0x18, 0xbd, 0x8b, 0xcb, 0x3b, 0xbc, 0xa6, 0xcb, 0x02, 0xbc,
+       0x5d, 0xca, 0x9d, 0xbc, 0x6b, 0xca, 0xd5, 0xbc, 0x4b, 0xca, 0x5e, 0xbc,
+       0xc5, 0xc9, 0xb9, 0xbc, 0x71, 0xca, 0x0c, 0xbc, 0xc5, 0xc9, 0xb9, 0xbc,
+       0xc1, 0xc9, 0xb5, 0xbc, 0xc1, 0xc9, 0xb5, 0xbd, 0xce, 0xc8, 0xb0, 0xc1,
+       0xa6, 0xc4, 0xef, 0xc0, 0xa8, 0xc4, 0xc0, 0xc0, 0xdd, 0xc4, 0xf4, 0xbc,
+       0x18, 0xc9, 0x9b, 0xbc, 0x18, 0xc9, 0x9b, 0xbb, 0x77, 0xca, 0x5f, 0xb9,
+       0xcf, 0xca, 0x5f, 0xba, 0x79, 0xca, 0x7e, 0xb9, 0x41, 0xca, 0x45, 0xb8,
+       0xba, 0xc9, 0xae, 0xb8, 0xd5, 0xca, 0x00, 0xb8, 0xb5, 0xc9, 0x9f, 0xb8,
+       0xb3, 0xc9, 0x82, 0xb8, 0xb3, 0xc9, 0x91, 0xb8, 0xb3, 0xc9, 0x61, 0xb8,
+       0xce, 0xc9, 0x22, 0xb8, 0xbf, 0xc9, 0x40, 0xb9, 0x18, 0xc8, 0xd4, 0xb9,
+       0x70, 0xc8, 0x78, 0xb9, 0x6c, 0xc8, 0x71, 0xb9, 0x6c, 0xc8, 0x71, 0xba,
+       0x5c, 0xc7, 0x87, 0xbd, 0x6a, 0xc4, 0x8f, 0xbc, 0xcc, 0xc5, 0x2a, 0xbd,
+       0x82, 0xc4, 0x78, 0xbe, 0x01, 0xc4, 0x3f, 0xbc, 0xf5, 0xc3, 0xcd, 0xbd,
+       0x0a, 0xc4, 0x2f, 0xb8, 0xa8, 0xc8, 0x70, 0xb8, 0xa8, 0xc8, 0x70, 0xb8,
+       0x8b, 0xc8, 0x91, 0xb8, 0x62, 0xc8, 0xcd, 0xb8, 0x74, 0xc8, 0xaf, 0xb8,
+       0x62, 0xc8, 0xcd, 0xb8, 0x0f, 0xc9, 0x23, 0xb8, 0x0f, 0xc9, 0x23, 0xb6,
+       0xf9, 0xca, 0x16, 0xb5, 0x33, 0xc9, 0x5f, 0xb5, 0xac, 0xc9, 0xe1, 0xb5,
+       0x11, 0xc9, 0x3a, 0xb5, 0x01, 0x57, 0xb5, 0x01, 0xc9, 0x13, 0xb5, 0x01,
+       0xc8, 0xb5, 0xb5, 0x56, 0xc8, 0x43, 0xb5, 0x1d, 0xc8, 0x7c, 0xb5, 0x56,
+       0xc8, 0x43, 0xbb, 0x89, 0xc2, 0x71, 0xbb, 0x01, 0xc1, 0xb3, 0xba, 0xdb,
+       0xc2, 0x72, 0xb5, 0x5b, 0xc7, 0x84, 0xb5, 0x57, 0xc7, 0x80, 0xb5, 0x57,
+       0xc7, 0x80, 0xb4, 0xee, 0xc7, 0xe8, 0xb3, 0xc8, 0xc7, 0x60, 0xb4, 0x2e,
+       0xc7, 0xc5, 0xb3, 0x69, 0xc6, 0xff, 0xb3, 0xe8, 0xc6, 0x10, 0xb3, 0x75,
+       0xc6, 0x85, 0xb3, 0xe8, 0xc6, 0x10, 0xbb, 0xf9, 0xbe, 0x42, 0xbc, 0x67,
+       0xbd, 0x12, 0xbc, 0x67, 0xbd, 0x12, 0xbc, 0x67, 0xbc, 0x42, 0xbb, 0x1e,
+       0xbc, 0x29, 0xbb, 0x88, 0xbc, 0x31, 0xbb, 0x1e, 0xbc, 0x29, 0xb7, 0x9b,
+       0xbc, 0x29, 0xb7, 0x9b, 0xbc, 0x29, 0xb7, 0x47, 0xbc, 0x29, 0xb6, 0xde,
+       0xbb, 0xe7, 0xb7, 0x08, 0xbc, 0x12, 0xb6, 0xb1, 0xbb, 0xb7, 0xb6, 0xa9,
+       0xbb, 0x4c, 0xb6, 0xa9, 0xbb, 0x77, 0xb6, 0xa9, 0xba, 0xab, 0xb7, 0xbb,
+       0xb9, 0xf9, 0xb7, 0x1d, 0xb9, 0xf9, 0xb7, 0xbb, 0xb9, 0xf9, 0xc1, 0xb3,
+       0xb9, 0xf9, 0xc1, 0xb3, 0xb9, 0xf9, 0xc2, 0x13, 0xb9, 0xf6, 0xc2, 0xb8,
+       0xba, 0x52, 0xc2, 0x8f, 0xba, 0x38, 0xc2, 0xb8, 0xba, 0x52, 0xc2, 0xd8,
+       0xba, 0x68, 0xc4, 0x50, 0xb9, 0xac, 0xc4, 0x56, 0xb9, 0xa5, 0xc4, 0x56,
+       0xb9, 0xa5, 0xc4, 0x5c, 0xb9, 0xa0, 0xc5, 0xd0, 0xb9, 0x5a, 0xc4, 0xe4,
+       0xb9, 0x28, 0xc8, 0x3e, 0xb9, 0xde, 0xca, 0x30, 0x35, 0xc9, 0xb7, 0xba,
+       0x8c, 0xca, 0x4f, 0xbb, 0x94, 0xca, 0x59, 0xbb, 0xfe, 0xca, 0x59, 0xbb,
+       0xcb, 0xca, 0x59, 0xbc, 0x4b, 0x02, 0x07, 0xc3, 0x13, 0xbd, 0x34, 0xc3,
+       0xb9, 0xbc, 0x51, 0xc3, 0x8b, 0xbc, 0xca, 0xc4, 0x6e, 0xbb, 0xf7, 0xc3,
+       0xba, 0xbc, 0x15, 0xc5, 0x22, 0xbb, 0xd9, 0xc7, 0xe7, 0xbc, 0x7f, 0xc7,
+       0x14, 0xbb, 0xab, 0xc7, 0x40, 0xbc, 0x7f, 0xc5, 0xf5, 0xbd, 0xd9, 0xc6,
+       0x05, 0xbd, 0x51, 0xc5, 0xe7, 0xbe, 0x60, 0xc5, 0x5e, 0xbe, 0x16, 0xc5,
+       0x9b, 0xbe, 0x42, 0xc5, 0x22, 0xbd, 0xe8, 0xc4, 0xf5, 0xbd, 0x16, 0xc4,
+       0xf5, 0xbd, 0x60, 0xc4, 0xf5, 0xbc, 0xca, 0xc5, 0xc9, 0xbc, 0x51, 0xc5,
+       0x5e, 0xbc, 0x60, 0xc4, 0xb9, 0xbc, 0x6f, 0x06, 0x0b, 0xff, 0xee, 0x3f,
+       0xc9, 0x77, 0xbd, 0xda, 0xc9, 0x77, 0xbd, 0xda, 0xca, 0x5f, 0xbd, 0x12,
+       0xc9, 0x4a, 0xba, 0x63, 0xcb, 0x6e, 0xbb, 0x32, 0xc9, 0xb1, 0xbb, 0x32,
+       0xc8, 0x59, 0xbc, 0x67, 0xc8, 0xe3, 0xbc, 0x67, 0xc8, 0x59, 0xbc, 0xf0,
+       0xc7, 0x6a, 0xc0, 0x05, 0xc8, 0xe3, 0xbe, 0x46, 0xc7, 0x1a, 0xc0, 0x63,
+       0xc3, 0x2a, 0xc4, 0x32, 0xc1, 0xba, 0xc6, 0xb8, 0xc1, 0xba, 0xc6, 0xb8,
+       0xc0, 0xde, 0xc7, 0xa1, 0xbf, 0xe9, 0xc8, 0x99, 0xbd, 0xa0, 0xca, 0x9b,
+       0xbe, 0x2a, 0xca, 0x9b, 0xbd, 0x18, 0xca, 0x9b, 0xbd, 0x18, 0xcb, 0x47,
+       0xbc, 0x6c, 0xcb, 0x47, 0xbd, 0xc3, 0xcb, 0x47, 0xc1, 0x3f, 0xc8, 0x99,
+       0xbe, 0xf7, 0xca, 0xe0, 0xc3, 0x87, 0xc6, 0x51, 0xc9, 0xb1, 0xbf, 0x36,
+       0xc9, 0x8e, 0xc0, 0xd3, 0xc9, 0xd2, 0xbd, 0x9b, 0x02, 0x1c, 0xca, 0xd7,
+       0xbd, 0xfc, 0xca, 0xec, 0xbd, 0xbd, 0xca, 0xd7, 0xbd, 0xfc, 0xca, 0x53,
+       0xbe, 0xe5, 0xca, 0x53, 0xbe, 0xe5, 0xca, 0x53, 0xbe, 0xe5, 0xca, 0x24,
+       0xbf, 0x73, 0xca, 0x24, 0xbf, 0x73, 0xca, 0x3b, 0xbf, 0xe3, 0xca, 0x18,
+       0xc0, 0x64, 0xca, 0x18, 0x41, 0xca, 0x18, 0xc0, 0xb3, 0xc9, 0xc5, 0x44,
+       0xca, 0x00, 0x43, 0xc9, 0x5b, 0xc2, 0x10, 0xc5, 0x6a, 0xc6, 0x15, 0xc6,
+       0x7c, 0xc5, 0x02, 0xc5, 0x6a, 0xc6, 0x15, 0xbf, 0xfa, 0xcb, 0x62, 0xbf,
+       0xfa, 0xcb, 0x62, 0xbf, 0x28, 0xcc, 0x43, 0xbd, 0xa5, 0xcc, 0x43, 0xbe,
+       0x35, 0xcc, 0x67, 0xbd, 0x51, 0xcc, 0x2f, 0xbd, 0x07, 0xcb, 0xca, 0xbd,
+       0x17, 0xcc, 0x01, 0x39, 0xcb, 0x89, 0xbc, 0xc3, 0xca, 0xc7, 0xbc, 0x6d,
+       0xcb, 0x1a, 0xbc, 0x22, 0xcb, 0x8a, 0xba, 0x79, 0xcb, 0x8a, 0xbb, 0x25,
+       0xcb, 0xaa, 0xb9, 0xec, 0xcb, 0x70, 0xb8, 0xc4, 0x5b, 0xb8, 0xdf, 0xca,
+       0xd3, 0xb8, 0xbf, 0xca, 0x73, 0xb8, 0xba, 0xca, 0x4f, 0xb8, 0xba, 0xca,
+       0x4f, 0xb7, 0xa3, 0xcb, 0x40, 0xb5, 0xdd, 0xca, 0x89, 0xb6, 0x56, 0xcb,
+       0x0c, 0xb5, 0xbc, 0xca, 0x66, 0xb5, 0x2a, 0xc9, 0xe9, 0xb5, 0x2a, 0xca,
+       0x13, 0xb5, 0x2a, 0xc9, 0xb4, 0xb6, 0x03, 0xc8, 0xab, 0xb6, 0x03, 0xc8,
+       0xab, 0xb5, 0x9a, 0xc9, 0x14, 0xbc, 0xa5, 0xbf, 0x6e, 0xbc, 0xa5, 0xbf,
+       0x6e, 0xbc, 0xa5, 0xbf, 0x6e, 0xbd, 0x11, 0xbe, 0x3f, 0xbd, 0x11, 0xbe,
+       0x3f, 0xbd, 0x11, 0xbd, 0x6d, 0xbb, 0xc8, 0xbd, 0x54, 0xbc, 0x34, 0x3a,
+       0xbb, 0xc8, 0xbd, 0x54, 0xb8, 0x13, 0xbe, 0x34, 0xb8, 0x13, 0xbe, 0x34,
+       0xb7, 0xbf, 0xbe, 0x34, 0xb7, 0x56, 0xbd, 0xf2, 0xb7, 0x80, 0xbe, 0x1d,
+       0xb7, 0x29, 0x3b, 0xb7, 0x21, 0xbd, 0x57, 0xb7, 0x21, 0xbd, 0x82, 0xb7,
+       0x21, 0xbc, 0xb6, 0xb8, 0x34, 0xbc, 0x04, 0xb7, 0x95, 0xbc, 0x04, 0xb8,
+       0x34, 0xbc, 0x04, 0xc4, 0xfb, 0xba, 0xd7, 0xc4, 0xfb, 0xba, 0xd7, 0xc4,
+       0xfb, 0xba, 0xd7, 0xc5, 0x02, 0xba, 0xd1, 0xc5, 0x02, 0xba, 0xd1, 0xc5,
+       0x07, 0xba, 0xcc, 0xc6, 0x7b, 0xba, 0x86, 0xc5, 0x8e, 0xba, 0x54, 0x57,
+       0xbb, 0x09, 0xca, 0xda, 0xbc, 0x8a, 0xca, 0x63, 0xbb, 0xb7, 0xca, 0xfa,
+       0xbc, 0xc1, 0xcb, 0x04, 0xbd, 0x29, 0xcb, 0x04, 0x39, 0xcb, 0x04, 0xbd,
+       0x75, 0x11, 0x0a, 0x00, 0x01, 0x11, 0x00, 0x0a, 0x01, 0x01, 0x00, 0x00,
+       0x0a, 0x02, 0x01, 0x01, 0x00, 0x0a, 0x03, 0x01, 0x02, 0x00, 0x0a, 0x04,
+       0x01, 0x03, 0x00, 0x0a, 0x05, 0x01, 0x04, 0x00, 0x0a, 0x06, 0x01, 0x05,
+       0x00, 0x0a, 0x07, 0x01, 0x06, 0x00, 0x0a, 0x08, 0x01, 0x07, 0x00, 0x0a,
+       0x09, 0x01, 0x08, 0x00, 0x0a, 0x0a, 0x01, 0x09, 0x00, 0x0a, 0x0b, 0x01,
+       0x0a, 0x00, 0x0a, 0x0c, 0x01, 0x0b, 0x00, 0x0a, 0x0d, 0x01, 0x0c, 0x00,
+       0x0a, 0x0e, 0x02, 0x0d, 0x0e, 0x00, 0x0a, 0x0f, 0x01, 0x0f, 0x00, 0x0a,
+       0x10, 0x01, 0x10, 0x00
+};
+
+const unsigned char kFile[] = {
+       0x6e, 0x63, 0x69, 0x66, 0x04, 0x02, 0x00, 0x06, 0x03, 0x39, 0x9e, 0x0f,
+       0x3d, 0x9c, 0x0a, 0xbf, 0x82, 0xb2, 0x3b, 0x84, 0xa9, 0x4b, 0x88, 0x50,
+       0x48, 0x70, 0xc9, 0x00, 0xa5, 0xb1, 0xff, 0xbc, 0xea, 0xf1, 0xff, 0xff,
+       0xb3, 0xb8, 0xff, 0x05, 0x01, 0x02, 0x01, 0x06, 0x02, 0x3e, 0x49, 0x24,
+       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xaa, 0xaa, 0x49, 0x40, 0x00,
+       0x4a, 0x30, 0x00, 0xff, 0xc0, 0xd5, 0xff, 0x7c, 0x89, 0x6e, 0xff, 0x04,
+       0x01, 0x92, 0x04, 0x06, 0x06, 0xae, 0x0b, 0xb4, 0x0b, 0xbf, 0x4d, 0x33,
+       0xc3, 0xaf, 0xb7, 0x5d, 0xc1, 0x73, 0xbd, 0xef, 0xc6, 0x07, 0xc1, 0x3e,
+       0xc8, 0x04, 0xca, 0x28, 0xbd, 0x82, 0xc1, 0x18, 0xb9, 0x20, 0xc5, 0x1b,
+       0xbb, 0x40, 0xbf, 0x07, 0xb8, 0x08, 0x3a, 0xb6, 0xbc, 0x06, 0x05, 0xae,
+       0x02, 0xb5, 0x7d, 0x3e, 0xb9, 0xb9, 0xc3, 0xef, 0xb7, 0xbb, 0x44, 0xbb,
+       0xb7, 0x51, 0xbd, 0x75, 0xc9, 0x36, 0xca, 0x8e, 0xc1, 0xb1, 0x40, 0x2f,
+       0x0a, 0x09, 0x3b, 0x59, 0x3d, 0x5b, 0xbf, 0xcd, 0xc9, 0x3e, 0x45, 0x5b,
+       0xc5, 0x16, 0xc5, 0xf1, 0x60, 0x46, 0x5b, 0x43, 0x5d, 0x45, 0x44, 0x51,
+       0x0a, 0x04, 0x5a, 0x42, 0x5e, 0x3f, 0x5a, 0x3d, 0x57, 0x40, 0x05, 0x0a,
+       0x03, 0x02, 0x02, 0x03, 0x00, 0x0a, 0x01, 0x01, 0x01, 0x10, 0x01, 0x17,
+       0x84, 0x00, 0x04, 0x0a, 0x02, 0x01, 0x01, 0x00, 0x0a, 0x01, 0x01, 0x00,
+       0x10, 0x01, 0x17, 0x84, 0x00, 0x04, 0x0a, 0x00, 0x01, 0x00, 0x00
+};



Other related posts:

  • » [haiku-commits] haiku: hrev53293 - src/apps/drivesetup - Alex von Gluck IV