Skip to content

Commit fa970d9

Browse files
authored
Merge pull request #305 from AlphaWallet/blank-template-example
Blank ticket TS template
2 parents 0a3cdd5 + b1dbb42 commit fa970d9

File tree

4 files changed

+254
-0
lines changed

4 files changed

+254
-0
lines changed

examples/TicketTemplate/Makefile

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
XMLSECTOOL=xmlsectool
2+
KEYSTORE=
3+
KEY=1
4+
KEYPASSWORD=
5+
SIGNATURE_ALGORITHM=rsa-sha256
6+
7+
help:
8+
# Needs a target, example: $$ make EntryToken.canonicalized.xml
9+
#
10+
# Let's say you have a TokenScript "EntryToken.xml"
11+
#- to validate and canonicalize, add 'canonicalized' in the filename
12+
@echo $$ make EntryToken.canonicalized.xml
13+
# - to sign, use tsml as file extension:
14+
@echo $$ make EntryToken.tsml
15+
16+
%.canonicalized.xml : %.xml
17+
# xmlsectool canonicalises automatically when needed, but leaving an xml:base attribute which creates trouble later.
18+
# xmlstarlet does it neatly
19+
# XML Canonicalization
20+
xmlstarlet c14n $^ > $@
21+
# xmlsectool validates too, albeit adding xml:base with breaks schema. Example:
22+
# JVMOPTS=-Djavax.xml.accessExternalDTD=all /opt/xmlsectool-2.0.0/xmlsectool.sh --validateSchema --xsd --schemaDirectory ../../schema --inFile $^
23+
# XML Validation
24+
# if INVALID, run validation again with xmllint to get meaningful error
25+
# then delete the canonicalized file
26+
-xmlstarlet val --xsd http://tokenscript.org/2019/10/tokenscript/tokenscript.xsd $@ || (mv $@ [email protected]; xmllint --noout --schema http://tokenscript.org/2019/10/tokenscript/tokenscript.xsd [email protected])
27+
28+
%.tsml: %.canonicalized.xml
29+
ifeq (,$(KEYSTORE))
30+
@echo ---------------- Keystore missing. Try this ----------------
31+
@echo $$ make KEYSTORE=shong.wang.p12 KEYPASSWORD=shong.wang $@
32+
@echo replace it with your .p12 file and your password
33+
rm $^
34+
else
35+
$(XMLSECTOOL) --sign --keyInfoKeyName 'AliPay' --digest SHA-256 --signatureAlgorithm http://www.w3.org/2001/04/xmldsig-more#$(SIGNATURE_ALGORITHM) --inFile $^ --outFile $@ --keystore $(KEYSTORE) --keystoreType PKCS12 --key $(KEY) --keyPassword $(KEYPASSWORD) --signaturePosition LAST
36+
# removing the canonicalized created for validation
37+
rm $^
38+
endif
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
<script type="text/javascript"><![CDATA[
2+
class Token {
3+
constructor(tokenInstance) {
4+
this.props = tokenInstance
5+
}
6+
7+
render() {
8+
return `<div class="ticket">
9+
<div class="content">
10+
<div class="left-content">
11+
<div class="top-section">
12+
<span class="title">
13+
${this.props.title}
14+
</span>
15+
<span class="subtitle">
16+
${this.props.subtitle}
17+
</span>
18+
</div>
19+
<div class="bottom-section">
20+
<span class="footer">
21+
${this.props.footer}
22+
</span>
23+
</div>
24+
</div>
25+
<div class="right-content">
26+
27+
</div>
28+
</div>
29+
</div>`;
30+
}
31+
}
32+
33+
web3.tokens.dataChanged = (oldTokens, updatedTokens) => {
34+
const currentTokenInstance = web3.tokens.data.currentInstance;
35+
document.getElementById('root').innerHTML = new Token(currentTokenInstance).render();
36+
};
37+
]]></script>
38+
<div id="root"></div>
39+
Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
2+
<!DOCTYPE token [
3+
<!ENTITY TicketTemplate.en SYSTEM "TicketTemplate.en.shtml">
4+
<!ENTITY style SYSTEM "shared.css">
5+
]>
6+
<ts:token xmlns:ts="http://tokenscript.org/2019/10/tokenscript"
7+
xmlns="http://www.w3.org/1999/xhtml"
8+
xmlns:xml="http://www.w3.org/XML/1998/namespace"
9+
xsi:schemaLocation="http://tokenscript.org/2019/10/tokenscript http://tokenscript.org/2019/10/tokenscript.xsd"
10+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
11+
custodian="false"
12+
>
13+
<ts:name>
14+
<ts:plurals xml:lang="en">
15+
<ts:string quantity="one">An Example TokenScript Ticket </ts:string>
16+
<ts:string quantity="other">Some Example TokenScript Tickets</ts:string>
17+
</ts:plurals>
18+
</ts:name>
19+
20+
<!-- need to make your own contract address -->
21+
<ts:contract name="Ticket Template" interface="erc721">
22+
<ts:address network="100">0x5e8c614cac6d140fbd5a454f41a1d5dc5da1a218</ts:address>
23+
</ts:contract>
24+
25+
<ts:origins>
26+
<!-- Define the contract which holds the token that the user will use -->
27+
<ts:ethereum contract="Ticket Template">
28+
</ts:ethereum>
29+
</ts:origins>
30+
31+
<ts:cards>
32+
<ts:token-card>
33+
<style type="text/css">&style;</style>
34+
<ts:view-iconified xml:lang="en">
35+
&TicketTemplate.en;
36+
</ts:view-iconified>
37+
<ts:view xml:lang="en">
38+
&TicketTemplate.en;
39+
</ts:view>
40+
</ts:token-card>
41+
</ts:cards>
42+
43+
<!-- Attribute types define what's inside the Tokenscript -->
44+
<ts:attribute-types>
45+
<ts:attribute-type id="title" syntax="1.3.6.1.4.1.1466.115.121.1.24">
46+
<ts:name>
47+
<ts:string xml:lang="en">TokenScript Template</ts:string>
48+
</ts:name>
49+
<ts:origins>
50+
<ts:token-id bitmask="FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000000000000000000000" as="utf8">
51+
</ts:token-id>
52+
</ts:origins>
53+
</ts:attribute-type>
54+
55+
<ts:attribute-type id="subtitle" oid="2.5.4.7" syntax="1.3.6.1.4.1.1466.115.121.1.15">
56+
<ts:name>
57+
<ts:string xml:lang="en">A blank template for Tokenscript</ts:string>
58+
</ts:name>
59+
<ts:origins>
60+
<ts:token-id bitmask="000000000000000000000000000000000000FF00000000000000000000000000" as="uint">
61+
<ts:mapping>
62+
<ts:option key="1">
63+
<ts:value xml:lang="en">Shanghai</ts:value>
64+
</ts:option>
65+
<ts:option key="2">
66+
<ts:value xml:lang="en">London</ts:value>
67+
</ts:option>
68+
</ts:mapping>
69+
</ts:token-id>
70+
</ts:origins>
71+
</ts:attribute-type>
72+
73+
<ts:attribute-type id="footer" syntax="1.3.6.1.4.1.1466.115.121.1.15">
74+
<ts:name>
75+
<ts:string xml:lang="en">You can fill this in later</ts:string>
76+
</ts:name>
77+
<ts:origins>
78+
<ts:token-id bitmask="00000000000000000000000000000000000000FF000000000000000000000000" as="uint">
79+
<ts:mapping>
80+
<ts:option key="1">
81+
<ts:value xml:lang="en">Shanghai Pudong Airport</ts:value>
82+
</ts:option>
83+
<ts:option key="2">
84+
<ts:value xml:lang="en">London Heathrow Airport</ts:value>
85+
</ts:option>
86+
</ts:mapping>
87+
</ts:token-id>
88+
</ts:origins>
89+
</ts:attribute-type>
90+
91+
92+
</ts:attribute-types>
93+
</ts:token>

