Pages:
Author

Topic: [ANN][GAP] Gapcoin - Prime Gap Search - New Math Algo - CPU / GPU - Zero Premine - page 98. (Read 287695 times)

full member
Activity: 122
Merit: 100
Developer & Pool Operator | AltPooler.com
Radeon 7970 getting 320,000 PPS with the gpu miner  Cool
legendary
Activity: 1008
Merit: 1000
yes somebody compile under win
sr. member
Activity: 392
Merit: 250
OK, so I got my 1st gpu mining away  Grin - now I'm trying to launch a 2nd instance for the 2nd gpu to begin its work and am getting this error:

Code:
[2014-11-07 10:34:15] Found platform[0] name = AMD Accelerated Parallel Processing
[2014-11-07 10:34:15] Found 4 device(s)
[2014-11-07 10:34:15] Compiling ...
[2014-11-07 10:34:15] Source: 205025 bytes
[2014-11-07 10:34:21] pps: -2147483648 / -2147483648  10g/h -2147483648 / -2147483648  15g/h -2147483648 / -2147483648
[2014-11-07 10:34:25] Compiled kernel binary size = 903936 bytes
[2014-11-07 10:34:25] ERROR: kernel.bin not found
[2014-11-07 10:34:25] OpenCL error: -36 at ./src/GPUFermat.cpp:392
[2014-11-07 10:34:25] OpenCL error: -36 at ./src/GPUFermat.cpp:392
[2014-11-07 10:34:25] clEnqueueNDRangeKernel error!

It seems that the 1st instance has a lock on the kernel.bin file? Anybody get more than 1 GPU working at a time yet?


[EDIT] OK I created a separate directory 'Gapminer1' and copied gapminer and the gpu directory into it.  I can now get a 2nd instance running, but I cannot specify which GPU to use and it starts mining on GPU0 - which is already being used.  I tried adding '-g 1' to the end of my params but no luck.  Has anybody been able to get more than 1 GPU running?
legendary
Activity: 1400
Merit: 1050
ok got passed OpenCL compiler error, now this

( replaced

// uint4 q[2] = {0, 0};
    uint4 q[2] = {0, 0, 0, 0};
)

