- 1 -
共享软件加解密与注册方法研究
夏治国 1,2,陈林 2
1重庆大学软件学院,重庆 (400044)
2中国人民解放军 78155部队,四川成都 (610036)
摘 要:共享软件的限制和注册既是作者保护版权的方式,也是软件实现价值的途径。本文
就 Visual C++环境下共享软件开发中的限制用户使用、软件加解密、注册方法等关键问题进
行了讨论研究。
关键词:磁盘序列号;加密;解密;注册表控制
中图分类号:TP309
1.引言
共享软件并不是一种软件的类型,而是一种传播方式,它是指个人或非公司团队开发的
向用户直接收取注册费或相关服务费的“先试后买”的中、小规模的软件。这种软件通过网络
等各种传播方式,十分方便用户,有利于软件的普及和推广;再加上注册费低,性价比高,
因而深受广大用户欢迎[1,2]。
共享软件在未注册之前通常会有一定的功能限制,如使用的时间限制、次数限制、功能
限制等。用户在向软件作者支付一定的注册费用,成为正式版用户后,可以享受到相应的待
遇,包括:版本升级、技术服务、疑问解答等[3]。
2.软件注册模块的整体设计
共享软件的注册功能主要包括两个方面的内容:一是软件注册,即利用获取的磁盘序列
号加密生成注册申请号,再用算号器计算注册号,注册成功后生成注册信息,供程序启动时
查询;二是软件试用,需要检查注册信息,判断软件是否超过试用限制。实现流程如下图:
图 1 软件共享实现流程图
3.软件注册模块的实现
磁盘序列号加密的实现
在 Windows 中,硬盘的磁盘序列号是在硬盘分区后系统产生的 8 字节随机数字,理论
上有重复的可能,但实际上找到两个相同的分区序列号很难,因此,在实际应用中可以把硬
盘序列号作为唯一识别码用于我们的加密系统。
程序中获取 C 盘序列号的库函数是 GetVolumeInformation ()[4],其实现代码如下:
程序启动
Y
Y
N N
生成注册信息
是否注册 启 动
是否限制提示注册
计算注册号 用户注册 生成注册文件
- 2 -
生成注册文件时,用户首先填入用户名,然后点击“生成注册文件”按钮,调用函数
CDRegedit:: OnButhere( ),为了避免别人轻易看出是磁盘序列号,我们将其与 2402029307412
(可以任意指定数)进行异或运算,得到用户机的机器码,其实这就是一个加密的过程;再
把机器码和用户名一起写入注册文件。其代码如下:
BOOL CDRegedit::OnInitDialog()
{
CDialog::OnInitDialog();
//取得机器码(C 盘序列号)
LPCTSTR lpRootPathName="C:\\";
LPTSTR lpVolumeNameBuffer=new char[12];
DWORD nVolumnNameSize=12;
DWORD MaximumComponentLength;
DWORD FileSystemFlags;
LPTSTR lpFileSystemNameBuffer=new char[10];
DWORD FileSystemNameLength=12;
GetVolumeInformation(lpRootPathName,lpVolumeNameBuffer,nVolumnNameSize,&m_
VolumnSerialNumber,&MaximumComponentLength,&FileSystemFlags,lpFileSystemNameB
uffer,FileSystemNameLength);
delete(lpVolumeNameBuffer);
delete(lpFileSystemNameBuffer);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
- 3 -
当然,也可以在注册程序中直接将注册申请号显示给用户,但是考虑到这样一方面需要
用户记录,容易出错,另一方面也是为了注册申请号的安全,所以我们采用生成一个包含机
器码和用户名的注册文件,以电子邮件方式发送给作者。注册程序运行界面如下图:
图 2 系统注册的界面
void CDRegedit::OnButhere()
{
CString sUserName;
(sUserName);
if(())
{
MessageBox("请输入用户名!","系统提示",MB_OK|MB_ICONSTOP);
this->();
}
CString sSerialNumber;
("%d",m_VolumnSerialNumber^2402029307412);
CFileDialog dlg(false," 注 册 .RXI"," 注 册 .RXI",OFN_HIDEREADONLY |
OFN_OVERWRITEPROMPT,"注册文件|*.RXI|");
();
CString sFile=();
if(())
return;
//写入文件
CFile file(sFile, CFile::modeCreate | CFile::modeWrite );
((()),());
("~",1);
((()),
ength());
();
MessageBox(" 注 册 文 件 生 成 完 毕 , 其 路 径 为 : "+sFile," 系 统 提 示
",MB_OK|MB_ICONEXCLAMATION);
}
- 4 -
打开电子邮件程序发送注册文件
为方便用户注册,在注册界面设计了作者电子邮箱的连接,点击 “Email” 按钮就可以
打开电子邮件程序,发送注册申请文件。
这 个 功 能 的 实 现 用 到 了 函 数 ShellExecute( ) , 它 解 析 系 统 注 册 表
HKEY_CLASSES_ROOT 中所有的内容,判断启动那一个执行程序,并且启动一个新的实例
或使用 DDE 将文件名连到一打开的实例。其函数原型[5]:
HINSTANCE ShellExecute( HWND hwnd, LPCTSTR lpOperation, LPCTSTR lpFile,
LPCTSTR lpParameters, LPCTSTR lpDirectory, INT nShowCmd );
参数说明:
hwnd 窗口的句柄
lpOperation 进行的操作,如"open"、"print"、"explore",或为空(""),进行默认操作。
lpFile 要操作的文件。
lpParameters 如果 lpFile 指定的是一个可执行文件则表示参数。
通过调用函数 ShellExecute(NULL, "open", " mailto: abcd1234@", NULL, NULL,
SW_SHOWNORMAL)来打开电子邮件程序,同时打开一个地址为 abcd1234@ 的待
编辑新邮件,方便用户发送注册信息。
利用注册文件解密生成注册号
注册号是软件作者在确认收到注册费用和注册文件后,通过算号器生成的。计算注册号
的过程其实就是一个解密的过程,其程序界面如下图:
图 3 算号器的界面
计算注册号时,先输入注册申请文件的路径,再点击“获取”按钮响应 OnButget()函数:
打开用户的注册申请文件,获取机器码和用户名信息,并自动输入到相应的文本框中,如果
路径为空,则默认读取机器码框和用户名框中的内容;将机器码与指定数 2402029307412
进行异或运算,再与用户名编码进行异或运算,最终生成注册序列号,并自动输入序列号框
中。程序流程如下图:
图 4 注册号获取流程图
获取机器码
获取用户名
与指定数进行异或运算
进行异或运算 每隔三位增加一个“-”符号
注册序列号
- 5 -
程序注册并生成注册信息
程 序 的 注 册 过 程 其 实 也 是 一 个 解 密 的 过 程 。 首 先 同 样 需 要 调 用 函 数
GetVolumeInformation()获取磁盘序列号与指定数 2402029307412 进行异或运算,然后再与从
文本框中获取的用户名编码进行异或运算,每隔三位增加一个“-”符号,得到正确的注册码,
将其与用户输入的注册码进行比较,如果相同则注册成功,并向文件中写入注册信息以供程
序启动时检查。注册信息包括用户名和注册码,以文件 的形式保存在程序目录下。
4.程序启动检查模块的实现
检查注册信息,判断是否注册
程序在注册完成后,已经将用户名和注册号生成注册信息写入程序安装目录中的
文件,在程序每次启动的时候首先检查 :实现代码如下:
如果 ()==true || ()==true 成立,即注册信息存在,则继
续验证其合法性,其过程和注册过程一样,通过磁盘序列号和用户名进行解密运算,将结果
与注册信息中的注册号比较,验证其合法性,如果合法则运行程序。
如果不存在注册信息或者注册信息不合法,弹出注册对话框要求注册。如果用户选择试
用,则通过查询注册表判断是否限制使用。
使用限制的注册表控制
注册表中存放着各种参数,直接控制着 Windows 的启动、硬件驱动程序的装载以及一
些 Windows 应用程序的运行,在整个系统中起着核心作用。因此我们可以利用注册表控制
来实现对共享软件的使用限制功能。
Win32 API 提供了大约 25 个有关注册表的函数,实现了注册表进行打开、读取、写入
和删除等功能,利用这些函数还可以实现对注册表备份,连接和对远端注册表进行查看。本
文实例程序中需要用到指定键的打开、写入、查询和修改等功能,其 API 函数原型及说明
如下[6,7]:
⑴、RegCreateKeyEx()
原型:LONG RegCreateKeyEx( HKEY hKey, LPCTSTR lpSubKey, DWORD Reserved,
char cPath[_MAX_DIR];
CString sName,sCode,sPath;
::GetSystemDirectory(cPath,sizeof(cPath));
("%s\\",cPath);
::GetPrivateProfileString("ENROL","NAME",NULL,(128),128,sPath);
::GetPrivateProfileString("ENROL","CODE",NULL,(128),128,sPath);
CString cStrCode,cStrName;
("%s",sCode);
("%s",sName);
- 6 -
LPTSTR lpClass, DWORD dwOptions, REGSAM samDesired, LPSECURITY_ATTRIBUTES
lpSecurityAttributes, PHKEY phkResult, LPDWORD lpdwDisposition );
说明:打开一个指定的键或子键返回其句柄。如果指定的键不存在则创建。
⑵、RegQueryValueEx()
原型:LONG RegQueryValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD
pReserved, LPDWORD lpType, LPBYTE lpData, LPDWORD lpcbData );
说明:查询某一个键值,根据要查询的键的句柄,返回查询数据。
⑶、RegSetValueEx()
原 型 : LONG RegSetValueEx(HKEY hKey, LPCTSTR lpValueName, LPDWORD
lpReserved, DWORD dwType, const BYTE *lpData, DWORD cbData);
说明:设置注册表中的一个键值。
⑷、RegCloseKey()
原型:RegCloseKey(HKEY hKey)
说明:关闭打开的键,释放句柄。当对一个或多个键或值操作完成以后,需要关闭其键
来进行保存操作结果,关闭一个键后,句柄变为非法,此时应释放句柄。
函数中关键参数说明如下:
•hKey 为主键值;
•lpSubKey 指向以零结尾的字符串的指针,其中包含将要创建或打开的子键的名称;
•lpClass 为一个指向包含键类型的字符串,如果该键已经存在,则忽略该参数;
•dwOptions 为新创建的键设置一定的属性;
•samDesired 用来设置对键访问的权限;
•pSecurityAttributes 为一个指向 SECURITY_ATTRIBUTES 结构的指针;
•phkResult 为一个指向新创建或打开的键的句柄的指针;
•lpdwDispition 指明键是被创建还是被打开的;
•lpData 为一个指向包含数据的缓冲区的指针;
•cbData 以字节为单位,指定数据的长度。
在程序中,首先查询“HKEY_CURRENT_USER \Software\\软件名”下是否存在注册表信
息。如果不存在,则写入新信息,并将能使用的次数设置为 99 存入健 TryTime 中;如果存
在,则读取剩下使用次数并提示给用户,同时修改注册表键值,将剩下次数即 TryTime 值减
1;如果剩下次数小于 1,则提示用户共享此次数已到,同时弹出注册对话框要求注册软件。
需要注意的是,注册表中键值为 CString 型,在读写的时候需要进行格式转换。
5.结束语
共享软件的限制和注册功能实现之后,作者通过网络等方式来发布自己的产品,就不怕
别人侵害到软件的版权问题。只要软件功能实用强大,界面美观、交互方便,就可能得到源
源不断的回报。然而,对普通用户来说虽然实现了共享的功能,但是仍然存在一些问题需要
改进:
加密方式中存在的问题:采用了磁盘序列号和用户名的加密方式,虽然安全性较高,但
由于磁盘序列号是在硬盘分区时系统产生的 8 字节随机数字,如果硬盘重新进行了分区,序
列号会发生改变,系统就会要求重新注册。解决方法:用户提供旧的注册文件和注册信息,
利用算号器验证,如果符合则根据新的注册文件免费提供新的注册号码。
- 7 -
使用限制中存在的问题:为了便于理解,本文将使用限制次数直接存储于注册表中,对
一般用户来说难于破解,但计算机水平较高的用户可以通过修改键值来破解限制。解决方法:
将使用限制次数按一定规则进行加密后保存,在程序中在进行解密查询,同时进行规则验证,
判断注册表是否被修改以及是否使用受限。
参考文献
[1] 百度百科.共享软件[EB/OL]. /
[2] 林晨.谈谈共享软件[N/OL].计算机世界报,://
[3] 朱泉峰.共享软件四大脸谱[N/OL].计算机世界报,2006-10-09(C22、C23).
[4] 张桂勇,陈芳琼.API for Windows 2000/XP 详解[M].北京:清华大学出版社,2003.
[5] 何志丹.深入浅出——Visual C++入门、进阶与应用实例[M].北京:人民邮电出版社,2007.
[6] 姚领田.精通 MFC 程序设计[M].北京:人民邮电出版社,2006.
[7] 高守传.张云铭,郑静.Visual C++ 开发指南[M].北京:人民邮电出版社,2007.
Research of Encryption, Decryption
and Registration Method of Shareware
XIA Zhi-guo1,2, CHEN Lin1
1 College of Software Engineering, Chongqing University, Chongqing,(400044)
2 Unit 78155 of PLA, Chengdu, (610036)
Abstract
The restrictions and registration of shareware is on the way of copyright protection, but also the way to
realize the value of software. This paper discusses the key issues in the shareware development under
Visual C++ programming environment, such as restrictions on users, software encryption and
decryption, the method of registration, etc.
Keywords: Disk serial number; encryption; Decryption; Control Registry
作者简介:
夏治国,男,1977 年生,硕士研究生,主要研究方向是应用软件系统的开发。
陈 林,男,1954 年生,硕士生导师,主要研究方向是应用软件系统的开发;嵌入式软件
开发;多媒体与智能计算;数据挖掘。
<<
/ASCII85EncodePages false
/AllowTransparency false
/AutoPositionEPSFiles true
/AutoRotatePages /All
/Binding /Left
/CalGrayProfile (Dot Gain 20%)
/CalRGBProfile (sRGB )
/CalCMYKProfile (. Web Coated \050SWOP\051 v2)
/sRGBProfile (sRGB )
/CannotEmbedFontPolicy /Warning
/CompatibilityLevel
/CompressObjects /Tags
/CompressPages true
/ConvertImagesToIndexed true
/PassThroughJPEGImages true
/CreateJDFFile false
/CreateJobTicket false
/DefaultRenderingIntent /Default
/DetectBlends true
/ColorConversionStrategy /LeaveColorUnchanged
/DoThumbnails false
/EmbedAllFonts true
/EmbedJobOptions true
/DSCReportingLevel 0
/EmitDSCWarnings false
/EndPage -1
/ImageMemory 1048576
/LockDistillerParams false
/MaxSubsetPct 100
/Optimize true
/OPM 1
/ParseDSCComments true
/ParseDSCCommentsForDocInfo true
/PreserveCopyPage true
/PreserveEPSInfo true
/PreserveHalftoneInfo false
/PreserveOPIComments false
/PreserveOverprintSettings true
/StartPage 1
/SubsetFonts true
/TransferFunctionInfo /Apply
/UCRandBGInfo /Preserve
/UsePrologue false
/ColorSettingsFile ()
/AlwaysEmbed [ true
]
/NeverEmbed [ true
]
/AntiAliasColorImages false
/DownsampleColorImages true
/ColorImageDownsampleType /Bicubic
/ColorImageResolution 300
/ColorImageDepth -1
/ColorImageDownsampleThreshold
/EncodeColorImages true
/ColorImageFilter /DCTEncode
/AutoFilterColorImages true
/ColorImageAutoFilterStrategy /JPEG
/ColorACSImageDict <<
/QFactor
/HSamples [1 1 1 1] /VSamples [1 1 1 1]
>>
/ColorImageDict <<
/QFactor
/HSamples [1 1 1 1] /VSamples [1 1 1 1]
>>
/JPEG2000ColorACSImageDict <<
/TileWidth 256
/TileHeight 256
/Quality 30
>>
/JPEG2000ColorImageDict <<
/TileWidth 256
/TileHeight 256
/Quality 30
>>
/AntiAliasGrayImages false
/DownsampleGrayImages true
/GrayImageDownsampleType /Bicubic
/GrayImageResolution 300
/GrayImageDepth -1
/GrayImageDownsampleThreshold
/EncodeGrayImages true
/GrayImageFilter /DCTEncode
/AutoFilterGrayImages true
/GrayImageAutoFilterStrategy /JPEG
/GrayACSImageDict <<
/QFactor
/HSamples [1 1 1 1] /VSamples [1 1 1 1]
>>
/GrayImageDict <<
/QFactor
/HSamples [1 1 1 1] /VSamples [1 1 1 1]
>>
/JPEG2000GrayACSImageDict <<
/TileWidth 256
/TileHeight 256
/Quality 30
>>
/JPEG2000GrayImageDict <<
/TileWidth 256
/TileHeight 256
/Quality 30
>>
/AntiAliasMonoImages false
/DownsampleMonoImages true
/MonoImageDownsampleType /Bicubic
/MonoImageResolution 1200
/MonoImageDepth -1
/MonoImageDownsampleThreshold
/EncodeMonoImages true
/MonoImageFilter /CCITTFaxEncode
/MonoImageDict <<
/K -1
>>
/AllowPSXObjects false
/PDFX1aCheck false
/PDFX3Check false
/PDFXCompliantPDFOnly false
/PDFXNoTrimBoxError true
/PDFXTrimBoxToMediaBoxOffset [
]
/PDFXSetBleedBoxToMediaBox true
/PDFXBleedBoxToTrimBoxOffset [
]
/PDFXOutputIntentProfile ()
/PDFXOutputCondition ()
/PDFXRegistryName ()
/PDFXTrapped /Unknown
/Description <<
/FRA <FEFF004f007000740069006f006e00730020007000650072006d0065007400740061006e007400200064006500200063007200e900650072002000640065007300200064006f00630075006d0065006e00740073002000500044004600200064006f007400e900730020006400270075006e00650020007200e90073006f006c007500740069006f006e002000e9006c0065007600e9006500200070006f0075007200200075006e00650020007100750061006c0069007400e90020006400270069006d007000720065007300730069006f006e00200061006d00e9006c0069006f007200e90065002e00200049006c002000650073007400200070006f0073007300690062006c0065002000640027006f00750076007200690072002000630065007300200064006f00630075006d0065006e007400730020005000440046002000640061006e00730020004100630072006f0062006100740020006500740020005200650061006400650072002c002000760065007200730069006f006e002000200035002e00300020006f007500200075006c007400e9007200690065007500720065002e>
/ENU (Use these settings to create PDF documents with higher image resolution for improved printing quality. The PDF documents can be opened with Acrobat and Reader and later.)
/JPN <FEFF3053306e8a2d5b9a306f30019ad889e350cf5ea6753b50cf3092542b308000200050004400460020658766f830924f5c62103059308b3068304d306b4f7f75283057307e30593002537052376642306e753b8cea3092670059279650306b4fdd306430533068304c3067304d307e305930023053306e8a2d5b9a30674f5c62103057305f00200050004400460020658766f8306f0020004100630072006f0062006100740020304a30883073002000520065006100640065007200200035002e003000204ee5964d30678868793a3067304d307e30593002>
/DEU <FEFF00560065007200770065006e00640065006e0020005300690065002000640069006500730065002000450069006e007300740065006c006c0075006e00670065006e0020007a0075006d002000450072007300740065006c006c0065006e00200076006f006e0020005000440046002d0044006f006b0075006d0065006e00740065006e0020006d00690074002000650069006e006500720020006800f60068006500720065006e002000420069006c0064006100750066006c00f600730075006e0067002c00200075006d002000650069006e0065002000760065007200620065007300730065007200740065002000420069006c0064007100750061006c0069007400e400740020007a0075002000650072007a00690065006c0065006e002e00200044006900650020005000440046002d0044006f006b0075006d0065006e007400650020006b00f6006e006e0065006e0020006d006900740020004100630072006f0062006100740020006f0064006500720020006d00690074002000640065006d002000520065006100640065007200200035002e003000200075006e00640020006800f600680065007200200067006500f600660066006e00650074002000770065007200640065006e002e>
/PTB <FEFF005500740069006c0069007a006500200065007300740061007300200063006f006e00660069006700750072006100e700f5006500730020007000610072006100200063007200690061007200200064006f00630075006d0065006e0074006f0073002000500044004600200063006f006d00200075006d00610020007200650073006f006c007500e700e3006f00200064006500200069006d006100670065006d0020007300750070006500720069006f0072002000700061007200610020006f006200740065007200200075006d00610020007100750061006c0069006400610064006500200064006500200069006d0070007200650073007300e3006f0020006d0065006c0068006f0072002e0020004f007300200064006f00630075006d0065006e0074006f0073002000500044004600200070006f00640065006d0020007300650072002000610062006500720074006f007300200063006f006d0020006f0020004100630072006f006200610074002c002000520065006100640065007200200035002e0030002000650020007300750070006500720069006f0072002e>
/DAN <FEFF004200720075006700200064006900730073006500200069006e0064007300740069006c006c0069006e006700650072002000740069006c0020006100740020006f0070007200650074007400650020005000440046002d0064006f006b0075006d0065006e0074006500720020006d006500640020006800f8006a006500720065002000620069006c006c00650064006f0070006c00f80073006e0069006e006700200066006f00720020006100740020006600e50020006200650064007200650020007500640073006b00720069006600740073006b00760061006c0069007400650074002e0020005000440046002d0064006f006b0075006d0065006e0074006500720020006b0061006e002000e50062006e006500730020006d006500640020004100630072006f0062006100740020006f0067002000520065006100640065007200200035002e00300020006f00670020006e0079006500720065002e>
/NLD <FEFF004700650062007200750069006b002000640065007a006500200069006e007300740065006c006c0069006e00670065006e0020006f006d0020005000440046002d0064006f00630075006d0065006e00740065006e0020007400650020006d0061006b0065006e0020006d00650074002000650065006e00200068006f0067006500720065002000610066006200650065006c00640069006e00670073007200650073006f006c007500740069006500200076006f006f0072002000650065006e0020006200650074006500720065002000610066006400720075006b006b00770061006c00690074006500690074002e0020004400650020005000440046002d0064006f00630075006d0065006e00740065006e0020006b0075006e006e0065006e00200077006f007200640065006e002000670065006f00700065006e00640020006d006500740020004100630072006f00620061007400200065006e002000520065006100640065007200200035002e003000200065006e00200068006f006700650072002e>
/ESP <FEFF0055007300650020006500730074006100730020006f007000630069006f006e006500730020007000610072006100200063007200650061007200200064006f00630075006d0065006e0074006f0073002000500044004600200063006f006e0020006d00610079006f00720020007200650073006f006c00750063006900f3006e00200064006500200069006d006100670065006e00200070006100720061002000610075006d0065006e0074006100720020006c0061002000630061006c006900640061006400200061006c00200069006d007000720069006d00690072002e0020004c006f007300200064006f00630075006d0065006e0074006f00730020005000440046002000730065002000700075006500640065006e00200061006200720069007200200063006f006e0020004100630072006f00620061007400200079002000520065006100640065007200200035002e003000200079002000760065007200730069006f006e0065007300200070006f00730074006500720069006f007200650073002e>
/SUO <FEFF004e00e4006900640065006e002000610073006500740075007300740065006e0020006100760075006c006c006100200076006f0069006400610061006e0020006c0075006f006400610020005000440046002d0061007300690061006b00690072006a006f006a0061002c0020006a006f006900640065006e002000740075006c006f0073007400750073006c00610061007400750020006f006e0020006b006f0072006b006500610020006a00610020006b007500760061006e0020007400610072006b006b007500750073002000730075007500720069002e0020005000440046002d0061007300690061006b00690072006a0061007400200076006f0069006400610061006e0020006100760061007400610020004100630072006f006200610074002d0020006a00610020004100630072006f006200610074002000520065006100640065007200200035002e00300020002d006f0068006a0065006c006d0061006c006c0061002000740061006900200075007500640065006d006d0061006c006c0061002000760065007200730069006f006c006c0061002e>
/ITA <FEFF00550073006100720065002000710075006500730074006500200069006d0070006f007300740061007a0069006f006e00690020007000650072002000630072006500610072006500200064006f00630075006d0065006e00740069002000500044004600200063006f006e00200075006e00610020007200690073006f006c0075007a0069006f006e00650020006d0061006700670069006f00720065002000700065007200200075006e00610020007100750061006c0069007400e00020006400690020007300740061006d007000610020006d00690067006c0069006f00720065002e0020004900200064006f00630075006d0065006e00740069002000500044004600200070006f00730073006f006e006f0020006500730073006500720065002000610070006500720074006900200063006f006e0020004100630072006f00620061007400200065002000520065006100640065007200200035002e003000200065002000760065007200730069006f006e006900200073007500630063006500730073006900760065002e>
/NOR <FEFF004200720075006b00200064006900730073006500200069006e006e007300740069006c006c0069006e00670065006e0065002000740069006c002000e50020006f00700070007200650074007400650020005000440046002d0064006f006b0075006d0065006e0074006500720020006d006500640020006800f80079006500720065002000620069006c00640065006f00700070006c00f80073006e0069006e006700200066006f00720020006200650064007200650020007500740073006b00720069006600740073006b00760061006c0069007400650074002e0020005000440046002d0064006f006b0075006d0065006e00740065006e00650020006b0061006e002000e50070006e006500730020006d006500640020004100630072006f0062006100740020006f0067002000520065006100640065007200200035002e00300020006f0067002000730065006e006500720065002e>
/SVE <FEFF0041006e007600e4006e00640020006400650020006800e4007200200069006e0073007400e4006c006c006e0069006e006700610072006e00610020006e00e40072002000640075002000760069006c006c00200073006b0061007000610020005000440046002d0064006f006b0075006d0065006e00740020006d006500640020006800f6006700720065002000620069006c0064007500700070006c00f60073006e0069006e00670020006f006300680020006400e40072006d006500640020006600e50020006200e400740074007200650020007500740073006b00720069006600740073006b00760061006c0069007400650074002e0020005000440046002d0064006f006b0075006d0065006e00740065006e0020006b0061006e002000f600700070006e006100730020006d006500640020004100630072006f0062006100740020006f00630068002000520065006100640065007200200035002e003000200065006c006c00650072002000730065006e006100720065002e>
>>
>> setdistillerparams
<<
/HWResolution [2400 2400]
/PageSize [ ]
>> setpagedevice