Instalasi Webcam di GNU/LINUX

Suatu hari penulis berkunjung ke rumah seorang teman dan melihat sebuah webcam bermerk Logitech dengan konektor USB. Saat ditanya apa tipenya teman saya menjawab tidak tahu. Menurut teman saya itu, webcam ini tidak bisa dipakai dan kemungkinan sudah rusak. Dia meminjamkan webcam tersebut kepada saya untuk dicoba dipasang di Linux.

Sebetulnya saya sendiri ragu untuk mencobanya. Bukankah di Linux akan lebih sulit? Jangankan di Linux, di Windows XP yang teman saya pakai saja webcam ini tidak bisa berfungsi! Itulah yang saya pikirkan saat itu.

Berhubung penulis tidak mempunyai PC maka keesokan harinya webcam tersebut dibawa ke kantor. Setibanya dikantor, karena PC yang penulis gunakan tidak pernah dimatikan maka langsung saja buka terminal dan menjalankan perintah (sebagai root):

# tail -f /var/log/messages

Kemudian webcam tersebut saya pasang ke port USB yang ada dan hasil dari perintah diatas menampilkan baris baru:

Apr 11 15:49:47 poetih kernel: usb 1-1: new full speed USB device using uhci_hcd and address 3

Masih penasaran, saya coba lagi dengan perintah:

# dmesg
usb 1-1: new full speed USB device using uhci_hcd and address 3

Hmmm, ternyata terdeteksi ada hardware baru di PC saya. Langkah selanjutnya adalah mencari driver untuk webcam ini dengan cara googling karena produsen webcam ini tidak menyediakan driver untuk Linux. Penulis menggunakan driver qc-usb-0.6.2 yang bisa didownload di http://qce-ga.sourceforge.net. (Lebih baik gunakan driver terbaru jika ada).

Tentang Driver qc-usb-0.6.2
Driver ini dapat digunakan untuk kamera USB dengan VendorId 0×46d dan ProductId 0×840, 0×850, or 0×870. Untuk melihat VendorId dan ProductId gunakan masukkan perintah lsusb di konsol (sebagai root). Contoh:

# lsusb
Bus 002 Device 002: ID 0424:0140 Standard Microsystems Corp.
Bus 002 Device 001: ID 0000:0000
Bus 001 Device 003: ID 046d:0840 Logitech, Inc. QuickCam Express
Bus 001 Device 001: ID 0000:0000

Beberapa kamera tipe baru dari Logitech QuickCam Express dan Labtec dengan ProductId 921 atau 920 tidak dapat menggunakan driver ini. Disarankan untuk menggunakan experimental driver yang ada di http://home.tiscali.dk/tomasgc/labtec/.

Driver ini dapat digunakan untuk tipe webcam seperti dibawah ini:

  • Logitech Quickcam Express (tipe lama, seperti yang penulis coba)
  • Logitech Quickcam Web
  • LegoCam
  • Dexxa Webcam
  • Labtec Webcam (model lama)
  • Logitech QuickCam Notebook (model tertentu)

Beberapa produk webcam lainnya dari Logitech dapat digunakan di Linux tapi dengan menggunakan driver terpisah. Berikut ini adalah webcam Logitech yang tidak kompatibel dengan driver ini tetapi bisa menggunakan driver yang dapat dicari di Internet:

  • Logitech Quickcam 3000 Pro
  • Logitech QuickCam 4000 Pro
  • Logitech QuickCam Notebook Pro
  • Logitech QuickCam Notebook
  • Logitech QuickCam Zoom
  • Logitech Clicksmart
  • Logitech Quickcam VC (USB and Parallel)
  • Older Logitech (formally Connectix) Quickcams (Parallel Port)

Driver ini membutuhkan kernel versi 2.2.x (x >= 18), 2.4.x, atau 2.6.x. dengan dukungan USB dan Video4Linux yang telah diaktifkan. Penulis mencoba driver ini menggunakan distro Slackware 10.1 dengan kernel bawaan versi 2.4.29 dan 2.6.10.

Instalasi Driver
Setelah mendownload drivernya (nama file qc-usb-0.6.2.tar.gz, berukuran 145 Kb), langsung diekstrak:

$ tar zxf qc-usb-0.6.2.tar.gz
$ cd qc-usb-0.6.2

