Add neutral privacy and decentralization score for signing only hardware wallets (thanks @harding @schildbach)

This commit is contained in:
Saivann 2014-07-23 15:26:01 -04:00
parent cab06e22d1
commit 66c8e20c42
11 changed files with 365 additions and 10 deletions

View file

@ -1533,6 +1533,15 @@ table td,table th{
.wallets .checkpass>div>span{
background-image:url(/img/checkbubble_pass.svg);
}
.wallets .checkneutral{
color:#8b8b8b;
}
.wallets .checkneutral p{
border-color:#8b8b8b;
}
.wallets .checkneutral>div>span{
background-image:url(/img/checkbubble_neutral.svg);
}
.wallets .checkfail{
color:#ee9209;
}
@ -1553,6 +1562,9 @@ table td,table th{
.wallets .checkdecentralization.checkgood{
background-image:url(/img/check_decentralization_pass.svg);
}
.wallets .checkdecentralization.checkneutral{
background-image:url(/img/check_decentralization_neutral.svg);
}
.wallets .checkdecentralization.checkfail{
background-image:url(/img/check_decentralization_fail.svg);
}
@ -1574,6 +1586,9 @@ table td,table th{
.wallets .checkprivacy.checkgood{
background-image:url(/img/check_privacy_pass.svg);
}
.wallets .checkprivacy.checkneutral{
background-image:url(/img/check_privacy_neutral.svg);
}
.wallets .checkprivacy.checkfail{
background-image:url(/img/check_privacy_fail.svg);
}

View file

@ -461,17 +461,17 @@ wallets:
<div>{% for os in platform.os %}<img src="/img/os/{{ os }}.png" alt="{{ os }}" title="{{ os }}" />{% endfor %}</div>
<div>{% if platform.link contains '://' %}<a href="{{ platform.link }}">{% translate walletvisit %}</a>{% else %}{% translate {{platform.link}} %}{% endif %}</div>
<div>
{% for check in platform.check %}{% if check[0] == 'privacy' %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><div>
{% for check in platform.check %}{% if check[0] == 'privacy' and platform.privacycheck %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% elsif check[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><div>
{% for privacycheck in platform.privacycheck %}
<div class="check{{ privacycheck[0] }} {% if privacycheck[1] contains "checkgood" %}checkgood{% elsif privacycheck[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">
<div class="check{{ privacycheck[0] }} {% if privacycheck[1] contains "checkgood" %}checkgood{% elsif privacycheck[1] contains "checkpass" %}checkpass{% elsif privacycheck[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">
<p>{% translate {{privacycheck[1]}} %}</p>
<p>{% translate {{privacycheck[1]}}txt %}</p>
</div>
{% endfor %}
</div><span></span></div></div>
{% else %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><p>{% translate {{check[1]}}txt %}</p><span></span></div></div>
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% elsif check[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><p>{% translate {{check[1]}}txt %}</p><span></span></div></div>
{% endif %}{% endfor %}
</div>
<p>{% translate {{platform.text}} %}</p>
@ -491,17 +491,17 @@ wallets:
<div>{% for os in platform[1].os %}<img src="/img/os/{{ os }}.png" alt="{{ os }}" title="{{ os }}" />{% endfor %}</div>
<div>{% if platform[1].link contains '://' %}<a href="{{ platform[1].link }}">{% translate walletvisit %}</a>{% else %}{% translate {{platform[1].link}} %}{% endif %}</div>
<div>
{% for check in platform[1].check %}{% if check[0] == 'privacy' %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><div>
{% for check in platform[1].check %}{% if check[0] == 'privacy' and platform[1].privacycheck %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% elsif check[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><div>
{% for privacycheck in platform[1].privacycheck %}
<div class="check{{ privacycheck[0] }} {% if privacycheck[1] contains "checkgood" %}checkgood{% elsif privacycheck[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">
<div class="check{{ privacycheck[0] }} {% if privacycheck[1] contains "checkgood" %}checkgood{% elsif privacycheck[1] contains "checkpass" %}checkpass{% elsif privacycheck[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">
<p>{% translate {{privacycheck[1]}} %}</p>
<p>{% translate {{privacycheck[1]}}txt %}</p>
</div>
{% endfor %}
</div><span></span></div></div>
{% else %}
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><p>{% translate {{check[1]}}txt %}</p><span></span></div></div>
<div class="check{{ check[0] }} {% if check[1] contains "checkgood" %}checkgood{% elsif check[1] contains "checkpass" %}checkpass{% elsif check[1] contains "checkneutral" %}checkneutral{% else %}checkfail{% endif %}">{% translate {{check[1]}} %}<div><p>{% translate {{check[1]}}txt %}</p><span></span></div></div>
{% endif %}{% endfor %}
</div>
<p>{% translate {{platform[1].text}} %}</p>

View file

@ -132,8 +132,8 @@ en:
checkfailcontrolthirdpartytxt: "This service has full control over your bitcoins. This means you need to trust this service will not lose your funds in an incident on their side. As of today, most web wallets don't insure their deposits like a bank, and many such services have suffered from security breaches in the past."
checkgooddecentralizefullnode: "Full node"
checkgooddecentralizefullnodetxt: "This wallet is a full node that validates and relays transactions on the Bitcoin network. This means no trust in a third party is required when verifying payments. Full nodes provide the highest level of security and are essential to protecting the network. However, they require more space (over 20GB), bandwidth, and a longer initial synchronization time."
checkgooddecentralizehardware: "Decentralized"
checkgooddecentralizehardwaretxt: "This device does not connect to the network by itself. However, it can be used with any compatible decentralized wallet without requiring trust in a third party when verifying payments."
checkneutraldecentralizevariable: "Variable decentralization"
checkneutraldecentralizevariabletxt: "Decentralization features are provided by the software wallet you use with this device. Please see the Decentralization score for the software wallet you plan to use."
checkpassdecentralizespv: "Decentralized"
checkpassdecentralizespvtxt: "This wallet connects to the Bitcoin network. This means very little trust in third parties is required when verifying payments. However, it is not as secure as a full node like <a href=\"#download#\">Bitcoin Core</a>."
checkfaildecentralizecentralized: "Centralized"
@ -155,6 +155,8 @@ en:
checkfailenvironmentdesktop: "Vulnerable environment"
checkfailenvironmentdesktoptxt: "This wallet can be loaded on computers which are vulnerable to malware. Securing your computer, using a strong passphrase, moving most of your funds to cold storage or enabling two-factor authentication can make it harder to steal on your bitcoins."
checkgoodprivacyimproved: "Improved privacy"
checkneutralprivacyvariable: "Variable privacy"
checkneutralprivacyvariabletxt: "Privacy features are provided by the software wallet you use with this device. Please see the Privacy score for the software wallet you plan to use."
checkpassprivacybasic: "Basic privacy"
checkfailprivacyweak: "Weak privacy"
checkpassprivacyaddressrotation: "Prevents spying on your payments"

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 B

View file

@ -0,0 +1,112 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="check_decentralization_neutral.svg"
inkscape:export-filename="/media/X/bitcoin.org/current/img/check_decentralization_neutral.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.4"
inkscape:cx="5.7253927"
inkscape:cy="13.15526"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1615"
inkscape:window-height="1026"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<rect
style="opacity:0.98999999;fill:#ffffff;fill-opacity:1;stroke:none"
id="rect2989"
width="104.28571"
height="154.28572"
x="138.57143"
y="175.93361"
ry="8.2006369" />
<path
sodipodi:type="arc"
style="opacity:0.98999999000000005;fill:#8b8b8b;fill-opacity:1;stroke:#8b8b8b;stroke-width:0.20000000000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none"
id="path3763"
sodipodi:cx="53.033009"
sodipodi:cy="43.173817"
sodipodi:rx="19.192898"
sodipodi:ry="19.445436"
d="m 72.225906,43.173817 c 0,10.739418 -8.592953,19.445436 -19.192897,19.445436 -10.599945,0 -19.192898,-8.706018 -19.192898,-19.445436 0,-10.739418 8.592953,-19.445437 19.192898,-19.445437 10.599944,0 19.192897,8.706019 19.192897,19.445437 z"
transform="matrix(-0.08505147,-0.07136666,-0.07136666,0.08505147,20.520779,1045.5601)" />
<path
transform="matrix(-0.08296202,-0.06961341,-0.06961341,0.08296202,13.018676,1039.4719)"
sodipodi:type="arc"
style="opacity:0.98999999000000005;fill:#8b8b8b;fill-opacity:1;stroke:#8b8b8b;stroke-width:0.20000000000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none"
id="path3763-8"
sodipodi:cx="53.033009"
sodipodi:cy="43.173817"
sodipodi:rx="19.192898"
sodipodi:ry="19.445436"
d="m 72.225906,43.173817 c 0,10.739418 -8.592953,19.445436 -19.192897,19.445436 -10.599945,0 -19.192898,-8.706018 -19.192898,-19.445436 0,-10.739418 8.592953,-19.445437 19.192898,-19.445437 10.599944,0 19.192897,8.706019 19.192897,19.445437 z" />
<path
style="fill:none;stroke:#8b8b8b;stroke-width:1.12242317000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 13.414901,1045.6811 -8.3288381,-7.1026"
id="path3785"
inkscape:connector-curvature="0" />
<path
sodipodi:type="arc"
style="opacity:0.98999999000000005;fill:#8b8b8b;fill-opacity:1;stroke:#8b8b8b;stroke-width:0.20000000000000001;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:0;stroke-opacity:1;stroke-dasharray:none"
id="path3763-9"
sodipodi:cx="53.033009"
sodipodi:cy="43.173817"
sodipodi:rx="19.192898"
sodipodi:ry="19.445436"
d="m 72.225906,43.173817 c 0,10.739418 -8.592953,19.445436 -19.192897,19.445436 -10.599945,0 -19.192898,-8.706018 -19.192898,-19.445436 0,-10.739418 8.592953,-19.445437 19.192898,-19.445437 10.599944,0 19.192897,8.706019 19.192897,19.445437 z"
transform="matrix(0.12367994,-0.04501581,-0.04501581,-0.12367994,-1.063512,1056.6608)" />
<path
style="fill:none;stroke:#8b8b8b;stroke-width:1.12242317000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 3.3276358,1049.3646 10.3154262,-3.6615"
id="path3785-0"
inkscape:connector-curvature="0" />
<path
style="fill:none;stroke:#8b8b8b;stroke-width:1.12242317000000003;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 5.2001836,1038.7863 -1.9865922,10.7644"
id="path3785-0-4"
inkscape:connector-curvature="0" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 B

View file

@ -0,0 +1,76 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg3068"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="check_privacy_neutral.svg"
inkscape:export-filename="/media/X/bitcoin.org/current/img/check_privacy_neutral.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs3070" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.197802"
inkscape:cx="-1.3248286"
inkscape:cy="11.465507"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="1615"
inkscape:window-height="1026"
inkscape:window-x="65"
inkscape:window-y="24"
inkscape:window-maximized="1" />
<metadata
id="metadata3073">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer"
transform="translate(0,-16)">
<path
sodipodi:type="arc"
style="opacity:0.98999999000000005;fill:#8b8b8b;fill-opacity:1;stroke:#8b8b8b;stroke-width:1.97099996000000011;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
id="path3765-5-5"
sodipodi:cx="14.042934"
sodipodi:cy="11.170019"
sodipodi:rx="1.2438533"
sodipodi:ry="1.6297841"
d="m 15.286788,11.170019 c 0,0.900105 -0.556892,1.629784 -1.243854,1.629784 -0.686961,0 -1.243853,-0.729679 -1.243853,-1.629784 0,-0.900105 0.556892,-1.629784 1.243853,-1.629784 0.686962,0 1.243854,0.729679 1.243854,1.629784 z"
transform="matrix(1.6048759,0,0,1.423111,-14.273928,4.9246464)" />
<path
style="fill:#8b8b8b;fill-opacity:1;stroke:#8b8b8b;stroke-width:0.66057211000000005;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
d="m 2.6163083,30.762615 11.0321637,0.02511 c 0,0 0.02657,-1.695841 0.0025,-4.884829 -0.01197,-1.616008 -3.37212,-3.086481 -5.3720193,-3.061091 -2.065171,0.02628 -5.6306112,1.31574 -5.6627929,2.883883 -0.086826,4.231146 0,5.036932 -8.8e-6,5.036935 z"
id="path3767-5-7"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccssscc" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 3 KiB

BIN
img/checkbubble_neutral.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 432 B

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="checkbubble_neutral.svg"
inkscape:export-filename="/media/X/bitcoin.org/current/img/checkbubble_neutral.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="11.313709"
inkscape:cx="7.7877103"
inkscape:cy="1.7301325"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1232"
inkscape:window-height="786"
inkscape:window-x="219"
inkscape:window-y="105"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="M 16.012765,15.440727 3.9073718,8.009826 16.010162,0.28292007 z"
id="path3773"
inkscape:connector-curvature="0"
transform="translate(0,1036.3622)"
sodipodi:nodetypes="cccc" />
<g
id="g3832">
<path
d="m 16.264186,1051.9408 -12.4270992,-7.5765 12.4321222,-7.5766"
style="fill:none;stroke:#8b8b8b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path2985-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 468 B

View file

@ -0,0 +1,75 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
id="svg2"
version="1.1"
inkscape:version="0.48.4 r9939"
sodipodi:docname="checkbubble_neutral_rtl.svg"
inkscape:export-filename="/media/X/bitcoin.org/current/img/checkbubble_neutral_rtl.png"
inkscape:export-xdpi="90"
inkscape:export-ydpi="90">
<defs
id="defs4" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="16"
inkscape:cx="-7.0752305"
inkscape:cy="-0.59178359"
inkscape:document-units="px"
inkscape:current-layer="layer1"
showgrid="false"
inkscape:window-width="1232"
inkscape:window-height="786"
inkscape:window-x="369"
inkscape:window-y="135"
inkscape:window-maximized="0" />
<metadata
id="metadata7">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Calque 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-1036.3622)">
<path
style="fill:#ffffff;fill-opacity:1;stroke:none"
d="M -2.1903e-4,1051.8029 12.105175,1044.372 0.00238397,1036.6451 z"
id="path3773"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccc" />
<g
id="g3832"
transform="matrix(-1,0,0,1,16.012546,0)">
<path
d="m 16.264186,1051.9408 -12.4270992,-7.5765 12.4321222,-7.5766"
style="fill:none;stroke:#8b8b8b;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
id="path2985-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="ccc" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.3 KiB