Compare commits
No commits in common. "2c9e4d9dc34262f2c2e710d66d8cecafe9954f11" and "371a01efaa9d938da3d43db96ed629904325dc6e" have entirely different histories.
2c9e4d9dc3
...
371a01efaa
55
Day 15/Santa's workshop.html
Normal file
55
Day 15/Santa's workshop.html
Normal file
@ -0,0 +1,55 @@
|
||||
<!DOCTYPE html>
|
||||
<html xmlns="http://www.w3.org/1999/xhtml"><head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
|
||||
<title>Santa's workshop</title>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta charset="utf-8">
|
||||
<link href="Santa's%20workshop_files/bootstrap.css" rel="stylesheet">
|
||||
<link href="Santa's%20workshop_files/cover.css" rel="stylesheet">
|
||||
<script src="Santa's%20workshop_files/countUp.js" type="module"></script>
|
||||
<script src="Santa's%20workshop_files/count.js" type="module"></script>
|
||||
<script src="Santa's%20workshop_files/mqttws31.js" type="text/javascript"></script>
|
||||
<script src="Santa's%20workshop_files/jquery.js" type="text/javascript"></script>
|
||||
<script src="Santa's%20workshop_files/config.js" type="text/javascript"></script>
|
||||
<script src="Santa's%20workshop_files/mqtt.js" type="text/javascript"></script>
|
||||
<style>
|
||||
.bd-placeholder-img {
|
||||
font-size: 1.125rem;
|
||||
text-anchor: middle;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
}
|
||||
@media (min-width: 768px) {
|
||||
.bd-placeholder-img-lg {
|
||||
font-size: 3.5rem;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
<script type="text/javascript">
|
||||
var countUp
|
||||
$(document).ready(function() {
|
||||
MQTTconnect();
|
||||
$("body").click(function(){
|
||||
$(".alert").hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</head>
|
||||
<body class="text-center">
|
||||
<div id="alert"><div class="alert alert-warning" role="alert" style="display: none;">Uhm.. somebody is currently messing with me. Try refreshing the page. I lost connection but why? 🤔</div></div>
|
||||
<div class="cover-container d-flex w-100 h-100 p-3 mx-auto flex-column">
|
||||
<main role="main" class="inner cover">
|
||||
<h1 class="cover-heading">Ho Ho Ho</h1>
|
||||
<p class="lead">The elves in Santa's workshop <br>
|
||||
Are busy as can be<br>
|
||||
They all are working around the clock<br>
|
||||
On toys for you and me</p>
|
||||
<img style="float:left" src="Santa's%20workshop_files/gift.svg" width="200">
|
||||
<h1 style="margin-top: 2.5em;" id="gifts">7.347.622</h1><p class="lead">gifts built by the elves!</p>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
|
||||
</body></html>
|
7
Day 15/Santa's workshop_files/bootstrap.css
vendored
Normal file
7
Day 15/Santa's workshop_files/bootstrap.css
vendored
Normal file
File diff suppressed because one or more lines are too long
15
Day 15/Santa's workshop_files/config.js
Normal file
15
Day 15/Santa's workshop_files/config.js
Normal file
@ -0,0 +1,15 @@
|
||||
var mqtt;
|
||||
var reconnectTimeout = 100;
|
||||
var host = 'whale.hacking-lab.com';
|
||||
var port = 9001;
|
||||
var useTLS = false;
|
||||
var username = 'workshop';
|
||||
var password = '2fXc7AWINBXyruvKLiX';
|
||||
var clientid = localStorage.getItem("clientid");
|
||||
if (clientid == null) {
|
||||
clientid = ('' + (Math.round(Math.random() * 1000000000000000))).padStart(16, '0');
|
||||
localStorage.setItem("clientid", clientid);
|
||||
}
|
||||
// var topic = 'HV19/gifts/'+clientid;
|
||||
var topic = 'HV19/gifts/'+clientid+'/flag-tbd';
|
||||
var cleansession = true;
|
10
Day 15/Santa's workshop_files/count.js
Normal file
10
Day 15/Santa's workshop_files/count.js
Normal file
@ -0,0 +1,10 @@
|
||||
import { CountUp } from './countUp.js';
|
||||
const options = {
|
||||
separator: '.',
|
||||
};
|
||||
countUp = new CountUp('gifts', 0, options);
|
||||
if (!countUp.error) {
|
||||
countUp.start();
|
||||
} else {
|
||||
console.error(countUp.error);
|
||||
}
|
248
Day 15/Santa's workshop_files/countUp.js
Normal file
248
Day 15/Santa's workshop_files/countUp.js
Normal file
@ -0,0 +1,248 @@
|
||||
var __assign = (this && this.__assign) || function () {
|
||||
__assign = Object.assign || function(t) {
|
||||
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
||||
s = arguments[i];
|
||||
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
||||
t[p] = s[p];
|
||||
}
|
||||
return t;
|
||||
};
|
||||
return __assign.apply(this, arguments);
|
||||
};
|
||||
// playground: stackblitz.com/edit/countup-typescript
|
||||
var CountUp = /** @class */ (function () {
|
||||
function CountUp(target, endVal, options) {
|
||||
var _this = this;
|
||||
this.target = target;
|
||||
this.endVal = endVal;
|
||||
this.options = options;
|
||||
this.version = '2.0.4';
|
||||
this.defaults = {
|
||||
startVal: 0,
|
||||
decimalPlaces: 0,
|
||||
duration: 2,
|
||||
useEasing: true,
|
||||
useGrouping: true,
|
||||
smartEasingThreshold: 999,
|
||||
smartEasingAmount: 333,
|
||||
separator: ',',
|
||||
decimal: '.',
|
||||
prefix: '',
|
||||
suffix: ''
|
||||
};
|
||||
this.finalEndVal = null; // for smart easing
|
||||
this.useEasing = true;
|
||||
this.countDown = false;
|
||||
this.error = '';
|
||||
this.startVal = 0;
|
||||
this.paused = true;
|
||||
this.count = function (timestamp) {
|
||||
if (!_this.startTime) {
|
||||
_this.startTime = timestamp;
|
||||
}
|
||||
var progress = timestamp - _this.startTime;
|
||||
_this.remaining = _this.duration - progress;
|
||||
// to ease or not to ease
|
||||
if (_this.useEasing) {
|
||||
if (_this.countDown) {
|
||||
_this.frameVal = _this.startVal - _this.easingFn(progress, 0, _this.startVal - _this.endVal, _this.duration);
|
||||
}
|
||||
else {
|
||||
_this.frameVal = _this.easingFn(progress, _this.startVal, _this.endVal - _this.startVal, _this.duration);
|
||||
}
|
||||
}
|
||||
else {
|
||||
if (_this.countDown) {
|
||||
_this.frameVal = _this.startVal - ((_this.startVal - _this.endVal) * (progress / _this.duration));
|
||||
}
|
||||
else {
|
||||
_this.frameVal = _this.startVal + (_this.endVal - _this.startVal) * (progress / _this.duration);
|
||||
}
|
||||
}
|
||||
// don't go past endVal since progress can exceed duration in the last frame
|
||||
if (_this.countDown) {
|
||||
_this.frameVal = (_this.frameVal < _this.endVal) ? _this.endVal : _this.frameVal;
|
||||
}
|
||||
else {
|
||||
_this.frameVal = (_this.frameVal > _this.endVal) ? _this.endVal : _this.frameVal;
|
||||
}
|
||||
// decimal
|
||||
_this.frameVal = Math.round(_this.frameVal * _this.decimalMult) / _this.decimalMult;
|
||||
// format and print value
|
||||
_this.printValue(_this.frameVal);
|
||||
// whether to continue
|
||||
if (progress < _this.duration) {
|
||||
_this.rAF = requestAnimationFrame(_this.count);
|
||||
}
|
||||
else if (_this.finalEndVal !== null) {
|
||||
// smart easing
|
||||
_this.update(_this.finalEndVal);
|
||||
}
|
||||
else {
|
||||
if (_this.callback) {
|
||||
_this.callback();
|
||||
}
|
||||
}
|
||||
};
|
||||
// default format and easing functions
|
||||
this.formatNumber = function (num) {
|
||||
var neg = (num < 0) ? '-' : '';
|
||||
var result, x, x1, x2, x3;
|
||||
result = Math.abs(num).toFixed(_this.options.decimalPlaces);
|
||||
result += '';
|
||||
x = result.split('.');
|
||||
x1 = x[0];
|
||||
x2 = x.length > 1 ? _this.options.decimal + x[1] : '';
|
||||
if (_this.options.useGrouping) {
|
||||
x3 = '';
|
||||
for (var i = 0, len = x1.length; i < len; ++i) {
|
||||
if (i !== 0 && (i % 3) === 0) {
|
||||
x3 = _this.options.separator + x3;
|
||||
}
|
||||
x3 = x1[len - i - 1] + x3;
|
||||
}
|
||||
x1 = x3;
|
||||
}
|
||||
// optional numeral substitution
|
||||
if (_this.options.numerals && _this.options.numerals.length) {
|
||||
x1 = x1.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; });
|
||||
x2 = x2.replace(/[0-9]/g, function (w) { return _this.options.numerals[+w]; });
|
||||
}
|
||||
return neg + _this.options.prefix + x1 + x2 + _this.options.suffix;
|
||||
};
|
||||
this.easeOutExpo = function (t, b, c, d) {
|
||||
return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b;
|
||||
};
|
||||
this.options = __assign({}, this.defaults, options);
|
||||
this.formattingFn = (this.options.formattingFn) ?
|
||||
this.options.formattingFn : this.formatNumber;
|
||||
this.easingFn = (this.options.easingFn) ?
|
||||
this.options.easingFn : this.easeOutExpo;
|
||||
this.startVal = this.validateValue(this.options.startVal);
|
||||
this.frameVal = this.startVal;
|
||||
this.endVal = this.validateValue(endVal);
|
||||
this.options.decimalPlaces = Math.max(0 || this.options.decimalPlaces);
|
||||
this.decimalMult = Math.pow(10, this.options.decimalPlaces);
|
||||
this.resetDuration();
|
||||
this.options.separator = String(this.options.separator);
|
||||
this.useEasing = this.options.useEasing;
|
||||
if (this.options.separator === '') {
|
||||
this.options.useGrouping = false;
|
||||
}
|
||||
this.el = (typeof target === 'string') ? document.getElementById(target) : target;
|
||||
if (this.el) {
|
||||
this.printValue(this.startVal);
|
||||
}
|
||||
else {
|
||||
this.error = '[CountUp] target is null or undefined';
|
||||
}
|
||||
}
|
||||
// determines where easing starts and whether to count down or up
|
||||
CountUp.prototype.determineDirectionAndSmartEasing = function () {
|
||||
var end = (this.finalEndVal) ? this.finalEndVal : this.endVal;
|
||||
this.countDown = (this.startVal > end);
|
||||
var animateAmount = end - this.startVal;
|
||||
if (Math.abs(animateAmount) > this.options.smartEasingThreshold) {
|
||||
this.finalEndVal = end;
|
||||
var up = (this.countDown) ? 1 : -1;
|
||||
this.endVal = end + (up * this.options.smartEasingAmount);
|
||||
this.duration = this.duration / 2;
|
||||
}
|
||||
else {
|
||||
this.endVal = end;
|
||||
this.finalEndVal = null;
|
||||
}
|
||||
if (this.finalEndVal) {
|
||||
this.useEasing = false;
|
||||
}
|
||||
else {
|
||||
this.useEasing = this.options.useEasing;
|
||||
}
|
||||
};
|
||||
// start animation
|
||||
CountUp.prototype.start = function (callback) {
|
||||
if (this.error) {
|
||||
return;
|
||||
}
|
||||
this.callback = callback;
|
||||
if (this.duration > 0) {
|
||||
this.determineDirectionAndSmartEasing();
|
||||
this.paused = false;
|
||||
this.rAF = requestAnimationFrame(this.count);
|
||||
}
|
||||
else {
|
||||
this.printValue(this.endVal);
|
||||
}
|
||||
};
|
||||
// pause/resume animation
|
||||
CountUp.prototype.pauseResume = function () {
|
||||
if (!this.paused) {
|
||||
cancelAnimationFrame(this.rAF);
|
||||
}
|
||||
else {
|
||||
this.startTime = null;
|
||||
this.duration = this.remaining;
|
||||
this.startVal = this.frameVal;
|
||||
this.determineDirectionAndSmartEasing();
|
||||
this.rAF = requestAnimationFrame(this.count);
|
||||
}
|
||||
this.paused = !this.paused;
|
||||
};
|
||||
// reset to startVal so animation can be run again
|
||||
CountUp.prototype.reset = function () {
|
||||
cancelAnimationFrame(this.rAF);
|
||||
this.paused = true;
|
||||
this.resetDuration();
|
||||
this.startVal = this.validateValue(this.options.startVal);
|
||||
this.frameVal = this.startVal;
|
||||
this.printValue(this.startVal);
|
||||
};
|
||||
// pass a new endVal and start animation
|
||||
CountUp.prototype.update = function (newEndVal) {
|
||||
cancelAnimationFrame(this.rAF);
|
||||
this.startTime = null;
|
||||
this.endVal = this.validateValue(newEndVal);
|
||||
if (this.endVal === this.frameVal) {
|
||||
return;
|
||||
}
|
||||
this.startVal = this.frameVal;
|
||||
if (!this.finalEndVal) {
|
||||
this.resetDuration();
|
||||
}
|
||||
this.determineDirectionAndSmartEasing();
|
||||
this.rAF = requestAnimationFrame(this.count);
|
||||
};
|
||||
CountUp.prototype.printValue = function (val) {
|
||||
var result = this.formattingFn(val);
|
||||
if (this.el.tagName === 'INPUT') {
|
||||
var input = this.el;
|
||||
input.value = result;
|
||||
}
|
||||
else if (this.el.tagName === 'text' || this.el.tagName === 'tspan') {
|
||||
this.el.textContent = result;
|
||||
}
|
||||
else {
|
||||
this.el.innerHTML = result;
|
||||
}
|
||||
};
|
||||
CountUp.prototype.ensureNumber = function (n) {
|
||||
return (typeof n === 'number' && !isNaN(n));
|
||||
};
|
||||
CountUp.prototype.validateValue = function (value) {
|
||||
var newValue = Number(value);
|
||||
if (!this.ensureNumber(newValue)) {
|
||||
this.error = "[CountUp] invalid start or end value: " + value;
|
||||
return null;
|
||||
}
|
||||
else {
|
||||
return newValue;
|
||||
}
|
||||
};
|
||||
CountUp.prototype.resetDuration = function () {
|
||||
this.startTime = null;
|
||||
this.duration = Number(this.options.duration) * 1000;
|
||||
this.remaining = this.duration;
|
||||
};
|
||||
return CountUp;
|
||||
}());
|
||||
export { CountUp };
|
1
Day 15/Santa's workshop_files/cover.css
Normal file
1
Day 15/Santa's workshop_files/cover.css
Normal file
@ -0,0 +1 @@
|
||||
body,html{height:100%;background-color:#fff}body{display:-ms-flexbox;display:flex;color:#fff;text-shadow:0 .05rem .1rem rgba(0,0,0,.5);box-shadow:inset 0 0 5rem rgba(0,0,0,.5);background-image:url(bg.jpg);background-size:center;background-position:center;background-repeat:no-repeat}h1{color:#a90307}p{color:#000}.cover-container{max-width:42em}.cover{margin:auto 0;padding:0 1.5rem}.cover .btn-lg{padding:.75rem 1.25rem;font-weight:700}#alert{width:100%;position:fixed;top:0;z-index:99999}
|
48
Day 15/Santa's workshop_files/gift.svg
Normal file
48
Day 15/Santa's workshop_files/gift.svg
Normal file
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0" encoding="iso-8859-1"?>
|
||||
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
viewBox="0 0 280.071 280.071" style="enable-background:new 0 0 280.071 280.071;" xml:space="preserve">
|
||||
<g>
|
||||
<path style="fill:#BF392C;" d="M232.986,17.729C227.578,6.624,216.316,0,202.901,0C172.326,0,150.641,33.034,140,53.879
|
||||
C129.332,33.052,107.683,0.21,77.168,0.21c-19.357,0-33.393,13.791-33.393,32.492c0,33.166,31.634,54.807,95.227,54.807
|
||||
s97.283-27.81,97.283-54.535C236.276,27.67,235.305,22.463,232.986,17.729z M82.559,50.65
|
||||
c-9.258-5.531-12.557-11.726-12.557-15.699c0-5.075,5.399-8.751,12.837-8.751c17.922,0,40.849,29.438,48.558,43.842
|
||||
C110.745,68.502,89.612,54.868,82.559,50.65z M208.79,39.668c-4.647,9.381-29.219,28.073-59.917,30.365
|
||||
c7.745-14.404,30.715-43.842,48.357-43.842c6.826,0,10.746,2.958,12.111,5.723C210.426,34.12,210.243,36.736,208.79,39.668z"/>
|
||||
<path style="fill:#EFC75E;" d="M280.048,87.552H0.021v70.024h8.751V280.07h262.526V157.577h8.751
|
||||
C280.048,157.577,280.048,87.552,280.048,87.552z"/>
|
||||
<path style="fill:#D7B354;" d="M8.772,157.568h262.526v17.502H8.772V157.568z"/>
|
||||
<path style="fill:#BF392C;" d="M122.533,87.552h35.003v192.519h-35.003C122.533,280.071,122.533,87.552,122.533,87.552z"/>
|
||||
<rect x="122.533" y="157.568" style="fill:#AC3327;" width="35.003" height="17.502"/>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
<g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.6 KiB |
2
Day 15/Santa's workshop_files/jquery.js
vendored
Normal file
2
Day 15/Santa's workshop_files/jquery.js
vendored
Normal file
File diff suppressed because one or more lines are too long
47
Day 15/Santa's workshop_files/mqtt.js
Normal file
47
Day 15/Santa's workshop_files/mqtt.js
Normal file
@ -0,0 +1,47 @@
|
||||
function MQTTconnect() {
|
||||
if (typeof path == "undefined") {
|
||||
path = '';
|
||||
}
|
||||
mqtt = new Paho.MQTT.Client(
|
||||
host,
|
||||
port,
|
||||
path,
|
||||
clientid
|
||||
);
|
||||
var options = {
|
||||
timeout: 3,
|
||||
keepAliveInterval: 60,
|
||||
useSSL: useTLS,
|
||||
cleanSession: cleansession,
|
||||
onSuccess: onConnect,
|
||||
onFailure: function (message) {
|
||||
$('#status').val("Connection failed: " + message.errorMessage + "Retrying");
|
||||
setTimeout(MQTTconnect, reconnectTimeout);
|
||||
}
|
||||
};
|
||||
|
||||
mqtt.onConnectionLost = onConnectionLost;
|
||||
mqtt.onMessageArrived = onMessageArrived;
|
||||
|
||||
if (username != null) {
|
||||
options.userName = username;
|
||||
options.password = password;
|
||||
}
|
||||
mqtt.connect(options);
|
||||
}
|
||||
|
||||
function onConnect() {
|
||||
mqtt.subscribe(topic, {qos: 0});
|
||||
}
|
||||
|
||||
function onConnectionLost(response) {
|
||||
setTimeout(MQTTconnect, reconnectTimeout);
|
||||
$('#alert').html('<div class="alert alert-warning" role="alert">Uhm.. somebody is currently messing with me. Try refreshing the page. I lost connection but why? 🤔</div>');
|
||||
};
|
||||
|
||||
function onMessageArrived(message) {
|
||||
|
||||
//var topic = message.destinationName;
|
||||
var payload = message.payloadString;
|
||||
countUp.update(payload);
|
||||
};
|
2143
Day 15/Santa's workshop_files/mqttws31.js
Normal file
2143
Day 15/Santa's workshop_files/mqttws31.js
Normal file
File diff suppressed because it is too large
Load Diff
BIN
Day 18/dance/data/usr/bin/dance.id0
Normal file
BIN
Day 18/dance/data/usr/bin/dance.id0
Normal file
Binary file not shown.
BIN
Day 18/dance/data/usr/bin/dance.id1
Normal file
BIN
Day 18/dance/data/usr/bin/dance.id1
Normal file
Binary file not shown.
BIN
Day 18/dance/data/usr/bin/dance.nam
Normal file
BIN
Day 18/dance/data/usr/bin/dance.nam
Normal file
Binary file not shown.
BIN
Day 18/dance/data/usr/bin/dance.til
Normal file
BIN
Day 18/dance/data/usr/bin/dance.til
Normal file
Binary file not shown.
@ -1,65 +0,0 @@
|
||||
:10000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00
|
||||
:10001000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0
|
||||
:10002000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE0
|
||||
:10003000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD0
|
||||
:10004000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC0
|
||||
:10005000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFB0
|
||||
:10006000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA0
|
||||
:10007000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF90
|
||||
:10008000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF80
|
||||
:10009000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF70
|
||||
:1000A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF60
|
||||
:1000B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF50
|
||||
:1000C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40
|
||||
:1000D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF30
|
||||
:1000E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF20
|
||||
:1000F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF10
|
||||
:10010000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
|
||||
:10011000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEF
|
||||
:10012000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDF
|
||||
:10013000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCF
|
||||
:10014000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBF
|
||||
:10015000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAF
|
||||
:10016000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9F
|
||||
:10017000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8F
|
||||
:10018000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7F
|
||||
:10019000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6F
|
||||
:1001A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5F
|
||||
:1001B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4F
|
||||
:1001C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3F
|
||||
:1001D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2F
|
||||
:1001E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1F
|
||||
:1001F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0F
|
||||
:10020000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE
|
||||
:10021000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEE
|
||||
:10022000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDE
|
||||
:10023000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCE
|
||||
:10024000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBE
|
||||
:10025000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAE
|
||||
:10026000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9E
|
||||
:10027000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8E
|
||||
:10028000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7E
|
||||
:10029000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6E
|
||||
:1002A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5E
|
||||
:1002B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4E
|
||||
:1002C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3E
|
||||
:1002D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2E
|
||||
:1002E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1E
|
||||
:1002F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0E
|
||||
:10030000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFD
|
||||
:10031000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFED
|
||||
:10032000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFDD
|
||||
:10033000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFCD
|
||||
:10034000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFBD
|
||||
:10035000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFAD
|
||||
:10036000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF9D
|
||||
:10037000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF8D
|
||||
:10038000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7D
|
||||
:10039000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF6D
|
||||
:1003A000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF5D
|
||||
:1003B000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF4D
|
||||
:1003C000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF3D
|
||||
:1003D000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF2D
|
||||
:1003E000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF1D
|
||||
:1003F000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF0D
|
||||
:00000001FF
|
Binary file not shown.
Binary file not shown.
@ -1,6 +0,0 @@
|
||||
BUFFER = list(bytes.fromhex("09BC313A681AAB7247867EE64A1D6F042E74500D78063E"))
|
||||
|
||||
with open("rom.bin", "rb") as f:
|
||||
BUFFER2 = list(f.read(len(BUFFER)))
|
||||
|
||||
print("".join(chr(BUFFER[i] ^ BUFFER2[i]) for i in range(len(BUFFER))))
|
BIN
Day 24/rom.bin
BIN
Day 24/rom.bin
Binary file not shown.
@ -1,6 +0,0 @@
|
||||
# Hackvent-2019
|
||||
#### Writeup for Hacking-Lab's Hackvent 2019
|
||||
|
||||
This repository contains the code for solving the Hackvent challenges.
|
||||
The full writeup including descriptions and walkthroughs can be found on my website:
|
||||
[https://romanh.de/s/writeup/hackvent-2019](https://romanh.de/s/writeup/hackvent-2019).
|
Loading…
Reference in New Issue
Block a user