updated on Thu Jan 26 00:18:00 UTC 2012
[aur-mirror.git] / kernel26-patched / PKGBUILD
blob6bcdcdcd3def9f07c89b522be3f37a560ed3c051
1 # Maintainer: AKulikov & Сергей Стрельников
2 # mail to tuxuls@gmail.com & d01540450@gmail.com
3 # PKGBUILD assembled from kernel26, kernel26-bfs, kernel26-ck kernel26-pf bootsplash patch
5 _major=2
6 _minor=6
7 _patchlevel=39
8 _subversion=0
9 _basekernel=$_major.$_minor.$_patchlevel
10 _pkgname=kernel26-patched
11 _pfrel=pf3
12 _kernelname=-patched
13 _chakrapatches="http://chakra-project.org/sources/kernel26/patches/$_patchlevel"
14 _bootsplashpath="http://przemek.org/patches/bootsplash-$_major.$_minor.$_patchlevel.diff.xz"
15 _aufs2rel=20110418
16 _pfpatchhome="http://pf.natalenko.name/sources/${_basekernel}/"
17 _pfpatchname="patch-${_basekernel}-${_pfrel}.bz2"
18 _ccspatchver=1.8.2-20110626
19 _ccstoolsver=1.8.2.20110626
20 pkgname=kernel26-patched
21 pkgver=${_basekernel}
22 pkgrel=${_pfrel}
23 arch=(i686 x86_64)
24 pkgdesc="Linux kernel with patches ureadhead, tomoto 1.8.x, bootsplash (assembled from kernel26 -bfs,-ck,-pf)"
25 license=('GPL2')
26 groups=('base')
27 url="http://tol-nabat.org.ua/"
28 backup=(etc/mkinitcpio.d/${pkgname}.preset)
29 options=(!strip)
30 depends=('coreutils' 'linux-firmware' 'module-init-tools>=3.12-2' 'mkinitcpio>=0.6.8-2' 'crda' 'pm-utils')
31 makedepends=('xmlto' 'docbook-xsl')
32 optdepends=('kernel26-docs: Kernel hackers manual - HTML documentation that comes with the Linux kernel.'
33             'crda: to set the correct wireless channels of your country'
34             'pm-utils: utilities and scripts for suspend and hibernate power management'
35             'tuxonice-userui: TuxOnIce userspace user interface'
36             'hibernate-script: set of scripts for managing TuxOnIce, hibernation and suspend to RAM'
37             'nvidia-pf: NVIDIA drivers for kernel26-pf'
38             'modprobed_db: Keeps track of EVERY kernel module that has ever been probed. Useful for make localmodconfig.')
39 replaces=('kernel24' 'kernel24-scsi' 'kernel26-scsi'
40           'alsa-driver' 'ieee80211' 'hostap-driver26'
41           'pwc' 'nforce' 'squashfs' 'unionfs' 'ivtv'
42           'zd1211' 'kvm-modules' 'iwlwifi' 'rt2x00-cvs'
43           'gspcav1' 'atl2' 'wlan-ng26' 'rt2500' 'aufs2'
44           'nouveau-drm')
45 #conflicts=(kernel26-pf-core2 kernel26-pf-k8 kernel26-pf-psc kernel26-pf-atom kernel26-pf-k7 kernel26-pf-p3 kernel26-pf-pm kernel26-pf-p4)
46 conflicts=()
47 #provides=(${_pkgname}=${_basekernel} 'aufs2')  # for $pkgname-optimized
48 provides=(${_pkgname}=${_basekernel} 'kernel26-headers' 'aufs2')
49 # below 'provides' is for when you have no other kernel (which is a bad idea anyway)
50 # provides=(${_pkgname}=${_basekernel} 'kernel26-headers' 'kernel26=${pkgver}' 'aufs2')
51 install='kernel26.install'
53 source=(ftp://ftp.kernel.org/pub/linux/kernel/v2.6/linux-${_basekernel}.tar.bz2
54         config config.x86_64            # the main kernel config files
55         kernel26.preset                 # standard config files for mkinitcpio ramdisk
56         logo_linux_clut224.ppm.bz2
57         logo_linux_mono.pbm.bz2         # the archlinux boot logos
58         logo_linux_vga16.ppm.bz2
59         bootsplash-2.6.39.diff.xz::$_bootsplashpath
60         aufs2-base.patch::$_chakrapatches/aufs2.1/aufs2-base-$_patchlevel-rcN-$_aufs2rel.patch
61         aufs2-kbuild.patch::$_chakrapatches/aufs2.1/aufs2-kbuild-$_patchlevel-rcN-$_aufs2rel.patch
62         aufs2-standalone.patch::$_chakrapatches/aufs2.1/aufs2-standalone-$_patchlevel-rcN-$_aufs2rel.patch
63         aufs2.1-$_aufs2rel.patch.bz2::$_chakrapatches/aufs2.1/aufs2.1-standalone.tree-$_patchlevel-rcN-$_aufs2rel.patch.bz2
64         ccs-patch-1.8.2-20110626.tar.gz::"http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Ftomoyo%2F49684%2Fccs-patch-1.8.2-20110626.tar.gz"
65         ccs-patch-2.6.39.diff
66         37_trace-add-trace-events-for-open-exec-an.patch        
67         channel-negative-one-maxim.patch        # hopefully fix "channel -1" aireplay-ng error
68         ${_pfpatchhome}${_pfpatchname}) # the -pf patchset
70 noextract=(ccs-patch-${_ccspatchver}.tar.gz)
71 build() {
72   cd ${srcdir}/linux-${_basekernel}
73 # This is for me, to test the PKGBUILD
74   if [[ $NOEXTRACT = "0" ]]; then
75         msg "Unpacking TOMOYO Linux 1.8.x into kernel source..."
76         tar -xzf "${srcdir}/ccs-patch-${_ccspatchver}.tar.gz"
77         msg "Patching source with TOMOYO Linux 1.8.x patch..."
78         patch -Np1 -i "${srcdir}/ccs-patch-2.6.39.diff"
79         msg "Patching source with ureadahead"
80         patch -Np1 -i ${srcdir}/37_trace-add-trace-events-for-open-exec-an.patch
81 # Bootsplash
83         msg "Unpacking bootsplash"
84         xz -dk ${srcdir}/../bootsplash-${_basekernel}.diff.xz
85         msg "Patching source with bootsplash"
86         patch -p1 < ${srcdir}/../bootsplash-${_basekernel}.diff
88 # Arch linux logo
89      msg "Replacing penguins with arches"
90      bzip2 -dk ${startdir}/logo_linux_*.bz2
91      mv -f ${startdir}/logo_linux_*.p?m drivers/video/logo/
92      msg "Applying pf-kernel patch"
93      bzip2 -dc ${srcdir}/${_pfpatchname} | patch -Np1
94      msg "Applying aufs2 patches"
95      patch -Np1 < ${srcdir}/aufs2-base.patch
96      patch -Np1 < ${srcdir}/aufs2-kbuild.patch
97      patch -Np1 < ${srcdir}/aufs2-standalone.patch
98      bzip2 -dc ${srcdir}/aufs2.1-$_aufs2rel.patch.bz2 | patch -Np1
99      patch -Np1 < ${srcdir}/channel-negative-one-maxim.patch
100      if [ "$CARCH" = "x86_64" ]; then
101         cat ${startdir}/config.x86_64 >| .config
102      else
103         cat ${startdir}/config >| .config
104      fi
105   fi
106   sed -i "s/EXTRAVERSION = -${_pfrel}/EXTRAVERSION = ${_kernelname}/" Makefile
107   _arch=$CARCH
109 #----------------------------------------
110 if [[ "$_BATCH" != "y" ]]; then         # for batch building
111   echo
112   echo "======================================================="
113   msg "You might be prompted below for some config options"
114   echo "======================================================="
115   echo
116   msg "Hit <Y> to use your running kernel's config"
117   echo "    (needs IKCONFIG and IKCONFIG_PROC)"
118   msg "Hit <L> to run make localmodconfig"
119   msg "Hit <N> (or just <ENTER>) to build an all-inclusive kernel like stock -ARCH"
120   echo "    (warning: it can take a looong time)"
121   echo
122   read answer
123   shopt -s nocasematch
124   if [[ "$answer" = "y" ]]; then
125      msg "running 'sudo modprobe configs'"
126      sudo modprobe configs
127      if [[ -s /proc/config.gz ]]; then
128         msg "Extracting config from /proc/config.gz..."
129         zcat /proc/config.gz >| ./.config
130      else
131         msg "You kernel was not compiled with IKCONFIG_PROC."
132         # Copied from kernel26-ck's PKGBUILD
133         msg "Attempting to run /usr/bin/reload_database from modprobe_db..."
134         if [ -e /usr/bin/reload_database ]; then
135            /usr/bin/reload_database
136         fi
137         msg "Running make localmodconfig instead..."
138         chmod +x ./scripts/kconfig/streamline_config.pl
139         ./scripts/kconfig/streamline_config.pl >| config_strip
140         mv config_strip .config
141      fi
142   elif [[ "$answer" = "l" ]]; then
143      # Copied from kernel26-ck's PKGBUILD
144      msg "Attempting to run /usr/bin/reload_database from modprobe_db..."
145      if [ -e /usr/bin/reload_database ]; then
146         /usr/bin/reload_database
147      fi
148      msg "Running the functional equivalent of make localmodconfig now..."
149      chmod +x ./scripts/kconfig/streamline_config.pl
150      ./scripts/kconfig/streamline_config.pl >| config_strip
151      mv config_strip .config
152      msg "An error about ksource in line 118 blah blah is NORMAL as is one about nvidia config too!"
153   else
154      msg "Using stock ARCH kernel .config (with BFS, BFQ and TuxOnIce enabled)."
155   fi
157   # Make some good use of MAKEFLAGS
158   # MAKEFLAGS=`grep -v '#' /etc/makepkg.conf | grep MAKEFLAGS= | sed s/MAKEFLAGS=// | sed s/\"//g`
159   # make prepare
161   # Option for make menuconfig
162   echo
165   msg "Kernel configuration options before build:"
166   echo "    <M> make menuconfig (console menu)"
167   echo "    <N> make nconfig (newer alternative to menuconfig)"
168   echo "    <G> make gconfig (needs gtk)"
169   echo "    <X> make xconfig (needs qt)"
170   echo "    <O> make oldconfig"
171   echo "    <ENTER> to skip configuration and start compiling"
172   read answer
173   case "$answer" in
174    m) make menuconfig
175       ;;
176    g) make gconfig
177       ;;
178    x) make xconfig
179       ;;
180    n) make nconfig
181       ;;
182    o) make oldconfig
183       ;;
184    default)
185       ;;
186   esac
187   cp -v .config ${startdir}/config.local
188   CPU=`egrep "MK8=y|MCORE2=y|MPSC=y|MATOM=y|MPENTIUMII=y|MPENTIUMIII=y|MPENTIUMM=y|MPENTIUM4=y|MK7=y|CONFIG_GENERIC_CPU=y|M686=y" ./.config`
189   CPU=`sed -e "s/CONFIG_M\(.*\)=y/\1/" <<<$CPU`
190   CPU=`sed -e "s/CONFIG_GENERIC_CPU=y/GENERIC/" <<<$CPU`
191   CPU=`sed -e "s/^686$/GENERIC/" <<<$CPU`
192   cp -v .config ${startdir}/config.$CPU-$CARCH
193 fi      # batch check ends here
194 #----------------------------------------
196   # Strip config of uneeded localversion
197   if [ "${_kernelname}" != "" ]; then
198      sed -i "s|CONFIG_LOCALVERSION=.*|CONFIG_LOCALVERSION=\"\"|g" ./.config
199   fi
201   # load configuration
202   # yes "" | make config
203   # Useful for repo maintainers.
205   # build!
206   make bzImage modules
209 package() {
210   KARCH=x86
211   cd ${srcdir}/linux-${_basekernel}
212   _kernver=$(make kernelrelease)
214   # work around the AUR parser
215   # This allows building cpu-optimized packages with according package names.
216   # Useful for repo maintainers.
217   CPU=`egrep "MK8=y|MCORE2=y|MPSC=y|MATOM=y|MPENTIUMII=y|MPENTIUMIII=y|MPENTIUMM=y|MPENTIUM4=y|MK7=y|CONFIG_GENERIC_CPU=y|M686=y" ./.config`
218   CPU=`sed -e "s/CONFIG_M\(.*\)=y/\1/" <<<$CPU`
219   
220 # Note to me: DO NOT EVER REMOVE THIS. It's for the AUR PKGBUILD parser.
221        pkgname="${_pkgname}"
222        pkgdesc="Linux kernel with patches ureadhead, bfs, bfq,tomoyo 1.8.x, ccs-patch, aufs2 and squashfs-lzma, bootsplash (assembled from kernel26 -bfs,-ck,-pf, -ice) - Updated"
223        conflicts=(kernel26-pf-core2 kernel26-pf-k8 kernel26-pf-psc kernel26-pf-atom kernel26-pf-k7 kernel26-pf-p3 kernel26-pf-pm kernel26-pf-p4)
224       
225   
227   if [[ "$pkgname" != "$_pkgname" ]]; then
228      conflicts=('kernel26-pf')
229   fi
231   echo
232   echo "======================================="
233   msg  "The package will be named ${pkgname}"
234   msg  "${pkgdesc}"
235   echo "======================================="
236   echo
238   ### package_kernel26
240   mkdir -p ${pkgdir}/{lib/modules,/lib/firmware,boot}
241   make INSTALL_MOD_PATH=${pkgdir} modules_install
243   cp System.map ${pkgdir}/boot/System.map26-patched
244   cp arch/$KARCH/boot/bzImage ${pkgdir}/boot/vmlinuz26-patched
246   # add vmlinux
247   install -m644 -D vmlinux ${pkgdir}/usr/src/linux-${_kernver}/vmlinux
249   # install fallback mkinitcpio.conf file and preset file for kernel
250   # make sure ${_pkgname} is used for the mkinitcpio process
251   install -m644 -D ${srcdir}/kernel26.preset ${pkgdir}/etc/mkinitcpio.d/${_pkgname}.preset
253   # set correct depmod command for install
254   sed \
255      -e  "s/KERNEL_NAME=.*/KERNEL_NAME=${_kernelname}/g" \
256      -e  "s/KERNEL_VERSION=.*/KERNEL_VERSION=${_kernver}/g" \
257      -i ${startdir}/kernel26.install
258   sed \
259      -e "s|source .*|source /etc/mkinitcpio.d/kernel26${_kernelname}.kver|g" \
260      -e "s|default_image=.*|default_image=\"/boot/${_pkgname}.img\"|g" \
261      -e "s|fallback_image=.*|fallback_image=\"/boot/${_pkgname}-fallback.img\"|g" \
262      -i ${pkgdir}/etc/mkinitcpio.d/${_pkgname}.preset
264   echo -e "# DO NOT EDIT THIS FILE\nALL_kver='${_kernver}'" > ${pkgdir}/etc/mkinitcpio.d/${_pkgname}.kver
266   # remove build and source links
267   rm -f ${pkgdir}/lib/modules/${_kernver}/{source,build}
268   cd ${pkgdir}/lib/modules/${_kernver}
269   ln -sf ../../../usr/src/linux-${_kernver} build
270   # remove the firmware
271   rm -rf ${pkgdir}/lib/firmware
273   ### package_kernel26-headers
274   mkdir -p ${pkgdir}/lib/modules/${_kernver}
275   cd ${pkgdir}/lib/modules/${_kernver}
276   ln -sf ../../../usr/src/linux-${_kernver} build
277   cd ${srcdir}/linux-$_basekernel
278   install -D -m644 Makefile \
279     ${pkgdir}/usr/src/linux-${_kernver}/Makefile
280   install -D -m644 kernel/Makefile \
281     ${pkgdir}/usr/src/linux-${_kernver}/kernel/Makefile
282   install -D -m644 .config \
283     ${pkgdir}/usr/src/linux-${_kernver}/.config
284   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/include
286   for i in acpi asm-generic config crypto drm generated linux math-emu \
287     media net pcmcia scsi sound trace video xen; do
288     cp -a include/$i ${pkgdir}/usr/src/linux-${_kernver}/include/
289   done
291   # copy arch includes for external modules
292   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/x86
293   cp -a arch/x86/include ${pkgdir}/usr/src/linux-${_kernver}/arch/x86/
295   # copy files necessary for later builds, like nvidia and vmware
296   cp Module.symvers ${pkgdir}/usr/src/linux-${_kernver}
297   cp -a scripts ${pkgdir}/usr/src/linux-${_kernver}
298   # fix permissions on scripts dir
299   chmod og-w -R ${pkgdir}/usr/src/linux-${_kernver}/scripts
300   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/.tmp_versions
302   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/kernel
304   cp arch/$KARCH/Makefile ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/
305   if [ "$CARCH" = "i686" ]; then
306     cp arch/$KARCH/Makefile_32.cpu ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/
307   fi
308   cp arch/$KARCH/kernel/asm-offsets.s ${pkgdir}/usr/src/linux-${_kernver}/arch/$KARCH/kernel/
310   # add headers for lirc package
311   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video
312   cp drivers/media/video/*.h  ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/
313   for i in bt8xx cpia2 cx25840 cx88 em28xx et61x251 pwc saa7134 sn9c102; do
314    mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/$i
315    cp -a drivers/media/video/$i/*.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/video/$i
316   done
317   # add docbook makefile
318   install -D -m644 Documentation/DocBook/Makefile \
319     ${pkgdir}/usr/src/linux-${_kernver}/Documentation/DocBook/Makefile
320   # add dm headers
321   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/md
322   cp drivers/md/*.h  ${pkgdir}/usr/src/linux-${_kernver}/drivers/md
323   # add inotify.h
324   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/include/linux
325   cp include/linux/inotify.h ${pkgdir}/usr/src/linux-${_kernver}/include/linux/
326   # add wireless headers
327   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/
328   cp net/mac80211/*.h ${pkgdir}/usr/src/linux-${_kernver}/net/mac80211/
329   # add dvb headers for external modules
330   # in reference to:
331   # http://bugs.archlinux.org/task/9912
332   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core
333   cp drivers/media/dvb/dvb-core/*.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-core/
334   # add dvb headers for external modules
335   # in reference to:
336   # http://bugs.archlinux.org/task/11194
337   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/
338   [[ -e include/config/dvb/ ]] && cp include/config/dvb/*.h ${pkgdir}/usr/src/linux-${_kernver}/include/config/dvb/
339   # add dvb headers for http://mcentral.de/hg/~mrec/em28xx-new
340   # in reference to:
341   # http://bugs.archlinux.org/task/13146
342   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/
343   cp drivers/media/dvb/frontends/lgdt330x.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/
344   cp drivers/media/video/msp3400-driver.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/
345   # add dvb headers  
346   # in reference to:
347   # http://bugs.archlinux.org/task/20402
348   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb
349   cp drivers/media/dvb/dvb-usb/*.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/dvb-usb/
350   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends
351   cp drivers/media/dvb/frontends/*.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/dvb/frontends/
352   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners
353   cp drivers/media/common/tuners/*.h ${pkgdir}/usr/src/linux-${_kernver}/drivers/media/common/tuners/
354   # add xfs and shmem for aufs building
355   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/fs/xfs
356   mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/mm
357   cp fs/xfs/xfs_sb.h ${pkgdir}/usr/src/linux-${_kernver}/fs/xfs/xfs_sb.h
358   # copy in Kconfig files
359   for i in `find . -name "Kconfig*"`; do 
360     mkdir -p ${pkgdir}/usr/src/linux-${_kernver}/`echo $i | sed 's|/Kconfig.*||'`
361     cp $i ${pkgdir}/usr/src/linux-${_kernver}/$i
362   done
364   chown -R root.root ${pkgdir}/usr/src/linux-${_kernver}
365   find ${pkgdir}/usr/src/linux-${_kernver} -type d -exec chmod 755 {} \;
366   # strip scripts directory
367   find ${pkgdir}/usr/src/linux-${_kernver}/scripts  -type f -perm -u+w 2>/dev/null | while read binary ; do
368   case "$(file -bi "$binary")" in
369     *application/x-sharedlib*) # Libraries (.so)
370     /usr/bin/strip $STRIP_SHARED "$binary";;
371     *application/x-archive*) # Libraries (.a)
372     /usr/bin/strip $STRIP_STATIC "$binary";;
373     *application/x-executable*) # Binaries
374     /usr/bin/strip $STRIP_BINARIES "$binary";;
375     esac 
376   done 
377   # remove unneeded architectures
378   rm -rf ${pkgdir}/usr/src/linux-${_kernver}/arch/{alpha,arm,arm26,avr32,blackfin,cris,frv,h8300,ia64,m32r,m68k,m68knommu,mips,microblaze,mn10300,parisc,powerpc,ppc,s390,sh,sh64,sparc,sparc64,um,v850,xtensa}
380   # gzip -9 all modules to save 100MB of space
381   msg "Compressing modules..."
382   find "$pkgdir" -name '*.ko' -exec gzip -9 {} \;
385 # makepkg -g >>PKGBUILD
386 sha256sums=('584d17f2a3ee18a9501d7ff36907639e538cfdba4529978b8550c461d45c61f6'
387             '9da62023a56218f0bae091699ff34906017f3ccf364c33405210b585a622531f'
388             '25f6bef4a9a940b8ce3baba58c7f09049db229e5c7ed046b24c3ba12347d0710'
389             '70d14bd2c8afdc2344d958bf0ffc11a637ac1020bd4f44cec58104529c4446df'
390             '03ed4eb4a35d42ae6beaaa5e6fdbada4244ed6c343944bba6462defaa6fed0bf'
391             '51ea665cfec42d9f9c7796af2b060b7edbdeb367e42811f8c02667ad729f6b19'
392             '9e1e81d80afac6f316e53947e1b081017090081cd30e6c4c473420b77af4b52b'
393             'e59b02e433e3b55ba00c196b53c723f6a4307f7eff903d2fb82bbcdaea81f188'
394             'cb0cd7c00a5def7ef518144fa86ebd84f59ca2c47f007b418f768acde4b887fd'
395             '0405c168e067a2b3668e979a62d21ae9dd0076b590b8ba045c13bb40c3da9db0'
396             '1913bee0c202f726910158ab2e0c0761b49e553d145f60f9ed8fb50d808b6aa2'
397             '05f722aa827dc7188c6422c14424e6d51e8063af0cfe63f821a37fdf9799ffc3'
398             'd4b307601a978109301b4ad75f952fb52b69902e54b2a56c5dd0969af4d96b77'
399             'f444da90f41d2a200f0c3f1b4ee281186e0ffc14a1b00e4935dec2d50db08e21'
400             'fdd36c328b0f52e86842a9f1570acd2b1a5bce82b49dc3a50e8f33e674cb7077'
401             '19f7fc0753636c32026e444e23bd101bd21cfeb59661284678bf157dc35212f2'
402             'ba150b5216dd4f818583efd65d093cca27d10c8fb5a30340589cb73567a9b215')