1
0
mirror of https://bitbucket.org/svk28/rac-gui synced 2024-12-04 18:46:52 +00:00

Сделаны формы добавления для всех элементов профиля безопасности

This commit is contained in:
Sergey Kalinin 2018-07-05 08:34:42 +03:00
parent db453a537b
commit 07dd503666
3 changed files with 422 additions and 0 deletions

1
README
View File

@ -11,3 +11,4 @@
Иконки взяты с сайта https://www.iconsdb.com/royal-blue-icons/

View File

@ -1279,6 +1279,287 @@ proc Add::profile {tree host values} {
}
return $frm
}
proc Add::directory {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "Виртуальный каталог" directory_grey_64]
label $frm.lbl_alias -text "Логический URL"
entry $frm.ent_alias
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_physicalPath -justify left -anchor nw -text "Физический URL"
entry $frm.ent_physicalPath
label $frm.lbl_allowedRead -justify left -anchor nw -text "Разрешено чтение данных"
checkbutton $frm.check_allowedRead -variable allowedRead -onvalue yes -offvalue no
label $frm.lbl_allowedWrite -justify left -anchor nw -text "Разрешена запись данных"
checkbutton $frm.check_allowedWrite -variable allowedWrite -onvalue yes -offvalue no
grid $frm.lbl_alias -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_alias -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_physicalPath -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_physicalPath -row 2 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_allowedRead -row 3 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.check_allowedRead -row 3 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_allowedWrite -row 4 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.check_allowedWrite -row 4 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl directory update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--alias=[.add.frm.ent_alias get] \
--descr=[.add.frm.ent_descr get] \
--physicalPath=[.add.frm.ent_descr get] \
--allowedRead=$allowedRead \
--allowedWrite=$allowedWrite \
$host"
Run::directory $tree $host $profile_name
destroy .add
}
return $frm
}
proc Add::addin {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "Компонента" addin_grey_64]
label $frm.lbl_name -text "Имя"
entry $frm.ent_name
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_hash -justify left -anchor nw -text "Контрольная сумма"
entry $frm.ent_hash
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_hash -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_hash -row 2 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl addin update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--name=[.add.frm.ent_name get] \
--descr=[.add.frm.ent_descr get] \
--hash=[.add.frm.ent_hash get] \
$host"
Run::addin $tree $host $profile_name
destroy .add
}
return $frm
}
proc Add::module {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "Внешний отчёт или обработка" module_grey_64]
label $frm.lbl_name -text "Имя"
entry $frm.ent_name
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_hash -justify left -anchor nw -text "Контрольная сумма"
entry $frm.ent_hash
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_hash -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_hash -row 2 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl module update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--name=[.add.frm.ent_name get] \
--descr=[.add.frm.ent_descr get] \
--hash=[.add.frm.ent_hash get] \
$host"
Run::module $tree $host $profile_name
destroy .add
}
return $frm
}
proc Add::com {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "COM-класс" com_grey_64]
label $frm.lbl_name -text "Имя"
entry $frm.ent_name
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_fileName -justify left -anchor nw -text "Файл (моникер)"
entry $frm.ent_fileName
label $frm.lbl_id -justify left -anchor nw -text "Идентификатор COM-класса"
entry $frm.ent_id
label $frm.lbl_host -justify left -anchor nw -text "Компьютер COM-объекта"
entry $frm.ent_host
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_fileName -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_fileName -row 2 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_id -row 3 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_id -row 3 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_host -row 4 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_host -row 4 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl com update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--name=[.add.frm.ent_name get] \
--descr=[.add.frm.ent_descr get] \
--fileName=[.add.frm.ent_fileName get] \
--id=[.add.frm.ent_id get] \
--host=[.add.frm.ent_host get] \
$host"
Run::com $tree $host $profile_name
destroy .add
}
return $frm
}
proc Add::app {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "Разрешённое приложения" app_grey_64]
label $frm.lbl_name -text "Имя приложения"
entry $frm.ent_name
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_wild -justify left -anchor nw -text "Шаблон строки запуска"
entry $frm.ent_wild
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_wild -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_wild -row 2 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl app update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--name=[.add.frm.ent_name get] \
--descr=[.add.frm.ent_descr get] \
--wild=[.add.frm.ent_wild get] \
$host"
Run::app $tree $host $profile_name
destroy .add
}
return $frm
}
proc Add::inet {tree host values} {
global default active_cluster profile_name agent_user agent_pwd cluster_user cluster_pwd auth
global
if {$cluster_user ne "" && $cluster_pwd ne ""} {
set auth "--cluster-user=$cluster_user --cluster-pwd=$cluster_pwd"
} else {
set auth ""
}
set var_list {allowedRead allowedWrite}
foreach v $var_list {set $v "no"; puts $v}
unset var_list
set frm [AddToplevel "Ресурс интернет" link_grey_64]
label $frm.lbl_name -text "Имя ресурса"
entry $frm.ent_name
label $frm.lbl_descr -text "Описание"
entry $frm.ent_descr
label $frm.lbl_protocol -justify left -anchor nw -text "Протокол"
entry $frm.ent_protocol
label $frm.lbl_url -justify left -anchor nw -text "Адрес (URL)"
entry $frm.url
label $frm.lbl_port -justify left -anchor nw -text "Порт"
entry $frm.ent_port
$frm.ent_port insert end 0
grid $frm.lbl_name -row 0 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_name -row 0 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_descr -row 1 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_descr -row 1 -column 1 -sticky nsew -padx 5 -pady 5
grid $frm.lbl_protocol -row 2 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_protocol -row 2 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_url -row 3 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_url -row 3 -column 1 -sticky nw -padx 5 -pady 5
grid $frm.lbl_port -row 4 -column 0 -sticky nw -padx 5 -pady 5
grid $frm.ent_port -row 4 -column 1 -sticky nw -padx 5 -pady 5
.add.frm_btn.btn_ok configure -command {
RunCommand "profile acl inet update \
--cluster=$active_cluster $auth \
--name=$profile_name \
--name=[.add.frm.ent_name get] \
--descr=[.add.frm.ent_descr get] \
--protocol=[.add.frm.ent_protocol get] \
--url=[.add.frm.ent_url get] \
--port=[.add.frm.ent_port get] \
$host"
Run::inet $tree $host $profile_name
destroy .add
}
return $frm
}
proc Edit {} {
global active_cluster host
@ -1943,3 +2224,5 @@ proc Del::inet {tree host profile_name} {
Del::acl $host inet [GetWorkTreeItems "name"] $profile_name
}

View File

@ -483,3 +483,141 @@ image create photo security_grey_64 -data {
Qfqtz0oFeuVoeTXtvWETYnlvaOSGRtHi6tZ8Rp/qzHCDtKiXzfLy2rTRTWdxg84xclzgRxm2Qayy
31kmTjOtrOVNVrAUyPOYB9xkhDGZt0X7D6zc881zDmwYAAAAAElFTkSuQmCC
}
image create photo directory_grey_64 -data {
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA
CxMAAAsTAQCanBgAAAAHdElNRQfiBwUEHwo4IHNXAAAC7UlEQVRo3u2YTUhUURTHf955DiIiLkRE
JFy0CJGoYFpEuLQY2iSRH+FHuOmuW0a0bOEqWlwoSETJshCSqYWJRolJvF0FliISJC0GEROZ7PFo
0fjmzdebHN59r8Wc1XlfnN+959z/O/dCxSpWsZCtKuPKRtqpI0oUgYFAYGNjYWORYo91taUNQHZw
lziixNtL3FZv/AWIAMh+ErS7Z6OIHWMwVm0u+gwg4zyj+p9nrDP223znYwpkPV9oPtI3FqfVJ78A
BMNHDA8GN/2bAUFPGV9dlMIvAIP6Mr5q5oRMcoCFje3ctV1vOL6ySgGUZ5+zQh1i2K46OVSXbzzk
gdovXoQf6dAud5v0qZViNRCEtfFang8TAOqYkvVhAkArNwoDBIdwLWyAdlnj3zIsT3NeyH1SpNjn
Owt/10WQANDlvpAzjKgdQXjWzUtphAkA5xgOFwB6StdAkkessYeN5dZ4rCMUX2a9GUCUBu6lV1+b
UaIMXzGkkn4PW3Y6i3/XKNGEXlYHGiZ+wPGWvWvglo7wspYrzsWUF8AqS1oK7xINaW+DFS+AMWVr
ARhyvMfKFh6976SO6LLFpYfjXj+jeR0bMaDXWXfLat0LYEyT9GQSMOHVkGwzqyUBZziZdlNMewFM
q5Tm8c+qbS+AcS3jj9KbG6EwwFc+aBl/nKa0t8WcF8BEAApgFQewNSlAE/H8FBcCeKs2tYy/n2ja
MzPbexFUAWYlYNzdluc2FnvMaFKAU44CPPHaGSXUrubxJ9wtjghIAWpcCjCWvTPKTsEPFjT1AHkK
UBjguZYWDEYcbzL7zESQHXBCSwLiTg9g5/5lBe6edwNTQ/irPHVqbUmt5vbsi64OZZsueZA+8bEc
Zm9ZznQUGc8ADARRWunDfTYymn9G1MIatQHtgybVQO6tiPkzluJCIOHn6Dfz9lMRMN/HGjmrObjN
fa6rX/kPDo/rBxl1Vqr/Ns8dtVz4UZVLq7o5riH4Dgm1QcUqVrH/1/4AqpXJGRqvP3oAAAAASUVO
RK5CYII=
}
image create photo addin_grey_64 -data {
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA
CxMAAAsTAQCanBgAAAAHdElNRQfiBwUEJQdjONGTAAADtUlEQVRo3uWYXWgURxzAfze3HEGChEJt
K+pTEUGQ0LiW+IWaC0eQQoUiFIrUx2kIpVYQH0peBFHBB9EMPohvIvRDihqrldYH+wFZilxF2lIk
FBsOEUzDIUdcNj7kPG93b+9mZza5hw7ccbu3//n9bj7+Mzc5jIo8xHv0UUDgACAQjS8DghYhfuPd
x2eeKo+4qO7mjPAreEoB++IzkjeJ8567zyhlICB4M28W6f3iOuzMQCGXN430fnR72Wot8F/ePNb7
3n2Ndy0FZvM20e4tXsftooC34H5nqWAnkIGCrUBd4Q02d00AvAX3Bm8x0DUB8BbcSQZYbyLgxNJs
L9vpZy0FCghEI9s3J9CAn9RE6F6RPWbyocrlBo7wAb0do8p8GoorcoUVlgKywDiHtZaY+wyrJyH8
t6b4hoBcydcUtSLuM6QeZ4WvC8gCVzT7MIrfZYenvo04boy/aoeHHMh+pmIjXRffazmDpx1gPIaf
5yE+Pj5B/eUzy2jmeCAnV/FvRGCSMfWww6ZsJ9ezwDPtUIzgv+JD5S8THhCRlazKaEf89mwa/6VA
X+j6TnM/t8Rv5TorITuBntB1rQP+nWzxINLs7+UGbkRaLAMBRxvfx1VWQdcEOMrbNrs/e4H3LfAP
2MhEawGh2QE9rLPAD6kZxlopCO1KnBRtFcdXQAWtFPS7oNZpiiaUPxhWlcWPrRS0W0D5/GaEH1Iz
TbXEFESKys7b4hsKZ40E1CUu2+IXFdQYp01aAA5y2xZfl/icYwYCqsY+7mqO/N3NeBk7zFBfMIrP
TLoWQFXZy69am7dKE/4jzrWoa4IBDoq040rNUeqgUI7hL7ae7Kqs/hLpZ5aaY6SNwr3I1vVAEt5k
EL5UmKWUMBa8yL+mA1xon+qMBOqtcC12+4e0eGMBUFX2cYRXuAqfUVKz6fAYLzCLyfmkPMNm1hAw
zT01H1o99+vgrQTqmSEpL5T06hYsVRG6jwX/ewF/iQTCIyBY/hZAV8Bfli6Y77ZALfmx2rJMy2fJ
AtXQ9RbZkwVPOmwK3agkC/weul7D4Ux+8SeRg9s/kydLdJc3LqucVRYjQwo+5lRsnUw6IwI5FTts
LzNpMT2LbIltUDeqIDldnODLyN1NkR60LcdV0G6yfJPcQJmUn7mU/GUOQK5mitVLhH/MYLtDPwGg
ZhhOnihW5Ql725851hOPesCgxn4/bfEYVJ5mwlTT7EDyT2bwR4yyTf3d6bFcLIPtYoR++ujBwUmV
mhdPl2vMUeYmt/VyyQtF7jBPKF0n5wAAAABJRU5ErkJggg==
}
image create photo link_grey_64 -data {
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA
CxMAAAsTAQCanBgAAAAHdElNRQfiBwUEJAmdm83VAAAD70lEQVRo3sXZT2hURxzA8e9O1hxCtFIW
D7YHD7IEqTGmpiyhNkSl1g1Cqo1Roiw9Dj0VWii9BLGlBwseKs7RvylahUqt1UZBbJolSBrSkEJY
RDxJkXSRsCyyyNLD2yRvd9/bNzPvuXnH+bOfH7NvZ36/2RjWj+wmzQ4SlHjKJL+oFw1HCwYZopM2
FslyXs067TFLPMUZUlVNBc5yShV9xncwRrerocwlPlNFywDkV3yL8OhY4KB67DF+F/fYWNecZb8q
CAv+NN/hPa+DhzKpyUMvP1isgDzNFw0HPKNf5TR454t4tyViHtZzuOfX6f80eIhREhHzAJt4R4sH
6G2JnH/FiLoBIHsZ542A0forYMD/VOHvsCFw/EuxpjzMxSLky4yoq0Y8DMUi5D9Vlwz5OXbGI+DH
ucwCL9W8Ib/EiCrHQ/IlMs6yV8ab8AfUfMBOqMF/rH6z5rMBp2Ez+AYBNIf3DaBZvE8AzeM9AzDm
O5mw5T0CMObj/M02W57azMaUB46a8vKQO2sSIXkYNuSPcI0HqyGIkDx0avAFFz9GnM2rIYiQPBqv
X4GBKh5gMw/kVlcA1jwsavB/1PBOCLdkWyUA+bU1D1NWvJPEj0IM5Ps8RFjyyH3c0+CT/EP9yVvk
LQGcsedB3eduEA+043XwtzEo5HvssucByJAL4KHDZ26f4GBIHvWc3YzXNOboc/Ew4jN5S5yucHwl
hP3yQzKkSFBgluv8qEqu9+QIaZ+prXES/ktbs+cfZZhONrDIFBfV/ZogxutWYXlmmsu+Rj5OyS/V
rMr1uhhb2fM3spXj8i4n1GLw6sg0P9PqnxcLnvh0uaKWHzBRd+R8xKRMhOThlmDCp2vBlW7cpt1j
RJKLIflpNSW4SdGzyFpyZTvtPh+QlntC8GU+B6HynPOs8XJayVbGmodR9adzFpys2UhMSsyUNf+9
+qZyGqoCAzyzrHA3WfNfuvIB9Zj+SgimBfZSOH4lH1A5+vnXpr4Px7syIpVjL8OGPFwLx3vXBfr8
AtvVqzA89ZmAAV/gWFi+vi4w4QeWL5zt+dq6wKTGc6cb1nzVO2BfYtrzrgBkit+bz68EoHGp+lr4
5brAnv8kHO/UBduYNOVlknaSnPDN9TR5iEnBXw0SU78Kd4y4xoxAHgSDa8mDYGgteRBa9f1r40HQ
tpY8CPL6dzvR8yDIav/u53keNQ+C87rbjsqtJG6R8SDUDFd07/UCQzDmna1Y8sij54XXtaLK0ed5
GwBlRs15aIHpUs9V3mZHVfssA2rGs5rK91yglS7WVTXPcMz5w8b0WT2Ou8nQS4Iic1znpio3rPre
5BC72UIreWa5rbJYPv8DNtgDQ5xHGC4AAAAASUVORK5CYII=
}
image create photo module_grey_64 -data {
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA
CxMAAAsTAQCanBgAAAAHdElNRQfiBwUEMjtJ1CmCAAAEhUlEQVRo3sWZXWgcVRTHf9mu61pCiFFC
jIsUCUEQSi1trFEi0SoxX20akNWKUD8eLqm+tVJtKFJbUKIvRo5gS42rEtE0qdC0DbWVkJZSFymx
aCmahyAxhBiClrqEdfGhk8ns7szsfMb7ds/e2d9/zj333LNnyzAZqp1e3pZRg6WOo5yRwwbLJ9Sy
Uxb1eYQBytkpN3E1IqZWRQM9eZbtNLHPsCDBK7TSZFhRxwtsZxMEISBS9EkEiBrm0aKnIzbf51rA
Ko4yzaX1vMp6Ypp1PVUsMGlYdx/3k2Ncn8fZAlxlXrespQG4wnJUZLnOgFx2JEC9hOjwIEeOw9Jr
v2QNqEaG8/Y3SP82bf4tPWm3JArs0yJhUXdfDXEyzBrWVVJJjmnDcwlgjpVDF6MWmCWjb0k1AG/x
eYktUH9SBUzysGgPq1O0cFqeMRy7vbxLRu7Q5zX8AXTJiG55gF+AZvlezwsnaAfgzpVsYX4K1gLw
8zLeZkdLW/QhOX7QA7bEFhSPITbxdZ7lLDOcNsznOUeCtMEyxUUqmHQbJqYC5AhHCiw/cm/ePMuT
BSuWeNRLnP7viSh8ATmy7mMgSPwumQdQrRyijlFelhur54Ecu+QzAJXkBBso51lOqvLVEmDEp3Rf
N+VLCFNAvwm+SIJlDKgkNa5wc/JlwcFc1GqpVBGliZOq7VYslIH6hzgwKM8Z8I1ccP3Gj8u46avs
5kMT8zhtcsPaA1f5VrtMHHugOAuqJMig9CtMJGhesBAgf7HNbwioJClQdhK+YFtoQaiFXpSUSoL0
85rJos7QToFKkiJLBmwlLIYkQCVJMcODPKWdNCsJB0MRoOGbZYoO/bCbSeiTD0IQsIJXB9lruHMK
JfTJHptEpGIcoNblMTwgmTz8/oJrL2U4ERreOg9s4U3XL39GVVvi8yVckYlSqfgS73C3K/wCCY7a
4I0SJkrWA7JEr4+9329TfzzEYAjXsUM89MkbIZRkLvB7QqgJ/eADEOAP71uAX7xPAf7x1pmwkiEH
mbDOL946EdXzhAMXTPvFWyeiy6rNtiTrpj0IvE1VbOwSmux9SzB4T0HoLvRUREUDFaCSpFhwjueY
/aUW8YCPMsPv6pBD/IseY8AUn2CAKLCBv23beo7xbj2wQ8fGHITe7tJ4twK67RtTBZFfGXCHRFXz
GIt0kPF38Lx7oJMIozJqI8E13p2ALmAI5KyFBA94FwJUBVu5yRhYSPCEd+OBVmKMLTeYiiR4xLsR
0A00qHr9rjBK8Ix3nIhUnBaglvOqWa6D2kgXO7Qu8HuFlW4IAniaW22lWs6rb+hknVYPjPCVXPRT
VUVdnAA0Ca8D1zjOsKT919SOBKgonfokzTDH5VpQv6adeWAdVeSYYIgRmQ7257wjAfKreoQpmQuj
mxIFloiDfVNOLnn47uV/GGy75WWgLtAIwDnM3/E7PpWsirOVDioc48tpJQLMyj2lPPCRJsCqEE/y
vpolof235HaI/cdrIP3T5gQbbVfdzl3c5gk/Rk/63xJbAKCep8dlT8hJz+QYH0vWftF/J66z4CBq
V6wAAAAASUVORK5CYII=
}
image create photo com_grey_64 -data {
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
9vdkdPkXjRXeVY2+qF0AAAAASUVORK5CYII=
}
image create photo app_grey_64 -data {
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAQAAAAAYLlVAAAAAmJLR0QA/4ePzL8AAAAJcEhZcwAA
CxMAAAsTAQCanBgAAAAHdElNRQfiBwUEJQdjONGTAAADtUlEQVRo3uWYXWgURxzAfze3HEGChEJt
K+pTEUGQ0LiW+IWaC0eQQoUiFIrUx2kIpVYQH0peBFHBB9EMPohvIvRDihqrldYH+wFZilxF2lIk
FBsOEUzDIUdcNj7kPG93b+9mZza5hw7ccbu3//n9bj7+Mzc5jIo8xHv0UUDgACAQjS8DghYhfuPd
x2eeKo+4qO7mjPAreEoB++IzkjeJ8567zyhlICB4M28W6f3iOuzMQCGXN430fnR72Wot8F/ePNb7
3n2Ndy0FZvM20e4tXsftooC34H5nqWAnkIGCrUBd4Q02d00AvAX3Bm8x0DUB8BbcSQZYbyLgxNJs
L9vpZy0FCghEI9s3J9CAn9RE6F6RPWbyocrlBo7wAb0do8p8GoorcoUVlgKywDiHtZaY+wyrJyH8
t6b4hoBcydcUtSLuM6QeZ4WvC8gCVzT7MIrfZYenvo04boy/aoeHHMh+pmIjXRffazmDpx1gPIaf
5yE+Pj5B/eUzy2jmeCAnV/FvRGCSMfWww6ZsJ9ezwDPtUIzgv+JD5S8THhCRlazKaEf89mwa/6VA
X+j6TnM/t8Rv5TorITuBntB1rQP+nWzxINLs7+UGbkRaLAMBRxvfx1VWQdcEOMrbNrs/e4H3LfAP
2MhEawGh2QE9rLPAD6kZxlopCO1KnBRtFcdXQAWtFPS7oNZpiiaUPxhWlcWPrRS0W0D5/GaEH1Iz
TbXEFESKys7b4hsKZ40E1CUu2+IXFdQYp01aAA5y2xZfl/icYwYCqsY+7mqO/N3NeBk7zFBfMIrP
TLoWQFXZy69am7dKE/4jzrWoa4IBDoq040rNUeqgUI7hL7ae7Kqs/hLpZ5aaY6SNwr3I1vVAEt5k
EL5UmKWUMBa8yL+mA1xon+qMBOqtcC12+4e0eGMBUFX2cYRXuAqfUVKz6fAYLzCLyfmkPMNm1hAw
zT01H1o99+vgrQTqmSEpL5T06hYsVRG6jwX/ewF/iQTCIyBY/hZAV8Bfli6Y77ZALfmx2rJMy2fJ
AtXQ9RbZkwVPOmwK3agkC/weul7D4Ux+8SeRg9s/kydLdJc3LqucVRYjQwo+5lRsnUw6IwI5FTts
LzNpMT2LbIltUDeqIDldnODLyN1NkR60LcdV0G6yfJPcQJmUn7mU/GUOQK5mitVLhH/MYLtDPwGg
ZhhOnihW5Ql725851hOPesCgxn4/bfEYVJ5mwlTT7EDyT2bwR4yyTf3d6bFcLIPtYoR++ujBwUmV
mhdPl2vMUeYmt/VyyQtF7jBPKF0n5wAAAABJRU5ErkJggg==
}