Instalasi driver dapat dilakukan secara manual atau dengan menggunakan wizard melalui skrip yang telah disediakan. Disarankan untuk menjalankannya sebagai user biasa tetapi Anda tetap harus mengetahui root password karena pada tahap tertentu Anda diwajibkan untuk memasukkan root password tersebut. Pada kesempatan ini penulis memutuskan untuk menginstall dengan menggunakan wizard. Berikut ini adalah tahap-tahap instalasi driver:

Tahap 1
Pada tahap ini, hubungkan webcam ke PC (jika belum) kemudian jalankan skrip instalasi (quickcam.sh) yang ada di direktori qc-usb-0.6.2 sebagai user biasa dengan parameter direktori source Linux Anda (biasanya /usr/src/linux atau /usr/src/linux-[versi kernel]:

$ ./quickcam.sh LINUX_DIR=/usr/src/linux

Eksekusi skrip diatas akan menampilkan petunjuk instalasi seperti dibawah ini:

-=- Logitech QuickCam USB camera driver installer -=-
Hello! I am the (hopefully) easy-to-use, fully automated
qc-usb driver installation script.
At the moment, this is experimental, and if it doesn't work,
don't hesitate to quit this with Ctrl+C and install the
driver manually.

The driver is provided in source code form, so it has to be
compiled. This should happen automatically, but it does mean
that there are some steps required before installation.

You also need to know "root" user password to test and
install the driver.

Basically you need only to keep hitting Enter whenever you
see this prompt: --->. Sometimes you're asked root password.
Pay special attention to lines beginning with [!].
It means that some trouble has been detected.

To most important location is the path to your kernel source
or headers. This can be guessed, but you can specify it by
giving it as an argument to this script like this:
        ./quickcam.sh LINUX_DIR=/usr/src/linux

If you haven't done it yet, now it would be a good moment to
take a look at file README.
Argument found: LINUX_DIR=/usr/src/linux

Next I'm going to check if you have some important programs installed
and if they and the kernel are of suitable version.
Press Ctrl+C to quit, Enter to continue --->

Tekan Enter untuk melanjutkan ke tahap berikutnya.

Tahap 2
Pada tahap ini skrip instalasi akan memeriksa program-program yang dibutuhkan:

/usr/bin/whoami
/bin/su
/usr/bin/ls
/usr/bin/cat
/usr/bin/gcc
/usr/bin/gcc
/usr/bin/make
/usr/bin/grep
/usr/bin/egrep
/usr/bin/awk
/usr/bin/sed
/usr/bin/tail
/usr/bin/head
/usr/bin/install
/usr/bin/ld
/usr/bin/uname
/usr/bin/tr
/usr/bin/xawtv
/usr/bin/xdpyinfo
/bin/dmesg
/usr/bin/wc
/usr/bin/readlink
gcc version: gcc version 3.3.4
gcc version: gcc version 3.3.4
Make version: GNU Make 3.80
Linker version: GNU ld version 2.15.92.0.2 20040927
Kernel compiler: gcc version 3.3.4
Looking for more necessary programs...
Found program /bin/depmod
Found program /sbin/insmod
Found program /sbin/rmmod
Found program /sbin/modprobe
Found program /bin/mount
Found program /sbin/lsusb
depmod version: module-init-tools 3.1
insmod version: module-init-tools version 3.1
rmmod version: module-init-tools version 3.1
modprobe version: module-init-tools version 3.1
Checking whether we're root... oeban
Checking for driver source code...
Checking for write permission...

Previous round done. Now checking if you have kernel source installed.
Press Ctrl+C to quit, Enter to continue --->

Jika hasil dari tahap ini menampilkan hasil seperti dibawah ini:

which: no xawtv in (/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/usr/games:.)
Warning: xawtv missing
/usr/bin/xdpyinfo
/bin/dmesg
/usr/bin/wc
[!] Some important programs can not be found on default path.
Probably they aren't installed.
You should install them, for example, by using apt-get or rpm.
WARNING: If you press Enter, I'll try to continue anyway,
but this probably will fail. You SHOULD press Ctrl+C now.

Sebaiknya batalkan dahulu dengan menekan CTRL-C karena bisa menyebabkan kegagalan. Instal dahulu program yang diminta kemudian setelah terinstal jalankan lagi skrip instalasi drivernya. Pada contoh diatas, penulis belum mempunyai program xawtv (http://linux.bytesex.org/xawtv/). Berhubung penulis menggunakan distro Slackware 10.1 dan ternyata tidak disertakan dalam CDnya maka penulis mencari dan mendownloadnya dari www.linuxpackages.net. Untuk instalasi program xawtv ini silahkan baca dokumentasi yang disertakan dalam programnya atau cari di CD masing-masing distro yang digunakan. Setelah program-program yang dibutuhkan telah tersedia maka ulangi lagi langkah pertama.

Tahap 3
Selanjutnya skrip instalasi akan memeriksa keabsahan nilai parameter LINUX_DIR yang diberikan pada saat dijalankan.

Kernel source directory: /usr/src/linux
Detected kernel version is 2.6.x.
Kernel version name: 2.6.10
Kernel source version code: 132618
Driver file name: quickcam.ko
Module install directory: /lib/modules/2.6.10
Driver source directory (PWD):  /home/adrian/download/qc-usb-0.6.2
Kernel source directory (LINUX_DIR):   /usr/src/linux
Module install directory (MODULE_DIR): /lib/modules/2.6.10
Utility install directory (PREFIX):    /usr/local
User options (USER_OPT):
Driver file name (use with insmod):    quickcam.ko
Kernel version code:                   132618

The QuickCam driver requires other drivers from kernel.
I'll now check if those seem to be loaded.
Press Ctrl+C to quit, Enter to continue --->

Tahap 4
Modul kernel yang dibutuhkan seperti USB dan Video4Linux harus ada pada kernel yang digunakan dan sudah diaktifkan. Pada tahap ini keberadaan modul-modul kernel yang dibutuhkan akan diperiksa.

Modules loaded into the kernel:
bttv tuner snd_pcm_oss snd_mixer_oss ipv6 ohci_hcd ehci_hcd intel_agp hw_random shpchp i2c_i801 uhci_hcd
snd_intel8x0 snd_ac97_codec snd_pcm snd_timer snd soundcore snd_page_alloc nvidia video_buf firmware_class
i2c_algo_bit v4l2_common btcx_risc i2c_core videodev ne2k_pci 8390 agpgart evdev reiserfs

Next round: let's see if you have a supported QuickCam.
Please plug in your USB camera before continuing.
Press Ctrl+C to quit, Enter to continue --->

Tahap 5
Pada tahap ini webcam yang terpasang pada port USB akan diperiksa keberadaannya.

I can find the following probably compatible devices:
Bus 001 Device 003: ID 046d:0840 Logitech, Inc. QuickCam Express

Another round done. Let's now compile the driver, it takes a while.
This step will also clear old unnecessary files from the directory.
Press Ctrl+C to quit, Enter to continue --->

Pada contoh diatas, webcam yang terpasang teridentifikasi sebagai Logitech, Inc. QuickCam Express dengan VendorId 046d dan ProductId 0840.

Tahap 6
Tahap ini adalah tahap kompilasi modul driver.

rm -f *.o qcset show *~ .\#* .*.cmd *.mod.c *.ko
rm -rf .tmp_versions
make -C "/usr/src/linux" SUBDIRS="/home/oeban/download/qc-usb-0.6.2" modules V=1 USER_OPT=""
make[1]: Entering directory `/usr/src/linux-2.6.10'
mkdir -p /home/oeban/download/qc-usb-0.6.2/.tmp_versions
make -f scripts/Makefile.build obj=/home/oeban/download/qc-usb-0.6.2
  gcc -Wp,-MD,/home/oeban/download/qc-usb-0.6.2/.qc-driver.o.d -nostdinc -iwithprefix include -D__KERNEL__
  -Iinclude  -Wall -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing -fno-common -O2
  -fomit-frame-pointer -pipe -msoft-float -mpreferred-stack-boundary=2  -march=i486
  -Iinclude/asm-i386/mach-default -DNOKERNEL -DMODULE  -DKBUILD_BASENAME=qc_driver
  -DKBUILD_MODNAME=quickcam -c -o /home/oeban/download/qc-usb-0.6.2/qc-driver.o
/home/oeban/download/qc-usb-0.6.2/qc-driver.c

  -
  [dipotong]
  -

  ld -m elf_i386 -r -o /home/oeban/download/qc-usb-0.6.2/quickcam.ko
  /home/oeban/download/qc-usb-0.6.2/quickcam.o /home/adrian/download/qc-usb-0.6.2/quickcam.mod.o
make[1]: Leaving directory `/usr/src/linux-2.6.10'
gcc -Wall -O2 -s qcset.c -o qcset -lm
-rw-r--r--  1 oeban users 81770 2005-04-12 08:44 quickcam.ko

Now everything should be well and the driver compiled.
Let's then try actually loading the fresh driver and testing
if it works.
Press Ctrl+C to quit, Enter to continue --->

Tahap 7
Tahap ini adalah tahap persiapan untuk meload modul kernel yang baru saja dikompilasi. Anda akan diarahkan untuk masuk pada root mode dan masukkan password yang diminta.

To load the driver, I need to know the root password.
Password:
=== Entering root mode ===
Now I finally will try to load the module.
If you're unlucky, your computer might crash right now!!!!
Consider long if you really want to continue.
Press Ctrl+C to quit, Enter to continue --->

Tahap 8
Modul kernel hasil kompilasi akan dicoba untuk diload, jika berhasil maka akan terlihat hasil seperti dibawah ini:

You decided to do it, here we go...
=== Leaving root mode ===
The driver detected the following supported cameras:
quickcam: QuickCam USB camera found (driver version QuickCam USB $Date: 2004/07/29 18:12:39 $)
quickcam: Kernel:2.6.10 bus:1 class:FF subclass:FF vendor:046D product:0840
quickcam: Sensor HDCS-1000/1100 detected
quickcam: Registered device: /dev/video1
I will be using /dev/video1, if there are more cameras I'll not test them.
Press Ctrl+C to quit, Enter to continue --->

Setelah modul kernel berhasil diload, webcam yang penulis gunakan ternyata dikenali sebagai QuickCam USB!

Tahap 9
Tahap ini akan mencoba membuat device yang akan digunakan oleh webcam, pada contoh ini device yang digunakan adalah /dev/video1 yang merupakan symbolic link dari /dev/v4l/video1. Hasilnya mungkin berbeda dengan yang Anda dapatkan.

Testing if /dev/video1 is correct.
lrwxrwxrwx  1 root root 10 2005-04-12 08:46 /dev/video1 -> v4l/video1
crw-rw----  1 root video 81, 1 2005-04-12 08:46 /dev/v4l/video1
/dev/video1 is a symbolic link to /dev/v4l/video1.
[!] You don't have read/write access to /dev/video1.
On many distributions, you should add yourself into the
"video" group by giving command
        adduser oeban video
and then log in again to be able to access the video.
A quick alternative is just to do
        chmod a+rw /dev/v4l/video1
WARNING: If you press Enter, I'll try to continue anyway,
but this probably will fail. You SHOULD press Ctrl+C now.
Press Ctrl+C to quit, Enter to continue --->

Pada tahap ini, periksa hak akses user untuk device /dev/v4l/video1 dengan cara buka satu terminal lagi (jangan menekan Ctrl-C!). Pada terminal yang baru masukkan perintah:

$ ls -l /dev/v4l/video1
crw-r--r--  1 root video 81, 1 2005-04-12 08:52 /dev/v4l/video1

Jika hasilnya seperti diatas maka ada dua cara yang harus dilakukan, yaitu: menambahkan group video pada user yang akan menjalankan webcam atau mengubah hak akses menjadi read/write.

Untuk menambahkan group video pada user, jalankan (sebagai root) perintah dibawah ini:

# usermod -G video oeban

Kemudian periksa kembali dengan cara masukkan perintah:

# id oeban

Jika hasilnya seperti dibawah ini berarti sudah benar:

# uid=1000(oeban) gid=100(users) groups=100(users),18(video)

Cara kedua adalah dengan mengubah hak akses device menjadi read/write dengan perintah:

# chmod a+rw /dev/v4l/video1

Untuk lebih meyakinkan, periksa kembali hak akses device tersebut dengan cara:

$ ls -l /dev/v4l/video1

Pastikan hasilnya seperti dibawah ini:

crw-rw-rw-  1 root video 81, 1 2005-04-12 08:52 /dev/v4l/video1

Setelah menjalankan salah satu dari langkah-langkah diatas, kembali ke terminal sebelumnya dan tekan tombol Enter untuk melanjutkan ke tahap berikutnya.

Tahap 10
Jika berhasil, maka pada tahap ini driver telah siap untuk digunakan.

Right now driver is loaded and should be ready to run.
Let's test if user applications can see it, starting with qcset.
Press Ctrl+C to quit, Enter to continue --->

Tahap 11
Modul driver berhasil diload dan telah siap digunakan! Pada tahap ini webcam Anda telah dapat digunakan dan Anda dapat menekan Ctrl-C untuk mengakhiri tahapan instalasi driver ini atau jika Xwindows telah aktif dan xawtv telah terinstall biarkan skrip instalasi untuk melakukan pengetesan.

Name          : Logitech QuickCam USB
If you like, you can quit now and start using the camera -
you have good chances that it works, if no problems were detected.
If you have X Window System running and xawtv installed,
I can now run it automatically for you.
You will then also have opportunity to install the driver permanently.
Press Ctrl+C to quit, Enter to continue --->

Tahap 12
Pengetesan modul driver dengan menggunakan xawtv.

Launching xawtv (press q on xawtv window to quit it)...
If the image is not sharp, try focusing it by turning the
wheel around the camera lens.
        xawtv -noscale -noxv -c "/dev/video1"
This is xawtv-3.94, running on Linux/i686 (2.6.10)
WARNING: Your X-Server has no DGA support.
seteuid(root): Operation not permitted
v4l-conf had some trouble, trying to continue anyway
ioctl: VIDIOC_QUERYCAP(driver="";card="";bus_info="";version=0.0.0;capabilities=0x0 []): Unknown error 515
Warning: Cannot convert string "-*-ledfixed-medium-r-*--39-*-*-*-c-*-*-*" to type FontStruct
station "-noscale" not found

Well, did it work, did you get a picture?
If you did, you might now want to install the driver
permanently. Just proceed to do that...
Press Ctrl+C to quit, Enter to continue --->

Jika xawtv berhasil dijalan dan dapat menampilkan gambar yang dihasilkan oleh kamera seperti contoh dibawah ini, berarti Anda telah berhasil!

xawtv test

Tahap 13
Ini adalah tahap terakhir, driver (quickcam.ko) akan disalin ke (dalam contoh ini) direktori /lib/modules/2.6.10/misc/quickcam.ko dan utility qcset disalin ke /usr/local/bin/qcset. Masukkan root password yang diminta.

Just an extra warning: the driver (quickcam.ko) and
the utility (qcset) will be now copied into system
directories. If you have already other versions,
they will be overwritten. Verify by giving root password.
Password:
=== Entering root mode ===
/usr/bin/install -c -D -m 644 quickcam.ko        /lib/modules/2.6.10/misc/quickcam.ko
/usr/bin/install -c -D -m 755 qcset /usr/local/bin/qcset
/sbin/depmod -a
=== Leaving root mode ===
Hopefully the driver is now installed and can be loaded
with command
        modprobe quickcam
as root. You can put this command into some startup
script to do it always automatically at boot.
The exact location depends on distribution, and this
script is yet too dumb to do this automatically.
Press Ctrl+C to quit, Enter to continue --->

Selesai sudah tahap instalasi driver webcam Anda!

Tunggu dulu! Selesai? Belum! Masih ada satu lagi yang akan kita buat! Kita akan membuat halaman web untuk menampilkan grambar yang dihasilkan oleh kamera agar hasilnya dapat dinikmati oleh rekan kita di Internet/Intranet melalui web browser.

Publish It!
Untuk menampilkan gambar yang dihasilkan oleh webcam di Internet/Intranet diperlukan server web dan server FTP baik secara lokal (di PC kita sendiri) atau di server utama. Untuk mempublish kita akan menggunakan utility webcam yang merupakan bagian dari xawtv. Sebelumnya kita harus membuat file konfigurasi .webcamrc (jangan lupa, ada titik didepannya).

Sebagai user biasa, buat file .webcamrc dengan editor kemudian simpan di home directory Anda, misalnya di /home/oeban. Isi file .webcamrc adalah sebagai berikut:

[grab]
# Device yang digunakan
device = /dev/v4l/video1
# Teks yang muncul pada gambar, dalam contoh ini: Oeban 2005-04-12 11:07:24
text = "Oeban %Y-%m-%d %H:%M:%S"
fg_red = 255
fg_green = 255
fg_blue = 255
width = 320
height = 240
delay = 3
wait = 0
input = camera
norm = pal
rotate = 0
top = 0
left = 0
bottom = -1
right = -1
quality = 75
trigger = 0
once = 0

[ftp]
# alamat ftp server untuk mem-publish gambar Anda
host = 192.168.1.10
# Username dan password user ftp yang digunakan
user = usernameftp
pass = passwordftp
dir  = /home/oeban/public_html/images
file = webcam.jpeg
tmp  = uploading.jpeg
passive = 1
debug = 0
auto = 0
local = 0
ssh = 0

Langkah selanjutnya adalah membuat file html untuk menampilkan gambar yang diupload ke server. Anda bebas untuk memberi nama file HTML, dalam contoh ini nama file tersebut adalah webcam.html dan isinya sebagai berikut:

<html>
<head>
<meta HTTP-EQUIV="Refresh" CONTENT="3; URL=webcam.html">
<title>Webcam Snapshot</title>
</meta>
</head>
<body>
<div align="center">
<img src="images/webcam.jpeg" alt="Webcam Snapshot"/>
</div>
</body>
</html>

Setelah selesai, upload file webcam.html ini ke server atau simpan ke direktori /home/NamaUserAnda/public_html. Pada contoh diatas, file HTML ini akan otomatis me-refresh setiap tiga detik. Kemudian di konsol terminal jalankan (sebagai user biasa):

$ webcam

Jika menghasilkan output seperti dibawah ini maka Anda telah berhasil!

reading config file: /home/adrian/.webcamrc
ioctl: VIDIOC_QUERYCAP(driver="";card="";bus_info="";version=0.0.0;capabilities=0x0 []): Unknown error 515
ftp: lost connection
ftp: connected to 192.168.1.10
video4linux webcam v1.5 - (c) 1998-2002 Gerd Knorr
grabber config:
  size 320x240 [24 bit TrueColor (LE: bgr)]
  input camera, norm pal, jpeg quality 75
  rotate=0, top=0, left=0, bottom=240, right=320
ftp config [ftp]:
  [email protected]:/home/oeban/public_html/images
  uploading.jpeg => webcam.jpeg
ftp: connected to 192.168.1.10
ftp: connected to 192.168.1.10

Jalankan browser Anda dan masukkan alamat berikut ini:

http://localhost/~namauseranda/webcam.html

Jika berhasil maka akan tampil seperti dibawah ini dan gambar yang ditampilkan akan di-refresh setiap tiga detik.

webcam snapshot

Selamat, Anda telah berhasil mempublish hasil snapshot webcam di Internet/Intranet!

Penutup
Dalam tutorial ini gambar tidak ditampilkan secara streaming sehingga tidak terlalu membebani server tetapi hasilnya terlihat patah-patah. Hal ini wajar saja karena, gambar diupload per frame tetapi direfresh dihalaman web per tiga detik.

Pemanfaatan webcam ini sangat banyak sekali, silahkan berkreasi sesuai kebutuhan. Jika Anda telah berhasil mengembangkan pemanfaatan webcam ini, publikasikanlah agar dapat dinikmati pula oleh rekan-rekan yang lain.

Mohon maaf jika terdapat banyak kekurangan disana-sini. Harapan saya, semoga tulisan ini dapat bermanfaat bagi rekan-rekan yang lain.

Catatan:
Tutorial ini telah dimuat di Majalah InfoLinux edisi Juli 2005, halaman 66.

5 thoughts on “Instalasi Webcam di GNU/LINUX

    1. menurut saya sih sama aja prosedurnya yaitu, kenali dulu hardwarenya kemudian cari dan install driver yang sesuai. biasanya ada petunjuk instalasinya di paket drivernya atau di websitenya.

      salam…

  1. You’re so awesome! I don’t suppose I’ve read through something like this
    before. So wonderful to discover somebody with a few unique thoughts
    on this issue. Really.. thanks for starting this up.
    This website is something that is needed on the internet, someone with a bit of originality!

Leave a Reply

Your email address will not be published. Required fields are marked *