examples/TicketTemplate/shared.css

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
/*
2+
These are the key CSS attributes that will make a
3+
Tokenscript card appear on Android and iOS
4+
*/
5+
6+
html {
7+
min-height: 10px;
8+
}
9+
body {
10+
min-height: 10px;
11+
}
12+
.subtitle {
13+
font-family: "SourceSansPro";
14+
font-weight: lighter;
15+
font-size: 15px;
16+
vertical-align: middle;
17+
color: white;
18+
}
19+
20+
.ticket {
21+
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMzQ0cHgiIGhlaWdodD0iMTg0cHgiIHZpZXdCb3g9IjAgMCAzNDQgMTg0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPCEtLSBHZW5lcmF0b3I6IFNrZXRjaCA2MSAoODk1ODEpIC0gaHR0cHM6Ly9za2V0Y2guY29tIC0tPgogICAgPHRpdGxlPkNvbWJpbmVkIFNoYXBlPC90aXRsZT4KICAgIDxkZXNjPkNyZWF0ZWQgd2l0aCBTa2V0Y2guPC9kZXNjPgogICAgPGRlZnM+CiAgICAgIDxsaW5lYXJHcmFkaWVudCBpZD0iR3JhZGllbnQiIGdyYWRpZW50VHJhbnNmb3JtPSJyb3RhdGUoNDUpIj4KCSAgICAgIDxzdG9wIG9mZnNldD0iNSUiICBzdG9wLWNvbG9yPSIjRDY1REIxIiAvPgoJICAgICAgPHN0b3Agb2Zmc2V0PSI5NSUiIHN0b3AtY29sb3I9IiNGRkM3NUYiIC8+CiAgICA8L2xpbmVhckdyYWRpZW50PgogIDwvZGVmcz4KICAgIDxnIGlkPSJTeW1ib2xzIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iQ2FyZHMvQ29udGVudC9QaWNrdXAiIGZpbGw9InVybCgjR3JhZGllbnQpIj4KICAgICAgICAgICAgPHBhdGggZD0iTS00LjI2MzI1NjQxZS0xNCwxNiBDLTQuMzcxNDczMDFlLTE0LDcuMTYzNDQ0IDcuMTYzNDQ0LDEuNjIzMjQ5ZS0xNSAxNiwwIEwzMjgsMCBDMzM2LjgzNjU1NiwtMS42MjMyNDllLTE1IDM0NCw3LjE2MzQ0NCAzNDQsMTYgTDM0NCw3NyBDMzM1LjcxNTcyOSw3NyAzMjksODMuNzE1NzI4OCAzMjksOTIgQzMyOSwxMDAuMjg0MjcxIDMzNS43MTU3MjksMTA3IDM0NCwxMDcgTDM0NCwxMDcgTDM0NCwxNjggQzM0NCwxNzYuODM2NTU2IDMzNi44MzY1NTYsMTg0IDMyOCwxODQgTDE2LDE4NCBDNy4xNjM0NDQsMTg0IC00LjE1NTAzOTgxZS0xNCwxNzYuODM2NTU2IC00LjI2MzI1NjQxZS0xNCwxNjggTC00LjI2MzI1NjQxZS0xNCwxMDcgTDAuMzEzODI4MTUzLDEwNi45OTY3ODIgQzguNDUzMjEzNjMsMTA2LjgyOTczIDE1LDEwMC4xNzk0MDcgMTUsOTIgQzE1LDgzLjcxNTcyODggOC4yODQyNzEyNSw3NyAtNC4yNjMyNTY0MWUtMTQsNzcgTC00LjI2MzI1NjQxZS0xNCw3NyBMLTQuMjYzMjU2NDFlLTE0LDE2IFoiIGlkPSJDb21iaW5lZC1TaGFwZSI+PC9wYXRoPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+');
22+
border-radius: 15px;
23+
flex-direction: column;
24+
background-size: contain;
25+
width: 100%;
26+
background-repeat: no-repeat;
27+
/* Keep this height */
28+
height: 52.7vw;
29+
}
30+
.title {
31+
font-family: "SourceSansPro";
32+
font-weight: 800;
33+
font-size: 20px;
34+
color: white;
35+
width: 100%;
36+
display: block;
37+
margin-left: 5%;
38+
}
39+
40+
.bottom-section {
41+
display: block;
42+
padding-left: 12%;
43+
padding-top: 7%;
44+
align-items: center;
45+
flex: 50%;
46+
width: auto;
47+
}
48+
49+
.top-section {
50+
display: flex;
51+
flex-direction: row;
52+
padding-top: 2%;
53+
width: auto;
54+
}
55+
56+
.footer {
57+
font-family: "SourceSansPro";
58+
font-weight: 500;
59+
font-size: 14px;
60+
color: white;
61+
width: 100%;
62+
display: block;
63+
padding-top: 3%;
64+
padding-bottom: 3%;
65+
}
66+
67+
/* flex row */
68+
.content {
69+
display: flex;
70+
flex-flow: row wrap;
71+
justify-content: flex-start;
72+
}
73+
74+
.left-content {
75+
width: 75%;
76+
}
77+
78+
.right-content {
79+
background-image: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMnB4IiBoZWlnaHQ9IjE4NHB4IiB2aWV3Qm94PSIwIDAgMiAxODQiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYxICg4OTU4MSkgLSBodHRwczovL3NrZXRjaC5jb20gLS0+CiAgICA8dGl0bGU+U2VwYXJhdG9ycy9Eb3R0ZWRfU21hbGw8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZyBpZD0iU3ltYm9scyIgc3Ryb2tlPSJub25lIiBzdHJva2Utd2lkdGg9IjEiIGZpbGw9Im5vbmUiIGZpbGwtcnVsZT0iZXZlbm9kZCI+CiAgICAgICAgPGcgaWQ9IkNhcmRzL0NvbnRlbnQvUGlja3VwIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMjcxLjAwMDAwMCwgMC4wMDAwMDApIiBmaWxsPSIjRkZGRkZGIj4KICAgICAgICAgICAgPGcgaWQ9IlNlcGFyYXRvcnMvRG90dGVkX1NtYWxsIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgyNzEuMDAwMDAwLCAwLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPGcgaWQ9Ikdyb3VwIj4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI4LjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTIiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTUuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxOSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIyMi41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjI2IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjI5LjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMzMiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMzYuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI0MCIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI0NyIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI0My41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjUwIiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjUzLjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iNTciIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iNjAuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI2NCIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI2Ny41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjcxIiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9Ijc0LjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iNzgiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iODEuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI4NSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI5MiIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI4OC41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjE0MSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxNDQuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxNDgiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTUxLjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTU1IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjE1OC41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjE2MiIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxNjUuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxNjkiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTcyLjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTc2IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjE4MyIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxNzkuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI5NiIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSI5OS41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjEwMyIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxMDYuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxMTAiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTEzLjUiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTE3IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjEyMC41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjEyNCIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxMjcuNSIgcj0iMSI+PC9jaXJjbGU+CiAgICAgICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iT3ZhbCIgY3g9IjEiIGN5PSIxMzEiIHI9IjEiPjwvY2lyY2xlPgogICAgICAgICAgICAgICAgICAgIDxjaXJjbGUgaWQ9Ik92YWwiIGN4PSIxIiBjeT0iMTM4IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJPdmFsIiBjeD0iMSIgY3k9IjEzNC41IiByPSIxIj48L2NpcmNsZT4KICAgICAgICAgICAgICAgIDwvZz4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+');
80+
background-repeat: repeat-y;
81+
margin-left: 3%;
82+
height: 100%;
83+
width: 20%;
84+
}

0 commit comments

Comments
 (0)