KB-3510 Fix bugs, new UI elements for Firewall, VPN and Configuration

This commit is contained in:
Aliaksandr Dvoineu
2023-04-25 23:31:14 +03:00
parent 93b40a5085
commit bc4b172460
58 changed files with 4701 additions and 80 deletions

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "advanced.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,157 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 1.000000 1.000000 scn
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
90.250000 0.000000 l
h
f
n
Q
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
90.250000 0.000000 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.000000 0.678431 0.905882 scn
101.895164 14.500000 m
102.674850 13.873825 l
103.177734 14.500000 l
102.674850 15.126175 l
101.895164 14.500000 l
h
90.250000 0.000000 m
90.250000 -1.000000 l
90.729462 -1.000000 l
91.029686 -0.626175 l
90.250000 0.000000 l
h
90.250000 29.000000 m
91.029686 29.626175 l
90.729462 30.000000 l
90.250000 30.000000 l
90.250000 29.000000 l
h
0.000000 0.000000 m
-1.000000 0.000000 l
-1.000000 -1.000000 l
0.000000 -1.000000 l
0.000000 0.000000 l
h
0.000000 29.000000 m
0.000000 30.000000 l
-1.000000 30.000000 l
-1.000000 29.000000 l
0.000000 29.000000 l
h
101.115479 15.126175 m
89.470314 0.626175 l
91.029686 -0.626175 l
102.674850 13.873825 l
101.115479 15.126175 l
h
89.470314 28.373825 m
101.115479 13.873825 l
102.674850 15.126175 l
91.029686 29.626175 l
89.470314 28.373825 l
h
90.250000 1.000000 m
0.000000 1.000000 l
0.000000 -1.000000 l
90.250000 -1.000000 l
90.250000 1.000000 l
h
0.000000 28.000000 m
90.250000 28.000000 l
90.250000 30.000000 l
0.000000 30.000000 l
0.000000 28.000000 l
h
1.000000 0.000000 m
1.000000 14.500000 l
-1.000000 14.500000 l
-1.000000 0.000000 l
1.000000 0.000000 l
h
1.000000 14.500000 m
1.000000 29.000000 l
-1.000000 29.000000 l
-1.000000 14.500000 l
1.000000 14.500000 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
1746
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001836 00000 n
0000001859 00000 n
0000002033 00000 n
0000002107 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2166
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "anonymous.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,157 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 1.000000 1.000000 scn
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
90.250000 0.000000 l
h
f
n
Q
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
90.250000 0.000000 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.803922 0.811765 0.815686 scn
101.895164 14.500000 m
102.674850 13.873825 l
103.177734 14.500000 l
102.674850 15.126175 l
101.895164 14.500000 l
h
90.250000 0.000000 m
90.250000 -1.000000 l
90.729462 -1.000000 l
91.029686 -0.626175 l
90.250000 0.000000 l
h
90.250000 29.000000 m
91.029686 29.626175 l
90.729462 30.000000 l
90.250000 30.000000 l
90.250000 29.000000 l
h
0.000000 0.000000 m
-1.000000 0.000000 l
-1.000000 -1.000000 l
0.000000 -1.000000 l
0.000000 0.000000 l
h
0.000000 29.000000 m
0.000000 30.000000 l
-1.000000 30.000000 l
-1.000000 29.000000 l
0.000000 29.000000 l
h
101.115479 15.126175 m
89.470314 0.626175 l
91.029686 -0.626175 l
102.674850 13.873825 l
101.115479 15.126175 l
h
89.470314 28.373825 m
101.115479 13.873825 l
102.674850 15.126175 l
91.029686 29.626175 l
89.470314 28.373825 l
h
90.250000 1.000000 m
0.000000 1.000000 l
0.000000 -1.000000 l
90.250000 -1.000000 l
90.250000 1.000000 l
h
0.000000 28.000000 m
90.250000 28.000000 l
90.250000 30.000000 l
0.000000 30.000000 l
0.000000 28.000000 l
h
1.000000 0.000000 m
1.000000 14.500000 l
-1.000000 14.500000 l
-1.000000 0.000000 l
1.000000 0.000000 l
h
1.000000 14.500000 m
1.000000 29.000000 l
-1.000000 29.000000 l
-1.000000 14.500000 l
1.000000 14.500000 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
1746
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001836 00000 n
0000001859 00000 n
0000002033 00000 n
0000002107 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2166
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "basic.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,145 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 1.000000 1.000000 scn
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
14.500001 29.000000 l
6.491872 29.000000 0.000000 22.508129 0.000000 14.500000 c
0.000000 6.491871 6.491870 0.000000 14.499998 0.000000 c
90.250000 0.000000 l
h
f
n
Q
90.250000 0.000000 m
101.895164 14.500000 l
90.250000 29.000000 l
14.500001 29.000000 l
6.491872 29.000000 0.000000 22.508129 0.000000 14.500000 c
0.000000 6.491871 6.491870 0.000000 14.499998 0.000000 c
90.250000 0.000000 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.000000 0.678431 0.905882 scn
101.895164 14.500000 m
102.674850 13.873825 l
103.177734 14.500000 l
102.674850 15.126175 l
101.895164 14.500000 l
h
90.250000 0.000000 m
90.250000 -1.000000 l
90.729462 -1.000000 l
91.029686 -0.626175 l
90.250000 0.000000 l
h
90.250000 29.000000 m
91.029686 29.626175 l
90.729462 30.000000 l
90.250000 30.000000 l
90.250000 29.000000 l
h
101.115479 15.126175 m
89.470314 0.626175 l
91.029686 -0.626175 l
102.674850 13.873825 l
101.115479 15.126175 l
h
89.470314 28.373825 m
101.115479 13.873825 l
102.674850 15.126175 l
91.029686 29.626175 l
89.470314 28.373825 l
h
90.250000 1.000000 m
14.499998 1.000000 l
14.499998 -1.000000 l
90.250000 -1.000000 l
90.250000 1.000000 l
h
14.500001 28.000000 m
90.250000 28.000000 l
90.250000 30.000000 l
14.500001 30.000000 l
14.500001 28.000000 l
h
14.500001 30.000000 m
5.939588 30.000000 -1.000000 23.060413 -1.000000 14.500000 c
1.000000 14.500000 l
1.000000 21.955845 7.044157 28.000000 14.500001 28.000000 c
14.500001 30.000000 l
h
14.499998 1.000000 m
7.044155 1.000000 1.000000 7.044155 1.000000 14.500000 c
-1.000000 14.500000 l
-1.000000 5.939587 5.939585 -1.000000 14.499998 -1.000000 c
14.499998 1.000000 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
1844
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 101.895142 29.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001934 00000 n
0000001957 00000 n
0000002131 00000 n
0000002205 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2264
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "universal.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,139 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 1.000000 1.000000 scn
0.000000 0.000000 m
75.750000 0.000000 l
83.758133 0.000000 90.250000 6.491871 90.250000 14.500000 c
90.250000 22.508129 83.758133 29.000000 75.750008 29.000000 c
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
h
f
n
Q
0.000000 0.000000 m
75.750000 0.000000 l
83.758133 0.000000 90.250000 6.491871 90.250000 14.500000 c
90.250000 22.508129 83.758133 29.000000 75.750008 29.000000 c
0.000000 29.000000 l
0.000000 14.500000 l
0.000000 0.000000 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.803922 0.811765 0.815686 scn
0.000000 0.000000 m
-1.000000 0.000000 l
-1.000000 -1.000000 l
0.000000 -1.000000 l
0.000000 0.000000 l
h
0.000000 29.000000 m
0.000000 30.000000 l
-1.000000 30.000000 l
-1.000000 29.000000 l
0.000000 29.000000 l
h
75.750000 1.000000 m
0.000000 1.000000 l
0.000000 -1.000000 l
75.750000 -1.000000 l
75.750000 1.000000 l
h
0.000000 28.000000 m
75.750008 28.000000 l
75.750008 30.000000 l
0.000000 30.000000 l
0.000000 28.000000 l
h
1.000000 0.000000 m
1.000000 14.500000 l
-1.000000 14.500000 l
-1.000000 0.000000 l
1.000000 0.000000 l
h
1.000000 14.500000 m
1.000000 29.000000 l
-1.000000 29.000000 l
-1.000000 14.500000 l
1.000000 14.500000 l
h
89.250000 14.500000 m
89.250000 7.044155 83.205849 1.000000 75.750000 1.000000 c
75.750000 -1.000000 l
84.310417 -1.000000 91.250000 5.939587 91.250000 14.500000 c
89.250000 14.500000 l
h
91.250000 14.500000 m
91.250000 23.060413 84.310417 30.000000 75.750008 30.000000 c
75.750008 28.000000 l
83.205849 28.000000 89.250000 21.955845 89.250000 14.500000 c
91.250000 14.500000 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
1711
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 90.250000 29.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001801 00000 n
0000001824 00000 n
0000001997 00000 n
0000002071 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2130
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_clickbait_trackers.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,118 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.647059 0.282353 0.850980 scn
9.700000 4.500000 m
8.099999 4.583333 6.750000 5.200000 5.650000 6.349999 c
4.550000 7.499999 4.000000 8.883333 4.000000 10.500000 c
4.000000 12.166667 4.583333 13.583333 5.750000 14.750000 c
6.916667 15.916667 8.333333 16.500000 10.000000 16.500000 c
11.616667 16.500000 13.000001 15.950000 14.150001 14.850000 c
15.300000 13.750000 15.916667 12.391666 16.000000 10.775000 c
14.425000 11.275000 l
14.241667 12.341666 13.741667 13.229166 12.925000 13.937500 c
12.108334 14.645834 11.133333 15.000000 10.000000 15.000000 c
8.750000 15.000000 7.687500 14.562500 6.812500 13.687500 c
5.937500 12.812500 5.500000 11.750000 5.500000 10.500000 c
5.500000 9.383333 5.854167 8.412499 6.562500 7.587500 c
7.270833 6.762500 8.158334 6.258333 9.225000 6.075000 c
9.700000 4.500000 l
h
10.900001 0.549999 m
10.750001 0.533333 10.599999 0.520832 10.450000 0.512499 c
10.300000 0.504166 10.150000 0.500000 10.000000 0.500000 c
8.616667 0.500000 7.316667 0.762501 6.100000 1.287500 c
4.883333 1.812500 3.825000 2.525000 2.925000 3.424999 c
2.025000 4.324999 1.312500 5.383333 0.787500 6.599999 c
0.262500 7.816666 0.000000 9.116667 0.000000 10.500000 c
0.000000 11.883333 0.262500 13.183333 0.787500 14.400000 c
1.312500 15.616667 2.025000 16.674999 2.925000 17.575001 c
3.825000 18.475000 4.883333 19.187500 6.100000 19.712500 c
7.316667 20.237499 8.616667 20.500000 10.000000 20.500000 c
11.383333 20.500000 12.683334 20.237499 13.900001 19.712500 c
15.116667 19.187500 16.175001 18.475000 17.075001 17.575001 c
17.975000 16.674999 18.687500 15.616667 19.212500 14.400000 c
19.737499 13.183333 20.000000 11.883333 20.000000 10.500000 c
20.000000 10.350000 19.995834 10.200000 19.987501 10.050000 c
19.979168 9.900001 19.966667 9.749999 19.950001 9.599999 c
18.500000 10.050000 l
18.500000 10.500000 l
18.500000 12.866667 17.674999 14.875000 16.025000 16.525000 c
14.375000 18.174999 12.366667 19.000000 10.000000 19.000000 c
7.633333 19.000000 5.625000 18.174999 3.975000 16.525000 c
2.325000 14.875000 1.500000 12.866667 1.500000 10.500000 c
1.500000 8.133333 2.325000 6.125000 3.975000 4.475000 c
5.625000 2.825001 7.633333 2.000000 10.000000 2.000000 c
10.450000 2.000000 l
10.900001 0.549999 l
h
18.525000 0.000000 m
14.250000 4.275000 l
13.000000 0.500000 l
10.000000 10.500000 l
20.000000 7.500000 l
16.225000 6.250000 l
20.500000 1.975000 l
18.525000 0.000000 l
h
f
n
Q
endstream
endobj
3 0 obj
2483
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 20.500000 20.500000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002573 00000 n
0000002596 00000 n
0000002769 00000 n
0000002843 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2902
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_data_trackers.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,127 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 0.203922 0.164706 scn
9.000000 0.000000 m
6.483334 0.000000 4.354167 0.387499 2.612500 1.162500 c
0.870833 1.937500 0.000000 2.883333 0.000000 4.000000 c
0.000000 14.000000 l
0.000000 15.100000 0.879167 16.041666 2.637500 16.825001 c
4.395833 17.608334 6.516667 18.000000 9.000000 18.000000 c
11.483334 18.000000 13.604167 17.608334 15.362500 16.825001 c
17.120834 16.041666 18.000000 15.100000 18.000000 14.000000 c
18.000000 4.000000 l
18.000000 2.883333 17.129168 1.937500 15.387500 1.162500 c
13.645834 0.387499 11.516666 0.000000 9.000000 0.000000 c
h
9.000000 12.200000 m
10.433333 12.200000 11.904167 12.420834 13.412500 12.862499 c
14.920834 13.304167 15.891666 13.799999 16.325001 14.350000 c
15.875000 14.883333 14.895834 15.375000 13.387500 15.825000 c
11.879167 16.275000 10.416667 16.500000 9.000000 16.500000 c
7.533333 16.500000 6.058333 16.283333 4.575000 15.850000 c
3.091667 15.416666 2.116667 14.916666 1.650000 14.350000 c
2.116667 13.766666 3.083333 13.262500 4.550000 12.837500 c
6.016667 12.412500 7.500000 12.200000 9.000000 12.200000 c
h
8.975000 6.849999 m
9.675000 6.849999 10.375000 6.887500 11.075000 6.962500 c
11.775001 7.037499 12.445833 7.150000 13.087501 7.300000 c
13.729167 7.450000 14.341667 7.633333 14.925000 7.849999 c
15.508333 8.066667 16.033333 8.308333 16.500000 8.575000 c
16.500000 12.450000 l
16.016666 12.183333 15.483334 11.941667 14.900001 11.725000 c
14.316667 11.508333 13.700000 11.325000 13.050000 11.174999 c
12.400001 11.025000 11.733334 10.908333 11.050000 10.825000 c
10.366667 10.741667 9.675000 10.700000 8.975000 10.700000 c
8.275001 10.700000 7.575000 10.741667 6.875000 10.825000 c
6.175000 10.908333 5.504167 11.025000 4.862500 11.174999 c
4.220833 11.325000 3.612500 11.508333 3.037500 11.725000 c
2.462500 11.941667 1.950000 12.183333 1.500000 12.450000 c
1.500000 8.575000 l
1.950000 8.308333 2.458333 8.066667 3.025000 7.849999 c
3.591667 7.633333 4.195833 7.450000 4.837500 7.300000 c
5.479167 7.150000 6.150000 7.037499 6.850000 6.962500 c
7.550000 6.887500 8.258333 6.849999 8.975000 6.849999 c
h
9.000000 1.500000 m
9.800000 1.500000 10.625000 1.570833 11.475000 1.712500 c
12.325000 1.854166 13.104167 2.041666 13.812500 2.275000 c
14.520834 2.508333 15.120833 2.766666 15.612500 3.050000 c
16.104166 3.333333 16.400000 3.625000 16.500000 3.925000 c
16.500000 7.050000 l
16.033333 6.783333 15.508333 6.545834 14.925000 6.337500 c
14.341667 6.129167 13.729167 5.950000 13.087501 5.800000 c
12.445833 5.650000 11.779167 5.537499 11.087501 5.462500 c
10.395834 5.387500 9.691667 5.349999 8.975000 5.349999 c
8.258333 5.349999 7.550000 5.387500 6.850000 5.462500 c
6.150000 5.537499 5.479167 5.650000 4.837500 5.800000 c
4.195833 5.950000 3.591667 6.129167 3.025000 6.337500 c
2.458333 6.545834 1.950000 6.783333 1.500000 7.050000 c
1.500000 3.900000 l
1.583333 3.616667 1.866667 3.329166 2.350000 3.037499 c
2.833333 2.745833 3.433333 2.487500 4.150000 2.262500 c
4.866667 2.037499 5.650000 1.854166 6.500000 1.712500 c
7.350000 1.570833 8.183333 1.500000 9.000000 1.500000 c
h
f
n
Q
endstream
endobj
3 0 obj
3151
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 18.000000 18.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000003241 00000 n
0000003264 00000 n
0000003437 00000 n
0000003511 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
3570
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_email_trackers.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,325 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.305882 0.298039 0.815686 scn
1.350000 -0.000006 m
0.990000 -0.000006 0.675000 0.134995 0.405000 0.404995 c
0.135000 0.674994 0.000000 0.989994 0.000000 1.349995 c
0.000000 13.049994 l
0.000000 13.409994 0.135000 13.724994 0.405000 13.994994 c
0.675000 14.264994 0.990000 14.399994 1.350000 14.399994 c
16.650002 14.399994 l
17.010000 14.399994 17.325001 14.264994 17.595001 13.994994 c
17.865000 13.724994 18.000000 13.409994 18.000000 13.049994 c
18.000000 1.349995 l
18.000000 0.989994 17.865000 0.674994 17.595001 0.404995 c
17.325001 0.134995 17.010000 -0.000006 16.650002 -0.000006 c
1.350000 -0.000006 l
h
9.000000 6.794994 m
1.350000 11.812494 l
1.350000 1.349995 l
16.650002 1.349995 l
16.650002 11.812494 l
9.000000 6.794994 l
h
9.000000 8.144995 m
16.560001 13.049994 l
1.462500 13.049994 l
9.000000 8.144995 l
h
1.350000 11.812494 m
1.350000 13.049994 l
1.350000 1.349995 l
1.350000 11.812494 l
h
f
n
Q
1.350000 -0.000006 m
0.990000 -0.000006 0.675000 0.134995 0.405000 0.404995 c
0.135000 0.674994 0.000000 0.989994 0.000000 1.349995 c
0.000000 13.049994 l
0.000000 13.409994 0.135000 13.724994 0.405000 13.994994 c
0.675000 14.264994 0.990000 14.399994 1.350000 14.399994 c
16.650002 14.399994 l
17.010000 14.399994 17.325001 14.264994 17.595001 13.994994 c
17.865000 13.724994 18.000000 13.409994 18.000000 13.049994 c
18.000000 1.349995 l
18.000000 0.989994 17.865000 0.674994 17.595001 0.404995 c
17.325001 0.134995 17.010000 -0.000006 16.650002 -0.000006 c
1.350000 -0.000006 l
h
9.000000 6.794994 m
1.350000 11.812494 l
1.350000 1.349995 l
16.650002 1.349995 l
16.650002 11.812494 l
9.000000 6.794994 l
h
9.000000 8.144995 m
16.560001 13.049994 l
1.462500 13.049994 l
9.000000 8.144995 l
h
1.350000 11.812494 m
1.350000 13.049994 l
1.350000 1.349995 l
1.350000 11.812494 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.305882 0.298039 0.815686 scn
0.450000 11.812494 m
0.450000 1.349995 l
2.250000 1.349995 l
2.250000 11.812494 l
0.450000 11.812494 l
h
9.000000 6.794994 m
8.012806 5.289854 l
9.000000 4.642370 l
9.987195 5.289854 l
9.000000 6.794994 l
h
1.350000 11.812494 m
-0.450000 11.812494 l
-0.450000 10.840459 l
0.362805 10.307354 l
1.350000 11.812494 l
h
1.350000 1.349995 m
-0.450000 1.349995 l
-0.450000 -0.450006 l
1.350000 -0.450006 l
1.350000 1.349995 l
h
16.650002 1.349995 m
16.650002 -0.450006 l
18.450001 -0.450006 l
18.450001 1.349995 l
16.650002 1.349995 l
h
16.650002 11.812494 m
18.450001 11.812494 l
18.450001 15.145705 l
15.662806 13.317634 l
16.650002 11.812494 l
h
9.000000 8.144995 m
8.018230 6.636310 l
8.998539 5.998378 l
9.979715 6.634975 l
9.000000 8.144995 l
h
16.560001 13.049994 m
17.539715 11.539974 l
22.641397 14.849994 l
16.560001 14.849994 l
16.560001 13.049994 l
h
1.462500 13.049994 m
1.462500 14.849994 l
-4.603716 14.849994 l
0.480730 11.541310 l
1.462500 13.049994 l
h
1.350000 1.799994 m
1.401242 1.799994 1.475013 1.789044 1.552805 1.755706 c
1.628516 1.723258 1.669326 1.686253 1.677792 1.677787 c
-0.867792 -0.867798 l
-0.282952 -1.452638 0.481404 -1.800005 1.350000 -1.800005 c
1.350000 1.799994 l
h
1.677792 1.677787 m
1.686258 1.669321 1.723263 1.628510 1.755711 1.552799 c
1.789050 1.475008 1.800000 1.401237 1.800000 1.349995 c
-1.800000 1.349995 l
-1.800000 0.481399 -1.452632 -0.282958 -0.867792 -0.867798 c
1.677792 1.677787 l
h
1.800000 1.349995 m
1.800000 13.049994 l
-1.800000 13.049994 l
-1.800000 1.349995 l
1.800000 1.349995 l
h
1.800000 13.049994 m
1.800000 12.998752 1.789050 12.924980 1.755711 12.847189 c
1.723263 12.771478 1.686258 12.730667 1.677792 12.722201 c
-0.867792 15.267786 l
-1.452632 14.682946 -1.800000 13.918591 -1.800000 13.049994 c
1.800000 13.049994 l
h
1.677792 12.722201 m
1.669326 12.713736 1.628516 12.676730 1.552805 12.644283 c
1.475013 12.610944 1.401242 12.599994 1.350000 12.599994 c
1.350000 16.199993 l
0.481404 16.199993 -0.282952 15.852626 -0.867792 15.267786 c
1.677792 12.722201 l
h
1.350000 12.599994 m
16.650002 12.599994 l
16.650002 16.199993 l
1.350000 16.199993 l
1.350000 12.599994 l
h
16.650002 12.599994 m
16.598759 12.599994 16.524988 12.610944 16.447197 12.644283 c
16.371485 12.676730 16.330675 12.713736 16.322208 12.722201 c
18.867792 15.267786 l
18.282953 15.852626 17.518597 16.199993 16.650002 16.199993 c
16.650002 12.599994 l
h
16.322208 12.722201 m
16.313744 12.730667 16.276737 12.771478 16.244289 12.847189 c
16.210951 12.924980 16.200001 12.998752 16.200001 13.049994 c
19.800001 13.049994 l
19.800001 13.918591 19.452633 14.682946 18.867792 15.267786 c
16.322208 12.722201 l
h
16.200001 13.049994 m
16.200001 1.349995 l
19.800001 1.349995 l
19.800001 13.049994 l
16.200001 13.049994 l
h
16.200001 1.349995 m
16.200001 1.401237 16.210951 1.475008 16.244289 1.552799 c
16.276737 1.628510 16.313744 1.669321 16.322208 1.677787 c
18.867792 -0.867798 l
19.452633 -0.282958 19.800001 0.481399 19.800001 1.349995 c
16.200001 1.349995 l
h
16.322208 1.677787 m
16.330675 1.686253 16.371485 1.723258 16.447197 1.755706 c
16.524988 1.789044 16.598759 1.799994 16.650002 1.799994 c
16.650002 -1.800005 l
17.518597 -1.800005 18.282953 -1.452638 18.867792 -0.867798 c
16.322208 1.677787 l
h
16.650002 1.799994 m
1.350000 1.799994 l
1.350000 -1.800005 l
16.650002 -1.800005 l
16.650002 1.799994 l
h
9.987195 8.300135 m
2.337195 13.317634 l
0.362805 10.307354 l
8.012806 5.289854 l
9.987195 8.300135 l
h
1.350000 -0.450006 m
16.650002 -0.450006 l
16.650002 3.149995 l
1.350000 3.149995 l
1.350000 -0.450006 l
h
18.450001 1.349995 m
18.450001 11.812494 l
14.850000 11.812494 l
14.850000 1.349995 l
18.450001 1.349995 l
h
15.662806 13.317634 m
8.012806 8.300135 l
9.987195 5.289854 l
17.637196 10.307354 l
15.662806 13.317634 l
h
9.979715 6.634975 m
17.539715 11.539974 l
15.580286 14.560014 l
8.020286 9.655014 l
9.979715 6.634975 l
h
16.560001 14.849994 m
1.462500 14.849994 l
1.462500 11.249994 l
16.560001 11.249994 l
16.560001 14.849994 l
h
0.480730 11.541310 m
8.018230 6.636310 l
9.981771 9.653678 l
2.444270 14.558678 l
0.480730 11.541310 l
h
3.150000 11.812494 m
3.150000 13.049994 l
-0.450000 13.049994 l
-0.450000 11.812494 l
3.150000 11.812494 l
h
-0.450000 13.049994 m
-0.450000 1.349995 l
3.150000 1.349995 l
3.150000 13.049994 l
-0.450000 13.049994 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
6312
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 18.000000 14.399994 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000006402 00000 n
0000006425 00000 n
0000006598 00000 n
0000006672 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
6731
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_facebook_trackers.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,468 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.000000 0.000000 0.000000 scn
15.925000 0.000000 m
4.825000 0.000000 l
4.825000 12.799999 l
11.775001 20.000000 l
12.750000 19.225000 l
12.850000 19.141666 12.925000 19.025000 12.975000 18.875000 c
13.025001 18.725000 13.050000 18.541666 13.050000 18.325001 c
13.050000 18.075001 l
11.925000 12.799999 l
19.400000 12.799999 l
19.800001 12.799999 20.150000 12.650000 20.450001 12.350000 c
20.750000 12.049999 20.900000 11.700000 20.900000 11.300000 c
20.900000 9.254025 l
20.900000 9.134675 20.912500 9.012500 20.937500 8.887500 c
20.962500 8.762500 20.950001 8.641666 20.900000 8.525000 c
17.750000 1.275000 l
17.602034 0.920834 17.355410 0.619791 17.010126 0.371874 c
16.664860 0.123959 16.303150 0.000000 15.925000 0.000000 c
h
6.325000 1.500000 m
16.250000 1.500000 l
19.400000 8.974999 l
19.400000 11.300000 l
10.075000 11.300000 l
11.400001 17.525000 l
6.325000 12.174999 l
6.325000 1.500000 l
h
4.825000 12.799999 m
4.825000 11.300000 l
1.500000 11.300000 l
1.500000 1.500000 l
4.825000 1.500000 l
4.825000 0.000000 l
0.000000 0.000000 l
0.000000 12.799999 l
4.825000 12.799999 l
h
f
n
Q
15.925000 0.000000 m
4.825000 0.000000 l
4.825000 12.799999 l
11.775001 20.000000 l
12.750000 19.225000 l
12.850000 19.141666 12.925000 19.025000 12.975000 18.875000 c
13.025001 18.725000 13.050000 18.541666 13.050000 18.325001 c
13.050000 18.075001 l
11.925000 12.799999 l
19.400000 12.799999 l
19.800001 12.799999 20.150000 12.650000 20.450001 12.350000 c
20.750000 12.049999 20.900000 11.700000 20.900000 11.300000 c
20.900000 9.254025 l
20.900000 9.134675 20.912500 9.012500 20.937500 8.887500 c
20.962500 8.762500 20.950001 8.641666 20.900000 8.525000 c
17.750000 1.275000 l
17.602034 0.920834 17.355410 0.619791 17.010126 0.371874 c
16.664860 0.123959 16.303150 0.000000 15.925000 0.000000 c
h
6.325000 1.500000 m
16.250000 1.500000 l
19.400000 8.974999 l
19.400000 11.300000 l
10.075000 11.300000 l
11.400001 17.525000 l
6.325000 12.174999 l
6.325000 1.500000 l
h
4.825000 12.799999 m
4.825000 11.300000 l
1.500000 11.300000 l
1.500000 1.500000 l
4.825000 1.500000 l
4.825000 0.000000 l
0.000000 0.000000 l
0.000000 12.799999 l
4.825000 12.799999 l
h
W*
n
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.000000 0.435294 1.000000 scn
11.775001 20.000000 m
12.895040 21.409082 l
11.615291 22.426319 l
10.479922 21.250109 l
11.775001 20.000000 l
h
12.750000 19.225000 m
13.902332 20.607798 l
13.886338 20.621126 l
13.870040 20.634081 l
12.750000 19.225000 l
h
13.050000 18.075001 m
14.810410 17.699556 l
14.850000 17.885191 l
14.850000 18.075001 l
13.050000 18.075001 l
h
11.925000 12.799999 m
10.164591 13.175443 l
9.700633 11.000000 l
11.925000 11.000000 l
11.925000 12.799999 l
h
20.900000 8.525000 m
22.550928 7.807700 l
22.554461 7.815945 l
20.900000 8.525000 l
h
17.750000 1.275000 m
16.099092 1.992290 l
16.094027 1.980627 l
16.089125 1.968895 l
17.750000 1.275000 l
h
17.010126 0.371874 m
15.960296 1.834015 l
15.960262 1.833992 l
17.010126 0.371874 l
h
6.325000 1.500000 m
4.525000 1.500000 l
4.525000 -0.300001 l
6.325000 -0.300001 l
6.325000 1.500000 l
h
16.250000 1.500000 m
16.250000 -0.300001 l
17.444767 -0.300001 l
17.908735 0.801001 l
16.250000 1.500000 l
h
19.400000 8.974999 m
21.058735 8.276001 l
21.200001 8.611226 l
21.200001 8.974999 l
19.400000 8.974999 l
h
19.400000 11.300000 m
21.200001 11.300000 l
21.200001 13.100000 l
19.400000 13.100000 l
19.400000 11.300000 l
h
10.075000 11.300000 m
8.314440 11.674738 l
7.851544 9.500000 l
10.075000 9.500000 l
10.075000 11.300000 l
h
11.400001 17.525000 m
13.160561 17.150263 l
14.490488 23.398417 l
10.094088 18.763786 l
11.400001 17.525000 l
h
6.325000 12.174999 m
5.019087 13.413786 l
4.525000 12.892925 l
4.525000 12.174999 l
6.325000 12.174999 l
h
4.825000 11.300000 m
4.825000 9.500000 l
6.625000 9.500000 l
6.625000 11.300000 l
4.825000 11.300000 l
h
1.500000 11.300000 m
1.500000 13.100000 l
-0.300000 13.100000 l
-0.300000 11.300000 l
1.500000 11.300000 l
h
1.500000 1.500000 m
-0.300000 1.500000 l
-0.300000 -0.300001 l
1.500000 -0.300001 l
1.500000 1.500000 l
h
4.825000 1.500000 m
6.625000 1.500000 l
6.625000 3.299999 l
4.825000 3.299999 l
4.825000 1.500000 l
h
0.000000 0.000000 m
-1.800000 0.000000 l
-1.800000 -1.800001 l
0.000000 -1.800001 l
0.000000 0.000000 l
h
0.000000 12.799999 m
0.000000 14.600000 l
-1.800000 14.600000 l
-1.800000 12.799999 l
0.000000 12.799999 l
h
15.925000 1.799999 m
4.825000 1.799999 l
4.825000 -1.800001 l
15.925000 -1.800001 l
15.925000 1.799999 l
h
6.625000 0.000000 m
6.625000 12.799999 l
3.025000 12.799999 l
3.025000 0.000000 l
6.625000 0.000000 l
h
6.120078 11.549891 m
13.070078 18.749891 l
10.479922 21.250109 l
3.529922 14.050110 l
6.120078 11.549891 l
h
10.654961 18.590918 m
11.629961 17.815918 l
13.870040 20.634081 l
12.895040 21.409082 l
10.654961 18.590918 l
h
11.597669 17.842201 m
11.390246 18.015053 11.300418 18.206646 11.267370 18.305790 c
14.682631 19.444210 l
14.549582 19.843353 14.309754 20.268280 13.902332 20.607798 c
11.597669 17.842201 l
h
11.267370 18.305790 m
11.259361 18.329817 11.254526 18.348635 11.251715 18.361128 c
11.248905 18.373619 11.247894 18.380779 11.247756 18.381796 c
11.247615 18.382830 11.248207 18.378748 11.248818 18.368969 c
11.249428 18.359213 11.250000 18.344694 11.250000 18.325001 c
14.850000 18.325001 l
14.850000 18.668697 14.811775 19.056776 14.682631 19.444210 c
11.267370 18.305790 l
h
11.250000 18.325001 m
11.250000 18.075001 l
14.850000 18.075001 l
14.850000 18.325001 l
11.250000 18.325001 l
h
11.289591 18.450443 m
10.164591 13.175443 l
13.685410 12.424557 l
14.810410 17.699556 l
11.289591 18.450443 l
h
11.925000 11.000000 m
19.400000 11.000000 l
19.400000 14.600000 l
11.925000 14.600000 l
11.925000 11.000000 l
h
19.400000 11.000000 m
19.368757 11.000000 19.313738 11.007199 19.253445 11.033039 c
19.195234 11.057986 19.170673 11.083742 19.177208 11.077208 c
21.722792 13.622792 l
21.107952 14.237632 20.308596 14.600000 19.400000 14.600000 c
19.400000 11.000000 l
h
19.177208 11.077208 m
19.183743 11.070674 19.157988 11.095234 19.133039 11.153445 c
19.107201 11.213737 19.100000 11.268758 19.100000 11.300000 c
22.700001 11.300000 l
22.700001 12.208596 22.337633 13.007952 21.722792 13.622792 c
19.177208 11.077208 l
h
19.100000 11.300000 m
19.100000 9.254025 l
22.700001 9.254025 l
22.700001 11.300000 l
19.100000 11.300000 l
h
19.100000 9.254025 m
19.100000 9.008410 19.125776 8.767887 19.172455 8.534491 c
22.702545 9.240509 l
22.699224 9.257113 22.700001 9.260941 22.700001 9.254025 c
19.100000 9.254025 l
h
19.172455 8.534491 m
19.126373 8.764904 19.151443 9.014497 19.245539 9.234055 c
22.554461 7.815945 l
22.748558 8.268836 22.798628 8.760096 22.702545 9.240509 c
19.172455 8.534491 l
h
19.249094 9.242290 m
16.099092 1.992290 l
19.400908 0.557709 l
22.550907 7.807709 l
19.249094 9.242290 l
h
16.089125 1.968895 m
16.083267 1.954876 16.064671 1.908958 15.960296 1.834015 c
18.059958 -1.090265 l
18.646147 -0.669376 19.120800 -0.113211 19.410877 0.581104 c
16.089125 1.968895 l
h
15.960262 1.833992 m
15.914719 1.801289 15.893434 1.794754 15.896347 1.795752 c
15.897339 1.796091 15.901518 1.797396 15.908098 1.798498 c
15.914706 1.799604 15.920696 1.799999 15.925000 1.799999 c
15.925000 -1.800001 l
16.725832 -1.800001 17.448351 -1.529427 18.059990 -1.090242 c
15.960262 1.833992 l
h
6.325000 -0.300001 m
16.250000 -0.300001 l
16.250000 3.299999 l
6.325000 3.299999 l
6.325000 -0.300001 l
h
17.908735 0.801001 m
21.058735 8.276001 l
17.741266 9.673999 l
14.591266 2.198997 l
17.908735 0.801001 l
h
21.200001 8.974999 m
21.200001 11.300000 l
17.600000 11.300000 l
17.600000 8.974999 l
21.200001 8.974999 l
h
19.400000 13.100000 m
10.075000 13.100000 l
10.075000 9.500000 l
19.400000 9.500000 l
19.400000 13.100000 l
h
11.835560 10.925262 m
13.160561 17.150263 l
9.639441 17.899738 l
8.314440 11.674738 l
11.835560 10.925262 l
h
10.094088 18.763786 m
5.019087 13.413786 l
7.630913 10.936213 l
12.705913 16.286213 l
10.094088 18.763786 l
h
4.525000 12.174999 m
4.525000 1.500000 l
8.125000 1.500000 l
8.125000 12.174999 l
4.525000 12.174999 l
h
3.025000 12.799999 m
3.025000 11.300000 l
6.625000 11.300000 l
6.625000 12.799999 l
3.025000 12.799999 l
h
4.825000 13.100000 m
1.500000 13.100000 l
1.500000 9.500000 l
4.825000 9.500000 l
4.825000 13.100000 l
h
-0.300000 11.300000 m
-0.300000 1.500000 l
3.300000 1.500000 l
3.300000 11.300000 l
-0.300000 11.300000 l
h
1.500000 -0.300001 m
4.825000 -0.300001 l
4.825000 3.299999 l
1.500000 3.299999 l
1.500000 -0.300001 l
h
3.025000 1.500000 m
3.025000 0.000000 l
6.625000 0.000000 l
6.625000 1.500000 l
3.025000 1.500000 l
h
4.825000 1.799999 m
0.000000 1.799999 l
0.000000 -1.800001 l
4.825000 -1.800001 l
4.825000 1.799999 l
h
1.800000 0.000000 m
1.800000 12.799999 l
-1.800000 12.799999 l
-1.800000 0.000000 l
1.800000 0.000000 l
h
0.000000 11.000000 m
4.825000 11.000000 l
4.825000 14.600000 l
0.000000 14.600000 l
0.000000 11.000000 l
h
f
n
Q
Q
endstream
endobj
3 0 obj
8991
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 20.950012 20.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000009081 00000 n
0000009104 00000 n
0000009277 00000 n
0000009351 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
9410
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_game_marketing.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,137 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 0.333333 0.000000 scn
2.050773 -0.000008 m
1.369951 -0.000008 0.836939 0.228426 0.451737 0.685294 c
0.066535 1.142161 -0.072317 1.773713 0.035181 2.579950 c
1.325160 11.582926 l
1.468491 12.532494 1.911921 13.347689 2.655451 14.028511 c
3.398980 14.709332 4.245529 15.049744 5.195096 15.049744 c
16.831779 15.049744 l
17.781347 15.049744 18.627895 14.709332 19.371426 14.028511 c
20.114954 13.347689 20.558384 12.532494 20.701715 11.582926 c
21.964819 2.579950 l
22.072317 1.773713 21.933466 1.142161 21.548264 0.685294 c
21.163061 0.228426 20.630051 -0.000008 19.949228 -0.000008 c
19.537151 -0.000008 19.187782 0.067179 18.901119 0.201551 c
18.614458 0.335925 18.372587 0.501651 18.175507 0.698731 c
15.380553 3.493685 l
6.619448 3.493685 l
3.824494 0.698731 l
3.627414 0.501651 3.385543 0.335925 3.098881 0.201551 c
2.812219 0.067179 2.462850 -0.000008 2.050773 -0.000008 c
h
2.534515 1.719964 m
5.920710 5.106158 l
16.079292 5.106158 l
19.465487 1.719964 l
19.555067 1.630383 19.716314 1.549759 19.949228 1.478093 c
20.110476 1.478093 20.231411 1.558717 20.312035 1.719964 c
20.392658 1.881211 20.415054 2.042459 20.379221 2.203706 c
19.089243 11.314180 l
18.999660 11.941254 18.735394 12.451870 18.296442 12.846030 c
17.857491 13.240191 17.369270 13.437270 16.831779 13.437270 c
5.168222 13.437270 l
4.630731 13.437270 4.142509 13.240191 3.703558 12.846030 c
3.264607 12.451870 3.000341 11.941254 2.910759 11.314180 c
1.620780 2.203706 l
1.584947 2.042459 1.607343 1.881211 1.687966 1.719964 c
1.768590 1.558717 1.889526 1.478093 2.050773 1.478093 c
2.176188 1.478093 2.337435 1.558717 2.534515 1.719964 c
h
16.912403 6.449886 m
17.199064 6.449886 17.449894 6.557384 17.664890 6.772381 c
17.879887 6.987377 17.987385 7.238206 17.987385 7.524868 c
17.987385 7.811530 17.879887 8.062359 17.664890 8.277355 c
17.449894 8.492352 17.199064 8.599850 16.912403 8.599850 c
16.625740 8.599850 16.374912 8.492352 16.159916 8.277355 c
15.944919 8.062359 15.837420 7.811530 15.837420 7.524868 c
15.837420 7.238206 15.944919 6.987377 16.159916 6.772381 c
16.374912 6.557384 16.625740 6.449886 16.912403 6.449886 c
h
14.628065 9.943579 m
14.914727 9.943579 15.165557 10.051077 15.380553 10.266073 c
15.595550 10.481070 15.703048 10.731898 15.703048 11.018560 c
15.703048 11.305223 15.595550 11.556051 15.380553 11.771048 c
15.165557 11.986044 14.914727 12.093542 14.628065 12.093542 c
14.341404 12.093542 14.090574 11.986044 13.875578 11.771048 c
13.660582 11.556051 13.553083 11.305223 13.553083 11.018560 c
13.553083 10.731898 13.660582 10.481070 13.875578 10.266073 c
14.090574 10.051077 14.341404 9.943579 14.628065 9.943579 c
h
6.162580 6.584259 m
7.506308 6.584259 l
7.506308 8.599850 l
9.521899 8.599850 l
9.521899 9.943579 l
7.506308 9.943579 l
7.506308 11.959169 l
6.162580 11.959169 l
6.162580 9.943579 l
4.146989 9.943579 l
4.146989 8.599850 l
6.162580 8.599850 l
6.162580 6.584259 l
h
f
n
Q
endstream
endobj
3 0 obj
2991
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 22.000000 15.049744 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000003081 00000 n
0000003104 00000 n
0000003277 00000 n
0000003351 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
3410
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_lock.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,111 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.592157 0.611765 0.619608 scn
1.975000 0.000000 m
1.425000 0.000000 0.958333 0.195835 0.575000 0.587502 c
0.191667 0.979168 -0.000000 1.441668 0.000000 1.975000 c
0.000000 12.575001 l
0.000000 13.125001 0.191667 13.595834 0.575000 13.987501 c
0.958333 14.379168 1.425000 14.575001 1.975000 14.575001 c
3.450000 14.575001 l
3.450000 16.650000 l
3.450000 18.033333 3.925000 19.204166 4.875000 20.162500 c
5.825000 21.120834 6.983335 21.600000 8.350001 21.600000 c
9.716668 21.600000 10.875002 21.120834 11.825002 20.162500 c
12.775002 19.204166 13.250002 18.033333 13.250002 16.650000 c
13.250002 14.575001 l
14.725002 14.575001 l
15.275002 14.575001 15.745836 14.379168 16.137503 13.987501 c
16.529169 13.595834 16.725002 13.125001 16.725002 12.575001 c
16.725002 1.975000 l
16.725002 1.441668 16.529169 0.979168 16.137503 0.587502 c
15.745836 0.195835 15.275002 0.000000 14.725002 0.000000 c
1.975000 0.000000 l
h
1.975000 1.975000 m
14.725002 1.975000 l
14.725002 12.575001 l
1.975000 12.575001 l
1.975000 1.975000 l
h
8.350001 5.350000 m
8.883335 5.350000 9.337501 5.533335 9.712501 5.900002 c
10.087501 6.266668 10.275001 6.708334 10.275001 7.225000 c
10.275001 7.725000 10.087501 8.179167 9.712501 8.587501 c
9.337501 8.995834 8.883335 9.200001 8.350001 9.200001 c
7.816668 9.200001 7.362501 8.995834 6.987501 8.587501 c
6.612501 8.179167 6.425001 7.725000 6.425001 7.225000 c
6.425001 6.708334 6.612501 6.266668 6.987501 5.900002 c
7.362501 5.533335 7.816668 5.350000 8.350001 5.350000 c
h
5.425000 14.575001 m
11.275001 14.575001 l
11.275001 16.650000 l
11.275001 17.483334 10.991667 18.187500 10.425000 18.762501 c
9.858334 19.337500 9.166668 19.625000 8.350001 19.625000 c
7.533335 19.625000 6.841668 19.337500 6.275001 18.762501 c
5.708334 18.187500 5.425000 17.483334 5.425000 16.650000 c
5.425000 14.575001 l
h
f
n
Q
endstream
endobj
3 0 obj
1917
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 16.725006 21.600000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002007 00000 n
0000002030 00000 n
0000002203 00000 n
0000002277 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2336
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_marketing.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,114 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.313726 0.756863 0.976471 scn
19.500000 8.700014 m
19.500000 10.500013 l
24.000000 10.500013 l
24.000000 8.700014 l
19.500000 8.700014 l
h
21.000000 0.000015 m
17.369999 2.700014 l
18.449999 4.140015 l
22.080000 1.440014 l
21.000000 0.000015 l
h
18.539999 15.090014 m
17.459999 16.530012 l
21.000000 19.200012 l
22.080000 17.760012 l
18.539999 15.090014 l
h
3.900000 1.200014 m
3.900000 6.000014 l
1.800000 6.000014 l
1.305000 6.000014 0.881250 6.176264 0.528750 6.528764 c
0.176250 6.881264 0.000000 7.305014 0.000000 7.800014 c
0.000000 11.400013 l
0.000000 11.895014 0.176250 12.318764 0.528750 12.671263 c
0.881250 13.023764 1.305000 13.200013 1.800000 13.200013 c
7.200000 13.200013 l
13.200000 16.800013 l
13.200000 2.400015 l
7.200000 6.000014 l
5.700000 6.000014 l
5.700000 1.200014 l
3.900000 1.200014 l
h
14.400000 5.580014 m
14.400000 13.620013 l
14.940000 13.140013 15.375000 12.555014 15.705000 11.865013 c
16.035000 11.175014 16.199999 10.420013 16.199999 9.600014 c
16.199999 8.780014 16.035000 8.025014 15.705000 7.335014 c
15.375000 6.645014 14.940000 6.060014 14.400000 5.580014 c
h
1.800000 11.400013 m
1.800000 7.800014 l
7.680000 7.800014 l
11.400000 5.580014 l
11.400000 13.620013 l
7.680000 11.400013 l
1.800000 11.400013 l
h
f
n
Q
endstream
endobj
3 0 obj
1344
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 24.000000 19.200012 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001434 00000 n
0000001457 00000 n
0000001630 00000 n
0000001704 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1763
%%EOF