yep that's experimental  Grin initializing uint4 as uint2 is indeed experimental
(however it isn't obvious that opencl and cuda use the same definition for these structures...)
full member
Activity: 149
Merit: 100
We have merged the new gpu miner changes into the gpu-miner branch of our source. We urge gpu miners to use the stratum port which has vardiff enabled.

This seems to increase the gpu miners pps a bit with a higher share difficulty.
member
Activity: 84
Merit: 10
Got the GPU miner working with a AMD Radeon R7 250 2GB DDR3 on Ubuntu Linux.

Its doing around 40000 pps (including the dual core CPU) - just need to disable one (or both) of the CPU cores and get the GPU overclocked. Sure that the GPU can do a lot more pps overclocked - without the 100% CPU clogging the processes.

Having previously installed both bfgminer and sph_miner prerequisites on my testing box - I found I was missing the following packages:

sudo apt-get install libgmp-dev

sudo apt-get install libmpfr-dev

sudo apt-get install libboost-all-dev

sudo apt-get install libglu-dev

can u share it please
legendary
Activity: 2646
Merit: 1722
https://youtu.be/DsAVx0u9Cw4 ... Dr. WHO < KLF
Got the GPU miner working with a AMD Radeon R7 250 2GB DDR3 on Ubuntu Linux.

Its doing around 40000 pps (including the dual core CPU) - just need to disable one (or both) of the CPU cores and get the GPU overclocked. Sure that the GPU can do a lot more pps overclocked - without the 100% CPU clogging the processes.

Having previously installed both bfgminer and sph_miner prerequisites on my testing box - I found I was missing the following packages:

sudo apt-get install libgmp-dev

sudo apt-get install libmpfr-dev

sudo apt-get install libboost-all-dev

sudo apt-get install libglu-dev
legendary
Activity: 1792
Merit: 1010
ok got passed OpenCL compiler error, now this

( replaced

// uint4 q[2] = {0, 0};
    uint4 q[2] = {0, 0, 0, 0};
)

[2014-11-07 07:05:28] Server supports longpoll
[2014-11-07 07:05:28] Got new target: 13.0000000 @ 22.4320864
[2014-11-07 07:05:33] Found platform[0] name = NVIDIA CUDA
[2014-11-07 07:05:33] Found 3 device(s)
[2014-11-07 07:05:33] Compiling ...
[2014-11-07 07:05:33] Source: 205100 bytes
[2014-11-07 07:05:36] pps: -2147483648 / -2147483648  10g/h -2147483648 / -2147483648  15g/h -2147483648 / -2147483648
[2014-11-07 07:05:42] Compiled kernel binary size = 969615 bytes
[2014-11-07 07:05:42] Loaded kernel binary size = 969615 bytes
[2014-11-07 07:05:42] Using GPU 0 [GeForce GTX 750 Ti]: which has 5 CUs
[2014-11-07 07:05:42] clWaitForEvents error -9999!
[2014-11-07 07:05:42] OpenCL error: -5 at ./src/GPUFermat.cpp:406
[2014-11-07 07:05:42] OpenCL error: -5 at ./src/GPUFermat.cpp:397
[2014-11-07 07:05:42] OpenCL error: -5 at ./src/GPUFermat.cpp:397
legendary
Activity: 1792
Merit: 1010
legendary
Activity: 1792
Merit: 1010
legendary
Activity: 1008
Merit: 1000
who can compile a miner for win Sad
sr. member
Activity: 280
Merit: 250

Code:
git clone https://github.com/gapcoin/GapMiner.git -b gpu-miner
cd GapMiner
git submodule init
git submodule update

Wow, that was QUICK! I'm pretty impressed by it!
newbie
Activity: 6
Merit: 0
Does anyone tried to compile GPU miner with NVIDIA CUDA SDK?

I have compiled it successfully but running miner fails:
$ gapminer -o http://mine3.gap.nonce-pool.com -p 4200 -u ***.*** -x *** -g
[2014-11-07 11:00:42] Server supports longpoll
[2014-11-07 11:00:42] Got new target: 13.0000000 @ 22.4775703
[2014-11-07 11:00:48] Found platform[0] name = NVIDIA CUDA
[2014-11-07 11:00:48] Found 1 device(s)
[2014-11-07 11:00:48] Compiling ...
[2014-11-07 11:00:48] Source: 205025 bytes
[2014-11-07 11:00:49] :4329:1: warning: type specifier missing, defaults to 'int'
sqrProductScan320(uint32_t *out, uint32_t *op)
^

and so on...
Code:
:4670:1: warning: control reaches end of non-void function
}
^
:4671:1: warning: type specifier missing, defaults to 'int'
sqrProductScan352(uint32_t *out, uint32_t *op)
^
:5068:1: warning: control reaches end of non-void function
}
^
:6687:35: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to96(result, limbs, q);
                                  ^~~~~
