From owner-FreeBSD-users-jp@jp.FreeBSD.org Wed Dec 14 21:22:47 2005
Received: (from daemon@localhost)
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) id jBECMlw56463;
	Wed, 14 Dec 2005 21:22:47 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from stars.on-sky.net (sv.tsnr.com [203.181.83.169])
	by castle.jp.FreeBSD.org (8.11.6p2+3.4W/8.11.3) with ESMTP/inet id jBECMl956458
	for <FreeBSD-users-jp@jp.FreeBSD.org>; Wed, 14 Dec 2005 21:22:47 +0900 (JST)
	(envelope-from sakamoto@tsnr.com)
Received: from tsnr.com (tci02.tsnr.com [210.159.194.170])
	(authenticated bits=0)
	by stars.on-sky.net (8.13.1/8.13.1) with ESMTP id jBECMd3r018602;
	Wed, 14 Dec 2005 21:22:40 +0900 (JST)
	(envelope-from sakamoto@tsnr.com)
From: Hideki SAKAMOTO <sakamoto@tsnr.com>
To: FreeBSD-users-jp@jp.FreeBSD.org
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Boundary-RnYJsmAUQhY8NKPugh1ub"
X-Mailer: HidemaruMail 4.51 (WinNT,501)
In-Reply-To: <BAY103-F1749A3149600E2A89455F3D5390@phx.gbl>
References: <BAY103-F1749A3149600E2A89455F3D5390@phx.gbl>
Message-Id: <3CC600A9136503sakamoto@tsnr.com>
Reply-To: FreeBSD-users-jp@jp.FreeBSD.org
Precedence: list
Date: Wed, 14 Dec 2005 21:22:40 +0900
X-Sequence: FreeBSD-users-jp 88822
Subject: [FreeBSD-users-jp 88822] Re: SFTP =?ISO-2022-JP?B?GyRCJE4bKEI=?=
 chroot =?ISO-2022-JP?B?GyRCJEskRCQkJEYbKEI=?= 
Sender: owner-FreeBSD-users-jp@jp.FreeBSD.org
X-Originator: sakamoto@tsnr.com
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+051211

--Boundary-RnYJsmAUQhY8NKPugh1ub
Content-Type: text/plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Content-Description: Mail message body

$B:d85$G$9!#(B