View File

@@ -0,0 +1,6 @@
{
"info" : {
"author" : "xcode",
"version" : 1
}
}

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_activity.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,110 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 0.156863 0.294118 scn
2.450000 10.449999 m
0.000000 12.250000 l
9.400001 27.250000 l
15.378551 20.250000 l
23.350000 33.150002 l
28.800001 25.049999 l
28.266666 24.983334 27.750000 24.875000 27.250000 24.725000 c
26.750000 24.574999 26.250000 24.400000 25.750000 24.199999 c
23.500000 27.650000 l
15.872149 15.199999 l
9.800000 22.250000 l
2.450000 10.449999 l
h
41.850002 0.000000 m
35.150002 6.700001 l
34.450001 6.200001 33.691666 5.816666 32.875000 5.549999 c
32.058334 5.283333 31.216667 5.149998 30.350000 5.149998 c
27.988901 5.149998 25.981951 5.976967 24.329151 7.630898 c
22.676384 9.284798 21.850000 11.293133 21.850000 13.655899 c
21.850000 16.018631 22.676966 18.025000 24.330900 19.674999 c
25.984800 21.324999 27.993134 22.150000 30.355900 22.150000 c
32.718632 22.150000 34.725002 21.323616 36.375000 19.670849 c
38.025002 18.018049 38.850002 16.011099 38.850002 13.650000 c
38.850002 12.783333 38.708332 11.941666 38.424999 11.125000 c
38.141666 10.308332 37.766666 9.525867 37.299999 8.777599 c
44.000000 2.149998 l
41.850002 0.000000 l
h
30.342951 8.149998 m
31.880983 8.149998 33.183334 8.680984 34.250000 9.742950 c
35.316666 10.804916 35.850002 12.104918 35.850002 13.642950 c
35.850002 15.180983 35.319016 16.483334 34.257050 17.549999 c
33.195084 18.616667 31.895082 19.150000 30.357050 19.150000 c
28.819017 19.150000 27.516666 18.619017 26.450001 17.557049 c
25.383333 16.495083 24.850000 15.195082 24.850000 13.657049 c
24.850000 12.119017 25.380983 10.816666 26.442951 9.750000 c
27.504917 8.683334 28.804918 8.149998 30.342951 8.149998 c
h
34.049999 24.549999 m
33.549999 24.750000 33.033333 24.883333 32.500000 24.949999 c
31.966667 25.016666 31.416668 25.083334 30.850000 25.150000 c
41.549999 42.000000 l
44.000000 40.200001 l
34.049999 24.549999 l
h
f
n
Q
endstream
endobj
3 0 obj
1886
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 44.000000 42.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001976 00000 n
0000001999 00000 n
0000002172 00000 n
0000002246 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2305
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_configure_blocking.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,127 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.305882 0.298039 0.815686 scn
3.000000 0.000000 m
2.175000 0.000000 1.468750 0.293751 0.881250 0.881248 c
0.293750 1.468750 0.000000 2.174999 0.000000 3.000000 c
0.000000 41.000000 l
0.000000 41.825001 0.293750 42.531250 0.881250 43.118752 c
1.468750 43.706249 2.175000 44.000000 3.000000 44.000000 c
25.000000 44.000000 l
25.825001 44.000000 26.531250 43.706249 27.118750 43.118752 c
27.706251 42.531250 28.000000 41.825001 28.000000 41.000000 c
28.000000 33.700001 l
25.000000 33.700001 l
25.000000 36.500000 l
3.000000 36.500000 l
3.000000 7.500000 l
25.000000 7.500000 l
25.000000 10.299999 l
28.000000 10.299999 l
28.000000 3.000000 l
28.000000 2.174999 27.706251 1.468750 27.118750 0.881248 c
26.531250 0.293751 25.825001 0.000000 25.000000 0.000000 c
3.000000 0.000000 l
h
3.000000 3.000000 m
25.000000 3.000000 l
25.000000 4.500000 l
3.000000 4.500000 l
3.000000 3.000000 l
h
26.000000 14.000000 m
23.800001 14.000000 21.916668 14.783333 20.350000 16.350000 c
18.783333 17.916666 18.000000 19.799999 18.000000 22.000000 c
18.000000 24.199999 18.783333 26.083334 20.350000 27.650000 c
21.916668 29.216667 23.800001 30.000000 26.000000 30.000000 c
28.200001 30.000000 30.083334 29.216667 31.650000 27.650000 c
33.216667 26.083334 34.000000 24.199999 34.000000 22.000000 c
34.000000 19.799999 33.216667 17.916666 31.650000 16.350000 c
30.083334 14.783333 28.200001 14.000000 26.000000 14.000000 c
h
26.000000 16.500000 m
26.525700 16.500000 27.040466 16.566666 27.544300 16.699999 c
28.048100 16.833332 28.500000 17.049999 28.900000 17.350000 c
21.350000 24.900000 l
21.083334 24.466667 20.875000 24.009050 20.725000 23.527151 c
20.575001 23.045252 20.500000 22.552866 20.500000 22.049999 c
20.500000 20.516666 21.031668 19.208332 22.095001 18.125000 c
23.158335 17.041666 24.460001 16.500000 26.000000 16.500000 c
h
30.700001 19.100000 m
30.966667 19.533333 31.166668 19.996433 31.300001 20.489300 c
31.433334 20.982134 31.500000 21.485699 31.500000 22.000000 c
31.500000 23.539999 30.968332 24.841667 29.904999 25.905001 c
28.841665 26.968334 27.540001 27.500000 26.000000 27.500000 c
25.474300 27.500000 24.959534 27.433332 24.455702 27.299999 c
23.951900 27.166666 23.500000 26.966667 23.100000 26.699999 c
30.700001 19.100000 l
h
3.000000 39.500000 m
25.000000 39.500000 l
25.000000 41.000000 l
3.000000 41.000000 l
3.000000 39.500000 l
h
f
n
Q
endstream
endobj
3 0 obj
2444
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 34.000000 44.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002534 00000 n
0000002557 00000 n
0000002730 00000 n
0000002804 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2863
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_globe.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,118 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.180392 0.752941 0.309804 scn
20.000000 0.000000 m
17.233334 0.000000 14.633333 0.524998 12.200000 1.575001 c
9.766666 2.625000 7.650000 4.049999 5.850000 5.849998 c
4.050000 7.649998 2.625000 9.766666 1.575000 12.199999 c
0.525000 14.633333 0.000000 17.233334 0.000000 20.000000 c
0.000000 22.766666 0.525000 25.366667 1.575000 27.799999 c
2.625000 30.233334 4.050000 32.349998 5.850000 34.150002 c
7.650000 35.950001 9.766666 37.375000 12.200000 38.424999 c
14.633333 39.474998 17.233334 40.000000 20.000000 40.000000 c
22.766666 40.000000 25.366667 39.474998 27.800001 38.424999 c
30.233334 37.375000 32.350002 35.950001 34.150002 34.150002 c
35.950001 32.349998 37.375000 30.233334 38.424999 27.799999 c
39.475002 25.366667 40.000000 22.766666 40.000000 20.000000 c
40.000000 17.233334 39.475002 14.633333 38.424999 12.199999 c
37.375000 9.766666 35.950001 7.649998 34.150002 5.849998 c
32.350002 4.049999 30.233334 2.625000 27.800001 1.575001 c
25.366667 0.524998 22.766666 0.000000 20.000000 0.000000 c
h
17.850000 3.049999 m
17.850000 7.149998 l
16.683334 7.149998 15.700000 7.583332 14.900001 8.449999 c
14.100000 9.316666 13.700000 10.333332 13.700000 11.500000 c
13.700000 13.699999 l
3.450000 23.949999 l
3.283333 23.283333 3.166667 22.625000 3.100000 21.975000 c
3.033333 21.324999 3.000000 20.666666 3.000000 20.000000 c
3.000000 15.666666 4.408333 11.883333 7.225000 8.650000 c
10.041667 5.416668 13.583333 3.549999 17.850000 3.049999 c
h
32.549999 8.449999 m
33.283333 9.250000 33.924999 10.100000 34.475002 11.000000 c
35.025002 11.900000 35.491669 12.841667 35.875000 13.824999 c
36.258335 14.808332 36.541668 15.816666 36.725002 16.850000 c
36.908333 17.883333 37.000000 18.933332 37.000000 20.000000 c
37.000000 23.533333 36.033333 26.741667 34.100002 29.625000 c
32.166668 32.508331 29.583334 34.616669 26.350000 35.950001 c
26.350000 35.049999 l
26.350000 33.883331 25.950001 32.866669 25.150000 32.000000 c
24.350000 31.133333 23.366667 30.700001 22.200001 30.700001 c
17.850000 30.700001 l
17.850000 26.349998 l
17.850000 25.783333 17.625000 25.316666 17.175001 24.950001 c
16.725000 24.583332 16.216667 24.400000 15.650001 24.400000 c
11.500000 24.400000 l
11.500000 20.000000 l
24.400000 20.000000 l
24.966667 20.000000 25.433334 19.783333 25.800001 19.350000 c
26.166668 18.916666 26.350000 18.416666 26.350000 17.850000 c
26.350000 11.500000 l
28.500000 11.500000 l
29.466667 11.500000 30.316668 11.216667 31.050001 10.650000 c
31.783335 10.083332 32.283333 9.350000 32.549999 8.449999 c
h
f
n
Q
endstream
endobj
3 0 obj
2612
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 40.000000 40.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002702 00000 n
0000002725 00000 n
0000002898 00000 n
0000002972 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
3031
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_import.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,90 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 0.670588 0.000000 scn
3.000000 0.000000 m
2.200000 0.000000 1.500000 0.299999 0.900000 0.900000 c
0.300000 1.500000 0.000000 2.199999 0.000000 3.000000 c
0.000000 10.150000 l
3.000000 10.150000 l
3.000000 3.000000 l
29.000000 3.000000 l
29.000000 10.150000 l
32.000000 10.150000 l
32.000000 3.000000 l
32.000000 2.199999 31.700001 1.500000 31.100000 0.900000 c
30.500000 0.299999 29.800001 0.000000 29.000000 0.000000 c
3.000000 0.000000 l
h
14.500000 7.650000 m
14.500000 26.200001 l
8.500000 20.200001 l
6.350000 22.349998 l
16.000000 32.000000 l
25.650000 22.349998 l
23.500000 20.200001 l
17.500000 26.200001 l
17.500000 7.650000 l
14.500000 7.650000 l
h
f
n
Q
endstream
endobj
3 0 obj
762
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 32.000000 32.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000000852 00000 n
0000000874 00000 n
0000001047 00000 n
0000001121 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1180
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_personalized_blocking.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,113 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
0.313726 0.756863 0.976471 scn
15.350000 0.000000 m
15.350000 11.250000 l
18.350000 11.250000 l
18.350000 7.100000 l
36.000000 7.100000 l
36.000000 4.100000 l
18.350000 4.100000 l
18.350000 0.000000 l
15.350000 0.000000 l
h
0.000000 4.100000 m
0.000000 7.100000 l
12.350000 7.100000 l
12.350000 4.100000 l
0.000000 4.100000 l
h
9.350000 12.400000 m
9.350000 16.500000 l
0.000000 16.500000 l
0.000000 19.500000 l
9.350000 19.500000 l
9.350000 23.700001 l
12.350000 23.700001 l
12.350000 12.400000 l
9.350000 12.400000 l
h
15.350000 16.500000 m
15.350000 19.500000 l
36.000000 19.500000 l
36.000000 16.500000 l
15.350000 16.500000 l
h
23.650000 24.750000 m
23.650000 36.000000 l
26.650000 36.000000 l
26.650000 31.900000 l
36.000000 31.900000 l
36.000000 28.900000 l
26.650000 28.900000 l
26.650000 24.750000 l
23.650000 24.750000 l
h
0.000000 28.900000 m
0.000000 31.900000 l
20.650000 31.900000 l
20.650000 28.900000 l
0.000000 28.900000 l
h
f
n
Q
endstream
endobj
3 0 obj
1036
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 36.000000 36.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000001126 00000 n
0000001149 00000 n
0000001322 00000 n
0000001396 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
1455
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_whitelists.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,118 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.000000 cm
1.000000 0.541176 0.000000 scn
3.000000 0.000000 m
2.175000 0.000000 1.468750 0.293751 0.881250 0.881248 c
0.293750 1.468750 0.000000 2.174999 0.000000 3.000000 c
0.000000 33.000000 l
0.000000 33.825001 0.293750 34.531250 0.881250 35.118752 c
1.468750 35.706249 2.175000 36.000000 3.000000 36.000000 c
13.250000 36.000000 l
13.416667 37.166668 13.950000 38.125000 14.850000 38.875000 c
15.750000 39.625000 16.800001 40.000000 18.000000 40.000000 c
19.200001 40.000000 20.250000 39.625000 21.150000 38.875000 c
22.050001 38.125000 22.583334 37.166668 22.750000 36.000000 c
33.000000 36.000000 l
33.825001 36.000000 34.531250 35.706249 35.118752 35.118752 c
35.706249 34.531250 36.000000 33.825001 36.000000 33.000000 c
36.000000 3.000000 l
36.000000 2.174999 35.706249 1.468750 35.118752 0.881248 c
34.531250 0.293751 33.825001 0.000000 33.000000 0.000000 c
3.000000 0.000000 l
h
3.000000 3.000000 m
33.000000 3.000000 l
33.000000 33.000000 l
3.000000 33.000000 l
3.000000 3.000000 l
h
8.000000 8.000000 m
21.650000 8.000000 l
21.650000 11.000000 l
8.000000 11.000000 l
8.000000 8.000000 l
h
8.000000 16.500000 m
28.000000 16.500000 l
28.000000 19.500000 l
8.000000 19.500000 l
8.000000 16.500000 l
h
8.000000 25.000000 m
28.000000 25.000000 l
28.000000 28.000000 l
8.000000 28.000000 l
8.000000 25.000000 l
h
18.000000 33.849998 m
18.466667 33.849998 18.875000 34.025002 19.225000 34.375000 c
19.575001 34.724998 19.750000 35.133331 19.750000 35.599998 c
19.750000 36.066666 19.575001 36.474998 19.225000 36.825001 c
18.875000 37.174999 18.466667 37.349998 18.000000 37.349998 c
17.533333 37.349998 17.125000 37.174999 16.775000 36.825001 c
16.425001 36.474998 16.250000 36.066666 16.250000 35.599998 c
16.250000 35.133331 16.425001 34.724998 16.775000 34.375000 c
17.125000 34.025002 17.533333 33.849998 18.000000 33.849998 c
h
f
n
Q
endstream
endobj
3 0 obj
1923
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 36.000000 40.000000 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002013 00000 n
0000002036 00000 n
0000002209 00000 n
0000002283 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2342
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_firewall.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,123 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 -0.038940 cm
0.000000 0.678431 0.905882 scn
9.368752 21.862000 m
9.194237 21.920187 9.005553 21.920187 8.831038 21.861998 c
0.583308 19.111998 l
0.236485 18.996359 0.002457 18.671904 0.002168 18.306311 c
0.001081 16.243475 l
0.000538 14.868362 -0.000004 12.805750 0.000000 10.055637 c
0.000004 6.883197 2.356120 4.369862 4.453098 2.738857 c
5.528415 1.902489 6.598883 1.248783 7.398052 0.804794 c
7.798634 0.582245 8.133549 0.411011 8.370125 0.294598 c
8.488472 0.236362 8.582383 0.191763 8.647791 0.161238 c
8.680501 0.145973 8.706099 0.134222 8.724077 0.126038 c
8.745275 0.116442 l
8.751473 0.113661 l
8.753452 0.112778 l
8.753727 0.112656 8.754677 0.112232 9.099898 0.888971 c
8.754677 0.112232 l
8.974457 0.014551 9.225331 0.014549 9.445113 0.112228 c
9.099898 0.888971 l
9.445113 0.112228 9.444839 0.112106 9.445113 0.112228 c
9.448316 0.113657 l
9.454515 0.116438 l
9.475712 0.126034 l
9.493691 0.134218 9.519290 0.145969 9.552000 0.161234 c
9.617410 0.191759 9.711323 0.236359 9.829673 0.294594 c
10.066255 0.411007 10.401177 0.582241 10.801768 0.804789 c
11.600957 1.248777 12.671450 1.902485 13.746792 2.738852 c
15.843817 4.369852 18.199993 6.883188 18.199993 10.055638 c
18.199993 12.805750 18.199451 14.868362 18.198910 16.243473 c
18.197826 18.305799 l
18.197538 18.671396 17.963507 18.996363 17.616680 19.112000 c
9.368752 21.862000 l
h
1.701082 16.242804 m
1.701782 17.692917 l
9.099901 20.159637 l
16.498211 17.692913 l
16.498909 16.242804 l
16.499146 15.644088 16.499382 14.915001 16.499573 14.055543 c
8.824856 16.660160 l
8.824856 15.094015 l
16.499844 12.489305 l
16.499937 11.748799 16.499992 10.937577 16.499992 10.055638 c
16.499992 9.977984 16.498024 9.900617 16.494143 9.823545 c
8.824856 12.426319 l
8.824856 10.860174 l
16.191282 8.360183 l
15.883361 7.509837 15.364548 6.707459 14.723963 5.966928 c
8.824856 8.102413 l
8.824856 6.523023 l
13.572360 4.804420 l
13.291318 4.553133 12.999986 4.311666 12.703099 4.080757 c
11.715919 3.312958 10.723887 2.706247 9.976183 2.290861 c
9.615200 2.090317 9.313493 1.935654 9.099903 1.830183 c
8.886319 1.935654 8.584622 2.090315 8.223654 2.290857 c
7.475968 2.706244 6.483963 3.312952 5.496806 4.080751 c
3.468838 5.658081 1.700004 7.728080 1.700001 10.055639 c
1.699997 12.805528 1.700539 14.867916 1.701082 16.242804 c
h
f*
n
Q
endstream
endobj
3 0 obj
2375
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 18.199997 21.866699 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002465 00000 n
0000002488 00000 n
0000002661 00000 n
0000002735 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
2794
%%EOF