:3715:53: note: passing argument to parameter 'op1' here
void mulProductScan352to96(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                    ^
:6687:42: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to96(result, limbs, q);
                                         ^
:3715:68: note: passing argument to parameter 'op2' here
void mulProductScan352to96(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                   ^
:6689:36: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to128(result, limbs, q);
                                   ^~~~~
:3881:54: note: passing argument to parameter 'op1' here
void mulProductScan352to128(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:6689:43: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to128(result, limbs, q);
                                          ^
:3881:69: note: passing argument to parameter 'op2' here
void mulProductScan352to128(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
:6691:36: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to192(result, limbs, q);
                                   ^~~~~
:4076:54: note: passing argument to parameter 'op1' here
void mulProductScan352to192(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:6691:43: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan352to192(result, limbs, q);
                                          ^
:4076:69: note: passing argument to parameter 'op2' here
void mulProductScan352to192(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
:6708:16: error: too few elements in vector initialization (expected 4 elements, have 2)
  uint4 q[2] = {0, 0};
               ^
:6747:17: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      monSqr352(redcl, limbs, inverted);
                ^~~~~
:2025:26: note: passing argument to parameter 'op' here
void monSqr352(uint32_t *op, uint32_t *mod, uint32_t invm)
                         ^
:6747:24: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      monSqr352(redcl, limbs, inverted);
                       ^~~~~
:2025:40: note: passing argument to parameter 'mod' here
void monSqr352(uint32_t *op, uint32_t *mod, uint32_t invm)
                                       ^
:6749:33: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    redcify352(index, q, limbs, m, windowSize);
                                ^
:6674:27: note: passing argument to parameter 'result' here
                uint32_t *result,
                          ^
:6750:15: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul352(redcl, m, limbs, inverted);
              ^~~~~
:2669:26: note: passing argument to parameter 'op1' here
void monMul352(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                         ^
:6750:22: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul352(redcl, m, limbs, inverted);
                     ^
:2669:41: note: passing argument to parameter 'op2' here
void monMul352(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                                        ^
:6750:25: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul352(redcl, m, limbs, inverted);
                        ^~~~~
:2669:56: note: passing argument to parameter 'mod' here
void monMul352(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                                                       ^
:6755:15: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
  redcHalf352(redcl, limbs, inverted);
              ^~~~~
:3313:28: note: passing argument to parameter 'op' here
void redcHalf352(uint32_t *op, uint32_t *mod, uint32_t invm)
                           ^
:6755:22: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
  redcHalf352(redcl, limbs, inverted);
                     ^~~~~
:3313:42: note: passing argument to parameter 'mod' here
void redcHalf352(uint32_t *op, uint32_t *mod, uint32_t invm)
                                         ^
:6776:35: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to96(result, limbs, q);
                                  ^~~~~
:1458:53: note: passing argument to parameter 'op1' here
void mulProductScan320to96(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                    ^
:6776:42: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to96(result, limbs, q);
                                         ^
:1458:68: note: passing argument to parameter 'op2' here
void mulProductScan320to96(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                   ^
:6778:36: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to128(result, limbs, q);
                                   ^~~~~
:1611:54: note: passing argument to parameter 'op1' here
void mulProductScan320to128(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:6778:43: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to128(result, limbs, q);
                                          ^
:1611:69: note: passing argument to parameter 'op2' here
void mulProductScan320to128(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
:6780:36: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to192(result, limbs, q);
                                   ^~~~~
:1791:54: note: passing argument to parameter 'op1' here
void mulProductScan320to192(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:6780:43: warning: incompatible pointer types passing 'uint4 [2]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    mulProductScan320to192(result, limbs, q);
                                          ^
:1791:69: note: passing argument to parameter 'op2' here
void mulProductScan320to192(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
:6795:16: error: too few elements in vector initialization (expected 4 elements, have 2)
  uint4 q[2] = {0, 0};
               ^
:6834:17: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      monSqr320(redcl, limbs, inverted);
                ^~~~~
:20:26: note: passing argument to parameter 'op' here
void monSqr320(uint32_t *op, uint32_t *mod, uint32_t invm)
                         ^
:6834:24: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      monSqr320(redcl, limbs, inverted);
                       ^~~~~
:20:40: note: passing argument to parameter 'mod' here
void monSqr320(uint32_t *op, uint32_t *mod, uint32_t invm)
                                       ^
:6835:33: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    redcify320(index, q, limbs, m, windowSize);
                                ^
:6762:27: note: passing argument to parameter 'result' here
                uint32_t *result,
                          ^
:6836:15: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul320(redcl, m, limbs, inverted);
              ^~~~~
:566:26: note: passing argument to parameter 'op1' here
void monMul320(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                         ^
:6836:22: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul320(redcl, m, limbs, inverted);
                     ^
:566:41: note: passing argument to parameter 'op2' here
void monMul320(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                                        ^
:6836:25: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
    monMul320(redcl, m, limbs, inverted);
                        ^~~~~
:566:56: note: passing argument to parameter 'mod' here
void monMul320(uint32_t *op1, uint32_t *op2, uint32_t *mod, uint32_t invm)
                                                       ^
:6841:15: warning: incompatible pointer types passing 'uint4 *' to parameter of type 'uint32_t *' (aka 'unsigned int *')
  redcHalf320(redcl, limbs, inverted);
              ^~~~~
:1112:28: note: passing argument to parameter 'op' here
void redcHalf320(uint32_t *op, uint32_t *mod, uint32_t invm)
                           ^
:6841:22: warning: incompatible pointer types passing 'uint4 *restrict' to parameter of type 'uint32_t *' (aka 'unsigned int *')
  redcHalf320(redcl, limbs, inverted);
                     ^~~~~
:1112:42: note: passing argument to parameter 'mod' here
void redcHalf320(uint32_t *op, uint32_t *mod, uint32_t invm)
                                         ^
:6846:17: warning: passing 'uint4 const *' to parameter of type 'uint4 *' discards qualifiers
  FermatTest352((const uint4*)p, modpowl);
                ^~~~~~~~~~~~~~~
:6700:36: note: passing argument to parameter 'limbs' here
void FermatTest352(uint4 *restrict limbs,
                                   ^
:6860:17: warning: passing 'uint4 const *' to parameter of type 'uint4 *' discards qualifiers
  FermatTest320((const uint4*)p, modpowl);
                ^~~~~~~~~~~~~~~
:6789:36: note: passing argument to parameter 'limbs' here
void FermatTest320(uint4 *restrict limbs, uint4 *redcl)
                                   ^
:7038:25: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint const *' (aka 'unsigned int const *')
        result[id] = fermat352(p);
                               ^
:6844:28: note: passing argument to parameter 'p' here
bool fermat352(const uint* p) {
                           ^
:7052:26: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint const *' (aka 'unsigned int const *')
  result[id] = fermat320(p);
                         ^
:6858:28: note: passing argument to parameter 'p' here
bool fermat320(const uint* p) {
                           ^
:7109:25: warning: incompatible pointer types passing 'uint4 [6]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      sqrProductScan320(result, op1v);
                        ^~~~~~
:4329:29: note: passing argument to parameter 'out' here
sqrProductScan320(uint32_t *out, uint32_t *op)
                            ^
:7109:33: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      sqrProductScan320(result, op1v);
                                ^~~~
:4329:44: note: passing argument to parameter 'op' here
sqrProductScan320(uint32_t *out, uint32_t *op)
                                           ^
:7144:25: warning: incompatible pointer types passing 'uint4 [6]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      sqrProductScan352(result, op1v);
                        ^~~~~~
:4671:29: note: passing argument to parameter 'out' here
sqrProductScan352(uint32_t *out, uint32_t *op)
                            ^
:7144:33: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      sqrProductScan352(result, op1v);
                                ^~~~
:4671:44: note: passing argument to parameter 'op' here
sqrProductScan352(uint32_t *out, uint32_t *op)
                                           ^
:7191:30: warning: incompatible pointer types passing 'uint4 [6]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan320to320(result, op1v, op2v);
                             ^~~~~~
:5069:39: note: passing argument to parameter 'out' here
void mulProductScan320to320(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                      ^
:7191:38: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan320to320(result, op1v, op2v);
                                     ^~~~
:5069:54: note: passing argument to parameter 'op1' here
void mulProductScan320to320(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:7191:44: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan320to320(result, op1v, op2v);
                                           ^~~~
:5069:69: note: passing argument to parameter 'op2' here
void mulProductScan320to320(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
:7236:30: warning: incompatible pointer types passing 'uint4 [6]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan352to352(result, op1v, op2v);
                             ^~~~~~
:5411:39: note: passing argument to parameter 'out' here
void mulProductScan352to352(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                      ^
:7236:38: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan352to352(result, op1v, op2v);
                                     ^~~~
:5411:54: note: passing argument to parameter 'op1' here
void mulProductScan352to352(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                     ^
:7236:44: warning: incompatible pointer types passing 'uint4 [3]' to parameter of type 'uint32_t *' (aka 'unsigned int *')
      mulProductScan352to352(result, op1v, op2v);
                                           ^~~~
:5411:69: note: passing argument to parameter 'op2' here
void mulProductScan352to352(uint32_t *out, uint32_t *op1, uint32_t *op2)
                                                                    ^
hero member
Activity: 910
Merit: 1000
record merit for the last day:
merit: 31.61372127
gap length: 6114
start prime: 9800893666818811479594732182521441591913618525100779877111253311731626918555735 48729
end prime: 9800893666818811479594732182521441591913618525100779877111253311731626918555735 54843
http://coinia.net/gapcoin/blockexplorer.php?q=9877

(c) http://coinia.net/gapcoin/stat.php
sr. member
Activity: 465
Merit: 250
No doubt it will be compiled soon.
member
Activity: 114
Merit: 10

I will merge nonce-pools stratum changes, and probably fix some bugs
at the weekend, and then create some binaries within the next week.

Tell me where and gpu miner himself with the exe file?

You either:

a) wait a week
b) compile it yourself.

Regards,

--
bsunau7
full member
Activity: 352
Merit: 100
Hi there,

i've managed to build a experimental gpu miner.
It got me about 200,000 pps with one R9 280x without any overclocking or powertune.

Currently the miner is very experimental and needs to be tested,
therefore I published the source code on github.

The miner is a hybrid version of eXtremals fermat test and GapMiners sieve.
The sieving is calculated on the cpu and the fermat tests are running on the GPU.
Currently it is very (host) memory hungry about 1GB and you have to use one instance
per gpu device.

You can get it with:

Code:
git clone https://github.com/gapcoin/GapMiner.git -b gpu-miner
cd GapMiner
git submodule init
git submodule update

It was built against amd app sdk v2.9 but maybe works with other versions too.
You can edit the Makefile to change the sdk destination directory.

I will merge nonce-pools stratum changes, and probably fix some bugs
at the weekend, and then create some binaries within the next week.

Tell me where and gpu miner himself with the exe file?
full member
Activity: 177
Merit: 154
Hi there,

i've managed to build a experimental gpu miner.
It got me about 200,000 pps with one R9 280x without any overclocking or powertune.

Currently the miner is very experimental and needs to be tested,
therefore I published the source code on github.

The miner is a hybrid version of eXtremals fermat test and GapMiners sieve.
The sieving is calculated on the cpu and the fermat tests are running on the GPU.
Currently it is very (host) memory hungry about 1GB and you have to use one instance
per gpu device.

You can get it with:

Code:
git clone https://github.com/gapcoin/GapMiner.git -b gpu-miner
cd GapMiner
git submodule init
git submodule update

It was built against amd app sdk v2.9 but maybe works with other versions too.
You can edit the Makefile to change the sdk destination directory.

I will merge nonce-pools stratum changes, and probably fix some bugs
at the weekend, and then create some binaries within the next week.
full member
Activity: 149
Merit: 100
We are currently testing a stratum server on port 3385 for those that can build from source.

https://github.com/noncepool/GapMiner
+1Who compiles it

Wouldn't be in any hurry to build it, likely might need some changes.

Note connection string should be similiar.
Code:
./gapminer -o mine3.gap.nonce-pool.com -p 3385 -u username.worker -x password --stratum
Pages:
Jump to: