406 lines
21 KiB
HTML
406 lines
21 KiB
HTML
<ul ng-if="layout === 'default'" class="nav nav-tabs nav-common" role="tablist">
|
|
<li class="nav-item disabled">
|
|
<a class="nav-link">Global:</a>
|
|
</li>
|
|
<li ng-repeat="(key, tab) in tabs_common" class="nav-item">
|
|
<a class="nav-link" ng-click="setTabCommon(key)" ng-class="{ 'active': tab_common === key, 'changed': commonChanges[tab.slug] }">{{ tab.name }}<small ng-cloak>({{ commonChanges[tab.slug] }})</small></a>
|
|
</li>
|
|
</ul>
|
|
<div class="tab-content common-content">
|
|
<ul ng-if="layout === 'do'" class="nav nav-pills nav-fill" role="tablist">
|
|
<li ng-repeat="(key, tab) in tabs_common" class="nav-item">
|
|
<a class="nav-link" ng-click="setTabCommon(key)" ng-class="{ 'active': tab_common === key, 'changed': commonChanges[tab.slug], 'visited': key < tab_common }">{{ tab.name }}<small ng-cloak>({{ commonChanges[tab.slug] }})</small></a>
|
|
</li>
|
|
</ul>
|
|
<div class="tab-pane tab-https" ng-class="{ 'active': tabs_common[tab_common].slug === 'https' }">
|
|
<fieldset class="form-group" ng-class="{ disabled: !hasHTTPS() }">
|
|
<div class="row">
|
|
<legend class="col-sm-3 col-form-label col-form-label-sm">SSL profile</legend>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'modern' }">
|
|
<input class="form-check-input" type="radio" id="ssl-modern" ng-model="data.ssl_profile" value="modern">
|
|
<label class="form-check-label col-form-label-sm" for="ssl-modern">
|
|
<span tooltips tooltip-template="Services with clients that support TLS 1.3 and don't need backward compatibility<br><br>Oldest compatible clients:<ul><li>{{ sslProfiles.modern.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Modern</span>
|
|
</label>
|
|
</div>
|
|
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'intermediate' }">
|
|
<input class="form-check-input" type="radio" id="ssl-intermediate" ng-model="data.ssl_profile" value="intermediate">
|
|
<label class="form-check-label col-form-label-sm" for="ssl-intermediate">
|
|
<span tooltips tooltip-template="General-purpose servers with a variety of clients, recommended for almost all systems<br><br>Oldest compatible clients: <ul><li>{{ sslProfiles.intermediate.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Intermediate</span>
|
|
</label>
|
|
</div>
|
|
<div class="form-check form-check-radio form-check-inline" ng-class="{ 'input-changed': data.ssl_profile !== defaultData.ssl_profile && data.ssl_profile === 'old' }">
|
|
<input class="form-check-input" type="radio" id="ssl-old" ng-model="data.ssl_profile" value="old">
|
|
<label class="form-check-label col-form-label-sm" for="ssl-old">
|
|
<span tooltips tooltip-template="Compatible with a number of very old clients, and should be used only as a last resort<br><br>Oldest compatible clients: <ul><li>{{ sslProfiles.old.oldest_clients.join('</li><li>') }}</li></ul>" tooltip-side="top" tooltip-class="ssl">Mozilla Old</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</fieldset>
|
|
<div class="form-group row" ng-class="{ disabled: !hasHTTPS() }">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="DNS resolver for stapling">OCSP DNS resolvers</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_cloudflare !== defaultData.resolver_cloudflare }">
|
|
<input class="form-check-input" type="checkbox" id="resolver_cloudflare" ng-model="data.resolver_cloudflare">
|
|
<label class="form-check-label col-form-label-sm" for="resolver_cloudflare">
|
|
<span tooltips tooltip-template="<code>1.1.1.1, 1.0.0.1</code>" tooltip-side="top">Cloudflare Resolver</span>
|
|
</label>
|
|
</div>
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_google !== defaultData.resolver_google }">
|
|
<input class="form-check-input" type="checkbox" id="resolver_google" ng-model="data.resolver_google">
|
|
<label class="form-check-label col-form-label-sm" for="resolver_google">
|
|
<span tooltips tooltip-template="<code>8.8.8.8, 8.8.4.4</code>" tooltip-side="top">Google Public DNS</span>
|
|
</label>
|
|
</div>
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.resolver_opendns !== defaultData.resolver_opendns }">
|
|
<input class="form-check-input" type="checkbox" id="resolver_opendns" ng-model="data.resolver_opendns">
|
|
<label class="form-check-label col-form-label-sm" for="resolver_opendns">
|
|
<span tooltips tooltip-template="<code>208.67.222.222, 208.67.220.220</code>" tooltip-side="top">OpenDNS</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row" ng-class="{ disabled: !hasCertLetsEncrypt() }">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
Let's Encrypt webroot
|
|
</label>
|
|
<div class="col-sm-9 col-xl-7">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.directory_letsencrypt"
|
|
ng-class="{ 'input-changed': data.directory_letsencrypt !== defaultData.directory_letsencrypt }">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-security" ng-class="{ 'active': tabs_common[tab_common].slug === 'security' }">
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Referrer Policy is a new header that allows a site to control how much information the browser includes with navigations away from a document and should be set by all sites.">Referrer-Policy</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select class="custom-select form-control-sm" ng-model="data.referrer_policy" ng-class="{ 'input-changed': data.referrer_policy !== defaultData.referrer_policy }">
|
|
<option value="no-referrer">no-referrer</option>
|
|
<option value="no-referrer-when-downgrade">no-referrer-when-downgrade</option>
|
|
<option value="origin">origin</option>
|
|
<option value="origin-when-cross-origin">origin-when-cross-origin</option>
|
|
<option value="same-origin">same-origin</option>
|
|
<option value="strict-origin">strict-origin</option>
|
|
<option value="strict-origin-when-cross-origin">strict-origin-when-cross-origin</option>
|
|
<option value="unsafe-url">unsafe-url</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Content Security Policy is an effective measure to protect your site from XSS attacks. By whitelisting sources of approved content, you can prevent the browser from loading malicious assets.">Content-Security-Policy</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.content_security_policy"
|
|
ng-class="{ 'input-changed': data.content_security_policy !== defaultData.content_security_policy }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Emitting nginx version on error pages and in the “Server” response header field.">server_tokens</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.server_tokens !== defaultData.server_tokens }">
|
|
<input class="form-check-input" type="checkbox" id="server_tokens" ng-model="data.server_tokens">
|
|
<label class="form-check-label col-form-label-sm" for="server_tokens">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Used to limit the request processing rate per a defined key, in particular, the processing rate of requests coming from a single IP address.">limit_req</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.limit_req !== defaultData.limit_req }">
|
|
<input class="form-check-input" type="checkbox" id="limit_req" ng-model="data.limit_req">
|
|
<label class="form-check-label col-form-label-sm" for="limit_req">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-php" ng-class="{ 'active': tabs_common[tab_common].slug === 'php' }">
|
|
<div class="form-group row" ng-class="{ disabled: !hasPHP() }">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
PHP server
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select class="custom-select form-control-sm" ng-model="data.php_server" ng-class="{ 'input-changed': data.php_server !== defaultData.php_server }">
|
|
<option value="127.0.0.1:9000">TCP: 127.0.0.1:9000</option>
|
|
<option value="/var/run/hhvm/sock">HHVM socket: /var/run/hhvm/sock</option>
|
|
<option value="/var/run/hhvm/hhvm.sock">HHVM socket: /var/run/hhvm/hhvm.sock</option>
|
|
<option value="/var/run/php5-fpm.sock">5.x socket: /var/run/php5-fpm.sock</option>
|
|
<option value="/var/run/php/php7.0-fpm.sock">7.0 socket: /var/run/php/php7.0-fpm.sock</option>
|
|
<option value="/var/run/php/php7.1-fpm.sock">7.1 socket: /var/run/php/php7.1-fpm.sock</option>
|
|
<option value="/var/run/php/php7.2-fpm.sock">7.2 socket: /var/run/php/php7.2-fpm.sock</option>
|
|
<option value="/var/run/php/php7.3-fpm.sock">7.3 socket: /var/run/php/php7.3-fpm.sock</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row" ng-class="{ disabled: !hasPHP() }">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
PHP backup server
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select class="custom-select form-control-sm" ng-model="data.php_server_backup" ng-class="{ 'input-changed': data.php_server_backup !== defaultData.php_server_backup }">
|
|
<option value="">disabled</option>
|
|
<option value="127.0.0.1:9000">TCP: 127.0.0.1:9000</option>
|
|
<option value="/var/run/hhvm/sock">HHVM socket: /var/run/hhvm/sock</option>
|
|
<option value="/var/run/hhvm/hhvm.sock">HHVM socket: /var/run/hhvm/hhvm.sock</option>
|
|
<option value="/var/run/php5-fpm.sock">5.x socket: /var/run/php5-fpm.sock</option>
|
|
<option value="/var/run/php/php7.0-fpm.sock">7.0 socket: /var/run/php/php7.0-fpm.sock</option>
|
|
<option value="/var/run/php/php7.1-fpm.sock">7.1 socket: /var/run/php/php7.1-fpm.sock</option>
|
|
<option value="/var/run/php/php7.2-fpm.sock">7.2 socket: /var/run/php/php7.2-fpm.sock</option>
|
|
<option value="/var/run/php/php7.3-fpm.sock">7.3 socket: /var/run/php/php7.3-fpm.sock</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-python" ng-class="{ 'active': tabs_common[tab_common].slug === 'python' }">
|
|
<div class="form-group row" ng-class="{ disabled: !hasPython() }">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
Python server
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.python_server"
|
|
ng-class="{ 'input-changed': data.python_server !== defaultData.python_server }">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-performance" ng-class="{ 'active': tabs_common[tab_common].slug === 'performance' }">
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
gzip compression
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.gzip !== defaultData.gzip }">
|
|
<input class="form-check-input" type="checkbox" id="gzip" ng-model="data.gzip">
|
|
<label class="form-check-label col-form-label-sm" for="gzip">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<a href="https://github.com/eustas/ngx_brotli" target="_blank">brotli</a> compression
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.brotli !== defaultData.brotli }">
|
|
<input class="form-check-input" type="checkbox" id="brotli" ng-model="data.brotli">
|
|
<label class="form-check-label col-form-label-sm" for="brotli">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="{{ extensions.assets }}">Expiration - assets</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.expires_assets"
|
|
ng-class="{ 'input-changed': data.expires_assets !== defaultData.expires_assets }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="{{ extensions.images }}|{{ extensions.audio }}|{{ extensions.video }}">Expiration - media</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.expires_media"
|
|
ng-class="{ 'input-changed': data.expires_media !== defaultData.expires_media }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="{{ extensions.svg }}">Expiration - svg</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.expires_svg"
|
|
ng-class="{ 'input-changed': data.expires_svg !== defaultData.expires_svg }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="{{ extensions.fonts }}">Expiration - fonts</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.expires_fonts"
|
|
ng-class="{ 'input-changed': data.expires_fonts !== defaultData.expires_fonts }">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-logging" ng-class="{ 'active': tabs_common[tab_common].slug === 'logging' }">
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Sets the path, format, and configuration for a buffered log write.">access_log</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.access_log"
|
|
ng-class="{ 'input-changed': data.access_log !== defaultData.access_log }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Configures logging path (with warn level).">error_log</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.error_log"
|
|
ng-class="{ 'input-changed': data.error_log !== defaultData.error_log }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Logging of errors about not found files into error_log.">log_not_found</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.log_not_found !== defaultData.log_not_found }">
|
|
<input class="form-check-input" type="checkbox" id="log_not_found" ng-model="data.log_not_found">
|
|
<label class="form-check-label col-form-label-sm" for="log_not_found">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-nginx" ng-class="{ 'active': tabs_common[tab_common].slug === 'nginx' }">
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
NGINX config directory
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.directory_nginx"
|
|
ng-class="{ 'input-changed': data.directory_nginx !== defaultData.directory_nginx }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Defines the number of worker processes. ">worker_processes</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<select class="custom-select form-control-sm" ng-model="data.worker_processes" ng-class="{ 'input-changed': data.worker_processes !== defaultData.worker_processes }">
|
|
<option value="auto">auto</option>
|
|
<option value="1">1</option>
|
|
<option value="2">2</option>
|
|
<option value="3">3</option>
|
|
<option value="4">4</option>
|
|
<option value="5">5</option>
|
|
<option value="6">6</option>
|
|
<option value="7">7</option>
|
|
<option value="8">8</option>
|
|
<option value="9">9</option>
|
|
<option value="10">10</option>
|
|
<option value="11">11</option>
|
|
<option value="12">12</option>
|
|
<option value="13">13</option>
|
|
<option value="14">14</option>
|
|
<option value="15">15</option>
|
|
<option value="16">16</option>
|
|
</select>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Defines user and group credentials used by worker processes.<br>If group is omitted, a group whose name equals that of user is used.">user</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.user"
|
|
ng-class="{ 'input-changed': data.user !== defaultData.user }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Defines a file that will store the process ID of the main process.">pid</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.pid"
|
|
ng-class="{ 'input-changed': data.pid !== defaultData.pid }">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<code tooltips tooltip-template="Sets the maximum allowed size of the client request body.">client_max_body_size</code>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="input-group input-group-sm">
|
|
<input type="number"
|
|
min="0"
|
|
step="1"
|
|
class="form-control form-control-sm"
|
|
ng-model="data.client_max_body_size"
|
|
ng-class="{ 'input-changed': data.client_max_body_size !== defaultData.client_max_body_size }">
|
|
<div class="input-group-append">
|
|
<div class="input-group-text">MB</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-pane tab-tools" ng-class="{ 'active': tabs_common[tab_common].slug === 'tools' }">
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="Multiple configuration files<br><br><i>(ideal for multi-domain environment)</i>">Modularized structure</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.file_structure !== defaultData.file_structure }">
|
|
<input class="form-check-input" type="checkbox" id="file_structure" ng-model="data.file_structure" ng-true-value="'modularized'" ng-false-value="'unified'">
|
|
<label class="form-check-label col-form-label-sm" for="file_structure">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row" ng-if="isModularized()">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">
|
|
<span tooltips tooltip-template="Symbolic link from sites-available/{{ getDomain() }}.conf to sites-enabled/{{ getDomain() }}.conf">Symlink vhost</span>
|
|
</label>
|
|
<div class="col-sm-9">
|
|
<div class="form-check form-check-checkbox form-check-inline" ng-class="{ 'input-changed': data.symlink !== defaultData.symlink }">
|
|
<input class="form-check-input" type="checkbox" id="symlink" ng-model="data.symlink">
|
|
<label class="form-check-label col-form-label-sm" for="symlink">enabled</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="form-group row">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">Share settings</label>
|
|
<div class="col-sm-9">
|
|
<input type="text"
|
|
class="form-control form-control-sm"
|
|
readonly
|
|
ng-value="getUrl()">
|
|
</div>
|
|
</div>
|
|
<div class="form-group row mt-4">
|
|
<label class="col-sm-3 col-form-label col-form-label-sm">Reset settings</label>
|
|
<div class="col-sm-9">
|
|
<button class="btn btn-danger btn-sm btn-reset" ng-click="reset()">Reset</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="tab-navigation-buttons" ng-if="layout === 'do'">
|
|
<button class="btn btn-outline-secondary" ng-click="setTabCommonBack()" ng-class="{ disabled: tab_common === 0 }">Back</button>
|
|
<button class="btn btn-primary" ng-click="setTabCommonNext()" ng-class="{ disabled: tab_common === tabs_common.length - 1 }">Next</button>
|
|
</div>
|
|
</div>
|