View File

@@ -0,0 +1,15 @@
{
"images" : [
{
"filename" : "icn_vpn.pdf",
"idiom" : "universal"
}
],
"info" : {
"author" : "xcode",
"version" : 1
},
"properties" : {
"preserves-vector-representation" : true
}
}

View File

@@ -0,0 +1,138 @@
%PDF-1.7
1 0 obj
<< >>
endobj
2 0 obj
<< /Length 3 0 R >>
stream
/DeviceRGB CS
/DeviceRGB cs
q
1.000000 0.000000 -0.000000 1.000000 0.000000 0.149963 cm
0.600000 0.600000 0.600000 scn
11.849976 3.579506 m
11.546523 3.087814 11.212810 2.613092 10.849998 2.158247 c
9.058451 4.404251 7.976406 7.134955 7.744002 10.000012 c
13.955997 10.000012 l
13.945384 9.869171 13.932999 9.738609 13.918855 9.608362 c
14.005692 9.704117 14.098930 9.795992 14.198324 9.883459 c
14.901587 10.502329 15.855413 10.850006 16.849976 10.850006 c
17.780272 10.850006 18.674925 10.545810 19.362213 10.000012 c
19.961042 10.000012 l
19.944735 9.822983 19.923386 9.647412 19.897137 9.473449 c
20.351223 8.916369 20.599976 8.244474 20.599976 7.550006 c
20.599976 6.450006 l
20.770750 6.450006 l
21.368084 7.794821 21.700001 9.283655 21.700001 10.850012 c
21.700001 16.842300 16.842289 21.700012 10.850000 21.700012 c
4.857711 21.700012 0.000000 16.842300 0.000000 10.850012 c
0.000000 4.857723 4.857711 0.000011 10.850000 0.000011 c
11.345162 0.000011 11.832578 0.033180 12.310145 0.097420 c
12.277525 0.120823 12.246119 0.145763 12.216092 0.172188 c
11.981672 0.378477 11.849976 0.658268 11.849976 0.950006 c
11.849976 3.579506 l
h
8.918088 19.795685 m
5.061772 18.966837 2.108130 15.707682 1.738958 11.700012 c
6.039007 11.700012 l
6.250525 14.616378 7.249507 17.413153 8.918088 19.795685 c
h
12.781912 19.795685 m
14.450494 17.413153 15.449475 14.616378 15.660994 11.700012 c
19.961042 11.700012 l
19.591869 15.707682 16.638227 18.966839 12.781912 19.795685 c
h
13.955997 11.700012 m
13.723594 14.565069 12.641545 17.295773 10.849998 19.541779 c
9.058451 17.295773 7.976406 14.565069 7.744002 11.700012 c
13.955997 11.700012 l
h
6.039007 10.000012 m
1.738958 10.000012 l
2.108130 5.992342 5.061772 2.733187 8.918088 1.904341 c
7.249507 4.286873 6.250525 7.083647 6.039007 10.000012 c
h
f*
n
Q
q
1.000000 0.000000 -0.000000 1.000000 0.000000 11.849976 cm
0.600000 0.600000 0.600000 scn
16.849976 -1.850006 m
17.645624 -1.850006 18.408688 -2.166077 18.971296 -2.728685 c
19.533905 -3.291294 19.849976 -4.054357 19.849976 -4.850006 c
19.849976 -5.850006 l
20.849976 -5.850006 l
20.849976 -10.850006 l
20.849976 -11.115223 20.744619 -11.369577 20.557083 -11.557114 c
20.369547 -11.744650 20.115192 -11.850006 19.849976 -11.850006 c
13.849976 -11.850006 l
13.584759 -11.850006 13.330405 -11.744650 13.142869 -11.557114 c
12.955333 -11.369577 12.849976 -11.115223 12.849976 -10.850006 c
12.849976 -5.850006 l
13.849976 -5.850006 l
13.849976 -4.850006 l
13.849976 -4.054357 14.166046 -3.291294 14.728655 -2.728685 c
15.291264 -2.166077 16.054327 -1.850006 16.849976 -1.850006 c
h
16.849976 -3.850006 m
16.336975 -3.850006 15.849976 -4.300006 15.849976 -4.850006 c
15.849976 -5.850006 l
17.849976 -5.850006 l
17.849976 -4.850006 l
17.849976 -4.584789 17.744619 -4.330436 17.557083 -4.142900 c
17.369547 -3.955363 17.115192 -3.850006 16.849976 -3.850006 c
h
f
n
Q
endstream
endobj
3 0 obj
2865
endobj
4 0 obj
<< /Annots []
/Type /Page
/MediaBox [ 0.000000 0.000000 21.700012 21.849976 ]
/Resources 1 0 R
/Contents 2 0 R
/Parent 5 0 R
>>
endobj
5 0 obj
<< /Kids [ 4 0 R ]
/Count 1
/Type /Pages
>>
endobj
6 0 obj
<< /Pages 5 0 R
/Type /Catalog
>>
endobj
xref
0 7
0000000000 65535 f
0000000010 00000 n
0000000034 00000 n
0000002955 00000 n
0000002978 00000 n
0000003151 00000 n
0000003225 00000 n
trailer
<< /ID [ (some) (id) ]
/Root 6 0 R
/Size 7
>>
startxref
3284
%%EOF