>FreeBSD5.4$B$r;H$C$F$$$^$9!#(B
>SFTP$B$G8x3+$9$k%5!<%P!<$r9M$($F$$$k$N$G$9$,!"(B
>$B%]!<%D$N(Bopenssh-portable4.0.0.1$B$r%a%$%/$r$9$k$H$-$K!"(BWITH_OPENSSH_CHROOT$B$rIU(B
>$B$1$F!"%a%$%/$7$^$9!#(B
>$B$3$&$9$k$3$H$G!"(Bchroot$B$O$G$-$k$N$G$9$,!"$3$N$H$-$N(Bchroot$B%G%#%l%/%H%j$G$O!"(B
>/usr/local/libexec/sftp-server
>$B$,%U%!%$%k$H$7$F8+$($F$7$^$&$N$G$9$,!"$3$l$r8+$l$J$$$h$&$K$9$k$+!"0BA4$KJ]8n(B
>$B$9$kJ}K!$O$J$$$G$7$g$&$+!#(B

$BJL2r$H$J$j$^$9$,!"(B/usr/src/libexec/ftpd/ftpd.c$B$+$i(Bchroot$B$N=hM}$r%Q%/%C$F(B
$B$-$F!"(Bsftp-server$B$K0\?"$7$F$_$^$7$?!#Hf3S$7$F$b$i$&$HJ,$+$j$^$9$,!";d$,(B
$B?7$?$K=q$$$?%3!<%I$O!"(B

uid = getuid();
if ((pw = getpwuid(uid)) == NULL)
	fatal("Cannot get user info");
residue = NULL;

$B$N(B4$B9T$N$_$G$9!#(B

1. cd /usr/src
2. patch < sftp-patch
3. /etc/make.conf$B$K!"(BSFTP_CHROOT=yes $B$HDI2C(B
4. cd /usr/src/secure/libexec/sftp-server
5. make && make install

$B$G!"(Bchroot$BHG(Bsftp-server$B$,%$%s%9%H!<%k$5$l$^$9!#(BMakefile$B0J30$N%Q%C%A$O(B
openssh-portable$B$K$b$"$?$k$H;W$$$^$9!#$=$N>l9g$O!"(BWITH_OPENSSH_CHROOT$B%*(B
$B%W%7%g%s$OL58z$K$7$?$[$&$,NI$$$G$7$g$&!#(B

$B%a%j%C%H$H$7$F!"(Bchroot$B8e$N%G%#%l%/%H%j%D%j!<0J2<$K%P%$%J%j$d%i%$%V%i%j$r(B
$B=`Hw$9$kI,MW$,$J$$0lJ}!"%G%a%j%C%H$H$7$F!"(Bsftp-server$B$K(BSUID root$B$9$kI,MW(B
$B$,$"$j$^$9!#<j85$N4D6-$G$A$g$m$C$H;n$7$F$_$?$@$1$J$N$G!"<+8J@UG$$G$*;H$$(B
$B$/$@$5$$!#(B

P.S.
$B$$$A$*$&(Bsend-pr$B:Q$_$G$9!#(B

-- 
$B:d85(B $B1Q5*(B
 E-mail: sakamoto@tsnr.com
--Boundary-RnYJsmAUQhY8NKPugh1ub
Content-Type: application/octet-stream; name="sftp-patch"
Content-Disposition: attachment; filename="sftp-patch"
Content-Transfer-Encoding: base64

KioqIHNlY3VyZS9saWJleGVjL3NmdHAtc2VydmVyL01ha2VmaWxlLG9sZAlXZWQgRGVjIDE0
IDEwOjIxOjUzIDIwMDUKLS0tIHNlY3VyZS9saWJleGVjL3NmdHAtc2VydmVyL01ha2VmaWxl
CVdlZCBEZWMgMTQgMTA6MTY6MDEgMjAwNQoqKioqKioqKioqKioqKioKKioqIDgsMTMgKioq
KgotLS0gOCwxOSAtLS0tCiAgRFBBREQ9CSR7TElCU1NIfSAke0xJQkNSWVBUfSAke0xJQkNS
WVBUT30gJHtMSUJafQogIExEQUREPQktbHNzaCAtbGNyeXB0IC1sY3J5cHRvIC1segogIAor
IC5pZiBkZWZpbmVkKFNGVFBfQ0hST09UKQorIENGTEFHUys9LURTRlRQQ0hST09UCisgQklO
T1dOPSByb290CisgQklOTU9ERT00NTU1CisgLmVuZGlmCisgCiAgLmluY2x1ZGUgPGJzZC5w
cm9nLm1rPgogIAogIC5QQVRIOgkke1NTSERJUn0KKioqIGNyeXB0by9vcGVuc3NoL3BhdGhu
YW1lcy5oLG9sZAlXZWQgRGVjIDE0IDA5OjI1OjEwIDIwMDUKLS0tIGNyeXB0by9vcGVuc3No
L3BhdGhuYW1lcy5oCVdlZCBEZWMgMTQgMDk6Mzc6MjMgMjAwNQoqKioqKioqKioqKioqKioK
KioqIDQzLDQ4ICoqKioKLS0tIDQzLDUwIC0tLS0KICAvKiBCYWNrd2FyZHMgY29tcGF0aWJp
bGl0eSAqLwogICNkZWZpbmUgX1BBVEhfREhfUFJJTUVTCQkJU1NIRElSICIvcHJpbWVzIgog
IAorICNkZWZpbmUgX1BBVEhfU0ZUUENIUk9PVF9GSUxFCQlTU0hESVIgIi9zZnRwY2hyb290
IgorIAogICNpZm5kZWYgX1BBVEhfU1NIX1BST0dSQU0KICAjZGVmaW5lIF9QQVRIX1NTSF9Q
Uk9HUkFNCQkiL3Vzci9iaW4vc3NoIgogICNlbmRpZgoqKiogY3J5cHRvL29wZW5zc2gvc2Z0
cC1zZXJ2ZXIuYyxvbGQJV2VkIERlYyAxNCAwOToyNDo1OSAyMDA1Ci0tLSBjcnlwdG8vb3Bl
bnNzaC9zZnRwLXNlcnZlci5jCVdlZCBEZWMgMTQgMTc6NDc6MzYgMjAwNQoqKioqKioqKioq
KioqKioKKioqIDIxLDI2ICoqKioKLS0tIDIxLDI5IC0tLS0KICAjaW5jbHVkZSAiZ2V0cHV0
LmgiCiAgI2luY2x1ZGUgImxvZy5oIgogICNpbmNsdWRlICJ4bWFsbG9jLmgiCisgI2lmZGVm
IFNGVFBDSFJPT1QKKyAjaW5jbHVkZSAicGF0aG5hbWVzLmgiCisgI2VuZGlmCiAgCiAgI2lu
Y2x1ZGUgInNmdHAuaCIKICAjaW5jbHVkZSAic2Z0cC1jb21tb24uaCIKKioqKioqKioqKioq
KioqCioqKiAxMDI5LDEwNDAgKioqKgotLS0gMTAzMiwxMTM2IC0tLS0KICAJCWJ1ZmZlcl9j
b25zdW1lKCZpcXVldWUsIG1zZ19sZW4gLSBjb25zdW1lZCk7CiAgfQogIAorIC8qCisgICog
Q2hlY2sgaWYgYSB1c2VyIGlzIGluIHRoZSBmaWxlICJmbmFtZSIsCisgICogcmV0dXJuIGEg
cG9pbnRlciB0byBhIG1hbGxvYydkIHN0cmluZyB3aXRoIHRoZSByZXN0CisgICogb2YgdGhl
IG1hdGNoaW5nIGxpbmUgaW4gInJlc2lkdWUiIGlmIG5vdCBOVUxMLgorICAqLworICNpZmRl
ZiBTRlRQQ0hST09UCisgc3RhdGljIGludAorIGNoZWNrdXNlcihjaGFyICpmbmFtZSwgY2hh
ciAqbmFtZSwgZ2lkX3QgcHdfZ2lkLCBjaGFyICoqcmVzaWR1ZSkKKyB7CisgCUZJTEUgKmZk
OworIAlpbnQgZm91bmQgPSAwOworIAlzaXplX3QgbGVuOworIAljaGFyICpsaW5lLCAqbXAs
ICpwOworIAorIAlpZiAoKGZkID0gZm9wZW4oZm5hbWUsICJyIikpICE9IE5VTEwpIHsKKyAJ
CXdoaWxlICghZm91bmQgJiYgKGxpbmUgPSBmZ2V0bG4oZmQsICZsZW4pKSAhPSBOVUxMKSB7
CisgCQkJLyogc2tpcCBjb21tZW50cyAqLworIAkJCWlmIChsaW5lWzBdID09ICcjJykKKyAJ
CQkJY29udGludWU7CisgCQkJaWYgKGxpbmVbbGVuIC0gMV0gPT0gJ1xuJykgeworIAkJCQls
aW5lW2xlbiAtIDFdID0gJ1wwJzsKKyAJCQkJbXAgPSBOVUxMOworIAkJCX0gZWxzZSB7Cisg
CQkJCWlmICgobXAgPSBtYWxsb2MobGVuICsgMSkpID09IE5VTEwpCisgCQkJCQlmYXRhbCgi
UmFuIG91dCBvZiBtZW1vcnkuIik7CisgCQkJCW1lbWNweShtcCwgbGluZSwgbGVuKTsKKyAJ
CQkJbXBbbGVuXSA9ICdcMCc7CisgCQkJCWxpbmUgPSBtcDsKKyAJCQl9CisgCQkJLyogYXZv
aWQgcG9zc2libGUgbGVhZGluZyBhbmQgdHJhaWxpbmcgd2hpdGVzcGFjZSAqLworIAkJCXAg
PSBzdHJ0b2sobGluZSwgIiBcdCIpOworIAkJCS8qIHNraXAgZW1wdHkgbGluZXMgKi8KKyAJ
CQlpZiAocCA9PSBOVUxMKQorIAkJCQlnb3RvIG5leHRsaW5lOworIAkJCS8qCisgCQkJICog
aWYgZmlyc3QgY2hyIGlzICdAJywgY2hlY2sgZ3JvdXAgbWVtYmVyc2hpcAorIAkJCSAqLwor
IAkJCWlmIChwWzBdID09ICdAJykgeworIAkJCQlpbnQgaSA9IDA7CisgCQkJCXN0cnVjdCBn
cm91cCAqZ3JwOworIAorIAkJCQlpZiAocFsxXSA9PSAnXDAnKSAvKiBzaW5nbGUgQCBtYXRj
aGVzIGFueW9uZSAqLworIAkJCQkJZm91bmQgPSAxOworIAkJCQllbHNlIHsKKyAJCQkJCWlm
ICgoZ3JwID0gZ2V0Z3JuYW0ocCsxKSkgPT0gTlVMTCkKKyAJCQkJCQlnb3RvIG5leHRsaW5l
OworIAkJCQkJLyoKKyAJCQkJCSAqIENoZWNrIHVzZXIncyBkZWZhdWx0IGdyb3VwCisgCQkJ
CQkgKi8KKyAJCQkJCWlmIChncnAtPmdyX2dpZCA9PSBwd19naWQpCisgCQkJCQkJZm91bmQg
PSAxOworIAkJCQkJLyoKKyAJCQkJCSAqIENoZWNrIHN1cHBsZW1lbnRhcnkgZ3JvdXBzCisg
CQkJCQkgKi8KKyAJCQkJCXdoaWxlICghZm91bmQgJiYgZ3JwLT5ncl9tZW1baV0pCisgCQkJ
CQkJZm91bmQgPSBzdHJjbXAobmFtZSwKKyAJCQkJCQkJZ3JwLT5ncl9tZW1baSsrXSkKKyAJ
CQkJCQkJPT0gMDsKKyAJCQkJfQorIAkJCX0KKyAJCQkvKgorIAkJCSAqIE90aGVyd2lzZSwg
anVzdCBjaGVjayBmb3IgdXNlcm5hbWUgbWF0Y2gKKyAJCQkgKi8KKyAJCQllbHNlCisgCQkJ
CWZvdW5kID0gc3RyY21wKHAsIG5hbWUpID09IDA7CisgCQkJLyoKKyAJCQkgKiBTYXZlIHRo
ZSByZXN0IG9mIGxpbmUgdG8gInJlc2lkdWUiIGlmIG1hdGNoZWQKKyAJCQkgKi8KKyAJCQlp
ZiAoZm91bmQgJiYgcmVzaWR1ZSkgeworIAkJCQlpZiAoKHAgPSBzdHJ0b2soTlVMTCwgIiIp
KSAhPSBOVUxMKQorIAkJCQkJcCArPSBzdHJzcG4ocCwgIiBcdCIpOworIAkJCQlpZiAocCAm
JiAqcCkgeworIAkJCQkJaWYgKCgqcmVzaWR1ZSA9IHN0cmR1cChwKSkgPT0gTlVMTCkKKyAJ
CQkJCQlmYXRhbCgiUmFuIG91dCBvZiBtZW1vcnkuIik7CisgCQkJCX0gZWxzZQorIAkJCQkJ
KnJlc2lkdWUgPSBOVUxMOworIAkJCX0KKyBuZXh0bGluZToKKyAJCQlpZiAobXApCisgCQkJ
CWZyZWUobXApOworIAkJfQorIAkJKHZvaWQpIGZjbG9zZShmZCk7CisgCX0KKyAJcmV0dXJu
IChmb3VuZCk7CisgfQorICNlbmRpZgkvKiBTRlRQQ0hST09UICovCisgCiAgaW50CiAgbWFp
bihpbnQgYWMsIGNoYXIgKiphdikKICB7CiAgCWZkX3NldCAqcnNldCwgKndzZXQ7CiAgCWlu
dCBpbiwgb3V0LCBtYXg7CiAgCXNzaXplX3QgbGVuLCBvbGVuLCBzZXRfc2l6ZTsKKyAjaWZk
ZWYgU0ZUUENIUk9PVAorIAlpbnQgZG9jaHJvb3Q7CisgCWNoYXIgKmNocm9vdGRpciwgKmhv
bWVkaXIsICpyZXNpZHVlOworIAl1aWRfdCB1aWQ7CisgCXN0cnVjdCBwYXNzd2QgKnB3Owor
ICNlbmRpZgogIAogIAkvKiBYWFggc2hvdWxkIHVzZSBnZXRvcHQgKi8KICAKKioqKioqKioq
KioqKioqCioqKiAxMDY1LDEwNzAgKioqKgotLS0gMTE2MSwxMjQzIC0tLS0KICAJc2V0X3Np
emUgPSBob3dtYW55KG1heCArIDEsIE5GREJJVFMpICogc2l6ZW9mKGZkX21hc2spOwogIAly
c2V0ID0gKGZkX3NldCAqKXhtYWxsb2Moc2V0X3NpemUpOwogIAl3c2V0ID0gKGZkX3NldCAq
KXhtYWxsb2Moc2V0X3NpemUpOworIAorICNpZmRlZglTRlRQQ0hST09UCisgCXVpZCA9IGdl
dHVpZCgpOworIAlpZiAoKHB3ID0gZ2V0cHd1aWQodWlkKSkgPT0gTlVMTCkKKyAJCWZhdGFs
KCJDYW5ub3QgZ2V0IHVzZXIgaW5mbyIpOworIAlyZXNpZHVlID0gTlVMTDsKKyAJZG9jaHJv
b3QgPQorIAkJY2hlY2t1c2VyKF9QQVRIX1NGVFBDSFJPT1RfRklMRSwgcHctPnB3X25hbWUs
IHB3LT5wd19naWQsICZyZXNpZHVlKTsKKyAJY2hyb290ZGlyID0gTlVMTDsKKyAJaG9tZWRp
ciA9IE5VTEw7CisgCS8qCisgCSAqIEZvciBhIGNocm9vdGVkIGxvY2FsIHVzZXIsCisgCSAq
IGEpIHNlZSB3aGV0aGVyIGZ0cGNocm9vdCg1KSBzcGVjaWZpZXMgYSBjaHJvb3QgZGlyZWN0
b3J5LAorIAkgKiBiKSBleHRyYWN0IHRoZSBkaXJlY3RvcnkgcGF0aG5hbWUgZnJvbSB0aGUg
bGluZSwKKyAJICogYykgZXhwYW5kIGl0IHRvIHRoZSBhYnNvbHV0ZSBwYXRobmFtZSBpZiBu
ZWNlc3NhcnkuCisgCSAqLworIAlpZiAoZG9jaHJvb3QgJiYgcmVzaWR1ZSAmJgorIAkgICAg
KGNocm9vdGRpciA9IHN0cnRvayhyZXNpZHVlLCAiIFx0IikpICE9IE5VTEwpIHsKKyAJCWlm
IChjaHJvb3RkaXJbMF0gIT0gJy8nKQorIAkJCWFzcHJpbnRmKCZjaHJvb3RkaXIsICIlcy8l
cyIsIHB3LT5wd19kaXIsIGNocm9vdGRpcik7CisgCQllbHNlCisgCQkJY2hyb290ZGlyID0g
c3RyZHVwKGNocm9vdGRpcik7IC8qIG1ha2UgaXQgcGVybWFuZW50ICovCisgCQlpZiAoY2hy
b290ZGlyID09IE5VTEwpCisgCQkJZmF0YWwoIlJhbiBvdXQgb2YgbWVtb3J5LiIpOworIAl9
CisgCWlmIChkb2Nocm9vdCkgeworIAkJLyoKKyAJCSAqIElmIG5vIGNocm9vdCBkaXJlY3Rv
cnkgc2V0IHlldCwgdXNlIHRoZSBsb2dpbiBkaXJlY3RvcnkuCisgCQkgKiBDb3B5IGl0IHNv
IGl0IGNhbiBiZSBtb2RpZmllZCB3aGlsZSBwdy0+cHdfZGlyIHN0YXlzIGludGFjdC4KKyAJ
CSAqLworIAkJaWYgKGNocm9vdGRpciA9PSBOVUxMICYmCisgCQkgICAgKGNocm9vdGRpciA9
IHN0cmR1cChwdy0+cHdfZGlyKSkgPT0gTlVMTCkKKyAJCQlmYXRhbCgiUmFuIG91dCBvZiBt
ZW1vcnkuIik7CisgCQkvKgorIAkJICogQ2hlY2sgZm9yIHRoZSAiL2Nocm9vdC8uL2hvbWUi
IHN5bnRheCwKKyAJCSAqIHNlcGFyYXRlIHRoZSBjaHJvb3QgYW5kIGhvbWUgZGlyZWN0b3J5
IHBhdGhuYW1lcy4KKyAJCSAqLworIAkJaWYgKChob21lZGlyID0gc3Ryc3RyKGNocm9vdGRp
ciwgIi8uLyIpKSAhPSBOVUxMKSB7CisgCQkJKihob21lZGlyKyspID0gJ1wwJzsgICAgLyog
d2lwZSAnLycgKi8KKyAJCQlob21lZGlyKys7CSAgICAgIC8qIHNraXAgJy4nICovCisgCQl9
IGVsc2UgeworIAkJCS8qCisgCQkJICogV2UgTVVTVCBkbyBhIGNoZGlyKCkgYWZ0ZXIgdGhl
IGNocm9vdC4gT3RoZXJ3aXNlCisgCQkJICogdGhlIG9sZCBjdXJyZW50IGRpcmVjdG9yeSB3
aWxsIGJlIGFjY2Vzc2libGUgYXMgIi4iCisgCQkJICogb3V0c2lkZSB0aGUgbmV3IHJvb3Qh
CisgCQkJICovCisgCQkJaG9tZWRpciA9ICIvIjsKKyAJCX0KKyAJCS8qCisgCQkgKiBGaW5h
bGx5LCBkbyBjaHJvb3QoKQorIAkJICovCisgCQlpZiAoY2hyb290KGNocm9vdGRpcikgPCAw
KSB7CisgCQkJZmF0YWwoIkNhbid0IGNoYW5nZSByb290LiIpOworIAkJfQorIAl9IGVsc2Ug
IC8qIHJlYWwgdXNlciB3L28gY2hyb290ICovCisgCQlob21lZGlyID0gcHctPnB3X2RpcjsK
KyAJLyoKKyAJICogU2V0IGV1aWQgKmJlZm9yZSogZG9pbmcgY2hkaXIoKSBzbworIAkgKiBh
KSB0aGUgdXNlciB3b24ndCBiZSBjYXJyaWVkIHRvIGEgZGlyZWN0b3J5IHRoYXQgaGUgY291
bGRuJ3QgcmVhY2gKKyAJICogICAgb24gaGlzIG93biBkdWUgdG8gbm8gcGVybWlzc2lvbiB0
byB1cHBlciBwYXRoIGNvbXBvbmVudHMsCisgCSAqIGIpIE5GUyBtb3VudGVkIGhvbWVkaXJz
IHcvcmVzdHJpY3RpdmUgcGVybWlzc2lvbnMgd2lsbCBiZSBhY2Nlc3NpYmxlCisgCSAqICAg
ICh1aWQgMCBoYXMgbm8gcm9vdCBwb3dlciBvdmVyIE5GUyBpZiBub3QgbWFwcGVkIGV4cGxp
Y2l0bHkuKQorIAkgKi8KKyAJaWYgKHNldGV1aWQocHctPnB3X3VpZCkgPCAwKSB7CisgCQlm
YXRhbCgiQ2FuJ3Qgc2V0IHVpZC4iKTsKKyAJfQorIAlpZiAoY2hkaXIoaG9tZWRpcikgPCAw
KSB7CisgCQlpZiAoZG9jaHJvb3QpIHsKKyAJCQlmYXRhbCgiQ2FuJ3QgY2hhbmdlIHRvIGJh
c2UgZGlyZWN0b3J5LiIpOworIAkJfSBlbHNlIHsKKyAJCQlpZiAoY2hkaXIoIi8iKSA8IDAp
IHsKKyAJCQkJZmF0YWwoIlJvb3QgaXMgaW5hY2Nlc3NpYmxlLiIpOworIAkJCX0KKyAJCQlm
YXRhbCgiTm8gZGlyZWN0b3J5ISBMb2dnaW5nIGluIHdpdGggaG9tZT0vLiIpOworIAkJfQor
IAl9CisgI2VuZGlmCS8qIFNGVFBDSFJPT1QgKi8KICAKICAJZm9yICg7OykgewogIAkJbWVt
c2V0KHJzZXQsIDAsIHNldF9zaXplKTsK

--Boundary-RnYJsmAUQhY8NKPugh1ub--