View File

@@ -461,6 +461,15 @@ func addBlockedList(listName: String) {
defaults.set(encodedData, forKey: kUserBlockedLists)
}
func changeBlockedListName(from listName: String, to newListName: String) {
var data = getBlockedLists()
data.userBlockListsDefaults[newListName] = data.userBlockListsDefaults[listName]
data.userBlockListsDefaults[newListName]?.name = newListName
data.userBlockListsDefaults[listName] = nil
let encodedData = try? JSONEncoder().encode(data)
defaults.set(encodedData, forKey: kUserBlockedLists)
}
func deleteBlockedList(listName: String) {
var data = getBlockedLists()
data.userBlockListsDefaults[listName] = nil

View File

@@ -202,6 +202,10 @@
3DF2455423A2F8A400E46613 /* EmailSignUpViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2455323A2F8A400E46613 /* EmailSignUpViewController.swift */; };
3DF2455623A306DB00E46613 /* Loader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF2455523A306DB00E46613 /* Loader.swift */; };
3DF5D75F2633B1E100F77D79 /* amazon_trackers.txt in Resources */ = {isa = PBXBuildFile; fileRef = 3DF5D75E2633B1E100F77D79 /* amazon_trackers.txt */; };
4015B4F729EFD9AC004102E0 /* AccessLevelView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */; };
4015B4FD29F00DD8004102E0 /* LDVpnViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */; };
4015B4FF29F14C95004102E0 /* LDCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B4FE29F14C95004102E0 /* LDCardView.swift */; };
4015B50329F16E1A004102E0 /* LDConfigurationViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */; };
402D24B829D59B4400A5AB60 /* EmptyListsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24B729D59B4400A5AB60 /* EmptyListsView.swift */; };
402D24CB29D87B5A00A5AB60 /* ListsSubmenuView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24CA29D87B5A00A5AB60 /* ListsSubmenuView.swift */; };
402D24D429D87F4500A5AB60 /* CustomBlockedTableHeader.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D24D329D87F4500A5AB60 /* CustomBlockedTableHeader.swift */; };
@@ -218,7 +222,13 @@
402D252F29E6357700A5AB60 /* ListDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D252E29E6357700A5AB60 /* ListDetailViewController.swift */; };
402D253129E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253029E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift */; };
402D253329E6588000A5AB60 /* ListDescriptionViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253229E6588000A5AB60 /* ListDescriptionViewController.swift */; };
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */; };
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */; };
402D254829EE112E00A5AB60 /* LDFirewallViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */; };
402D254A29EE1C6E00A5AB60 /* DescriptionLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */; };
402D254C29EE32F300A5AB60 /* FirewallSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */; };
402D254E29EE598D00A5AB60 /* TrackersGroupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */; };
402D255029EE78D600A5AB60 /* OverallStatiscticView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */; };
40FC414329F74C7900BD7396 /* String+Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 40FC414229F74C7900BD7396 /* String+Extensions.swift */; };
4A86219093026DE70A097E79 /* Pods-LockdownTests-metadata.plist in Resources */ = {isa = PBXBuildFile; fileRef = 8DA68459884385F76BF86234 /* Pods-LockdownTests-metadata.plist */; };
54F0B1A0273200B0002F3630 /* FirewallController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DCA4F4022F252720017740D /* FirewallController.swift */; };
5647ACFEBBAB001FAE27CAF9 /* Pods-LockdownTunnel-settings-metadata.plist in Resources */ = {isa = PBXBuildFile; fileRef = 6F089C7008AB8F59DE3EA7BD /* Pods-LockdownTunnel-settings-metadata.plist */; };
@@ -616,6 +626,10 @@
3DF2455323A2F8A400E46613 /* EmailSignUpViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmailSignUpViewController.swift; sourceTree = "<group>"; };
3DF2455523A306DB00E46613 /* Loader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Loader.swift; sourceTree = "<group>"; };
3DF5D75E2633B1E100F77D79 /* amazon_trackers.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = amazon_trackers.txt; sourceTree = "<group>"; };
4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccessLevelView.swift; sourceTree = "<group>"; };
4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDVpnViewController.swift; sourceTree = "<group>"; };
4015B4FE29F14C95004102E0 /* LDCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDCardView.swift; sourceTree = "<group>"; };
4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDConfigurationViewController.swift; sourceTree = "<group>"; };
402D24B729D59B4400A5AB60 /* EmptyListsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmptyListsView.swift; sourceTree = "<group>"; };
402D24CA29D87B5A00A5AB60 /* ListsSubmenuView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ListsSubmenuView.swift; sourceTree = "<group>"; };
402D24D329D87F4500A5AB60 /* CustomBlockedTableHeader.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CustomBlockedTableHeader.swift; sourceTree = "<group>"; };
@@ -632,7 +646,13 @@
402D252E29E6357700A5AB60 /* ListDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListDetailViewController.swift; sourceTree = "<group>"; };
402D253029E635CB00A5AB60 /* DomainsBlockedTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainsBlockedTableViewCell.swift; sourceTree = "<group>"; };
402D253229E6588000A5AB60 /* ListDescriptionViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ListDescriptionViewController.swift; sourceTree = "<group>"; };
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONSerialization+Extentions.swift"; sourceTree = "<group>"; };
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "JSONSerialization+Extensions.swift"; sourceTree = "<group>"; };
402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LDFirewallViewController.swift; sourceTree = "<group>"; };
402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DescriptionLabel.swift; sourceTree = "<group>"; };
402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirewallSegmentedControl.swift; sourceTree = "<group>"; };
402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrackersGroupView.swift; sourceTree = "<group>"; };
402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OverallStatiscticView.swift; sourceTree = "<group>"; };
40FC414229F74C7900BD7396 /* String+Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Extensions.swift"; sourceTree = "<group>"; };
4CA426CE326B009F3E4493D1 /* Pods_Lockdown.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Lockdown.framework; sourceTree = BUILT_PRODUCTS_DIR; };
50F9BE503587CE4933CB7983 /* Pods-Lockdown-settings-metadata.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Pods-Lockdown-settings-metadata.plist"; path = "Settings.bundle/Pods-Lockdown-settings-metadata.plist"; sourceTree = "<group>"; };
50FB8ADA1D444FD9486F2D44 /* Pods-Lockdown Firewall Widget-settings-metadata.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "Pods-Lockdown Firewall Widget-settings-metadata.plist"; path = "LockdowniOS/Settings.bundle/Pods-Lockdown Firewall Widget-settings-metadata.plist"; sourceTree = "<group>"; };
@@ -1092,9 +1112,61 @@
name = Main;
sourceTree = "<group>";
};
4015B4F829F00D74004102E0 /* VPN */ = {
isa = PBXGroup;
children = (
4015B4FB29F00D8C004102E0 /* Models */,
4015B4FA29F00D87004102E0 /* Views */,
4015B4F929F00D7E004102E0 /* Controllers */,
);
name = VPN;
sourceTree = "<group>";
};
4015B4F929F00D7E004102E0 /* Controllers */ = {
isa = PBXGroup;
children = (
4015B4FC29F00DD8004102E0 /* LDVpnViewController.swift */,
);
name = Controllers;
sourceTree = "<group>";
};
4015B4FA29F00D87004102E0 /* Views */ = {
isa = PBXGroup;
children = (
4015B4FE29F14C95004102E0 /* LDCardView.swift */,
);
name = Views;
sourceTree = "<group>";
};
4015B4FB29F00D8C004102E0 /* Models */ = {
isa = PBXGroup;
children = (
);
name = Models;
sourceTree = "<group>";
};
4015B50029F16DD9004102E0 /* Configuration */ = {
isa = PBXGroup;
children = (
4015B50129F16DEB004102E0 /* Controllers */,
);
name = Configuration;
sourceTree = "<group>";
};
4015B50129F16DEB004102E0 /* Controllers */ = {
isa = PBXGroup;
children = (
4015B50229F16E1A004102E0 /* LDConfigurationViewController.swift */,
);
name = Controllers;
sourceTree = "<group>";
};
402D24CE29D87EF300A5AB60 /* Scenes */ = {
isa = PBXGroup;
children = (
4015B50029F16DD9004102E0 /* Configuration */,
4015B4F829F00D74004102E0 /* VPN */,
402D253E29EE10A100A5AB60 /* Firewall */,
402D252429E5840500A5AB60 /* Import Block List */,
402D251129E5142A00A5AB60 /* Edit Domains */,
402D24CF29D87EF900A5AB60 /* Configure Blocking */,
@@ -1168,6 +1240,7 @@
402D251A29E519B500A5AB60 /* CustomTableView.swift */,
402D251829E517E100A5AB60 /* ConfiguredNavigationView.swift */,
402D252229E5473E00A5AB60 /* EditDomainsCell.swift */,
4015B4F629EFD9AC004102E0 /* AccessLevelView.swift */,
);
name = Views;
sourceTree = "<group>";
@@ -1188,6 +1261,42 @@
name = Controllers;
sourceTree = "<group>";
};
402D253E29EE10A100A5AB60 /* Firewall */ = {
isa = PBXGroup;
children = (
402D254629EE10BB00A5AB60 /* Models */,
402D254529EE10B500A5AB60 /* Views */,
402D254429EE10AD00A5AB60 /* Controllers */,
);
name = Firewall;
sourceTree = "<group>";
};
402D254429EE10AD00A5AB60 /* Controllers */ = {
isa = PBXGroup;
children = (
402D254729EE112E00A5AB60 /* LDFirewallViewController.swift */,
);
name = Controllers;
sourceTree = "<group>";
};
402D254529EE10B500A5AB60 /* Views */ = {
isa = PBXGroup;
children = (
402D254929EE1C6E00A5AB60 /* DescriptionLabel.swift */,
402D254B29EE32F300A5AB60 /* FirewallSegmentedControl.swift */,
402D254D29EE598D00A5AB60 /* TrackersGroupView.swift */,
402D254F29EE78D600A5AB60 /* OverallStatiscticView.swift */,
);
name = Views;
sourceTree = "<group>";
};
402D254629EE10BB00A5AB60 /* Models */ = {
isa = PBXGroup;
children = (
);
name = Models;
sourceTree = "<group>";
};
7C0D11102473EDFD00A26E04 /* Services */ = {
isa = PBXGroup;
children = (
@@ -1219,7 +1328,8 @@
children = (
7C1AE07F248028F40000A7D3 /* UIKit+Extensions.swift */,
7C422EA425279724007F9C22 /* Align.swift */,
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift */,
402D253A29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift */,
40FC414229F74C7900BD7396 /* String+Extensions.swift */,
);
name = Extensions;
sourceTree = "<group>";
@@ -2258,11 +2368,14 @@
402D251B29E519B500A5AB60 /* CustomTableView.swift in Sources */,
7C3E8D21247D8057004B81D6 /* PushNotifications.swift in Sources */,
3DBD57A222FBB0D900DE189F /* WebViewViewController.swift in Sources */,
402D255029EE78D600A5AB60 /* OverallStatiscticView.swift in Sources */,
A118F64320B33FED009A64E7 /* FadeTransition.swift in Sources */,
7CE91C592521D54F009D8269 /* UserDefaults.swift in Sources */,
3D47CDC822F3C3F3003BD7F7 /* NVActivityIndicatorAnimationCircleStrokeSpin.swift in Sources */,
3DF2455623A306DB00E46613 /* Loader.swift in Sources */,
A118F64720B33FED009A64E7 /* SpinerLayer.swift in Sources */,
4015B4FF29F14C95004102E0 /* LDCardView.swift in Sources */,
402D254E29EE598D00A5AB60 /* TrackersGroupView.swift in Sources */,
3D47CDC522F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallRotateChase.swift in Sources */,
A1EBEACD2097AE6E002B9087 /* M13CheckboxFadeController.swift in Sources */,
3D47CDCF22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationPacman.swift in Sources */,
@@ -2280,6 +2393,7 @@
3D0711B822FE79BE00391C6E /* WhyTrustViewController.swift in Sources */,
A118F64520B33FED009A64E7 /* TimerEx.swift in Sources */,
7C422EAF252797A6007F9C22 /* AccountVC.swift in Sources */,
4015B50329F16E1A004102E0 /* LDConfigurationViewController.swift in Sources */,
3D47CDD222F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallSpinFadeLoader.swift in Sources */,
3D9FC67723E503DF004122D3 /* EmailSignInViewController.swift in Sources */,
3DCA4F3322F22CB40017740D /* HomeViewController.swift in Sources */,
@@ -2304,12 +2418,14 @@
A1EBEAD42097AE6E002B9087 /* M13CheckboxPathGenerator.swift in Sources */,
A1EBEACB2097AE6E002B9087 /* M13CheckboxDisclosurePathGenerator.swift in Sources */,
3D47CDC622F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallPulse.swift in Sources */,
402D254829EE112E00A5AB60 /* LDFirewallViewController.swift in Sources */,
3D47CDCB22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallGridBeat.swift in Sources */,
3D47CDCA22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationTriangleSkewSpin.swift in Sources */,
7C422EB72527A2D1007F9C22 /* MainTabBarViewController.swift in Sources */,
3D47CDC722F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBlank.swift in Sources */,
A1E7481A1F9108B6004B8021 /* SpeedTest.swift in Sources */,
3D970DAF22EC15D800F9CC93 /* BlockLogViewController.swift in Sources */,
402D254A29EE1C6E00A5AB60 /* DescriptionLabel.swift in Sources */,
402D24D429D87F4500A5AB60 /* CustomBlockedTableHeader.swift in Sources */,
A1EBEADB2097AE6E002B9087 /* M13CheckboxAnimationGenerator.swift in Sources */,
7CC8EFED254036050005054C /* FirewallRepair.swift in Sources */,
@@ -2327,6 +2443,7 @@
3DBD57B022FC14CD00DE189F /* Shared.swift in Sources */,
A154A07E215C78180010FFCC /* BlockListCell.swift in Sources */,
3D47CDCE22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallScaleRippleMultiple.swift in Sources */,
40FC414329F74C7900BD7396 /* String+Extensions.swift in Sources */,
3D47CDCC22F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallScaleMultiple.swift in Sources */,
A1EBEADC2097AE6E002B9087 /* DefaultValues.swift in Sources */,
A1EBEAD02097AE6E002B9087 /* M13CheckboxController.swift in Sources */,
@@ -2373,14 +2490,17 @@
3D47CDD322F3C3F3003BD7F7 /* NVActivityIndicatorAnimationLineScaleParty.swift in Sources */,
A1141A151F46230500F54698 /* AppDelegate.swift in Sources */,
3DBD57AE22FBE04300DE189F /* WhitelistAddCell.swift in Sources */,
4015B4F729EFD9AC004102E0 /* AccessLevelView.swift in Sources */,
3D47CDB922F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallTrianglePath.swift in Sources */,
402D24CB29D87B5A00A5AB60 /* ListsSubmenuView.swift in Sources */,
4015B4FD29F00DD8004102E0 /* LDVpnViewController.swift in Sources */,
A1EBEACE2097AE6E002B9087 /* M13CheckboxExpandController.swift in Sources */,
3D5F5A0C23109ABB004C3860 /* WhatIsVpnViewController.swift in Sources */,
A174CCAE22B15B1000F1B840 /* BlockListViewController.swift in Sources */,
3DAF73522768572300D97BB0 /* FirewallUtilities.swift in Sources */,
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extentions.swift in Sources */,
402D253B29E8F9A400A5AB60 /* JSONSerialization+Extensions.swift in Sources */,
3D47CDD022F3C3F3003BD7F7 /* NVActivityIndicatorAnimationBallPulseSync.swift in Sources */,
402D254C29EE32F300A5AB60 /* FirewallSegmentedControl.swift in Sources */,
402D252729E5843300A5AB60 /* ImportBlockListViewController.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;

View File

@@ -0,0 +1,137 @@
//
// AccessLevelView.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 19.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
final class AccessLevelView: UIView {
// MARK: - Properties
private lazy var containerView: UIView = {
let view = UIView()
return view
}()
lazy var accessLevelIv: UIImageView = {
let image = UIImageView()
image.contentMode = .scaleAspectFit
image.layer.masksToBounds = true
return image
}()
lazy var accessLevelName: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontBold11
label.textAlignment = .center
return label
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(containerView)
containerView.anchors.edges.pin()
containerView.addSubview(accessLevelIv)
accessLevelIv.anchors.centerX.align()
accessLevelIv.anchors.centerY.align()
containerView.addSubview(accessLevelName)
accessLevelName.anchors.centerX.align()
accessLevelName.anchors.centerY.align()
}
}
final class AccessLevelslView: UIView {
// MARK: - Properties
private lazy var containerView: UIView = {
let view = UIView()
return view
}()
private let basicView: AccessLevelView = {
let view = AccessLevelView()
view.accessLevelIv.image = UIImage(named: "basic")
view.accessLevelName.text = "Basic"
return view
}()
private let advancedView: AccessLevelView = {
let view = AccessLevelView()
view.accessLevelIv.image = UIImage(named: "advanced")
view.accessLevelName.text = "Advanced"
return view
}()
let anonymousView: AccessLevelView = {
let view = AccessLevelView()
view.accessLevelIv.image = UIImage(named: "anonymous")
view.accessLevelName.text = "Anonymous"
return view
}()
private let universalView: AccessLevelView = {
let view = AccessLevelView()
view.accessLevelIv.image = UIImage(named: "universal")
view.accessLevelName.text = "Universal"
return view
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(basicView)
stackView.addArrangedSubview(advancedView)
stackView.addArrangedSubview(anonymousView)
stackView.addArrangedSubview(universalView)
stackView.axis = .horizontal
stackView.distribution = .fillEqually
stackView.alignment = .center
stackView.spacing = 0
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(stackView)
stackView.anchors.edges.pin()
stackView.insertSubview(advancedView, belowSubview: basicView)
stackView.insertSubview(anonymousView, belowSubview: advancedView)
stackView.insertSubview(universalView, belowSubview: anonymousView)
}
}

View File

@@ -162,11 +162,13 @@ final class BlockListViewController: BaseViewController {
paragraphLabel.anchors.top.spacing(0, to: customNavigationView.anchors.bottom)
paragraphLabel.anchors.leading.readableContentPin(inset: 3)
paragraphLabel.anchors.trailing.readableContentPin(inset: 3)
paragraphLabel.anchors.height.equal(60)
view.addSubview(segmented)
segmented.anchors.top.spacing(12, to: paragraphLabel.anchors.bottom)
segmented.anchors.leading.readableContentPin()
segmented.anchors.trailing.readableContentPin()
segmented.anchors.height.equal(40)
}
private func configureCuratedBlockedDomainsTableView() {
@@ -174,6 +176,7 @@ final class BlockListViewController: BaseViewController {
tableView.anchors.top.spacing(8, to: segmented.anchors.bottom)
tableView.anchors.leading.pin()
tableView.anchors.trailing.pin()
tableView.anchors.bottom.pin()
})
reloadCuratedBlockDomains()
@@ -185,7 +188,7 @@ final class BlockListViewController: BaseViewController {
view.addSubview(listsLabel)
listsLabel.anchors.top.spacing(24, to: segmented.anchors.bottom)
listsLabel.anchors.leading.marginsPin()
view.addSubview(addNewListButton)
addNewListButton.anchors.centerY.equal(listsLabel.anchors.centerY)
addNewListButton.anchors.trailing.marginsPin()
@@ -376,7 +379,6 @@ extension BlockListViewController {
self.didMakeChange = true
let vc = ListSettingsViewController()
vc.listName = list.name
vc.blockedList = list
vc.blockListVC = self
navigationController?.pushViewController(vc, animated: true)
}.onSwipeToDelete { [unowned self] in

View File

@@ -0,0 +1,72 @@
//
// FirewallDescriptionLabel.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 18.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
struct DescriptionLabelViewModel {
let text: String
}
final class DescriptionLabel: UIView {
// MARK: - Properties
private lazy var lockImage: UIImageView = {
let image = UIImageView()
image.image = UIImage(named: "icn_lock")
image.contentMode = .scaleAspectFit
image.layer.masksToBounds = true
return image
}()
private lazy var descriptionLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontMedium15
label.textAlignment = .left
return label
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(lockImage)
stackView.addArrangedSubview(descriptionLabel)
stackView.axis = .horizontal
stackView.distribution = .fillProportionally
stackView.alignment = .center
stackView.spacing = 12
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(stackView)
stackView.anchors.top.pin()
stackView.anchors.bottom.pin()
stackView.anchors.leading.pin()
stackView.anchors.trailing.pin()
}
func configure(with model: DescriptionLabelViewModel) {
descriptionLabel.text = model.text
}
}

View File

@@ -0,0 +1,90 @@
//
// LDCardView.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 19.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
final class LDCardView: UIView {
// MARK: - Properties
var isSelected: Bool = false
private lazy var backgroundView: UIView = {
let view = UIView()
view.isUserInteractionEnabled = true
view.layer.cornerRadius = 8
view.layer.borderWidth = 2
view.layer.borderColor = isSelected ? UIColor.gray.cgColor : UIColor.tunnelsBlue.cgColor
return view
}()
lazy var iconImageView: UIImageView = {
let image = UIImageView()
image.contentMode = .scaleAspectFit
image.image = isSelected ? UIImage(named: "kksdlf") : UIImage(named: "dfgerte")
image.layer.masksToBounds = true
return image
}()
lazy var title: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontBold15
label.numberOfLines = 0
label.textAlignment = .center
return label
}()
lazy var subTitle: UILabel = {
let label = UILabel()
label.text = ""
label.textColor = .label
label.font = fontBold15
label.textColor = .lightGray
label.textAlignment = .center
return label
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(iconImageView)
stackView.addArrangedSubview(title)
stackView.addArrangedSubview(subTitle)
stackView.axis = .vertical
stackView.distribution = .fillProportionally
stackView.alignment = .center
stackView.spacing = 8
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(backgroundView)
backgroundView.anchors.edges.pin()
backgroundView.addSubview(stackView)
stackView.anchors.centerX.align()
stackView.anchors.leading.marginsPin()
stackView.anchors.trailing.marginsPin()
stackView.anchors.centerY.align()
}
}

View File

@@ -0,0 +1,155 @@
//
// LDConfigurationViewController.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 20.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
final class LDConfigurationViewController: UIViewController {
// MARK: - Properties
private lazy var activityCard: LDCardView = {
let view = LDCardView()
view.title.text = "Activity"
view.iconImageView.image = UIImage(named: "icn_activity")
view.isUserInteractionEnabled = true
return view
}()
private lazy var configureBlockingCard: LDCardView = {
let view = LDCardView()
view.title.text = "Configure blocking"
view.title.numberOfLines = 0
view.iconImageView.image = UIImage(named: "icn_configure_blocking")
view.isUserInteractionEnabled = true
return view
}()
private lazy var personalizedBlockingCard: LDCardView = {
let view = LDCardView()
view.title.text = "Personalized blocking"
view.title.numberOfLines = 0
view.iconImageView.image = UIImage(named: "icn_personalized_blocking")
view.isUserInteractionEnabled = true
return view
}()
private lazy var importListsCard: LDCardView = {
let view = LDCardView()
view.title.text = "Import custom block lists"
view.title.numberOfLines = 0
view.iconImageView.image = UIImage(named: "icn_import")
view.isUserInteractionEnabled = true
return view
}()
private lazy var hStack1: UIStackView = {
let stack = UIStackView()
stack.addArrangedSubview(activityCard)
stack.addArrangedSubview(configureBlockingCard)
stack.alignment = .center
stack.axis = .horizontal
stack.distribution = .equalCentering
stack.spacing = 16
return stack
}()
private lazy var hStack2: UIStackView = {
let stack = UIStackView()
stack.addArrangedSubview(personalizedBlockingCard)
stack.addArrangedSubview(importListsCard)
stack.alignment = .center
stack.axis = .horizontal
stack.distribution = .equalCentering
stack.spacing = 16
return stack
}()
private lazy var vStack: UIStackView = {
let stack = UIStackView()
stack.addArrangedSubview(hStack1)
stack.addArrangedSubview(hStack2)
stack.alignment = .center
stack.axis = .vertical
stack.distribution = .equalCentering
stack.spacing = 16
return stack
}()
private lazy var viewAccountSettingsButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("View account settings", for: .normal)
button.setTitleColor(.tunnelsBlue, for: .normal)
button.titleLabel?.font = fontBold15
button.addTarget(self, action: #selector(viewAccountSettings), for: .touchUpInside)
return button
}()
private lazy var viewAuditReportButton: UIButton = {
let button = UIButton(type: .system)
button.setTitle("View audit report (Feb 2023)", for: .normal)
button.setTitleColor(.tunnelsBlue, for: .normal)
button.titleLabel?.font = fontBold15
button.addTarget(self, action: #selector(viewAccountSettings), for: .touchUpInside)
return button
}()
lazy var vStackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(viewAccountSettingsButton)
stackView.addArrangedSubview(viewAuditReportButton)
stackView.axis = .vertical
stackView.alignment = .center
stackView.distribution = .fillEqually
stackView.spacing = 8
return stackView
}()
// MARK: - LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(vStack)
vStack.anchors.centerY.align()
vStack.anchors.centerX.align()
activityCard.anchors.width.equal(view.bounds.width / 2 - 20)
activityCard.anchors.height.equal(view.bounds.width / 2 - 20)
configureBlockingCard.anchors.width.equal(view.bounds.width / 2 - 20)
configureBlockingCard.anchors.height.equal(view.bounds.width / 2 - 20)
personalizedBlockingCard.anchors.width.equal(view.bounds.width / 2 - 20)
personalizedBlockingCard.anchors.height.equal(view.bounds.width / 2 - 20)
importListsCard.anchors.width.equal(view.bounds.width / 2 - 20)
importListsCard.anchors.height.equal(view.bounds.width / 2 - 20)
view.addSubview(vStackView)
vStackView.anchors.top.spacing(30, to: vStack.anchors.bottom)
vStackView.anchors.leading.marginsPin()
vStackView.anchors.trailing.marginsPin()
}
}
// MARK: - Private functions
private extension LDConfigurationViewController {
@objc func viewAccountSettings() {
}
@objc func viewAuditReport() {
}
}

View File

@@ -0,0 +1,249 @@
//
// LDFirewallViewController.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 17.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
final class LDFirewallViewController: UIViewController {
lazy var accessLevelslView: AccessLevelslView = {
let view = AccessLevelslView()
return view
}()
private lazy var scrollView: UIScrollView = {
let view = UIScrollView()
view.isScrollEnabled = true
return view
}()
private lazy var contentView: UIView = {
let view = UIView()
view.anchors.height.equal(1000)
return view
}()
private lazy var firewallTitle: UILabel = {
let label = UILabel()
label.text = NSLocalizedString("Get complete protection", comment: "")
label.font = fontBold24
label.numberOfLines = 0
label.textColor = .label
return label
}()
private lazy var firewallDescriptionLabel1: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Block as many trackers as you want", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel2: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Import and export your own block lists", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel3: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Access to new curated lists of trackers", comment: "")))
return label
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(firewallTitle)
stackView.addArrangedSubview(firewallDescriptionLabel1)
stackView.addArrangedSubview(firewallDescriptionLabel2)
stackView.addArrangedSubview(firewallDescriptionLabel3)
stackView.axis = .vertical
stackView.distribution = .fillProportionally
stackView.spacing = 10
return stackView
}()
private lazy var cpTitle: UILabel = {
let label = UILabel()
label.text = NSLocalizedString("Only blocked with complete protection", comment: "")
label.textColor = .label
label.font = fontBold15
label.textAlignment = .center
return label
}()
private lazy var cpTrackersGroupView1: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#1"
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_game_marketing")!, title: "Game Marketing", number: 4678))
return view
}()
private lazy var cpTrackersGroupView2: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#2"
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_marketing_trackers")!, title: "Marketing Trackers", number: 3432))
return view
}()
private lazy var cpTrackersGroupView3: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#3"
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_email_trackers")!, title: "Email Trackers", number: 2756))
return view
}()
private lazy var cpStackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(cpTitle)
stackView.addArrangedSubview(cpTrackersGroupView1)
stackView.addArrangedSubview(cpTrackersGroupView2)
stackView.addArrangedSubview(cpTrackersGroupView3)
stackView.layer.cornerRadius = 8
stackView.layer.borderWidth = 2
stackView.layer.borderColor = UIColor.black.cgColor
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.spacing = 0
stackView.backgroundColor = .secondarySystemBackground
return stackView
}()
private lazy var upgradeButton: UIButton = {
let button = UIButton(type: .system)
button.tintColor = .white
button.setTitle(NSLocalizedString("Upgrade", comment: ""), for: .normal)
button.titleLabel?.font = fontBold18
button.backgroundColor = .tunnelsBlue
button.layer.cornerRadius = 28
button.anchors.height.equal(56)
button.addTarget(self, action: #selector(upgrade), for: .touchUpInside)
return button
}()
private lazy var maTitle: UILabel = {
let label = UILabel()
label.text = NSLocalizedString("Most active this week", comment: "")
label.textColor = .label
label.font = fontBold15
label.textAlignment = .center
return label
}()
private lazy var maTrackersGroupView1: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#1"
view.number.textColor = .label
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_facebook_trackers")!, title: "Facebook Trackers", number: 764))
return view
}()
private lazy var maTrackersGroupView2: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#2"
view.number.textColor = .label
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_data_trackers")!, title: "Data Trackers", number: 330))
return view
}()
private lazy var maTrackersGroupView3: TrackersGroupView = {
let view = TrackersGroupView()
view.placeNumber.text = "#3"
view.number.textColor = .label
view.configure(with: TrackersGroupViewModel(image: UIImage(named: "icn_clickbait_trackers")!, title: "Clickbait", number: 106))
return view
}()
private lazy var maStackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(maTitle)
stackView.addArrangedSubview(maTrackersGroupView1)
stackView.addArrangedSubview(maTrackersGroupView2)
stackView.addArrangedSubview(maTrackersGroupView3)
stackView.layer.cornerRadius = 8
stackView.layer.borderWidth = 1
stackView.layer.borderColor = UIColor.lightGray.cgColor
stackView.axis = .vertical
stackView.distribution = .fillEqually
stackView.spacing = 0
return stackView
}()
lazy var statisitcsView: OverallStatiscticView = {
let view = OverallStatiscticView()
return view
}()
private let segmented: FirewallSegmentedControl = {
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .regular, scale: .large)
let image = UIImage()
let text = "Swipe to Activate Firewall"
let items = [image, text]
let control = FirewallSegmentedControl(items: items)
return control
}()
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(accessLevelslView)
accessLevelslView.anchors.top.safeAreaPin(inset: 18)
accessLevelslView.anchors.leading.marginsPin()
accessLevelslView.anchors.trailing.marginsPin()
view.addSubview(scrollView)
scrollView.anchors.top.spacing(18, to: accessLevelslView.anchors.bottom)
scrollView.anchors.leading.pin()
scrollView.anchors.trailing.pin()
scrollView.anchors.bottom.pin()
scrollView.addSubview(contentView)
contentView.anchors.top.pin()
contentView.anchors.centerX.align()
contentView.anchors.width.equal(scrollView.anchors.width)
contentView.anchors.bottom.pin()
contentView.addSubview(stackView)
stackView.anchors.top.marginsPin()
stackView.anchors.leading.marginsPin()
stackView.anchors.trailing.marginsPin()
contentView.addSubview(cpStackView)
cpStackView.anchors.top.spacing(18, to: stackView.anchors.bottom)
cpStackView.anchors.leading.marginsPin()
cpStackView.anchors.trailing.marginsPin()
contentView.addSubview(upgradeButton)
upgradeButton.anchors.top.spacing(18, to: cpStackView.anchors.bottom)
upgradeButton.anchors.leading.marginsPin()
upgradeButton.anchors.trailing.marginsPin()
contentView.addSubview(maStackView)
maStackView.anchors.top.spacing(18, to: upgradeButton.anchors.bottom)
maStackView.anchors.leading.marginsPin()
maStackView.anchors.trailing.marginsPin()
contentView.addSubview(statisitcsView)
statisitcsView.anchors.top.spacing(18, to: maStackView.anchors.bottom)
statisitcsView.anchors.leading.marginsPin()
statisitcsView.anchors.trailing.marginsPin()
view.addSubview(segmented)
segmented.anchors.bottom.safeAreaPin()
segmented.anchors.leading.marginsPin()
segmented.anchors.trailing.marginsPin()
segmented.anchors.height.equal(56)
}
}
private extension LDFirewallViewController {
@objc func upgrade() {
}
}

View File

@@ -0,0 +1,193 @@
//
// LDVpnViewController.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 19.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
final class LDVpnViewController: UIViewController {
// MARK: - Properties
lazy var accessLevelslView: AccessLevelslView = {
let view = AccessLevelslView()
return view
}()
private lazy var scrollView: UIScrollView = {
let view = UIScrollView()
view.isScrollEnabled = true
return view
}()
private lazy var contentView: UIView = {
let view = UIView()
view.anchors.height.equal(640)
return view
}()
private lazy var firewallTitle: UILabel = {
let label = UILabel()
label.text = NSLocalizedString("Get complete protection", comment: "")
label.font = fontBold24
label.numberOfLines = 0
label.textColor = .label
return label
}()
private lazy var firewallDescriptionLabel1: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Block as many trackers as you want", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel2: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Import and export your own block lists", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel3: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Access to new curated lists of trackers", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel4: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("The only fully open source VPN", comment: "")))
return label
}()
private lazy var firewallDescriptionLabel5: DescriptionLabel = {
let label = DescriptionLabel()
label.configure(with: DescriptionLabelViewModel(text: NSLocalizedString("Hide your identity around the world", comment: "")))
return label
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(firewallTitle)
stackView.addArrangedSubview(firewallDescriptionLabel1)
stackView.addArrangedSubview(firewallDescriptionLabel2)
stackView.addArrangedSubview(firewallDescriptionLabel3)
stackView.addArrangedSubview(firewallDescriptionLabel4)
stackView.addArrangedSubview(firewallDescriptionLabel5)
stackView.axis = .vertical
stackView.distribution = .fillProportionally
stackView.spacing = 10
return stackView
}()
private lazy var upgradeButton: UIButton = {
let button = UIButton(type: .system)
button.tintColor = .white
button.setTitle(NSLocalizedString("Upgrade", comment: ""), for: .normal)
button.titleLabel?.font = fontBold18
button.backgroundColor = .tunnelsBlue
button.layer.cornerRadius = 28
button.anchors.height.equal(56)
button.addTarget(self, action: #selector(upgrade), for: .touchUpInside)
return button
}()
private lazy var whitelistCard: LDCardView = {
let view = LDCardView()
view.title.text = "Whitelist"
view.iconImageView.image = UIImage(named: "icn_whitelist")
view.isUserInteractionEnabled = true
return view
}()
private lazy var regionCard: LDCardView = {
let view = LDCardView()
view.title.text = "Region"
view.iconImageView.image = UIImage(named: "icn_globe")
view.subTitle.text = "USA West"
view.isUserInteractionEnabled = true
return view
}()
private lazy var hStack: UIStackView = {
let stack = UIStackView()
stack.addArrangedSubview(whitelistCard)
stack.addArrangedSubview(regionCard)
stack.alignment = .center
stack.distribution = .equalCentering
stack.spacing = 16
return stack
}()
private let segmented: FirewallSegmentedControl = {
let symbolConfig = UIImage.SymbolConfiguration(pointSize: 18, weight: .regular, scale: .large)
let image = UIImage()
let text = "Swipe to Activate Firewall"
let items = [image, text]
let control = FirewallSegmentedControl(items: items)
return control
}()
// MARK: - LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
view.backgroundColor = .systemBackground
view.addSubview(accessLevelslView)
accessLevelslView.anchors.top.safeAreaPin(inset: 18)
accessLevelslView.anchors.leading.marginsPin()
accessLevelslView.anchors.trailing.marginsPin()
view.addSubview(scrollView)
scrollView.anchors.top.spacing(18, to: accessLevelslView.anchors.bottom)
scrollView.anchors.leading.pin()
scrollView.anchors.trailing.pin()
scrollView.anchors.bottom.pin()
scrollView.addSubview(contentView)
contentView.anchors.top.pin()
contentView.anchors.centerX.align()
contentView.anchors.width.equal(scrollView.anchors.width)
contentView.anchors.bottom.pin()
contentView.addSubview(stackView)
stackView.anchors.top.marginsPin()
stackView.anchors.leading.marginsPin()
stackView.anchors.trailing.marginsPin()
contentView.addSubview(upgradeButton)
upgradeButton.anchors.top.spacing(18, to: stackView.anchors.bottom)
upgradeButton.anchors.leading.marginsPin()
upgradeButton.anchors.trailing.marginsPin()
contentView.addSubview(hStack)
hStack.anchors.top.spacing(18, to: upgradeButton.anchors.bottom)
hStack.anchors.centerX.align()
whitelistCard.anchors.width.equal(view.bounds.width / 2 - 20)
whitelistCard.anchors.height.equal(view.bounds.width / 2 - 20)
regionCard.anchors.width.equal(view.bounds.width / 2 - 20)
regionCard.anchors.height.equal(view.bounds.width / 2 - 20)
view.addSubview(segmented)
segmented.anchors.bottom.safeAreaPin()
segmented.anchors.leading.marginsPin()
segmented.anchors.trailing.marginsPin()
segmented.anchors.height.equal(56)
}
}
// MARK: - Private functions
private extension LDVpnViewController {
@objc func upgrade() {
}
}

View File

@@ -8,10 +8,16 @@
import UIKit
protocol ListDescriptionViewControllerDelegate {
func changeListDescription(description: String)
}
final class ListDescriptionViewController: UIViewController {
var listName = ""
var delegate: ListDescriptionViewControllerDelegate?
var domains = getBlockedLists().userBlockListsDefaults
// MARK: - Properties
@@ -23,7 +29,6 @@ final class ListDescriptionViewController: UIViewController {
view.leftNavButton.addTarget(self, action: #selector(returnBack), for: .touchUpInside)
view.rightNavButton.setTitle("DONE", for: .normal)
view.rightNavButton.addTarget(self, action: #selector(doneButtonClicked), for: .touchUpInside)
view.rightNavButton.tintColor = .gray
return view
}()
@@ -36,9 +41,19 @@ final class ListDescriptionViewController: UIViewController {
view.backgroundColor = .systemBackground
view.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: .zero))
view.leftViewMode = .always
view.addTarget(self, action: #selector(handleTextChange), for: .editingChanged)
return view
}()
private lazy var validationPrompt: UILabel = {
let label = UILabel()
label.textColor = .red
label.font = fontRegular14
label.textAlignment = .left
label.numberOfLines = 0
return label
}()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
@@ -46,6 +61,7 @@ final class ListDescriptionViewController: UIViewController {
let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard))
tap.cancelsTouchesInView = false
view.addGestureRecognizer(tap)
configureUI()
}
@@ -61,6 +77,11 @@ final class ListDescriptionViewController: UIViewController {
descriptionTextField.anchors.leading.marginsPin()
descriptionTextField.anchors.trailing.marginsPin()
descriptionTextField.anchors.height.equal(40)
view.addSubview(validationPrompt)
validationPrompt.anchors.top.spacing(8, to: descriptionTextField.anchors.bottom)
validationPrompt.anchors.leading.marginsPin()
validationPrompt.anchors.trailing.marginsPin()
}
override func viewDidLayoutSubviews() {
@@ -72,9 +93,15 @@ final class ListDescriptionViewController: UIViewController {
// MARK: - Functions
private extension ListDescriptionViewController {
func isValidListName(_ text: String) -> Bool {
let regEx = "^[a-zA-Z0-9]{1,20}$"
return text.range(of: "\(regEx)", options: .regularExpression) != nil
@objc func handleTextChange() {
guard let text = descriptionTextField.text else { return }
if text.isValid(.listDescription) {
navigationView.rightNavButton.isEnabled = true
validationPrompt.text = ""
} else {
navigationView.rightNavButton.isEnabled = false
validationPrompt.text = "Invalid Description. Please use only letters and digits. The maximum number of symbols is 500."
}
}
@objc func returnBack() {
@@ -82,6 +109,10 @@ private extension ListDescriptionViewController {
}
@objc func doneButtonClicked() {
guard let newDescription = descriptionTextField.text else { return }
delegate?.changeListDescription(description: newDescription)
let domains = getBlockedLists().userBlockListsDefaults
var userList = domains[listName]
@@ -99,23 +130,3 @@ private extension ListDescriptionViewController {
view.endEditing(true)
}
}
// MARK: - TextField delegate methods
extension ListDescriptionViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
if textField == descriptionTextField {
if let text = descriptionTextField.text {
if self.isValidListName(text) == true {
navigationView.rightNavButton.isEnabled = true
navigationView.rightNavButton.setTitleColor(.tunnelsBlue, for: .normal)
} else {
navigationView.rightNavButton.isEnabled = false
navigationView.rightNavButton.setTitleColor(.gray, for: .normal)
}
}
}
return true
}
}

View File

@@ -8,8 +8,14 @@
import UIKit
protocol ListDetailViewControllerDelegate {
func changeListName(name: String)
}
final class ListDetailViewController: UIViewController {
var delegate: ListDetailViewControllerDelegate?
var listName = ""
// MARK: - Properties
@@ -21,11 +27,10 @@ final class ListDetailViewController: UIViewController {
view.leftNavButton.addTarget(self, action: #selector(returnBack), for: .touchUpInside)
view.rightNavButton.setTitle("DONE", for: .normal)
view.rightNavButton.addTarget(self, action: #selector(doneButtonClicked), for: .touchUpInside)
view.rightNavButton.tintColor = .gray
return view
}()
private lazy var listNameTextField: UITextField = {
lazy var listNameTextField: UITextField = {
let view = UITextField()
view.text = listName
view.font = fontMedium17
@@ -33,9 +38,19 @@ final class ListDetailViewController: UIViewController {
view.backgroundColor = .systemBackground
view.leftView = UIView(frame: CGRect(x: 0, y: 0, width: 15, height: .zero))
view.leftViewMode = .always
view.addTarget(self, action: #selector(handleTextChange), for: .editingChanged)
return view
}()
private lazy var validationPrompt: UILabel = {
let label = UILabel()
label.textColor = .red
label.font = fontRegular14
label.textAlignment = .left
label.numberOfLines = 0
return label
}()
// MARK: - Lifecycle
override func viewDidLoad() {
super.viewDidLoad()
@@ -58,6 +73,11 @@ final class ListDetailViewController: UIViewController {
listNameTextField.anchors.leading.marginsPin()
listNameTextField.anchors.trailing.marginsPin()
listNameTextField.anchors.height.equal(40)
view.addSubview(validationPrompt)
validationPrompt.anchors.top.spacing(8, to: listNameTextField.anchors.bottom)
validationPrompt.anchors.leading.marginsPin()
validationPrompt.anchors.trailing.marginsPin()
}
override func viewDidLayoutSubviews() {
@@ -67,11 +87,17 @@ final class ListDetailViewController: UIViewController {
}
// MARK: - Functions
private extension ListDetailViewController {
extension ListDetailViewController {
func isValidListName(_ text: String) -> Bool {
let regEx = "^[a-zA-Z0-9]{1,20}$"
return text.range(of: "\(regEx)", options: .regularExpression) != nil
@objc func handleTextChange() {
guard let text = listNameTextField.text else { return }
if text.isValid(.listName) {
navigationView.rightNavButton.isEnabled = true
validationPrompt.text = ""
} else {
navigationView.rightNavButton.isEnabled = false
validationPrompt.text = "Invalid name. Please use only letters and digits. The maximum number of symbols is 20."
}
}
@objc func returnBack() {
@@ -79,31 +105,14 @@ private extension ListDetailViewController {
}
@objc func doneButtonClicked() {
guard let newListName = listNameTextField.text else { return }
delegate?.changeListName(name: newListName)
changeBlockedListName(from: listName, to: newListName)
navigationController?.popViewController(animated: true)
// TODO: - add new list name to defaults if changed
}
@objc func dismissKeyboard() {
view.endEditing(true)
}
}
// MARK: - TextField delegate methods
extension ListDetailViewController: UITextFieldDelegate {
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool{
if textField == listNameTextField {
if let text = listNameTextField.text {
if self.isValidListName(text) == true {
navigationView.rightNavButton.isEnabled = true
navigationView.rightNavButton.setTitleColor(.tunnelsBlue, for: .normal)
} else {
navigationView.rightNavButton.isEnabled = false
navigationView.rightNavButton.setTitleColor(.gray, for: .normal)
}
}
}
return true
}
}

View File

@@ -12,11 +12,9 @@ import CocoaLumberjackSwift
final class ListSettingsViewController: UIViewController {
// MARK: - Properties
private var blockedList: UserBlockListsGroup?
var listName = ""
var descriptionText = ""
var blockedList: UserBlockListsGroup?
weak var blockListVC: BlockListViewController?
@@ -24,7 +22,7 @@ final class ListSettingsViewController: UIViewController {
lazy var navigationView: ConfiguredNavigationView = {
let view = ConfiguredNavigationView()
view.titleLabel.text = listName
view.titleLabel.text = "List Settings"
view.leftNavButton.setTitle(NSLocalizedString("BACK", comment: ""), for: .normal)
view.leftNavButton.setImage(UIImage(systemName: "chevron.left"), for: .normal)
view.leftNavButton.addTarget(self, action: #selector(backButtonClicked), for: .touchUpInside)
@@ -66,6 +64,12 @@ final class ListSettingsViewController: UIViewController {
configureTableView()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
let userBlockedLists = getBlockedLists().userBlockListsDefaults
blockedList = userBlockedLists[listName]
}
// MARK: - Configure UI
func configureUI() {
view.addSubview(navigationView)
@@ -152,8 +156,7 @@ extension ListSettingsViewController: UITableViewDataSource {
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
let userBlockedLists = getBlockedLists().userBlockListsDefaults
let numberOfDomains = userBlockedLists[listName]?.domains.count
let numberOfDomains = blockedList?.domains.count
switch section {
case 0, 1: return 1
@@ -167,29 +170,25 @@ extension ListSettingsViewController: UITableViewDataSource {
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let userBlockedLists = getBlockedLists().userBlockListsDefaults
let domains = userBlockedLists[listName]?.domains
switch indexPath.section {
case 0:
guard let cell = tableView.dequeueReusableCell(withIdentifier: ListBlockedTableViewCell.identifier, for: indexPath) as? ListBlockedTableViewCell else {
return UITableViewCell()
}
cell.label.text = userBlockedLists[listName]?.name
cell.label.text = listName
return cell
case 1:
guard let cell = tableView.dequeueReusableCell(withIdentifier: ListBlockedTableViewCell.identifier, for: indexPath) as? ListBlockedTableViewCell else {
return UITableViewCell()
}
cell.label.text = userBlockedLists[listName]?.description ?? "Description"
cell.label.text = blockedList?.description ?? "Description"
return cell
case 2:
guard let cell = tableView.dequeueReusableCell(withIdentifier: DomainsBlockedTableViewCell.identifier, for: indexPath) as? DomainsBlockedTableViewCell else {
return UITableViewCell()
}
cell.label.text = domains?[indexPath.row].name
cell.label.text = blockedList?.domains[indexPath.row].name
return cell
default:
return UITableViewCell()
@@ -201,10 +200,13 @@ extension ListSettingsViewController: UITableViewDataSource {
switch indexPath.section {
case 0:
let vc = ListDetailViewController()
vc.delegate = self
vc.listName = listName
navigationController?.pushViewController(vc, animated: true)
case 1:
let vc = ListDescriptionViewController()
vc.delegate = self
vc.listName = listName
navigationController?.pushViewController(vc, animated: true)
default:
@@ -227,13 +229,10 @@ extension ListSettingsViewController {
func saveNewDomain(userEnteredDomainName: String) {
didMakeChange = true
DDLogInfo("Adding custom domain - \(userEnteredDomainName)")
addDomainToBlockedList(domain: userEnteredDomainName, for: listName)
blockedList = getBlockedLists().userBlockListsDefaults[listName]
let domains = getBlockedLists().userBlockListsDefaults
let userList = domains[listName]
if let list = userList {
addDomainToBlockedList(domain: userEnteredDomainName, for: list.name.lowercased())
}
tableView.reloadData()
}
@@ -244,13 +243,25 @@ extension ListSettingsViewController {
if let txtField = alertController.textFields?.first, let text = txtField.text {
self.saveNewDomain(userEnteredDomainName: text)
self.tableView.reloadData()
}
}
saveAction.isEnabled = false
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { (_) in }
alertController.addTextField { (textField) in
textField.keyboardType = .URL
textField.placeholder = "domain-to-block URL"
}
NotificationCenter.default.addObserver(
forName: UITextField.textDidChangeNotification,
object: alertController.textFields?.first,
queue: .main) { (notification) -> Void in
guard let textFieldText = alertController.textFields?.first?.text else { return }
saveAction.isEnabled = textFieldText.isValid(.domainName)
}
alertController.addAction(saveAction)
alertController.addAction(cancelAction)
self.present(alertController, animated: true, completion: nil)
@@ -308,8 +319,7 @@ extension ListSettingsViewController {
}
@objc func exportList(_ sender: UIButton) {
let domains = getBlockedLists().userBlockListsDefaults
var domainsList = domains[listName]?.domains
let domainsList = blockedList?.domains
guard let url = domainsList?.first?.exportToURL() else { return }
@@ -321,3 +331,18 @@ extension ListSettingsViewController {
present(activity, animated: true, completion: nil)
}
}
extension ListSettingsViewController: ListDetailViewControllerDelegate {
func changeListName(name: String) {
listName = name
tableView.reloadData()
}
}
extension ListSettingsViewController: ListDescriptionViewControllerDelegate {
func changeListDescription(description: String) {
tableView.reloadData()
}
}

View File

@@ -0,0 +1,152 @@
//
// OverallStatiscticView.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 18.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
struct OverallStatiscticViewModel {
let enabled: Int
let disabled: Int
let requests: Int
let blocked: Int
}
final class BoxLabelView: UIView {
// MARK: - Properties
lazy var boxView: UIView = {
let view = UIView()
view.layer.cornerRadius = 4
view.layer.borderColor = UIColor.lightGray.cgColor
view.layer.borderWidth = 1
view.anchors.height.equal(65)
return view
}()
lazy var numberLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontBold24
label.textAlignment = .center
return label
}()
lazy var boxTitle: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontRegular14
label.textAlignment = .center
return label
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(boxView)
stackView.addArrangedSubview(boxTitle)
stackView.axis = .vertical
stackView.distribution = .fillProportionally
stackView.spacing = 8
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(stackView)
stackView.anchors.edges.pin()
boxView.addSubview(numberLabel)
numberLabel.anchors.centerX.align()
numberLabel.anchors.centerY.align()
}
}
final class OverallStatiscticView: UIView {
// MARK: - Properties
private let enabledBoxView: BoxLabelView = {
let box = BoxLabelView()
box.numberLabel.text = "15"
box.boxTitle.text = "Enabled"
return box
}()
private let disabledBoxView: BoxLabelView = {
let box = BoxLabelView()
box.numberLabel.text = "1"
box.boxTitle.text = "Disabled"
return box
}()
private let requestsBoxView: BoxLabelView = {
let box = BoxLabelView()
box.numberLabel.text = "2.3M"
box.boxTitle.text = "Requests"
return box
}()
private let blockedBoxView: BoxLabelView = {
let box = BoxLabelView()
box.numberLabel.text = "2.4K"
box.boxTitle.text = "Blocked"
return box
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(enabledBoxView)
stackView.addArrangedSubview(disabledBoxView)
stackView.addArrangedSubview(requestsBoxView)
stackView.addArrangedSubview(blockedBoxView)
stackView.axis = .horizontal
stackView.distribution = .fillEqually
stackView.alignment = .center
stackView.spacing = 8
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(stackView)
stackView.anchors.top.marginsPin()
stackView.anchors.bottom.marginsPin()
stackView.anchors.leading.pin()
stackView.anchors.trailing.pin()
}
func configure(with model: OverallStatiscticViewModel) {
}
}

View File

@@ -16,7 +16,7 @@ final class StaticTableView: UITableView {
invalidateIntrinsicContentSize()
}
}
override var intrinsicContentSize: CGSize {
layoutIfNeeded()
return CGSize(width: UIView.noIntrinsicMetric, height: contentSize.height)

View File

@@ -0,0 +1,40 @@
//
// String+Extentions.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 25.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import Foundation
extension String {
enum ValidityType {
case listName
case domainName
case listDescription
}
enum Regex: String {
case listName = "^[a-zA-Z0-9\\s]{1,20}$"
case domainName = "^([a-zA-Z0-9]+(\\.[a-zA-Z0-9]+)+.*)$"
case listDescription = "^[a-zA-Z0-9\\s]{1,500}$"
}
func isValid(_ validityType: ValidityType) -> Bool {
let format = "SELF MATCHES %@"
var regex = ""
switch validityType {
case .listName:
regex = Regex.listName.rawValue
case .domainName:
regex = Regex.domainName.rawValue
case .listDescription:
regex = Regex.listDescription.rawValue
}
return NSPredicate(format: format, regex).evaluate(with: self)
}
}

View File

@@ -0,0 +1,117 @@
//
// TrackersGroupView.swift
// Lockdown
//
// Created by Aliaksandr Dvoineu on 18.04.23.
// Copyright © 2023 Confirmed Inc. All rights reserved.
//
import UIKit
struct TrackersGroupViewModel {
let image: UIImage
let title: String
let number: Int
}
final class TrackersGroupView: UIView {
// MARK: - Properties
private lazy var separator: UIView = {
let view = UIView()
view.backgroundColor = .lightGray
view.anchors.height.equal(1)
return view
}()
lazy var placeNumber: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontMedium15
label.textAlignment = .left
return label
}()
private lazy var trackersImage: UIImageView = {
let image = UIImageView()
image.contentMode = .center
image.layer.masksToBounds = true
return image
}()
private lazy var titleLabel: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontMedium15
label.text = "Game Marketing"
label.textAlignment = .left
return label
}()
lazy var number: UILabel = {
let label = UILabel()
label.textColor = .label
label.font = fontBold18
label.textColor = .red
label.textAlignment = .right
return label
}()
private lazy var lockImage: UIImageView = {
let image = UIImageView()
image.contentMode = .right
image.layer.masksToBounds = true
image.image = UIImage(named: "icn_lock")
return image
}()
private lazy var stackView: UIStackView = {
let stackView = UIStackView()
stackView.addArrangedSubview(placeNumber)
stackView.addArrangedSubview(trackersImage)
stackView.addArrangedSubview(titleLabel)
// stackView.addArrangedSubview(number)
stackView.addArrangedSubview(lockImage)
stackView.axis = .horizontal
stackView.distribution = .fillProportionally
stackView.alignment = .leading
stackView.spacing = 8
stackView.anchors.height.equal(40)
return stackView
}()
// MARK: - Initializer
override init(frame: CGRect) {
super.init(frame: frame)
configureUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
// MARK: - Functions
private func configureUI() {
addSubview(separator)
separator.anchors.leading.pin()
separator.anchors.trailing.pin()
separator.anchors.top.pin()
addSubview(stackView)
stackView.anchors.top.spacing(12, to: separator.anchors.bottom)
stackView.anchors.bottom.pin()
stackView.anchors.leading.marginsPin()
stackView.anchors.trailing.marginsPin()
}
func configure(with model: TrackersGroupViewModel) {
trackersImage.image = model.image
titleLabel.text = model.title
number.text = String(model.number)
}
}

View File

@@ -292,3 +292,5 @@ let fontBold11 = UIFont(name: "Montserrat-Bold", size: 11)!
let fontBold13 = UIFont(name: "Montserrat-Bold", size: 13)!
let fontBold15 = UIFont(name: "Montserrat-Bold", size: 15)!
let fontBold18 = UIFont(name: "Montserrat-Bold", size: 18)!
let fontBold24 = UIFont(name: "Montserrat-Bold", size: 24)!
let fontBold28 = UIFont(name: "Montserrat-Bold", size: 28)!